lsst-daf-butler 29.2025.2600__tar.gz → 29.2025.2800__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.
- {lsst_daf_butler-29.2025.2600/python/lsst_daf_butler.egg-info → lsst_daf_butler-29.2025.2800}/PKG-INFO +1 -1
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/queries.rst +30 -3
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/writing-subcommands.rst +2 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler.py +1 -1
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/_transfer.py +4 -4
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_group.py +25 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_record_set.py +65 -45
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_records.py +24 -9
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_expression_strings.py +71 -6
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/_predicate.py +34 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/check.py +20 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/normalForm.py +27 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/exprTree.py +153 -6
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/treeVisitor.py +66 -1
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/sql_registry.py +41 -14
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/butler_queries.py +30 -14
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/spatial.py +54 -9
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/spatial.yaml +1 -1
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/transfers/_context.py +3 -7
- lsst_daf_butler-29.2025.2800/python/lsst/daf/butler/version.py +2 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800/python/lsst_daf_butler.egg-info}/PKG-INFO +1 -1
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_dimensions.py +18 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_exprParserYacc.py +202 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_normalFormExpression.py +12 -0
- lsst_daf_butler-29.2025.2600/python/lsst/daf/butler/version.py +0 -2
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/COPYRIGHT +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/LICENSE +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/MANIFEST.in +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/README.md +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/bsd_license.txt +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/CHANGES.rst +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/configuring.rst +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/datastores.rst +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/dimensions.rst +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/formatters.rst +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/index.rst +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/organizing.rst +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/gpl-v3.0.txt +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/pyproject.toml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler_config.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler_instance_options.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler_metrics.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_collection_type.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_column_categorization.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_column_tags.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_column_type_info.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_config.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_config_support.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_dataset_association.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_dataset_existence.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_dataset_provenance.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_dataset_ref.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_dataset_type.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_exceptions.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_file_dataset.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_file_descriptor.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_formatter.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_labeled_butler_factory.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_limited_butler.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_location.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_named.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_quantum.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_quantum_backed.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_query_all_datasets.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_registry_shim.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_storage_class.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_timespan.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_topology.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/arrow_utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/butler.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/cliLog.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/cmd/commands.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/opt/options.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/progress.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/column_spec.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/datastores/formatters.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/registry.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/storageClasses.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/_datastore.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/composites.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/constraints.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/generic_base.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/record_data.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/stored_file_info.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/chainedDatastore.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/fileDatastore.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/fileDatastoreClient.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/file_datastore/get.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/file_datastore/transfer.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/ddl.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/delegates/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/delegates/arrowtable.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_config.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_coordinate.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_database.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_elements.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_record_table.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_universe.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/construction.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/record_cache.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_butler/_direct_butler.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_driver.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/file.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/json.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/logs.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/packages.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/parquet.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/pickle.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/typeless.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/yaml.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/json.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/logging.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/mapping_factory.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/name_shrinker.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/nonempty_mapping.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/persistence_context.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/progress.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/py.typed +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/pydantic_utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_base.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_general_query_results.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_identifiers.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_query.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/convert_args.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/driver.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/expression_factory.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/overlaps.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/predicate_constraints_summary.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/result_specs.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_base.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_column_expression.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_column_set.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_predicate.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_query_tree.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/visitors.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_collection_record_cache.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_collection_summary_cache.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_config.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_defaults.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_registry.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/attributes.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/bridge/ephemeral.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/bridge/monolithic.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/collections/_base.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/connectionString.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/databases/postgresql.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/databases/sqlite.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/dimensions/static.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_bridge.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_database.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_datasets.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_obscore.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/managers.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/_config.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/_records.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/_spatial.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/opaque.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_builder.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_query.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_query_backend.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_query_context.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_readers.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_results.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_sql_query_backend.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_sql_query_context.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_structs.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/butler_sql_engine.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/categorize.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/parser.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/parserLex.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/parserYacc.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/lex.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/yacc.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/find_first_dataset.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/tests/_registry.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/versions.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/wildcards.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_authentication.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_http_connection.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_query_driver.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_registry.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_remote_butler.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/registry/_query_common.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/registry/_query_data_coordinates.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/registry/_query_datasets.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/registry/_query_dimension_records.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_config.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_dependencies.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_server.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_telemetry.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_external_query.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_query_limits.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_query_serialization.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_query_streaming.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/repo_relocation.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/_associate.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/_pruneDatasets.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/butlerImport.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/collectionChain.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/configDump.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/configValidate.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/createRepo.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/ingest_files.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/ingest_zip.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/queryCollections.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/removeCollections.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/removeRuns.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/retrieveArtifacts.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/transferDatasets.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/cliCmdTestBase.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/hybrid_butler.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/postgresql.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/base.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset-skymap.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/datasets.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/hsc-rc2-subset-v0.yaml +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/server.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/server_utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/time_utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/timespan_database_representation.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/transfers/__init__.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/SOURCES.txt +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/requires.txt +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/setup.cfg +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_astropyTableFormatter.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_authentication.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_butler.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_butler_factory.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdAssociate.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdConfigDump.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdConfigValidate.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdCreate.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdImport.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdIngestFiles.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdPruneDatasets.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdQueryCollections.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdQueryDataIds.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdQueryDatasets.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdRemoveCollections.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdRemoveRuns.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliLog.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliPluginLoader.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliUtilSplitCommas.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliUtilSplitKv.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliUtilToUpper.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliUtils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_column_spec.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_composites.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_config.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_connectionString.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_constraints.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_datasets.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_datastore.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_ddl.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_dimension_record_containers.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_exprParserLex.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_expressions.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_formatter.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_gafaelfawr.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_location.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_logFormatter.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_logging.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_matplotlibFormatter.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_nonempty_mapping.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_obscore.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_packages.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_parquet.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_postgresql.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_progress.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_pydantic_utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_quantum.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_quantumBackedButler.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_direct_postgresql.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_direct_sqlite.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_interface.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_relations.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_remote.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_utilities.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_remote_butler.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_server.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_simpleButler.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_sqlite.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_storageClass.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_templates.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_testRepo.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_thread_utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_time_utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_timespan.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_utils.py +0 -0
- {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_versioning.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lsst-daf-butler
|
|
3
|
-
Version: 29.2025.
|
|
3
|
+
Version: 29.2025.2800
|
|
4
4
|
Summary: An abstraction layer for reading and writing astronomical data to datastores.
|
|
5
5
|
Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
|
|
6
6
|
License: BSD 3-Clause License
|
{lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/queries.rst
RENAMED
|
@@ -327,6 +327,12 @@ where ``ra`` and ``dec`` are specified as an ICRS sky position in degrees.
|
|
|
327
327
|
|
|
328
328
|
visit.region OVERLAPS POINT(53.6, -32.7)
|
|
329
329
|
|
|
330
|
+
All types of regions supported by the language will work with ``OVERLAP`` as well.
|
|
331
|
+
|
|
332
|
+
.. code-block:: sql
|
|
333
|
+
|
|
334
|
+
visit.region OVERLAPS BOX(53.6, -32.7, 1, 1)
|
|
335
|
+
|
|
330
336
|
You can check overlaps with arbitrary sky regions by binding values (see
|
|
331
337
|
:ref:`daf_butler_dimension_expressions_identifiers`). Bound region values may
|
|
332
338
|
be specified as the following object types:
|
|
@@ -364,16 +370,37 @@ consists of an identifier followed by zero or more comma-separated arguments
|
|
|
364
370
|
enclosed in parentheses (e.g. ``func(1, 2, 3)``). An argument to a function
|
|
365
371
|
can be any expression. Names of the functions are not case-sensitive.
|
|
366
372
|
|
|
367
|
-
|
|
373
|
+
A small set of functions is implemented in the query language presently.
|
|
374
|
+
|
|
375
|
+
Functions supporting operations on strings:
|
|
368
376
|
|
|
369
|
-
- ``POINT(ra, dec)`` - function which declares (or returns) sky coordinates
|
|
370
|
-
similarly to ADQL syntax.
|
|
371
377
|
- ``GLOB(expression, pattern)`` - performs case-sensitive match of a string
|
|
372
378
|
``expression`` against ``pattern``. Pattern can include ``*`` and ``?``
|
|
373
379
|
meta-characters, matching any number of characters or a single character
|
|
374
380
|
respectfully. All other characters in pattern are matched literally, and
|
|
375
381
|
whole expression string has to match for ``GLOB()`` to return ``True``.
|
|
376
382
|
|
|
383
|
+
Functions for defining sky coordinates or regions. All these functions accept
|
|
384
|
+
either numeric literals or bind identifiers (``:name`` syntax):
|
|
385
|
+
|
|
386
|
+
- ``POINT(ra, dec)`` - function which declares (or returns) sky coordinates
|
|
387
|
+
similarly to ADQL syntax, arguments are in degrees.
|
|
388
|
+
- ``CIRCLE(ra, dec, radius)`` - function which returns circular sky region,
|
|
389
|
+
all arguments are in degrees.
|
|
390
|
+
- ``BOX(center_ra, center_dec, width, height)`` - function which returns box
|
|
391
|
+
sky region, all arguments are in degrees.
|
|
392
|
+
- ``POLYGON(ra1, dec1, ra2, dec2, ...)`` - function which returns polygonal
|
|
393
|
+
sky region, all arguments are in degrees, at least three pairs of coordinates
|
|
394
|
+
have to be provided. Note that implementation for this function is based on
|
|
395
|
+
``lsst.sphgeom.ConvexPolygon`` class which builds a convex hull out of all
|
|
396
|
+
vertices, thus ignoring their order. This is not strictly consistent with
|
|
397
|
+
ADQL definition that relies on ordering of the vertices and allows non-convex
|
|
398
|
+
polygons.
|
|
399
|
+
- ``REGION('string')`` - function returning sky region, string argument uses
|
|
400
|
+
`IVOA SIAv2 POS`_ syntax. Same caveat applies as for ``POLYGON`` function.
|
|
401
|
+
|
|
402
|
+
.. _IVOA SIAv2 POS: https://ivoa.net/documents/SIA/20151223/REC-SIA-2.0-20151223.html#toc12
|
|
403
|
+
|
|
377
404
|
|
|
378
405
|
.. _time-literals-syntax:
|
|
379
406
|
|
{lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler.py
RENAMED
|
@@ -1828,7 +1828,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
|
|
|
1828
1828
|
provided, the default collections are used. Can be a wildcard if
|
|
1829
1829
|
``find_first`` is `False` (if find first is requested the order
|
|
1830
1830
|
of collections matters and wildcards make the order indeterminate).
|
|
1831
|
-
|
|
1831
|
+
See :ref:`daf_butler_collection_expressions` for more information.
|
|
1832
1832
|
find_first : `bool`, optional
|
|
1833
1833
|
If `True` (default), for each result data ID, only yield one
|
|
1834
1834
|
`DatasetRef` of each `DatasetType`, from the first collection in
|
|
@@ -56,8 +56,8 @@ class FileTransferSource(Protocol):
|
|
|
56
56
|
dataset_ids : `~collections.abc.Iterable` [ `DatasetId` ]
|
|
57
57
|
List of dataset IDs for which we will retrieve file information.
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
Returns
|
|
60
|
+
-------
|
|
61
61
|
transfer_map : `FileTransferMap`
|
|
62
62
|
Dictionary from `DatasetId` to a list of files found for that
|
|
63
63
|
dataset. If information about any given dataset IDs could not
|
|
@@ -78,8 +78,8 @@ class FileTransferSource(Protocol):
|
|
|
78
78
|
Optional mapping of datastore artifact to existence. Updated by
|
|
79
79
|
this method with details of all artifacts tested.
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
Returns
|
|
82
|
+
-------
|
|
83
83
|
transfer_map : `FileTransferMap`
|
|
84
84
|
Dictionary from `DatasetId` to a list of files found for that
|
|
85
85
|
dataset. If information about any given dataset IDs could not
|
|
@@ -414,12 +414,37 @@ class DimensionGroup: # numpydoc ignore=PR02
|
|
|
414
414
|
names = set(self.names).intersection(*[other.names for other in others])
|
|
415
415
|
return DimensionGroup(self.universe, names=names)
|
|
416
416
|
|
|
417
|
+
def difference(self, other: DimensionGroup) -> DimensionGroup:
|
|
418
|
+
"""Construct a new group with dimensions that are in ``self`` but not
|
|
419
|
+
``other`` OR dependencies of those in ``self`` but not in ``other``.
|
|
420
|
+
|
|
421
|
+
Parameters
|
|
422
|
+
----------
|
|
423
|
+
other : `DimensionGroup`
|
|
424
|
+
Other group to compare with.
|
|
425
|
+
|
|
426
|
+
Returns
|
|
427
|
+
-------
|
|
428
|
+
diff : `DimensionGroup`
|
|
429
|
+
Difference of the two groups.
|
|
430
|
+
|
|
431
|
+
Notes
|
|
432
|
+
-----
|
|
433
|
+
This is not exactly equivalent to a true `set` difference, because the
|
|
434
|
+
result must be expanded to include required and implied dependencies,
|
|
435
|
+
and those may be common to ``self`` and ``other``.
|
|
436
|
+
"""
|
|
437
|
+
return DimensionGroup(self.universe, names=self.names - other.names)
|
|
438
|
+
|
|
417
439
|
def __or__(self, other: DimensionGroup) -> DimensionGroup:
|
|
418
440
|
return self.union(other)
|
|
419
441
|
|
|
420
442
|
def __and__(self, other: DimensionGroup) -> DimensionGroup:
|
|
421
443
|
return self.intersection(other)
|
|
422
444
|
|
|
445
|
+
def __sub__(self, other: DimensionGroup) -> DimensionGroup:
|
|
446
|
+
return self.difference(other)
|
|
447
|
+
|
|
423
448
|
@property
|
|
424
449
|
def data_coordinate_keys(self) -> Set[str]:
|
|
425
450
|
"""A set of dimensions ordered like `DataCoordinate.mapping`.
|
|
@@ -809,8 +809,7 @@ class DimensionDataAttacher:
|
|
|
809
809
|
been referenced in at least one of the constructor arguments.
|
|
810
810
|
data_ids : `~collections.abc.Iterable` [ `DataCoordinate` ]
|
|
811
811
|
Data IDs to attach dimension records to (not in place; data
|
|
812
|
-
coordinates are immutable).
|
|
813
|
-
as well as required dimensions).
|
|
812
|
+
coordinates are immutable).
|
|
814
813
|
query : `.queries.Query`, optional
|
|
815
814
|
A butler query that can be used to look up missing dimension
|
|
816
815
|
records. Records fetched via query are cached in the `records`
|
|
@@ -822,49 +821,41 @@ class DimensionDataAttacher:
|
|
|
822
821
|
Data IDs with dimension records attached, in the same order as the
|
|
823
822
|
original iterable.
|
|
824
823
|
"""
|
|
825
|
-
incomplete: list[_InProgressRecordDicts] = []
|
|
826
824
|
lookup_helpers = [
|
|
827
825
|
_DimensionRecordLookupHelper.build(dimensions, element_name, self)
|
|
828
|
-
for element_name in dimensions.
|
|
826
|
+
for element_name in dimensions.lookup_order
|
|
829
827
|
]
|
|
830
|
-
|
|
831
|
-
for
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
if
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
f"No dimension record for element(s) {list(records.missing.keys())} "
|
|
856
|
-
f"for data ID {result[records.index]}. "
|
|
857
|
-
f"{len(incomplete)} data ID{' was' if len(incomplete) == 1 else 's were'} "
|
|
858
|
-
"missing at least one record."
|
|
859
|
-
)
|
|
860
|
-
return result
|
|
828
|
+
records = [_InProgressRecordDicts(data_id) for data_id in data_ids]
|
|
829
|
+
for lookup_helper in lookup_helpers:
|
|
830
|
+
for r in records:
|
|
831
|
+
lookup_helper.lookup(r)
|
|
832
|
+
incomplete = lookup_helper.incomplete_records
|
|
833
|
+
if incomplete:
|
|
834
|
+
if query is not None:
|
|
835
|
+
lookup_helper.fetch_missing(query)
|
|
836
|
+
# We may still be missing records at this point, if they
|
|
837
|
+
# were not available in the database.
|
|
838
|
+
# This is intentional, because in existing Butler
|
|
839
|
+
# repositories dimension records are not always fully
|
|
840
|
+
# populated. (For example, it is common for a visit to
|
|
841
|
+
# exist without corresponding visit_detector_region
|
|
842
|
+
# records, since these are populated at different times
|
|
843
|
+
# by different processes.)
|
|
844
|
+
else:
|
|
845
|
+
raise LookupError(
|
|
846
|
+
f"No dimension record for element '{lookup_helper.element}' "
|
|
847
|
+
f"for data ID {incomplete[0].data_id}. "
|
|
848
|
+
f"{len(incomplete)} data ID{' was' if len(incomplete) == 1 else 's were'} "
|
|
849
|
+
"missing at least one record."
|
|
850
|
+
)
|
|
851
|
+
|
|
852
|
+
return [r.data_id.expanded(r.done) for r in records]
|
|
861
853
|
|
|
862
854
|
|
|
863
855
|
@dataclasses.dataclass
|
|
864
856
|
class _InProgressRecordDicts:
|
|
865
|
-
|
|
857
|
+
data_id: DataCoordinate
|
|
866
858
|
done: dict[str, DimensionRecord] = dataclasses.field(default_factory=dict)
|
|
867
|
-
missing: dict[str, tuple[DataIdValue, ...]] = dataclasses.field(default_factory=dict)
|
|
868
859
|
|
|
869
860
|
|
|
870
861
|
@dataclasses.dataclass
|
|
@@ -873,7 +864,7 @@ class _DimensionRecordLookupHelper:
|
|
|
873
864
|
# tuple in the to-be-expanded data ID's full-values tuple.
|
|
874
865
|
indices: list[int]
|
|
875
866
|
record_set: DimensionRecordSet
|
|
876
|
-
|
|
867
|
+
incomplete_records: list[_InProgressRecordDicts] = dataclasses.field(default_factory=list)
|
|
877
868
|
|
|
878
869
|
@property
|
|
879
870
|
def element(self) -> str:
|
|
@@ -902,33 +893,62 @@ class _DimensionRecordLookupHelper:
|
|
|
902
893
|
else:
|
|
903
894
|
return _DimensionRecordLookupHelper(indices, attacher.records[element])
|
|
904
895
|
|
|
905
|
-
def lookup(self,
|
|
906
|
-
required_values =
|
|
896
|
+
def lookup(self, records: _InProgressRecordDicts) -> None:
|
|
897
|
+
required_values = self._get_required_values(records)
|
|
907
898
|
if (result := self.record_set._by_required_values.get(required_values)) is None:
|
|
908
899
|
result = self.fallback(required_values)
|
|
909
900
|
if result is not None:
|
|
910
901
|
self.record_set.add(result)
|
|
911
902
|
records.done[self.element] = result
|
|
912
903
|
else:
|
|
913
|
-
|
|
914
|
-
self.missing.add(required_values)
|
|
904
|
+
self.incomplete_records.append(records)
|
|
915
905
|
else:
|
|
916
906
|
records.done[self.element] = result
|
|
917
907
|
|
|
908
|
+
def _get_required_values(self, records: _InProgressRecordDicts) -> tuple[DataIdValue, ...]:
|
|
909
|
+
if records.data_id.hasFull():
|
|
910
|
+
full_values = records.data_id.full_values
|
|
911
|
+
return tuple([full_values[i] for i in self.indices])
|
|
912
|
+
else:
|
|
913
|
+
values = []
|
|
914
|
+
dimensions = self.record_set.element.minimal_group.required
|
|
915
|
+
for dimension in dimensions:
|
|
916
|
+
value = records.data_id.get(dimension)
|
|
917
|
+
if value is None:
|
|
918
|
+
value = self._find_implied_value(dimension, records)
|
|
919
|
+
values.append(value)
|
|
920
|
+
return tuple(values)
|
|
921
|
+
|
|
922
|
+
def _find_implied_value(self, implied_dimension: str, records: _InProgressRecordDicts) -> DataIdValue:
|
|
923
|
+
for rec in records.done.values():
|
|
924
|
+
if implied_dimension in rec.definition.implied:
|
|
925
|
+
return rec.get(implied_dimension)
|
|
926
|
+
|
|
927
|
+
raise LookupError(
|
|
928
|
+
f"Implied value for dimension '{implied_dimension}' not found in records for"
|
|
929
|
+
f" {list(records.done.keys())}"
|
|
930
|
+
)
|
|
931
|
+
|
|
918
932
|
def fallback(self, required_values: tuple[DataIdValue, ...]) -> DimensionRecord | None:
|
|
919
933
|
return None
|
|
920
934
|
|
|
921
935
|
def fetch_missing(self, query: Query) -> None:
|
|
922
|
-
if self.
|
|
936
|
+
if self.incomplete_records:
|
|
937
|
+
missing_values = set(self._get_required_values(r) for r in self.incomplete_records)
|
|
923
938
|
self.record_set.update(
|
|
924
939
|
query.join_data_coordinates(
|
|
925
940
|
[
|
|
926
|
-
DataCoordinate.from_required_values(self.record_set.element.minimal_group,
|
|
927
|
-
for
|
|
941
|
+
DataCoordinate.from_required_values(self.record_set.element.minimal_group, values)
|
|
942
|
+
for values in missing_values
|
|
928
943
|
]
|
|
929
944
|
).dimension_records(self.record_set.element.name)
|
|
930
945
|
)
|
|
931
946
|
|
|
947
|
+
missing = self.incomplete_records
|
|
948
|
+
self.incomplete_records = list()
|
|
949
|
+
for record in missing:
|
|
950
|
+
self.lookup(record)
|
|
951
|
+
|
|
932
952
|
|
|
933
953
|
@dataclasses.dataclass
|
|
934
954
|
class _DeserializingDimensionRecordLookupHelper(_DimensionRecordLookupHelper):
|
|
@@ -34,15 +34,7 @@ from collections.abc import Hashable
|
|
|
34
34
|
from typing import TYPE_CHECKING, Any, ClassVar, TypeAlias
|
|
35
35
|
|
|
36
36
|
import pydantic
|
|
37
|
-
from pydantic import
|
|
38
|
-
BaseModel,
|
|
39
|
-
Field,
|
|
40
|
-
StrictBool,
|
|
41
|
-
StrictFloat,
|
|
42
|
-
StrictInt,
|
|
43
|
-
StrictStr,
|
|
44
|
-
create_model,
|
|
45
|
-
)
|
|
37
|
+
from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr, create_model
|
|
46
38
|
|
|
47
39
|
import lsst.sphgeom
|
|
48
40
|
from lsst.utils.classes import immutable
|
|
@@ -533,6 +525,29 @@ class DimensionRecord:
|
|
|
533
525
|
results["datetime_end"] = timespan.end
|
|
534
526
|
return results
|
|
535
527
|
|
|
528
|
+
def get(self, name: str) -> Any:
|
|
529
|
+
"""Return a single metadata value associated with this record.
|
|
530
|
+
|
|
531
|
+
Parameters
|
|
532
|
+
----------
|
|
533
|
+
name : `str`
|
|
534
|
+
Key of the metadata value to be retrieved.
|
|
535
|
+
|
|
536
|
+
Returns
|
|
537
|
+
-------
|
|
538
|
+
value
|
|
539
|
+
The metadata value.
|
|
540
|
+
|
|
541
|
+
Raises
|
|
542
|
+
------
|
|
543
|
+
KeyError
|
|
544
|
+
If the given name is not a valid key in this dimension record.
|
|
545
|
+
"""
|
|
546
|
+
if name not in self.__slots__:
|
|
547
|
+
raise KeyError(f"'{name}' is not a valid record key for dimension '{self.definition.name}'")
|
|
548
|
+
|
|
549
|
+
return getattr(self, name)
|
|
550
|
+
|
|
536
551
|
def serialize_key_value(self) -> SerializedKeyValueDimensionRecord:
|
|
537
552
|
"""Serialize this record to a `list` that can be sliced into a key
|
|
538
553
|
(data ID values) / value (everything else) pair.
|
|
@@ -40,7 +40,17 @@ from .._timespan import Timespan
|
|
|
40
40
|
from ..column_spec import ColumnType
|
|
41
41
|
from ..dimensions import DimensionUniverse
|
|
42
42
|
from ..registry.queries.expressions.categorize import ExpressionConstant, categorizeConstant
|
|
43
|
-
from ..registry.queries.expressions.parser import
|
|
43
|
+
from ..registry.queries.expressions.parser import (
|
|
44
|
+
BoxNode,
|
|
45
|
+
CircleNode,
|
|
46
|
+
Node,
|
|
47
|
+
PointNode,
|
|
48
|
+
PolygonNode,
|
|
49
|
+
RangeLiteral,
|
|
50
|
+
RegionNode,
|
|
51
|
+
TreeVisitor,
|
|
52
|
+
parse_expression,
|
|
53
|
+
)
|
|
44
54
|
from ._identifiers import IdentifierContext, interpret_identifier
|
|
45
55
|
from .tree import (
|
|
46
56
|
BinaryExpression,
|
|
@@ -251,12 +261,67 @@ class _ConversionVisitor(TreeVisitor[_VisitorResult]):
|
|
|
251
261
|
return expression
|
|
252
262
|
|
|
253
263
|
def visitPointNode(self, ra: _VisitorResult, dec: _VisitorResult, node: PointNode) -> _VisitorResult:
|
|
254
|
-
ra_value = _get_float_literal_value(ra, node.ra)
|
|
255
|
-
dec_value = _get_float_literal_value(dec, node.dec)
|
|
264
|
+
ra_value = _get_float_literal_value(ra, node.ra, "POINT")
|
|
265
|
+
dec_value = _get_float_literal_value(dec, node.dec, "POINT")
|
|
256
266
|
|
|
257
267
|
lon_lat = lsst.sphgeom.LonLat.fromDegrees(ra_value, dec_value)
|
|
258
268
|
return _make_literal(lon_lat)
|
|
259
269
|
|
|
270
|
+
def visitCircleNode(
|
|
271
|
+
self, ra: _VisitorResult, dec: _VisitorResult, radius: _VisitorResult, node: CircleNode
|
|
272
|
+
) -> _VisitorResult:
|
|
273
|
+
ra_value = _get_float_literal_value(ra, node.ra, "CIRCLE")
|
|
274
|
+
dec_value = _get_float_literal_value(dec, node.dec, "CIRCLE")
|
|
275
|
+
radius_value = _get_float_literal_value(radius, node.radius, "CIRCLE")
|
|
276
|
+
|
|
277
|
+
lon_lat = lsst.sphgeom.LonLat.fromDegrees(ra_value, dec_value)
|
|
278
|
+
open_angle = lsst.sphgeom.Angle.fromDegrees(radius_value * 2)
|
|
279
|
+
vec = lsst.sphgeom.UnitVector3d(lon_lat)
|
|
280
|
+
circle = lsst.sphgeom.Circle(vec, open_angle)
|
|
281
|
+
return _make_literal(circle)
|
|
282
|
+
|
|
283
|
+
def visitBoxNode(
|
|
284
|
+
self,
|
|
285
|
+
ra: _VisitorResult,
|
|
286
|
+
dec: _VisitorResult,
|
|
287
|
+
width: _VisitorResult,
|
|
288
|
+
height: _VisitorResult,
|
|
289
|
+
node: BoxNode,
|
|
290
|
+
) -> _VisitorResult:
|
|
291
|
+
ra_value = _get_float_literal_value(ra, node.ra, "BOX")
|
|
292
|
+
dec_value = _get_float_literal_value(dec, node.dec, "BOX")
|
|
293
|
+
width_value = _get_float_literal_value(width, node.width, "BOX")
|
|
294
|
+
height_value = _get_float_literal_value(height, node.height, "BOX")
|
|
295
|
+
|
|
296
|
+
lon_lat = lsst.sphgeom.LonLat.fromDegrees(ra_value, dec_value)
|
|
297
|
+
half_width = lsst.sphgeom.Angle.fromDegrees(width_value / 2)
|
|
298
|
+
half_height = lsst.sphgeom.Angle.fromDegrees(height_value / 2)
|
|
299
|
+
box = lsst.sphgeom.Box(lon_lat, half_width, half_height)
|
|
300
|
+
return _make_literal(box)
|
|
301
|
+
|
|
302
|
+
def visitPolygonNode(
|
|
303
|
+
self, vertices: list[tuple[_VisitorResult, _VisitorResult]], node: PolygonNode
|
|
304
|
+
) -> _VisitorResult:
|
|
305
|
+
sphgeom_vertices = []
|
|
306
|
+
for ra, dec in vertices:
|
|
307
|
+
ra_value = _get_float_literal_value(ra, node, "POLYGON")
|
|
308
|
+
dec_value = _get_float_literal_value(dec, node, "POLYGON")
|
|
309
|
+
lon_lat = lsst.sphgeom.LonLat.fromDegrees(ra_value, dec_value)
|
|
310
|
+
sphgeom_vertices.append(lsst.sphgeom.UnitVector3d(lon_lat))
|
|
311
|
+
|
|
312
|
+
polygon = lsst.sphgeom.ConvexPolygon(sphgeom_vertices)
|
|
313
|
+
return _make_literal(polygon)
|
|
314
|
+
|
|
315
|
+
def visitRegionNode(self, pos: _VisitorResult, node: RegionNode) -> _VisitorResult:
|
|
316
|
+
if isinstance(pos, _ColExpr):
|
|
317
|
+
expr = pos.value
|
|
318
|
+
if expr.expression_type == "string":
|
|
319
|
+
pos_str = expr.value
|
|
320
|
+
region = lsst.sphgeom.Region.from_ivoa_pos(pos_str)
|
|
321
|
+
return _make_literal(region)
|
|
322
|
+
|
|
323
|
+
raise InvalidQueryError(f"Expression '{node.pos}' in REGION() is not a literal string.")
|
|
324
|
+
|
|
260
325
|
def visitRangeLiteral(
|
|
261
326
|
self, start: int, stop: int, stride: int | None, node: RangeLiteral
|
|
262
327
|
) -> _VisitorResult:
|
|
@@ -379,7 +444,7 @@ def _get_boolean_column_reference(predicate: Predicate) -> ColumnReference | Non
|
|
|
379
444
|
return None
|
|
380
445
|
|
|
381
446
|
|
|
382
|
-
def _get_float_literal_value(value: _VisitorResult, node: Node) -> float:
|
|
447
|
+
def _get_float_literal_value(value: _VisitorResult, node: Node, name: str) -> float:
|
|
383
448
|
"""If the given ``value`` is a literal `float` or `int` expression, return
|
|
384
449
|
it as a float. Otherwise raise an `InvalidQueryError` identifying a
|
|
385
450
|
problem with the given ``node``.
|
|
@@ -391,6 +456,6 @@ def _get_float_literal_value(value: _VisitorResult, node: Node) -> float:
|
|
|
391
456
|
elif expr.expression_type == "int":
|
|
392
457
|
return float(expr.value)
|
|
393
458
|
elif expr.expression_type == "unary" and expr.operator == "-":
|
|
394
|
-
return -1 * _get_float_literal_value(_ColExpr(expr.operand), node)
|
|
459
|
+
return -1 * _get_float_literal_value(_ColExpr(expr.operand), node, name)
|
|
395
460
|
|
|
396
|
-
raise InvalidQueryError(f"Expression '{node}' in
|
|
461
|
+
raise InvalidQueryError(f"Expression '{node}' in {name}() is not a literal number.")
|
|
@@ -457,6 +457,40 @@ class PredicateConversionVisitor(TreeVisitor[VisitorResult]):
|
|
|
457
457
|
# do not support actual use just yet.
|
|
458
458
|
raise NotImplementedError("POINT() function is not supported yet")
|
|
459
459
|
|
|
460
|
+
def visitCircleNode(
|
|
461
|
+
self, ra: VisitorResult, dec: VisitorResult, radius: VisitorResult, node: Node
|
|
462
|
+
) -> VisitorResult:
|
|
463
|
+
# Docstring inherited.
|
|
464
|
+
|
|
465
|
+
# this is a placeholder for future extension, we enabled syntax but
|
|
466
|
+
# do not support actual use just yet.
|
|
467
|
+
raise NotImplementedError("CIRCLE() function is not supported yet")
|
|
468
|
+
|
|
469
|
+
def visitBoxNode(
|
|
470
|
+
self, ra: VisitorResult, dec: VisitorResult, width: VisitorResult, height: VisitorResult, node: Node
|
|
471
|
+
) -> VisitorResult:
|
|
472
|
+
# Docstring inherited.
|
|
473
|
+
|
|
474
|
+
# this is a placeholder for future extension, we enabled syntax but
|
|
475
|
+
# do not support actual use just yet.
|
|
476
|
+
raise NotImplementedError("BOX() function is not supported yet")
|
|
477
|
+
|
|
478
|
+
def visitPolygonNode(
|
|
479
|
+
self, vertices: list[tuple[VisitorResult, VisitorResult]], node: Node
|
|
480
|
+
) -> VisitorResult:
|
|
481
|
+
# Docstring inherited.
|
|
482
|
+
|
|
483
|
+
# this is a placeholder for future extension, we enabled syntax but
|
|
484
|
+
# do not support actual use just yet.
|
|
485
|
+
raise NotImplementedError("POLYGON() function is not supported yet")
|
|
486
|
+
|
|
487
|
+
def visitRegionNode(self, pos: VisitorResult, node: Node) -> VisitorResult:
|
|
488
|
+
# Docstring inherited.
|
|
489
|
+
|
|
490
|
+
# this is a placeholder for future extension, we enabled syntax but
|
|
491
|
+
# do not support actual use just yet.
|
|
492
|
+
raise NotImplementedError("REGION() function is not supported yet")
|
|
493
|
+
|
|
460
494
|
def visitRangeLiteral(self, start: int, stop: int, stride: int | None, node: Node) -> VisitorResult:
|
|
461
495
|
# Docstring inherited.
|
|
462
496
|
return ColumnContainer.range_literal(range(start, stop + 1, stride or 1))
|
|
@@ -285,6 +285,26 @@ class InspectionVisitor(TreeVisitor[TreeSummary]):
|
|
|
285
285
|
# Docstring inherited from base class
|
|
286
286
|
return TreeSummary()
|
|
287
287
|
|
|
288
|
+
def visitCircleNode(
|
|
289
|
+
self, ra: TreeSummary, dec: TreeSummary, radius: TreeSummary, node: Node
|
|
290
|
+
) -> TreeSummary:
|
|
291
|
+
# Docstring inherited from base class
|
|
292
|
+
return TreeSummary()
|
|
293
|
+
|
|
294
|
+
def visitPolygonNode(self, vertices: list[tuple[TreeSummary, TreeSummary]], node: Node) -> TreeSummary:
|
|
295
|
+
# Docstring inherited from base class
|
|
296
|
+
return TreeSummary()
|
|
297
|
+
|
|
298
|
+
def visitRegionNode(self, pos: TreeSummary, node: Node) -> TreeSummary:
|
|
299
|
+
# Docstring inherited from base class
|
|
300
|
+
return TreeSummary()
|
|
301
|
+
|
|
302
|
+
def visitBoxNode(
|
|
303
|
+
self, ra: TreeSummary, dec: TreeSummary, width: TreeSummary, height: TreeSummary, node: Node
|
|
304
|
+
) -> TreeSummary:
|
|
305
|
+
# Docstring inherited from base class
|
|
306
|
+
return TreeSummary()
|
|
307
|
+
|
|
288
308
|
def visitGlobNode(self, expression: TreeSummary, pattern: TreeSummary, node: Node) -> TreeSummary:
|
|
289
309
|
# Docstring inherited from base class
|
|
290
310
|
# pattern is a literal, but expression should refer to a dimension.
|
|
@@ -1098,6 +1098,33 @@ class TransformationVisitor(TreeVisitor[TransformationWrapper]):
|
|
|
1098
1098
|
# Docstring inherited from TreeVisitor.visitPointNode
|
|
1099
1099
|
raise NotImplementedError("POINT() function is not supported yet")
|
|
1100
1100
|
|
|
1101
|
+
def visitCircleNode(
|
|
1102
|
+
self, ra: TransformationWrapper, dec: TransformationWrapper, radius: TransformationWrapper, node: Node
|
|
1103
|
+
) -> TransformationWrapper:
|
|
1104
|
+
# Docstring inherited from TreeVisitor.visitCircleNode
|
|
1105
|
+
raise NotImplementedError("CIRCLE() function is not supported yet")
|
|
1106
|
+
|
|
1107
|
+
def visitBoxNode(
|
|
1108
|
+
self,
|
|
1109
|
+
ra: TransformationWrapper,
|
|
1110
|
+
dec: TransformationWrapper,
|
|
1111
|
+
width: TransformationWrapper,
|
|
1112
|
+
height: TransformationWrapper,
|
|
1113
|
+
node: Node,
|
|
1114
|
+
) -> TransformationWrapper:
|
|
1115
|
+
# Docstring inherited from TreeVisitor.visitBoxNode
|
|
1116
|
+
raise NotImplementedError("BOX() function is not supported yet")
|
|
1117
|
+
|
|
1118
|
+
def visitPolygonNode(
|
|
1119
|
+
self, vertices: list[tuple[TransformationWrapper, TransformationWrapper]], node: Node
|
|
1120
|
+
) -> TransformationWrapper:
|
|
1121
|
+
# Docstring inherited from TreeVisitor.visitPolygonNode
|
|
1122
|
+
raise NotImplementedError("POLYGON() function is not supported yet")
|
|
1123
|
+
|
|
1124
|
+
def visitRegionNode(self, pos: TransformationWrapper, node: Node) -> TransformationWrapper:
|
|
1125
|
+
# Docstring inherited from TreeVisitor.visitRegionNode
|
|
1126
|
+
raise NotImplementedError("REGION() function is not supported yet")
|
|
1127
|
+
|
|
1101
1128
|
def visitGlobNode(
|
|
1102
1129
|
self, expression: TransformationWrapper, pattern: TransformationWrapper, node: Node
|
|
1103
1130
|
) -> TransformationWrapper:
|