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