lamindb 0.74.1__py3-none-any.whl → 0.74.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.
@@ -43,7 +43,7 @@ def get_uid_ext(version: str) -> str:
43
43
  # merely zero-padding the nbproject version such that the base62 encoding is
44
44
  # at least 4 characters long doesn't yields sufficiently diverse hashes and
45
45
  # leads to collisions; it'd be nice because the uid_ext would be ordered
46
- return encodebytes(hashlib.md5(version.encode()).digest())[:4]
46
+ return encodebytes(hashlib.md5(version.encode()).digest())[:4] # noqa: S324
47
47
 
48
48
 
49
49
  def update_stem_uid_or_version(
@@ -113,7 +113,7 @@ def get_notebook_name_colab() -> str:
113
113
 
114
114
  ip = gethostbyname(gethostname()) # 172.28.0.12
115
115
  try:
116
- name = get(f"http://{ip}:9000/api/sessions").json()[0]["name"]
116
+ name = get(f"http://{ip}:9000/api/sessions").json()[0]["name"] # noqa: S113
117
117
  except Exception:
118
118
  logger.warning(
119
119
  "could not get notebook name from Google Colab, using: notebook.ipynb"
lamindb/core/_settings.py CHANGED
@@ -108,7 +108,8 @@ class Settings:
108
108
  For example: `ln.sync_git_repo = https://github.com/laminlabs/redun-lamin`
109
109
  """
110
110
  self._sync_git_repo = sanitize_git_repo_url(value)
111
- assert self._sync_git_repo.startswith("https://")
111
+ if not self._sync_git_repo.startswith("https://"): # pragma: nocover
112
+ raise ValueError("git repository URL must start with 'https://'.")
112
113
 
113
114
  @property
114
115
  def storage(self) -> StorageSettings:
lamindb/core/_sync_git.py CHANGED
@@ -24,8 +24,7 @@ def get_git_repo_from_remote() -> Path:
24
24
  f"running outside of synched git repo, cloning {repo_url} into {repo_dir}"
25
25
  )
26
26
  result = subprocess.run(
27
- f"git clone --depth 10 {repo_url}.git",
28
- shell=True,
27
+ ["git", "clone", "--depth", "10", f"{repo_url}.git"],
29
28
  capture_output=True,
30
29
  cwd=setup_settings.storage.cache_dir,
31
30
  )
@@ -36,8 +35,7 @@ def get_git_repo_from_remote() -> Path:
36
35
 
37
36
  def check_local_git_repo() -> bool:
38
37
  result = subprocess.run(
39
- "git config --get remote.origin.url",
40
- shell=True,
38
+ ["git", "config", "--get remote.origin.url"],
41
39
  capture_output=True,
42
40
  )
43
41
  result_str = result.stdout.decode().strip()
@@ -55,10 +53,9 @@ def check_local_git_repo() -> bool:
55
53
 
56
54
 
57
55
  def get_git_commit_hash(blob_hash: str, repo_dir: Path | None = None) -> str | None:
58
- command = f"git log --find-object={blob_hash} --pretty=format:%H"
56
+ command = ["git", "log", f"--find-object={blob_hash}", "--pretty=format:%H"]
59
57
  result = subprocess.run(
60
58
  command,
61
- shell=True,
62
59
  capture_output=True,
63
60
  cwd=repo_dir,
64
61
  )
@@ -68,7 +65,7 @@ def get_git_commit_hash(blob_hash: str, repo_dir: Path | None = None) -> str | N
68
65
  if commit_hash == "" or result.returncode == 1:
69
66
  return None
70
67
  else:
71
- assert (
68
+ assert ( # noqa: S101
72
69
  len(commit_hash) == 40
73
70
  ), f"commit hash |{commit_hash}| is not 40 characters long"
74
71
  return commit_hash
@@ -82,21 +79,34 @@ def get_filepath_within_git_repo(
82
79
  # from anywhere in the repo, hence, let's get the root
83
80
  repo_root = (
84
81
  subprocess.run(
85
- "git rev-parse --show-toplevel",
86
- shell=True,
82
+ ["git", "rev-parse", "--show-toplevel"],
87
83
  capture_output=True,
88
84
  cwd=repo_dir,
89
85
  )
90
86
  .stdout.decode()
91
87
  .strip()
92
88
  )
93
- command = f"git ls-tree -r {commit_hash} | grep -E {blob_hash}"
89
+ # Run the git commands separately to circumvent spawning a shell
90
+ git_command = ["git", "ls-tree", "-r", commit_hash]
91
+ git_process = subprocess.Popen(
92
+ git_command,
93
+ stdout=subprocess.PIPE,
94
+ cwd=repo_root,
95
+ )
96
+
97
+ grep_command = ["grep", "-E", blob_hash]
94
98
  result = subprocess.run(
95
- command,
96
- shell=True,
99
+ grep_command,
100
+ stdin=git_process.stdout,
97
101
  capture_output=True,
98
102
  cwd=repo_root,
99
103
  )
104
+
105
+ # Close the stdout to allow git_process to receive a SIGPIPE if grep_command exits
106
+ git_process.stdout.close()
107
+ git_process.wait()
108
+
109
+ command = " ".join(git_command) + " | " + " ".join(grep_command)
100
110
  if result.returncode != 0 and result.stderr.decode() != "":
101
111
  raise RuntimeError(f"{command}\n{result.stderr.decode()}")
102
112
  if len(result.stdout.decode()) == 0:
@@ -15,7 +15,11 @@ def track_environment(run: Run) -> None:
15
15
  # create a requirements.txt
16
16
  # we don't create a conda environment.yml mostly for its slowness
17
17
  try:
18
- result = subprocess.run(f"pip freeze > {str(filepath)}", shell=True)
18
+ with open(filepath, "w") as f:
19
+ result = subprocess.run(
20
+ ["pip", "freeze"],
21
+ stdout=f,
22
+ )
19
23
  except OSError as e:
20
24
  result = None
21
25
  logger.warning(f"could not run pip freeze with error {e}")
@@ -185,8 +185,6 @@ def anndata_mouse_sc_lymph_node(
185
185
 
186
186
  verbosity = ln.settings.verbosity
187
187
  ln.settings.verbosity = "error"
188
- auto_save_parents = bt.settings.auto_save_parents
189
- bt.settings.auto_save_parents = False
190
188
  # strain
191
189
  bt.ExperimentalFactor.from_public(ontology_id="EFO:0004472").save()
192
190
  # developmental stage
@@ -215,7 +213,6 @@ def anndata_mouse_sc_lymph_node(
215
213
  labels += [ln.ULabel(name=name) for name in adata.obs[col]]
216
214
  ln.save(labels)
217
215
  ln.settings.verbosity = verbosity
218
- bt.settings.auto_save_parents = auto_save_parents
219
216
 
220
217
  return adata
221
218
 
@@ -313,8 +310,6 @@ def anndata_human_immune_cells(
313
310
 
314
311
  verbosity = ln.settings.verbosity
315
312
  ln.settings.verbosity = "error"
316
- auto_save_parents = bt.settings.auto_save_parents
317
- bt.settings.auto_save_parents = False
318
313
  ln.save(
319
314
  bt.Gene.from_values(
320
315
  adata.var.index, field="ensembl_gene_id", organism="human"
@@ -331,7 +326,6 @@ def anndata_human_immune_cells(
331
326
  bt.ExperimentalFactor.from_public(ontology_id="EFO:0008913").save()
332
327
  ln.save([ln.ULabel(name=name) for name in adata.obs.donor.unique()])
333
328
  ln.settings.verbosity = verbosity
334
- bt.settings.auto_save_parents = auto_save_parents
335
329
  return adata
336
330
 
337
331
 
lamindb/core/fields.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Fields.
2
2
 
3
- The field accessor of a :class:`~lamindb.core.Registry`:
3
+ The field accessor of a :class:`~lamindb.core.Record`:
4
4
 
5
5
  .. autosummary::
6
6
  :toctree: .
lamindb/core/schema.py CHANGED
@@ -1,10 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from django.db.models import ManyToManyField
4
- from lnschema_core.models import Feature, FeatureSet, LinkORM, Registry
4
+ from lnschema_core.models import Feature, FeatureSet, LinkORM, Record
5
5
 
6
6
 
7
- def dict_schema_name_to_model_name(orm: type[Registry]) -> dict[str, Registry]:
7
+ def dict_schema_name_to_model_name(orm: type[Record]) -> dict[str, Record]:
8
8
  d: dict = {
9
9
  i.related_model.__get_name_with_schema__(): i.related_model
10
10
  for i in orm._meta.related_objects
@@ -21,9 +21,9 @@ def dict_schema_name_to_model_name(orm: type[Registry]) -> dict[str, Registry]:
21
21
 
22
22
 
23
23
  def dict_related_model_to_related_name(
24
- orm: type[Registry], links: bool = False
24
+ orm: type[Record], links: bool = False
25
25
  ) -> dict[str, str]:
26
- def include(model: Registry):
26
+ def include(model: Record):
27
27
  return not links != issubclass(model, LinkORM)
28
28
 
29
29
  related_objects = orm._meta.related_objects + orm._meta.many_to_many
@@ -39,7 +39,7 @@ def dict_related_model_to_related_name(
39
39
  return d
40
40
 
41
41
 
42
- def get_related_name(features_type: type[Registry]) -> str:
42
+ def get_related_name(features_type: type[Record]) -> str:
43
43
  candidates = [
44
44
  field.related_name
45
45
  for field in FeatureSet._meta.related_objects
@@ -49,7 +49,7 @@ def get_related_name(features_type: type[Registry]) -> str:
49
49
  raise ValueError(
50
50
  f"Can't create feature sets from {features_type.__name__} because it's not"
51
51
  " related to it!\nYou need to create a link model between FeatureSet and"
52
- " your Registry in your custom schema.\nTo do so, add a"
52
+ " your Record in your custom schema.\nTo do so, add a"
53
53
  " line:\nfeature_sets = models.ManyToMany(FeatureSet,"
54
54
  " related_name='mythings')\n"
55
55
  )
@@ -28,6 +28,8 @@ if TYPE_CHECKING:
28
28
  from pathlib import Path
29
29
 
30
30
  from fsspec.core import OpenFile
31
+ from tiledbsoma import Collection as SOMACollection
32
+ from tiledbsoma import Experiment as SOMAExperiment
31
33
 
32
34
  anndata_version_parse = version.parse(anndata_version)
33
35
 
@@ -100,7 +102,7 @@ def _records_to_df(obj):
100
102
  return obj
101
103
 
102
104
 
103
- class AccessRegistry:
105
+ class AccessRecord:
104
106
  def __init__(self):
105
107
  self._registry = {}
106
108
  self._openers = {}
@@ -141,7 +143,7 @@ class AccessRegistry:
141
143
 
142
144
 
143
145
  # storage specific functions should be registered and called through the registry
144
- registry = AccessRegistry()
146
+ registry = AccessRecord()
145
147
 
146
148
 
147
149
  @registry.register_open("h5py")
@@ -207,8 +209,10 @@ def safer_read_partial(elem, indices):
207
209
  try:
208
210
  ds = CSRDataset(elem)
209
211
  result = _subset_sparse(ds, indices)
210
- except Exception:
211
- pass
212
+ except Exception as e:
213
+ logger.debug(
214
+ f"Encountered an exception while attempting to subset a sparse dataset by indices.\n{e}"
215
+ )
212
216
  if result is None:
213
217
  raise ValueError(
214
218
  "Can not get a subset of the element of type"
@@ -305,8 +309,10 @@ if ZARR_INSTALLED:
305
309
  try:
306
310
  ds = CSRDataset(elem)
307
311
  return _subset_sparse(ds, indices)
308
- except Exception:
309
- pass
312
+ except Exception as e:
313
+ logger.debug(
314
+ f"Encountered an exception while attempting to subset a sparse dataset by indices.\n{e}"
315
+ )
310
316
  raise ValueError(
311
317
  "Can not get a subset of the element of type"
312
318
  f" {type(elem).__name__} with an empty spec."
@@ -734,24 +740,62 @@ class BackedAccessor:
734
740
 
735
741
  def backed_access(
736
742
  artifact_or_filepath: Artifact | Path, using_key: str | None = None
737
- ) -> AnnDataAccessor | BackedAccessor:
743
+ ) -> AnnDataAccessor | BackedAccessor | SOMACollection | SOMAExperiment:
738
744
  if isinstance(artifact_or_filepath, Artifact):
739
745
  filepath = filepath_from_artifact(artifact_or_filepath, using_key=using_key)
740
746
  else:
741
747
  filepath = artifact_or_filepath
742
748
  name = filepath.name
749
+ suffix = filepath.suffix
750
+
751
+ if name == "soma" or suffix == ".tiledbsoma":
752
+ try:
753
+ import tiledbsoma as soma
754
+ except ImportError as e:
755
+ raise ImportError(
756
+ "Please install tiledbsoma: pip install tiledbsoma"
757
+ ) from e
758
+ filepath_str = filepath.as_posix()
759
+ if filepath.protocol == "s3":
760
+ from lamindb_setup.core._settings_storage import get_storage_region
761
+
762
+ region = get_storage_region(filepath_str)
763
+ tiledb_config = {"vfs.s3.region": region}
764
+ storage_options = filepath.storage_options
765
+ if "key" in storage_options:
766
+ tiledb_config["vfs.s3.aws_access_key_id"] = storage_options["key"]
767
+ if "secret" in storage_options:
768
+ tiledb_config["vfs.s3.aws_secret_access_key"] = storage_options[
769
+ "secret"
770
+ ]
771
+ if "token" in storage_options:
772
+ tiledb_config["vfs.s3.aws_session_token"] = storage_options["token"]
773
+ ctx = soma.SOMATileDBContext(tiledb_config=tiledb_config)
774
+ # this is a strange bug
775
+ # for some reason iterdir futher gives incorrect results
776
+ # if cache is not invalidated
777
+ # instead of obs and ms it gives ms and ms in the list of names
778
+ filepath.fs.invalidate_cache()
779
+ else:
780
+ ctx = None
743
781
 
744
- if filepath.suffix in (".h5", ".hdf5", ".h5ad"):
782
+ soma_objects = [obj.name for obj in filepath.iterdir()]
783
+ if "obs" in soma_objects and "ms" in soma_objects:
784
+ SOMAType = soma.Experiment
785
+ else:
786
+ SOMAType = soma.Collection
787
+ return SOMAType.open(filepath_str, context=ctx)
788
+ elif suffix in {".h5", ".hdf5", ".h5ad"}:
745
789
  conn, storage = registry.open("h5py", filepath)
746
- elif filepath.suffix == ".zarr":
790
+ elif suffix == ".zarr":
747
791
  conn, storage = registry.open("zarr", filepath)
748
792
  else:
749
793
  raise ValueError(
750
- "object should have .h5, .hdf5, .h5ad, .zarr suffix, not"
751
- f" {filepath.suffix}."
794
+ "object should have .h5, .hdf5, .h5ad, .zarr, .tiledbsoma suffix, not"
795
+ f" {suffix}."
752
796
  )
753
797
 
754
- if filepath.suffix == ".h5ad":
798
+ if suffix == ".h5ad":
755
799
  return AnnDataAccessor(conn, storage, name)
756
800
  else:
757
801
  if get_spec(storage).encoding_type == "anndata":
@@ -47,7 +47,7 @@ def auto_storage_key_from_artifact(artifact: Artifact):
47
47
 
48
48
 
49
49
  def auto_storage_key_from_artifact_uid(uid: str, suffix: str, is_dir: bool) -> str:
50
- assert isinstance(suffix, str)
50
+ assert isinstance(suffix, str) # noqa: S101 Suffix cannot be None.
51
51
  if is_dir:
52
52
  uid_storage = uid[:16] # 16 chars, leave 4 chars for versioning
53
53
  else:
@@ -97,7 +97,7 @@ def get_uid_from_old_version(
97
97
  version: str | None = None,
98
98
  using_key: str | None = None,
99
99
  ) -> tuple[str, str]:
100
- """{}."""
100
+ """{}""" # noqa: D415
101
101
  msg = ""
102
102
  if is_new_version_of.version is None:
103
103
  previous_version = "1"
@@ -39,9 +39,10 @@ def save_vitessce_config(vitessce_config: VitessceConfig, description: str) -> A
39
39
  if "url" not in file:
40
40
  raise ValueError("Each file must have a 'url' key.")
41
41
  filename = file["url"].split("/")[-1]
42
- assert filename.endswith(
43
- (".anndata.zarr", ".spatialdata.zarr", ".ome.zarr")
44
- )
42
+ if not filename.endswith((".anndata.zarr", ".zarr", ".ome.zarr")):
43
+ logger.warning(
44
+ "filename should end with '.anndata.zarr', '.zarr', or '.ome.zarr'."
45
+ )
45
46
  filestem = (
46
47
  filename.replace(".anndata.zarr", "")
47
48
  .replace(".spatialdata.zarr", "")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamindb
3
- Version: 0.74.1
3
+ Version: 0.74.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,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.70.0
13
- Requires-Dist: lamindb_setup==0.73.2
12
+ Requires-Dist: lnschema_core==0.70.5
13
+ Requires-Dist: lamindb_setup==0.74.2
14
14
  Requires-Dist: lamin_utils==0.13.2
15
- Requires-Dist: lamin_cli==0.14.0
15
+ Requires-Dist: lamin_cli==0.15.0
16
16
  Requires-Dist: rapidfuzz
17
17
  Requires-Dist: pyarrow
18
18
  Requires-Dist: typing_extensions!=4.6.0
@@ -23,10 +23,8 @@ Requires-Dist: fsspec
23
23
  Requires-Dist: pandas
24
24
  Requires-Dist: graphviz
25
25
  Requires-Dist: psycopg2-binary
26
- Requires-Dist: psutil
27
26
  Requires-Dist: lamindb_setup[aws] ; extra == "aws"
28
- Requires-Dist: bionty==0.44.0 ; extra == "bionty"
29
- Requires-Dist: pandas<2 ; extra == "dev"
27
+ Requires-Dist: bionty==0.44.3 ; extra == "bionty"
30
28
  Requires-Dist: pre-commit ; extra == "dev"
31
29
  Requires-Dist: nox ; extra == "dev"
32
30
  Requires-Dist: laminci>=0.3 ; extra == "dev"
@@ -39,7 +37,7 @@ Requires-Dist: faker-biology ; extra == "dev"
39
37
  Requires-Dist: django-schema-graph ; extra == "erdiagram"
40
38
  Requires-Dist: readfcs>=1.1.8 ; extra == "fcs"
41
39
  Requires-Dist: lamindb_setup[gcp] ; extra == "gcp"
42
- Requires-Dist: nbproject==0.10.3 ; extra == "jupyter"
40
+ Requires-Dist: nbproject==0.10.4 ; extra == "jupyter"
43
41
  Requires-Dist: nbstripout==0.6.1 ; extra == "jupyter"
44
42
  Requires-Dist: nbconvert ; extra == "jupyter"
45
43
  Requires-Dist: zarr>=2.16.0 ; extra == "zarr"
@@ -0,0 +1,57 @@
1
+ lamindb/__init__.py,sha256=VfwmNQfCefzn3jsRS2l3fnV7jub1RpMj4aVCFh09vxI,2249
2
+ lamindb/_artifact.py,sha256=pdSMBuZnlr-Jfot8p90x7TEbto-viXyryax5p1FljEs,40133
3
+ lamindb/_can_validate.py,sha256=CUu-lBY9XnSYGWiazYhLMW5H0LuuR86mVbU7UnIZTVU,15010
4
+ lamindb/_collection.py,sha256=P4UjZxC2OcViTmqSeW3NIiXU3C0ZF5BF9P6YcchS2Zg,14617
5
+ lamindb/_curate.py,sha256=i3pqkNvgXtOXXmw7zPgnr7BT3KnZDBw8DyxuyPkhwbo,44898
6
+ lamindb/_feature.py,sha256=hLj5KDhIVkZrIa7IbiHGyUBGZS7PeDNxKsNK1EadBAc,7377
7
+ lamindb/_feature_set.py,sha256=nsiT9mKfEJdh2yqihOawfFL0mkHRNi5-9vxRllv5NAM,8137
8
+ lamindb/_filter.py,sha256=Ed9k-LOkr1BwqeHpvaEe0w27cG7Bu0BaXPDA0OIzUpQ,1410
9
+ lamindb/_finish.py,sha256=FRGN2cmBbZqmxr803YIpGGUaqst8xBTi3kmliV5oJo4,10504
10
+ lamindb/_from_values.py,sha256=SGTQNb0M1h3icuYsfIIjqI7xNy3i3Frw_-PAl5MXMBo,13860
11
+ lamindb/_is_versioned.py,sha256=8pXW2gkLTZsTxRERuWZLidiagNIC8evmCmnbztWkVQ4,1343
12
+ lamindb/_parents.py,sha256=Zgi9Lmw9td18Y0QJ96rYaBrjSaZ8XGcseWdbJkpJhFU,15061
13
+ lamindb/_query_manager.py,sha256=6_ZqQr0SKTYsbMtJd5BmaMoyASIVel5v2F1KMgacWlU,4252
14
+ lamindb/_query_set.py,sha256=LM5NsAWy5FCZZSxX1VbE20RdA5nsyk4_5p4abuMjdcI,11662
15
+ lamindb/_record.py,sha256=5B0mMvEoZ0gZ6MALy6bsbDOVU47pkVEhRCBVwVJnNwg,19150
16
+ lamindb/_run.py,sha256=xj3ER4F_yWvuNw1mr0XU-QuIPi5hBO7Ue0ygBgJQ6mc,1887
17
+ lamindb/_save.py,sha256=xs1ZdTYGd78zA3XqXhiwZ_QKAogLdHCQv1EBVFDWCis,11020
18
+ lamindb/_storage.py,sha256=GBVChv-DHVMNEBJL5l_JT6B4RDhZ6NnwgzmUICphYKk,413
19
+ lamindb/_transform.py,sha256=E9C7psuOnsNrUQpWRuGgEUM8_pc7YhDn7n4ieHzB4X0,3169
20
+ lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
21
+ lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
22
+ lamindb/_view.py,sha256=_sAcSD06bC92R_LLDcHMhO0IfOqybBXXRYxOXvm1Juc,2322
23
+ lamindb/core/__init__.py,sha256=HtyYVFrS6RclSk7gZty9vgXU0k2_oZiqFPfqghBc4Fc,1415
24
+ lamindb/core/_data.py,sha256=yk2ozTt-mNIA8bWllmcC__WgFukj03fZU41rr_ultlM,16264
25
+ lamindb/core/_feature_manager.py,sha256=EvMoY9EAFGdbRkDR44YMJBMWBEt9IbtfZ0RHmiv0D58,31910
26
+ lamindb/core/_label_manager.py,sha256=udG70H1FucAr4lmtFMgAcMJiAcYvoZIyT034NO93YF8,9265
27
+ lamindb/core/_mapped_collection.py,sha256=SGUsR6RbjNzUOq6A6wTa4M4GkLMuP4Z70WOeF39WPCU,19618
28
+ lamindb/core/_run_context.py,sha256=w_LdfwYTncCZmh4agNPey37UdKrzSglLfLUNBe5z1mw,18421
29
+ lamindb/core/_settings.py,sha256=sDfIfq9H7H8nUE51FJF4EO_Zihlxh44S3GbaliHKJY4,6108
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=bbm-PeSy24qFcqh2HpucZWpwGAvk-TL_3FUoAPb3e3E,867
33
+ lamindb/core/fields.py,sha256=47Jmh3efUr5ZscgimR_yckY-I3cNf8ScLutbwKCK3j4,162
34
+ lamindb/core/schema.py,sha256=sNrzWnqeyh9Ppr7yImlSAXiHb_VJdB5DWuO-QERxQGY,1847
35
+ lamindb/core/types.py,sha256=xeQF2x40p2pR9eIVQrXT74RrS810z2fbjmTRTSQUqPM,230
36
+ lamindb/core/versioning.py,sha256=lz1JP3K-0npeSTZPY7kMVXqOOcB8IEGmdG0Si3kSdN8,4956
37
+ lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
38
+ lamindb/core/datasets/_core.py,sha256=NhMELgF4aR9HAlU37BF3FkPLobxinRbMJ8s6XwgIqEM,19549
39
+ lamindb/core/datasets/_fake.py,sha256=BZF9R_1iF0HDnvtZNqL2FtsjSMuqDIfuFxnw_LJYIh4,953
40
+ lamindb/core/storage/__init__.py,sha256=5LUFQKRr2BX24d-yWBezhTXBV83sShcOvPj5Y5u6qIg,441
41
+ lamindb/core/storage/_anndata_sizes.py,sha256=aXO3OB--tF5MChenSsigW6Q-RuE8YJJOUTVukkLrv9A,1029
42
+ lamindb/core/storage/_backed_access.py,sha256=4VmnqGd5DH6xJ5UQ7JMiQ2dfs-uLBnVlJXkZB8GcJHI,26624
43
+ lamindb/core/storage/_valid_suffixes.py,sha256=J08aglC9oo35pzahj0SQXW9IHib8Asp4dc11co-2uys,212
44
+ lamindb/core/storage/_zarr.py,sha256=5ceEz6YIvgvUnVVNWhK5Z4W0WfrvyvY82Yna5jSX1_E,3661
45
+ lamindb/core/storage/objects.py,sha256=OzvBCS-Urz5mr-O95qYt6RGBDDX5HmjfRRKWPPDn1ZE,1797
46
+ lamindb/core/storage/paths.py,sha256=IAtZTkYB0Q1vlVkx-7c-zBjQtlKVdwojemNgqVTOUC0,8255
47
+ lamindb/core/subsettings/__init__.py,sha256=KFHPzIE7f7Bj4RgMjGQF4CjTdHVG_VNFBrCndo49ixo,198
48
+ lamindb/core/subsettings/_creation_settings.py,sha256=54mfMH_osC753hpxcl7Dq1rwBD2LHnWveXtQpkLBITE,1194
49
+ lamindb/core/subsettings/_transform_settings.py,sha256=4YbCuZtJo6zdytl6UQR4GvdDkTtT6SRBqVzofGzNOt8,583
50
+ lamindb/integrations/__init__.py,sha256=aH2PmO2m4-vwIifMYTB0Fyyr_gZWtVnV71jT0tVWSw0,123
51
+ lamindb/integrations/_vitessce.py,sha256=VC80NKuzZ0FdjFxaLvyD78kAUNwvwBnGblSPDqT_mGQ,2737
52
+ lamindb/setup/__init__.py,sha256=OwZpZzPDv5lPPGXZP7-zK6UdO4FHvvuBh439yZvIp3A,410
53
+ lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
54
+ lamindb-0.74.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
55
+ lamindb-0.74.3.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
56
+ lamindb-0.74.3.dist-info/METADATA,sha256=v0qwjHuybQfWzw2juEC3T31Ot74DQtbjlUR2Rhzg4Yg,2669
57
+ lamindb-0.74.3.dist-info/RECORD,,
@@ -1,57 +0,0 @@
1
- lamindb/__init__.py,sha256=7wGOqqM6NyKeQG6qqir53qzUowWMRAd36tH5L874hd0,2182
2
- lamindb/_annotate.py,sha256=CScyKVB3k_x5p0pihxO1UrTFBCvPcSSjBXvGY3YgTLs,44381
3
- lamindb/_artifact.py,sha256=zVNBF7y-rARGG78Z2d2dI2J0Tg_5yeZL-GfogzBB7xY,40456
4
- lamindb/_can_validate.py,sha256=s1q0lxplqnhytrVgArBTm05XKMMmpreK0ZlVCsd2jjk,14849
5
- lamindb/_collection.py,sha256=AGiztgM_OIet617aF86muL6lIv6GEDcmXorize6V62U,14657
6
- lamindb/_feature.py,sha256=Z_Awtsj183SA1egZgNmJI_dH04rqXAj72od3H6n0uBk,7398
7
- lamindb/_feature_set.py,sha256=ZAFLyIiWC6yPOFTF7K03olE2Rl3KthsV-1ttqJySzqQ,8106
8
- lamindb/_filter.py,sha256=jEA1n1Hi6lEPaD0JXiTSh9K4joGzWU6Yxy0LCLTiOdY,1422
9
- lamindb/_finish.py,sha256=WkFvZ0DijW9fRIsjyoxcAC4ehan_B0C8Fqoz9ZON19A,10213
10
- lamindb/_from_values.py,sha256=Sq1NdjsqReih8aUR-JHZ09pxHdqL8rY-cZFHo078OJw,13886
11
- lamindb/_is_versioned.py,sha256=0PgRCmxEmYDcAjllLSOYZm132B1lW6QgmBBERhRyFt0,1341
12
- lamindb/_parents.py,sha256=kb5AHkntpTP5g2lk1aPL0FmIilYZYVZvj6stddFOI40,15075
13
- lamindb/_query_manager.py,sha256=TjiwtX5CErEV58WyUFJ76p0riuPDODf8LGXo48aR9Fg,4236
14
- lamindb/_query_set.py,sha256=q3C0gdfassidngMteGHuOlhHmt_3VXEGOwblRDInxpA,11626
15
- lamindb/_registry.py,sha256=C_QKBAOhFj_pROBLUlieiPYWljd5ThPpTXunAekCQe8,18764
16
- lamindb/_run.py,sha256=xj3ER4F_yWvuNw1mr0XU-QuIPi5hBO7Ue0ygBgJQ6mc,1887
17
- lamindb/_save.py,sha256=It4XO448D8NG2cReo9Xy0lQBQdkMm_rCx_TGD1qZWWc,11864
18
- lamindb/_storage.py,sha256=8wRefV-Klu6VBVtwcwppvTojeXnxRThaBdFniA0AEIw,400
19
- lamindb/_transform.py,sha256=E9C7psuOnsNrUQpWRuGgEUM8_pc7YhDn7n4ieHzB4X0,3169
20
- lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
21
- lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
22
- lamindb/_view.py,sha256=NdWWF75rmkCHefqBViUnsHLu3OViJ1z_bEvfcedydsw,2330
23
- lamindb/core/__init__.py,sha256=RDtvov8NkPTNT4Lhs1KWTd2s4eQsPBH0s3fQRNJQCZA,1375
24
- lamindb/core/_data.py,sha256=u6eYlDOnLuwFMRsyg97qoIushwbHhwoQT-zjEL7p8VU,16241
25
- lamindb/core/_feature_manager.py,sha256=OQ14OONCRecqVatNm5kALh5LuhWqKrwoMNPJ_qHtGhw,31372
26
- lamindb/core/_label_manager.py,sha256=d9r3tiNDFbpZQmxE1jmgdgnMYPOfTPpAKGKtRRLmVj8,9640
27
- lamindb/core/_mapped_collection.py,sha256=_OwFZh5SePDUD70XIK5kngv3we_Z5-YdGHNfpUSatSQ,19469
28
- lamindb/core/_run_context.py,sha256=ybGgrzGBy9kOyQNH1bPaMixXZNmZGynAP1eO6Zwtp4A,18393
29
- lamindb/core/_settings.py,sha256=HIuCC9xEVo_3o-uogZlN-6oQVs92EWmaqBJWAdGKj5o,6009
30
- lamindb/core/_sync_git.py,sha256=5Fb82eG1WYyBlfMRCMlcUZNTVk70UU_SPnfvYEBL-A8,4124
31
- lamindb/core/_track_environment.py,sha256=xLZ6kgzxWS6MWZ5LQ_wkbJX99vmYOT8iQ-Fz4OHCgWw,754
32
- lamindb/core/exceptions.py,sha256=bbm-PeSy24qFcqh2HpucZWpwGAvk-TL_3FUoAPb3e3E,867
33
- lamindb/core/fields.py,sha256=Jgi_XI-iTe6cT7oD8FV_JqEpjN1Q9rZWwL8VLtj4jkA,164
34
- lamindb/core/schema.py,sha256=BbG7JGrXVLwEX_6eQb8ouJc9Q-MgazwqHvAM5dtrWtM,1861
35
- lamindb/core/types.py,sha256=xeQF2x40p2pR9eIVQrXT74RrS810z2fbjmTRTSQUqPM,230
36
- lamindb/core/versioning.py,sha256=zbp3wAWOqU1uDF9wRrpaS9JfmRglUQtVHvFpWWoJHZk,4943
37
- lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
38
- lamindb/core/datasets/_core.py,sha256=11vsIRREU7TvjwkL2htJWAGoBNCmG2qz8ps4Bd4SNLQ,19873
39
- lamindb/core/datasets/_fake.py,sha256=BZF9R_1iF0HDnvtZNqL2FtsjSMuqDIfuFxnw_LJYIh4,953
40
- lamindb/core/storage/__init__.py,sha256=5LUFQKRr2BX24d-yWBezhTXBV83sShcOvPj5Y5u6qIg,441
41
- lamindb/core/storage/_anndata_sizes.py,sha256=aXO3OB--tF5MChenSsigW6Q-RuE8YJJOUTVukkLrv9A,1029
42
- lamindb/core/storage/_backed_access.py,sha256=eManrLsu3pSSQAyAKy47FDBm-iHgjaNfHA-zLy59uDs,24536
43
- lamindb/core/storage/_valid_suffixes.py,sha256=J08aglC9oo35pzahj0SQXW9IHib8Asp4dc11co-2uys,212
44
- lamindb/core/storage/_zarr.py,sha256=5ceEz6YIvgvUnVVNWhK5Z4W0WfrvyvY82Yna5jSX1_E,3661
45
- lamindb/core/storage/objects.py,sha256=OzvBCS-Urz5mr-O95qYt6RGBDDX5HmjfRRKWPPDn1ZE,1797
46
- lamindb/core/storage/paths.py,sha256=p5TsZUOfQAN_0kzpr0JO43hRKLc95IO5qSu5V12A8Ok,8218
47
- lamindb/core/subsettings/__init__.py,sha256=KFHPzIE7f7Bj4RgMjGQF4CjTdHVG_VNFBrCndo49ixo,198
48
- lamindb/core/subsettings/_creation_settings.py,sha256=54mfMH_osC753hpxcl7Dq1rwBD2LHnWveXtQpkLBITE,1194
49
- lamindb/core/subsettings/_transform_settings.py,sha256=4YbCuZtJo6zdytl6UQR4GvdDkTtT6SRBqVzofGzNOt8,583
50
- lamindb/integrations/__init__.py,sha256=aH2PmO2m4-vwIifMYTB0Fyyr_gZWtVnV71jT0tVWSw0,123
51
- lamindb/integrations/_vitessce.py,sha256=Qd39OuNsL0GXU7nMvEWLRRESFQ0mwGf_ePMJE_FDYm8,2639
52
- lamindb/setup/__init__.py,sha256=OwZpZzPDv5lPPGXZP7-zK6UdO4FHvvuBh439yZvIp3A,410
53
- lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
54
- lamindb-0.74.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
55
- lamindb-0.74.1.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
56
- lamindb-0.74.1.dist-info/METADATA,sha256=iQeRxSkzFqxjAVMnofcMWyBaYsXLEp5gIhDeP339GNI,2732
57
- lamindb-0.74.1.dist-info/RECORD,,