lamindb 0.76.16__tar.gz → 0.77.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lamindb-0.76.16 → lamindb-0.77.0}/.github/workflows/build.yml +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/.gitignore +1 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/PKG-INFO +5 -5
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/bio-registries.ipynb +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/curate-any.ipynb +8 -8
- lamindb-0.77.0/docs/faq/validate-fields.ipynb +77 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq.md +1 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/storage/upload.ipynb +13 -20
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/__init__.py +2 -2
- lamindb-0.76.16/lamindb/_can_validate.py → lamindb-0.77.0/lamindb/_can_curate.py +7 -7
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_curate.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_parents.py +8 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_query_set.py +8 -8
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_record.py +74 -7
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/__init__.py +4 -2
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/_context.py +11 -6
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/_django.py +2 -2
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/_label_manager.py +2 -2
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/loaders.py +15 -5
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/storage/_zarr.py +8 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/noxfile.py +2 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/pyproject.toml +4 -4
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/.github/workflows/build.yml +33 -12
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/__init__.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/_bionty.py +4 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/_public_ontology.py +2 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/dev/_handle_sources.py +8 -8
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/dev/_io.py +5 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_bfxpipeline.py +1 -3
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_biosample.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_cellline.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_cellmarker.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_celltype.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_developmentalstage.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_disease.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_drug.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_ethnicity.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_experimentalfactor.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_gene.py +64 -22
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_organism.py +7 -5
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_pathway.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_phenotype.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_protein.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_shared_docstrings.py +1 -9
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/scripts/generate_bfxpipelines.py +3 -4
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/scripts/update_new_ontologies.py +1 -3
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/core/_add_ontology.py +3 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/core/_bionty.py +9 -4
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0028_squashed.py +14 -21
- lamindb-0.77.0/sub/bionty/bionty/migrations/0041_alter_artifactcellline_artifact_and_more.py +2404 -0
- lamindb-0.77.0/sub/bionty/bionty/migrations/0041_squashed.py +3008 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/models.py +202 -228
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/noxfile.py +2 -2
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/pyproject.toml +1 -0
- lamindb-0.77.0/sub/bionty/tests/dev/test_io.py +43 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_gene.py +16 -15
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/test_md5.py +1 -2
- lamindb-0.77.0/sub/bionty/tests/test_ontology.py +20 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/cellregistry/__init__.py +2 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/cellregistry/migrations/0001_initial.py +1 -1
- lamindb-0.77.0/sub/cellregistry/cellregistry/migrations/0002_alter_artifactcell_artifact_alter_artifactcell_cell_and_more.py +126 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/cellregistry/models.py +14 -17
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/.gitignore +1 -1
- {lamindb-0.76.16/sub/omop → lamindb-0.77.0/sub/clinicore}/.pre-commit-config.yaml +7 -7
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/clinicore/__init__.py +2 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/clinicore/migrations/0001_initial.py +5 -5
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/clinicore/migrations/0004_remove_biosample_project_clinicaltrial_and_more.py +1 -1
- lamindb-0.77.0/sub/clinicore/clinicore/migrations/0007_alter_artifactbiosample_artifact_and_more.py +865 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/clinicore/models.py +82 -101
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/pyproject.toml +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/.github/workflows/build.yml +3 -3
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/findrefs/__init__.py +3 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/findrefs/migrations/0001_initial.py +1 -1
- lamindb-0.77.0/sub/findrefs/findrefs/migrations/0002_alter_artifactreference_artifact_and_more.py +190 -0
- lamindb-0.77.0/sub/findrefs/findrefs/models.py +87 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/pyproject.toml +1 -1
- lamindb-0.77.0/sub/lamin-cli/lamin_cli/__init__.py +3 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/pyproject.toml +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/test_save_r_code.py +2 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/__init__.py +1 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/upath.py +7 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-cloud/test_fail_managed_storage.py +8 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/__init__.py +6 -3
- lamindb-0.77.0/sub/lnschema-core/lnschema_core/fields.py +280 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0052_squashed.py +4 -43
- lamindb-0.77.0/sub/lnschema-core/lnschema_core/migrations/0069_alter_artifact__accessor_alter_artifact__hash_type_and_more.py +1306 -0
- lamindb-0.77.0/sub/lnschema-core/lnschema_core/migrations/0069_squashed.py +1808 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/models.py +100 -90
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/types.py +1 -1
- lamindb-0.77.0/sub/lnschema-core/lnschema_core/validation.py +60 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/.gitignore +1 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/docs/changelog.md +1 -0
- lamindb-0.77.0/sub/omop/omop/migrations/0002_alter_caresite_options_alter_cdmsource_options_and_more.py +5222 -0
- lamindb-0.77.0/sub/omop/omop/models.py +1422 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/.github/workflows/build.yml +3 -3
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/ourprojects/__init__.py +3 -1
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/ourprojects/migrations/0001_initial.py +1 -1
- lamindb-0.77.0/sub/ourprojects/ourprojects/migrations/0002_alter_artifactproject_artifact_and_more.py +162 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/ourprojects/models.py +15 -15
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/.pre-commit-config.yaml +7 -7
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/docs/guide/get-started.ipynb +2 -2
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/docs/guide/modeling_perturbations.ipynb +12 -6
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/pyproject.toml +2 -2
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/wetlab/migrations/0018_squashed.py +8 -16
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/wetlab/migrations/0020_treatmenttarget_pathways_treatmenttarget_proteins_and_more.py +4 -4
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/wetlab/migrations/0022_remove_experiment_experiment_type_and_more.py +1 -1
- lamindb-0.77.0/sub/wetlab/wetlab/migrations/0025_alter_artifactbiosample_artifact_and_more.py +1461 -0
- lamindb-0.77.0/sub/wetlab/wetlab/migrations/0025_squashed.py +1806 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/wetlab/models.py +161 -171
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_artifact.py +2 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_parents.py +7 -2
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_record.py +14 -0
- lamindb-0.76.16/sub/bionty/bionty/migrations/0023_rename_publicsource_encode_uid.py +0 -1141
- lamindb-0.76.16/sub/bionty/bionty/migrations/0024_remove_cellline_collections_and_more.py +0 -64
- lamindb-0.76.16/sub/bionty/bionty/migrations/0025_artifactcellline_alter_cellline_artifacts_and_more.py +0 -829
- lamindb-0.76.16/sub/bionty/bionty/migrations/0026_artifactcellline_cell_line_ref_is_name_and_more.py +0 -520
- lamindb-0.76.16/sub/bionty/bionty/migrations/0027_remove_artifactcellline_created_at_and_more.py +0 -388
- lamindb-0.76.16/sub/bionty/bionty/migrations/0028_artifactcellline_created_at_and_more.py +0 -703
- lamindb-0.76.16/sub/bionty/tests/dev/test_io.py +0 -22
- lamindb-0.76.16/sub/bionty/tests/test_ontology.py +0 -11
- lamindb-0.76.16/sub/findrefs/findrefs/models.py +0 -72
- lamindb-0.76.16/sub/lamin-cli/lamin_cli/__init__.py +0 -3
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0037_rename_dataset_to_collection.py +0 -1151
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0038_alter_collection_artifact_alter_collection_artifacts_and_more.py +0 -87
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0039_remove_collection_artifacts_collectionartifact_and_more.py +0 -58
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0040_alter_transform_type.py +0 -32
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0041_remove_transform_short_name_transform_description_and_more.py +0 -103
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0042_rename_run_at_run_started_at_run_finished_at.py +0 -25
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0043_run_json.py +0 -17
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0044_run_replicated_outputs_transform_ulabels_and_more.py +0 -38
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0045_rename_replicated_outputs_run_replicated_output_artifacts_and_more.py +0 -24
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0046_storage_instance_uid.py +0 -40
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0047_featurevalue_artifactfeaturevalue_and_more.py +0 -178
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0048_alter_artifactulabel_feature_and_more.py +0 -33
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0049_rename_type_feature_dtype_and_more.py +0 -58
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0050_artifactfeatureset_feature_ref_is_semantic_and_more.py +0 -191
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0051_remove_feature_feature_sets_featuresetfeature_and_more.py +0 -71
- lamindb-0.76.16/sub/lnschema-core/lnschema_core/migrations/0052_rename_feature_value_artifactfeaturevalue_featurevalue_and_more.py +0 -419
- lamindb-0.76.16/sub/omop/omop/models.py +0 -1503
- lamindb-0.76.16/sub/wetlab/wetlab/migrations/0017_remove_biosample_artifacts.py +0 -375
- lamindb-0.76.16/sub/wetlab/wetlab/migrations/0018_well_created_at_well_created_by_well_updated_at.py +0 -38
- {lamindb-0.76.16 → lamindb-0.77.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/.github/ISSUE_TEMPLATE/usage_question.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/.gitmodules +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/CONTRIBUTING.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/LICENSE +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/README.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/api.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/arrays.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/bionty.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/cellregistry.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/changelog.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/clinicore.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/curate-df.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/curate-subclass.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/curate.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/ehrcurator.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/acid.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/delete.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/idempotency.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/import-schema.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/keep-artifacts-local.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/key.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/reference-field.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/search.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/setup.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/symbol-mapping.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/test_notebooks.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/track-run-inputs.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/faq/visibility.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/findrefs.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/guide.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/includes/features-lamindb.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/includes/features-laminhub.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/includes/installation.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/index.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/introduction.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/lamindb.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/laminr.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/omop.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/ourprojects.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/query-search.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/registries.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/rest.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/schemas.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/scripts/run-track-with-params.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/scripts/synced-with-git.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/setup.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/signup-login.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/storage/add-replace-cache.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/storage/anndata-accessor.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/storage/prepare-transfer-local-to-cloud.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/storage/test-files/iris.csv +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/storage/test-files/iris.data +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/storage/test-files/new_iris.csv +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/storage/test_notebooks.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/storage/transfer-local-to-cloud.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/storage/vitessce.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/storage.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/test_notebooks.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/track.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/transfer.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/tutorial.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/tutorial2.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/docs/wetlab.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_artifact.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_collection.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_feature.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_feature_set.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_finish.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_from_values.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_is_versioned.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_query_manager.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_run.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_save.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_storage.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_transform.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_ulabel.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_utils.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/_view.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/_data.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/_feature_manager.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/_mapped_collection.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/_settings.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/_sync_git.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/_track_environment.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/datasets/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/datasets/_core.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/datasets/_fake.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/exceptions.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/fields.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/schema.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/storage/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/storage/_anndata_accessor.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/storage/_anndata_sizes.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/storage/_backed_access.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/storage/_pyarrow_dataset.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/storage/_tiledbsoma.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/storage/_valid_suffixes.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/storage/objects.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/storage/paths.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/subsettings/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/subsettings/_creation_settings.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/subsettings/_transform_settings.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/types.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/core/versioning.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/integrations/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/integrations/_vitessce.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/setup/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/lamindb/setup/core/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/.github/workflows/update_ontologies.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/.gitignore +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/LICENSE +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/README.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/_display_sources.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/_ontology.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/_settings.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/_sync_sources.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/dev/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/dev/_md5.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/entities/_tissue.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/scripts/bfxpipelines_info/custom_pipelines.json +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/scripts/check_ontologies_reachable.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/scripts/determine_md5s.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/scripts/upload_new_ontologies.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/base/sources.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/core/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/core/_settings.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/ids.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0029_alter_cellline_previous_runs_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0030_rename_publicsource_source_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0031_alter_cellmarker_name_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0032_rename_source_name_source_description_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0033_alter_artifactcellline_artifact_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0034_alter_source_unique_together.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0035_alter_protein_gene_symbol.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0036_alter_source_artifacts_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0037_alter_cellline_source_alter_cellmarker_source_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0038_alter_artifactcellline_created_by_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0039_alter_cellline_source_alter_cellmarker_source_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/0040_rename_feature_ref_is_symbol_artifactgene_feature_ref_is_name_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/bionty/migrations/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/docs/guide/concepts.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/docs/guide/config.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/docs/guide/extend.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/docs/guide/test_notebooks.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/docs/guide.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/docs/index.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/docs/reference.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/lamin-project.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/dev/test_handle_sources.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_bfxpipeline.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_biosample.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_cellline.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_cellmarker.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_celltype.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_developmentalstage.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_disease.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_drug.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_ethnicity.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_experimentalfactor.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_organism.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_pathway.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_phenotype.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_protein.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/entities/test_tissue.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/test_bionty.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/bionty/tests/test_lamindb.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/.github/workflows/build.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/.gitignore +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/LICENSE +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/README.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/cellregistry/migrations/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/noxfile.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/pyproject.toml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/cellregistry/tests/test_integrity.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/.github/workflows/build.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/LICENSE +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/README.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/clinicore/migrations/0002_biosample_patient_biosample_project.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/clinicore/migrations/0003_alter_project_uid.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/clinicore/migrations/0005_alter_biosample_created_by_alter_biosample_run_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/clinicore/migrations/0006_artifactbiosample_artifactclinicaltrial_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/clinicore/migrations/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/docs/changelog.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/docs/guide.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/docs/index.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/docs/quickstart.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/docs/reference.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/noxfile.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/clinicore/tests/test_notebooks.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/.gitignore +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/LICENSE +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/README.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/findrefs/migrations/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/noxfile.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/findrefs/tests/test_integrity.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/.gitignore +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/LICENSE +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/README.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/lamin_cli/__main__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/lamin_cli/_cache.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/lamin_cli/_load.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/lamin_cli/_migration.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/lamin_cli/_save.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/lamin_cli/_settings.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/conftest.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/notebooks/not-initialized.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-consecutive.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-non-consecutive.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/scripts/merely-import-lamindb.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/scripts/run-track-and-finish-sync-git.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/scripts/run-track-and-finish.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/scripts/run-track-with-params.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/scripts/run-track.R +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/scripts/run-track.qmd +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/test_cli.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/test_load.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/test_migrate.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/test_multi_process.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/test_parse_uid_from_code.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/test_save_files.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/test_save_notebooks.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamin-cli/tests/test_save_scripts.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/.github/workflows/build.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/.gitignore +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/LICENSE +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/README.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/changelog.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-cloud/01-init-local-instance.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-cloud/02-connect-local-instance.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-cloud/03-add-managed-storage.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-cloud/04-test-bionty.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-cloud/05-init-hosted-instance.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-cloud/06-connect-hosted-instance.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-cloud/07-keep-artifacts-local.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-cloud/08-test-multi-session.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-cloud/test_notebooks.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-prod/test-cache-management.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-prod/test-cloud-sync.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-prod/test-connect-anonymously.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-prod/test-empty-init.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-prod/test-import-schema.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-prod/test-init-load-local-anonymously.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-prod/test-insufficient-user-info.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-prod/test-invalid-schema.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-prod/test-sqlite-lock.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/hub-prod/test_notebooks2.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/index.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/notebooks.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/docs/reference.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_cache.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_check.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_check_setup.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_close.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_connect_instance.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_delete.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_django.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_entry_points.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_exportdb.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_importdb.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_init_instance.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_migrate.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_register_instance.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_schema.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_schema_metadata.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_set_managed_storage.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_setup_user.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/_silence_loggers.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_aws_credentials.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_aws_storage.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_deprecated.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_docs.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_hub_client.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_hub_core.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_hub_crud.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_hub_utils.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_private_django_api.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_settings.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_settings_instance.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_settings_load.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_settings_save.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_settings_storage.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_settings_store.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_settings_user.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/_setup_bionty_sources.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/cloud_sqlite_locker.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/django.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/exceptions.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/hashing.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/lamindb_setup/core/types.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/noxfile.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/pyproject.toml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-cloud/scripts/script-init-pass-user-no-writes.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-cloud/scripts/script-to-fail-managed-storage.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-cloud/test_connect_instance.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-cloud/test_delete_instance.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-cloud/test_edge_request.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-cloud/test_init_instance.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-cloud/test_init_pass_user_no_writes.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-cloud/test_login.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-cloud/test_migrate.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-cloud/test_set_storage.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-local/conftest.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-local/test_all.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-local/test_update_schema_in_hub.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-prod/conftest.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-prod/test_aws_credentials_manager.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-prod/test_django.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-prod/test_global_settings.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-prod/test_switch_and_fallback_env.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/hub-prod/test_upath.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/storage/test_entry_point.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/storage/test_hashing.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/storage/test_storage_access.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/storage/test_storage_basis.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/storage/test_storage_stats.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lamindb-setup/tests/storage/test_to_url.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/.github/workflows/build.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/.gitignore +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/CHANGELOG.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/LICENSE +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/README.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/ids.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0053_alter_featureset_hash_alter_paramvalue_created_by_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0054_alter_feature_previous_runs_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0055_artifact_type_artifactparamvalue_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/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.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0057_link_models_latest_report_and_others.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0058_artifact__actions_collection__actions.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0059_alter_artifact__accessor_alter_artifact__hash_type_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0060_alter_artifact__actions.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0061_alter_collection_meta_artifact_alter_run_environment_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0062_add_is_latest_field.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0063_populate_latest_field.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0064_alter_artifact_version_alter_collection_version_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0065_remove_collection_feature_sets_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0066_alter_artifact__feature_values_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0067_alter_featurevalue_unique_together_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/0068_alter_artifactulabel_unique_together_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/migrations/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/mocks.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/lnschema_core/users.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/noxfile.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/pyproject.toml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/tests/conftest.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/tests/test_integrity.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/tests/test_models.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/lnschema-core/tests/test_types.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/.github/workflows/build.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.76.16/sub/clinicore → lamindb-0.77.0/sub/omop}/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/LICENSE +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/README.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/docs/guide.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/docs/index.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/docs/notes/inspectdb.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/docs/notes.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/docs/quickstart.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/docs/reference.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/lamin-project.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/noxfile.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/omop/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/omop/migrations/0001_initial.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/omop/migrations/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/pyproject.toml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/tests/test_integrity.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/omop/tests/test_notebooks.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/.gitignore +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/.pre-commit-config.yaml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/LICENSE +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/README.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/noxfile.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/ourprojects/migrations/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/pyproject.toml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/ourprojects/tests/test_integrity.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/.github/workflows/build.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/.gitignore +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/README.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/docs/changelog.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/docs/guide.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/docs/index.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/docs/reference.md +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/noxfile.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/tests/test_integrity.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/tests/test_notebooks.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/wetlab/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/wetlab/migrations/0019_alter_treatment_system.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/wetlab/migrations/0021_alter_compoundtreatment_duration_unit_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/wetlab/migrations/0023_compoundtreatment_duration_and_more.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/wetlab/migrations/0024_compound_chembl_id.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/sub/wetlab/wetlab/migrations/__init__.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/conftest.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/notebooks/duplicate/with-title-initialized-consecutive-finish.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/notebooks/no-title.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/notebooks/not-initialized.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/notebooks/with-title-initialized-consecutive-finish-not-last-cell.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/notebooks/with-title-initialized-consecutive-finish.ipynb +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/scripts/duplicate1/script-to-test-versioning.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/scripts/duplicate2/script-to-test-versioning.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/scripts/duplicate3/script-to-test-versioning.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/scripts/script-to-test-filename-change.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/scripts/script-to-test-versioning.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_artifact_folders.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_cache.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_can_validate.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_collection.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_context.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_curate.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_data.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_db.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_delete.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_feature.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_feature_manager.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_feature_set.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_from_values.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_label_manager.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_load.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_manager.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_notebooks.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_queryset.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_run.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_save.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_search.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_settings.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_transform.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_uid.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_ulabel.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_versioning.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_view.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/core/test_visibility.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/storage/conftest.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/storage/test_storage.py +0 -0
- {lamindb-0.76.16 → lamindb-0.77.0}/tests/storage/test_transfer.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.77.0
|
4
4
|
Summary: A data framework for biology.
|
5
5
|
Author-email: Lamin Labs <open-source@lamin.ai>
|
6
6
|
Requires-Python: >=3.9,<3.13
|
@@ -9,9 +9,9 @@ Classifier: Programming Language :: Python :: 3.9
|
|
9
9
|
Classifier: Programming Language :: Python :: 3.10
|
10
10
|
Classifier: Programming Language :: Python :: 3.11
|
11
11
|
Classifier: Programming Language :: Python :: 3.12
|
12
|
-
Requires-Dist: lnschema_core==0.
|
13
|
-
Requires-Dist: lamin_utils==0.13.
|
14
|
-
Requires-Dist: lamin_cli==0.21.
|
12
|
+
Requires-Dist: lnschema_core==0.77.0
|
13
|
+
Requires-Dist: lamin_utils==0.13.8
|
14
|
+
Requires-Dist: lamin_cli==0.21.3
|
15
15
|
Requires-Dist: lamindb_setup
|
16
16
|
Requires-Dist: rapidfuzz
|
17
17
|
Requires-Dist: pyarrow
|
@@ -22,7 +22,7 @@ Requires-Dist: fsspec
|
|
22
22
|
Requires-Dist: graphviz
|
23
23
|
Requires-Dist: psycopg2-binary
|
24
24
|
Requires-Dist: lamindb_setup[aws] ; extra == "aws"
|
25
|
-
Requires-Dist: bionty==0.
|
25
|
+
Requires-Dist: bionty==0.53.1 ; extra == "bionty"
|
26
26
|
Requires-Dist: cellregistry ; extra == "cellregistry"
|
27
27
|
Requires-Dist: clinicore ; extra == "clinicore"
|
28
28
|
Requires-Dist: line_profiler ; extra == "dev"
|
@@ -304,7 +304,7 @@
|
|
304
304
|
"source": [
|
305
305
|
"We'd like to load the corresponding records in our in-house registry to annotate a dataset.\n",
|
306
306
|
"\n",
|
307
|
-
"To this end, you'll typically use {class}`~lamindb.core.
|
307
|
+
"To this end, you'll typically use {class}`~lamindb.core.CanCurate.from_values`, which will both validate & retrieve records that match the values."
|
308
308
|
]
|
309
309
|
},
|
310
310
|
{
|
@@ -20,11 +20,11 @@
|
|
20
20
|
"source": [
|
21
21
|
":::{dropdown} How do I validate based on a public ontology?\n",
|
22
22
|
"\n",
|
23
|
-
"LaminDB makes it easy to validate categorical variables based on registries that inherit from {class}`~lamindb.core.
|
23
|
+
"LaminDB makes it easy to validate categorical variables based on registries that inherit from {class}`~lamindb.core.CanCurate`.\n",
|
24
24
|
"\n",
|
25
|
-
"{class}`~lamindb.core.
|
25
|
+
"{class}`~lamindb.core.CanCurate` methods validate against the registries in your LaminDB instance.\n",
|
26
26
|
"In {doc}`./bio-registries`, you'll see how to extend standard validation to validation against _public references_ using a `ReferenceTable` ontology object: `public = Record.public()`.\n",
|
27
|
-
"By default, {meth}`~lamindb.core.
|
27
|
+
"By default, {meth}`~lamindb.core.CanCurate.from_values` considers a match in a public reference a validated value for any {mod}`bionty` entity.\n",
|
28
28
|
"\n",
|
29
29
|
":::"
|
30
30
|
]
|
@@ -92,7 +92,7 @@
|
|
92
92
|
"cell_type": "markdown",
|
93
93
|
"metadata": {},
|
94
94
|
"source": [
|
95
|
-
"{meth}`~lamindb.core.
|
95
|
+
"{meth}`~lamindb.core.CanCurate.validate` validates passed values against reference values in a registry.\n",
|
96
96
|
"It returns a boolean vector indicating whether a value has an exact match in the reference values."
|
97
97
|
]
|
98
98
|
},
|
@@ -109,11 +109,11 @@
|
|
109
109
|
"cell_type": "markdown",
|
110
110
|
"metadata": {},
|
111
111
|
"source": [
|
112
|
-
"When validation fails, you can call {meth}`~lamindb.core.
|
112
|
+
"When validation fails, you can call {meth}`~lamindb.core.CanCurate.inspect` to figure out what to do.\n",
|
113
113
|
"\n",
|
114
|
-
"{meth}`~lamindb.core.
|
114
|
+
"{meth}`~lamindb.core.CanCurate.inspect` applies the same definition of validation as {meth}`~lamindb.core.CanCurate.validate`, but returns a rich return value {class}`~lamindb.core.InspectResult`. Most importantly, it logs recommended curation steps that would render the data validated.\n",
|
115
115
|
"\n",
|
116
|
-
"Note: you can use {meth}`~lamindb.core.
|
116
|
+
"Note: you can use {meth}`~lamindb.core.CanCurate.standardize` to standardize synonyms."
|
117
117
|
]
|
118
118
|
},
|
119
119
|
{
|
@@ -131,7 +131,7 @@
|
|
131
131
|
"source": [
|
132
132
|
"Following the suggestions to register new labels:\n",
|
133
133
|
"\n",
|
134
|
-
"Bulk creating records using {meth}`~lamindb.core.
|
134
|
+
"Bulk creating records using {meth}`~lamindb.core.CanCurate.from_values` only returns validated records:\n",
|
135
135
|
"\n",
|
136
136
|
"Note: Terms validated with public reference are also created with `.from_values`, see {doc}`/bio-registries` for details."
|
137
137
|
]
|
@@ -0,0 +1,77 @@
|
|
1
|
+
{
|
2
|
+
"cells": [
|
3
|
+
{
|
4
|
+
"cell_type": "markdown",
|
5
|
+
"metadata": {},
|
6
|
+
"source": [
|
7
|
+
"# Django field validation\n",
|
8
|
+
"\n",
|
9
|
+
"[Django field validation](https://docs.djangoproject.com/en/5.1/ref/validators/) are enabled for models that inherit the `ValidateFields` class.\n",
|
10
|
+
"\n",
|
11
|
+
"For instance: [`findrefs.Reference`](https://docs.lamin.ai/findrefs.reference)"
|
12
|
+
]
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"cell_type": "code",
|
16
|
+
"execution_count": null,
|
17
|
+
"metadata": {},
|
18
|
+
"outputs": [],
|
19
|
+
"source": [
|
20
|
+
"# !pip install lamindb, findrefs\n",
|
21
|
+
"!lamin init --storage ./test-django-validation --schema findrefs"
|
22
|
+
]
|
23
|
+
},
|
24
|
+
{
|
25
|
+
"cell_type": "code",
|
26
|
+
"execution_count": null,
|
27
|
+
"metadata": {},
|
28
|
+
"outputs": [],
|
29
|
+
"source": [
|
30
|
+
"import findrefs as fr\n",
|
31
|
+
"from lnschema_core.validation import FieldValidationError"
|
32
|
+
]
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"cell_type": "code",
|
36
|
+
"execution_count": null,
|
37
|
+
"metadata": {},
|
38
|
+
"outputs": [],
|
39
|
+
"source": [
|
40
|
+
"try:\n",
|
41
|
+
" fr.Reference(name=\"my ref\", doi=\"abc.ef\", url='myurl.com')\n",
|
42
|
+
"except FieldValidationError as e:\n",
|
43
|
+
" print(e)"
|
44
|
+
]
|
45
|
+
},
|
46
|
+
{
|
47
|
+
"cell_type": "code",
|
48
|
+
"execution_count": null,
|
49
|
+
"metadata": {},
|
50
|
+
"outputs": [],
|
51
|
+
"source": [
|
52
|
+
"!lamin delete --force test-django-validation"
|
53
|
+
]
|
54
|
+
}
|
55
|
+
],
|
56
|
+
"metadata": {
|
57
|
+
"kernelspec": {
|
58
|
+
"display_name": "py310",
|
59
|
+
"language": "python",
|
60
|
+
"name": "python3"
|
61
|
+
},
|
62
|
+
"language_info": {
|
63
|
+
"codemirror_mode": {
|
64
|
+
"name": "ipython",
|
65
|
+
"version": 3
|
66
|
+
},
|
67
|
+
"file_extension": ".py",
|
68
|
+
"mimetype": "text/x-python",
|
69
|
+
"name": "python",
|
70
|
+
"nbconvert_exporter": "python",
|
71
|
+
"pygments_lexer": "ipython3",
|
72
|
+
"version": "3.10.13"
|
73
|
+
}
|
74
|
+
},
|
75
|
+
"nbformat": 4,
|
76
|
+
"nbformat_minor": 2
|
77
|
+
}
|
@@ -1,7 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"cells": [
|
3
3
|
{
|
4
|
-
"attachments": {},
|
5
4
|
"cell_type": "markdown",
|
6
5
|
"id": "dd6bf8d1-ba40-4054-9f62-a402588f7a95",
|
7
6
|
"metadata": {},
|
@@ -24,7 +23,6 @@
|
|
24
23
|
]
|
25
24
|
},
|
26
25
|
{
|
27
|
-
"attachments": {},
|
28
26
|
"cell_type": "markdown",
|
29
27
|
"id": "bb95abe7",
|
30
28
|
"metadata": {},
|
@@ -33,7 +31,6 @@
|
|
33
31
|
]
|
34
32
|
},
|
35
33
|
{
|
36
|
-
"attachments": {},
|
37
34
|
"cell_type": "markdown",
|
38
35
|
"id": "b11215af-bb7f-4932-83ee-8f46f5583ed8",
|
39
36
|
"metadata": {},
|
@@ -52,7 +49,6 @@
|
|
52
49
|
]
|
53
50
|
},
|
54
51
|
{
|
55
|
-
"attachments": {},
|
56
52
|
"cell_type": "markdown",
|
57
53
|
"id": "7af3d05d-8dc3-455d-be1b-83e798621051",
|
58
54
|
"metadata": {},
|
@@ -81,7 +77,6 @@
|
|
81
77
|
]
|
82
78
|
},
|
83
79
|
{
|
84
|
-
"attachments": {},
|
85
80
|
"cell_type": "markdown",
|
86
81
|
"id": "622b8012-6a94-4a41-8a6b-4c178ed4cfa6",
|
87
82
|
"metadata": {},
|
@@ -90,7 +85,6 @@
|
|
90
85
|
]
|
91
86
|
},
|
92
87
|
{
|
93
|
-
"attachments": {},
|
94
88
|
"cell_type": "markdown",
|
95
89
|
"id": "8138a887-2de8-4ad9-ad8b-63324263fb7d",
|
96
90
|
"metadata": {},
|
@@ -129,7 +123,6 @@
|
|
129
123
|
]
|
130
124
|
},
|
131
125
|
{
|
132
|
-
"attachments": {},
|
133
126
|
"cell_type": "markdown",
|
134
127
|
"id": "ff0e34cd-8ebd-4196-a7bd-a667b2a360a1",
|
135
128
|
"metadata": {},
|
@@ -151,7 +144,6 @@
|
|
151
144
|
]
|
152
145
|
},
|
153
146
|
{
|
154
|
-
"attachments": {},
|
155
147
|
"cell_type": "markdown",
|
156
148
|
"id": "c552af90-b4b3-4465-aaec-662949d480b3",
|
157
149
|
"metadata": {},
|
@@ -160,7 +152,6 @@
|
|
160
152
|
]
|
161
153
|
},
|
162
154
|
{
|
163
|
-
"attachments": {},
|
164
155
|
"cell_type": "markdown",
|
165
156
|
"id": "6ac16f8b-3952-469b-9b6c-3a78c096467c",
|
166
157
|
"metadata": {},
|
@@ -199,7 +190,6 @@
|
|
199
190
|
]
|
200
191
|
},
|
201
192
|
{
|
202
|
-
"attachments": {},
|
203
193
|
"cell_type": "markdown",
|
204
194
|
"id": "8bd5da59-c616-4e49-9f02-f4814c19032f",
|
205
195
|
"metadata": {},
|
@@ -221,7 +211,6 @@
|
|
221
211
|
]
|
222
212
|
},
|
223
213
|
{
|
224
|
-
"attachments": {},
|
225
214
|
"cell_type": "markdown",
|
226
215
|
"id": "06a91d99-d204-4ec2-b567-960a2aaad38d",
|
227
216
|
"metadata": {
|
@@ -232,12 +221,11 @@
|
|
232
221
|
]
|
233
222
|
},
|
234
223
|
{
|
235
|
-
"attachments": {},
|
236
224
|
"cell_type": "markdown",
|
237
225
|
"id": "f760cba0-38a0-4be2-8854-d1f17689de05",
|
238
226
|
"metadata": {},
|
239
227
|
"source": [
|
240
|
-
"Specified
|
228
|
+
"Specified file does not exist."
|
241
229
|
]
|
242
230
|
},
|
243
231
|
{
|
@@ -248,7 +236,15 @@
|
|
248
236
|
"outputs": [],
|
249
237
|
"source": [
|
250
238
|
"with pytest.raises(FileNotFoundError):\n",
|
251
|
-
"
|
239
|
+
" non_existent_h5ad = ln.Artifact(\"s3://lamindb-ci/test-upload/non_existent_file.h5ad\")"
|
240
|
+
]
|
241
|
+
},
|
242
|
+
{
|
243
|
+
"cell_type": "markdown",
|
244
|
+
"id": "877a71e5",
|
245
|
+
"metadata": {},
|
246
|
+
"source": [
|
247
|
+
"Specified buket does not exist. Normally non-existent bucket raises `FileNotFoundError`, but sometimes strarts to raise `PermissionError`."
|
252
248
|
]
|
253
249
|
},
|
254
250
|
{
|
@@ -258,12 +254,11 @@
|
|
258
254
|
"metadata": {},
|
259
255
|
"outputs": [],
|
260
256
|
"source": [
|
261
|
-
"with pytest.raises(FileNotFoundError):\n",
|
262
|
-
"
|
257
|
+
"with pytest.raises((FileNotFoundError, PermissionError)):\n",
|
258
|
+
" non_existent_h5ad = ln.Artifact(\"s3://non_existent_bucket_6612366/non_existent_file.h5ad\")"
|
263
259
|
]
|
264
260
|
},
|
265
261
|
{
|
266
|
-
"attachments": {},
|
267
262
|
"cell_type": "markdown",
|
268
263
|
"id": "dcbbf82f",
|
269
264
|
"metadata": {},
|
@@ -272,7 +267,6 @@
|
|
272
267
|
]
|
273
268
|
},
|
274
269
|
{
|
275
|
-
"attachments": {},
|
276
270
|
"cell_type": "markdown",
|
277
271
|
"id": "9483a021",
|
278
272
|
"metadata": {},
|
@@ -281,7 +275,6 @@
|
|
281
275
|
]
|
282
276
|
},
|
283
277
|
{
|
284
|
-
"attachments": {},
|
285
278
|
"cell_type": "markdown",
|
286
279
|
"id": "77aeb57c",
|
287
280
|
"metadata": {},
|
@@ -330,7 +323,7 @@
|
|
330
323
|
"name": "python",
|
331
324
|
"nbconvert_exporter": "python",
|
332
325
|
"pygments_lexer": "ipython3",
|
333
|
-
"version": "3.
|
326
|
+
"version": "3.9.17"
|
334
327
|
},
|
335
328
|
"nbproject": {
|
336
329
|
"id": "psZgub4FOmzS",
|
@@ -43,7 +43,7 @@ Modules and settings.
|
|
43
43
|
"""
|
44
44
|
|
45
45
|
# denote a release candidate for 0.1.0 with 0.1rc1, 0.1a1, 0.1b1, etc.
|
46
|
-
__version__ = "0.
|
46
|
+
__version__ = "0.77.0"
|
47
47
|
|
48
48
|
import os as _os
|
49
49
|
|
@@ -79,7 +79,7 @@ if _check_instance_setup(from_module="lnschema_core"):
|
|
79
79
|
from . import core # isort: split
|
80
80
|
from . import (
|
81
81
|
_artifact,
|
82
|
-
|
82
|
+
_can_curate,
|
83
83
|
_collection,
|
84
84
|
_curate,
|
85
85
|
_feature,
|
@@ -8,7 +8,7 @@ import pandas as pd
|
|
8
8
|
from django.core.exceptions import FieldDoesNotExist
|
9
9
|
from lamin_utils import colors, logger
|
10
10
|
from lamindb_setup.core._docs import doc_args
|
11
|
-
from lnschema_core import
|
11
|
+
from lnschema_core import CanCurate, Record
|
12
12
|
|
13
13
|
from ._from_values import _has_organism_field, _print_values, get_or_create_records
|
14
14
|
from ._record import _queryset, get_name_field
|
@@ -23,7 +23,7 @@ if TYPE_CHECKING:
|
|
23
23
|
|
24
24
|
# from_values doesn't apply for QuerySet or Manager
|
25
25
|
@classmethod # type:ignore
|
26
|
-
@doc_args(
|
26
|
+
@doc_args(CanCurate.from_values.__doc__)
|
27
27
|
def from_values(
|
28
28
|
cls,
|
29
29
|
values: ListLike,
|
@@ -49,7 +49,7 @@ def from_values(
|
|
49
49
|
|
50
50
|
|
51
51
|
@classmethod # type: ignore
|
52
|
-
@doc_args(
|
52
|
+
@doc_args(CanCurate.inspect.__doc__)
|
53
53
|
def inspect(
|
54
54
|
cls,
|
55
55
|
values: ListLike,
|
@@ -71,7 +71,7 @@ def inspect(
|
|
71
71
|
|
72
72
|
|
73
73
|
@classmethod # type: ignore
|
74
|
-
@doc_args(
|
74
|
+
@doc_args(CanCurate.validate.__doc__)
|
75
75
|
def validate(
|
76
76
|
cls,
|
77
77
|
values: ListLike,
|
@@ -268,7 +268,7 @@ def _validate(
|
|
268
268
|
|
269
269
|
|
270
270
|
@classmethod # type: ignore
|
271
|
-
@doc_args(
|
271
|
+
@doc_args(CanCurate.standardize.__doc__)
|
272
272
|
def standardize(
|
273
273
|
cls,
|
274
274
|
values: ListLike,
|
@@ -621,10 +621,10 @@ if ln_setup._TESTING: # type: ignore
|
|
621
621
|
from inspect import signature
|
622
622
|
|
623
623
|
SIGS = {
|
624
|
-
name: signature(getattr(
|
624
|
+
name: signature(getattr(CanCurate, name))
|
625
625
|
for name in METHOD_NAMES
|
626
626
|
if not name.startswith("__")
|
627
627
|
}
|
628
628
|
|
629
629
|
for name in METHOD_NAMES:
|
630
|
-
attach_func_to_class_method(name,
|
630
|
+
attach_func_to_class_method(name, CanCurate, globals())
|
@@ -1731,7 +1731,7 @@ def _save_organism(name: str): # pragma: no cover
|
|
1731
1731
|
|
1732
1732
|
def _ref_is_name(field: FieldAttr) -> bool | None:
|
1733
1733
|
"""Check if the reference field is a name field."""
|
1734
|
-
from .
|
1734
|
+
from ._can_curate import get_name_field
|
1735
1735
|
|
1736
1736
|
name_field = get_name_field(field.field.model)
|
1737
1737
|
return field.field.name == name_field
|
@@ -19,7 +19,14 @@ if TYPE_CHECKING:
|
|
19
19
|
LAMIN_GREEN_LIGHTER = "#10b981"
|
20
20
|
LAMIN_GREEN_DARKER = "#065f46"
|
21
21
|
GREEN_FILL = "honeydew"
|
22
|
-
TRANSFORM_EMOJIS = {
|
22
|
+
TRANSFORM_EMOJIS = {
|
23
|
+
"notebook": "📔",
|
24
|
+
"upload": "🖥️",
|
25
|
+
"pipeline": "🧩",
|
26
|
+
"script": "📝",
|
27
|
+
"function": "🔧",
|
28
|
+
"glue": "🧲",
|
29
|
+
}
|
23
30
|
is_run_from_ipython = getattr(builtins, "__IPYTHON__", False)
|
24
31
|
|
25
32
|
|
@@ -12,7 +12,7 @@ from lamin_utils import colors, logger
|
|
12
12
|
from lamindb_setup.core._docs import doc_args
|
13
13
|
from lnschema_core.models import (
|
14
14
|
Artifact,
|
15
|
-
|
15
|
+
CanCurate,
|
16
16
|
Collection,
|
17
17
|
IsVersioned,
|
18
18
|
Record,
|
@@ -354,7 +354,7 @@ class QuerySet(models.QuerySet):
|
|
354
354
|
|
355
355
|
|
356
356
|
# -------------------------------------------------------------------------------------
|
357
|
-
#
|
357
|
+
# CanCurate
|
358
358
|
# -------------------------------------------------------------------------------------
|
359
359
|
|
360
360
|
|
@@ -374,26 +374,26 @@ def lookup(self, field: StrField | None = None, **kwargs) -> NamedTuple:
|
|
374
374
|
return _lookup(cls=self, field=field, **kwargs)
|
375
375
|
|
376
376
|
|
377
|
-
@doc_args(
|
377
|
+
@doc_args(CanCurate.validate.__doc__)
|
378
378
|
def validate(self, values: ListLike, field: str | StrField | None = None, **kwargs):
|
379
379
|
"""{}""" # noqa: D415
|
380
|
-
from .
|
380
|
+
from ._can_curate import _validate
|
381
381
|
|
382
382
|
return _validate(cls=self, values=values, field=field, **kwargs)
|
383
383
|
|
384
384
|
|
385
|
-
@doc_args(
|
385
|
+
@doc_args(CanCurate.inspect.__doc__)
|
386
386
|
def inspect(self, values: ListLike, field: str | StrField | None = None, **kwargs):
|
387
387
|
"""{}""" # noqa: D415
|
388
|
-
from .
|
388
|
+
from ._can_curate import _inspect
|
389
389
|
|
390
390
|
return _inspect(cls=self, values=values, field=field, **kwargs)
|
391
391
|
|
392
392
|
|
393
|
-
@doc_args(
|
393
|
+
@doc_args(CanCurate.standardize.__doc__)
|
394
394
|
def standardize(self, values: Iterable, field: str | StrField | None = None, **kwargs):
|
395
395
|
"""{}""" # noqa: D415
|
396
|
-
from .
|
396
|
+
from ._can_curate import _standardize
|
397
397
|
|
398
398
|
return _standardize(cls=self, values=values, field=field, **kwargs)
|
399
399
|
|
@@ -7,10 +7,20 @@ from typing import TYPE_CHECKING, NamedTuple
|
|
7
7
|
import dj_database_url
|
8
8
|
import lamindb_setup as ln_setup
|
9
9
|
from django.core.exceptions import FieldDoesNotExist
|
10
|
+
from django.core.exceptions import ValidationError as DjangoValidationError
|
10
11
|
from django.db import connections, transaction
|
11
12
|
from django.db.models import F, IntegerField, Manager, Q, QuerySet, TextField, Value
|
12
13
|
from django.db.models.functions import Cast, Coalesce
|
13
|
-
from django.db.models.lookups import
|
14
|
+
from django.db.models.lookups import (
|
15
|
+
Contains,
|
16
|
+
Exact,
|
17
|
+
IContains,
|
18
|
+
IExact,
|
19
|
+
IRegex,
|
20
|
+
IStartsWith,
|
21
|
+
Regex,
|
22
|
+
StartsWith,
|
23
|
+
)
|
14
24
|
from lamin_utils import colors, logger
|
15
25
|
from lamin_utils._lookup import Lookup
|
16
26
|
from lamindb_setup._connect_instance import (
|
@@ -32,7 +42,9 @@ from lnschema_core.models import (
|
|
32
42
|
Run,
|
33
43
|
Transform,
|
34
44
|
ULabel,
|
45
|
+
ValidateFields,
|
35
46
|
)
|
47
|
+
from lnschema_core.validation import FieldValidationError
|
36
48
|
|
37
49
|
from ._utils import attach_func_to_class_method
|
38
50
|
from .core._settings import settings
|
@@ -62,8 +74,11 @@ def update_attributes(record: Record, attributes: dict[str, str]):
|
|
62
74
|
setattr(record, key, value)
|
63
75
|
|
64
76
|
|
65
|
-
def
|
66
|
-
|
77
|
+
def validate_fields(record: Record, kwargs):
|
78
|
+
from lnschema_core.validation import validate_literal_fields
|
79
|
+
|
80
|
+
# validate required fields
|
81
|
+
# a "required field" is a Django field that has `null=False, default=None`
|
67
82
|
required_fields = {
|
68
83
|
k.name for k in record._meta.fields if not k.null and k.default is None
|
69
84
|
}
|
@@ -92,6 +107,8 @@ def validate_required_fields(record: Record, kwargs):
|
|
92
107
|
raise ValidationError(
|
93
108
|
f'`uid` must be exactly {uid_max_length} characters long, got {len(kwargs["uid"])}.'
|
94
109
|
)
|
110
|
+
# validate literals
|
111
|
+
validate_literal_fields(record, kwargs)
|
95
112
|
|
96
113
|
|
97
114
|
def suggest_records_with_similar_names(record: Record, name_field: str, kwargs) -> bool:
|
@@ -128,7 +145,7 @@ def suggest_records_with_similar_names(record: Record, name_field: str, kwargs)
|
|
128
145
|
|
129
146
|
def __init__(record: Record, *args, **kwargs):
|
130
147
|
if not args:
|
131
|
-
|
148
|
+
validate_fields(record, kwargs)
|
132
149
|
|
133
150
|
# do not search for names if an id is passed; this is important
|
134
151
|
# e.g. when synching ids from the notebook store to lamindb
|
@@ -136,9 +153,7 @@ def __init__(record: Record, *args, **kwargs):
|
|
136
153
|
if "_has_consciously_provided_uid" in kwargs:
|
137
154
|
has_consciously_provided_uid = kwargs.pop("_has_consciously_provided_uid")
|
138
155
|
if settings.creation.search_names and not has_consciously_provided_uid:
|
139
|
-
name_field = (
|
140
|
-
"name" if not hasattr(record, "_name_field") else record._name_field
|
141
|
-
)
|
156
|
+
name_field = getattr(record, "_name_field", "name")
|
142
157
|
match = suggest_records_with_similar_names(record, name_field, kwargs)
|
143
158
|
if match:
|
144
159
|
if "version" in kwargs:
|
@@ -169,6 +184,16 @@ def __init__(record: Record, *args, **kwargs):
|
|
169
184
|
init_self_from_db(record, existing_record)
|
170
185
|
return None
|
171
186
|
super(Record, record).__init__(**kwargs)
|
187
|
+
if isinstance(record, ValidateFields):
|
188
|
+
# this will trigger validation against django validators
|
189
|
+
try:
|
190
|
+
if hasattr(record, "clean_fields"):
|
191
|
+
record.clean_fields()
|
192
|
+
else:
|
193
|
+
record._Model__clean_fields()
|
194
|
+
except DjangoValidationError as e:
|
195
|
+
message = _format_django_validation_error(record, e)
|
196
|
+
raise FieldValidationError(message) from e
|
172
197
|
elif len(args) != len(record._meta.concrete_fields):
|
173
198
|
raise ValueError("please provide keyword arguments, not plain arguments")
|
174
199
|
else:
|
@@ -177,6 +202,37 @@ def __init__(record: Record, *args, **kwargs):
|
|
177
202
|
_store_record_old_name(record)
|
178
203
|
|
179
204
|
|
205
|
+
def _format_django_validation_error(record: Record, e: DjangoValidationError):
|
206
|
+
"""Pretty print Django validation errors."""
|
207
|
+
errors = {}
|
208
|
+
if hasattr(e, "error_dict"):
|
209
|
+
error_dict = e.error_dict
|
210
|
+
else:
|
211
|
+
error_dict = {"__all__": e.error_list}
|
212
|
+
|
213
|
+
for field_name, error_list in error_dict.items():
|
214
|
+
for error in error_list:
|
215
|
+
if hasattr(error, "message"):
|
216
|
+
msg = error.message
|
217
|
+
else:
|
218
|
+
msg = str(error)
|
219
|
+
|
220
|
+
if field_name == "__all__":
|
221
|
+
errors[field_name] = f"{colors.yellow(msg)}"
|
222
|
+
else:
|
223
|
+
current_value = getattr(record, field_name, None)
|
224
|
+
errors[field_name] = (
|
225
|
+
f"{field_name}: {colors.yellow(current_value)} is not valid\n → {msg}"
|
226
|
+
)
|
227
|
+
|
228
|
+
if errors:
|
229
|
+
message = "\n "
|
230
|
+
for _, error in errors.items():
|
231
|
+
message += error + "\n "
|
232
|
+
|
233
|
+
return message
|
234
|
+
|
235
|
+
|
180
236
|
@classmethod # type:ignore
|
181
237
|
@doc_args(Record.filter.__doc__)
|
182
238
|
def filter(cls, *queries, **expressions) -> QuerySet:
|
@@ -230,6 +286,7 @@ def _search(
|
|
230
286
|
) -> QuerySet:
|
231
287
|
input_queryset = _queryset(cls, using_key=using_key)
|
232
288
|
registry = input_queryset.model
|
289
|
+
name_field = getattr(registry, "_name_field", "name")
|
233
290
|
if field is None:
|
234
291
|
fields = [
|
235
292
|
field.name
|
@@ -306,6 +363,16 @@ def _search(
|
|
306
363
|
# also rank by contains
|
307
364
|
contains_rank = Cast(contains_expr, output_field=IntegerField())
|
308
365
|
ranks.append(contains_rank)
|
366
|
+
# additional rule for truncated strings
|
367
|
+
# weight matches from the beginning of the string higher
|
368
|
+
# sometimes whole words get truncated and startswith_expr is not enough
|
369
|
+
if truncate_string and field == name_field:
|
370
|
+
startswith_lookup = StartsWith if case_sensitive else IStartsWith
|
371
|
+
name_startswith_expr = startswith_lookup(field_expr, string)
|
372
|
+
name_startswith_rank = (
|
373
|
+
Cast(name_startswith_expr, output_field=IntegerField()) * 2
|
374
|
+
)
|
375
|
+
ranks.append(name_startswith_rank)
|
309
376
|
|
310
377
|
ranked_queryset = (
|
311
378
|
input_queryset.filter(reduce(lambda a, b: a | b, contains_filters))
|
@@ -14,13 +14,14 @@ Registries:
|
|
14
14
|
ParamManager
|
15
15
|
LabelManager
|
16
16
|
IsVersioned
|
17
|
-
|
17
|
+
CanCurate
|
18
18
|
HasParents
|
19
19
|
TracksRun
|
20
20
|
TracksUpdates
|
21
21
|
ParamValue
|
22
22
|
FeatureValue
|
23
23
|
InspectResult
|
24
|
+
ValidateFields
|
24
25
|
fields
|
25
26
|
|
26
27
|
Curators:
|
@@ -67,7 +68,7 @@ Modules:
|
|
67
68
|
from lamin_utils import logger
|
68
69
|
from lamin_utils._inspect import InspectResult
|
69
70
|
from lnschema_core.models import (
|
70
|
-
|
71
|
+
CanCurate,
|
71
72
|
FeatureValue,
|
72
73
|
HasParents,
|
73
74
|
IsVersioned,
|
@@ -76,6 +77,7 @@ from lnschema_core.models import (
|
|
76
77
|
Registry,
|
77
78
|
TracksRun,
|
78
79
|
TracksUpdates,
|
80
|
+
ValidateFields,
|
79
81
|
)
|
80
82
|
|
81
83
|
from lamindb._curate import (
|