1212@pytest .mark .parametrize (
1313 ("model" , "length" , "ndim" , "n_channels" , "scale_factors" , "method" ),
1414 [
15- # (Image2DModel, 128, 2, 3, (2, 2), Methods.XARRAY_COARSEN),
16- # (Image3DModel, 32, 3, 3, (2, 2), Methods.XARRAY_COARSEN),
15+ (Image2DModel , 128 , 2 , 3 , (2 , 2 ), Methods .XARRAY_COARSEN ),
16+ (Image3DModel , 32 , 3 , 3 , (2 , 2 ), Methods .XARRAY_COARSEN ),
1717 (Labels2DModel , 128 , 2 , 0 , (2 , 2 ), Methods .DASK_IMAGE_NEAREST ),
1818 (Labels3DModel , 32 , 3 , 0 , (2 , 2 ), Methods .DASK_IMAGE_NEAREST ),
1919 ],
@@ -38,35 +38,27 @@ def test_to_multiscale_via_ome_zarr_scaler(model, length, ndim, n_channels, scal
3838 dims = model .dims
3939 dask_data = dask .array .from_array (array ).rechunk (CHUNK_SIZE )
4040
41- # # multiscale-spatial-image path (explicit method)
41+ # multiscale-spatial-image path (explicit method)
4242 result_msi = model .parse (dask_data , dims = dims , scale_factors = scale_factors , chunks = CHUNK_SIZE , method = method )
4343
4444 # ome-zarr-py scaler path (method=None triggers the ome-zarr-py scaler)
4545 result_ozp = model .parse (dask_data , dims = dims , scale_factors = scale_factors , chunks = CHUNK_SIZE )
4646
47- # ##
48- # from napari_spatialdata import Interactive
49- # from spatialdata import SpatialData
50- #
51- # sdata = SpatialData.init_from_elements({'msi': result_msi, 'ozp': result_ozp})
52- # Interactive(sdata)
53-
54- ##
55-
5647 # Compare data values at each scale level
57- import matplotlib .pyplot as plt
58- _ , axes = plt .subplots (len (result_msi .children ), 2 , figsize = (8 , 4 * len (result_msi .children )))
5948 for i , scale_name in enumerate (result_msi .children ):
6049 msi_arr = result_msi [scale_name ].ds ["image" ]
6150 ozp_arr = result_ozp [scale_name ].ds ["image" ]
6251 assert msi_arr .sizes == ozp_arr .sizes
63-
64- if msi_arr .ndim == 3 :
65- msi_arr = msi_arr [0 ]
66- ozp_arr = ozp_arr [0 ]
67- axes [i , 0 ].imshow (msi_arr .values )
68- axes [i , 1 ].imshow (ozp_arr .values )
69- pass
70- # np.testing.assert_allclose(msi_arr.values, ozp_arr.values)
71- plt .tight_layout ()
72- plt .show ()
52+ if model in [Image2DModel , Image3DModel ]:
53+ # exact comparison for images
54+ np .testing .assert_allclose (msi_arr .values , ozp_arr .values )
55+ else :
56+ if i == 0 :
57+ # no downscaling is performed, so they must be equal
58+ np .testing .assert_array_equal (msi_arr .values , ozp_arr .values )
59+ else :
60+ # we expect differences: ngff-zarr uses "nearest", ozp uses "resize"
61+ # TODO: when https://github.com/ome/ome-zarr-py/pull/516 is merged we can use nearest for labels and
62+ # expect a much stricter adherence
63+ fraction_non_equal = np .sum (msi_arr .values != ozp_arr .values ) / np .prod (msi_arr .values .shape )
64+ assert fraction_non_equal < 0.5
0 commit comments