(self)
| 48 | |
| 49 | class TestInvertd(unittest.TestCase): |
| 50 | def test_invert(self): |
| 51 | set_determinism(seed=0) |
| 52 | im_fname, seg_fname = (make_nifti_image(i) for i in create_test_image_3d(101, 100, 107, noise_max=100)) |
| 53 | transform = Compose( |
| 54 | [ |
| 55 | LoadImaged(KEYS, image_only=True), |
| 56 | EnsureChannelFirstd(KEYS), |
| 57 | Orientationd(KEYS, "RPS"), |
| 58 | Spacingd(KEYS, pixdim=(1.2, 1.01, 0.9), mode=["bilinear", "nearest"], dtype=np.float32), |
| 59 | ScaleIntensityd("image", minv=1, maxv=10), |
| 60 | RandFlipd(KEYS, prob=0.5, spatial_axis=[1, 2]), |
| 61 | RandAxisFlipd(KEYS, prob=0.5), |
| 62 | RandRotate90d(KEYS, prob=0, spatial_axes=(1, 2)), |
| 63 | RandZoomd(KEYS, prob=0.5, min_zoom=0.5, max_zoom=1.1, keep_size=True), |
| 64 | RandRotated(KEYS, prob=0.5, range_x=np.pi, mode="bilinear", align_corners=True, dtype=np.float64), |
| 65 | RandAffined(KEYS, prob=0.5, rotate_range=np.pi, mode=["nearest", 0]), |
| 66 | ResizeWithPadOrCropd(KEYS, 100), |
| 67 | CastToTyped(KEYS, dtype=[torch.uint8, np.uint8]), |
| 68 | CopyItemsd("label", times=2, names=["label_inverted", "label_inverted1"]), |
| 69 | CopyItemsd("image", times=2, names=["image_inverted", "image_inverted1"]), |
| 70 | ] |
| 71 | ) |
| 72 | data = [{"image": im_fname, "label": seg_fname} for _ in range(12)] |
| 73 | |
| 74 | # num workers = 0 for mac or gpu transforms |
| 75 | num_workers = 0 if sys.platform != "linux" or torch.cuda.is_available() else 2 |
| 76 | |
| 77 | dataset = Dataset(data, transform=transform) |
| 78 | transform.inverse(dataset[0]) |
| 79 | loader = DataLoader(dataset, num_workers=num_workers, batch_size=1) |
| 80 | inverter = Invertd( |
| 81 | # `image` was not copied, invert the original value directly |
| 82 | keys=["image_inverted", "label_inverted"], |
| 83 | transform=transform, |
| 84 | orig_keys=["label", "label"], |
| 85 | nearest_interp=True, |
| 86 | device=None, |
| 87 | post_func=torch.as_tensor, |
| 88 | ) |
| 89 | |
| 90 | inverter_1 = Invertd( |
| 91 | # `image` was not copied, invert the original value directly |
| 92 | keys=["image_inverted1", "label_inverted1"], |
| 93 | transform=transform, |
| 94 | orig_keys=["image", "image"], |
| 95 | nearest_interp=[True, False], |
| 96 | device="cpu", |
| 97 | ) |
| 98 | |
| 99 | expected_keys = ["image", "image_inverted", "image_inverted1", "label", "label_inverted", "label_inverted1"] |
| 100 | # execute 1 epoch |
| 101 | for d in loader: |
| 102 | d = decollate_batch(d) |
| 103 | for item in d: |
| 104 | item = inverter(item) |
| 105 | item = inverter_1(item) |
| 106 | |
| 107 | self.assertListEqual(sorted(item), expected_keys) |
nothing calls this directly
no test coverage detected