ngio 0.4.0a3__py3-none-any.whl → 0.4.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. ngio/__init__.py +1 -2
  2. ngio/common/__init__.py +2 -51
  3. ngio/common/_dimensions.py +253 -74
  4. ngio/common/_pyramid.py +42 -23
  5. ngio/common/_roi.py +49 -413
  6. ngio/common/_zoom.py +32 -7
  7. ngio/experimental/iterators/__init__.py +0 -2
  8. ngio/experimental/iterators/_abstract_iterator.py +246 -26
  9. ngio/experimental/iterators/_feature.py +90 -52
  10. ngio/experimental/iterators/_image_processing.py +24 -63
  11. ngio/experimental/iterators/_mappers.py +48 -0
  12. ngio/experimental/iterators/_rois_utils.py +4 -4
  13. ngio/experimental/iterators/_segmentation.py +38 -85
  14. ngio/images/_abstract_image.py +192 -95
  15. ngio/images/_create.py +16 -0
  16. ngio/images/_create_synt_container.py +10 -0
  17. ngio/images/_image.py +35 -9
  18. ngio/images/_label.py +26 -3
  19. ngio/images/_masked_image.py +45 -61
  20. ngio/images/_ome_zarr_container.py +33 -0
  21. ngio/io_pipes/__init__.py +75 -0
  22. ngio/io_pipes/_io_pipes.py +361 -0
  23. ngio/io_pipes/_io_pipes_masked.py +488 -0
  24. ngio/io_pipes/_io_pipes_roi.py +152 -0
  25. ngio/io_pipes/_io_pipes_types.py +56 -0
  26. ngio/io_pipes/_match_shape.py +376 -0
  27. ngio/io_pipes/_ops_axes.py +344 -0
  28. ngio/io_pipes/_ops_slices.py +446 -0
  29. ngio/io_pipes/_ops_slices_utils.py +196 -0
  30. ngio/io_pipes/_ops_transforms.py +104 -0
  31. ngio/io_pipes/_zoom_transform.py +175 -0
  32. ngio/ome_zarr_meta/__init__.py +4 -2
  33. ngio/ome_zarr_meta/ngio_specs/__init__.py +4 -4
  34. ngio/ome_zarr_meta/ngio_specs/_axes.py +129 -141
  35. ngio/ome_zarr_meta/ngio_specs/_dataset.py +47 -121
  36. ngio/ome_zarr_meta/ngio_specs/_ngio_image.py +30 -22
  37. ngio/ome_zarr_meta/ngio_specs/_pixel_size.py +17 -1
  38. ngio/ome_zarr_meta/v04/_v04_spec_utils.py +33 -30
  39. ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/nuclei.png +0 -0
  40. ngio/resources/__init__.py +1 -0
  41. ngio/resources/resource_model.py +1 -0
  42. ngio/{common/transforms → transforms}/__init__.py +1 -1
  43. ngio/transforms/_zoom.py +19 -0
  44. ngio/utils/_datasets.py +5 -0
  45. ngio/utils/_zarr_utils.py +5 -1
  46. {ngio-0.4.0a3.dist-info → ngio-0.4.0b1.dist-info}/METADATA +1 -1
  47. ngio-0.4.0b1.dist-info/RECORD +85 -0
  48. ngio/common/_array_io_pipes.py +0 -554
  49. ngio/common/_array_io_utils.py +0 -508
  50. ngio/common/transforms/_label.py +0 -12
  51. ngio/common/transforms/_zoom.py +0 -109
  52. ngio-0.4.0a3.dist-info/RECORD +0 -76
  53. {ngio-0.4.0a3.dist-info → ngio-0.4.0b1.dist-info}/WHEEL +0 -0
  54. {ngio-0.4.0a3.dist-info → ngio-0.4.0b1.dist-info}/licenses/LICENSE +0 -0
@@ -17,7 +17,7 @@ from ngio.ome_zarr_meta.ngio_specs._axes import (
17
17
  DefaultTimeUnit,
18
18
  SpaceUnits,
19
19
  TimeUnits,
20
- canonical_axes,
20
+ build_canonical_axes_handler,
21
21
  )
22
22
  from ngio.ome_zarr_meta.ngio_specs._channels import ChannelsMeta
23
23
  from ngio.ome_zarr_meta.ngio_specs._dataset import Dataset
@@ -55,13 +55,13 @@ class AbstractNgioImageMeta:
55
55
  raise NgioValidationError("At least one dataset must be provided.")
56
56
 
57
57
  self._datasets = datasets
58
- self._axes_mapper = datasets[0].axes_mapper
58
+ self._axes_handler = datasets[0].axes_handler
59
59
 
60
60
  def __repr__(self):
61
61
  class_name = type(self).__name__
62
62
  paths = [dataset.path for dataset in self.datasets]
63
- on_disk_axes = self.axes_mapper.axes_names
64
- return f"{class_name}(name={self.name}, datasets={paths}, axes={on_disk_axes})"
63
+ axes = self.axes_handler.axes_names
64
+ return f"{class_name}(name={self.name}, datasets={paths}, axes={axes})"
65
65
 
66
66
  @classmethod
67
67
  def default_init(
@@ -74,19 +74,20 @@ class AbstractNgioImageMeta:
74
74
  version: NgffVersions = DefaultNgffVersion,
75
75
  ):
76
76
  """Initialize the ImageMeta object."""
77
- axes = canonical_axes(
77
+ axes_handler = build_canonical_axes_handler(
78
78
  axes_names,
79
79
  space_units=pixel_size.space_unit,
80
80
  time_units=pixel_size.time_unit,
81
81
  )
82
82
 
83
83
  px_size_dict = pixel_size.as_dict()
84
- scale = [px_size_dict.get(ax.on_disk_name, 1.0) for ax in axes]
85
- translation = [0.0] * len(scale)
84
+ scale = [px_size_dict.get(name, 1.0) for name in axes_handler.axes_names]
86
85
 
87
86
  if scaling_factors is None:
88
87
  _default = {"x": 2.0, "y": 2.0}
89
- scaling_factors = [_default.get(ax.on_disk_name, 1.0) for ax in axes]
88
+ scaling_factors = [
89
+ _default.get(name, 1.0) for name in axes_handler.axes_names
90
+ ]
90
91
 
91
92
  if isinstance(levels, int):
92
93
  levels = [str(i) for i in range(levels)]
@@ -95,11 +96,9 @@ class AbstractNgioImageMeta:
95
96
  for level in levels:
96
97
  dataset = Dataset(
97
98
  path=level,
98
- on_disk_axes=axes,
99
- on_disk_scale=scale,
100
- on_disk_translation=translation,
101
- allow_non_canonical_axes=False,
102
- strict_canonical_order=True,
99
+ axes_handler=axes_handler,
100
+ scale=scale,
101
+ translation=None,
103
102
  )
104
103
  datasets.append(dataset)
105
104
  scale = [s * f for s, f in zip(scale, scaling_factors, strict=True)]
@@ -122,9 +121,18 @@ class AbstractNgioImageMeta:
122
121
  space_unit(str): The space unit to convert to.
123
122
  time_unit(str): The time unit to convert to.
124
123
  """
124
+ new_axes_handler = self.axes_handler.to_units(
125
+ space_unit=space_unit,
126
+ time_unit=time_unit,
127
+ )
125
128
  new_datasets = []
126
129
  for dataset in self.datasets:
127
- new_dataset = dataset.to_units(space_unit=space_unit, time_unit=time_unit)
130
+ new_dataset = Dataset(
131
+ path=dataset.path,
132
+ axes_handler=new_axes_handler,
133
+ scale=dataset.scale,
134
+ translation=dataset.translation,
135
+ )
128
136
  new_datasets.append(new_dataset)
129
137
 
130
138
  return type(self)(
@@ -149,9 +157,9 @@ class AbstractNgioImageMeta:
149
157
  return self._datasets
150
158
 
151
159
  @property
152
- def axes_mapper(self):
160
+ def axes_handler(self):
153
161
  """Return the axes mapper."""
154
- return self._axes_mapper
162
+ return self._axes_handler
155
163
 
156
164
  @property
157
165
  def levels(self) -> int:
@@ -166,12 +174,12 @@ class AbstractNgioImageMeta:
166
174
  @property
167
175
  def space_unit(self) -> str | None:
168
176
  """Get the space unit of the pixel size."""
169
- return self.datasets[0].pixel_size.space_unit
177
+ return self.axes_handler.space_unit
170
178
 
171
179
  @property
172
180
  def time_unit(self) -> str | None:
173
181
  """Get the time unit of the pixel size."""
174
- return self.datasets[0].pixel_size.time_unit
182
+ return self.axes_handler.time_unit
175
183
 
176
184
  def _get_dataset_by_path(self, path: str) -> Dataset:
177
185
  """Get a dataset by its path."""
@@ -321,11 +329,11 @@ class AbstractNgioImageMeta:
321
329
  def scaling_factor(self, path: str | None = None) -> list[float]:
322
330
  """Get the scaling factors from a dataset to its lower resolution."""
323
331
  if self.levels == 1:
324
- return [1.0] * len(self.axes_mapper.axes_names)
332
+ return [1.0] * len(self.axes_handler.axes_names)
325
333
  dataset, lr_dataset = self._get_closest_datasets(path=path)
326
334
 
327
335
  scaling_factors = []
328
- for ax_name in self.axes_mapper.axes_names:
336
+ for ax_name in self.axes_handler.axes_names:
329
337
  s_d = dataset.get_scale(ax_name)
330
338
  s_lr_d = lr_dataset.get_scale(ax_name)
331
339
  scaling_factors.append(s_lr_d / s_d)
@@ -359,8 +367,8 @@ class AbstractNgioImageMeta:
359
367
  return 1.0
360
368
  dataset, lr_dataset = self._get_closest_datasets(path=path)
361
369
 
362
- s_d = dataset.get_scale("z")
363
- s_lr_d = lr_dataset.get_scale("z")
370
+ s_d = dataset.get_scale("z", default=1.0)
371
+ s_lr_d = lr_dataset.get_scale("z", default=1.0)
364
372
  return s_lr_d / s_d
365
373
 
366
374
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  import math
4
4
  from functools import total_ordering
5
+ from typing import overload
5
6
 
6
7
  import numpy as np
7
8
 
@@ -84,10 +85,25 @@ class PixelSize:
84
85
  )
85
86
  return self.distance(ref) < other.distance(ref)
86
87
 
87
- def as_dict(self) -> dict:
88
+ def as_dict(self) -> dict[str, float]:
88
89
  """Return the pixel size as a dictionary."""
89
90
  return {"t": self.t, "z": self.z, "y": self.y, "x": self.x}
90
91
 
92
+ @overload
93
+ def get(self, axis: str, default: float) -> float: ...
94
+
95
+ @overload
96
+ def get(self, axis: str, default: None = None) -> float | None: ...
97
+
98
+ def get(self, axis: str, default: float | None = None) -> float | None:
99
+ """Get the pixel size for a given axis (in canonical name)."""
100
+ px_size = self.as_dict().get(axis, default)
101
+ if px_size is None:
102
+ raise ValueError(
103
+ f"Invalid axis name: {axis}, must be one of 'x', 'y', 'z', 't'."
104
+ )
105
+ return px_size
106
+
91
107
  @property
92
108
  def space_unit(self) -> SpaceUnits | str | None:
93
109
  """Return the space unit."""
@@ -26,6 +26,7 @@ from ome_zarr_models.v04.omero import Window as WindowV04
26
26
  from pydantic import ValidationError
27
27
 
28
28
  from ngio.ome_zarr_meta.ngio_specs import (
29
+ AxesHandler,
29
30
  AxesSetup,
30
31
  Axis,
31
32
  AxisType,
@@ -160,34 +161,38 @@ def _v04_to_ngio_datasets(
160
161
  v04_multiscale.coordinateTransformations, global_scale, global_translation
161
162
  )
162
163
 
163
- for v04_dataset in v04_multiscale.datasets:
164
- axes = []
165
- for v04_axis in v04_multiscale.axes:
166
- unit = v04_axis.unit
167
- if unit is not None and not isinstance(unit, str):
168
- unit = str(unit)
169
- axes.append(
170
- Axis(
171
- on_disk_name=v04_axis.name,
172
- axis_type=AxisType(v04_axis.type),
173
- # (for some reason the type is a generic JsonValue,
174
- # but it should be a string or None)
175
- unit=v04_axis.unit, # type: ignore
176
- )
164
+ # Prepare axes handler
165
+ axes = []
166
+ for v04_axis in v04_multiscale.axes:
167
+ unit = v04_axis.unit
168
+ if unit is not None and not isinstance(unit, str):
169
+ unit = str(unit)
170
+ axes.append(
171
+ Axis(
172
+ name=v04_axis.name,
173
+ axis_type=AxisType(v04_axis.type),
174
+ # (for some reason the type is a generic JsonValue,
175
+ # but it should be a string or None)
176
+ unit=v04_axis.unit, # type: ignore
177
177
  )
178
+ )
179
+ axes_handler = AxesHandler(
180
+ axes=axes,
181
+ axes_setup=axes_setup,
182
+ allow_non_canonical_axes=allow_non_canonical_axes,
183
+ strict_canonical_order=strict_canonical_order,
184
+ )
178
185
 
179
- _on_disk_scale, _on_disk_translation = _compute_scale_translation(
186
+ for v04_dataset in v04_multiscale.datasets:
187
+ _scale, _translation = _compute_scale_translation(
180
188
  v04_dataset.coordinateTransformations, global_scale, global_translation
181
189
  )
182
190
  datasets.append(
183
191
  Dataset(
184
192
  path=v04_dataset.path,
185
- on_disk_axes=axes,
186
- on_disk_scale=_on_disk_scale,
187
- on_disk_translation=_on_disk_translation,
188
- axes_setup=axes_setup,
189
- allow_non_canonical_axes=allow_non_canonical_axes,
190
- strict_canonical_order=strict_canonical_order,
193
+ axes_handler=axes_handler,
194
+ scale=_scale,
195
+ translation=_translation,
191
196
  )
192
197
  )
193
198
  return datasets
@@ -314,12 +319,12 @@ def _ngio_to_v04_multiscale(name: str | None, datasets: list[Dataset]) -> Multis
314
319
  Returns:
315
320
  MultiscaleV04: The v04 multiscale.
316
321
  """
317
- ax_mapper = datasets[0].axes_mapper
322
+ ax_mapper = datasets[0].axes_handler
318
323
  v04_axes = []
319
324
  for axis in ax_mapper.axes:
320
325
  v04_axes.append(
321
326
  AxisV04(
322
- name=axis.on_disk_name,
327
+ name=axis.name,
323
328
  type=axis.axis_type.value if axis.axis_type is not None else None,
324
329
  unit=axis.unit if axis.unit is not None else None,
325
330
  )
@@ -327,18 +332,16 @@ def _ngio_to_v04_multiscale(name: str | None, datasets: list[Dataset]) -> Multis
327
332
 
328
333
  v04_datasets = []
329
334
  for dataset in datasets:
330
- transform = [VectorScaleV04(type="scale", scale=list(dataset._on_disk_scale))]
331
- if sum(dataset._on_disk_translation) > 0:
335
+ transform = [VectorScaleV04(type="scale", scale=list(dataset._scale))]
336
+ if sum(dataset._translation) > 0:
332
337
  transform = (
333
- VectorScaleV04(type="scale", scale=list(dataset._on_disk_scale)),
338
+ VectorScaleV04(type="scale", scale=list(dataset._scale)),
334
339
  VectorTranslationV04(
335
- type="translation", translation=list(dataset._on_disk_translation)
340
+ type="translation", translation=list(dataset._translation)
336
341
  ),
337
342
  )
338
343
  else:
339
- transform = (
340
- VectorScaleV04(type="scale", scale=list(dataset._on_disk_scale)),
341
- )
344
+ transform = (VectorScaleV04(type="scale", scale=list(dataset._scale)),)
342
345
 
343
346
  v04_datasets.append(
344
347
  DatasetV04(path=dataset.path, coordinateTransformations=transform)
@@ -28,6 +28,7 @@ _resources = {
28
28
  / "mask.png",
29
29
  create_masking_table=True,
30
30
  ensure_unique_labels=False,
31
+ dtype="uint8",
31
32
  ),
32
33
  ],
33
34
  xy_pixelsize=0.325,
@@ -19,6 +19,7 @@ class LabelsInfo(BaseModel):
19
19
  label_path: Path
20
20
  ensure_unique_labels: bool = True
21
21
  create_masking_table: bool = False
22
+ dtype: str = "uint32"
22
23
 
23
24
 
24
25
  class SampleInfo(BaseModel):
@@ -1,5 +1,5 @@
1
1
  """Concrete IO transformations."""
2
2
 
3
- from ngio.common.transforms._zoom import ZoomTransform
3
+ from ngio.transforms._zoom import ZoomTransform
4
4
 
5
5
  __all__ = ["ZoomTransform"]
@@ -0,0 +1,19 @@
1
+ from ngio.common._zoom import (
2
+ InterpolationOrder,
3
+ )
4
+ from ngio.images._abstract_image import AbstractImage
5
+ from ngio.io_pipes._zoom_transform import BaseZoomTransform
6
+
7
+
8
+ class ZoomTransform(BaseZoomTransform):
9
+ def __init__(
10
+ self,
11
+ input_image: AbstractImage,
12
+ target_image: AbstractImage,
13
+ order: InterpolationOrder = "nearest",
14
+ ) -> None:
15
+ super().__init__(
16
+ input_dimensions=input_image.dimensions,
17
+ target_dimensions=target_image.dimensions,
18
+ order=order,
19
+ )
ngio/utils/_datasets.py CHANGED
@@ -38,6 +38,11 @@ class UnzipAndRename(pooch.Unzip):
38
38
  return None
39
39
 
40
40
  tmp_dir = Path(extract_dir) / "tmp"
41
+ # If tmp_dir exists, remove it
42
+ if tmp_dir.exists():
43
+ shutil.rmtree(tmp_dir, ignore_errors=True)
44
+ tmp_dir.mkdir(parents=True, exist_ok=True)
45
+
41
46
  super()._extract_file(fname, tmp_dir)
42
47
 
43
48
  list_extracted_dirs = tmp_dir.iterdir()
ngio/utils/_zarr_utils.py CHANGED
@@ -8,6 +8,7 @@ import zarr
8
8
  from filelock import BaseFileLock, FileLock
9
9
  from zarr.errors import ContainsGroupError, GroupNotFoundError
10
10
  from zarr.storage import DirectoryStore, FSStore, MemoryStore, Store, StoreLike
11
+ from zarr.types import DIMENSION_SEPARATOR
11
12
 
12
13
  from ngio.utils import NgioFileExistsError, NgioFileNotFoundError, NgioValueError
13
14
  from ngio.utils._errors import NgioError
@@ -342,6 +343,8 @@ class ZarrGroupHandler:
342
343
  shape: tuple[int, ...],
343
344
  dtype: str,
344
345
  chunks: tuple[int, ...] | None = None,
346
+ dimension_separator: DIMENSION_SEPARATOR = "/",
347
+ compressor: str = "default",
345
348
  overwrite: bool = False,
346
349
  ) -> zarr.Array:
347
350
  if self.mode == "r":
@@ -353,7 +356,8 @@ class ZarrGroupHandler:
353
356
  shape=shape,
354
357
  dtype=dtype,
355
358
  chunks=chunks,
356
- dimension_separator="/",
359
+ dimension_separator=dimension_separator,
360
+ compressor=compressor,
357
361
  overwrite=overwrite,
358
362
  )
359
363
  except ContainsGroupError as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ngio
3
- Version: 0.4.0a3
3
+ Version: 0.4.0b1
4
4
  Summary: Next Generation file format IO
5
5
  Project-URL: homepage, https://github.com/BioVisionCenter/ngio
6
6
  Project-URL: repository, https://github.com/BioVisionCenter/ngio
@@ -0,0 +1,85 @@
1
+ ngio/__init__.py,sha256=rEgnXuU6TCejUUGsxt4eKmjMhxjYh0fYBxWF4o5YjbE,1435
2
+ ngio/common/__init__.py,sha256=aPSuUbdGryrxbnlWrsVNe3LZoBAWC4GijR1BNH1UwuU,612
3
+ ngio/common/_dimensions.py,sha256=w8PYgyWxA8hgJETjFbw5CXf7WrasCL5FbzgfL1in86M,11361
4
+ ngio/common/_masking_roi.py,sha256=ZZTXordEZoq_ADk0OzADvq-5dPOwUBSuNobzFR8fpTw,5697
5
+ ngio/common/_pyramid.py,sha256=F5OI_mULxzMTpMeihC4Y22cjuB5GKN2jRdpwfMXJHiE,8018
6
+ ngio/common/_roi.py,sha256=DFI2BJdJ-JNC5uZARxlvL25ZYHb9HJhCP-sOID_Db20,10196
7
+ ngio/common/_synt_images_utils.py,sha256=B6uYOW1NyrM06YMR-csca3_YnAAkPRTbvnbLdy9tk9E,3188
8
+ ngio/common/_zoom.py,sha256=U01c-vqXjzZkrpd9Yvs24frVfTls_xPJeeaFCGmUwYI,6727
9
+ ngio/experimental/__init__.py,sha256=3pmBtHi-i8bKjTsvrOJM56ZyRX3Pv_dceCdt88-8COQ,147
10
+ ngio/experimental/iterators/__init__.py,sha256=TECOMGb5PEEZ0yXxt8pqIGvLKG41g_L1fTJU-zGPeV8,488
11
+ ngio/experimental/iterators/_abstract_iterator.py,sha256=7aAoMI-6vYGCMKxO3M10WpuBMTdqX4zr0K-TutAOp88,13195
12
+ ngio/experimental/iterators/_feature.py,sha256=g03yHIzYpTVeD3KUq2a4TwX29Dt48XaaGdZNSykYy7M,6749
13
+ ngio/experimental/iterators/_image_processing.py,sha256=cM7sL7xgdcjSOKAu-6367Aov89o6wgiJ_wqCGkU2Bsw,5091
14
+ ngio/experimental/iterators/_mappers.py,sha256=VVVsjems57wJUnWeufUFcgqa23k7VPeFL4Nc04HVw4o,1399
15
+ ngio/experimental/iterators/_rois_utils.py,sha256=Q-8lQ26neYn63h_RvfypYqvrq2UUN2O3xqVe57k_ufU,4363
16
+ ngio/experimental/iterators/_segmentation.py,sha256=xzotGvTn04HPeMeXZ_URnQqWco6d2lH6Ng6vkCUh9NM,9153
17
+ ngio/hcs/__init__.py,sha256=G8j9vD-liLeB_UeGtKYIgshWvJnUA6ks9GwjvWBLdHs,357
18
+ ngio/hcs/_plate.py,sha256=qfRwbCKaoz_AWTi8RDFFwOxy5geSknfJrPcqFVno9zI,44288
19
+ ngio/images/__init__.py,sha256=9Whvt7GTiCgT_vXaEEqGnDaY1-UsRk3dhLTv091F_g4,1211
20
+ ngio/images/_abstract_image.py,sha256=hrB9xn4MFRxnxE1d7HKnM8SXVPUGhMD9u32yBHTsFiU,18517
21
+ ngio/images/_create.py,sha256=61cuco2jUK25WzOY-Sel9s931FtGPL2ut25L9W10bJ4,10171
22
+ ngio/images/_create_synt_container.py,sha256=il_rr5_2KIQ5Xsskj2rb2fEm100ZErZq89aW06kn_7k,5444
23
+ ngio/images/_image.py,sha256=1WQOI26ITn1R2raR9JWVEhp6nKBE3ntXXAQr7EMTOEo,33054
24
+ ngio/images/_label.py,sha256=RIfXrLSKMQ-j8q-aaSiWeIwFEKdxAkQT1HbJNq4PJv0,11800
25
+ ngio/images/_masked_image.py,sha256=YhbBzgPZMav6rX0WYue1BaxAzEIsfaQrxUIOK6ZWZcw,18848
26
+ ngio/images/_ome_zarr_container.py,sha256=UJERXEgBkwclpLaHzWqUIQc6P-TG4zYuKuxPukJGa4Y,38433
27
+ ngio/images/_table_ops.py,sha256=jFv_AMqoB4JBpoWsMtZppZVW7dAOC_u-JpfNm8b33kY,15292
28
+ ngio/io_pipes/__init__.py,sha256=arW_7GWzZs82kPNKdm_6B1sIDFV0lWwp-ZaORr9Q1FQ,2412
29
+ ngio/io_pipes/_io_pipes.py,sha256=KuwMYofE11EKx0iplWXBQZ-eE1A9YpGDprWh98cUlAI,10710
30
+ ngio/io_pipes/_io_pipes_masked.py,sha256=077j1XNgyCNOHlOsbjPOWcLtb2ccFvbLp-cPzWL1j3c,16999
31
+ ngio/io_pipes/_io_pipes_roi.py,sha256=E_t3Lb5JD6zgsIok2w98xKks_6vhLIfaKDJIf2J95sA,4809
32
+ ngio/io_pipes/_io_pipes_types.py,sha256=xCeUd9rZe2wsgoZR1pUq6L4LSeawoPsb-9pmz5C6ztA,1393
33
+ ngio/io_pipes/_match_shape.py,sha256=eDy_Eqzld08m9zDuIjAvJnIhWh_HVjQS-5Pw9BMjdbw,13200
34
+ ngio/io_pipes/_ops_axes.py,sha256=Geg4ZXxB0njWWopX9YeiwRJJ9Ef2GKfG0NIUafOmi2c,10043
35
+ ngio/io_pipes/_ops_slices.py,sha256=7wBXucmIOW0a1r9MzEVevPOEefyhS27-yhaF8aeyD6Y,15804
36
+ ngio/io_pipes/_ops_slices_utils.py,sha256=mKbAEccwsQjg6XyyJ5Ph5Xr9z6pUUCO3tZ4Yal-wYMs,6590
37
+ ngio/io_pipes/_ops_transforms.py,sha256=uITs6v6sZ7DQ_Hpw3JdX8MuPOzir-bihvGzY84Qn4wY,2934
38
+ ngio/io_pipes/_zoom_transform.py,sha256=bUeFTeGUbz3Io4uArqyHXkvLZmuKsOri1lvMhDXWchA,6716
39
+ ngio/ome_zarr_meta/__init__.py,sha256=tzxW2oVhfeMBVuv3XkcbOLzMnbDvUnie-AVsvSxRkdE,1265
40
+ ngio/ome_zarr_meta/_meta_handlers.py,sha256=ctknNDT8jxwyvxQf9on5gW31H1tRRsnneO38GT2UXoE,25880
41
+ ngio/ome_zarr_meta/ngio_specs/__init__.py,sha256=U2FqZR91Ob2N6CqKdyw-_Ll-wMgmGuPZGVRCr6wuRFY,1698
42
+ ngio/ome_zarr_meta/ngio_specs/_axes.py,sha256=gNzxCddn53m9dlNJlV5CL-aQS-nGJrbCDGfAp5L97LY,16412
43
+ ngio/ome_zarr_meta/ngio_specs/_channels.py,sha256=CVsbG52U31TaMdTj8XqvClUdBya2Ar3qBjDo_xhP-NM,16967
44
+ ngio/ome_zarr_meta/ngio_specs/_dataset.py,sha256=CrHnjVWBGYPqErKkHR-E2DKrE3DmGznXMkd3Y9Z4uYo,3434
45
+ ngio/ome_zarr_meta/ngio_specs/_ngio_hcs.py,sha256=N1CGPOubwf0pvm8tiTnh-C1cOu9lToyDe3WagnEnPN4,17207
46
+ ngio/ome_zarr_meta/ngio_specs/_ngio_image.py,sha256=XmqeffYRspBZmv8gCrfJvnykmBViWgDo2AtJJkR7OEs,15886
47
+ ngio/ome_zarr_meta/ngio_specs/_pixel_size.py,sha256=SofMjLERvCxqP-ACxqyTEwYYAPeq0hjxt8Ujn4OZhZY,4656
48
+ ngio/ome_zarr_meta/v04/__init__.py,sha256=dJRzzxyYc81kf-0Hip_bqvbdManaM8XTdQX2meWyCSs,583
49
+ ngio/ome_zarr_meta/v04/_custom_models.py,sha256=5GxiDERvLuvq4QvApcA6EiKLS6hLFX1R0R_9rSaa85A,530
50
+ ngio/ome_zarr_meta/v04/_v04_spec_utils.py,sha256=OFMAKYvjhgCRhN_RNs8mJmOtyFHuw3k-lqOOrTRXvzU,15764
51
+ ngio/resources/__init__.py,sha256=4E4TXTNYEgRHt26C1XcC4pPobJJsmZRYm1Ml4uAuAkE,1664
52
+ ngio/resources/resource_model.py,sha256=eE1m0dyk-2psPC4X8Ifyan524QHUOd52TEQdvoU0m8I,861
53
+ ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/mask.png,sha256=g3QmxQdmeciAtBe5cTCRfR6yw3keG9cBYfjizMo6EGo,11890
54
+ ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/nuclei.png,sha256=Yw0k5pn2EHDMWTwyb7N51NX7WVk6-MlwfP9WZrhY-Ic,19446
55
+ ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/raw.jpg,sha256=82lejQAIokj5w9g-qqhysDTWpHtNvJTkdURG_BjqIxQ,37743
56
+ ngio/tables/__init__.py,sha256=_BV3sclNMLITu_J8_3DkkUrCB6Kro0HzeWLDCD1ivKM,877
57
+ ngio/tables/_abstract_table.py,sha256=rwGa47TzbFmosucBWVfFq6JEXtgGvOdUVtU9DIelV88,8204
58
+ ngio/tables/_tables_container.py,sha256=3xmpREaN671l40MPprnl1BD-VoOb6xfjECb5mNoMW0w,12173
59
+ ngio/tables/backends/__init__.py,sha256=MwSRXNF1rWQBFOTDA_vT3oGoNZpviVgytsL5Txnu08I,1619
60
+ ngio/tables/backends/_abstract_backend.py,sha256=54Vh9yPfLx1NixGVfFkW4msD51nsim0zIfHRnO80Xt8,7276
61
+ ngio/tables/backends/_anndata.py,sha256=97RWG4Hjc42JBxm-YxjHEU8HHd14NiayelKlI1PTsCo,2868
62
+ ngio/tables/backends/_anndata_utils.py,sha256=HsmP27fm7JW1kjahl4lUnnViK_iqmu2bnsu86z43U98,3116
63
+ ngio/tables/backends/_csv.py,sha256=Ev61D-AUKo4LIhXRmWPJgYbHI7eQdxiajQR574DevEM,932
64
+ ngio/tables/backends/_json.py,sha256=1ZsEuXDJm1rOZV_KjFm8CB0qhv7L1W7L2EGWPf4q_p0,3137
65
+ ngio/tables/backends/_non_zarr_backends.py,sha256=BybUl800pqCdqJJmsGnUi4jsH1ibpQSUl0ZnumkFDwY,7298
66
+ ngio/tables/backends/_parquet.py,sha256=ic-p86h8lce8q9luBJGRzy6vxlWyJvA0-2l5cUD6OqY,1398
67
+ ngio/tables/backends/_table_backends.py,sha256=ksP2NAosXZkNMZf-IMrLx7bjQgp_eKfvPYK4vMdT1A8,7250
68
+ ngio/tables/backends/_utils.py,sha256=YFB7u2_l8lLAK_jrmlSfzH-2sOAFaDP1bmeUfuNo7YM,19719
69
+ ngio/tables/v1/__init__.py,sha256=Wr1_9RZFpaN8FYMTnxT9Yjkw4AS7y9FMWailmB_uj5g,617
70
+ ngio/tables/v1/_condition_table.py,sha256=T0Uq5BKkmMoEspt_Rx0U99Ow6S9GAMZDHqvUO5obCAM,1780
71
+ ngio/tables/v1/_feature_table.py,sha256=n9uMHwoBh-_dlOhUXCFbmAjXFVXncNCR3SjE2qzXI68,3821
72
+ ngio/tables/v1/_generic_table.py,sha256=1ktJHeuv7U1g5Z8PFUuTkCjOzcYMQd8xegKHKUedJB8,1240
73
+ ngio/tables/v1/_roi_table.py,sha256=g7UpMmpf3uAfaG59WYRnimUBgiB_T1qUJRwMZpMt9cI,17099
74
+ ngio/transforms/__init__.py,sha256=JA0-Ui7skbXkm9ofN-AEhU1FTLutkMkwTdVD-310frQ,113
75
+ ngio/transforms/_zoom.py,sha256=otyE-vxFnywUJ8U4mHjat-bNG_7_jv62ckTpqDMxyVQ,550
76
+ ngio/utils/__init__.py,sha256=XPYh8ehC7uXNU2cFFXZAw-S3DpWpX1Yq2xGkffZv5vI,1142
77
+ ngio/utils/_datasets.py,sha256=6GtxfPkjutNaeg5BHuJDBP0GudvQXHLU6mmHp_o0bGA,5650
78
+ ngio/utils/_errors.py,sha256=pKQ12LUjQLYE1nUawemA5h7HsgznjaSvV1n2PQU33N0,759
79
+ ngio/utils/_fractal_fsspec_store.py,sha256=RdcCFOgHexRKX9zZvJV5RI-5OPc7VOPS6q_IeRxm24I,1548
80
+ ngio/utils/_logger.py,sha256=N5W0a_xwze4blS1MolidBkTMbjTbg8GPguJZNun3mAE,1392
81
+ ngio/utils/_zarr_utils.py,sha256=GUOcAx02IcfrJ5tIdKu8ChtRUUaBbkkddW5jaCCYnS8,13797
82
+ ngio-0.4.0b1.dist-info/METADATA,sha256=cL8YlW3QecX9Stge_sYlDGi5WAIKIMjoDCvICoqmDFw,5868
83
+ ngio-0.4.0b1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
84
+ ngio-0.4.0b1.dist-info/licenses/LICENSE,sha256=UgN_a1QCeNh9rZWfz-wORQFxE3elQzLWPQaoK6N6fxQ,1502
85
+ ngio-0.4.0b1.dist-info/RECORD,,