From 7e8f073733687d5a3c30b018bd5f39d4eb545574 Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Mon, 24 Jun 2024 14:24:24 +0100 Subject: [PATCH 01/14] Add basic repr for TiledDataset Just uses ds[0, 0] for now for ease of putting something together. Closes #401 --- dkist/dataset/tiled_dataset.py | 12 ++++++++++++ dkist/dataset/utils.py | 13 ++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/dkist/dataset/tiled_dataset.py b/dkist/dataset/tiled_dataset.py index c4aad0e55..58a6209c1 100644 --- a/dkist/dataset/tiled_dataset.py +++ b/dkist/dataset/tiled_dataset.py @@ -5,6 +5,7 @@ but not representable in a single NDCube derived object as the array data are not contiguous in the spatial dimensions (due to overlaps and offsets). """ +from textwrap import dedent from collections.abc import Collection import matplotlib.pyplot as plt @@ -13,6 +14,7 @@ from astropy.table import vstack from .dataset import Dataset +from .utils import dataset_info_str __all__ = ["TiledDataset"] @@ -152,3 +154,13 @@ def plot(self, slice_index: int, share_zscale=False, **kwargs): return fig # TODO: def regrid() + + def __repr__(self): + """ + Overload the NDData repr because it does not play nice with the dask delayed io. + """ + prefix = object.__repr__(self) + return dedent(f"{prefix}\n{self.__str__()}") + + def __str__(self): + return dataset_info_str(self) diff --git a/dkist/dataset/utils.py b/dkist/dataset/utils.py index bd29f20cf..e0111b5e2 100644 --- a/dkist/dataset/utils.py +++ b/dkist/dataset/utils.py @@ -10,6 +10,13 @@ def dataset_info_str(ds): + # Check for an attribute that only appears on TiledDataset + # Not using isinstance to avoid circular import + is_tiled = hasattr(ds, "combined_headers") + dstype = type(ds).__name__ + if is_tiled: + tile_shape = ds.shape + ds = ds[0, 0] wcs = ds.wcs.low_level_wcs # Pixel dimensions table @@ -18,7 +25,11 @@ def dataset_info_str(ds): if instr: instr += " " - s = f"This {instr}Dataset has {wcs.pixel_n_dim} pixel and {wcs.world_n_dim} world dimensions\n\n" + if is_tiled: + s = f"This {dstype} consists of an array of {tile_shape} Dataset objects\n\n" + s += f"Each {instr}Dataset has {wcs.pixel_n_dim} pixel and {wcs.world_n_dim} world dimensions\n\n" + else: + s = f"This {instr}Dataset has {wcs.pixel_n_dim} pixel and {wcs.world_n_dim} world dimensions\n\n" s += f"{ds.data}\n\n" array_shape = wcs.array_shape or (0,) From 35c05826eb3ffe3dc0779e4b82863c54a04c6e83 Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Thu, 27 Jun 2024 16:18:23 +0100 Subject: [PATCH 02/14] Add tiles_shape property --- dkist/dataset/tiled_dataset.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dkist/dataset/tiled_dataset.py b/dkist/dataset/tiled_dataset.py index 58a6209c1..64222ea99 100644 --- a/dkist/dataset/tiled_dataset.py +++ b/dkist/dataset/tiled_dataset.py @@ -127,6 +127,13 @@ def shape(self): """ return self._data.shape + @property + def tiles_shape(self): + """ + The shape of each individual tile in the TiledDataset. + """ + return [[tile.shape for tile in row] for row in self] + def plot(self, slice_index: int, share_zscale=False, **kwargs): vmin, vmax = np.inf, 0 fig = plt.figure() From 95215538e1f1e125ee88f6dd1e23d8cf5ceb604d Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Thu, 27 Jun 2024 16:18:53 +0100 Subject: [PATCH 03/14] Add changelog --- changelog/402.feature.rst | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 changelog/402.feature.rst diff --git a/changelog/402.feature.rst b/changelog/402.feature.rst new file mode 100644 index 000000000..56d8722c2 --- /dev/null +++ b/changelog/402.feature.rst @@ -0,0 +1,3 @@ +Add various features for easier inspection of `TiledDataset`: +- `__repr__` method to output basic dataset info; +- `tiles_shape` property to access data array shape for each individual tile. From 2e2a28309427660178a72552051c4db687d2faff Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Fri, 28 Jun 2024 10:15:19 +0100 Subject: [PATCH 04/14] Add method to slice all datasets --- dkist/dataset/tiled_dataset.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dkist/dataset/tiled_dataset.py b/dkist/dataset/tiled_dataset.py index 64222ea99..2df5f7374 100644 --- a/dkist/dataset/tiled_dataset.py +++ b/dkist/dataset/tiled_dataset.py @@ -160,6 +160,13 @@ def plot(self, slice_index: int, share_zscale=False, **kwargs): fig.suptitle(f"{self.inventory['instrumentName']} Dataset ({self.inventory['datasetId']}) at time {timestamp} (slice={slice_index})", y=0.95) return fig + def slice_tiles(self, slice_): + new_data = np.empty_like(self._data) + for i, row in enumerate(self._data): + for j, tile in enumerate(row): + new_data[i, j] = self[i, j][slice_] + return type(self)(new_data, self.inventory) + # TODO: def regrid() def __repr__(self): From 5e8873f0888f827baaeb3b649559f08563349913 Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Fri, 28 Jun 2024 14:25:53 +0100 Subject: [PATCH 05/14] Add new TiledDataset fixture because the old one wasn't behaving itself --- dkist/conftest.py | 9 +++++++++ dkist/data/test/large_vbi.asdf.gz | Bin 0 -> 96895 bytes 2 files changed, 9 insertions(+) create mode 100644 dkist/data/test/large_vbi.asdf.gz diff --git a/dkist/conftest.py b/dkist/conftest.py index 36c5ea941..e77213a43 100644 --- a/dkist/conftest.py +++ b/dkist/conftest.py @@ -282,6 +282,15 @@ def simple_tiled_dataset(dataset): return TiledDataset(dataset_array, dataset.meta["inventory"]) +@pytest.fixture +def large_tiled_dataset(tmp_path_factory): + vbidir = tmp_path_factory.mktemp("data") + with gzip.open(Path(rootdir) / "large_vbi.asdf.gz", mode="rb") as gfo: + with open(vbidir / "test_vbi.asdf", mode="wb") as afo: + afo.write(gfo.read()) + return load_dataset(vbidir / "test_vbi.asdf") + + @pytest.fixture def small_visp_dataset(): """ diff --git a/dkist/data/test/large_vbi.asdf.gz b/dkist/data/test/large_vbi.asdf.gz new file mode 100644 index 0000000000000000000000000000000000000000..5146482c13b75a63529a5a3c77b3f4fd5b7bcec8 GIT binary patch literal 96895 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 CZ9xeD literal 0 HcmV?d00001 From b730c7929c9f88620ea62e097e2754a32d811f1b Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Fri, 28 Jun 2024 14:26:21 +0100 Subject: [PATCH 06/14] Add test for TiledDataset tile slicing --- dkist/dataset/tests/test_tiled_dataset.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dkist/dataset/tests/test_tiled_dataset.py b/dkist/dataset/tests/test_tiled_dataset.py index e6ed68b6e..6988b60da 100644 --- a/dkist/dataset/tests/test_tiled_dataset.py +++ b/dkist/dataset/tests/test_tiled_dataset.py @@ -28,6 +28,14 @@ def test_tiled_dataset_slice(simple_tiled_dataset, aslice): assert np.all(simple_tiled_dataset[aslice] == simple_tiled_dataset._data[aslice]) +@pytest.mark.parametrize("aslice", [np.s_[0, :100, 100:200]]) +def test_tiled_dataset_slice_tiles(large_tiled_dataset, aslice): + sliced = large_tiled_dataset.slice_tiles(aslice) + for i, tile in enumerate(sliced.flat): + # This will throw an AttributeError if you do tile.shape and I don't know why + assert tile.data.shape == (100, 100) + + def test_tiled_dataset_headers(simple_tiled_dataset, dataset): assert len(simple_tiled_dataset.combined_headers) == len(dataset.meta["headers"]) * 4 assert simple_tiled_dataset.combined_headers.colnames == dataset.meta["headers"].colnames From 477faade9ffd54ff0c4cc632714bf0feaeaf3c55 Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Fri, 28 Jun 2024 14:33:28 +0100 Subject: [PATCH 07/14] Add a basic test for TiledDataset.__repr__ Ripped off from the one for Dataset.__repr__ --- dkist/dataset/tests/test_tiled_dataset.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dkist/dataset/tests/test_tiled_dataset.py b/dkist/dataset/tests/test_tiled_dataset.py index 6988b60da..bcf9849b5 100644 --- a/dkist/dataset/tests/test_tiled_dataset.py +++ b/dkist/dataset/tests/test_tiled_dataset.py @@ -83,3 +83,7 @@ def test_tileddataset_plot(share_zscale): fig = plt.figure(figsize=(600, 800)) ds.plot(0, share_zscale=share_zscale) return plt.gcf() + +def test_repr(simple_tiled_dataset): + r = repr(simple_tiled_dataset) + assert str(simple_tiled_dataset[0, 0].data) in r From 9e137af58efefde2f2b93ee61436e29cab05c780 Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Mon, 1 Jul 2024 11:00:15 +0100 Subject: [PATCH 08/14] Apparently ndcube 2.1.2 doesn't allow `Dataset.shape` --- dkist/dataset/tiled_dataset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dkist/dataset/tiled_dataset.py b/dkist/dataset/tiled_dataset.py index 2df5f7374..54126f9a2 100644 --- a/dkist/dataset/tiled_dataset.py +++ b/dkist/dataset/tiled_dataset.py @@ -132,7 +132,7 @@ def tiles_shape(self): """ The shape of each individual tile in the TiledDataset. """ - return [[tile.shape for tile in row] for row in self] + return [[tile.data.shape for tile in row] for row in self] def plot(self, slice_index: int, share_zscale=False, **kwargs): vmin, vmax = np.inf, 0 From 8aec253dde9d3993ad9c779d3418c118c4dc5ac3 Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Mon, 1 Jul 2024 11:02:14 +0100 Subject: [PATCH 09/14] Test `tiles_shape` --- dkist/dataset/tests/test_tiled_dataset.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dkist/dataset/tests/test_tiled_dataset.py b/dkist/dataset/tests/test_tiled_dataset.py index bcf9849b5..4cc51d215 100644 --- a/dkist/dataset/tests/test_tiled_dataset.py +++ b/dkist/dataset/tests/test_tiled_dataset.py @@ -87,3 +87,7 @@ def test_tileddataset_plot(share_zscale): def test_repr(simple_tiled_dataset): r = repr(simple_tiled_dataset) assert str(simple_tiled_dataset[0, 0].data) in r + + +def test_tiles_shape(simple_tiled_dataset): + assert simple_tiled_dataset.tiles_shape == [[tile.data.shape for tile in row] for row in simple_tiled_dataset] From d2cec3c642f82f74c6c65eaf13da559e7162f59b Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Thu, 18 Jul 2024 14:29:51 +0100 Subject: [PATCH 10/14] Add external object for slicing TiledDataset tiles --- dkist/dataset/tests/test_tiled_dataset.py | 2 +- dkist/dataset/tiled_dataset.py | 25 +++++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/dkist/dataset/tests/test_tiled_dataset.py b/dkist/dataset/tests/test_tiled_dataset.py index 4cc51d215..ac1485b50 100644 --- a/dkist/dataset/tests/test_tiled_dataset.py +++ b/dkist/dataset/tests/test_tiled_dataset.py @@ -30,7 +30,7 @@ def test_tiled_dataset_slice(simple_tiled_dataset, aslice): @pytest.mark.parametrize("aslice", [np.s_[0, :100, 100:200]]) def test_tiled_dataset_slice_tiles(large_tiled_dataset, aslice): - sliced = large_tiled_dataset.slice_tiles(aslice) + sliced = large_tiled_dataset.slice_tiles[aslice] for i, tile in enumerate(sliced.flat): # This will throw an AttributeError if you do tile.shape and I don't know why assert tile.data.shape == (100, 100) diff --git a/dkist/dataset/tiled_dataset.py b/dkist/dataset/tiled_dataset.py index 54126f9a2..3cd9fe4a4 100644 --- a/dkist/dataset/tiled_dataset.py +++ b/dkist/dataset/tiled_dataset.py @@ -19,6 +19,21 @@ __all__ = ["TiledDataset"] +class TiledDatasetSlicer: + """ + Basic class to provide the slicing + """ + def __init__(self, data, inventory): + self.data = data + self.inventory = inventory + + def __getitem__(self, slice_): + new_data = [] + for tile in self.data.flat: + new_data.append(tile[slice_]) + return TiledDataset(np.array(new_data).reshape(self.data.shape), self.inventory) + + class TiledDataset(Collection): """ Holds a grid of `.Dataset` objects. @@ -67,6 +82,7 @@ def __init__(self, dataset_array, inventory=None): self._data = np.array(dataset_array, dtype=object) self._inventory = inventory or {} self._validate_component_datasets(self._data, inventory) + self._tile_slicer = TiledDatasetSlicer(self._data, self.inventory) def __contains__(self, x): return any(ele is x for ele in self._data.flat) @@ -160,12 +176,9 @@ def plot(self, slice_index: int, share_zscale=False, **kwargs): fig.suptitle(f"{self.inventory['instrumentName']} Dataset ({self.inventory['datasetId']}) at time {timestamp} (slice={slice_index})", y=0.95) return fig - def slice_tiles(self, slice_): - new_data = np.empty_like(self._data) - for i, row in enumerate(self._data): - for j, tile in enumerate(row): - new_data[i, j] = self[i, j][slice_] - return type(self)(new_data, self.inventory) + @property + def slice_tiles(self): + return self._tile_slicer # TODO: def regrid() From 9006c8e185f6f4fa9f5e0bfa918de5bba0aef0c9 Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Thu, 18 Jul 2024 14:36:16 +0100 Subject: [PATCH 11/14] Fix a thing --- dkist/dataset/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dkist/dataset/utils.py b/dkist/dataset/utils.py index e0111b5e2..ab3ea1c63 100644 --- a/dkist/dataset/utils.py +++ b/dkist/dataset/utils.py @@ -21,7 +21,7 @@ def dataset_info_str(ds): # Pixel dimensions table - instr = ds.meta.get("instrument_name", "") + instr = ds.inventory.get("instrument_name", "") if instr: instr += " " From 2ebfa41a9aa97a64505b7a2393e0d561e1614784 Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Thu, 18 Jul 2024 15:34:59 +0100 Subject: [PATCH 12/14] Minor tweak --- dkist/dataset/tiled_dataset.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dkist/dataset/tiled_dataset.py b/dkist/dataset/tiled_dataset.py index 3cd9fe4a4..f63cfc44f 100644 --- a/dkist/dataset/tiled_dataset.py +++ b/dkist/dataset/tiled_dataset.py @@ -82,7 +82,6 @@ def __init__(self, dataset_array, inventory=None): self._data = np.array(dataset_array, dtype=object) self._inventory = inventory or {} self._validate_component_datasets(self._data, inventory) - self._tile_slicer = TiledDatasetSlicer(self._data, self.inventory) def __contains__(self, x): return any(ele is x for ele in self._data.flat) @@ -178,7 +177,7 @@ def plot(self, slice_index: int, share_zscale=False, **kwargs): @property def slice_tiles(self): - return self._tile_slicer + return TiledDatasetSlicer(self._data, self.inventory) # TODO: def regrid() From 99b43b59d7b62d6da0ceb1c7cfbb72831ed025d7 Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Fri, 26 Jul 2024 10:29:34 +0100 Subject: [PATCH 13/14] Tweak --- dkist/dataset/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dkist/dataset/utils.py b/dkist/dataset/utils.py index ab3ea1c63..c2c6be6af 100644 --- a/dkist/dataset/utils.py +++ b/dkist/dataset/utils.py @@ -21,7 +21,7 @@ def dataset_info_str(ds): # Pixel dimensions table - instr = ds.inventory.get("instrument_name", "") + instr = ds.inventory.get("instrument", "") if instr: instr += " " From 77ebde1abf2c329173a42b11e645dea4502913ca Mon Sep 17 00:00:00 2001 From: Drew Leonard Date: Fri, 26 Jul 2024 11:51:14 +0100 Subject: [PATCH 14/14] Update changelog --- changelog/402.feature.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/changelog/402.feature.rst b/changelog/402.feature.rst index 56d8722c2..6a85791bb 100644 --- a/changelog/402.feature.rst +++ b/changelog/402.feature.rst @@ -1,3 +1,4 @@ Add various features for easier inspection of `TiledDataset`: - `__repr__` method to output basic dataset info; -- `tiles_shape` property to access data array shape for each individual tile. +- `tiles_shape` property to access data array shape for each individual tile; +- `slice_tiles()` method to apply the same slice to all datasets.