lamindb 0.76.1__py3-none-any.whl → 0.76.3__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 +10 -6
- lamindb/_artifact.py +86 -53
- lamindb/_can_validate.py +10 -3
- lamindb/_collection.py +17 -18
- lamindb/_curate.py +130 -49
- lamindb/_feature.py +0 -49
- lamindb/_filter.py +10 -23
- lamindb/_finish.py +3 -3
- lamindb/_from_values.py +14 -10
- lamindb/_is_versioned.py +3 -5
- lamindb/_query_manager.py +2 -2
- lamindb/_query_set.py +58 -5
- lamindb/_record.py +29 -39
- lamindb/_save.py +2 -3
- lamindb/_transform.py +23 -10
- lamindb/core/__init__.py +2 -0
- lamindb/core/_context.py +19 -14
- lamindb/core/_feature_manager.py +25 -8
- lamindb/core/_label_manager.py +1 -1
- lamindb/core/_mapped_collection.py +31 -1
- lamindb/core/exceptions.py +1 -1
- lamindb/core/storage/__init__.py +1 -1
- lamindb/core/storage/_backed_access.py +2 -38
- lamindb/core/storage/_tiledbsoma.py +192 -0
- lamindb/core/storage/paths.py +2 -6
- lamindb/core/versioning.py +43 -47
- lamindb/integrations/__init__.py +3 -0
- lamindb/integrations/_vitessce.py +2 -0
- {lamindb-0.76.1.dist-info → lamindb-0.76.3.dist-info}/METADATA +6 -14
- lamindb-0.76.3.dist-info/RECORD +59 -0
- lamindb-0.76.1.dist-info/RECORD +0 -58
- {lamindb-0.76.1.dist-info → lamindb-0.76.3.dist-info}/LICENSE +0 -0
- {lamindb-0.76.1.dist-info → lamindb-0.76.3.dist-info}/WHEEL +0 -0
@@ -0,0 +1,192 @@
|
|
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 import settings as setup_settings
|
8
|
+
from lamindb_setup.core._settings_storage import get_storage_region
|
9
|
+
from lamindb_setup.core.upath import create_path
|
10
|
+
from lnschema_core import Artifact, Run
|
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
|
+
from upath import UPath
|
18
|
+
|
19
|
+
|
20
|
+
def _read_adata_h5ad_zarr(objpath: UPath):
|
21
|
+
from lamindb.core.storage.paths import read_adata_h5ad, read_adata_zarr
|
22
|
+
|
23
|
+
if objpath.is_dir():
|
24
|
+
adata = read_adata_zarr(objpath)
|
25
|
+
else:
|
26
|
+
adata = read_adata_h5ad(objpath)
|
27
|
+
return adata
|
28
|
+
|
29
|
+
|
30
|
+
def _tiledb_config_s3(storepath: UPath) -> dict:
|
31
|
+
region = get_storage_region(storepath)
|
32
|
+
tiledb_config = {"vfs.s3.region": region}
|
33
|
+
storage_options = storepath.storage_options
|
34
|
+
if "key" in storage_options:
|
35
|
+
tiledb_config["vfs.s3.aws_access_key_id"] = storage_options["key"]
|
36
|
+
if "secret" in storage_options:
|
37
|
+
tiledb_config["vfs.s3.aws_secret_access_key"] = storage_options["secret"]
|
38
|
+
if "token" in storage_options:
|
39
|
+
tiledb_config["vfs.s3.aws_session_token"] = storage_options["token"]
|
40
|
+
|
41
|
+
return tiledb_config
|
42
|
+
|
43
|
+
|
44
|
+
def _open_tiledbsoma(
|
45
|
+
storepath: UPath, mode: Literal["r", "w"] = "r"
|
46
|
+
) -> SOMACollection | SOMAExperiment:
|
47
|
+
try:
|
48
|
+
import tiledbsoma as soma
|
49
|
+
except ImportError as e:
|
50
|
+
raise ImportError("Please install tiledbsoma: pip install tiledbsoma") from e
|
51
|
+
|
52
|
+
storepath_str = storepath.as_posix()
|
53
|
+
if storepath.protocol == "s3":
|
54
|
+
ctx = soma.SOMATileDBContext(tiledb_config=_tiledb_config_s3(storepath))
|
55
|
+
# this is a strange bug
|
56
|
+
# for some reason iterdir futher gives incorrect results
|
57
|
+
# if cache is not invalidated
|
58
|
+
# instead of obs and ms it gives ms and ms in the list of names
|
59
|
+
storepath.fs.invalidate_cache()
|
60
|
+
else:
|
61
|
+
ctx = None
|
62
|
+
|
63
|
+
soma_objects = [obj.name for obj in storepath.iterdir()]
|
64
|
+
if "obs" in soma_objects and "ms" in soma_objects:
|
65
|
+
SOMAType = soma.Experiment
|
66
|
+
else:
|
67
|
+
SOMAType = soma.Collection
|
68
|
+
return SOMAType.open(storepath_str, mode=mode, context=ctx)
|
69
|
+
|
70
|
+
|
71
|
+
def save_tiledbsoma_experiment(
|
72
|
+
# Artifact args
|
73
|
+
adatas: list[AnnData | UPathStr],
|
74
|
+
key: str | None = None,
|
75
|
+
description: str | None = None,
|
76
|
+
run: Run | None = None,
|
77
|
+
revises: Artifact | None = None,
|
78
|
+
# tiledbsoma.io.from_anndata args
|
79
|
+
measurement_name: str = "RNA",
|
80
|
+
obs_id_name: str = "obs_id",
|
81
|
+
var_id_name: str = "var_id",
|
82
|
+
append_obsm_varm: bool = False,
|
83
|
+
# additional keyword args for tiledbsoma.io.from_anndata
|
84
|
+
**kwargs,
|
85
|
+
) -> Artifact:
|
86
|
+
"""Write `AnnData` to `tiledbsoma.Experiment`.
|
87
|
+
|
88
|
+
Reads `AnnData` objects, writes them to `tiledbsoma.Experiment`, creates `lamindb.Artifact`
|
89
|
+
and saves the artifact.
|
90
|
+
Note that this function adds `lamin_run_uid` column to `obs` of in-memory `AnnData` objects
|
91
|
+
when it writes to a new store or appends to a store that has this column in `obs`.
|
92
|
+
|
93
|
+
See also `tiledbsoma.io.from_anndata
|
94
|
+
<https://tiledbsoma.readthedocs.io/en/latest/_autosummary/tiledbsoma.io.from_anndata.html>`__.
|
95
|
+
|
96
|
+
Args:
|
97
|
+
adatas: `AnnData` objects to write, in-memory or on-disk.
|
98
|
+
key: A relative path within default storage.
|
99
|
+
description: A description.
|
100
|
+
run: The run that creates the artifact.
|
101
|
+
revises: `lamindb.Artifact` with `tiledbsoma.Experiment` to append to.
|
102
|
+
Triggers a revision (a new untagged version).
|
103
|
+
measurement_name: The name of the measurement to store data in `tiledbsoma.Experiment`.
|
104
|
+
obs_id_name: Which `AnnData` `obs` column to use for append mode.
|
105
|
+
var_id_name: Which `AnnData` `var` column to use for append mode.
|
106
|
+
append_obsm_varm: Whether to append `obsm` and `varm` in append mode .
|
107
|
+
**kwargs: Additional keyword arguments passed to `tiledbsoma.io.from_anndata` that
|
108
|
+
writes `adatas`.
|
109
|
+
"""
|
110
|
+
try:
|
111
|
+
import tiledbsoma as soma
|
112
|
+
import tiledbsoma.io as soma_io
|
113
|
+
except ImportError as e:
|
114
|
+
raise ImportError("Please install tiledbsoma: pip install tiledbsoma") from e
|
115
|
+
|
116
|
+
from lamindb.core._data import get_run
|
117
|
+
from lamindb.core.storage.paths import auto_storage_key_from_artifact_uid
|
118
|
+
from lamindb.core.versioning import create_uid
|
119
|
+
|
120
|
+
run = get_run(run)
|
121
|
+
|
122
|
+
appending = revises is not None
|
123
|
+
|
124
|
+
if appending:
|
125
|
+
_uid = None
|
126
|
+
storepath = revises.path
|
127
|
+
else:
|
128
|
+
_uid, _ = create_uid(n_full_id=20)
|
129
|
+
storage_key = auto_storage_key_from_artifact_uid(
|
130
|
+
_uid, ".tiledbsoma", is_dir=True
|
131
|
+
)
|
132
|
+
storepath = setup_settings.storage.root / storage_key
|
133
|
+
|
134
|
+
if storepath.protocol == "s3":
|
135
|
+
ctx = soma.SOMATileDBContext(tiledb_config=_tiledb_config_s3(storepath))
|
136
|
+
else:
|
137
|
+
ctx = None
|
138
|
+
|
139
|
+
storepath = storepath.as_posix()
|
140
|
+
|
141
|
+
add_run_uid = True
|
142
|
+
if appending:
|
143
|
+
with soma.Experiment.open(storepath, mode="r", context=ctx) as store:
|
144
|
+
add_run_uid = "lamin_run_uid" in store["obs"].schema.names
|
145
|
+
|
146
|
+
if add_run_uid and run is None:
|
147
|
+
raise ValueError("Pass `run`")
|
148
|
+
|
149
|
+
adata_objects = []
|
150
|
+
for adata in adatas:
|
151
|
+
if isinstance(adata, AnnData):
|
152
|
+
if add_run_uid:
|
153
|
+
if adata.is_view:
|
154
|
+
raise ValueError(
|
155
|
+
"Can not write an `AnnData` view, please do `adata.copy()` before passing."
|
156
|
+
)
|
157
|
+
else:
|
158
|
+
adata.obs["lamin_run_uid"] = run.uid
|
159
|
+
else:
|
160
|
+
adata = _read_adata_h5ad_zarr(create_path(adata))
|
161
|
+
if add_run_uid:
|
162
|
+
adata.obs["lamin_run_uid"] = run.uid
|
163
|
+
adata_objects.append(adata)
|
164
|
+
|
165
|
+
if appending or len(adata_objects) > 1:
|
166
|
+
registration_mapping = soma_io.register_anndatas(
|
167
|
+
experiment_uri=storepath if appending else None,
|
168
|
+
adatas=adata_objects,
|
169
|
+
measurement_name=measurement_name,
|
170
|
+
obs_field_name=obs_id_name,
|
171
|
+
var_field_name=var_id_name,
|
172
|
+
append_obsm_varm=append_obsm_varm,
|
173
|
+
context=ctx,
|
174
|
+
)
|
175
|
+
else:
|
176
|
+
registration_mapping = None
|
177
|
+
|
178
|
+
for adata_obj in adata_objects:
|
179
|
+
soma_io.from_anndata(
|
180
|
+
storepath,
|
181
|
+
adata_obj,
|
182
|
+
measurement_name,
|
183
|
+
context=ctx,
|
184
|
+
obs_id_name=obs_id_name,
|
185
|
+
var_id_name=var_id_name,
|
186
|
+
registration_mapping=registration_mapping,
|
187
|
+
**kwargs,
|
188
|
+
)
|
189
|
+
|
190
|
+
return Artifact(
|
191
|
+
storepath, key=key, description=description, run=run, revises=revises, _uid=_uid
|
192
|
+
).save()
|
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
|
lamindb/integrations/__init__.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.76.
|
3
|
+
Version: 0.76.3
|
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.3
|
13
|
+
Requires-Dist: lamindb_setup==0.76.7
|
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.
|
27
|
+
Requires-Dist: bionty==0.49.0 ; 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
|
|
@@ -0,0 +1,59 @@
|
|
1
|
+
lamindb/__init__.py,sha256=iZlJlG4hUmSRNZvau2bAEG2Z9B-qnWWNazYYw5m3ciM,2351
|
2
|
+
lamindb/_artifact.py,sha256=6iD2qzZxWUHPiItUdEJt9BDbYVv6HF3bgpW2ZDjMf7s,44093
|
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=_VISRycaPaburnJKuFM5XpEWqNGozdUcwBGMj_knZpM,58041
|
6
|
+
lamindb/_feature.py,sha256=nZhtrH0ssoNls-hV-dkwfK9sKypg2El59R9qfarxfUE,5340
|
7
|
+
lamindb/_feature_set.py,sha256=DmAy96V_RyV0yiyvWOCHgustXPsCaMwn4TrWwh2qDd8,8104
|
8
|
+
lamindb/_filter.py,sha256=9QHa9J-_6QeYPQATZpTun2VGiFofwzB0Km-KnKajHcM,663
|
9
|
+
lamindb/_finish.py,sha256=Yytv26ruL7EFxKewOrgqJxDircZVCpHOkwUjqdh4oMY,9411
|
10
|
+
lamindb/_from_values.py,sha256=8kYpR8Q85EOaTcsPGjVHeZh29fGVgum5OEQf4Hsz_80,13533
|
11
|
+
lamindb/_is_versioned.py,sha256=5lAnhTboltFkZCKVRV1uxkm0OCjJz_HKi3yQq_vEuMs,1306
|
12
|
+
lamindb/_parents.py,sha256=eMavdd6IO6STOVJSlR2TzdRtx6sKYDKsMOtlR3DZlgQ,15599
|
13
|
+
lamindb/_query_manager.py,sha256=Ipe85HL31DDwMbC8CN_1Svbwk48a_DUh_INGQdZL08I,4222
|
14
|
+
lamindb/_query_set.py,sha256=rykST1bxbk2_dt8Rx1TGTEHzXUc1yyc0rZWHO6bRGBA,12667
|
15
|
+
lamindb/_record.py,sha256=MDLvcsZ23lZkThnrYQtj_uW-1BnxCPpyJ5mKl9KPs4A,21199
|
16
|
+
lamindb/_run.py,sha256=5M_r1zGDv9HlqbqRKTWCYCOtENovJ-8mQ4kY7XqcLaU,1888
|
17
|
+
lamindb/_save.py,sha256=Fu7Z84btKOXfTfpunKLni21s5ER2zIllqg5e3nPq-0A,10910
|
18
|
+
lamindb/_storage.py,sha256=GBVChv-DHVMNEBJL5l_JT6B4RDhZ6NnwgzmUICphYKk,413
|
19
|
+
lamindb/_transform.py,sha256=Ck674iuKIp9HDpHuyFFM2xKJcFAUvQDRTnEdnx00Rq0,4114
|
20
|
+
lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
|
21
|
+
lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
|
22
|
+
lamindb/_view.py,sha256=4Ln2ItTb3857PAI-70O8eJYqoTJ_NNFc7E_wds6OGns,2412
|
23
|
+
lamindb/core/__init__.py,sha256=Nq-YbQT8X0KXoGXgctr9lm8H7J6sZeBBJ3hixGq0iuQ,1523
|
24
|
+
lamindb/core/_context.py,sha256=FamAbmq3VZYrgwZkaRtkBY3f5YepLtlblh8wyv4a1OQ,19546
|
25
|
+
lamindb/core/_data.py,sha256=eocOXsZGu62LPtz6yIlvHhPSJTf3yF2ITZTffyflWYI,16269
|
26
|
+
lamindb/core/_feature_manager.py,sha256=94tX6gq_Rx7fkDARQBxB2z92qUDpHocFSAdKv5izMT4,32490
|
27
|
+
lamindb/core/_label_manager.py,sha256=jSLvxAuTuOYosSh_QJhIz3bqnbmWKP43y5abVMb-hOQ,9240
|
28
|
+
lamindb/core/_mapped_collection.py,sha256=1XzratL2IvRleqioNhWo26Lsuqkev8-HEImmHQxw9Kw,23266
|
29
|
+
lamindb/core/_settings.py,sha256=GGEB8BU5GinIfD4ktr1Smp6GPHGaInu46MhP4EecZDY,5950
|
30
|
+
lamindb/core/_sync_git.py,sha256=qc0yfPyKeG4uuNT_3qsv-mkIMqhLFqfXNeNVO49vV00,4547
|
31
|
+
lamindb/core/_track_environment.py,sha256=STzEVUzOeUEWdX7WDJUkKH4u08k7eupRX6AXQwoVt14,828
|
32
|
+
lamindb/core/exceptions.py,sha256=TKyt1JOUwWIHbkCQjir_LQadf8960eQ95RWhSpz5_Bk,1288
|
33
|
+
lamindb/core/fields.py,sha256=47Jmh3efUr5ZscgimR_yckY-I3cNf8ScLutbwKCK3j4,162
|
34
|
+
lamindb/core/schema.py,sha256=KiYQn_8fokSMztTNDe6qUocZzKXWxU32H-YChNJv51A,1877
|
35
|
+
lamindb/core/types.py,sha256=uVBqSVLoQaTkqP9nqsJhwU6yYnx8H5e6-ZxrB6vpOOw,265
|
36
|
+
lamindb/core/versioning.py,sha256=__SOHhk5OjMJgAUjixzp0GFcQrpjm8sBUXC9Fouk2AE,5162
|
37
|
+
lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
|
38
|
+
lamindb/core/datasets/_core.py,sha256=CgVF_pXuBXLElzubDMsl1DbpYOnXCY0HleITVvBKih4,19873
|
39
|
+
lamindb/core/datasets/_fake.py,sha256=BZF9R_1iF0HDnvtZNqL2FtsjSMuqDIfuFxnw_LJYIh4,953
|
40
|
+
lamindb/core/storage/__init__.py,sha256=x-Bpxv1rx6uGog-chI0fdpt0UhkXQkwoQqye0TNk0WQ,514
|
41
|
+
lamindb/core/storage/_anndata_accessor.py,sha256=jmEZeeZlt8-qBXRkU0tTA-t6dVEb_dH86wc1ok0jSRY,24030
|
42
|
+
lamindb/core/storage/_anndata_sizes.py,sha256=aXO3OB--tF5MChenSsigW6Q-RuE8YJJOUTVukkLrv9A,1029
|
43
|
+
lamindb/core/storage/_backed_access.py,sha256=YcWCeT2eligJGsBdjJS_-4el_eC9J088jxUWG9lsleM,3231
|
44
|
+
lamindb/core/storage/_tiledbsoma.py,sha256=_ObAT3pIx0OA5uq55v6aWnIeyTTKjetjV3Gkk4oDWR0,6851
|
45
|
+
lamindb/core/storage/_valid_suffixes.py,sha256=vUSeQ4s01rdhD_vSd6wKmFBsgMJAKkBMnL_T9Y1znMg,501
|
46
|
+
lamindb/core/storage/_zarr.py,sha256=5ceEz6YIvgvUnVVNWhK5Z4W0WfrvyvY82Yna5jSX1_E,3661
|
47
|
+
lamindb/core/storage/objects.py,sha256=OzvBCS-Urz5mr-O95qYt6RGBDDX5HmjfRRKWPPDn1ZE,1797
|
48
|
+
lamindb/core/storage/paths.py,sha256=woOrjtBhNnzm8DjF262ipwyZaQ_A-7MT2ZPoiefAfYk,7728
|
49
|
+
lamindb/core/subsettings/__init__.py,sha256=KFHPzIE7f7Bj4RgMjGQF4CjTdHVG_VNFBrCndo49ixo,198
|
50
|
+
lamindb/core/subsettings/_creation_settings.py,sha256=54mfMH_osC753hpxcl7Dq1rwBD2LHnWveXtQpkLBITE,1194
|
51
|
+
lamindb/core/subsettings/_transform_settings.py,sha256=4YbCuZtJo6zdytl6UQR4GvdDkTtT6SRBqVzofGzNOt8,583
|
52
|
+
lamindb/integrations/__init__.py,sha256=RWGMYYIzr8zvmNPyVB4m-p4gMDhxdRbjES2Ed23OItw,215
|
53
|
+
lamindb/integrations/_vitessce.py,sha256=aDCyZTddpMfUzjEo0DXQ3XlD--ebSqnsGiMxJBunX90,5141
|
54
|
+
lamindb/setup/__init__.py,sha256=OwZpZzPDv5lPPGXZP7-zK6UdO4FHvvuBh439yZvIp3A,410
|
55
|
+
lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
|
56
|
+
lamindb-0.76.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
57
|
+
lamindb-0.76.3.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
58
|
+
lamindb-0.76.3.dist-info/METADATA,sha256=DoLPrLaR-VmA_7wyT_AM-fLUqi-0qL9OhxKT4U-wvWU,2381
|
59
|
+
lamindb-0.76.3.dist-info/RECORD,,
|
lamindb-0.76.1.dist-info/RECORD
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
lamindb/__init__.py,sha256=d7viqFNu34u9fGs2xJq5AAD-4-M7VS2reIRP-uEYn54,2270
|
2
|
-
lamindb/_artifact.py,sha256=wmcofYb1-23YblpjwFo8X-dLNgB7EfwMtzS7p-CKvhs,42630
|
3
|
-
lamindb/_can_validate.py,sha256=jPZHhtPaZJos5bL8Mk8ZNh34mItwYRwOynhofKUxwfY,17472
|
4
|
-
lamindb/_collection.py,sha256=PIKeRZ9zttKSyzcz8UMjKNihPO1Qe-E2zfr-Ao5wtJo,14943
|
5
|
-
lamindb/_curate.py,sha256=Ww_1UlHAIj_fmdxRAuhphqSEi-_qQvjJCIlNbhe8yhA,55486
|
6
|
-
lamindb/_feature.py,sha256=27PBSJoT0yI400WwdWPFz8cmUI4KAQ58jVep-wIDsfM,7373
|
7
|
-
lamindb/_feature_set.py,sha256=DmAy96V_RyV0yiyvWOCHgustXPsCaMwn4TrWwh2qDd8,8104
|
8
|
-
lamindb/_filter.py,sha256=I1tSIF-izmD48YpB8NtKmau59Vpt6C54RPHWc3oinGM,1412
|
9
|
-
lamindb/_finish.py,sha256=VtUfnHQOxbxKUMm3IXmxGO4T0XH64w-yeyeIdwvApBw,9433
|
10
|
-
lamindb/_from_values.py,sha256=zBOJGt_3mBKjqW5LuzuUysMwGbEcEFtYBJXAcL4Vx_0,13432
|
11
|
-
lamindb/_is_versioned.py,sha256=Z_zVsHTnNaWvD15dEz18VocsSgka53jUzs_wDr78ltI,1344
|
12
|
-
lamindb/_parents.py,sha256=eMavdd6IO6STOVJSlR2TzdRtx6sKYDKsMOtlR3DZlgQ,15599
|
13
|
-
lamindb/_query_manager.py,sha256=uLg3YneNcnRP8-fV0f-_t255PMGnDO47ueQqGiDZwis,4240
|
14
|
-
lamindb/_query_set.py,sha256=T1VmEC-rQTmOEwILKJVu5DRBLwp4DA9XnId2ndURcOo,10587
|
15
|
-
lamindb/_record.py,sha256=mhIg7QxvWKdWW0QDAUmKwMQefDeg9k3mlw93rsVsf0Q,21422
|
16
|
-
lamindb/_run.py,sha256=5M_r1zGDv9HlqbqRKTWCYCOtENovJ-8mQ4kY7XqcLaU,1888
|
17
|
-
lamindb/_save.py,sha256=9lpFpQLgmPOp6JcoM9XetNkbYu2JgY70sGQZVz3Gzmw,11027
|
18
|
-
lamindb/_storage.py,sha256=GBVChv-DHVMNEBJL5l_JT6B4RDhZ6NnwgzmUICphYKk,413
|
19
|
-
lamindb/_transform.py,sha256=Vw0Ct15nCOmL8-UwDs-hH-rgdX8PfcAadgbh_ynBzQE,3397
|
20
|
-
lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
|
21
|
-
lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
|
22
|
-
lamindb/_view.py,sha256=4Ln2ItTb3857PAI-70O8eJYqoTJ_NNFc7E_wds6OGns,2412
|
23
|
-
lamindb/core/__init__.py,sha256=QePKN3dkGuNEfIc2CKwBt3Kcl39bbghX6XwXKpK3BA0,1491
|
24
|
-
lamindb/core/_context.py,sha256=cNj_LDpA9gmkE6P6Gg1cBwp4eFukvMlggivYdrVqM8E,19407
|
25
|
-
lamindb/core/_data.py,sha256=eocOXsZGu62LPtz6yIlvHhPSJTf3yF2ITZTffyflWYI,16269
|
26
|
-
lamindb/core/_feature_manager.py,sha256=gJowe9-tifi0Z5IcChV-jtGYVdl6XgR2m_oswwhU17Y,31980
|
27
|
-
lamindb/core/_label_manager.py,sha256=OO5Tl-ankQZNrF_PQ7_xfkuJ8ytMUvr-9cL9soe1Ceo,9249
|
28
|
-
lamindb/core/_mapped_collection.py,sha256=ST-cTfokIGkRadjSHEyvIK2san8cGr7WZpgbgs5neLI,22025
|
29
|
-
lamindb/core/_settings.py,sha256=GGEB8BU5GinIfD4ktr1Smp6GPHGaInu46MhP4EecZDY,5950
|
30
|
-
lamindb/core/_sync_git.py,sha256=qc0yfPyKeG4uuNT_3qsv-mkIMqhLFqfXNeNVO49vV00,4547
|
31
|
-
lamindb/core/_track_environment.py,sha256=STzEVUzOeUEWdX7WDJUkKH4u08k7eupRX6AXQwoVt14,828
|
32
|
-
lamindb/core/exceptions.py,sha256=qNFYN5Jc7Y6kw4re-jsW0AEIprsV2HB1wTcJiO-u-ks,1278
|
33
|
-
lamindb/core/fields.py,sha256=47Jmh3efUr5ZscgimR_yckY-I3cNf8ScLutbwKCK3j4,162
|
34
|
-
lamindb/core/schema.py,sha256=KiYQn_8fokSMztTNDe6qUocZzKXWxU32H-YChNJv51A,1877
|
35
|
-
lamindb/core/types.py,sha256=uVBqSVLoQaTkqP9nqsJhwU6yYnx8H5e6-ZxrB6vpOOw,265
|
36
|
-
lamindb/core/versioning.py,sha256=fVzxFcJ8xPPSRuLZuUz_lfAKirI550NQTyKIowQUhhs,5404
|
37
|
-
lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
|
38
|
-
lamindb/core/datasets/_core.py,sha256=CgVF_pXuBXLElzubDMsl1DbpYOnXCY0HleITVvBKih4,19873
|
39
|
-
lamindb/core/datasets/_fake.py,sha256=BZF9R_1iF0HDnvtZNqL2FtsjSMuqDIfuFxnw_LJYIh4,953
|
40
|
-
lamindb/core/storage/__init__.py,sha256=MjKg2-p8EbOYTVsgufnK93ut7HG7_MzLDAqtzXt0U2Q,501
|
41
|
-
lamindb/core/storage/_anndata_accessor.py,sha256=jmEZeeZlt8-qBXRkU0tTA-t6dVEb_dH86wc1ok0jSRY,24030
|
42
|
-
lamindb/core/storage/_anndata_sizes.py,sha256=aXO3OB--tF5MChenSsigW6Q-RuE8YJJOUTVukkLrv9A,1029
|
43
|
-
lamindb/core/storage/_backed_access.py,sha256=MsSgiIccHVhqOcur2lZ4mj5LSIL5OL8nX4eqK6mloU0,4732
|
44
|
-
lamindb/core/storage/_valid_suffixes.py,sha256=vUSeQ4s01rdhD_vSd6wKmFBsgMJAKkBMnL_T9Y1znMg,501
|
45
|
-
lamindb/core/storage/_zarr.py,sha256=5ceEz6YIvgvUnVVNWhK5Z4W0WfrvyvY82Yna5jSX1_E,3661
|
46
|
-
lamindb/core/storage/objects.py,sha256=OzvBCS-Urz5mr-O95qYt6RGBDDX5HmjfRRKWPPDn1ZE,1797
|
47
|
-
lamindb/core/storage/paths.py,sha256=I0UjQfXfh3MptfLgpA0iSyR-X9pLOvgtXNr4B_Lwk4g,7810
|
48
|
-
lamindb/core/subsettings/__init__.py,sha256=KFHPzIE7f7Bj4RgMjGQF4CjTdHVG_VNFBrCndo49ixo,198
|
49
|
-
lamindb/core/subsettings/_creation_settings.py,sha256=54mfMH_osC753hpxcl7Dq1rwBD2LHnWveXtQpkLBITE,1194
|
50
|
-
lamindb/core/subsettings/_transform_settings.py,sha256=4YbCuZtJo6zdytl6UQR4GvdDkTtT6SRBqVzofGzNOt8,583
|
51
|
-
lamindb/integrations/__init__.py,sha256=MoLRD_qqX5WHFUAqHL6zoY_cDkWH0zimaGT_1CyXKnk,124
|
52
|
-
lamindb/integrations/_vitessce.py,sha256=jcpLUNFq1BsDpZDkG5L3nzWNXDLuy3Eep_GfY0XqhhA,5077
|
53
|
-
lamindb/setup/__init__.py,sha256=OwZpZzPDv5lPPGXZP7-zK6UdO4FHvvuBh439yZvIp3A,410
|
54
|
-
lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
|
55
|
-
lamindb-0.76.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
56
|
-
lamindb-0.76.1.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
57
|
-
lamindb-0.76.1.dist-info/METADATA,sha256=_h45JtUTV8vsLXe7ePddBMIhWo4CkFD4zKvxjNq99fM,2669
|
58
|
-
lamindb-0.76.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|