lamindb 0.65.0__tar.gz → 0.65.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 (330) hide show
  1. {lamindb-0.65.0 → lamindb-0.65.1}/PKG-INFO +2 -2
  2. {lamindb-0.65.0 → lamindb-0.65.1}/docs/changelog.md +13 -6
  3. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/__init__.py +1 -1
  4. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_collection.py +11 -1
  5. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_parents.py +10 -7
  6. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_registry.py +5 -1
  7. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/__init__.py +9 -1
  8. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/_data.py +5 -6
  9. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/_label_manager.py +2 -1
  10. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/_mapped_collection.py +101 -29
  11. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/_run_context.py +7 -5
  12. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/_track_environment.py +7 -3
  13. {lamindb-0.65.0 → lamindb-0.65.1}/pyproject.toml +1 -1
  14. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/lamin_cli/_transform.py +30 -15
  15. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/.github/workflows/build.yml +21 -39
  16. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/.pre-commit-config.yaml +4 -0
  17. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/changelog.md +1 -0
  18. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/__init__.py +1 -1
  19. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_migrate.py +5 -2
  20. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_settings.py +2 -1
  21. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_crud.py +11 -8
  22. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_load.py +1 -1
  23. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/pyproject.toml +1 -1
  24. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/test_storage_access.py +9 -7
  25. lamindb-0.65.1/sub/lnschema-bionty/.github/workflows/build.yml +51 -0
  26. lamindb-0.65.1/sub/lnschema-bionty/.github/workflows/latest-changes.yml +25 -0
  27. lamindb-0.65.1/sub/lnschema-bionty/.gitignore +119 -0
  28. lamindb-0.65.1/sub/lnschema-bionty/.pre-commit-config.yaml +65 -0
  29. lamindb-0.65.1/sub/lnschema-bionty/README.md +5 -0
  30. lamindb-0.65.1/sub/lnschema-bionty/docs/changelog.md +181 -0
  31. lamindb-0.65.1/sub/lnschema-bionty/docs/index.md +11 -0
  32. lamindb-0.65.1/sub/lnschema-bionty/docs/reference.md +5 -0
  33. lamindb-0.65.1/sub/lnschema-bionty/lamin-project.yaml +5 -0
  34. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/__init__.py +119 -0
  35. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/_bionty.py +121 -0
  36. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/dev/__init__.py +14 -0
  37. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/dev/_bionty.py +40 -0
  38. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/dev/_settings.py +62 -0
  39. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/ids.py +71 -0
  40. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0001_initial.py +766 -0
  41. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0001_initial_squashed_0016.py +549 -0
  42. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0002_rename_gene_type_gene_biotype_and_more.py +46 -0
  43. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0003_alter_biontysource_entity_alter_biontysource_source_and_more.py +85 -0
  44. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0004_alter_cellline_bionty_source_and_more.py +151 -0
  45. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0005_rename_short_name_cellline_abbr_and_more.py +137 -0
  46. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0006_alter_biontysource_options_alter_cellline_options_and_more.py +60 -0
  47. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0007_rename_readout_experimental_factor.py +67 -0
  48. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0008_remove_gene_hgnc_id_remove_gene_mgi_id_and_more.py +82 -0
  49. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0009_alter_gene_ensembl_gene_id.py +17 -0
  50. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0010_alter_species_name.py +17 -0
  51. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0011_cellline_datasets_cellmarker_datasets_and_more.py +93 -0
  52. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0012_gene_stable_id.py +17 -0
  53. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0013_alter_cellmarker_species_alter_gene_species_and_more.py +43 -0
  54. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0014_ethnicity_developmentalstage.py +163 -0
  55. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0015_migrate_to_integer_pks.py +123 -0
  56. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0016_export_legacy_data.py +53 -0
  57. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0017_import_legacy_data.py +64 -0
  58. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0018_organism_rename_species_biontysource_organism_and_more.py +132 -0
  59. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0019_rename_taxon_id_organism_ontology_id_and_more.py +77 -0
  60. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0020_alter_organism_bionty_source.py +23 -0
  61. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0021_rename_files_cellline_artifacts_and_more.py +78 -0
  62. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/migrations/0022_rename_datasets_cellline_collections_and_more.py +77 -0
  63. lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty/models.py +1266 -0
  64. lamindb-0.65.1/sub/lnschema-bionty/noxfile.py +20 -0
  65. lamindb-0.65.1/sub/lnschema-bionty/pyproject.toml +46 -0
  66. lamindb-0.65.1/sub/lnschema-bionty/tests/test_integrity.py +13 -0
  67. lamindb-0.65.1/sub/lnschema-core/.github/workflows/latest-changes.jinja2 +2 -0
  68. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/CHANGELOG.md +1 -0
  69. lamindb-0.65.1/sub/lnschema-core/LICENSE +201 -0
  70. lamindb-0.65.1/sub/lnschema-core/lnschema_core/migrations/__init__.py +0 -0
  71. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/models.py +4 -0
  72. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_collection.py +25 -1
  73. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_feature_manager.py +1 -1
  74. {lamindb-0.65.0 → lamindb-0.65.1}/.github/workflows/build.yml +0 -0
  75. {lamindb-0.65.0 → lamindb-0.65.1}/.github/workflows/latest-changes.jinja2 +0 -0
  76. {lamindb-0.65.0 → lamindb-0.65.1}/.github/workflows/latest-changes.yml +0 -0
  77. {lamindb-0.65.0 → lamindb-0.65.1}/.gitignore +0 -0
  78. {lamindb-0.65.0 → lamindb-0.65.1}/.gitmodules +0 -0
  79. {lamindb-0.65.0 → lamindb-0.65.1}/.pre-commit-config.yaml +0 -0
  80. {lamindb-0.65.0 → lamindb-0.65.1}/LICENSE +0 -0
  81. {lamindb-0.65.0 → lamindb-0.65.1}/README.md +0 -0
  82. {lamindb-0.65.0 → lamindb-0.65.1}/docs/annotate.ipynb +0 -0
  83. {lamindb-0.65.0 → lamindb-0.65.1}/docs/bio-registries.ipynb +0 -0
  84. {lamindb-0.65.0 → lamindb-0.65.1}/docs/bionty.md +0 -0
  85. {lamindb-0.65.0 → lamindb-0.65.1}/docs/data.ipynb +0 -0
  86. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq/acid.ipynb +0 -0
  87. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq/delete.ipynb +0 -0
  88. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq/idempotency.ipynb +0 -0
  89. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq/import-schema.ipynb +0 -0
  90. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq/key.ipynb +0 -0
  91. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq/reference-field.ipynb +0 -0
  92. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq/setup.ipynb +0 -0
  93. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq/test_notebooks.py +0 -0
  94. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq/track-run-inputs.ipynb +0 -0
  95. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq/validator.ipynb +0 -0
  96. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq/visibility.ipynb +0 -0
  97. {lamindb-0.65.0 → lamindb-0.65.1}/docs/faq.md +0 -0
  98. {lamindb-0.65.0 → lamindb-0.65.1}/docs/features-lamindb.md +0 -0
  99. {lamindb-0.65.0 → lamindb-0.65.1}/docs/features-laminhub.md +0 -0
  100. {lamindb-0.65.0 → lamindb-0.65.1}/docs/guide.md +0 -0
  101. {lamindb-0.65.0 → lamindb-0.65.1}/docs/index.md +0 -0
  102. {lamindb-0.65.0 → lamindb-0.65.1}/docs/installation.md +0 -0
  103. {lamindb-0.65.0 → lamindb-0.65.1}/docs/introduction.ipynb +0 -0
  104. {lamindb-0.65.0 → lamindb-0.65.1}/docs/lamin-utils.md +0 -0
  105. {lamindb-0.65.0 → lamindb-0.65.1}/docs/lamindb.md +0 -0
  106. {lamindb-0.65.0 → lamindb-0.65.1}/docs/lnschema-bionty.md +0 -0
  107. {lamindb-0.65.0 → lamindb-0.65.1}/docs/meta.ipynb +0 -0
  108. {lamindb-0.65.0 → lamindb-0.65.1}/docs/nbproject.md +0 -0
  109. {lamindb-0.65.0 → lamindb-0.65.1}/docs/query-search.md +0 -0
  110. {lamindb-0.65.0 → lamindb-0.65.1}/docs/readfcs.md +0 -0
  111. {lamindb-0.65.0 → lamindb-0.65.1}/docs/reference.md +0 -0
  112. {lamindb-0.65.0 → lamindb-0.65.1}/docs/schemas.ipynb +0 -0
  113. {lamindb-0.65.0 → lamindb-0.65.1}/docs/setup.ipynb +0 -0
  114. {lamindb-0.65.0 → lamindb-0.65.1}/docs/signup-login.md +0 -0
  115. {lamindb-0.65.0 → lamindb-0.65.1}/docs/storage/add-replace-stage.ipynb +0 -0
  116. {lamindb-0.65.0 → lamindb-0.65.1}/docs/storage/anndata-accessor.ipynb +0 -0
  117. {lamindb-0.65.0 → lamindb-0.65.1}/docs/storage/test-files/iris.csv +0 -0
  118. {lamindb-0.65.0 → lamindb-0.65.1}/docs/storage/test-files/iris.data +0 -0
  119. {lamindb-0.65.0 → lamindb-0.65.1}/docs/storage/test-files/new_iris.csv +0 -0
  120. {lamindb-0.65.0 → lamindb-0.65.1}/docs/storage/test_notebooks.py +0 -0
  121. {lamindb-0.65.0 → lamindb-0.65.1}/docs/storage/upload.ipynb +0 -0
  122. {lamindb-0.65.0 → lamindb-0.65.1}/docs/storage.md +0 -0
  123. {lamindb-0.65.0 → lamindb-0.65.1}/docs/test_notebooks.py +0 -0
  124. {lamindb-0.65.0 → lamindb-0.65.1}/docs/track.ipynb +0 -0
  125. {lamindb-0.65.0 → lamindb-0.65.1}/docs/transfer.ipynb +0 -0
  126. {lamindb-0.65.0 → lamindb-0.65.1}/docs/tutorial.ipynb +0 -0
  127. {lamindb-0.65.0 → lamindb-0.65.1}/docs/tutorial2.ipynb +0 -0
  128. {lamindb-0.65.0 → lamindb-0.65.1}/docs/validate.ipynb +0 -0
  129. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_artifact.py +0 -0
  130. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_delete.py +0 -0
  131. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_feature.py +0 -0
  132. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_feature_set.py +0 -0
  133. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_filter.py +0 -0
  134. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_from_values.py +0 -0
  135. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_query_manager.py +0 -0
  136. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_query_set.py +0 -0
  137. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_run.py +0 -0
  138. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_save.py +0 -0
  139. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_storage.py +0 -0
  140. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_transform.py +0 -0
  141. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_ulabel.py +0 -0
  142. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_utils.py +0 -0
  143. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_validate.py +0 -0
  144. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/_view.py +0 -0
  145. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/_feature_manager.py +0 -0
  146. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/_settings.py +0 -0
  147. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/_view_tree.py +0 -0
  148. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/datasets/__init__.py +0 -0
  149. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/datasets/_core.py +0 -0
  150. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/datasets/_fake.py +0 -0
  151. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/exceptions.py +0 -0
  152. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/fields.py +0 -0
  153. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/hashing.py +0 -0
  154. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/storage/__init__.py +0 -0
  155. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/storage/_anndata_sizes.py +0 -0
  156. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/storage/_backed_access.py +0 -0
  157. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/storage/_zarr.py +0 -0
  158. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/storage/file.py +0 -0
  159. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/storage/object.py +0 -0
  160. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/types.py +0 -0
  161. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/dev/versioning.py +0 -0
  162. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/setup/__init__.py +0 -0
  163. {lamindb-0.65.0 → lamindb-0.65.1}/lamindb/setup/dev/__init__.py +0 -0
  164. {lamindb-0.65.0 → lamindb-0.65.1}/noxfile.py +0 -0
  165. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/.gitignore +0 -0
  166. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/.pre-commit-config.yaml +0 -0
  167. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/README.md +0 -0
  168. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/lamin_cli/__init__.py +0 -0
  169. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/lamin_cli/__main__.py +0 -0
  170. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/pyproject.toml +0 -0
  171. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/tests/conftest.py +0 -0
  172. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/tests/notebooks/no-title.ipynb +0 -0
  173. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/tests/notebooks/not-initialized.ipynb +0 -0
  174. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-consecutive.ipynb +0 -0
  175. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-non-consecutive.ipynb +0 -0
  176. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/tests/scripts/initialized.py +0 -0
  177. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/tests/scripts/not-initialized.py +0 -0
  178. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/tests/test_cli.py +0 -0
  179. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/tests/test_migrate.py +0 -0
  180. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/tests/test_notebooks.py +0 -0
  181. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamin-cli/tests/test_scripts.py +0 -0
  182. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/.github/workflows/latest-changes.jinja2 +0 -0
  183. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/.github/workflows/latest-changes.yml +0 -0
  184. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/.gitignore +0 -0
  185. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/LICENSE +0 -0
  186. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/README.md +0 -0
  187. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/index.md +0 -0
  188. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/notebooks.md +0 -0
  189. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-only/test-cache-management.ipynb +0 -0
  190. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-only/test-empty-init.ipynb +0 -0
  191. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-only/test-import-schema.ipynb +0 -0
  192. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-only/test-insufficient-user-info.ipynb +0 -0
  193. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-only/test-invalid-schema.ipynb +0 -0
  194. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-only/test-load-lock.ipynb +0 -0
  195. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-only/test-sqlite-sync.ipynb +0 -0
  196. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-only/test_notebooks2.py +0 -0
  197. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-staging/01-init-instance.ipynb +0 -0
  198. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-staging/02-load-instance.ipynb +0 -0
  199. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-staging/03-set-storage.ipynb +0 -0
  200. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-staging/04-test-bionty.ipynb +0 -0
  201. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-staging/test-multi-session.ipynb +0 -0
  202. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/prod-staging/test_notebooks.py +0 -0
  203. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/docs/reference.md +0 -0
  204. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_cache.py +0 -0
  205. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_check.py +0 -0
  206. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_check_instance_setup.py +0 -0
  207. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_close.py +0 -0
  208. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_delete.py +0 -0
  209. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_django.py +0 -0
  210. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_docstrings.py +0 -0
  211. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_export.py +0 -0
  212. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_info.py +0 -0
  213. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_init_instance.py +0 -0
  214. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_init_vault.py +0 -0
  215. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_load_instance.py +0 -0
  216. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_register_instance.py +0 -0
  217. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_schema.py +0 -0
  218. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_set.py +0 -0
  219. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_setup_user.py +0 -0
  220. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/_silence_loggers.py +0 -0
  221. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/__init__.py +0 -0
  222. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_deprecated.py +0 -0
  223. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_docs.py +0 -0
  224. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_client.py +0 -0
  225. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_core.py +0 -0
  226. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_utils.py +0 -0
  227. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_instance.py +0 -0
  228. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_save.py +0 -0
  229. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_storage.py +0 -0
  230. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_store.py +0 -0
  231. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_user.py +0 -0
  232. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/_setup_bionty_sources.py +0 -0
  233. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/cloud_sqlite_locker.py +0 -0
  234. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/django.py +0 -0
  235. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/lamindb_setup/dev/upath.py +0 -0
  236. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/noxfile.py +0 -0
  237. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/hub-local/conftest.py +0 -0
  238. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/hub-local/test_all.py +0 -0
  239. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/prod-only/conftest.py +0 -0
  240. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/prod-only/test_django.py +0 -0
  241. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/prod-only/test_switch_and_fallback_env.py +0 -0
  242. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/prod-staging/test_delete_instance.py +0 -0
  243. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/prod-staging/test_init_instance.py +0 -0
  244. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/prod-staging/test_load_instance.py +0 -0
  245. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/prod-staging/test_login.py +0 -0
  246. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/prod-staging/test_migrate.py +0 -0
  247. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/prod-staging/test_set_storage.py +0 -0
  248. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lamindb-setup/tests/test_vault.py +0 -0
  249. {lamindb-0.65.0/sub/lnschema-core → lamindb-0.65.1/sub/lnschema-bionty}/.github/workflows/latest-changes.jinja2 +0 -0
  250. {lamindb-0.65.0/sub/lnschema-core → lamindb-0.65.1/sub/lnschema-bionty}/LICENSE +0 -0
  251. {lamindb-0.65.0/sub/lnschema-core/lnschema_core → lamindb-0.65.1/sub/lnschema-bionty/lnschema_bionty}/migrations/__init__.py +0 -0
  252. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/.github/workflows/build.yml +0 -0
  253. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/.github/workflows/latest-changes.yml +0 -0
  254. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/.gitignore +0 -0
  255. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/.pre-commit-config.yaml +0 -0
  256. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/README.md +0 -0
  257. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/__init__.py +0 -0
  258. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/ids.py +0 -0
  259. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0001_initial.py +0 -0
  260. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0001_initial_squashed_0023.py +0 -0
  261. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0002_alter_user_name.py +0 -0
  262. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0003_alter_storage_region_alter_transform_short_name.py +0 -0
  263. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0004_rename_folder_tag_alter_project_folders.py +0 -0
  264. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0005_alter_run_inputs_delete_runinput.py +0 -0
  265. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0006_feature_dataset.py +0 -0
  266. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0007_feature_synonyms_featureset_field_and_more.py +0 -0
  267. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0008_file_hash_type_transform_parents.py +0 -0
  268. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0009_remove_featureset_files_feature_unit_and_more.py +0 -0
  269. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0010_dataset_categories_file_categories.py +0 -0
  270. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0011_label_remove_tag_created_by_remove_tag_parents_and_more.py +0 -0
  271. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0012_remove_label_ref_id_remove_label_ref_orm_and_more.py +0 -0
  272. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0013_remove_feature_labels_orm_and_more.py +0 -0
  273. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0014_rename_ref_field_featureset_registry.py +0 -0
  274. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0015_file_initial_version_file_version.py +0 -0
  275. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0016_dataset_input_of_dataset_run_dataset_transform_and_more.py +0 -0
  276. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0017_dataset_initial_version_dataset_version.py +0 -0
  277. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0018_rename_datasetlabel_datasetulabel_and_more.py +0 -0
  278. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0019_dataset_reference_dataset_reference_type_and_more.py +0 -0
  279. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0020_run_report_transform_latest_report_and_more.py +0 -0
  280. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0021_dataset_storage_alter_dataset_file.py +0 -0
  281. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0022_migrate_to_integer_pks.py +0 -0
  282. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0023_export_legacy_data.py +0 -0
  283. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0024_import_legacy_data.py +0 -0
  284. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0025_remove_user_email.py +0 -0
  285. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0026_dataset_visibility_file_visibility.py +0 -0
  286. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0027_file_key_is_virtual.py +0 -0
  287. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0028_alter_dataset_visibility_alter_file_visibility.py +0 -0
  288. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0029_remove_feature_modality_remove_featureset_modality_and_more.py +0 -0
  289. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0030_alter_dataset_visibility_alter_file_visibility.py +0 -0
  290. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0031_rename_file_to_artifact.py +0 -0
  291. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0032_remove_dataset_storage.py +0 -0
  292. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0033_alter_artifact_unique_together_artifact_n_objects_and_more.py +0 -0
  293. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0034_run_environment.py +0 -0
  294. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0035_remove_artifact_initial_version_and_more.py +0 -0
  295. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0036_storage_description.py +0 -0
  296. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0037_rename_dataset_to_collection.py +0 -0
  297. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/migrations/0038_alter_collection_artifact_alter_collection_artifacts_and_more.py +0 -0
  298. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/mocks.py +0 -0
  299. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/types.py +0 -0
  300. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/lnschema_core/users.py +0 -0
  301. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/noxfile.py +0 -0
  302. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/pyproject.toml +0 -0
  303. {lamindb-0.65.0 → lamindb-0.65.1}/sub/lnschema-core/tests/test_integrity.py +0 -0
  304. {lamindb-0.65.0 → lamindb-0.65.1}/tests/conftest.py +0 -0
  305. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_artifact.py +0 -0
  306. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_cache.py +0 -0
  307. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_data.py +0 -0
  308. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_db.py +0 -0
  309. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_delete.py +0 -0
  310. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_feature.py +0 -0
  311. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_feature_set.py +0 -0
  312. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_from_values.py +0 -0
  313. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_hashing.py +0 -0
  314. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_label_manager.py +0 -0
  315. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_manager.py +0 -0
  316. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_parents.py +0 -0
  317. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_queryset.py +0 -0
  318. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_registry.py +0 -0
  319. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_run.py +0 -0
  320. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_run_context.py +0 -0
  321. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_save.py +0 -0
  322. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_settings.py +0 -0
  323. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_storage.py +0 -0
  324. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_transfer.py +0 -0
  325. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_transform.py +0 -0
  326. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_ulabel.py +0 -0
  327. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_validate.py +0 -0
  328. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_versioning.py +0 -0
  329. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_view.py +0 -0
  330. {lamindb-0.65.0 → lamindb-0.65.1}/tests/test_visibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamindb
3
- Version: 0.65.0
3
+ Version: 0.65.1
4
4
  Summary: A data framework for biology.
5
5
  Author-email: Lamin Labs <open-source@lamin.ai>
6
6
  Requires-Python: >=3.8
@@ -10,7 +10,7 @@ Classifier: Programming Language :: Python :: 3.9
10
10
  Classifier: Programming Language :: Python :: 3.10
11
11
  Classifier: Programming Language :: Python :: 3.11
12
12
  Requires-Dist: lnschema_core==0.60.0
13
- Requires-Dist: lamindb_setup==0.63.0
13
+ Requires-Dist: lamindb_setup==0.63.1
14
14
  Requires-Dist: lamin_utils==0.13.0
15
15
  Requires-Dist: lamin_cli==0.5.0
16
16
  Requires-Dist: rapidfuzz
@@ -1,20 +1,27 @@
1
1
  # Changelog
2
2
 
3
-
4
3
  ```{eval-rst}
5
4
  .. role:: small
6
5
  ```
7
6
 
8
- ### 0.65
7
+ ## 0.65
9
8
 
10
- ### 0.65.0 {small}`2024-01-01`
9
+ ### 0.65.1 {small}`2024-01-05`
10
+
11
+ - 🩹 Prepare a potential migration of the hub to Django [PR1385](https://github.com/laminlabs/lamindb/pull/1385) [@falexwolf](https://github.com/falexwolf)
12
+ - 🚸 Various improvements [PR1384](https://github.com/laminlabs/lamindb/pull/1384) [@falexwolf](https://github.com/falexwolf)
13
+ - 🩹 Track suffix of requirements.txt [PR1383](https://github.com/laminlabs/lamindb/pull/1383) [@falexwolf](https://github.com/falexwolf)
14
+ - ✨ Add outer join and categories caching to Collection.mapped [PR1380](https://github.com/laminlabs/lamindb/pull/1380) [@Koncopd](https://github.com/Koncopd)
15
+ - ♻️ Except memory error [PR1382](https://github.com/laminlabs/lamindb/pull/1382) [@falexwolf](https://github.com/falexwolf)
16
+
17
+ ### 0.65.0 {small}`2024-01-02`
11
18
 
12
- - 🚸 Speed up transfer and enable transfer parents [PR1371](https://github.com/laminlabs/lamindb/pull/1371) [@sunnyosun](https://github.com/sunnyosun)
13
19
  - 🚚 Rename `Dataset` to `Collection` [PR1377](https://github.com/laminlabs/lamindb/pull/1377) [@falexwolf](https://github.com/falexwolf)
14
- - 🎨 Version based on `stem_uid` instead of `initial_version_id` and replace `__lamindb_uid_prefix__` with `__transform_stem_uid__` [PR1375](https://github.com/laminlabs/lamindb/pull/1375) [PR1373](https://github.com/laminlabs/lamindb/pull/1373) [@falexwolf](https://github.com/falexwolf)
15
- - 🎨 Name `.lndb` files by instance id [PR1372](https://github.com/laminlabs/lamindb/pull/1372) [@falexwolf](https://github.com/falexwolf)
16
20
  - ✨ Track run environment [PR1368](https://github.com/laminlabs/lamindb/pull/1368) [@falexwolf](https://github.com/falexwolf)
17
21
  - ✨ Allow transfer from private instances [PR1370](https://github.com/laminlabs/lamindb/pull/1370) [@falexwolf](https://github.com/falexwolf)
22
+ - 🚸 Speed up transfer and enable transfer parents [PR1371](https://github.com/laminlabs/lamindb/pull/1371) [@sunnyosun](https://github.com/sunnyosun)
23
+ - 🎨 Version based on `stem_uid` instead of `initial_version_id` and replace `__lamindb_uid_prefix__` with `__transform_stem_uid__` [PR1369](https://github.com/laminlabs/lamindb/pull/1369) [PR1375](https://github.com/laminlabs/lamindb/pull/1375) [PR1373](https://github.com/laminlabs/lamindb/pull/1373) [@bpenteado](https://github.com/bpenteado) [@falexwolf](https://github.com/falexwolf)
24
+ - 🎨 Name `.lndb` files by instance id [PR1372](https://github.com/laminlabs/lamindb/pull/1372) [@falexwolf](https://github.com/falexwolf)
18
25
 
19
26
  ## 0.64
20
27
 
@@ -54,7 +54,7 @@ Modules & settings:
54
54
 
55
55
  """
56
56
 
57
- __version__ = "0.65.0" # denote a release candidate for 0.1.0 with 0.1rc1
57
+ __version__ = "0.65.1" # denote a release candidate for 0.1.0 with 0.1rc1
58
58
 
59
59
  import os as _os
60
60
 
@@ -314,7 +314,9 @@ def mapped(
314
314
  label_keys: Optional[Union[str, List[str]]] = None,
315
315
  join_vars: Optional[Literal["auto", "inner"]] = "auto",
316
316
  encode_labels: bool = True,
317
+ cache_categories: bool = True,
317
318
  parallel: bool = False,
319
+ dtype: Optional[str] = None,
318
320
  stream: bool = False,
319
321
  is_run_input: Optional[bool] = None,
320
322
  ) -> "MappedCollection":
@@ -328,7 +330,15 @@ def mapped(
328
330
  path_list.append(artifact.stage())
329
331
  else:
330
332
  path_list.append(artifact.path)
331
- return MappedCollection(path_list, label_keys, join_vars, encode_labels, parallel)
333
+ return MappedCollection(
334
+ path_list,
335
+ label_keys,
336
+ join_vars,
337
+ encode_labels,
338
+ cache_categories,
339
+ parallel,
340
+ dtype,
341
+ )
332
342
 
333
343
 
334
344
  # docstring handled through attach_func_to_class_method
@@ -317,13 +317,13 @@ def _get_all_parent_runs(data: Union[Artifact, Collection]) -> List:
317
317
  inputs_run = (
318
318
  r.__getattribute__(f"input_{name}s").all().filter(visibility=1).list()
319
319
  )
320
- if name == "file":
320
+ if name == "artifact":
321
321
  inputs_run += r.input_collections.all().filter(visibility=1).list()
322
322
  run_inputs_outputs += [(inputs_run, r)]
323
323
  outputs_run = (
324
324
  r.__getattribute__(f"output_{name}s").all().filter(visibility=1).list()
325
325
  )
326
- if name == "file":
326
+ if name == "artifact":
327
327
  outputs_run += r.output_collections.all().filter(visibility=1).list()
328
328
  run_inputs_outputs += [(r, outputs_run)]
329
329
  inputs += inputs_run
@@ -337,8 +337,11 @@ def _get_all_child_runs(data: Union[Artifact, Collection]) -> List:
337
337
  all_runs: Set[Run] = set()
338
338
  run_inputs_outputs = []
339
339
 
340
- runs = {f.run for f in data.run.__getattribute__(f"output_{name}s").all()}
341
- if name == "file":
340
+ if data.run is not None:
341
+ runs = {f.run for f in data.run.__getattribute__(f"output_{name}s").all()}
342
+ else:
343
+ runs = set()
344
+ if name == "artifact" and data.run is not None:
342
345
  runs.update(
343
346
  {
344
347
  f.run
@@ -352,13 +355,13 @@ def _get_all_child_runs(data: Union[Artifact, Collection]) -> List:
352
355
  inputs_run = (
353
356
  r.__getattribute__(f"input_{name}s").all().filter(visibility=1).list()
354
357
  )
355
- if name == "file":
358
+ if name == "artifact":
356
359
  inputs_run += r.input_collections.all().filter(visibility=1).list()
357
360
  run_inputs_outputs += [(inputs_run, r)]
358
361
  outputs_run = (
359
362
  r.__getattribute__(f"output_{name}s").all().filter(visibility=1).list()
360
363
  )
361
- if name == "file":
364
+ if name == "artifact":
362
365
  outputs_run += r.output_collections.all().filter(visibility=1).list()
363
366
  run_inputs_outputs += [(r, outputs_run)]
364
367
  child_runs.update(
@@ -366,7 +369,7 @@ def _get_all_child_runs(data: Union[Artifact, Collection]) -> List:
366
369
  **{f"input_{name}s__id__in": [i.id for i in outputs_run]}
367
370
  ).list()
368
371
  )
369
- if name == "file":
372
+ if name == "artifact":
370
373
  child_runs.update(
371
374
  Run.filter(
372
375
  input_collections__id__in=[i.id for i in outputs_run]
@@ -469,7 +469,11 @@ def save(self, *args, **kwargs) -> None:
469
469
  if result is not None:
470
470
  init_self_from_db(self, result)
471
471
  else:
472
- super(Registry, self).save(*args, **kwargs)
472
+ # here, we can't use the parents argument
473
+ save_kwargs = kwargs.copy()
474
+ if "parents" in save_kwargs:
475
+ save_kwargs.pop("parents")
476
+ super(Registry, self).save(*args, **save_kwargs)
473
477
  if db is not None and db != "default":
474
478
  if hasattr(self, "labels"):
475
479
  from copy import copy
@@ -24,6 +24,7 @@ Functionality of data registries:
24
24
  FeatureManager
25
25
  LabelManager
26
26
  IsTree
27
+ IsVersioned
27
28
 
28
29
  Functionality of metadata registries:
29
30
 
@@ -51,7 +52,14 @@ Auxiliary tools:
51
52
  """
52
53
 
53
54
  from lamin_utils._inspect import InspectResult
54
- from lnschema_core.models import CanValidate, Data, HasParents, IsTree, Registry
55
+ from lnschema_core.models import (
56
+ CanValidate,
57
+ Data,
58
+ HasParents,
59
+ IsTree,
60
+ IsVersioned,
61
+ Registry,
62
+ )
55
63
 
56
64
  from lamindb._query_manager import QueryManager
57
65
  from lamindb._query_set import QuerySet
@@ -113,8 +113,7 @@ def describe(self: Data):
113
113
  "created_by": "👤",
114
114
  "transform": _transform_emoji(self.transform),
115
115
  "run": "👣",
116
- "initial_version": "🔖",
117
- "file": "📄",
116
+ "artifact": "📄",
118
117
  }
119
118
  if len(foreign_key_fields) > 0: # always True for Artifact and Collection
120
119
  record_msg = f"{colors.green(model_name)}{__repr__(self, include_foreign_keys=False).lstrip(model_name)}"
@@ -209,7 +208,7 @@ def add_labels(
209
208
  ) -> None:
210
209
  """{}."""
211
210
  if self._state.adding:
212
- raise ValueError("Please save the file/collection before adding a label!")
211
+ raise ValueError("Please save the artifact/collection before adding a label!")
213
212
 
214
213
  if isinstance(records, (QuerySet, QuerySet.__base__)): # need to have both
215
214
  records = records.list()
@@ -331,7 +330,7 @@ def add_labels(
331
330
  id=old_feature_set_link.feature_set_id
332
331
  ).one()
333
332
  logger.info(
334
- "no file links to it anymore, deleting feature set"
333
+ "nothing links to it anymore, deleting feature set"
335
334
  f" {old_feature_set}"
336
335
  )
337
336
  old_feature_set.delete()
@@ -368,7 +367,7 @@ def _track_run_input(
368
367
  if run is None:
369
368
  if settings.track_run_inputs:
370
369
  logger.hint(
371
- "you can auto-track this file as a run input by calling"
370
+ "you can auto-track these data as a run input by calling"
372
371
  " `ln.track()`"
373
372
  )
374
373
  # assume we have a run record
@@ -390,7 +389,7 @@ def _track_run_input(
390
389
  track_run_input = True
391
390
  else:
392
391
  logger.hint(
393
- "track this file as a run input by passing `is_run_input=True`"
392
+ "track these data as a run input by passing `is_run_input=True`"
394
393
  )
395
394
  else:
396
395
  track_run_input = is_run_input
@@ -23,11 +23,12 @@ def get_labels_as_dict(self: Data):
23
23
  ).items():
24
24
  if related_name in {
25
25
  "feature_sets",
26
- "files",
26
+ "artifacts",
27
27
  "input_of",
28
28
  "collections",
29
29
  "source_of",
30
30
  "report_of",
31
+ "environment_of",
31
32
  }:
32
33
  continue
33
34
  if self.id is not None:
@@ -57,10 +57,14 @@ class MappedCollection:
57
57
  self,
58
58
  path_list: List[Union[str, PathLike]],
59
59
  label_keys: Optional[Union[str, List[str]]] = None,
60
- join_vars: Optional[Literal["auto", "inner"]] = "auto",
60
+ join_vars: Optional[Literal["auto", "inner", "outer"]] = "auto",
61
61
  encode_labels: bool = True,
62
+ cache_categories: bool = True,
62
63
  parallel: bool = False,
64
+ dtype: Optional[str] = None,
63
65
  ):
66
+ assert join_vars in {None, "auto", "inner", "outer"}
67
+
64
68
  self.storages = [] # type: ignore
65
69
  self.conns = [] # type: ignore
66
70
  self.parallel = parallel
@@ -86,8 +90,15 @@ class MappedCollection:
86
90
 
87
91
  self.encode_labels = encode_labels
88
92
  self.label_keys = [label_keys] if isinstance(label_keys, str) else label_keys
89
- if self.label_keys is not None and self.encode_labels:
90
- self._make_encoders(self.label_keys)
93
+ if self.label_keys is not None:
94
+ if cache_categories:
95
+ self._cache_categories(self.label_keys)
96
+ else:
97
+ self._cache_cats: dict = {}
98
+ if self.encode_labels:
99
+ self._make_encoders(self.label_keys)
100
+
101
+ self._dtype = dtype
91
102
 
92
103
  self._closed = False
93
104
 
@@ -104,6 +115,18 @@ class MappedCollection:
104
115
  self.conns.append(conn)
105
116
  self.storages.append(storage)
106
117
 
118
+ def _cache_categories(self, label_keys: list):
119
+ self._cache_cats = {}
120
+ decode = np.frompyfunc(lambda x: x.decode("utf-8"), 1, 1)
121
+ for label in label_keys:
122
+ self._cache_cats[label] = []
123
+ for storage in self.storages:
124
+ with _Connect(storage) as store:
125
+ cats = self.get_categories(store, label)
126
+ if cats is not None:
127
+ cats = decode(cats) if isinstance(cats[0], bytes) else cats[...]
128
+ self._cache_cats[label].append(cats)
129
+
107
130
  def _make_encoders(self, label_keys: list):
108
131
  self.encoders = []
109
132
  for label in label_keys:
@@ -115,20 +138,31 @@ class MappedCollection:
115
138
  for storage in self.storages:
116
139
  with _Connect(storage) as store:
117
140
  var_list.append(_safer_read_index(store["var"]))
141
+
142
+ self.var_joint = None
118
143
  if self.join_vars == "auto":
119
144
  vars_eq = all(var_list[0].equals(vrs) for vrs in var_list[1:])
120
145
  if vars_eq:
121
146
  self.join_vars = None
122
147
  return
123
148
  else:
124
- self.join_vars = "inner"
149
+ self.var_joint = reduce(pd.Index.intersection, var_list)
150
+ if len(self.var_joint) > 0:
151
+ self.join_vars = "inner"
152
+ else:
153
+ self.join_vars = "outer"
154
+
125
155
  if self.join_vars == "inner":
126
- self.var_joint = reduce(pd.Index.intersection, var_list)
127
- if len(self.var_joint) == 0:
128
- raise ValueError(
129
- "The provided AnnData objects don't have shared varibales."
130
- )
156
+ if self.var_joint is None:
157
+ self.var_joint = reduce(pd.Index.intersection, var_list)
158
+ if len(self.var_joint) == 0:
159
+ raise ValueError(
160
+ "The provided AnnData objects don't have shared varibales."
161
+ )
131
162
  self.var_indices = [vrs.get_indexer(self.var_joint) for vrs in var_list]
163
+ elif self.join_vars == "outer":
164
+ self.var_joint = reduce(pd.Index.union, var_list)
165
+ self.var_indices = [self.var_joint.get_indexer(vrs) for vrs in var_list]
132
166
 
133
167
  def __len__(self):
134
168
  return self.n_obs
@@ -137,15 +171,21 @@ class MappedCollection:
137
171
  obs_idx = self.indices[idx]
138
172
  storage_idx = self.storage_idx[idx]
139
173
  if self.var_indices is not None:
140
- var_idxs = self.var_indices[storage_idx]
174
+ var_idxs_join = self.var_indices[storage_idx]
141
175
  else:
142
- var_idxs = None
176
+ var_idxs_join = None
143
177
 
144
178
  with _Connect(self.storages[storage_idx]) as store:
145
- out = [self.get_data_idx(store, obs_idx, var_idxs)]
179
+ out = [self.get_data_idx(store, obs_idx, var_idxs_join)]
146
180
  if self.label_keys is not None:
147
181
  for i, label in enumerate(self.label_keys):
148
- label_idx = self.get_label_idx(store, obs_idx, label)
182
+ if label in self._cache_cats:
183
+ cats = self._cache_cats[label][storage_idx]
184
+ if cats is None:
185
+ cats = []
186
+ else:
187
+ cats = None
188
+ label_idx = self.get_label_idx(store, obs_idx, label, cats)
149
189
  if self.encode_labels:
150
190
  label_idx = self.encoders[i][label_idx]
151
191
  out.append(label_idx)
@@ -155,26 +195,50 @@ class MappedCollection:
155
195
  self,
156
196
  storage: StorageType, # type: ignore
157
197
  idx: int,
158
- var_idxs: Optional[list] = None,
198
+ var_idxs_join: Optional[list] = None,
159
199
  layer_key: Optional[str] = None,
160
200
  ):
161
201
  """Get the index for the data."""
162
202
  layer = storage["X"] if layer_key is None else storage["layers"][layer_key] # type: ignore
163
203
  if isinstance(layer, ArrayTypes): # type: ignore
164
- # todo: better way to select variables
165
- return layer[idx] if var_idxs is None else layer[idx][var_idxs]
204
+ layer_idx = layer[idx]
205
+ if self.join_vars is None:
206
+ result = layer_idx
207
+ if self._dtype is not None:
208
+ result = result.astype(self._dtype, copy=False)
209
+ elif self.join_vars == "outer":
210
+ dtype = layer_idx.dtype if self._dtype is None else self._dtype
211
+ result = np.zeros(len(self.var_joint), dtype=dtype)
212
+ result[var_idxs_join] = layer_idx
213
+ else: # inner join
214
+ result = layer_idx[var_idxs_join]
215
+ if self._dtype is not None:
216
+ result = result.astype(self._dtype, copy=False)
217
+ return result
166
218
  else: # assume csr_matrix here
167
219
  data = layer["data"]
168
220
  indices = layer["indices"]
169
221
  indptr = layer["indptr"]
170
222
  s = slice(*(indptr[idx : idx + 2]))
171
- # this requires more memory than csr_matrix when var_idxs is not None
172
- # but it is faster
173
- layer_idx = np.zeros(layer.attrs["shape"][1])
174
- layer_idx[indices[s]] = data[s]
175
- return layer_idx if var_idxs is None else layer_idx[var_idxs]
223
+ data_s = data[s]
224
+ dtype = data_s.dtype if self._dtype is None else self._dtype
225
+ if self.join_vars == "outer":
226
+ layer_idx = np.zeros(len(self.var_joint), dtype=dtype)
227
+ layer_idx[var_idxs_join[indices[s]]] = data_s
228
+ else:
229
+ layer_idx = np.zeros(layer.attrs["shape"][1], dtype=dtype)
230
+ layer_idx[indices[s]] = data_s
231
+ if self.join_vars == "inner":
232
+ layer_idx = layer_idx[var_idxs_join]
233
+ return layer_idx
176
234
 
177
- def get_label_idx(self, storage: StorageType, idx: int, label_key: str): # type: ignore
235
+ def get_label_idx(
236
+ self,
237
+ storage: StorageType,
238
+ idx: int,
239
+ label_key: str,
240
+ categories: Optional[list] = None,
241
+ ):
178
242
  """Get the index for the label by key."""
179
243
  obs = storage["obs"] # type: ignore
180
244
  # how backwards compatible do we want to be here actually?
@@ -186,9 +250,11 @@ class MappedCollection:
186
250
  label = labels[idx]
187
251
  else:
188
252
  label = labels["codes"][idx]
189
-
190
- cats = self.get_categories(storage, label_key)
191
- if cats is not None:
253
+ if categories is not None:
254
+ cats = categories
255
+ else:
256
+ cats = self.get_categories(storage, label_key)
257
+ if cats is not None and len(cats) > 0:
192
258
  label = cats[label]
193
259
  if isinstance(label, bytes):
194
260
  label = label.decode("utf-8")
@@ -215,11 +281,14 @@ class MappedCollection:
215
281
  """Get merged labels."""
216
282
  labels_merge = []
217
283
  decode = np.frompyfunc(lambda x: x.decode("utf-8"), 1, 1)
218
- for storage in self.storages:
284
+ for i, storage in enumerate(self.storages):
219
285
  with _Connect(storage) as store:
220
286
  codes = self.get_codes(store, label_key)
221
287
  labels = decode(codes) if isinstance(codes[0], bytes) else codes
222
- cats = self.get_categories(store, label_key)
288
+ if label_key in self._cache_cats:
289
+ cats = self._cache_cats[label_key][i]
290
+ else:
291
+ cats = self.get_categories(store, label_key)
223
292
  if cats is not None:
224
293
  cats = decode(cats) if isinstance(cats[0], bytes) else cats
225
294
  labels = cats[labels]
@@ -230,9 +299,12 @@ class MappedCollection:
230
299
  """Get merged categories."""
231
300
  cats_merge = set()
232
301
  decode = np.frompyfunc(lambda x: x.decode("utf-8"), 1, 1)
233
- for storage in self.storages:
302
+ for i, storage in enumerate(self.storages):
234
303
  with _Connect(storage) as store:
235
- cats = self.get_categories(store, label_key)
304
+ if label_key in self._cache_cats:
305
+ cats = self._cache_cats[label_key][i]
306
+ else:
307
+ cats = self.get_categories(store, label_key)
236
308
  if cats is not None:
237
309
  cats = decode(cats) if isinstance(cats[0], bytes) else cats
238
310
  cats_merge.update(cats)
@@ -33,7 +33,9 @@ msg_manual_init = (
33
33
  )
34
34
 
35
35
 
36
- class UpdateNbWithNonInteractiveEditorError(Exception):
36
+ # we don't want a real error here, as this is so frequent
37
+ # in VSCode
38
+ class UpdateNbWithNonInteractiveEditor(SystemExit):
37
39
  pass
38
40
 
39
41
 
@@ -230,7 +232,7 @@ class run_context:
230
232
  "it looks like you are running ln.track() from a "
231
233
  "notebook!\nplease install nbproject: pip install nbproject"
232
234
  )
233
- elif isinstance(e, UpdateNbWithNonInteractiveEditorError):
235
+ elif isinstance(e, UpdateNbWithNonInteractiveEditor):
234
236
  raise e
235
237
  elif isinstance(e, (NotebookNotSavedError, NoTitleError)):
236
238
  raise e
@@ -435,7 +437,7 @@ class run_context:
435
437
  cls._notebook_meta = metadata # type: ignore
436
438
  else:
437
439
  msg = msg_manual_init.format(notebook_path=notebook_path_str)
438
- raise UpdateNbWithNonInteractiveEditorError(msg)
440
+ raise UpdateNbWithNonInteractiveEditor(msg)
439
441
 
440
442
  if _env in ("lab", "notebook"):
441
443
  # save the notebook in case that title was updated
@@ -450,7 +452,7 @@ class run_context:
450
452
  is_interactive = _seconds_modified(_filepath) < 1.5 # should be ~1 sec
451
453
  if not is_interactive and needs_init:
452
454
  msg = msg_manual_init.format(notebook_path=_filepath)
453
- raise UpdateNbWithNonInteractiveEditorError(msg)
455
+ raise UpdateNbWithNonInteractiveEditor(msg)
454
456
 
455
457
  nbproject_id = metadata["id"]
456
458
  nbproject_version = metadata["version"]
@@ -509,7 +511,7 @@ class run_context:
509
511
  cls._notebook_meta = metadata # type: ignore
510
512
  else:
511
513
  msg = msg_manual_init.format(notebook_path=filepath)
512
- raise UpdateNbWithNonInteractiveEditorError(msg)
514
+ raise UpdateNbWithNonInteractiveEditor(msg)
513
515
  else:
514
516
  from lamin_cli._transform import update_transform_source_metadata
515
517
 
@@ -6,9 +6,13 @@ from lnschema_core.models import Run
6
6
 
7
7
 
8
8
  def track_environment(run: Run) -> None:
9
- filepath = ln_setup.settings.storage.cache_dir / f"run_env_pip_{run.uid}"
9
+ filepath = ln_setup.settings.storage.cache_dir / f"run_env_pip_{run.uid}.txt"
10
10
  # create a requirements.txt
11
11
  # we don't create a conda environment.yml mostly for its slowness
12
- result = subprocess.run(f"pip freeze > {str(filepath)}", shell=True)
13
- if result.returncode == 0:
12
+ try:
13
+ result = subprocess.run(f"pip freeze > {str(filepath)}", shell=True)
14
+ except OSError as e:
15
+ result = None
16
+ logger.warning(f"could not run pip freeze with error {e}")
17
+ if result is not None and result.returncode == 0:
14
18
  logger.info(f"tracked pip freeze > {str(filepath)}")
@@ -17,7 +17,7 @@ classifiers = [
17
17
  dependencies = [
18
18
  # Lamin PINNED packages
19
19
  "lnschema_core==0.60.0",
20
- "lamindb_setup==0.63.0",
20
+ "lamindb_setup==0.63.1",
21
21
  "lamin_utils==0.13.0",
22
22
  "lamin_cli==0.5.0",
23
23
  # others
@@ -66,17 +66,26 @@ def update_transform_source_metadata(
66
66
  else:
67
67
  is_notebook = False
68
68
  stem_uid, version = get_script_metadata(filepath)
69
- logger.important(
70
- f"transform is tracked with stem_uid='{stem_uid}', version: '{version}'"
69
+ from lamin_utils._base62 import encodebytes
70
+ import hashlib
71
+ # the following line is duplicated with get_transform_kwargs_from_stem_uid
72
+ # in lamindb - we should move it, e.g., to lamin-utils
73
+ # it also occurs a few lines below
74
+ uid_ext = encodebytes(hashlib.md5(version.encode()).digest())[:4]
75
+ # it simply looks better here to not use the logger because we won't have an emoji also for the subsequent
76
+ # input question
77
+ print(
78
+ f"Transform is tracked with stem_uid='{stem_uid}' & version='{version}' (uid='{stem_uid}{uid_ext}')"
71
79
  )
72
80
  updated = False
73
- # ask for generating a new uid prefix
81
+ # ask for generating a new stem uid
82
+ response = "bump"
74
83
  if not bump_version:
75
84
  if os.getenv("LAMIN_TESTING") is None:
76
- response = input("Do you want to generate a new uid prefix? (y/n) ")
85
+ response = input("To create a new stem uid, type 'new'. To bump the version, type 'bump' or a custom version: ")
77
86
  else:
78
- response = "y"
79
- if response == "y":
87
+ response = "new"
88
+ if response == "new":
80
89
  new_stem_uid = nbproject_id()
81
90
  updated = True
82
91
  else:
@@ -84,21 +93,27 @@ def update_transform_source_metadata(
84
93
  new_version = version
85
94
  if bump_version:
86
95
  new_stem_uid = stem_uid
87
- if os.getenv("LAMIN_TESTING") is None:
88
- new_version = input(
89
- f"The current version is '{version}' - please type the new version: "
90
- )
96
+ if response == "bump":
97
+ try:
98
+ new_version = str(int(version) + 1)
99
+ except ValueError:
100
+ new_version = input(
101
+ f"The current version is '{version}' - please type the new version: "
102
+ )
91
103
  else:
92
- new_version = str(int(version) + 1)
104
+ new_version = response
93
105
  updated = new_version != version
94
106
  if updated and run_from_cli:
107
+ display_info = f"version='{new_version}'" if bump_version else f"stem_uid='{new_stem_uid}'"
108
+ new_uid_ext = encodebytes(hashlib.md5(new_version.encode()).digest())[:4]
109
+ display_info += f" (uid='{new_stem_uid}{new_uid_ext}')"
95
110
  if is_notebook:
96
- logger.save("updated notebook")
111
+ logger.save(f"updated notebook: {display_info}")
97
112
  content.metadata["nbproject"]["id"] = new_stem_uid
98
113
  content.metadata["nbproject"]["version"] = new_version
99
114
  write_notebook(content, filepath)
100
115
  else:
101
- logger.save("updated script")
116
+ logger.save(f"updated script: {display_info}")
102
117
  old_metadata = (
103
118
  f'__transform_stem_uid__ = "{stem_uid}"\n__version__ = "{version}"\n'
104
119
  )
@@ -284,9 +299,9 @@ def save(filepath: str) -> Optional[str]:
284
299
  source_code.save()
285
300
  transform.source_code = source_code
286
301
  # track environment
287
- filepath = lamindb_setup.settings.storage.cache_dir / f"run_env_pip_{run.uid}"
302
+ filepath = lamindb_setup.settings.storage.cache_dir / f"run_env_pip_{run.uid}.txt"
288
303
  if filepath.exists():
289
- artifact = ln.Artifact(filepath, description="requirements.txt")
304
+ artifact = ln.Artifact(filepath, description="requirements.txt", visibility=0)
290
305
  if artifact._state.adding:
291
306
  artifact.save()
292
307
  run.environment = artifact