(
kernel,
input,
*args,
check_cuda_vs_cpu=True,
check_scripted_vs_eager=True,
check_batched_vs_unbatched=True,
**kwargs,
)
| 160 | |
| 161 | |
| 162 | def check_kernel( |
| 163 | kernel, |
| 164 | input, |
| 165 | *args, |
| 166 | check_cuda_vs_cpu=True, |
| 167 | check_scripted_vs_eager=True, |
| 168 | check_batched_vs_unbatched=True, |
| 169 | **kwargs, |
| 170 | ): |
| 171 | initial_input_version = input._version |
| 172 | |
| 173 | output = kernel(input.as_subclass(torch.Tensor), *args, **kwargs) |
| 174 | # Most kernels just return a tensor, but some also return some additional metadata |
| 175 | if not isinstance(output, torch.Tensor): |
| 176 | output, *_ = output |
| 177 | |
| 178 | # check that no inplace operation happened |
| 179 | assert input._version == initial_input_version |
| 180 | |
| 181 | if kernel not in {F.to_dtype_image, F.to_dtype_video}: |
| 182 | assert output.dtype == input.dtype |
| 183 | assert output.device == input.device |
| 184 | |
| 185 | if check_cuda_vs_cpu: |
| 186 | _check_kernel_cuda_vs_cpu(kernel, input, *args, **kwargs, **_to_tolerances(check_cuda_vs_cpu)) |
| 187 | |
| 188 | if check_scripted_vs_eager: |
| 189 | _check_kernel_scripted_vs_eager(kernel, input, *args, **kwargs, **_to_tolerances(check_scripted_vs_eager)) |
| 190 | |
| 191 | if check_batched_vs_unbatched: |
| 192 | _check_kernel_batched_vs_unbatched(kernel, input, *args, **kwargs, **_to_tolerances(check_batched_vs_unbatched)) |
| 193 | |
| 194 | |
| 195 | def _check_functional_scripted_smoke(functional, input, *args, **kwargs): |
no test coverage detected
searching dependent graphs…