lamindb 0.75.0__py3-none-any.whl → 0.76.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.
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from pathlib import Path
4
+ from typing import TYPE_CHECKING
4
5
  from urllib.request import urlretrieve
5
6
 
6
7
  import anndata as ad
@@ -11,6 +12,9 @@ from upath import UPath
11
12
 
12
13
  from lamindb.core._settings import settings
13
14
 
15
+ if TYPE_CHECKING:
16
+ from mudata import MuData
17
+
14
18
 
15
19
  def file_fcs() -> Path:
16
20
  """Example FCS artifact."""
@@ -116,7 +120,7 @@ def file_mini_csv(in_storage_root=False) -> Path:
116
120
  return filepath
117
121
 
118
122
 
119
- def file_tiff_suo22(): # pragma: no cover
123
+ def file_tiff_suo22() -> Path: # pragma: no cover
120
124
  """Image file from Suo22.
121
125
 
122
126
  Pair with anndata_suo22_Visium10X
@@ -126,7 +130,7 @@ def file_tiff_suo22(): # pragma: no cover
126
130
  "F121_LP1_4LIV.tiff",
127
131
  )
128
132
  Path("suo22/").mkdir(exist_ok=True)
129
- filepath = Path(filepath).rename("suo22/F121_LP1_4LIV.tiff")
133
+ filepath = Path(filepath).rename("suo22/F121_LP1_4LIV.tiff") # type: ignore
130
134
  return Path(filepath)
131
135
 
132
136
 
@@ -282,17 +286,16 @@ def anndata_human_immune_cells(
282
286
  ) -> ad.AnnData: # pragma: no cover
283
287
  """Cross-tissue immune cell analysis reveals tissue-specific features in humans.
284
288
 
285
- From: https://cellxgene.cziscience.com/collections/62ef75e4-cbea-454e-a0ce-998ec40223d3 # noqa
289
+ From: https://cellxgene.cziscience.com/collections/62ef75e4-cbea-454e-a0ce-998ec40223d3
286
290
  Collection: Global
287
291
 
288
292
  To reproduce the subsample::
289
-
290
- adata = sc.read('Global.h5ad')
291
- adata.obs = adata.obs[['donor_id', 'tissue', 'cell_type', 'assay', 'tissue_ontology_term_id', 'cell_type_ontology_term_id', 'assay_ontology_term_id']].copy()
292
- sc.pp.subsample(adata, fraction=0.005)
293
- del adata.uns["development_cache_ontology_term_id_colors"]
294
- del adata.uns["sex_ontology_term_id_colors"]
295
- adata.write('human_immune.h5ad')
293
+ >>> adata = sc.read('Global.h5ad')
294
+ >>> adata.obs = adata.obs[['donor_id', 'tissue', 'cell_type', 'assay', 'tissue_ontology_term_id', 'cell_type_ontology_term_id', 'assay_ontology_term_id']].copy()
295
+ >>> sc.pp.subsample(adata, fraction=0.005)
296
+ >>> del adata.uns["development_cache_ontology_term_id_colors"]
297
+ >>> del adata.uns["sex_ontology_term_id_colors"]
298
+ >>> adata.write('human_immune.h5ad')
296
299
  """
297
300
  filepath, _ = urlretrieve("https://lamindb-test.s3.amazonaws.com/human_immune.h5ad")
298
301
  adata = ad.read_h5ad(filepath)
@@ -369,29 +372,34 @@ def anndata_suo22_Visium10X(): # pragma: no cover
369
372
  return ad.read_h5ad(filepath)
370
373
 
371
374
 
372
- def mudata_papalexi21_subset(): # pragma: no cover
375
+ def mudata_papalexi21_subset() -> MuData: # pragma: no cover
373
376
  """A subsetted mudata from papalexi21.
374
377
 
375
378
  To reproduce the subsetting:
376
- >>> !wget https://figshare.com/ndownloader/files/36509460
377
- >>> import mudata as md
378
- >>> import scanpy as sc
379
- >>> mdata = md.read_h5mu("36509460")
380
- >>> mdata = sc.pp.subsample(mdata, n_obs=200, copy=True)[0]
381
- >>> mdata[:, -300:].copy().write("papalexi21_subset_200x300_lamindb_demo_2023-07-25.h5mu") # noqa
379
+ >>> !wget https://figshare.com/ndownloader/files/36509460
380
+ >>> import mudata as md
381
+ >>> import scanpy as sc
382
+ >>> mdata = md.read_h5mu("36509460")
383
+ >>> mdata = sc.pp.subsample(mdata, n_obs=200, copy=True)[0]
384
+ >>> mdata[:, -300:].copy().write("papalexi21_subset_200x300_lamindb_demo_2023-07-25.h5mu")
382
385
  """
383
386
  import mudata as md
384
387
 
388
+ md.set_options(pull_on_update=False)
389
+
385
390
  filepath, _ = urlretrieve(
386
391
  "https://lamindb-test.s3.amazonaws.com/papalexi21_subset_200x300_lamindb_demo_2023-07-25.h5mu",
387
392
  "papalexi21_subset.h5mu",
388
393
  )
389
394
 
390
395
  mdata = md.read_h5mu(filepath)
396
+
397
+ mdata.pull_obs()
398
+
399
+ # The MuData object is malformed with duplicated information
400
+ # Drop all columns for the modalities and add them again correspondingly
391
401
  for mod in ["rna", "adt", "hto", "gdo"]:
392
- mdata[mod].obs.drop(
393
- mdata[mod].obs.columns, axis=1, inplace=True
394
- ) # Drop all columns
402
+ mdata[mod].obs.drop(mdata[mod].obs.columns, axis=1, inplace=True)
395
403
  for col in mdata.obs.columns:
396
404
  for mod in ["rna", "adt", "hto", "gdo"]:
397
405
  if col.endswith(f"_{mod.upper()}"):
@@ -420,12 +428,10 @@ def mudata_papalexi21_subset(): # pragma: no cover
420
428
  "HTO_classification",
421
429
  ]:
422
430
  del mdata.obs[col]
423
- mdata.update()
424
431
 
425
- mdata["rna"].obs["percent.mito"] = mdata.obs.pop("percent.mito")
432
+ mdata.push_obs(["percent.mito"], mods=["rna"], drop=True)
426
433
  mdata["hto"].obs["technique"] = "cell hashing"
427
434
  mdata["hto"].obs["technique"] = mdata["hto"].obs["technique"].astype("category")
428
- mdata.update()
429
435
 
430
436
  return mdata
431
437
 
lamindb/core/schema.py CHANGED
@@ -4,16 +4,16 @@ from django.db.models import ManyToManyField
4
4
  from lnschema_core.models import Feature, FeatureSet, LinkORM, Record
5
5
 
6
6
 
7
- def dict_schema_name_to_model_name(orm: type[Record]) -> dict[str, Record]:
7
+ def dict_schema_name_to_model_name(registry: type[Record]) -> dict[str, Record]:
8
8
  d: dict = {
9
9
  i.related_model.__get_name_with_schema__(): i.related_model
10
- for i in orm._meta.related_objects
10
+ for i in registry._meta.related_objects
11
11
  if i.related_name is not None
12
12
  }
13
13
  d.update(
14
14
  {
15
15
  i.related_model.__get_name_with_schema__(): i.related_model
16
- for i in orm._meta.many_to_many
16
+ for i in registry._meta.many_to_many
17
17
  if i.name is not None
18
18
  }
19
19
  )
@@ -21,12 +21,12 @@ def dict_schema_name_to_model_name(orm: type[Record]) -> dict[str, Record]:
21
21
 
22
22
 
23
23
  def dict_related_model_to_related_name(
24
- orm: type[Record], links: bool = False
24
+ registry: type[Record], links: bool = False
25
25
  ) -> dict[str, str]:
26
26
  def include(model: Record):
27
27
  return not links != issubclass(model, LinkORM)
28
28
 
29
- related_objects = orm._meta.related_objects + orm._meta.many_to_many
29
+ related_objects = registry._meta.related_objects + registry._meta.many_to_many
30
30
  d: dict = {
31
31
  record.related_model.__get_name_with_schema__(): (
32
32
  record.related_name
@@ -1,4 +1,13 @@
1
- """Storage tools.
1
+ """Storage API.
2
+
3
+ Valid suffixes.
4
+
5
+ .. autosummary::
6
+ :toctree: .
7
+
8
+ VALID_SUFFIXES
9
+
10
+ Array accessors.
2
11
 
3
12
  .. autosummary::
4
13
  :toctree: .
@@ -11,6 +20,6 @@ from lamindb_setup.core.upath import LocalPathClasses, UPath, infer_filesystem
11
20
 
12
21
  from ._anndata_sizes import size_adata
13
22
  from ._backed_access import AnnDataAccessor, BackedAccessor
14
- from ._valid_suffixes import VALID_COMPOSITE_SUFFIXES, VALID_SUFFIXES
23
+ from ._valid_suffixes import VALID_SUFFIXES
15
24
  from .objects import infer_suffix, write_to_disk
16
25
  from .paths import delete_storage, load_to_memory
@@ -1,5 +1,19 @@
1
- from lamindb_setup.core.upath import VALID_COMPOSITE_SUFFIXES, VALID_SUFFIXES
1
+ from lamindb_setup.core.upath import VALID_COMPOSITE_SUFFIXES, VALID_SIMPLE_SUFFIXES
2
2
 
3
3
  # add new composite suffixes like so
4
- VALID_COMPOSITE_SUFFIXES.update({".vitessce.json"})
4
+ VALID_COMPOSITE_SUFFIXES.update(
5
+ {
6
+ ".vitessce.json",
7
+ ".ome.zarr",
8
+ }
9
+ )
5
10
  # can do the same for simple valid suffixes
11
+
12
+
13
+ class VALID_SUFFIXES:
14
+ """Valid suffixes."""
15
+
16
+ SIMPLE: set[str] = VALID_SIMPLE_SUFFIXES
17
+ """Simple suffixes."""
18
+ COMPOSITE: set[str] = VALID_COMPOSITE_SUFFIXES
19
+ """Composite suffixes."""
@@ -72,7 +72,6 @@ def set_version(version: str | None = None, previous_version: str | None = None)
72
72
  return version
73
73
 
74
74
 
75
- # uses `initial_version_id` to extract a stem_id that's part of id
76
75
  def init_uid(
77
76
  *,
78
77
  version: str | None = None,
@@ -15,61 +15,98 @@ if TYPE_CHECKING:
15
15
  from vitessce import VitessceConfig
16
16
 
17
17
 
18
- # tested & context in https://github.com/laminlabs/lamin-spatial
19
- def save_vitessce_config(vitessce_config: VitessceConfig, description: str) -> Artifact:
18
+ # "unit test": https://github.com/laminlabs/lamindb/blob/main/docs/storage/vitessce.ipynb
19
+ # integration test & context: https://github.com/laminlabs/lamin-spatial/blob/main/docs/vitessce.ipynb
20
+ def save_vitessce_config(
21
+ vitessce_config: VitessceConfig, description: str | None = None
22
+ ) -> Artifact:
20
23
  """Validates and saves a ``VitessceConfig`` object.
21
24
 
22
- Example: :doc:`docs:vitessce`.
25
+ Guide: :doc:`docs:vitessce`.
23
26
 
24
27
  Args:
25
- vitessce_config (``VitessceConfig``): A VitessceConfig object.
26
- description: A description for the artifact.
28
+ vitessce_config (``VitessceConfig``): A `VitessceConfig` object.
29
+ description: A description for the `VitessceConfig` artifact.
27
30
 
31
+ .. versionchanged:: 0.75.1
32
+ Now displays the "Vitessce button" on the hub next to the dataset. It additionally keeps displaying it next to the configuration file.
28
33
  .. versionchanged:: 0.70.2
29
- This function no longer saves the dataset. It only saves the VitessceConfig object.
34
+ No longer saves the dataset. It only saves the `VitessceConfig` object.
30
35
  """
36
+ # can only import here because vitessce is not a dependency
37
+ from vitessce import VitessceConfig
38
+
39
+ from lamindb.core.storage import VALID_SUFFIXES
40
+
41
+ assert isinstance(vitessce_config, VitessceConfig) # noqa: S101
31
42
  vc_dict = vitessce_config.to_dict()
43
+ valid_composite_zarr_suffixes = [
44
+ suffix for suffix in VALID_SUFFIXES.COMPOSITE if suffix.endswith(".zarr")
45
+ ]
32
46
  # validate
33
- datasets = vc_dict["datasets"]
34
- input_artifacts = []
35
- for dataset in datasets:
36
- if "files" not in dataset:
37
- raise ValueError("Each dataset must have a 'files' key.")
38
- for file in dataset["files"]:
47
+ dataset_artifacts = []
48
+ assert vc_dict["datasets"] # noqa: S101
49
+ for vitessce_dataset in vc_dict["datasets"]:
50
+ # didn't find good ways to violate the below, hence using plain asserts
51
+ # without user feedback
52
+ assert "files" in vitessce_dataset # noqa: S101
53
+ assert vitessce_dataset["files"] # noqa: S101
54
+ for file in vitessce_dataset["files"]:
39
55
  if "url" not in file:
40
56
  raise ValueError("Each file must have a 'url' key.")
41
- filename = file["url"].split("/")[-1]
42
- if not filename.endswith((".anndata.zarr", ".zarr", ".ome.zarr")):
43
- logger.warning(
44
- "filename should end with '.anndata.zarr', '.zarr', or '.ome.zarr'."
57
+ s3_path = file["url"]
58
+ s3_path_last_element = s3_path.split("/")[-1]
59
+ # note 1: the following parses the stem uid of the artifact from the S3 path
60
+ # there might be a better way of doing this in case the vitessce config
61
+ # gets updated in the future; but given these paths are set in stone
62
+ # this should be more robust than it looks
63
+ #
64
+ # note 2: what's not great is the fact that people might use composite suffixes we don't recognize
65
+ # I don't know what to do about it other than documenting it clearly
66
+ # https://github.com/laminlabs/lamindb/blob/main/lamindb/core/storage/_valid_suffixes.py
67
+ # https://docs.lamin.ai/lamindb.core.storage.valid_suffixes
68
+ #
69
+ # now start with attempting to strip the composite suffix candidates
70
+ for suffix in valid_composite_zarr_suffixes:
71
+ s3_path_last_element = s3_path_last_element.replace(suffix, "")
72
+ # in case there was no hit, strip plain ".zarr"
73
+ artifact_stem_uid = s3_path_last_element.replace(".zarr", "")
74
+ # if there is still a "." in string, we
75
+ if "." in artifact_stem_uid:
76
+ raise ValueError(
77
+ f"Suffix should be '.zarr' or one of {valid_composite_zarr_suffixes}. Inspect your path {s3_path}"
45
78
  )
46
- filestem = (
47
- filename.replace(".anndata.zarr", "")
48
- .replace(".spatialdata.zarr", "")
49
- .replace(".ome.zarr", "")
50
- )
51
- artifact = Artifact.filter(uid__startswith=filestem).one_or_none()
79
+ artifact = Artifact.filter(uid__startswith=artifact_stem_uid).one_or_none()
52
80
  if artifact is None:
53
- logger.warning(
54
- f"could not find dataset '{filestem}' in lamindb: {dataset}"
81
+ raise ValueError(
82
+ f"Could not find dataset with stem uid '{artifact_stem_uid}' in lamindb: {vitessce_dataset}. Did you follow https://docs.lamin.ai/vitessce? It appears the AWS S3 path doesn't encode a lamindb uid."
55
83
  )
56
84
  else:
57
- input_artifacts.append(artifact)
85
+ dataset_artifacts.append(artifact)
58
86
  # link inputs
59
87
  with logger.mute():
60
- transform = Transform(name="save_vitessce_config", type="function", version="1")
88
+ transform = Transform(name="save_vitessce_config", type="function", version="2")
61
89
  transform.save()
62
90
  run = Run(transform=transform)
63
91
  run.save()
64
- run.input_artifacts.set(input_artifacts)
92
+ if len(dataset_artifacts) > 1:
93
+ # if we have more datasets, we should create a collection
94
+ # and attach an action to the collection
95
+ raise NotImplementedError
96
+ run.input_artifacts.set(dataset_artifacts)
65
97
  # create a JSON export
66
98
  config_file_local_path = (
67
99
  ln_setup.settings.storage.cache_dir / "config.vitessce.json"
68
100
  )
69
101
  with open(config_file_local_path, "w") as file:
70
102
  json.dump(vc_dict, file)
71
- artifact = Artifact(config_file_local_path, description=description, run=run)
72
- artifact.save()
103
+ vitessce_config_artifact = Artifact(
104
+ config_file_local_path, description=description, run=run
105
+ ).save()
106
+ # we have one and only one dataset artifact, hence the following line is OK
107
+ dataset_artifacts[0]._actions.add(vitessce_config_artifact)
73
108
  slug = ln_setup.settings.instance.slug
74
- logger.important(f"go to: https://lamin.ai/{slug}/artifact/{artifact.uid}")
75
- return artifact
109
+ logger.important(
110
+ f"go to: https://lamin.ai/{slug}/artifact/{vitessce_config_artifact.uid}"
111
+ )
112
+ return vitessce_config_artifact
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamindb
3
- Version: 0.75.0
3
+ Version: 0.76.0
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.72.1
13
- Requires-Dist: lamindb_setup==0.76.2
12
+ Requires-Dist: lnschema_core==0.73.0
13
+ Requires-Dist: lamindb_setup==0.76.4
14
14
  Requires-Dist: lamin_utils==0.13.2
15
- Requires-Dist: lamin_cli==0.16.0
15
+ Requires-Dist: lamin_cli==0.16.1
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.47.1 ; extra == "bionty"
27
+ Requires-Dist: bionty==0.48.1 ; 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,29 +1,29 @@
1
- lamindb/__init__.py,sha256=Ua3SskTHYGZID5uI9cI_KyVS3h0f93U6rUqxHVAjUm8,2249
2
- lamindb/_artifact.py,sha256=pu0d2CuRkT4xP5hLpkrKlSPU3Maihmdk1B7VKu-cjj4,42575
3
- lamindb/_can_validate.py,sha256=R5xZtCiH_rHl_PyAD1cHDYzd-n53KDtWiEkis6VGKsE,16347
4
- lamindb/_collection.py,sha256=vrvuww4MLPx6qHqRWy6tLvRHOmXdvEjYN7dnG9DIIPU,14894
5
- lamindb/_curate.py,sha256=lN7O7cmV703VDDOemvSENc7Jr35pqfI916ctYG7Psdc,45455
6
- lamindb/_feature.py,sha256=hLj5KDhIVkZrIa7IbiHGyUBGZS7PeDNxKsNK1EadBAc,7377
1
+ lamindb/__init__.py,sha256=hMTLgL64GkHYHyLFHSCjR64xnvlZclrHKLlUWGuJ3i4,2249
2
+ lamindb/_artifact.py,sha256=z3hJL0A0NQFDf0hvWYt-hZG1nX_tXog9QKtXwCIZxqU,42627
3
+ lamindb/_can_validate.py,sha256=jPZHhtPaZJos5bL8Mk8ZNh34mItwYRwOynhofKUxwfY,17472
4
+ lamindb/_collection.py,sha256=PIKeRZ9zttKSyzcz8UMjKNihPO1Qe-E2zfr-Ao5wtJo,14943
5
+ lamindb/_curate.py,sha256=M42XxtcSKSo2Vh3xCio1UogVS0kCG1Dtx5cwEwnWOEM,55508
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
9
  lamindb/_finish.py,sha256=3rGY4RxhcKR1BIdgf6GPB03AArhlV5vYtD6wxtTHYxE,10817
10
- lamindb/_from_values.py,sha256=HwnH3Q0d80DswF2Bs0q6S02RVjbcQb-fCRzwBDwb3Q8,12831
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
13
  lamindb/_query_manager.py,sha256=6_ZqQr0SKTYsbMtJd5BmaMoyASIVel5v2F1KMgacWlU,4252
14
- lamindb/_query_set.py,sha256=LM5NsAWy5FCZZSxX1VbE20RdA5nsyk4_5p4abuMjdcI,11662
15
- lamindb/_record.py,sha256=Kv6dZhdbSo8NbOUXVwJ_ZY2P53NmBjdmUEMM7Xmvaoo,19076
16
- lamindb/_run.py,sha256=xj3ER4F_yWvuNw1mr0XU-QuIPi5hBO7Ue0ygBgJQ6mc,1887
17
- lamindb/_save.py,sha256=1A6NBy6Yp76fyc_5Sn7PMQZzwDHWu5KMVzqXrIt1hfg,11002
14
+ lamindb/_query_set.py,sha256=f2OAE9j6l6MGAXgKp5wr8bXB1KRzkye9UCp4utyNHeI,10581
15
+ lamindb/_record.py,sha256=PwelJVh5A0RMYa6o05wXvZU_gZyV8tPSILUW-M6m7lc,21195
16
+ lamindb/_run.py,sha256=5M_r1zGDv9HlqbqRKTWCYCOtENovJ-8mQ4kY7XqcLaU,1888
17
+ lamindb/_save.py,sha256=9lpFpQLgmPOp6JcoM9XetNkbYu2JgY70sGQZVz3Gzmw,11027
18
18
  lamindb/_storage.py,sha256=GBVChv-DHVMNEBJL5l_JT6B4RDhZ6NnwgzmUICphYKk,413
19
- lamindb/_transform.py,sha256=OtZmCSS-mxWPJU0S6p79sYauY-cKIxqBYfeMX0-SQ_A,3435
19
+ lamindb/_transform.py,sha256=Vw0Ct15nCOmL8-UwDs-hH-rgdX8PfcAadgbh_ynBzQE,3397
20
20
  lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
21
21
  lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
22
- lamindb/_view.py,sha256=_sAcSD06bC92R_LLDcHMhO0IfOqybBXXRYxOXvm1Juc,2322
23
- lamindb/core/__init__.py,sha256=HtyYVFrS6RclSk7gZty9vgXU0k2_oZiqFPfqghBc4Fc,1415
24
- lamindb/core/_data.py,sha256=LPfbWqTw3w5o_HygSg5V67hK7XFvbvv0QVzkk6kcFzY,16237
25
- lamindb/core/_feature_manager.py,sha256=NMC2SuIJJUJzgQjgupU2a0Gu6m0mjgnjbBf-hRXrO10,31585
26
- lamindb/core/_label_manager.py,sha256=5jbBF9aYPeeqpDZDimAXskGw76YUaQTQak6XAt6madU,9183
22
+ lamindb/_view.py,sha256=4Ln2ItTb3857PAI-70O8eJYqoTJ_NNFc7E_wds6OGns,2412
23
+ lamindb/core/__init__.py,sha256=uCtTkcUwJ7w40cWdaVBymiyxMuKlkdX-QZMtOr3k0us,1441
24
+ lamindb/core/_data.py,sha256=AbBVvutI7iFZW5PVEYzx0HIlaLhR9KpnoPyba9OI86k,16253
25
+ lamindb/core/_feature_manager.py,sha256=gJowe9-tifi0Z5IcChV-jtGYVdl6XgR2m_oswwhU17Y,31980
26
+ lamindb/core/_label_manager.py,sha256=OO5Tl-ankQZNrF_PQ7_xfkuJ8ytMUvr-9cL9soe1Ceo,9249
27
27
  lamindb/core/_mapped_collection.py,sha256=wN2qEXnKrx0kqblVml_Kx9hYomUAZLYKckGXX4-9dr0,19621
28
28
  lamindb/core/_run_context.py,sha256=bk4hwbGbx1no-JKVpLioIOU5dyO8YCdg-srbQV7UuGE,18371
29
29
  lamindb/core/_settings.py,sha256=sDfIfq9H7H8nUE51FJF4EO_Zihlxh44S3GbaliHKJY4,6108
@@ -31,17 +31,17 @@ lamindb/core/_sync_git.py,sha256=qc0yfPyKeG4uuNT_3qsv-mkIMqhLFqfXNeNVO49vV00,454
31
31
  lamindb/core/_track_environment.py,sha256=STzEVUzOeUEWdX7WDJUkKH4u08k7eupRX6AXQwoVt14,828
32
32
  lamindb/core/exceptions.py,sha256=rNLDlqDJt6stM_HGeE9qR0oWRNn4Kq0WDdIi85P53VA,1057
33
33
  lamindb/core/fields.py,sha256=47Jmh3efUr5ZscgimR_yckY-I3cNf8ScLutbwKCK3j4,162
34
- lamindb/core/schema.py,sha256=sNrzWnqeyh9Ppr7yImlSAXiHb_VJdB5DWuO-QERxQGY,1847
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=8fapNQmpxlUaiJG9oo9Y4I7xtFXzD077dMwzkeWTMMY,4965
36
+ lamindb/core/versioning.py,sha256=bDpD_UejR7Jr-DTsIvoVV3SyHNxIdjziJvCyUSskxNc,4898
37
37
  lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
38
- lamindb/core/datasets/_core.py,sha256=04mqj3IVIpY97HlD7VVL6-E6tf7za9suzE3lH07Z698,19564
38
+ lamindb/core/datasets/_core.py,sha256=DnAKMw1MzCrEcqYHoRSaqZYRnO1wwpykPS3YThMN9Es,19827
39
39
  lamindb/core/datasets/_fake.py,sha256=BZF9R_1iF0HDnvtZNqL2FtsjSMuqDIfuFxnw_LJYIh4,953
40
- lamindb/core/storage/__init__.py,sha256=pLF8maqC18zrzIwbQZmBCmJJm34io7ECPDjdrb0-FMw,442
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=J08aglC9oo35pzahj0SQXW9IHib8Asp4dc11co-2uys,212
44
+ lamindb/core/storage/_valid_suffixes.py,sha256=9erE4FX1ArRoTkvn5pzUmlKQSYnKeQBymOnOPCv2TD4,465
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
@@ -49,10 +49,10 @@ lamindb/core/subsettings/__init__.py,sha256=KFHPzIE7f7Bj4RgMjGQF4CjTdHVG_VNFBrCn
49
49
  lamindb/core/subsettings/_creation_settings.py,sha256=54mfMH_osC753hpxcl7Dq1rwBD2LHnWveXtQpkLBITE,1194
50
50
  lamindb/core/subsettings/_transform_settings.py,sha256=4YbCuZtJo6zdytl6UQR4GvdDkTtT6SRBqVzofGzNOt8,583
51
51
  lamindb/integrations/__init__.py,sha256=MoLRD_qqX5WHFUAqHL6zoY_cDkWH0zimaGT_1CyXKnk,124
52
- lamindb/integrations/_vitessce.py,sha256=VC80NKuzZ0FdjFxaLvyD78kAUNwvwBnGblSPDqT_mGQ,2737
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.75.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
56
- lamindb-0.75.0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
57
- lamindb-0.75.0.dist-info/METADATA,sha256=JH3tndNGYawedC8nYQRkX60azWmKmUKmRuxNn0sZOkg,2669
58
- lamindb-0.75.0.dist-info/RECORD,,
55
+ lamindb-0.76.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
56
+ lamindb-0.76.0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
57
+ lamindb-0.76.0.dist-info/METADATA,sha256=5NduEIMIlIq6hW-MADbfFtJKsuxY5JZGQwlBO5WZxUQ,2669
58
+ lamindb-0.76.0.dist-info/RECORD,,