lamindb 0.76.1__py3-none-any.whl → 0.76.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lamindb/__init__.py +7 -4
- lamindb/_artifact.py +80 -53
- lamindb/_can_validate.py +10 -3
- lamindb/_collection.py +17 -18
- lamindb/_curate.py +33 -15
- lamindb/_feature.py +0 -49
- lamindb/_filter.py +6 -5
- lamindb/_finish.py +2 -2
- lamindb/_from_values.py +14 -10
- lamindb/_is_versioned.py +3 -5
- lamindb/_query_manager.py +2 -2
- lamindb/_query_set.py +33 -5
- lamindb/_record.py +29 -39
- lamindb/_save.py +2 -3
- lamindb/_transform.py +23 -10
- lamindb/core/_context.py +16 -11
- lamindb/core/_feature_manager.py +25 -8
- lamindb/core/_label_manager.py +1 -1
- lamindb/core/storage/__init__.py +1 -1
- lamindb/core/storage/_backed_access.py +2 -38
- lamindb/core/storage/_tiledbsoma.py +229 -0
- lamindb/core/storage/paths.py +2 -6
- lamindb/core/versioning.py +43 -47
- lamindb/integrations/_vitessce.py +2 -0
- {lamindb-0.76.1.dist-info → lamindb-0.76.2.dist-info}/METADATA +6 -14
- {lamindb-0.76.1.dist-info → lamindb-0.76.2.dist-info}/RECORD +28 -27
- {lamindb-0.76.1.dist-info → lamindb-0.76.2.dist-info}/LICENSE +0 -0
- {lamindb-0.76.1.dist-info → lamindb-0.76.2.dist-info}/WHEEL +0 -0
@@ -0,0 +1,229 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import TYPE_CHECKING, Literal
|
4
|
+
|
5
|
+
from anndata import AnnData
|
6
|
+
from lamin_utils import logger
|
7
|
+
from lamindb_setup.core._settings_storage import get_storage_region
|
8
|
+
from lamindb_setup.core.upath import create_path
|
9
|
+
from lnschema_core import Artifact, Run, Storage
|
10
|
+
from upath import UPath
|
11
|
+
|
12
|
+
if TYPE_CHECKING:
|
13
|
+
from lamindb_setup.core.types import UPathStr
|
14
|
+
from tiledbsoma import Collection as SOMACollection
|
15
|
+
from tiledbsoma import Experiment as SOMAExperiment
|
16
|
+
from tiledbsoma.io import ExperimentAmbientLabelMapping
|
17
|
+
|
18
|
+
|
19
|
+
def _read_adata_h5ad_zarr(objpath: UPath):
|
20
|
+
from lamindb.core.storage.paths import read_adata_h5ad, read_adata_zarr
|
21
|
+
|
22
|
+
if objpath.is_dir():
|
23
|
+
adata = read_adata_zarr(objpath)
|
24
|
+
else:
|
25
|
+
adata = read_adata_h5ad(objpath)
|
26
|
+
return adata
|
27
|
+
|
28
|
+
|
29
|
+
def _tiledb_config_s3(storepath: UPath) -> dict:
|
30
|
+
region = get_storage_region(storepath)
|
31
|
+
tiledb_config = {"vfs.s3.region": region}
|
32
|
+
storage_options = storepath.storage_options
|
33
|
+
if "key" in storage_options:
|
34
|
+
tiledb_config["vfs.s3.aws_access_key_id"] = storage_options["key"]
|
35
|
+
if "secret" in storage_options:
|
36
|
+
tiledb_config["vfs.s3.aws_secret_access_key"] = storage_options["secret"]
|
37
|
+
if "token" in storage_options:
|
38
|
+
tiledb_config["vfs.s3.aws_session_token"] = storage_options["token"]
|
39
|
+
|
40
|
+
return tiledb_config
|
41
|
+
|
42
|
+
|
43
|
+
def _open_tiledbsoma(
|
44
|
+
storepath: UPath, mode: Literal["r", "w"] = "r"
|
45
|
+
) -> SOMACollection | SOMAExperiment:
|
46
|
+
try:
|
47
|
+
import tiledbsoma as soma
|
48
|
+
except ImportError as e:
|
49
|
+
raise ImportError("Please install tiledbsoma: pip install tiledbsoma") from e
|
50
|
+
|
51
|
+
storepath_str = storepath.as_posix()
|
52
|
+
if storepath.protocol == "s3":
|
53
|
+
ctx = soma.SOMATileDBContext(tiledb_config=_tiledb_config_s3(storepath))
|
54
|
+
# this is a strange bug
|
55
|
+
# for some reason iterdir futher gives incorrect results
|
56
|
+
# if cache is not invalidated
|
57
|
+
# instead of obs and ms it gives ms and ms in the list of names
|
58
|
+
storepath.fs.invalidate_cache()
|
59
|
+
else:
|
60
|
+
ctx = None
|
61
|
+
|
62
|
+
soma_objects = [obj.name for obj in storepath.iterdir()]
|
63
|
+
if "obs" in soma_objects and "ms" in soma_objects:
|
64
|
+
SOMAType = soma.Experiment
|
65
|
+
else:
|
66
|
+
SOMAType = soma.Collection
|
67
|
+
return SOMAType.open(storepath_str, mode=mode, context=ctx)
|
68
|
+
|
69
|
+
|
70
|
+
def register_for_tiledbsoma_store(
|
71
|
+
store: UPathStr | Artifact | None,
|
72
|
+
adatas: list[AnnData | UPathStr],
|
73
|
+
measurement_name: str,
|
74
|
+
obs_field_name: str,
|
75
|
+
var_field_name: str,
|
76
|
+
append_obsm_varm: bool = False,
|
77
|
+
run: Run | None = None,
|
78
|
+
) -> tuple[ExperimentAmbientLabelMapping, list[AnnData]]:
|
79
|
+
"""Register `AnnData` objects to append to `tiledbsoma.Experiment`.
|
80
|
+
|
81
|
+
Pass the returned registration mapping and `AnnData` objects to `write_tiledbsoma_store`.
|
82
|
+
|
83
|
+
See `tiledbsoma.io.from_h5ad
|
84
|
+
<https://tiledbsoma.readthedocs.io/en/latest/_autosummary/tiledbsoma.io.from_h5ad.html>`__.
|
85
|
+
"""
|
86
|
+
try:
|
87
|
+
import tiledbsoma as soma
|
88
|
+
import tiledbsoma.io as soma_io
|
89
|
+
except ImportError as e:
|
90
|
+
raise ImportError("Please install tiledbsoma: pip install tiledbsoma") from e
|
91
|
+
|
92
|
+
if isinstance(store, Artifact):
|
93
|
+
storepath = store.path
|
94
|
+
else:
|
95
|
+
storepath = None if store is None else create_path(store)
|
96
|
+
|
97
|
+
add_run_uid = True
|
98
|
+
ctx = None
|
99
|
+
if storepath is not None:
|
100
|
+
if storepath.protocol == "s3":
|
101
|
+
ctx = soma.SOMATileDBContext(tiledb_config=_tiledb_config_s3(storepath))
|
102
|
+
if storepath.exists():
|
103
|
+
with soma.Experiment.open(
|
104
|
+
storepath.as_posix(), mode="r", context=ctx
|
105
|
+
) as store:
|
106
|
+
add_run_uid = "lamin_run_uid" in store["obs"].schema.names
|
107
|
+
storepath = storepath.as_posix()
|
108
|
+
|
109
|
+
if add_run_uid:
|
110
|
+
from lamindb.core._data import get_run
|
111
|
+
|
112
|
+
run = get_run(run)
|
113
|
+
|
114
|
+
adata_objects = []
|
115
|
+
for adata in adatas:
|
116
|
+
if isinstance(adata, AnnData):
|
117
|
+
if add_run_uid:
|
118
|
+
if adata.is_view:
|
119
|
+
raise ValueError(
|
120
|
+
"Can not register an `AnnData` view, please do `adata.copy()` before passing."
|
121
|
+
)
|
122
|
+
else:
|
123
|
+
logger.warning("Mutating in-memory AnnData.")
|
124
|
+
adata.obs["lamin_run_uid"] = run.uid
|
125
|
+
else:
|
126
|
+
adata = _read_adata_h5ad_zarr(create_path(adata))
|
127
|
+
if add_run_uid:
|
128
|
+
adata.obs["lamin_run_uid"] = run.uid
|
129
|
+
adata_objects.append(adata)
|
130
|
+
|
131
|
+
registration_mapping = soma_io.register_anndatas(
|
132
|
+
experiment_uri=storepath,
|
133
|
+
adatas=adata_objects,
|
134
|
+
measurement_name=measurement_name,
|
135
|
+
obs_field_name=obs_field_name,
|
136
|
+
var_field_name=var_field_name,
|
137
|
+
append_obsm_varm=append_obsm_varm,
|
138
|
+
context=ctx,
|
139
|
+
)
|
140
|
+
|
141
|
+
return registration_mapping, adata_objects
|
142
|
+
|
143
|
+
|
144
|
+
def write_tiledbsoma_store(
|
145
|
+
store: Artifact | UPathStr,
|
146
|
+
adata: AnnData | UPathStr,
|
147
|
+
run: Run | None = None,
|
148
|
+
artifact_kwargs: dict | None = None,
|
149
|
+
**kwargs,
|
150
|
+
) -> Artifact:
|
151
|
+
"""Write `AnnData` to `tiledbsoma.Experiment`.
|
152
|
+
|
153
|
+
Reads `AnnData`, writes it to `tiledbsoma.Experiment` and creates `lamindb.Artifact`.
|
154
|
+
|
155
|
+
See `tiledbsoma.io.from_h5ad
|
156
|
+
<https://tiledbsoma.readthedocs.io/en/latest/_autosummary/tiledbsoma.io.from_h5ad.html>`__.
|
157
|
+
"""
|
158
|
+
try:
|
159
|
+
import tiledbsoma as soma
|
160
|
+
import tiledbsoma.io as soma_io
|
161
|
+
except ImportError as e:
|
162
|
+
raise ImportError("Please install tiledbsoma: pip install tiledbsoma") from e
|
163
|
+
|
164
|
+
from lamindb.core._data import get_run
|
165
|
+
|
166
|
+
if artifact_kwargs is None:
|
167
|
+
artifact_kwargs = {}
|
168
|
+
|
169
|
+
appending: bool = kwargs.get("registration_mapping", None) is not None
|
170
|
+
store_is_artifact: bool = isinstance(store, Artifact)
|
171
|
+
if store_is_artifact:
|
172
|
+
if not appending:
|
173
|
+
raise ValueError(
|
174
|
+
"Trying to append to an existing store without `registration_mapping`."
|
175
|
+
)
|
176
|
+
storepath = store.path
|
177
|
+
else:
|
178
|
+
storepath = create_path(store)
|
179
|
+
add_run_uid: bool = not appending
|
180
|
+
|
181
|
+
if not isinstance(adata, AnnData):
|
182
|
+
# create_path is used
|
183
|
+
# in case adata is somewhere in our managed s3 bucket or just in s3
|
184
|
+
adata = _read_adata_h5ad_zarr(create_path(adata))
|
185
|
+
elif add_run_uid and adata.is_view:
|
186
|
+
raise ValueError(
|
187
|
+
"Can not write from an `AnnData` view, please do `adata.copy()` before passing."
|
188
|
+
)
|
189
|
+
|
190
|
+
run = get_run(run)
|
191
|
+
|
192
|
+
if add_run_uid:
|
193
|
+
adata.obs["lamin_run_uid"] = run.uid
|
194
|
+
|
195
|
+
if storepath.protocol == "s3":
|
196
|
+
ctx = soma.SOMATileDBContext(tiledb_config=_tiledb_config_s3(storepath))
|
197
|
+
else:
|
198
|
+
ctx = None
|
199
|
+
|
200
|
+
soma_io.from_anndata(storepath.as_posix(), adata, context=ctx, **kwargs)
|
201
|
+
|
202
|
+
if add_run_uid:
|
203
|
+
del adata.obs["lamin_run_uid"]
|
204
|
+
|
205
|
+
revises = None
|
206
|
+
if appending:
|
207
|
+
if store_is_artifact:
|
208
|
+
revises = store
|
209
|
+
else:
|
210
|
+
from lamindb._artifact import (
|
211
|
+
check_path_in_existing_storage,
|
212
|
+
get_relative_path_to_directory,
|
213
|
+
)
|
214
|
+
|
215
|
+
storage = check_path_in_existing_storage(storepath)
|
216
|
+
if isinstance(storage, Storage):
|
217
|
+
search_by_key = get_relative_path_to_directory(
|
218
|
+
path=storepath, directory=UPath(storage.root)
|
219
|
+
).as_posix()
|
220
|
+
revises = Artifact.filter(
|
221
|
+
key=search_by_key, is_latest=True, _key_is_virtual=False
|
222
|
+
).one_or_none()
|
223
|
+
if revises is not None:
|
224
|
+
logger.info(f"Assuming it is a new version of {revises}.")
|
225
|
+
|
226
|
+
if revises is None:
|
227
|
+
return Artifact(storepath, run=run, **artifact_kwargs)
|
228
|
+
else:
|
229
|
+
return Artifact(storepath, run=run, revises=revises, **artifact_kwargs)
|
lamindb/core/storage/paths.py
CHANGED
@@ -84,13 +84,9 @@ def attempt_accessing_path(
|
|
84
84
|
)
|
85
85
|
else:
|
86
86
|
if artifact._state.db not in ("default", None) and using_key is None:
|
87
|
-
storage = (
|
88
|
-
Storage.using(artifact._state.db).filter(id=artifact.storage_id).one()
|
89
|
-
)
|
87
|
+
storage = Storage.using(artifact._state.db).get(id=artifact.storage_id)
|
90
88
|
else:
|
91
|
-
storage = (
|
92
|
-
Storage.objects.using(using_key).filter(id=artifact.storage_id).one()
|
93
|
-
)
|
89
|
+
storage = Storage.objects.using(using_key).get(id=artifact.storage_id)
|
94
90
|
# find a better way than passing None to instance_settings in the future!
|
95
91
|
storage_settings = StorageSettings(storage.root, access_token=access_token)
|
96
92
|
path = storage_settings.key_to_filepath(storage_key)
|
lamindb/core/versioning.py
CHANGED
@@ -11,6 +11,16 @@ if TYPE_CHECKING:
|
|
11
11
|
from lnschema_core.models import IsVersioned
|
12
12
|
|
13
13
|
|
14
|
+
def message_update_key_in_version_family(
|
15
|
+
*,
|
16
|
+
suid: str,
|
17
|
+
existing_key: str,
|
18
|
+
registry: str,
|
19
|
+
new_key: str,
|
20
|
+
) -> str:
|
21
|
+
return f'Or update key "{existing_key}" in your existing family:\n\nln.{registry}.filter(uid__startswith="{suid}").update(key="{new_key}")'
|
22
|
+
|
23
|
+
|
14
24
|
def increment_base62(s: str) -> str:
|
15
25
|
# we don't need to throw an error for zzzz because uids are enforced to be unique
|
16
26
|
# on the db level and have an enforced maximum length
|
@@ -78,57 +88,43 @@ def set_version(version: str | None = None, previous_version: str | None = None)
|
|
78
88
|
version: Version string.
|
79
89
|
previous_version: Previous version string.
|
80
90
|
"""
|
81
|
-
if version == previous_version:
|
82
|
-
raise ValueError(f"Please increment the previous version: '{previous_version}'")
|
83
91
|
if version is None and previous_version is not None:
|
84
92
|
version = bump_version(previous_version, bump_type="major")
|
85
93
|
return version
|
86
94
|
|
87
95
|
|
88
|
-
def
|
96
|
+
def create_uid(
|
89
97
|
*,
|
90
98
|
version: str | None = None,
|
91
99
|
n_full_id: int = 20,
|
92
|
-
|
93
|
-
) -> str:
|
94
|
-
if
|
95
|
-
|
100
|
+
revises: IsVersioned | None = None,
|
101
|
+
) -> tuple[str, IsVersioned | None]:
|
102
|
+
if revises is not None:
|
103
|
+
if not revises.is_latest:
|
104
|
+
# need one more request
|
105
|
+
revises = revises.__class__.objects.get(
|
106
|
+
is_latest=True, uid__startswith=revises.stem_uid
|
107
|
+
)
|
108
|
+
logger.warning(
|
109
|
+
f"didn't pass the latest version in `revises`, retrieved it: {revises}"
|
110
|
+
)
|
111
|
+
suid = revises.stem_uid
|
112
|
+
vuid = increment_base62(revises.uid[-4:])
|
96
113
|
else:
|
97
|
-
|
114
|
+
suid = ids.base62(n_full_id - 4)
|
115
|
+
vuid = "0000"
|
98
116
|
if version is not None:
|
99
117
|
if not isinstance(version, str):
|
100
118
|
raise ValueError(
|
101
119
|
"`version` parameter must be `None` or `str`, e.g., '0.1', '1', '2',"
|
102
120
|
" etc."
|
103
121
|
)
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
using_key: str | None = None,
|
111
|
-
) -> tuple[str, str]:
|
112
|
-
"""{}""" # noqa: D415
|
113
|
-
msg = ""
|
114
|
-
if is_new_version_of.version is None:
|
115
|
-
previous_version = "1"
|
116
|
-
msg = f"setting previous version to '{previous_version}'"
|
117
|
-
else:
|
118
|
-
previous_version = is_new_version_of.version
|
119
|
-
version = set_version(version, previous_version)
|
120
|
-
new_uid = init_uid(
|
121
|
-
version=version,
|
122
|
-
n_full_id=is_new_version_of._len_full_uid,
|
123
|
-
is_new_version_of=is_new_version_of,
|
124
|
-
)
|
125
|
-
# the following covers the edge case where the old file was unversioned
|
126
|
-
if is_new_version_of.version is None:
|
127
|
-
is_new_version_of.version = previous_version
|
128
|
-
is_new_version_of.save(using=using_key)
|
129
|
-
if msg != "":
|
130
|
-
msg += f"& new version to '{version}'"
|
131
|
-
return new_uid, version
|
122
|
+
if revises is not None:
|
123
|
+
if version == revises.version:
|
124
|
+
raise ValueError(
|
125
|
+
f"Please increment the previous version: '{revises.version}'"
|
126
|
+
)
|
127
|
+
return suid + vuid, revises
|
132
128
|
|
133
129
|
|
134
130
|
def get_new_path_from_uid(old_path: UPath, old_uid: str, new_uid: str):
|
@@ -141,18 +137,18 @@ def get_new_path_from_uid(old_path: UPath, old_uid: str, new_uid: str):
|
|
141
137
|
return new_path
|
142
138
|
|
143
139
|
|
144
|
-
def
|
145
|
-
|
140
|
+
def process_revises(
|
141
|
+
revises: IsVersioned | None,
|
146
142
|
version: str | None,
|
147
143
|
name: str | None,
|
148
144
|
type: type[IsVersioned],
|
149
|
-
) -> tuple[str, str, str]:
|
150
|
-
if
|
151
|
-
raise TypeError(f"
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
145
|
+
) -> tuple[str, str, str, IsVersioned | None]:
|
146
|
+
if revises is not None and not isinstance(revises, type):
|
147
|
+
raise TypeError(f"`revises` has to be of type `{type.__name__}`")
|
148
|
+
uid, revises = create_uid(
|
149
|
+
revises=revises, version=version, n_full_id=type._len_full_uid
|
150
|
+
)
|
151
|
+
if revises is not None:
|
156
152
|
if name is None:
|
157
|
-
name =
|
158
|
-
return uid, version, name
|
153
|
+
name = revises.name
|
154
|
+
return uid, version, name, revises
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.76.
|
3
|
+
Version: 0.76.2
|
4
4
|
Summary: A data framework for biology.
|
5
5
|
Author-email: Lamin Labs <open-source@lamin.ai>
|
6
6
|
Requires-Python: >=3.8
|
@@ -9,9 +9,9 @@ Classifier: Programming Language :: Python :: 3.8
|
|
9
9
|
Classifier: Programming Language :: Python :: 3.9
|
10
10
|
Classifier: Programming Language :: Python :: 3.10
|
11
11
|
Classifier: Programming Language :: Python :: 3.11
|
12
|
-
Requires-Dist: lnschema_core==0.73.
|
13
|
-
Requires-Dist: lamindb_setup==0.76.
|
14
|
-
Requires-Dist: lamin_utils==0.13.
|
12
|
+
Requires-Dist: lnschema_core==0.73.2
|
13
|
+
Requires-Dist: lamindb_setup==0.76.6
|
14
|
+
Requires-Dist: lamin_utils==0.13.4
|
15
15
|
Requires-Dist: lamin_cli==0.16.2
|
16
16
|
Requires-Dist: rapidfuzz
|
17
17
|
Requires-Dist: pyarrow
|
@@ -24,7 +24,7 @@ Requires-Dist: pandas
|
|
24
24
|
Requires-Dist: graphviz
|
25
25
|
Requires-Dist: psycopg2-binary
|
26
26
|
Requires-Dist: lamindb_setup[aws] ; extra == "aws"
|
27
|
-
Requires-Dist: bionty==0.48.
|
27
|
+
Requires-Dist: bionty==0.48.3 ; extra == "bionty"
|
28
28
|
Requires-Dist: pre-commit ; extra == "dev"
|
29
29
|
Requires-Dist: nox ; extra == "dev"
|
30
30
|
Requires-Dist: laminci>=0.3 ; extra == "dev"
|
@@ -57,13 +57,5 @@ Provides-Extra: zarr
|
|
57
57
|
|
58
58
|
# LaminDB - A data framework for biology
|
59
59
|
|
60
|
-
|
61
|
-
- Track data lineage across notebooks & pipelines.
|
62
|
-
- Integrate registries for experimental metadata & in-house ontologies.
|
63
|
-
- Validate, standardize & annotate.
|
64
|
-
- Collaborate across distributed databases.
|
65
|
-
|
66
|
-
## Documentation
|
67
|
-
|
68
|
-
Read the [docs](https://lamin.ai/docs).
|
60
|
+
Read the [docs](https://docs.lamin.ai).
|
69
61
|
|
@@ -1,30 +1,30 @@
|
|
1
|
-
lamindb/__init__.py,sha256=
|
2
|
-
lamindb/_artifact.py,sha256=
|
3
|
-
lamindb/_can_validate.py,sha256=
|
4
|
-
lamindb/_collection.py,sha256=
|
5
|
-
lamindb/_curate.py,sha256=
|
6
|
-
lamindb/_feature.py,sha256=
|
1
|
+
lamindb/__init__.py,sha256=OCLxYHwhRyaf6Zx-AKHTSEFWM-J342YRxDP2hhCIu6c,2309
|
2
|
+
lamindb/_artifact.py,sha256=RygNHePDo895KG61FctFRdHO4jVa9cmj-yBBsyRE50A,43840
|
3
|
+
lamindb/_can_validate.py,sha256=ne8-9sAG9vXnMXZqso6mYMt-xDg16h-gq6yHJXKFpuI,17690
|
4
|
+
lamindb/_collection.py,sha256=F_VgpLBprrzUQ-tPngWvO9vFd7jX66MVwIi031JOris,14871
|
5
|
+
lamindb/_curate.py,sha256=EAikoFg2rL8kRsWEIXH33P1VplSGAACMuFHanicguWw,55964
|
6
|
+
lamindb/_feature.py,sha256=nZhtrH0ssoNls-hV-dkwfK9sKypg2El59R9qfarxfUE,5340
|
7
7
|
lamindb/_feature_set.py,sha256=DmAy96V_RyV0yiyvWOCHgustXPsCaMwn4TrWwh2qDd8,8104
|
8
|
-
lamindb/_filter.py,sha256=
|
9
|
-
lamindb/_finish.py,sha256=
|
10
|
-
lamindb/_from_values.py,sha256=
|
11
|
-
lamindb/_is_versioned.py,sha256=
|
8
|
+
lamindb/_filter.py,sha256=Fs7_x3tA_KVz0lYt0bJkWfjnEKAnkVN20CfKhp9aKWg,1403
|
9
|
+
lamindb/_finish.py,sha256=wCjPmTBmL_z2WcZq9v6TZroZ_J_Te9KC5GzFuYdrIRc,9413
|
10
|
+
lamindb/_from_values.py,sha256=8kYpR8Q85EOaTcsPGjVHeZh29fGVgum5OEQf4Hsz_80,13533
|
11
|
+
lamindb/_is_versioned.py,sha256=5lAnhTboltFkZCKVRV1uxkm0OCjJz_HKi3yQq_vEuMs,1306
|
12
12
|
lamindb/_parents.py,sha256=eMavdd6IO6STOVJSlR2TzdRtx6sKYDKsMOtlR3DZlgQ,15599
|
13
|
-
lamindb/_query_manager.py,sha256=
|
14
|
-
lamindb/_query_set.py,sha256=
|
15
|
-
lamindb/_record.py,sha256=
|
13
|
+
lamindb/_query_manager.py,sha256=Ipe85HL31DDwMbC8CN_1Svbwk48a_DUh_INGQdZL08I,4222
|
14
|
+
lamindb/_query_set.py,sha256=mwNfGWcZbI5a1VfuiQzkweU4VQchE8Va8HiCIa0GNu4,11604
|
15
|
+
lamindb/_record.py,sha256=MDLvcsZ23lZkThnrYQtj_uW-1BnxCPpyJ5mKl9KPs4A,21199
|
16
16
|
lamindb/_run.py,sha256=5M_r1zGDv9HlqbqRKTWCYCOtENovJ-8mQ4kY7XqcLaU,1888
|
17
|
-
lamindb/_save.py,sha256=
|
17
|
+
lamindb/_save.py,sha256=Fu7Z84btKOXfTfpunKLni21s5ER2zIllqg5e3nPq-0A,10910
|
18
18
|
lamindb/_storage.py,sha256=GBVChv-DHVMNEBJL5l_JT6B4RDhZ6NnwgzmUICphYKk,413
|
19
|
-
lamindb/_transform.py,sha256=
|
19
|
+
lamindb/_transform.py,sha256=Ck674iuKIp9HDpHuyFFM2xKJcFAUvQDRTnEdnx00Rq0,4114
|
20
20
|
lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
|
21
21
|
lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
|
22
22
|
lamindb/_view.py,sha256=4Ln2ItTb3857PAI-70O8eJYqoTJ_NNFc7E_wds6OGns,2412
|
23
23
|
lamindb/core/__init__.py,sha256=QePKN3dkGuNEfIc2CKwBt3Kcl39bbghX6XwXKpK3BA0,1491
|
24
|
-
lamindb/core/_context.py,sha256=
|
24
|
+
lamindb/core/_context.py,sha256=O4ovdIfvIC9E4oaqpSjBqwHOKThmP8_aod0MiOWaEwI,19517
|
25
25
|
lamindb/core/_data.py,sha256=eocOXsZGu62LPtz6yIlvHhPSJTf3yF2ITZTffyflWYI,16269
|
26
|
-
lamindb/core/_feature_manager.py,sha256=
|
27
|
-
lamindb/core/_label_manager.py,sha256=
|
26
|
+
lamindb/core/_feature_manager.py,sha256=94tX6gq_Rx7fkDARQBxB2z92qUDpHocFSAdKv5izMT4,32490
|
27
|
+
lamindb/core/_label_manager.py,sha256=jSLvxAuTuOYosSh_QJhIz3bqnbmWKP43y5abVMb-hOQ,9240
|
28
28
|
lamindb/core/_mapped_collection.py,sha256=ST-cTfokIGkRadjSHEyvIK2san8cGr7WZpgbgs5neLI,22025
|
29
29
|
lamindb/core/_settings.py,sha256=GGEB8BU5GinIfD4ktr1Smp6GPHGaInu46MhP4EecZDY,5950
|
30
30
|
lamindb/core/_sync_git.py,sha256=qc0yfPyKeG4uuNT_3qsv-mkIMqhLFqfXNeNVO49vV00,4547
|
@@ -33,26 +33,27 @@ lamindb/core/exceptions.py,sha256=qNFYN5Jc7Y6kw4re-jsW0AEIprsV2HB1wTcJiO-u-ks,12
|
|
33
33
|
lamindb/core/fields.py,sha256=47Jmh3efUr5ZscgimR_yckY-I3cNf8ScLutbwKCK3j4,162
|
34
34
|
lamindb/core/schema.py,sha256=KiYQn_8fokSMztTNDe6qUocZzKXWxU32H-YChNJv51A,1877
|
35
35
|
lamindb/core/types.py,sha256=uVBqSVLoQaTkqP9nqsJhwU6yYnx8H5e6-ZxrB6vpOOw,265
|
36
|
-
lamindb/core/versioning.py,sha256=
|
36
|
+
lamindb/core/versioning.py,sha256=__SOHhk5OjMJgAUjixzp0GFcQrpjm8sBUXC9Fouk2AE,5162
|
37
37
|
lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
|
38
38
|
lamindb/core/datasets/_core.py,sha256=CgVF_pXuBXLElzubDMsl1DbpYOnXCY0HleITVvBKih4,19873
|
39
39
|
lamindb/core/datasets/_fake.py,sha256=BZF9R_1iF0HDnvtZNqL2FtsjSMuqDIfuFxnw_LJYIh4,953
|
40
|
-
lamindb/core/storage/__init__.py,sha256=
|
40
|
+
lamindb/core/storage/__init__.py,sha256=9B3JqHydQnclP4NUY2kEc99K1cJBQZA4jyy3EmDxsYk,541
|
41
41
|
lamindb/core/storage/_anndata_accessor.py,sha256=jmEZeeZlt8-qBXRkU0tTA-t6dVEb_dH86wc1ok0jSRY,24030
|
42
42
|
lamindb/core/storage/_anndata_sizes.py,sha256=aXO3OB--tF5MChenSsigW6Q-RuE8YJJOUTVukkLrv9A,1029
|
43
|
-
lamindb/core/storage/_backed_access.py,sha256=
|
43
|
+
lamindb/core/storage/_backed_access.py,sha256=YcWCeT2eligJGsBdjJS_-4el_eC9J088jxUWG9lsleM,3231
|
44
|
+
lamindb/core/storage/_tiledbsoma.py,sha256=GNPG8pDYmZLFBSujsQ8VqlfWaFmDO58kgBXw6JESQJs,7812
|
44
45
|
lamindb/core/storage/_valid_suffixes.py,sha256=vUSeQ4s01rdhD_vSd6wKmFBsgMJAKkBMnL_T9Y1znMg,501
|
45
46
|
lamindb/core/storage/_zarr.py,sha256=5ceEz6YIvgvUnVVNWhK5Z4W0WfrvyvY82Yna5jSX1_E,3661
|
46
47
|
lamindb/core/storage/objects.py,sha256=OzvBCS-Urz5mr-O95qYt6RGBDDX5HmjfRRKWPPDn1ZE,1797
|
47
|
-
lamindb/core/storage/paths.py,sha256=
|
48
|
+
lamindb/core/storage/paths.py,sha256=woOrjtBhNnzm8DjF262ipwyZaQ_A-7MT2ZPoiefAfYk,7728
|
48
49
|
lamindb/core/subsettings/__init__.py,sha256=KFHPzIE7f7Bj4RgMjGQF4CjTdHVG_VNFBrCndo49ixo,198
|
49
50
|
lamindb/core/subsettings/_creation_settings.py,sha256=54mfMH_osC753hpxcl7Dq1rwBD2LHnWveXtQpkLBITE,1194
|
50
51
|
lamindb/core/subsettings/_transform_settings.py,sha256=4YbCuZtJo6zdytl6UQR4GvdDkTtT6SRBqVzofGzNOt8,583
|
51
52
|
lamindb/integrations/__init__.py,sha256=MoLRD_qqX5WHFUAqHL6zoY_cDkWH0zimaGT_1CyXKnk,124
|
52
|
-
lamindb/integrations/_vitessce.py,sha256=
|
53
|
+
lamindb/integrations/_vitessce.py,sha256=aDCyZTddpMfUzjEo0DXQ3XlD--ebSqnsGiMxJBunX90,5141
|
53
54
|
lamindb/setup/__init__.py,sha256=OwZpZzPDv5lPPGXZP7-zK6UdO4FHvvuBh439yZvIp3A,410
|
54
55
|
lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
|
55
|
-
lamindb-0.76.
|
56
|
-
lamindb-0.76.
|
57
|
-
lamindb-0.76.
|
58
|
-
lamindb-0.76.
|
56
|
+
lamindb-0.76.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
57
|
+
lamindb-0.76.2.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
58
|
+
lamindb-0.76.2.dist-info/METADATA,sha256=99nkmjVubVfQahE9S4aO1e8Ot6G4iFaPZltNBE-oFPo,2381
|
59
|
+
lamindb-0.76.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|