| 239 | ) |
| 240 | |
| 241 | def inverse(self, data: torch.Tensor) -> torch.Tensor: |
| 242 | transform = self.pop_transform(data) |
| 243 | # Create inverse transform |
| 244 | kw_args = transform[TraceKeys.EXTRA_INFO] |
| 245 | # need to convert dtype from string back to torch.dtype |
| 246 | kw_args["dtype"] = get_torch_dtype_from_string(kw_args["dtype"]) |
| 247 | # source becomes destination |
| 248 | kw_args["dst_affine"] = kw_args.pop("src_affine") |
| 249 | kw_args["spatial_size"] = transform[TraceKeys.ORIG_SIZE] |
| 250 | if kw_args.get("align_corners") == TraceKeys.NONE: |
| 251 | kw_args["align_corners"] = False |
| 252 | with self.trace_transform(False): |
| 253 | # we can't use `self.__call__` in case a child class calls this inverse. |
| 254 | out: torch.Tensor = SpatialResample.__call__(self, data, **kw_args) |
| 255 | kw_args["src_affine"] = kw_args.get("dst_affine") |
| 256 | return out |
| 257 | |
| 258 | |
| 259 | class ResampleToMatch(SpatialResample): |