@@ -4788,3 +4788,41 @@ def test_transform(self, make_input, dtype, device):
47884788 ),
47894789 make_input (dtype = dtype , device = device ),
47904790 )
4791+
4792+
4793+ class TestScaleJitter :
4794+ # Tests are light because this largely relies on the already tested `resize` kernels.
4795+
4796+ INPUT_SIZE = (17 , 11 )
4797+ TARGET_SIZE = (12 , 13 )
4798+
4799+ @pytest .mark .parametrize (
4800+ "make_input" ,
4801+ [make_image_tensor , make_image_pil , make_image , make_bounding_boxes , make_segmentation_mask , make_video ],
4802+ )
4803+ @pytest .mark .parametrize ("device" , cpu_and_cuda ())
4804+ def test_transform (self , make_input , device ):
4805+ if make_input is make_image_pil and device != "cpu" :
4806+ pytest .skip ("PIL image tests with parametrization device!='cpu' will degenerate to that anyway." )
4807+
4808+ check_transform (transforms .ScaleJitter (self .TARGET_SIZE ), make_input (self .INPUT_SIZE , device = device ))
4809+
4810+ def test__get_params (self ):
4811+ input_size = self .INPUT_SIZE
4812+ target_size = self .TARGET_SIZE
4813+ scale_range = (0.5 , 1.5 )
4814+
4815+ transform = transforms .ScaleJitter (target_size = target_size , scale_range = scale_range )
4816+ params = transform ._get_params ([make_image (input_size )])
4817+
4818+ assert "size" in params
4819+ size = params ["size" ]
4820+
4821+ assert isinstance (size , tuple ) and len (size ) == 2
4822+ height , width = size
4823+
4824+ r_min = min (target_size [1 ] / input_size [0 ], target_size [0 ] / input_size [1 ]) * scale_range [0 ]
4825+ r_max = min (target_size [1 ] / input_size [0 ], target_size [0 ] / input_size [1 ]) * scale_range [1 ]
4826+
4827+ assert int (input_size [0 ] * r_min ) <= height <= int (input_size [0 ] * r_max )
4828+ assert int (input_size [1 ] * r_min ) <= width <= int (input_size [1 ] * r_max )
0 commit comments