lamindb 0.76.1__py3-none-any.whl → 0.76.3__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.
@@ -0,0 +1,192 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Literal
4
+
5
+ from anndata import AnnData
6
+ from lamin_utils import logger
7
+ from lamindb_setup import settings as setup_settings
8
+ from lamindb_setup.core._settings_storage import get_storage_region
9
+ from lamindb_setup.core.upath import create_path
10
+ from lnschema_core import Artifact, Run
11
+
12
+ if TYPE_CHECKING:
13
+ from lamindb_setup.core.types import UPathStr
14
+ from tiledbsoma import Collection as SOMACollection
15
+ from tiledbsoma import Experiment as SOMAExperiment
16
+ from tiledbsoma.io import ExperimentAmbientLabelMapping
17
+ from upath import UPath
18
+
19
+
20
+ def _read_adata_h5ad_zarr(objpath: UPath):
21
+ from lamindb.core.storage.paths import read_adata_h5ad, read_adata_zarr
22
+
23
+ if objpath.is_dir():
24
+ adata = read_adata_zarr(objpath)
25
+ else:
26
+ adata = read_adata_h5ad(objpath)
27
+ return adata
28
+
29
+
30
+ def _tiledb_config_s3(storepath: UPath) -> dict:
31
+ region = get_storage_region(storepath)
32
+ tiledb_config = {"vfs.s3.region": region}
33
+ storage_options = storepath.storage_options
34
+ if "key" in storage_options:
35
+ tiledb_config["vfs.s3.aws_access_key_id"] = storage_options["key"]
36
+ if "secret" in storage_options:
37
+ tiledb_config["vfs.s3.aws_secret_access_key"] = storage_options["secret"]
38
+ if "token" in storage_options:
39
+ tiledb_config["vfs.s3.aws_session_token"] = storage_options["token"]
40
+
41
+ return tiledb_config
42
+
43
+
44
+ def _open_tiledbsoma(
45
+ storepath: UPath, mode: Literal["r", "w"] = "r"
46
+ ) -> SOMACollection | SOMAExperiment:
47
+ try:
48
+ import tiledbsoma as soma
49
+ except ImportError as e:
50
+ raise ImportError("Please install tiledbsoma: pip install tiledbsoma") from e
51
+
52
+ storepath_str = storepath.as_posix()
53
+ if storepath.protocol == "s3":
54
+ ctx = soma.SOMATileDBContext(tiledb_config=_tiledb_config_s3(storepath))
55
+ # this is a strange bug
56
+ # for some reason iterdir futher gives incorrect results
57
+ # if cache is not invalidated
58
+ # instead of obs and ms it gives ms and ms in the list of names
59
+ storepath.fs.invalidate_cache()
60
+ else:
61
+ ctx = None
62
+
63
+ soma_objects = [obj.name for obj in storepath.iterdir()]
64
+ if "obs" in soma_objects and "ms" in soma_objects:
65
+ SOMAType = soma.Experiment
66
+ else:
67
+ SOMAType = soma.Collection
68
+ return SOMAType.open(storepath_str, mode=mode, context=ctx)
69
+
70
+
71
+ def save_tiledbsoma_experiment(
72
+ # Artifact args
73
+ adatas: list[AnnData | UPathStr],
74
+ key: str | None = None,
75
+ description: str | None = None,
76
+ run: Run | None = None,
77
+ revises: Artifact | None = None,
78
+ # tiledbsoma.io.from_anndata args
79
+ measurement_name: str = "RNA",
80
+ obs_id_name: str = "obs_id",
81
+ var_id_name: str = "var_id",
82
+ append_obsm_varm: bool = False,
83
+ # additional keyword args for tiledbsoma.io.from_anndata
84
+ **kwargs,
85
+ ) -> Artifact:
86
+ """Write `AnnData` to `tiledbsoma.Experiment`.
87
+
88
+ Reads `AnnData` objects, writes them to `tiledbsoma.Experiment`, creates `lamindb.Artifact`
89
+ and saves the artifact.
90
+ Note that this function adds `lamin_run_uid` column to `obs` of in-memory `AnnData` objects
91
+ when it writes to a new store or appends to a store that has this column in `obs`.
92
+
93
+ See also `tiledbsoma.io.from_anndata
94
+ <https://tiledbsoma.readthedocs.io/en/latest/_autosummary/tiledbsoma.io.from_anndata.html>`__.
95
+
96
+ Args:
97
+ adatas: `AnnData` objects to write, in-memory or on-disk.
98
+ key: A relative path within default storage.
99
+ description: A description.
100
+ run: The run that creates the artifact.
101
+ revises: `lamindb.Artifact` with `tiledbsoma.Experiment` to append to.
102
+ Triggers a revision (a new untagged version).
103
+ measurement_name: The name of the measurement to store data in `tiledbsoma.Experiment`.
104
+ obs_id_name: Which `AnnData` `obs` column to use for append mode.
105
+ var_id_name: Which `AnnData` `var` column to use for append mode.
106
+ append_obsm_varm: Whether to append `obsm` and `varm` in append mode .
107
+ **kwargs: Additional keyword arguments passed to `tiledbsoma.io.from_anndata` that
108
+ writes `adatas`.
109
+ """
110
+ try:
111
+ import tiledbsoma as soma
112
+ import tiledbsoma.io as soma_io
113
+ except ImportError as e:
114
+ raise ImportError("Please install tiledbsoma: pip install tiledbsoma") from e
115
+
116
+ from lamindb.core._data import get_run
117
+ from lamindb.core.storage.paths import auto_storage_key_from_artifact_uid
118
+ from lamindb.core.versioning import create_uid
119
+
120
+ run = get_run(run)
121
+
122
+ appending = revises is not None
123
+
124
+ if appending:
125
+ _uid = None
126
+ storepath = revises.path
127
+ else:
128
+ _uid, _ = create_uid(n_full_id=20)
129
+ storage_key = auto_storage_key_from_artifact_uid(
130
+ _uid, ".tiledbsoma", is_dir=True
131
+ )
132
+ storepath = setup_settings.storage.root / storage_key
133
+
134
+ if storepath.protocol == "s3":
135
+ ctx = soma.SOMATileDBContext(tiledb_config=_tiledb_config_s3(storepath))
136
+ else:
137
+ ctx = None
138
+
139
+ storepath = storepath.as_posix()
140
+
141
+ add_run_uid = True
142
+ if appending:
143
+ with soma.Experiment.open(storepath, mode="r", context=ctx) as store:
144
+ add_run_uid = "lamin_run_uid" in store["obs"].schema.names
145
+
146
+ if add_run_uid and run is None:
147
+ raise ValueError("Pass `run`")
148
+
149
+ adata_objects = []
150
+ for adata in adatas:
151
+ if isinstance(adata, AnnData):
152
+ if add_run_uid:
153
+ if adata.is_view:
154
+ raise ValueError(
155
+ "Can not write an `AnnData` view, please do `adata.copy()` before passing."
156
+ )
157
+ else:
158
+ adata.obs["lamin_run_uid"] = run.uid
159
+ else:
160
+ adata = _read_adata_h5ad_zarr(create_path(adata))
161
+ if add_run_uid:
162
+ adata.obs["lamin_run_uid"] = run.uid
163
+ adata_objects.append(adata)
164
+
165
+ if appending or len(adata_objects) > 1:
166
+ registration_mapping = soma_io.register_anndatas(
167
+ experiment_uri=storepath if appending else None,
168
+ adatas=adata_objects,
169
+ measurement_name=measurement_name,
170
+ obs_field_name=obs_id_name,
171
+ var_field_name=var_id_name,
172
+ append_obsm_varm=append_obsm_varm,
173
+ context=ctx,
174
+ )
175
+ else:
176
+ registration_mapping = None
177
+
178
+ for adata_obj in adata_objects:
179
+ soma_io.from_anndata(
180
+ storepath,
181
+ adata_obj,
182
+ measurement_name,
183
+ context=ctx,
184
+ obs_id_name=obs_id_name,
185
+ var_id_name=var_id_name,
186
+ registration_mapping=registration_mapping,
187
+ **kwargs,
188
+ )
189
+
190
+ return Artifact(
191
+ storepath, key=key, description=description, run=run, revises=revises, _uid=_uid
192
+ ).save()
@@ -84,13 +84,9 @@ def attempt_accessing_path(
84
84
  )
85
85
  else:
86
86
  if artifact._state.db not in ("default", None) and using_key is None:
87
- storage = (
88
- Storage.using(artifact._state.db).filter(id=artifact.storage_id).one()
89
- )
87
+ storage = Storage.using(artifact._state.db).get(id=artifact.storage_id)
90
88
  else:
91
- storage = (
92
- Storage.objects.using(using_key).filter(id=artifact.storage_id).one()
93
- )
89
+ storage = Storage.objects.using(using_key).get(id=artifact.storage_id)
94
90
  # find a better way than passing None to instance_settings in the future!
95
91
  storage_settings = StorageSettings(storage.root, access_token=access_token)
96
92
  path = storage_settings.key_to_filepath(storage_key)
@@ -11,6 +11,16 @@ if TYPE_CHECKING:
11
11
  from lnschema_core.models import IsVersioned
12
12
 
13
13
 
14
+ def message_update_key_in_version_family(
15
+ *,
16
+ suid: str,
17
+ existing_key: str,
18
+ registry: str,
19
+ new_key: str,
20
+ ) -> str:
21
+ return f'Or update key "{existing_key}" in your existing family:\n\nln.{registry}.filter(uid__startswith="{suid}").update(key="{new_key}")'
22
+
23
+
14
24
  def increment_base62(s: str) -> str:
15
25
  # we don't need to throw an error for zzzz because uids are enforced to be unique
16
26
  # on the db level and have an enforced maximum length
@@ -78,57 +88,43 @@ def set_version(version: str | None = None, previous_version: str | None = None)
78
88
  version: Version string.
79
89
  previous_version: Previous version string.
80
90
  """
81
- if version == previous_version:
82
- raise ValueError(f"Please increment the previous version: '{previous_version}'")
83
91
  if version is None and previous_version is not None:
84
92
  version = bump_version(previous_version, bump_type="major")
85
93
  return version
86
94
 
87
95
 
88
- def init_uid(
96
+ def create_uid(
89
97
  *,
90
98
  version: str | None = None,
91
99
  n_full_id: int = 20,
92
- is_new_version_of: IsVersioned | None = None,
93
- ) -> str:
94
- if is_new_version_of is not None:
95
- stem_uid = is_new_version_of.stem_uid
100
+ revises: IsVersioned | None = None,
101
+ ) -> tuple[str, IsVersioned | None]:
102
+ if revises is not None:
103
+ if not revises.is_latest:
104
+ # need one more request
105
+ revises = revises.__class__.objects.get(
106
+ is_latest=True, uid__startswith=revises.stem_uid
107
+ )
108
+ logger.warning(
109
+ f"didn't pass the latest version in `revises`, retrieved it: {revises}"
110
+ )
111
+ suid = revises.stem_uid
112
+ vuid = increment_base62(revises.uid[-4:])
96
113
  else:
97
- stem_uid = ids.base62(n_full_id - 4)
114
+ suid = ids.base62(n_full_id - 4)
115
+ vuid = "0000"
98
116
  if version is not None:
99
117
  if not isinstance(version, str):
100
118
  raise ValueError(
101
119
  "`version` parameter must be `None` or `str`, e.g., '0.1', '1', '2',"
102
120
  " etc."
103
121
  )
104
- return stem_uid + ids.base62_4()
105
-
106
-
107
- def get_uid_from_old_version(
108
- is_new_version_of: IsVersioned,
109
- version: str | None = None,
110
- using_key: str | None = None,
111
- ) -> tuple[str, str]:
112
- """{}""" # noqa: D415
113
- msg = ""
114
- if is_new_version_of.version is None:
115
- previous_version = "1"
116
- msg = f"setting previous version to '{previous_version}'"
117
- else:
118
- previous_version = is_new_version_of.version
119
- version = set_version(version, previous_version)
120
- new_uid = init_uid(
121
- version=version,
122
- n_full_id=is_new_version_of._len_full_uid,
123
- is_new_version_of=is_new_version_of,
124
- )
125
- # the following covers the edge case where the old file was unversioned
126
- if is_new_version_of.version is None:
127
- is_new_version_of.version = previous_version
128
- is_new_version_of.save(using=using_key)
129
- if msg != "":
130
- msg += f"& new version to '{version}'"
131
- return new_uid, version
122
+ if revises is not None:
123
+ if version == revises.version:
124
+ raise ValueError(
125
+ f"Please increment the previous version: '{revises.version}'"
126
+ )
127
+ return suid + vuid, revises
132
128
 
133
129
 
134
130
  def get_new_path_from_uid(old_path: UPath, old_uid: str, new_uid: str):
@@ -141,18 +137,18 @@ def get_new_path_from_uid(old_path: UPath, old_uid: str, new_uid: str):
141
137
  return new_path
142
138
 
143
139
 
144
- def process_is_new_version_of(
145
- is_new_version_of: IsVersioned,
140
+ def process_revises(
141
+ revises: IsVersioned | None,
146
142
  version: str | None,
147
143
  name: str | None,
148
144
  type: type[IsVersioned],
149
- ) -> tuple[str, str, str]:
150
- if is_new_version_of is not None and not isinstance(is_new_version_of, type):
151
- raise TypeError(f"is_new_version_of has to be of type {type.__name__}")
152
- if is_new_version_of is None:
153
- uid = init_uid(version=version, n_full_id=type._len_full_uid)
154
- else:
155
- uid, version = get_uid_from_old_version(is_new_version_of, version)
145
+ ) -> tuple[str, str, str, IsVersioned | None]:
146
+ if revises is not None and not isinstance(revises, type):
147
+ raise TypeError(f"`revises` has to be of type `{type.__name__}`")
148
+ uid, revises = create_uid(
149
+ revises=revises, version=version, n_full_id=type._len_full_uid
150
+ )
151
+ if revises is not None:
156
152
  if name is None:
157
- name = is_new_version_of.name
158
- return uid, version, name
153
+ name = revises.name
154
+ return uid, version, name, revises
@@ -4,6 +4,9 @@
4
4
  :toctree: .
5
5
 
6
6
  save_vitessce_config
7
+ save_tiledbsoma_experiment
7
8
  """
8
9
 
10
+ from lamindb.core.storage import save_tiledbsoma_experiment
11
+
9
12
  from ._vitessce import save_vitessce_config
@@ -109,4 +109,6 @@ def save_vitessce_config(
109
109
  logger.important(
110
110
  f"go to: https://lamin.ai/{slug}/artifact/{vitessce_config_artifact.uid}"
111
111
  )
112
+ run.finished_at = datetime.now(timezone.utc)
113
+ run.save()
112
114
  return vitessce_config_artifact
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamindb
3
- Version: 0.76.1
3
+ Version: 0.76.3
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,9 +9,9 @@ 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.1
13
- Requires-Dist: lamindb_setup==0.76.5
14
- Requires-Dist: lamin_utils==0.13.2
12
+ Requires-Dist: lnschema_core==0.73.3
13
+ Requires-Dist: lamindb_setup==0.76.7
14
+ Requires-Dist: lamin_utils==0.13.4
15
15
  Requires-Dist: lamin_cli==0.16.2
16
16
  Requires-Dist: rapidfuzz
17
17
  Requires-Dist: pyarrow
@@ -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.2 ; extra == "bionty"
27
+ Requires-Dist: bionty==0.49.0 ; 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"
@@ -57,13 +57,5 @@ Provides-Extra: zarr
57
57
 
58
58
  # LaminDB - A data framework for biology
59
59
 
60
- - Manage data & metadata with a unified Python API ("lakehouse").
61
- - Track data lineage across notebooks & pipelines.
62
- - Integrate registries for experimental metadata & in-house ontologies.
63
- - Validate, standardize & annotate.
64
- - Collaborate across distributed databases.
65
-
66
- ## Documentation
67
-
68
- Read the [docs](https://lamin.ai/docs).
60
+ Read the [docs](https://docs.lamin.ai).
69
61
 
@@ -0,0 +1,59 @@
1
+ lamindb/__init__.py,sha256=iZlJlG4hUmSRNZvau2bAEG2Z9B-qnWWNazYYw5m3ciM,2351
2
+ lamindb/_artifact.py,sha256=6iD2qzZxWUHPiItUdEJt9BDbYVv6HF3bgpW2ZDjMf7s,44093
3
+ lamindb/_can_validate.py,sha256=ne8-9sAG9vXnMXZqso6mYMt-xDg16h-gq6yHJXKFpuI,17690
4
+ lamindb/_collection.py,sha256=F_VgpLBprrzUQ-tPngWvO9vFd7jX66MVwIi031JOris,14871
5
+ lamindb/_curate.py,sha256=_VISRycaPaburnJKuFM5XpEWqNGozdUcwBGMj_knZpM,58041
6
+ lamindb/_feature.py,sha256=nZhtrH0ssoNls-hV-dkwfK9sKypg2El59R9qfarxfUE,5340
7
+ lamindb/_feature_set.py,sha256=DmAy96V_RyV0yiyvWOCHgustXPsCaMwn4TrWwh2qDd8,8104
8
+ lamindb/_filter.py,sha256=9QHa9J-_6QeYPQATZpTun2VGiFofwzB0Km-KnKajHcM,663
9
+ lamindb/_finish.py,sha256=Yytv26ruL7EFxKewOrgqJxDircZVCpHOkwUjqdh4oMY,9411
10
+ lamindb/_from_values.py,sha256=8kYpR8Q85EOaTcsPGjVHeZh29fGVgum5OEQf4Hsz_80,13533
11
+ lamindb/_is_versioned.py,sha256=5lAnhTboltFkZCKVRV1uxkm0OCjJz_HKi3yQq_vEuMs,1306
12
+ lamindb/_parents.py,sha256=eMavdd6IO6STOVJSlR2TzdRtx6sKYDKsMOtlR3DZlgQ,15599
13
+ lamindb/_query_manager.py,sha256=Ipe85HL31DDwMbC8CN_1Svbwk48a_DUh_INGQdZL08I,4222
14
+ lamindb/_query_set.py,sha256=rykST1bxbk2_dt8Rx1TGTEHzXUc1yyc0rZWHO6bRGBA,12667
15
+ lamindb/_record.py,sha256=MDLvcsZ23lZkThnrYQtj_uW-1BnxCPpyJ5mKl9KPs4A,21199
16
+ lamindb/_run.py,sha256=5M_r1zGDv9HlqbqRKTWCYCOtENovJ-8mQ4kY7XqcLaU,1888
17
+ lamindb/_save.py,sha256=Fu7Z84btKOXfTfpunKLni21s5ER2zIllqg5e3nPq-0A,10910
18
+ lamindb/_storage.py,sha256=GBVChv-DHVMNEBJL5l_JT6B4RDhZ6NnwgzmUICphYKk,413
19
+ lamindb/_transform.py,sha256=Ck674iuKIp9HDpHuyFFM2xKJcFAUvQDRTnEdnx00Rq0,4114
20
+ lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
21
+ lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
22
+ lamindb/_view.py,sha256=4Ln2ItTb3857PAI-70O8eJYqoTJ_NNFc7E_wds6OGns,2412
23
+ lamindb/core/__init__.py,sha256=Nq-YbQT8X0KXoGXgctr9lm8H7J6sZeBBJ3hixGq0iuQ,1523
24
+ lamindb/core/_context.py,sha256=FamAbmq3VZYrgwZkaRtkBY3f5YepLtlblh8wyv4a1OQ,19546
25
+ lamindb/core/_data.py,sha256=eocOXsZGu62LPtz6yIlvHhPSJTf3yF2ITZTffyflWYI,16269
26
+ lamindb/core/_feature_manager.py,sha256=94tX6gq_Rx7fkDARQBxB2z92qUDpHocFSAdKv5izMT4,32490
27
+ lamindb/core/_label_manager.py,sha256=jSLvxAuTuOYosSh_QJhIz3bqnbmWKP43y5abVMb-hOQ,9240
28
+ lamindb/core/_mapped_collection.py,sha256=1XzratL2IvRleqioNhWo26Lsuqkev8-HEImmHQxw9Kw,23266
29
+ lamindb/core/_settings.py,sha256=GGEB8BU5GinIfD4ktr1Smp6GPHGaInu46MhP4EecZDY,5950
30
+ lamindb/core/_sync_git.py,sha256=qc0yfPyKeG4uuNT_3qsv-mkIMqhLFqfXNeNVO49vV00,4547
31
+ lamindb/core/_track_environment.py,sha256=STzEVUzOeUEWdX7WDJUkKH4u08k7eupRX6AXQwoVt14,828
32
+ lamindb/core/exceptions.py,sha256=TKyt1JOUwWIHbkCQjir_LQadf8960eQ95RWhSpz5_Bk,1288
33
+ lamindb/core/fields.py,sha256=47Jmh3efUr5ZscgimR_yckY-I3cNf8ScLutbwKCK3j4,162
34
+ lamindb/core/schema.py,sha256=KiYQn_8fokSMztTNDe6qUocZzKXWxU32H-YChNJv51A,1877
35
+ lamindb/core/types.py,sha256=uVBqSVLoQaTkqP9nqsJhwU6yYnx8H5e6-ZxrB6vpOOw,265
36
+ lamindb/core/versioning.py,sha256=__SOHhk5OjMJgAUjixzp0GFcQrpjm8sBUXC9Fouk2AE,5162
37
+ lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
38
+ lamindb/core/datasets/_core.py,sha256=CgVF_pXuBXLElzubDMsl1DbpYOnXCY0HleITVvBKih4,19873
39
+ lamindb/core/datasets/_fake.py,sha256=BZF9R_1iF0HDnvtZNqL2FtsjSMuqDIfuFxnw_LJYIh4,953
40
+ lamindb/core/storage/__init__.py,sha256=x-Bpxv1rx6uGog-chI0fdpt0UhkXQkwoQqye0TNk0WQ,514
41
+ lamindb/core/storage/_anndata_accessor.py,sha256=jmEZeeZlt8-qBXRkU0tTA-t6dVEb_dH86wc1ok0jSRY,24030
42
+ lamindb/core/storage/_anndata_sizes.py,sha256=aXO3OB--tF5MChenSsigW6Q-RuE8YJJOUTVukkLrv9A,1029
43
+ lamindb/core/storage/_backed_access.py,sha256=YcWCeT2eligJGsBdjJS_-4el_eC9J088jxUWG9lsleM,3231
44
+ lamindb/core/storage/_tiledbsoma.py,sha256=_ObAT3pIx0OA5uq55v6aWnIeyTTKjetjV3Gkk4oDWR0,6851
45
+ lamindb/core/storage/_valid_suffixes.py,sha256=vUSeQ4s01rdhD_vSd6wKmFBsgMJAKkBMnL_T9Y1znMg,501
46
+ lamindb/core/storage/_zarr.py,sha256=5ceEz6YIvgvUnVVNWhK5Z4W0WfrvyvY82Yna5jSX1_E,3661
47
+ lamindb/core/storage/objects.py,sha256=OzvBCS-Urz5mr-O95qYt6RGBDDX5HmjfRRKWPPDn1ZE,1797
48
+ lamindb/core/storage/paths.py,sha256=woOrjtBhNnzm8DjF262ipwyZaQ_A-7MT2ZPoiefAfYk,7728
49
+ lamindb/core/subsettings/__init__.py,sha256=KFHPzIE7f7Bj4RgMjGQF4CjTdHVG_VNFBrCndo49ixo,198
50
+ lamindb/core/subsettings/_creation_settings.py,sha256=54mfMH_osC753hpxcl7Dq1rwBD2LHnWveXtQpkLBITE,1194
51
+ lamindb/core/subsettings/_transform_settings.py,sha256=4YbCuZtJo6zdytl6UQR4GvdDkTtT6SRBqVzofGzNOt8,583
52
+ lamindb/integrations/__init__.py,sha256=RWGMYYIzr8zvmNPyVB4m-p4gMDhxdRbjES2Ed23OItw,215
53
+ lamindb/integrations/_vitessce.py,sha256=aDCyZTddpMfUzjEo0DXQ3XlD--ebSqnsGiMxJBunX90,5141
54
+ lamindb/setup/__init__.py,sha256=OwZpZzPDv5lPPGXZP7-zK6UdO4FHvvuBh439yZvIp3A,410
55
+ lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
56
+ lamindb-0.76.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
57
+ lamindb-0.76.3.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
58
+ lamindb-0.76.3.dist-info/METADATA,sha256=DoLPrLaR-VmA_7wyT_AM-fLUqi-0qL9OhxKT4U-wvWU,2381
59
+ lamindb-0.76.3.dist-info/RECORD,,
@@ -1,58 +0,0 @@
1
- lamindb/__init__.py,sha256=d7viqFNu34u9fGs2xJq5AAD-4-M7VS2reIRP-uEYn54,2270
2
- lamindb/_artifact.py,sha256=wmcofYb1-23YblpjwFo8X-dLNgB7EfwMtzS7p-CKvhs,42630
3
- lamindb/_can_validate.py,sha256=jPZHhtPaZJos5bL8Mk8ZNh34mItwYRwOynhofKUxwfY,17472
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
- lamindb/_feature_set.py,sha256=DmAy96V_RyV0yiyvWOCHgustXPsCaMwn4TrWwh2qDd8,8104
8
- lamindb/_filter.py,sha256=I1tSIF-izmD48YpB8NtKmau59Vpt6C54RPHWc3oinGM,1412
9
- lamindb/_finish.py,sha256=VtUfnHQOxbxKUMm3IXmxGO4T0XH64w-yeyeIdwvApBw,9433
10
- lamindb/_from_values.py,sha256=zBOJGt_3mBKjqW5LuzuUysMwGbEcEFtYBJXAcL4Vx_0,13432
11
- lamindb/_is_versioned.py,sha256=Z_zVsHTnNaWvD15dEz18VocsSgka53jUzs_wDr78ltI,1344
12
- lamindb/_parents.py,sha256=eMavdd6IO6STOVJSlR2TzdRtx6sKYDKsMOtlR3DZlgQ,15599
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
- lamindb/_save.py,sha256=9lpFpQLgmPOp6JcoM9XetNkbYu2JgY70sGQZVz3Gzmw,11027
18
- lamindb/_storage.py,sha256=GBVChv-DHVMNEBJL5l_JT6B4RDhZ6NnwgzmUICphYKk,413
19
- lamindb/_transform.py,sha256=Vw0Ct15nCOmL8-UwDs-hH-rgdX8PfcAadgbh_ynBzQE,3397
20
- lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
21
- lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
22
- lamindb/_view.py,sha256=4Ln2ItTb3857PAI-70O8eJYqoTJ_NNFc7E_wds6OGns,2412
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
26
- lamindb/core/_feature_manager.py,sha256=gJowe9-tifi0Z5IcChV-jtGYVdl6XgR2m_oswwhU17Y,31980
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
- lamindb/core/_sync_git.py,sha256=qc0yfPyKeG4uuNT_3qsv-mkIMqhLFqfXNeNVO49vV00,4547
31
- lamindb/core/_track_environment.py,sha256=STzEVUzOeUEWdX7WDJUkKH4u08k7eupRX6AXQwoVt14,828
32
- lamindb/core/exceptions.py,sha256=qNFYN5Jc7Y6kw4re-jsW0AEIprsV2HB1wTcJiO-u-ks,1278
33
- lamindb/core/fields.py,sha256=47Jmh3efUr5ZscgimR_yckY-I3cNf8ScLutbwKCK3j4,162
34
- lamindb/core/schema.py,sha256=KiYQn_8fokSMztTNDe6qUocZzKXWxU32H-YChNJv51A,1877
35
- lamindb/core/types.py,sha256=uVBqSVLoQaTkqP9nqsJhwU6yYnx8H5e6-ZxrB6vpOOw,265
36
- lamindb/core/versioning.py,sha256=fVzxFcJ8xPPSRuLZuUz_lfAKirI550NQTyKIowQUhhs,5404
37
- lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
38
- lamindb/core/datasets/_core.py,sha256=CgVF_pXuBXLElzubDMsl1DbpYOnXCY0HleITVvBKih4,19873
39
- lamindb/core/datasets/_fake.py,sha256=BZF9R_1iF0HDnvtZNqL2FtsjSMuqDIfuFxnw_LJYIh4,953
40
- lamindb/core/storage/__init__.py,sha256=MjKg2-p8EbOYTVsgufnK93ut7HG7_MzLDAqtzXt0U2Q,501
41
- lamindb/core/storage/_anndata_accessor.py,sha256=jmEZeeZlt8-qBXRkU0tTA-t6dVEb_dH86wc1ok0jSRY,24030
42
- lamindb/core/storage/_anndata_sizes.py,sha256=aXO3OB--tF5MChenSsigW6Q-RuE8YJJOUTVukkLrv9A,1029
43
- lamindb/core/storage/_backed_access.py,sha256=MsSgiIccHVhqOcur2lZ4mj5LSIL5OL8nX4eqK6mloU0,4732
44
- lamindb/core/storage/_valid_suffixes.py,sha256=vUSeQ4s01rdhD_vSd6wKmFBsgMJAKkBMnL_T9Y1znMg,501
45
- lamindb/core/storage/_zarr.py,sha256=5ceEz6YIvgvUnVVNWhK5Z4W0WfrvyvY82Yna5jSX1_E,3661
46
- lamindb/core/storage/objects.py,sha256=OzvBCS-Urz5mr-O95qYt6RGBDDX5HmjfRRKWPPDn1ZE,1797
47
- lamindb/core/storage/paths.py,sha256=I0UjQfXfh3MptfLgpA0iSyR-X9pLOvgtXNr4B_Lwk4g,7810
48
- lamindb/core/subsettings/__init__.py,sha256=KFHPzIE7f7Bj4RgMjGQF4CjTdHVG_VNFBrCndo49ixo,198
49
- lamindb/core/subsettings/_creation_settings.py,sha256=54mfMH_osC753hpxcl7Dq1rwBD2LHnWveXtQpkLBITE,1194
50
- lamindb/core/subsettings/_transform_settings.py,sha256=4YbCuZtJo6zdytl6UQR4GvdDkTtT6SRBqVzofGzNOt8,583
51
- lamindb/integrations/__init__.py,sha256=MoLRD_qqX5WHFUAqHL6zoY_cDkWH0zimaGT_1CyXKnk,124
52
- lamindb/integrations/_vitessce.py,sha256=jcpLUNFq1BsDpZDkG5L3nzWNXDLuy3Eep_GfY0XqhhA,5077
53
- lamindb/setup/__init__.py,sha256=OwZpZzPDv5lPPGXZP7-zK6UdO4FHvvuBh439yZvIp3A,410
54
- lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
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,,