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 +4 -4
- ngio/images/ome_zarr_container.py +4 -4
- ngio/ome_zarr_meta/_meta_handlers.py +16 -8
- ngio/tables/__init__.py +6 -1
- ngio/tables/abstract_table.py +5 -4
- ngio/tables/backends/__init__.py +6 -4
- ngio/tables/backends/_abstract_backend.py +1 -1
- ngio/tables/backends/{_anndata_v1.py → _anndata.py} +1 -1
- ngio/tables/backends/{_csv_v1.py → _csv.py} +2 -2
- ngio/tables/backends/{_json_v1.py → _json.py} +1 -1
- ngio/tables/backends/{_parquet_v1.py → _parquet.py} +2 -2
- ngio/tables/backends/_table_backends.py +7 -5
- ngio/tables/tables_container.py +13 -13
- ngio/tables/v1/__init__.py +12 -3
- ngio/tables/v1/_condition_table.py +7 -3
- ngio/tables/v1/_feature_table.py +10 -12
- ngio/tables/v1/_generic_table.py +13 -2
- ngio/tables/v1/_roi_table.py +10 -6
- {ngio-0.3.0a0.dist-info → ngio-0.3.0a1.dist-info}/METADATA +2 -1
- {ngio-0.3.0a0.dist-info → ngio-0.3.0a1.dist-info}/RECORD +23 -23
- /ngio/tables/backends/{_non_zarr_backends_v1.py → _non_zarr_backends.py} +0 -0
- {ngio-0.3.0a0.dist-info → ngio-0.3.0a1.dist-info}/WHEEL +0 -0
- {ngio-0.3.0a0.dist-info → ngio-0.3.0a1.dist-info}/licenses/LICENSE +0 -0
ngio/hcs/plate.py
CHANGED
|
@@ -32,7 +32,7 @@ from ngio.tables import (
|
|
|
32
32
|
MaskingRoiTable,
|
|
33
33
|
RoiTable,
|
|
34
34
|
Table,
|
|
35
|
-
|
|
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:
|
|
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 (
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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 (
|
|
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:
|
|
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
|
|
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",
|
ngio/tables/abstract_table.py
CHANGED
|
@@ -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:
|
|
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:
|
|
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:
|
|
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:
|
|
245
|
+
backend: TableBackend | None = None,
|
|
245
246
|
) -> Self:
|
|
246
247
|
"""Create a new ROI table from a Zarr group handler."""
|
|
247
248
|
pass
|
ngio/tables/backends/__init__.py
CHANGED
|
@@ -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.
|
|
5
|
-
from ngio.tables.backends.
|
|
6
|
-
from ngio.tables.backends.
|
|
7
|
-
from ngio.tables.backends.
|
|
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 = "
|
|
22
|
+
backend: str = "anndata"
|
|
23
23
|
index_key: str | None = None
|
|
24
24
|
index_type: Literal["int", "str"] | None = None
|
|
25
25
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import pandas as pd
|
|
2
2
|
import polars as pl
|
|
3
3
|
|
|
4
|
-
from ngio.tables.backends.
|
|
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 "
|
|
35
|
+
return "csv"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import pandas as pd
|
|
2
2
|
import polars as pl
|
|
3
3
|
|
|
4
|
-
from ngio.tables.backends.
|
|
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 "
|
|
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.
|
|
11
|
-
from ngio.tables.backends.
|
|
12
|
-
from ngio.tables.backends.
|
|
13
|
-
from ngio.tables.backends.
|
|
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 = "
|
|
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
|
ngio/tables/tables_container.py
CHANGED
|
@@ -8,7 +8,7 @@ import polars as pl
|
|
|
8
8
|
|
|
9
9
|
from ngio.tables.backends import (
|
|
10
10
|
BackendMeta,
|
|
11
|
-
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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.
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
396
|
+
backend: TableBackend = "anndata",
|
|
397
397
|
cache: bool = False,
|
|
398
398
|
mode: AccessModeLiteral = "a",
|
|
399
399
|
parallel_safe: bool = False,
|
ngio/tables/v1/__init__.py
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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:
|
|
65
|
+
backend: TableBackend | None = None,
|
|
62
66
|
) -> "ConditionTableV1":
|
|
63
67
|
return cls._from_handler(
|
|
64
68
|
handler=handler,
|
ngio/tables/v1/_feature_table.py
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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:
|
|
86
|
+
backend: TableBackend | None = None,
|
|
89
87
|
) -> "FeatureTableV1":
|
|
90
88
|
return cls._from_handler(
|
|
91
89
|
handler=handler,
|
ngio/tables/v1/_generic_table.py
CHANGED
|
@@ -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,
|
|
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:
|
|
43
|
+
backend: TableBackend | None = None,
|
|
33
44
|
) -> "GenericTable":
|
|
34
45
|
return cls._from_handler(
|
|
35
46
|
handler=handler,
|
ngio/tables/v1/_roi_table.py
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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.
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
35
|
-
ngio/tables/abstract_table.py,sha256=
|
|
36
|
-
ngio/tables/tables_container.py,sha256=
|
|
37
|
-
ngio/tables/backends/__init__.py,sha256=
|
|
38
|
-
ngio/tables/backends/_abstract_backend.py,sha256=
|
|
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/
|
|
41
|
-
ngio/tables/backends/
|
|
42
|
-
ngio/tables/backends/
|
|
43
|
-
ngio/tables/backends/
|
|
44
|
-
ngio/tables/backends/
|
|
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=
|
|
48
|
-
ngio/tables/v1/_condition_table.py,sha256=
|
|
49
|
-
ngio/tables/v1/_feature_table.py,sha256=
|
|
50
|
-
ngio/tables/v1/_generic_table.py,sha256=
|
|
51
|
-
ngio/tables/v1/_roi_table.py,sha256=
|
|
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.
|
|
59
|
-
ngio-0.3.
|
|
60
|
-
ngio-0.3.
|
|
61
|
-
ngio-0.3.
|
|
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
|
|
File without changes
|
|
File without changes
|