| 115 | self.assertEqual(inv.applied_operations, []) |
| 116 | |
| 117 | def pad_test_pending_ops(self, input_param, input_shape): |
| 118 | for mode in TESTS_PENDING_MODE: |
| 119 | # TODO: One of the dim in the input data contains 1 report error. |
| 120 | pad_fn = self.Padder(mode=mode[0], **input_param) |
| 121 | data = self.get_arr(input_shape) |
| 122 | is_map = isinstance(pad_fn, MapTransform) |
| 123 | im = MetaTensor(data, meta={"a": "b", "affine": np.eye(len(input_shape))}) |
| 124 | input_data = {"img": im} if is_map else im |
| 125 | # non-lazy |
| 126 | result_non_lazy = pad_fn(input_data) |
| 127 | expected = result_non_lazy["img"] if is_map else result_non_lazy |
| 128 | self.assertIsInstance(expected, MetaTensor) |
| 129 | # lazy |
| 130 | pad_fn.lazy = True |
| 131 | pending_result = pad_fn(input_data) |
| 132 | pending_result = pending_result["img"] if is_map else pending_result |
| 133 | self.assertIsInstance(pending_result, MetaTensor) |
| 134 | assert_allclose(pending_result.peek_pending_affine(), expected.affine) |
| 135 | assert_allclose(pending_result.peek_pending_shape(), expected.shape[1:]) |
| 136 | # TODO: mode="bilinear" may report error |
| 137 | overrides = {"mode": "nearest", "padding_mode": mode[1], "align_corners": False} |
| 138 | result = apply_pending(pending_result, overrides=overrides)[0] |
| 139 | # lazy in constructor |
| 140 | pad_fn_lazy = self.Padder(mode=mode[0], lazy=True, **input_param) |
| 141 | self.assertTrue(pad_fn_lazy.lazy) |
| 142 | # compare |
| 143 | assert_allclose(result, expected, rtol=1e-5) |
| 144 | if isinstance(result, MetaTensor) and not isinstance(pad_fn, MapTransform): |
| 145 | pad_fn.lazy = False |
| 146 | inverted = pad_fn.inverse(result) |
| 147 | self.assertTrue((not inverted.pending_operations) and (not inverted.applied_operations)) |
| 148 | self.assertEqual(inverted.shape, im.shape) |
| 149 | |
| 150 | def pad_test_combine_ops(self, funcs, input_shape, expected_shape): |
| 151 | for mode in TESTS_PENDING_MODE: |