lamindb 1.11a1__tar.gz → 1.11.1__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 (299) hide show
  1. {lamindb-1.11a1 → lamindb-1.11.1}/.gitignore +2 -0
  2. {lamindb-1.11a1 → lamindb-1.11.1}/.gitmodules +0 -3
  3. {lamindb-1.11a1 → lamindb-1.11.1}/.pre-commit-config.yaml +2 -1
  4. {lamindb-1.11a1 → lamindb-1.11.1}/PKG-INFO +12 -17
  5. {lamindb-1.11a1 → lamindb-1.11.1}/README.md +2 -2
  6. {lamindb-1.11a1 → lamindb-1.11.1}/docs/api.md +1 -2
  7. {lamindb-1.11a1 → lamindb-1.11.1}/docs/curate.ipynb +88 -13
  8. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/acid.ipynb +1 -1
  9. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/idempotency.ipynb +1 -1
  10. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/keep-artifacts-local.ipynb +2 -2
  11. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/setup.ipynb +1 -1
  12. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/track-run-inputs.ipynb +1 -1
  13. {lamindb-1.11a1 → lamindb-1.11.1}/docs/includes/installation.md +1 -4
  14. lamindb-1.11.1/docs/scripts/curate_anndata_uns.py +9 -0
  15. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/curate_dataframe_attrs.py +2 -9
  16. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/curate_mudata.py +14 -2
  17. lamindb-1.11.1/docs/scripts/define_schema_anndata_uns.py +10 -0
  18. lamindb-1.11.1/docs/scripts/define_schema_df_metadata.py +9 -0
  19. {lamindb-1.11a1 → lamindb-1.11.1}/docs/track.ipynb +2 -2
  20. {lamindb-1.11a1 → lamindb-1.11.1}/docs/transfer.ipynb +1 -1
  21. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/__init__.py +1 -1
  22. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/_finish.py +3 -3
  23. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/_context.py +4 -2
  24. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/curators/core.py +13 -5
  25. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/errors.py +6 -0
  26. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/cellxgene/_cellxgene.py +1 -1
  27. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/croissant/__init__.py +20 -4
  28. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/datasets/_core.py +8 -1
  29. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/datasets/mini_immuno.py +0 -1
  30. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/fixtures/sheets.py +8 -2
  31. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/integrations/_croissant.py +34 -11
  32. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0121_recorduser.py +7 -0
  33. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/__init__.py +1 -0
  34. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/_feature_manager.py +78 -18
  35. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/artifact.py +71 -65
  36. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/artifact_set.py +12 -3
  37. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/query_set.py +146 -58
  38. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/record.py +5 -1
  39. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/run.py +2 -27
  40. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/save.py +6 -8
  41. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/sqlrecord.py +47 -33
  42. {lamindb-1.11a1 → lamindb-1.11.1}/noxfile.py +10 -11
  43. {lamindb-1.11a1 → lamindb-1.11.1}/pyproject.toml +14 -19
  44. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_artifact.py +1 -1
  45. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_can_curate.py +8 -8
  46. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_collection.py +1 -1
  47. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_data.py +3 -3
  48. lamindb-1.11.1/tests/core/test_delete.py +18 -0
  49. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_describe_and_df_calls.py +5 -5
  50. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_feature.py +3 -3
  51. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_feature_label_manager.py +26 -26
  52. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_from_values.py +2 -2
  53. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_has_parents.py +2 -2
  54. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_models.py +3 -3
  55. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_queryset.py +22 -3
  56. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_save.py +1 -1
  57. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_schema.py +9 -9
  58. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_search.py +2 -2
  59. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_versioning.py +29 -7
  60. {lamindb-1.11a1 → lamindb-1.11.1}/tests/curators/test_cat_managers.py +39 -39
  61. lamindb-1.11.1/tests/curators/test_curate_from_croissant.py +78 -0
  62. {lamindb-1.11a1 → lamindb-1.11.1}/tests/curators/test_curators_examples.py +76 -98
  63. {lamindb-1.11a1 → lamindb-1.11.1}/tests/curators/test_curators_general.py +16 -16
  64. {lamindb-1.11a1 → lamindb-1.11.1}/tests/curators/test_curators_multivalue.py +2 -2
  65. {lamindb-1.11a1 → lamindb-1.11.1}/tests/curators/test_cxg_curator.py +5 -5
  66. {lamindb-1.11a1 → lamindb-1.11.1}/tests/curators/test_records.py +5 -4
  67. {lamindb-1.11a1 → lamindb-1.11.1}/tests/permissions/scripts/setup_access.py +5 -0
  68. {lamindb-1.11a1 → lamindb-1.11.1}/tests/permissions/test_permissions.py +47 -1
  69. {lamindb-1.11a1 → lamindb-1.11.1}/tests/storage/test_streaming.py +8 -0
  70. {lamindb-1.11a1 → lamindb-1.11.1}/tests/storage/test_transfer.py +8 -4
  71. lamindb-1.11a1/tests/core/test_delete.py +0 -9
  72. lamindb-1.11a1/tests/curators/test_curate_from_croissant.py +0 -45
  73. {lamindb-1.11a1 → lamindb-1.11.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  74. {lamindb-1.11a1 → lamindb-1.11.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  75. {lamindb-1.11a1 → lamindb-1.11.1}/.github/ISSUE_TEMPLATE/enhancement.yml +0 -0
  76. {lamindb-1.11a1 → lamindb-1.11.1}/.github/ISSUE_TEMPLATE/usage_question.yml +0 -0
  77. {lamindb-1.11a1 → lamindb-1.11.1}/.github/workflows/build.yml +0 -0
  78. {lamindb-1.11a1 → lamindb-1.11.1}/.github/workflows/doc-changes.yml +0 -0
  79. {lamindb-1.11a1 → lamindb-1.11.1}/CONTRIBUTING.md +0 -0
  80. {lamindb-1.11a1 → lamindb-1.11.1}/LICENSE +0 -0
  81. {lamindb-1.11a1 → lamindb-1.11.1}/docs/arrays.ipynb +0 -0
  82. {lamindb-1.11a1 → lamindb-1.11.1}/docs/bio-registries.ipynb +0 -0
  83. {lamindb-1.11a1 → lamindb-1.11.1}/docs/bionty.md +0 -0
  84. {lamindb-1.11a1 → lamindb-1.11.1}/docs/changelog.md +0 -0
  85. {lamindb-1.11a1 → lamindb-1.11.1}/docs/clinicore.md +0 -0
  86. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/curate-any.ipynb +0 -0
  87. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/delete.ipynb +0 -0
  88. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/import-modules.ipynb +0 -0
  89. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/pydantic-pandera.ipynb +0 -0
  90. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/reference-field.ipynb +0 -0
  91. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/search.ipynb +0 -0
  92. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/symbol-mapping.ipynb +0 -0
  93. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/test_notebooks.py +0 -0
  94. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/validate-fields.ipynb +0 -0
  95. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq/visibility.ipynb +0 -0
  96. {lamindb-1.11a1 → lamindb-1.11.1}/docs/faq.md +0 -0
  97. {lamindb-1.11a1 → lamindb-1.11.1}/docs/guide.md +0 -0
  98. {lamindb-1.11a1 → lamindb-1.11.1}/docs/index.md +0 -0
  99. {lamindb-1.11a1 → lamindb-1.11.1}/docs/lamindb.md +0 -0
  100. {lamindb-1.11a1 → lamindb-1.11.1}/docs/query-search.md +0 -0
  101. {lamindb-1.11a1 → lamindb-1.11.1}/docs/registries.ipynb +0 -0
  102. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/curate_anndata_flexible.py +0 -0
  103. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/curate_dataframe_external_features.py +0 -0
  104. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/curate_dataframe_flexible.py +0 -0
  105. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/curate_dataframe_minimal_errors.py +0 -0
  106. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/curate_soma_experiment.py +0 -0
  107. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/curate_spatialdata.py +0 -0
  108. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/define_mini_immuno_features_labels.py +0 -0
  109. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/define_mini_immuno_schema_flexible.py +0 -0
  110. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/define_schema_anndata_ensembl_gene_ids_and_valid_features_in_obs.py +0 -0
  111. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/define_schema_spatialdata.py +0 -0
  112. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/define_valid_features.py +0 -0
  113. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/run_track_and_finish.py +0 -0
  114. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/run_track_with_params.py +0 -0
  115. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/run_workflow.py +0 -0
  116. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/save_mini_immuno_datasets.py +0 -0
  117. {lamindb-1.11a1 → lamindb-1.11.1}/docs/scripts/synced_with_git.py +0 -0
  118. {lamindb-1.11a1 → lamindb-1.11.1}/docs/storage/add-replace-cache.ipynb +0 -0
  119. {lamindb-1.11a1 → lamindb-1.11.1}/docs/storage/anndata-accessor.ipynb +0 -0
  120. {lamindb-1.11a1 → lamindb-1.11.1}/docs/storage/prepare-transfer-local-to-cloud.ipynb +0 -0
  121. {lamindb-1.11a1 → lamindb-1.11.1}/docs/storage/test-files/iris.csv +0 -0
  122. {lamindb-1.11a1 → lamindb-1.11.1}/docs/storage/test-files/iris.data +0 -0
  123. {lamindb-1.11a1 → lamindb-1.11.1}/docs/storage/test-files/new_iris.csv +0 -0
  124. {lamindb-1.11a1 → lamindb-1.11.1}/docs/storage/test_notebooks.py +0 -0
  125. {lamindb-1.11a1 → lamindb-1.11.1}/docs/storage/transfer-local-to-cloud.ipynb +0 -0
  126. {lamindb-1.11a1 → lamindb-1.11.1}/docs/storage/upload.ipynb +0 -0
  127. {lamindb-1.11a1 → lamindb-1.11.1}/docs/storage/vitessce.ipynb +0 -0
  128. {lamindb-1.11a1 → lamindb-1.11.1}/docs/storage.md +0 -0
  129. {lamindb-1.11a1 → lamindb-1.11.1}/docs/test_notebooks.py +0 -0
  130. {lamindb-1.11a1 → lamindb-1.11.1}/docs/wetlab.md +0 -0
  131. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/_tracked.py +0 -0
  132. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/_view.py +0 -0
  133. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/base/__init__.py +0 -0
  134. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/base/dtypes.py +0 -0
  135. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/base/fields.py +0 -0
  136. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/base/ids.py +0 -0
  137. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/base/types.py +0 -0
  138. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/base/uids.py +0 -0
  139. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/base/users.py +0 -0
  140. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/__init__.py +0 -0
  141. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/_compat.py +0 -0
  142. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/_mapped_collection.py +0 -0
  143. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/_settings.py +0 -0
  144. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/_sync_git.py +0 -0
  145. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/_track_environment.py +0 -0
  146. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/exceptions.py +0 -0
  147. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/loaders.py +0 -0
  148. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/storage/__init__.py +0 -0
  149. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/storage/_anndata_accessor.py +0 -0
  150. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/storage/_backed_access.py +0 -0
  151. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/storage/_polars_lazy_df.py +0 -0
  152. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/storage/_pyarrow_dataset.py +0 -0
  153. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/storage/_spatialdata_accessor.py +0 -0
  154. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/storage/_tiledbsoma.py +0 -0
  155. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/storage/_valid_suffixes.py +0 -0
  156. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/storage/_zarr.py +0 -0
  157. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/storage/objects.py +0 -0
  158. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/storage/paths.py +0 -0
  159. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/subsettings/__init__.py +0 -0
  160. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/subsettings/_annotation_settings.py +0 -0
  161. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/subsettings/_creation_settings.py +0 -0
  162. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/core/types.py +0 -0
  163. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/curators/__init__.py +0 -0
  164. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/curators/_legacy.py +0 -0
  165. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/__init__.py +0 -0
  166. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/cellxgene/__init__.py +0 -0
  167. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/cellxgene/cellxgene_schema_versions.csv +0 -0
  168. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/croissant/mini_immuno.anndata.zarr_metadata.json +0 -0
  169. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/datasets/__init__.py +0 -0
  170. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/datasets/_fake.py +0 -0
  171. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/datasets/_small.py +0 -0
  172. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/fixtures/__init__.py +0 -0
  173. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/schemas/__init__.py +0 -0
  174. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/schemas/_anndata.py +0 -0
  175. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/examples/schemas/_simple.py +0 -0
  176. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/integrations/__init__.py +0 -0
  177. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/integrations/_vitessce.py +0 -0
  178. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0069_squashed.py +0 -0
  179. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0070_lamindbv1_migrate_data.py +0 -0
  180. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0071_lamindbv1_migrate_schema.py +0 -0
  181. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0072_remove_user__branch_code_remove_user_aux_and_more.py +0 -0
  182. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0073_merge_ourprojects.py +0 -0
  183. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0074_lamindbv1_part4.py +0 -0
  184. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0075_lamindbv1_part5.py +0 -0
  185. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0076_lamindbv1_part6.py +0 -0
  186. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0077_lamindbv1_part6b.py +0 -0
  187. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0078_lamindbv1_part6c.py +0 -0
  188. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0079_alter_rundata_value_json_and_more.py +0 -0
  189. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0080_polish_lamindbv1.py +0 -0
  190. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0081_revert_textfield_collection.py +0 -0
  191. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0082_alter_feature_dtype.py +0 -0
  192. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0083_alter_feature_is_type_alter_flextable_is_type_and_more.py +0 -0
  193. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0084_alter_schemafeature_feature_and_more.py +0 -0
  194. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0085_alter_feature_is_type_alter_flextable_is_type_and_more.py +0 -0
  195. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0086_various.py +0 -0
  196. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0087_rename__schemas_m2m_artifact_feature_sets_and_more.py +0 -0
  197. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0088_schema_components.py +0 -0
  198. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0089_subsequent_runs.py +0 -0
  199. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0090_runproject_project_runs.py +0 -0
  200. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0091_alter_featurevalue_options_alter_space_options_and_more.py +0 -0
  201. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0092_alter_artifactfeaturevalue_artifact_and_more.py +0 -0
  202. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0093_alter_schemacomponent_unique_together.py +0 -0
  203. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0094_writeloglock_writelogmigrationstate_and_more.py +0 -0
  204. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0095_remove_rundata_flextable.py +0 -0
  205. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0096_remove_artifact__param_values_and_more.py +0 -0
  206. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0097_remove_schemaparam_param_remove_paramvalue_param_and_more.py +0 -0
  207. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0098_alter_feature_type_alter_project_type_and_more.py +0 -0
  208. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0099_alter_writelog_seqno.py +0 -0
  209. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0100_branch_alter_artifact__branch_code_and_more.py +0 -0
  210. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0101_alter_artifact_hash_alter_feature_name_and_more.py +0 -0
  211. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0102_remove_writelog_branch_code_and_more.py +0 -0
  212. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0103_remove_writelog_migration_state_and_more.py +0 -0
  213. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0104_alter_branch_uid.py +0 -0
  214. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0105_record_unique_name.py +0 -0
  215. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0106_transfer_data_migration.py +0 -0
  216. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0107_add_schema_to_record.py +0 -0
  217. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0108_remove_record_sheet_remove_sheetproject_sheet_and_more.py +0 -0
  218. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0109_record_input_of_runs_alter_record_run_and_more.py +0 -0
  219. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0110_rename_values_artifacts_record_linked_artifacts.py +0 -0
  220. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0111_remove_record__sort_order.py +0 -0
  221. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0112_alter_recordartifact_feature_and_more.py +0 -0
  222. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0113_lower_case_branch_and_space_names.py +0 -0
  223. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0114_alter_run__status_code.py +0 -0
  224. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0115_alter_space_uid.py +0 -0
  225. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0116_remove_artifact_unique_artifact_storage_key_hash_and_more.py +0 -0
  226. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0117_fix_artifact_storage_hash_unique_constraints.py +0 -0
  227. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0118_alter_recordproject_value_projectrecord.py +0 -0
  228. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0119_rename_records_project_linked_in_records.py +0 -0
  229. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0119_squashed.py +0 -0
  230. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/0120_add_record_fk_constraint.py +0 -0
  231. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/migrations/__init__.py +0 -0
  232. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/_describe.py +0 -0
  233. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/_django.py +0 -0
  234. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/_from_values.py +0 -0
  235. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/_is_versioned.py +0 -0
  236. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/_label_manager.py +0 -0
  237. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/_relations.py +0 -0
  238. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/can_curate.py +0 -0
  239. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/collection.py +0 -0
  240. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/feature.py +0 -0
  241. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/has_parents.py +0 -0
  242. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/project.py +0 -0
  243. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/query_manager.py +0 -0
  244. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/schema.py +0 -0
  245. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/storage.py +0 -0
  246. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/transform.py +0 -0
  247. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/models/ulabel.py +0 -0
  248. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/py.typed +0 -0
  249. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/setup/__init__.py +0 -0
  250. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/setup/_switch.py +0 -0
  251. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/setup/core/__init__.py +0 -0
  252. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/setup/errors/__init__.py +0 -0
  253. {lamindb-1.11a1 → lamindb-1.11.1}/lamindb/setup/types/__init__.py +0 -0
  254. {lamindb-1.11a1 → lamindb-1.11.1}/tests/conftest.py +0 -0
  255. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/_dataset_fixtures.py +0 -0
  256. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/conftest.py +0 -0
  257. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/notebooks/basic-r-notebook.Rmd.cleaned.html +0 -0
  258. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/notebooks/basic-r-notebook.Rmd.html +0 -0
  259. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/notebooks/duplicate/with-title-initialized-consecutive-finish.ipynb +0 -0
  260. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/notebooks/no-title.ipynb +0 -0
  261. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/notebooks/with-title-initialized-consecutive-finish-not-last-cell.ipynb +0 -0
  262. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/notebooks/with-title-initialized-consecutive-finish.ipynb +0 -0
  263. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/scripts/duplicate1/script-to-test-versioning.py +0 -0
  264. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/scripts/duplicate2/script-to-test-versioning.py +0 -0
  265. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/scripts/duplicate3/script-to-test-versioning.py +0 -0
  266. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/scripts/duplicate4/script-to-test-versioning.py +0 -0
  267. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/scripts/duplicate5/script-to-test-versioning.py +0 -0
  268. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/scripts/script-to-test-filename-change.py +0 -0
  269. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/scripts/script-to-test-versioning.py +0 -0
  270. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_artifact_folders.py +0 -0
  271. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_db.py +0 -0
  272. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_dtype.py +0 -0
  273. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_integrity.py +0 -0
  274. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_load.py +0 -0
  275. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_manager.py +0 -0
  276. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_notebooks.py +0 -0
  277. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_run.py +0 -0
  278. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_settings.py +0 -0
  279. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_sqlrecord.py +0 -0
  280. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_storage.py +0 -0
  281. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_track.py +0 -0
  282. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_tracked.py +0 -0
  283. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_transform.py +0 -0
  284. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_ulabel.py +0 -0
  285. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_view.py +0 -0
  286. {lamindb-1.11a1 → lamindb-1.11.1}/tests/core/test_visibility.py +0 -0
  287. {lamindb-1.11a1 → lamindb-1.11.1}/tests/curators/conftest.py +0 -0
  288. {lamindb-1.11a1 → lamindb-1.11.1}/tests/curators/test_dataframe_curators_accounting_example.py +0 -0
  289. {lamindb-1.11a1 → lamindb-1.11.1}/tests/permissions/conftest.py +0 -0
  290. {lamindb-1.11a1 → lamindb-1.11.1}/tests/permissions/jwt_utils.py +0 -0
  291. {lamindb-1.11a1 → lamindb-1.11.1}/tests/permissions/scripts/check_lamin_dev.py +0 -0
  292. {lamindb-1.11a1 → lamindb-1.11.1}/tests/permissions/scripts/clean_lamin_dev.py +0 -0
  293. {lamindb-1.11a1 → lamindb-1.11.1}/tests/permissions/scripts/setup_instance.py +0 -0
  294. {lamindb-1.11a1 → lamindb-1.11.1}/tests/storage/conftest.py +0 -0
  295. {lamindb-1.11a1 → lamindb-1.11.1}/tests/storage/test_artifact_storage.py +0 -0
  296. {lamindb-1.11a1 → lamindb-1.11.1}/tests/storage/test_artifact_zarr.py +0 -0
  297. {lamindb-1.11a1 → lamindb-1.11.1}/tests/storage/test_cache.py +0 -0
  298. {lamindb-1.11a1 → lamindb-1.11.1}/tests/storage/test_connect_reconnect.py +0 -0
  299. {lamindb-1.11a1 → lamindb-1.11.1}/tests/storage/test_storage_lifecycle.py +0 -0
@@ -66,7 +66,9 @@ run-tests
66
66
  test-django-validation/
67
67
  curate.tiledbsoma
68
68
  small_dataset.tiledbsoma
69
+ nonregistered_storage
69
70
  registered_storage
71
+ tests/core/notebooks/no-uid-renamed.ipynb
70
72
 
71
73
  # General
72
74
  .DS_Store
@@ -10,9 +10,6 @@
10
10
  [submodule "sub/wetlab"]
11
11
  path = sub/wetlab
12
12
  url = https://github.com/laminlabs/wetlab
13
- [submodule "sub/clinicore"]
14
- path = sub/clinicore
15
- url = https://github.com/laminlabs/clinicore
16
13
  [submodule "sub/cellxgene-lamin"]
17
14
  path = sub/cellxgene-lamin
18
15
  url = https://github.com/laminlabs/cellxgene-lamin.git
@@ -68,5 +68,6 @@ repos:
68
68
  tests/writelog/conftest.py|
69
69
  tests/writelog_sqlite/conftest.py|
70
70
  tests/curators/test_curators_examples.py|
71
- tests/core/conftest.py
71
+ tests/core/conftest.py|
72
+ docs/scripts/
72
73
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: lamindb
3
- Version: 1.11a1
3
+ Version: 1.11.1
4
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
@@ -10,8 +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.7.0
14
- Requires-Dist: lamindb_setup[aws]==1.10.0
13
+ Requires-Dist: lamin_cli==1.7.1
14
+ Requires-Dist: lamindb_setup[aws]==1.10.1
15
+ Requires-Dist: bionty>=1.7a1
16
+ Requires-Dist: wetlab>=1.5a1
17
+ Requires-Dist: nbproject==0.11.1
18
+ Requires-Dist: jupytext
19
+ Requires-Dist: nbconvert>=7.2.1
20
+ Requires-Dist: mistune!=3.1.0
15
21
  Requires-Dist: pyyaml
16
22
  Requires-Dist: pyarrow
17
23
  Requires-Dist: pandera>=0.24.0
@@ -23,8 +29,6 @@ Requires-Dist: anndata>=0.8.0,<=0.12.1
23
29
  Requires-Dist: fsspec
24
30
  Requires-Dist: graphviz
25
31
  Requires-Dist: psycopg2-binary
26
- Requires-Dist: bionty>=1.6.1rc1 ; extra == "bionty"
27
- Requires-Dist: clinicore>=1.2.1 ; extra == "clinicore"
28
32
  Requires-Dist: tomlkit ; extra == "dev"
29
33
  Requires-Dist: line_profiler ; extra == "dev"
30
34
  Requires-Dist: pre-commit ; extra == "dev"
@@ -32,28 +36,19 @@ Requires-Dist: nox ; extra == "dev"
32
36
  Requires-Dist: laminci>=0.3 ; extra == "dev"
33
37
  Requires-Dist: pytest>=6.0 ; extra == "dev"
34
38
  Requires-Dist: coverage ; extra == "dev"
35
- Requires-Dist: pytest-cov ; extra == "dev"
39
+ Requires-Dist: pytest-cov<7.0.0 ; extra == "dev"
36
40
  Requires-Dist: mudata ; extra == "dev"
37
41
  Requires-Dist: nbproject_test>=0.6.0 ; extra == "dev"
38
42
  Requires-Dist: faker-biology ; extra == "dev"
39
43
  Requires-Dist: pronto ; extra == "dev"
40
44
  Requires-Dist: readfcs>=2.0.1 ; extra == "fcs"
41
45
  Requires-Dist: lamindb_setup[gcp] ; extra == "gcp"
42
- Requires-Dist: nbproject==0.11.1 ; extra == "jupyter"
43
- Requires-Dist: jupytext ; extra == "jupyter"
44
- Requires-Dist: nbconvert>=7.2.1 ; extra == "jupyter"
45
- Requires-Dist: mistune!=3.1.0 ; extra == "jupyter"
46
- Requires-Dist: wetlab>=1.3.1 ; extra == "wetlab"
47
46
  Requires-Dist: numcodecs<0.16.0 ; extra == "zarr"
48
47
  Requires-Dist: zarr>=2.16.0,<3.0.0a0 ; extra == "zarr"
49
48
  Project-URL: Home, https://github.com/laminlabs/lamindb
50
- Provides-Extra: bionty
51
- Provides-Extra: clinicore
52
49
  Provides-Extra: dev
53
50
  Provides-Extra: fcs
54
51
  Provides-Extra: gcp
55
- Provides-Extra: jupyter
56
- Provides-Extra: wetlab
57
52
  Provides-Extra: zarr
58
53
 
59
54
  [![Stars](https://img.shields.io/github/stars/laminlabs/lamindb?logo=GitHub)](https://github.com/laminlabs/lamindb)
@@ -77,7 +72,7 @@ It lets you track data transformations, validate & annotate datasets, and query
77
72
  Install the `lamindb` Python package:
78
73
 
79
74
  ```shell
80
- pip install 'lamindb[jupyter,bionty]' # support notebooks & biological ontologies
75
+ pip install lamindb
81
76
  ```
82
77
 
83
78
  Create a LaminDB instance:
@@ -134,7 +129,7 @@ Conversely, you can query artifacts by the script that created them.
134
129
  ln.Artifact.get(transform__key="create-fasta.py") # query artifact by transform key
135
130
  ```
136
131
 
137
- Data lineage is just one type of metadata to help analysis and model training through queries, validation, and annotation. Here is a more [comprehensive example](https://lamin.ai/laminlabs/lamindata/artifact/fgKBV8qdSnbIga0i).
132
+ Data lineage is just one type of metadata to help analysis and model training through queries, validation, and annotation. Here is a more [comprehensive example](https://lamin.ai/laminlabs/lamindata/artifact/9K1dteZ6Qx0EXK8g).
138
133
 
139
134
  <img src="https://lamin-site-assets.s3.amazonaws.com/.lamindb/6sofuDVvTANB0f480001.png" width="850">
140
135
 
@@ -19,7 +19,7 @@ It lets you track data transformations, validate & annotate datasets, and query
19
19
  Install the `lamindb` Python package:
20
20
 
21
21
  ```shell
22
- pip install 'lamindb[jupyter,bionty]' # support notebooks & biological ontologies
22
+ pip install lamindb
23
23
  ```
24
24
 
25
25
  Create a LaminDB instance:
@@ -76,7 +76,7 @@ Conversely, you can query artifacts by the script that created them.
76
76
  ln.Artifact.get(transform__key="create-fasta.py") # query artifact by transform key
77
77
  ```
78
78
 
79
- Data lineage is just one type of metadata to help analysis and model training through queries, validation, and annotation. Here is a more [comprehensive example](https://lamin.ai/laminlabs/lamindata/artifact/fgKBV8qdSnbIga0i).
79
+ Data lineage is just one type of metadata to help analysis and model training through queries, validation, and annotation. Here is a more [comprehensive example](https://lamin.ai/laminlabs/lamindata/artifact/9K1dteZ6Qx0EXK8g).
80
80
 
81
81
  <img src="https://lamin-site-assets.s3.amazonaws.com/.lamindb/6sofuDVvTANB0f480001.png" width="850">
82
82
 
@@ -1,4 +1,4 @@
1
- # API
1
+ # API Reference
2
2
 
3
3
  <meta http-equiv="Refresh" content="0; url=./lamindb.html" />
4
4
 
@@ -18,5 +18,4 @@ lamindb
18
18
 
19
19
  bionty
20
20
  wetlab
21
- clinicore
22
21
  ```
@@ -955,13 +955,88 @@
955
955
  "id": "73",
956
956
  "metadata": {},
957
957
  "source": [
958
- "## MuData"
958
+ "## Unstructured dictionaries"
959
959
  ]
960
960
  },
961
961
  {
962
962
  "cell_type": "markdown",
963
963
  "id": "74",
964
964
  "metadata": {},
965
+ "source": [
966
+ "Most datastructures support unstructured metadata stored as dictionaries:\n",
967
+ "\n",
968
+ "- Pandas DataFrames: `.attrs`\n",
969
+ "- AnnData: `.uns`\n",
970
+ "- MuData: `.uns` and `modality:uns`\n",
971
+ "- SpatialData: `.attrs`\n",
972
+ "\n",
973
+ "Here, we exemplary show how to curate such metadata for AnnData:"
974
+ ]
975
+ },
976
+ {
977
+ "cell_type": "markdown",
978
+ "id": "75",
979
+ "metadata": {},
980
+ "source": [
981
+ "```{eval-rst}\n",
982
+ ".. literalinclude:: scripts/define_schema_anndata_uns.py\n",
983
+ " :language: python\n",
984
+ " :caption: define_schema_anndata_uns.py\n",
985
+ "```"
986
+ ]
987
+ },
988
+ {
989
+ "cell_type": "code",
990
+ "execution_count": null,
991
+ "id": "76",
992
+ "metadata": {
993
+ "tags": [
994
+ "hide-output"
995
+ ]
996
+ },
997
+ "outputs": [],
998
+ "source": [
999
+ "!python scripts/define_schema_anndata_uns.py"
1000
+ ]
1001
+ },
1002
+ {
1003
+ "cell_type": "markdown",
1004
+ "id": "77",
1005
+ "metadata": {},
1006
+ "source": [
1007
+ "```{eval-rst}\n",
1008
+ ".. literalinclude:: scripts/curate_anndata_uns.py\n",
1009
+ " :language: python\n",
1010
+ " :caption: curate_anndata_uns.py\n",
1011
+ "```"
1012
+ ]
1013
+ },
1014
+ {
1015
+ "cell_type": "code",
1016
+ "execution_count": null,
1017
+ "id": "78",
1018
+ "metadata": {
1019
+ "tags": [
1020
+ "hide-output"
1021
+ ]
1022
+ },
1023
+ "outputs": [],
1024
+ "source": [
1025
+ "!python scripts/curate_anndata_uns.py"
1026
+ ]
1027
+ },
1028
+ {
1029
+ "cell_type": "markdown",
1030
+ "id": "79",
1031
+ "metadata": {},
1032
+ "source": [
1033
+ "## MuData"
1034
+ ]
1035
+ },
1036
+ {
1037
+ "cell_type": "markdown",
1038
+ "id": "80",
1039
+ "metadata": {},
965
1040
  "source": [
966
1041
  "```{eval-rst}\n",
967
1042
  ".. literalinclude:: scripts/curate_mudata.py\n",
@@ -973,7 +1048,7 @@
973
1048
  {
974
1049
  "cell_type": "code",
975
1050
  "execution_count": null,
976
- "id": "75",
1051
+ "id": "81",
977
1052
  "metadata": {
978
1053
  "tags": [
979
1054
  "hide-output"
@@ -986,7 +1061,7 @@
986
1061
  },
987
1062
  {
988
1063
  "cell_type": "markdown",
989
- "id": "76",
1064
+ "id": "82",
990
1065
  "metadata": {},
991
1066
  "source": [
992
1067
  "## SpatialData"
@@ -994,7 +1069,7 @@
994
1069
  },
995
1070
  {
996
1071
  "cell_type": "markdown",
997
- "id": "77",
1072
+ "id": "83",
998
1073
  "metadata": {},
999
1074
  "source": [
1000
1075
  "```{eval-rst}\n",
@@ -1007,7 +1082,7 @@
1007
1082
  {
1008
1083
  "cell_type": "code",
1009
1084
  "execution_count": null,
1010
- "id": "78",
1085
+ "id": "84",
1011
1086
  "metadata": {
1012
1087
  "tags": [
1013
1088
  "hide-output"
@@ -1020,7 +1095,7 @@
1020
1095
  },
1021
1096
  {
1022
1097
  "cell_type": "markdown",
1023
- "id": "79",
1098
+ "id": "85",
1024
1099
  "metadata": {},
1025
1100
  "source": [
1026
1101
  "```{eval-rst}\n",
@@ -1033,7 +1108,7 @@
1033
1108
  {
1034
1109
  "cell_type": "code",
1035
1110
  "execution_count": null,
1036
- "id": "80",
1111
+ "id": "86",
1037
1112
  "metadata": {
1038
1113
  "tags": [
1039
1114
  "hide-output"
@@ -1046,7 +1121,7 @@
1046
1121
  },
1047
1122
  {
1048
1123
  "cell_type": "markdown",
1049
- "id": "81",
1124
+ "id": "87",
1050
1125
  "metadata": {},
1051
1126
  "source": [
1052
1127
  "## TiledbsomaExperiment"
@@ -1054,7 +1129,7 @@
1054
1129
  },
1055
1130
  {
1056
1131
  "cell_type": "markdown",
1057
- "id": "82",
1132
+ "id": "88",
1058
1133
  "metadata": {},
1059
1134
  "source": [
1060
1135
  "```{eval-rst}\n",
@@ -1067,7 +1142,7 @@
1067
1142
  {
1068
1143
  "cell_type": "code",
1069
1144
  "execution_count": null,
1070
- "id": "83",
1145
+ "id": "89",
1071
1146
  "metadata": {
1072
1147
  "tags": [
1073
1148
  "hide-output"
@@ -1080,7 +1155,7 @@
1080
1155
  },
1081
1156
  {
1082
1157
  "cell_type": "markdown",
1083
- "id": "84",
1158
+ "id": "90",
1084
1159
  "metadata": {},
1085
1160
  "source": [
1086
1161
  "## Other data structures"
@@ -1088,7 +1163,7 @@
1088
1163
  },
1089
1164
  {
1090
1165
  "cell_type": "markdown",
1091
- "id": "85",
1166
+ "id": "91",
1092
1167
  "metadata": {},
1093
1168
  "source": [
1094
1169
  "If you have other data structures, read: {doc}`/faq/curate-any`."
@@ -1097,7 +1172,7 @@
1097
1172
  {
1098
1173
  "cell_type": "code",
1099
1174
  "execution_count": null,
1100
- "id": "86",
1175
+ "id": "92",
1101
1176
  "metadata": {
1102
1177
  "tags": [
1103
1178
  "hide-cell"
@@ -23,7 +23,7 @@
23
23
  "metadata": {},
24
24
  "outputs": [],
25
25
  "source": [
26
- "# !pip install 'lamindb[jupyter,aws]'\n",
26
+ "# pip install lamindb\n",
27
27
  "from laminci.db import setup_local_test_postgres\n",
28
28
  "\n",
29
29
  "pgurl = setup_local_test_postgres()"
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "outputs": [],
45
45
  "source": [
46
- "# pip install 'lamindb[jupyter]'\n",
46
+ "# pip install lamindb\n",
47
47
  "!lamin init --storage ./test-idempotency"
48
48
  ]
49
49
  },
@@ -47,10 +47,10 @@
47
47
  },
48
48
  "outputs": [],
49
49
  "source": [
50
- "# pip install 'lamindb[jupyter]'\n",
50
+ "# pip install lamindb\n",
51
51
  "import lamindb as ln\n",
52
52
  "\n",
53
- "ln.track(\"l9lFf83aPwRc0000\")"
53
+ "ln.track(\"l9lFf83aPwRc\")"
54
54
  ]
55
55
  },
56
56
  {
@@ -30,7 +30,7 @@
30
30
  "metadata": {},
31
31
  "outputs": [],
32
32
  "source": [
33
- "# pip install 'lamindb[jupyter]'\n",
33
+ "# pip install lamindb\n",
34
34
  "import lamindb as ln\n",
35
35
  "import pytest"
36
36
  ]
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "outputs": [],
28
28
  "source": [
29
- "# !pip install 'lamindb[jupyter]'\n",
29
+ "# pip install lamindb\n",
30
30
  "!lamin init --storage test-run-inputs"
31
31
  ]
32
32
  },
@@ -7,15 +7,12 @@ pip install lamindb
7
7
  You can configure the installation using `extras`, e.g.,
8
8
 
9
9
  ```shell
10
- pip install 'lamindb[jupyter,bionty]'
10
+ pip install 'lamindb[gcp]'
11
11
  ```
12
12
 
13
13
  Supported `extras` are:
14
14
 
15
15
  ```yaml
16
- # commonly used
17
- jupyter # parse Jupyter notebook metadata
18
- bionty # basic biological ontologies
19
16
  # cloud backends (AWS is assumed)
20
17
  gcp # Google Cloud (gcfs, etc.)
21
18
  # biological artifact formats
@@ -0,0 +1,9 @@
1
+ import lamindb as ln
2
+
3
+ ln.core.datasets.mini_immuno.define_features_labels()
4
+ adata = ln.core.datasets.mini_immuno.get_dataset1(otype="AnnData")
5
+ schema = ln.Schema.get(name="Study metadata schema")
6
+ artifact = ln.Artifact.from_anndata(
7
+ adata, schema=schema, key="examples/mini_immuno_uns.h5ad"
8
+ )
9
+ artifact.describe()
@@ -1,20 +1,13 @@
1
1
  import lamindb as ln
2
2
 
3
- df = ln.core.datasets.mini_immuno.get_dataset1(otype="DataFrame")
4
- df.attrs = {"temperature": 21.6, "experiment_id": "EXP001"}
3
+ from .define_schema_df_metadata import study_metadata_schema
5
4
 
6
- study_metadata_schema = ln.Schema(
7
- features=[
8
- ln.Feature(name="temperature", dtype=float).save(),
9
- ln.Feature(name="experiment_id", dtype=str).save(),
10
- ],
11
- ).save()
5
+ df = ln.examples.datasets.mini_immuno.get_dataset1(otype="DataFrame")
12
6
  schema = ln.Schema(
13
7
  features=[ln.Feature(name="perturbation", dtype="str").save()],
14
8
  slots={"attrs": study_metadata_schema},
15
9
  otype="DataFrame",
16
10
  ).save()
17
-
18
11
  curator = ln.curators.DataFrameCurator(df, schema=schema)
19
12
  curator.validate()
20
13
  artifact = curator.save_artifact(key="examples/df_with_attrs.parquet")
@@ -1,6 +1,17 @@
1
1
  import lamindb as ln
2
2
  import bionty as bt
3
3
 
4
+ from docs.scripts.define_schema_df_metadata import study_metadata_schema
5
+
6
+ # define labels
7
+ perturbation = ln.ULabel(name="Perturbation", is_type=True).save()
8
+ ln.ULabel(name="Perturbed", type=perturbation).save()
9
+ ln.ULabel(name="NT", type=perturbation).save()
10
+
11
+ replicate = ln.ULabel(name="Replicate", is_type=True).save()
12
+ ln.ULabel(name="rep1", type=replicate).save()
13
+ ln.ULabel(name="rep2", type=replicate).save()
14
+ ln.ULabel(name="rep3", type=replicate).save()
4
15
 
5
16
  # define the global obs schema
6
17
  obs_schema = ln.Schema(
@@ -25,7 +36,7 @@ obs_schema_rna = ln.Schema(
25
36
  obs_schema_hto = ln.Schema(
26
37
  name="mudata_papalexi21_subset_hto_obs_schema",
27
38
  features=[
28
- ln.Feature(name="nCount_HTO", dtype=int).save(),
39
+ ln.Feature(name="nCount_HTO", dtype=float).save(),
29
40
  ln.Feature(name="nFeature_HTO", dtype=int).save(),
30
41
  ln.Feature(name="technique", dtype=bt.ExperimentalFactor).save(),
31
42
  ],
@@ -47,11 +58,12 @@ mudata_schema = ln.Schema(
47
58
  "rna:obs": obs_schema_rna,
48
59
  "hto:obs": obs_schema_hto,
49
60
  "rna:var": var_schema_rna,
61
+ "uns:study_metadata": study_metadata_schema,
50
62
  },
51
63
  ).save()
52
64
 
53
65
  # curate a MuData
54
- mdata = ln.core.datasets.mudata_papalexi21_subset()
66
+ mdata = ln.core.datasets.mudata_papalexi21_subset(with_uns=True)
55
67
  bt.settings.organism = "human" # set the organism to map gene symbols
56
68
  curator = ln.curators.MuDataCurator(mdata, mudata_schema)
57
69
  artifact = curator.save_artifact(key="examples/mudata_papalexi21_subset.h5mu")
@@ -0,0 +1,10 @@
1
+ import lamindb as ln
2
+
3
+ from define_schema_df_metadata import study_metadata_schema
4
+
5
+ anndata_uns_schema = ln.Schema(
6
+ otype="AnnData",
7
+ slots={
8
+ "uns:study_metadata": study_metadata_schema,
9
+ },
10
+ ).save()
@@ -0,0 +1,9 @@
1
+ import lamindb as ln
2
+
3
+ study_metadata_schema = ln.Schema(
4
+ name="Study metadata schema",
5
+ features=[
6
+ ln.Feature(name="temperature", dtype=float).save(),
7
+ ln.Feature(name="experiment", dtype=str).save(),
8
+ ],
9
+ ).save()
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "outputs": [],
21
21
  "source": [
22
- "# pip install 'lamindb[jupyter]'\n",
22
+ "# pip install lamindb\n",
23
23
  "!lamin init --storage ./test-track"
24
24
  ]
25
25
  },
@@ -883,7 +883,7 @@
883
883
  ],
884
884
  "metadata": {
885
885
  "kernelspec": {
886
- "display_name": "lamindb",
886
+ "display_name": "py312",
887
887
  "language": "python",
888
888
  "name": "python3"
889
889
  },
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "outputs": [],
26
26
  "source": [
27
- "# pip install 'lamindb[jupyter,bionty]'\n",
27
+ "# pip install lamindb\n",
28
28
  "!lamin init --storage ./test-transfer --modules bionty"
29
29
  ]
30
30
  },
@@ -114,7 +114,7 @@ Backwards compatibility.
114
114
 
115
115
  # ruff: noqa: I001
116
116
  # denote a release candidate for 0.1.0 with 0.1rc1, 0.1a1, 0.1b1, etc.
117
- __version__ = "1.11a1"
117
+ __version__ = "1.11.1"
118
118
 
119
119
  import warnings as _warnings
120
120
 
@@ -173,7 +173,7 @@ def notebook_to_script( # type: ignore
173
173
  if script_path is None:
174
174
  return py_content
175
175
  else:
176
- script_path.write_text(py_content)
176
+ script_path.write_text(py_content, encoding="utf-8")
177
177
 
178
178
 
179
179
  def clean_r_notebook_html(file_path: Path) -> tuple[str | None, Path]:
@@ -202,7 +202,7 @@ def clean_r_notebook_html(file_path: Path) -> tuple[str | None, Path]:
202
202
  ) # RStudio might insert a newline
203
203
  cleaned_content = cleaned_content.replace(orig_error_message, "")
204
204
  cleaned_path = file_path.parent / (f"{file_path.stem}.cleaned{file_path.suffix}")
205
- cleaned_path.write_text(cleaned_content)
205
+ cleaned_path.write_text(cleaned_content, encoding="utf-8")
206
206
  return title_text, cleaned_path
207
207
 
208
208
 
@@ -474,7 +474,7 @@ def save_context_core(
474
474
  # this can happen in interactively executed notebooks with a pro-active version bump in case it turns out that the user didn't make a change to the notebook
475
475
  run.transform = transform
476
476
  run.save()
477
- ln.Transform.get(transform_id_prior_to_save).delete()
477
+ ln.Transform.get(transform_id_prior_to_save).delete(permanent=True)
478
478
 
479
479
  # finalize
480
480
  if finished_at and not from_cli and run is not None:
@@ -600,9 +600,11 @@ class Context:
600
600
  if pypackages is None:
601
601
  pypackages = True
602
602
  description = None
603
+ if path.suffix == ".ipynb" and path.stem.startswith("Untitled"):
604
+ raise RuntimeError(
605
+ "Your notebook is untitled, please rename it before tracking"
606
+ )
603
607
  path_str = path.as_posix()
604
- if path_str.endswith("Untitled.ipynb"):
605
- raise RuntimeError("Please rename your notebook before tracking it")
606
608
  if path_str.startswith("/fileId="):
607
609
  logger.warning("tracking on Google Colab is experimental")
608
610
  path_str = get_notebook_key_colab()
@@ -411,7 +411,7 @@ class ComponentCurator(Curator):
411
411
  """Curator for `DataFrame`.
412
412
 
413
413
  Provides all key functionality to validate Pandas DataFrames.
414
- This class is not user facing unlike :class:`~lamindb.DataFrameCurator` which extends this
414
+ This class is not user facing unlike :class:`~lamindb.curators.DataFrameCurator` which extends this
415
415
  class with functionality to validate the `attrs` slot.
416
416
 
417
417
  Args:
@@ -671,7 +671,7 @@ class DataFrameCurator(SlotsCurator):
671
671
 
672
672
  Examples:
673
673
 
674
- For a simple example using a flexible schema, see :meth:`~lamindb.Artifact.from_df`.
674
+ For a simple example using a flexible schema, see :meth:`~lamindb.Artifact.from_dataframe`.
675
675
 
676
676
  Here is an example that enforces a minimal set of columns in the dataframe.
677
677
 
@@ -688,7 +688,7 @@ class DataFrameCurator(SlotsCurator):
688
688
  .. literalinclude:: scripts/define_mini_immuno_features_labels.py
689
689
  :language: python
690
690
 
691
- It is also possible to curate the `attrs` slot.
691
+ It is also possible to curate the `attrs` slot.
692
692
 
693
693
  .. literalinclude:: scripts/curate_dataframe_attrs.py
694
694
  :language: python
@@ -885,12 +885,20 @@ class AnnDataCurator(SlotsCurator):
885
885
  dataset: The AnnData-like object to validate & annotate.
886
886
  schema: A :class:`~lamindb.Schema` object that defines the validation constraints.
887
887
 
888
- Example:
888
+ Examples:
889
+
890
+ Curate Ensembl gene IDs and valid features in obs:
889
891
 
890
892
  .. literalinclude:: scripts/curate_anndata_flexible.py
891
893
  :language: python
892
894
  :caption: curate_anndata_flexible.py
893
895
 
896
+ Curate `uns` dictionary:
897
+
898
+ .. literalinclude:: scripts/curate_anndata_uns.py
899
+ :language: python
900
+ :caption: curate_anndata_uns.py
901
+
894
902
  See Also:
895
903
  :meth:`~lamindb.Artifact.from_anndata`.
896
904
  """
@@ -903,7 +911,7 @@ class AnnDataCurator(SlotsCurator):
903
911
  super().__init__(dataset=dataset, schema=schema)
904
912
  if not data_is_scversedatastructure(self._dataset, "AnnData"):
905
913
  raise InvalidArgument("dataset must be AnnData-like.")
906
- if schema.otype != "AnnData":
914
+ if schema.otype and schema.otype != "AnnData":
907
915
  raise InvalidArgument("Schema otype must be 'AnnData'.")
908
916
 
909
917
  for slot, slot_schema in schema.slots.items():
@@ -60,6 +60,12 @@ class DoesNotExist(Exception):
60
60
  pass
61
61
 
62
62
 
63
+ class MultipleResultsFound(Exception):
64
+ """Multiple records found."""
65
+
66
+ pass
67
+
68
+
63
69
  class InconsistentKey(Exception):
64
70
  """Inconsistent transform or artifact `key`."""
65
71
 
@@ -28,7 +28,7 @@ FieldType = Literal["ontology_id", "name"]
28
28
 
29
29
  @deprecated(new_name="save_cellxgene_defaults")
30
30
  def save_cxg_defaults() -> None:
31
- return save_cxg_defaults()
31
+ return save_cellxgene_defaults()
32
32
 
33
33
 
34
34
  def save_cellxgene_defaults() -> None: