ngio 0.5.0a2__py3-none-any.whl → 0.5.0a3__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 (47) hide show
  1. ngio/__init__.py +2 -2
  2. ngio/common/__init__.py +11 -6
  3. ngio/common/_masking_roi.py +12 -41
  4. ngio/common/_pyramid.py +206 -76
  5. ngio/common/_roi.py +257 -329
  6. ngio/experimental/iterators/_feature.py +3 -3
  7. ngio/experimental/iterators/_rois_utils.py +10 -11
  8. ngio/hcs/_plate.py +50 -43
  9. ngio/images/_abstract_image.py +417 -35
  10. ngio/images/_create_synt_container.py +35 -42
  11. ngio/images/_create_utils.py +423 -0
  12. ngio/images/_image.py +154 -176
  13. ngio/images/_label.py +144 -119
  14. ngio/images/_ome_zarr_container.py +361 -196
  15. ngio/io_pipes/_io_pipes.py +9 -9
  16. ngio/io_pipes/_io_pipes_masked.py +7 -7
  17. ngio/io_pipes/_io_pipes_roi.py +6 -6
  18. ngio/io_pipes/_io_pipes_types.py +3 -3
  19. ngio/io_pipes/_match_shape.py +5 -4
  20. ngio/io_pipes/_ops_slices_utils.py +8 -5
  21. ngio/ome_zarr_meta/__init__.py +15 -18
  22. ngio/ome_zarr_meta/_meta_handlers.py +334 -713
  23. ngio/ome_zarr_meta/ngio_specs/_axes.py +1 -0
  24. ngio/ome_zarr_meta/ngio_specs/_dataset.py +13 -22
  25. ngio/ome_zarr_meta/ngio_specs/_ngio_hcs.py +54 -61
  26. ngio/ome_zarr_meta/ngio_specs/_ngio_image.py +14 -68
  27. ngio/ome_zarr_meta/v04/__init__.py +1 -1
  28. ngio/ome_zarr_meta/v04/{_v04_spec_utils.py → _v04_spec.py} +16 -61
  29. ngio/ome_zarr_meta/v05/__init__.py +1 -1
  30. ngio/ome_zarr_meta/v05/{_v05_spec_utils.py → _v05_spec.py} +18 -61
  31. ngio/tables/_tables_container.py +2 -4
  32. ngio/tables/backends/_anndata.py +57 -8
  33. ngio/tables/backends/_anndata_utils.py +1 -6
  34. ngio/tables/backends/_csv.py +3 -19
  35. ngio/tables/backends/_json.py +10 -13
  36. ngio/tables/backends/_parquet.py +3 -31
  37. ngio/tables/backends/_py_arrow_backends.py +222 -0
  38. ngio/tables/v1/_roi_table.py +41 -24
  39. ngio/utils/__init__.py +4 -12
  40. ngio/utils/_zarr_utils.py +160 -53
  41. {ngio-0.5.0a2.dist-info → ngio-0.5.0a3.dist-info}/METADATA +6 -2
  42. {ngio-0.5.0a2.dist-info → ngio-0.5.0a3.dist-info}/RECORD +44 -45
  43. {ngio-0.5.0a2.dist-info → ngio-0.5.0a3.dist-info}/WHEEL +1 -1
  44. ngio/images/_create.py +0 -287
  45. ngio/tables/backends/_non_zarr_backends.py +0 -196
  46. ngio/utils/_logger.py +0 -50
  47. {ngio-0.5.0a2.dist-info → ngio-0.5.0a3.dist-info}/licenses/LICENSE +0 -0
@@ -1,4 +1,4 @@
1
- from ngio import Roi, RoiPixels
1
+ from ngio import Roi
2
2
  from ngio.images._abstract_image import AbstractImage
3
3
 
4
4
 
@@ -48,18 +48,17 @@ def grid(
48
48
  for z in range(0, z_dim, stride_z):
49
49
  for y in range(0, y_dim, stride_y):
50
50
  for x in range(0, x_dim, stride_x):
51
- roi = RoiPixels(
51
+ roi = Roi.from_values(
52
52
  name=base_name,
53
- x=x,
54
- y=y,
55
- z=z,
56
- t=t,
57
- x_length=size_x,
58
- y_length=size_y,
59
- z_length=size_z,
60
- t_length=size_t,
53
+ slices={
54
+ "x": (x, size_x),
55
+ "y": (y, size_y),
56
+ "z": (z, size_z),
57
+ "t": (t, size_t),
58
+ },
59
+ space="pixel",
61
60
  )
62
- new_rois.append(roi.to_roi(pixel_size=ref_image.pixel_size))
61
+ new_rois.append(roi.to_world(pixel_size=ref_image.pixel_size))
63
62
 
64
63
  return rois_product(rois, new_rois)
65
64
 
ngio/hcs/_plate.py CHANGED
@@ -19,11 +19,11 @@ from ngio.ome_zarr_meta import (
19
19
  NgffVersions,
20
20
  NgioPlateMeta,
21
21
  NgioWellMeta,
22
- find_plate_meta_handler,
23
- find_well_meta_handler,
24
- get_plate_meta_handler,
25
- get_well_meta_handler,
22
+ PlateMetaHandler,
23
+ WellMetaHandler,
26
24
  path_in_well_validation,
25
+ update_ngio_plate_meta,
26
+ update_ngio_well_meta,
27
27
  )
28
28
  from ngio.tables import (
29
29
  ConditionTable,
@@ -41,17 +41,22 @@ from ngio.tables import (
41
41
  from ngio.utils import (
42
42
  AccessModeLiteral,
43
43
  NgioCache,
44
+ NgioError,
44
45
  NgioValueError,
45
46
  StoreOrGroup,
46
47
  ZarrGroupHandler,
47
48
  )
48
49
 
49
50
 
50
- def _default_table_container(handler: ZarrGroupHandler) -> TablesContainer | None:
51
+ def _try_get_table_container(
52
+ handler: ZarrGroupHandler, create_mode: bool = True
53
+ ) -> TablesContainer | None:
51
54
  """Return a default table container."""
52
- success, table_handler = handler.safe_derive_handler("tables")
53
- if success and isinstance(table_handler, ZarrGroupHandler):
55
+ try:
56
+ table_handler = handler.get_handler("tables", create_mode=create_mode)
54
57
  return TablesContainer(table_handler)
58
+ except NgioError:
59
+ return None
55
60
 
56
61
 
57
62
  # Mock lock class that does nothing
@@ -77,7 +82,7 @@ class OmeZarrWell:
77
82
  group_handler: The Zarr group handler that contains the Well.
78
83
  """
79
84
  self._group_handler = group_handler
80
- self._meta_handler = find_well_meta_handler(group_handler)
85
+ self._meta_handler = WellMetaHandler(group_handler)
81
86
 
82
87
  def __repr__(self) -> str:
83
88
  """Return a string representation of the well."""
@@ -91,7 +96,7 @@ class OmeZarrWell:
91
96
  @property
92
97
  def meta(self):
93
98
  """Return the metadata."""
94
- return self._meta_handler.meta
99
+ return self._meta_handler.get_meta()
95
100
 
96
101
  @property
97
102
  def acquisition_ids(self) -> list[int]:
@@ -137,7 +142,7 @@ class OmeZarrWell:
137
142
  Returns:
138
143
  OmeZarrContainer: The image.
139
144
  """
140
- handler = self._group_handler.derive_handler(image_path)
145
+ handler = self._group_handler.get_handler(image_path)
141
146
  return OmeZarrContainer(handler)
142
147
 
143
148
  def _add_image(
@@ -159,7 +164,7 @@ class OmeZarrWell:
159
164
  meta = self.meta.add_image(
160
165
  path=image_path, acquisition=acquisition_id, strict=strict
161
166
  )
162
- self.meta_handler.write_meta(meta)
167
+ self.meta_handler.update_meta(meta)
163
168
  self.meta_handler._group_handler.clean_cache()
164
169
 
165
170
  return self._group_handler.get_group(image_path, create_mode=True)
@@ -238,7 +243,7 @@ class OmeZarrPlate:
238
243
  table_container: The tables container that contains plate level tables.
239
244
  """
240
245
  self._group_handler = group_handler
241
- self._meta_handler = find_plate_meta_handler(group_handler)
246
+ self._meta_handler = PlateMetaHandler(group_handler)
242
247
  self._tables_container = table_container
243
248
  self._wells_cache: NgioCache[OmeZarrWell] = NgioCache(
244
249
  use_cache=self._group_handler.use_cache
@@ -259,7 +264,7 @@ class OmeZarrPlate:
259
264
  @property
260
265
  def meta(self):
261
266
  """Return the metadata."""
262
- return self._meta_handler.meta
267
+ return self._meta_handler.get_meta()
263
268
 
264
269
  @property
265
270
  def columns(self) -> list[str]:
@@ -377,7 +382,7 @@ class OmeZarrPlate:
377
382
  if cached_well is not None:
378
383
  return cached_well
379
384
 
380
- group_handler = self._group_handler.derive_handler(well_path)
385
+ group_handler = self._group_handler.get_handler(well_path)
381
386
  self._wells_cache.set(well_path, OmeZarrWell(group_handler))
382
387
  return OmeZarrWell(group_handler)
383
388
 
@@ -438,7 +443,7 @@ class OmeZarrPlate:
438
443
  cached_image = self._images_cache.get(image_path)
439
444
  if cached_image is not None:
440
445
  return cached_image
441
- img_group_handler = self._group_handler.derive_handler(image_path)
446
+ img_group_handler = self._group_handler.get_handler(image_path)
442
447
  image = OmeZarrContainer(img_group_handler)
443
448
  self._images_cache.set(image_path, image)
444
449
  return image
@@ -529,7 +534,7 @@ class OmeZarrPlate:
529
534
  for image_paths in self.well_images_paths(
530
535
  row=row, column=column, acquisition=acquisition
531
536
  ):
532
- group_handler = self._group_handler.derive_handler(image_paths)
537
+ group_handler = self._group_handler.get_handler(image_paths)
533
538
  images[image_paths] = OmeZarrContainer(group_handler)
534
539
  return images
535
540
 
@@ -558,11 +563,11 @@ class OmeZarrPlate:
558
563
  meta = meta.add_acquisition(
559
564
  acquisition_id=acquisition_id, acquisition_name=acquisition_name
560
565
  )
561
- self.meta_handler.write_meta(meta)
566
+ self.meta_handler.update_meta(meta)
562
567
  self.meta_handler._group_handler.clean_cache()
563
568
 
564
569
  well_path = self.meta.get_well_path(row=row, column=column)
565
- group_handler = self._group_handler.derive_handler(well_path)
570
+ group_handler = self._group_handler.get_handler(well_path)
566
571
 
567
572
  if atomic:
568
573
  well_lock = group_handler.lock
@@ -577,18 +582,19 @@ class OmeZarrPlate:
577
582
  well_meta = NgioWellMeta.default_init()
578
583
  version = self.meta.plate.version
579
584
  version = version if version is not None else "0.4"
580
- meta_handler = get_well_meta_handler(group_handler, version=version)
585
+ update_ngio_well_meta(group_handler, well_meta)
586
+ meta_handler = WellMetaHandler(group_handler=group_handler)
581
587
  else:
582
- meta_handler = find_well_meta_handler(group_handler)
583
- well_meta = meta_handler.meta
588
+ meta_handler = WellMetaHandler(group_handler=group_handler)
589
+ well_meta = meta_handler.get_meta()
584
590
 
585
- group_handler = self._group_handler.derive_handler(well_path)
591
+ group_handler = self._group_handler.get_handler(well_path)
586
592
 
587
593
  if image_path is not None:
588
594
  well_meta = well_meta.add_image(
589
595
  path=image_path, acquisition=acquisition_id, strict=False
590
596
  )
591
- meta_handler.write_meta(well_meta)
597
+ meta_handler.update_meta(well_meta)
592
598
  meta_handler._group_handler.clean_cache()
593
599
 
594
600
  if image_path is not None:
@@ -665,7 +671,7 @@ class OmeZarrPlate:
665
671
  ) -> "OmeZarrPlate":
666
672
  """Add a column to an ome-zarr plate."""
667
673
  meta, _ = self.meta.add_column(column)
668
- self.meta_handler.write_meta(meta)
674
+ self.meta_handler.update_meta(meta)
669
675
  self.meta_handler._group_handler.clean_cache()
670
676
  return self
671
677
 
@@ -675,7 +681,7 @@ class OmeZarrPlate:
675
681
  ) -> "OmeZarrPlate":
676
682
  """Add a row to an ome-zarr plate."""
677
683
  meta, _ = self.meta.add_row(row)
678
- self.meta_handler.write_meta(meta)
684
+ self.meta_handler.update_meta(meta)
679
685
  self.meta_handler._group_handler.clean_cache()
680
686
  return self
681
687
 
@@ -695,7 +701,7 @@ class OmeZarrPlate:
695
701
  meta = self.meta.add_acquisition(
696
702
  acquisition_id=acquisition_id, acquisition_name=acquisition_name
697
703
  )
698
- self.meta_handler.write_meta(meta)
704
+ self.meta_handler.update_meta(meta)
699
705
  self.meta_handler._group_handler.clean_cache()
700
706
  return self
701
707
 
@@ -714,7 +720,7 @@ class OmeZarrPlate:
714
720
  with plate_lock:
715
721
  meta = self.meta
716
722
  meta = meta.remove_well(row, column)
717
- self.meta_handler.write_meta(meta)
723
+ self.meta_handler.update_meta(meta)
718
724
  self.meta_handler._group_handler.clean_cache()
719
725
 
720
726
  def _remove_image(
@@ -735,7 +741,7 @@ class OmeZarrPlate:
735
741
  with well_lock:
736
742
  well_meta = well.meta
737
743
  well_meta = well_meta.remove_image(path=image_path)
738
- well.meta_handler.write_meta(well_meta)
744
+ well.meta_handler.update_meta(well_meta)
739
745
  well.meta_handler._group_handler.clean_cache()
740
746
  if len(well_meta.paths()) == 0:
741
747
  self._remove_well(row, column, atomic=atomic)
@@ -797,13 +803,14 @@ class OmeZarrPlate:
797
803
  overwrite=overwrite,
798
804
  )
799
805
 
800
- def _get_tables_container(self) -> TablesContainer | None:
806
+ def _get_tables_container(self, create_mode: bool = True) -> TablesContainer | None:
801
807
  """Return the tables container."""
802
- if self._tables_container is None:
803
- _tables_container = _default_table_container(self._group_handler)
804
- if _tables_container is None:
805
- return None
806
- self._tables_container = _tables_container
808
+ if self._tables_container is not None:
809
+ return self._tables_container
810
+ _tables_container = _try_get_table_container(
811
+ self._group_handler, create_mode=create_mode
812
+ )
813
+ self._tables_container = _tables_container
807
814
  return self._tables_container
808
815
 
809
816
  @property
@@ -818,17 +825,20 @@ class OmeZarrPlate:
818
825
 
819
826
  def list_tables(self, filter_types: TypedTable | str | None = None) -> list[str]:
820
827
  """List all tables in the image."""
828
+ _tables_container = self._get_tables_container(create_mode=False)
829
+ if _tables_container is None:
830
+ return []
821
831
  return self.tables_container.list(filter_types=filter_types)
822
832
 
823
833
  def list_roi_tables(self) -> list[str]:
824
834
  """List all ROI tables in the image."""
825
- masking_roi = self.tables_container.list(
826
- filter_types="masking_roi_table",
827
- )
828
835
  roi = self.tables_container.list(
829
836
  filter_types="roi_table",
830
837
  )
831
- return masking_roi + roi
838
+ masking_roi = self.tables_container.list(
839
+ filter_types="masking_roi_table",
840
+ )
841
+ return roi + masking_roi
832
842
 
833
843
  def get_roi_table(self, name: str) -> RoiTable:
834
844
  """Get a ROI table from the image.
@@ -1153,8 +1163,7 @@ def _create_empty_plate_from_meta(
1153
1163
  """Create an empty OME-Zarr plate from metadata."""
1154
1164
  mode = "w" if overwrite else "w-"
1155
1165
  group_handler = ZarrGroupHandler(store=store, cache=True, mode=mode)
1156
- meta_handler = get_plate_meta_handler(group_handler, version=version)
1157
- meta_handler.write_meta(meta)
1166
+ update_ngio_plate_meta(group_handler, meta)
1158
1167
  return group_handler
1159
1168
 
1160
1169
 
@@ -1283,9 +1292,7 @@ def create_empty_well(
1283
1292
  group_handler = ZarrGroupHandler(
1284
1293
  store=store, cache=True, mode="w" if overwrite else "w-"
1285
1294
  )
1286
- meta_handler = get_well_meta_handler(group_handler, version=version)
1287
- meta = NgioWellMeta.default_init()
1288
- meta_handler.write_meta(meta)
1295
+ update_ngio_well_meta(group_handler, NgioWellMeta.default_init())
1289
1296
 
1290
1297
  return open_ome_zarr_well(
1291
1298
  store=store,