@@ -143,6 +143,25 @@ def xfail_jit_list_of_ints(name, *, reason=None):
143
143
)
144
144
145
145
146
+ def xfail_all_tests (* , reason , condition ):
147
+ return [
148
+ TestMark (("TestKernels" , test_name ), pytest .mark .xfail (reason = reason ), condition = condition )
149
+ for test_name in [
150
+ "test_scripted_vs_eager" ,
151
+ "test_batched_vs_single" ,
152
+ "test_no_inplace" ,
153
+ "test_cuda_vs_cpu" ,
154
+ "test_dtype_and_device_consistency" ,
155
+ ]
156
+ ]
157
+
158
+
159
+ xfails_image_degenerate_or_multi_batch_dims = xfail_all_tests (
160
+ reason = "See https://github.com/pytorch/vision/issues/6670 for details." ,
161
+ condition = lambda args_kwargs : len (args_kwargs .args [0 ].shape ) > 4 or not all (args_kwargs .args [0 ].shape [:- 3 ]),
162
+ )
163
+
164
+
146
165
KERNEL_INFOS = []
147
166
148
167
@@ -1093,11 +1112,7 @@ def sample_inputs_pad_video():
1093
1112
1094
1113
1095
1114
def sample_inputs_perspective_image_tensor ():
1096
- for image_loader in make_image_loaders (
1097
- sizes = ["random" ],
1098
- # FIXME: kernel should support arbitrary batch sizes
1099
- extra_dims = [(), (4 ,)],
1100
- ):
1115
+ for image_loader in make_image_loaders (sizes = ["random" ]):
1101
1116
for fill in [None , 128.0 , 128 , [12.0 ], [12.0 + c for c in range (image_loader .num_channels )]]:
1102
1117
yield ArgsKwargs (image_loader , fill = fill , perspective_coeffs = _PERSPECTIVE_COEFFS [0 ])
1103
1118
@@ -1117,11 +1132,7 @@ def sample_inputs_perspective_bounding_box():
1117
1132
1118
1133
1119
1134
def sample_inputs_perspective_mask ():
1120
- for mask_loader in make_mask_loaders (
1121
- sizes = ["random" ],
1122
- # FIXME: kernel should support arbitrary batch sizes
1123
- extra_dims = [(), (4 ,)],
1124
- ):
1135
+ for mask_loader in make_mask_loaders (sizes = ["random" ]):
1125
1136
yield ArgsKwargs (mask_loader , perspective_coeffs = _PERSPECTIVE_COEFFS [0 ])
1126
1137
1127
1138
@@ -1145,6 +1156,7 @@ def sample_inputs_perspective_video():
1145
1156
reference_fn = pil_reference_wrapper (F .perspective_image_pil ),
1146
1157
reference_inputs_fn = reference_inputs_perspective_image_tensor ,
1147
1158
closeness_kwargs = DEFAULT_IMAGE_CLOSENESS_KWARGS ,
1159
+ test_marks = xfails_image_degenerate_or_multi_batch_dims ,
1148
1160
),
1149
1161
KernelInfo (
1150
1162
F .perspective_bounding_box ,
@@ -1156,6 +1168,7 @@ def sample_inputs_perspective_video():
1156
1168
reference_fn = pil_reference_wrapper (F .perspective_image_pil ),
1157
1169
reference_inputs_fn = reference_inputs_perspective_mask ,
1158
1170
closeness_kwargs = DEFAULT_IMAGE_CLOSENESS_KWARGS ,
1171
+ test_marks = xfails_image_degenerate_or_multi_batch_dims ,
1159
1172
),
1160
1173
KernelInfo (
1161
1174
F .perspective_video ,
@@ -1170,11 +1183,7 @@ def _get_elastic_displacement(image_size):
1170
1183
1171
1184
1172
1185
def sample_inputs_elastic_image_tensor ():
1173
- for image_loader in make_image_loaders (
1174
- sizes = ["random" ],
1175
- # FIXME: kernel should support arbitrary batch sizes
1176
- extra_dims = [(), (4 ,)],
1177
- ):
1186
+ for image_loader in make_image_loaders (sizes = ["random" ]):
1178
1187
displacement = _get_elastic_displacement (image_loader .image_size )
1179
1188
for fill in [None , 128.0 , 128 , [12.0 ], [12.0 + c for c in range (image_loader .num_channels )]]:
1180
1189
yield ArgsKwargs (image_loader , displacement = displacement , fill = fill )
@@ -1205,11 +1214,7 @@ def sample_inputs_elastic_bounding_box():
1205
1214
1206
1215
1207
1216
def sample_inputs_elastic_mask ():
1208
- for mask_loader in make_mask_loaders (
1209
- sizes = ["random" ],
1210
- # FIXME: kernel should support arbitrary batch sizes
1211
- extra_dims = [(), (4 ,)],
1212
- ):
1217
+ for mask_loader in make_mask_loaders (sizes = ["random" ]):
1213
1218
displacement = _get_elastic_displacement (mask_loader .shape [- 2 :])
1214
1219
yield ArgsKwargs (mask_loader , displacement = displacement )
1215
1220
@@ -1234,6 +1239,7 @@ def sample_inputs_elastic_video():
1234
1239
reference_fn = pil_reference_wrapper (F .elastic_image_pil ),
1235
1240
reference_inputs_fn = reference_inputs_elastic_image_tensor ,
1236
1241
closeness_kwargs = DEFAULT_IMAGE_CLOSENESS_KWARGS ,
1242
+ test_marks = xfails_image_degenerate_or_multi_batch_dims ,
1237
1243
),
1238
1244
KernelInfo (
1239
1245
F .elastic_bounding_box ,
@@ -1245,6 +1251,7 @@ def sample_inputs_elastic_video():
1245
1251
reference_fn = pil_reference_wrapper (F .elastic_image_pil ),
1246
1252
reference_inputs_fn = reference_inputs_elastic_mask ,
1247
1253
closeness_kwargs = DEFAULT_IMAGE_CLOSENESS_KWARGS ,
1254
+ test_marks = xfails_image_degenerate_or_multi_batch_dims ,
1248
1255
),
1249
1256
KernelInfo (
1250
1257
F .elastic_video ,
@@ -1346,11 +1353,7 @@ def sample_inputs_center_crop_video():
1346
1353
1347
1354
def sample_inputs_gaussian_blur_image_tensor ():
1348
1355
make_gaussian_blur_image_loaders = functools .partial (
1349
- make_image_loaders ,
1350
- sizes = ["random" ],
1351
- color_spaces = [features .ColorSpace .RGB ],
1352
- # FIXME: kernel should support arbitrary batch sizes
1353
- extra_dims = [(), (4 ,)],
1356
+ make_image_loaders , sizes = ["random" ], color_spaces = [features .ColorSpace .RGB ]
1354
1357
)
1355
1358
1356
1359
for image_loader , kernel_size in itertools .product (make_gaussian_blur_image_loaders (), [5 , (3 , 3 ), [3 , 3 ]]):
@@ -1376,6 +1379,7 @@ def sample_inputs_gaussian_blur_video():
1376
1379
test_marks = [
1377
1380
xfail_jit_python_scalar_arg ("kernel_size" ),
1378
1381
xfail_jit_python_scalar_arg ("sigma" ),
1382
+ * xfails_image_degenerate_or_multi_batch_dims ,
1379
1383
],
1380
1384
),
1381
1385
KernelInfo (
@@ -1388,11 +1392,7 @@ def sample_inputs_gaussian_blur_video():
1388
1392
1389
1393
def sample_inputs_equalize_image_tensor ():
1390
1394
for image_loader in make_image_loaders (
1391
- sizes = ["random" ],
1392
- # FIXME: kernel should support arbitrary batch sizes
1393
- extra_dims = [(), (4 ,)],
1394
- color_spaces = (features .ColorSpace .GRAY , features .ColorSpace .RGB ),
1395
- dtypes = [torch .uint8 ],
1395
+ sizes = ["random" ], color_spaces = (features .ColorSpace .GRAY , features .ColorSpace .RGB ), dtypes = [torch .uint8 ]
1396
1396
):
1397
1397
yield ArgsKwargs (image_loader )
1398
1398
@@ -1418,6 +1418,7 @@ def sample_inputs_equalize_video():
1418
1418
reference_fn = pil_reference_wrapper (F .equalize_image_pil ),
1419
1419
reference_inputs_fn = reference_inputs_equalize_image_tensor ,
1420
1420
closeness_kwargs = DEFAULT_IMAGE_CLOSENESS_KWARGS ,
1421
+ test_marks = xfails_image_degenerate_or_multi_batch_dims ,
1421
1422
),
1422
1423
KernelInfo (
1423
1424
F .equalize_video ,
@@ -1594,8 +1595,6 @@ def sample_inputs_adjust_sharpness_image_tensor():
1594
1595
for image_loader in make_image_loaders (
1595
1596
sizes = ["random" , (2 , 2 )],
1596
1597
color_spaces = (features .ColorSpace .GRAY , features .ColorSpace .RGB ),
1597
- # FIXME: kernel should support arbitrary batch sizes
1598
- extra_dims = [(), (4 ,)],
1599
1598
):
1600
1599
yield ArgsKwargs (image_loader , sharpness_factor = _ADJUST_SHARPNESS_FACTORS [0 ])
1601
1600
@@ -1622,6 +1621,15 @@ def sample_inputs_adjust_sharpness_video():
1622
1621
reference_fn = pil_reference_wrapper (F .adjust_sharpness_image_pil ),
1623
1622
reference_inputs_fn = reference_inputs_adjust_sharpness_image_tensor ,
1624
1623
closeness_kwargs = DEFAULT_IMAGE_CLOSENESS_KWARGS ,
1624
+ test_marks = xfail_all_tests (
1625
+ reason = "See https://github.com/pytorch/vision/issues/6670 for details." ,
1626
+ condition = lambda args_kwargs : all (dim > 2 for dim in args_kwargs .args [0 ].shape [- 2 :])
1627
+ and (
1628
+ len (args_kwargs .args [0 ].shape ) > 4
1629
+ or not all (args_kwargs .args [0 ].shape [:- 4 ])
1630
+ or args_kwargs .args [0 ].shape [- 4 :- 2 ] == (0 , 3 )
1631
+ ),
1632
+ ),
1625
1633
),
1626
1634
KernelInfo (
1627
1635
F .adjust_sharpness_video ,
0 commit comments