Push to a stack of applied transforms of ``data``. Args: data: dictionary of data or `MetaTensor`. args: additional positional arguments to track_transform_meta. kwargs: additional keyword arguments to track_transform_meta, set ``
(self, data, *args, **kwargs)
| 130 | return dict(zip(self.transform_info_keys(), vals)) |
| 131 | |
| 132 | def push_transform(self, data, *args, **kwargs): |
| 133 | """ |
| 134 | Push to a stack of applied transforms of ``data``. |
| 135 | |
| 136 | Args: |
| 137 | data: dictionary of data or `MetaTensor`. |
| 138 | args: additional positional arguments to track_transform_meta. |
| 139 | kwargs: additional keyword arguments to track_transform_meta, |
| 140 | set ``replace=True`` (default False) to rewrite the last transform infor in |
| 141 | applied_operation/pending_operation based on ``self.get_transform_info()``. |
| 142 | """ |
| 143 | lazy_eval = kwargs.get("lazy", False) |
| 144 | transform_info = self.get_transform_info() |
| 145 | do_transform = transform_info.get(TraceKeys.DO_TRANSFORM, True) |
| 146 | kwargs = kwargs or {} |
| 147 | replace = kwargs.pop("replace", False) # whether to rewrite the most recently pushed transform info |
| 148 | if replace and get_track_meta() and isinstance(data, MetaTensor): |
| 149 | if not lazy_eval: |
| 150 | xform = self.pop_transform(data, check=False) if do_transform else {} |
| 151 | meta_obj = self.push_transform(data, orig_size=xform.get(TraceKeys.ORIG_SIZE), extra_info=xform) |
| 152 | return data.copy_meta_from(meta_obj) |
| 153 | if do_transform: |
| 154 | xform = data.pending_operations.pop() |
| 155 | extra = xform.copy() |
| 156 | xform.update(transform_info) |
| 157 | else: # lazy, replace=True, do_transform=False |
| 158 | xform, extra = transform_info, {} |
| 159 | meta_obj = self.push_transform(data, transform_info=xform, lazy=True, extra_info=extra) |
| 160 | return data.copy_meta_from(meta_obj) |
| 161 | kwargs["lazy"] = lazy_eval |
| 162 | if "transform_info" in kwargs and isinstance(kwargs["transform_info"], dict): |
| 163 | kwargs["transform_info"].update(transform_info) |
| 164 | else: |
| 165 | kwargs["transform_info"] = transform_info |
| 166 | meta_obj = TraceableTransform.track_transform_meta(data, *args, **kwargs) |
| 167 | return data.copy_meta_from(meta_obj) if isinstance(data, MetaTensor) else data |
| 168 | |
| 169 | @classmethod |
| 170 | def track_transform_meta( |