lamindb 0.76.12__py3-none-any.whl → 0.76.14__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.
@@ -26,32 +26,19 @@ if TYPE_CHECKING:
26
26
 
27
27
  from lamindb._query_set import QuerySet
28
28
 
29
+ LABELS_EXCLUDE_SET = {"feature_sets"}
29
30
 
30
- def get_labels_as_dict(self: Artifact | Collection, links: bool = False):
31
- exclude_set = {
32
- "feature_sets",
33
- "artifacts",
34
- "input_of_runs",
35
- "collections",
36
- "_source_code_artifact_of",
37
- "_report_of",
38
- "_environment_of",
39
- "links_collection",
40
- "links_artifact",
41
- "links_feature_set",
42
- "previous_runs",
43
- "_feature_values",
44
- "_action_targets",
45
- "_lnschema_core_collection__actions_+", # something seems off with this one
46
- "_actions",
47
- }
31
+
32
+ def get_labels_as_dict(
33
+ self: Artifact | Collection, links: bool = False, instance: str | None = None
34
+ ) -> dict:
48
35
  labels = {} # type: ignore
49
36
  if self.id is None:
50
37
  return labels
51
38
  for related_model_name, related_name in dict_related_model_to_related_name(
52
- self.__class__, links=links
39
+ self.__class__, links=links, instance=instance
53
40
  ).items():
54
- if related_name not in exclude_set:
41
+ if related_name not in LABELS_EXCLUDE_SET and not related_name.startswith("_"):
55
42
  labels[related_name] = (
56
43
  related_model_name,
57
44
  getattr(self, related_name).all(),
@@ -86,18 +73,15 @@ def print_labels(
86
73
  labels_msg = _print_labels_postgres(self, m2m_data, print_types)
87
74
  else:
88
75
  labels_msg = ""
89
- for related_name, (related_model, labels) in get_labels_as_dict(self).items():
90
- # there is a try except block here to deal with schema inconsistencies
91
- # during transfer between instances
92
- try:
93
- field = get_name_field(labels)
94
- labels_list = list(labels.values_list(field, flat=True))
95
- if len(labels_list) > 0:
96
- print_values = _print_values(labels_list, n=10)
97
- type_str = f": {related_model}" if print_types else ""
98
- labels_msg += f" .{related_name}{type_str} = {print_values}\n"
99
- except Exception: # noqa: S112
100
- continue
76
+ for related_name, (related_model, labels) in get_labels_as_dict(
77
+ self, instance=self._state.db
78
+ ).items():
79
+ field = get_name_field(labels)
80
+ labels_list = list(labels.values_list(field, flat=True))
81
+ if len(labels_list) > 0:
82
+ print_values = _print_values(labels_list, n=10)
83
+ type_str = f": {related_model}" if print_types else ""
84
+ labels_msg += f" .{related_name}{type_str} = {print_values}\n"
101
85
 
102
86
  msg = ""
103
87
  if labels_msg:
@@ -214,75 +198,89 @@ class LabelManager:
214
198
  >>> artifact1.ulabels.set(labels)
215
199
  >>> artifact2.labels.add_from(artifact1)
216
200
  """
217
- from django.db.utils import ProgrammingError
218
-
219
201
  if transfer_logs is None:
220
202
  transfer_logs = {"mapped": [], "transferred": [], "run": None}
221
203
  using_key = settings._using_key
222
- for related_name, (_, labels) in get_labels_as_dict(data).items():
204
+ for related_name, (_, labels) in get_labels_as_dict(
205
+ data, instance=self._host._state.db
206
+ ).items():
223
207
  labels = labels.all()
224
- try:
225
- if not labels.exists():
226
- continue
227
- # look for features
228
- data_name_lower = data.__class__.__name__.lower()
229
- labels_by_features = defaultdict(list)
230
- features = set()
231
- _, new_labels = validate_labels(labels)
232
- if len(new_labels) > 0:
233
- transfer_fk_to_default_db_bulk(
234
- new_labels, using_key, transfer_logs=transfer_logs
208
+ if not labels.exists():
209
+ continue
210
+ # look for features
211
+ data_name_lower = data.__class__.__name__.lower()
212
+ labels_by_features = defaultdict(list)
213
+ features = set()
214
+ _, new_labels = validate_labels(labels)
215
+ if len(new_labels) > 0:
216
+ transfer_fk_to_default_db_bulk(
217
+ new_labels, using_key, transfer_logs=transfer_logs
218
+ )
219
+ for label in labels:
220
+ # if the link table doesn't follow this convention, we'll ignore it
221
+ if not hasattr(label, f"links_{data_name_lower}"):
222
+ key = None
223
+ else:
224
+ link = getattr(label, f"links_{data_name_lower}").get(
225
+ **{f"{data_name_lower}_id": data.id}
235
226
  )
236
- for label in labels:
237
- # if the link table doesn't follow this convention, we'll ignore it
238
- if not hasattr(label, f"links_{data_name_lower}"):
239
- key = None
227
+ if link.feature is not None:
228
+ features.add(link.feature)
229
+ key = link.feature.name
240
230
  else:
241
- link = getattr(label, f"links_{data_name_lower}").get(
242
- **{f"{data_name_lower}_id": data.id}
243
- )
244
- if link.feature is not None:
245
- features.add(link.feature)
246
- key = link.feature.name
247
- else:
248
- key = None
249
- label_returned = transfer_to_default_db(
250
- label,
231
+ key = None
232
+ label_returned = transfer_to_default_db(
233
+ label,
234
+ using_key,
235
+ transfer_logs=transfer_logs,
236
+ transfer_fk=False,
237
+ save=True,
238
+ )
239
+ # TODO: refactor return value of transfer to default db
240
+ if label_returned is not None:
241
+ label = label_returned
242
+ labels_by_features[key].append(label)
243
+ # treat features
244
+ _, new_features = validate_labels(list(features))
245
+ if len(new_features) > 0:
246
+ transfer_fk_to_default_db_bulk(
247
+ new_features, using_key, transfer_logs=transfer_logs
248
+ )
249
+ for feature in new_features:
250
+ transfer_to_default_db(
251
+ feature,
251
252
  using_key,
252
253
  transfer_logs=transfer_logs,
253
254
  transfer_fk=False,
254
- save=True,
255
255
  )
256
- # TODO: refactor return value of transfer to default db
257
- if label_returned is not None:
258
- label = label_returned
259
- labels_by_features[key].append(label)
260
- # treat features
261
- _, new_features = validate_labels(list(features))
262
- if len(new_features) > 0:
263
- transfer_fk_to_default_db_bulk(
264
- new_features, using_key, transfer_logs=transfer_logs
256
+ save(new_features)
257
+ if hasattr(self._host, related_name):
258
+ for feature_name, labels in labels_by_features.items():
259
+ if feature_name is not None:
260
+ feature_id = Feature.get(name=feature_name).id
261
+ else:
262
+ feature_id = None
263
+ getattr(self._host, related_name).add(
264
+ *labels, through_defaults={"feature_id": feature_id}
265
265
  )
266
- for feature in new_features:
267
- transfer_to_default_db(
268
- feature,
269
- using_key,
270
- transfer_logs=transfer_logs,
271
- transfer_fk=False,
272
- )
273
- save(new_features)
274
- if hasattr(self._host, related_name):
275
- for feature_name, labels in labels_by_features.items():
276
- if feature_name is not None:
277
- feature_id = Feature.get(name=feature_name).id
278
- else:
279
- feature_id = None
280
- getattr(self._host, related_name).add(
281
- *labels, through_defaults={"feature_id": feature_id}
282
- )
283
- # ProgrammingError is raised when schemas don't match between source and target instances
284
- except ProgrammingError:
285
- logger.warning(
286
- f"{related_name} labels cannot be transferred because schema module does not exist in target instance: {labels}"
287
- )
288
- continue
266
+
267
+ def make_external(self, label: Record):
268
+ """Make a label external, aka dissociate label from internal features.
269
+
270
+ Args:
271
+ label: Label record to make external.
272
+ """
273
+ d = dict_related_model_to_related_name(self._host)
274
+ registry = label.__class__
275
+ related_name = d.get(registry.__get_name_with_schema__())
276
+ link_model = getattr(self._host, related_name).through
277
+ link_records = link_model.filter(
278
+ artifact_id=self._host.id, **{f"{registry.__name__.lower()}_id": label.id}
279
+ )
280
+ features = link_records.values_list("feature__name", flat=True).distinct()
281
+ s = "s" if len(features) > 1 else ""
282
+ link_records.update(feature_id=None, feature_ref_is_name=None)
283
+ logger.warning(
284
+ f'{registry.__name__} "{getattr(label, label._name_field)}" is no longer associated with the following feature{s}:\n'
285
+ f"{list(features)}"
286
+ )
@@ -11,6 +11,7 @@
11
11
  MissingContextUID
12
12
  UpdateContext
13
13
  IntegrityError
14
+ RecordNameChangeIntegrityError
14
15
 
15
16
  """
16
17
 
@@ -57,6 +58,12 @@ class InconsistentKey(Exception):
57
58
  pass
58
59
 
59
60
 
61
+ class RecordNameChangeIntegrityError(SystemExit):
62
+ """Custom exception for name change errors."""
63
+
64
+ pass
65
+
66
+
60
67
  # -------------------------------------------------------------------------------------
61
68
  # run context
62
69
  # -------------------------------------------------------------------------------------
lamindb/core/schema.py CHANGED
@@ -1,31 +1,66 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import lamindb_setup as ln_setup
3
4
  from django.db.models import ManyToManyField
5
+ from lamindb_setup._connect_instance import (
6
+ get_owner_name_from_identifier,
7
+ load_instance_settings,
8
+ )
9
+ from lamindb_setup.core._settings_store import instance_settings_file
4
10
  from lnschema_core.models import Feature, FeatureSet, LinkORM, Record
5
11
 
6
12
 
7
- def dict_schema_name_to_model_name(registry: type[Record]) -> dict[str, Record]:
13
+ def get_schemas_modules(instance: str | None) -> set[str]:
14
+ if instance is None or instance == "default":
15
+ schema_modules = set(ln_setup.settings.instance.schema)
16
+ schema_modules.add("core")
17
+ return schema_modules
18
+ owner, name = get_owner_name_from_identifier(instance)
19
+ settings_file = instance_settings_file(name, owner)
20
+ if settings_file.exists():
21
+ schema = set(load_instance_settings(settings_file).schema)
22
+ else:
23
+ cache_filepath = (
24
+ ln_setup.settings.cache_dir / f"instance--{owner}--{name}--uid.txt"
25
+ )
26
+ if cache_filepath.exists():
27
+ schema = set(cache_filepath.read_text().split("\n")[1].split(","))
28
+ else:
29
+ raise ValueError(f"Instance {instance} not found")
30
+ shared_schema_modules = set(ln_setup.settings.instance.schema).intersection(schema)
31
+ shared_schema_modules.add("core")
32
+ return shared_schema_modules
33
+
34
+
35
+ def dict_schema_name_to_model_name(
36
+ registry: type[Record], instance: str | None = None
37
+ ) -> dict[str, Record]:
38
+ schema_modules = get_schemas_modules(instance)
8
39
  d: dict = {
9
40
  i.related_model.__get_name_with_schema__(): i.related_model
10
41
  for i in registry._meta.related_objects
11
42
  if i.related_name is not None
43
+ and i.related_model.__get_schema_name__() in schema_modules
12
44
  }
13
45
  d.update(
14
46
  {
15
47
  i.related_model.__get_name_with_schema__(): i.related_model
16
48
  for i in registry._meta.many_to_many
17
49
  if i.name is not None
50
+ and i.related_model.__get_schema_name__() in schema_modules
18
51
  }
19
52
  )
20
53
  return d
21
54
 
22
55
 
23
56
  def dict_related_model_to_related_name(
24
- registry: type[Record], links: bool = False
57
+ registry: type[Record], links: bool = False, instance: str | None = None
25
58
  ) -> dict[str, str]:
26
59
  def include(model: Record):
27
60
  return not links != issubclass(model, LinkORM)
28
61
 
62
+ schema_modules = get_schemas_modules(instance)
63
+
29
64
  related_objects = registry._meta.related_objects + registry._meta.many_to_many
30
65
  d: dict = {
31
66
  record.related_model.__get_name_with_schema__(): (
@@ -34,7 +69,11 @@ def dict_related_model_to_related_name(
34
69
  else record.name
35
70
  )
36
71
  for record in related_objects
37
- if (record.name is not None and include(record.related_model))
72
+ if (
73
+ record.name is not None
74
+ and include(record.related_model)
75
+ and record.related_model.__get_schema_name__() in schema_modules
76
+ )
38
77
  }
39
78
  return d
40
79
 
lamindb/core/types.py CHANGED
@@ -13,6 +13,7 @@
13
13
  from lamindb_setup.core.types import UPathStr
14
14
  from lnschema_core.types import (
15
15
  ArtifactType,
16
+ FieldAttr,
16
17
  ListLike,
17
18
  StrField,
18
19
  TransformType,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamindb
3
- Version: 0.76.12
3
+ Version: 0.76.14
4
4
  Summary: A data framework for biology.
5
5
  Author-email: Lamin Labs <open-source@lamin.ai>
6
6
  Requires-Python: >=3.9
@@ -8,9 +8,9 @@ Description-Content-Type: text/markdown
8
8
  Classifier: Programming Language :: Python :: 3.9
9
9
  Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
- Requires-Dist: lnschema_core==0.75.0
12
- Requires-Dist: lamin_utils==0.13.6
13
- Requires-Dist: lamin_cli==0.18.0
11
+ Requires-Dist: lnschema_core==0.76.0
12
+ Requires-Dist: lamin_utils==0.13.7
13
+ Requires-Dist: lamin_cli==0.20.1
14
14
  Requires-Dist: lamindb_setup
15
15
  Requires-Dist: rapidfuzz
16
16
  Requires-Dist: pyarrow
@@ -23,7 +23,7 @@ Requires-Dist: pandas
23
23
  Requires-Dist: graphviz
24
24
  Requires-Dist: psycopg2-binary
25
25
  Requires-Dist: lamindb_setup[aws] ; extra == "aws"
26
- Requires-Dist: bionty==0.51.2 ; extra == "bionty"
26
+ Requires-Dist: bionty==0.52.0 ; extra == "bionty"
27
27
  Requires-Dist: line_profiler ; extra == "dev"
28
28
  Requires-Dist: pre-commit ; extra == "dev"
29
29
  Requires-Dist: nox ; extra == "dev"
@@ -37,7 +37,7 @@ Requires-Dist: faker-biology ; extra == "dev"
37
37
  Requires-Dist: django-schema-graph ; extra == "erdiagram"
38
38
  Requires-Dist: readfcs>=1.1.8 ; extra == "fcs"
39
39
  Requires-Dist: lamindb_setup[gcp] ; extra == "gcp"
40
- Requires-Dist: nbproject==0.10.4 ; extra == "jupyter"
40
+ Requires-Dist: nbproject==0.10.5 ; extra == "jupyter"
41
41
  Requires-Dist: jupytext ; extra == "jupyter"
42
42
  Requires-Dist: nbconvert ; extra == "jupyter"
43
43
  Requires-Dist: zarr>=2.16.0 ; extra == "zarr"
@@ -1,18 +1,18 @@
1
- lamindb/__init__.py,sha256=IriWYyrDC6JejjCZBDmycpYNGj9hiGgJZ7vAFBCcq9w,2278
2
- lamindb/_artifact.py,sha256=Q0fCuD2nDQdqtQIxA9I4dTOY6R-12fv4ImeoNYEgL5I,44800
1
+ lamindb/__init__.py,sha256=PelFCbUaNuz_1rnpOqj-mDCMqCfT2hJ27M3C-VkGJl0,2278
2
+ lamindb/_artifact.py,sha256=9soXXT3g9tG1BTwX4DCRPurbFFcpHKOT8W7SsoLiNbo,44847
3
3
  lamindb/_can_validate.py,sha256=1pUavLwZ_yPAtbVYKOGYUHaPxlJGZ246qZ0e-4ZUDSc,19552
4
- lamindb/_collection.py,sha256=TSkJ3z0axRAFrV2PvZf1YMz7NXWLX3hYoNQ48l4NoyM,14129
5
- lamindb/_curate.py,sha256=KpEP0-9nQUmiRn6z7fiGs6BmQdpqSg3QPlAgV-S9_wA,58839
4
+ lamindb/_collection.py,sha256=vt604fUjkmOYCGR4Sq_NTwnPywATfjUAdkQjuJJ17y0,14613
5
+ lamindb/_curate.py,sha256=rFbPEoD-E-5s3QPIcUuedUO6a2c8QfpTrBfVX9gUVpE,63120
6
6
  lamindb/_feature.py,sha256=nZhtrH0ssoNls-hV-dkwfK9sKypg2El59R9qfarxfUE,5340
7
- lamindb/_feature_set.py,sha256=lHKATvs8NagaaHwsWqi4XMTPTNKsGdM-6ZRctTHHSNc,8130
7
+ lamindb/_feature_set.py,sha256=JQSP-YLam1KW-rDzly5Dm4IYVL2A6ec7ufIf6iCc2W8,8169
8
8
  lamindb/_filter.py,sha256=Pf9NHV4gm7NOC0Frtvx4W7nvwt2EowOP74DwppyXAZs,635
9
9
  lamindb/_finish.py,sha256=VMAmxCUFmTKIMSCx7LEh4QAnWDeue6MeUAAzkMVEYMU,9546
10
- lamindb/_from_values.py,sha256=iqcR8T8i9VZpnn09W441zW-djhWMh8EZj7XFJq9jP2k,14211
10
+ lamindb/_from_values.py,sha256=uRtZLaMWKoANMMXm1hrADHfckRCTiK8_d02Yp07nLkw,14119
11
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=jPW7vUm_lMtL3qhLJ16nJxZkf184mM0Ny1OM1uaztto,12717
15
- lamindb/_record.py,sha256=OUW0xr2s7I2iML2GoFjdZ3nNc0q9RKMLUXnTU5cwBs8,23260
12
+ lamindb/_parents.py,sha256=KMBUfCLNqjmFzOdZIXaUFqDPeEpWP28MCkHHPq887h8,16341
13
+ lamindb/_query_manager.py,sha256=pmPhJQ85-7XeAU9TFv6LPGi9F7dBgztZgZcXz33HYJM,3710
14
+ lamindb/_query_set.py,sha256=AyWvFZ-Vnd_1dhbDLkiyEh2-2XiIR_OpEk72xoQ2JVg,12980
15
+ lamindb/_record.py,sha256=FkU7G1OUl0HPQO6wh8EkPh4T_ogxcy6QGkrVz_I4WUw,26840
16
16
  lamindb/_run.py,sha256=K_5drpLn3D7y3XtZ3vtAw35rG5RCSvB4bXQZx4ESSI0,1964
17
17
  lamindb/_save.py,sha256=BCaSFnANYPxTqL5gw7Hrh_9kz7SDyOxrJV2KW6rXqts,11366
18
18
  lamindb/_storage.py,sha256=GBVChv-DHVMNEBJL5l_JT6B4RDhZ6NnwgzmUICphYKk,413
@@ -20,21 +20,21 @@ lamindb/_transform.py,sha256=wZDkY8lp4d_OsO5a7rLs1RamkDzBXZSLaWJU34zRnmA,4728
20
20
  lamindb/_ulabel.py,sha256=XDSdZBXX_ki5s1vOths3MjF2x5DPggBR_PV_KF4SGyg,1611
21
21
  lamindb/_utils.py,sha256=LGdiW4k3GClLz65vKAVRkL6Tw-Gkx9DWAdez1jyA5bE,428
22
22
  lamindb/_view.py,sha256=4Ln2ItTb3857PAI-70O8eJYqoTJ_NNFc7E_wds6OGns,2412
23
- lamindb/core/__init__.py,sha256=57AXQ286eOX2_o5HUeqIFJrfqN-OZ_E7FVHd3Xm5oOk,1483
24
- lamindb/core/_context.py,sha256=6N8SlTRJyVwhm0kLmd_ToHvT4BhQI977PUhUv8e8KN4,22900
25
- lamindb/core/_data.py,sha256=P0vlbw_UQp9UDNMmUo9YFxqurcWtMaKPWCT12IRA2C0,19672
26
- lamindb/core/_django.py,sha256=mqZ0WhTakLDrGVp3MVI6RNfu8kZ2L5BiEnMwXnkfsG0,6760
27
- lamindb/core/_feature_manager.py,sha256=f7pO3RQ0ojYvofLYqioE4CV2t8nXTkQcXvJDuMB_XaY,38941
28
- lamindb/core/_label_manager.py,sha256=GoluSFk_z1c1fZw8OGKkaIURWgognEsOHCo9mzigd-A,11108
23
+ lamindb/core/__init__.py,sha256=y87MCP1BEC2qHNVDIOwqVteIP_2hPCdIoa9JXr0EG8U,1524
24
+ lamindb/core/_context.py,sha256=dI3z7fCMRPC3IMb7-EIaQYhacSZBA4HfLVFyoJtVL7I,22900
25
+ lamindb/core/_data.py,sha256=BVZkxK8aloSecH25LivbwnjcG1fz7Gs2UDceO5pWd3I,20049
26
+ lamindb/core/_django.py,sha256=yeMPp1n9WrFmEjVRdavfpVqAolPLd24RseTQlvsK67w,7157
27
+ lamindb/core/_feature_manager.py,sha256=q4WmzJvFLL_fAs-vNRgV2klanAoU6Wu8_g0O2dyIjVg,40027
28
+ lamindb/core/_label_manager.py,sha256=yh-r4KbtOArMUKPJL75yOxJc8HUKqsik8pExBVKyDlA,10949
29
29
  lamindb/core/_mapped_collection.py,sha256=M50haewVAFONeF71QQbzD09L8lVZCL1hyf0W87jKE5U,24575
30
30
  lamindb/core/_settings.py,sha256=6jNadlQdimxCsKR2ZyUD0YJYzOdubTnKktki-MqEWqQ,6137
31
31
  lamindb/core/_sync_git.py,sha256=lIgl6YfpH4rCFT1WILAp7zlemZfxog1d0zp3cX0KIZw,4531
32
32
  lamindb/core/_track_environment.py,sha256=Ywzg_sJ7guI1dcsN7h5orce9VdYl8VGVE3OLITlHBXQ,820
33
- lamindb/core/exceptions.py,sha256=0B36kOVo-Dik5KbSKvy5GPuMjUfhVb99dJwXl_J0ldo,1636
33
+ lamindb/core/exceptions.py,sha256=Y1XQGbv9MgNLVvoClpcwN4NugrLW3Xgy1up15wZK740,1783
34
34
  lamindb/core/fields.py,sha256=47Jmh3efUr5ZscgimR_yckY-I3cNf8ScLutbwKCK3j4,162
35
35
  lamindb/core/loaders.py,sha256=KMTkDa73jkRVvI9uc5Fgr0t6mq22cAxBwhSlUZKUaBg,4016
36
- lamindb/core/schema.py,sha256=KiYQn_8fokSMztTNDe6qUocZzKXWxU32H-YChNJv51A,1877
37
- lamindb/core/types.py,sha256=uVBqSVLoQaTkqP9nqsJhwU6yYnx8H5e6-ZxrB6vpOOw,265
36
+ lamindb/core/schema.py,sha256=Y1tGn93B236PtnYZkpgTNFgTXBcVujPM1qh1kNG6Nbs,3441
37
+ lamindb/core/types.py,sha256=cL4cmJFA1xfxAIFOQqoa_fvVzdUM3A5blHStVwRNtk4,280
38
38
  lamindb/core/versioning.py,sha256=KUpd94F5QpbDxx9eKgZwrpPyQpm9YeHVedrTEO2a_mI,4839
39
39
  lamindb/core/datasets/__init__.py,sha256=zRP98oqUAaXhqWyKMiH0s_ImVIuNeziQQ2kQ_t0f-DI,1353
40
40
  lamindb/core/datasets/_core.py,sha256=JGP_q-OQibDCEaI54jZ2F6fSbSW9Yg6oYOqgOCXM0v4,20414
@@ -55,7 +55,7 @@ lamindb/integrations/__init__.py,sha256=RWGMYYIzr8zvmNPyVB4m-p4gMDhxdRbjES2Ed23O
55
55
  lamindb/integrations/_vitessce.py,sha256=uPl45_w4Uu9_BhpBDDVonC1nDOuAnB7DAnzi5w5bZAE,4032
56
56
  lamindb/setup/__init__.py,sha256=OwZpZzPDv5lPPGXZP7-zK6UdO4FHvvuBh439yZvIp3A,410
57
57
  lamindb/setup/core/__init__.py,sha256=SevlVrc2AZWL3uALbE5sopxBnIZPWZ1IB0NBDudiAL8,167
58
- lamindb-0.76.12.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
59
- lamindb-0.76.12.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
60
- lamindb-0.76.12.dist-info/METADATA,sha256=1R8hfPpe0viZZHFgDGyRrq-myQ71euhBbXdB9LH2kD4,2361
61
- lamindb-0.76.12.dist-info/RECORD,,
58
+ lamindb-0.76.14.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
59
+ lamindb-0.76.14.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
60
+ lamindb-0.76.14.dist-info/METADATA,sha256=j7r4goc9s3ANslQ7-pT7WIct1uDLJK3DGuN3kPsixYs,2361
61
+ lamindb-0.76.14.dist-info/RECORD,,