lamindb 0.74.1__py3-none-any.whl → 0.74.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 +8 -5
- lamindb/_artifact.py +31 -41
- lamindb/_can_validate.py +24 -22
- lamindb/_collection.py +5 -6
- lamindb/{_annotate.py → _curate.py} +62 -40
- lamindb/_feature.py +7 -9
- lamindb/_feature_set.py +17 -18
- lamindb/_filter.py +5 -5
- lamindb/_finish.py +18 -6
- lamindb/_from_values.py +12 -12
- lamindb/_is_versioned.py +2 -2
- lamindb/_parents.py +7 -7
- lamindb/_query_manager.py +7 -7
- lamindb/_query_set.py +27 -27
- lamindb/{_registry.py → _record.py} +91 -63
- lamindb/_save.py +10 -28
- lamindb/_storage.py +1 -1
- lamindb/_view.py +4 -4
- lamindb/core/__init__.py +16 -12
- lamindb/core/_data.py +10 -10
- lamindb/core/_feature_manager.py +54 -42
- lamindb/core/_label_manager.py +15 -21
- lamindb/core/_mapped_collection.py +4 -1
- lamindb/core/_run_context.py +2 -2
- lamindb/core/_settings.py +2 -1
- lamindb/core/_sync_git.py +22 -12
- lamindb/core/_track_environment.py +5 -1
- lamindb/core/datasets/_core.py +0 -6
- lamindb/core/fields.py +1 -1
- lamindb/core/schema.py +6 -6
- lamindb/core/storage/_backed_access.py +56 -12
- lamindb/core/storage/paths.py +1 -1
- lamindb/core/versioning.py +1 -1
- lamindb/integrations/_vitessce.py +4 -3
- {lamindb-0.74.1.dist-info → lamindb-0.74.3.dist-info}/METADATA +6 -8
- lamindb-0.74.3.dist-info/RECORD +57 -0
- lamindb-0.74.1.dist-info/RECORD +0 -57
- {lamindb-0.74.1.dist-info → lamindb-0.74.3.dist-info}/LICENSE +0 -0
- {lamindb-0.74.1.dist-info → lamindb-0.74.3.dist-info}/WHEEL +0 -0
lamindb/core/_run_context.py
CHANGED
@@ -43,7 +43,7 @@ def get_uid_ext(version: str) -> str:
|
|
43
43
|
# merely zero-padding the nbproject version such that the base62 encoding is
|
44
44
|
# at least 4 characters long doesn't yields sufficiently diverse hashes and
|
45
45
|
# leads to collisions; it'd be nice because the uid_ext would be ordered
|
46
|
-
return encodebytes(hashlib.md5(version.encode()).digest())[:4]
|
46
|
+
return encodebytes(hashlib.md5(version.encode()).digest())[:4] # noqa: S324
|
47
47
|
|
48
48
|
|
49
49
|
def update_stem_uid_or_version(
|
@@ -113,7 +113,7 @@ def get_notebook_name_colab() -> str:
|
|
113
113
|
|
114
114
|
ip = gethostbyname(gethostname()) # 172.28.0.12
|
115
115
|
try:
|
116
|
-
name = get(f"http://{ip}:9000/api/sessions").json()[0]["name"]
|
116
|
+
name = get(f"http://{ip}:9000/api/sessions").json()[0]["name"] # noqa: S113
|
117
117
|
except Exception:
|
118
118
|
logger.warning(
|
119
119
|
"could not get notebook name from Google Colab, using: notebook.ipynb"
|
lamindb/core/_settings.py
CHANGED
@@ -108,7 +108,8 @@ class Settings:
|
|
108
108
|
For example: `ln.sync_git_repo = https://github.com/laminlabs/redun-lamin`
|
109
109
|
"""
|
110
110
|
self._sync_git_repo = sanitize_git_repo_url(value)
|
111
|
-
|
111
|
+
if not self._sync_git_repo.startswith("https://"): # pragma: nocover
|
112
|
+
raise ValueError("git repository URL must start with 'https://'.")
|
112
113
|
|
113
114
|
@property
|
114
115
|
def storage(self) -> StorageSettings:
|
lamindb/core/_sync_git.py
CHANGED
@@ -24,8 +24,7 @@ def get_git_repo_from_remote() -> Path:
|
|
24
24
|
f"running outside of synched git repo, cloning {repo_url} into {repo_dir}"
|
25
25
|
)
|
26
26
|
result = subprocess.run(
|
27
|
-
|
28
|
-
shell=True,
|
27
|
+
["git", "clone", "--depth", "10", f"{repo_url}.git"],
|
29
28
|
capture_output=True,
|
30
29
|
cwd=setup_settings.storage.cache_dir,
|
31
30
|
)
|
@@ -36,8 +35,7 @@ def get_git_repo_from_remote() -> Path:
|
|
36
35
|
|
37
36
|
def check_local_git_repo() -> bool:
|
38
37
|
result = subprocess.run(
|
39
|
-
"git config --get remote.origin.url",
|
40
|
-
shell=True,
|
38
|
+
["git", "config", "--get remote.origin.url"],
|
41
39
|
capture_output=True,
|
42
40
|
)
|
43
41
|
result_str = result.stdout.decode().strip()
|
@@ -55,10 +53,9 @@ def check_local_git_repo() -> bool:
|
|
55
53
|
|
56
54
|
|
57
55
|
def get_git_commit_hash(blob_hash: str, repo_dir: Path | None = None) -> str | None:
|
58
|
-
command =
|
56
|
+
command = ["git", "log", f"--find-object={blob_hash}", "--pretty=format:%H"]
|
59
57
|
result = subprocess.run(
|
60
58
|
command,
|
61
|
-
shell=True,
|
62
59
|
capture_output=True,
|
63
60
|
cwd=repo_dir,
|
64
61
|
)
|
@@ -68,7 +65,7 @@ def get_git_commit_hash(blob_hash: str, repo_dir: Path | None = None) -> str | N
|
|
68
65
|
if commit_hash == "" or result.returncode == 1:
|
69
66
|
return None
|
70
67
|
else:
|
71
|
-
assert (
|
68
|
+
assert ( # noqa: S101
|
72
69
|
len(commit_hash) == 40
|
73
70
|
), f"commit hash |{commit_hash}| is not 40 characters long"
|
74
71
|
return commit_hash
|
@@ -82,21 +79,34 @@ def get_filepath_within_git_repo(
|
|
82
79
|
# from anywhere in the repo, hence, let's get the root
|
83
80
|
repo_root = (
|
84
81
|
subprocess.run(
|
85
|
-
"git rev-parse --show-toplevel",
|
86
|
-
shell=True,
|
82
|
+
["git", "rev-parse", "--show-toplevel"],
|
87
83
|
capture_output=True,
|
88
84
|
cwd=repo_dir,
|
89
85
|
)
|
90
86
|
.stdout.decode()
|
91
87
|
.strip()
|
92
88
|
)
|
93
|
-
|
89
|
+
# Run the git commands separately to circumvent spawning a shell
|
90
|
+
git_command = ["git", "ls-tree", "-r", commit_hash]
|
91
|
+
git_process = subprocess.Popen(
|
92
|
+
git_command,
|
93
|
+
stdout=subprocess.PIPE,
|
94
|
+
cwd=repo_root,
|
95
|
+
)
|
96
|
+
|
97
|
+
grep_command = ["grep", "-E", blob_hash]
|
94
98
|
result = subprocess.run(
|
95
|
-
|
96
|
-
|
99
|
+
grep_command,
|
100
|
+
stdin=git_process.stdout,
|
97
101
|
capture_output=True,
|
98
102
|
cwd=repo_root,
|
99
103
|
)
|
104
|
+
|
105
|
+
# Close the stdout to allow git_process to receive a SIGPIPE if grep_command exits
|
106
|
+
git_process.stdout.close()
|
107
|
+
git_process.wait()
|
108
|
+
|
109
|
+
command = " ".join(git_command) + " | " + " ".join(grep_command)
|
100
110
|
if result.returncode != 0 and result.stderr.decode() != "":
|
101
111
|
raise RuntimeError(f"{command}\n{result.stderr.decode()}")
|
102
112
|
if len(result.stdout.decode()) == 0:
|
@@ -15,7 +15,11 @@ def track_environment(run: Run) -> None:
|
|
15
15
|
# create a requirements.txt
|
16
16
|
# we don't create a conda environment.yml mostly for its slowness
|
17
17
|
try:
|
18
|
-
|
18
|
+
with open(filepath, "w") as f:
|
19
|
+
result = subprocess.run(
|
20
|
+
["pip", "freeze"],
|
21
|
+
stdout=f,
|
22
|
+
)
|
19
23
|
except OSError as e:
|
20
24
|
result = None
|
21
25
|
logger.warning(f"could not run pip freeze with error {e}")
|
lamindb/core/datasets/_core.py
CHANGED
@@ -185,8 +185,6 @@ def anndata_mouse_sc_lymph_node(
|
|
185
185
|
|
186
186
|
verbosity = ln.settings.verbosity
|
187
187
|
ln.settings.verbosity = "error"
|
188
|
-
auto_save_parents = bt.settings.auto_save_parents
|
189
|
-
bt.settings.auto_save_parents = False
|
190
188
|
# strain
|
191
189
|
bt.ExperimentalFactor.from_public(ontology_id="EFO:0004472").save()
|
192
190
|
# developmental stage
|
@@ -215,7 +213,6 @@ def anndata_mouse_sc_lymph_node(
|
|
215
213
|
labels += [ln.ULabel(name=name) for name in adata.obs[col]]
|
216
214
|
ln.save(labels)
|
217
215
|
ln.settings.verbosity = verbosity
|
218
|
-
bt.settings.auto_save_parents = auto_save_parents
|
219
216
|
|
220
217
|
return adata
|
221
218
|
|
@@ -313,8 +310,6 @@ def anndata_human_immune_cells(
|
|
313
310
|
|
314
311
|
verbosity = ln.settings.verbosity
|
315
312
|
ln.settings.verbosity = "error"
|
316
|
-
auto_save_parents = bt.settings.auto_save_parents
|
317
|
-
bt.settings.auto_save_parents = False
|
318
313
|
ln.save(
|
319
314
|
bt.Gene.from_values(
|
320
315
|
adata.var.index, field="ensembl_gene_id", organism="human"
|
@@ -331,7 +326,6 @@ def anndata_human_immune_cells(
|
|
331
326
|
bt.ExperimentalFactor.from_public(ontology_id="EFO:0008913").save()
|
332
327
|
ln.save([ln.ULabel(name=name) for name in adata.obs.donor.unique()])
|
333
328
|
ln.settings.verbosity = verbosity
|
334
|
-
bt.settings.auto_save_parents = auto_save_parents
|
335
329
|
return adata
|
336
330
|
|
337
331
|
|
lamindb/core/fields.py
CHANGED
lamindb/core/schema.py
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
from django.db.models import ManyToManyField
|
4
|
-
from lnschema_core.models import Feature, FeatureSet, LinkORM,
|
4
|
+
from lnschema_core.models import Feature, FeatureSet, LinkORM, Record
|
5
5
|
|
6
6
|
|
7
|
-
def dict_schema_name_to_model_name(orm: type[
|
7
|
+
def dict_schema_name_to_model_name(orm: type[Record]) -> dict[str, Record]:
|
8
8
|
d: dict = {
|
9
9
|
i.related_model.__get_name_with_schema__(): i.related_model
|
10
10
|
for i in orm._meta.related_objects
|
@@ -21,9 +21,9 @@ def dict_schema_name_to_model_name(orm: type[Registry]) -> dict[str, Registry]:
|
|
21
21
|
|
22
22
|
|
23
23
|
def dict_related_model_to_related_name(
|
24
|
-
orm: type[
|
24
|
+
orm: type[Record], links: bool = False
|
25
25
|
) -> dict[str, str]:
|
26
|
-
def include(model:
|
26
|
+
def include(model: Record):
|
27
27
|
return not links != issubclass(model, LinkORM)
|
28
28
|
|
29
29
|
related_objects = orm._meta.related_objects + orm._meta.many_to_many
|
@@ -39,7 +39,7 @@ def dict_related_model_to_related_name(
|
|
39
39
|
return d
|
40
40
|
|
41
41
|
|
42
|
-
def get_related_name(features_type: type[
|
42
|
+
def get_related_name(features_type: type[Record]) -> str:
|
43
43
|
candidates = [
|
44
44
|
field.related_name
|
45
45
|
for field in FeatureSet._meta.related_objects
|
@@ -49,7 +49,7 @@ def get_related_name(features_type: type[Registry]) -> str:
|
|
49
49
|
raise ValueError(
|
50
50
|
f"Can't create feature sets from {features_type.__name__} because it's not"
|
51
51
|
" related to it!\nYou need to create a link model between FeatureSet and"
|
52
|
-
" your
|
52
|
+
" your Record in your custom schema.\nTo do so, add a"
|
53
53
|
" line:\nfeature_sets = models.ManyToMany(FeatureSet,"
|
54
54
|
" related_name='mythings')\n"
|
55
55
|
)
|
@@ -28,6 +28,8 @@ if TYPE_CHECKING:
|
|
28
28
|
from pathlib import Path
|
29
29
|
|
30
30
|
from fsspec.core import OpenFile
|
31
|
+
from tiledbsoma import Collection as SOMACollection
|
32
|
+
from tiledbsoma import Experiment as SOMAExperiment
|
31
33
|
|
32
34
|
anndata_version_parse = version.parse(anndata_version)
|
33
35
|
|
@@ -100,7 +102,7 @@ def _records_to_df(obj):
|
|
100
102
|
return obj
|
101
103
|
|
102
104
|
|
103
|
-
class
|
105
|
+
class AccessRecord:
|
104
106
|
def __init__(self):
|
105
107
|
self._registry = {}
|
106
108
|
self._openers = {}
|
@@ -141,7 +143,7 @@ class AccessRegistry:
|
|
141
143
|
|
142
144
|
|
143
145
|
# storage specific functions should be registered and called through the registry
|
144
|
-
registry =
|
146
|
+
registry = AccessRecord()
|
145
147
|
|
146
148
|
|
147
149
|
@registry.register_open("h5py")
|
@@ -207,8 +209,10 @@ def safer_read_partial(elem, indices):
|
|
207
209
|
try:
|
208
210
|
ds = CSRDataset(elem)
|
209
211
|
result = _subset_sparse(ds, indices)
|
210
|
-
except Exception:
|
211
|
-
|
212
|
+
except Exception as e:
|
213
|
+
logger.debug(
|
214
|
+
f"Encountered an exception while attempting to subset a sparse dataset by indices.\n{e}"
|
215
|
+
)
|
212
216
|
if result is None:
|
213
217
|
raise ValueError(
|
214
218
|
"Can not get a subset of the element of type"
|
@@ -305,8 +309,10 @@ if ZARR_INSTALLED:
|
|
305
309
|
try:
|
306
310
|
ds = CSRDataset(elem)
|
307
311
|
return _subset_sparse(ds, indices)
|
308
|
-
except Exception:
|
309
|
-
|
312
|
+
except Exception as e:
|
313
|
+
logger.debug(
|
314
|
+
f"Encountered an exception while attempting to subset a sparse dataset by indices.\n{e}"
|
315
|
+
)
|
310
316
|
raise ValueError(
|
311
317
|
"Can not get a subset of the element of type"
|
312
318
|
f" {type(elem).__name__} with an empty spec."
|
@@ -734,24 +740,62 @@ class BackedAccessor:
|
|
734
740
|
|
735
741
|
def backed_access(
|
736
742
|
artifact_or_filepath: Artifact | Path, using_key: str | None = None
|
737
|
-
) -> AnnDataAccessor | BackedAccessor:
|
743
|
+
) -> AnnDataAccessor | BackedAccessor | SOMACollection | SOMAExperiment:
|
738
744
|
if isinstance(artifact_or_filepath, Artifact):
|
739
745
|
filepath = filepath_from_artifact(artifact_or_filepath, using_key=using_key)
|
740
746
|
else:
|
741
747
|
filepath = artifact_or_filepath
|
742
748
|
name = filepath.name
|
749
|
+
suffix = filepath.suffix
|
750
|
+
|
751
|
+
if name == "soma" or suffix == ".tiledbsoma":
|
752
|
+
try:
|
753
|
+
import tiledbsoma as soma
|
754
|
+
except ImportError as e:
|
755
|
+
raise ImportError(
|
756
|
+
"Please install tiledbsoma: pip install tiledbsoma"
|
757
|
+
) from e
|
758
|
+
filepath_str = filepath.as_posix()
|
759
|
+
if filepath.protocol == "s3":
|
760
|
+
from lamindb_setup.core._settings_storage import get_storage_region
|
761
|
+
|
762
|
+
region = get_storage_region(filepath_str)
|
763
|
+
tiledb_config = {"vfs.s3.region": region}
|
764
|
+
storage_options = filepath.storage_options
|
765
|
+
if "key" in storage_options:
|
766
|
+
tiledb_config["vfs.s3.aws_access_key_id"] = storage_options["key"]
|
767
|
+
if "secret" in storage_options:
|
768
|
+
tiledb_config["vfs.s3.aws_secret_access_key"] = storage_options[
|
769
|
+
"secret"
|
770
|
+
]
|
771
|
+
if "token" in storage_options:
|
772
|
+
tiledb_config["vfs.s3.aws_session_token"] = storage_options["token"]
|
773
|
+
ctx = soma.SOMATileDBContext(tiledb_config=tiledb_config)
|
774
|
+
# this is a strange bug
|
775
|
+
# for some reason iterdir futher gives incorrect results
|
776
|
+
# if cache is not invalidated
|
777
|
+
# instead of obs and ms it gives ms and ms in the list of names
|
778
|
+
filepath.fs.invalidate_cache()
|
779
|
+
else:
|
780
|
+
ctx = None
|
743
781
|
|
744
|
-
|
782
|
+
soma_objects = [obj.name for obj in filepath.iterdir()]
|
783
|
+
if "obs" in soma_objects and "ms" in soma_objects:
|
784
|
+
SOMAType = soma.Experiment
|
785
|
+
else:
|
786
|
+
SOMAType = soma.Collection
|
787
|
+
return SOMAType.open(filepath_str, context=ctx)
|
788
|
+
elif suffix in {".h5", ".hdf5", ".h5ad"}:
|
745
789
|
conn, storage = registry.open("h5py", filepath)
|
746
|
-
elif
|
790
|
+
elif suffix == ".zarr":
|
747
791
|
conn, storage = registry.open("zarr", filepath)
|
748
792
|
else:
|
749
793
|
raise ValueError(
|
750
|
-
"object should have .h5, .hdf5, .h5ad, .zarr suffix, not"
|
751
|
-
f" {
|
794
|
+
"object should have .h5, .hdf5, .h5ad, .zarr, .tiledbsoma suffix, not"
|
795
|
+
f" {suffix}."
|
752
796
|
)
|
753
797
|
|
754
|
-
if
|
798
|
+
if suffix == ".h5ad":
|
755
799
|
return AnnDataAccessor(conn, storage, name)
|
756
800
|
else:
|
757
801
|
if get_spec(storage).encoding_type == "anndata":
|
lamindb/core/storage/paths.py
CHANGED
@@ -47,7 +47,7 @@ def auto_storage_key_from_artifact(artifact: Artifact):
|
|
47
47
|
|
48
48
|
|
49
49
|
def auto_storage_key_from_artifact_uid(uid: str, suffix: str, is_dir: bool) -> str:
|
50
|
-
assert isinstance(suffix, str)
|
50
|
+
assert isinstance(suffix, str) # noqa: S101 Suffix cannot be None.
|
51
51
|
if is_dir:
|
52
52
|
uid_storage = uid[:16] # 16 chars, leave 4 chars for versioning
|
53
53
|
else:
|
lamindb/core/versioning.py
CHANGED
@@ -39,9 +39,10 @@ def save_vitessce_config(vitessce_config: VitessceConfig, description: str) -> A
|
|
39
39
|
if "url" not in file:
|
40
40
|
raise ValueError("Each file must have a 'url' key.")
|
41
41
|
filename = file["url"].split("/")[-1]
|
42
|
-
|
43
|
-
(
|
44
|
-
|
42
|
+
if not filename.endswith((".anndata.zarr", ".zarr", ".ome.zarr")):
|
43
|
+
logger.warning(
|
44
|
+
"filename should end with '.anndata.zarr', '.zarr', or '.ome.zarr'."
|
45
|
+
)
|
45
46
|
filestem = (
|
46
47
|
filename.replace(".anndata.zarr", "")
|
47
48
|
.replace(".spatialdata.zarr", "")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.74.
|
3
|
+
Version: 0.74.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,10 +9,10 @@ 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.70.
|
13
|
-
Requires-Dist: lamindb_setup==0.
|
12
|
+
Requires-Dist: lnschema_core==0.70.5
|
13
|
+
Requires-Dist: lamindb_setup==0.74.2
|
14
14
|
Requires-Dist: lamin_utils==0.13.2
|
15
|
-
Requires-Dist: lamin_cli==0.
|
15
|
+
Requires-Dist: lamin_cli==0.15.0
|
16
16
|
Requires-Dist: rapidfuzz
|
17
17
|
Requires-Dist: pyarrow
|
18
18
|
Requires-Dist: typing_extensions!=4.6.0
|
@@ -23,10 +23,8 @@ Requires-Dist: fsspec
|
|
23
23
|
Requires-Dist: pandas
|
24
24
|
Requires-Dist: graphviz
|
25
25
|
Requires-Dist: psycopg2-binary
|
26
|
-
Requires-Dist: psutil
|
27
26
|
Requires-Dist: lamindb_setup[aws] ; extra == "aws"
|
28
|
-
Requires-Dist: bionty==0.44.
|
29
|
-
Requires-Dist: pandas<2 ; extra == "dev"
|
27
|
+
Requires-Dist: bionty==0.44.3 ; extra == "bionty"
|
30
28
|
Requires-Dist: pre-commit ; extra == "dev"
|
31
29
|
Requires-Dist: nox ; extra == "dev"
|
32
30
|
Requires-Dist: laminci>=0.3 ; extra == "dev"
|
@@ -39,7 +37,7 @@ Requires-Dist: faker-biology ; extra == "dev"
|
|
39
37
|
Requires-Dist: django-schema-graph ; extra == "erdiagram"
|
40
38
|
Requires-Dist: readfcs>=1.1.8 ; extra == "fcs"
|
41
39
|
Requires-Dist: lamindb_setup[gcp] ; extra == "gcp"
|
42
|
-
Requires-Dist: nbproject==0.10.
|
40
|
+
Requires-Dist: nbproject==0.10.4 ; extra == "jupyter"
|
43
41
|
Requires-Dist: nbstripout==0.6.1 ; extra == "jupyter"
|
44
42
|
Requires-Dist: nbconvert ; extra == "jupyter"
|
45
43
|
Requires-Dist: zarr>=2.16.0 ; extra == "zarr"
|
@@ -0,0 +1,57 @@
|
|
1
|
+
lamindb/__init__.py,sha256=VfwmNQfCefzn3jsRS2l3fnV7jub1RpMj4aVCFh09vxI,2249
|
2
|
+
lamindb/_artifact.py,sha256=pdSMBuZnlr-Jfot8p90x7TEbto-viXyryax5p1FljEs,40133
|
3
|
+
lamindb/_can_validate.py,sha256=CUu-lBY9XnSYGWiazYhLMW5H0LuuR86mVbU7UnIZTVU,15010
|
4
|
+
lamindb/_collection.py,sha256=P4UjZxC2OcViTmqSeW3NIiXU3C0ZF5BF9P6YcchS2Zg,14617
|
5
|
+
lamindb/_curate.py,sha256=i3pqkNvgXtOXXmw7zPgnr7BT3KnZDBw8DyxuyPkhwbo,44898
|
6
|
+
lamindb/_feature.py,sha256=hLj5KDhIVkZrIa7IbiHGyUBGZS7PeDNxKsNK1EadBAc,7377
|
7
|
+
lamindb/_feature_set.py,sha256=nsiT9mKfEJdh2yqihOawfFL0mkHRNi5-9vxRllv5NAM,8137
|
8
|
+
lamindb/_filter.py,sha256=Ed9k-LOkr1BwqeHpvaEe0w27cG7Bu0BaXPDA0OIzUpQ,1410
|
9
|
+
lamindb/_finish.py,sha256=FRGN2cmBbZqmxr803YIpGGUaqst8xBTi3kmliV5oJo4,10504
|
10
|
+
lamindb/_from_values.py,sha256=SGTQNb0M1h3icuYsfIIjqI7xNy3i3Frw_-PAl5MXMBo,13860
|
11
|
+
lamindb/_is_versioned.py,sha256=8pXW2gkLTZsTxRERuWZLidiagNIC8evmCmnbztWkVQ4,1343
|
12
|
+
lamindb/_parents.py,sha256=Zgi9Lmw9td18Y0QJ96rYaBrjSaZ8XGcseWdbJkpJhFU,15061
|
13
|
+
lamindb/_query_manager.py,sha256=6_ZqQr0SKTYsbMtJd5BmaMoyASIVel5v2F1KMgacWlU,4252
|
14
|
+
lamindb/_query_set.py,sha256=LM5NsAWy5FCZZSxX1VbE20RdA5nsyk4_5p4abuMjdcI,11662
|
15
|
+
lamindb/_record.py,sha256=5B0mMvEoZ0gZ6MALy6bsbDOVU47pkVEhRCBVwVJnNwg,19150
|
16
|
+
lamindb/_run.py,sha256=xj3ER4F_yWvuNw1mr0XU-QuIPi5hBO7Ue0ygBgJQ6mc,1887
|
17
|
+
lamindb/_save.py,sha256=xs1ZdTYGd78zA3XqXhiwZ_QKAogLdHCQv1EBVFDWCis,11020
|
18
|
+
lamindb/_storage.py,sha256=GBVChv-DHVMNEBJL5l_JT6B4RDhZ6NnwgzmUICphYKk,413
|
19
|
+
lamindb/_transform.py,sha256=E9C7psuOnsNrUQpWRuGgEUM8_pc7YhDn7n4ieHzB4X0,3169
|
20
|
+
lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
|
21
|
+
lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
|
22
|
+
lamindb/_view.py,sha256=_sAcSD06bC92R_LLDcHMhO0IfOqybBXXRYxOXvm1Juc,2322
|
23
|
+
lamindb/core/__init__.py,sha256=HtyYVFrS6RclSk7gZty9vgXU0k2_oZiqFPfqghBc4Fc,1415
|
24
|
+
lamindb/core/_data.py,sha256=yk2ozTt-mNIA8bWllmcC__WgFukj03fZU41rr_ultlM,16264
|
25
|
+
lamindb/core/_feature_manager.py,sha256=EvMoY9EAFGdbRkDR44YMJBMWBEt9IbtfZ0RHmiv0D58,31910
|
26
|
+
lamindb/core/_label_manager.py,sha256=udG70H1FucAr4lmtFMgAcMJiAcYvoZIyT034NO93YF8,9265
|
27
|
+
lamindb/core/_mapped_collection.py,sha256=SGUsR6RbjNzUOq6A6wTa4M4GkLMuP4Z70WOeF39WPCU,19618
|
28
|
+
lamindb/core/_run_context.py,sha256=w_LdfwYTncCZmh4agNPey37UdKrzSglLfLUNBe5z1mw,18421
|
29
|
+
lamindb/core/_settings.py,sha256=sDfIfq9H7H8nUE51FJF4EO_Zihlxh44S3GbaliHKJY4,6108
|
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=bbm-PeSy24qFcqh2HpucZWpwGAvk-TL_3FUoAPb3e3E,867
|
33
|
+
lamindb/core/fields.py,sha256=47Jmh3efUr5ZscgimR_yckY-I3cNf8ScLutbwKCK3j4,162
|
34
|
+
lamindb/core/schema.py,sha256=sNrzWnqeyh9Ppr7yImlSAXiHb_VJdB5DWuO-QERxQGY,1847
|
35
|
+
lamindb/core/types.py,sha256=xeQF2x40p2pR9eIVQrXT74RrS810z2fbjmTRTSQUqPM,230
|
36
|
+
lamindb/core/versioning.py,sha256=lz1JP3K-0npeSTZPY7kMVXqOOcB8IEGmdG0Si3kSdN8,4956
|
37
|
+
lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
|
38
|
+
lamindb/core/datasets/_core.py,sha256=NhMELgF4aR9HAlU37BF3FkPLobxinRbMJ8s6XwgIqEM,19549
|
39
|
+
lamindb/core/datasets/_fake.py,sha256=BZF9R_1iF0HDnvtZNqL2FtsjSMuqDIfuFxnw_LJYIh4,953
|
40
|
+
lamindb/core/storage/__init__.py,sha256=5LUFQKRr2BX24d-yWBezhTXBV83sShcOvPj5Y5u6qIg,441
|
41
|
+
lamindb/core/storage/_anndata_sizes.py,sha256=aXO3OB--tF5MChenSsigW6Q-RuE8YJJOUTVukkLrv9A,1029
|
42
|
+
lamindb/core/storage/_backed_access.py,sha256=4VmnqGd5DH6xJ5UQ7JMiQ2dfs-uLBnVlJXkZB8GcJHI,26624
|
43
|
+
lamindb/core/storage/_valid_suffixes.py,sha256=J08aglC9oo35pzahj0SQXW9IHib8Asp4dc11co-2uys,212
|
44
|
+
lamindb/core/storage/_zarr.py,sha256=5ceEz6YIvgvUnVVNWhK5Z4W0WfrvyvY82Yna5jSX1_E,3661
|
45
|
+
lamindb/core/storage/objects.py,sha256=OzvBCS-Urz5mr-O95qYt6RGBDDX5HmjfRRKWPPDn1ZE,1797
|
46
|
+
lamindb/core/storage/paths.py,sha256=IAtZTkYB0Q1vlVkx-7c-zBjQtlKVdwojemNgqVTOUC0,8255
|
47
|
+
lamindb/core/subsettings/__init__.py,sha256=KFHPzIE7f7Bj4RgMjGQF4CjTdHVG_VNFBrCndo49ixo,198
|
48
|
+
lamindb/core/subsettings/_creation_settings.py,sha256=54mfMH_osC753hpxcl7Dq1rwBD2LHnWveXtQpkLBITE,1194
|
49
|
+
lamindb/core/subsettings/_transform_settings.py,sha256=4YbCuZtJo6zdytl6UQR4GvdDkTtT6SRBqVzofGzNOt8,583
|
50
|
+
lamindb/integrations/__init__.py,sha256=aH2PmO2m4-vwIifMYTB0Fyyr_gZWtVnV71jT0tVWSw0,123
|
51
|
+
lamindb/integrations/_vitessce.py,sha256=VC80NKuzZ0FdjFxaLvyD78kAUNwvwBnGblSPDqT_mGQ,2737
|
52
|
+
lamindb/setup/__init__.py,sha256=OwZpZzPDv5lPPGXZP7-zK6UdO4FHvvuBh439yZvIp3A,410
|
53
|
+
lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
|
54
|
+
lamindb-0.74.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
55
|
+
lamindb-0.74.3.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
56
|
+
lamindb-0.74.3.dist-info/METADATA,sha256=v0qwjHuybQfWzw2juEC3T31Ot74DQtbjlUR2Rhzg4Yg,2669
|
57
|
+
lamindb-0.74.3.dist-info/RECORD,,
|
lamindb-0.74.1.dist-info/RECORD
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
lamindb/__init__.py,sha256=7wGOqqM6NyKeQG6qqir53qzUowWMRAd36tH5L874hd0,2182
|
2
|
-
lamindb/_annotate.py,sha256=CScyKVB3k_x5p0pihxO1UrTFBCvPcSSjBXvGY3YgTLs,44381
|
3
|
-
lamindb/_artifact.py,sha256=zVNBF7y-rARGG78Z2d2dI2J0Tg_5yeZL-GfogzBB7xY,40456
|
4
|
-
lamindb/_can_validate.py,sha256=s1q0lxplqnhytrVgArBTm05XKMMmpreK0ZlVCsd2jjk,14849
|
5
|
-
lamindb/_collection.py,sha256=AGiztgM_OIet617aF86muL6lIv6GEDcmXorize6V62U,14657
|
6
|
-
lamindb/_feature.py,sha256=Z_Awtsj183SA1egZgNmJI_dH04rqXAj72od3H6n0uBk,7398
|
7
|
-
lamindb/_feature_set.py,sha256=ZAFLyIiWC6yPOFTF7K03olE2Rl3KthsV-1ttqJySzqQ,8106
|
8
|
-
lamindb/_filter.py,sha256=jEA1n1Hi6lEPaD0JXiTSh9K4joGzWU6Yxy0LCLTiOdY,1422
|
9
|
-
lamindb/_finish.py,sha256=WkFvZ0DijW9fRIsjyoxcAC4ehan_B0C8Fqoz9ZON19A,10213
|
10
|
-
lamindb/_from_values.py,sha256=Sq1NdjsqReih8aUR-JHZ09pxHdqL8rY-cZFHo078OJw,13886
|
11
|
-
lamindb/_is_versioned.py,sha256=0PgRCmxEmYDcAjllLSOYZm132B1lW6QgmBBERhRyFt0,1341
|
12
|
-
lamindb/_parents.py,sha256=kb5AHkntpTP5g2lk1aPL0FmIilYZYVZvj6stddFOI40,15075
|
13
|
-
lamindb/_query_manager.py,sha256=TjiwtX5CErEV58WyUFJ76p0riuPDODf8LGXo48aR9Fg,4236
|
14
|
-
lamindb/_query_set.py,sha256=q3C0gdfassidngMteGHuOlhHmt_3VXEGOwblRDInxpA,11626
|
15
|
-
lamindb/_registry.py,sha256=C_QKBAOhFj_pROBLUlieiPYWljd5ThPpTXunAekCQe8,18764
|
16
|
-
lamindb/_run.py,sha256=xj3ER4F_yWvuNw1mr0XU-QuIPi5hBO7Ue0ygBgJQ6mc,1887
|
17
|
-
lamindb/_save.py,sha256=It4XO448D8NG2cReo9Xy0lQBQdkMm_rCx_TGD1qZWWc,11864
|
18
|
-
lamindb/_storage.py,sha256=8wRefV-Klu6VBVtwcwppvTojeXnxRThaBdFniA0AEIw,400
|
19
|
-
lamindb/_transform.py,sha256=E9C7psuOnsNrUQpWRuGgEUM8_pc7YhDn7n4ieHzB4X0,3169
|
20
|
-
lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
|
21
|
-
lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
|
22
|
-
lamindb/_view.py,sha256=NdWWF75rmkCHefqBViUnsHLu3OViJ1z_bEvfcedydsw,2330
|
23
|
-
lamindb/core/__init__.py,sha256=RDtvov8NkPTNT4Lhs1KWTd2s4eQsPBH0s3fQRNJQCZA,1375
|
24
|
-
lamindb/core/_data.py,sha256=u6eYlDOnLuwFMRsyg97qoIushwbHhwoQT-zjEL7p8VU,16241
|
25
|
-
lamindb/core/_feature_manager.py,sha256=OQ14OONCRecqVatNm5kALh5LuhWqKrwoMNPJ_qHtGhw,31372
|
26
|
-
lamindb/core/_label_manager.py,sha256=d9r3tiNDFbpZQmxE1jmgdgnMYPOfTPpAKGKtRRLmVj8,9640
|
27
|
-
lamindb/core/_mapped_collection.py,sha256=_OwFZh5SePDUD70XIK5kngv3we_Z5-YdGHNfpUSatSQ,19469
|
28
|
-
lamindb/core/_run_context.py,sha256=ybGgrzGBy9kOyQNH1bPaMixXZNmZGynAP1eO6Zwtp4A,18393
|
29
|
-
lamindb/core/_settings.py,sha256=HIuCC9xEVo_3o-uogZlN-6oQVs92EWmaqBJWAdGKj5o,6009
|
30
|
-
lamindb/core/_sync_git.py,sha256=5Fb82eG1WYyBlfMRCMlcUZNTVk70UU_SPnfvYEBL-A8,4124
|
31
|
-
lamindb/core/_track_environment.py,sha256=xLZ6kgzxWS6MWZ5LQ_wkbJX99vmYOT8iQ-Fz4OHCgWw,754
|
32
|
-
lamindb/core/exceptions.py,sha256=bbm-PeSy24qFcqh2HpucZWpwGAvk-TL_3FUoAPb3e3E,867
|
33
|
-
lamindb/core/fields.py,sha256=Jgi_XI-iTe6cT7oD8FV_JqEpjN1Q9rZWwL8VLtj4jkA,164
|
34
|
-
lamindb/core/schema.py,sha256=BbG7JGrXVLwEX_6eQb8ouJc9Q-MgazwqHvAM5dtrWtM,1861
|
35
|
-
lamindb/core/types.py,sha256=xeQF2x40p2pR9eIVQrXT74RrS810z2fbjmTRTSQUqPM,230
|
36
|
-
lamindb/core/versioning.py,sha256=zbp3wAWOqU1uDF9wRrpaS9JfmRglUQtVHvFpWWoJHZk,4943
|
37
|
-
lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
|
38
|
-
lamindb/core/datasets/_core.py,sha256=11vsIRREU7TvjwkL2htJWAGoBNCmG2qz8ps4Bd4SNLQ,19873
|
39
|
-
lamindb/core/datasets/_fake.py,sha256=BZF9R_1iF0HDnvtZNqL2FtsjSMuqDIfuFxnw_LJYIh4,953
|
40
|
-
lamindb/core/storage/__init__.py,sha256=5LUFQKRr2BX24d-yWBezhTXBV83sShcOvPj5Y5u6qIg,441
|
41
|
-
lamindb/core/storage/_anndata_sizes.py,sha256=aXO3OB--tF5MChenSsigW6Q-RuE8YJJOUTVukkLrv9A,1029
|
42
|
-
lamindb/core/storage/_backed_access.py,sha256=eManrLsu3pSSQAyAKy47FDBm-iHgjaNfHA-zLy59uDs,24536
|
43
|
-
lamindb/core/storage/_valid_suffixes.py,sha256=J08aglC9oo35pzahj0SQXW9IHib8Asp4dc11co-2uys,212
|
44
|
-
lamindb/core/storage/_zarr.py,sha256=5ceEz6YIvgvUnVVNWhK5Z4W0WfrvyvY82Yna5jSX1_E,3661
|
45
|
-
lamindb/core/storage/objects.py,sha256=OzvBCS-Urz5mr-O95qYt6RGBDDX5HmjfRRKWPPDn1ZE,1797
|
46
|
-
lamindb/core/storage/paths.py,sha256=p5TsZUOfQAN_0kzpr0JO43hRKLc95IO5qSu5V12A8Ok,8218
|
47
|
-
lamindb/core/subsettings/__init__.py,sha256=KFHPzIE7f7Bj4RgMjGQF4CjTdHVG_VNFBrCndo49ixo,198
|
48
|
-
lamindb/core/subsettings/_creation_settings.py,sha256=54mfMH_osC753hpxcl7Dq1rwBD2LHnWveXtQpkLBITE,1194
|
49
|
-
lamindb/core/subsettings/_transform_settings.py,sha256=4YbCuZtJo6zdytl6UQR4GvdDkTtT6SRBqVzofGzNOt8,583
|
50
|
-
lamindb/integrations/__init__.py,sha256=aH2PmO2m4-vwIifMYTB0Fyyr_gZWtVnV71jT0tVWSw0,123
|
51
|
-
lamindb/integrations/_vitessce.py,sha256=Qd39OuNsL0GXU7nMvEWLRRESFQ0mwGf_ePMJE_FDYm8,2639
|
52
|
-
lamindb/setup/__init__.py,sha256=OwZpZzPDv5lPPGXZP7-zK6UdO4FHvvuBh439yZvIp3A,410
|
53
|
-
lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
|
54
|
-
lamindb-0.74.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
55
|
-
lamindb-0.74.1.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
56
|
-
lamindb-0.74.1.dist-info/METADATA,sha256=iQeRxSkzFqxjAVMnofcMWyBaYsXLEp5gIhDeP339GNI,2732
|
57
|
-
lamindb-0.74.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|