lamindb 0.73.1__tar.gz → 0.74.0__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 (376) hide show
  1. {lamindb-0.73.1 → lamindb-0.74.0}/.github/workflows/build.yml +6 -0
  2. {lamindb-0.73.1 → lamindb-0.74.0}/PKG-INFO +4 -4
  3. {lamindb-0.73.1 → lamindb-0.74.0}/docs/changelog.md +17 -0
  4. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq/setup.ipynb +1 -1
  5. {lamindb-0.73.1 → lamindb-0.74.0}/docs/introduction.ipynb +46 -4
  6. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/__init__.py +7 -4
  7. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_artifact.py +16 -21
  8. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_feature.py +2 -2
  9. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_finish.py +8 -2
  10. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_from_values.py +18 -6
  11. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_registry.py +1 -1
  12. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_run.py +2 -1
  13. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_storage.py +0 -6
  14. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_view.py +9 -2
  15. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/__init__.py +4 -1
  16. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/_data.py +6 -3
  17. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/_feature_manager.py +242 -107
  18. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/_run_context.py +1 -21
  19. {lamindb-0.73.1 → lamindb-0.74.0}/noxfile.py +1 -1
  20. {lamindb-0.73.1 → lamindb-0.74.0}/pyproject.toml +8 -3
  21. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/bionty/__init__.py +1 -1
  22. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/pyproject.toml +1 -1
  23. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/test_migrate.py +1 -1
  24. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/changelog.md +2 -0
  25. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-prod/test-sqlite-lock.ipynb +3 -0
  26. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/__init__.py +1 -1
  27. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_settings_instance.py +15 -3
  28. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/cloud_sqlite_locker.py +2 -1
  29. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-cloud/test_connect_instance.py +7 -7
  30. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/storage/test_storage_access.py +1 -1
  31. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/docs/changelog.md +1 -0
  32. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/__init__.py +1 -1
  33. lamindb-0.74.0/sub/lnschema-bionty/lnschema_bionty/migrations/0029_alter_cellline_previous_runs_and_more.py +83 -0
  34. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/pyproject.toml +1 -1
  35. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/tests/test_integrity.py +5 -1
  36. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/CHANGELOG.md +2 -0
  37. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/__init__.py +1 -1
  38. lamindb-0.74.0/sub/lnschema-core/lnschema_core/migrations/0054_alter_feature_previous_runs_and_more.py +35 -0
  39. lamindb-0.74.0/sub/lnschema-core/lnschema_core/migrations/0055_artifact_type_artifactparamvalue_and_more.py +61 -0
  40. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/models.py +130 -76
  41. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/types.py +6 -0
  42. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/tests/test_integrity.py +5 -1
  43. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_artifact.py +11 -0
  44. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_feature_manager.py +62 -3
  45. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_run_context.py +33 -10
  46. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_transfer.py +1 -1
  47. {lamindb-0.73.1 → lamindb-0.74.0}/.github/workflows/latest-changes.jinja2 +0 -0
  48. {lamindb-0.73.1 → lamindb-0.74.0}/.github/workflows/latest-changes.yml +0 -0
  49. {lamindb-0.73.1 → lamindb-0.74.0}/.gitignore +0 -0
  50. {lamindb-0.73.1 → lamindb-0.74.0}/.gitmodules +0 -0
  51. {lamindb-0.73.1 → lamindb-0.74.0}/.pre-commit-config.yaml +0 -0
  52. {lamindb-0.73.1 → lamindb-0.74.0}/LICENSE +0 -0
  53. {lamindb-0.73.1 → lamindb-0.74.0}/README.md +0 -0
  54. {lamindb-0.73.1 → lamindb-0.74.0}/docs/annotate-for-developers.ipynb +0 -0
  55. {lamindb-0.73.1 → lamindb-0.74.0}/docs/annotate.ipynb +0 -0
  56. {lamindb-0.73.1 → lamindb-0.74.0}/docs/bio-registries.ipynb +0 -0
  57. {lamindb-0.73.1 → lamindb-0.74.0}/docs/bionty-base.md +0 -0
  58. {lamindb-0.73.1 → lamindb-0.74.0}/docs/bionty.md +0 -0
  59. {lamindb-0.73.1 → lamindb-0.74.0}/docs/can-validate.ipynb +0 -0
  60. {lamindb-0.73.1 → lamindb-0.74.0}/docs/data.ipynb +0 -0
  61. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq/acid.ipynb +0 -0
  62. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq/delete.ipynb +0 -0
  63. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq/idempotency.ipynb +0 -0
  64. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq/import-schema.ipynb +0 -0
  65. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq/keep-artifacts-local.ipynb +0 -0
  66. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq/key.ipynb +0 -0
  67. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq/reference-field.ipynb +0 -0
  68. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq/test_notebooks.py +0 -0
  69. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq/track-run-inputs.ipynb +0 -0
  70. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq/visibility.ipynb +0 -0
  71. {lamindb-0.73.1 → lamindb-0.74.0}/docs/faq.md +0 -0
  72. {lamindb-0.73.1 → lamindb-0.74.0}/docs/features-lamindb.md +0 -0
  73. {lamindb-0.73.1 → lamindb-0.74.0}/docs/features-laminhub.md +0 -0
  74. {lamindb-0.73.1 → lamindb-0.74.0}/docs/guide.md +0 -0
  75. {lamindb-0.73.1 → lamindb-0.74.0}/docs/index.md +0 -0
  76. {lamindb-0.73.1 → lamindb-0.74.0}/docs/installation.md +0 -0
  77. {lamindb-0.73.1 → lamindb-0.74.0}/docs/lamin-utils.md +0 -0
  78. {lamindb-0.73.1 → lamindb-0.74.0}/docs/lamindb.md +0 -0
  79. {lamindb-0.73.1 → lamindb-0.74.0}/docs/meta.ipynb +0 -0
  80. {lamindb-0.73.1 → lamindb-0.74.0}/docs/nbproject.md +0 -0
  81. {lamindb-0.73.1 → lamindb-0.74.0}/docs/query-search.md +0 -0
  82. {lamindb-0.73.1 → lamindb-0.74.0}/docs/readfcs.md +0 -0
  83. {lamindb-0.73.1 → lamindb-0.74.0}/docs/reference.md +0 -0
  84. {lamindb-0.73.1 → lamindb-0.74.0}/docs/schemas.ipynb +0 -0
  85. {lamindb-0.73.1 → lamindb-0.74.0}/docs/setup.ipynb +0 -0
  86. {lamindb-0.73.1 → lamindb-0.74.0}/docs/signup-login.md +0 -0
  87. {lamindb-0.73.1 → lamindb-0.74.0}/docs/storage/add-replace-stage.ipynb +0 -0
  88. {lamindb-0.73.1 → lamindb-0.74.0}/docs/storage/anndata-accessor.ipynb +0 -0
  89. {lamindb-0.73.1 → lamindb-0.74.0}/docs/storage/prepare-transfer-local-to-cloud.ipynb +0 -0
  90. {lamindb-0.73.1 → lamindb-0.74.0}/docs/storage/test-files/iris.csv +0 -0
  91. {lamindb-0.73.1 → lamindb-0.74.0}/docs/storage/test-files/iris.data +0 -0
  92. {lamindb-0.73.1 → lamindb-0.74.0}/docs/storage/test-files/new_iris.csv +0 -0
  93. {lamindb-0.73.1 → lamindb-0.74.0}/docs/storage/test_notebooks.py +0 -0
  94. {lamindb-0.73.1 → lamindb-0.74.0}/docs/storage/transfer-local-to-cloud.ipynb +0 -0
  95. {lamindb-0.73.1 → lamindb-0.74.0}/docs/storage/upload.ipynb +0 -0
  96. {lamindb-0.73.1 → lamindb-0.74.0}/docs/storage/vitessce.ipynb +0 -0
  97. {lamindb-0.73.1 → lamindb-0.74.0}/docs/storage.md +0 -0
  98. {lamindb-0.73.1 → lamindb-0.74.0}/docs/test_notebooks.py +0 -0
  99. {lamindb-0.73.1 → lamindb-0.74.0}/docs/track.ipynb +0 -0
  100. {lamindb-0.73.1 → lamindb-0.74.0}/docs/transfer.ipynb +0 -0
  101. {lamindb-0.73.1 → lamindb-0.74.0}/docs/tutorial.ipynb +0 -0
  102. {lamindb-0.73.1 → lamindb-0.74.0}/docs/tutorial2.ipynb +0 -0
  103. {lamindb-0.73.1 → lamindb-0.74.0}/docs/wetlab.md +0 -0
  104. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_annotate.py +0 -0
  105. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_can_validate.py +0 -0
  106. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_collection.py +0 -0
  107. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_feature_set.py +0 -0
  108. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_filter.py +0 -0
  109. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_is_versioned.py +0 -0
  110. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_parents.py +0 -0
  111. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_query_manager.py +0 -0
  112. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_query_set.py +0 -0
  113. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_save.py +0 -0
  114. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_transform.py +0 -0
  115. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_ulabel.py +0 -0
  116. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/_utils.py +0 -0
  117. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/_label_manager.py +0 -0
  118. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/_mapped_collection.py +0 -0
  119. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/_settings.py +0 -0
  120. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/_sync_git.py +0 -0
  121. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/_track_environment.py +0 -0
  122. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/_transform_settings.py +0 -0
  123. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/datasets/__init__.py +0 -0
  124. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/datasets/_core.py +0 -0
  125. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/datasets/_fake.py +0 -0
  126. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/exceptions.py +0 -0
  127. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/fields.py +0 -0
  128. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/schema.py +0 -0
  129. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/storage/__init__.py +0 -0
  130. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/storage/_anndata_sizes.py +0 -0
  131. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/storage/_backed_access.py +0 -0
  132. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/storage/_valid_suffixes.py +0 -0
  133. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/storage/_zarr.py +0 -0
  134. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/storage/objects.py +0 -0
  135. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/storage/paths.py +0 -0
  136. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/types.py +0 -0
  137. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/core/versioning.py +0 -0
  138. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/integrations/__init__.py +0 -0
  139. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/integrations/_vitessce.py +0 -0
  140. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/setup/__init__.py +0 -0
  141. {lamindb-0.73.1 → lamindb-0.74.0}/lamindb/setup/core/__init__.py +0 -0
  142. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/.github/workflows/build.yml +0 -0
  143. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/.github/workflows/latest-changes.jinja2 +0 -0
  144. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/.github/workflows/latest-changes.yml +0 -0
  145. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/.gitignore +0 -0
  146. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/.pre-commit-config.yaml +0 -0
  147. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/LICENSE +0 -0
  148. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/README.md +0 -0
  149. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/bionty/core/__init__.py +0 -0
  150. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/docs/changelog.md +0 -0
  151. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/docs/index.md +0 -0
  152. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/docs/reference.md +0 -0
  153. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/lamin-project.yaml +0 -0
  154. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/noxfile.py +0 -0
  155. {lamindb-0.73.1 → lamindb-0.74.0}/sub/bionty/tests/test_notebooks.py +0 -0
  156. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/.gitignore +0 -0
  157. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/.pre-commit-config.yaml +0 -0
  158. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/README.md +0 -0
  159. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/lamin_cli/__init__.py +0 -0
  160. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/lamin_cli/__main__.py +0 -0
  161. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/lamin_cli/_cache.py +0 -0
  162. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/lamin_cli/_get.py +0 -0
  163. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/lamin_cli/_migration.py +0 -0
  164. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/lamin_cli/_save.py +0 -0
  165. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/pyproject.toml +0 -0
  166. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/conftest.py +0 -0
  167. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/notebooks/not-initialized.ipynb +0 -0
  168. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-consecutive.ipynb +0 -0
  169. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-non-consecutive.ipynb +0 -0
  170. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/scripts/merely-import-lamindb.py +0 -0
  171. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/scripts/run-track-and-finish-sync-git.py +0 -0
  172. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/scripts/run-track-and-finish.py +0 -0
  173. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/test_cli.py +0 -0
  174. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/test_get.py +0 -0
  175. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/test_multi_process.py +0 -0
  176. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/test_save_files.py +0 -0
  177. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/test_save_notebooks.py +0 -0
  178. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamin-cli/tests/test_save_scripts.py +0 -0
  179. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/.github/workflows/build.yml +0 -0
  180. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/.github/workflows/latest-changes.jinja2 +0 -0
  181. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/.github/workflows/latest-changes.yml +0 -0
  182. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/.gitignore +0 -0
  183. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/.pre-commit-config.yaml +0 -0
  184. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/LICENSE +0 -0
  185. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/README.md +0 -0
  186. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-cloud/01-init-local-instance.ipynb +0 -0
  187. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-cloud/02-connect-local-instance.ipynb +0 -0
  188. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-cloud/03-add-managed-storage.ipynb +0 -0
  189. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-cloud/04-test-bionty.ipynb +0 -0
  190. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-cloud/05-init-hosted-instance.ipynb +0 -0
  191. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-cloud/06-connect-hosted-instance.ipynb +0 -0
  192. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-cloud/07-keep-artifacts-local.ipynb +0 -0
  193. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-cloud/test-multi-session.ipynb +0 -0
  194. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-cloud/test_notebooks.py +0 -0
  195. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-prod/test-cache-management.ipynb +0 -0
  196. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-prod/test-cloud-sync.ipynb +0 -0
  197. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-prod/test-connect-anonymously.ipynb +0 -0
  198. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-prod/test-empty-init.ipynb +0 -0
  199. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-prod/test-import-schema.ipynb +0 -0
  200. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-prod/test-insufficient-user-info.ipynb +0 -0
  201. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-prod/test-invalid-schema.ipynb +0 -0
  202. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/hub-prod/test_notebooks2.py +0 -0
  203. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/index.md +0 -0
  204. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/notebooks.md +0 -0
  205. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/docs/reference.md +0 -0
  206. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_cache.py +0 -0
  207. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_check.py +0 -0
  208. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_check_setup.py +0 -0
  209. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_close.py +0 -0
  210. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_connect_instance.py +0 -0
  211. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_delete.py +0 -0
  212. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_django.py +0 -0
  213. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_exportdb.py +0 -0
  214. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_importdb.py +0 -0
  215. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_init_instance.py +0 -0
  216. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_migrate.py +0 -0
  217. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_register_instance.py +0 -0
  218. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_schema.py +0 -0
  219. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_schema_metadata.py +0 -0
  220. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_set_managed_storage.py +0 -0
  221. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_setup_user.py +0 -0
  222. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/_silence_loggers.py +0 -0
  223. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/__init__.py +0 -0
  224. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_aws_credentials.py +0 -0
  225. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_aws_storage.py +0 -0
  226. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_deprecated.py +0 -0
  227. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_docs.py +0 -0
  228. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_hub_client.py +0 -0
  229. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_hub_core.py +0 -0
  230. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_hub_crud.py +0 -0
  231. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_hub_utils.py +0 -0
  232. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_settings.py +0 -0
  233. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_settings_load.py +0 -0
  234. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_settings_save.py +0 -0
  235. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_settings_storage.py +0 -0
  236. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_settings_store.py +0 -0
  237. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_settings_user.py +0 -0
  238. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/_setup_bionty_sources.py +0 -0
  239. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/django.py +0 -0
  240. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/exceptions.py +0 -0
  241. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/hashing.py +0 -0
  242. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/types.py +0 -0
  243. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/lamindb_setup/core/upath.py +0 -0
  244. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/noxfile.py +0 -0
  245. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/pyproject.toml +0 -0
  246. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-cloud/test_delete_instance.py +0 -0
  247. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-cloud/test_init_instance.py +0 -0
  248. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-cloud/test_login.py +0 -0
  249. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-cloud/test_migrate.py +0 -0
  250. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-cloud/test_set_storage.py +0 -0
  251. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-local/conftest.py +0 -0
  252. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-local/test_all.py +0 -0
  253. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-local/test_update_schema_in_hub.py +0 -0
  254. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-prod/conftest.py +0 -0
  255. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-prod/test_auto_connect.py +0 -0
  256. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-prod/test_django.py +0 -0
  257. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-prod/test_switch_and_fallback_env.py +0 -0
  258. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/hub-prod/test_upath.py +0 -0
  259. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/storage/test_hashing.py +0 -0
  260. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/storage/test_storage_basis.py +0 -0
  261. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/storage/test_storage_stats.py +0 -0
  262. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lamindb-setup/tests/storage/test_to_url.py +0 -0
  263. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/.github/workflows/build.yml +0 -0
  264. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/.github/workflows/latest-changes.jinja2 +0 -0
  265. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/.github/workflows/latest-changes.yml +0 -0
  266. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/.gitignore +0 -0
  267. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/.pre-commit-config.yaml +0 -0
  268. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/LICENSE +0 -0
  269. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/README.md +0 -0
  270. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/docs/index.md +0 -0
  271. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/docs/reference.md +0 -0
  272. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lamin-project.yaml +0 -0
  273. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/_bionty.py +0 -0
  274. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/core/__init__.py +0 -0
  275. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/core/_bionty.py +0 -0
  276. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/core/_settings.py +0 -0
  277. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/ids.py +0 -0
  278. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/migrations/0023_rename_publicsource_encode_uid.py +0 -0
  279. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/migrations/0024_remove_cellline_collections_and_more.py +0 -0
  280. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/migrations/0025_artifactcellline_alter_cellline_artifacts_and_more.py +0 -0
  281. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/migrations/0026_artifactcellline_cell_line_ref_is_name_and_more.py +0 -0
  282. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/migrations/0027_remove_artifactcellline_created_at_and_more.py +0 -0
  283. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/migrations/0028_artifactcellline_created_at_and_more.py +0 -0
  284. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/migrations/0028_squashed.py +0 -0
  285. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/migrations/__init__.py +0 -0
  286. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/lnschema_bionty/models.py +0 -0
  287. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-bionty/noxfile.py +0 -0
  288. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/.github/workflows/build.yml +0 -0
  289. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/.github/workflows/latest-changes.jinja2 +0 -0
  290. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/.github/workflows/latest-changes.yml +0 -0
  291. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/.gitignore +0 -0
  292. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/.pre-commit-config.yaml +0 -0
  293. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/LICENSE +0 -0
  294. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/README.md +0 -0
  295. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/ids.py +0 -0
  296. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0037_rename_dataset_to_collection.py +0 -0
  297. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0038_alter_collection_artifact_alter_collection_artifacts_and_more.py +0 -0
  298. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0039_remove_collection_artifacts_collectionartifact_and_more.py +0 -0
  299. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0040_alter_transform_type.py +0 -0
  300. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0041_remove_transform_short_name_transform_description_and_more.py +0 -0
  301. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0042_rename_run_at_run_started_at_run_finished_at.py +0 -0
  302. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0043_run_json.py +0 -0
  303. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0044_run_replicated_outputs_transform_ulabels_and_more.py +0 -0
  304. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0045_rename_replicated_outputs_run_replicated_output_artifacts_and_more.py +0 -0
  305. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0046_storage_instance_uid.py +0 -0
  306. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0047_featurevalue_artifactfeaturevalue_and_more.py +0 -0
  307. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0048_alter_artifactulabel_feature_and_more.py +0 -0
  308. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0049_rename_type_feature_dtype_and_more.py +0 -0
  309. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0050_artifactfeatureset_feature_ref_is_semantic_and_more.py +0 -0
  310. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0051_remove_feature_feature_sets_featuresetfeature_and_more.py +0 -0
  311. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0052_rename_feature_value_artifactfeaturevalue_featurevalue_and_more.py +0 -0
  312. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0052_squashed.py +0 -0
  313. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/0053_alter_featureset_hash_alter_paramvalue_created_by_and_more.py +0 -0
  314. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/migrations/__init__.py +0 -0
  315. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/mocks.py +0 -0
  316. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/lnschema_core/users.py +0 -0
  317. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/noxfile.py +0 -0
  318. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/pyproject.toml +0 -0
  319. {lamindb-0.73.1 → lamindb-0.74.0}/sub/lnschema-core/tests/test_types.py +0 -0
  320. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/.github/workflows/build.yml +0 -0
  321. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/.github/workflows/deploy-instance-apis.yml +0 -0
  322. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/.github/workflows/latest-changes.jinja2 +0 -0
  323. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/.github/workflows/latest-changes.yml +0 -0
  324. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/.gitignore +0 -0
  325. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/.pre-commit-config.yaml +0 -0
  326. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/README.md +0 -0
  327. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/docs/changelog.md +0 -0
  328. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/docs/guide/01-get-started.ipynb +0 -0
  329. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/docs/guide/index.md +0 -0
  330. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/docs/index.md +0 -0
  331. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/docs/reference.md +0 -0
  332. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/noxfile.py +0 -0
  333. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/pyproject.toml +0 -0
  334. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/tests/test_integrity.py +0 -0
  335. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/tests/test_notebooks.py +0 -0
  336. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/wetlab/__init__.py +0 -0
  337. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/wetlab/migrations/0017_remove_biosample_artifacts.py +0 -0
  338. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/wetlab/migrations/0018_squashed.py +0 -0
  339. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/wetlab/migrations/0018_well_created_at_well_created_by_well_updated_at.py +0 -0
  340. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/wetlab/migrations/__init__.py +0 -0
  341. {lamindb-0.73.1 → lamindb-0.74.0}/sub/wetlab/wetlab/models.py +0 -0
  342. {lamindb-0.73.1 → lamindb-0.74.0}/tests/conftest.py +0 -0
  343. {lamindb-0.73.1 → lamindb-0.74.0}/tests/notebooks/initialized-with-nbproject.ipynb +0 -0
  344. {lamindb-0.73.1 → lamindb-0.74.0}/tests/notebooks/no-title.ipynb +0 -0
  345. {lamindb-0.73.1 → lamindb-0.74.0}/tests/notebooks/not-initialized.ipynb +0 -0
  346. {lamindb-0.73.1 → lamindb-0.74.0}/tests/notebooks/with-title-initialized-consecutive-finish-not-last-cell.ipynb +0 -0
  347. {lamindb-0.73.1 → lamindb-0.74.0}/tests/notebooks/with-title-initialized-consecutive-finish.ipynb +0 -0
  348. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_annotate.py +0 -0
  349. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_artifact_folders.py +0 -0
  350. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_cache.py +0 -0
  351. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_can_validate.py +0 -0
  352. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_collection.py +0 -0
  353. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_data.py +0 -0
  354. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_db.py +0 -0
  355. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_delete.py +0 -0
  356. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_feature.py +0 -0
  357. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_feature_set.py +0 -0
  358. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_from_values.py +0 -0
  359. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_label_manager.py +0 -0
  360. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_load.py +0 -0
  361. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_manager.py +0 -0
  362. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_notebooks.py +0 -0
  363. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_parents.py +0 -0
  364. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_queryset.py +0 -0
  365. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_registry.py +0 -0
  366. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_run.py +0 -0
  367. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_save.py +0 -0
  368. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_search.py +0 -0
  369. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_settings.py +0 -0
  370. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_storage.py +0 -0
  371. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_transform.py +0 -0
  372. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_uid.py +0 -0
  373. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_ulabel.py +0 -0
  374. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_versioning.py +0 -0
  375. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_view.py +0 -0
  376. {lamindb-0.73.1 → lamindb-0.74.0}/tests/test_visibility.py +0 -0
@@ -119,6 +119,12 @@ jobs:
119
119
  env:
120
120
  NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
121
121
  NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
122
+ - uses: peter-evans/repository-dispatch@v2
123
+ if: ${{ github.event_name == 'push' }}
124
+ with:
125
+ token: ${{ secrets.LAMIN_BUILD_DOCS }}
126
+ repository: "laminlabs/lamin-docs"
127
+ event-type: build
122
128
 
123
129
  coverage:
124
130
  needs: test
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamindb
3
- Version: 0.73.1
3
+ Version: 0.74.0
4
4
  Summary: A data framework for biology.
5
5
  Author-email: Lamin Labs <open-source@lamin.ai>
6
6
  Requires-Python: >=3.8
@@ -9,8 +9,8 @@ Classifier: Programming Language :: Python :: 3.8
9
9
  Classifier: Programming Language :: Python :: 3.9
10
10
  Classifier: Programming Language :: Python :: 3.10
11
11
  Classifier: Programming Language :: Python :: 3.11
12
- Requires-Dist: lnschema_core==0.68.1
13
- Requires-Dist: lamindb_setup==0.73.1
12
+ Requires-Dist: lnschema_core==0.70.0
13
+ Requires-Dist: lamindb_setup==0.73.2
14
14
  Requires-Dist: lamin_utils==0.13.2
15
15
  Requires-Dist: lamin_cli==0.14.0
16
16
  Requires-Dist: rapidfuzz
@@ -25,7 +25,7 @@ Requires-Dist: graphviz
25
25
  Requires-Dist: psycopg2-binary
26
26
  Requires-Dist: psutil
27
27
  Requires-Dist: lamindb_setup[aws] ; extra == "aws"
28
- Requires-Dist: bionty==0.43.1 ; extra == "bionty"
28
+ Requires-Dist: bionty==0.44.0 ; extra == "bionty"
29
29
  Requires-Dist: pandas<2 ; extra == "dev"
30
30
  Requires-Dist: pre-commit ; extra == "dev"
31
31
  Requires-Dist: nox ; extra == "dev"
@@ -12,8 +12,25 @@ LaminDB implements "migration-based versioning". When upgrading your LaminDB ins
12
12
  .. role:: small
13
13
  ```
14
14
 
15
+ ## 0.74
16
+
17
+ ### 0.74.0 {small}`2024-06-19`
18
+
19
+ You can now distinguish model-like and dataset-like artifacts via a `type` field in the `Artifact` registry.
20
+
21
+ Leverage `artifact.params.add_values()` to annotate model-like artifacts like you leverage `artifact.features.add_values()` to annotate dataset-like artifacts.
22
+
23
+ - 🏗️ Add `type` field to `Artifact`, allow linking model-like artifacts against params, validate params akin to validating features, enable features-based annotation with non-ulabels [PR](https://github.com/laminlabs/lamindb/pull/1690) [@falexwolf](https://github.com/falexwolf)
24
+ - 🚸 Support dict in add_values [PR](https://github.com/laminlabs/lamindb/pull/1705) [@Zethson](https://github.com/Zethson)
25
+ - ♻️ Refactor after upath upgrade [PR](https://github.com/laminlabs/lamindb/pull/1699) [PR](https://github.com/laminlabs/lamindb/pull/1700) [@Koncopd](https://github.com/Koncopd)
26
+
15
27
  ## 0.73
16
28
 
29
+ ### 0.73.2 {small}`2024-06-13`
30
+
31
+ - 🐛 Fix clashing reverse accessors for `.previous_runs` and `.run` [PR](https://github.com/laminlabs/lamindb/pull/1698) [@falexwolf](https://github.com/falexwolf)
32
+ - 🐛 Import IPython inside view [PR](https://github.com/laminlabs/lamindb/pull/1696) [@Koncopd](https://github.com/Koncopd)
33
+
17
34
  ### 0.73.1 {small}`2024-06-05`
18
35
 
19
36
  - 🏗️ Instantly synchronize instance schema with the hub [PR](https://github.com/laminlabs/lamindb/pull/1689) [@fredericenard](https://github.com/fredericenard)
@@ -54,7 +54,7 @@
54
54
  },
55
55
  "outputs": [],
56
56
  "source": [
57
- "with pytest.raises(ln.InstanceNotSetupError):\n",
57
+ "with pytest.raises(ln._InstanceNotSetupError):\n",
58
58
  " ln.track()"
59
59
  ]
60
60
  },
@@ -77,6 +77,26 @@
77
77
  "!lamin init --storage ./lamin-intro --schema bionty"
78
78
  ]
79
79
  },
80
+ {
81
+ "cell_type": "markdown",
82
+ "metadata": {},
83
+ "source": [
84
+ "Now you're ready to import lamindb in a Python session."
85
+ ]
86
+ },
87
+ {
88
+ "cell_type": "code",
89
+ "execution_count": null,
90
+ "metadata": {
91
+ "tags": [
92
+ "hide-output"
93
+ ]
94
+ },
95
+ "outputs": [],
96
+ "source": [
97
+ "import lamindb as ln"
98
+ ]
99
+ },
80
100
  {
81
101
  "cell_type": "markdown",
82
102
  "metadata": {},
@@ -98,8 +118,6 @@
98
118
  },
99
119
  "outputs": [],
100
120
  "source": [
101
- "import lamindb as ln\n",
102
- "\n",
103
121
  "# copy-pasted identifiers for your notebook or script\n",
104
122
  "ln.settings.transform.stem_uid = \"FPnfDtJz8qbE\" # <-- auto-generated by running ln.track()\n",
105
123
  "ln.settings.transform.version = \"1\" # <-- auto-generated by running ln.track()\n",
@@ -107,7 +125,7 @@
107
125
  "# track the execution of your notebook or script\n",
108
126
  "run = ln.track()\n",
109
127
  "\n",
110
- "# get your currently running transform\n",
128
+ "# see your currently running transform\n",
111
129
  "run.transform"
112
130
  ]
113
131
  },
@@ -115,7 +133,31 @@
115
133
  "cell_type": "markdown",
116
134
  "metadata": {},
117
135
  "source": [
118
- "`ln.track()` added a record to the {class}`~lamindb.Transform` registry to query & search your notebook and a {class}`~lamindb.Run` registry to store the specific notebook run."
136
+ "Calling `ln.track()` created a run and a transform and stored them in {class}`~lamindb.Run` and {class}`~lamindb.Transform`, respectively. The transform registry allows to find your notebook, scripts and pipelines. The {class}`~lamindb.Run` registry allows to find their runs.\n",
137
+ "\n",
138
+ ":::{dropdown} Is this compliant with OpenLineage?\n",
139
+ "\n",
140
+ "Yes. What OpenLineage calls a \"job\", LaminDB calls a \"transform\". What OpenLineage calls a \"run\", LaminDB calls a \"run\".\n",
141
+ "\n",
142
+ ":::\n",
143
+ "\n",
144
+ ":::{dropdown} Are the global identifiers `stem_uid` and `version` really necessary?\n",
145
+ "\n",
146
+ "Yes, if you want to track data lineage outside of workflow managers.\n",
147
+ "\n",
148
+ "To tie a piece of code to a record in a database in a way that survives name changes (notebook file name, script name, pipeline name) and content changes, you need to attach the code to an immutable identifier.\n",
149
+ "\n",
150
+ "Content changes need to correlate with the identifier, but shouldn't give rise to an entirely new identifier. To implement this behavior we code hashes with user input for `version` and create a universal identifier as follows:\n",
151
+ "\n",
152
+ "```python\n",
153
+ "stem_uid = random_base62(n_char) # a random base62 sequence of length n_char\n",
154
+ "version_uid = encode_base62(md5_hash(version))[:4] # version is, e.g., \"1\" or \"2.1.0\" or \"2022-03-01\"\n",
155
+ "uid = f\"{stem_uid}{version_uid}\" # concatenate the stem_uid & version_uid\n",
156
+ "```\n",
157
+ "\n",
158
+ "git, by comparison, identifies code by its content hash alone. Notebook platforms like Google Colab and DeepNote [do not encode versions into their notebook ids](https://lamin.ai/blog/nbproject#metadata-tracking). \n",
159
+ "\n",
160
+ ":::"
119
161
  ]
120
162
  },
121
163
  {
@@ -14,6 +14,7 @@ Registries:
14
14
  ULabel
15
15
  Feature
16
16
  FeatureSet
17
+ Param
17
18
 
18
19
  Key functionality:
19
20
 
@@ -41,12 +42,13 @@ Modules & settings:
41
42
  """
42
43
 
43
44
  # denote a release candidate for 0.1.0 with 0.1rc1, 0.1a1, 0.1b1, etc.
44
- __version__ = "0.73.1"
45
+ __version__ = "0.74.0"
45
46
 
46
47
  import os as _os
47
48
 
48
49
  import lamindb_setup as _lamindb_setup
49
- from lamindb_setup._check_setup import InstanceNotSetupError, _check_instance_setup
50
+ from lamindb_setup._check_setup import InstanceNotSetupError as _InstanceNotSetupError
51
+ from lamindb_setup._check_setup import _check_instance_setup
50
52
  from lamindb_setup._connect_instance import connect
51
53
  from lamindb_setup.core.upath import UPath
52
54
 
@@ -54,17 +56,18 @@ from . import setup
54
56
 
55
57
 
56
58
  def __getattr__(name):
57
- raise InstanceNotSetupError()
59
+ raise _InstanceNotSetupError()
58
60
 
59
61
 
60
62
  if _check_instance_setup(from_lamindb=True):
61
- del InstanceNotSetupError
63
+ del _InstanceNotSetupError
62
64
  del __getattr__ # delete so that imports work out
63
65
  from lnschema_core.models import (
64
66
  Artifact,
65
67
  Collection,
66
68
  Feature,
67
69
  FeatureSet,
70
+ Param,
68
71
  Run,
69
72
  Storage,
70
73
  Transform,
@@ -23,7 +23,7 @@ from lamindb_setup.core.upath import (
23
23
  get_stat_dir_cloud,
24
24
  get_stat_file_cloud,
25
25
  )
26
- from lnschema_core.models import Artifact, FeatureManager, Run, Storage
26
+ from lnschema_core.models import Artifact, FeatureManager, ParamManager, Run, Storage
27
27
  from lnschema_core.types import (
28
28
  VisibilityChoice,
29
29
  )
@@ -84,7 +84,7 @@ def process_pathlike(
84
84
  pass
85
85
  if isinstance(filepath, LocalPathClasses):
86
86
  filepath = filepath.resolve()
87
- if check_path_is_child_of_root(filepath, default_storage.root_as_path()):
87
+ if check_path_is_child_of_root(filepath, default_storage.root):
88
88
  use_existing_storage_key = True
89
89
  return default_storage, use_existing_storage_key
90
90
  else:
@@ -272,28 +272,17 @@ def check_path_in_existing_storage(
272
272
  ) -> Storage | bool:
273
273
  for storage in Storage.objects.using(using_key).filter().all():
274
274
  # if path is part of storage, return it
275
- if check_path_is_child_of_root(path, root=create_path(storage.root)):
275
+ if check_path_is_child_of_root(path, root=storage.root):
276
276
  return storage
277
277
  return False
278
278
 
279
279
 
280
280
  def check_path_is_child_of_root(path: Path | UPath, root: Path | UPath | None) -> bool:
281
- path = UPath(str(path)) if not isinstance(path, UPath) else path
282
- root = UPath(str(root)) if not isinstance(root, UPath) else root
283
-
284
- # the following comparisons can fail if types aren't comparable
285
- if not isinstance(path, LocalPathClasses) and not isinstance(
286
- root, LocalPathClasses
287
- ):
288
- # the following tests equivalency of two UPath objects
289
- # via string representations; otherwise
290
- # S3Path('s3://lndb-storage/') and S3Path('s3://lamindb-ci/')
291
- # test as equivalent
292
- return list(path.parents)[-1].as_posix() == root.as_posix()
293
- elif isinstance(path, LocalPathClasses) and isinstance(root, LocalPathClasses):
294
- return root.resolve() in path.resolve().parents
295
- else:
296
- return False
281
+ # str is needed to eliminate UPath storage_options
282
+ # from the equality checks below
283
+ path = UPath(str(path))
284
+ root = UPath(str(root))
285
+ return root.resolve() in path.resolve().parents
297
286
 
298
287
 
299
288
  def get_relative_path_to_directory(
@@ -358,7 +347,7 @@ def get_artifact_kwargs_from_data(
358
347
  check_path_in_storage = False
359
348
  if use_existing_storage_key:
360
349
  inferred_key = get_relative_path_to_directory(
361
- path=path, directory=storage.root_as_path()
350
+ path=path, directory=UPath(storage.root)
362
351
  ).as_posix()
363
352
  if key is None:
364
353
  key = inferred_key
@@ -516,6 +505,7 @@ def update_attributes(data: HasFeatures, attributes: Mapping[str, str]):
516
505
 
517
506
  def __init__(artifact: Artifact, *args, **kwargs):
518
507
  artifact.features = FeatureManager(artifact)
508
+ artifact.params = ParamManager(artifact)
519
509
  # Below checks for the Django-internal call in from_db()
520
510
  # it'd be better if we could avoid this, but not being able to create a Artifact
521
511
  # from data with the default constructor renders the central class of the API
@@ -532,6 +522,7 @@ def __init__(artifact: Artifact, *args, **kwargs):
532
522
  raise ValueError("Only one non-keyword arg allowed: data")
533
523
 
534
524
  data: str | Path = kwargs.pop("data") if len(args) == 0 else args[0]
525
+ type: str = kwargs.pop("type") if "type" in kwargs else "dataset"
535
526
  key: str | None = kwargs.pop("key") if "key" in kwargs else None
536
527
  run: Run | None = kwargs.pop("run") if "run" in kwargs else None
537
528
  description: str | None = (
@@ -616,6 +607,7 @@ def __init__(artifact: Artifact, *args, **kwargs):
616
607
  "to _retain_ the old state by duplicating the entire folder, do _not_ pass `is_new_version_of`"
617
608
  )
618
609
 
610
+ kwargs["type"] = type
619
611
  kwargs["uid"] = provisional_uid
620
612
  kwargs["version"] = version
621
613
  kwargs["description"] = description
@@ -662,6 +654,7 @@ def from_df(
662
654
  version=version,
663
655
  is_new_version_of=is_new_version_of,
664
656
  accessor="DataFrame",
657
+ type="dataset",
665
658
  **kwargs,
666
659
  )
667
660
  return artifact
@@ -690,6 +683,7 @@ def from_anndata(
690
683
  version=version,
691
684
  is_new_version_of=is_new_version_of,
692
685
  accessor="AnnData",
686
+ type="dataset",
693
687
  **kwargs,
694
688
  )
695
689
  return artifact
@@ -716,6 +710,7 @@ def from_mudata(
716
710
  version=version,
717
711
  is_new_version_of=is_new_version_of,
718
712
  accessor="MuData",
713
+ type="dataset",
719
714
  **kwargs,
720
715
  )
721
716
  return artifact
@@ -752,7 +747,7 @@ def from_dir(
752
747
  else:
753
748
  # maintain the hierachy within an existing storage location
754
749
  folder_key_path = get_relative_path_to_directory(
755
- folderpath, storage.root_as_path()
750
+ folderpath, UPath(storage.root)
756
751
  )
757
752
  else:
758
753
  folder_key_path = Path(key)
@@ -27,12 +27,12 @@ FEATURE_TYPES = {
27
27
  }
28
28
 
29
29
 
30
- def convert_numpy_dtype_to_lamin_feature_type(dtype) -> str:
30
+ def convert_numpy_dtype_to_lamin_feature_type(dtype, str_as_cat: bool = True) -> str:
31
31
  orig_type = dtype.name
32
32
  # strip precision qualifiers
33
33
  type = "".join(i for i in orig_type if not i.isdigit())
34
34
  if type == "object" or type == "str":
35
- type = "cat"
35
+ type = "cat" if str_as_cat else "str"
36
36
  return type
37
37
 
38
38
 
@@ -33,13 +33,19 @@ def get_seconds_since_modified(filepath) -> float:
33
33
  return datetime.now().timestamp() - filepath.stat().st_mtime
34
34
 
35
35
 
36
- def finish():
36
+ def finish() -> None:
37
37
  """Mark a tracked run as finished.
38
38
 
39
39
  Saves source code and, for notebooks, a run report to your default storage location.
40
40
  """
41
- if run_context.path is None:
41
+ if run_context.run is None:
42
42
  raise TrackNotCalled("Please run `ln.track()` before `ln.finish()`")
43
+ if run_context.path is None:
44
+ assert run_context.transform.type not in {"script", "notebook"}
45
+ run_context.run.finished_at = datetime.now(timezone.utc)
46
+ run_context.run.save()
47
+ # nothing else to do
48
+ return None
43
49
  if is_run_from_ipython: # notebooks
44
50
  if (
45
51
  get_seconds_since_modified(run_context.path) > 3
@@ -278,14 +278,26 @@ def index_iterable(iterable: Iterable) -> pd.Index:
278
278
 
279
279
 
280
280
  def _print_values(names: Iterable, n: int = 20, quotes: bool = True) -> str:
281
- names = (name for name in names if name != "None")
282
- unique_names = list(dict.fromkeys(names))[:n]
283
- if quotes:
284
- print_values = ", ".join(f"'{name}'" for name in unique_names)
281
+ if isinstance(names, dict):
282
+ items = {
283
+ f"{key}: {value}": None
284
+ for key, value in names.items()
285
+ if key != "None" and value != "None"
286
+ }
285
287
  else:
286
- print_values = ", ".join(f"{name}" for name in unique_names)
287
- if len(unique_names) > n:
288
+ # Use a dictionary instead of a list to have unique values and preserve order
289
+ items = {str(name): None for name in names if name != "None"}
290
+
291
+ unique_items = list(items.keys())
292
+
293
+ if quotes:
294
+ unique_items = [f"'{item}'" for item in unique_items]
295
+
296
+ print_values = ", ".join(unique_items[:n])
297
+
298
+ if len(unique_items) > n:
288
299
  print_values += ", ..."
300
+
289
301
  return print_values
290
302
 
291
303
 
@@ -54,7 +54,7 @@ def suggest_records_with_similar_names(record: Registry, kwargs) -> bool:
54
54
  """
55
55
  if kwargs.get("name") is None:
56
56
  return False
57
- queryset = _search(record.__class__, kwargs["name"], truncate_words=True, limit=5)
57
+ queryset = _search(record.__class__, kwargs["name"], truncate_words=True, limit=20)
58
58
  if not queryset.exists(): # empty queryset
59
59
  return False
60
60
  for alternative_record in queryset:
@@ -1,9 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
- from lnschema_core.models import Run, Transform
3
+ from lnschema_core.models import ParamManager, Run, Transform
4
4
 
5
5
 
6
6
  def __init__(run: Run, *args, **kwargs):
7
+ run.params = ParamManager(run)
7
8
  if len(args) == len(run._meta.concrete_fields):
8
9
  super(Run, run).__init__(*args, **kwargs)
9
10
  return None
@@ -3,11 +3,6 @@ from lamindb_setup.core.upath import UPath, create_path
3
3
  from lnschema_core import Storage
4
4
 
5
5
 
6
- def root_as_path(self) -> UPath:
7
- access_token = self._access_token if hasattr(self, "_access_token") else None
8
- return create_path(self.root, access_token=access_token)
9
-
10
-
11
6
  @property # type: ignore
12
7
  @doc_args(Storage.path.__doc__)
13
8
  def path(self) -> UPath:
@@ -16,5 +11,4 @@ def path(self) -> UPath:
16
11
  return create_path(self.root, access_token=access_token)
17
12
 
18
13
 
19
- Storage.root_as_path = root_as_path
20
14
  Storage.path = path
@@ -1,14 +1,16 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import builtins
3
4
  import importlib
4
5
  import inspect
5
6
 
6
- from IPython.display import display
7
7
  from lamin_utils import colors, logger
8
8
  from lamindb_setup import settings
9
9
  from lamindb_setup._init_instance import get_schema_module_name
10
10
  from lnschema_core import Registry
11
11
 
12
+ is_run_from_ipython = getattr(builtins, "__IPYTHON__", False)
13
+
12
14
 
13
15
  def view(
14
16
  n: int = 7, schema: str | None = None, registries: list[str] | None = None
@@ -25,6 +27,11 @@ def view(
25
27
  Examples:
26
28
  >>> ln.view()
27
29
  """
30
+ if is_run_from_ipython:
31
+ from IPython.display import display as show
32
+ else:
33
+ show = logger.print
34
+
28
35
  if schema is not None:
29
36
  schema_names = [schema]
30
37
  else:
@@ -60,4 +67,4 @@ def view(
60
67
  df = orm.df().iloc[-n:]
61
68
  if df.shape[0] > 0:
62
69
  logger.print(colors.blue(colors.bold(orm.__name__)))
63
- display(df)
70
+ show(df)
@@ -10,7 +10,9 @@ Registries:
10
10
  QueryManager
11
11
  RecordsList
12
12
  HasFeatures
13
+ HasParams
13
14
  FeatureManager
15
+ ParamManager
14
16
  LabelManager
15
17
  IsVersioned
16
18
  CanValidate
@@ -56,6 +58,7 @@ from lamin_utils._inspect import InspectResult
56
58
  from lnschema_core.models import (
57
59
  CanValidate,
58
60
  HasFeatures,
61
+ HasParams,
59
62
  HasParents,
60
63
  IsVersioned,
61
64
  Registry,
@@ -71,7 +74,7 @@ from lamindb._annotate import (
71
74
  )
72
75
  from lamindb._query_manager import QueryManager
73
76
  from lamindb._query_set import QuerySet, RecordsList
74
- from lamindb.core._feature_manager import FeatureManager
77
+ from lamindb.core._feature_manager import FeatureManager, ParamManager
75
78
  from lamindb.core._label_manager import LabelManager
76
79
 
77
80
  from . import _data, datasets, exceptions, fields, types
@@ -24,13 +24,12 @@ from lamindb._registry import get_default_str_field
24
24
  from lamindb.core._settings import settings
25
25
 
26
26
  from ._feature_manager import (
27
- FeatureManager,
28
27
  get_feature_set_links,
29
28
  get_host_id_field,
30
29
  get_label_links,
31
30
  print_features,
32
31
  )
33
- from ._label_manager import LabelManager, print_labels
32
+ from ._label_manager import print_labels
34
33
  from ._run_context import run_context
35
34
  from .exceptions import ValidationError
36
35
  from .schema import (
@@ -159,7 +158,11 @@ def describe(self: HasFeatures, print_types: bool = False):
159
158
  msg += f" {colors.italic('Provenance')}\n"
160
159
  msg += prov_msg
161
160
  msg += print_labels(self, print_types=print_types)
162
- msg += print_features(self, print_types=print_types) # type: ignore
161
+ msg += print_features( # type: ignore
162
+ self,
163
+ print_types=print_types,
164
+ print_params=hasattr(self, "type") and self.type == "model",
165
+ )
163
166
  logger.print(msg)
164
167
 
165
168