ngio 0.3.0a0__py3-none-any.whl → 0.3.0a1__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/hcs/plate.py CHANGED
@@ -32,7 +32,7 @@ from ngio.tables import (
32
32
  MaskingRoiTable,
33
33
  RoiTable,
34
34
  Table,
35
- TableBackendProtocol,
35
+ TableBackend,
36
36
  TablesContainer,
37
37
  TableType,
38
38
  TypedTable,
@@ -909,14 +909,14 @@ class OmeZarrPlate:
909
909
  self,
910
910
  name: str,
911
911
  table_cls: type[TableType],
912
- backend: str | TableBackendProtocol | None = None,
912
+ backend: TableBackend | None = None,
913
913
  ) -> TableType:
914
914
  """Get a table from the image as a specific type.
915
915
 
916
916
  Args:
917
917
  name (str): The name of the table.
918
918
  table_cls (type[TableType]): The type of the table.
919
- backend (str | TableBackendProtocol | None): The backend to use. If None,
919
+ backend (TableBackend | None): The backend to use. If None,
920
920
  the default backend is used.
921
921
  """
922
922
  return self.tables_container.get_as(
@@ -929,7 +929,7 @@ class OmeZarrPlate:
929
929
  self,
930
930
  name: str,
931
931
  table: Table,
932
- backend: str | TableBackendProtocol = "anndata_v1",
932
+ backend: TableBackend = "anndata",
933
933
  overwrite: bool = False,
934
934
  ) -> None:
935
935
  """Add a table to the image."""
@@ -28,7 +28,7 @@ from ngio.tables import (
28
28
  MaskingRoiTable,
29
29
  RoiTable,
30
30
  Table,
31
- TableBackendProtocol,
31
+ TableBackend,
32
32
  TablesContainer,
33
33
  TableType,
34
34
  TypedTable,
@@ -441,14 +441,14 @@ class OmeZarrContainer:
441
441
  self,
442
442
  name: str,
443
443
  table_cls: type[TableType],
444
- backend: str | TableBackendProtocol | None = None,
444
+ backend: TableBackend | None = None,
445
445
  ) -> TableType:
446
446
  """Get a table from the image as a specific type.
447
447
 
448
448
  Args:
449
449
  name (str): The name of the table.
450
450
  table_cls (type[TableType]): The type of the table.
451
- backend (str | TableBackendProtocol | None): The backend to use. If None,
451
+ backend (TableBackend | None): The backend to use. If None,
452
452
  the default backend is used.
453
453
  """
454
454
  return self.tables_container.get_as(
@@ -469,7 +469,7 @@ class OmeZarrContainer:
469
469
  self,
470
470
  name: str,
471
471
  table: Table,
472
- backend: str | TableBackendProtocol = "anndata_v1",
472
+ backend: TableBackend = "anndata",
473
473
  overwrite: bool = False,
474
474
  ) -> None:
475
475
  """Add a table to the image."""
@@ -187,10 +187,6 @@ class GenericMetaHandler(
187
187
 
188
188
  raise NgioValueError(f"Could not load metadata: {meta_or_error}")
189
189
 
190
- def safe_load_meta(self) -> _image_meta | ConverterError:
191
- """Load the metadata from the store."""
192
- return self._load_meta(return_error=True)
193
-
194
190
  def _write_meta(self, meta) -> None:
195
191
  """Write the metadata to the store."""
196
192
  _meta = self._meta_exporter(metadata=meta)
@@ -217,6 +213,10 @@ class ImageMetaHandler(
217
213
  return meta
218
214
  raise NgioValueError(f"Could not load metadata: {meta}")
219
215
 
216
+ def safe_load_meta(self) -> NgioImageMeta | ConverterError:
217
+ """Load the metadata from the store."""
218
+ return self._load_meta(return_error=True)
219
+
220
220
 
221
221
  class LabelMetaHandler(
222
222
  GenericMetaHandler[NgioLabelMeta, LabelMetaImporter, LabelMetaExporter]
@@ -230,6 +230,10 @@ class LabelMetaHandler(
230
230
  return meta
231
231
  raise NgioValueError(f"Could not load metadata: {meta}")
232
232
 
233
+ def safe_load_meta(self) -> NgioLabelMeta | ConverterError:
234
+ """Load the metadata from the store."""
235
+ return self._load_meta(return_error=True)
236
+
233
237
 
234
238
  ###########################################################################
235
239
  #
@@ -267,10 +271,6 @@ class GenericHCSMetaHandler(Generic[_hcs_meta, _hcs_meta_importer, _hcs_meta_exp
267
271
 
268
272
  raise NgioValueError(f"Could not load metadata: {meta_or_error}")
269
273
 
270
- def safe_load_meta(self) -> _hcs_meta | ConverterError:
271
- """Load the metadata from the store."""
272
- return self._load_meta(return_error=True)
273
-
274
274
  def _write_meta(self, meta) -> None:
275
275
  _meta = self._meta_exporter(metadata=meta)
276
276
  self._group_handler.write_attrs(_meta)
@@ -295,6 +295,10 @@ class WellMetaHandler(
295
295
  return meta
296
296
  raise NgioValueError(f"Could not load metadata: {meta}")
297
297
 
298
+ def safe_load_meta(self) -> NgioWellMeta | ConverterError:
299
+ """Load the metadata from the store."""
300
+ return self._load_meta(return_error=True)
301
+
298
302
 
299
303
  class PlateMetaHandler(
300
304
  GenericHCSMetaHandler[NgioPlateMeta, PlateMetaImporter, PlateMetaExporter]
@@ -308,6 +312,10 @@ class PlateMetaHandler(
308
312
  return meta
309
313
  raise NgioValueError(f"Could not load metadata: {meta}")
310
314
 
315
+ def safe_load_meta(self) -> NgioPlateMeta | ConverterError:
316
+ """Load the metadata from the store."""
317
+ return self._load_meta(return_error=True)
318
+
311
319
 
312
320
  ###########################################################################
313
321
  #
ngio/tables/__init__.py CHANGED
@@ -1,6 +1,10 @@
1
1
  """Ngio Tables implementations."""
2
2
 
3
- from ngio.tables.backends import ImplementedTableBackends, TableBackendProtocol
3
+ from ngio.tables.backends import (
4
+ ImplementedTableBackends,
5
+ TableBackend,
6
+ TableBackendProtocol,
7
+ )
4
8
  from ngio.tables.tables_container import (
5
9
  ConditionTable,
6
10
  FeatureTable,
@@ -26,6 +30,7 @@ __all__ = [
26
30
  "MaskingRoiTable",
27
31
  "RoiTable",
28
32
  "Table",
33
+ "TableBackend",
29
34
  "TableBackendProtocol",
30
35
  "TableType",
31
36
  "TablesContainer",
@@ -11,6 +11,7 @@ from anndata import AnnData
11
11
  from ngio.tables.backends import (
12
12
  BackendMeta,
13
13
  ImplementedTableBackends,
14
+ TableBackend,
14
15
  TableBackendProtocol,
15
16
  TabularData,
16
17
  convert_to_anndata,
@@ -146,7 +147,7 @@ class AbstractBaseTable(ABC):
146
147
  def _load_backend(
147
148
  meta: BackendMeta,
148
149
  handler: ZarrGroupHandler,
149
- backend: str | TableBackendProtocol,
150
+ backend: TableBackend,
150
151
  ) -> TableBackendProtocol:
151
152
  """Create a new ROI table from a Zarr group handler."""
152
153
  if isinstance(backend, str):
@@ -202,7 +203,7 @@ class AbstractBaseTable(ABC):
202
203
  def set_backend(
203
204
  self,
204
205
  handler: ZarrGroupHandler | None = None,
205
- backend: str | TableBackendProtocol = "anndata_v1",
206
+ backend: TableBackend = "anndata",
206
207
  ) -> None:
207
208
  """Set the backend of the table."""
208
209
  if handler is None:
@@ -226,7 +227,7 @@ class AbstractBaseTable(ABC):
226
227
  cls,
227
228
  handler: ZarrGroupHandler,
228
229
  meta_model: builtins.type[BackendMeta],
229
- backend: str | TableBackendProtocol | None = None,
230
+ backend: TableBackend | None = None,
230
231
  ) -> Self:
231
232
  """Create a new ROI table from a Zarr group handler."""
232
233
  meta = meta_model(**handler.load_attrs())
@@ -241,7 +242,7 @@ class AbstractBaseTable(ABC):
241
242
  def from_handler(
242
243
  cls,
243
244
  handler: ZarrGroupHandler,
244
- backend: str | TableBackendProtocol | None = None,
245
+ backend: TableBackend | None = None,
245
246
  ) -> Self:
246
247
  """Create a new ROI table from a Zarr group handler."""
247
248
  pass
@@ -1,12 +1,13 @@
1
1
  """Ngio Tables backend implementations."""
2
2
 
3
3
  from ngio.tables.backends._abstract_backend import AbstractTableBackend, BackendMeta
4
- from ngio.tables.backends._anndata_v1 import AnnDataBackend
5
- from ngio.tables.backends._csv_v1 import CsvTableBackend
6
- from ngio.tables.backends._json_v1 import JsonTableBackend
7
- from ngio.tables.backends._parquet_v1 import ParquetTableBackend
4
+ from ngio.tables.backends._anndata import AnnDataBackend
5
+ from ngio.tables.backends._csv import CsvTableBackend
6
+ from ngio.tables.backends._json import JsonTableBackend
7
+ from ngio.tables.backends._parquet import ParquetTableBackend
8
8
  from ngio.tables.backends._table_backends import (
9
9
  ImplementedTableBackends,
10
+ TableBackend,
10
11
  TableBackendProtocol,
11
12
  )
12
13
  from ngio.tables.backends._utils import (
@@ -34,6 +35,7 @@ __all__ = [
34
35
  "ImplementedTableBackends",
35
36
  "JsonTableBackend",
36
37
  "ParquetTableBackend",
38
+ "TableBackend",
37
39
  "TableBackendProtocol",
38
40
  "TabularData",
39
41
  "convert_anndata_to_pandas",
@@ -19,7 +19,7 @@ from ngio.utils import NgioValueError, ZarrGroupHandler
19
19
  class BackendMeta(BaseModel):
20
20
  """Metadata for the backend."""
21
21
 
22
- backend: str = "anndata_v1"
22
+ backend: str = "anndata"
23
23
  index_key: str | None = None
24
24
  index_type: Literal["int", "str"] | None = None
25
25
 
@@ -21,7 +21,7 @@ class AnnDataBackend(AbstractTableBackend):
21
21
  @staticmethod
22
22
  def backend_name() -> str:
23
23
  """Return the name of the backend."""
24
- return "anndata_v1"
24
+ return "anndata"
25
25
 
26
26
  @staticmethod
27
27
  def implements_anndata() -> bool:
@@ -1,7 +1,7 @@
1
1
  import pandas as pd
2
2
  import polars as pl
3
3
 
4
- from ngio.tables.backends._non_zarr_backends_v1 import NonZarrBaseBackend
4
+ from ngio.tables.backends._non_zarr_backends import NonZarrBaseBackend
5
5
 
6
6
 
7
7
  def write_lf_to_csv(path: str, table: pl.DataFrame) -> None:
@@ -32,4 +32,4 @@ class CsvTableBackend(NonZarrBaseBackend):
32
32
  @staticmethod
33
33
  def backend_name() -> str:
34
34
  """Return the name of the backend."""
35
- return "experimental_csv_v1"
35
+ return "csv"
@@ -17,7 +17,7 @@ class JsonTableBackend(AbstractTableBackend):
17
17
  @staticmethod
18
18
  def backend_name() -> str:
19
19
  """Return the name of the backend."""
20
- return "experimental_json_v1"
20
+ return "json"
21
21
 
22
22
  @staticmethod
23
23
  def implements_anndata() -> bool:
@@ -1,7 +1,7 @@
1
1
  import pandas as pd
2
2
  import polars as pl
3
3
 
4
- from ngio.tables.backends._non_zarr_backends_v1 import NonZarrBaseBackend
4
+ from ngio.tables.backends._non_zarr_backends import NonZarrBaseBackend
5
5
 
6
6
 
7
7
  def write_lf_to_parquet(path: str, table: pl.DataFrame) -> None:
@@ -44,4 +44,4 @@ class ParquetTableBackend(NonZarrBaseBackend):
44
44
  @staticmethod
45
45
  def backend_name() -> str:
46
46
  """Return the name of the backend."""
47
- return "experimental_parquet_v1"
47
+ return "parquet"
@@ -7,10 +7,10 @@ from pandas import DataFrame
7
7
  from polars import DataFrame as PolarsDataFrame
8
8
  from polars import LazyFrame
9
9
 
10
- from ngio.tables.backends._anndata_v1 import AnnDataBackend
11
- from ngio.tables.backends._csv_v1 import CsvTableBackend
12
- from ngio.tables.backends._json_v1 import JsonTableBackend
13
- from ngio.tables.backends._parquet_v1 import ParquetTableBackend
10
+ from ngio.tables.backends._anndata import AnnDataBackend
11
+ from ngio.tables.backends._csv import CsvTableBackend
12
+ from ngio.tables.backends._json import JsonTableBackend
13
+ from ngio.tables.backends._parquet import ParquetTableBackend
14
14
  from ngio.tables.backends._utils import TabularData
15
15
  from ngio.utils import NgioValueError, ZarrGroupHandler
16
16
 
@@ -167,7 +167,7 @@ class ImplementedTableBackends:
167
167
  self,
168
168
  *,
169
169
  group_handler: ZarrGroupHandler,
170
- backend_name: str = "anndata_v1",
170
+ backend_name: str = "anndata",
171
171
  index_key: str | None = None,
172
172
  index_type: Literal["int", "str"] | None = None,
173
173
  ) -> TableBackendProtocol:
@@ -199,3 +199,5 @@ ImplementedTableBackends().add_backend(AnnDataBackend)
199
199
  ImplementedTableBackends().add_backend(JsonTableBackend)
200
200
  ImplementedTableBackends().add_backend(CsvTableBackend)
201
201
  ImplementedTableBackends().add_backend(ParquetTableBackend)
202
+
203
+ TableBackend = Literal["anndata", "json", "csv", "parquet"] | str | TableBackendProtocol
@@ -8,7 +8,7 @@ import polars as pl
8
8
 
9
9
  from ngio.tables.backends import (
10
10
  BackendMeta,
11
- TableBackendProtocol,
11
+ TableBackend,
12
12
  TabularData,
13
13
  )
14
14
  from ngio.tables.v1 import (
@@ -90,7 +90,7 @@ class Table(Protocol):
90
90
  def set_backend(
91
91
  self,
92
92
  handler: ZarrGroupHandler | None = None,
93
- backend: str | TableBackendProtocol = "anndata_v1",
93
+ backend: TableBackend = "anndata",
94
94
  ) -> None:
95
95
  """Set the backend store and path for the table.
96
96
 
@@ -105,7 +105,7 @@ class Table(Protocol):
105
105
  def from_handler(
106
106
  cls,
107
107
  handler: ZarrGroupHandler,
108
- backend: str | TableBackendProtocol | None = None,
108
+ backend: TableBackend | None = None,
109
109
  ) -> "Table":
110
110
  """Create a new table from a Zarr group handler."""
111
111
  ...
@@ -139,12 +139,12 @@ TableType = TypeVar("TableType", bound=Table)
139
139
  class TableMeta(BackendMeta):
140
140
  """Base class for table metadata."""
141
141
 
142
- fractal_table_version: str = "1"
142
+ table_version: str = "1"
143
143
  type: str = "generic_table"
144
144
 
145
145
  def unique_name(self) -> str:
146
146
  """Return the unique name for the table."""
147
- return f"{self.type}_v{self.fractal_table_version}"
147
+ return f"{self.type}_v{self.table_version}"
148
148
 
149
149
 
150
150
  def _get_meta(handler: ZarrGroupHandler) -> TableMeta:
@@ -175,7 +175,7 @@ class ImplementedTables:
175
175
  self,
176
176
  meta: TableMeta,
177
177
  handler: ZarrGroupHandler,
178
- backend: str | TableBackendProtocol | None = None,
178
+ backend: TableBackend | None = None,
179
179
  strict: bool = True,
180
180
  ) -> Table:
181
181
  """Try to get a handler for the given store based on the metadata version."""
@@ -196,7 +196,7 @@ class ImplementedTables:
196
196
  """Register a new table handler."""
197
197
  meta = TableMeta(
198
198
  type=handler.table_type(),
199
- fractal_table_version=handler.version(),
199
+ table_version=handler.version(),
200
200
  )
201
201
 
202
202
  if meta.unique_name() in self._implemented_tables and not overwrite:
@@ -264,7 +264,7 @@ class TablesContainer:
264
264
  def get(
265
265
  self,
266
266
  name: str,
267
- backend: str | TableBackendProtocol | None = None,
267
+ backend: TableBackend | None = None,
268
268
  strict: bool = True,
269
269
  ) -> Table:
270
270
  """Get a label from the group."""
@@ -285,7 +285,7 @@ class TablesContainer:
285
285
  self,
286
286
  name: str,
287
287
  table_cls: type[TableType],
288
- backend: str | TableBackendProtocol | None = None,
288
+ backend: TableBackend | None = None,
289
289
  ) -> TableType:
290
290
  """Get a table from the group as a specific type."""
291
291
  if name not in self.list():
@@ -301,7 +301,7 @@ class TablesContainer:
301
301
  self,
302
302
  name: str,
303
303
  table: Table,
304
- backend: str | TableBackendProtocol = "anndata_v1",
304
+ backend: TableBackend = "anndata",
305
305
  overwrite: bool = False,
306
306
  ) -> None:
307
307
  """Add a table to the group."""
@@ -357,7 +357,7 @@ def open_tables_container(
357
357
 
358
358
  def open_table(
359
359
  store: StoreOrGroup,
360
- backend: str | TableBackendProtocol | None = None,
360
+ backend: TableBackend | None = None,
361
361
  cache: bool = False,
362
362
  mode: AccessModeLiteral = "a",
363
363
  parallel_safe: bool = False,
@@ -375,7 +375,7 @@ def open_table(
375
375
  def open_table_as(
376
376
  store: StoreOrGroup,
377
377
  table_cls: type[TableType],
378
- backend: str | TableBackendProtocol = "anndata_v1",
378
+ backend: TableBackend | None = None,
379
379
  cache: bool = False,
380
380
  mode: AccessModeLiteral = "a",
381
381
  parallel_safe: bool = False,
@@ -393,7 +393,7 @@ def open_table_as(
393
393
  def write_table(
394
394
  store: StoreOrGroup,
395
395
  table: Table,
396
- backend: str | TableBackendProtocol = "anndata_v1",
396
+ backend: TableBackend = "anndata",
397
397
  cache: bool = False,
398
398
  mode: AccessModeLiteral = "a",
399
399
  parallel_safe: bool = False,
@@ -1,14 +1,23 @@
1
1
  """Tables implementations for fractal_tables v1."""
2
2
 
3
- from ngio.tables.v1._condition_table import ConditionTableV1
4
- from ngio.tables.v1._feature_table import FeatureTableV1
3
+ from ngio.tables.v1._condition_table import ConditionTableMeta, ConditionTableV1
4
+ from ngio.tables.v1._feature_table import FeatureTableMeta, FeatureTableV1
5
5
  from ngio.tables.v1._generic_table import GenericTable
6
- from ngio.tables.v1._roi_table import MaskingRoiTableV1, RoiTableV1
6
+ from ngio.tables.v1._roi_table import (
7
+ MaskingRoiTableV1,
8
+ MaskingRoiTableV1Meta,
9
+ RoiTableV1,
10
+ RoiTableV1Meta,
11
+ )
7
12
 
8
13
  __all__ = [
14
+ "ConditionTableMeta",
9
15
  "ConditionTableV1",
16
+ "FeatureTableMeta",
10
17
  "FeatureTableV1",
11
18
  "GenericTable",
12
19
  "MaskingRoiTableV1",
20
+ "MaskingRoiTableV1Meta",
13
21
  "RoiTableV1",
22
+ "RoiTableV1Meta",
14
23
  ]
@@ -1,14 +1,18 @@
1
1
  """Implementation of a generic table class."""
2
2
 
3
3
  from ngio.tables.abstract_table import AbstractBaseTable
4
- from ngio.tables.backends import BackendMeta, TableBackendProtocol, TabularData
4
+ from ngio.tables.backends import (
5
+ BackendMeta,
6
+ TableBackend,
7
+ TabularData,
8
+ )
5
9
  from ngio.utils import ZarrGroupHandler
6
10
 
7
11
 
8
12
  class ConditionTableMeta(BackendMeta):
9
13
  """Metadata for the condition table."""
10
14
 
11
- fractal_table_version: str | None = "1"
15
+ table_version: str | None = "1"
12
16
  type: str | None = "condition_table"
13
17
 
14
18
 
@@ -58,7 +62,7 @@ class ConditionTableV1(AbstractBaseTable):
58
62
  def from_handler(
59
63
  cls,
60
64
  handler: ZarrGroupHandler,
61
- backend: str | TableBackendProtocol | None = None,
65
+ backend: TableBackend | None = None,
62
66
  ) -> "ConditionTableV1":
63
67
  return cls._from_handler(
64
68
  handler=handler,
@@ -6,21 +6,14 @@ https://fractal-analytics-platform.github.io/fractal-tasks-core/tables/
6
6
 
7
7
  from typing import Literal
8
8
 
9
- from pydantic import BaseModel
9
+ from pydantic import BaseModel, Field
10
10
 
11
11
  from ngio.tables.abstract_table import AbstractBaseTable
12
- from ngio.tables.backends import BackendMeta, TableBackendProtocol, TabularData
12
+ from ngio.tables.backends import BackendMeta, TableBackend, TabularData
13
13
  from ngio.utils import NgioValueError
14
14
  from ngio.utils._zarr_utils import ZarrGroupHandler
15
15
 
16
16
 
17
- class GenericTableMeta(BackendMeta):
18
- """Metadata for the ROI table."""
19
-
20
- fractal_table_version: str | None = None
21
- type: str | None = None
22
-
23
-
24
17
  class RegionMeta(BaseModel):
25
18
  """Metadata for the region."""
26
19
 
@@ -30,12 +23,17 @@ class RegionMeta(BaseModel):
30
23
  class FeatureTableMeta(BackendMeta):
31
24
  """Metadata for the ROI table."""
32
25
 
33
- fractal_table_version: Literal["1"] = "1"
26
+ table_version: Literal["1"] = "1"
34
27
  type: Literal["feature_table"] = "feature_table"
35
28
  region: RegionMeta | None = None
36
- instance_key: str = "label"
29
+ instance_key: str = "label" # Legacy field, kept for compatibility
30
+ # Backend metadata
37
31
  index_key: str | None = "label"
38
32
  index_type: Literal["int", "str"] | None = "int"
33
+ # Columns optional types
34
+ categorical_columns: list[str] = Field(default_factory=list)
35
+ measurement_columns: list[str] = Field(default_factory=list)
36
+ metadata_columns: list[str] = Field(default_factory=list)
39
37
 
40
38
 
41
39
  class FeatureTableV1(AbstractBaseTable):
@@ -85,7 +83,7 @@ class FeatureTableV1(AbstractBaseTable):
85
83
  def from_handler(
86
84
  cls,
87
85
  handler: ZarrGroupHandler,
88
- backend: str | TableBackendProtocol | None = None,
86
+ backend: TableBackend | None = None,
89
87
  ) -> "FeatureTableV1":
90
88
  return cls._from_handler(
91
89
  handler=handler,
@@ -1,10 +1,21 @@
1
1
  """Implementation of a generic table class."""
2
2
 
3
3
  from ngio.tables.abstract_table import AbstractBaseTable
4
- from ngio.tables.backends import BackendMeta, TableBackendProtocol
4
+ from ngio.tables.backends import BackendMeta, TableBackend
5
5
  from ngio.utils import ZarrGroupHandler
6
6
 
7
7
 
8
+ class GenericTableMeta(BackendMeta):
9
+ """Metadata for the generic table.
10
+
11
+ This is used to store metadata for a generic table.
12
+ It does not have a specific definition.
13
+ """
14
+
15
+ table_version: str | None = "1"
16
+ type: str | None = "generic_table"
17
+
18
+
8
19
  class GenericTable(AbstractBaseTable):
9
20
  """Class to a non-specific table.
10
21
 
@@ -29,7 +40,7 @@ class GenericTable(AbstractBaseTable):
29
40
  def from_handler(
30
41
  cls,
31
42
  handler: ZarrGroupHandler,
32
- backend: str | TableBackendProtocol | None = None,
43
+ backend: TableBackend | None = None,
33
44
  ) -> "GenericTable":
34
45
  return cls._from_handler(
35
46
  handler=handler,
@@ -15,10 +15,14 @@ from pydantic import BaseModel
15
15
  from ngio.common import Roi
16
16
  from ngio.tables.abstract_table import (
17
17
  AbstractBaseTable,
18
- TableBackendProtocol,
19
18
  TabularData,
20
19
  )
21
- from ngio.tables.backends import BackendMeta, convert_to_pandas, normalize_pandas_df
20
+ from ngio.tables.backends import (
21
+ BackendMeta,
22
+ TableBackend,
23
+ convert_to_pandas,
24
+ normalize_pandas_df,
25
+ )
22
26
  from ngio.utils import (
23
27
  NgioTableValidationError,
24
28
  NgioValueError,
@@ -302,7 +306,7 @@ class GenericRoiTableV1(AbstractBaseTable):
302
306
  class RoiTableV1Meta(BackendMeta):
303
307
  """Metadata for the ROI table."""
304
308
 
305
- fractal_table_version: Literal["1"] = "1"
309
+ table_version: Literal["1"] = "1"
306
310
  type: Literal["roi_table"] = "roi_table"
307
311
  index_key: str | None = "FieldIndex"
308
312
  index_type: Literal["str", "int"] | None = "str"
@@ -334,7 +338,7 @@ class RoiTableV1(GenericRoiTableV1):
334
338
  def from_handler(
335
339
  cls,
336
340
  handler: ZarrGroupHandler,
337
- backend: str | TableBackendProtocol | None = None,
341
+ backend: TableBackend | None = None,
338
342
  ) -> "RoiTableV1":
339
343
  table = cls._from_handler(
340
344
  handler=handler,
@@ -358,7 +362,7 @@ class RegionMeta(BaseModel):
358
362
  class MaskingRoiTableV1Meta(BackendMeta):
359
363
  """Metadata for the ROI table."""
360
364
 
361
- fractal_table_version: Literal["1"] = "1"
365
+ table_version: Literal["1"] = "1"
362
366
  type: Literal["masking_roi_table"] = "masking_roi_table"
363
367
  region: RegionMeta | None = None
364
368
  instance_key: str = "label"
@@ -409,7 +413,7 @@ class MaskingRoiTableV1(GenericRoiTableV1):
409
413
  def from_handler(
410
414
  cls,
411
415
  handler: ZarrGroupHandler,
412
- backend: str | TableBackendProtocol | None = None,
416
+ backend: TableBackend | None = None,
413
417
  ) -> "MaskingRoiTableV1":
414
418
  table = cls._from_handler(
415
419
  handler=handler,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ngio
3
- Version: 0.3.0a0
3
+ Version: 0.3.0a1
4
4
  Summary: Next Generation file format IO
5
5
  Project-URL: homepage, https://github.com/fractal-analytics-platform/ngio
6
6
  Project-URL: repository, https://github.com/fractal-analytics-platform/ngio
@@ -50,6 +50,7 @@ Requires-Dist: mkdocs; extra == 'docs'
50
50
  Requires-Dist: mkdocs-autorefs; extra == 'docs'
51
51
  Requires-Dist: mkdocs-git-committers-plugin-2; extra == 'docs'
52
52
  Requires-Dist: mkdocs-git-revision-date-localized-plugin; extra == 'docs'
53
+ Requires-Dist: mkdocs-include-markdown-plugin; extra == 'docs'
53
54
  Requires-Dist: mkdocs-jupyter; extra == 'docs'
54
55
  Requires-Dist: mkdocs-material; extra == 'docs'
55
56
  Requires-Dist: mkdocstrings[python]; extra == 'docs'
@@ -11,16 +11,16 @@ ngio/common/_slicer.py,sha256=AKpwXRncOmF9nhjKYma0C_41WqAgSv860beKGx-aw-0,3075
11
11
  ngio/common/_table_ops.py,sha256=oTjCcecBOG_GJoLgJLgag6yl_nznThOKBKANQJow0h8,15493
12
12
  ngio/common/_zoom.py,sha256=KsURa5VuixmpbAAY5-6obmuQV8vfiHKZqBxZDXvchpM,5473
13
13
  ngio/hcs/__init__.py,sha256=5oAYT_454WGhms97kxo8gS4_rKHtFf_x-9uu8M_VeVM,356
14
- ngio/hcs/plate.py,sha256=kGttwZu9JY5maRnfyO1RcOxoxi5OTk-uST5mRU5BJbY,43749
14
+ ngio/hcs/plate.py,sha256=Y_d-ZuV9FmYsSHqwZfcnm_Y024jfdiMd7WlaeNJy73k,43696
15
15
  ngio/images/__init__.py,sha256=DYbXAdBgPxyjBRdJrWvU0UnBRI0gUMmx9KaJ-Bucvz4,533
16
16
  ngio/images/abstract_image.py,sha256=8PNQPZjiDz-pcTFXSJAVw7nUr4yL_iRwqDEUTKkAnp0,10266
17
17
  ngio/images/create.py,sha256=XYn30m_2OSZeHHASYHc3eK9u_gZIYy9wo6mGdRGaq5c,9473
18
18
  ngio/images/image.py,sha256=mKLIR2DGQUWtQbf3my2fh0bEPkbbsabUoge_XJPhfWE,17824
19
19
  ngio/images/label.py,sha256=qgbBHFPGYpUR2fHf1OiXZh4sn0FgCeeWwH1F4SrOM1c,10460
20
20
  ngio/images/masked_image.py,sha256=IBo8x2jHyXBXn7ORo8fSiwBPjV_1JOTb_vatjKNxbJ0,8531
21
- ngio/images/ome_zarr_container.py,sha256=a59d3AsKsANs7c7Ip7e734kSo4qV-Gsc_epxtGkS3Tk,30056
21
+ ngio/images/ome_zarr_container.py,sha256=jOodimQzAnaLUSYG1OnBsWqtHeL8_V4wkg_4RSXbwcM,30003
22
22
  ngio/ome_zarr_meta/__init__.py,sha256=oZ8PEsWM7U0KwzpsnvVfX9k4UfuTz5sZ8B6B9eY5hyY,1193
23
- ngio/ome_zarr_meta/_meta_handlers.py,sha256=BLvYt5PONYrWkEb2XgEiAXR_OX9rfeX_C0eEqen0jQA,25549
23
+ ngio/ome_zarr_meta/_meta_handlers.py,sha256=ctknNDT8jxwyvxQf9on5gW31H1tRRsnneO38GT2UXoE,25880
24
24
  ngio/ome_zarr_meta/ngio_specs/__init__.py,sha256=05NQukZG0nNvjzf8AKWGu7PhjhQcImGSAOK3D3Bg-Js,1786
25
25
  ngio/ome_zarr_meta/ngio_specs/_axes.py,sha256=Kqe9T7LWa_9o3UWS5uzALyyNluIhXxWhDGxWY4-GIo8,16707
26
26
  ngio/ome_zarr_meta/ngio_specs/_channels.py,sha256=2L-HM9K1Xu4qRI2MiXPqgCuHdCBRydEW1StThcqEuvY,15120
@@ -31,31 +31,31 @@ ngio/ome_zarr_meta/ngio_specs/_pixel_size.py,sha256=5TT8250XdCKUnk3OwZeyXIMNFKOg
31
31
  ngio/ome_zarr_meta/v04/__init__.py,sha256=dJRzzxyYc81kf-0Hip_bqvbdManaM8XTdQX2meWyCSs,583
32
32
  ngio/ome_zarr_meta/v04/_custom_models.py,sha256=5GxiDERvLuvq4QvApcA6EiKLS6hLFX1R0R_9rSaa85A,530
33
33
  ngio/ome_zarr_meta/v04/_v04_spec_utils.py,sha256=05tEr2eEP_XVIfBMOAWLT7lzJV4KS5eYrpK8l94tn3w,15876
34
- ngio/tables/__init__.py,sha256=9-9atLClIQGkRFuECEg9AcmybHTAkQIpPg2jkL9hLyA,773
35
- ngio/tables/abstract_table.py,sha256=pG0Yg4kbA4JDqhyNj1nMDAv3MqquJjKwFuD52jk-6-w,8210
36
- ngio/tables/tables_container.py,sha256=FyuuRX7v0DCbTJ9a0vl0bMUM5cdjOC7Xhndp2JMweRo,12039
37
- ngio/tables/backends/__init__.py,sha256=QhqvPvGX1pmEIQHoVNpRj6OMYzsoiAHFJiMbc87Z54c,1499
38
- ngio/tables/backends/_abstract_backend.py,sha256=tsbHzSPTX88fiCbVc8khXv5aN68ck6HKG8r5OHkY3S8,7457
34
+ ngio/tables/__init__.py,sha256=np-XWjUY_HkwMfSy_bIRxh5t5SFZJ9yHEtvtbuaaSgg,824
35
+ ngio/tables/abstract_table.py,sha256=naAeDsPTVjDUOnAxj_57UWXApg_nyWCsWdZ0f7bm740,8169
36
+ ngio/tables/tables_container.py,sha256=c7YnzLy2aaDc0jCH8ih8FTAKpAX8dIAu743nF7EjNTY,11871
37
+ ngio/tables/backends/__init__.py,sha256=tx97ZkK5kF_sAGU2kf_ZI9JxbOXn8GVjE0rUUq9h-QM,1525
38
+ ngio/tables/backends/_abstract_backend.py,sha256=jtai3AqcLNZyxYyK0rernbMtcwxWhWAahCS0fPlMNls,7454
39
+ ngio/tables/backends/_anndata.py,sha256=8RX2NO15CLxys3p6gw54Nd-_0WATU4WBlNndX06wvzI,2587
39
40
  ngio/tables/backends/_anndata_utils.py,sha256=DBWIcR0btnH-DIvDvzlcnMXoYhhtXc9DstryiOP0Qsg,3122
40
- ngio/tables/backends/_anndata_v1.py,sha256=6WIF4r7fweENdoLamt_B-Y9NFDw7n3HAxZ65jrCS16Q,2590
41
- ngio/tables/backends/_csv_v1.py,sha256=euWiqcvqaKhLuP_4ZiPPvOvWz3a3LKJdr00Nsh18ZEs,951
42
- ngio/tables/backends/_json_v1.py,sha256=mQsi47g5pevQU9ElM176QNpmMDzRrZBEqiRd0k78-yI,3153
43
- ngio/tables/backends/_non_zarr_backends_v1.py,sha256=SvPPhT6n5TrKUOyV1mNcdHQK49huZ5lwR8EVe9MdydM,7254
44
- ngio/tables/backends/_parquet_v1.py,sha256=FGrcZKsNoYTaq_I49v2hNemy-My5HrlmRuawo0fPXEI,1417
45
- ngio/tables/backends/_table_backends.py,sha256=Y_Hc-l4h3FixYf1MoaA1IoaojVWvefdHG7qP6Z1p4po,6492
41
+ ngio/tables/backends/_csv.py,sha256=Ev61D-AUKo4LIhXRmWPJgYbHI7eQdxiajQR574DevEM,932
42
+ ngio/tables/backends/_json.py,sha256=1ZsEuXDJm1rOZV_KjFm8CB0qhv7L1W7L2EGWPf4q_p0,3137
43
+ ngio/tables/backends/_non_zarr_backends.py,sha256=SvPPhT6n5TrKUOyV1mNcdHQK49huZ5lwR8EVe9MdydM,7254
44
+ ngio/tables/backends/_parquet.py,sha256=ic-p86h8lce8q9luBJGRzy6vxlWyJvA0-2l5cUD6OqY,1398
45
+ ngio/tables/backends/_table_backends.py,sha256=9bAwiB93gR8E7NdpH9WMMQhjn34Iz6oW9i_H4upYbW4,6567
46
46
  ngio/tables/backends/_utils.py,sha256=tJBSWN6OhO_1ybxl4vT2l3ImB028Fb6h0vaitPRcr8A,19668
47
- ngio/tables/v1/__init__.py,sha256=iFRO1oQKMJeSP2qOJiPkaySmqPnPvHSwrW30tPVYPuU,418
48
- ngio/tables/v1/_condition_table.py,sha256=Dc06AB9-bu3pqjE6BypfJ5exuFEryevQ-W85lCLlaMc,1793
49
- ngio/tables/v1/_feature_table.py,sha256=svQbCSfWSHlR2DQ8wPpb3yOJbCba9ywLpkb9N7S5CCw,3710
50
- ngio/tables/v1/_generic_table.py,sha256=VlgvUpghmhAx0l2kLH6ngye_K7FkgefpbVJ9x02XIvw,998
51
- ngio/tables/v1/_roi_table.py,sha256=3gXE60Uj1CJw04le9-QclCOCzv0w6UU9-PwUoaVNmpI,13490
47
+ ngio/tables/v1/__init__.py,sha256=Wr1_9RZFpaN8FYMTnxT9Yjkw4AS7y9FMWailmB_uj5g,617
48
+ ngio/tables/v1/_condition_table.py,sha256=LwtmygyhsSgAUoI_XuzF4lsHhTO5SIJqytxNAxqRCFU,1780
49
+ ngio/tables/v1/_feature_table.py,sha256=6QiaHYTxBGwkIkBndA0pIgTpLSnlkJ6b_Nqs_H5g3GI,3819
50
+ ngio/tables/v1/_generic_table.py,sha256=jFpW1vCDurN-TFQtQEyz1Rqnax7sVQoJzdPPBAVopFE,1239
51
+ ngio/tables/v1/_roi_table.py,sha256=VQDLJnXGniups4bhZxn9ga9LRQnEI5PJzWDrQNsjmDM,13455
52
52
  ngio/utils/__init__.py,sha256=r3nuLWgp6-cQlS4ODjYSBrfgdTLkCOVke9jKbn1NpkA,1129
53
53
  ngio/utils/_datasets.py,sha256=EdYJHIifpRou4f43dIuiKsdxe4K6FaeS4f1_e_EYrcI,1727
54
54
  ngio/utils/_errors.py,sha256=pKQ12LUjQLYE1nUawemA5h7HsgznjaSvV1n2PQU33N0,759
55
55
  ngio/utils/_fractal_fsspec_store.py,sha256=0PMqPRCw7CYdLPxsNtp_vMLXfiQVwqs5EWrn2YVEuvA,1549
56
56
  ngio/utils/_logger.py,sha256=HIuqD_2ShfFGDswBddcouStbKfL0Vz_ah8cAIFGhbS8,888
57
57
  ngio/utils/_zarr_utils.py,sha256=qOI-HL2HsfFLCj_yxsTR-aq4oHpSqS9KR13aEIvhGDY,13593
58
- ngio-0.3.0a0.dist-info/METADATA,sha256=FxmotsQBOZBxJrlxV9T9Ne_dcfd4apr2arZHV9OOixM,5241
59
- ngio-0.3.0a0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
60
- ngio-0.3.0a0.dist-info/licenses/LICENSE,sha256=UgN_a1QCeNh9rZWfz-wORQFxE3elQzLWPQaoK6N6fxQ,1502
61
- ngio-0.3.0a0.dist-info/RECORD,,
58
+ ngio-0.3.0a1.dist-info/METADATA,sha256=7yRX4zM74DQkNKw-w5OijTUM7afR7OSks8zLd-1R1ro,5304
59
+ ngio-0.3.0a1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
60
+ ngio-0.3.0a1.dist-info/licenses/LICENSE,sha256=UgN_a1QCeNh9rZWfz-wORQFxE3elQzLWPQaoK6N6fxQ,1502
61
+ ngio-0.3.0a1.dist-info/RECORD,,
File without changes