lsst-daf-butler 29.2025.1500__tar.gz → 29.2025.1700__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.
Files changed (429) hide show
  1. {lsst_daf_butler-29.2025.1500/python/lsst_daf_butler.egg-info → lsst_daf_butler-29.2025.1700}/PKG-INFO +1 -1
  2. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_config.py +1 -1
  3. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/datastores/formatters.yaml +1 -1
  4. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/storageClasses.yaml +3 -0
  5. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_universe.py +12 -8
  6. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/direct_butler/_direct_butler.py +142 -120
  7. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/direct_query_driver/_driver.py +1 -1
  8. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/_query.py +48 -1
  9. lsst_daf_butler-29.2025.1500/python/lsst/daf/butler/direct_query_driver/_predicate_constraints_summary.py → lsst_daf_butler-29.2025.1700/python/lsst/daf/butler/queries/predicate_constraints_summary.py +2 -2
  10. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_remote_butler.py +1 -8
  11. lsst_daf_butler-29.2025.1700/python/lsst/daf/butler/version.py +2 -0
  12. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700/python/lsst_daf_butler.egg-info}/PKG-INFO +1 -1
  13. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst_daf_butler.egg-info/SOURCES.txt +1 -1
  14. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_config.py +3 -3
  15. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_query_interface.py +39 -1
  16. lsst_daf_butler-29.2025.1500/python/lsst/daf/butler/version.py +0 -2
  17. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/COPYRIGHT +0 -0
  18. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/LICENSE +0 -0
  19. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/MANIFEST.in +0 -0
  20. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/README.md +0 -0
  21. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/bsd_license.txt +0 -0
  22. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/doc/lsst.daf.butler/CHANGES.rst +0 -0
  23. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
  24. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/doc/lsst.daf.butler/configuring.rst +0 -0
  25. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/doc/lsst.daf.butler/datastores.rst +0 -0
  26. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/doc/lsst.daf.butler/dimensions.rst +0 -0
  27. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/doc/lsst.daf.butler/formatters.rst +0 -0
  28. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/doc/lsst.daf.butler/index.rst +0 -0
  29. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/doc/lsst.daf.butler/organizing.rst +0 -0
  30. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/doc/lsst.daf.butler/queries.rst +0 -0
  31. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
  32. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/doc/lsst.daf.butler/writing-subcommands.rst +0 -0
  33. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/gpl-v3.0.txt +0 -0
  34. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/pyproject.toml +0 -0
  35. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/__init__.py +0 -0
  36. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/__init__.py +0 -0
  37. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/__init__.py +0 -0
  38. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_butler.py +0 -0
  39. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_butler_collections.py +0 -0
  40. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_butler_config.py +0 -0
  41. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_butler_instance_options.py +0 -0
  42. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
  43. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_collection_type.py +0 -0
  44. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_column_categorization.py +0 -0
  45. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_column_tags.py +0 -0
  46. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_column_type_info.py +0 -0
  47. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_config_support.py +0 -0
  48. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_dataset_association.py +0 -0
  49. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_dataset_existence.py +0 -0
  50. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_dataset_provenance.py +0 -0
  51. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_dataset_ref.py +0 -0
  52. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_dataset_type.py +0 -0
  53. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
  54. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_exceptions.py +0 -0
  55. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
  56. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_file_dataset.py +0 -0
  57. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_file_descriptor.py +0 -0
  58. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_formatter.py +0 -0
  59. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_labeled_butler_factory.py +0 -0
  60. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_limited_butler.py +0 -0
  61. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_location.py +0 -0
  62. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_named.py +0 -0
  63. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_quantum.py +0 -0
  64. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_quantum_backed.py +0 -0
  65. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_query_all_datasets.py +0 -0
  66. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_registry_shim.py +0 -0
  67. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_storage_class.py +0 -0
  68. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
  69. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_timespan.py +0 -0
  70. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_topology.py +0 -0
  71. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
  72. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
  73. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
  74. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
  75. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/arrow_utils.py +0 -0
  76. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/__init__.py +0 -0
  77. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/butler.py +0 -0
  78. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/cliLog.py +0 -0
  79. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
  80. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
  81. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +0 -0
  82. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/cmd/commands.py +0 -0
  83. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
  84. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
  85. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
  86. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/opt/options.py +0 -0
  87. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/progress.py +0 -0
  88. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/cli/utils.py +0 -0
  89. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/column_spec.py +0 -0
  90. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
  91. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
  92. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
  93. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
  94. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
  95. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
  96. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
  97. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
  98. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
  99. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
  100. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
  101. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
  102. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
  103. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/registry.yaml +0 -0
  104. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
  105. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastore/__init__.py +0 -0
  106. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastore/_datastore.py +0 -0
  107. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
  108. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastore/composites.py +0 -0
  109. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastore/constraints.py +0 -0
  110. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
  111. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastore/generic_base.py +0 -0
  112. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastore/record_data.py +0 -0
  113. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastore/stored_file_info.py +0 -0
  114. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastores/__init__.py +0 -0
  115. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastores/chainedDatastore.py +0 -0
  116. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastores/fileDatastore.py +0 -0
  117. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastores/fileDatastoreClient.py +0 -0
  118. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
  119. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastores/file_datastore/get.py +0 -0
  120. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +0 -0
  121. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +0 -0
  122. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/ddl.py +0 -0
  123. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/delegates/__init__.py +0 -0
  124. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/delegates/arrowtable.py +0 -0
  125. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
  126. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_config.py +0 -0
  127. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_coordinate.py +0 -0
  128. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
  129. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_database.py +0 -0
  130. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_elements.py +0 -0
  131. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
  132. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_group.py +0 -0
  133. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
  134. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_record_set.py +0 -0
  135. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_record_table.py +0 -0
  136. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_records.py +0 -0
  137. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
  138. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
  139. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/construction.py +0 -0
  140. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/dimensions/record_cache.py +0 -0
  141. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
  142. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
  143. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
  144. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
  145. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
  146. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +0 -0
  147. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +0 -0
  148. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
  149. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +0 -0
  150. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/formatters/__init__.py +0 -0
  151. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
  152. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/formatters/file.py +0 -0
  153. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/formatters/json.py +0 -0
  154. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/formatters/logs.py +0 -0
  155. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
  156. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/formatters/packages.py +0 -0
  157. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/formatters/parquet.py +0 -0
  158. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/formatters/pickle.py +0 -0
  159. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/formatters/typeless.py +0 -0
  160. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/formatters/yaml.py +0 -0
  161. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/json.py +0 -0
  162. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/logging.py +0 -0
  163. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/mapping_factory.py +0 -0
  164. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/name_shrinker.py +0 -0
  165. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/nonempty_mapping.py +0 -0
  166. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/persistence_context.py +0 -0
  167. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/progress.py +0 -0
  168. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/py.typed +0 -0
  169. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/pydantic_utils.py +0 -0
  170. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/__init__.py +0 -0
  171. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/_base.py +0 -0
  172. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
  173. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
  174. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
  175. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/_expression_strings.py +0 -0
  176. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/_general_query_results.py +0 -0
  177. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/_identifiers.py +0 -0
  178. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/convert_args.py +0 -0
  179. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/driver.py +0 -0
  180. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/expression_factory.py +0 -0
  181. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/overlaps.py +0 -0
  182. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/result_specs.py +0 -0
  183. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
  184. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/tree/_base.py +0 -0
  185. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/tree/_column_expression.py +0 -0
  186. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
  187. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
  188. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/tree/_column_set.py +0 -0
  189. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/tree/_predicate.py +0 -0
  190. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/tree/_query_tree.py +0 -0
  191. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/queries/visitors.py +0 -0
  192. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/__init__.py +0 -0
  193. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
  194. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/_collection_record_cache.py +0 -0
  195. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
  196. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/_collection_summary_cache.py +0 -0
  197. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/_config.py +0 -0
  198. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/_defaults.py +0 -0
  199. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
  200. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/_registry.py +0 -0
  201. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
  202. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/attributes.py +0 -0
  203. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
  204. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/bridge/ephemeral.py +0 -0
  205. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/bridge/monolithic.py +0 -0
  206. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
  207. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/collections/_base.py +0 -0
  208. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
  209. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
  210. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/connectionString.py +0 -0
  211. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
  212. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/databases/postgresql.py +0 -0
  213. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/databases/sqlite.py +0 -0
  214. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
  215. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
  216. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +0 -0
  217. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +0 -0
  218. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +0 -0
  219. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
  220. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
  221. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/dimensions/static.py +0 -0
  222. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
  223. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
  224. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/interfaces/_bridge.py +0 -0
  225. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
  226. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/interfaces/_database.py +0 -0
  227. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
  228. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/interfaces/_datasets.py +0 -0
  229. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +0 -0
  230. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/interfaces/_obscore.py +0 -0
  231. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
  232. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
  233. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/managers.py +0 -0
  234. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
  235. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
  236. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/obscore/_config.py +0 -0
  237. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
  238. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/obscore/_records.py +0 -0
  239. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
  240. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/obscore/_spatial.py +0 -0
  241. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
  242. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
  243. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/opaque.py +0 -0
  244. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/__init__.py +0 -0
  245. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/_builder.py +0 -0
  246. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/_query.py +0 -0
  247. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/_query_backend.py +0 -0
  248. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/_query_context.py +0 -0
  249. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/_readers.py +0 -0
  250. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/_results.py +0 -0
  251. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/_sql_query_backend.py +0 -0
  252. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/_sql_query_context.py +0 -0
  253. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/_structs.py +0 -0
  254. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/butler_sql_engine.py +0 -0
  255. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/__init__.py +0 -0
  256. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/_predicate.py +0 -0
  257. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/categorize.py +0 -0
  258. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/check.py +0 -0
  259. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/normalForm.py +0 -0
  260. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/parser/__init__.py +0 -0
  261. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/parser/exprTree.py +0 -0
  262. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/parser/parser.py +0 -0
  263. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/parser/parserLex.py +0 -0
  264. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/parser/parserYacc.py +0 -0
  265. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/__init__.py +0 -0
  266. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/lex.py +0 -0
  267. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/yacc.py +0 -0
  268. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/expressions/parser/treeVisitor.py +0 -0
  269. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/queries/find_first_dataset.py +0 -0
  270. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/sql_registry.py +0 -0
  271. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
  272. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
  273. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/tests/_registry.py +0 -0
  274. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/versions.py +0 -0
  275. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/registry/wildcards.py +0 -0
  276. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
  277. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_authentication.py +0 -0
  278. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
  279. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
  280. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
  281. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
  282. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
  283. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_http_connection.py +0 -0
  284. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_query_driver.py +0 -0
  285. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
  286. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
  287. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_registry.py +0 -0
  288. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
  289. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
  290. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/registry/_query_common.py +0 -0
  291. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/registry/_query_data_coordinates.py +0 -0
  292. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/registry/_query_datasets.py +0 -0
  293. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/registry/_query_dimension_records.py +0 -0
  294. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
  295. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server/_config.py +0 -0
  296. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server/_dependencies.py +0 -0
  297. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
  298. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server/_server.py +0 -0
  299. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +0 -0
  300. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server/handlers/_external_query.py +0 -0
  301. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
  302. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server/handlers/_query_serialization.py +0 -0
  303. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server/handlers/_query_streaming.py +0 -0
  304. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
  305. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
  306. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/repo_relocation.py +0 -0
  307. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/__init__.py +0 -0
  308. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/_associate.py +0 -0
  309. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/_pruneDatasets.py +0 -0
  310. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/butlerImport.py +0 -0
  311. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
  312. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/collectionChain.py +0 -0
  313. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/configDump.py +0 -0
  314. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/configValidate.py +0 -0
  315. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/createRepo.py +0 -0
  316. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
  317. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/ingest_files.py +0 -0
  318. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/ingest_zip.py +0 -0
  319. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/queryCollections.py +0 -0
  320. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
  321. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
  322. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
  323. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
  324. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
  325. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/removeCollections.py +0 -0
  326. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
  327. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/removeRuns.py +0 -0
  328. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/retrieveArtifacts.py +0 -0
  329. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/script/transferDatasets.py +0 -0
  330. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/__init__.py +0 -0
  331. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
  332. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
  333. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
  334. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
  335. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/butler_queries.py +0 -0
  336. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/cliCmdTestBase.py +0 -0
  337. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -0
  338. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
  339. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
  340. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/hybrid_butler.py +0 -0
  341. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
  342. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +0 -0
  343. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/postgresql.py +0 -0
  344. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/server.py +0 -0
  345. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/server_utils.py +0 -0
  346. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
  347. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/tests/utils.py +0 -0
  348. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/time_utils.py +0 -0
  349. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/timespan_database_representation.py +0 -0
  350. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/transfers/__init__.py +0 -0
  351. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/transfers/_context.py +0 -0
  352. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
  353. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
  354. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst/daf/butler/utils.py +0 -0
  355. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
  356. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
  357. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst_daf_butler.egg-info/requires.txt +0 -0
  358. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
  359. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
  360. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/setup.cfg +0 -0
  361. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_astropyTableFormatter.py +0 -0
  362. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_authentication.py +0 -0
  363. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_butler.py +0 -0
  364. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_butler_factory.py +0 -0
  365. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdAssociate.py +0 -0
  366. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdConfigDump.py +0 -0
  367. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdConfigValidate.py +0 -0
  368. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdCreate.py +0 -0
  369. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdImport.py +0 -0
  370. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdIngestFiles.py +0 -0
  371. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdPruneDatasets.py +0 -0
  372. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdQueryCollections.py +0 -0
  373. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdQueryDataIds.py +0 -0
  374. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
  375. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdQueryDatasets.py +0 -0
  376. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
  377. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdRemoveCollections.py +0 -0
  378. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdRemoveRuns.py +0 -0
  379. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
  380. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliLog.py +0 -0
  381. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliPluginLoader.py +0 -0
  382. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliUtilSplitCommas.py +0 -0
  383. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliUtilSplitKv.py +0 -0
  384. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliUtilToUpper.py +0 -0
  385. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_cliUtils.py +0 -0
  386. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_column_spec.py +0 -0
  387. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_composites.py +0 -0
  388. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_connectionString.py +0 -0
  389. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_constraints.py +0 -0
  390. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_datasets.py +0 -0
  391. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_datastore.py +0 -0
  392. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_ddl.py +0 -0
  393. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_dimension_record_containers.py +0 -0
  394. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_dimensions.py +0 -0
  395. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_exprParserLex.py +0 -0
  396. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_exprParserYacc.py +0 -0
  397. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_expressions.py +0 -0
  398. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_formatter.py +0 -0
  399. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_location.py +0 -0
  400. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_logFormatter.py +0 -0
  401. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_logging.py +0 -0
  402. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_matplotlibFormatter.py +0 -0
  403. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_nonempty_mapping.py +0 -0
  404. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_normalFormExpression.py +0 -0
  405. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_obscore.py +0 -0
  406. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_packages.py +0 -0
  407. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_parquet.py +0 -0
  408. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_postgresql.py +0 -0
  409. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_progress.py +0 -0
  410. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_pydantic_utils.py +0 -0
  411. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_quantum.py +0 -0
  412. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_quantumBackedButler.py +0 -0
  413. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_query_direct_postgresql.py +0 -0
  414. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_query_direct_sqlite.py +0 -0
  415. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_query_relations.py +0 -0
  416. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_query_remote.py +0 -0
  417. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_query_utilities.py +0 -0
  418. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_remote_butler.py +0 -0
  419. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_server.py +0 -0
  420. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_simpleButler.py +0 -0
  421. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_sqlite.py +0 -0
  422. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_storageClass.py +0 -0
  423. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_templates.py +0 -0
  424. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_testRepo.py +0 -0
  425. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_thread_utils.py +0 -0
  426. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_time_utils.py +0 -0
  427. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_timespan.py +0 -0
  428. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/tests/test_utils.py +0 -0
  429. {lsst_daf_butler-29.2025.1500 → lsst_daf_butler-29.2025.1700}/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.1500
3
+ Version: 29.2025.1700
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
@@ -1254,7 +1254,7 @@ class ConfigSubset(Config):
1254
1254
 
1255
1255
  Global defaults, at lowest priority, are found in the ``config``
1256
1256
  directory of the butler source tree. Additional defaults can be
1257
- defined using the environment variable ``$DAF_BUTLER_CONFIG_PATHS``
1257
+ defined using the environment variable ``$DAF_BUTLER_CONFIG_PATH``
1258
1258
  which is a PATH-like variable where paths at the front of the list
1259
1259
  have priority over those later.
1260
1260
 
@@ -86,7 +86,7 @@ TaskMetadata: lsst.daf.butler.formatters.json.JsonFormatter
86
86
  SpectractorSpectrum: lsst.atmospec.formatters.SpectractorSpectrumFormatter
87
87
  SpectractorImage: lsst.atmospec.formatters.SpectractorImageFormatter
88
88
  SpectractorFitParameters: lsst.atmospec.formatters.SpectractorFitParametersFormatter
89
- ScarletModelData: lsst.daf.butler.formatters.json.JsonFormatter
89
+ ScarletModelData: lsst.meas.extensions.scarlet.io.ScarletModelFormatter
90
90
  MetricMeasurementBundle: lsst.daf.butler.formatters.json.JsonFormatter
91
91
  MultipleCellCoadd: lsst.cell_coadds.CellCoaddFitsFormatter
92
92
  NNModelPackagePayload: lsst.meas.transiNet.modelPackages.NNModelPackageFormatter
@@ -409,6 +409,9 @@ storageClasses:
409
409
  pytype: spectractor.fit.fitter.FitParameters
410
410
  ScarletModelData:
411
411
  pytype: lsst.scarlet.lite.io.ScarletModelData
412
+ parameters:
413
+ - blend_id
414
+ delegate: lsst.meas.extensions.scarlet.io.ScarletModelDelegate
412
415
  MetricMeasurementBundle:
413
416
  pytype: lsst.analysis.tools.interfaces.MetricMeasurementBundle
414
417
  MultipleCellCoadd:
@@ -31,6 +31,7 @@ __all__ = ["DimensionUniverse"]
31
31
 
32
32
  import logging
33
33
  import pickle
34
+ import warnings
34
35
  from collections import defaultdict
35
36
  from collections.abc import Iterable, Mapping, Sequence
36
37
  from typing import TYPE_CHECKING, Any, ClassVar, TypeVar, overload
@@ -117,6 +118,13 @@ class DimensionUniverse: # numpydoc ignore=PR02
117
118
  else:
118
119
  version = builder.version
119
120
 
121
+ if use_cache is not True:
122
+ warnings.warn(
123
+ "use_cache parameter is no longer supported and is ignored. Will be removed after v30.",
124
+ category=FutureWarning,
125
+ stacklevel=2,
126
+ )
127
+
120
128
  # Then a namespace.
121
129
  if namespace is None:
122
130
  if builder is None:
@@ -129,10 +137,9 @@ class DimensionUniverse: # numpydoc ignore=PR02
129
137
  namespace = _DEFAULT_NAMESPACE
130
138
 
131
139
  # See if an equivalent instance already exists.
132
- if use_cache:
133
- existing_instance = cls._instances.get((version, namespace))
134
- if existing_instance is not None:
135
- return existing_instance
140
+ existing_instance = cls._instances.get((version, namespace))
141
+ if existing_instance is not None:
142
+ return existing_instance
136
143
 
137
144
  # Ensure we have a builder, building one from config if necessary.
138
145
  if builder is None:
@@ -183,10 +190,7 @@ class DimensionUniverse: # numpydoc ignore=PR02
183
190
  if element.populated_by is not None:
184
191
  self._populates[element.populated_by.name].add(element)
185
192
 
186
- if use_cache:
187
- return cls._instances.set_or_get((self._version, self._namespace), self)
188
- else:
189
- return self
193
+ return cls._instances.set_or_get((self._version, self._namespace), self)
190
194
 
191
195
  @property
192
196
  def version(self) -> int:
@@ -1587,30 +1587,24 @@ class DirectButler(Butler): # numpydoc ignore=PR02
1587
1587
  def _ingest_file_datasets(
1588
1588
  self,
1589
1589
  datasets: Sequence[FileDataset],
1590
+ *,
1591
+ dry_run: bool = False,
1590
1592
  ) -> None:
1591
- # Docstring inherited.
1592
1593
  if not datasets:
1593
1594
  return
1594
1595
 
1595
1596
  progress = Progress("lsst.daf.butler.Butler.ingest", level=logging.DEBUG)
1596
1597
 
1597
- # We need to reorganize all the inputs so that they are grouped
1598
- # by dataset type and run. Multiple refs in a single FileDataset
1599
- # are required to share the run and dataset type.
1600
- groupedData: MutableMapping[tuple[DatasetType, str], list[FileDataset]] = defaultdict(list)
1601
-
1602
1598
  # Track DataIDs that are being ingested so we can spot issues early
1603
1599
  # with duplication. Retain previous FileDataset so we can report it.
1604
1600
  groupedDataIds: MutableMapping[tuple[DatasetType, str], dict[DataCoordinate, FileDataset]] = (
1605
1601
  defaultdict(dict)
1606
1602
  )
1607
1603
 
1608
- # And the nested loop that populates it:
1609
- for dataset in progress.wrap(datasets, desc="Grouping by dataset type"):
1610
- # Somewhere to store pre-existing refs if we have an
1611
- # execution butler.
1612
- existingRefs: list[DatasetRef] = []
1604
+ # All the refs we need to import.
1605
+ refs: list[DatasetRef] = []
1613
1606
 
1607
+ for dataset in progress.wrap(datasets, desc="Validating dataIDs"):
1614
1608
  for ref in dataset.refs:
1615
1609
  group_key = (ref.datasetType, ref.run)
1616
1610
 
@@ -1623,54 +1617,29 @@ class DirectButler(Butler): # numpydoc ignore=PR02
1623
1617
  )
1624
1618
 
1625
1619
  groupedDataIds[group_key][ref.dataId] = dataset
1620
+ refs.extend(dataset.refs)
1626
1621
 
1627
- if existingRefs:
1628
- if len(dataset.refs) != len(existingRefs):
1629
- # Keeping track of partially pre-existing datasets is hard
1630
- # and should generally never happen. For now don't allow
1631
- # it.
1632
- raise ConflictingDefinitionError(
1633
- f"For dataset {dataset.path} some dataIds already exist"
1634
- " in registry but others do not. This is not supported."
1635
- )
1636
-
1637
- # Store expanded form in the original FileDataset.
1638
- dataset.refs = existingRefs
1639
- else:
1640
- groupedData[group_key].append(dataset)
1641
-
1642
- # Now we can bulk-insert into Registry for each DatasetType.
1643
- for (datasetType, this_run), grouped_datasets in progress.iter_item_chunks(
1644
- groupedData.items(), desc="Bulk-inserting datasets by type"
1645
- ):
1646
- refs_to_import = []
1647
- for dataset in grouped_datasets:
1648
- refs_to_import.extend(dataset.refs)
1649
-
1650
- n_refs = len(refs_to_import)
1651
- _LOG.verbose(
1652
- "Importing %d ref%s of dataset type %r into run %r",
1653
- n_refs,
1654
- "" if n_refs == 1 else "s",
1655
- datasetType.name,
1656
- this_run,
1657
- )
1622
+ # Bulk insert.
1623
+ import_info = self._prepare_for_import_refs(
1624
+ self,
1625
+ refs,
1626
+ skip_missing=False,
1627
+ register_dataset_types=True,
1628
+ dry_run=dry_run,
1629
+ transfer_dimensions=False,
1630
+ )
1658
1631
 
1659
- # Import the refs and expand the DataCoordinates since we can't
1660
- # guarantee that they are expanded and Datastore will need
1661
- # the records.
1662
- imported_refs = self._registry._importDatasets(refs_to_import, expand=True)
1632
+ self._import_dimension_records(import_info.dimension_records, dry_run=dry_run)
1633
+ imported_refs = self._import_grouped_refs(
1634
+ import_info.grouped_refs, self, progress, dry_run=dry_run, expand_refs=True
1635
+ )
1663
1636
 
1664
- # Since refs can come from an external butler, there is no
1665
- # guarantee that the DatasetType values match. Compare IDs.
1666
- assert {ref.id for ref in imported_refs} == {ref.id for ref in refs_to_import}
1637
+ # The expanded refs need to be attached back to the original
1638
+ # FileDatasets for datastore to use.
1639
+ id_to_ref = {ref.id: ref for ref in imported_refs}
1667
1640
 
1668
- # Replace all the refs in the FileDataset with expanded versions.
1669
- # Pull them off in the order we put them on the list.
1670
- for dataset in grouped_datasets:
1671
- n_dataset_refs = len(dataset.refs)
1672
- dataset.refs = imported_refs[:n_dataset_refs]
1673
- del imported_refs[:n_dataset_refs]
1641
+ for dataset in progress.wrap(datasets, desc="Re-attaching expanded refs"):
1642
+ dataset.refs = [id_to_ref[ref.id] for ref in dataset.refs]
1674
1643
 
1675
1644
  @transactional
1676
1645
  def ingest(
@@ -1933,20 +1902,19 @@ class DirectButler(Butler): # numpydoc ignore=PR02
1933
1902
 
1934
1903
  return dimension_records
1935
1904
 
1936
- def transfer_from(
1905
+ def _prepare_for_import_refs(
1937
1906
  self,
1938
1907
  source_butler: LimitedButler,
1939
1908
  source_refs: Iterable[DatasetRef],
1940
- transfer: str = "auto",
1909
+ *,
1941
1910
  skip_missing: bool = True,
1942
1911
  register_dataset_types: bool = False,
1943
1912
  transfer_dimensions: bool = False,
1944
1913
  dry_run: bool = False,
1945
- ) -> collections.abc.Collection[DatasetRef]:
1914
+ ) -> _ImportDatasetsInfo:
1946
1915
  # Docstring inherited.
1947
1916
  if not self.isWriteable():
1948
1917
  raise TypeError("Butler is read-only.")
1949
- progress = Progress("lsst.daf.butler.Butler.transfer_from", level=VERBOSE)
1950
1918
 
1951
1919
  # Will iterate through the refs multiple times so need to convert
1952
1920
  # to a list if this isn't a collection.
@@ -1954,7 +1922,7 @@ class DirectButler(Butler): # numpydoc ignore=PR02
1954
1922
  source_refs = list(source_refs)
1955
1923
 
1956
1924
  original_count = len(source_refs)
1957
- _LOG.info("Transferring %d datasets into %s", original_count, str(self))
1925
+ _LOG.info("Importing %d datasets into %s", original_count, str(self))
1958
1926
 
1959
1927
  # In some situations the datastore artifact may be missing
1960
1928
  # and we do not want that registry entry to be imported.
@@ -1996,7 +1964,7 @@ class DirectButler(Butler): # numpydoc ignore=PR02
1996
1964
  # might result in additional unwanted dataset types being
1997
1965
  # registered.
1998
1966
  try:
1999
- if self._registry.registerDatasetType(datasetType):
1967
+ if not dry_run and self._registry.registerDatasetType(datasetType):
2000
1968
  newly_registered_dataset_types.add(datasetType)
2001
1969
  except ConflictingDefinitionError as e:
2002
1970
  # Be safe and require that conversions be bidirectional
@@ -2076,86 +2044,132 @@ class DirectButler(Butler): # numpydoc ignore=PR02
2076
2044
  dimension_records = self._extract_all_dimension_records_from_data_ids(
2077
2045
  source_butler, dataIds, elements
2078
2046
  )
2047
+ return _ImportDatasetsInfo(grouped_refs, dimension_records, artifact_existence)
2079
2048
 
2049
+ def _import_dimension_records(
2050
+ self,
2051
+ dimension_records: dict[DimensionElement, dict[DataCoordinate, DimensionRecord]],
2052
+ *,
2053
+ dry_run: bool,
2054
+ ) -> None:
2055
+ """Import dimension records collected during import pre-process."""
2056
+ if dimension_records and not dry_run:
2057
+ _LOG.verbose("Ensuring that dimension records exist for transferred datasets.")
2058
+ # Order matters.
2059
+ for element in self.dimensions.sorted(dimension_records.keys()):
2060
+ records = list(dimension_records[element].values())
2061
+ # Assume that if the record is already present that we can
2062
+ # use it without having to check that the record metadata
2063
+ # is consistent.
2064
+ self._registry.insertDimensionData(element, *records, skip_existing=True)
2065
+
2066
+ def _import_grouped_refs(
2067
+ self,
2068
+ grouped_refs: defaultdict[_RefGroup, list[DatasetRef]],
2069
+ source_butler: LimitedButler,
2070
+ progress: Progress,
2071
+ *,
2072
+ dry_run: bool = False,
2073
+ expand_refs: bool = False,
2074
+ ) -> list[DatasetRef]:
2080
2075
  handled_collections: set[str] = set()
2081
-
2082
- # Do all the importing in a single transaction.
2083
- with self.transaction():
2084
- if dimension_records and not dry_run:
2085
- _LOG.verbose("Ensuring that dimension records exist for transferred datasets.")
2086
- # Order matters.
2087
- for element in self.dimensions.sorted(dimension_records.keys()):
2088
- records = [r for r in dimension_records[element].values()]
2089
- # Assume that if the record is already present that we can
2090
- # use it without having to check that the record metadata
2091
- # is consistent.
2092
- self._registry.insertDimensionData(element, *records, skip_existing=True)
2093
-
2094
- n_imported = 0
2095
-
2096
- # Sort by run collection name to ensure Postgres takes locks in the
2097
- # same order between different processes, to mitigate an issue
2098
- # where Postgres can deadlock due to the unique index on collection
2099
- # name. (See DM-47543).
2100
- groups = sorted(grouped_refs.items(), key=lambda item: item[0].run)
2101
- for (dimension_group, run), refs_to_import in progress.iter_item_chunks(
2102
- groups, desc="Importing to registry by run and dataset type"
2103
- ):
2104
- if run not in handled_collections:
2105
- # May need to create output collection. If source butler
2106
- # has a registry, ask for documentation string.
2107
- run_doc = None
2108
- if registry := getattr(source_butler, "registry", None):
2109
- run_doc = registry.getCollectionDocumentation(run)
2110
- if not dry_run:
2111
- registered = self.collections.register(run, doc=run_doc)
2112
- else:
2113
- registered = True
2114
- handled_collections.add(run)
2115
- if registered:
2116
- _LOG.verbose("Creating output run %s", run)
2117
-
2118
- n_refs = len(refs_to_import)
2119
- _LOG.verbose(
2120
- "Importing %d ref%s with dimensions %s into run %s",
2121
- n_refs,
2122
- "" if n_refs == 1 else "s",
2123
- dimension_group.names,
2124
- run,
2125
- )
2126
-
2127
- # Assume we are using UUIDs and the source refs will match
2128
- # those imported.
2076
+ n_to_import = 0
2077
+ all_imported_refs: list[DatasetRef] = []
2078
+ # Sort by run collection name to ensure Postgres takes locks in the
2079
+ # same order between different processes, to mitigate an issue
2080
+ # where Postgres can deadlock due to the unique index on collection
2081
+ # name. (See DM-47543).
2082
+ groups = sorted(grouped_refs.items(), key=lambda item: item[0].run)
2083
+ for (dimension_group, run), refs_to_import in progress.iter_item_chunks(
2084
+ groups, desc="Importing to registry by run and dataset type"
2085
+ ):
2086
+ if run not in handled_collections:
2087
+ # May need to create output collection. If source butler
2088
+ # has a registry, ask for documentation string.
2089
+ run_doc = None
2090
+ if registry := getattr(source_butler, "registry", None):
2091
+ run_doc = registry.getCollectionDocumentation(run)
2129
2092
  if not dry_run:
2130
- imported_refs = self._registry._importDatasets(refs_to_import)
2093
+ registered = self.collections.register(run, doc=run_doc)
2131
2094
  else:
2132
- imported_refs = refs_to_import
2095
+ registered = True
2096
+ handled_collections.add(run)
2097
+ if registered:
2098
+ _LOG.verbose("Creating output run %s", run)
2099
+
2100
+ n_refs = len(refs_to_import)
2101
+ n_to_import += n_refs
2102
+ _LOG.verbose(
2103
+ "Importing %d ref%s with dimensions %s into run %s",
2104
+ n_refs,
2105
+ "" if n_refs == 1 else "s",
2106
+ dimension_group.names,
2107
+ run,
2108
+ )
2109
+
2110
+ # Assume we are using UUIDs and the source refs will match
2111
+ # those imported.
2112
+ if not dry_run:
2113
+ imported_refs = self._registry._importDatasets(refs_to_import, expand=expand_refs)
2114
+ else:
2115
+ imported_refs = refs_to_import
2116
+
2117
+ all_imported_refs.extend(imported_refs)
2118
+
2119
+ assert n_to_import == len(all_imported_refs)
2120
+ _LOG.verbose("Imported %d datasets into destination butler", n_to_import)
2121
+ return all_imported_refs
2122
+
2123
+ def transfer_from(
2124
+ self,
2125
+ source_butler: LimitedButler,
2126
+ source_refs: Iterable[DatasetRef],
2127
+ transfer: str = "auto",
2128
+ skip_missing: bool = True,
2129
+ register_dataset_types: bool = False,
2130
+ transfer_dimensions: bool = False,
2131
+ dry_run: bool = False,
2132
+ ) -> collections.abc.Collection[DatasetRef]:
2133
+ # Docstring inherited.
2134
+ if not self.isWriteable():
2135
+ raise TypeError("Butler is read-only.")
2133
2136
 
2134
- n_imported += len(imported_refs)
2137
+ progress = Progress("lsst.daf.butler.Butler.transfer_from", level=VERBOSE)
2135
2138
 
2136
- assert len(source_refs) == n_imported
2137
- _LOG.verbose("Imported %d datasets into destination butler", n_imported)
2139
+ import_info = self._prepare_for_import_refs(
2140
+ source_butler,
2141
+ source_refs,
2142
+ skip_missing=skip_missing,
2143
+ register_dataset_types=register_dataset_types,
2144
+ dry_run=dry_run,
2145
+ transfer_dimensions=transfer_dimensions,
2146
+ )
2147
+
2148
+ # Do all the importing in a single transaction.
2149
+ with self.transaction():
2150
+ self._import_dimension_records(import_info.dimension_records, dry_run=dry_run)
2151
+ imported_refs = self._import_grouped_refs(
2152
+ import_info.grouped_refs, source_butler, progress, dry_run=dry_run
2153
+ )
2138
2154
 
2139
2155
  # Ask the datastore to transfer. The datastore has to check that
2140
2156
  # the source datastore is compatible with the target datastore.
2141
2157
  accepted, rejected = self._datastore.transfer_from(
2142
2158
  source_butler._datastore,
2143
- source_refs,
2159
+ imported_refs,
2144
2160
  transfer=transfer,
2145
- artifact_existence=artifact_existence,
2161
+ artifact_existence=import_info.artifact_existence,
2146
2162
  dry_run=dry_run,
2147
2163
  )
2148
2164
  if rejected:
2149
2165
  # For now, accept the registry entries but not the files.
2150
2166
  _LOG.warning(
2151
- "%d datasets were rejected and %d accepted for dataset type %s in run %r.",
2167
+ "%d datasets were rejected and %d accepted for transfer.",
2152
2168
  len(rejected),
2153
2169
  len(accepted),
2154
- datasetType,
2155
- run,
2156
2170
  )
2157
2171
 
2158
- return source_refs
2172
+ return imported_refs
2159
2173
 
2160
2174
  def validateConfiguration(
2161
2175
  self,
@@ -2382,3 +2396,11 @@ class _RefGroup(NamedTuple):
2382
2396
 
2383
2397
  dimensions: DimensionGroup
2384
2398
  run: str
2399
+
2400
+
2401
+ class _ImportDatasetsInfo(NamedTuple):
2402
+ """Information extracted from datasets to be imported."""
2403
+
2404
+ grouped_refs: defaultdict[_RefGroup, list[DatasetRef]]
2405
+ dimension_records: dict[DimensionElement, dict[DataCoordinate, DimensionRecord]]
2406
+ artifact_existence: dict[ResourcePath, bool]
@@ -56,6 +56,7 @@ from ..queries.driver import (
56
56
  QueryDriver,
57
57
  ResultPage,
58
58
  )
59
+ from ..queries.predicate_constraints_summary import PredicateConstraintsSummary
59
60
  from ..queries.result_specs import (
60
61
  DataCoordinateResultSpec,
61
62
  DatasetRefResultSpec,
@@ -68,7 +69,6 @@ from ..registry.interfaces import ChainedCollectionRecord, CollectionRecord
68
69
  from ..registry.managers import RegistryManagerInstances
69
70
  from ..registry.wildcards import CollectionWildcard
70
71
  from ._postprocessing import Postprocessing
71
- from ._predicate_constraints_summary import PredicateConstraintsSummary
72
72
  from ._query_analysis import (
73
73
  QueryCollectionAnalysis,
74
74
  QueryFindFirstAnalysis,
@@ -33,6 +33,8 @@ from collections.abc import Iterable, Mapping, Set
33
33
  from types import EllipsisType
34
34
  from typing import Any, final
35
35
 
36
+ import astropy.table
37
+
36
38
  from lsst.utils.iteration import ensure_iterable
37
39
 
38
40
  from .._dataset_type import DatasetType
@@ -49,6 +51,7 @@ from ._identifiers import IdentifierContext, interpret_identifier
49
51
  from .convert_args import convert_where_args
50
52
  from .driver import QueryDriver
51
53
  from .expression_factory import ExpressionFactory
54
+ from .predicate_constraints_summary import PredicateConstraintsSummary
52
55
  from .result_specs import (
53
56
  DataCoordinateResultSpec,
54
57
  DatasetRefResultSpec,
@@ -586,7 +589,7 @@ class Query(QueryBase):
586
589
  return query
587
590
 
588
591
  def join_data_coordinates(self, iterable: Iterable[DataCoordinate]) -> Query:
589
- """Return a new query that joins in an explicit table of data IDs.
592
+ """Return a new query that joins in an explicit iterable of data IDs.
590
593
 
591
594
  Parameters
592
595
  ----------
@@ -618,6 +621,50 @@ class Query(QueryBase):
618
621
  driver=self._driver,
619
622
  )
620
623
 
624
+ def join_data_coordinate_table(self, table: astropy.table.Table) -> Query:
625
+ """Return a new query that joins in an explicit table of data IDs.
626
+
627
+ Parameters
628
+ ----------
629
+ table : `astropy.table.Table`
630
+ A table of data IDs to join. Columns must be dimension names, and
631
+ columns for dimensions whose values that are implied by others are
632
+ ignored. If there is no column for a required dimension is missing
633
+ but is fully constrained to a literal by a previous `where` call, a
634
+ constant-valued column will be added.
635
+
636
+ Returns
637
+ -------
638
+ query : `Query`
639
+ A new query object with the data IDs joined in.
640
+ """
641
+ if not len(table):
642
+ raise InvalidQueryError("Cannot upload an empty data coordinate set.")
643
+ column_names = set(table.colnames)
644
+ dimensions = self._driver.universe.conform(column_names)
645
+ # To avoid numpy scalar types that will upset SQLAlchemy, we turn the
646
+ # columns we care about into lists of regular Python scalars. We do
647
+ # this in dimensions.required order so we can zip the values of this
648
+ # dict later to make data ID 'required_values' tuples.
649
+ column_lists = {d: table[d].data.tolist() if d in column_names else None for d in dimensions.required}
650
+ if not column_names.issuperset(dimensions.required):
651
+ # If columns are missing, see if they're fixed by a previous
652
+ # `where` call or equivalent.
653
+ predicate_summary = PredicateConstraintsSummary(self._tree.predicate)
654
+ missing = dimensions.required - column_names
655
+ provided_by_predicate = predicate_summary.constraint_data_id.keys() & missing
656
+ missing -= provided_by_predicate
657
+ if missing:
658
+ raise InvalidQueryError(f"Data coordinate table is missing required dimension(s) {missing}.")
659
+ if provided_by_predicate:
660
+ for k in provided_by_predicate:
661
+ column_lists[k] = [predicate_summary.constraint_data_id[k]] * len(table)
662
+ key = self._driver.upload_data_coordinates(dimensions, zip(*column_lists.values(), strict=True))
663
+ return Query(
664
+ tree=self._tree.join_data_coordinate_upload(dimensions=dimensions, key=key),
665
+ driver=self._driver,
666
+ )
667
+
621
668
  def join_dimensions(self, dimensions: Iterable[str] | DimensionGroup) -> Query:
622
669
  """Return a new query that joins the logical tables for additional
623
670
  dimensions.
@@ -31,8 +31,8 @@ from typing import Any
31
31
 
32
32
  from .._exceptions import InvalidQueryError
33
33
  from ..dimensions import DataCoordinate, DataIdValue, DimensionGroup, DimensionUniverse
34
- from ..queries import tree as qt
35
- from ..queries.visitors import ColumnExpressionVisitor, PredicateVisitFlags, SimplePredicateVisitor
34
+ from . import tree as qt
35
+ from .visitors import ColumnExpressionVisitor, PredicateVisitFlags, SimplePredicateVisitor
36
36
 
37
37
 
38
38
  class PredicateConstraintsSummary:
@@ -187,14 +187,7 @@ class RemoteButler(Butler): # numpydoc ignore=PR02
187
187
  model = parse_model(response, GetUniverseResponseModel)
188
188
 
189
189
  config = DimensionConfig.from_simple(model.universe)
190
- universe = DimensionUniverse(
191
- config,
192
- # The process-global cache internal to DimensionUniverse can mask
193
- # problems in unit tests, since client and server live in the same
194
- # process for these tests. We are doing our own caching, so we
195
- # don't benefit from it. So just disable it.
196
- use_cache=False,
197
- )
190
+ universe = DimensionUniverse(config)
198
191
  with self._cache.access() as cache:
199
192
  if cache.dimensions is None:
200
193
  cache.dimensions = universe
@@ -0,0 +1,2 @@
1
+ __all__ = ["__version__"]
2
+ __version__ = "29.2025.1700"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-daf-butler
3
- Version: 29.2025.1500
3
+ Version: 29.2025.1700
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
@@ -147,7 +147,6 @@ python/lsst/daf/butler/direct_butler/_direct_butler_collections.py
147
147
  python/lsst/daf/butler/direct_query_driver/__init__.py
148
148
  python/lsst/daf/butler/direct_query_driver/_driver.py
149
149
  python/lsst/daf/butler/direct_query_driver/_postprocessing.py
150
- python/lsst/daf/butler/direct_query_driver/_predicate_constraints_summary.py
151
150
  python/lsst/daf/butler/direct_query_driver/_query_analysis.py
152
151
  python/lsst/daf/butler/direct_query_driver/_query_builder.py
153
152
  python/lsst/daf/butler/direct_query_driver/_result_page_converter.py
@@ -177,6 +176,7 @@ python/lsst/daf/butler/queries/convert_args.py
177
176
  python/lsst/daf/butler/queries/driver.py
178
177
  python/lsst/daf/butler/queries/expression_factory.py
179
178
  python/lsst/daf/butler/queries/overlaps.py
179
+ python/lsst/daf/butler/queries/predicate_constraints_summary.py
180
180
  python/lsst/daf/butler/queries/result_specs.py
181
181
  python/lsst/daf/butler/queries/visitors.py
182
182
  python/lsst/daf/butler/queries/tree/__init__.py
@@ -42,11 +42,11 @@ TESTDIR = os.path.abspath(os.path.dirname(__file__))
42
42
  def modified_environment(**environ):
43
43
  """Temporarily set environment variables.
44
44
 
45
- >>> with modified_environment(DAF_BUTLER_CONFIG_PATHS="/somewhere"):
46
- ... os.environ["DAF_BUTLER_CONFIG_PATHS"] == "/somewhere"
45
+ >>> with modified_environment(DAF_BUTLER_CONFIG_PATH="/somewhere"):
46
+ ... os.environ["DAF_BUTLER_CONFIG_PATH"] == "/somewhere"
47
47
  True
48
48
 
49
- >>> "DAF_BUTLER_CONFIG_PATHS" != "/somewhere"
49
+ >>> "DAF_BUTLER_CONFIG_PATH" != "/somewhere"
50
50
  True
51
51
 
52
52
  Parameters