| 680 | return orientation(data_array, affine_np, spatial_ornt, lazy=lazy_, transform_info=self.get_transform_info()) |
| 681 | |
| 682 | def inverse(self, data: torch.Tensor) -> torch.Tensor: |
| 683 | transform = self.pop_transform(data) |
| 684 | # Create inverse transform |
| 685 | orig_affine = transform[TraceKeys.EXTRA_INFO]["original_affine"] |
| 686 | labels = self.labels |
| 687 | |
| 688 | # Set up "labels" such that LPS tensors are handled correctly by default |
| 689 | if ( |
| 690 | isinstance(data, MetaTensor) |
| 691 | and self.labels is None |
| 692 | and "space" in data.meta |
| 693 | and SpaceKeys(data.meta["space"]) == SpaceKeys.LPS |
| 694 | ): |
| 695 | labels = (("R", "L"), ("A", "P"), ("I", "S")) # value for LPS |
| 696 | |
| 697 | orig_axcodes = nib.orientations.aff2axcodes(orig_affine, labels=labels) |
| 698 | inverse_transform = Orientation(axcodes=orig_axcodes, as_closest_canonical=False, labels=labels) |
| 699 | # Apply inverse |
| 700 | with inverse_transform.trace_transform(False): |
| 701 | data = inverse_transform(data) |
| 702 | |
| 703 | return data |
| 704 | |
| 705 | |
| 706 | class Flip(InvertibleTransform, LazyTransform): |