(self, data: torch.Tensor)
| 2358 | return mat |
| 2359 | |
| 2360 | def inverse(self, data: torch.Tensor) -> torch.Tensor: |
| 2361 | transform = self.pop_transform(data) |
| 2362 | orig_size = transform[TraceKeys.ORIG_SIZE] |
| 2363 | # Create inverse transform |
| 2364 | fwd_affine = transform[TraceKeys.EXTRA_INFO]["affine"] |
| 2365 | mode = transform[TraceKeys.EXTRA_INFO]["mode"] |
| 2366 | padding_mode = transform[TraceKeys.EXTRA_INFO]["padding_mode"] |
| 2367 | align_corners = transform[TraceKeys.EXTRA_INFO]["align_corners"] |
| 2368 | inv_affine = linalg_inv(convert_to_numpy(fwd_affine)) |
| 2369 | inv_affine = convert_to_dst_type(inv_affine, data, dtype=inv_affine.dtype)[0] |
| 2370 | |
| 2371 | affine_grid = AffineGrid(affine=inv_affine, align_corners=align_corners) |
| 2372 | grid, _ = affine_grid(orig_size) |
| 2373 | # Apply inverse transform |
| 2374 | out = self.resampler(data, grid, mode, padding_mode, align_corners=align_corners) |
| 2375 | if not isinstance(out, MetaTensor): |
| 2376 | out = MetaTensor(out) |
| 2377 | out.meta = data.meta # type: ignore |
| 2378 | affine = convert_data_type(out.peek_pending_affine(), torch.Tensor)[0] |
| 2379 | xform, *_ = convert_to_dst_type( |
| 2380 | Affine.compute_w_affine(len(affine) - 1, inv_affine, data.shape[1:], orig_size), affine |
| 2381 | ) |
| 2382 | out.affine @= xform |
| 2383 | return out |
| 2384 | |
| 2385 | |
| 2386 | class RandAffine(RandomizableTransform, InvertibleTransform, LazyTransform): |
nothing calls this directly
no test coverage detected