lamindb 1.10.1__py3-none-any.whl → 1.11.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 +89 -49
- lamindb/_finish.py +17 -15
- lamindb/_tracked.py +2 -4
- lamindb/_view.py +1 -1
- lamindb/base/__init__.py +2 -1
- lamindb/base/dtypes.py +76 -0
- lamindb/core/_settings.py +45 -2
- lamindb/core/storage/_anndata_accessor.py +118 -26
- lamindb/core/storage/_backed_access.py +10 -7
- lamindb/core/storage/_spatialdata_accessor.py +15 -4
- lamindb/core/storage/_zarr.py +3 -0
- lamindb/curators/_legacy.py +16 -3
- lamindb/curators/core.py +449 -193
- lamindb/errors.py +6 -0
- lamindb/examples/cellxgene/__init__.py +8 -3
- lamindb/examples/cellxgene/_cellxgene.py +127 -13
- lamindb/examples/cellxgene/{cxg_schema_versions.csv → cellxgene_schema_versions.csv} +11 -0
- lamindb/examples/croissant/__init__.py +32 -6
- lamindb/examples/datasets/__init__.py +2 -2
- lamindb/examples/datasets/_core.py +9 -2
- lamindb/examples/datasets/_small.py +66 -22
- lamindb/examples/fixtures/sheets.py +8 -2
- lamindb/integrations/_croissant.py +34 -11
- lamindb/migrations/0118_alter_recordproject_value_projectrecord.py +99 -0
- lamindb/migrations/0119_rename_records_project_linked_in_records.py +26 -0
- lamindb/migrations/{0117_squashed.py → 0119_squashed.py} +92 -5
- lamindb/migrations/0120_add_record_fk_constraint.py +64 -0
- lamindb/migrations/0121_recorduser.py +60 -0
- lamindb/models/__init__.py +4 -1
- lamindb/models/_describe.py +2 -2
- lamindb/models/_feature_manager.py +131 -71
- lamindb/models/_from_values.py +2 -2
- lamindb/models/_is_versioned.py +4 -4
- lamindb/models/_label_manager.py +4 -4
- lamindb/models/artifact.py +357 -192
- lamindb/models/artifact_set.py +45 -1
- lamindb/models/can_curate.py +1 -2
- lamindb/models/collection.py +3 -34
- lamindb/models/feature.py +111 -7
- lamindb/models/has_parents.py +11 -11
- lamindb/models/project.py +42 -2
- lamindb/models/query_manager.py +16 -7
- lamindb/models/query_set.py +191 -78
- lamindb/models/record.py +30 -5
- lamindb/models/run.py +10 -33
- lamindb/models/save.py +6 -8
- lamindb/models/schema.py +54 -26
- lamindb/models/sqlrecord.py +152 -40
- lamindb/models/storage.py +59 -14
- lamindb/models/transform.py +17 -17
- lamindb/models/ulabel.py +6 -1
- {lamindb-1.10.1.dist-info → lamindb-1.11.0.dist-info}/METADATA +11 -16
- {lamindb-1.10.1.dist-info → lamindb-1.11.0.dist-info}/RECORD +55 -50
- {lamindb-1.10.1.dist-info → lamindb-1.11.0.dist-info}/LICENSE +0 -0
- {lamindb-1.10.1.dist-info → lamindb-1.11.0.dist-info}/WHEEL +0 -0
lamindb/models/storage.py
CHANGED
@@ -4,6 +4,7 @@ from typing import (
|
|
4
4
|
TYPE_CHECKING,
|
5
5
|
overload,
|
6
6
|
)
|
7
|
+
from uuid import UUID
|
7
8
|
|
8
9
|
from django.db import models
|
9
10
|
from lamin_utils import logger
|
@@ -11,6 +12,8 @@ from lamindb_setup import settings as setup_settings
|
|
11
12
|
from lamindb_setup.core._hub_core import (
|
12
13
|
delete_storage_record,
|
13
14
|
get_storage_records_for_instance,
|
15
|
+
select_space,
|
16
|
+
update_storage_with_space,
|
14
17
|
)
|
15
18
|
from lamindb_setup.core._settings_storage import (
|
16
19
|
StorageSettings,
|
@@ -25,7 +28,7 @@ from lamindb.base.fields import (
|
|
25
28
|
|
26
29
|
from ..base.ids import base62_12
|
27
30
|
from .run import TracksRun, TracksUpdates
|
28
|
-
from .sqlrecord import SQLRecord
|
31
|
+
from .sqlrecord import Space, SQLRecord
|
29
32
|
|
30
33
|
if TYPE_CHECKING:
|
31
34
|
from pathlib import Path
|
@@ -61,22 +64,31 @@ class Storage(SQLRecord, TracksRun, TracksUpdates):
|
|
61
64
|
|
62
65
|
.. dropdown:: Managing access to storage locations across instances
|
63
66
|
|
64
|
-
You can manage access through
|
65
|
-
|
67
|
+
You can manage access through LaminHub's fine-grained access management or
|
68
|
+
through AWS policies that you attach to your S3 bucket.
|
66
69
|
|
67
|
-
|
68
|
-
By clicking the green button that says "Connect S3 bucket",
|
69
|
-
|
70
|
+
To enable access management via LaminHub, head over to `https://lamin.ai/{account}/infrastructure`.
|
71
|
+
By clicking the green button that says "Connect S3 bucket", LaminDB will start connecting through federated S3 tokens
|
72
|
+
so that your collaborators access data based on their permissions in LaminHub.
|
70
73
|
:doc:`docs:access` has more details.
|
71
74
|
|
72
75
|
.. image:: https://lamin-site-assets.s3.amazonaws.com/.lamindb/ze8hkgVxVptSSZEU0000.png
|
73
76
|
:width: 800px
|
74
77
|
|
78
|
+
By default, access permissions to a storage location are governed by the access permissions of its managing instance. If you
|
79
|
+
want to further restrict access to a storage location, you can move it into a space::
|
80
|
+
|
81
|
+
space = ln.Space.get(name="my-space")
|
82
|
+
storage_loc = ln.Storage.get(root="s3://my-storace-location")
|
83
|
+
storage_loc.space = space
|
84
|
+
storage_loc.save()
|
85
|
+
|
75
86
|
If you don't want to store data in the cloud, you can use local storage locations: :doc:`faq/keep-artifacts-local`.
|
76
87
|
|
77
88
|
Args:
|
78
89
|
root: `str` The root path of the storage location, e.g., `"./mydir"`, `"s3://my-bucket"`, `"s3://my-bucket/myfolder"`, `"gs://my-bucket/myfolder"`, `"/nfs/shared/datasets/genomics"`, `"/weka/shared/models/"`, ...
|
79
90
|
description: `str | None = None` An optional description.
|
91
|
+
space: `Space | None = None` A space to restrict access permissions to the storage location.
|
80
92
|
host: `str | None = None` For local storage locations, pass a globally unique host identifier, e.g. `"my-institute-cluster-1"`, `"my-server-abcd"`, ...
|
81
93
|
|
82
94
|
See Also:
|
@@ -107,18 +119,17 @@ class Storage(SQLRecord, TracksRun, TracksUpdates):
|
|
107
119
|
|
108
120
|
ln.Storage(root="/dir/our-shared-dir", host="our-server-123").save()
|
109
121
|
|
110
|
-
|
122
|
+
Globally switch to another storage location::
|
111
123
|
|
112
124
|
ln.settings.storage = "/dir/our-shared-dir" # or "s3://our-bucket/our-folder", "gs://our-bucket/our-folder", ...
|
113
125
|
|
114
|
-
|
126
|
+
Or if you're operating in `keep-artifacts-local` mode (:doc:`faq/keep-artifacts-local`)::
|
115
127
|
|
116
|
-
ln.
|
117
|
-
ln.settings.local_storage = "/dir/our-other-shared-dir" # switch
|
128
|
+
ln.settings.local_storage = "/dir/our-other-shared-dir"
|
118
129
|
|
119
130
|
View all storage locations used in your LaminDB instance::
|
120
131
|
|
121
|
-
ln.Storage.
|
132
|
+
ln.Storage.to_dataframe()
|
122
133
|
|
123
134
|
Notes:
|
124
135
|
|
@@ -146,6 +157,7 @@ class Storage(SQLRecord, TracksRun, TracksUpdates):
|
|
146
157
|
|
147
158
|
class Meta(SQLRecord.Meta, TracksRun.Meta, TracksUpdates.Meta):
|
148
159
|
abstract = False
|
160
|
+
app_label = "lamindb"
|
149
161
|
|
150
162
|
_name_field: str = "root"
|
151
163
|
|
@@ -174,6 +186,7 @@ class Storage(SQLRecord, TracksRun, TracksUpdates):
|
|
174
186
|
root: str,
|
175
187
|
*,
|
176
188
|
description: str | None = None,
|
189
|
+
space: Space | None = None,
|
177
190
|
host: str | None = None,
|
178
191
|
): ...
|
179
192
|
|
@@ -190,6 +203,8 @@ class Storage(SQLRecord, TracksRun, TracksUpdates):
|
|
190
203
|
):
|
191
204
|
if len(args) == len(self._meta.concrete_fields):
|
192
205
|
super().__init__(*args)
|
206
|
+
self._old_space = self.space
|
207
|
+
self._old_space_id = self.space_id
|
193
208
|
return None
|
194
209
|
if args:
|
195
210
|
assert len(args) == 1, ( # noqa: S101
|
@@ -213,17 +228,30 @@ class Storage(SQLRecord, TracksRun, TracksUpdates):
|
|
213
228
|
).one_or_none()
|
214
229
|
else:
|
215
230
|
storage_record = Storage.filter(root=kwargs["root"]).one_or_none()
|
231
|
+
space = kwargs.get("space", None)
|
216
232
|
if storage_record is not None:
|
217
233
|
from .sqlrecord import init_self_from_db
|
218
234
|
|
219
235
|
init_self_from_db(self, storage_record)
|
236
|
+
self._old_space = self.space
|
237
|
+
self._old_space_id = self.space_id
|
220
238
|
return None
|
221
239
|
|
222
240
|
skip_preparation = kwargs.pop("_skip_preparation", False)
|
223
241
|
if skip_preparation:
|
242
|
+
assert space is None, "`space` must not be set if _skip_preparation is True" # noqa: S101
|
224
243
|
super().__init__(*args, **kwargs)
|
225
244
|
return None
|
226
245
|
|
246
|
+
space_uuid = None
|
247
|
+
if space is not None:
|
248
|
+
hub_space_record = select_space(space.uid)
|
249
|
+
if hub_space_record is None:
|
250
|
+
raise ValueError(
|
251
|
+
"Please first create a space on the hub: https://docs.lamin.ai/access"
|
252
|
+
)
|
253
|
+
space_uuid = UUID(hub_space_record["id"])
|
254
|
+
|
227
255
|
# instance_id won't take effect if
|
228
256
|
# - there is no write access
|
229
257
|
# - the storage location is already managed by another instance
|
@@ -232,8 +260,8 @@ class Storage(SQLRecord, TracksRun, TracksUpdates):
|
|
232
260
|
instance_id=setup_settings.instance._id,
|
233
261
|
instance_slug=setup_settings.instance.slug,
|
234
262
|
register_hub=setup_settings.instance.is_on_hub,
|
235
|
-
prevent_register_hub=not setup_settings.instance.is_on_hub,
|
236
263
|
region=kwargs.get("region", None), # host was renamed to region already
|
264
|
+
space_uuid=space_uuid,
|
237
265
|
)
|
238
266
|
# ssettings performed validation and normalization of the root path
|
239
267
|
kwargs["root"] = ssettings.root_as_str # noqa: S101
|
@@ -274,6 +302,8 @@ class Storage(SQLRecord, TracksRun, TracksUpdates):
|
|
274
302
|
f"{managed_message} storage location at {kwargs['root']}{is_managed_by_instance}{hub_message}"
|
275
303
|
)
|
276
304
|
super().__init__(**kwargs)
|
305
|
+
self._old_space = self.space
|
306
|
+
self._old_space_id = self.space_id
|
277
307
|
|
278
308
|
@property
|
279
309
|
def host(self) -> str | None:
|
@@ -296,10 +326,25 @@ class Storage(SQLRecord, TracksRun, TracksUpdates):
|
|
296
326
|
access_token = self._access_token if hasattr(self, "_access_token") else None
|
297
327
|
return create_path(self.root, access_token=access_token)
|
298
328
|
|
299
|
-
def
|
329
|
+
def save(self, *args, **kwargs):
|
330
|
+
"""Save the storage record."""
|
331
|
+
if hasattr(self, "_old_space") and hasattr(self, "_old_space_id"):
|
332
|
+
if (
|
333
|
+
self._old_space != self.space or self._old_space_id != self.space_id
|
334
|
+
): # space_id is automatically handled by field tracker according to Claude
|
335
|
+
update_storage_with_space(
|
336
|
+
storage_lnid=self.uid, space_lnid=self.space.uid
|
337
|
+
)
|
338
|
+
super().save(*args, **kwargs)
|
339
|
+
return self
|
340
|
+
|
341
|
+
def delete(self) -> None: # type: ignore
|
342
|
+
# type ignore is there because we don't use a trash here unlike everywhere else
|
300
343
|
"""Delete the storage location.
|
301
344
|
|
302
345
|
This errors in case the storage location is not empty.
|
346
|
+
|
347
|
+
Unlike other `SQLRecord`-based registries, this does *not* move the storage record into the trash.
|
303
348
|
"""
|
304
349
|
from .. import settings
|
305
350
|
|
@@ -324,4 +369,4 @@ class Storage(SQLRecord, TracksRun, TracksUpdates):
|
|
324
369
|
ssettings._mark_storage_root.unlink(
|
325
370
|
missing_ok=True # this is totally weird, but needed on Py3.11
|
326
371
|
)
|
327
|
-
super().delete()
|
372
|
+
super(SQLRecord, self).delete()
|
lamindb/models/transform.py
CHANGED
@@ -30,6 +30,22 @@ if TYPE_CHECKING:
|
|
30
30
|
from .ulabel import ULabel
|
31
31
|
|
32
32
|
|
33
|
+
def delete_transform_relations(transform: Transform):
|
34
|
+
from .project import TransformProject
|
35
|
+
|
36
|
+
# query all runs and delete their associated report and env artifacts
|
37
|
+
runs = Run.filter(transform=transform)
|
38
|
+
for run in runs:
|
39
|
+
delete_run_artifacts(run)
|
40
|
+
# CASCADE doesn't do the job below because run_id might be protected through run__transform=self
|
41
|
+
# hence, proactively delete the label links
|
42
|
+
qs = TransformProject.filter(transform=transform)
|
43
|
+
if qs.exists():
|
44
|
+
qs.delete()
|
45
|
+
# at this point, all artifacts have been taken care of
|
46
|
+
# and one can now leverage CASCADE delete
|
47
|
+
|
48
|
+
|
33
49
|
# does not inherit from TracksRun because the Transform
|
34
50
|
# is needed to define a run
|
35
51
|
class Transform(SQLRecord, IsVersioned):
|
@@ -95,6 +111,7 @@ class Transform(SQLRecord, IsVersioned):
|
|
95
111
|
|
96
112
|
class Meta(SQLRecord.Meta, IsVersioned.Meta):
|
97
113
|
abstract = False
|
114
|
+
app_label = "lamindb"
|
98
115
|
unique_together = ("key", "hash")
|
99
116
|
|
100
117
|
_len_stem_uid: int = 12
|
@@ -315,23 +332,6 @@ class Transform(SQLRecord, IsVersioned):
|
|
315
332
|
"""The latest run of this transform."""
|
316
333
|
return self.runs.order_by("-started_at").first()
|
317
334
|
|
318
|
-
def delete(self) -> None:
|
319
|
-
"""Delete."""
|
320
|
-
from .project import TransformProject
|
321
|
-
|
322
|
-
# query all runs and delete their artifacts
|
323
|
-
runs = Run.filter(transform=self)
|
324
|
-
for run in runs:
|
325
|
-
delete_run_artifacts(run)
|
326
|
-
# CASCADE doesn't do the job below because run_id might be protected through run__transform=self
|
327
|
-
# hence, proactively delete the labels
|
328
|
-
qs = TransformProject.filter(transform=self)
|
329
|
-
if qs.exists():
|
330
|
-
qs.delete()
|
331
|
-
# at this point, all artifacts have been taken care of
|
332
|
-
# we can now leverage CASCADE delete
|
333
|
-
super().delete()
|
334
|
-
|
335
335
|
def view_lineage(self, with_successors: bool = False, distance: int = 5):
|
336
336
|
"""View lineage of transforms.
|
337
337
|
|
lamindb/models/ulabel.py
CHANGED
@@ -83,11 +83,12 @@ class ULabel(SQLRecord, HasParents, CanCurate, TracksRun, TracksUpdates):
|
|
83
83
|
|
84
84
|
Query an artifact by ulabel:
|
85
85
|
|
86
|
-
>>> ln.Artifact.filter(ulabels=train_split).
|
86
|
+
>>> ln.Artifact.filter(ulabels=train_split).to_dataframe()
|
87
87
|
"""
|
88
88
|
|
89
89
|
class Meta(SQLRecord.Meta, TracksRun.Meta, TracksUpdates.Meta):
|
90
90
|
abstract = False
|
91
|
+
app_label = "lamindb"
|
91
92
|
|
92
93
|
_name_field: str = "name"
|
93
94
|
|
@@ -221,6 +222,7 @@ class ArtifactULabel(BaseSQLRecord, IsLink, TracksRun):
|
|
221
222
|
class Meta:
|
222
223
|
# can have the same label linked to the same artifact if the feature is
|
223
224
|
# different
|
225
|
+
app_label = "lamindb"
|
224
226
|
unique_together = ("artifact", "ulabel", "feature")
|
225
227
|
|
226
228
|
|
@@ -230,6 +232,7 @@ class TransformULabel(BaseSQLRecord, IsLink, TracksRun):
|
|
230
232
|
ulabel: ULabel = ForeignKey(ULabel, PROTECT, related_name="links_transform")
|
231
233
|
|
232
234
|
class Meta:
|
235
|
+
app_label = "lamindb"
|
233
236
|
unique_together = ("transform", "ulabel")
|
234
237
|
|
235
238
|
|
@@ -247,6 +250,7 @@ class RunULabel(BaseSQLRecord, IsLink):
|
|
247
250
|
"""Creator of record."""
|
248
251
|
|
249
252
|
class Meta:
|
253
|
+
app_label = "lamindb"
|
250
254
|
unique_together = ("run", "ulabel")
|
251
255
|
|
252
256
|
|
@@ -263,4 +267,5 @@ class CollectionULabel(BaseSQLRecord, IsLink, TracksRun):
|
|
263
267
|
feature_ref_is_name: bool | None = BooleanField(null=True)
|
264
268
|
|
265
269
|
class Meta:
|
270
|
+
app_label = "lamindb"
|
266
271
|
unique_together = ("collection", "ulabel")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: lamindb
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.11.0
|
4
4
|
Summary: A data framework for biology.
|
5
5
|
Author-email: Lamin Labs <open-source@lamin.ai>
|
6
6
|
Requires-Python: >=3.10,<3.14
|
@@ -10,8 +10,14 @@ Classifier: Programming Language :: Python :: 3.11
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.12
|
11
11
|
Classifier: Programming Language :: Python :: 3.13
|
12
12
|
Requires-Dist: lamin_utils==0.15.0
|
13
|
-
Requires-Dist: lamin_cli==1.
|
14
|
-
Requires-Dist: lamindb_setup[aws]==1.
|
13
|
+
Requires-Dist: lamin_cli==1.7.1
|
14
|
+
Requires-Dist: lamindb_setup[aws]==1.10.1
|
15
|
+
Requires-Dist: bionty>=1.7a1
|
16
|
+
Requires-Dist: wetlab>=1.5a1
|
17
|
+
Requires-Dist: nbproject==0.11.1
|
18
|
+
Requires-Dist: jupytext
|
19
|
+
Requires-Dist: nbconvert>=7.2.1
|
20
|
+
Requires-Dist: mistune!=3.1.0
|
15
21
|
Requires-Dist: pyyaml
|
16
22
|
Requires-Dist: pyarrow
|
17
23
|
Requires-Dist: pandera>=0.24.0
|
@@ -23,8 +29,6 @@ Requires-Dist: anndata>=0.8.0,<=0.12.1
|
|
23
29
|
Requires-Dist: fsspec
|
24
30
|
Requires-Dist: graphviz
|
25
31
|
Requires-Dist: psycopg2-binary
|
26
|
-
Requires-Dist: bionty>=1.6.1rc1 ; extra == "bionty"
|
27
|
-
Requires-Dist: clinicore>=1.2.1 ; extra == "clinicore"
|
28
32
|
Requires-Dist: tomlkit ; extra == "dev"
|
29
33
|
Requires-Dist: line_profiler ; extra == "dev"
|
30
34
|
Requires-Dist: pre-commit ; extra == "dev"
|
@@ -32,28 +36,19 @@ Requires-Dist: nox ; extra == "dev"
|
|
32
36
|
Requires-Dist: laminci>=0.3 ; extra == "dev"
|
33
37
|
Requires-Dist: pytest>=6.0 ; extra == "dev"
|
34
38
|
Requires-Dist: coverage ; extra == "dev"
|
35
|
-
Requires-Dist: pytest-cov ; extra == "dev"
|
39
|
+
Requires-Dist: pytest-cov<7.0.0 ; extra == "dev"
|
36
40
|
Requires-Dist: mudata ; extra == "dev"
|
37
41
|
Requires-Dist: nbproject_test>=0.6.0 ; extra == "dev"
|
38
42
|
Requires-Dist: faker-biology ; extra == "dev"
|
39
43
|
Requires-Dist: pronto ; extra == "dev"
|
40
44
|
Requires-Dist: readfcs>=2.0.1 ; extra == "fcs"
|
41
45
|
Requires-Dist: lamindb_setup[gcp] ; extra == "gcp"
|
42
|
-
Requires-Dist: nbproject==0.11.1 ; extra == "jupyter"
|
43
|
-
Requires-Dist: jupytext ; extra == "jupyter"
|
44
|
-
Requires-Dist: nbconvert>=7.2.1 ; extra == "jupyter"
|
45
|
-
Requires-Dist: mistune!=3.1.0 ; extra == "jupyter"
|
46
|
-
Requires-Dist: wetlab>=1.3.1 ; extra == "wetlab"
|
47
46
|
Requires-Dist: numcodecs<0.16.0 ; extra == "zarr"
|
48
47
|
Requires-Dist: zarr>=2.16.0,<3.0.0a0 ; extra == "zarr"
|
49
48
|
Project-URL: Home, https://github.com/laminlabs/lamindb
|
50
|
-
Provides-Extra: bionty
|
51
|
-
Provides-Extra: clinicore
|
52
49
|
Provides-Extra: dev
|
53
50
|
Provides-Extra: fcs
|
54
51
|
Provides-Extra: gcp
|
55
|
-
Provides-Extra: jupyter
|
56
|
-
Provides-Extra: wetlab
|
57
52
|
Provides-Extra: zarr
|
58
53
|
|
59
54
|
[](https://github.com/laminlabs/lamindb)
|
@@ -77,7 +72,7 @@ It lets you track data transformations, validate & annotate datasets, and query
|
|
77
72
|
Install the `lamindb` Python package:
|
78
73
|
|
79
74
|
```shell
|
80
|
-
pip install
|
75
|
+
pip install lamindb
|
81
76
|
```
|
82
77
|
|
83
78
|
Create a LaminDB instance:
|
@@ -1,10 +1,11 @@
|
|
1
|
-
lamindb/__init__.py,sha256=
|
2
|
-
lamindb/_finish.py,sha256=
|
3
|
-
lamindb/_tracked.py,sha256
|
4
|
-
lamindb/_view.py,sha256=
|
5
|
-
lamindb/errors.py,sha256=
|
1
|
+
lamindb/__init__.py,sha256=iD3JsR1_pxWQ_61vYJRqY3W04strzBiwxhGMBksNvys,3241
|
2
|
+
lamindb/_finish.py,sha256=4KkFyb9d-GEGjDw_zDrnGt_bq3auQ_OQu0hV-2U73AQ,21355
|
3
|
+
lamindb/_tracked.py,sha256=fls9yd7EEGO9Ni51kA_pcBkeLpzm2HZrWtwYGQequNE,4395
|
4
|
+
lamindb/_view.py,sha256=GOKTfwnEaly9fdeWo9SlhYRc3UWEyLDmTlIUzjFXMYY,4960
|
5
|
+
lamindb/errors.py,sha256=kHKRWXPGQPnzTo0D0vQxJjY_8bGH_Xx1IGFgM-dYN3E,2277
|
6
6
|
lamindb/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
-
lamindb/base/__init__.py,sha256=
|
7
|
+
lamindb/base/__init__.py,sha256=u623ZDoNCwwyLLt_Jhtp3KDeum0LOg6cwAqn5TEgz_E,313
|
8
|
+
lamindb/base/dtypes.py,sha256=Bfrca8Slb3vIAIMLd-mjG4_9bTHz-LlThSIUHvfNmhA,3189
|
8
9
|
lamindb/base/fields.py,sha256=5l8ke5sAJ5_JvWqjKEMW8oyriGKA7itqGjbmoKKrJrM,8102
|
9
10
|
lamindb/base/ids.py,sha256=X-1N129FOoNw4TPlK_EzgTZOzRidiMyPWszz9r_066g,34
|
10
11
|
lamindb/base/types.py,sha256=NM_J9hQE80fere5dy-se04_Tg2BnPx_0n1ulLHL9iss,3027
|
@@ -14,47 +15,47 @@ lamindb/core/__init__.py,sha256=I9F-GugBMZwFLpUPb1MXyLfccIVAj021Gb_00h_18MY,633
|
|
14
15
|
lamindb/core/_compat.py,sha256=NLnKk1qk4xdgMV-QwFDnBnbio02ujjlF86icvhpdv4c,2029
|
15
16
|
lamindb/core/_context.py,sha256=5edP0M5_m8zgNXu7-1XaRLOv20i5LaWHBkEvMHsSiB0,40376
|
16
17
|
lamindb/core/_mapped_collection.py,sha256=osquwC6ee0wJ_I6O-8AZwnQUa_r9zqa0MN82Q-nBI3Y,25746
|
17
|
-
lamindb/core/_settings.py,sha256=
|
18
|
+
lamindb/core/_settings.py,sha256=519bOSopRb7_nE874KDJB263v1xFlk4TOqhBNNeO4yw,10992
|
18
19
|
lamindb/core/_sync_git.py,sha256=Z7keuyS5X7CAj285sEbZIFExZF9mtjGH8DzKwz3xhHw,5881
|
19
20
|
lamindb/core/_track_environment.py,sha256=fa0-qKEe0BpL79_nsDUDtbg1iA3VpJTh0RCOGdc2XOA,974
|
20
21
|
lamindb/core/exceptions.py,sha256=FMEoSvT3FvtLkxQAt2oDXPeaPem8V5x5UBbTsPFYU5w,53
|
21
22
|
lamindb/core/loaders.py,sha256=QH3r3Q_aPrbkgiWaV30TmxcLCs6zZFQLRW442DsTrNU,5456
|
22
23
|
lamindb/core/types.py,sha256=_u8amXATAZN-nNGNWYGmyqYDcHbT_i0NZeLRhm_-ygI,378
|
23
24
|
lamindb/core/storage/__init__.py,sha256=2gJyn9w6rzv3oPHjY756OfQYrLEXb37YuKMqh6ZjbF8,542
|
24
|
-
lamindb/core/storage/_anndata_accessor.py,sha256=
|
25
|
-
lamindb/core/storage/_backed_access.py,sha256=
|
25
|
+
lamindb/core/storage/_anndata_accessor.py,sha256=R6GMSojhI1qj2G1Ei9E1u_jhkHU9dX2kezy7TGojebQ,29778
|
26
|
+
lamindb/core/storage/_backed_access.py,sha256=f5BOAEFSfiFQcZQiok-vTpSUqF6BbSyF6UKkYLC_chc,8077
|
26
27
|
lamindb/core/storage/_polars_lazy_df.py,sha256=_JhnU8RmoTzU2kp7kyHRSUTAkFhpCJo6NNnHxvBXQv4,2929
|
27
28
|
lamindb/core/storage/_pyarrow_dataset.py,sha256=lRYYt7edUtwauhxd7RwFud6YPDbz2PFvYYgqLhfapfk,1398
|
28
|
-
lamindb/core/storage/_spatialdata_accessor.py,sha256=
|
29
|
+
lamindb/core/storage/_spatialdata_accessor.py,sha256=mn3iiNIBixGpBJoMmkHCvcoUut7Ttwy9QxGK7P5ywNo,1718
|
29
30
|
lamindb/core/storage/_tiledbsoma.py,sha256=EdzgGVTamB7Ef31doGFWwIOhTd9TNrBfNUplDWSp6wo,11386
|
30
31
|
lamindb/core/storage/_valid_suffixes.py,sha256=vUSeQ4s01rdhD_vSd6wKmFBsgMJAKkBMnL_T9Y1znMg,501
|
31
|
-
lamindb/core/storage/_zarr.py,sha256=
|
32
|
+
lamindb/core/storage/_zarr.py,sha256=VHT01D_QktmZB4r92XSe8FYveoPkFtn_8XAd3hV1GSA,4433
|
32
33
|
lamindb/core/storage/objects.py,sha256=ISVjBuXPQENZ2XVQDvfX-HZSyDjQi_OGnoJXQmI---Y,3282
|
33
34
|
lamindb/core/storage/paths.py,sha256=C6qAFtWFvFA2RtA9M4KGxT87wmZWqB9b1V5jOCY0ALc,7141
|
34
35
|
lamindb/core/subsettings/__init__.py,sha256=f_vOqZOjVGez8pLmtrUuc_ayDGXl07t_ZY-P2Cedxbo,201
|
35
36
|
lamindb/core/subsettings/_annotation_settings.py,sha256=o-yTYw-NmjFmtehbKU8qnf7tyaeDFkTRGan1pXAIVT0,370
|
36
37
|
lamindb/core/subsettings/_creation_settings.py,sha256=NGHWKqCFSzVNBxAr2VnmdYguiFdW29XUK7T9wRsVshg,906
|
37
38
|
lamindb/curators/__init__.py,sha256=WLnaVxrhQGZxGB3pjg-SM4oUu6DaKA78S_J3BfVKLEg,496
|
38
|
-
lamindb/curators/_legacy.py,sha256=
|
39
|
-
lamindb/curators/core.py,sha256=
|
39
|
+
lamindb/curators/_legacy.py,sha256=Ay2nd4u2OPL59aYC6rKNE9YpfVTC-MMPvnyzS3fM6xg,55172
|
40
|
+
lamindb/curators/core.py,sha256=PbkRxt8ngAxnfTXXxKNKCCEgtUxoyp3_I2f4UVyB7tE,78316
|
40
41
|
lamindb/examples/__init__.py,sha256=f0pBxijIA26ULUBnsP2sa1e4CLqMTeUUEqNeINJIf9o,179
|
41
|
-
lamindb/examples/cellxgene/__init__.py,sha256=
|
42
|
-
lamindb/examples/cellxgene/_cellxgene.py,sha256=
|
43
|
-
lamindb/examples/cellxgene/
|
44
|
-
lamindb/examples/croissant/__init__.py,sha256=
|
42
|
+
lamindb/examples/cellxgene/__init__.py,sha256=0itpr7sthjaZAbL5nGTVTisL5OeP-3WqKFr8zyDWxYM,247
|
43
|
+
lamindb/examples/cellxgene/_cellxgene.py,sha256=Vgot8L9ZmaX_PwOlsghmVKsnstxj979yRGjWNtDclUw,12885
|
44
|
+
lamindb/examples/cellxgene/cellxgene_schema_versions.csv,sha256=IbtgPbrMksqr3q9z0t2-D1ZTPnMO_i29W7crtgpN52w,2534
|
45
|
+
lamindb/examples/croissant/__init__.py,sha256=dfkL6MJ-L0qdPd4ZzGlMAlQHCB5wIGpSuQVwXBEeQwQ,2322
|
45
46
|
lamindb/examples/croissant/mini_immuno.anndata.zarr_metadata.json,sha256=XhY4wnFyMoK4Thkaolh2yJxtU6sX0bdFsJvRvt942k8,2921
|
46
|
-
lamindb/examples/datasets/__init__.py,sha256=
|
47
|
-
lamindb/examples/datasets/_core.py,sha256=
|
47
|
+
lamindb/examples/datasets/__init__.py,sha256=SKeX5kgjfXtNkUek4GfLYsgn-bGO8UsuF4Qf3R_zN-4,1988
|
48
|
+
lamindb/examples/datasets/_core.py,sha256=JIHf8NrvGYHYtt-ILxCIb4tOQUIPpFBXw357fDlbU2I,21553
|
48
49
|
lamindb/examples/datasets/_fake.py,sha256=BZF9R_1iF0HDnvtZNqL2FtsjSMuqDIfuFxnw_LJYIh4,953
|
49
|
-
lamindb/examples/datasets/_small.py,sha256=
|
50
|
+
lamindb/examples/datasets/_small.py,sha256=wHJb6eXzkQC_Ma8VqX7Orb3nGuAbyNdrr0jxJ93jjxc,4852
|
50
51
|
lamindb/examples/datasets/mini_immuno.py,sha256=ZEL9T4zhCKm8ggqU7VVhuihVKPR3MmlkJNOtdygH2v4,6107
|
51
52
|
lamindb/examples/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
52
|
-
lamindb/examples/fixtures/sheets.py,sha256=
|
53
|
+
lamindb/examples/fixtures/sheets.py,sha256=YrkHLSjXIzIJlvZFuYppGqDcQKif93O37CcRobZkNDQ,9506
|
53
54
|
lamindb/examples/schemas/__init__.py,sha256=NPDp7VjMOHStEIthx3xW9NSHtY7jnnMzrNPcSDgxT3M,241
|
54
55
|
lamindb/examples/schemas/_anndata.py,sha256=TAQrnBLZhH4TgbznrJDdGK_Gze6cf1MvyXuCcKIvb1g,1210
|
55
56
|
lamindb/examples/schemas/_simple.py,sha256=Dspj5QRmv241IstBxuc1E1Q5YeEqTOnOvakg7ChPj1k,911
|
56
57
|
lamindb/integrations/__init__.py,sha256=Zh0ROuRmob1QGV2mCo3A7cFmdheJGq4CUdo7G16pRHU,286
|
57
|
-
lamindb/integrations/_croissant.py,sha256=
|
58
|
+
lamindb/integrations/_croissant.py,sha256=RNX6dDPPun1QG6t456GxK19t071_FJWzwmUXiVDkHFE,5200
|
58
59
|
lamindb/integrations/_vitessce.py,sha256=s2F8KPpYVG0zUOTaDJgH1XAJtQDg1zrD_SxC4ZHUkHk,4035
|
59
60
|
lamindb/migrations/0069_squashed.py,sha256=7XdiRW0MBtr3Jck9dbIy_9qxmB_sjtLM1SH9x062d2k,62631
|
60
61
|
lamindb/migrations/0070_lamindbv1_migrate_data.py,sha256=tyq_xi6U8TXi9C2Raf6v_UTtfyfqQOUIFJzYj4oCgAE,2429
|
@@ -105,39 +106,43 @@ lamindb/migrations/0114_alter_run__status_code.py,sha256=KkGecSBJElA3LBnhSK5_rFp
|
|
105
106
|
lamindb/migrations/0115_alter_space_uid.py,sha256=18fCP8d31Ox1KxSSmfzU-W3lSpS3xtiaBNbPeHQiuTM,1332
|
106
107
|
lamindb/migrations/0116_remove_artifact_unique_artifact_storage_key_hash_and_more.py,sha256=vCAeIg8TdtVaC2kZIq3KTY5hcz_RiXh_44Sczv75RA4,1562
|
107
108
|
lamindb/migrations/0117_fix_artifact_storage_hash_unique_constraints.py,sha256=OqgUmf9_TeNwTddwcwZdJYfpN6cpFYBaw5_KitYumNM,1033
|
108
|
-
lamindb/migrations/
|
109
|
+
lamindb/migrations/0118_alter_recordproject_value_projectrecord.py,sha256=aNC_o3xfH9wk1BTbOWKbXeV4r_IPXgytYBRTFi_U-MM,3493
|
110
|
+
lamindb/migrations/0119_rename_records_project_linked_in_records.py,sha256=Feh4rCfoGD4kiGG-sk_IQx7cplDn-yVIlzI5FzE8utI,688
|
111
|
+
lamindb/migrations/0119_squashed.py,sha256=mY1gpmPqEDEZjjPFgiDJSSGhP9TmNi-T7b5bNmRDztM,166975
|
112
|
+
lamindb/migrations/0120_add_record_fk_constraint.py,sha256=KvYuA0ET6hoVugu9gwAk29_dSM5HKeOzNvQARjjyK5U,1815
|
113
|
+
lamindb/migrations/0121_recorduser.py,sha256=aDz6P-dSUn2bsLKuNPpMk2bSY1DeDftQPBBIVtNCpAI,1980
|
109
114
|
lamindb/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
110
|
-
lamindb/models/__init__.py,sha256=
|
111
|
-
lamindb/models/_describe.py,sha256=
|
115
|
+
lamindb/models/__init__.py,sha256=Owupnxv_JnoOenlSpn6iT997VRnwayBowh5MAfT-Eqs,2484
|
116
|
+
lamindb/models/_describe.py,sha256=Co6_whJG7Pm2Sl6YDmGoYL28XZyJ7VqICHTfgGedxvw,10919
|
112
117
|
lamindb/models/_django.py,sha256=go0sAhIGJ-JkYe5OMviWUm-ZwHdqDuBgnPbFvncA-lQ,12347
|
113
|
-
lamindb/models/_feature_manager.py,sha256=
|
114
|
-
lamindb/models/_from_values.py,sha256=
|
115
|
-
lamindb/models/_is_versioned.py,sha256=
|
116
|
-
lamindb/models/_label_manager.py,sha256=
|
118
|
+
lamindb/models/_feature_manager.py,sha256=35CylDvaq-awUTSpjqgMDyBU78wfkRou3OteUfmtZo0,57502
|
119
|
+
lamindb/models/_from_values.py,sha256=ymR8b0Qa3ZiTFTIuMsFYiBNH16ggDPlYeFjCaFgGETA,13372
|
120
|
+
lamindb/models/_is_versioned.py,sha256=zCnn5Z5HehBlKX-NXFhqfr3lbVOMRhlvG4ljtLbXl4A,7590
|
121
|
+
lamindb/models/_label_manager.py,sha256=12RV8uEpWILGUkNHb7JMccF341ArmrIbHfI9KAo742Q,12118
|
117
122
|
lamindb/models/_relations.py,sha256=zHYLujy9vkuB9jVq5844TpzLSP__iYNCQcsl-FzK1Jw,3700
|
118
|
-
lamindb/models/artifact.py,sha256=
|
119
|
-
lamindb/models/artifact_set.py,sha256=
|
120
|
-
lamindb/models/can_curate.py,sha256=
|
121
|
-
lamindb/models/collection.py,sha256=
|
122
|
-
lamindb/models/feature.py,sha256=
|
123
|
-
lamindb/models/has_parents.py,sha256=
|
124
|
-
lamindb/models/project.py,sha256=
|
125
|
-
lamindb/models/query_manager.py,sha256=
|
126
|
-
lamindb/models/query_set.py,sha256=
|
127
|
-
lamindb/models/record.py,sha256=
|
128
|
-
lamindb/models/run.py,sha256=
|
129
|
-
lamindb/models/save.py,sha256=
|
130
|
-
lamindb/models/schema.py,sha256=
|
131
|
-
lamindb/models/sqlrecord.py,sha256=
|
132
|
-
lamindb/models/storage.py,sha256=
|
133
|
-
lamindb/models/transform.py,sha256=
|
134
|
-
lamindb/models/ulabel.py,sha256=
|
123
|
+
lamindb/models/artifact.py,sha256=V_uLsa73xNll7iFqUjJl0lAI1s7Q6qycG6ufWP4pvYo,123158
|
124
|
+
lamindb/models/artifact_set.py,sha256=TfRxmuY9mRzkIeG_vWIDxq4_R_efnXuTbz4xxz7S5Kg,5389
|
125
|
+
lamindb/models/can_curate.py,sha256=_w7k8-gPju7owHzX79phtcL7VRy7wAaz-90MzOz8UUQ,29313
|
126
|
+
lamindb/models/collection.py,sha256=OqPhDppzCx2y7xEqtmV83el4iNrvOO1KvkE-y8ZEvm4,27372
|
127
|
+
lamindb/models/feature.py,sha256=6kI3UZMp3gBi75NhXBp_jn-1tRlc42YdJOEJFNgjtNo,41814
|
128
|
+
lamindb/models/has_parents.py,sha256=Ok-Tsh4-oBDjkyevyMSuOCb0mzDiswiO_0ufTqWz8o4,20341
|
129
|
+
lamindb/models/project.py,sha256=AhaY24iE8ilpS5dRFYzY6xQNVlqPHWMk72ib2OI_N8U,18732
|
130
|
+
lamindb/models/query_manager.py,sha256=zjO31kbj1t08WTxeZB9-BPjooz6axh06EFu90dfvpSA,11358
|
131
|
+
lamindb/models/query_set.py,sha256=y18mzqWUNbjOmcS1oW25ZxYtvEMtXYGB8c10OGxNZ4c,39117
|
132
|
+
lamindb/models/record.py,sha256=2eKEDqpiX5-aN2kUVXLuTVvQUspqQ5h10onbQM6Ta7g,13041
|
133
|
+
lamindb/models/run.py,sha256=LVZ2z5QV4aVYYsqGcLmMfqvPpKj4EGGHVts_RR8_c-E,14443
|
134
|
+
lamindb/models/save.py,sha256=gBt74RqfwgTa8PnTE153p17PruTAt6WGmGk9ZEBrojI,16719
|
135
|
+
lamindb/models/schema.py,sha256=LQuPQhyLitloRGxq6DWZMHcR-xDZY1NctPHjrC6t1iw,49827
|
136
|
+
lamindb/models/sqlrecord.py,sha256=3ueIE0_1CY8BUkHNigOhpsPf7WnulAytjEaINnOmS2I,72681
|
137
|
+
lamindb/models/storage.py,sha256=n7jth0RQ19K0W8ICbrAO942d5jBm1-h7DsrSjMJgAB0,15551
|
138
|
+
lamindb/models/transform.py,sha256=FcIPqmSk1hahg2Cr8q6lm1kKpbdvu2JUceSlPIV9Dww,12780
|
139
|
+
lamindb/models/ulabel.py,sha256=UznidEEoiIns_KetWgCbDejXuM5hmzF6F49yqf2kLpQ,9495
|
135
140
|
lamindb/setup/__init__.py,sha256=QZ-JF8IzO_ckDOU223lsJrdO5ay7cDFgvCbkLeAuxYA,467
|
136
141
|
lamindb/setup/_switch.py,sha256=njZJN__JOhVrBFGClQG1wobdhJJp6l_XzPGKtKSCrfU,434
|
137
142
|
lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
|
138
143
|
lamindb/setup/errors/__init__.py,sha256=bAHTxOUJW1rm4zpF0Pvqkftn8W6iMGnQ-uyNBu13Nfg,171
|
139
144
|
lamindb/setup/types/__init__.py,sha256=ATaosOi6q-cDWB52T69_sRmLMqj8cHfc-vljzZsrJNw,169
|
140
|
-
lamindb-1.
|
141
|
-
lamindb-1.
|
142
|
-
lamindb-1.
|
143
|
-
lamindb-1.
|
145
|
+
lamindb-1.11.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
146
|
+
lamindb-1.11.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
|
147
|
+
lamindb-1.11.0.dist-info/METADATA,sha256=lda7anilPXNn2C-lxekpQAR_AekrD8gU6vYzCxp76TM,4865
|
148
|
+
lamindb-1.11.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|