def test_buffered_slice_writer() -> None: test_img = np.arange(24 * 24).reshape(24, 24).astype(np.uint16) + 1 dtype = test_img.dtype origin = Vec3Int.zeros() layer_name = "color" mag = Mag(1) dataset_dir = TESTOUTPUT_DIR / "buffered_slice_writer" dataset_path = str(dataset_dir / layer_name / mag.to_layer_name()) rmtree(dataset_dir) ds = Dataset(dataset_dir, voxel_size=(1, 1, 1)) mag_view = ds.add_layer("color", COLOR_CATEGORY, dtype_per_channel=dtype).add_mag(mag) with mag_view.get_buffered_slice_writer(absolute_offset=origin) as writer: for i in range(13): writer.send(test_img) with wkw.Dataset.open(dataset_path, wkw.Header(dtype)) as data: try: read_data = data.read(origin, (24, 24, 13)) if read_data[read_data.nonzero()].size != 0: raise AssertionError( "Nothing should be written on the disk. But found data with shape: {}" .format(read_data.shape)) except wkw.wkw.WKWException: pass for i in range(13, 32): writer.send(test_img) with wkw.Dataset.open(dataset_path, wkw.Header(dtype)) as data: read_data = data.read(origin, (24, 24, 32)) assert np.squeeze(read_data).shape == (24, 24, 32), ( "The read data should have the shape: (24, 24, 32) " "but has a shape of: {}".format(np.squeeze(read_data).shape)) assert read_data.size == read_data[read_data.nonzero()].size, ( "The read data contains zeros while the " "written image has no zeros") for i in range(32, 35): writer.send(test_img) with wkw.Dataset.open(dataset_path, wkw.Header(dtype)) as data: read_data = data.read(origin, (24, 24, 35)) read_data = np.squeeze(read_data) assert read_data.shape == (24, 24, 35), ( "The read data should have the shape: (24, 24, 35) " "but has a shape of: {}".format(np.squeeze(read_data).shape)) assert read_data.size == read_data[read_data.nonzero()].size, ( "The read data contains zeros while the " "written image has no zeros") test_img_3d = np.zeros((test_img.shape[0], test_img.shape[1], 35)) for i in np.arange(35): test_img_3d[:, :, i] = test_img # check if the data are correct assert np.array_equal( test_img_3d, read_data), ("The data from the disk is not the same " "as the data that should be written.")
def test_mag_constructor() -> None: mag = Mag(16) assert mag.to_list() == [16, 16, 16] mag = Mag("256") assert mag.to_list() == [256, 256, 256] mag = Mag("16-2-4") assert mag.to_list() == [16, 2, 4] mag1 = Mag("16-2-4") mag2 = Mag("8-2-4") assert mag1 > mag2 assert mag1.to_layer_name() == "16-2-4" assert np.all(mag1.to_np() == np.array([16, 2, 4])) assert mag1 == Mag(mag1) assert mag1 == Mag(mag1.to_np())
def _setup_mag(self, mag: Mag) -> None: # This method is used to initialize the mag when opening the Dataset. This does not create e.g. the wk_header. mag_name = mag.to_layer_name() self._assert_mag_does_not_exist_yet(mag) try: cls_array = BaseArray.get_class(self._properties.data_format) info = cls_array.open( _find_mag_path_on_disk(self.dataset.path, self.name, mag_name)).info self._mags[mag] = MagView( self, mag, info.chunk_size, info.chunks_per_shard, info.compression_mode, ) self._mags[mag]._read_only = self._dataset.read_only except ArrayException as e: logging.error( f"Failed to setup magnification {mag_name}, which is specified in the datasource-properties.json. See {e}" )