lamindb 0.70.2__tar.gz → 0.70.3__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-0.70.2 → lamindb-0.70.3}/PKG-INFO +2 -2
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/changelog.md +6 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/__init__.py +1 -1
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_artifact.py +51 -18
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_collection.py +2 -1
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/_run_context.py +5 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/storage/_zarr.py +27 -11
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/storage/paths.py +2 -2
- {lamindb-0.70.2 → lamindb-0.70.3}/pyproject.toml +1 -1
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/changelog.md +1 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-cloud/06-connect-hosted-instance.ipynb +17 -1
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/__init__.py +1 -1
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/upath.py +24 -6
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_artifact.py +23 -4
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_collection.py +8 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_run_context.py +11 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/.github/workflows/build.yml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/.gitignore +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/.gitmodules +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/.pre-commit-config.yaml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/LICENSE +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/README.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/annotate-for-developers.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/annotate.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/bio-registries.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/bionty-base.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/bionty.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/can-validate.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/data.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/faq/acid.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/faq/delete.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/faq/idempotency.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/faq/import-schema.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/faq/key.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/faq/reference-field.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/faq/setup.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/faq/test_notebooks.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/faq/track-run-inputs.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/faq/visibility.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/faq.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/features-lamindb.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/features-laminhub.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/guide.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/index.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/installation.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/introduction.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/lamin-utils.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/lamindb.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/meta.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/nbproject.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/query-search.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/readfcs.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/reference.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/schemas.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/setup.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/signup-login.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/storage/add-replace-stage.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/storage/anndata-accessor.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/storage/prepare-transfer-local-to-cloud.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/storage/test-files/iris.csv +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/storage/test-files/iris.data +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/storage/test-files/new_iris.csv +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/storage/test_notebooks.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/storage/transfer-local-to-cloud.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/storage/upload.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/storage/vitessce.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/storage.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/test_notebooks.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/track.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/transfer.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/tutorial.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/tutorial2.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/docs/wetlab.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_annotate.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_can_validate.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_feature.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_feature_set.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_filter.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_finish.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_from_values.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_is_versioned.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_parents.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_query_manager.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_query_set.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_registry.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_run.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_save.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_storage.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_transform.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_ulabel.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_utils.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/_view.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/_data.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/_feature_manager.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/_label_manager.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/_mapped_collection.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/_settings.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/_sync_git.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/_track_environment.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/_transform_settings.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/_view_tree.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/datasets/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/datasets/_core.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/datasets/_fake.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/exceptions.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/fields.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/storage/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/storage/_anndata_sizes.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/storage/_backed_access.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/storage/_valid_suffixes.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/storage/objects.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/types.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/core/versioning.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/integrations/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/integrations/_vitessce.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/setup/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/lamindb/setup/core/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/noxfile.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/.github/workflows/build.yml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/.gitignore +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/.pre-commit-config.yaml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/LICENSE +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/README.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/bionty/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/bionty/core/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/docs/changelog.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/docs/index.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/docs/reference.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/lamin-project.yaml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/noxfile.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/pyproject.toml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/bionty/tests/test_notebooks.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/.gitignore +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/.pre-commit-config.yaml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/README.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/lamin_cli/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/lamin_cli/__main__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/lamin_cli/_cache.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/lamin_cli/_get.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/lamin_cli/_migration.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/lamin_cli/_save.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/pyproject.toml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/conftest.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/notebooks/not-initialized.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-consecutive.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-non-consecutive.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/scripts/initialized-no-git-sync.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/scripts/initialized.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/test_cli.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/test_get.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/test_migrate.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/test_multi_process.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/test_save_files.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/test_save_notebooks.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamin-cli/tests/test_save_scripts.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/.github/workflows/build.yml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/.gitignore +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/.pre-commit-config.yaml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/LICENSE +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/README.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-cloud/01-init-on-prem-instance.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-cloud/02-connect-on-prem-instance.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-cloud/03-set-storage.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-cloud/04-test-bionty.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-cloud/05-init-hosted-instance.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-cloud/test-multi-session.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-cloud/test_notebooks.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-prod/test-cache-management.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-prod/test-cloud-sync.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-prod/test-connect-anonymously.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-prod/test-empty-init.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-prod/test-import-schema.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-prod/test-insufficient-user-info.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-prod/test-invalid-schema.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-prod/test-sqlite-lock.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-prod/test_notebooks2.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/index.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/notebooks.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/reference.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_add_remote_storage.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_cache.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_check.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_check_setup.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_close.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_connect_instance.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_delete.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_django.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_exportdb.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_importdb.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_init_instance.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_migrate.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_register_instance.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_schema.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_setup_user.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/_silence_loggers.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_aws_storage.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_deprecated.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_docs.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_hub_client.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_hub_core.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_hub_crud.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_hub_utils.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_settings.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_settings_instance.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_settings_load.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_settings_save.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_settings_storage.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_settings_store.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_settings_user.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/_setup_bionty_sources.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/cloud_sqlite_locker.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/django.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/exceptions.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/hashing.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/lamindb_setup/core/types.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/noxfile.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/pyproject.toml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-cloud/test_connect_instance.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-cloud/test_delete_instance.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-cloud/test_init_instance.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-cloud/test_login.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-cloud/test_migrate.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-cloud/test_set_storage.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-local/conftest.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-local/test_all.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-prod/conftest.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-prod/test_auto_connect.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-prod/test_django.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-prod/test_switch_and_fallback_env.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/hub-prod/test_upath.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/storage/test_hashing.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/storage/test_storage_access.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/storage/test_storage_basis.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/tests/storage/test_storage_stats.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/.github/workflows/build.yml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/.gitignore +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/.pre-commit-config.yaml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/LICENSE +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/README.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/docs/changelog.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/docs/index.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/docs/reference.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lamin-project.yaml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/_bionty.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/core/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/core/_bionty.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/core/_settings.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/ids.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0001_initial.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0001_initial_squashed_0016.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0002_rename_gene_type_gene_biotype_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0003_alter_biontysource_entity_alter_biontysource_source_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0004_alter_cellline_bionty_source_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0005_rename_short_name_cellline_abbr_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0006_alter_biontysource_options_alter_cellline_options_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0007_rename_readout_experimental_factor.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0008_remove_gene_hgnc_id_remove_gene_mgi_id_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0009_alter_gene_ensembl_gene_id.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0010_alter_species_name.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0011_cellline_datasets_cellmarker_datasets_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0012_gene_stable_id.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0013_alter_cellmarker_species_alter_gene_species_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0014_ethnicity_developmentalstage.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0015_migrate_to_integer_pks.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0016_export_legacy_data.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0017_import_legacy_data.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0018_organism_rename_species_biontysource_organism_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0019_rename_taxon_id_organism_ontology_id_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0020_alter_organism_bionty_source.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0021_rename_files_cellline_artifacts_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0022_rename_datasets_cellline_collections_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0023_rename_publicsource_encode_uid.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/migrations/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/lnschema_bionty/models.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/noxfile.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/pyproject.toml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-bionty/tests/test_integrity.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/.github/workflows/build.yml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/.gitignore +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/.pre-commit-config.yaml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/CHANGELOG.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/LICENSE +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/README.md +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/ids.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0001_initial.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0001_initial_squashed_0023.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0002_alter_user_name.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0003_alter_storage_region_alter_transform_short_name.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0004_rename_folder_tag_alter_project_folders.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0005_alter_run_inputs_delete_runinput.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0006_feature_dataset.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0007_feature_synonyms_featureset_field_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0008_file_hash_type_transform_parents.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0009_remove_featureset_files_feature_unit_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0010_dataset_categories_file_categories.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0011_label_remove_tag_created_by_remove_tag_parents_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0012_remove_label_ref_id_remove_label_ref_orm_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0013_remove_feature_labels_orm_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0014_rename_ref_field_featureset_registry.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0015_file_initial_version_file_version.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0016_dataset_input_of_dataset_run_dataset_transform_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0017_dataset_initial_version_dataset_version.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0018_rename_datasetlabel_datasetulabel_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0019_dataset_reference_dataset_reference_type_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0020_run_report_transform_latest_report_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0021_dataset_storage_alter_dataset_file.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0022_migrate_to_integer_pks.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0023_export_legacy_data.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0024_import_legacy_data.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0025_remove_user_email.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0026_dataset_visibility_file_visibility.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0027_file_key_is_virtual.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0028_alter_dataset_visibility_alter_file_visibility.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0029_remove_feature_modality_remove_featureset_modality_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0030_alter_dataset_visibility_alter_file_visibility.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0031_rename_file_to_artifact.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0032_remove_dataset_storage.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0033_alter_artifact_unique_together_artifact_n_objects_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0034_run_environment.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0035_remove_artifact_initial_version_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0036_storage_description.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0037_rename_dataset_to_collection.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0038_alter_collection_artifact_alter_collection_artifacts_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0039_remove_collection_artifacts_collectionartifact_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0040_alter_transform_type.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0041_remove_transform_short_name_transform_description_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0042_rename_run_at_run_started_at_run_finished_at.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0043_run_json.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0044_run_replicated_outputs_transform_ulabels_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/0045_rename_replicated_outputs_run_replicated_output_artifacts_and_more.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/migrations/__init__.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/mocks.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/models.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/types.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/lnschema_core/users.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/noxfile.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/pyproject.toml +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/tests/test_integrity.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/sub/lnschema-core/tests/test_types.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/conftest.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/notebooks/initialized-with-nbproject.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/notebooks/no-title.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/notebooks/not-initialized.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/notebooks/with-title-initialized-consecutive-finish-not-last-cell.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/notebooks/with-title-initialized-consecutive-finish.ipynb +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_annotate.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_cache.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_can_validate.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_data.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_db.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_delete.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_feature.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_feature_manager.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_feature_set.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_from_values.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_label_manager.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_load.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_manager.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_notebooks.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_parents.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_queryset.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_registry.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_run.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_save.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_settings.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_storage.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_transfer.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_transform.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_uid.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_ulabel.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_versioning.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_view.py +0 -0
- {lamindb-0.70.2 → lamindb-0.70.3}/tests/test_visibility.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.70.
|
3
|
+
Version: 0.70.3
|
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.65.1
|
13
|
-
Requires-Dist: lamindb_setup==0.69.
|
13
|
+
Requires-Dist: lamindb_setup==0.69.5
|
14
14
|
Requires-Dist: lamin_utils==0.13.2
|
15
15
|
Requires-Dist: lamin_cli==0.12.3
|
16
16
|
Requires-Dist: rapidfuzz
|
@@ -14,6 +14,12 @@ When upgrading your LaminDB installation to a new `minor` version in `major.mino
|
|
14
14
|
|
15
15
|
## 0.70
|
16
16
|
|
17
|
+
### 0.70.3 {small}`2024-04-22`
|
18
|
+
|
19
|
+
- 🚸 Update metadata like description upon re-running [PR](https://github.com/laminlabs/lamindb/pull/1588) [@falexwolf](https://github.com/falexwolf)
|
20
|
+
- 🐛 Fix detection of AnnData in zarr and h5ad, refactor directory upload [PR](https://github.com/laminlabs/lamindb/pull/1587) [@Koncopd](https://github.com/Koncopd)
|
21
|
+
- 🚸 Raise error if transforms of type notebook or script are passed manually [PR](https://github.com/laminlabs/lamindb/pull/1584) [@falexwolf](https://github.com/falexwolf)
|
22
|
+
|
17
23
|
### 0.70.2 {small}`2024-04-19`
|
18
24
|
|
19
25
|
- ♻️ In Vitessce integration, separate `VitessceConfig` from its referenced artifacts [PR](https://github.com/laminlabs/lamindb/pull/1582) [@falexwolf](https://github.com/falexwolf)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
from pathlib import Path, PurePath, PurePosixPath
|
4
|
-
from typing import TYPE_CHECKING, Any
|
4
|
+
from typing import TYPE_CHECKING, Any, Mapping
|
5
5
|
|
6
6
|
import fsspec
|
7
7
|
import lamindb_setup as ln_setup
|
@@ -26,7 +26,7 @@ from lnschema_core.types import (
|
|
26
26
|
)
|
27
27
|
|
28
28
|
from lamindb._utils import attach_func_to_class_method
|
29
|
-
from lamindb.core._data import _track_run_input
|
29
|
+
from lamindb.core._data import Data, _track_run_input
|
30
30
|
from lamindb.core._settings import settings
|
31
31
|
from lamindb.core.storage import (
|
32
32
|
LocalPathClasses,
|
@@ -53,6 +53,14 @@ from .core._data import (
|
|
53
53
|
from .core.storage.objects import _mudata_is_installed
|
54
54
|
from .core.storage.paths import AUTO_KEY_PREFIX
|
55
55
|
|
56
|
+
try:
|
57
|
+
from .core.storage._zarr import zarr_is_adata
|
58
|
+
except ImportError:
|
59
|
+
|
60
|
+
def zarr_is_adata(storepath): # type: ignore
|
61
|
+
raise ImportError("Please install zarr: pip install zarr")
|
62
|
+
|
63
|
+
|
56
64
|
if TYPE_CHECKING:
|
57
65
|
from lamindb_setup.core.types import UPathStr
|
58
66
|
from mudata import MuData
|
@@ -329,16 +337,17 @@ def get_artifact_kwargs_from_data(
|
|
329
337
|
using_key=using_key,
|
330
338
|
)
|
331
339
|
if isinstance(stat_or_artifact, Artifact):
|
340
|
+
artifact = stat_or_artifact
|
332
341
|
# update the run of the existing artifact
|
333
342
|
if run is not None:
|
334
343
|
# save the information that this artifact was previously
|
335
344
|
# produced by another run
|
336
|
-
if
|
337
|
-
|
345
|
+
if artifact.run is not None:
|
346
|
+
artifact.run.replicated_output_artifacts.add(artifact)
|
338
347
|
# update the run of the artifact with the latest run
|
339
348
|
stat_or_artifact.run = run
|
340
349
|
stat_or_artifact.transform = run.transform
|
341
|
-
return
|
350
|
+
return artifact, None
|
342
351
|
else:
|
343
352
|
size, hash, hash_type, n_objects = stat_or_artifact
|
344
353
|
|
@@ -446,12 +455,19 @@ def data_is_anndata(data: AnnData | UPathStr):
|
|
446
455
|
if isinstance(data, AnnData):
|
447
456
|
return True
|
448
457
|
if isinstance(data, (str, Path, UPath)):
|
449
|
-
|
458
|
+
data_path = UPath(data)
|
459
|
+
if data_path.suffix == ".h5ad":
|
450
460
|
return True
|
451
|
-
elif
|
452
|
-
|
453
|
-
|
454
|
-
|
461
|
+
elif data_path.suffix == ".zarr":
|
462
|
+
# ".anndata.zarr" is a valid suffix (core.storage._valid_suffixes)
|
463
|
+
if ".anndata" in data_path.suffixes:
|
464
|
+
return True
|
465
|
+
# check only for local, expensive for cloud
|
466
|
+
if fsspec.utils.get_protocol(data_path) == "file":
|
467
|
+
return zarr_is_adata(data_path)
|
468
|
+
else:
|
469
|
+
logger.warning("We do not check if cloud zarr is AnnData or not.")
|
470
|
+
return False
|
455
471
|
return False
|
456
472
|
|
457
473
|
|
@@ -461,27 +477,39 @@ def data_is_mudata(data: MuData | UPathStr):
|
|
461
477
|
|
462
478
|
if isinstance(data, MuData):
|
463
479
|
return True
|
464
|
-
if isinstance(data, (str, Path
|
465
|
-
return
|
480
|
+
if isinstance(data, (str, Path)):
|
481
|
+
return UPath(data).suffix in {".h5mu"}
|
466
482
|
return False
|
467
483
|
|
468
484
|
|
469
485
|
def _check_accessor_artifact(data: Any, accessor: str | None = None):
|
470
|
-
if accessor is None
|
486
|
+
if accessor is None:
|
471
487
|
if isinstance(data, pd.DataFrame):
|
472
488
|
logger.warning("data is a DataFrame, please use .from_df()")
|
473
489
|
accessor = "DataFrame"
|
474
|
-
|
475
|
-
|
490
|
+
return accessor
|
491
|
+
|
492
|
+
data_is_path = isinstance(data, (str, Path))
|
493
|
+
if data_is_anndata(data):
|
494
|
+
if not data_is_path:
|
495
|
+
logger.warning("data is an AnnData, please use .from_anndata()")
|
476
496
|
accessor = "AnnData"
|
477
497
|
elif data_is_mudata(data):
|
478
|
-
|
498
|
+
if not data_is_path:
|
499
|
+
logger.warning("data is a MuData, please use .from_mudata()")
|
479
500
|
accessor = "MuData"
|
480
|
-
|
501
|
+
elif not data_is_path: # UPath is a subclass of Path
|
481
502
|
raise TypeError("data has to be a string, Path, UPath")
|
482
503
|
return accessor
|
483
504
|
|
484
505
|
|
506
|
+
def update_attributes(data: Data, attributes: Mapping[str, str]):
|
507
|
+
for key, value in attributes.items():
|
508
|
+
if getattr(data, key) != value:
|
509
|
+
logger.warning(f"updated {key} from {getattr(data, key)} to {value}")
|
510
|
+
setattr(data, key, value)
|
511
|
+
|
512
|
+
|
485
513
|
def __init__(artifact: Artifact, *args, **kwargs):
|
486
514
|
# Below checks for the Django-internal call in from_db()
|
487
515
|
# it'd be better if we could avoid this, but not being able to create a Artifact
|
@@ -558,8 +586,13 @@ def __init__(artifact: Artifact, *args, **kwargs):
|
|
558
586
|
if isinstance(kwargs_or_artifact, Artifact):
|
559
587
|
from ._registry import init_self_from_db
|
560
588
|
|
561
|
-
# kwargs_or_artifact is an existing file
|
562
589
|
init_self_from_db(artifact, kwargs_or_artifact)
|
590
|
+
# adding "key" here is dangerous because key might be auto-populated
|
591
|
+
update_attributes(artifact, {"description": description})
|
592
|
+
if artifact.key != key:
|
593
|
+
logger.warning(
|
594
|
+
f"key {artifact.key} on existing artifact differs from passed key {key}"
|
595
|
+
)
|
563
596
|
return None
|
564
597
|
else:
|
565
598
|
kwargs = kwargs_or_artifact
|
@@ -18,13 +18,13 @@ from lamindb_setup.core.hashing import hash_set
|
|
18
18
|
from lnschema_core.models import Collection, CollectionArtifact, FeatureSet
|
19
19
|
from lnschema_core.types import VisibilityChoice
|
20
20
|
|
21
|
+
from lamindb._artifact import update_attributes
|
21
22
|
from lamindb._utils import attach_func_to_class_method
|
22
23
|
from lamindb.core._data import _track_run_input
|
23
24
|
from lamindb.core._mapped_collection import MappedCollection
|
24
25
|
from lamindb.core.versioning import get_uid_from_old_version, init_uid
|
25
26
|
|
26
27
|
from . import Artifact, Run
|
27
|
-
from ._artifact import data_is_anndata
|
28
28
|
from ._registry import init_self_from_db
|
29
29
|
from .core._data import (
|
30
30
|
add_transform_to_kwargs,
|
@@ -128,6 +128,7 @@ def __init__(
|
|
128
128
|
existing_collection.run = run
|
129
129
|
existing_collection.transform = run.transform
|
130
130
|
init_self_from_db(collection, existing_collection)
|
131
|
+
update_attributes(collection, {"description": description, "name": name})
|
131
132
|
for slot, feature_set in collection.features._feature_set_by_slot.items():
|
132
133
|
if slot in feature_sets:
|
133
134
|
if not feature_sets[slot] == feature_set:
|
@@ -306,6 +306,11 @@ class run_context:
|
|
306
306
|
if not is_tracked:
|
307
307
|
raise_transform_settings_error()
|
308
308
|
else:
|
309
|
+
if transform.type in {"notebook", "script"}:
|
310
|
+
raise ValueError(
|
311
|
+
"Use ln.track() without passing transform in a notebook or script"
|
312
|
+
" - metadata is automatically parsed"
|
313
|
+
)
|
309
314
|
transform_exists = None
|
310
315
|
if transform.id is not None:
|
311
316
|
# transform has an id but unclear whether already saved
|
@@ -7,28 +7,44 @@ import scipy.sparse as sparse
|
|
7
7
|
import zarr
|
8
8
|
from anndata._io import read_zarr
|
9
9
|
from anndata._io.specs import write_elem
|
10
|
+
from anndata._io.specs.registry import get_spec
|
11
|
+
from fsspec.implementations.local import LocalFileSystem
|
10
12
|
from lamindb_setup.core.upath import create_mapper, infer_filesystem
|
11
13
|
|
12
14
|
from ._anndata_sizes import _size_elem, _size_raw, size_adata
|
13
15
|
|
14
16
|
if TYPE_CHECKING:
|
15
17
|
from anndata import AnnData
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
from lamindb_setup.core.types import UPathStr
|
19
|
+
|
20
|
+
|
21
|
+
def zarr_is_adata(storepath: UPathStr) -> bool:
|
22
|
+
fs, storepath_str = infer_filesystem(storepath)
|
23
|
+
if isinstance(fs, LocalFileSystem):
|
24
|
+
# this is faster than through an fsspec mapper for local
|
25
|
+
open_obj = storepath_str
|
26
|
+
else:
|
27
|
+
open_obj = create_mapper(fs, storepath_str, check=True)
|
28
|
+
storage = zarr.open(open_obj, mode="r")
|
29
|
+
return get_spec(storage).encoding_type == "anndata"
|
30
|
+
|
31
|
+
|
32
|
+
def read_adata_zarr(storepath: UPathStr) -> AnnData:
|
33
|
+
fs, storepath_str = infer_filesystem(storepath)
|
34
|
+
if isinstance(fs, LocalFileSystem):
|
35
|
+
# this is faster than through an fsspec mapper for local
|
36
|
+
open_obj = storepath_str
|
37
|
+
else:
|
38
|
+
open_obj = create_mapper(fs, storepath_str, check=True)
|
39
|
+
adata = read_zarr(open_obj)
|
24
40
|
return adata
|
25
41
|
|
26
42
|
|
27
43
|
def write_adata_zarr(
|
28
|
-
adata: AnnData, storepath, callback=None, chunks=None, **dataset_kwargs
|
44
|
+
adata: AnnData, storepath: UPathStr, callback=None, chunks=None, **dataset_kwargs
|
29
45
|
):
|
30
|
-
fs,
|
31
|
-
store = create_mapper(fs,
|
46
|
+
fs, storepath_str = infer_filesystem(storepath)
|
47
|
+
store = create_mapper(fs, storepath_str, create=True)
|
32
48
|
|
33
49
|
f = zarr.open(store, mode="w")
|
34
50
|
|
@@ -29,7 +29,7 @@ try:
|
|
29
29
|
from ._zarr import read_adata_zarr
|
30
30
|
except ImportError:
|
31
31
|
|
32
|
-
def read_adata_zarr(
|
32
|
+
def read_adata_zarr(storepath): # type: ignore
|
33
33
|
raise ImportError("Please install zarr: pip install zarr")
|
34
34
|
|
35
35
|
|
@@ -114,7 +114,7 @@ def store_file_or_folder(local_path: UPathStr, storage_path: UPath) -> None:
|
|
114
114
|
local_path = Path(local_path)
|
115
115
|
if not isinstance(storage_path, LocalPathClasses):
|
116
116
|
# this uploads files and directories
|
117
|
-
storage_path.upload_from(local_path,
|
117
|
+
storage_path.upload_from(local_path, dir_inplace=True, print_progress=True)
|
118
118
|
else: # storage path is local
|
119
119
|
storage_path.parent.mkdir(parents=True, exist_ok=True)
|
120
120
|
if local_path.is_file():
|
@@ -3,6 +3,7 @@
|
|
3
3
|
<!-- prettier-ignore -->
|
4
4
|
Name | PR | Developer | Date | Version
|
5
5
|
--- | --- | --- | --- | ---
|
6
|
+
✨ Upload dirs inplace | [722](https://github.com/laminlabs/lamindb-setup/pull/722) | [Koncopd](https://github.com/Koncopd) | 2024-04-20 | 0.69.5
|
6
7
|
♻️ Do not always read from local cache | [720](https://github.com/laminlabs/lamindb-setup/pull/720) | [falexwolf](https://github.com/falexwolf) | 2024-04-19 | 0.69.4
|
7
8
|
♻️ Improve suffix handling | [718](https://github.com/laminlabs/lamindb-setup/pull/718) | [falexwolf](https://github.com/falexwolf) | 2024-04-19 | 0.69.3
|
8
9
|
✨ Enable hybrid storage mode | [717](https://github.com/laminlabs/lamindb-setup/pull/717) | [falexwolf](https://github.com/falexwolf) | 2024-04-16 | 0.69.1
|
{lamindb-0.70.2 → lamindb-0.70.3}/sub/lamindb-setup/docs/hub-cloud/06-connect-hosted-instance.ipynb
RENAMED
@@ -88,7 +88,23 @@
|
|
88
88
|
"target_dir = root / \"test-dir-upload\"\n",
|
89
89
|
"target_dir.upload_from(test_dir, recursive=True)\n",
|
90
90
|
"\n",
|
91
|
-
"assert target_dir.is_dir()"
|
91
|
+
"assert target_dir.is_dir()\n",
|
92
|
+
"assert (target_dir / \"test-dir-upload\").exists()\n",
|
93
|
+
"\n",
|
94
|
+
"target_dir.rmdir()\n",
|
95
|
+
"assert not target_dir.exists()"
|
96
|
+
]
|
97
|
+
},
|
98
|
+
{
|
99
|
+
"cell_type": "code",
|
100
|
+
"execution_count": null,
|
101
|
+
"metadata": {},
|
102
|
+
"outputs": [],
|
103
|
+
"source": [
|
104
|
+
"target_dir.upload_from(test_dir, dir_inplace=True)\n",
|
105
|
+
"\n",
|
106
|
+
"assert target_dir.is_dir()\n",
|
107
|
+
"assert not (target_dir / \"test-dir-upload\").exists()"
|
92
108
|
]
|
93
109
|
},
|
94
110
|
{
|
@@ -165,7 +165,7 @@ class ProgressCallback(fsspec.callbacks.Callback):
|
|
165
165
|
return None
|
166
166
|
|
167
167
|
|
168
|
-
def download_to(self, path, print_progress: bool = False, **kwargs):
|
168
|
+
def download_to(self, path: UPathStr, print_progress: bool = False, **kwargs):
|
169
169
|
"""Download to a path."""
|
170
170
|
if print_progress:
|
171
171
|
# can't do path.is_dir() because path doesn't exist
|
@@ -180,20 +180,38 @@ def download_to(self, path, print_progress: bool = False, **kwargs):
|
|
180
180
|
self.fs.download(str(self), str(path), **kwargs)
|
181
181
|
|
182
182
|
|
183
|
-
def upload_from(
|
183
|
+
def upload_from(
|
184
|
+
self,
|
185
|
+
path: UPathStr,
|
186
|
+
dir_inplace: bool = False,
|
187
|
+
print_progress: bool = False,
|
188
|
+
**kwargs,
|
189
|
+
):
|
184
190
|
"""Upload from a local path."""
|
191
|
+
path_is_dir = os.path.isdir(path)
|
192
|
+
if not path_is_dir:
|
193
|
+
dir_inplace = False
|
194
|
+
|
185
195
|
if print_progress:
|
186
|
-
if not
|
196
|
+
if not path_is_dir:
|
187
197
|
cb = ProgressCallback("uploading")
|
188
198
|
else:
|
189
199
|
# todo: make proper progress bar for directories
|
190
200
|
cb = fsspec.callbacks.NoOpCallback()
|
191
201
|
kwargs["callback"] = cb
|
202
|
+
|
203
|
+
if dir_inplace:
|
204
|
+
path = Path(path)
|
205
|
+
source = [f for f in path.rglob("*") if f.is_file()]
|
206
|
+
destination = [str(self / f.relative_to(path)) for f in source]
|
207
|
+
source = [str(f) for f in source] # type: ignore
|
208
|
+
else:
|
209
|
+
source = str(path) # type: ignore
|
210
|
+
destination = str(self) # type: ignore
|
192
211
|
# this weird thing is to avoid s3fs triggering create_bucket in upload
|
193
212
|
# if dirs are present
|
194
213
|
# it allows to avoid permission error
|
195
|
-
|
196
|
-
if self.protocol != "s3" or os.path.isfile(path):
|
214
|
+
if self.protocol != "s3" or not path_is_dir or dir_inplace:
|
197
215
|
cleanup_cache = False
|
198
216
|
else:
|
199
217
|
bucket = self._url.netloc
|
@@ -205,7 +223,7 @@ def upload_from(self, path, print_progress: bool = False, **kwargs):
|
|
205
223
|
else:
|
206
224
|
cleanup_cache = False
|
207
225
|
|
208
|
-
self.fs.upload(
|
226
|
+
self.fs.upload(source, destination, **kwargs)
|
209
227
|
|
210
228
|
if cleanup_cache:
|
211
229
|
# normally this is invalidated after the upload but still better to check
|
@@ -12,11 +12,12 @@ import pytest
|
|
12
12
|
from lamindb import _artifact
|
13
13
|
from lamindb._artifact import (
|
14
14
|
check_path_is_child_of_root,
|
15
|
+
data_is_anndata,
|
15
16
|
get_relative_path_to_directory,
|
16
17
|
process_data,
|
17
18
|
)
|
18
19
|
from lamindb.core._settings import settings
|
19
|
-
from lamindb.core.storage._zarr import write_adata_zarr
|
20
|
+
from lamindb.core.storage._zarr import write_adata_zarr, zarr_is_adata
|
20
21
|
from lamindb.core.storage.paths import (
|
21
22
|
AUTO_KEY_PREFIX,
|
22
23
|
auto_storage_key_from_artifact_uid,
|
@@ -155,6 +156,13 @@ def get_test_filepaths(request): # -> Tuple[bool, Path, Path, Path, str]
|
|
155
156
|
shutil.rmtree(test_dir)
|
156
157
|
|
157
158
|
|
159
|
+
def test_data_is_anndata_paths():
|
160
|
+
assert data_is_anndata("something.h5ad")
|
161
|
+
assert data_is_anndata("something.anndata.zarr")
|
162
|
+
assert data_is_anndata("s3://somewhere/something.anndata.zarr")
|
163
|
+
assert not data_is_anndata("s3://somewhere/something.zarr")
|
164
|
+
|
165
|
+
|
158
166
|
def test_is_new_version_of_versioned_file(df, adata):
|
159
167
|
# attempt to create a file with an invalid version
|
160
168
|
with pytest.raises(ValueError) as error:
|
@@ -492,11 +500,18 @@ def test_from_dir_single_artifact(get_test_filepaths, key):
|
|
492
500
|
assert artifact.n_objects == 3
|
493
501
|
assert artifact.hash == hash_test_dir
|
494
502
|
assert artifact._state.adding
|
503
|
+
assert artifact.description is None
|
504
|
+
assert artifact.path.exists()
|
495
505
|
artifact.save()
|
496
506
|
# now run again, because now we'll have hash-based lookup!
|
497
|
-
|
498
|
-
assert not
|
499
|
-
artifact.
|
507
|
+
artifact2 = ln.Artifact(test_dirpath, key=key, description="something")
|
508
|
+
assert not artifact2._state.adding
|
509
|
+
assert artifact.id == artifact2.id
|
510
|
+
assert artifact.uid == artifact2.uid
|
511
|
+
assert artifact.storage == artifact2.storage
|
512
|
+
assert artifact2.path.exists()
|
513
|
+
assert artifact2.description == "something"
|
514
|
+
artifact2.delete(permanent=True, storage=False)
|
500
515
|
|
501
516
|
|
502
517
|
def test_from_dir_s3():
|
@@ -746,9 +761,13 @@ def test_folder_upload_cache(adata):
|
|
746
761
|
write_adata_zarr(adata, zarr_path, callback)
|
747
762
|
|
748
763
|
artifact = ln.Artifact(zarr_path, key="test_adata.zarr")
|
764
|
+
assert artifact.accessor == "AnnData"
|
749
765
|
artifact.save()
|
750
766
|
|
751
767
|
assert isinstance(artifact.path, CloudPath) and artifact.path.exists()
|
768
|
+
assert zarr_is_adata(artifact.path)
|
769
|
+
|
770
|
+
shutil.rmtree(artifact.cache())
|
752
771
|
|
753
772
|
cache_path = settings._storage_settings.cloud_to_local_no_update(artifact.path)
|
754
773
|
assert isinstance(artifact.load(), ad.AnnData)
|
@@ -156,11 +156,19 @@ def test_from_consistent_artifacts(adata, adata2):
|
|
156
156
|
run = ln.Run(transform)
|
157
157
|
run.save()
|
158
158
|
collection = ln.Collection([artifact1, artifact2], name="My test", run=run)
|
159
|
+
assert collection._state.adding
|
159
160
|
collection.save()
|
160
161
|
assert set(collection.run.input_artifacts.all()) == {artifact1, artifact2}
|
161
162
|
adata_joined = collection.load()
|
162
163
|
assert "artifact_uid" in adata_joined.obs.columns
|
163
164
|
assert artifact1.uid in adata_joined.obs.artifact_uid.cat.categories
|
165
|
+
|
166
|
+
# re-run with hash-based lookup
|
167
|
+
collection2 = ln.Collection([artifact1, artifact2], name="My test 1", run=run)
|
168
|
+
assert not collection2._state.adding
|
169
|
+
assert collection2.id == collection.id
|
170
|
+
assert collection2.name == "My test 1"
|
171
|
+
|
164
172
|
artifact1.delete(permanent=True, storage=True)
|
165
173
|
artifact2.delete(permanent=True, storage=True)
|
166
174
|
collection.delete(permanent=True)
|
@@ -98,3 +98,14 @@ def test_sync_git_repo():
|
|
98
98
|
"https://github.com/laminlabs/lamin-cli/blob/"
|
99
99
|
)
|
100
100
|
assert transform.reference_type == "url"
|
101
|
+
|
102
|
+
|
103
|
+
@pytest.mark.parametrize("type", ["notebook", "script"])
|
104
|
+
def test_track_notebook_or_script_manually(type):
|
105
|
+
transform = ln.Transform(name="My notebook", type=type)
|
106
|
+
with pytest.raises(ValueError) as error:
|
107
|
+
ln.track(transform=transform)
|
108
|
+
assert (
|
109
|
+
error.exconly()
|
110
|
+
== "ValueError: Use ln.track() without passing transform in a notebook or script - metadata is automatically parsed"
|
111
|
+
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|