lamindb 1.12.0__tar.gz → 1.13.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 (315) hide show
  1. {lamindb-1.12.0 → lamindb-1.13.0}/PKG-INFO +26 -22
  2. {lamindb-1.12.0 → lamindb-1.13.0}/README.md +21 -18
  3. {lamindb-1.12.0 → lamindb-1.13.0}/docs/curate.ipynb +1 -1
  4. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/acid.ipynb +2 -2
  5. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/pydantic-pandera.ipynb +1 -1
  6. lamindb-1.12.0/docs/faq/visibility.ipynb → lamindb-1.13.0/docs/faq/trash-archive.ipynb +19 -73
  7. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq.md +1 -2
  8. {lamindb-1.12.0 → lamindb-1.13.0}/docs/registries.ipynb +7 -6
  9. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/curate_dataframe_external_features.py +1 -1
  10. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/curate_dataframe_flexible.py +1 -1
  11. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/curate_dataframe_minimal_errors.py +1 -1
  12. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/run_track_with_params.py +1 -1
  13. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/run_workflow.py +2 -4
  14. {lamindb-1.12.0 → lamindb-1.13.0}/docs/storage/prepare-transfer-local-to-cloud.ipynb +4 -8
  15. {lamindb-1.12.0 → lamindb-1.13.0}/docs/storage/transfer-local-to-cloud.ipynb +4 -6
  16. {lamindb-1.12.0 → lamindb-1.13.0}/docs/track.ipynb +28 -108
  17. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/__init__.py +2 -2
  18. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/_finish.py +1 -1
  19. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/_tracked.py +3 -15
  20. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/_context.py +45 -19
  21. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/curators/_legacy.py +1 -1
  22. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/curators/core.py +51 -21
  23. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/errors.py +6 -0
  24. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/datasets/_core.py +1 -1
  25. lamindb-1.13.0/lamindb/integrations/__init__.py +22 -0
  26. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/integrations/lightning.py +13 -10
  27. lamindb-1.13.0/lamindb/migrations/0134_run_params.py +17 -0
  28. lamindb-1.12.0/lamindb/migrations/0133_squashed.py → lamindb-1.13.0/lamindb/migrations/0134_squashed.py +93 -90
  29. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/_feature_manager.py +30 -20
  30. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/_label_manager.py +3 -5
  31. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/artifact.py +250 -291
  32. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/artifact_set.py +4 -4
  33. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/block.py +11 -9
  34. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/can_curate.py +1 -1
  35. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/collection.py +16 -17
  36. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/feature.py +2 -2
  37. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/has_parents.py +1 -3
  38. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/query_manager.py +7 -7
  39. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/query_set.py +38 -12
  40. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/run.py +53 -49
  41. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/schema.py +79 -65
  42. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/sqlrecord.py +32 -17
  43. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/transform.py +6 -3
  44. {lamindb-1.12.0 → lamindb-1.13.0}/noxfile.py +2 -0
  45. {lamindb-1.12.0 → lamindb-1.13.0}/pyproject.toml +9 -4
  46. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/_dataset_fixtures.py +2 -2
  47. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/conftest.py +74 -0
  48. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_artifact.py +38 -143
  49. lamindb-1.13.0/tests/core/test_artifact_external_features.py +107 -0
  50. lamindb-1.12.0/tests/core/test_visibility.py → lamindb-1.13.0/tests/core/test_branches.py +6 -6
  51. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_collection.py +8 -3
  52. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_describe_and_df_calls.py +1 -1
  53. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_feature_label_manager.py +70 -52
  54. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_load.py +2 -2
  55. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_queryset.py +31 -20
  56. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_record.py +15 -0
  57. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_save.py +2 -2
  58. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_schema.py +50 -9
  59. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_search.py +2 -2
  60. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_track.py +73 -15
  61. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_tracked.py +11 -6
  62. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_transform.py +12 -2
  63. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_versioning.py +1 -1
  64. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_view.py +1 -1
  65. {lamindb-1.12.0 → lamindb-1.13.0}/tests/curators/conftest.py +1 -1
  66. {lamindb-1.12.0 → lamindb-1.13.0}/tests/curators/test_curators_examples.py +66 -50
  67. {lamindb-1.12.0 → lamindb-1.13.0}/tests/curators/test_curators_general.py +2 -2
  68. {lamindb-1.12.0 → lamindb-1.13.0}/tests/curators/test_cxg_curator.py +3 -5
  69. {lamindb-1.12.0 → lamindb-1.13.0}/tests/permissions/scripts/check_lamin_dev.py +26 -4
  70. {lamindb-1.12.0 → lamindb-1.13.0}/tests/permissions/scripts/setup_access.py +20 -4
  71. {lamindb-1.12.0 → lamindb-1.13.0}/tests/permissions/test_permissions.py +36 -28
  72. {lamindb-1.12.0 → lamindb-1.13.0}/tests/storage/test_cache.py +5 -5
  73. {lamindb-1.12.0 → lamindb-1.13.0}/tests/storage/test_streaming.py +10 -10
  74. {lamindb-1.12.0 → lamindb-1.13.0}/tests/storage/test_transfer.py +2 -2
  75. lamindb-1.12.0/docs/faq/setup.ipynb +0 -220
  76. lamindb-1.12.0/lamindb/integrations/__init__.py +0 -40
  77. lamindb-1.12.0/tests/curators/test_cat_managers.py +0 -592
  78. lamindb-1.12.0/tests/permissions/scripts/clean_lamin_dev.py +0 -11
  79. {lamindb-1.12.0 → lamindb-1.13.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  80. {lamindb-1.12.0 → lamindb-1.13.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  81. {lamindb-1.12.0 → lamindb-1.13.0}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
  82. {lamindb-1.12.0 → lamindb-1.13.0}/.github/ISSUE_TEMPLATE/usage_question.yml +0 -0
  83. {lamindb-1.12.0 → lamindb-1.13.0}/.github/workflows/build.yml +0 -0
  84. {lamindb-1.12.0 → lamindb-1.13.0}/.github/workflows/doc-changes.yml +0 -0
  85. {lamindb-1.12.0 → lamindb-1.13.0}/.gitignore +0 -0
  86. {lamindb-1.12.0 → lamindb-1.13.0}/.gitmodules +0 -0
  87. {lamindb-1.12.0 → lamindb-1.13.0}/.pre-commit-config.yaml +0 -0
  88. {lamindb-1.12.0 → lamindb-1.13.0}/CONTRIBUTING.md +0 -0
  89. {lamindb-1.12.0 → lamindb-1.13.0}/LICENSE +0 -0
  90. {lamindb-1.12.0 → lamindb-1.13.0}/docs/api.md +0 -0
  91. {lamindb-1.12.0 → lamindb-1.13.0}/docs/arrays.ipynb +0 -0
  92. {lamindb-1.12.0 → lamindb-1.13.0}/docs/bionty.md +0 -0
  93. {lamindb-1.12.0 → lamindb-1.13.0}/docs/changelog.md +0 -0
  94. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/curate-any.ipynb +0 -0
  95. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/delete.ipynb +0 -0
  96. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/idempotency.ipynb +0 -0
  97. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/import-modules.ipynb +0 -0
  98. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/keep-artifacts-local.ipynb +0 -0
  99. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/reference-field.ipynb +0 -0
  100. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/search.ipynb +0 -0
  101. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/symbol-mapping.ipynb +0 -0
  102. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/test_notebooks.py +0 -0
  103. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/track-run-inputs.ipynb +0 -0
  104. {lamindb-1.12.0 → lamindb-1.13.0}/docs/faq/validate-fields.ipynb +0 -0
  105. {lamindb-1.12.0 → lamindb-1.13.0}/docs/guide.md +0 -0
  106. {lamindb-1.12.0 → lamindb-1.13.0}/docs/includes/installation.md +0 -0
  107. {lamindb-1.12.0 → lamindb-1.13.0}/docs/index.md +0 -0
  108. {lamindb-1.12.0 → lamindb-1.13.0}/docs/lamindb.md +0 -0
  109. {lamindb-1.12.0 → lamindb-1.13.0}/docs/manage-ontologies.ipynb +0 -0
  110. {lamindb-1.12.0 → lamindb-1.13.0}/docs/query-search.md +0 -0
  111. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/curate_anndata_flexible.py +0 -0
  112. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/curate_anndata_uns.py +0 -0
  113. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/curate_dataframe_attrs.py +0 -0
  114. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/curate_mudata.py +0 -0
  115. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/curate_soma_experiment.py +0 -0
  116. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/curate_spatialdata.py +0 -0
  117. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/define_mini_immuno_features_labels.py +0 -0
  118. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/define_mini_immuno_schema_flexible.py +0 -0
  119. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/define_schema_anndata_ensembl_gene_ids_and_valid_features_in_obs.py +0 -0
  120. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/define_schema_anndata_uns.py +0 -0
  121. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/define_schema_df_metadata.py +0 -0
  122. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/define_schema_spatialdata.py +0 -0
  123. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/define_valid_features.py +0 -0
  124. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/run_track_and_finish.py +0 -0
  125. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/save_mini_immuno_datasets.py +0 -0
  126. {lamindb-1.12.0 → lamindb-1.13.0}/docs/scripts/synced_with_git.py +0 -0
  127. {lamindb-1.12.0 → lamindb-1.13.0}/docs/storage/add-replace-cache.ipynb +0 -0
  128. {lamindb-1.12.0 → lamindb-1.13.0}/docs/storage/anndata-accessor.ipynb +0 -0
  129. {lamindb-1.12.0 → lamindb-1.13.0}/docs/storage/test-files/iris.csv +0 -0
  130. {lamindb-1.12.0 → lamindb-1.13.0}/docs/storage/test-files/iris.data +0 -0
  131. {lamindb-1.12.0 → lamindb-1.13.0}/docs/storage/test-files/new_iris.csv +0 -0
  132. {lamindb-1.12.0 → lamindb-1.13.0}/docs/storage/test_notebooks.py +0 -0
  133. {lamindb-1.12.0 → lamindb-1.13.0}/docs/storage/upload.ipynb +0 -0
  134. {lamindb-1.12.0 → lamindb-1.13.0}/docs/storage/vitessce.ipynb +0 -0
  135. {lamindb-1.12.0 → lamindb-1.13.0}/docs/storage.md +0 -0
  136. {lamindb-1.12.0 → lamindb-1.13.0}/docs/test_notebooks.py +0 -0
  137. {lamindb-1.12.0 → lamindb-1.13.0}/docs/transfer.ipynb +0 -0
  138. {lamindb-1.12.0 → lamindb-1.13.0}/docs/wetlab.md +0 -0
  139. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/_view.py +0 -0
  140. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/base/__init__.py +0 -0
  141. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/base/dtypes.py +0 -0
  142. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/base/fields.py +0 -0
  143. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/base/ids.py +0 -0
  144. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/base/types.py +0 -0
  145. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/base/uids.py +0 -0
  146. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/base/users.py +0 -0
  147. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/__init__.py +0 -0
  148. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/_compat.py +0 -0
  149. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/_mapped_collection.py +0 -0
  150. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/_settings.py +0 -0
  151. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/_sync_git.py +0 -0
  152. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/_track_environment.py +0 -0
  153. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/exceptions.py +0 -0
  154. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/loaders.py +0 -0
  155. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/storage/__init__.py +0 -0
  156. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/storage/_anndata_accessor.py +0 -0
  157. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/storage/_backed_access.py +0 -0
  158. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/storage/_polars_lazy_df.py +0 -0
  159. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/storage/_pyarrow_dataset.py +0 -0
  160. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/storage/_spatialdata_accessor.py +0 -0
  161. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/storage/_tiledbsoma.py +0 -0
  162. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/storage/_valid_suffixes.py +0 -0
  163. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/storage/_zarr.py +0 -0
  164. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/storage/objects.py +0 -0
  165. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/storage/paths.py +0 -0
  166. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/subsettings/__init__.py +0 -0
  167. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/subsettings/_annotation_settings.py +0 -0
  168. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/subsettings/_creation_settings.py +0 -0
  169. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/core/types.py +0 -0
  170. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/curators/__init__.py +0 -0
  171. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/__init__.py +0 -0
  172. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/cellxgene/__init__.py +0 -0
  173. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/cellxgene/_cellxgene.py +0 -0
  174. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/cellxgene/cellxgene_schema_versions.csv +0 -0
  175. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/croissant/__init__.py +0 -0
  176. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/croissant/mini_immuno.anndata.zarr_metadata.json +0 -0
  177. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/datasets/__init__.py +0 -0
  178. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/datasets/_fake.py +0 -0
  179. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/datasets/_small.py +0 -0
  180. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/datasets/mini_immuno.py +0 -0
  181. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/fixtures/__init__.py +0 -0
  182. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/fixtures/sheets.py +0 -0
  183. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/mlflow/__init__.py +0 -0
  184. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/schemas/__init__.py +0 -0
  185. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/schemas/_anndata.py +0 -0
  186. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/schemas/_simple.py +0 -0
  187. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/examples/wandb/__init__.py +0 -0
  188. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/integrations/_croissant.py +0 -0
  189. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/integrations/_vitessce.py +0 -0
  190. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0069_squashed.py +0 -0
  191. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0070_lamindbv1_migrate_data.py +0 -0
  192. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0071_lamindbv1_migrate_schema.py +0 -0
  193. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0072_remove_user__branch_code_remove_user_aux_and_more.py +0 -0
  194. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0073_merge_ourprojects.py +0 -0
  195. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0074_lamindbv1_part4.py +0 -0
  196. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0075_lamindbv1_part5.py +0 -0
  197. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0076_lamindbv1_part6.py +0 -0
  198. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0077_lamindbv1_part6b.py +0 -0
  199. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0078_lamindbv1_part6c.py +0 -0
  200. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0079_alter_rundata_value_json_and_more.py +0 -0
  201. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0080_polish_lamindbv1.py +0 -0
  202. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0081_revert_textfield_collection.py +0 -0
  203. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0082_alter_feature_dtype.py +0 -0
  204. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0083_alter_feature_is_type_alter_flextable_is_type_and_more.py +0 -0
  205. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0084_alter_schemafeature_feature_and_more.py +0 -0
  206. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0085_alter_feature_is_type_alter_flextable_is_type_and_more.py +0 -0
  207. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0086_various.py +0 -0
  208. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0087_rename__schemas_m2m_artifact_feature_sets_and_more.py +0 -0
  209. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0088_schema_components.py +0 -0
  210. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0089_subsequent_runs.py +0 -0
  211. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0090_runproject_project_runs.py +0 -0
  212. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0091_alter_featurevalue_options_alter_space_options_and_more.py +0 -0
  213. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0092_alter_artifactfeaturevalue_artifact_and_more.py +0 -0
  214. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0093_alter_schemacomponent_unique_together.py +0 -0
  215. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0094_writeloglock_writelogmigrationstate_and_more.py +0 -0
  216. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0095_remove_rundata_flextable.py +0 -0
  217. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0096_remove_artifact__param_values_and_more.py +0 -0
  218. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0097_remove_schemaparam_param_remove_paramvalue_param_and_more.py +0 -0
  219. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0098_alter_feature_type_alter_project_type_and_more.py +0 -0
  220. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0099_alter_writelog_seqno.py +0 -0
  221. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0100_branch_alter_artifact__branch_code_and_more.py +0 -0
  222. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0101_alter_artifact_hash_alter_feature_name_and_more.py +0 -0
  223. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0102_remove_writelog_branch_code_and_more.py +0 -0
  224. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0103_remove_writelog_migration_state_and_more.py +0 -0
  225. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0104_alter_branch_uid.py +0 -0
  226. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0105_record_unique_name.py +0 -0
  227. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0106_transfer_data_migration.py +0 -0
  228. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0107_add_schema_to_record.py +0 -0
  229. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0108_remove_record_sheet_remove_sheetproject_sheet_and_more.py +0 -0
  230. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0109_record_input_of_runs_alter_record_run_and_more.py +0 -0
  231. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0110_rename_values_artifacts_record_linked_artifacts.py +0 -0
  232. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0111_remove_record__sort_order.py +0 -0
  233. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0112_alter_recordartifact_feature_and_more.py +0 -0
  234. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0113_lower_case_branch_and_space_names.py +0 -0
  235. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0114_alter_run__status_code.py +0 -0
  236. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0115_alter_space_uid.py +0 -0
  237. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0116_remove_artifact_unique_artifact_storage_key_hash_and_more.py +0 -0
  238. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0117_fix_artifact_storage_hash_unique_constraints.py +0 -0
  239. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0118_alter_recordproject_value_projectrecord.py +0 -0
  240. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0119_rename_records_project_linked_in_records.py +0 -0
  241. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0120_add_record_fk_constraint.py +0 -0
  242. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0121_recorduser.py +0 -0
  243. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0122_remove_personproject_person_and_more.py +0 -0
  244. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0123_alter_artifact_description_alter_branch_description_and_more.py +0 -0
  245. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0124_page_artifact_page_collection_page_feature_page_and_more.py +0 -0
  246. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0125_artifact_is_locked_collection_is_locked_and_more.py +0 -0
  247. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0126_alter_artifact_is_locked_alter_collection_is_locked_and_more.py +0 -0
  248. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0127_alter_run_status_code_feature_dtype.py +0 -0
  249. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0128_artifact__real_key.py +0 -0
  250. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0129_remove_feature_page_remove_project_page_and_more.py +0 -0
  251. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0130_branch_space_alter_artifactblock_artifact_and_more.py +0 -0
  252. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0131_record_unique_name_type_space.py +0 -0
  253. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0132_record_parents_record_reference_and_more.py +0 -0
  254. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/0133_artifactuser_artifact_users.py +0 -0
  255. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/migrations/__init__.py +0 -0
  256. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/__init__.py +0 -0
  257. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/_describe.py +0 -0
  258. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/_django.py +0 -0
  259. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/_from_values.py +0 -0
  260. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/_is_versioned.py +0 -0
  261. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/_relations.py +0 -0
  262. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/project.py +0 -0
  263. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/record.py +0 -0
  264. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/save.py +0 -0
  265. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/storage.py +0 -0
  266. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/models/ulabel.py +0 -0
  267. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/py.typed +0 -0
  268. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/setup/__init__.py +0 -0
  269. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/setup/_switch.py +0 -0
  270. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/setup/core/__init__.py +0 -0
  271. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/setup/errors/__init__.py +0 -0
  272. {lamindb-1.12.0 → lamindb-1.13.0}/lamindb/setup/types/__init__.py +0 -0
  273. {lamindb-1.12.0 → lamindb-1.13.0}/tests/conftest.py +0 -0
  274. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/notebooks/basic-r-notebook.Rmd.cleaned.html +0 -0
  275. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/notebooks/basic-r-notebook.Rmd.html +0 -0
  276. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/notebooks/duplicate/with-title-initialized-consecutive-finish.ipynb +0 -0
  277. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/notebooks/no-title.ipynb +0 -0
  278. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/notebooks/with-title-initialized-consecutive-finish-not-last-cell.ipynb +0 -0
  279. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/notebooks/with-title-initialized-consecutive-finish.ipynb +0 -0
  280. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/scripts/duplicate1/script-to-test-versioning.py +0 -0
  281. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/scripts/duplicate2/script-to-test-versioning.py +0 -0
  282. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/scripts/duplicate3/script-to-test-versioning.py +0 -0
  283. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/scripts/duplicate4/script-to-test-versioning.py +0 -0
  284. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/scripts/duplicate5/script-to-test-versioning.py +0 -0
  285. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/scripts/script-to-test-filename-change.py +0 -0
  286. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/scripts/script-to-test-versioning.py +0 -0
  287. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_artifact_folders.py +0 -0
  288. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_can_curate.py +0 -0
  289. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_data.py +0 -0
  290. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_db.py +0 -0
  291. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_delete.py +0 -0
  292. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_dtype.py +0 -0
  293. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_feature.py +0 -0
  294. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_from_values.py +0 -0
  295. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_has_parents.py +0 -0
  296. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_integrity.py +0 -0
  297. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_manager.py +0 -0
  298. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_models.py +0 -0
  299. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_notebooks.py +0 -0
  300. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_run.py +0 -0
  301. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_settings.py +0 -0
  302. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_sqlrecord.py +0 -0
  303. {lamindb-1.12.0 → lamindb-1.13.0}/tests/core/test_storage.py +0 -0
  304. {lamindb-1.12.0 → lamindb-1.13.0}/tests/curators/test_curate_from_croissant.py +0 -0
  305. {lamindb-1.12.0 → lamindb-1.13.0}/tests/curators/test_curators_multivalue.py +0 -0
  306. {lamindb-1.12.0 → lamindb-1.13.0}/tests/curators/test_dataframe_curators_accounting_example.py +0 -0
  307. {lamindb-1.12.0 → lamindb-1.13.0}/tests/curators/test_records.py +0 -0
  308. {lamindb-1.12.0 → lamindb-1.13.0}/tests/permissions/conftest.py +0 -0
  309. {lamindb-1.12.0 → lamindb-1.13.0}/tests/permissions/jwt_utils.py +0 -0
  310. {lamindb-1.12.0 → lamindb-1.13.0}/tests/permissions/scripts/setup_instance.py +0 -0
  311. {lamindb-1.12.0 → lamindb-1.13.0}/tests/storage/conftest.py +0 -0
  312. {lamindb-1.12.0 → lamindb-1.13.0}/tests/storage/test_artifact_storage.py +0 -0
  313. {lamindb-1.12.0 → lamindb-1.13.0}/tests/storage/test_artifact_zarr.py +0 -0
  314. {lamindb-1.12.0 → lamindb-1.13.0}/tests/storage/test_connect_reconnect.py +0 -0
  315. {lamindb-1.12.0 → lamindb-1.13.0}/tests/storage/test_storage_lifecycle.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: lamindb
3
- Version: 1.12.0
4
- Summary: A data lakehouse for biology.
3
+ Version: 1.13.0
4
+ Summary: A data framework for biology.
5
5
  Author-email: Lamin Labs <open-source@lamin.ai>
6
6
  Requires-Python: >=3.10,<3.14
7
7
  Description-Content-Type: text/markdown
@@ -10,13 +10,14 @@ Classifier: Programming Language :: Python :: 3.11
10
10
  Classifier: Programming Language :: Python :: 3.12
11
11
  Classifier: Programming Language :: Python :: 3.13
12
12
  Requires-Dist: lamin_utils==0.15.0
13
- Requires-Dist: lamin_cli==1.8.0
14
- Requires-Dist: lamindb_setup[aws]==1.11.0
13
+ Requires-Dist: lamin_cli==1.8.1
14
+ Requires-Dist: lamindb_setup[aws]==1.12.0
15
15
  Requires-Dist: bionty==1.8.1
16
16
  Requires-Dist: wetlab==1.6.1
17
17
  Requires-Dist: nbproject==0.11.1
18
18
  Requires-Dist: jupytext
19
19
  Requires-Dist: nbconvert>=7.2.1
20
+ Requires-Dist: ipykernel<7.0.0
20
21
  Requires-Dist: pyyaml
21
22
  Requires-Dist: pyarrow
22
23
  Requires-Dist: pandera>=0.24.0
@@ -56,38 +57,41 @@ Provides-Extra: zarr
56
57
  [![pypi](https://img.shields.io/pypi/v/lamindb?color=blue&label=pypi%20package)](https://pypi.org/project/lamindb)
57
58
  [![PyPI Downloads](https://img.shields.io/pepy/dt/lamindb?logo=pypi)](https://pepy.tech/project/lamindb)
58
59
 
59
- # LaminDB - A data lakehouse for biology
60
+ # LaminDB - A data framework for biology
60
61
 
61
- LaminDB organizes datasets through validation & annotation and provides data lineage, queryability & reproducibility on top of [FAIR](https://en.wikipedia.org/wiki/FAIR_data) data.
62
+ Makes your data queryable, traceable, reproducible, and FAIR. One API: lakehouse, lineage, feature store, ontologies, LIMS, ELN.
62
63
 
63
64
  <details>
64
65
  <summary>Why?</summary>
65
66
 
66
67
  Reproducing analytical results or understanding how a dataset or model was created can be a pain.
67
- Let alone training models on historical data, LIMS & ELN systems, orthogonal assays, or datasets generated by other teams.
68
- Even maintaining a mere overview of a project's or team's datasets & analyses is harder than it sounds.
68
+ Training models on historical data, LIMS & ELN systems, orthogonal assays, or datasets from other teams is even harder.
69
+ Even maintaining an overview of a project's datasets & analyses is more difficult than it should be.
69
70
 
70
- Biological datasets are typically managed with versioned storage systems, GUI-focused community or SaaS platforms, structureless data lakes, rigid data warehouses (SQL, monolithic arrays), and data lakehouses for tabular data.
71
+ Biological datasets are typically managed with versioned storage systems, GUI-focused platforms, structureless data lakes, rigid data warehouses (SQL, monolithic arrays), or tabular lakehouses.
71
72
 
72
73
  LaminDB extends the lakehouse architecture to biological registries & datasets beyond tables (`DataFrame`, `AnnData`, `.zarr`, `.tiledbsoma`, ...) with enough structure to enable queries and enough freedom to keep the pace of R&D high.
73
74
  Moreover, it provides context through data lineage -- tracing data and code, scientists and models -- and abstractions for biological domain knowledge and experimental metadata.
74
75
 
75
76
  </details>
76
77
 
77
- **Highlights.**
78
+ <img width="800px" src="https://lamin-site-assets.s3.amazonaws.com/.lamindb/BunYmHkyFLITlM5M0005.png">
78
79
 
79
- - **data lineage:** track inputs & outputs of notebooks, scripts, functions & pipelines with a single line of code
80
- - **unified access:** storage locations (local, S3, GCP, ...), SQL databases (Postgres, SQLite) & ontologies
81
- - **lakehouse**: manage, monitor & validate features, labels & dataset schemas; distributed queries and batch loading
82
- - **biological formats:** validate & annotate `DataFrame`, `AnnData`, `SpatialData`, ... backed by `parquet`, `zarr`, HDF5, LanceDB, ...
83
- - **biological entities**: manage experimental metadata & ontologies based on the Django ORM
84
- - **reproducible & auditable:** auto-version & timestamp execution reports, source code & compute environments, attribute records to users
85
- - **zero lock-in & scalable:** runs in your infrastructure; is _not_ a client for a rate-limited REST API
86
- - **extendable:** create custom plug-ins for your own applications based on the Django ecosystem
87
- - **integrations:** visualization tools like [vitessce](https://docs.lamin.ai/vitessce), workflow managers like [nextflow](https://docs.lamin.ai/nextflow) & [redun](https://docs.lamin.ai/redun), and [other tools](https://docs.lamin.ai/integrations)
88
- - **production-ready:** used in BigPharma, BioTech, hospitals & top labs
80
+ Highlights:
89
81
 
90
- LaminDB can be connected to LaminHub to serve as a [LIMS](https://en.wikipedia.org/wiki/Laboratory_information_management_system) for wetlab scientists, closing the drylab-wetlab feedback loop: [lamin.ai](https://lamin.ai).
82
+ - **lineage** track inputs & outputs of notebooks, scripts, functions & pipelines with a single line of code
83
+ - **lakehouse** → manage, monitor & validate schemas; query across many datasets
84
+ - **feature store** → manage features & labels; leverage batch loading
85
+ - **FAIR datasets** → validate & annotate `DataFrame`, `AnnData`, `SpatialData`, `parquet`, `.h5ad`, `zarr`, ...
86
+ - **LIMS & ELN** → manage experimental metadata, ontologies & markdown notes
87
+ - **unified access** → storage locations (local, S3, GCP, ...), SQL databases (Postgres, SQLite) & ontologies
88
+ - **reproducible & auditable** → auto-version & timestamp execution reports, source code & environments; attribute records to users
89
+ - **integrations** → [vitessce](https://docs.lamin.ai/vitessce), [nextflow](https://docs.lamin.ai/nextflow), [redun](https://docs.lamin.ai/redun), and [more](https://docs.lamin.ai/integrations)
90
+ - **zero lock-in & scalable** → runs in your infrastructure; not a client for a rate-limited REST API
91
+ - **extendable** → create custom plug-ins based on the Django ORM
92
+ - **production-ready** → used in BigPharma, BioTech, hospitals & top labs
93
+
94
+ If you want a GUI, you can connect your LaminDB instance to LaminHub and close the drylab-wetlab feedback loop: [lamin.ai](https://lamin.ai).
91
95
 
92
96
  ## Docs
93
97
 
@@ -159,7 +163,7 @@ You can organize datasets with validation & annotation of any kind of metadata t
159
163
  To annotate an artifact with a label, use:
160
164
 
161
165
  ```python
162
- my_experiment = ln.Record(name="My experiment").save() # create a label in the universal label ontology
166
+ my_experiment = ln.Record(name="My experiment").save() # create a label record
163
167
  artifact.records.add(my_experiment) # annotate the artifact with the label
164
168
  ```
165
169
 
@@ -5,38 +5,41 @@
5
5
  [![pypi](https://img.shields.io/pypi/v/lamindb?color=blue&label=pypi%20package)](https://pypi.org/project/lamindb)
6
6
  [![PyPI Downloads](https://img.shields.io/pepy/dt/lamindb?logo=pypi)](https://pepy.tech/project/lamindb)
7
7
 
8
- # LaminDB - A data lakehouse for biology
8
+ # LaminDB - A data framework for biology
9
9
 
10
- LaminDB organizes datasets through validation & annotation and provides data lineage, queryability & reproducibility on top of [FAIR](https://en.wikipedia.org/wiki/FAIR_data) data.
10
+ Makes your data queryable, traceable, reproducible, and FAIR. One API: lakehouse, lineage, feature store, ontologies, LIMS, ELN.
11
11
 
12
12
  <details>
13
13
  <summary>Why?</summary>
14
14
 
15
15
  Reproducing analytical results or understanding how a dataset or model was created can be a pain.
16
- Let alone training models on historical data, LIMS & ELN systems, orthogonal assays, or datasets generated by other teams.
17
- Even maintaining a mere overview of a project's or team's datasets & analyses is harder than it sounds.
16
+ Training models on historical data, LIMS & ELN systems, orthogonal assays, or datasets from other teams is even harder.
17
+ Even maintaining an overview of a project's datasets & analyses is more difficult than it should be.
18
18
 
19
- Biological datasets are typically managed with versioned storage systems, GUI-focused community or SaaS platforms, structureless data lakes, rigid data warehouses (SQL, monolithic arrays), and data lakehouses for tabular data.
19
+ Biological datasets are typically managed with versioned storage systems, GUI-focused platforms, structureless data lakes, rigid data warehouses (SQL, monolithic arrays), or tabular lakehouses.
20
20
 
21
21
  LaminDB extends the lakehouse architecture to biological registries & datasets beyond tables (`DataFrame`, `AnnData`, `.zarr`, `.tiledbsoma`, ...) with enough structure to enable queries and enough freedom to keep the pace of R&D high.
22
22
  Moreover, it provides context through data lineage -- tracing data and code, scientists and models -- and abstractions for biological domain knowledge and experimental metadata.
23
23
 
24
24
  </details>
25
25
 
26
- **Highlights.**
26
+ <img width="800px" src="https://lamin-site-assets.s3.amazonaws.com/.lamindb/BunYmHkyFLITlM5M0005.png">
27
27
 
28
- - **data lineage:** track inputs & outputs of notebooks, scripts, functions & pipelines with a single line of code
29
- - **unified access:** storage locations (local, S3, GCP, ...), SQL databases (Postgres, SQLite) & ontologies
30
- - **lakehouse**: manage, monitor & validate features, labels & dataset schemas; distributed queries and batch loading
31
- - **biological formats:** validate & annotate `DataFrame`, `AnnData`, `SpatialData`, ... backed by `parquet`, `zarr`, HDF5, LanceDB, ...
32
- - **biological entities**: manage experimental metadata & ontologies based on the Django ORM
33
- - **reproducible & auditable:** auto-version & timestamp execution reports, source code & compute environments, attribute records to users
34
- - **zero lock-in & scalable:** runs in your infrastructure; is _not_ a client for a rate-limited REST API
35
- - **extendable:** create custom plug-ins for your own applications based on the Django ecosystem
36
- - **integrations:** visualization tools like [vitessce](https://docs.lamin.ai/vitessce), workflow managers like [nextflow](https://docs.lamin.ai/nextflow) & [redun](https://docs.lamin.ai/redun), and [other tools](https://docs.lamin.ai/integrations)
37
- - **production-ready:** used in BigPharma, BioTech, hospitals & top labs
28
+ Highlights:
38
29
 
39
- LaminDB can be connected to LaminHub to serve as a [LIMS](https://en.wikipedia.org/wiki/Laboratory_information_management_system) for wetlab scientists, closing the drylab-wetlab feedback loop: [lamin.ai](https://lamin.ai).
30
+ - **lineage** track inputs & outputs of notebooks, scripts, functions & pipelines with a single line of code
31
+ - **lakehouse** → manage, monitor & validate schemas; query across many datasets
32
+ - **feature store** → manage features & labels; leverage batch loading
33
+ - **FAIR datasets** → validate & annotate `DataFrame`, `AnnData`, `SpatialData`, `parquet`, `.h5ad`, `zarr`, ...
34
+ - **LIMS & ELN** → manage experimental metadata, ontologies & markdown notes
35
+ - **unified access** → storage locations (local, S3, GCP, ...), SQL databases (Postgres, SQLite) & ontologies
36
+ - **reproducible & auditable** → auto-version & timestamp execution reports, source code & environments; attribute records to users
37
+ - **integrations** → [vitessce](https://docs.lamin.ai/vitessce), [nextflow](https://docs.lamin.ai/nextflow), [redun](https://docs.lamin.ai/redun), and [more](https://docs.lamin.ai/integrations)
38
+ - **zero lock-in & scalable** → runs in your infrastructure; not a client for a rate-limited REST API
39
+ - **extendable** → create custom plug-ins based on the Django ORM
40
+ - **production-ready** → used in BigPharma, BioTech, hospitals & top labs
41
+
42
+ If you want a GUI, you can connect your LaminDB instance to LaminHub and close the drylab-wetlab feedback loop: [lamin.ai](https://lamin.ai).
40
43
 
41
44
  ## Docs
42
45
 
@@ -108,7 +111,7 @@ You can organize datasets with validation & annotation of any kind of metadata t
108
111
  To annotate an artifact with a label, use:
109
112
 
110
113
  ```python
111
- my_experiment = ln.Record(name="My experiment").save() # create a label in the universal label ontology
114
+ my_experiment = ln.Record(name="My experiment").save() # create a label record
112
115
  artifact.records.add(my_experiment) # annotate the artifact with the label
113
116
  ```
114
117
 
@@ -780,7 +780,7 @@
780
780
  },
781
781
  "outputs": [],
782
782
  "source": [
783
- "adata = ln.core.datasets.mini_immuno.get_dataset1(\n",
783
+ "adata = ln.examples.datasets.mini_immuno.get_dataset1(\n",
784
784
  " with_gene_typo=True, with_cell_type_typo=True, otype=\"AnnData\"\n",
785
785
  ")\n",
786
786
  "adata"
@@ -145,7 +145,7 @@
145
145
  "metadata": {},
146
146
  "outputs": [],
147
147
  "source": [
148
- "assert len(ln.Artifact.filter().all()) == 0"
148
+ "assert len(ln.Artifact.filter()) == 0"
149
149
  ]
150
150
  },
151
151
  {
@@ -203,7 +203,7 @@
203
203
  "metadata": {},
204
204
  "outputs": [],
205
205
  "source": [
206
- "artifacts = ln.Artifact.filter().all()\n",
206
+ "artifacts = ln.Artifact.filter()\n",
207
207
  "assert len(artifacts) == 0"
208
208
  ]
209
209
  },
@@ -49,7 +49,7 @@
49
49
  "\n",
50
50
  "from typing import Literal, Any\n",
51
51
  "\n",
52
- "df = ln.examples.datasets.small_dataset1()\n",
52
+ "df = ln.examples.datasets.mini_immuno.get_dataset1()\n",
53
53
  "df"
54
54
  ]
55
55
  },
@@ -4,16 +4,12 @@
4
4
  "cell_type": "markdown",
5
5
  "metadata": {},
6
6
  "source": [
7
- "# When does visibility of artifacts and collections change?\n",
7
+ "# How do I trash or archive records?\n",
8
8
  "\n",
9
- "Any record in LaminDB has the following 3 levels of visibility:\n",
9
+ "Any record in LaminDB has the following 3 levels of visibility through 3 default branches:\n",
10
10
  "- 1: \"default\", visible by default\n",
11
11
  "- 0: \"archive\", excluded from query & search by default\n",
12
- "- -1: \"trash\", excluded from the query results, set with `.delete()`\n",
13
- "\n",
14
- "These values are represented in the database via a private integer field `branch_id` that also models the branches involved in merge requests.\n",
15
- "\n",
16
- "However, `.filter()` also accepts the `visibility` keyword, see below."
12
+ "- -1: \"trash\", excluded from query & search by default"
17
13
  ]
18
14
  },
19
15
  {
@@ -22,8 +18,8 @@
22
18
  "metadata": {},
23
19
  "outputs": [],
24
20
  "source": [
25
- "# !pip install lamindb\n",
26
- "!lamin init --storage test-branch_id"
21
+ "# pip install lamindb\n",
22
+ "!lamin init --storage test-branch"
27
23
  ]
28
24
  },
29
25
  {
@@ -43,16 +39,15 @@
43
39
  "outputs": [],
44
40
  "source": [
45
41
  "artifact = ln.Artifact.from_dataframe(\n",
46
- " pd.DataFrame({\"a\": [1, 2], \"b\": [3, 4]}), description=\"mydf\"\n",
47
- ")\n",
48
- "artifact.save()"
42
+ " pd.DataFrame({\"a\": [1, 2], \"b\": [3, 4]}), key=\"dataset.parquet\"\n",
43
+ ").save()"
49
44
  ]
50
45
  },
51
46
  {
52
47
  "cell_type": "markdown",
53
48
  "metadata": {},
54
49
  "source": [
55
- "A new artifact has default visibility 1 via `branch_id`:"
50
+ "An artifact is by default created on the `main` branch and then visible."
56
51
  ]
57
52
  },
58
53
  {
@@ -61,23 +56,14 @@
61
56
  "metadata": {},
62
57
  "outputs": [],
63
58
  "source": [
64
- "assert artifact.branch_id == 1"
59
+ "assert artifact.branch.name == \"main\""
65
60
  ]
66
61
  },
67
62
  {
68
63
  "cell_type": "markdown",
69
64
  "metadata": {},
70
65
  "source": [
71
- "When you delete an artifact, its `branch_id` is set to -1 (\"trash\"):"
72
- ]
73
- },
74
- {
75
- "cell_type": "code",
76
- "execution_count": null,
77
- "metadata": {},
78
- "outputs": [],
79
- "source": [
80
- "artifact.delete()"
66
+ "If you delete an artifact, it gets moved into the `trash` branch."
81
67
  ]
82
68
  },
83
69
  {
@@ -86,14 +72,15 @@
86
72
  "metadata": {},
87
73
  "outputs": [],
88
74
  "source": [
89
- "assert artifact.branch_id == -1"
75
+ "artifact.delete()\n",
76
+ "assert artifact.branch.name == \"trash\""
90
77
  ]
91
78
  },
92
79
  {
93
80
  "cell_type": "markdown",
94
81
  "metadata": {},
95
82
  "source": [
96
- "Files in trash won't be returned from default queries:"
83
+ "Artifacts in trash won't via default queries:"
97
84
  ]
98
85
  },
99
86
  {
@@ -102,14 +89,14 @@
102
89
  "metadata": {},
103
90
  "outputs": [],
104
91
  "source": [
105
- "ln.Artifact.filter(description=\"mydf\").all()"
92
+ "ln.Artifact.filter(key=\"dataset.parquet\").to_dataframe()"
106
93
  ]
107
94
  },
108
95
  {
109
96
  "cell_type": "markdown",
110
97
  "metadata": {},
111
98
  "source": [
112
- "Unless you specify `visibility=None` to see all hidden and trashed artifacts."
99
+ "You can query for them by adding the `trash` branch to the filter."
113
100
  ]
114
101
  },
115
102
  {
@@ -118,7 +105,7 @@
118
105
  "metadata": {},
119
106
  "outputs": [],
120
107
  "source": [
121
- "ln.Artifact.filter(description=\"mydf\", visibility=None).all()"
108
+ "ln.Artifact.filter(key=\"dataset.parquet\", branch__name=\"trash\").to_dataframe()"
122
109
  ]
123
110
  },
124
111
  {
@@ -134,50 +121,9 @@
134
121
  "metadata": {},
135
122
  "outputs": [],
136
123
  "source": [
137
- "artifact.restore()"
138
- ]
139
- },
140
- {
141
- "cell_type": "code",
142
- "execution_count": null,
143
- "metadata": {},
144
- "outputs": [],
145
- "source": [
146
- "assert artifact.branch_id == 1"
147
- ]
148
- },
149
- {
150
- "cell_type": "code",
151
- "execution_count": null,
152
- "metadata": {},
153
- "outputs": [],
154
- "source": [
155
- "ln.Artifact.filter(description=\"mydf\").all()"
156
- ]
157
- },
158
- {
159
- "cell_type": "markdown",
160
- "metadata": {},
161
- "source": [
162
- "Delete test artifact and instance:"
163
- ]
164
- },
165
- {
166
- "cell_type": "code",
167
- "execution_count": null,
168
- "metadata": {},
169
- "outputs": [],
170
- "source": [
171
- "artifact.delete(permanent=True)"
172
- ]
173
- },
174
- {
175
- "cell_type": "code",
176
- "execution_count": null,
177
- "metadata": {},
178
- "outputs": [],
179
- "source": [
180
- "!lamin delete --force test-branch_id"
124
+ "artifact.restore()\n",
125
+ "assert artifact.branch.name == \"main\"\n",
126
+ "ln.Artifact.filter(key=\"dataset.parquet\").to_dataframe()"
181
127
  ]
182
128
  }
183
129
  ],
@@ -7,11 +7,10 @@ faq/pydantic-pandera
7
7
  faq/idempotency
8
8
  faq/acid
9
9
  faq/track-run-inputs
10
- faq/setup
11
10
  faq/curate-any
12
11
  faq/import-modules
13
12
  faq/reference-field
14
- faq/visibility
13
+ faq/trash-archive
15
14
  faq/delete
16
15
  faq/keep-artifacts-local
17
16
  faq/validate-fields
@@ -293,7 +293,7 @@
293
293
  "id": "25",
294
294
  "metadata": {},
295
295
  "source": [
296
- "Filter for all artifacts annotated by a record:"
296
+ "Filter for all artifacts annotated by a record and get the result as a dataframe:"
297
297
  ]
298
298
  },
299
299
  {
@@ -315,12 +315,15 @@
315
315
  "id": "27",
316
316
  "metadata": {},
317
317
  "source": [
318
+ "{meth}`~lamindb.models.SQLRecord.filter` returns a {class}`~lamindb.models.QuerySet`. \n",
319
+ "\n",
318
320
  "To access the results encoded in a filter statement, execute its return value with one of:\n",
319
321
  "\n",
320
322
  "- {meth}`~lamindb.models.QuerySet.to_dataframe`: A pandas `DataFrame` with each record in a row.\n",
321
- "- {meth}`~lamindb.models.QuerySet.all`: A {class}`~lamindb.models.QuerySet`.\n",
322
323
  "- {meth}`~lamindb.models.QuerySet.one`: Exactly one record. Will raise an error if there is none. Is equivalent to the `.get()` method shown above.\n",
323
- "- {meth}`~lamindb.models.QuerySet.one_or_none`: Either one record or `None` if there is no query result."
324
+ "- {meth}`~lamindb.models.QuerySet.one_or_none`: Either one record or `None` if there is no query result.\n",
325
+ "\n",
326
+ "You can also use it as an iterator or get individual records via `__getitem__` (`[0]`, `[1]` etc.)."
324
327
  ]
325
328
  },
326
329
  {
@@ -330,8 +333,6 @@
330
333
  "source": [
331
334
  "```{note}\n",
332
335
  "\n",
333
- "{meth}`~lamindb.models.SQLRecord.filter` returns a {class}`~lamindb.models.QuerySet`.\n",
334
- "\n",
335
336
  "The registries in LaminDB are Django Models and any [Django query](https://docs.djangoproject.com/en/stable/topics/db/queries/) works.\n",
336
337
  "\n",
337
338
  "LaminDB re-interprets Django's API for data scientists.\n",
@@ -540,7 +541,7 @@
540
541
  "source": [
541
542
  "cd8a = bt.Gene.get(symbol=\"CD8A\")\n",
542
543
  "# query for all feature sets that contain CD8A\n",
543
- "feature_sets_with_cd8a = ln.Schema.filter(genes=cd8a).all()\n",
544
+ "feature_sets_with_cd8a = ln.Schema.filter(genes=cd8a)\n",
544
545
  "# get all artifacts\n",
545
546
  "ln.Artifact.filter(feature_sets__in=feature_sets_with_cd8a).to_dataframe()"
546
547
  ]
@@ -1,6 +1,6 @@
1
1
  import lamindb as ln
2
2
 
3
- df = ln.examples.datasets.small_dataset1(otype="DataFrame")
3
+ df = ln.examples.datasets.mini_immuno.get_dataset1(otype="DataFrame")
4
4
 
5
5
  species = ln.Feature(name="species", dtype="str").save()
6
6
  split = ln.Feature(name="split", dtype="str").save()
@@ -2,7 +2,7 @@ import lamindb as ln
2
2
 
3
3
  ln.examples.datasets.mini_immuno.define_features_labels()
4
4
  schema = ln.examples.schemas.valid_features()
5
- df = ln.examples.datasets.small_dataset1(otype="DataFrame")
5
+ df = ln.examples.datasets.mini_immuno.get_dataset1(otype="DataFrame")
6
6
  artifact = ln.Artifact.from_dataframe(
7
7
  df, key="examples/dataset1.parquet", schema=schema
8
8
  ).save()
@@ -1,7 +1,7 @@
1
1
  import lamindb as ln
2
2
 
3
3
  schema = ln.examples.datasets.mini_immuno.define_mini_immuno_schema_flexible()
4
- df = ln.examples.datasets.small_dataset1(otype="DataFrame")
4
+ df = ln.examples.datasets.mini_immuno.get_dataset1(otype="DataFrame")
5
5
  df.pop("donor") # remove donor column to trigger validation error
6
6
  try:
7
7
  artifact = ln.Artifact.from_dataframe(
@@ -11,7 +11,7 @@ if __name__ == "__main__":
11
11
  "input_dir": args.input_dir,
12
12
  "learning_rate": args.learning_rate,
13
13
  "preprocess_params": {
14
- "downsample": args.downsample, # nested parameter names & values in dictionaries are not validated
14
+ "downsample": args.downsample,
15
15
  "normalization": "the_good_one",
16
16
  },
17
17
  }
@@ -1,8 +1,6 @@
1
1
  import argparse
2
2
  import lamindb as ln
3
3
 
4
- ln.Param(name="run_workflow_subset", dtype=bool).save()
5
-
6
4
 
7
5
  @ln.tracked()
8
6
  def subset_dataframe(
@@ -22,12 +20,12 @@ if __name__ == "__main__":
22
20
  p.add_argument("--subset", action="store_true")
23
21
  args = p.parse_args()
24
22
 
25
- params = {"run_workflow_subset": args.subset}
23
+ params = {"is_subset": args.subset}
26
24
 
27
25
  ln.track(params=params)
28
26
 
29
27
  if args.subset:
30
- df = ln.examples.datasets.small_dataset1(otype="DataFrame")
28
+ df = ln.examples.datasets.mini_immuno.get_dataset1(otype="DataFrame")
31
29
  artifact = ln.Artifact.from_dataframe(
32
30
  df, key="my_analysis/dataset.parquet"
33
31
  ).save()
@@ -13,7 +13,7 @@
13
13
  "metadata": {},
14
14
  "outputs": [],
15
15
  "source": [
16
- "!lamin settings set auto-connect false"
16
+ "!lamin disconnect"
17
17
  ]
18
18
  },
19
19
  {
@@ -48,16 +48,12 @@
48
48
  ").save()\n",
49
49
  "features = bt.CellMarker.from_values(\n",
50
50
  " [\"PD1\", \"CD21\"], field=bt.CellMarker.name, organism=\"human\"\n",
51
- ")\n",
52
- "ln.save(features)\n",
53
- "artifact.features._add_schema(ln.FeatureSet(features), slot=\"var\")\n",
54
- "\n",
51
+ ").save()\n",
52
+ "artifact.features._add_schema(ln.Schema(features), slot=\"var\")\n",
55
53
  "organism = bt.Organism.from_source(name=\"human\").save()\n",
56
54
  "artifact.labels.add(organism)\n",
57
- "\n",
58
55
  "experiment = wl.Experiment(name=\"experiment-test-transfer-to-cloud\").save()\n",
59
56
  "artifact.experiments.add(experiment)\n",
60
- "\n",
61
57
  "artifact.describe()"
62
58
  ]
63
59
  },
@@ -67,7 +63,7 @@
67
63
  "metadata": {},
68
64
  "outputs": [],
69
65
  "source": [
70
- "assert artifact.features[\"var\"].count() == 2"
66
+ "assert artifact.features.slots[\"var\"].members.count() == 2"
71
67
  ]
72
68
  }
73
69
  ],
@@ -14,10 +14,8 @@
14
14
  "outputs": [],
15
15
  "source": [
16
16
  "import lamindb as ln\n",
17
- "import bionty as bt\n",
18
17
  "\n",
19
- "ln.connect(\"laminlabs/lamin-dev\")\n",
20
- "bt.settings.organism = \"human\""
18
+ "ln.connect(\"laminlabs/lamin-dev\")"
21
19
  ]
22
20
  },
23
21
  {
@@ -38,7 +36,7 @@
38
36
  " experiments.delete()\n",
39
37
  "\n",
40
38
  "\n",
41
- "artifacts = ln.Artifact.filter(description=\"test-transfer-to-cloud\").all()\n",
39
+ "artifacts = ln.Artifact.filter(description=\"test-transfer-to-cloud\")\n",
42
40
  "for artifact in artifacts:\n",
43
41
  " cleanup(artifact)"
44
42
  ]
@@ -102,7 +100,7 @@
102
100
  ],
103
101
  "metadata": {
104
102
  "kernelspec": {
105
- "display_name": "Python 3 (ipykernel)",
103
+ "display_name": "py312",
106
104
  "language": "python",
107
105
  "name": "python3"
108
106
  },
@@ -116,7 +114,7 @@
116
114
  "name": "python",
117
115
  "nbconvert_exporter": "python",
118
116
  "pygments_lexer": "ipython3",
119
- "version": "3.9.17"
117
+ "version": "3.12.8"
120
118
  }
121
119
  },
122
120
  "nbformat": 4,