lamindb 0.76.0__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 +1 -1
- lamindb/_curate.py +4 -4
- lamindb/_finish.py +9 -52
- lamindb/_query_manager.py +2 -2
- lamindb/_query_set.py +3 -5
- lamindb/_record.py +20 -9
- lamindb/core/__init__.py +9 -3
- lamindb/core/_context.py +513 -0
- lamindb/core/_data.py +8 -6
- lamindb/core/_mapped_collection.py +82 -26
- lamindb/core/_settings.py +4 -8
- lamindb/core/datasets/_core.py +1 -0
- lamindb/core/exceptions.py +22 -5
- lamindb/core/storage/_valid_suffixes.py +2 -0
- lamindb/core/versioning.py +13 -0
- {lamindb-0.76.0.dist-info → lamindb-0.76.1.dist-info}/METADATA +5 -5
- {lamindb-0.76.0.dist-info → lamindb-0.76.1.dist-info}/RECORD +20 -20
- lamindb/core/_run_context.py +0 -514
- {lamindb-0.76.0.dist-info → lamindb-0.76.1.dist-info}/LICENSE +0 -0
- {lamindb-0.76.0.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
@@ -432,6 +432,7 @@ def mudata_papalexi21_subset() -> MuData: # pragma: no cover
|
|
432
432
|
mdata.push_obs(["percent.mito"], mods=["rna"], drop=True)
|
433
433
|
mdata["hto"].obs["technique"] = "cell hashing"
|
434
434
|
mdata["hto"].obs["technique"] = mdata["hto"].obs["technique"].astype("category")
|
435
|
+
mdata.pull_obs(["technique"], mods="hto")
|
435
436
|
|
436
437
|
return mdata
|
437
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",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.76.
|
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.73.
|
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,18 +1,18 @@
|
|
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
4
|
lamindb/_collection.py,sha256=PIKeRZ9zttKSyzcz8UMjKNihPO1Qe-E2zfr-Ao5wtJo,14943
|
5
|
-
lamindb/_curate.py,sha256=
|
5
|
+
lamindb/_curate.py,sha256=Ww_1UlHAIj_fmdxRAuhphqSEi-_qQvjJCIlNbhe8yhA,55486
|
6
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=
|
9
|
+
lamindb/_finish.py,sha256=VtUfnHQOxbxKUMm3IXmxGO4T0XH64w-yeyeIdwvApBw,9433
|
10
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=
|
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
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
|
@@ -20,28 +20,28 @@ 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
27
|
lamindb/core/_label_manager.py,sha256=OO5Tl-ankQZNrF_PQ7_xfkuJ8ytMUvr-9cL9soe1Ceo,9249
|
27
|
-
lamindb/core/_mapped_collection.py,sha256=
|
28
|
-
lamindb/core/
|
29
|
-
lamindb/core/_settings.py,sha256=sDfIfq9H7H8nUE51FJF4EO_Zihlxh44S3GbaliHKJY4,6108
|
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.76.
|
56
|
-
lamindb-0.76.
|
57
|
-
lamindb-0.76.
|
58
|
-
lamindb-0.76.
|
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,,
|