lamindb 0.76.12__tar.gz → 0.76.13__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.76.12 → lamindb-0.76.13}/PKG-INFO +2 -2
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/idempotency.ipynb +8 -7
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/setup.ipynb +3 -1
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/tutorial.ipynb +1 -2
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/__init__.py +1 -1
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_artifact.py +4 -3
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_collection.py +6 -5
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_feature_set.py +3 -1
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_parents.py +18 -3
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_query_manager.py +0 -15
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_query_set.py +1 -1
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_record.py +6 -4
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_context.py +1 -1
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_django.py +19 -5
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_feature_manager.py +4 -2
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_label_manager.py +70 -93
- lamindb-0.76.13/lamindb/core/schema.py +95 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/pyproject.toml +1 -1
- lamindb-0.76.13/sub/lamin-cli/lamin_cli/__init__.py +3 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/pyproject.toml +1 -1
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/02-connect-local-instance.ipynb +0 -23
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/08-test-multi-session.ipynb +7 -3
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/__init__.py +1 -1
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_connect_instance.py +8 -2
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_init_instance.py +21 -9
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_storage.py +2 -2
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/django.py +11 -1
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_edge_request.py +1 -1
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_init_instance.py +6 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_artifact.py +4 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_parents.py +15 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_record.py +5 -0
- lamindb-0.76.12/lamindb/core/schema.py +0 -56
- lamindb-0.76.12/sub/lamin-cli/lamin_cli/__init__.py +0 -3
- {lamindb-0.76.12 → lamindb-0.76.13}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/.github/ISSUE_TEMPLATE/usage_question.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/.github/workflows/build.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/.gitignore +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/.gitmodules +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/CONTRIBUTING.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/LICENSE +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/README.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/api.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/arrays.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/bio-registries.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/bionty.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/changelog.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/clinicore.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/curate-any.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/curate-df.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/curate.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/acid.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/delete.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/import-schema.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/keep-artifacts-local.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/key.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/reference-field.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/test_notebooks.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/track-run-inputs.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq/visibility.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/faq.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/findrefs.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/guide.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/includes/features-lamindb.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/includes/features-laminhub.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/includes/installation.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/index.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/introduction.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/lamindb.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/laminr.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/query-search.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/registries.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/rest.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/schemas.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/scripts/run-track-with-params.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/scripts/synced-with-git.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/setup.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/signup-login.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/add-replace-cache.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/anndata-accessor.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/prepare-transfer-local-to-cloud.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/test-files/iris.csv +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/test-files/iris.data +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/test-files/new_iris.csv +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/test_notebooks.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/transfer-local-to-cloud.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/upload.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage/vitessce.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/storage.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/test_notebooks.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/track.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/transfer.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/tutorial2.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/docs/wetlab.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_can_validate.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_curate.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_feature.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_filter.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_finish.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_from_values.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_is_versioned.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_run.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_save.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_storage.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_transform.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_ulabel.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_utils.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/_view.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_data.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_mapped_collection.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_settings.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_sync_git.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/_track_environment.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/datasets/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/datasets/_core.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/datasets/_fake.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/exceptions.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/fields.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/loaders.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_anndata_accessor.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_anndata_sizes.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_backed_access.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_tiledbsoma.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_valid_suffixes.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/_zarr.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/objects.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/storage/paths.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/subsettings/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/subsettings/_creation_settings.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/subsettings/_transform_settings.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/types.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/core/versioning.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/integrations/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/integrations/_vitessce.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/setup/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/lamindb/setup/core/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/noxfile.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/.github/workflows/build.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/.github/workflows/update_ontologies.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/.gitignore +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/LICENSE +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/README.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/_bionty.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/_display_sources.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/_ontology.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/_public_ontology.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/_settings.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/_sync_sources.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/dev/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/dev/_handle_sources.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/dev/_io.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/dev/_md5.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_bfxpipeline.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_biosample.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_cellline.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_cellmarker.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_celltype.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_developmentalstage.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_disease.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_drug.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_ethnicity.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_experimentalfactor.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_gene.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_organism.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_pathway.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_phenotype.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_protein.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_shared_docstrings.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/entities/_tissue.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/bfxpipelines_info/custom_pipelines.json +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/check_ontologies_reachable.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/determine_md5s.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/generate_bfxpipelines.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/update_new_ontologies.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/scripts/upload_new_ontologies.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/base/sources.yaml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/core/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/core/_add_ontology.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/core/_bionty.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/core/_settings.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/ids.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0023_rename_publicsource_encode_uid.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0024_remove_cellline_collections_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0025_artifactcellline_alter_cellline_artifacts_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0026_artifactcellline_cell_line_ref_is_name_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0027_remove_artifactcellline_created_at_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0028_artifactcellline_created_at_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0028_squashed.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0029_alter_cellline_previous_runs_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0030_rename_publicsource_source_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0031_alter_cellmarker_name_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0032_rename_source_name_source_description_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0033_alter_artifactcellline_artifact_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0034_alter_source_unique_together.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0035_alter_protein_gene_symbol.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0036_alter_source_artifacts_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0037_alter_cellline_source_alter_cellmarker_source_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0038_alter_artifactcellline_created_by_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/0039_alter_cellline_source_alter_cellmarker_source_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/migrations/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/bionty/models.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/guide/concepts.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/guide/config.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/guide/extend.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/guide/test_notebooks.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/guide.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/index.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/docs/reference.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/lamin-project.yaml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/noxfile.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/pyproject.toml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/dev/test_handle_sources.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/dev/test_io.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_bfxpipeline.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_biosample.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_cellline.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_cellmarker.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_celltype.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_developmentalstage.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_disease.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_drug.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_ethnicity.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_experimentalfactor.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_gene.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_organism.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_pathway.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_phenotype.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_protein.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/entities/test_tissue.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/test_bionty.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/test_lamindb.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/test_md5.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/bionty/tests/test_ontology.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/.github/workflows/build.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/.gitignore +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/LICENSE +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/README.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0001_initial.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0002_biosample_patient_biosample_project.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0003_alter_project_uid.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0004_remove_biosample_project_clinicaltrial_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0005_alter_biosample_created_by_alter_biosample_run_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/0006_artifactbiosample_artifactclinicaltrial_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/migrations/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/clinicore/models.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/docs/changelog.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/docs/guide.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/docs/index.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/docs/quickstart.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/docs/reference.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/noxfile.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/pyproject.toml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/clinicore/tests/test_notebooks.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/.github/workflows/build.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/.gitignore +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/LICENSE +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/README.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/findrefs/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/findrefs/migrations/0001_initial.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/findrefs/migrations/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/findrefs/models.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/noxfile.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/pyproject.toml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/findrefs/tests/test_integrity.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/.gitignore +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/LICENSE +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/README.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/__main__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/_cache.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/_load.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/_migration.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/_save.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/lamin_cli/_settings.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/conftest.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/notebooks/not-initialized.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-consecutive.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-non-consecutive.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/scripts/merely-import-lamindb.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/scripts/run-track-and-finish-sync-git.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/scripts/run-track-and-finish.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/scripts/run-track-with-params.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_cli.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_load.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_migrate.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_multi_process.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_save_files.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_save_notebooks.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamin-cli/tests/test_save_scripts.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/.github/workflows/build.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/.gitignore +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/LICENSE +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/README.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/changelog.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/01-init-local-instance.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/03-add-managed-storage.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/04-test-bionty.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/05-init-hosted-instance.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/06-connect-hosted-instance.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/07-keep-artifacts-local.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-cloud/test_notebooks.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-cache-management.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-cloud-sync.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-connect-anonymously.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-empty-init.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-import-schema.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-init-load-local-anonymously.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-insufficient-user-info.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-invalid-schema.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test-sqlite-lock.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/hub-prod/test_notebooks2.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/index.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/notebooks.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/docs/reference.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_cache.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_check.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_check_setup.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_close.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_delete.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_django.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_entry_points.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_exportdb.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_importdb.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_migrate.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_register_instance.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_schema.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_schema_metadata.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_set_managed_storage.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_setup_user.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/_silence_loggers.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_aws_credentials.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_aws_storage.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_deprecated.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_docs.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_hub_client.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_hub_core.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_hub_crud.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_hub_utils.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_private_django_api.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_instance.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_load.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_save.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_store.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_settings_user.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/_setup_bionty_sources.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/cloud_sqlite_locker.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/exceptions.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/hashing.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/types.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/lamindb_setup/core/upath.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/noxfile.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/pyproject.toml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/scripts/script-init-pass-user-no-writes.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/scripts/script-to-fail-managed-storage.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_connect_instance.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_delete_instance.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_fail_managed_storage.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_init_pass_user_no_writes.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_login.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_migrate.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-cloud/test_set_storage.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-local/conftest.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-local/test_all.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-local/test_update_schema_in_hub.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-prod/conftest.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-prod/test_django.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-prod/test_global_settings.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-prod/test_switch_and_fallback_env.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/hub-prod/test_upath.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_entry_point.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_hashing.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_storage_access.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_storage_basis.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_storage_stats.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lamindb-setup/tests/storage/test_to_url.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/.github/workflows/build.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/.gitignore +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/CHANGELOG.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/LICENSE +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/README.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/ids.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0037_rename_dataset_to_collection.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0038_alter_collection_artifact_alter_collection_artifacts_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0039_remove_collection_artifacts_collectionartifact_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0040_alter_transform_type.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0041_remove_transform_short_name_transform_description_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0042_rename_run_at_run_started_at_run_finished_at.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0043_run_json.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0044_run_replicated_outputs_transform_ulabels_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0045_rename_replicated_outputs_run_replicated_output_artifacts_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0046_storage_instance_uid.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0047_featurevalue_artifactfeaturevalue_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0048_alter_artifactulabel_feature_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0049_rename_type_feature_dtype_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0050_artifactfeatureset_feature_ref_is_semantic_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0051_remove_feature_feature_sets_featuresetfeature_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0052_rename_feature_value_artifactfeaturevalue_featurevalue_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0052_squashed.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0053_alter_featureset_hash_alter_paramvalue_created_by_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0054_alter_feature_previous_runs_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0055_artifact_type_artifactparamvalue_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0056_rename_ulabel_ref_is_name_artifactulabel_label_ref_is_name_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0057_link_models_latest_report_and_others.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0058_artifact__actions_collection__actions.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0059_alter_artifact__accessor_alter_artifact__hash_type_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0060_alter_artifact__actions.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0061_alter_collection_meta_artifact_alter_run_environment_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0062_add_is_latest_field.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0063_populate_latest_field.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0064_alter_artifact_version_alter_collection_version_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0065_remove_collection_feature_sets_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0066_alter_artifact__feature_values_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/0067_alter_featurevalue_unique_together_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/migrations/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/mocks.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/models.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/types.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/lnschema_core/users.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/noxfile.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/pyproject.toml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/tests/conftest.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/tests/test_integrity.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/tests/test_models.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/lnschema-core/tests/test_types.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/.github/workflows/build.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/.gitignore +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/README.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/changelog.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/guide/get-started.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/guide/modeling_perturbations.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/guide.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/index.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/docs/reference.md +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/noxfile.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/pyproject.toml +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/tests/test_integrity.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/tests/test_notebooks.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0017_remove_biosample_artifacts.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0018_squashed.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0018_well_created_at_well_created_by_well_updated_at.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0019_alter_treatment_system.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0020_treatmenttarget_pathways_treatmenttarget_proteins_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0021_alter_compoundtreatment_duration_unit_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0022_remove_experiment_experiment_type_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0023_compoundtreatment_duration_and_more.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/0024_compound_chembl_id.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/migrations/__init__.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/sub/wetlab/wetlab/models.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/conftest.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/notebooks/duplicate/with-title-initialized-consecutive-finish.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/notebooks/no-title.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/notebooks/not-initialized.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/notebooks/with-title-initialized-consecutive-finish-not-last-cell.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/notebooks/with-title-initialized-consecutive-finish.ipynb +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/scripts/duplicate1/script-to-test-versioning.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/scripts/duplicate2/script-to-test-versioning.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/scripts/duplicate3/script-to-test-versioning.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/scripts/script-to-test-filename-change.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/scripts/script-to-test-versioning.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_artifact_folders.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_cache.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_can_validate.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_collection.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_context.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_curate.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_data.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_db.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_delete.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_feature.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_feature_manager.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_feature_set.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_from_values.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_label_manager.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_load.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_manager.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_notebooks.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_queryset.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_run.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_save.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_search.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_settings.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_transform.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_uid.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_ulabel.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_versioning.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_view.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/core/test_visibility.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/storage/conftest.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/storage/test_storage.py +0 -0
- {lamindb-0.76.12 → lamindb-0.76.13}/tests/storage/test_transfer.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.76.
|
3
|
+
Version: 0.76.13
|
4
4
|
Summary: A data framework for biology.
|
5
5
|
Author-email: Lamin Labs <open-source@lamin.ai>
|
6
6
|
Requires-Python: >=3.9
|
@@ -10,7 +10,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.11
|
11
11
|
Requires-Dist: lnschema_core==0.75.0
|
12
12
|
Requires-Dist: lamin_utils==0.13.6
|
13
|
-
Requires-Dist: lamin_cli==0.
|
13
|
+
Requires-Dist: lamin_cli==0.19.0
|
14
14
|
Requires-Dist: lamindb_setup
|
15
15
|
Requires-Dist: rapidfuzz
|
16
16
|
Requires-Dist: pyarrow
|
@@ -70,7 +70,6 @@
|
|
70
70
|
"import lamindb as ln\n",
|
71
71
|
"import pytest\n",
|
72
72
|
"\n",
|
73
|
-
"ln.settings.verbosity = \"hint\"\n",
|
74
73
|
"ln.track(\"ANW20Fr4eZgM0000\")"
|
75
74
|
]
|
76
75
|
},
|
@@ -301,8 +300,7 @@
|
|
301
300
|
"metadata": {},
|
302
301
|
"outputs": [],
|
303
302
|
"source": [
|
304
|
-
"artifact = ln.Artifact(filepath, description=\"My fcs artifact\")
|
305
|
-
"artifact.save()"
|
303
|
+
"artifact = ln.Artifact(filepath, description=\"My fcs artifact\").save()"
|
306
304
|
]
|
307
305
|
},
|
308
306
|
{
|
@@ -316,7 +314,9 @@
|
|
316
314
|
},
|
317
315
|
"outputs": [],
|
318
316
|
"source": [
|
319
|
-
"assert artifact.hash == \"KCEXRahJ-Ui9Y6nksQ8z1A\""
|
317
|
+
"assert artifact.hash == \"KCEXRahJ-Ui9Y6nksQ8z1A\"\n",
|
318
|
+
"assert artifact.run == ln.context.run\n",
|
319
|
+
"assert len(artifact._previous_runs.all()) == 0"
|
320
320
|
]
|
321
321
|
},
|
322
322
|
{
|
@@ -355,7 +355,8 @@
|
|
355
355
|
"outputs": [],
|
356
356
|
"source": [
|
357
357
|
"assert artifact.id == artifact2.id\n",
|
358
|
-
"assert artifact.run == artifact2.run"
|
358
|
+
"assert artifact.run == artifact2.run\n",
|
359
|
+
"assert len(artifact._previous_runs.all()) == 0"
|
359
360
|
]
|
360
361
|
},
|
361
362
|
{
|
@@ -485,8 +486,7 @@
|
|
485
486
|
"metadata": {},
|
486
487
|
"outputs": [],
|
487
488
|
"source": [
|
488
|
-
"artifact4 = ln.Artifact(filepath, description=\"My new fcs artifact\")
|
489
|
-
"artifact4.save()"
|
489
|
+
"artifact4 = ln.Artifact(filepath, description=\"My new fcs artifact\").save()"
|
490
490
|
]
|
491
491
|
},
|
492
492
|
{
|
@@ -543,6 +543,7 @@
|
|
543
543
|
},
|
544
544
|
"outputs": [],
|
545
545
|
"source": [
|
546
|
+
"!rm -rf ./test-idempotency\n",
|
546
547
|
"!lamin delete --force test-idempotency"
|
547
548
|
]
|
548
549
|
}
|
@@ -100,7 +100,9 @@
|
|
100
100
|
"metadata": {},
|
101
101
|
"outputs": [],
|
102
102
|
"source": [
|
103
|
-
"
|
103
|
+
"from lamindb_setup._init_instance import CannotSwitchDefaultInstance\n",
|
104
|
+
"\n",
|
105
|
+
"with pytest.raises(CannotSwitchDefaultInstance):\n",
|
104
106
|
" ln.setup.init(storage=\"./testsetup2\")"
|
105
107
|
]
|
106
108
|
},
|
@@ -575,7 +575,6 @@
|
|
575
575
|
"ln.Artifact.filter(\n",
|
576
576
|
" created_by=users.anonymous,\n",
|
577
577
|
" transform=transform,\n",
|
578
|
-
" suffix=\".csv\",\n",
|
579
578
|
").df().head()"
|
580
579
|
]
|
581
580
|
},
|
@@ -596,7 +595,7 @@
|
|
596
595
|
},
|
597
596
|
"outputs": [],
|
598
597
|
"source": [
|
599
|
-
"ln.Artifact.filter(key__startswith=\"iris_studies/study0_raw_images
|
598
|
+
"ln.Artifact.filter(key__startswith=\"iris_studies/study0_raw_images\").df().head()"
|
600
599
|
]
|
601
600
|
},
|
602
601
|
{
|
@@ -331,9 +331,10 @@ def get_artifact_kwargs_from_data(
|
|
331
331
|
artifact = stat_or_artifact
|
332
332
|
# update the run of the existing artifact
|
333
333
|
if run is not None:
|
334
|
-
# save the information that this artifact was previously
|
335
|
-
#
|
336
|
-
|
334
|
+
# save the information that this artifact was previously produced by
|
335
|
+
# another run
|
336
|
+
# note: same logic exists for _output_collections_with_later_updates
|
337
|
+
if artifact.run is not None and artifact.run != run:
|
337
338
|
artifact.run._output_artifacts_with_later_updates.add(artifact)
|
338
339
|
# update the run of the artifact with the latest run
|
339
340
|
stat_or_artifact.run = run
|
@@ -145,15 +145,16 @@ def __init__(
|
|
145
145
|
logger.warning(
|
146
146
|
f"returning existing collection with same hash: {existing_collection}"
|
147
147
|
)
|
148
|
-
# update the run of the existing
|
148
|
+
# update the run of the existing collection
|
149
149
|
if run is not None:
|
150
|
-
# save the information that this
|
151
|
-
#
|
152
|
-
|
150
|
+
# save the information that this collection was previously produced
|
151
|
+
# by another run
|
152
|
+
# note: same logic exists for _output_artifacts_with_later_updates
|
153
|
+
if existing_collection.run is not None and existing_collection.run != run:
|
153
154
|
existing_collection.run._output_collections_with_later_updates.add(
|
154
155
|
existing_collection
|
155
156
|
)
|
156
|
-
# update the run of the
|
157
|
+
# update the run of the collection with the latest run
|
157
158
|
existing_collection.run = run
|
158
159
|
existing_collection.transform = run.transform
|
159
160
|
init_self_from_db(collection, existing_collection)
|
@@ -216,7 +216,9 @@ def members(self) -> QuerySet:
|
|
216
216
|
|
217
217
|
|
218
218
|
def _get_related_name(self: FeatureSet) -> str:
|
219
|
-
feature_sets_related_models = dict_related_model_to_related_name(
|
219
|
+
feature_sets_related_models = dict_related_model_to_related_name(
|
220
|
+
self, instance=self._state.db
|
221
|
+
)
|
220
222
|
related_name = feature_sets_related_models.get(self.registry)
|
221
223
|
return related_name
|
222
224
|
|
@@ -310,7 +310,12 @@ def _record_label(record: Record, field: str | None = None):
|
|
310
310
|
rf' FACE="Monospace">uid={record.uid}<BR/>version={record.version}</FONT>>'
|
311
311
|
)
|
312
312
|
elif isinstance(record, Run):
|
313
|
-
|
313
|
+
if record.transform.name:
|
314
|
+
name = f'{record.transform.name.replace("&", "&")}'
|
315
|
+
elif record.transform.key:
|
316
|
+
name = f'{record.transform.key.replace("&", "&")}'
|
317
|
+
else:
|
318
|
+
name = f"{record.transform.uid}"
|
314
319
|
user_display = (
|
315
320
|
record.created_by.handle
|
316
321
|
if record.created_by.name is None
|
@@ -365,7 +370,6 @@ def _get_all_parent_runs(data: Artifact | Collection) -> list:
|
|
365
370
|
inputs_run += (
|
366
371
|
r.input_collections.all().filter(visibility__in=[0, 1]).list()
|
367
372
|
)
|
368
|
-
run_inputs_outputs += [(inputs_run, r)]
|
369
373
|
outputs_run = (
|
370
374
|
r.__getattribute__(f"output_{name}s")
|
371
375
|
.all()
|
@@ -376,7 +380,18 @@ def _get_all_parent_runs(data: Artifact | Collection) -> list:
|
|
376
380
|
outputs_run += (
|
377
381
|
r.output_collections.all().filter(visibility__in=[0, 1]).list()
|
378
382
|
)
|
379
|
-
|
383
|
+
# if inputs are outputs artifacts are the same, will result infinite loop
|
384
|
+
# so only show as outputs
|
385
|
+
overlap = set(inputs_run).intersection(outputs_run)
|
386
|
+
if overlap:
|
387
|
+
logger.warning(
|
388
|
+
f"The following artifacts are both inputs and outputs of Run(uid={r.uid}): {overlap}\n → Only showing as outputs."
|
389
|
+
)
|
390
|
+
inputs_run = list(set(inputs_run) - overlap)
|
391
|
+
if len(inputs_run) > 0:
|
392
|
+
run_inputs_outputs += [(inputs_run, r)]
|
393
|
+
if len(outputs_run) > 0:
|
394
|
+
run_inputs_outputs += [(r, outputs_run)]
|
380
395
|
inputs += inputs_run
|
381
396
|
runs = [f.run for f in inputs if f.run is not None]
|
382
397
|
return run_inputs_outputs
|
@@ -98,26 +98,11 @@ class QueryManager(models.Manager):
|
|
98
98
|
|
99
99
|
return _lookup(cls=self.all(), field=field, **kwargs)
|
100
100
|
|
101
|
-
def __getitem__(self, item: str):
|
102
|
-
try:
|
103
|
-
source_field_name = self.source_field_name
|
104
|
-
target_field_name = self.target_field_name
|
105
|
-
|
106
|
-
if (
|
107
|
-
source_field_name in {"artifact", "collection"}
|
108
|
-
and target_field_name == "feature_set"
|
109
|
-
):
|
110
|
-
return get_feature_set_by_slot_(host=self.instance).get(item)
|
111
|
-
|
112
|
-
except Exception: # pragma: no cover
|
113
|
-
return
|
114
|
-
|
115
101
|
|
116
102
|
models.Manager.list = QueryManager.list
|
117
103
|
models.Manager.df = QueryManager.df
|
118
104
|
models.Manager.search = QueryManager.search
|
119
105
|
models.Manager.lookup = QueryManager.lookup
|
120
|
-
models.Manager.__getitem__ = QueryManager.__getitem__
|
121
106
|
models.Manager._track_run_input_manager = QueryManager._track_run_input_manager
|
122
107
|
# the two lines below would be easy if we could actually inherit; like this,
|
123
108
|
# they're suboptimal
|
@@ -115,7 +115,7 @@ def get(
|
|
115
115
|
else:
|
116
116
|
assert idlike is None # noqa: S101
|
117
117
|
expressions = process_expressions(registry, expressions)
|
118
|
-
return registry.objects.get(**expressions)
|
118
|
+
return registry.objects.using(qs.db).get(**expressions)
|
119
119
|
|
120
120
|
|
121
121
|
class RecordsList(UserList):
|
@@ -376,6 +376,8 @@ def using(
|
|
376
376
|
instance: str | None,
|
377
377
|
) -> QuerySet:
|
378
378
|
"""{}""" # noqa: D415
|
379
|
+
from ._query_set import QuerySet
|
380
|
+
|
379
381
|
if instance is None:
|
380
382
|
return QuerySet(model=cls, using=None)
|
381
383
|
owner, name = get_owner_name_from_identifier(instance)
|
@@ -395,15 +397,15 @@ def using(
|
|
395
397
|
if not source_schema.issubset(target_schema):
|
396
398
|
missing_members = source_schema - target_schema
|
397
399
|
logger.warning(
|
398
|
-
f"source schema has additional modules: {missing_members}\nconsider mounting these schema modules to
|
400
|
+
f"source schema has additional modules: {missing_members}\nconsider mounting these schema modules to transfer all metadata"
|
399
401
|
)
|
400
|
-
cache_filepath.write_text(iresult[
|
402
|
+
cache_filepath.write_text(f"{iresult['lnid']}\n{iresult['schema_str']}") # type: ignore
|
401
403
|
settings_file = instance_settings_file(name, owner)
|
402
404
|
db = update_db_using_local(iresult, settings_file)
|
403
405
|
else:
|
404
406
|
isettings = load_instance_settings(settings_file)
|
405
407
|
db = isettings.db
|
406
|
-
cache_filepath.write_text(isettings.uid)
|
408
|
+
cache_filepath.write_text(f"{isettings.uid}\n{','.join(isettings.schema)}") # type: ignore
|
407
409
|
add_db_connection(db, instance)
|
408
410
|
return QuerySet(model=cls, using=instance)
|
409
411
|
|
@@ -470,7 +472,7 @@ def get_transfer_run(record) -> Run:
|
|
470
472
|
cache_filepath = ln_setup.settings.cache_dir / f"instance--{owner}--{name}--uid.txt"
|
471
473
|
if not cache_filepath.exists():
|
472
474
|
raise SystemExit("Need to call .using() before")
|
473
|
-
instance_uid = cache_filepath.read_text()
|
475
|
+
instance_uid = cache_filepath.read_text().split("\n")[0]
|
474
476
|
key = f"transfers/{instance_uid}"
|
475
477
|
uid = instance_uid + "0000"
|
476
478
|
transform = Transform.filter(uid=uid).one_or_none()
|
@@ -438,7 +438,7 @@ class Context:
|
|
438
438
|
)
|
439
439
|
return (
|
440
440
|
f'Filename "{key}" clashes with the existing key "{transform.key}" for uid "{transform.uid[:-4]}...."\n\nEither init a new transform with a new uid:\n\n'
|
441
|
-
f'ln.track("{ids.base62_12()}0000)
|
441
|
+
f'ln.track("{ids.base62_12()}0000")\n\n{update_key_note}'
|
442
442
|
)
|
443
443
|
|
444
444
|
# make a new transform record
|
@@ -6,7 +6,7 @@ from django.db.models.fields.reverse_related import ManyToManyRel, ManyToOneRel
|
|
6
6
|
from django.db.models.functions import JSONObject
|
7
7
|
from lnschema_core.models import Artifact, FeatureSet, Record
|
8
8
|
|
9
|
-
from .schema import dict_related_model_to_related_name
|
9
|
+
from .schema import dict_related_model_to_related_name, get_schemas_modules
|
10
10
|
|
11
11
|
|
12
12
|
def get_related_model(model, field_name):
|
@@ -35,22 +35,36 @@ def get_artifact_with_related(
|
|
35
35
|
"""Fetch an artifact with its related data."""
|
36
36
|
from lamindb._can_validate import get_name_field
|
37
37
|
|
38
|
+
from ._label_manager import LABELS_EXCLUDE_SET
|
39
|
+
|
38
40
|
model = artifact.__class__
|
39
|
-
|
41
|
+
schema_modules = get_schemas_modules(artifact._state.db)
|
42
|
+
|
43
|
+
foreign_key_fields = [
|
44
|
+
f.name
|
45
|
+
for f in model._meta.fields
|
46
|
+
if f.is_relation and f.related_model.__get_schema_name__() in schema_modules
|
47
|
+
]
|
40
48
|
|
41
49
|
m2m_relations = (
|
42
50
|
[]
|
43
51
|
if not include_m2m
|
44
52
|
else [
|
45
53
|
v
|
46
|
-
for v in dict_related_model_to_related_name(
|
47
|
-
|
54
|
+
for v in dict_related_model_to_related_name(
|
55
|
+
model, instance=artifact._state.db
|
56
|
+
).values()
|
57
|
+
if not v.startswith("_") and v not in LABELS_EXCLUDE_SET
|
48
58
|
]
|
49
59
|
)
|
50
60
|
link_tables = (
|
51
61
|
[]
|
52
62
|
if not include_feature_link
|
53
|
-
else list(
|
63
|
+
else list(
|
64
|
+
dict_related_model_to_related_name(
|
65
|
+
model, links=True, instance=artifact._state.db
|
66
|
+
).values()
|
67
|
+
)
|
54
68
|
)
|
55
69
|
|
56
70
|
# Clear previous queries
|
@@ -216,9 +216,11 @@ def _print_categoricals(
|
|
216
216
|
if not print_params:
|
217
217
|
labels_msg = ""
|
218
218
|
labels_by_feature = defaultdict(list)
|
219
|
-
for _, (_, links) in get_labels_as_dict(
|
219
|
+
for _, (_, links) in get_labels_as_dict(
|
220
|
+
self, links=True, instance=self._state.db
|
221
|
+
).items():
|
220
222
|
for link in links:
|
221
|
-
if link.feature_id is not None:
|
223
|
+
if hasattr(link, "feature_id") and link.feature_id is not None:
|
222
224
|
link_attr = get_link_attr(link, self)
|
223
225
|
labels_by_feature[link.feature_id].append(
|
224
226
|
getattr(link, link_attr).name
|
@@ -26,32 +26,19 @@ if TYPE_CHECKING:
|
|
26
26
|
|
27
27
|
from lamindb._query_set import QuerySet
|
28
28
|
|
29
|
+
LABELS_EXCLUDE_SET = {"feature_sets"}
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
"input_of_runs",
|
35
|
-
"collections",
|
36
|
-
"_source_code_artifact_of",
|
37
|
-
"_report_of",
|
38
|
-
"_environment_of",
|
39
|
-
"links_collection",
|
40
|
-
"links_artifact",
|
41
|
-
"links_feature_set",
|
42
|
-
"previous_runs",
|
43
|
-
"_feature_values",
|
44
|
-
"_action_targets",
|
45
|
-
"_lnschema_core_collection__actions_+", # something seems off with this one
|
46
|
-
"_actions",
|
47
|
-
}
|
31
|
+
|
32
|
+
def get_labels_as_dict(
|
33
|
+
self: Artifact | Collection, links: bool = False, instance: str | None = None
|
34
|
+
) -> dict:
|
48
35
|
labels = {} # type: ignore
|
49
36
|
if self.id is None:
|
50
37
|
return labels
|
51
38
|
for related_model_name, related_name in dict_related_model_to_related_name(
|
52
|
-
self.__class__, links=links
|
39
|
+
self.__class__, links=links, instance=instance
|
53
40
|
).items():
|
54
|
-
if related_name not in
|
41
|
+
if related_name not in LABELS_EXCLUDE_SET and not related_name.startswith("_"):
|
55
42
|
labels[related_name] = (
|
56
43
|
related_model_name,
|
57
44
|
getattr(self, related_name).all(),
|
@@ -86,18 +73,15 @@ def print_labels(
|
|
86
73
|
labels_msg = _print_labels_postgres(self, m2m_data, print_types)
|
87
74
|
else:
|
88
75
|
labels_msg = ""
|
89
|
-
for related_name, (related_model, labels) in get_labels_as_dict(
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
labels_msg += f" .{related_name}{type_str} = {print_values}\n"
|
99
|
-
except Exception: # noqa: S112
|
100
|
-
continue
|
76
|
+
for related_name, (related_model, labels) in get_labels_as_dict(
|
77
|
+
self, instance=self._state.db
|
78
|
+
).items():
|
79
|
+
field = get_name_field(labels)
|
80
|
+
labels_list = list(labels.values_list(field, flat=True))
|
81
|
+
if len(labels_list) > 0:
|
82
|
+
print_values = _print_values(labels_list, n=10)
|
83
|
+
type_str = f": {related_model}" if print_types else ""
|
84
|
+
labels_msg += f" .{related_name}{type_str} = {print_values}\n"
|
101
85
|
|
102
86
|
msg = ""
|
103
87
|
if labels_msg:
|
@@ -214,75 +198,68 @@ class LabelManager:
|
|
214
198
|
>>> artifact1.ulabels.set(labels)
|
215
199
|
>>> artifact2.labels.add_from(artifact1)
|
216
200
|
"""
|
217
|
-
from django.db.utils import ProgrammingError
|
218
|
-
|
219
201
|
if transfer_logs is None:
|
220
202
|
transfer_logs = {"mapped": [], "transferred": [], "run": None}
|
221
203
|
using_key = settings._using_key
|
222
|
-
for related_name, (_, labels) in get_labels_as_dict(
|
204
|
+
for related_name, (_, labels) in get_labels_as_dict(
|
205
|
+
data, instance=self._host._state.db
|
206
|
+
).items():
|
223
207
|
labels = labels.all()
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
208
|
+
if not labels.exists():
|
209
|
+
continue
|
210
|
+
# look for features
|
211
|
+
data_name_lower = data.__class__.__name__.lower()
|
212
|
+
labels_by_features = defaultdict(list)
|
213
|
+
features = set()
|
214
|
+
_, new_labels = validate_labels(labels)
|
215
|
+
if len(new_labels) > 0:
|
216
|
+
transfer_fk_to_default_db_bulk(
|
217
|
+
new_labels, using_key, transfer_logs=transfer_logs
|
218
|
+
)
|
219
|
+
for label in labels:
|
220
|
+
# if the link table doesn't follow this convention, we'll ignore it
|
221
|
+
if not hasattr(label, f"links_{data_name_lower}"):
|
222
|
+
key = None
|
223
|
+
else:
|
224
|
+
link = getattr(label, f"links_{data_name_lower}").get(
|
225
|
+
**{f"{data_name_lower}_id": data.id}
|
235
226
|
)
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
key = None
|
227
|
+
if link.feature is not None:
|
228
|
+
features.add(link.feature)
|
229
|
+
key = link.feature.name
|
240
230
|
else:
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
231
|
+
key = None
|
232
|
+
label_returned = transfer_to_default_db(
|
233
|
+
label,
|
234
|
+
using_key,
|
235
|
+
transfer_logs=transfer_logs,
|
236
|
+
transfer_fk=False,
|
237
|
+
save=True,
|
238
|
+
)
|
239
|
+
# TODO: refactor return value of transfer to default db
|
240
|
+
if label_returned is not None:
|
241
|
+
label = label_returned
|
242
|
+
labels_by_features[key].append(label)
|
243
|
+
# treat features
|
244
|
+
_, new_features = validate_labels(list(features))
|
245
|
+
if len(new_features) > 0:
|
246
|
+
transfer_fk_to_default_db_bulk(
|
247
|
+
new_features, using_key, transfer_logs=transfer_logs
|
248
|
+
)
|
249
|
+
for feature in new_features:
|
250
|
+
transfer_to_default_db(
|
251
|
+
feature,
|
251
252
|
using_key,
|
252
253
|
transfer_logs=transfer_logs,
|
253
254
|
transfer_fk=False,
|
254
|
-
save=True,
|
255
255
|
)
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
256
|
+
save(new_features)
|
257
|
+
if hasattr(self._host, related_name):
|
258
|
+
for feature_name, labels in labels_by_features.items():
|
259
|
+
if feature_name is not None:
|
260
|
+
feature_id = Feature.get(name=feature_name).id
|
261
|
+
else:
|
262
|
+
feature_id = None
|
263
|
+
getattr(self._host, related_name).add(
|
264
|
+
*labels, through_defaults={"feature_id": feature_id}
|
265
265
|
)
|
266
|
-
for feature in new_features:
|
267
|
-
transfer_to_default_db(
|
268
|
-
feature,
|
269
|
-
using_key,
|
270
|
-
transfer_logs=transfer_logs,
|
271
|
-
transfer_fk=False,
|
272
|
-
)
|
273
|
-
save(new_features)
|
274
|
-
if hasattr(self._host, related_name):
|
275
|
-
for feature_name, labels in labels_by_features.items():
|
276
|
-
if feature_name is not None:
|
277
|
-
feature_id = Feature.get(name=feature_name).id
|
278
|
-
else:
|
279
|
-
feature_id = None
|
280
|
-
getattr(self._host, related_name).add(
|
281
|
-
*labels, through_defaults={"feature_id": feature_id}
|
282
|
-
)
|
283
|
-
# ProgrammingError is raised when schemas don't match between source and target instances
|
284
|
-
except ProgrammingError:
|
285
|
-
logger.warning(
|
286
|
-
f"{related_name} labels cannot be transferred because schema module does not exist in target instance: {labels}"
|
287
|
-
)
|
288
|
-
continue
|
@@ -0,0 +1,95 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import lamindb_setup as ln_setup
|
4
|
+
from django.db.models import ManyToManyField
|
5
|
+
from lamindb_setup._connect_instance import (
|
6
|
+
get_owner_name_from_identifier,
|
7
|
+
load_instance_settings,
|
8
|
+
)
|
9
|
+
from lamindb_setup.core._settings_store import instance_settings_file
|
10
|
+
from lnschema_core.models import Feature, FeatureSet, LinkORM, Record
|
11
|
+
|
12
|
+
|
13
|
+
def get_schemas_modules(instance: str | None) -> set[str]:
|
14
|
+
if instance is None or instance == "default":
|
15
|
+
schema_modules = set(ln_setup.settings.instance.schema)
|
16
|
+
schema_modules.add("core")
|
17
|
+
return schema_modules
|
18
|
+
owner, name = get_owner_name_from_identifier(instance)
|
19
|
+
settings_file = instance_settings_file(name, owner)
|
20
|
+
if settings_file.exists():
|
21
|
+
schema = set(load_instance_settings(settings_file).schema)
|
22
|
+
else:
|
23
|
+
cache_filepath = (
|
24
|
+
ln_setup.settings.cache_dir / f"instance--{owner}--{name}--uid.txt"
|
25
|
+
)
|
26
|
+
if cache_filepath.exists():
|
27
|
+
schema = set(cache_filepath.read_text().split("\n")[1].split(","))
|
28
|
+
else:
|
29
|
+
raise ValueError(f"Instance {instance} not found")
|
30
|
+
shared_schema_modules = set(ln_setup.settings.instance.schema).intersection(schema)
|
31
|
+
shared_schema_modules.add("core")
|
32
|
+
return shared_schema_modules
|
33
|
+
|
34
|
+
|
35
|
+
def dict_schema_name_to_model_name(
|
36
|
+
registry: type[Record], instance: str | None = None
|
37
|
+
) -> dict[str, Record]:
|
38
|
+
schema_modules = get_schemas_modules(instance)
|
39
|
+
d: dict = {
|
40
|
+
i.related_model.__get_name_with_schema__(): i.related_model
|
41
|
+
for i in registry._meta.related_objects
|
42
|
+
if i.related_name is not None
|
43
|
+
and i.related_model.__get_schema_name__() in schema_modules
|
44
|
+
}
|
45
|
+
d.update(
|
46
|
+
{
|
47
|
+
i.related_model.__get_name_with_schema__(): i.related_model
|
48
|
+
for i in registry._meta.many_to_many
|
49
|
+
if i.name is not None
|
50
|
+
and i.related_model.__get_schema_name__() in schema_modules
|
51
|
+
}
|
52
|
+
)
|
53
|
+
return d
|
54
|
+
|
55
|
+
|
56
|
+
def dict_related_model_to_related_name(
|
57
|
+
registry: type[Record], links: bool = False, instance: str | None = None
|
58
|
+
) -> dict[str, str]:
|
59
|
+
def include(model: Record):
|
60
|
+
return not links != issubclass(model, LinkORM)
|
61
|
+
|
62
|
+
schema_modules = get_schemas_modules(instance)
|
63
|
+
|
64
|
+
related_objects = registry._meta.related_objects + registry._meta.many_to_many
|
65
|
+
d: dict = {
|
66
|
+
record.related_model.__get_name_with_schema__(): (
|
67
|
+
record.related_name
|
68
|
+
if not isinstance(record, ManyToManyField)
|
69
|
+
else record.name
|
70
|
+
)
|
71
|
+
for record in related_objects
|
72
|
+
if (
|
73
|
+
record.name is not None
|
74
|
+
and include(record.related_model)
|
75
|
+
and record.related_model.__get_schema_name__() in schema_modules
|
76
|
+
)
|
77
|
+
}
|
78
|
+
return d
|
79
|
+
|
80
|
+
|
81
|
+
def get_related_name(features_type: type[Record]) -> str:
|
82
|
+
candidates = [
|
83
|
+
field.related_name
|
84
|
+
for field in FeatureSet._meta.related_objects
|
85
|
+
if field.related_model == features_type
|
86
|
+
]
|
87
|
+
if not candidates:
|
88
|
+
raise ValueError(
|
89
|
+
f"Can't create feature sets from {features_type.__name__} because it's not"
|
90
|
+
" related to it!\nYou need to create a link model between FeatureSet and"
|
91
|
+
" your Record in your custom schema.\nTo do so, add a"
|
92
|
+
" line:\nfeature_sets = models.ManyToMany(FeatureSet,"
|
93
|
+
" related_name='mythings')\n"
|
94
|
+
)
|
95
|
+
return candidates[0]
|