lamindb 0.75.1__py3-none-any.whl → 0.76.1__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 +6 -8
- lamindb/_artifact.py +2 -1
- lamindb/_collection.py +1 -0
- lamindb/_curate.py +4 -4
- lamindb/_feature.py +1 -1
- lamindb/_finish.py +9 -52
- lamindb/_from_values.py +28 -12
- lamindb/_query_manager.py +2 -2
- lamindb/_query_set.py +5 -30
- lamindb/_record.py +73 -15
- lamindb/_run.py +1 -1
- lamindb/_transform.py +1 -1
- lamindb/core/__init__.py +9 -3
- lamindb/core/_context.py +513 -0
- lamindb/core/_data.py +8 -6
- lamindb/core/_label_manager.py +4 -3
- lamindb/core/_mapped_collection.py +82 -26
- lamindb/core/_settings.py +4 -8
- lamindb/core/datasets/_core.py +30 -23
- lamindb/core/exceptions.py +22 -5
- lamindb/core/storage/_valid_suffixes.py +2 -0
- lamindb/core/versioning.py +13 -1
- {lamindb-0.75.1.dist-info → lamindb-0.76.1.dist-info}/METADATA +5 -5
- {lamindb-0.75.1.dist-info → lamindb-0.76.1.dist-info}/RECORD +26 -26
- lamindb/core/_run_context.py +0 -514
- {lamindb-0.75.1.dist-info → lamindb-0.76.1.dist-info}/LICENSE +0 -0
- {lamindb-0.75.1.dist-info → lamindb-0.76.1.dist-info}/WHEEL +0 -0
@@ -149,7 +149,7 @@ class MappedCollection:
|
|
149
149
|
self.storages = [] # type: ignore
|
150
150
|
self.conns = [] # type: ignore
|
151
151
|
self.parallel = parallel
|
152
|
-
self.
|
152
|
+
self.path_list = path_list
|
153
153
|
self._make_connections(path_list, parallel)
|
154
154
|
|
155
155
|
self.n_obs_list = []
|
@@ -165,11 +165,12 @@ class MappedCollection:
|
|
165
165
|
self.indices = np.hstack([np.arange(n_obs) for n_obs in self.n_obs_list])
|
166
166
|
self.storage_idx = np.repeat(np.arange(len(self.storages)), self.n_obs_list)
|
167
167
|
|
168
|
-
self.join_vars = join
|
169
|
-
self.var_indices = None
|
170
|
-
self.var_joint = None
|
171
|
-
self.n_vars_list = None
|
172
|
-
self.
|
168
|
+
self.join_vars: Literal["inner", "outer"] | None = join
|
169
|
+
self.var_indices: list | None = None
|
170
|
+
self.var_joint: pd.Index | None = None
|
171
|
+
self.n_vars_list: list | None = None
|
172
|
+
self.var_list: list | None = None
|
173
|
+
self.n_vars: int | None = None
|
173
174
|
if self.join_vars is not None:
|
174
175
|
self._make_join_vars()
|
175
176
|
self.n_vars = len(self.var_joint)
|
@@ -225,43 +226,71 @@ class MappedCollection:
|
|
225
226
|
encoder.update({cat: i for i, cat in enumerate(cats)})
|
226
227
|
self.encoders[label] = encoder
|
227
228
|
|
228
|
-
def
|
229
|
-
var_list = []
|
229
|
+
def _read_vars(self):
|
230
|
+
self.var_list = []
|
230
231
|
self.n_vars_list = []
|
231
232
|
for storage in self.storages:
|
232
233
|
with _Connect(storage) as store:
|
233
234
|
vars = _safer_read_index(store["var"])
|
234
|
-
var_list.append(vars)
|
235
|
+
self.var_list.append(vars)
|
235
236
|
self.n_vars_list.append(len(vars))
|
236
237
|
|
237
|
-
|
238
|
+
def _make_join_vars(self):
|
239
|
+
if self.var_list is None:
|
240
|
+
self._read_vars()
|
241
|
+
vars_eq = all(self.var_list[0].equals(vrs) for vrs in self.var_list[1:])
|
238
242
|
if vars_eq:
|
239
243
|
self.join_vars = None
|
240
|
-
self.var_joint = var_list[0]
|
244
|
+
self.var_joint = self.var_list[0]
|
241
245
|
return
|
242
246
|
|
243
247
|
if self.join_vars == "inner":
|
244
|
-
self.var_joint = reduce(pd.Index.intersection, var_list)
|
248
|
+
self.var_joint = reduce(pd.Index.intersection, self.var_list)
|
245
249
|
if len(self.var_joint) == 0:
|
246
250
|
raise ValueError(
|
247
251
|
"The provided AnnData objects don't have shared varibales.\n"
|
248
252
|
"Use join='outer'."
|
249
253
|
)
|
250
|
-
self.var_indices = [
|
254
|
+
self.var_indices = [
|
255
|
+
vrs.get_indexer(self.var_joint) for vrs in self.var_list
|
256
|
+
]
|
251
257
|
elif self.join_vars == "outer":
|
252
|
-
self.var_joint = reduce(pd.Index.union, var_list)
|
253
|
-
self.var_indices = [
|
258
|
+
self.var_joint = reduce(pd.Index.union, self.var_list)
|
259
|
+
self.var_indices = [
|
260
|
+
self.var_joint.get_indexer(vrs) for vrs in self.var_list
|
261
|
+
]
|
262
|
+
|
263
|
+
def check_vars_sorted(self, ascending: bool = True) -> bool:
|
264
|
+
"""Returns `True` if all variables are sorted in all objects."""
|
265
|
+
if self.var_list is None:
|
266
|
+
self._read_vars()
|
267
|
+
if ascending:
|
268
|
+
vrs_sort_status = (vrs.is_monotonic_increasing for vrs in self.var_list)
|
269
|
+
else:
|
270
|
+
vrs_sort_status = (vrs.is_monotonic_decreasing for vrs in self.var_list)
|
271
|
+
return all(vrs_sort_status)
|
272
|
+
|
273
|
+
def check_vars_non_aligned(self, vars: pd.Index | list) -> list[int]:
|
274
|
+
"""Returns indices of objects with non-aligned variables.
|
275
|
+
|
276
|
+
Args:
|
277
|
+
vars: Check alignment against these variables.
|
278
|
+
"""
|
279
|
+
if self.var_list is None:
|
280
|
+
self._read_vars()
|
281
|
+
vars = pd.Index(vars)
|
282
|
+
return [i for i, vrs in enumerate(self.var_list) if not vrs.equals(vars)]
|
254
283
|
|
255
284
|
def __len__(self):
|
256
285
|
return self.n_obs
|
257
286
|
|
258
287
|
@property
|
259
|
-
def shape(self):
|
288
|
+
def shape(self) -> tuple[int, int]:
|
260
289
|
"""Shape of the (virtually aligned) dataset."""
|
261
290
|
return (self.n_obs, self.n_vars)
|
262
291
|
|
263
292
|
@property
|
264
|
-
def original_shapes(self):
|
293
|
+
def original_shapes(self) -> list[tuple[int, int]]:
|
265
294
|
"""Shapes of the underlying AnnData objects."""
|
266
295
|
if self.n_vars_list is None:
|
267
296
|
n_vars_list = [None] * len(self.n_obs_list)
|
@@ -374,8 +403,27 @@ class MappedCollection:
|
|
374
403
|
label = label.decode("utf-8")
|
375
404
|
return label
|
376
405
|
|
377
|
-
def get_label_weights(
|
378
|
-
|
406
|
+
def get_label_weights(
|
407
|
+
self,
|
408
|
+
obs_keys: str | list[str],
|
409
|
+
scaler: float | None = None,
|
410
|
+
return_categories: bool = False,
|
411
|
+
):
|
412
|
+
"""Get all weights for the given label keys.
|
413
|
+
|
414
|
+
This counts the number of labels for each label and returns
|
415
|
+
weights for each obs label accoding to the formula `1 / num of this label in the data`.
|
416
|
+
If `scaler` is provided, then `scaler / (scaler + num of this label in the data)`.
|
417
|
+
|
418
|
+
Args:
|
419
|
+
obs_keys: A key in the ``.obs`` slots or a list of keys. If a list is provided,
|
420
|
+
the labels from the obs keys will be concatenated with ``"__"`` delimeter
|
421
|
+
scaler: Use this number to scale the provided weights.
|
422
|
+
return_categories: If `False`, returns weights for each observation,
|
423
|
+
can be directly passed to a sampler. If `True`, returns a dictionary with
|
424
|
+
unique categories for labels (concatenated if `obs_keys` is a list)
|
425
|
+
and their weights.
|
426
|
+
"""
|
379
427
|
if isinstance(obs_keys, str):
|
380
428
|
obs_keys = [obs_keys]
|
381
429
|
labels_list = []
|
@@ -383,12 +431,20 @@ class MappedCollection:
|
|
383
431
|
labels_to_str = self.get_merged_labels(label_key).astype(str).astype("O")
|
384
432
|
labels_list.append(labels_to_str)
|
385
433
|
if len(labels_list) > 1:
|
386
|
-
labels =
|
434
|
+
labels = ["__".join(labels_obs) for labels_obs in zip(*labels_list)]
|
387
435
|
else:
|
388
436
|
labels = labels_list[0]
|
389
|
-
|
390
|
-
|
391
|
-
|
437
|
+
counter = Counter(labels)
|
438
|
+
if return_categories:
|
439
|
+
return {
|
440
|
+
k: 1.0 / v if scaler is None else scaler / (v + scaler)
|
441
|
+
for k, v in counter.items()
|
442
|
+
}
|
443
|
+
counts = np.array([counter[label] for label in labels])
|
444
|
+
if scaler is None:
|
445
|
+
weights = 1.0 / counts
|
446
|
+
else:
|
447
|
+
weights = scaler / (counts + scaler)
|
392
448
|
return weights
|
393
449
|
|
394
450
|
def get_merged_labels(self, label_key: str):
|
@@ -426,7 +482,7 @@ class MappedCollection:
|
|
426
482
|
codes = self._get_codes(store, label_key)
|
427
483
|
codes = decode(codes) if isinstance(codes[0], bytes) else codes
|
428
484
|
cats_merge.update(codes)
|
429
|
-
return cats_merge
|
485
|
+
return sorted(cats_merge)
|
430
486
|
|
431
487
|
def _get_categories(self, storage: StorageType, label_key: str): # type: ignore
|
432
488
|
"""Get categories."""
|
@@ -483,7 +539,7 @@ class MappedCollection:
|
|
483
539
|
self._closed = True
|
484
540
|
|
485
541
|
@property
|
486
|
-
def closed(self):
|
542
|
+
def closed(self) -> bool:
|
487
543
|
"""Check if connections to array streaming backend are closed.
|
488
544
|
|
489
545
|
Does not matter if `parallel=True`.
|
@@ -508,4 +564,4 @@ class MappedCollection:
|
|
508
564
|
mapped.parallel = False
|
509
565
|
mapped.storages = []
|
510
566
|
mapped.conns = []
|
511
|
-
mapped._make_connections(mapped.
|
567
|
+
mapped._make_connections(mapped.path_list, parallel=False)
|
lamindb/core/_settings.py
CHANGED
@@ -54,7 +54,7 @@ class Settings:
|
|
54
54
|
track_run_inputs: bool = True
|
55
55
|
"""Track files as input upon `.load()`, `.cache()` and `.backed()`.
|
56
56
|
|
57
|
-
Requires a global run context with :func:`~lamindb.track` was created!
|
57
|
+
Requires a global run context with :func:`~lamindb.core.Context.track` was created!
|
58
58
|
|
59
59
|
FAQ: :doc:`/faq/track-run-inputs`
|
60
60
|
"""
|
@@ -83,14 +83,10 @@ class Settings:
|
|
83
83
|
def transform(self) -> TransformSettings:
|
84
84
|
"""Transform settings.
|
85
85
|
|
86
|
-
|
87
|
-
|
88
|
-
ln.settings.transform.stem_uid = "FPnfDtJz8qbE" # defines version family
|
89
|
-
ln.settings.transform.version = "1" # defines version
|
90
|
-
ln.settings.transform.name = "My good script" # semantic name
|
91
|
-
|
92
|
-
The first two are typically auto-generated by :func:`~lamindb.track`.
|
86
|
+
Is deprecated since version 0.76.1.
|
93
87
|
"""
|
88
|
+
# enable warning soon
|
89
|
+
# logger.warning("Transform settings are deprecated, please instead set `ln.context.uid`")
|
94
90
|
return transform_settings
|
95
91
|
|
96
92
|
@property
|
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,11 @@ 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.
|
435
|
+
mdata.pull_obs(["technique"], mods="hto")
|
429
436
|
|
430
437
|
return mdata
|
431
438
|
|
lamindb/core/exceptions.py
CHANGED
@@ -5,24 +5,41 @@ The registry base class:
|
|
5
5
|
.. autosummary::
|
6
6
|
:toctree: .
|
7
7
|
|
8
|
+
DoesNotExist
|
8
9
|
ValidationError
|
9
10
|
NotebookNotSavedError
|
10
11
|
NoTitleError
|
11
|
-
|
12
|
-
|
12
|
+
MissingContext
|
13
|
+
UpdateContext
|
13
14
|
IntegrityError
|
14
15
|
|
15
16
|
"""
|
16
17
|
|
17
18
|
|
19
|
+
class TrackNotCalled(SystemExit):
|
20
|
+
pass
|
21
|
+
|
22
|
+
|
23
|
+
class NotebookNotSaved(SystemExit):
|
24
|
+
pass
|
25
|
+
|
26
|
+
|
18
27
|
class ValidationError(SystemExit):
|
19
28
|
"""Validation error: not mapped in registry."""
|
20
29
|
|
21
30
|
pass
|
22
31
|
|
23
32
|
|
33
|
+
# inspired by Django's DoesNotExist
|
34
|
+
# equivalent to SQLAlchemy's NoResultFound
|
35
|
+
class DoesNotExist(Exception):
|
36
|
+
"""No record found."""
|
37
|
+
|
38
|
+
pass
|
39
|
+
|
40
|
+
|
24
41
|
# -------------------------------------------------------------------------------------
|
25
|
-
# ln.track() AKA
|
42
|
+
# ln.context.track() AKA context
|
26
43
|
# -------------------------------------------------------------------------------------
|
27
44
|
|
28
45
|
|
@@ -48,13 +65,13 @@ class NoTitleError(Exception):
|
|
48
65
|
pass
|
49
66
|
|
50
67
|
|
51
|
-
class
|
68
|
+
class MissingContext(SystemExit):
|
52
69
|
"""User didn't define transform settings."""
|
53
70
|
|
54
71
|
pass
|
55
72
|
|
56
73
|
|
57
|
-
class
|
74
|
+
class UpdateContext(SystemExit):
|
58
75
|
"""Transform settings require update."""
|
59
76
|
|
60
77
|
pass
|
lamindb/core/versioning.py
CHANGED
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
3
3
|
from typing import TYPE_CHECKING, Literal
|
4
4
|
|
5
5
|
from lamin_utils import logger
|
6
|
+
from lamin_utils._base62 import CHARSET_DEFAULT as BASE62_CHARS
|
6
7
|
from lamindb_setup.core.upath import LocalPathClasses, UPath
|
7
8
|
from lnschema_core import ids
|
8
9
|
|
@@ -10,6 +11,18 @@ if TYPE_CHECKING:
|
|
10
11
|
from lnschema_core.models import IsVersioned
|
11
12
|
|
12
13
|
|
14
|
+
def increment_base62(s: str) -> str:
|
15
|
+
# we don't need to throw an error for zzzz because uids are enforced to be unique
|
16
|
+
# on the db level and have an enforced maximum length
|
17
|
+
value = sum(BASE62_CHARS.index(c) * (62**i) for i, c in enumerate(reversed(s)))
|
18
|
+
value += 1
|
19
|
+
result = ""
|
20
|
+
while value:
|
21
|
+
value, remainder = divmod(value, 62)
|
22
|
+
result = BASE62_CHARS[remainder] + result
|
23
|
+
return result.zfill(len(s))
|
24
|
+
|
25
|
+
|
13
26
|
def bump_version(
|
14
27
|
version: str,
|
15
28
|
bump_type: str = "minor",
|
@@ -72,7 +85,6 @@ def set_version(version: str | None = None, previous_version: str | None = None)
|
|
72
85
|
return version
|
73
86
|
|
74
87
|
|
75
|
-
# uses `initial_version_id` to extract a stem_id that's part of id
|
76
88
|
def init_uid(
|
77
89
|
*,
|
78
90
|
version: str | None = None,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.76.1
|
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.1
|
13
|
+
Requires-Dist: lamindb_setup==0.76.5
|
14
14
|
Requires-Dist: lamin_utils==0.13.2
|
15
|
-
Requires-Dist: lamin_cli==0.16.
|
15
|
+
Requires-Dist: lamin_cli==0.16.2
|
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.2 ; 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,47 +1,47 @@
|
|
1
|
-
lamindb/__init__.py,sha256=
|
2
|
-
lamindb/_artifact.py,sha256=
|
1
|
+
lamindb/__init__.py,sha256=d7viqFNu34u9fGs2xJq5AAD-4-M7VS2reIRP-uEYn54,2270
|
2
|
+
lamindb/_artifact.py,sha256=wmcofYb1-23YblpjwFo8X-dLNgB7EfwMtzS7p-CKvhs,42630
|
3
3
|
lamindb/_can_validate.py,sha256=jPZHhtPaZJos5bL8Mk8ZNh34mItwYRwOynhofKUxwfY,17472
|
4
|
-
lamindb/_collection.py,sha256=
|
5
|
-
lamindb/_curate.py,sha256=
|
6
|
-
lamindb/_feature.py,sha256=
|
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
7
|
lamindb/_feature_set.py,sha256=DmAy96V_RyV0yiyvWOCHgustXPsCaMwn4TrWwh2qDd8,8104
|
8
8
|
lamindb/_filter.py,sha256=I1tSIF-izmD48YpB8NtKmau59Vpt6C54RPHWc3oinGM,1412
|
9
|
-
lamindb/_finish.py,sha256=
|
10
|
-
lamindb/_from_values.py,sha256=
|
9
|
+
lamindb/_finish.py,sha256=VtUfnHQOxbxKUMm3IXmxGO4T0XH64w-yeyeIdwvApBw,9433
|
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
|
-
lamindb/_query_manager.py,sha256=
|
14
|
-
lamindb/_query_set.py,sha256=
|
15
|
-
lamindb/_record.py,sha256=
|
16
|
-
lamindb/_run.py,sha256=
|
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
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
|
-
lamindb/core/__init__.py,sha256=
|
24
|
-
lamindb/core/
|
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
|
25
26
|
lamindb/core/_feature_manager.py,sha256=gJowe9-tifi0Z5IcChV-jtGYVdl6XgR2m_oswwhU17Y,31980
|
26
|
-
lamindb/core/_label_manager.py,sha256=
|
27
|
-
lamindb/core/_mapped_collection.py,sha256=
|
28
|
-
lamindb/core/
|
29
|
-
lamindb/core/_settings.py,sha256=sDfIfq9H7H8nUE51FJF4EO_Zihlxh44S3GbaliHKJY4,6108
|
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
30
|
lamindb/core/_sync_git.py,sha256=qc0yfPyKeG4uuNT_3qsv-mkIMqhLFqfXNeNVO49vV00,4547
|
31
31
|
lamindb/core/_track_environment.py,sha256=STzEVUzOeUEWdX7WDJUkKH4u08k7eupRX6AXQwoVt14,828
|
32
|
-
lamindb/core/exceptions.py,sha256=
|
32
|
+
lamindb/core/exceptions.py,sha256=qNFYN5Jc7Y6kw4re-jsW0AEIprsV2HB1wTcJiO-u-ks,1278
|
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=fVzxFcJ8xPPSRuLZuUz_lfAKirI550NQTyKIowQUhhs,5404
|
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=CgVF_pXuBXLElzubDMsl1DbpYOnXCY0HleITVvBKih4,19873
|
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
|
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=vUSeQ4s01rdhD_vSd6wKmFBsgMJAKkBMnL_T9Y1znMg,501
|
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
|
@@ -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.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,,
|