lamindb 0.75.0__py3-none-any.whl → 0.76.0__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 +1 -1
- lamindb/_artifact.py +1 -0
- lamindb/_can_validate.py +52 -22
- lamindb/_collection.py +1 -0
- lamindb/_curate.py +384 -144
- lamindb/_feature.py +1 -1
- lamindb/_from_values.py +36 -20
- lamindb/_query_set.py +2 -25
- lamindb/_record.py +79 -32
- lamindb/_run.py +1 -1
- lamindb/_save.py +5 -5
- lamindb/_transform.py +1 -1
- lamindb/_view.py +13 -11
- lamindb/core/__init__.py +2 -0
- lamindb/core/_data.py +4 -4
- lamindb/core/_feature_manager.py +16 -6
- lamindb/core/_label_manager.py +4 -3
- lamindb/core/datasets/_core.py +29 -23
- lamindb/core/schema.py +5 -5
- lamindb/core/storage/__init__.py +11 -2
- lamindb/core/storage/_valid_suffixes.py +16 -2
- lamindb/core/versioning.py +0 -1
- lamindb/integrations/_vitessce.py +68 -31
- {lamindb-0.75.0.dist-info → lamindb-0.76.0.dist-info}/METADATA +5 -5
- {lamindb-0.75.0.dist-info → lamindb-0.76.0.dist-info}/RECORD +27 -27
- {lamindb-0.75.0.dist-info → lamindb-0.76.0.dist-info}/LICENSE +0 -0
- {lamindb-0.75.0.dist-info → lamindb-0.76.0.dist-info}/WHEEL +0 -0
lamindb/core/datasets/_core.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
from pathlib import Path
|
4
|
+
from typing import TYPE_CHECKING
|
4
5
|
from urllib.request import urlretrieve
|
5
6
|
|
6
7
|
import anndata as ad
|
@@ -11,6 +12,9 @@ from upath import UPath
|
|
11
12
|
|
12
13
|
from lamindb.core._settings import settings
|
13
14
|
|
15
|
+
if TYPE_CHECKING:
|
16
|
+
from mudata import MuData
|
17
|
+
|
14
18
|
|
15
19
|
def file_fcs() -> Path:
|
16
20
|
"""Example FCS artifact."""
|
@@ -116,7 +120,7 @@ def file_mini_csv(in_storage_root=False) -> Path:
|
|
116
120
|
return filepath
|
117
121
|
|
118
122
|
|
119
|
-
def file_tiff_suo22(): # pragma: no cover
|
123
|
+
def file_tiff_suo22() -> Path: # pragma: no cover
|
120
124
|
"""Image file from Suo22.
|
121
125
|
|
122
126
|
Pair with anndata_suo22_Visium10X
|
@@ -126,7 +130,7 @@ def file_tiff_suo22(): # pragma: no cover
|
|
126
130
|
"F121_LP1_4LIV.tiff",
|
127
131
|
)
|
128
132
|
Path("suo22/").mkdir(exist_ok=True)
|
129
|
-
filepath = Path(filepath).rename("suo22/F121_LP1_4LIV.tiff")
|
133
|
+
filepath = Path(filepath).rename("suo22/F121_LP1_4LIV.tiff") # type: ignore
|
130
134
|
return Path(filepath)
|
131
135
|
|
132
136
|
|
@@ -282,17 +286,16 @@ def anndata_human_immune_cells(
|
|
282
286
|
) -> ad.AnnData: # pragma: no cover
|
283
287
|
"""Cross-tissue immune cell analysis reveals tissue-specific features in humans.
|
284
288
|
|
285
|
-
From: https://cellxgene.cziscience.com/collections/62ef75e4-cbea-454e-a0ce-998ec40223d3
|
289
|
+
From: https://cellxgene.cziscience.com/collections/62ef75e4-cbea-454e-a0ce-998ec40223d3
|
286
290
|
Collection: Global
|
287
291
|
|
288
292
|
To reproduce the subsample::
|
289
|
-
|
290
|
-
adata =
|
291
|
-
|
292
|
-
|
293
|
-
del adata.uns["
|
294
|
-
|
295
|
-
adata.write('human_immune.h5ad')
|
293
|
+
>>> adata = sc.read('Global.h5ad')
|
294
|
+
>>> adata.obs = adata.obs[['donor_id', 'tissue', 'cell_type', 'assay', 'tissue_ontology_term_id', 'cell_type_ontology_term_id', 'assay_ontology_term_id']].copy()
|
295
|
+
>>> sc.pp.subsample(adata, fraction=0.005)
|
296
|
+
>>> del adata.uns["development_cache_ontology_term_id_colors"]
|
297
|
+
>>> del adata.uns["sex_ontology_term_id_colors"]
|
298
|
+
>>> adata.write('human_immune.h5ad')
|
296
299
|
"""
|
297
300
|
filepath, _ = urlretrieve("https://lamindb-test.s3.amazonaws.com/human_immune.h5ad")
|
298
301
|
adata = ad.read_h5ad(filepath)
|
@@ -369,29 +372,34 @@ def anndata_suo22_Visium10X(): # pragma: no cover
|
|
369
372
|
return ad.read_h5ad(filepath)
|
370
373
|
|
371
374
|
|
372
|
-
def mudata_papalexi21_subset(): # pragma: no cover
|
375
|
+
def mudata_papalexi21_subset() -> MuData: # pragma: no cover
|
373
376
|
"""A subsetted mudata from papalexi21.
|
374
377
|
|
375
378
|
To reproduce the subsetting:
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
379
|
+
>>> !wget https://figshare.com/ndownloader/files/36509460
|
380
|
+
>>> import mudata as md
|
381
|
+
>>> import scanpy as sc
|
382
|
+
>>> mdata = md.read_h5mu("36509460")
|
383
|
+
>>> mdata = sc.pp.subsample(mdata, n_obs=200, copy=True)[0]
|
384
|
+
>>> mdata[:, -300:].copy().write("papalexi21_subset_200x300_lamindb_demo_2023-07-25.h5mu")
|
382
385
|
"""
|
383
386
|
import mudata as md
|
384
387
|
|
388
|
+
md.set_options(pull_on_update=False)
|
389
|
+
|
385
390
|
filepath, _ = urlretrieve(
|
386
391
|
"https://lamindb-test.s3.amazonaws.com/papalexi21_subset_200x300_lamindb_demo_2023-07-25.h5mu",
|
387
392
|
"papalexi21_subset.h5mu",
|
388
393
|
)
|
389
394
|
|
390
395
|
mdata = md.read_h5mu(filepath)
|
396
|
+
|
397
|
+
mdata.pull_obs()
|
398
|
+
|
399
|
+
# The MuData object is malformed with duplicated information
|
400
|
+
# Drop all columns for the modalities and add them again correspondingly
|
391
401
|
for mod in ["rna", "adt", "hto", "gdo"]:
|
392
|
-
mdata[mod].obs.drop(
|
393
|
-
mdata[mod].obs.columns, axis=1, inplace=True
|
394
|
-
) # Drop all columns
|
402
|
+
mdata[mod].obs.drop(mdata[mod].obs.columns, axis=1, inplace=True)
|
395
403
|
for col in mdata.obs.columns:
|
396
404
|
for mod in ["rna", "adt", "hto", "gdo"]:
|
397
405
|
if col.endswith(f"_{mod.upper()}"):
|
@@ -420,12 +428,10 @@ def mudata_papalexi21_subset(): # pragma: no cover
|
|
420
428
|
"HTO_classification",
|
421
429
|
]:
|
422
430
|
del mdata.obs[col]
|
423
|
-
mdata.update()
|
424
431
|
|
425
|
-
mdata
|
432
|
+
mdata.push_obs(["percent.mito"], mods=["rna"], drop=True)
|
426
433
|
mdata["hto"].obs["technique"] = "cell hashing"
|
427
434
|
mdata["hto"].obs["technique"] = mdata["hto"].obs["technique"].astype("category")
|
428
|
-
mdata.update()
|
429
435
|
|
430
436
|
return mdata
|
431
437
|
|
lamindb/core/schema.py
CHANGED
@@ -4,16 +4,16 @@ from django.db.models import ManyToManyField
|
|
4
4
|
from lnschema_core.models import Feature, FeatureSet, LinkORM, Record
|
5
5
|
|
6
6
|
|
7
|
-
def dict_schema_name_to_model_name(
|
7
|
+
def dict_schema_name_to_model_name(registry: type[Record]) -> dict[str, Record]:
|
8
8
|
d: dict = {
|
9
9
|
i.related_model.__get_name_with_schema__(): i.related_model
|
10
|
-
for i in
|
10
|
+
for i in registry._meta.related_objects
|
11
11
|
if i.related_name is not None
|
12
12
|
}
|
13
13
|
d.update(
|
14
14
|
{
|
15
15
|
i.related_model.__get_name_with_schema__(): i.related_model
|
16
|
-
for i in
|
16
|
+
for i in registry._meta.many_to_many
|
17
17
|
if i.name is not None
|
18
18
|
}
|
19
19
|
)
|
@@ -21,12 +21,12 @@ def dict_schema_name_to_model_name(orm: type[Record]) -> dict[str, Record]:
|
|
21
21
|
|
22
22
|
|
23
23
|
def dict_related_model_to_related_name(
|
24
|
-
|
24
|
+
registry: type[Record], links: bool = False
|
25
25
|
) -> dict[str, str]:
|
26
26
|
def include(model: Record):
|
27
27
|
return not links != issubclass(model, LinkORM)
|
28
28
|
|
29
|
-
related_objects =
|
29
|
+
related_objects = registry._meta.related_objects + registry._meta.many_to_many
|
30
30
|
d: dict = {
|
31
31
|
record.related_model.__get_name_with_schema__(): (
|
32
32
|
record.related_name
|
lamindb/core/storage/__init__.py
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
-
"""Storage
|
1
|
+
"""Storage API.
|
2
|
+
|
3
|
+
Valid suffixes.
|
4
|
+
|
5
|
+
.. autosummary::
|
6
|
+
:toctree: .
|
7
|
+
|
8
|
+
VALID_SUFFIXES
|
9
|
+
|
10
|
+
Array accessors.
|
2
11
|
|
3
12
|
.. autosummary::
|
4
13
|
:toctree: .
|
@@ -11,6 +20,6 @@ from lamindb_setup.core.upath import LocalPathClasses, UPath, infer_filesystem
|
|
11
20
|
|
12
21
|
from ._anndata_sizes import size_adata
|
13
22
|
from ._backed_access import AnnDataAccessor, BackedAccessor
|
14
|
-
from ._valid_suffixes import
|
23
|
+
from ._valid_suffixes import VALID_SUFFIXES
|
15
24
|
from .objects import infer_suffix, write_to_disk
|
16
25
|
from .paths import delete_storage, load_to_memory
|
@@ -1,5 +1,19 @@
|
|
1
|
-
from lamindb_setup.core.upath import VALID_COMPOSITE_SUFFIXES,
|
1
|
+
from lamindb_setup.core.upath import VALID_COMPOSITE_SUFFIXES, VALID_SIMPLE_SUFFIXES
|
2
2
|
|
3
3
|
# add new composite suffixes like so
|
4
|
-
VALID_COMPOSITE_SUFFIXES.update(
|
4
|
+
VALID_COMPOSITE_SUFFIXES.update(
|
5
|
+
{
|
6
|
+
".vitessce.json",
|
7
|
+
".ome.zarr",
|
8
|
+
}
|
9
|
+
)
|
5
10
|
# can do the same for simple valid suffixes
|
11
|
+
|
12
|
+
|
13
|
+
class VALID_SUFFIXES:
|
14
|
+
"""Valid suffixes."""
|
15
|
+
|
16
|
+
SIMPLE: set[str] = VALID_SIMPLE_SUFFIXES
|
17
|
+
"""Simple suffixes."""
|
18
|
+
COMPOSITE: set[str] = VALID_COMPOSITE_SUFFIXES
|
19
|
+
"""Composite suffixes."""
|
lamindb/core/versioning.py
CHANGED
@@ -15,61 +15,98 @@ if TYPE_CHECKING:
|
|
15
15
|
from vitessce import VitessceConfig
|
16
16
|
|
17
17
|
|
18
|
-
#
|
19
|
-
|
18
|
+
# "unit test": https://github.com/laminlabs/lamindb/blob/main/docs/storage/vitessce.ipynb
|
19
|
+
# integration test & context: https://github.com/laminlabs/lamin-spatial/blob/main/docs/vitessce.ipynb
|
20
|
+
def save_vitessce_config(
|
21
|
+
vitessce_config: VitessceConfig, description: str | None = None
|
22
|
+
) -> Artifact:
|
20
23
|
"""Validates and saves a ``VitessceConfig`` object.
|
21
24
|
|
22
|
-
|
25
|
+
Guide: :doc:`docs:vitessce`.
|
23
26
|
|
24
27
|
Args:
|
25
|
-
vitessce_config (``VitessceConfig``): A VitessceConfig object.
|
26
|
-
description: A description for the artifact.
|
28
|
+
vitessce_config (``VitessceConfig``): A `VitessceConfig` object.
|
29
|
+
description: A description for the `VitessceConfig` artifact.
|
27
30
|
|
31
|
+
.. versionchanged:: 0.75.1
|
32
|
+
Now displays the "Vitessce button" on the hub next to the dataset. It additionally keeps displaying it next to the configuration file.
|
28
33
|
.. versionchanged:: 0.70.2
|
29
|
-
|
34
|
+
No longer saves the dataset. It only saves the `VitessceConfig` object.
|
30
35
|
"""
|
36
|
+
# can only import here because vitessce is not a dependency
|
37
|
+
from vitessce import VitessceConfig
|
38
|
+
|
39
|
+
from lamindb.core.storage import VALID_SUFFIXES
|
40
|
+
|
41
|
+
assert isinstance(vitessce_config, VitessceConfig) # noqa: S101
|
31
42
|
vc_dict = vitessce_config.to_dict()
|
43
|
+
valid_composite_zarr_suffixes = [
|
44
|
+
suffix for suffix in VALID_SUFFIXES.COMPOSITE if suffix.endswith(".zarr")
|
45
|
+
]
|
32
46
|
# validate
|
33
|
-
|
34
|
-
|
35
|
-
for
|
36
|
-
|
37
|
-
|
38
|
-
|
47
|
+
dataset_artifacts = []
|
48
|
+
assert vc_dict["datasets"] # noqa: S101
|
49
|
+
for vitessce_dataset in vc_dict["datasets"]:
|
50
|
+
# didn't find good ways to violate the below, hence using plain asserts
|
51
|
+
# without user feedback
|
52
|
+
assert "files" in vitessce_dataset # noqa: S101
|
53
|
+
assert vitessce_dataset["files"] # noqa: S101
|
54
|
+
for file in vitessce_dataset["files"]:
|
39
55
|
if "url" not in file:
|
40
56
|
raise ValueError("Each file must have a 'url' key.")
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
57
|
+
s3_path = file["url"]
|
58
|
+
s3_path_last_element = s3_path.split("/")[-1]
|
59
|
+
# note 1: the following parses the stem uid of the artifact from the S3 path
|
60
|
+
# there might be a better way of doing this in case the vitessce config
|
61
|
+
# gets updated in the future; but given these paths are set in stone
|
62
|
+
# this should be more robust than it looks
|
63
|
+
#
|
64
|
+
# note 2: what's not great is the fact that people might use composite suffixes we don't recognize
|
65
|
+
# I don't know what to do about it other than documenting it clearly
|
66
|
+
# https://github.com/laminlabs/lamindb/blob/main/lamindb/core/storage/_valid_suffixes.py
|
67
|
+
# https://docs.lamin.ai/lamindb.core.storage.valid_suffixes
|
68
|
+
#
|
69
|
+
# now start with attempting to strip the composite suffix candidates
|
70
|
+
for suffix in valid_composite_zarr_suffixes:
|
71
|
+
s3_path_last_element = s3_path_last_element.replace(suffix, "")
|
72
|
+
# in case there was no hit, strip plain ".zarr"
|
73
|
+
artifact_stem_uid = s3_path_last_element.replace(".zarr", "")
|
74
|
+
# if there is still a "." in string, we
|
75
|
+
if "." in artifact_stem_uid:
|
76
|
+
raise ValueError(
|
77
|
+
f"Suffix should be '.zarr' or one of {valid_composite_zarr_suffixes}. Inspect your path {s3_path}"
|
45
78
|
)
|
46
|
-
|
47
|
-
filename.replace(".anndata.zarr", "")
|
48
|
-
.replace(".spatialdata.zarr", "")
|
49
|
-
.replace(".ome.zarr", "")
|
50
|
-
)
|
51
|
-
artifact = Artifact.filter(uid__startswith=filestem).one_or_none()
|
79
|
+
artifact = Artifact.filter(uid__startswith=artifact_stem_uid).one_or_none()
|
52
80
|
if artifact is None:
|
53
|
-
|
54
|
-
f"
|
81
|
+
raise ValueError(
|
82
|
+
f"Could not find dataset with stem uid '{artifact_stem_uid}' in lamindb: {vitessce_dataset}. Did you follow https://docs.lamin.ai/vitessce? It appears the AWS S3 path doesn't encode a lamindb uid."
|
55
83
|
)
|
56
84
|
else:
|
57
|
-
|
85
|
+
dataset_artifacts.append(artifact)
|
58
86
|
# link inputs
|
59
87
|
with logger.mute():
|
60
|
-
transform = Transform(name="save_vitessce_config", type="function", version="
|
88
|
+
transform = Transform(name="save_vitessce_config", type="function", version="2")
|
61
89
|
transform.save()
|
62
90
|
run = Run(transform=transform)
|
63
91
|
run.save()
|
64
|
-
|
92
|
+
if len(dataset_artifacts) > 1:
|
93
|
+
# if we have more datasets, we should create a collection
|
94
|
+
# and attach an action to the collection
|
95
|
+
raise NotImplementedError
|
96
|
+
run.input_artifacts.set(dataset_artifacts)
|
65
97
|
# create a JSON export
|
66
98
|
config_file_local_path = (
|
67
99
|
ln_setup.settings.storage.cache_dir / "config.vitessce.json"
|
68
100
|
)
|
69
101
|
with open(config_file_local_path, "w") as file:
|
70
102
|
json.dump(vc_dict, file)
|
71
|
-
|
72
|
-
|
103
|
+
vitessce_config_artifact = Artifact(
|
104
|
+
config_file_local_path, description=description, run=run
|
105
|
+
).save()
|
106
|
+
# we have one and only one dataset artifact, hence the following line is OK
|
107
|
+
dataset_artifacts[0]._actions.add(vitessce_config_artifact)
|
73
108
|
slug = ln_setup.settings.instance.slug
|
74
|
-
logger.important(
|
75
|
-
|
109
|
+
logger.important(
|
110
|
+
f"go to: https://lamin.ai/{slug}/artifact/{vitessce_config_artifact.uid}"
|
111
|
+
)
|
112
|
+
return vitessce_config_artifact
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.76.0
|
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.
|
13
|
-
Requires-Dist: lamindb_setup==0.76.
|
12
|
+
Requires-Dist: lnschema_core==0.73.0
|
13
|
+
Requires-Dist: lamindb_setup==0.76.4
|
14
14
|
Requires-Dist: lamin_utils==0.13.2
|
15
|
-
Requires-Dist: lamin_cli==0.16.
|
15
|
+
Requires-Dist: lamin_cli==0.16.1
|
16
16
|
Requires-Dist: rapidfuzz
|
17
17
|
Requires-Dist: pyarrow
|
18
18
|
Requires-Dist: typing_extensions!=4.6.0
|
@@ -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.48.1 ; 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"
|
@@ -1,29 +1,29 @@
|
|
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=hMTLgL64GkHYHyLFHSCjR64xnvlZclrHKLlUWGuJ3i4,2249
|
2
|
+
lamindb/_artifact.py,sha256=z3hJL0A0NQFDf0hvWYt-hZG1nX_tXog9QKtXwCIZxqU,42627
|
3
|
+
lamindb/_can_validate.py,sha256=jPZHhtPaZJos5bL8Mk8ZNh34mItwYRwOynhofKUxwfY,17472
|
4
|
+
lamindb/_collection.py,sha256=PIKeRZ9zttKSyzcz8UMjKNihPO1Qe-E2zfr-Ao5wtJo,14943
|
5
|
+
lamindb/_curate.py,sha256=M42XxtcSKSo2Vh3xCio1UogVS0kCG1Dtx5cwEwnWOEM,55508
|
6
|
+
lamindb/_feature.py,sha256=27PBSJoT0yI400WwdWPFz8cmUI4KAQ58jVep-wIDsfM,7373
|
7
7
|
lamindb/_feature_set.py,sha256=DmAy96V_RyV0yiyvWOCHgustXPsCaMwn4TrWwh2qDd8,8104
|
8
8
|
lamindb/_filter.py,sha256=I1tSIF-izmD48YpB8NtKmau59Vpt6C54RPHWc3oinGM,1412
|
9
9
|
lamindb/_finish.py,sha256=3rGY4RxhcKR1BIdgf6GPB03AArhlV5vYtD6wxtTHYxE,10817
|
10
|
-
lamindb/_from_values.py,sha256=
|
10
|
+
lamindb/_from_values.py,sha256=zBOJGt_3mBKjqW5LuzuUysMwGbEcEFtYBJXAcL4Vx_0,13432
|
11
11
|
lamindb/_is_versioned.py,sha256=Z_zVsHTnNaWvD15dEz18VocsSgka53jUzs_wDr78ltI,1344
|
12
12
|
lamindb/_parents.py,sha256=eMavdd6IO6STOVJSlR2TzdRtx6sKYDKsMOtlR3DZlgQ,15599
|
13
13
|
lamindb/_query_manager.py,sha256=6_ZqQr0SKTYsbMtJd5BmaMoyASIVel5v2F1KMgacWlU,4252
|
14
|
-
lamindb/_query_set.py,sha256=
|
15
|
-
lamindb/_record.py,sha256=
|
16
|
-
lamindb/_run.py,sha256=
|
17
|
-
lamindb/_save.py,sha256=
|
14
|
+
lamindb/_query_set.py,sha256=f2OAE9j6l6MGAXgKp5wr8bXB1KRzkye9UCp4utyNHeI,10581
|
15
|
+
lamindb/_record.py,sha256=PwelJVh5A0RMYa6o05wXvZU_gZyV8tPSILUW-M6m7lc,21195
|
16
|
+
lamindb/_run.py,sha256=5M_r1zGDv9HlqbqRKTWCYCOtENovJ-8mQ4kY7XqcLaU,1888
|
17
|
+
lamindb/_save.py,sha256=9lpFpQLgmPOp6JcoM9XetNkbYu2JgY70sGQZVz3Gzmw,11027
|
18
18
|
lamindb/_storage.py,sha256=GBVChv-DHVMNEBJL5l_JT6B4RDhZ6NnwgzmUICphYKk,413
|
19
|
-
lamindb/_transform.py,sha256=
|
19
|
+
lamindb/_transform.py,sha256=Vw0Ct15nCOmL8-UwDs-hH-rgdX8PfcAadgbh_ynBzQE,3397
|
20
20
|
lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
|
21
21
|
lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
|
22
|
-
lamindb/_view.py,sha256=
|
23
|
-
lamindb/core/__init__.py,sha256=
|
24
|
-
lamindb/core/_data.py,sha256=
|
25
|
-
lamindb/core/_feature_manager.py,sha256=
|
26
|
-
lamindb/core/_label_manager.py,sha256=
|
22
|
+
lamindb/_view.py,sha256=4Ln2ItTb3857PAI-70O8eJYqoTJ_NNFc7E_wds6OGns,2412
|
23
|
+
lamindb/core/__init__.py,sha256=uCtTkcUwJ7w40cWdaVBymiyxMuKlkdX-QZMtOr3k0us,1441
|
24
|
+
lamindb/core/_data.py,sha256=AbBVvutI7iFZW5PVEYzx0HIlaLhR9KpnoPyba9OI86k,16253
|
25
|
+
lamindb/core/_feature_manager.py,sha256=gJowe9-tifi0Z5IcChV-jtGYVdl6XgR2m_oswwhU17Y,31980
|
26
|
+
lamindb/core/_label_manager.py,sha256=OO5Tl-ankQZNrF_PQ7_xfkuJ8ytMUvr-9cL9soe1Ceo,9249
|
27
27
|
lamindb/core/_mapped_collection.py,sha256=wN2qEXnKrx0kqblVml_Kx9hYomUAZLYKckGXX4-9dr0,19621
|
28
28
|
lamindb/core/_run_context.py,sha256=bk4hwbGbx1no-JKVpLioIOU5dyO8YCdg-srbQV7UuGE,18371
|
29
29
|
lamindb/core/_settings.py,sha256=sDfIfq9H7H8nUE51FJF4EO_Zihlxh44S3GbaliHKJY4,6108
|
@@ -31,17 +31,17 @@ lamindb/core/_sync_git.py,sha256=qc0yfPyKeG4uuNT_3qsv-mkIMqhLFqfXNeNVO49vV00,454
|
|
31
31
|
lamindb/core/_track_environment.py,sha256=STzEVUzOeUEWdX7WDJUkKH4u08k7eupRX6AXQwoVt14,828
|
32
32
|
lamindb/core/exceptions.py,sha256=rNLDlqDJt6stM_HGeE9qR0oWRNn4Kq0WDdIi85P53VA,1057
|
33
33
|
lamindb/core/fields.py,sha256=47Jmh3efUr5ZscgimR_yckY-I3cNf8ScLutbwKCK3j4,162
|
34
|
-
lamindb/core/schema.py,sha256=
|
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=bDpD_UejR7Jr-DTsIvoVV3SyHNxIdjziJvCyUSskxNc,4898
|
37
37
|
lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
|
38
|
-
lamindb/core/datasets/_core.py,sha256=
|
38
|
+
lamindb/core/datasets/_core.py,sha256=DnAKMw1MzCrEcqYHoRSaqZYRnO1wwpykPS3YThMN9Es,19827
|
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=MjKg2-p8EbOYTVsgufnK93ut7HG7_MzLDAqtzXt0U2Q,501
|
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
43
|
lamindb/core/storage/_backed_access.py,sha256=MsSgiIccHVhqOcur2lZ4mj5LSIL5OL8nX4eqK6mloU0,4732
|
44
|
-
lamindb/core/storage/_valid_suffixes.py,sha256=
|
44
|
+
lamindb/core/storage/_valid_suffixes.py,sha256=9erE4FX1ArRoTkvn5pzUmlKQSYnKeQBymOnOPCv2TD4,465
|
45
45
|
lamindb/core/storage/_zarr.py,sha256=5ceEz6YIvgvUnVVNWhK5Z4W0WfrvyvY82Yna5jSX1_E,3661
|
46
46
|
lamindb/core/storage/objects.py,sha256=OzvBCS-Urz5mr-O95qYt6RGBDDX5HmjfRRKWPPDn1ZE,1797
|
47
47
|
lamindb/core/storage/paths.py,sha256=I0UjQfXfh3MptfLgpA0iSyR-X9pLOvgtXNr4B_Lwk4g,7810
|
@@ -49,10 +49,10 @@ lamindb/core/subsettings/__init__.py,sha256=KFHPzIE7f7Bj4RgMjGQF4CjTdHVG_VNFBrCn
|
|
49
49
|
lamindb/core/subsettings/_creation_settings.py,sha256=54mfMH_osC753hpxcl7Dq1rwBD2LHnWveXtQpkLBITE,1194
|
50
50
|
lamindb/core/subsettings/_transform_settings.py,sha256=4YbCuZtJo6zdytl6UQR4GvdDkTtT6SRBqVzofGzNOt8,583
|
51
51
|
lamindb/integrations/__init__.py,sha256=MoLRD_qqX5WHFUAqHL6zoY_cDkWH0zimaGT_1CyXKnk,124
|
52
|
-
lamindb/integrations/_vitessce.py,sha256=
|
52
|
+
lamindb/integrations/_vitessce.py,sha256=jcpLUNFq1BsDpZDkG5L3nzWNXDLuy3Eep_GfY0XqhhA,5077
|
53
53
|
lamindb/setup/__init__.py,sha256=OwZpZzPDv5lPPGXZP7-zK6UdO4FHvvuBh439yZvIp3A,410
|
54
54
|
lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
|
55
|
-
lamindb-0.
|
56
|
-
lamindb-0.
|
57
|
-
lamindb-0.
|
58
|
-
lamindb-0.
|
55
|
+
lamindb-0.76.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
56
|
+
lamindb-0.76.0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
57
|
+
lamindb-0.76.0.dist-info/METADATA,sha256=5NduEIMIlIq6hW-MADbfFtJKsuxY5JZGQwlBO5WZxUQ,2669
|
58
|
+
lamindb-0.76.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|