def test_single_key_8(self): items = {"aaaaaaaa": np.array([1], dtype=np.int8)} descriptors, file_size = store.pack_items(items) d = descriptors[0] self.assertEqual(d.key_start, 128) self.assertEqual(d.key_len, 8) self.assertEqual(d.array_start, 136) self.assertEqual(d.array_len, 1)
def make_bad_item_types(self): items = {"a": []} descriptors, file_size = store.pack_items(items) num_types = len(store.np_dtype_to_type_map) for bad_type in [num_types + 1, 2 * num_types]: filename = os.path.join(self.destination_dir, f"bad_type_{bad_type}.kas") with open(filename, "wb") as f: descriptors[0].type = bad_type store.write_file(f, descriptors, file_size)
def test_bad_array_packing(self): items = {"a": np.arange(100, dtype=np.int8), "b": []} descriptors, file_size = store.pack_items(items) descriptors[0].array_start += 8 descriptors[0].array_len -= 8 with open(self.temp_file, "wb") as f: store.write_file(f, descriptors, file_size) with self.assertRaises(kas.FileFormatError): kas.load(self.temp_file, engine=self.engine, read_all=self.read_all)
def test_bad_key_non_sequential(self): items = {"a": np.arange(100), "b": []} # Keys must be packed sequentially. for offset in [-1, +1, 2, 100]: descriptors, file_size = store.pack_items(items) descriptors[1].key_start += offset self.assertRaises(kas.FileFormatError, kas.load, self.temp_file, engine=self.engine, read_all=self.read_all)
def test_bad_item_types(self): items = {"a": []} descriptors, file_size = store.pack_items(items) num_types = len(store.np_dtype_to_type_map) for bad_type in [num_types + 1, 2 * num_types]: with open(self.temp_file, "wb") as f: descriptors[0].type = bad_type store.write_file(f, descriptors, file_size) with self.assertRaises(kas.FileFormatError): kas.load(self.temp_file, engine=self.engine, read_all=self.read_all)
def test_bad_array_non_sequential(self): items = {"a": np.arange(100), "b": []} for offset in [-1, 1, 2, -8, 8, 100]: descriptors, file_size = store.pack_items(items) descriptors[1].array_start += offset with open(self.temp_file, "wb") as f: store.write_file(f, descriptors, file_size) self.assertRaises(kas.FileFormatError, kas.load, self.temp_file, engine=self.engine, read_all=self.read_all)
def test_bad_array_initial_offset(self): items = {"a": np.arange(100)} for offset in [-1, +1, 2, 8, 16, 100]: # First key offset must be at header_size + n * (descriptor_size) descriptors, file_size = store.pack_items(items) descriptors[0].array_start += offset with open(self.temp_file, "wb") as f: store.write_file(f, descriptors, file_size) self.assertRaises(kas.FileFormatError, kas.load, self.temp_file, engine=self.engine, read_all=self.read_all)
def test_two_keys_array_len4(self): a = np.array([1], dtype=np.int32) items = {"a": a, "b": a} descriptors, file_size = store.pack_items(items) d = descriptors[0] self.assertEqual(d.key_start, 192) self.assertEqual(d.key_len, 1) self.assertEqual(d.array_start, 200) self.assertEqual(d.array_len, 1) d = descriptors[1] self.assertEqual(d.key_start, 193) self.assertEqual(d.key_len, 1) self.assertEqual(d.array_start, 208) self.assertEqual(d.array_len, 1)
def test_descriptor_str(self): items = {"a": np.array([1], dtype=np.int8)} descriptors, file_size = store.pack_items(items) self.assertGreater(len(str(descriptors[0])), 0)