| 541 | return data |
| 542 | |
| 543 | def inverse(self, data): |
| 544 | if len(self.transforms) == 0: |
| 545 | return data |
| 546 | |
| 547 | index = None |
| 548 | if isinstance(data, monai.data.MetaTensor): |
| 549 | index = self.pop_transform(data)[TraceKeys.EXTRA_INFO]["index"] |
| 550 | elif isinstance(data, Mapping): |
| 551 | for key in data: |
| 552 | if isinstance(data[key], monai.data.MetaTensor): |
| 553 | index = self.pop_transform(data, key)[TraceKeys.EXTRA_INFO]["index"] |
| 554 | else: |
| 555 | raise RuntimeError( |
| 556 | f"Inverse only implemented for Mapping (dictionary) or MetaTensor data, got type {type(data)}." |
| 557 | ) |
| 558 | if index is None: |
| 559 | # no invertible transforms have been applied |
| 560 | return data |
| 561 | |
| 562 | _transform = self.transforms[index] |
| 563 | # apply the inverse |
| 564 | return _transform.inverse(data) if isinstance(_transform, InvertibleTransform) else data |
| 565 | |
| 566 | |
| 567 | class RandomOrder(Compose): |