def test_fei1_ext_header_with_native_byte_order(self): dtype = dtypes.get_ext_header_dtype(b'FEI1') assert dtype.itemsize == 768 assert utils.byte_orders_equal(dtype['Metadata size'].byteorder, '=') with self.assertRaises(KeyError): _ = dtype['Scan rotation'] # Bitmasks should always be little-endian assert utils.byte_orders_equal(dtype['Bitmask 1'].byteorder, '<') assert utils.byte_orders_equal(dtype['Bitmask 2'].byteorder, '<') assert utils.byte_orders_equal(dtype['Bitmask 3'].byteorder, '<') assert utils.byte_orders_equal(dtype['Bitmask 4'].byteorder, '<')
def test_header_byte_order_is_unchanged_by_data_with_native_order(self): data = np.arange(6, dtype=np.float32).reshape(3, 2) header = self.mrcobject.header original_mapc = int(header.mapc) assert utils.byte_orders_equal(header.mode.dtype.byteorder, data.dtype.byteorder) self.mrcobject.set_data(data) assert utils.byte_orders_equal(header.mode.dtype.byteorder, data.dtype.byteorder) assert header.mode == 2 assert header.mapc == original_mapc
def test_header_byte_order_is_changed_by_data_with_opposite_order(self): data = np.arange(6, dtype=np.float32).reshape(3, 2) orig_byte_order = data.dtype.byteorder header = self.mrcobject.header original_mapc = int(header.mapc) assert utils.byte_orders_equal(header.mode.dtype.byteorder, orig_byte_order) self.mrcobject.set_data(data.newbyteorder()) assert not utils.byte_orders_equal(header.mode.dtype.byteorder, orig_byte_order) assert header.mode == 2 assert header.mapc == original_mapc self.mrcobject.set_data(data) assert utils.byte_orders_equal(header.mode.dtype.byteorder, orig_byte_order) assert header.mode == 2 assert header.mapc == original_mapc
def test_fei2_ext_header_with_big_endian_byte_order(self): dtype = dtypes.get_ext_header_dtype(b'FEI2', '>') # Normal fields should match the requested byte order assert utils.byte_orders_equal(dtype['Metadata size'].byteorder, '>') assert utils.byte_orders_equal(dtype['Alpha tilt'].byteorder, '>') assert utils.byte_orders_equal(dtype['Scan rotation'].byteorder, '>') # Bitmasks should always be little-endian assert utils.byte_orders_equal(dtype['Bitmask 1'].byteorder, '<') assert utils.byte_orders_equal(dtype['Bitmask 2'].byteorder, '<') assert utils.byte_orders_equal(dtype['Bitmask 3'].byteorder, '<') assert utils.byte_orders_equal(dtype['Bitmask 4'].byteorder, '<')
def test_fei2_ext_header_with_native_byte_order(self): dtype = dtypes.get_ext_header_dtype(b'FEI2') assert dtype.itemsize == 888 assert utils.byte_orders_equal(dtype['Metadata size'].byteorder, '=') assert dtype['Scan rotation'] is not None assert utils.byte_orders_equal(dtype['Scan rotation'].byteorder, '=') # Bitmasks should always be little-endian assert utils.byte_orders_equal(dtype['Bitmask 1'].byteorder, '<') assert utils.byte_orders_equal(dtype['Bitmask 2'].byteorder, '<') assert utils.byte_orders_equal(dtype['Bitmask 3'].byteorder, '<') assert utils.byte_orders_equal(dtype['Bitmask 4'].byteorder, '<')
def test_equality_of_invalid_byte_orders(self): for pair in [('|', '<'), ('|', '>'), ('|', '='), ('<', '|'), ('>', '|'), ('=', '|'), ('|', '|')]: with self.assertRaisesRegex(ValueError, "Unrecognised byte order indicator"): utils.byte_orders_equal(*pair)
def test_unequal_byte_orders(self): assert not utils.byte_orders_equal('>', '<')
def test_big_byte_orders_equal(self): assert utils.byte_orders_equal('>', '>')
def test_little_byte_orders_equal(self): assert utils.byte_orders_equal('<', '<')
def test_big_byte_order_equals_native(self): assert utils.byte_orders_equal('>', '=') == (sys.byteorder == 'big')
def test_little_byte_order_equals_native(self): assert utils.byte_orders_equal('<', '=') == (sys.byteorder == 'little')
def test_native_byte_orders_equal(self): assert utils.byte_orders_equal('=', '=')