lsst-daf-butler 29.2025.3600__tar.gz → 29.2025.3800__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.3600/python/lsst_daf_butler.egg-info → lsst_daf_butler-29.2025.3800}/PKG-INFO +9 -2
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/README.md +8 -1
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/column_spec.py +1 -2
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastores/chainedDatastore.py +0 -3
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/delegates/arrowtable.py +19 -13
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/formatters/parquet.py +13 -3
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/logging.py +3 -3
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/registry_data/spatial.py +1 -1
- lsst_daf_butler-29.2025.3800/python/lsst/daf/butler/version.py +2 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800/python/lsst_daf_butler.egg-info}/PKG-INFO +9 -2
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_butler.py +62 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_datastore.py +14 -5
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_logging.py +12 -4
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_parquet.py +25 -0
- lsst_daf_butler-29.2025.3600/python/lsst/daf/butler/version.py +0 -2
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/COPYRIGHT +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/LICENSE +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/MANIFEST.in +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/bsd_license.txt +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/CHANGES.rst +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/configuring.rst +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/datastores.rst +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/dimensions.rst +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/formatters.rst +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/index.rst +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/organizing.rst +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/queries.rst +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/writing-subcommands.rst +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/gpl-v3.0.txt +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/pyproject.toml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_butler.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_butler_config.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_butler_instance_options.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_butler_metrics.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_collection_type.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_column_categorization.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_column_tags.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_column_type_info.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_config.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_config_support.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_dataset_association.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_dataset_existence.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_dataset_provenance.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_dataset_ref.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_dataset_type.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_exceptions.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_file_dataset.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_file_descriptor.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_formatter.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_labeled_butler_factory.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_limited_butler.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_location.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_named.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_quantum.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_quantum_backed.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_query_all_datasets.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_registry_shim.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_rubin/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_rubin/file_datasets.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_standalone_datastore.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_storage_class.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_timespan.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_topology.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/arrow_utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/butler.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/cliLog.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/cmd/commands.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/opt/options.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/progress.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/cli/utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/datastores/formatters.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/registry.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/configs/storageClasses.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastore/_datastore.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastore/_transfer.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastore/composites.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastore/constraints.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastore/generic_base.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastore/record_data.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastore/stored_file_info.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastores/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastores/fileDatastore.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastores/file_datastore/get.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastores/file_datastore/transfer.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/ddl.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/delegates/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_config.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_coordinate.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_database.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_elements.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_group.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_record_set.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_record_table.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_records.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/_universe.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/construction.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/dimensions/record_cache.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/direct_butler/_direct_butler.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/direct_query_driver/_driver.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/formatters/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/formatters/file.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/formatters/json.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/formatters/logs.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/formatters/packages.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/formatters/pickle.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/formatters/typeless.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/formatters/yaml.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/json.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/mapping_factory.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/name_shrinker.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/nonempty_mapping.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/persistence_context.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/progress.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/py.typed +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/pydantic_utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/_base.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/_expression_strings.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/_general_query_results.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/_identifiers.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/_query.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/convert_args.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/driver.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/expression_factory.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/overlaps.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/predicate_constraints_summary.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/result_specs.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/tree/_base.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/tree/_column_expression.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/tree/_column_set.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/tree/_predicate.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/tree/_query_tree.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/queries/visitors.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/_collection_record_cache.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/_collection_summary_cache.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/_config.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/_defaults.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/_registry.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/attributes.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/bridge/ephemeral.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/bridge/monolithic.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/collections/_base.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/connectionString.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/databases/postgresql.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/databases/sqlite.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/dimensions/static.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/interfaces/_bridge.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/interfaces/_database.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/interfaces/_datasets.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/interfaces/_obscore.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/managers.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/obscore/_config.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/obscore/_records.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/obscore/_spatial.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/opaque.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/_builder.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/_query.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/_query_backend.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/_query_context.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/_readers.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/_results.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/_sql_query_backend.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/_sql_query_context.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/_structs.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/butler_sql_engine.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/_predicate.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/categorize.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/check.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/normalForm.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/parser/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/parser/exprTree.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/parser/parser.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/parser/parserLex.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/parser/parserYacc.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/lex.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/yacc.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/expressions/parser/treeVisitor.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/queries/find_first_dataset.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/sql_registry.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/tests/_registry.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/versions.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/registry/wildcards.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_get.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_http_connection.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_query_driver.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_registry.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_remote_butler.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/authentication/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/authentication/cadc.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/authentication/interface.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/authentication/rubin.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/registry/_query_common.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/registry/_query_data_coordinates.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/registry/_query_datasets.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/registry/_query_dimension_records.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/_config.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/_dependencies.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/_server.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/_telemetry.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/handlers/_external_query.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/handlers/_file_info.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/handlers/_query_limits.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/handlers/_query_serialization.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/handlers/_query_streaming.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/repo_relocation.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/_associate.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/_pruneDatasets.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/butlerImport.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/collectionChain.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/configDump.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/configValidate.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/createRepo.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/ingest_files.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/ingest_zip.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/queryCollections.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/removeCollections.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/removeRuns.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/retrieveArtifacts.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/script/transferDatasets.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/butler_queries.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/cliCmdTestBase.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/hybrid_butler.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/postgresql.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/registry_data/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/registry_data/base.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset-skymap.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/registry_data/datasets.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/registry_data/hsc-rc2-subset-v0.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/registry_data/spatial.yaml +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/server.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/server_utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/tests/utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/time_utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/timespan_database_representation.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/transfers/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/transfers/_context.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst_daf_butler.egg-info/SOURCES.txt +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst_daf_butler.egg-info/requires.txt +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/setup.cfg +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_astropyTableFormatter.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_authentication.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_butler_factory.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdAssociate.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdConfigDump.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdConfigValidate.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdCreate.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdImport.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdIngestFiles.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdPruneDatasets.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdQueryCollections.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdQueryDataIds.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdQueryDatasets.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdRemoveCollections.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdRemoveRuns.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliLog.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliPluginLoader.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliUtilSplitCommas.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliUtilSplitKv.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliUtilToUpper.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_cliUtils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_column_spec.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_composites.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_config.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_connectionString.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_constraints.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_datasets.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_ddl.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_dimension_record_containers.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_dimensions.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_exprParserLex.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_exprParserYacc.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_expressions.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_formatter.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_gafaelfawr.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_location.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_logFormatter.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_matplotlibFormatter.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_nonempty_mapping.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_normalFormExpression.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_obscore.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_packages.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_postgresql.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_progress.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_pydantic_utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_quantum.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_quantumBackedButler.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_query_direct_postgresql.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_query_direct_sqlite.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_query_interface.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_query_relations.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_query_remote.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_query_utilities.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_remote_butler.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_server.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_simpleButler.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_sqlite.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_storageClass.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_templates.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_testRepo.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_thread_utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_time_utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_timespan.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/tests/test_utils.py +0 -0
- {lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/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.3800
|
|
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
|
|
@@ -63,7 +63,8 @@ Please cite [the SPIE paper](https://doi.org/10.1117/12.2629569) when using this
|
|
|
63
63
|
|
|
64
64
|
This is a **Python 3 only** package (we assume Python 3.11 or higher).
|
|
65
65
|
|
|
66
|
-
* SPIE
|
|
66
|
+
* SPIE paper from 2024: [Converting Rubin Observatory's data butler to a client/server architecture](https://doi.org/10.1117/12.3019130) ([Tech note](https://dmtn-288.lsst.io))
|
|
67
|
+
* SPIE Paper from 2022: [The Vera C. Rubin Observatory Data Butler and Pipeline Execution System](https://doi.org/10.1117/12.2629569) ([arXiv](https://arxiv.org/abs/2206.14941)) \[Primary reference]
|
|
67
68
|
* ADASS paper from 2019: [Abstracting the Storage and Retrieval of Image Data at the LSST](https://ui.adsabs.harvard.edu/abs/2019ASPC..523..653J/abstract).
|
|
68
69
|
* Early design note: [DMTN-056](https://dmtn-056.lsst.io)
|
|
69
70
|
|
|
@@ -71,3 +72,9 @@ PyPI: [lsst-daf-butler](https://pypi.org/project/lsst-daf-butler/)
|
|
|
71
72
|
|
|
72
73
|
This software is dual licensed under the GNU General Public License (version 3 of the License, or (at your option) any later version, and also under a 3-clause BSD license).
|
|
73
74
|
Recipients may choose which of these licenses to use; please see the files gpl-3.0.txt and/or bsd_license.txt, respectively.
|
|
75
|
+
|
|
76
|
+
## Arrow Memory Leaks
|
|
77
|
+
|
|
78
|
+
From version 18 of arrow we have seen significant memory leaks when accessing parquet files using the default memory allocator.
|
|
79
|
+
If you see such leaks the workaround is to set the `ARROW_DEFAULT_MEMORY_POOL` environment variable to `jemalloc` following the advice from [apache/arrow#45882](https://github.com/apache/arrow/issues/45882).
|
|
80
|
+
For EUPS users this variable is automatically set.
|
|
@@ -8,7 +8,8 @@ Please cite [the SPIE paper](https://doi.org/10.1117/12.2629569) when using this
|
|
|
8
8
|
|
|
9
9
|
This is a **Python 3 only** package (we assume Python 3.11 or higher).
|
|
10
10
|
|
|
11
|
-
* SPIE
|
|
11
|
+
* SPIE paper from 2024: [Converting Rubin Observatory's data butler to a client/server architecture](https://doi.org/10.1117/12.3019130) ([Tech note](https://dmtn-288.lsst.io))
|
|
12
|
+
* SPIE Paper from 2022: [The Vera C. Rubin Observatory Data Butler and Pipeline Execution System](https://doi.org/10.1117/12.2629569) ([arXiv](https://arxiv.org/abs/2206.14941)) \[Primary reference]
|
|
12
13
|
* ADASS paper from 2019: [Abstracting the Storage and Retrieval of Image Data at the LSST](https://ui.adsabs.harvard.edu/abs/2019ASPC..523..653J/abstract).
|
|
13
14
|
* Early design note: [DMTN-056](https://dmtn-056.lsst.io)
|
|
14
15
|
|
|
@@ -16,3 +17,9 @@ PyPI: [lsst-daf-butler](https://pypi.org/project/lsst-daf-butler/)
|
|
|
16
17
|
|
|
17
18
|
This software is dual licensed under the GNU General Public License (version 3 of the License, or (at your option) any later version, and also under a 3-clause BSD license).
|
|
18
19
|
Recipients may choose which of these licenses to use; please see the files gpl-3.0.txt and/or bsd_license.txt, respectively.
|
|
20
|
+
|
|
21
|
+
## Arrow Memory Leaks
|
|
22
|
+
|
|
23
|
+
From version 18 of arrow we have seen significant memory leaks when accessing parquet files using the default memory allocator.
|
|
24
|
+
If you see such leaks the workaround is to set the `ARROW_DEFAULT_MEMORY_POOL` environment variable to `jemalloc` following the advice from [apache/arrow#45882](https://github.com/apache/arrow/issues/45882).
|
|
25
|
+
For EUPS users this variable is automatically set.
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/column_spec.py
RENAMED
|
@@ -52,7 +52,6 @@ from typing import (
|
|
|
52
52
|
Any,
|
|
53
53
|
ClassVar,
|
|
54
54
|
Literal,
|
|
55
|
-
Optional,
|
|
56
55
|
TypeAlias,
|
|
57
56
|
Union,
|
|
58
57
|
final,
|
|
@@ -254,7 +253,7 @@ class _BaseColumnSpec(pydantic.BaseModel, ABC):
|
|
|
254
253
|
"""
|
|
255
254
|
base = self._get_base_annotated_type()
|
|
256
255
|
if self.nullable:
|
|
257
|
-
return
|
|
256
|
+
return base | None
|
|
258
257
|
return base
|
|
259
258
|
|
|
260
259
|
@abstractmethod
|
|
@@ -562,9 +562,6 @@ class ChainedDatastore(Datastore):
|
|
|
562
562
|
|
|
563
563
|
def _prepIngest(self, *datasets: FileDataset, transfer: str | None = None) -> _IngestPrepData:
|
|
564
564
|
# Docstring inherited from Datastore._prepIngest.
|
|
565
|
-
if transfer is None:
|
|
566
|
-
raise NotImplementedError("ChainedDatastore does not support transfer=None.")
|
|
567
|
-
|
|
568
565
|
def isDatasetAcceptable(dataset: FileDataset, *, name: str, constraints: Constraints) -> bool:
|
|
569
566
|
acceptable = [ref for ref in dataset.refs if constraints.isAcceptable(ref)]
|
|
570
567
|
if not acceptable:
|
|
@@ -32,6 +32,7 @@ from __future__ import annotations
|
|
|
32
32
|
__all__ = ["ArrowTableDelegate"]
|
|
33
33
|
|
|
34
34
|
from collections.abc import Mapping
|
|
35
|
+
from fnmatch import fnmatchcase
|
|
35
36
|
from typing import TYPE_CHECKING, Any
|
|
36
37
|
|
|
37
38
|
import pyarrow as pa
|
|
@@ -162,28 +163,33 @@ class ArrowTableDelegate(StorageClassDelegate):
|
|
|
162
163
|
parameters["columns"],
|
|
163
164
|
stringify=False,
|
|
164
165
|
)
|
|
166
|
+
# Ensure uniqueness, keeping order.
|
|
167
|
+
readColumns = list(dict.fromkeys(readColumns))
|
|
165
168
|
else:
|
|
166
|
-
|
|
169
|
+
readColumnsIn = list(dict.fromkeys(ensure_iterable(parameters["columns"])))
|
|
167
170
|
|
|
168
|
-
|
|
171
|
+
if typeString == "pandas":
|
|
172
|
+
# Exclude index columns from the subset.
|
|
173
|
+
readColumnsIn = [
|
|
174
|
+
name for name in readColumnsIn if name not in inMemoryDataset.index.names
|
|
175
|
+
]
|
|
176
|
+
|
|
177
|
+
readColumnsDict = {}
|
|
178
|
+
for column in readColumnsIn:
|
|
169
179
|
if not isinstance(column, str):
|
|
170
180
|
raise NotImplementedError(
|
|
171
181
|
f"InMemoryDataset of a {get_full_type_name(inMemoryDataset)} only "
|
|
172
182
|
"supports string column names."
|
|
173
183
|
)
|
|
174
|
-
|
|
184
|
+
found = False
|
|
185
|
+
for allColumn in allColumns:
|
|
186
|
+
if fnmatchcase(allColumn, column):
|
|
187
|
+
found = True
|
|
188
|
+
readColumnsDict[allColumn] = True
|
|
189
|
+
if not found:
|
|
175
190
|
raise ValueError(f"Unrecognized column name {column!r}.")
|
|
176
191
|
|
|
177
|
-
|
|
178
|
-
# Exclude index columns from the subset.
|
|
179
|
-
readColumns = [
|
|
180
|
-
name
|
|
181
|
-
for name in ensure_iterable(parameters["columns"])
|
|
182
|
-
if name not in inMemoryDataset.index.names
|
|
183
|
-
]
|
|
184
|
-
|
|
185
|
-
# Ensure uniqueness, keeping order.
|
|
186
|
-
readColumns = list(dict.fromkeys(readColumns))
|
|
192
|
+
readColumns = list(readColumnsDict.keys())
|
|
187
193
|
|
|
188
194
|
if typeString == "arrow":
|
|
189
195
|
return inMemoryDataset.select(readColumns)
|
|
@@ -54,6 +54,7 @@ import json
|
|
|
54
54
|
import logging
|
|
55
55
|
import re
|
|
56
56
|
from collections.abc import Iterable, Sequence
|
|
57
|
+
from fnmatch import fnmatchcase
|
|
57
58
|
from typing import TYPE_CHECKING, Any, cast
|
|
58
59
|
|
|
59
60
|
import pyarrow as pa
|
|
@@ -154,14 +155,23 @@ class ParquetFormatter(FormatterV2):
|
|
|
154
155
|
|
|
155
156
|
if not has_pandas_multi_index:
|
|
156
157
|
# Ensure uniqueness, keeping order.
|
|
157
|
-
|
|
158
|
+
par_columns_in = list(dict.fromkeys(ensure_iterable(par_columns)))
|
|
158
159
|
file_columns = [name for name in schema.names if not name.startswith("__")]
|
|
159
160
|
|
|
160
|
-
|
|
161
|
-
|
|
161
|
+
# Do case-sensitive glob-style matching, again ensuring
|
|
162
|
+
# uniqueness and ordering.
|
|
163
|
+
par_columns = {}
|
|
164
|
+
for par_column in par_columns_in:
|
|
165
|
+
found = False
|
|
166
|
+
for file_column in file_columns:
|
|
167
|
+
if fnmatchcase(file_column, par_column):
|
|
168
|
+
found = True
|
|
169
|
+
par_columns[file_column] = True
|
|
170
|
+
if not found:
|
|
162
171
|
raise ValueError(
|
|
163
172
|
f"Column {par_column} specified in parameters not available in parquet file."
|
|
164
173
|
)
|
|
174
|
+
par_columns = list(par_columns.keys())
|
|
165
175
|
else:
|
|
166
176
|
par_columns = _standardize_multi_index_columns(
|
|
167
177
|
arrow_schema_to_pandas_index(schema),
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/logging.py
RENAMED
|
@@ -36,7 +36,7 @@ from collections.abc import Callable, Generator, Iterable, Iterator
|
|
|
36
36
|
from contextlib import contextmanager
|
|
37
37
|
from logging import Formatter, LogRecord, StreamHandler
|
|
38
38
|
from types import TracebackType
|
|
39
|
-
from typing import IO, Any, ClassVar, overload
|
|
39
|
+
from typing import IO, Any, ClassVar, Literal, overload
|
|
40
40
|
|
|
41
41
|
from pydantic import BaseModel, ConfigDict, PrivateAttr, RootModel
|
|
42
42
|
|
|
@@ -174,7 +174,7 @@ class ButlerMDC:
|
|
|
174
174
|
lno: int,
|
|
175
175
|
msg: str,
|
|
176
176
|
args: tuple,
|
|
177
|
-
exc_info: tuple | None,
|
|
177
|
+
exc_info: tuple | None | Literal[False],
|
|
178
178
|
func: str | None = None,
|
|
179
179
|
sinfo: TracebackType | None = None,
|
|
180
180
|
**kwargs: Any,
|
|
@@ -182,7 +182,7 @@ class ButlerMDC:
|
|
|
182
182
|
record = old_factory(name, level, fn, lno, msg, args, exc_info, func, sinfo, **kwargs)
|
|
183
183
|
# Make sure we send a copy of the global dict in the record.
|
|
184
184
|
mdc = MDCDict(cls._MDC)
|
|
185
|
-
if exc_info is not None:
|
|
185
|
+
if exc_info is not None and exc_info is not False:
|
|
186
186
|
_, ex, _ = exc_info
|
|
187
187
|
# TODO: this doesn't handle chained exceptions, fix on DM-47546
|
|
188
188
|
if hasattr(ex, "mdc"):
|
|
@@ -55,7 +55,7 @@ from astropy.time import Time
|
|
|
55
55
|
from astropy.wcs import WCS
|
|
56
56
|
from matplotlib import pyplot
|
|
57
57
|
|
|
58
|
-
import lsst.daf.butler #
|
|
58
|
+
import lsst.daf.butler # register Time/YAML conversions. # noqa: F401
|
|
59
59
|
from lsst.sphgeom import (
|
|
60
60
|
ConvexPolygon,
|
|
61
61
|
HealpixPixelization,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lsst-daf-butler
|
|
3
|
-
Version: 29.2025.
|
|
3
|
+
Version: 29.2025.3800
|
|
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
|
|
@@ -63,7 +63,8 @@ Please cite [the SPIE paper](https://doi.org/10.1117/12.2629569) when using this
|
|
|
63
63
|
|
|
64
64
|
This is a **Python 3 only** package (we assume Python 3.11 or higher).
|
|
65
65
|
|
|
66
|
-
* SPIE
|
|
66
|
+
* SPIE paper from 2024: [Converting Rubin Observatory's data butler to a client/server architecture](https://doi.org/10.1117/12.3019130) ([Tech note](https://dmtn-288.lsst.io))
|
|
67
|
+
* SPIE Paper from 2022: [The Vera C. Rubin Observatory Data Butler and Pipeline Execution System](https://doi.org/10.1117/12.2629569) ([arXiv](https://arxiv.org/abs/2206.14941)) \[Primary reference]
|
|
67
68
|
* ADASS paper from 2019: [Abstracting the Storage and Retrieval of Image Data at the LSST](https://ui.adsabs.harvard.edu/abs/2019ASPC..523..653J/abstract).
|
|
68
69
|
* Early design note: [DMTN-056](https://dmtn-056.lsst.io)
|
|
69
70
|
|
|
@@ -71,3 +72,9 @@ PyPI: [lsst-daf-butler](https://pypi.org/project/lsst-daf-butler/)
|
|
|
71
72
|
|
|
72
73
|
This software is dual licensed under the GNU General Public License (version 3 of the License, or (at your option) any later version, and also under a 3-clause BSD license).
|
|
73
74
|
Recipients may choose which of these licenses to use; please see the files gpl-3.0.txt and/or bsd_license.txt, respectively.
|
|
75
|
+
|
|
76
|
+
## Arrow Memory Leaks
|
|
77
|
+
|
|
78
|
+
From version 18 of arrow we have seen significant memory leaks when accessing parquet files using the default memory allocator.
|
|
79
|
+
If you see such leaks the workaround is to set the `ARROW_DEFAULT_MEMORY_POOL` environment variable to `jemalloc` following the advice from [apache/arrow#45882](https://github.com/apache/arrow/issues/45882).
|
|
80
|
+
For EUPS users this variable is automatically set.
|
|
@@ -2281,6 +2281,7 @@ class PosixDatastoreButlerTestCase(FileDatastoreButlerTests, unittest.TestCase):
|
|
|
2281
2281
|
)
|
|
2282
2282
|
source_butler = repo.butler
|
|
2283
2283
|
|
|
2284
|
+
# Test writing outputs to a FileDatastore.
|
|
2284
2285
|
with tempfile.TemporaryDirectory() as tempdir:
|
|
2285
2286
|
target_repo_config = Butler.makeRepo(tempdir)
|
|
2286
2287
|
refs = [repo.ref1, repo.ref2]
|
|
@@ -2294,10 +2295,71 @@ class PosixDatastoreButlerTestCase(FileDatastoreButlerTests, unittest.TestCase):
|
|
|
2294
2295
|
# Files should have been copied into the target datastore
|
|
2295
2296
|
self.assertTrue(ResourcePath(tempdir).join(path).exists())
|
|
2296
2297
|
|
|
2298
|
+
# Make sure the target Butler can ingest the datasets.
|
|
2299
|
+
target_butler = Butler(target_repo_config, writeable=True)
|
|
2300
|
+
target_butler.transfer_dimension_records_from(source_butler, refs)
|
|
2301
|
+
target_butler.ingest(*datasets, transfer=None)
|
|
2302
|
+
self.assertIsNotNone(target_butler.get(repo.ref1))
|
|
2303
|
+
self.assertIsNotNone(target_butler.get(repo.ref2))
|
|
2304
|
+
|
|
2297
2305
|
# Giving an empty list of files is a no-op.
|
|
2298
2306
|
no_datasets = transfer_datasets_to_datastore(source_butler, ButlerConfig(target_repo_config), [])
|
|
2299
2307
|
self.assertEqual(len(no_datasets), 0)
|
|
2300
2308
|
|
|
2309
|
+
# Test writing outputs to a ChainedDatastore.
|
|
2310
|
+
with tempfile.TemporaryDirectory() as tempdir:
|
|
2311
|
+
# Set up a second dataset type, so we can split the files across
|
|
2312
|
+
# multiple datastore roots.
|
|
2313
|
+
dt1 = repo.datasetType
|
|
2314
|
+
dt2 = DatasetType("other", dt1.dimensions, dt1.storageClass)
|
|
2315
|
+
source_butler.registry.registerDatasetType(dt2)
|
|
2316
|
+
other_ref = repo.addDataset(repo.ref1.dataId, datasetType=dt2)
|
|
2317
|
+
config = Config.fromString(
|
|
2318
|
+
f"""
|
|
2319
|
+
datastore:
|
|
2320
|
+
cls: lsst.daf.butler.datastores.chainedDatastore.ChainedDatastore
|
|
2321
|
+
datastore_constraints:
|
|
2322
|
+
- constraints:
|
|
2323
|
+
accept:
|
|
2324
|
+
- {dt1.name}
|
|
2325
|
+
- constraints:
|
|
2326
|
+
accept:
|
|
2327
|
+
- {dt2.name}
|
|
2328
|
+
datastores:
|
|
2329
|
+
- datastore:
|
|
2330
|
+
cls: lsst.daf.butler.datastores.fileDatastore.FileDatastore
|
|
2331
|
+
root: <butlerRoot>/FileDatastore_0
|
|
2332
|
+
- datastore:
|
|
2333
|
+
cls: lsst.daf.butler.datastores.fileDatastore.FileDatastore
|
|
2334
|
+
root: <butlerRoot>/FileDatastore_1
|
|
2335
|
+
"""
|
|
2336
|
+
)
|
|
2337
|
+
target_repo_config = Butler.makeRepo(tempdir, config)
|
|
2338
|
+
refs = [repo.ref1, repo.ref2, other_ref]
|
|
2339
|
+
datasets = transfer_datasets_to_datastore(source_butler, ButlerConfig(target_repo_config), refs)
|
|
2340
|
+
self.assertEqual(len(datasets), 3)
|
|
2341
|
+
self.assertEqual({ref.id for ref in refs}, {dataset.refs[0].id for dataset in datasets})
|
|
2342
|
+
for dataset in datasets:
|
|
2343
|
+
path = ResourcePath(dataset.path, forceAbsolute=False)
|
|
2344
|
+
# Paths should be relative paths to the target datastore.
|
|
2345
|
+
self.assertFalse(path.isabs())
|
|
2346
|
+
# Files should have been split up between the two datastores
|
|
2347
|
+
# in the chain.
|
|
2348
|
+
datastore_root = ResourcePath(tempdir)
|
|
2349
|
+
if dataset.refs[0].datasetType.name == dt1.name:
|
|
2350
|
+
datastore_root = datastore_root.join("FileDatastore_0")
|
|
2351
|
+
else:
|
|
2352
|
+
datastore_root = datastore_root.join("FileDatastore_1")
|
|
2353
|
+
self.assertTrue(datastore_root.join(path).exists())
|
|
2354
|
+
|
|
2355
|
+
# Make sure the target Butler can ingest the datasets.
|
|
2356
|
+
target_butler = Butler(target_repo_config, writeable=True)
|
|
2357
|
+
target_butler.transfer_dimension_records_from(source_butler, refs)
|
|
2358
|
+
target_butler.ingest(*datasets, transfer=None)
|
|
2359
|
+
self.assertIsNotNone(target_butler.get(repo.ref1))
|
|
2360
|
+
self.assertIsNotNone(target_butler.get(repo.ref2))
|
|
2361
|
+
self.assertIsNotNone(target_butler.get(other_ref))
|
|
2362
|
+
|
|
2301
2363
|
|
|
2302
2364
|
class PostgresPosixDatastoreButlerTestCase(FileDatastoreButlerTests, unittest.TestCase):
|
|
2303
2365
|
"""PosixDatastore specialization of a butler using Postgres"""
|
|
@@ -767,10 +767,19 @@ class DatastoreTests(DatastoreTestsBase):
|
|
|
767
767
|
) -> None:
|
|
768
768
|
"""Ingest a file already in the datastore root."""
|
|
769
769
|
# first move it into the root, and adjust the path
|
|
770
|
-
# accordingly
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
770
|
+
# accordingly.
|
|
771
|
+
# In the case of a ChainedDatastore, we have multiple
|
|
772
|
+
# roots, all of which will accept the file, so we
|
|
773
|
+
# have to copy it into all the roots.
|
|
774
|
+
relative_path = None
|
|
775
|
+
for root in datastore.roots.values():
|
|
776
|
+
if root is not None:
|
|
777
|
+
copied_path = shutil.copy(path, root.ospath)
|
|
778
|
+
relative_path = os.path.relpath(copied_path, start=root.ospath)
|
|
779
|
+
assert relative_path is not None, (
|
|
780
|
+
"Running a FileDatastore test on a Datastore instance without any roots"
|
|
781
|
+
)
|
|
782
|
+
datastore.ingest(FileDataset(path=relative_path, refs=ref), transfer=mode)
|
|
774
783
|
self.assertEqual(obj, datastore.get(ref))
|
|
775
784
|
|
|
776
785
|
def failInputDoesNotExist(
|
|
@@ -1394,7 +1403,7 @@ class ChainedDatastoreTestCase(PosixDatastoreTestCase):
|
|
|
1394
1403
|
configFile = os.path.join(TESTDIR, "config/basic/chainedDatastore.yaml")
|
|
1395
1404
|
hasUnsupportedPut = False
|
|
1396
1405
|
canIngestNoTransferAuto = False
|
|
1397
|
-
ingestTransferModes = ("copy", "move", "hardlink", "symlink", "relsymlink", "link", "auto")
|
|
1406
|
+
ingestTransferModes = (None, "copy", "move", "hardlink", "symlink", "relsymlink", "link", "auto")
|
|
1398
1407
|
isEphemeral = False
|
|
1399
1408
|
rootKeys = (".datastores.1.root", ".datastores.2.root")
|
|
1400
1409
|
validationCanFail = True
|
|
@@ -118,8 +118,13 @@ class LoggingTestCase(unittest.TestCase):
|
|
|
118
118
|
self.log.warning("warning message")
|
|
119
119
|
self.log.critical("critical message")
|
|
120
120
|
self.log.verbose("verbose message")
|
|
121
|
+
self.log.error("error message")
|
|
122
|
+
try:
|
|
123
|
+
raise RuntimeError("An error has occurred")
|
|
124
|
+
except RuntimeError:
|
|
125
|
+
self.log.exception("exception message")
|
|
121
126
|
|
|
122
|
-
self.assertEqual(len(self.handler.records),
|
|
127
|
+
self.assertEqual(len(self.handler.records), 6)
|
|
123
128
|
|
|
124
129
|
format_default = str(self.handler.records)
|
|
125
130
|
|
|
@@ -128,7 +133,7 @@ class LoggingTestCase(unittest.TestCase):
|
|
|
128
133
|
format_override = str(self.handler.records)
|
|
129
134
|
|
|
130
135
|
self.assertNotEqual(format_default, format_override)
|
|
131
|
-
self.assertEqual(format_override, "DEBUG\nWARNING\nCRITICAL\nVERBOSE")
|
|
136
|
+
self.assertEqual(format_override, "DEBUG\nWARNING\nCRITICAL\nVERBOSE\nERROR\nERROR")
|
|
132
137
|
|
|
133
138
|
# Reset the log format and it should match the original text.
|
|
134
139
|
self.handler.records.set_log_format(None)
|
|
@@ -284,11 +289,14 @@ class LoggingTestCase(unittest.TestCase):
|
|
|
284
289
|
self.log.exception("Exception raised:")
|
|
285
290
|
self.log.warning("Implied exception", exc_info=True)
|
|
286
291
|
self.log.critical("Explicit exception", exc_info=e)
|
|
292
|
+
self.log.error("Explicit exception info", exc_info=(Exception, e, e.__traceback__))
|
|
287
293
|
# Is original context used *only* when logging the exception?
|
|
288
294
|
self.log.error("Something went wrong")
|
|
289
|
-
|
|
295
|
+
self.log.error("Boolean disabled exc info", exc_info=False)
|
|
296
|
+
for i in [-6, -5, -4, -3]:
|
|
290
297
|
self.assertEqual(self.handler.records[i].MDC, {"foo": "fum", "answer": "42"})
|
|
291
|
-
|
|
298
|
+
for i in [-2, -1]:
|
|
299
|
+
self.assertEqual(self.handler.records[i].MDC, {"foo": "bar"})
|
|
292
300
|
|
|
293
301
|
self.log.setLevel(logging.INFO)
|
|
294
302
|
self.log.info("Normal log")
|
|
@@ -400,6 +400,10 @@ class ParquetFormatterDataFrameTestCase(unittest.TestCase):
|
|
|
400
400
|
self.assertTrue(df1.loc[:, ["ddd"]].equals(df6))
|
|
401
401
|
df7 = self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["a", "a"]})
|
|
402
402
|
self.assertTrue(df1.loc[:, ["a"]].equals(df7))
|
|
403
|
+
df8 = self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["d*"]})
|
|
404
|
+
self.assertTrue(df1.loc[:, ["ddd", "dtn", "dtu"]].equals(df8))
|
|
405
|
+
df9 = self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["d*", "d*"]})
|
|
406
|
+
self.assertTrue(df1.loc[:, ["ddd", "dtn", "dtu"]].equals(df9))
|
|
403
407
|
# Passing an unrecognized column should be a ValueError.
|
|
404
408
|
with self.assertRaises(ValueError):
|
|
405
409
|
self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["e"]})
|
|
@@ -989,6 +993,10 @@ class ParquetFormatterArrowAstropyTestCase(unittest.TestCase):
|
|
|
989
993
|
_checkAstropyTableEquality(tab1[("ddd",)], tab6)
|
|
990
994
|
tab7 = self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["a", "a"]})
|
|
991
995
|
_checkAstropyTableEquality(tab1[("a",)], tab7)
|
|
996
|
+
tab8 = self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["d??"]})
|
|
997
|
+
_checkAstropyTableEquality(tab1[("ddd", "dtn", "dtu")], tab8)
|
|
998
|
+
tab9 = self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["d??", "a*"]})
|
|
999
|
+
_checkAstropyTableEquality(tab1[("ddd", "dtn", "dtu", "a")], tab9)
|
|
992
1000
|
# Passing an unrecognized column should be a ValueError.
|
|
993
1001
|
with self.assertRaises(ValueError):
|
|
994
1002
|
self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["e"]})
|
|
@@ -1401,6 +1409,18 @@ class ParquetFormatterArrowNumpyTestCase(unittest.TestCase):
|
|
|
1401
1409
|
],
|
|
1402
1410
|
tab7,
|
|
1403
1411
|
)
|
|
1412
|
+
tab8 = self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["d??", "a*"]})
|
|
1413
|
+
_checkNumpyTableEquality(
|
|
1414
|
+
tab1[
|
|
1415
|
+
[
|
|
1416
|
+
"ddd",
|
|
1417
|
+
"dtn",
|
|
1418
|
+
"dtu",
|
|
1419
|
+
"a",
|
|
1420
|
+
]
|
|
1421
|
+
],
|
|
1422
|
+
tab8,
|
|
1423
|
+
)
|
|
1404
1424
|
# Passing an unrecognized column should be a ValueError.
|
|
1405
1425
|
with self.assertRaises(ValueError):
|
|
1406
1426
|
self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["e"]})
|
|
@@ -1673,6 +1693,8 @@ class ParquetFormatterArrowTableTestCase(unittest.TestCase):
|
|
|
1673
1693
|
self.assertEqual(tab6, tab1.select(("ddd",)))
|
|
1674
1694
|
tab7 = self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["a", "a"]})
|
|
1675
1695
|
self.assertEqual(tab7, tab1.select(("a",)))
|
|
1696
|
+
tab8 = self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["a*", "d??"]})
|
|
1697
|
+
self.assertEqual(tab8, tab1.select(("a", "ddd", "dtn", "dtu")))
|
|
1676
1698
|
# Passing an unrecognized column should be a ValueError.
|
|
1677
1699
|
with self.assertRaises(ValueError):
|
|
1678
1700
|
self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["e"]})
|
|
@@ -1984,6 +2006,9 @@ class ParquetFormatterArrowNumpyDictTestCase(unittest.TestCase):
|
|
|
1984
2006
|
tab7 = self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["a", "a"]})
|
|
1985
2007
|
subdict = {key: dict1[key] for key in ["a"]}
|
|
1986
2008
|
_checkNumpyDictEquality(subdict, tab7)
|
|
2009
|
+
tab8 = self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["d??", "a*"]})
|
|
2010
|
+
subdict = {key: dict1[key] for key in ["ddd", "dtn", "dtu", "a"]}
|
|
2011
|
+
_checkNumpyDictEquality(subdict, tab8)
|
|
1987
2012
|
# Passing an unrecognized column should be a ValueError.
|
|
1988
2013
|
with self.assertRaises(ValueError):
|
|
1989
2014
|
self.butler.get(self.datasetType, dataId={}, parameters={"columns": ["e"]})
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/CHANGES.rst
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/configuring.rst
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/datastores.rst
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/dimensions.rst
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/formatters.rst
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/organizing.rst
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/queries.rst
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/doc/lsst.daf.butler/use-in-tests.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/__init__.py
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_butler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_column_tags.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_dataset_ref.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_formatter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_location.py
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_named.py
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_quantum.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_timespan.py
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3600 → lsst_daf_butler-29.2025.3800}/python/lsst/daf/butler/_topology.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|