ngio 0.2.0b3__py3-none-any.whl → 0.2.2__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.
ngio/__init__.py CHANGED
@@ -9,33 +9,53 @@ except PackageNotFoundError: # pragma: no cover
9
9
  __author__ = "Lorenzo Cerrone"
10
10
  __email__ = "lorenzo.cerrone@uzh.ch"
11
11
 
12
- from ngio.common import ArrayLike, Dimensions
13
- from ngio.hcs import OmeZarrPlate, create_empty_plate, open_omezarr_plate
12
+ from ngio.common import ArrayLike, Dimensions, Roi, RoiPixels
13
+ from ngio.hcs import (
14
+ OmeZarrPlate,
15
+ OmeZarrWell,
16
+ create_empty_plate,
17
+ create_empty_well,
18
+ open_ome_zarr_plate,
19
+ open_ome_zarr_well,
20
+ )
14
21
  from ngio.images import (
15
22
  Image,
16
23
  Label,
17
24
  OmeZarrContainer,
18
- create_empty_omezarr,
19
- create_omezarr_from_array,
25
+ create_empty_ome_zarr,
26
+ create_ome_zarr_from_array,
20
27
  open_image,
21
- open_omezarr_container,
28
+ open_ome_zarr_container,
29
+ )
30
+ from ngio.ome_zarr_meta.ngio_specs import (
31
+ AxesSetup,
32
+ DefaultNgffVersion,
33
+ ImageInWellPath,
34
+ NgffVersions,
35
+ PixelSize,
22
36
  )
23
- from ngio.ome_zarr_meta.ngio_specs import AxesSetup, ImageInWellPath, PixelSize
24
37
 
25
38
  __all__ = [
26
39
  "ArrayLike",
27
40
  "AxesSetup",
41
+ "DefaultNgffVersion",
28
42
  "Dimensions",
29
43
  "Image",
30
44
  "ImageInWellPath",
31
45
  "Label",
46
+ "NgffVersions",
32
47
  "OmeZarrContainer",
33
48
  "OmeZarrPlate",
49
+ "OmeZarrWell",
34
50
  "PixelSize",
35
- "create_empty_omezarr",
51
+ "Roi",
52
+ "RoiPixels",
53
+ "create_empty_ome_zarr",
36
54
  "create_empty_plate",
37
- "create_omezarr_from_array",
55
+ "create_empty_well",
56
+ "create_ome_zarr_from_array",
38
57
  "open_image",
39
- "open_omezarr_container",
40
- "open_omezarr_plate",
58
+ "open_ome_zarr_container",
59
+ "open_ome_zarr_plate",
60
+ "open_ome_zarr_well",
41
61
  ]
ngio/common/__init__.py CHANGED
@@ -15,7 +15,7 @@ from ngio.common._common_types import ArrayLike
15
15
  from ngio.common._dimensions import Dimensions
16
16
  from ngio.common._masking_roi import compute_masking_roi
17
17
  from ngio.common._pyramid import consolidate_pyramid, init_empty_pyramid, on_disk_zoom
18
- from ngio.common._roi import RasterCooROI, WorldCooROI, roi_to_slice_kwargs
18
+ from ngio.common._roi import Roi, RoiPixels, roi_to_slice_kwargs
19
19
  from ngio.common._slicer import (
20
20
  SliceTransform,
21
21
  compute_and_slices,
@@ -29,9 +29,9 @@ from ngio.common._zoom import dask_zoom, numpy_zoom
29
29
  __all__ = [
30
30
  "ArrayLike",
31
31
  "Dimensions",
32
- "RasterCooROI",
32
+ "Roi",
33
+ "RoiPixels",
33
34
  "SliceTransform",
34
- "WorldCooROI",
35
35
  "compute_and_slices",
36
36
  "compute_masking_roi",
37
37
  "consolidate_pyramid",
@@ -124,7 +124,7 @@ def get_pipe(
124
124
  case "dask":
125
125
  return _dask_get_pipe(array, slices, transformations)
126
126
 
127
- case "delayed_numpy":
127
+ case "delayed":
128
128
  return _delayed_numpy_get_pipe(array, slices, transformations)
129
129
 
130
130
  case _:
@@ -179,6 +179,12 @@ def _mask_pipe_common(
179
179
  **slice_kwargs,
180
180
  )
181
181
 
182
+ if not dimensions_label.has_axis("c"):
183
+ # Remove the 'c' from the slice_kwargs
184
+ # This will not work if the query uses non-default
185
+ # axes names for channel
186
+ slice_kwargs = {k: v for k, v in slice_kwargs.items() if k != "c"}
187
+
182
188
  label_patch = get_pipe(
183
189
  label_array,
184
190
  dimensions=dimensions_label,
@@ -8,7 +8,7 @@ import dask.delayed
8
8
  import numpy as np
9
9
  import scipy.ndimage as ndi
10
10
 
11
- from ngio.common._roi import RasterCooROI, WorldCooROI
11
+ from ngio.common._roi import Roi, RoiPixels
12
12
  from ngio.ome_zarr_meta import PixelSize
13
13
  from ngio.utils import NgioValueError
14
14
 
@@ -117,7 +117,7 @@ def lazy_compute_slices(segmentation: da.Array) -> dict[int, tuple[slice, ...]]:
117
117
 
118
118
  def compute_masking_roi(
119
119
  segmentation: np.ndarray | da.Array, pixel_size: PixelSize
120
- ) -> list[WorldCooROI]:
120
+ ) -> list[Roi]:
121
121
  """Compute a ROIs for each label in a segmentation.
122
122
 
123
123
  This function expects a 2D or 3D segmentation array.
@@ -143,7 +143,7 @@ def compute_masking_roi(
143
143
  max_z, max_y, max_x = slice_[0].stop, slice_[1].stop, slice_[2].stop
144
144
  else:
145
145
  raise ValueError("Invalid slice length.")
146
- roi = RasterCooROI(
146
+ roi = RoiPixels(
147
147
  name=str(label),
148
148
  x_length=max_x - min_x,
149
149
  y_length=max_y - min_y,
@@ -153,6 +153,6 @@ def compute_masking_roi(
153
153
  z=min_z,
154
154
  )
155
155
 
156
- roi = roi.to_world_coo_roi(pixel_size)
156
+ roi = roi.to_roi(pixel_size)
157
157
  rois.append(roi)
158
158
  return rois
ngio/common/_roi.py CHANGED
@@ -10,7 +10,7 @@ import numpy as np
10
10
  from pydantic import BaseModel, ConfigDict, Field
11
11
 
12
12
  from ngio.common._dimensions import Dimensions
13
- from ngio.ome_zarr_meta.ngio_specs import PixelSize, SpaceUnits
13
+ from ngio.ome_zarr_meta.ngio_specs import DefaultSpaceUnit, PixelSize, SpaceUnits
14
14
  from ngio.utils import NgioValueError
15
15
 
16
16
 
@@ -26,7 +26,7 @@ def _to_world(value: int, pixel_size: float) -> float:
26
26
  return value * pixel_size
27
27
 
28
28
 
29
- class WorldCooROI(BaseModel):
29
+ class Roi(BaseModel):
30
30
  """Region of interest (ROI) metadata."""
31
31
 
32
32
  name: str
@@ -36,20 +36,20 @@ class WorldCooROI(BaseModel):
36
36
  x: float = 0.0
37
37
  y: float = 0.0
38
38
  z: float = 0.0
39
- unit: SpaceUnits = Field(SpaceUnits.micrometer, repr=False)
39
+ unit: SpaceUnits | str | None = Field(DefaultSpaceUnit, repr=False)
40
40
 
41
41
  model_config = ConfigDict(extra="allow")
42
42
 
43
- def to_raster_coo(
43
+ def to_pixel_roi(
44
44
  self, pixel_size: PixelSize, dimensions: Dimensions
45
- ) -> "RasterCooROI":
45
+ ) -> "RoiPixels":
46
46
  """Convert to raster coordinates."""
47
47
  dim_x = dimensions.get("x")
48
48
  dim_y = dimensions.get("y")
49
49
  # Will default to 1 if z does not exist
50
50
  dim_z = dimensions.get("z", strict=False)
51
51
 
52
- return RasterCooROI(
52
+ return RoiPixels(
53
53
  name=self.name,
54
54
  x=_to_raster(self.x, pixel_size.x, dim_x),
55
55
  y=_to_raster(self.y, pixel_size.y, dim_y),
@@ -59,7 +59,7 @@ class WorldCooROI(BaseModel):
59
59
  z_length=_to_raster(self.z_length, pixel_size.z, dim_z),
60
60
  )
61
61
 
62
- def zoom(self, zoom_factor: float = 1) -> "WorldCooROI":
62
+ def zoom(self, zoom_factor: float = 1) -> "Roi":
63
63
  """Zoom the ROI by a factor.
64
64
 
65
65
  Args:
@@ -71,7 +71,7 @@ class WorldCooROI(BaseModel):
71
71
  return zoom_roi(self, zoom_factor)
72
72
 
73
73
 
74
- class RasterCooROI(BaseModel):
74
+ class RoiPixels(BaseModel):
75
75
  """Region of interest (ROI) metadata."""
76
76
 
77
77
  name: str
@@ -83,9 +83,9 @@ class RasterCooROI(BaseModel):
83
83
  z_length: int
84
84
  model_config = ConfigDict(extra="allow")
85
85
 
86
- def to_world_coo_roi(self, pixel_size: PixelSize) -> WorldCooROI:
86
+ def to_roi(self, pixel_size: PixelSize) -> Roi:
87
87
  """Convert to world coordinates."""
88
- return WorldCooROI(
88
+ return Roi(
89
89
  name=self.name,
90
90
  x=_to_world(self.x, pixel_size.x),
91
91
  y=_to_world(self.y, pixel_size.y),
@@ -105,7 +105,7 @@ class RasterCooROI(BaseModel):
105
105
  }
106
106
 
107
107
 
108
- def zoom_roi(roi: WorldCooROI, zoom_factor: float = 1) -> WorldCooROI:
108
+ def zoom_roi(roi: Roi, zoom_factor: float = 1) -> Roi:
109
109
  """Zoom the ROI by a factor.
110
110
 
111
111
  Args:
@@ -127,7 +127,7 @@ def zoom_roi(roi: WorldCooROI, zoom_factor: float = 1) -> WorldCooROI:
127
127
  new_x = max(roi.x - diff_x / 2, 0)
128
128
  new_y = max(roi.y - diff_y / 2, 0)
129
129
 
130
- new_roi = WorldCooROI(
130
+ new_roi = Roi(
131
131
  name=roi.name,
132
132
  x=new_x,
133
133
  y=new_y,
@@ -142,13 +142,13 @@ def zoom_roi(roi: WorldCooROI, zoom_factor: float = 1) -> WorldCooROI:
142
142
 
143
143
 
144
144
  def roi_to_slice_kwargs(
145
- roi: WorldCooROI,
145
+ roi: Roi,
146
146
  pixel_size: PixelSize,
147
147
  dimensions: Dimensions,
148
148
  **slice_kwargs: slice | int | Iterable[int],
149
149
  ) -> dict[str, slice | int | Iterable[int]]:
150
150
  """Convert a WorldCooROI to slice_kwargs."""
151
- raster_roi = roi.to_raster_coo(
151
+ raster_roi = roi.to_pixel_roi(
152
152
  pixel_size=pixel_size, dimensions=dimensions
153
153
  ).to_slices()
154
154
 
ngio/hcs/__init__.py CHANGED
@@ -1,5 +1,19 @@
1
1
  """OME-Zarr HCS objects models."""
2
2
 
3
- from ngio.hcs.plate import OmeZarrPlate, create_empty_plate, open_omezarr_plate
3
+ from ngio.hcs.plate import (
4
+ OmeZarrPlate,
5
+ OmeZarrWell,
6
+ create_empty_plate,
7
+ create_empty_well,
8
+ open_ome_zarr_plate,
9
+ open_ome_zarr_well,
10
+ )
4
11
 
5
- __all__ = ["OmeZarrPlate", "create_empty_plate", "open_omezarr_plate"]
12
+ __all__ = [
13
+ "OmeZarrPlate",
14
+ "OmeZarrWell",
15
+ "create_empty_plate",
16
+ "create_empty_well",
17
+ "open_ome_zarr_plate",
18
+ "open_ome_zarr_well",
19
+ ]