lamindb 0.75.1__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/_collection.py +1 -0
- lamindb/_feature.py +1 -1
- lamindb/_from_values.py +28 -12
- lamindb/_query_set.py +2 -25
- lamindb/_record.py +53 -6
- lamindb/_run.py +1 -1
- lamindb/_transform.py +1 -1
- lamindb/core/_label_manager.py +4 -3
- lamindb/core/datasets/_core.py +29 -23
- lamindb/core/versioning.py +0 -1
- {lamindb-0.75.1.dist-info → lamindb-0.76.0.dist-info}/METADATA +5 -5
- {lamindb-0.75.1.dist-info → lamindb-0.76.0.dist-info}/RECORD +16 -16
- {lamindb-0.75.1.dist-info → lamindb-0.76.0.dist-info}/LICENSE +0 -0
- {lamindb-0.75.1.dist-info → lamindb-0.76.0.dist-info}/WHEEL +0 -0
lamindb/__init__.py
CHANGED
lamindb/_artifact.py
CHANGED
@@ -594,6 +594,7 @@ def __init__(artifact: Artifact, *args, **kwargs):
|
|
594
594
|
kwargs["description"] = description
|
595
595
|
kwargs["visibility"] = visibility
|
596
596
|
kwargs["_accessor"] = accessor
|
597
|
+
kwargs["is_new_version_of"] = is_new_version_of
|
597
598
|
# this check needs to come down here because key might be populated from an
|
598
599
|
# existing file path during get_artifact_kwargs_from_data()
|
599
600
|
if (
|
lamindb/_collection.py
CHANGED
lamindb/_feature.py
CHANGED
@@ -42,7 +42,7 @@ def __init__(self, *args, **kwargs):
|
|
42
42
|
return None
|
43
43
|
# now we proceed with the user-facing constructor
|
44
44
|
if len(args) != 0:
|
45
|
-
raise ValueError("Only
|
45
|
+
raise ValueError("Only keyword args allowed")
|
46
46
|
dtype: type | str = kwargs.pop("dtype") if "dtype" in kwargs else None
|
47
47
|
# cast type
|
48
48
|
if dtype is None:
|
lamindb/_from_values.py
CHANGED
@@ -47,15 +47,35 @@ def get_or_create_records(
|
|
47
47
|
|
48
48
|
# new records to be created based on new values
|
49
49
|
if len(nonexist_values) > 0:
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
50
|
+
source_record = None
|
51
|
+
if from_source:
|
52
|
+
if isinstance(source, Record):
|
53
|
+
source_record = source
|
54
|
+
elif (
|
55
|
+
len(records) > 0
|
56
|
+
and hasattr(records[0], "source_id")
|
57
|
+
and records[0].source_id
|
58
|
+
):
|
59
|
+
source_record = records[0].source
|
60
|
+
if not source_record and hasattr(Record, "public"):
|
61
|
+
from bionty._bionty import get_source_record
|
62
|
+
|
63
|
+
source_record = get_source_record(Record.public(organism=organism))
|
64
|
+
if source_record:
|
65
|
+
from bionty.core._add_ontology import check_source_in_db
|
66
|
+
|
67
|
+
check_source_in_db(
|
68
|
+
registry=Record,
|
69
|
+
source=source_record,
|
70
|
+
update=True,
|
71
|
+
)
|
72
|
+
|
73
|
+
from_source = not source_record.in_db
|
74
|
+
elif hasattr(Record, "source_id"):
|
75
|
+
from_source = True
|
76
|
+
else:
|
58
77
|
from_source = False
|
78
|
+
|
59
79
|
if from_source:
|
60
80
|
records_bionty, unmapped_values = create_records_from_source(
|
61
81
|
iterable_idx=nonexist_values,
|
@@ -211,10 +231,6 @@ def create_records_from_source(
|
|
211
231
|
return records, iterable_idx
|
212
232
|
# add source record to the kwargs
|
213
233
|
source_record = get_source_record(public_ontology)
|
214
|
-
if source_record is not None and source_record.in_db:
|
215
|
-
# skips the creation of records from public if the source is already in the db
|
216
|
-
return records, iterable_idx
|
217
|
-
|
218
234
|
kwargs.update({"source": source_record})
|
219
235
|
|
220
236
|
# filter the columns in bionty df based on fields
|
lamindb/_query_set.py
CHANGED
@@ -243,10 +243,10 @@ class QuerySet(models.QuerySet, CanValidate):
|
|
243
243
|
else:
|
244
244
|
raise MultipleResultsFound(self.all())
|
245
245
|
|
246
|
-
def latest_version(self) ->
|
246
|
+
def latest_version(self) -> QuerySet:
|
247
247
|
"""Filter every version family by latest version."""
|
248
248
|
if issubclass(self.model, IsVersioned):
|
249
|
-
return
|
249
|
+
return self.filter(is_latest=True)
|
250
250
|
else:
|
251
251
|
raise ValueError("Record isn't subclass of `lamindb.core.IsVersioned`")
|
252
252
|
|
@@ -288,29 +288,6 @@ class QuerySet(models.QuerySet, CanValidate):
|
|
288
288
|
return _standardize(cls=self, values=values, field=field, **kwargs)
|
289
289
|
|
290
290
|
|
291
|
-
def filter_query_set_by_latest_version(ordered_query_set: QuerySet) -> RecordsList:
|
292
|
-
# evaluating length can be very costly, hence, the try-except block
|
293
|
-
try:
|
294
|
-
first_record = ordered_query_set[0]
|
295
|
-
except IndexError:
|
296
|
-
return ordered_query_set
|
297
|
-
records_in_view = {}
|
298
|
-
records_in_view[first_record.stem_uid] = first_record
|
299
|
-
for record in ordered_query_set:
|
300
|
-
# this overwrites user-provided ordering (relevant records ordered by a
|
301
|
-
# certain field will not show if they are not the latest version)
|
302
|
-
if record.stem_uid not in records_in_view:
|
303
|
-
records_in_view[record.stem_uid] = record
|
304
|
-
else:
|
305
|
-
if record.created_at > records_in_view[record.stem_uid].created_at:
|
306
|
-
# deleting the entry is needed to preserve the integrity of
|
307
|
-
# user-provided ordering
|
308
|
-
del records_in_view[record.stem_uid]
|
309
|
-
records_in_view[record.stem_uid] = record
|
310
|
-
list_records_in_view = RecordsList(records_in_view.values())
|
311
|
-
return list_records_in_view
|
312
|
-
|
313
|
-
|
314
291
|
models.QuerySet.df = QuerySet.df
|
315
292
|
models.QuerySet.list = QuerySet.list
|
316
293
|
models.QuerySet.first = QuerySet.first
|
lamindb/_record.py
CHANGED
@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, List, NamedTuple
|
|
5
5
|
|
6
6
|
import dj_database_url
|
7
7
|
import lamindb_setup as ln_setup
|
8
|
-
from django.db import connections
|
8
|
+
from django.db import connections, transaction
|
9
9
|
from django.db.models import IntegerField, Manager, Q, QuerySet, Value
|
10
10
|
from lamin_utils import logger
|
11
11
|
from lamin_utils._lookup import Lookup
|
@@ -132,7 +132,10 @@ def get(cls, idlike: int | str) -> Record:
|
|
132
132
|
else:
|
133
133
|
qs = filter(cls, uid__startswith=idlike)
|
134
134
|
if issubclass(cls, IsVersioned):
|
135
|
-
|
135
|
+
if len(idlike) <= cls._len_stem_uid:
|
136
|
+
return qs.latest_version().one()
|
137
|
+
else:
|
138
|
+
return qs.one()
|
136
139
|
else:
|
137
140
|
return qs.one()
|
138
141
|
|
@@ -165,9 +168,7 @@ def from_values(
|
|
165
168
|
) -> list[Record]:
|
166
169
|
"""{}""" # noqa: D415
|
167
170
|
from_source = True if cls.__module__.startswith("bionty.") else False
|
168
|
-
|
169
|
-
if isinstance(source, Record) and source.in_db:
|
170
|
-
from_source = False
|
171
|
+
|
171
172
|
field_str = get_name_field(cls, field=field)
|
172
173
|
return get_or_create_records(
|
173
174
|
iterable=values,
|
@@ -528,7 +529,28 @@ def save(self, *args, **kwargs) -> Record:
|
|
528
529
|
if result is not None:
|
529
530
|
init_self_from_db(self, result)
|
530
531
|
else:
|
531
|
-
|
532
|
+
# save versioned record
|
533
|
+
if isinstance(self, IsVersioned) and self._is_new_version_of is not None:
|
534
|
+
if self._is_new_version_of.is_latest:
|
535
|
+
is_new_version_of = self._is_new_version_of
|
536
|
+
else:
|
537
|
+
# need one additional request
|
538
|
+
is_new_version_of = self.__class__.objects.get(
|
539
|
+
is_latest=True, uid__startswith=self.stem_uid
|
540
|
+
)
|
541
|
+
logger.warning(
|
542
|
+
f"didn't pass the latest version in `is_new_version_of`, retrieved it: {is_new_version_of}"
|
543
|
+
)
|
544
|
+
is_new_version_of.is_latest = False
|
545
|
+
with transaction.atomic():
|
546
|
+
is_new_version_of._is_new_version_of = (
|
547
|
+
None # ensure we don't start a recursion
|
548
|
+
)
|
549
|
+
is_new_version_of.save()
|
550
|
+
super(Record, self).save(*args, **kwargs)
|
551
|
+
# save unversioned record
|
552
|
+
else:
|
553
|
+
super(Record, self).save(*args, **kwargs)
|
532
554
|
# perform transfer of many-to-many fields
|
533
555
|
# only supported for Artifact and Collection records
|
534
556
|
if db is not None and db != "default" and using_key is None:
|
@@ -553,6 +575,30 @@ def save(self, *args, **kwargs) -> Record:
|
|
553
575
|
return self
|
554
576
|
|
555
577
|
|
578
|
+
def delete(self) -> None:
|
579
|
+
"""Delete the record."""
|
580
|
+
# note that the logic below does not fire if a record is moved to the trash
|
581
|
+
# the idea is that moving a record to the trash should move its entire version family
|
582
|
+
# to the trash, whereas permanently deleting should default to only deleting a single record
|
583
|
+
# of a version family
|
584
|
+
# we can consider making it easy to permanently delete entire version families as well,
|
585
|
+
# but that's for another time
|
586
|
+
if isinstance(self, IsVersioned) and self.is_latest:
|
587
|
+
new_latest = (
|
588
|
+
self.__class__.filter(is_latest=False, uid__startswith=self.stem_uid)
|
589
|
+
.order_by("-created_at")
|
590
|
+
.first()
|
591
|
+
)
|
592
|
+
if new_latest is not None:
|
593
|
+
new_latest.is_latest = True
|
594
|
+
with transaction.atomic():
|
595
|
+
new_latest.save()
|
596
|
+
super(Record, self).delete()
|
597
|
+
logger.warning(f"new latest version is {new_latest}")
|
598
|
+
return None
|
599
|
+
super(Record, self).delete()
|
600
|
+
|
601
|
+
|
556
602
|
METHOD_NAMES = [
|
557
603
|
"__init__",
|
558
604
|
"filter",
|
@@ -561,6 +607,7 @@ METHOD_NAMES = [
|
|
561
607
|
"search",
|
562
608
|
"lookup",
|
563
609
|
"save",
|
610
|
+
"delete",
|
564
611
|
"from_values",
|
565
612
|
"using",
|
566
613
|
]
|
lamindb/_run.py
CHANGED
@@ -42,7 +42,7 @@ def delete_run_artifacts(run: Run) -> None:
|
|
42
42
|
run.save()
|
43
43
|
if environment is not None:
|
44
44
|
# only delete if there are no other runs attached to this environment
|
45
|
-
if environment.
|
45
|
+
if environment._environment_of.count() == 0:
|
46
46
|
environment.delete(permanent=True)
|
47
47
|
if report is not None:
|
48
48
|
report.delete(permanent=True)
|
lamindb/_transform.py
CHANGED
@@ -22,7 +22,6 @@ def __init__(transform: Transform, *args, **kwargs):
|
|
22
22
|
is_new_version_of: Transform | None = (
|
23
23
|
kwargs.pop("is_new_version_of") if "is_new_version_of" in kwargs else None
|
24
24
|
)
|
25
|
-
(kwargs.pop("initial_version_id") if "initial_version_id" in kwargs else None)
|
26
25
|
version: str | None = kwargs.pop("version") if "version" in kwargs else None
|
27
26
|
type: TransformType | None = kwargs.pop("type") if "type" in kwargs else "pipeline"
|
28
27
|
reference: str | None = kwargs.pop("reference") if "reference" in kwargs else None
|
@@ -55,6 +54,7 @@ def __init__(transform: Transform, *args, **kwargs):
|
|
55
54
|
reference=reference,
|
56
55
|
reference_type=reference_type,
|
57
56
|
_has_consciously_provided_uid=has_consciously_provided_uid,
|
57
|
+
is_new_version_of=is_new_version_of,
|
58
58
|
)
|
59
59
|
|
60
60
|
|
lamindb/core/_label_manager.py
CHANGED
@@ -32,14 +32,15 @@ def get_labels_as_dict(self: HasFeatures, links: bool = False):
|
|
32
32
|
"input_of_runs",
|
33
33
|
"collections",
|
34
34
|
"_source_code_artifact_of",
|
35
|
-
"
|
36
|
-
"
|
35
|
+
"_report_of",
|
36
|
+
"_environment_of",
|
37
37
|
"links_collection",
|
38
38
|
"links_artifact",
|
39
39
|
"links_feature_set",
|
40
40
|
"previous_runs",
|
41
41
|
"_feature_values",
|
42
|
-
"
|
42
|
+
"_action_targets",
|
43
|
+
"_lnschema_core_collection__actions_+", # something seems off with this one
|
43
44
|
"_actions",
|
44
45
|
}
|
45
46
|
labels = {} # type: ignore
|
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/versioning.py
CHANGED
@@ -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.48.
|
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=
|
1
|
+
lamindb/__init__.py,sha256=hMTLgL64GkHYHyLFHSCjR64xnvlZclrHKLlUWGuJ3i4,2249
|
2
|
+
lamindb/_artifact.py,sha256=z3hJL0A0NQFDf0hvWYt-hZG1nX_tXog9QKtXwCIZxqU,42627
|
3
3
|
lamindb/_can_validate.py,sha256=jPZHhtPaZJos5bL8Mk8ZNh34mItwYRwOynhofKUxwfY,17472
|
4
|
-
lamindb/_collection.py,sha256=
|
4
|
+
lamindb/_collection.py,sha256=PIKeRZ9zttKSyzcz8UMjKNihPO1Qe-E2zfr-Ao5wtJo,14943
|
5
5
|
lamindb/_curate.py,sha256=M42XxtcSKSo2Vh3xCio1UogVS0kCG1Dtx5cwEwnWOEM,55508
|
6
|
-
lamindb/_feature.py,sha256=
|
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=
|
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
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
22
|
lamindb/_view.py,sha256=4Ln2ItTb3857PAI-70O8eJYqoTJ_NNFc7E_wds6OGns,2412
|
23
23
|
lamindb/core/__init__.py,sha256=uCtTkcUwJ7w40cWdaVBymiyxMuKlkdX-QZMtOr3k0us,1441
|
24
24
|
lamindb/core/_data.py,sha256=AbBVvutI7iFZW5PVEYzx0HIlaLhR9KpnoPyba9OI86k,16253
|
25
25
|
lamindb/core/_feature_manager.py,sha256=gJowe9-tifi0Z5IcChV-jtGYVdl6XgR2m_oswwhU17Y,31980
|
26
|
-
lamindb/core/_label_manager.py,sha256=
|
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
|
@@ -33,9 +33,9 @@ lamindb/core/exceptions.py,sha256=rNLDlqDJt6stM_HGeE9qR0oWRNn4Kq0WDdIi85P53VA,10
|
|
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=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
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
|
@@ -52,7 +52,7 @@ lamindb/integrations/__init__.py,sha256=MoLRD_qqX5WHFUAqHL6zoY_cDkWH0zimaGT_1CyX
|
|
52
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
|