ngio 0.4.8__py3-none-any.whl → 0.5.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/common/_pyramid.py +41 -28
- ngio/images/_create.py +23 -16
- ngio/images/_create_synt_container.py +9 -8
- ngio/images/_image.py +26 -16
- ngio/images/_label.py +15 -15
- ngio/images/_ome_zarr_container.py +29 -29
- ngio/ome_zarr_meta/_meta_handlers.py +29 -0
- ngio/ome_zarr_meta/ngio_specs/_ngio_image.py +12 -1
- ngio/ome_zarr_meta/v04/_v04_spec_utils.py +2 -2
- ngio/ome_zarr_meta/v05/__init__.py +23 -0
- ngio/ome_zarr_meta/v05/_custom_models.py +18 -0
- ngio/ome_zarr_meta/v05/_v05_spec_utils.py +518 -0
- ngio/tables/_tables_container.py +3 -3
- ngio/tables/backends/_abstract_backend.py +7 -0
- ngio/tables/backends/_anndata.py +4 -1
- ngio/tables/backends/_anndata_utils.py +4 -1
- ngio/tables/backends/_non_zarr_backends.py +6 -6
- ngio/tables/backends/_utils.py +1 -1
- ngio/tables/v1/_roi_table.py +3 -3
- ngio/utils/_datasets.py +0 -6
- ngio/utils/_zarr_utils.py +108 -32
- {ngio-0.4.8.dist-info → ngio-0.5.0a1.dist-info}/METADATA +6 -6
- {ngio-0.4.8.dist-info → ngio-0.5.0a1.dist-info}/RECORD +25 -22
- {ngio-0.4.8.dist-info → ngio-0.5.0a1.dist-info}/WHEEL +1 -1
- {ngio-0.4.8.dist-info → ngio-0.5.0a1.dist-info}/licenses/LICENSE +0 -0
ngio/utils/_zarr_utils.py
CHANGED
|
@@ -6,9 +6,10 @@ from typing import Literal
|
|
|
6
6
|
import fsspec
|
|
7
7
|
import zarr
|
|
8
8
|
from filelock import BaseFileLock, FileLock
|
|
9
|
-
from zarr.
|
|
10
|
-
from zarr.
|
|
11
|
-
from zarr.
|
|
9
|
+
from zarr.abc.store import Store
|
|
10
|
+
from zarr.core.array import CompressorLike
|
|
11
|
+
from zarr.errors import ContainsGroupError
|
|
12
|
+
from zarr.storage import FsspecStore, LocalStore, MemoryStore
|
|
12
13
|
|
|
13
14
|
from ngio.utils import NgioFileExistsError, NgioFileNotFoundError, NgioValueError
|
|
14
15
|
from ngio.utils._errors import NgioError
|
|
@@ -18,7 +19,7 @@ AccessModeLiteral = Literal["r", "r+", "w", "w-", "a"]
|
|
|
18
19
|
# but to make sure we can handle the store correctly
|
|
19
20
|
# we need to be more restrictive
|
|
20
21
|
NgioSupportedStore = (
|
|
21
|
-
str | Path | fsspec.mapping.FSMap |
|
|
22
|
+
str | Path | fsspec.mapping.FSMap | FsspecStore | MemoryStore | LocalStore
|
|
22
23
|
)
|
|
23
24
|
GenericStore = Store | NgioSupportedStore
|
|
24
25
|
StoreOrGroup = GenericStore | zarr.Group
|
|
@@ -37,25 +38,29 @@ def _check_store(store) -> NgioSupportedStore:
|
|
|
37
38
|
|
|
38
39
|
def _check_group(group: zarr.Group, mode: AccessModeLiteral) -> zarr.Group:
|
|
39
40
|
"""Check the group and return a valid group."""
|
|
40
|
-
|
|
41
|
-
if is_read_only and mode in ["w", "w-"]:
|
|
41
|
+
if group.read_only and mode in ["w", "w-"]:
|
|
42
42
|
raise NgioValueError(
|
|
43
43
|
"The group is read only. Cannot open in write mode ['w', 'w-']"
|
|
44
44
|
)
|
|
45
45
|
|
|
46
|
-
if mode == "r" and not
|
|
46
|
+
if mode == "r" and not group.read_only:
|
|
47
47
|
# let's make sure we don't accidentally write to the group
|
|
48
48
|
group = zarr.open_group(store=group.store, path=group.path, mode="r")
|
|
49
49
|
|
|
50
50
|
return group
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
def open_group_wrapper(
|
|
53
|
+
def open_group_wrapper(
|
|
54
|
+
store: StoreOrGroup,
|
|
55
|
+
mode: AccessModeLiteral,
|
|
56
|
+
zarr_format: Literal[2, 3] | None = None,
|
|
57
|
+
) -> zarr.Group:
|
|
54
58
|
"""Wrapper around zarr.open_group with some additional checks.
|
|
55
59
|
|
|
56
60
|
Args:
|
|
57
61
|
store (StoreOrGroup): The store or group to open.
|
|
58
|
-
mode (
|
|
62
|
+
mode (AccessModeLiteral): The mode to open the group in.
|
|
63
|
+
zarr_format (int): The Zarr format version to use.
|
|
59
64
|
|
|
60
65
|
Returns:
|
|
61
66
|
zarr.Group: The opened Zarr group.
|
|
@@ -67,16 +72,21 @@ def open_group_wrapper(store: StoreOrGroup, mode: AccessModeLiteral) -> zarr.Gro
|
|
|
67
72
|
|
|
68
73
|
try:
|
|
69
74
|
_check_store(store)
|
|
70
|
-
group = zarr.open_group(store=store, mode=mode)
|
|
75
|
+
group = zarr.open_group(store=store, mode=mode, zarr_format=zarr_format)
|
|
71
76
|
|
|
72
|
-
except
|
|
77
|
+
except FileExistsError as e:
|
|
73
78
|
raise NgioFileExistsError(
|
|
74
79
|
f"A Zarr group already exists at {store}, consider setting overwrite=True."
|
|
75
80
|
) from e
|
|
76
81
|
|
|
77
|
-
except
|
|
82
|
+
except FileNotFoundError as e:
|
|
78
83
|
raise NgioFileNotFoundError(f"No Zarr group found at {store}") from e
|
|
79
84
|
|
|
85
|
+
except ContainsGroupError as e:
|
|
86
|
+
raise NgioFileExistsError(
|
|
87
|
+
f"A Zarr group already exists at {store}, consider setting overwrite=True."
|
|
88
|
+
) from e
|
|
89
|
+
|
|
80
90
|
return group
|
|
81
91
|
|
|
82
92
|
|
|
@@ -86,6 +96,7 @@ class ZarrGroupHandler:
|
|
|
86
96
|
def __init__(
|
|
87
97
|
self,
|
|
88
98
|
store: StoreOrGroup,
|
|
99
|
+
zarr_format: Literal[2, 3] | None = None,
|
|
89
100
|
cache: bool = False,
|
|
90
101
|
mode: AccessModeLiteral = "a",
|
|
91
102
|
parallel_safe: bool = False,
|
|
@@ -96,6 +107,7 @@ class ZarrGroupHandler:
|
|
|
96
107
|
Args:
|
|
97
108
|
store (StoreOrGroup): The Zarr store or group containing the image data.
|
|
98
109
|
meta_mode (str): The mode of the metadata handler.
|
|
110
|
+
zarr_format (int): The Zarr format version to use.
|
|
99
111
|
cache (bool): Whether to cache the metadata.
|
|
100
112
|
mode (str): The mode of the store.
|
|
101
113
|
parallel_safe (bool): If True, the handler will create a lock file to make
|
|
@@ -112,20 +124,24 @@ class ZarrGroupHandler:
|
|
|
112
124
|
"If you want to use the lock mechanism, you should not use the cache."
|
|
113
125
|
)
|
|
114
126
|
|
|
115
|
-
group = open_group_wrapper(store, mode)
|
|
127
|
+
group = open_group_wrapper(store=store, mode=mode, zarr_format=zarr_format)
|
|
116
128
|
_store = group.store
|
|
117
129
|
|
|
118
130
|
# Make sure the cache is set in the attrs
|
|
119
131
|
# in the same way as the cache in the handler
|
|
120
|
-
|
|
132
|
+
|
|
133
|
+
## TODO
|
|
134
|
+
# Figure out how to handle the cache in the new zarr version
|
|
135
|
+
# group.attrs.cache = cache
|
|
121
136
|
|
|
122
137
|
if parallel_safe:
|
|
123
|
-
if not isinstance(_store,
|
|
138
|
+
if not isinstance(_store, LocalStore):
|
|
124
139
|
raise NgioValueError(
|
|
125
|
-
"The store needs to be a
|
|
140
|
+
"The store needs to be a LocalStore to use the lock mechanism. "
|
|
126
141
|
f"Instead, got {_store.__class__.__name__}."
|
|
127
142
|
)
|
|
128
|
-
|
|
143
|
+
|
|
144
|
+
store_path = _store.root / group.path
|
|
129
145
|
self._lock_path = store_path.with_suffix(".lock")
|
|
130
146
|
self._lock = FileLock(self._lock_path, timeout=10)
|
|
131
147
|
|
|
@@ -148,23 +164,28 @@ class ZarrGroupHandler:
|
|
|
148
164
|
)
|
|
149
165
|
|
|
150
166
|
@property
|
|
151
|
-
def store(self) ->
|
|
167
|
+
def store(self) -> Store:
|
|
152
168
|
"""Return the store of the group."""
|
|
153
|
-
return self.
|
|
169
|
+
return self._group.store
|
|
154
170
|
|
|
155
171
|
@property
|
|
156
172
|
def full_url(self) -> str | None:
|
|
157
173
|
"""Return the store path."""
|
|
158
|
-
if isinstance(self.store,
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return
|
|
174
|
+
if isinstance(self.store, LocalStore):
|
|
175
|
+
return (self.store.root / self.group.path).as_posix()
|
|
176
|
+
if isinstance(self.store, FsspecStore):
|
|
177
|
+
return self.store.fs.map.root_path
|
|
162
178
|
return None
|
|
163
179
|
|
|
180
|
+
@property
|
|
181
|
+
def zarr_format(self) -> Literal[2, 3]:
|
|
182
|
+
"""Return the Zarr format version."""
|
|
183
|
+
return self._group.metadata.zarr_format
|
|
184
|
+
|
|
164
185
|
@property
|
|
165
186
|
def mode(self) -> AccessModeLiteral:
|
|
166
187
|
"""Return the mode of the group."""
|
|
167
|
-
return self._mode # type: ignore
|
|
188
|
+
return self._mode # type: ignore
|
|
168
189
|
|
|
169
190
|
@property
|
|
170
191
|
def lock(self) -> BaseFileLock:
|
|
@@ -195,9 +216,30 @@ class ZarrGroupHandler:
|
|
|
195
216
|
|
|
196
217
|
raise NgioValueError("The lock is still in use. Cannot remove it.")
|
|
197
218
|
|
|
219
|
+
def reopen_group(self) -> zarr.Group:
|
|
220
|
+
"""Reopen the group.
|
|
221
|
+
|
|
222
|
+
This is useful when the group has been modified
|
|
223
|
+
outside of the handler.
|
|
224
|
+
"""
|
|
225
|
+
if self.mode == "r":
|
|
226
|
+
mode = "r"
|
|
227
|
+
else:
|
|
228
|
+
mode = "r+"
|
|
229
|
+
return zarr.open_group(
|
|
230
|
+
store=self._group.store,
|
|
231
|
+
path=self._group.path,
|
|
232
|
+
mode=mode,
|
|
233
|
+
zarr_format=self._group.metadata.zarr_format,
|
|
234
|
+
)
|
|
235
|
+
|
|
198
236
|
@property
|
|
199
237
|
def group(self) -> zarr.Group:
|
|
200
238
|
"""Return the group."""
|
|
239
|
+
if self._parallel_safe:
|
|
240
|
+
# If we are parallel safe, we need to reopen the group
|
|
241
|
+
# to make sure that the attributes are up to date
|
|
242
|
+
return self.reopen_group()
|
|
201
243
|
return self._group
|
|
202
244
|
|
|
203
245
|
def add_to_cache(self, key: str, value: object) -> None:
|
|
@@ -229,8 +271,7 @@ class ZarrGroupHandler:
|
|
|
229
271
|
|
|
230
272
|
def _write_attrs(self, attrs: dict, overwrite: bool = False) -> None:
|
|
231
273
|
"""Write the metadata to the store."""
|
|
232
|
-
|
|
233
|
-
if is_read_only:
|
|
274
|
+
if self.group.read_only:
|
|
234
275
|
raise NgioValueError("The group is read only. Cannot write metadata.")
|
|
235
276
|
|
|
236
277
|
# we need to invalidate the current attrs cache
|
|
@@ -342,23 +383,34 @@ class ZarrGroupHandler:
|
|
|
342
383
|
path: str,
|
|
343
384
|
shape: tuple[int, ...],
|
|
344
385
|
dtype: str,
|
|
345
|
-
chunks: tuple[int, ...] |
|
|
346
|
-
|
|
347
|
-
|
|
386
|
+
chunks: tuple[int, ...] | Literal["auto"] = "auto",
|
|
387
|
+
compressors: CompressorLike = "auto",
|
|
388
|
+
separator: Literal[".", "/"] = "/",
|
|
348
389
|
overwrite: bool = False,
|
|
349
390
|
) -> zarr.Array:
|
|
350
391
|
if self.mode == "r":
|
|
351
392
|
raise NgioValueError("Cannot create an array in read only mode.")
|
|
352
393
|
|
|
394
|
+
if self.zarr_format == 2:
|
|
395
|
+
chunks_encoding = {
|
|
396
|
+
"name": "v2",
|
|
397
|
+
"separator": separator,
|
|
398
|
+
}
|
|
399
|
+
else:
|
|
400
|
+
chunks_encoding = {
|
|
401
|
+
"name": "default",
|
|
402
|
+
"separator": separator,
|
|
403
|
+
}
|
|
404
|
+
|
|
353
405
|
try:
|
|
354
|
-
return self.group.
|
|
406
|
+
return self.group.create_array(
|
|
355
407
|
name=path,
|
|
356
408
|
shape=shape,
|
|
357
409
|
dtype=dtype,
|
|
358
410
|
chunks=chunks,
|
|
359
|
-
|
|
360
|
-
compressor=compressor,
|
|
411
|
+
chunk_key_encoding=chunks_encoding,
|
|
361
412
|
overwrite=overwrite,
|
|
413
|
+
compressors=compressors,
|
|
362
414
|
)
|
|
363
415
|
except ContainsGroupError as e:
|
|
364
416
|
raise NgioFileExistsError(
|
|
@@ -382,6 +434,7 @@ class ZarrGroupHandler:
|
|
|
382
434
|
group = self.get_group(path, create_mode=True, overwrite=overwrite)
|
|
383
435
|
return ZarrGroupHandler(
|
|
384
436
|
store=group,
|
|
437
|
+
zarr_format=self.zarr_format,
|
|
385
438
|
cache=self.use_cache,
|
|
386
439
|
mode=self.mode,
|
|
387
440
|
parallel_safe=self._parallel_safe,
|
|
@@ -413,3 +466,26 @@ class ZarrGroupHandler:
|
|
|
413
466
|
f"Error copying group to {handler.full_url}, "
|
|
414
467
|
f"#{n_skipped} files where skipped."
|
|
415
468
|
)
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
def find_dimension_separator(array: zarr.Array) -> Literal[".", "/"]:
|
|
472
|
+
"""Find the dimension separator used in the Zarr store.
|
|
473
|
+
|
|
474
|
+
Args:
|
|
475
|
+
array (zarr.Array): The Zarr array to check.
|
|
476
|
+
|
|
477
|
+
Returns:
|
|
478
|
+
Literal[".", "/"]: The dimension separator used in the store.
|
|
479
|
+
"""
|
|
480
|
+
from zarr.core.chunk_key_encodings import DefaultChunkKeyEncoding
|
|
481
|
+
|
|
482
|
+
if array.metadata.zarr_format == 2:
|
|
483
|
+
separator = array.metadata.dimension_separator
|
|
484
|
+
else:
|
|
485
|
+
separator = array.metadata.chunk_key_encoding
|
|
486
|
+
if not isinstance(separator, DefaultChunkKeyEncoding):
|
|
487
|
+
raise ValueError(
|
|
488
|
+
"Only DefaultChunkKeyEncoding is supported in this example."
|
|
489
|
+
)
|
|
490
|
+
separator = separator.separator
|
|
491
|
+
return separator
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ngio
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0a1
|
|
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
|
|
@@ -16,20 +16,20 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
16
16
|
Classifier: Typing :: Typed
|
|
17
17
|
Requires-Python: <3.14,>=3.11
|
|
18
18
|
Requires-Dist: aiohttp
|
|
19
|
-
Requires-Dist: anndata
|
|
20
|
-
Requires-Dist: dask[array]
|
|
21
|
-
Requires-Dist: dask[distributed]
|
|
19
|
+
Requires-Dist: anndata
|
|
20
|
+
Requires-Dist: dask[array]
|
|
21
|
+
Requires-Dist: dask[distributed]
|
|
22
22
|
Requires-Dist: filelock
|
|
23
23
|
Requires-Dist: numpy
|
|
24
24
|
Requires-Dist: ome-zarr-models
|
|
25
|
-
Requires-Dist: pandas
|
|
25
|
+
Requires-Dist: pandas>=1.2.0
|
|
26
26
|
Requires-Dist: pillow
|
|
27
27
|
Requires-Dist: polars
|
|
28
28
|
Requires-Dist: pooch
|
|
29
29
|
Requires-Dist: pyarrow
|
|
30
30
|
Requires-Dist: pydantic
|
|
31
31
|
Requires-Dist: requests
|
|
32
|
-
Requires-Dist: zarr
|
|
32
|
+
Requires-Dist: zarr>3
|
|
33
33
|
Provides-Extra: dev
|
|
34
34
|
Requires-Dist: devtools; extra == 'dev'
|
|
35
35
|
Requires-Dist: matplotlib; extra == 'dev'
|
|
@@ -2,7 +2,7 @@ ngio/__init__.py,sha256=rEgnXuU6TCejUUGsxt4eKmjMhxjYh0fYBxWF4o5YjbE,1435
|
|
|
2
2
|
ngio/common/__init__.py,sha256=aPSuUbdGryrxbnlWrsVNe3LZoBAWC4GijR1BNH1UwuU,612
|
|
3
3
|
ngio/common/_dimensions.py,sha256=w8PYgyWxA8hgJETjFbw5CXf7WrasCL5FbzgfL1in86M,11361
|
|
4
4
|
ngio/common/_masking_roi.py,sha256=ZZTXordEZoq_ADk0OzADvq-5dPOwUBSuNobzFR8fpTw,5697
|
|
5
|
-
ngio/common/_pyramid.py,sha256=
|
|
5
|
+
ngio/common/_pyramid.py,sha256=186eQSCxP_x2heYKmMP_Edl4Aml9Eo1bBmIHlwslqy8,8699
|
|
6
6
|
ngio/common/_roi.py,sha256=9fKFTHoUiP0xmxvQiFkNmIuwWg3bFuRaAx-froCSqvA,11487
|
|
7
7
|
ngio/common/_synt_images_utils.py,sha256=B6uYOW1NyrM06YMR-csca3_YnAAkPRTbvnbLdy9tk9E,3188
|
|
8
8
|
ngio/common/_zoom.py,sha256=U01c-vqXjzZkrpd9Yvs24frVfTls_xPJeeaFCGmUwYI,6727
|
|
@@ -18,12 +18,12 @@ ngio/hcs/__init__.py,sha256=G8j9vD-liLeB_UeGtKYIgshWvJnUA6ks9GwjvWBLdHs,357
|
|
|
18
18
|
ngio/hcs/_plate.py,sha256=qfRwbCKaoz_AWTi8RDFFwOxy5geSknfJrPcqFVno9zI,44288
|
|
19
19
|
ngio/images/__init__.py,sha256=9Whvt7GTiCgT_vXaEEqGnDaY1-UsRk3dhLTv091F_g4,1211
|
|
20
20
|
ngio/images/_abstract_image.py,sha256=hrB9xn4MFRxnxE1d7HKnM8SXVPUGhMD9u32yBHTsFiU,18517
|
|
21
|
-
ngio/images/_create.py,sha256=
|
|
22
|
-
ngio/images/_create_synt_container.py,sha256=
|
|
23
|
-
ngio/images/_image.py,sha256=
|
|
24
|
-
ngio/images/_label.py,sha256=
|
|
21
|
+
ngio/images/_create.py,sha256=OirIKg843CCSiwy_oUolX2UHlROR_iO4rN_IK47jDWc,10448
|
|
22
|
+
ngio/images/_create_synt_container.py,sha256=D3SkjYN_AZ5fSefjEX0iQ3ZGEuBTWZvuPQIwHc6l-CU,5519
|
|
23
|
+
ngio/images/_image.py,sha256=JWN7qmNVZxAzm9zmaImYseDt8xzYtOw-N0olR6VQo_8,33483
|
|
24
|
+
ngio/images/_label.py,sha256=sJUB8of7t1YErZRu3t7jzGjlRn3KAAs0EL5nFrbvvlc,11921
|
|
25
25
|
ngio/images/_masked_image.py,sha256=YhbBzgPZMav6rX0WYue1BaxAzEIsfaQrxUIOK6ZWZcw,18848
|
|
26
|
-
ngio/images/_ome_zarr_container.py,sha256=
|
|
26
|
+
ngio/images/_ome_zarr_container.py,sha256=tfG40PLNfyfaR2pVAmGINlkKJRoQ4W0L0melFotMcP8,38737
|
|
27
27
|
ngio/images/_table_ops.py,sha256=jFv_AMqoB4JBpoWsMtZppZVW7dAOC_u-JpfNm8b33kY,15292
|
|
28
28
|
ngio/io_pipes/__init__.py,sha256=arW_7GWzZs82kPNKdm_6B1sIDFV0lWwp-ZaORr9Q1FQ,2412
|
|
29
29
|
ngio/io_pipes/_io_pipes.py,sha256=KuwMYofE11EKx0iplWXBQZ-eE1A9YpGDprWh98cUlAI,10710
|
|
@@ -37,17 +37,20 @@ ngio/io_pipes/_ops_slices_utils.py,sha256=xjDaCVGmtME5Q0XSmGrY3nUKYgw5jOBQZW4YDq
|
|
|
37
37
|
ngio/io_pipes/_ops_transforms.py,sha256=uITs6v6sZ7DQ_Hpw3JdX8MuPOzir-bihvGzY84Qn4wY,2934
|
|
38
38
|
ngio/io_pipes/_zoom_transform.py,sha256=WBY1tO6_Qhf8FaDujfTdipuuqFf7PSi204wx5VKKs88,6884
|
|
39
39
|
ngio/ome_zarr_meta/__init__.py,sha256=tzxW2oVhfeMBVuv3XkcbOLzMnbDvUnie-AVsvSxRkdE,1265
|
|
40
|
-
ngio/ome_zarr_meta/_meta_handlers.py,sha256=
|
|
40
|
+
ngio/ome_zarr_meta/_meta_handlers.py,sha256=P2Edraf2MlTMlwFOpXCkUqD1QTN2nTwGv5Ff0ab5csw,26715
|
|
41
41
|
ngio/ome_zarr_meta/ngio_specs/__init__.py,sha256=U2FqZR91Ob2N6CqKdyw-_Ll-wMgmGuPZGVRCr6wuRFY,1698
|
|
42
42
|
ngio/ome_zarr_meta/ngio_specs/_axes.py,sha256=gNzxCddn53m9dlNJlV5CL-aQS-nGJrbCDGfAp5L97LY,16412
|
|
43
43
|
ngio/ome_zarr_meta/ngio_specs/_channels.py,sha256=TDxIy-yVc2YaWPIFJRYnYwZbA8O5Ee_OiWppHYrEdpU,16647
|
|
44
44
|
ngio/ome_zarr_meta/ngio_specs/_dataset.py,sha256=CrHnjVWBGYPqErKkHR-E2DKrE3DmGznXMkd3Y9Z4uYo,3434
|
|
45
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=
|
|
46
|
+
ngio/ome_zarr_meta/ngio_specs/_ngio_image.py,sha256=y44AVdB7IQD9t5yiZV6cXSvV9_-CGDiYrCfX3PeaclQ,16231
|
|
47
47
|
ngio/ome_zarr_meta/ngio_specs/_pixel_size.py,sha256=4VF1djY9T5tp6GCJXppFrUJwALI1XgIm0imoM5rNvdE,3876
|
|
48
48
|
ngio/ome_zarr_meta/v04/__init__.py,sha256=dJRzzxyYc81kf-0Hip_bqvbdManaM8XTdQX2meWyCSs,583
|
|
49
49
|
ngio/ome_zarr_meta/v04/_custom_models.py,sha256=5GxiDERvLuvq4QvApcA6EiKLS6hLFX1R0R_9rSaa85A,530
|
|
50
|
-
ngio/ome_zarr_meta/v04/_v04_spec_utils.py,sha256=
|
|
50
|
+
ngio/ome_zarr_meta/v04/_v04_spec_utils.py,sha256=xa3DT7VJJZyd-4EB-KGjlPcKkTmst_izTcoWj30mLiY,15766
|
|
51
|
+
ngio/ome_zarr_meta/v05/__init__.py,sha256=j6YuIKu2bxmhlhFCbhXg5UA4qD7V8CpyTAHl1vnIpq8,583
|
|
52
|
+
ngio/ome_zarr_meta/v05/_custom_models.py,sha256=ZN3bE9nwx4y3tElhsYafI4S2zp_WzdkQKcyuuBiaXXo,530
|
|
53
|
+
ngio/ome_zarr_meta/v05/_v05_spec_utils.py,sha256=vd9-EiZZjBpCXmwgLj8a1RWiwFpSjjxKBfbH8OpsG9M,16493
|
|
51
54
|
ngio/resources/__init__.py,sha256=4E4TXTNYEgRHt26C1XcC4pPobJJsmZRYm1Ml4uAuAkE,1664
|
|
52
55
|
ngio/resources/resource_model.py,sha256=eE1m0dyk-2psPC4X8Ifyan524QHUOd52TEQdvoU0m8I,861
|
|
53
56
|
ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/mask.png,sha256=g3QmxQdmeciAtBe5cTCRfR6yw3keG9cBYfjizMo6EGo,11890
|
|
@@ -55,31 +58,31 @@ ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/nuclei.png,sha
|
|
|
55
58
|
ngio/resources/20200812-CardiomyocyteDifferentiation14-Cycle1_B03/raw.jpg,sha256=82lejQAIokj5w9g-qqhysDTWpHtNvJTkdURG_BjqIxQ,37743
|
|
56
59
|
ngio/tables/__init__.py,sha256=_BV3sclNMLITu_J8_3DkkUrCB6Kro0HzeWLDCD1ivKM,877
|
|
57
60
|
ngio/tables/_abstract_table.py,sha256=rwGa47TzbFmosucBWVfFq6JEXtgGvOdUVtU9DIelV88,8204
|
|
58
|
-
ngio/tables/_tables_container.py,sha256=
|
|
61
|
+
ngio/tables/_tables_container.py,sha256=3xmpREaN671l40MPprnl1BD-VoOb6xfjECb5mNoMW0w,12173
|
|
59
62
|
ngio/tables/backends/__init__.py,sha256=MwSRXNF1rWQBFOTDA_vT3oGoNZpviVgytsL5Txnu08I,1619
|
|
60
|
-
ngio/tables/backends/_abstract_backend.py,sha256=
|
|
61
|
-
ngio/tables/backends/_anndata.py,sha256=
|
|
62
|
-
ngio/tables/backends/_anndata_utils.py,sha256=
|
|
63
|
+
ngio/tables/backends/_abstract_backend.py,sha256=M1ogsBpWBiQMV65YweZhA845PAtkzG2BsZCPN_7Xp8U,7613
|
|
64
|
+
ngio/tables/backends/_anndata.py,sha256=KBzXVxaXstVx3ofcLYYFm8ECVFDaHxfUWcKdg5vQPqY,2992
|
|
65
|
+
ngio/tables/backends/_anndata_utils.py,sha256=g0mIfihXd4p75bvMvCYTljBKTP13EZ9p_SVMifDKE3Y,3208
|
|
63
66
|
ngio/tables/backends/_csv.py,sha256=Ev61D-AUKo4LIhXRmWPJgYbHI7eQdxiajQR574DevEM,932
|
|
64
67
|
ngio/tables/backends/_json.py,sha256=1ZsEuXDJm1rOZV_KjFm8CB0qhv7L1W7L2EGWPf4q_p0,3137
|
|
65
|
-
ngio/tables/backends/_non_zarr_backends.py,sha256=
|
|
68
|
+
ngio/tables/backends/_non_zarr_backends.py,sha256=5a1fbxiVnUXt1tiA025BqN0T7SQJvIERFtQHp4PhFHw,7294
|
|
66
69
|
ngio/tables/backends/_parquet.py,sha256=ic-p86h8lce8q9luBJGRzy6vxlWyJvA0-2l5cUD6OqY,1398
|
|
67
70
|
ngio/tables/backends/_table_backends.py,sha256=ksP2NAosXZkNMZf-IMrLx7bjQgp_eKfvPYK4vMdT1A8,7250
|
|
68
|
-
ngio/tables/backends/_utils.py,sha256=
|
|
71
|
+
ngio/tables/backends/_utils.py,sha256=t4dLXSPxx2AnJvVtj0GIwrLoO11h4Ges6U7hj4md0hY,19730
|
|
69
72
|
ngio/tables/v1/__init__.py,sha256=Wr1_9RZFpaN8FYMTnxT9Yjkw4AS7y9FMWailmB_uj5g,617
|
|
70
73
|
ngio/tables/v1/_condition_table.py,sha256=T0Uq5BKkmMoEspt_Rx0U99Ow6S9GAMZDHqvUO5obCAM,1780
|
|
71
74
|
ngio/tables/v1/_feature_table.py,sha256=n9uMHwoBh-_dlOhUXCFbmAjXFVXncNCR3SjE2qzXI68,3821
|
|
72
75
|
ngio/tables/v1/_generic_table.py,sha256=1ktJHeuv7U1g5Z8PFUuTkCjOzcYMQd8xegKHKUedJB8,1240
|
|
73
|
-
ngio/tables/v1/_roi_table.py,sha256=
|
|
76
|
+
ngio/tables/v1/_roi_table.py,sha256=g7UpMmpf3uAfaG59WYRnimUBgiB_T1qUJRwMZpMt9cI,17099
|
|
74
77
|
ngio/transforms/__init__.py,sha256=JA0-Ui7skbXkm9ofN-AEhU1FTLutkMkwTdVD-310frQ,113
|
|
75
78
|
ngio/transforms/_zoom.py,sha256=otyE-vxFnywUJ8U4mHjat-bNG_7_jv62ckTpqDMxyVQ,550
|
|
76
79
|
ngio/utils/__init__.py,sha256=XPYh8ehC7uXNU2cFFXZAw-S3DpWpX1Yq2xGkffZv5vI,1142
|
|
77
|
-
ngio/utils/_datasets.py,sha256=
|
|
80
|
+
ngio/utils/_datasets.py,sha256=6GtxfPkjutNaeg5BHuJDBP0GudvQXHLU6mmHp_o0bGA,5650
|
|
78
81
|
ngio/utils/_errors.py,sha256=pKQ12LUjQLYE1nUawemA5h7HsgznjaSvV1n2PQU33N0,759
|
|
79
82
|
ngio/utils/_fractal_fsspec_store.py,sha256=RdcCFOgHexRKX9zZvJV5RI-5OPc7VOPS6q_IeRxm24I,1548
|
|
80
83
|
ngio/utils/_logger.py,sha256=N5W0a_xwze4blS1MolidBkTMbjTbg8GPguJZNun3mAE,1392
|
|
81
|
-
ngio/utils/_zarr_utils.py,sha256=
|
|
82
|
-
ngio-0.
|
|
83
|
-
ngio-0.
|
|
84
|
-
ngio-0.
|
|
85
|
-
ngio-0.
|
|
84
|
+
ngio/utils/_zarr_utils.py,sha256=ATehiEALPI__eNQSWdSW5PpJLmI2FECrexA9jTZAI2s,16103
|
|
85
|
+
ngio-0.5.0a1.dist-info/METADATA,sha256=AT0kbnHlYkhiL0_AmZpOm8DagaEPGCkI1xze_cJy3w8,6104
|
|
86
|
+
ngio-0.5.0a1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
87
|
+
ngio-0.5.0a1.dist-info/licenses/LICENSE,sha256=UgN_a1QCeNh9rZWfz-wORQFxE3elQzLWPQaoK6N6fxQ,1502
|
|
88
|
+
ngio-0.5.0a1.dist-info/RECORD,,
|
|
File without changes
|