@@ -195,6 +195,27 @@ def test_raster_schema(
195195 with pytest .raises (ValueError ):
196196 model .parse (image , ** kwargs )
197197
198+ @pytest .mark .parametrize ("model" , [Labels2DModel , Labels3DModel ])
199+ def test_labels_model_with_multiscales (self , model ):
200+ # Passing "scale_factors" should generate multiscales with a "method" appropriate for labels
201+ dims = np .array (model .dims .dims ).tolist ()
202+ n_dims = len (dims )
203+
204+ # A labels image with one label value 4, that partially covers 2×2 blocks.
205+ # Downsampling with interpolation would produce values 1, 2, 3, 4.
206+ image : ArrayLike = np .array ([[0 , 0 , 0 , 0 ], [0 , 4 , 4 , 4 ], [4 , 4 , 4 , 4 ], [0 , 4 , 4 , 4 ]], dtype = np .uint16 )
207+ if n_dims == 3 :
208+ image = np .stack ([image ] * image .shape [0 ])
209+ actual = model .parse (image , scale_factors = (2 ,))
210+ assert isinstance (actual , DataTree )
211+ assert actual .children .keys () == {"scale0" , "scale1" }
212+ assert actual .scale0 .image .dtype == image .dtype
213+ assert actual .scale1 .image .dtype == image .dtype
214+ assert set (np .unique (image )) == set (np .unique (actual .scale0 .image )), "Scale0 should be preserved"
215+ assert set (np .unique (image )) >= set (
216+ np .unique (actual .scale1 .image )
217+ ), "Subsequent scales should not have interpolation artifacts"
218+
198219 @pytest .mark .parametrize ("model" , [ShapesModel ])
199220 @pytest .mark .parametrize ("path" , [POLYGON_PATH , MULTIPOLYGON_PATH , POINT_PATH ])
200221 def test_shapes_model (self , model : ShapesModel , path : Path ) -> None :
0 commit comments