diff options
Diffstat (limited to 'src/silx/io/test/test_specfile.py')
-rw-r--r-- | src/silx/io/test/test_specfile.py | 171 |
1 files changed, 69 insertions, 102 deletions
diff --git a/src/silx/io/test/test_specfile.py b/src/silx/io/test/test_specfile.py index 748e31c..1b84a65 100644 --- a/src/silx/io/test/test_specfile.py +++ b/src/silx/io/test/test_specfile.py @@ -1,5 +1,5 @@ # /*########################################################################## -# Copyright (C) 2016-2021 European Synchrotron Radiation Facility +# Copyright (C) 2016-2023 European Synchrotron Radiation Facility # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -123,7 +123,7 @@ sftext = """#F /tmp/sf.dat loc = locale.getlocale(locale.LC_NUMERIC) try: - locale.setlocale(locale.LC_NUMERIC, 'de_DE.utf8') + locale.setlocale(locale.LC_NUMERIC, "de_DE.utf8") except locale.Error: try_DE = False else: @@ -135,25 +135,16 @@ class TestSpecFile(unittest.TestCase): @classmethod def setUpClass(cls): fd, cls.fname1 = tempfile.mkstemp(text=False) - if sys.version_info < (3, ): - os.write(fd, sftext) - else: - os.write(fd, bytes(sftext, 'ascii')) + os.write(fd, bytes(sftext, "ascii")) os.close(fd) fd2, cls.fname2 = tempfile.mkstemp(text=False) - if sys.version_info < (3, ): - os.write(fd2, sftext[370:923]) - else: - os.write(fd2, bytes(sftext[370:923], 'ascii')) + os.write(fd2, bytes(sftext[370:923], "ascii")) os.close(fd2) fd3, cls.fname3 = tempfile.mkstemp(text=False) txt = sftext[371:923] - if sys.version_info < (3, ): - os.write(fd3, txt) - else: - os.write(fd3, bytes(txt, 'ascii')) + os.write(fd3, bytes(txt, "ascii")) os.close(fd3) @classmethod @@ -186,58 +177,42 @@ class TestSpecFile(unittest.TestCase): SpecFile("doesnt_exist.dat") # test filename types unicode and bytes - if sys.version_info[0] < 3: - try: - SpecFile(self.fname1) - except TypeError: - self.fail("failed to handle filename as python2 str") - try: - SpecFile(unicode(self.fname1)) - except TypeError: - self.fail("failed to handle filename as python2 unicode") - else: - try: - SpecFile(self.fname1) - except TypeError: - self.fail("failed to handle filename as python3 str") - try: - SpecFile(bytes(self.fname1, 'utf-8')) - except TypeError: - self.fail("failed to handle filename as python3 bytes") + try: + SpecFile(self.fname1) + except TypeError: + self.fail("failed to handle filename as python3 str") + try: + SpecFile(bytes(self.fname1, "utf-8")) + except TypeError: + self.fail("failed to handle filename as python3 bytes") def test_number_of_scans(self): self.assertEqual(4, len(self.sf)) def test_list_of_scan_indices(self): - self.assertEqual(self.sf.list(), - [1, 25, 26, 1]) - self.assertEqual(self.sf.keys(), - ["1.1", "25.1", "26.1", "1.2"]) + self.assertEqual(self.sf.list(), [1, 25, 26, 1]) + self.assertEqual(self.sf.keys(), ["1.1", "25.1", "26.1", "1.2"]) def test_index_number_order(self): self.assertEqual(self.sf.index(1, 2), 3) # sf["1.2"]==sf[3] - self.assertEqual(self.sf.number(1), 25) # sf[1]==sf["25"] - self.assertEqual(self.sf.order(3), 2) # sf[3]==sf["1.2"] + self.assertEqual(self.sf.number(1), 25) # sf[1]==sf["25"] + self.assertEqual(self.sf.order(3), 2) # sf[3]==sf["1.2"] with self.assertRaises(specfile.SfErrScanNotFound): self.sf.index(3, 2) with self.assertRaises(specfile.SfErrScanNotFound): self.sf.index(99) def assertRaisesRegex(self, *args, **kwargs): - # Python 2 compatibility - if sys.version_info.major >= 3: - return super(TestSpecFile, self).assertRaisesRegex(*args, **kwargs) - else: - return self.assertRaisesRegexp(*args, **kwargs) + return super(TestSpecFile, self).assertRaisesRegex(*args, **kwargs) def test_getitem(self): self.assertIsInstance(self.sf[2], Scan) self.assertIsInstance(self.sf["1.2"], Scan) # int out of range - with self.assertRaisesRegex(IndexError, 'Scan index must be in ran'): + with self.assertRaisesRegex(IndexError, "Scan index must be in ran"): self.sf[107] # float indexing not allowed - with self.assertRaisesRegex(TypeError, 'The scan identification k'): + with self.assertRaisesRegex(TypeError, "The scan identification k"): self.sf[1.2] # non existant scan with "N.M" indexing with self.assertRaises(KeyError): @@ -247,8 +222,7 @@ class TestSpecFile(unittest.TestCase): i = 0 for scan in self.sf: if i == 1: - self.assertEqual(scan.motor_positions, - self.sf[1].motor_positions) + self.assertEqual(scan.motor_positions, self.sf[1].motor_positions) i += 1 # number of returned scans self.assertEqual(i, len(self.sf)) @@ -259,63 +233,64 @@ class TestSpecFile(unittest.TestCase): self.assertEqual(self.scan25.index, 1) def test_scan_headers(self): - self.assertEqual(self.scan25.scan_header_dict['S'], - "25 ascan c3th 1.33245 1.52245 40 0.15") - self.assertEqual(self.scan1.header[17], '#G0 0') + self.assertEqual( + self.scan25.scan_header_dict["S"], + "25 ascan c3th 1.33245 1.52245 40 0.15", + ) + self.assertEqual(self.scan1.header[17], "#G0 0") self.assertEqual(len(self.scan1.header), 29) # parsing headers with long keys - self.assertEqual(self.scan1.scan_header_dict['UMI0'], - 'Current AutoM Shutter') + self.assertEqual( + self.scan1.scan_header_dict["UMI0"], "Current AutoM Shutter" + ) # parsing empty headers - self.assertEqual(self.scan1.scan_header_dict['Q'], '') + self.assertEqual(self.scan1.scan_header_dict["Q"], "") # duplicate headers: concatenated (with newline) - self.assertEqual(self.scan1_2.scan_header_dict["U"], - "first duplicate line\nsecond duplicate line") + self.assertEqual( + self.scan1_2.scan_header_dict["U"], + "first duplicate line\nsecond duplicate line", + ) def test_file_headers(self): - self.assertEqual(self.scan1.header[1], - '#E 1455180875') - self.assertEqual(self.scan1.file_header_dict['F'], - '/tmp/sf.dat') + self.assertEqual(self.scan1.header[1], "#E 1455180875") + self.assertEqual(self.scan1.file_header_dict["F"], "/tmp/sf.dat") def test_multiple_file_headers(self): """Scan 1.2 is after the second file header, with a different Epoch""" - self.assertEqual(self.scan1_2.header[1], - '#E 1455180876') + self.assertEqual(self.scan1_2.header[1], "#E 1455180876") def test_scan_labels(self): - self.assertEqual(self.scan1.labels, - ['first column', 'second column', '3rd_col']) + self.assertEqual( + self.scan1.labels, ["first column", "second column", "3rd_col"] + ) def test_data(self): # data_line() and data_col() take 1-based indices as arg - self.assertAlmostEqual(self.scan1.data_line(1)[2], - 1.56) + self.assertAlmostEqual(self.scan1.data_line(1)[2], 1.56) # tests for data transposition between original file and .data attr - self.assertAlmostEqual(self.scan1.data[2, 0], - 8) + self.assertAlmostEqual(self.scan1.data[2, 0], 8) self.assertEqual(self.scan1.data.shape, (3, 4)) self.assertAlmostEqual(numpy.sum(self.scan1.data), 113.631) def test_data_column_by_name(self): - self.assertAlmostEqual(self.scan25.data_column_by_name("col2")[1], - 1.2) + self.assertAlmostEqual(self.scan25.data_column_by_name("col2")[1], 1.2) # Scan.data is transposed after readinq, so column is the first index - self.assertAlmostEqual(numpy.sum(self.scan25.data_column_by_name("col2")), - numpy.sum(self.scan25.data[2, :])) + self.assertAlmostEqual( + numpy.sum(self.scan25.data_column_by_name("col2")), + numpy.sum(self.scan25.data[2, :]), + ) with self.assertRaises(specfile.SfErrColNotFound): self.scan25.data_column_by_name("ygfxgfyxg") def test_motors(self): self.assertEqual(len(self.scan1.motor_names), 6) self.assertEqual(len(self.scan1.motor_positions), 6) - self.assertAlmostEqual(sum(self.scan1.motor_positions), - 223.385912) - self.assertEqual(self.scan1.motor_names[1], 'MRTSlit UP') + self.assertAlmostEqual(sum(self.scan1.motor_positions), 223.385912) + self.assertEqual(self.scan1.motor_names[1], "MRTSlit UP") self.assertAlmostEqual( - self.scan25.motor_position_by_name('MRTSlit UP'), - -1.66875) + self.scan25.motor_position_by_name("MRTSlit UP"), -1.66875 + ) def test_absence_of_file_header(self): """We expect Scan.file_header to be an empty list in the absence @@ -324,8 +299,7 @@ class TestSpecFile(unittest.TestCase): self.assertEqual(len(self.scan1_no_fhdr.motor_names), 0) # motor positions can still be read in the scan header # even in the absence of motor names - self.assertAlmostEqual(sum(self.scan1_no_fhdr.motor_positions), - 223.385912) + self.assertAlmostEqual(sum(self.scan1_no_fhdr.motor_positions), 223.385912) self.assertEqual(len(self.scan1_no_fhdr.header), 15) self.assertEqual(len(self.scan1_no_fhdr.scan_header), 15) self.assertEqual(len(self.scan1_no_fhdr.file_header), 0) @@ -337,8 +311,9 @@ class TestSpecFile(unittest.TestCase): self.assertEqual(len(self.scan1_no_fhdr_crash.motor_names), 0) # motor positions can still be read in the scan header # even in the absence of motor names - self.assertAlmostEqual(sum(self.scan1_no_fhdr_crash.motor_positions), - 223.385912) + self.assertAlmostEqual( + sum(self.scan1_no_fhdr_crash.motor_positions), 223.385912 + ) self.assertEqual(len(self.scan1_no_fhdr_crash.scan_header), 15) self.assertEqual(len(self.scan1_no_fhdr_crash.file_header), 0) @@ -349,8 +324,9 @@ class TestSpecFile(unittest.TestCase): self.assertEqual(sum(self.scan1_2.mca[2]), 21.7) # Negative indexing - self.assertEqual(sum(self.scan1_2.mca[len(self.scan1_2.mca) - 1]), - sum(self.scan1_2.mca[-1])) + self.assertEqual( + sum(self.scan1_2.mca[len(self.scan1_2.mca) - 1]), sum(self.scan1_2.mca[-1]) + ) # Test iterator line_count, total_sum = (0, 0) @@ -364,34 +340,26 @@ class TestSpecFile(unittest.TestCase): self.assertEqual(self.scan1.mca_header_dict, {}) self.assertEqual(len(self.scan1_2.mca_header_dict), 4) self.assertEqual(self.scan1_2.mca_header_dict["CALIB"], "1 2 3") - self.assertEqual(self.scan1_2.mca.calibration, - [[1., 2., 3.]]) + self.assertEqual(self.scan1_2.mca.calibration, [[1.0, 2.0, 3.0]]) # default calib in the absence of #@CALIB - self.assertEqual(self.scan25.mca.calibration, - [[0., 1., 0.]]) - self.assertEqual(self.scan1_2.mca.channels, - [[0, 1, 2]]) + self.assertEqual(self.scan25.mca.calibration, [[0.0, 1.0, 0.0]]) + self.assertEqual(self.scan1_2.mca.channels, [[0, 1, 2]]) # absence of #@CHANN and spectra - self.assertEqual(self.scan25.mca.channels, - []) + self.assertEqual(self.scan25.mca.channels, []) @testutils.validate_logging(specfile._logger.name, warning=1) def test_empty_scan(self): """Test reading a scan with no data points""" - self.assertEqual(len(self.empty_scan.labels), - 3) + self.assertEqual(len(self.empty_scan.labels), 3) col1 = self.empty_scan.data_column_by_name("second column") - self.assertEqual(col1.shape, (0, )) + self.assertEqual(col1.shape, (0,)) class TestSFLocale(unittest.TestCase): @classmethod def setUpClass(cls): fd, cls.fname = tempfile.mkstemp(text=False) - if sys.version_info < (3, ): - os.write(fd, sftext) - else: - os.write(fd, bytes(sftext, 'ascii')) + os.write(fd, bytes(sftext, "ascii")) os.close(fd) @classmethod @@ -401,19 +369,18 @@ class TestSFLocale(unittest.TestCase): def crunch_data(self): self.sf3 = SpecFile(self.fname) - self.assertAlmostEqual(self.sf3[0].data_line(1)[2], - 1.56) + self.assertAlmostEqual(self.sf3[0].data_line(1)[2], 1.56) self.sf3.close() @unittest.skipIf(not try_DE, "de_DE.utf8 locale not installed") def test_locale_de_DE(self): - locale.setlocale(locale.LC_NUMERIC, 'de_DE.utf8') + locale.setlocale(locale.LC_NUMERIC, "de_DE.utf8") self.crunch_data() def test_locale_user(self): - locale.setlocale(locale.LC_NUMERIC, '') # use user's preferred locale + locale.setlocale(locale.LC_NUMERIC, "") # use user's preferred locale self.crunch_data() def test_locale_C(self): - locale.setlocale(locale.LC_NUMERIC, 'C') # use default (C) locale + locale.setlocale(locale.LC_NUMERIC, "C") # use default (C) locale self.crunch_data() |