lamindb 0.76.12__tar.gz → 0.76.13__tar.gz

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.
Files changed (517) hide show
  1. {lamindb-0.76.12 → lamindb-0.76.13}/PKG-INFO +2 -2
  2. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/idempotency.ipynb +8 -7
  3. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/setup.ipynb +3 -1
  4. {lamindb-0.76.12 → lamindb-0.76.13}/docs/tutorial.ipynb +1 -2
  5. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/__init__.py +1 -1
  6. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_artifact.py +4 -3
  7. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_collection.py +6 -5
  8. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_feature_set.py +3 -1
  9. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_parents.py +18 -3
  10. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_query_manager.py +0 -15
  11. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_query_set.py +1 -1
  12. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_record.py +6 -4
  13. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_context.py +1 -1
  14. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_django.py +19 -5
  15. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_feature_manager.py +4 -2
  16. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_label_manager.py +70 -93
  17. lamindb-0.76.13/lamindb/core/schema.py +95 -0
  18. {lamindb-0.76.12 → lamindb-0.76.13}/pyproject.toml +1 -1
  19. lamindb-0.76.13/sub/lamin-cli/lamin_cli/__init__.py +3 -0
  20. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/pyproject.toml +1 -1
  21. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/02-connect-local-instance.ipynb +0 -23
  22. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/08-test-multi-session.ipynb +7 -3
  23. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/__init__.py +1 -1
  24. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_connect_instance.py +8 -2
  25. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_init_instance.py +21 -9
  26. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_storage.py +2 -2
  27. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/django.py +11 -1
  28. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_edge_request.py +1 -1
  29. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_init_instance.py +6 -0
  30. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_artifact.py +4 -0
  31. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_parents.py +15 -0
  32. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_record.py +5 -0
  33. lamindb-0.76.12/lamindb/core/schema.py +0 -56
  34. lamindb-0.76.12/sub/lamin-cli/lamin_cli/__init__.py +0 -3
  35. {lamindb-0.76.12 → lamindb-0.76.13}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  36. {lamindb-0.76.12 → lamindb-0.76.13}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  37. {lamindb-0.76.12 → lamindb-0.76.13}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  38. {lamindb-0.76.12 → lamindb-0.76.13}/.github/ISSUE_TEMPLATE/usage_question.yml +0 -0
  39. {lamindb-0.76.12 → lamindb-0.76.13}/.github/workflows/build.yml +0 -0
  40. {lamindb-0.76.12 → lamindb-0.76.13}/.github/workflows/doc-changes.yml +0 -0
  41. {lamindb-0.76.12 → lamindb-0.76.13}/.gitignore +0 -0
  42. {lamindb-0.76.12 → lamindb-0.76.13}/.gitmodules +0 -0
  43. {lamindb-0.76.12 → lamindb-0.76.13}/.pre-commit-config.yaml +0 -0
  44. {lamindb-0.76.12 → lamindb-0.76.13}/CONTRIBUTING.md +0 -0
  45. {lamindb-0.76.12 → lamindb-0.76.13}/LICENSE +0 -0
  46. {lamindb-0.76.12 → lamindb-0.76.13}/README.md +0 -0
  47. {lamindb-0.76.12 → lamindb-0.76.13}/docs/api.md +0 -0
  48. {lamindb-0.76.12 → lamindb-0.76.13}/docs/arrays.ipynb +0 -0
  49. {lamindb-0.76.12 → lamindb-0.76.13}/docs/bio-registries.ipynb +0 -0
  50. {lamindb-0.76.12 → lamindb-0.76.13}/docs/bionty.md +0 -0
  51. {lamindb-0.76.12 → lamindb-0.76.13}/docs/changelog.md +0 -0
  52. {lamindb-0.76.12 → lamindb-0.76.13}/docs/clinicore.md +0 -0
  53. {lamindb-0.76.12 → lamindb-0.76.13}/docs/curate-any.ipynb +0 -0
  54. {lamindb-0.76.12 → lamindb-0.76.13}/docs/curate-df.ipynb +0 -0
  55. {lamindb-0.76.12 → lamindb-0.76.13}/docs/curate.md +0 -0
  56. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/acid.ipynb +0 -0
  57. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/delete.ipynb +0 -0
  58. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/import-schema.ipynb +0 -0
  59. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/keep-artifacts-local.ipynb +0 -0
  60. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/key.ipynb +0 -0
  61. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/reference-field.ipynb +0 -0
  62. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/test_notebooks.py +0 -0
  63. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/track-run-inputs.ipynb +0 -0
  64. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/visibility.ipynb +0 -0
  65. {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq.md +0 -0
  66. {lamindb-0.76.12 → lamindb-0.76.13}/docs/findrefs.md +0 -0
  67. {lamindb-0.76.12 → lamindb-0.76.13}/docs/guide.md +0 -0
  68. {lamindb-0.76.12 → lamindb-0.76.13}/docs/includes/features-lamindb.md +0 -0
  69. {lamindb-0.76.12 → lamindb-0.76.13}/docs/includes/features-laminhub.md +0 -0
  70. {lamindb-0.76.12 → lamindb-0.76.13}/docs/includes/installation.md +0 -0
  71. {lamindb-0.76.12 → lamindb-0.76.13}/docs/index.md +0 -0
  72. {lamindb-0.76.12 → lamindb-0.76.13}/docs/introduction.ipynb +0 -0
  73. {lamindb-0.76.12 → lamindb-0.76.13}/docs/lamindb.md +0 -0
  74. {lamindb-0.76.12 → lamindb-0.76.13}/docs/laminr.md +0 -0
  75. {lamindb-0.76.12 → lamindb-0.76.13}/docs/query-search.md +0 -0
  76. {lamindb-0.76.12 → lamindb-0.76.13}/docs/registries.ipynb +0 -0
  77. {lamindb-0.76.12 → lamindb-0.76.13}/docs/rest.md +0 -0
  78. {lamindb-0.76.12 → lamindb-0.76.13}/docs/schemas.ipynb +0 -0
  79. {lamindb-0.76.12 → lamindb-0.76.13}/docs/scripts/run-track-with-params.py +0 -0
  80. {lamindb-0.76.12 → lamindb-0.76.13}/docs/scripts/synced-with-git.py +0 -0
  81. {lamindb-0.76.12 → lamindb-0.76.13}/docs/setup.ipynb +0 -0
  82. {lamindb-0.76.12 → lamindb-0.76.13}/docs/signup-login.md +0 -0
  83. {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/add-replace-cache.ipynb +0 -0
  84. {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/anndata-accessor.ipynb +0 -0
  85. {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/prepare-transfer-local-to-cloud.ipynb +0 -0
  86. {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/test-files/iris.csv +0 -0
  87. {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/test-files/iris.data +0 -0
  88. {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/test-files/new_iris.csv +0 -0
  89. {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/test_notebooks.py +0 -0
  90. {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/transfer-local-to-cloud.ipynb +0 -0
  91. {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/upload.ipynb +0 -0
  92. {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/vitessce.ipynb +0 -0
  93. {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage.md +0 -0
  94. {lamindb-0.76.12 → lamindb-0.76.13}/docs/test_notebooks.py +0 -0
  95. {lamindb-0.76.12 → lamindb-0.76.13}/docs/track.ipynb +0 -0
  96. {lamindb-0.76.12 → lamindb-0.76.13}/docs/transfer.ipynb +0 -0
  97. {lamindb-0.76.12 → lamindb-0.76.13}/docs/tutorial2.ipynb +0 -0
  98. {lamindb-0.76.12 → lamindb-0.76.13}/docs/wetlab.md +0 -0
  99. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_can_validate.py +0 -0
  100. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_curate.py +0 -0
  101. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_feature.py +0 -0
  102. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_filter.py +0 -0
  103. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_finish.py +0 -0
  104. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_from_values.py +0 -0
  105. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_is_versioned.py +0 -0
  106. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_run.py +0 -0
  107. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_save.py +0 -0
  108. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_storage.py +0 -0
  109. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_transform.py +0 -0
  110. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_ulabel.py +0 -0
  111. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_utils.py +0 -0
  112. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_view.py +0 -0
  113. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/__init__.py +0 -0
  114. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_data.py +0 -0
  115. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_mapped_collection.py +0 -0
  116. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_settings.py +0 -0
  117. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_sync_git.py +0 -0
  118. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_track_environment.py +0 -0
  119. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/datasets/__init__.py +0 -0
  120. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/datasets/_core.py +0 -0
  121. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/datasets/_fake.py +0 -0
  122. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/exceptions.py +0 -0
  123. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/fields.py +0 -0
  124. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/loaders.py +0 -0
  125. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/__init__.py +0 -0
  126. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_anndata_accessor.py +0 -0
  127. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_anndata_sizes.py +0 -0
  128. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_backed_access.py +0 -0
  129. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_tiledbsoma.py +0 -0
  130. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_valid_suffixes.py +0 -0
  131. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_zarr.py +0 -0
  132. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/objects.py +0 -0
  133. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/paths.py +0 -0
  134. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/subsettings/__init__.py +0 -0
  135. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/subsettings/_creation_settings.py +0 -0
  136. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/subsettings/_transform_settings.py +0 -0
  137. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/types.py +0 -0
  138. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/versioning.py +0 -0
  139. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/integrations/__init__.py +0 -0
  140. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/integrations/_vitessce.py +0 -0
  141. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/setup/__init__.py +0 -0
  142. {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/setup/core/__init__.py +0 -0
  143. {lamindb-0.76.12 → lamindb-0.76.13}/noxfile.py +0 -0
  144. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/.github/workflows/build.yml +0 -0
  145. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/.github/workflows/doc-changes.yml +0 -0
  146. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/.github/workflows/update_ontologies.yml +0 -0
  147. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/.gitignore +0 -0
  148. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/.pre-commit-config.yaml +0 -0
  149. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/LICENSE +0 -0
  150. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/README.md +0 -0
  151. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/__init__.py +0 -0
  152. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/_bionty.py +0 -0
  153. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/__init__.py +0 -0
  154. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/_display_sources.py +0 -0
  155. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/_ontology.py +0 -0
  156. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/_public_ontology.py +0 -0
  157. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/_settings.py +0 -0
  158. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/_sync_sources.py +0 -0
  159. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/dev/__init__.py +0 -0
  160. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/dev/_handle_sources.py +0 -0
  161. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/dev/_io.py +0 -0
  162. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/dev/_md5.py +0 -0
  163. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/__init__.py +0 -0
  164. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_bfxpipeline.py +0 -0
  165. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_biosample.py +0 -0
  166. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_cellline.py +0 -0
  167. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_cellmarker.py +0 -0
  168. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_celltype.py +0 -0
  169. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_developmentalstage.py +0 -0
  170. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_disease.py +0 -0
  171. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_drug.py +0 -0
  172. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_ethnicity.py +0 -0
  173. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_experimentalfactor.py +0 -0
  174. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_gene.py +0 -0
  175. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_organism.py +0 -0
  176. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_pathway.py +0 -0
  177. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_phenotype.py +0 -0
  178. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_protein.py +0 -0
  179. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_shared_docstrings.py +0 -0
  180. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_tissue.py +0 -0
  181. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/bfxpipelines_info/custom_pipelines.json +0 -0
  182. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/check_ontologies_reachable.py +0 -0
  183. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/determine_md5s.py +0 -0
  184. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/generate_bfxpipelines.py +0 -0
  185. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/update_new_ontologies.py +0 -0
  186. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/upload_new_ontologies.py +0 -0
  187. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/sources.yaml +0 -0
  188. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/core/__init__.py +0 -0
  189. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/core/_add_ontology.py +0 -0
  190. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/core/_bionty.py +0 -0
  191. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/core/_settings.py +0 -0
  192. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/ids.py +0 -0
  193. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0023_rename_publicsource_encode_uid.py +0 -0
  194. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0024_remove_cellline_collections_and_more.py +0 -0
  195. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0025_artifactcellline_alter_cellline_artifacts_and_more.py +0 -0
  196. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0026_artifactcellline_cell_line_ref_is_name_and_more.py +0 -0
  197. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0027_remove_artifactcellline_created_at_and_more.py +0 -0
  198. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0028_artifactcellline_created_at_and_more.py +0 -0
  199. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0028_squashed.py +0 -0
  200. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0029_alter_cellline_previous_runs_and_more.py +0 -0
  201. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0030_rename_publicsource_source_and_more.py +0 -0
  202. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0031_alter_cellmarker_name_and_more.py +0 -0
  203. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0032_rename_source_name_source_description_and_more.py +0 -0
  204. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0033_alter_artifactcellline_artifact_and_more.py +0 -0
  205. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0034_alter_source_unique_together.py +0 -0
  206. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0035_alter_protein_gene_symbol.py +0 -0
  207. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0036_alter_source_artifacts_and_more.py +0 -0
  208. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0037_alter_cellline_source_alter_cellmarker_source_and_more.py +0 -0
  209. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0038_alter_artifactcellline_created_by_and_more.py +0 -0
  210. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0039_alter_cellline_source_alter_cellmarker_source_and_more.py +0 -0
  211. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/__init__.py +0 -0
  212. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/models.py +0 -0
  213. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/guide/concepts.md +0 -0
  214. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/guide/config.md +0 -0
  215. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/guide/extend.md +0 -0
  216. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/guide/test_notebooks.py +0 -0
  217. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/guide.md +0 -0
  218. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/index.md +0 -0
  219. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/reference.md +0 -0
  220. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/lamin-project.yaml +0 -0
  221. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/noxfile.py +0 -0
  222. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/pyproject.toml +0 -0
  223. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/dev/test_handle_sources.py +0 -0
  224. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/dev/test_io.py +0 -0
  225. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_bfxpipeline.py +0 -0
  226. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_biosample.py +0 -0
  227. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_cellline.py +0 -0
  228. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_cellmarker.py +0 -0
  229. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_celltype.py +0 -0
  230. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_developmentalstage.py +0 -0
  231. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_disease.py +0 -0
  232. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_drug.py +0 -0
  233. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_ethnicity.py +0 -0
  234. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_experimentalfactor.py +0 -0
  235. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_gene.py +0 -0
  236. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_organism.py +0 -0
  237. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_pathway.py +0 -0
  238. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_phenotype.py +0 -0
  239. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_protein.py +0 -0
  240. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_tissue.py +0 -0
  241. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/test_bionty.py +0 -0
  242. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/test_lamindb.py +0 -0
  243. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/test_md5.py +0 -0
  244. {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/test_ontology.py +0 -0
  245. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/.github/workflows/build.yml +0 -0
  246. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/.github/workflows/doc-changes.yml +0 -0
  247. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/.gitignore +0 -0
  248. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/.pre-commit-config.yaml +0 -0
  249. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/LICENSE +0 -0
  250. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/README.md +0 -0
  251. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/__init__.py +0 -0
  252. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0001_initial.py +0 -0
  253. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0002_biosample_patient_biosample_project.py +0 -0
  254. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0003_alter_project_uid.py +0 -0
  255. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0004_remove_biosample_project_clinicaltrial_and_more.py +0 -0
  256. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0005_alter_biosample_created_by_alter_biosample_run_and_more.py +0 -0
  257. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0006_artifactbiosample_artifactclinicaltrial_and_more.py +0 -0
  258. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/__init__.py +0 -0
  259. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/models.py +0 -0
  260. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/docs/changelog.md +0 -0
  261. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/docs/guide.md +0 -0
  262. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/docs/index.md +0 -0
  263. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/docs/quickstart.ipynb +0 -0
  264. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/docs/reference.md +0 -0
  265. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/noxfile.py +0 -0
  266. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/pyproject.toml +0 -0
  267. {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/tests/test_notebooks.py +0 -0
  268. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/.github/workflows/build.yml +0 -0
  269. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/.github/workflows/doc-changes.yml +0 -0
  270. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/.gitignore +0 -0
  271. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/.pre-commit-config.yaml +0 -0
  272. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/LICENSE +0 -0
  273. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/README.md +0 -0
  274. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/findrefs/__init__.py +0 -0
  275. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/findrefs/migrations/0001_initial.py +0 -0
  276. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/findrefs/migrations/__init__.py +0 -0
  277. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/findrefs/models.py +0 -0
  278. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/noxfile.py +0 -0
  279. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/pyproject.toml +0 -0
  280. {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/tests/test_integrity.py +0 -0
  281. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/.github/workflows/doc-changes.yml +0 -0
  282. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/.gitignore +0 -0
  283. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/.pre-commit-config.yaml +0 -0
  284. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/LICENSE +0 -0
  285. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/README.md +0 -0
  286. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/__main__.py +0 -0
  287. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/_cache.py +0 -0
  288. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/_load.py +0 -0
  289. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/_migration.py +0 -0
  290. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/_save.py +0 -0
  291. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/_settings.py +0 -0
  292. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/conftest.py +0 -0
  293. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/notebooks/not-initialized.ipynb +0 -0
  294. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-consecutive.ipynb +0 -0
  295. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-non-consecutive.ipynb +0 -0
  296. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/scripts/merely-import-lamindb.py +0 -0
  297. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/scripts/run-track-and-finish-sync-git.py +0 -0
  298. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/scripts/run-track-and-finish.py +0 -0
  299. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/scripts/run-track-with-params.py +0 -0
  300. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_cli.py +0 -0
  301. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_load.py +0 -0
  302. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_migrate.py +0 -0
  303. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_multi_process.py +0 -0
  304. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_save_files.py +0 -0
  305. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_save_notebooks.py +0 -0
  306. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_save_scripts.py +0 -0
  307. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/.github/workflows/build.yml +0 -0
  308. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/.github/workflows/doc-changes.yml +0 -0
  309. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/.gitignore +0 -0
  310. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/.pre-commit-config.yaml +0 -0
  311. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/LICENSE +0 -0
  312. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/README.md +0 -0
  313. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/changelog.md +0 -0
  314. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/01-init-local-instance.ipynb +0 -0
  315. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/03-add-managed-storage.ipynb +0 -0
  316. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/04-test-bionty.ipynb +0 -0
  317. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/05-init-hosted-instance.ipynb +0 -0
  318. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/06-connect-hosted-instance.ipynb +0 -0
  319. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/07-keep-artifacts-local.ipynb +0 -0
  320. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/test_notebooks.py +0 -0
  321. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-cache-management.ipynb +0 -0
  322. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-cloud-sync.ipynb +0 -0
  323. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-connect-anonymously.ipynb +0 -0
  324. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-empty-init.ipynb +0 -0
  325. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-import-schema.ipynb +0 -0
  326. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-init-load-local-anonymously.ipynb +0 -0
  327. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-insufficient-user-info.ipynb +0 -0
  328. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-invalid-schema.ipynb +0 -0
  329. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-sqlite-lock.ipynb +0 -0
  330. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test_notebooks2.py +0 -0
  331. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/index.md +0 -0
  332. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/notebooks.md +0 -0
  333. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/reference.md +0 -0
  334. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_cache.py +0 -0
  335. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_check.py +0 -0
  336. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_check_setup.py +0 -0
  337. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_close.py +0 -0
  338. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_delete.py +0 -0
  339. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_django.py +0 -0
  340. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_entry_points.py +0 -0
  341. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_exportdb.py +0 -0
  342. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_importdb.py +0 -0
  343. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_migrate.py +0 -0
  344. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_register_instance.py +0 -0
  345. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_schema.py +0 -0
  346. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_schema_metadata.py +0 -0
  347. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_set_managed_storage.py +0 -0
  348. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_setup_user.py +0 -0
  349. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_silence_loggers.py +0 -0
  350. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/__init__.py +0 -0
  351. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_aws_credentials.py +0 -0
  352. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_aws_storage.py +0 -0
  353. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_deprecated.py +0 -0
  354. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_docs.py +0 -0
  355. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_hub_client.py +0 -0
  356. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_hub_core.py +0 -0
  357. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_hub_crud.py +0 -0
  358. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_hub_utils.py +0 -0
  359. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_private_django_api.py +0 -0
  360. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings.py +0 -0
  361. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_instance.py +0 -0
  362. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_load.py +0 -0
  363. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_save.py +0 -0
  364. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_store.py +0 -0
  365. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_user.py +0 -0
  366. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_setup_bionty_sources.py +0 -0
  367. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/cloud_sqlite_locker.py +0 -0
  368. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/exceptions.py +0 -0
  369. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/hashing.py +0 -0
  370. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/types.py +0 -0
  371. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/upath.py +0 -0
  372. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/noxfile.py +0 -0
  373. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/pyproject.toml +0 -0
  374. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/scripts/script-init-pass-user-no-writes.py +0 -0
  375. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/scripts/script-to-fail-managed-storage.py +0 -0
  376. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_connect_instance.py +0 -0
  377. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_delete_instance.py +0 -0
  378. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_fail_managed_storage.py +0 -0
  379. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_init_pass_user_no_writes.py +0 -0
  380. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_login.py +0 -0
  381. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_migrate.py +0 -0
  382. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_set_storage.py +0 -0
  383. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-local/conftest.py +0 -0
  384. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-local/test_all.py +0 -0
  385. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-local/test_update_schema_in_hub.py +0 -0
  386. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-prod/conftest.py +0 -0
  387. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-prod/test_django.py +0 -0
  388. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-prod/test_global_settings.py +0 -0
  389. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-prod/test_switch_and_fallback_env.py +0 -0
  390. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-prod/test_upath.py +0 -0
  391. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_entry_point.py +0 -0
  392. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_hashing.py +0 -0
  393. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_storage_access.py +0 -0
  394. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_storage_basis.py +0 -0
  395. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_storage_stats.py +0 -0
  396. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_to_url.py +0 -0
  397. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/.github/workflows/build.yml +0 -0
  398. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/.github/workflows/doc-changes.yml +0 -0
  399. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/.gitignore +0 -0
  400. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/.pre-commit-config.yaml +0 -0
  401. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/CHANGELOG.md +0 -0
  402. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/LICENSE +0 -0
  403. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/README.md +0 -0
  404. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/__init__.py +0 -0
  405. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/ids.py +0 -0
  406. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0037_rename_dataset_to_collection.py +0 -0
  407. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0038_alter_collection_artifact_alter_collection_artifacts_and_more.py +0 -0
  408. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0039_remove_collection_artifacts_collectionartifact_and_more.py +0 -0
  409. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0040_alter_transform_type.py +0 -0
  410. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0041_remove_transform_short_name_transform_description_and_more.py +0 -0
  411. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0042_rename_run_at_run_started_at_run_finished_at.py +0 -0
  412. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0043_run_json.py +0 -0
  413. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0044_run_replicated_outputs_transform_ulabels_and_more.py +0 -0
  414. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0045_rename_replicated_outputs_run_replicated_output_artifacts_and_more.py +0 -0
  415. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0046_storage_instance_uid.py +0 -0
  416. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0047_featurevalue_artifactfeaturevalue_and_more.py +0 -0
  417. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0048_alter_artifactulabel_feature_and_more.py +0 -0
  418. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0049_rename_type_feature_dtype_and_more.py +0 -0
  419. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0050_artifactfeatureset_feature_ref_is_semantic_and_more.py +0 -0
  420. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0051_remove_feature_feature_sets_featuresetfeature_and_more.py +0 -0
  421. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0052_rename_feature_value_artifactfeaturevalue_featurevalue_and_more.py +0 -0
  422. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0052_squashed.py +0 -0
  423. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0053_alter_featureset_hash_alter_paramvalue_created_by_and_more.py +0 -0
  424. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0054_alter_feature_previous_runs_and_more.py +0 -0
  425. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0055_artifact_type_artifactparamvalue_and_more.py +0 -0
  426. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0056_rename_ulabel_ref_is_name_artifactulabel_label_ref_is_name_and_more.py +0 -0
  427. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0057_link_models_latest_report_and_others.py +0 -0
  428. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0058_artifact__actions_collection__actions.py +0 -0
  429. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0059_alter_artifact__accessor_alter_artifact__hash_type_and_more.py +0 -0
  430. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0060_alter_artifact__actions.py +0 -0
  431. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0061_alter_collection_meta_artifact_alter_run_environment_and_more.py +0 -0
  432. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0062_add_is_latest_field.py +0 -0
  433. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0063_populate_latest_field.py +0 -0
  434. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0064_alter_artifact_version_alter_collection_version_and_more.py +0 -0
  435. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0065_remove_collection_feature_sets_and_more.py +0 -0
  436. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0066_alter_artifact__feature_values_and_more.py +0 -0
  437. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0067_alter_featurevalue_unique_together_and_more.py +0 -0
  438. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/__init__.py +0 -0
  439. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/mocks.py +0 -0
  440. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/models.py +0 -0
  441. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/types.py +0 -0
  442. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/users.py +0 -0
  443. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/noxfile.py +0 -0
  444. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/pyproject.toml +0 -0
  445. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/tests/conftest.py +0 -0
  446. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/tests/test_integrity.py +0 -0
  447. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/tests/test_models.py +0 -0
  448. {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/tests/test_types.py +0 -0
  449. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/.github/workflows/build.yml +0 -0
  450. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/.github/workflows/doc-changes.yml +0 -0
  451. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/.gitignore +0 -0
  452. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/.pre-commit-config.yaml +0 -0
  453. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/README.md +0 -0
  454. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/changelog.md +0 -0
  455. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/guide/get-started.ipynb +0 -0
  456. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/guide/modeling_perturbations.ipynb +0 -0
  457. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/guide.md +0 -0
  458. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/index.md +0 -0
  459. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/reference.md +0 -0
  460. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/noxfile.py +0 -0
  461. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/pyproject.toml +0 -0
  462. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/tests/test_integrity.py +0 -0
  463. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/tests/test_notebooks.py +0 -0
  464. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/__init__.py +0 -0
  465. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0017_remove_biosample_artifacts.py +0 -0
  466. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0018_squashed.py +0 -0
  467. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0018_well_created_at_well_created_by_well_updated_at.py +0 -0
  468. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0019_alter_treatment_system.py +0 -0
  469. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0020_treatmenttarget_pathways_treatmenttarget_proteins_and_more.py +0 -0
  470. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0021_alter_compoundtreatment_duration_unit_and_more.py +0 -0
  471. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0022_remove_experiment_experiment_type_and_more.py +0 -0
  472. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0023_compoundtreatment_duration_and_more.py +0 -0
  473. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0024_compound_chembl_id.py +0 -0
  474. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/__init__.py +0 -0
  475. {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/models.py +0 -0
  476. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/conftest.py +0 -0
  477. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/notebooks/duplicate/with-title-initialized-consecutive-finish.ipynb +0 -0
  478. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/notebooks/no-title.ipynb +0 -0
  479. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/notebooks/not-initialized.ipynb +0 -0
  480. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/notebooks/with-title-initialized-consecutive-finish-not-last-cell.ipynb +0 -0
  481. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/notebooks/with-title-initialized-consecutive-finish.ipynb +0 -0
  482. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/scripts/duplicate1/script-to-test-versioning.py +0 -0
  483. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/scripts/duplicate2/script-to-test-versioning.py +0 -0
  484. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/scripts/duplicate3/script-to-test-versioning.py +0 -0
  485. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/scripts/script-to-test-filename-change.py +0 -0
  486. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/scripts/script-to-test-versioning.py +0 -0
  487. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_artifact_folders.py +0 -0
  488. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_cache.py +0 -0
  489. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_can_validate.py +0 -0
  490. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_collection.py +0 -0
  491. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_context.py +0 -0
  492. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_curate.py +0 -0
  493. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_data.py +0 -0
  494. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_db.py +0 -0
  495. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_delete.py +0 -0
  496. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_feature.py +0 -0
  497. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_feature_manager.py +0 -0
  498. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_feature_set.py +0 -0
  499. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_from_values.py +0 -0
  500. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_label_manager.py +0 -0
  501. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_load.py +0 -0
  502. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_manager.py +0 -0
  503. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_notebooks.py +0 -0
  504. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_queryset.py +0 -0
  505. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_run.py +0 -0
  506. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_save.py +0 -0
  507. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_search.py +0 -0
  508. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_settings.py +0 -0
  509. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_transform.py +0 -0
  510. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_uid.py +0 -0
  511. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_ulabel.py +0 -0
  512. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_versioning.py +0 -0
  513. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_view.py +0 -0
  514. {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_visibility.py +0 -0
  515. {lamindb-0.76.12 → lamindb-0.76.13}/tests/storage/conftest.py +0 -0
  516. {lamindb-0.76.12 → lamindb-0.76.13}/tests/storage/test_storage.py +0 -0
  517. {lamindb-0.76.12 → lamindb-0.76.13}/tests/storage/test_transfer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamindb
3
- Version: 0.76.12
3
+ Version: 0.76.13
4
4
  Summary: A data framework for biology.
5
5
  Author-email: Lamin Labs <open-source@lamin.ai>
6
6
  Requires-Python: >=3.9
@@ -10,7 +10,7 @@ Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
11
  Requires-Dist: lnschema_core==0.75.0
12
12
  Requires-Dist: lamin_utils==0.13.6
13
- Requires-Dist: lamin_cli==0.18.0
13
+ Requires-Dist: lamin_cli==0.19.0
14
14
  Requires-Dist: lamindb_setup
15
15
  Requires-Dist: rapidfuzz
16
16
  Requires-Dist: pyarrow
@@ -70,7 +70,6 @@
70
70
  "import lamindb as ln\n",
71
71
  "import pytest\n",
72
72
  "\n",
73
- "ln.settings.verbosity = \"hint\"\n",
74
73
  "ln.track(\"ANW20Fr4eZgM0000\")"
75
74
  ]
76
75
  },
@@ -301,8 +300,7 @@
301
300
  "metadata": {},
302
301
  "outputs": [],
303
302
  "source": [
304
- "artifact = ln.Artifact(filepath, description=\"My fcs artifact\")\n",
305
- "artifact.save()"
303
+ "artifact = ln.Artifact(filepath, description=\"My fcs artifact\").save()"
306
304
  ]
307
305
  },
308
306
  {
@@ -316,7 +314,9 @@
316
314
  },
317
315
  "outputs": [],
318
316
  "source": [
319
- "assert artifact.hash == \"KCEXRahJ-Ui9Y6nksQ8z1A\""
317
+ "assert artifact.hash == \"KCEXRahJ-Ui9Y6nksQ8z1A\"\n",
318
+ "assert artifact.run == ln.context.run\n",
319
+ "assert len(artifact._previous_runs.all()) == 0"
320
320
  ]
321
321
  },
322
322
  {
@@ -355,7 +355,8 @@
355
355
  "outputs": [],
356
356
  "source": [
357
357
  "assert artifact.id == artifact2.id\n",
358
- "assert artifact.run == artifact2.run"
358
+ "assert artifact.run == artifact2.run\n",
359
+ "assert len(artifact._previous_runs.all()) == 0"
359
360
  ]
360
361
  },
361
362
  {
@@ -485,8 +486,7 @@
485
486
  "metadata": {},
486
487
  "outputs": [],
487
488
  "source": [
488
- "artifact4 = ln.Artifact(filepath, description=\"My new fcs artifact\")\n",
489
- "artifact4.save()"
489
+ "artifact4 = ln.Artifact(filepath, description=\"My new fcs artifact\").save()"
490
490
  ]
491
491
  },
492
492
  {
@@ -543,6 +543,7 @@
543
543
  },
544
544
  "outputs": [],
545
545
  "source": [
546
+ "!rm -rf ./test-idempotency\n",
546
547
  "!lamin delete --force test-idempotency"
547
548
  ]
548
549
  }
@@ -100,7 +100,9 @@
100
100
  "metadata": {},
101
101
  "outputs": [],
102
102
  "source": [
103
- "with pytest.raises(RuntimeError):\n",
103
+ "from lamindb_setup._init_instance import CannotSwitchDefaultInstance\n",
104
+ "\n",
105
+ "with pytest.raises(CannotSwitchDefaultInstance):\n",
104
106
  " ln.setup.init(storage=\"./testsetup2\")"
105
107
  ]
106
108
  },
@@ -575,7 +575,6 @@
575
575
  "ln.Artifact.filter(\n",
576
576
  " created_by=users.anonymous,\n",
577
577
  " transform=transform,\n",
578
- " suffix=\".csv\",\n",
579
578
  ").df().head()"
580
579
  ]
581
580
  },
@@ -596,7 +595,7 @@
596
595
  },
597
596
  "outputs": [],
598
597
  "source": [
599
- "ln.Artifact.filter(key__startswith=\"iris_studies/study0_raw_images/\").df().head()"
598
+ "ln.Artifact.filter(key__startswith=\"iris_studies/study0_raw_images\").df().head()"
600
599
  ]
601
600
  },
602
601
  {
@@ -43,7 +43,7 @@ Modules and settings.
43
43
  """
44
44
 
45
45
  # denote a release candidate for 0.1.0 with 0.1rc1, 0.1a1, 0.1b1, etc.
46
- __version__ = "0.76.12"
46
+ __version__ = "0.76.13"
47
47
 
48
48
  import os as _os
49
49
 
@@ -331,9 +331,10 @@ def get_artifact_kwargs_from_data(
331
331
  artifact = stat_or_artifact
332
332
  # update the run of the existing artifact
333
333
  if run is not None:
334
- # save the information that this artifact was previously
335
- # produced by another run
336
- if artifact.run is not None:
334
+ # save the information that this artifact was previously produced by
335
+ # another run
336
+ # note: same logic exists for _output_collections_with_later_updates
337
+ if artifact.run is not None and artifact.run != run:
337
338
  artifact.run._output_artifacts_with_later_updates.add(artifact)
338
339
  # update the run of the artifact with the latest run
339
340
  stat_or_artifact.run = run
@@ -145,15 +145,16 @@ def __init__(
145
145
  logger.warning(
146
146
  f"returning existing collection with same hash: {existing_collection}"
147
147
  )
148
- # update the run of the existing artifact
148
+ # update the run of the existing collection
149
149
  if run is not None:
150
- # save the information that this artifact was previously
151
- # produced by another run
152
- if existing_collection.run is not None:
150
+ # save the information that this collection was previously produced
151
+ # by another run
152
+ # note: same logic exists for _output_artifacts_with_later_updates
153
+ if existing_collection.run is not None and existing_collection.run != run:
153
154
  existing_collection.run._output_collections_with_later_updates.add(
154
155
  existing_collection
155
156
  )
156
- # update the run of the artifact with the latest run
157
+ # update the run of the collection with the latest run
157
158
  existing_collection.run = run
158
159
  existing_collection.transform = run.transform
159
160
  init_self_from_db(collection, existing_collection)
@@ -216,7 +216,9 @@ def members(self) -> QuerySet:
216
216
 
217
217
 
218
218
  def _get_related_name(self: FeatureSet) -> str:
219
- feature_sets_related_models = dict_related_model_to_related_name(self)
219
+ feature_sets_related_models = dict_related_model_to_related_name(
220
+ self, instance=self._state.db
221
+ )
220
222
  related_name = feature_sets_related_models.get(self.registry)
221
223
  return related_name
222
224
 
@@ -310,7 +310,12 @@ def _record_label(record: Record, field: str | None = None):
310
310
  rf' FACE="Monospace">uid={record.uid}<BR/>version={record.version}</FONT>>'
311
311
  )
312
312
  elif isinstance(record, Run):
313
- name = f'{record.transform.name.replace("&", "&amp;")}'
313
+ if record.transform.name:
314
+ name = f'{record.transform.name.replace("&", "&amp;")}'
315
+ elif record.transform.key:
316
+ name = f'{record.transform.key.replace("&", "&amp;")}'
317
+ else:
318
+ name = f"{record.transform.uid}"
314
319
  user_display = (
315
320
  record.created_by.handle
316
321
  if record.created_by.name is None
@@ -365,7 +370,6 @@ def _get_all_parent_runs(data: Artifact | Collection) -> list:
365
370
  inputs_run += (
366
371
  r.input_collections.all().filter(visibility__in=[0, 1]).list()
367
372
  )
368
- run_inputs_outputs += [(inputs_run, r)]
369
373
  outputs_run = (
370
374
  r.__getattribute__(f"output_{name}s")
371
375
  .all()
@@ -376,7 +380,18 @@ def _get_all_parent_runs(data: Artifact | Collection) -> list:
376
380
  outputs_run += (
377
381
  r.output_collections.all().filter(visibility__in=[0, 1]).list()
378
382
  )
379
- run_inputs_outputs += [(r, outputs_run)]
383
+ # if inputs are outputs artifacts are the same, will result infinite loop
384
+ # so only show as outputs
385
+ overlap = set(inputs_run).intersection(outputs_run)
386
+ if overlap:
387
+ logger.warning(
388
+ f"The following artifacts are both inputs and outputs of Run(uid={r.uid}): {overlap}\n → Only showing as outputs."
389
+ )
390
+ inputs_run = list(set(inputs_run) - overlap)
391
+ if len(inputs_run) > 0:
392
+ run_inputs_outputs += [(inputs_run, r)]
393
+ if len(outputs_run) > 0:
394
+ run_inputs_outputs += [(r, outputs_run)]
380
395
  inputs += inputs_run
381
396
  runs = [f.run for f in inputs if f.run is not None]
382
397
  return run_inputs_outputs
@@ -98,26 +98,11 @@ class QueryManager(models.Manager):
98
98
 
99
99
  return _lookup(cls=self.all(), field=field, **kwargs)
100
100
 
101
- def __getitem__(self, item: str):
102
- try:
103
- source_field_name = self.source_field_name
104
- target_field_name = self.target_field_name
105
-
106
- if (
107
- source_field_name in {"artifact", "collection"}
108
- and target_field_name == "feature_set"
109
- ):
110
- return get_feature_set_by_slot_(host=self.instance).get(item)
111
-
112
- except Exception: # pragma: no cover
113
- return
114
-
115
101
 
116
102
  models.Manager.list = QueryManager.list
117
103
  models.Manager.df = QueryManager.df
118
104
  models.Manager.search = QueryManager.search
119
105
  models.Manager.lookup = QueryManager.lookup
120
- models.Manager.__getitem__ = QueryManager.__getitem__
121
106
  models.Manager._track_run_input_manager = QueryManager._track_run_input_manager
122
107
  # the two lines below would be easy if we could actually inherit; like this,
123
108
  # they're suboptimal
@@ -115,7 +115,7 @@ def get(
115
115
  else:
116
116
  assert idlike is None # noqa: S101
117
117
  expressions = process_expressions(registry, expressions)
118
- return registry.objects.get(**expressions)
118
+ return registry.objects.using(qs.db).get(**expressions)
119
119
 
120
120
 
121
121
  class RecordsList(UserList):
@@ -376,6 +376,8 @@ def using(
376
376
  instance: str | None,
377
377
  ) -> QuerySet:
378
378
  """{}""" # noqa: D415
379
+ from ._query_set import QuerySet
380
+
379
381
  if instance is None:
380
382
  return QuerySet(model=cls, using=None)
381
383
  owner, name = get_owner_name_from_identifier(instance)
@@ -395,15 +397,15 @@ def using(
395
397
  if not source_schema.issubset(target_schema):
396
398
  missing_members = source_schema - target_schema
397
399
  logger.warning(
398
- f"source schema has additional modules: {missing_members}\nconsider mounting these schema modules to not encounter errors"
400
+ f"source schema has additional modules: {missing_members}\nconsider mounting these schema modules to transfer all metadata"
399
401
  )
400
- cache_filepath.write_text(iresult["lnid"]) # type: ignore
402
+ cache_filepath.write_text(f"{iresult['lnid']}\n{iresult['schema_str']}") # type: ignore
401
403
  settings_file = instance_settings_file(name, owner)
402
404
  db = update_db_using_local(iresult, settings_file)
403
405
  else:
404
406
  isettings = load_instance_settings(settings_file)
405
407
  db = isettings.db
406
- cache_filepath.write_text(isettings.uid)
408
+ cache_filepath.write_text(f"{isettings.uid}\n{','.join(isettings.schema)}") # type: ignore
407
409
  add_db_connection(db, instance)
408
410
  return QuerySet(model=cls, using=instance)
409
411
 
@@ -470,7 +472,7 @@ def get_transfer_run(record) -> Run:
470
472
  cache_filepath = ln_setup.settings.cache_dir / f"instance--{owner}--{name}--uid.txt"
471
473
  if not cache_filepath.exists():
472
474
  raise SystemExit("Need to call .using() before")
473
- instance_uid = cache_filepath.read_text()
475
+ instance_uid = cache_filepath.read_text().split("\n")[0]
474
476
  key = f"transfers/{instance_uid}"
475
477
  uid = instance_uid + "0000"
476
478
  transform = Transform.filter(uid=uid).one_or_none()
@@ -438,7 +438,7 @@ class Context:
438
438
  )
439
439
  return (
440
440
  f'Filename "{key}" clashes with the existing key "{transform.key}" for uid "{transform.uid[:-4]}...."\n\nEither init a new transform with a new uid:\n\n'
441
- f'ln.track("{ids.base62_12()}0000)"\n\n{update_key_note}'
441
+ f'ln.track("{ids.base62_12()}0000")\n\n{update_key_note}'
442
442
  )
443
443
 
444
444
  # make a new transform record
@@ -6,7 +6,7 @@ from django.db.models.fields.reverse_related import ManyToManyRel, ManyToOneRel
6
6
  from django.db.models.functions import JSONObject
7
7
  from lnschema_core.models import Artifact, FeatureSet, Record
8
8
 
9
- from .schema import dict_related_model_to_related_name
9
+ from .schema import dict_related_model_to_related_name, get_schemas_modules
10
10
 
11
11
 
12
12
  def get_related_model(model, field_name):
@@ -35,22 +35,36 @@ def get_artifact_with_related(
35
35
  """Fetch an artifact with its related data."""
36
36
  from lamindb._can_validate import get_name_field
37
37
 
38
+ from ._label_manager import LABELS_EXCLUDE_SET
39
+
38
40
  model = artifact.__class__
39
- foreign_key_fields = [f.name for f in model._meta.fields if f.is_relation]
41
+ schema_modules = get_schemas_modules(artifact._state.db)
42
+
43
+ foreign_key_fields = [
44
+ f.name
45
+ for f in model._meta.fields
46
+ if f.is_relation and f.related_model.__get_schema_name__() in schema_modules
47
+ ]
40
48
 
41
49
  m2m_relations = (
42
50
  []
43
51
  if not include_m2m
44
52
  else [
45
53
  v
46
- for v in dict_related_model_to_related_name(model).values()
47
- if not v.startswith("_")
54
+ for v in dict_related_model_to_related_name(
55
+ model, instance=artifact._state.db
56
+ ).values()
57
+ if not v.startswith("_") and v not in LABELS_EXCLUDE_SET
48
58
  ]
49
59
  )
50
60
  link_tables = (
51
61
  []
52
62
  if not include_feature_link
53
- else list(dict_related_model_to_related_name(model, links=True).values())
63
+ else list(
64
+ dict_related_model_to_related_name(
65
+ model, links=True, instance=artifact._state.db
66
+ ).values()
67
+ )
54
68
  )
55
69
 
56
70
  # Clear previous queries
@@ -216,9 +216,11 @@ def _print_categoricals(
216
216
  if not print_params:
217
217
  labels_msg = ""
218
218
  labels_by_feature = defaultdict(list)
219
- for _, (_, links) in get_labels_as_dict(self, links=True).items():
219
+ for _, (_, links) in get_labels_as_dict(
220
+ self, links=True, instance=self._state.db
221
+ ).items():
220
222
  for link in links:
221
- if link.feature_id is not None:
223
+ if hasattr(link, "feature_id") and link.feature_id is not None:
222
224
  link_attr = get_link_attr(link, self)
223
225
  labels_by_feature[link.feature_id].append(
224
226
  getattr(link, link_attr).name
@@ -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,68 @@ 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
@@ -0,0 +1,95 @@
1
+ from __future__ import annotations
2
+
3
+ import lamindb_setup as ln_setup
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
10
+ from lnschema_core.models import Feature, FeatureSet, LinkORM, Record
11
+
12
+
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)
39
+ d: dict = {
40
+ i.related_model.__get_name_with_schema__(): i.related_model
41
+ for i in registry._meta.related_objects
42
+ if i.related_name is not None
43
+ and i.related_model.__get_schema_name__() in schema_modules
44
+ }
45
+ d.update(
46
+ {
47
+ i.related_model.__get_name_with_schema__(): i.related_model
48
+ for i in registry._meta.many_to_many
49
+ if i.name is not None
50
+ and i.related_model.__get_schema_name__() in schema_modules
51
+ }
52
+ )
53
+ return d
54
+
55
+
56
+ def dict_related_model_to_related_name(
57
+ registry: type[Record], links: bool = False, instance: str | None = None
58
+ ) -> dict[str, str]:
59
+ def include(model: Record):
60
+ return not links != issubclass(model, LinkORM)
61
+
62
+ schema_modules = get_schemas_modules(instance)
63
+
64
+ related_objects = registry._meta.related_objects + registry._meta.many_to_many
65
+ d: dict = {
66
+ record.related_model.__get_name_with_schema__(): (
67
+ record.related_name
68
+ if not isinstance(record, ManyToManyField)
69
+ else record.name
70
+ )
71
+ for record in related_objects
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
+ )
77
+ }
78
+ return d
79
+
80
+
81
+ def get_related_name(features_type: type[Record]) -> str:
82
+ candidates = [
83
+ field.related_name
84
+ for field in FeatureSet._meta.related_objects
85
+ if field.related_model == features_type
86
+ ]
87
+ if not candidates:
88
+ raise ValueError(
89
+ f"Can't create feature sets from {features_type.__name__} because it's not"
90
+ " related to it!\nYou need to create a link model between FeatureSet and"
91
+ " your Record in your custom schema.\nTo do so, add a"
92
+ " line:\nfeature_sets = models.ManyToMany(FeatureSet,"
93
+ " related_name='mythings')\n"
94
+ )
95
+ return candidates[0]
@@ -17,7 +17,7 @@ dependencies = [
17
17
  # Lamin PINNED packages
18
18
  "lnschema_core==0.75.0",
19
19
  "lamin_utils==0.13.6",
20
- "lamin_cli==0.18.0",
20
+ "lamin_cli==0.19.0",
21
21
  # PINNED in lamin-cli
22
22
  "lamindb_setup",
23
23
  # others