lsst-daf-butler 29.2025.2500__tar.gz → 29.2025.2700__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 (445) hide show
  1. {lsst_daf_butler-29.2025.2500/python/lsst_daf_butler.egg-info → lsst_daf_butler-29.2025.2700}/PKG-INFO +1 -1
  2. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_record_set.py +65 -45
  3. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_records.py +24 -9
  4. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/_config.py +5 -0
  5. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/_records.py +28 -2
  6. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/sql_registry.py +41 -14
  7. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/transfers/_context.py +3 -7
  8. lsst_daf_butler-29.2025.2700/python/lsst/daf/butler/version.py +2 -0
  9. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700/python/lsst_daf_butler.egg-info}/PKG-INFO +1 -1
  10. lsst_daf_butler-29.2025.2500/python/lsst/daf/butler/version.py +0 -2
  11. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/COPYRIGHT +0 -0
  12. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/LICENSE +0 -0
  13. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/MANIFEST.in +0 -0
  14. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/README.md +0 -0
  15. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/bsd_license.txt +0 -0
  16. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/CHANGES.rst +0 -0
  17. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
  18. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/configuring.rst +0 -0
  19. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/datastores.rst +0 -0
  20. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/dimensions.rst +0 -0
  21. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/formatters.rst +0 -0
  22. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/index.rst +0 -0
  23. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/organizing.rst +0 -0
  24. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/queries.rst +0 -0
  25. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
  26. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/writing-subcommands.rst +0 -0
  27. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/gpl-v3.0.txt +0 -0
  28. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/pyproject.toml +0 -0
  29. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/__init__.py +0 -0
  30. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/__init__.py +0 -0
  31. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/__init__.py +0 -0
  32. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler.py +0 -0
  33. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler_collections.py +0 -0
  34. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler_config.py +0 -0
  35. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler_instance_options.py +0 -0
  36. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler_metrics.py +0 -0
  37. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
  38. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_collection_type.py +0 -0
  39. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_column_categorization.py +0 -0
  40. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_column_tags.py +0 -0
  41. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_column_type_info.py +0 -0
  42. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_config.py +0 -0
  43. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_config_support.py +0 -0
  44. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_dataset_association.py +0 -0
  45. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_dataset_existence.py +0 -0
  46. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_dataset_provenance.py +0 -0
  47. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_dataset_ref.py +0 -0
  48. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_dataset_type.py +0 -0
  49. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
  50. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_exceptions.py +0 -0
  51. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
  52. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_file_dataset.py +0 -0
  53. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_file_descriptor.py +0 -0
  54. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_formatter.py +0 -0
  55. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_labeled_butler_factory.py +0 -0
  56. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_limited_butler.py +0 -0
  57. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_location.py +0 -0
  58. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_named.py +0 -0
  59. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_quantum.py +0 -0
  60. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_quantum_backed.py +0 -0
  61. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_query_all_datasets.py +0 -0
  62. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_registry_shim.py +0 -0
  63. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_storage_class.py +0 -0
  64. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
  65. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_timespan.py +0 -0
  66. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_topology.py +0 -0
  67. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
  68. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
  69. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
  70. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
  71. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/arrow_utils.py +0 -0
  72. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/__init__.py +0 -0
  73. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/butler.py +0 -0
  74. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/cliLog.py +0 -0
  75. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
  76. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
  77. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +0 -0
  78. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/cmd/commands.py +0 -0
  79. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
  80. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
  81. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
  82. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/opt/options.py +0 -0
  83. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/progress.py +0 -0
  84. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/utils.py +0 -0
  85. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/column_spec.py +0 -0
  86. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
  87. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
  88. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
  89. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/datastores/formatters.yaml +0 -0
  90. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
  91. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
  92. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
  93. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
  94. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
  95. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
  96. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
  97. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
  98. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
  99. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
  100. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/registry.yaml +0 -0
  101. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
  102. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/storageClasses.yaml +0 -0
  103. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/__init__.py +0 -0
  104. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/_datastore.py +0 -0
  105. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/_transfer.py +0 -0
  106. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
  107. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/composites.py +0 -0
  108. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/constraints.py +0 -0
  109. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
  110. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/generic_base.py +0 -0
  111. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/record_data.py +0 -0
  112. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/stored_file_info.py +0 -0
  113. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/__init__.py +0 -0
  114. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/chainedDatastore.py +0 -0
  115. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/fileDatastore.py +0 -0
  116. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/fileDatastoreClient.py +0 -0
  117. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
  118. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/file_datastore/get.py +0 -0
  119. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +0 -0
  120. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/file_datastore/transfer.py +0 -0
  121. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +0 -0
  122. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/ddl.py +0 -0
  123. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/delegates/__init__.py +0 -0
  124. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/delegates/arrowtable.py +0 -0
  125. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
  126. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_config.py +0 -0
  127. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_coordinate.py +0 -0
  128. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
  129. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_database.py +0 -0
  130. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_elements.py +0 -0
  131. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
  132. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_group.py +0 -0
  133. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
  134. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_record_table.py +0 -0
  135. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
  136. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
  137. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_universe.py +0 -0
  138. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/construction.py +0 -0
  139. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/record_cache.py +0 -0
  140. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
  141. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_butler/_direct_butler.py +0 -0
  142. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
  143. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
  144. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_driver.py +0 -0
  145. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
  146. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
  147. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +0 -0
  148. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +0 -0
  149. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
  150. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +0 -0
  151. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/__init__.py +0 -0
  152. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
  153. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/file.py +0 -0
  154. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/json.py +0 -0
  155. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/logs.py +0 -0
  156. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
  157. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/packages.py +0 -0
  158. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/parquet.py +0 -0
  159. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/pickle.py +0 -0
  160. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/typeless.py +0 -0
  161. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/yaml.py +0 -0
  162. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/json.py +0 -0
  163. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/logging.py +0 -0
  164. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/mapping_factory.py +0 -0
  165. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/name_shrinker.py +0 -0
  166. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/nonempty_mapping.py +0 -0
  167. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/persistence_context.py +0 -0
  168. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/progress.py +0 -0
  169. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/py.typed +0 -0
  170. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/pydantic_utils.py +0 -0
  171. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/__init__.py +0 -0
  172. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_base.py +0 -0
  173. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
  174. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
  175. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
  176. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_expression_strings.py +0 -0
  177. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_general_query_results.py +0 -0
  178. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_identifiers.py +0 -0
  179. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_query.py +0 -0
  180. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/convert_args.py +0 -0
  181. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/driver.py +0 -0
  182. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/expression_factory.py +0 -0
  183. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/overlaps.py +0 -0
  184. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/predicate_constraints_summary.py +0 -0
  185. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/result_specs.py +0 -0
  186. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
  187. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_base.py +0 -0
  188. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_column_expression.py +0 -0
  189. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
  190. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
  191. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_column_set.py +0 -0
  192. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_predicate.py +0 -0
  193. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_query_tree.py +0 -0
  194. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/visitors.py +0 -0
  195. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/__init__.py +0 -0
  196. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
  197. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_collection_record_cache.py +0 -0
  198. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
  199. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_collection_summary_cache.py +0 -0
  200. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_config.py +0 -0
  201. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_defaults.py +0 -0
  202. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
  203. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_registry.py +0 -0
  204. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
  205. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/attributes.py +0 -0
  206. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
  207. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/bridge/ephemeral.py +0 -0
  208. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/bridge/monolithic.py +0 -0
  209. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
  210. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/collections/_base.py +0 -0
  211. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
  212. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
  213. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/connectionString.py +0 -0
  214. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
  215. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/databases/postgresql.py +0 -0
  216. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/databases/sqlite.py +0 -0
  217. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
  218. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
  219. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +0 -0
  220. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +0 -0
  221. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +0 -0
  222. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
  223. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
  224. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/dimensions/static.py +0 -0
  225. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
  226. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
  227. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_bridge.py +0 -0
  228. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
  229. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_database.py +0 -0
  230. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
  231. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_datasets.py +0 -0
  232. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +0 -0
  233. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_obscore.py +0 -0
  234. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
  235. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
  236. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/managers.py +0 -0
  237. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
  238. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
  239. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
  240. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
  241. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/_spatial.py +0 -0
  242. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
  243. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
  244. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/opaque.py +0 -0
  245. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/__init__.py +0 -0
  246. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_builder.py +0 -0
  247. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_query.py +0 -0
  248. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_query_backend.py +0 -0
  249. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_query_context.py +0 -0
  250. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_readers.py +0 -0
  251. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_results.py +0 -0
  252. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_sql_query_backend.py +0 -0
  253. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_sql_query_context.py +0 -0
  254. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_structs.py +0 -0
  255. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/butler_sql_engine.py +0 -0
  256. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/__init__.py +0 -0
  257. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/_predicate.py +0 -0
  258. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/categorize.py +0 -0
  259. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/check.py +0 -0
  260. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/normalForm.py +0 -0
  261. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/__init__.py +0 -0
  262. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/exprTree.py +0 -0
  263. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/parser.py +0 -0
  264. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/parserLex.py +0 -0
  265. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/parserYacc.py +0 -0
  266. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/__init__.py +0 -0
  267. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/lex.py +0 -0
  268. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/yacc.py +0 -0
  269. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/treeVisitor.py +0 -0
  270. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/find_first_dataset.py +0 -0
  271. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
  272. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
  273. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/tests/_registry.py +0 -0
  274. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/versions.py +0 -0
  275. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/wildcards.py +0 -0
  276. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
  277. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_authentication.py +0 -0
  278. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
  279. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
  280. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
  281. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
  282. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
  283. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_http_connection.py +0 -0
  284. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_query_driver.py +0 -0
  285. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
  286. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
  287. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_registry.py +0 -0
  288. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_remote_butler.py +0 -0
  289. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
  290. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py +0 -0
  291. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
  292. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/registry/_query_common.py +0 -0
  293. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/registry/_query_data_coordinates.py +0 -0
  294. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/registry/_query_datasets.py +0 -0
  295. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/registry/_query_dimension_records.py +0 -0
  296. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
  297. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_config.py +0 -0
  298. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_dependencies.py +0 -0
  299. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
  300. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py +0 -0
  301. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_server.py +0 -0
  302. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_telemetry.py +0 -0
  303. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +0 -0
  304. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/handlers/_external_query.py +0 -0
  305. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
  306. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/handlers/_query_limits.py +0 -0
  307. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/handlers/_query_serialization.py +0 -0
  308. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/handlers/_query_streaming.py +0 -0
  309. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
  310. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
  311. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/repo_relocation.py +0 -0
  312. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/__init__.py +0 -0
  313. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/_associate.py +0 -0
  314. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/_pruneDatasets.py +0 -0
  315. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/butlerImport.py +0 -0
  316. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
  317. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/collectionChain.py +0 -0
  318. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/configDump.py +0 -0
  319. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/configValidate.py +0 -0
  320. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/createRepo.py +0 -0
  321. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
  322. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/ingest_files.py +0 -0
  323. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/ingest_zip.py +0 -0
  324. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/queryCollections.py +0 -0
  325. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
  326. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
  327. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
  328. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
  329. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
  330. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/removeCollections.py +0 -0
  331. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
  332. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/removeRuns.py +0 -0
  333. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/retrieveArtifacts.py +0 -0
  334. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/transferDatasets.py +0 -0
  335. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/__init__.py +0 -0
  336. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
  337. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
  338. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
  339. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
  340. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/butler_queries.py +0 -0
  341. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/cliCmdTestBase.py +0 -0
  342. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -0
  343. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
  344. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
  345. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/hybrid_butler.py +0 -0
  346. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
  347. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +0 -0
  348. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/postgresql.py +0 -0
  349. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/__init__.py +0 -0
  350. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/base.yaml +0 -0
  351. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset-skymap.yaml +0 -0
  352. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset.yaml +0 -0
  353. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/datasets.yaml +0 -0
  354. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/hsc-rc2-subset-v0.yaml +0 -0
  355. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/spatial.py +0 -0
  356. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/spatial.yaml +0 -0
  357. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/server.py +0 -0
  358. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/server_utils.py +0 -0
  359. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
  360. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/utils.py +0 -0
  361. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/time_utils.py +0 -0
  362. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/timespan_database_representation.py +0 -0
  363. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/transfers/__init__.py +0 -0
  364. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
  365. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
  366. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/utils.py +0 -0
  367. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/SOURCES.txt +0 -0
  368. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
  369. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
  370. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/requires.txt +0 -0
  371. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
  372. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
  373. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/setup.cfg +0 -0
  374. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_astropyTableFormatter.py +0 -0
  375. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_authentication.py +0 -0
  376. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_butler.py +0 -0
  377. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_butler_factory.py +0 -0
  378. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdAssociate.py +0 -0
  379. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdConfigDump.py +0 -0
  380. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdConfigValidate.py +0 -0
  381. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdCreate.py +0 -0
  382. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdImport.py +0 -0
  383. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdIngestFiles.py +0 -0
  384. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdPruneDatasets.py +0 -0
  385. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdQueryCollections.py +0 -0
  386. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdQueryDataIds.py +0 -0
  387. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
  388. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdQueryDatasets.py +0 -0
  389. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
  390. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdRemoveCollections.py +0 -0
  391. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdRemoveRuns.py +0 -0
  392. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
  393. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliLog.py +0 -0
  394. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliPluginLoader.py +0 -0
  395. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliUtilSplitCommas.py +0 -0
  396. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliUtilSplitKv.py +0 -0
  397. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliUtilToUpper.py +0 -0
  398. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_cliUtils.py +0 -0
  399. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_column_spec.py +0 -0
  400. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_composites.py +0 -0
  401. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_config.py +0 -0
  402. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_connectionString.py +0 -0
  403. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_constraints.py +0 -0
  404. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_datasets.py +0 -0
  405. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_datastore.py +0 -0
  406. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_ddl.py +0 -0
  407. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_dimension_record_containers.py +0 -0
  408. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_dimensions.py +0 -0
  409. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_exprParserLex.py +0 -0
  410. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_exprParserYacc.py +0 -0
  411. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_expressions.py +0 -0
  412. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_formatter.py +0 -0
  413. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_gafaelfawr.py +0 -0
  414. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_location.py +0 -0
  415. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_logFormatter.py +0 -0
  416. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_logging.py +0 -0
  417. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_matplotlibFormatter.py +0 -0
  418. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_nonempty_mapping.py +0 -0
  419. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_normalFormExpression.py +0 -0
  420. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_obscore.py +0 -0
  421. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_packages.py +0 -0
  422. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_parquet.py +0 -0
  423. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_postgresql.py +0 -0
  424. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_progress.py +0 -0
  425. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_pydantic_utils.py +0 -0
  426. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_quantum.py +0 -0
  427. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_quantumBackedButler.py +0 -0
  428. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_query_direct_postgresql.py +0 -0
  429. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_query_direct_sqlite.py +0 -0
  430. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_query_interface.py +0 -0
  431. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_query_relations.py +0 -0
  432. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_query_remote.py +0 -0
  433. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_query_utilities.py +0 -0
  434. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_remote_butler.py +0 -0
  435. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_server.py +0 -0
  436. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_simpleButler.py +0 -0
  437. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_sqlite.py +0 -0
  438. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_storageClass.py +0 -0
  439. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_templates.py +0 -0
  440. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_testRepo.py +0 -0
  441. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_thread_utils.py +0 -0
  442. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_time_utils.py +0 -0
  443. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_timespan.py +0 -0
  444. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/tests/test_utils.py +0 -0
  445. {lsst_daf_butler-29.2025.2500 → lsst_daf_butler-29.2025.2700}/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.2500
3
+ Version: 29.2025.2700
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
@@ -809,8 +809,7 @@ class DimensionDataAttacher:
809
809
  been referenced in at least one of the constructor arguments.
810
810
  data_ids : `~collections.abc.Iterable` [ `DataCoordinate` ]
811
811
  Data IDs to attach dimension records to (not in place; data
812
- coordinates are immutable). Must have full values (i.e. implied
813
- as well as required dimensions).
812
+ coordinates are immutable).
814
813
  query : `.queries.Query`, optional
815
814
  A butler query that can be used to look up missing dimension
816
815
  records. Records fetched via query are cached in the `records`
@@ -822,49 +821,41 @@ class DimensionDataAttacher:
822
821
  Data IDs with dimension records attached, in the same order as the
823
822
  original iterable.
824
823
  """
825
- incomplete: list[_InProgressRecordDicts] = []
826
824
  lookup_helpers = [
827
825
  _DimensionRecordLookupHelper.build(dimensions, element_name, self)
828
- for element_name in dimensions.elements
826
+ for element_name in dimensions.lookup_order
829
827
  ]
830
- result: list[DataCoordinate] = []
831
- for n, data_id in enumerate(data_ids):
832
- records = _InProgressRecordDicts(n)
833
- for lookup_helper in lookup_helpers:
834
- lookup_helper.lookup(data_id.full_values, records)
835
- if records.missing:
836
- incomplete.append(records)
837
- else:
838
- data_id = data_id.expanded(records.done)
839
- result.append(data_id)
840
- if query is not None:
841
- for lookup_helper in lookup_helpers:
842
- lookup_helper.fetch_missing(query)
843
- for records in incomplete:
844
- for element, required_values in records.missing.items():
845
- records.done[element] = self.records[element].find_with_required_values(required_values)
846
- result[records.index] = result[records.index].expanded(records.done)
847
- else:
848
- # Other logic branches also raise LookupError internally (e.g. in
849
- # find_with_required_values); this one has a better message (i.e.
850
- # about all failures, not just the first one) just because we
851
- # happen to have any information at hand, while we don't in other
852
- # branches.
853
- for records in incomplete:
854
- raise LookupError(
855
- f"No dimension record for element(s) {list(records.missing.keys())} "
856
- f"for data ID {result[records.index]}. "
857
- f"{len(incomplete)} data ID{' was' if len(incomplete) == 1 else 's were'} "
858
- "missing at least one record."
859
- )
860
- return result
828
+ records = [_InProgressRecordDicts(data_id) for data_id in data_ids]
829
+ for lookup_helper in lookup_helpers:
830
+ for r in records:
831
+ lookup_helper.lookup(r)
832
+ incomplete = lookup_helper.incomplete_records
833
+ if incomplete:
834
+ if query is not None:
835
+ lookup_helper.fetch_missing(query)
836
+ # We may still be missing records at this point, if they
837
+ # were not available in the database.
838
+ # This is intentional, because in existing Butler
839
+ # repositories dimension records are not always fully
840
+ # populated. (For example, it is common for a visit to
841
+ # exist without corresponding visit_detector_region
842
+ # records, since these are populated at different times
843
+ # by different processes.)
844
+ else:
845
+ raise LookupError(
846
+ f"No dimension record for element '{lookup_helper.element}' "
847
+ f"for data ID {incomplete[0].data_id}. "
848
+ f"{len(incomplete)} data ID{' was' if len(incomplete) == 1 else 's were'} "
849
+ "missing at least one record."
850
+ )
851
+
852
+ return [r.data_id.expanded(r.done) for r in records]
861
853
 
862
854
 
863
855
  @dataclasses.dataclass
864
856
  class _InProgressRecordDicts:
865
- index: int # Index of the data ID these are for in the result list.
857
+ data_id: DataCoordinate
866
858
  done: dict[str, DimensionRecord] = dataclasses.field(default_factory=dict)
867
- missing: dict[str, tuple[DataIdValue, ...]] = dataclasses.field(default_factory=dict)
868
859
 
869
860
 
870
861
  @dataclasses.dataclass
@@ -873,7 +864,7 @@ class _DimensionRecordLookupHelper:
873
864
  # tuple in the to-be-expanded data ID's full-values tuple.
874
865
  indices: list[int]
875
866
  record_set: DimensionRecordSet
876
- missing: set[tuple[DataIdValue, ...]] = dataclasses.field(default_factory=set)
867
+ incomplete_records: list[_InProgressRecordDicts] = dataclasses.field(default_factory=list)
877
868
 
878
869
  @property
879
870
  def element(self) -> str:
@@ -902,33 +893,62 @@ class _DimensionRecordLookupHelper:
902
893
  else:
903
894
  return _DimensionRecordLookupHelper(indices, attacher.records[element])
904
895
 
905
- def lookup(self, full_data_id_values: tuple[DataIdValue, ...], records: _InProgressRecordDicts) -> None:
906
- required_values = tuple([full_data_id_values[i] for i in self.indices])
896
+ def lookup(self, records: _InProgressRecordDicts) -> None:
897
+ required_values = self._get_required_values(records)
907
898
  if (result := self.record_set._by_required_values.get(required_values)) is None:
908
899
  result = self.fallback(required_values)
909
900
  if result is not None:
910
901
  self.record_set.add(result)
911
902
  records.done[self.element] = result
912
903
  else:
913
- records.missing[self.element] = required_values
914
- self.missing.add(required_values)
904
+ self.incomplete_records.append(records)
915
905
  else:
916
906
  records.done[self.element] = result
917
907
 
908
+ def _get_required_values(self, records: _InProgressRecordDicts) -> tuple[DataIdValue, ...]:
909
+ if records.data_id.hasFull():
910
+ full_values = records.data_id.full_values
911
+ return tuple([full_values[i] for i in self.indices])
912
+ else:
913
+ values = []
914
+ dimensions = self.record_set.element.minimal_group.required
915
+ for dimension in dimensions:
916
+ value = records.data_id.get(dimension)
917
+ if value is None:
918
+ value = self._find_implied_value(dimension, records)
919
+ values.append(value)
920
+ return tuple(values)
921
+
922
+ def _find_implied_value(self, implied_dimension: str, records: _InProgressRecordDicts) -> DataIdValue:
923
+ for rec in records.done.values():
924
+ if implied_dimension in rec.definition.implied:
925
+ return rec.get(implied_dimension)
926
+
927
+ raise LookupError(
928
+ f"Implied value for dimension '{implied_dimension}' not found in records for"
929
+ f" {list(records.done.keys())}"
930
+ )
931
+
918
932
  def fallback(self, required_values: tuple[DataIdValue, ...]) -> DimensionRecord | None:
919
933
  return None
920
934
 
921
935
  def fetch_missing(self, query: Query) -> None:
922
- if self.missing:
936
+ if self.incomplete_records:
937
+ missing_values = set(self._get_required_values(r) for r in self.incomplete_records)
923
938
  self.record_set.update(
924
939
  query.join_data_coordinates(
925
940
  [
926
- DataCoordinate.from_required_values(self.record_set.element.minimal_group, row)
927
- for row in self.missing
941
+ DataCoordinate.from_required_values(self.record_set.element.minimal_group, values)
942
+ for values in missing_values
928
943
  ]
929
944
  ).dimension_records(self.record_set.element.name)
930
945
  )
931
946
 
947
+ missing = self.incomplete_records
948
+ self.incomplete_records = list()
949
+ for record in missing:
950
+ self.lookup(record)
951
+
932
952
 
933
953
  @dataclasses.dataclass
934
954
  class _DeserializingDimensionRecordLookupHelper(_DimensionRecordLookupHelper):
@@ -34,15 +34,7 @@ from collections.abc import Hashable
34
34
  from typing import TYPE_CHECKING, Any, ClassVar, TypeAlias
35
35
 
36
36
  import pydantic
37
- from pydantic import (
38
- BaseModel,
39
- Field,
40
- StrictBool,
41
- StrictFloat,
42
- StrictInt,
43
- StrictStr,
44
- create_model,
45
- )
37
+ from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr, create_model
46
38
 
47
39
  import lsst.sphgeom
48
40
  from lsst.utils.classes import immutable
@@ -533,6 +525,29 @@ class DimensionRecord:
533
525
  results["datetime_end"] = timespan.end
534
526
  return results
535
527
 
528
+ def get(self, name: str) -> Any:
529
+ """Return a single metadata value associated with this record.
530
+
531
+ Parameters
532
+ ----------
533
+ name : `str`
534
+ Key of the metadata value to be retrieved.
535
+
536
+ Returns
537
+ -------
538
+ value
539
+ The metadata value.
540
+
541
+ Raises
542
+ ------
543
+ KeyError
544
+ If the given name is not a valid key in this dimension record.
545
+ """
546
+ if name not in self.__slots__:
547
+ raise KeyError(f"'{name}' is not a valid record key for dimension '{self.definition.name}'")
548
+
549
+ return getattr(self, name)
550
+
536
551
  def serialize_key_value(self) -> SerializedKeyValueDimensionRecord:
537
552
  """Serialize this record to a `list` that can be sliced into a key
538
553
  (data ID values) / value (everything else) pair.
@@ -101,6 +101,11 @@ class DatasetTypeConfig(pydantic.BaseModel):
101
101
  """Value for the ``obs_collection`` column, if specified it overrides
102
102
  global value in `ObsCoreConfig`."""
103
103
 
104
+ s_xel: tuple[int, int] | None = None
105
+ """The number of pixels in the first and second dimension of the dataset
106
+ type.
107
+ """
108
+
104
109
  extra_columns: (
105
110
  None | (dict[str, StrictFloat | StrictInt | StrictBool | StrictStr | ExtraColumnConfig])
106
111
  ) = None
@@ -179,6 +179,10 @@ class RecordFactory:
179
179
  record["obs_collection"] = self.config.obs_collection
180
180
  record["access_format"] = dataset_config.access_format
181
181
 
182
+ if dataset_config.s_xel is not None:
183
+ record["s_xel1"] = dataset_config.s_xel[0]
184
+ record["s_xel2"] = dataset_config.s_xel[1]
185
+
182
186
  dataId = ref.dataId
183
187
  dataset_type_name = ref.datasetType.name
184
188
 
@@ -190,6 +194,11 @@ class RecordFactory:
190
194
  fmt_kws.update(run=ref.run)
191
195
  fmt_kws.update(dataset_type=dataset_type_name)
192
196
  fmt_kws.update(record)
197
+
198
+ # In some cases we would like some keys to be duplicated
199
+ # with different names. For example making an exposure be a visit.
200
+ self.finalize_format_keywords(fmt_kws)
201
+
193
202
  if dataset_config.obs_id_fmt:
194
203
  record["obs_id"] = dataset_config.obs_id_fmt.format(**fmt_kws)
195
204
  fmt_kws["obs_id"] = record["obs_id"]
@@ -330,6 +339,17 @@ class RecordFactory:
330
339
  raise
331
340
  return record
332
341
 
342
+ def finalize_format_keywords(self, format_kws: dict[str, Any]) -> None:
343
+ """Modify the formatting dict as required after it has been populated
344
+ with generic content.
345
+
346
+ Parameters
347
+ ----------
348
+ format_kws : `dict`
349
+ Dictionary that might be modified in place.
350
+ """
351
+ pass
352
+
333
353
  @classmethod
334
354
  def get_record_type_from_universe(cls, universe: DimensionUniverse) -> type[RecordFactory]:
335
355
  namespace = universe.namespace
@@ -410,10 +430,10 @@ class DafButlerRecordFactory(RecordFactory):
410
430
  if timespan is not None:
411
431
  if timespan.begin is not None:
412
432
  t_min = cast(astropy.time.Time, timespan.begin)
413
- record["t_min"] = float(t_min.mjd)
433
+ record["t_min"] = float(t_min.utc.mjd)
414
434
  if timespan.end is not None:
415
435
  t_max = cast(astropy.time.Time, timespan.end)
416
- record["t_max"] = float(t_max.mjd)
436
+ record["t_max"] = float(t_max.utc.mjd)
417
437
 
418
438
  region = dataId.region
419
439
  if self.exposure.name in dataId:
@@ -469,3 +489,9 @@ class DafButlerRecordFactory(RecordFactory):
469
489
  else:
470
490
  return None, None
471
491
  return region_dim, "region"
492
+
493
+ def finalize_format_keywords(self, format_kws: dict[str, Any]) -> None:
494
+ # If we have an exposure but do not have a visit, copy the exposure
495
+ # into the visit field.
496
+ if "exposure" in format_kws and "visit" not in format_kws:
497
+ format_kws["visit"] = format_kws["exposure"]
@@ -34,6 +34,7 @@ __all__ = ("SqlRegistry",)
34
34
  import contextlib
35
35
  import logging
36
36
  import warnings
37
+ from collections import defaultdict
37
38
  from collections.abc import Iterable, Iterator, Mapping, Sequence
38
39
  from typing import TYPE_CHECKING, Any, Literal, cast
39
40
 
@@ -61,6 +62,7 @@ from ..dimensions import (
61
62
  DataCoordinate,
62
63
  DataId,
63
64
  DimensionConfig,
65
+ DimensionDataAttacher,
64
66
  DimensionElement,
65
67
  DimensionGroup,
66
68
  DimensionRecord,
@@ -1060,16 +1062,15 @@ class SqlRegistry:
1060
1062
  f"Given collection is of type {runRecord.type.name}; RUN collection required."
1061
1063
  )
1062
1064
  assert isinstance(runRecord, RunRecord)
1063
- progress = Progress("daf.butler.Registry.insertDatasets", level=logging.DEBUG)
1065
+
1066
+ expandedDataIds = [
1067
+ DataCoordinate.standardize(dataId, dimensions=datasetType.dimensions) for dataId in dataIds
1068
+ ]
1064
1069
  if expand:
1065
- expandedDataIds = [
1066
- self.expandDataId(dataId, dimensions=datasetType.dimensions)
1067
- for dataId in progress.wrap(dataIds, f"Expanding {datasetType.name} data IDs")
1068
- ]
1069
- else:
1070
- expandedDataIds = [
1071
- DataCoordinate.standardize(dataId, dimensions=datasetType.dimensions) for dataId in dataIds
1072
- ]
1070
+ _LOG.debug("Expanding %d data IDs", len(expandedDataIds))
1071
+ expandedDataIds = self.expand_data_ids(expandedDataIds)
1072
+ _LOG.debug("Finished expanding data IDs")
1073
+
1073
1074
  try:
1074
1075
  refs = list(
1075
1076
  self._managers.datasets.insert(datasetType.name, runRecord, expandedDataIds, idGenerationMode)
@@ -1161,12 +1162,10 @@ class SqlRegistry:
1161
1162
  )
1162
1163
  assert isinstance(runRecord, RunRecord)
1163
1164
 
1164
- progress = Progress("daf.butler.Registry.importDatasets", level=logging.DEBUG)
1165
1165
  if expand:
1166
- datasets = [
1167
- dataset.expanded(self.expandDataId(dataset.dataId, dimensions=dataset.datasetType.dimensions))
1168
- for dataset in progress.wrap(datasets, "Expanding data IDs")
1169
- ]
1166
+ _LOG.debug("Expanding %d data IDs", len(datasets))
1167
+ datasets = self.expand_refs(datasets)
1168
+ _LOG.debug("Finished expanding data IDs")
1170
1169
 
1171
1170
  try:
1172
1171
  self._managers.datasets.import_(runRecord, datasets)
@@ -1545,6 +1544,34 @@ class SqlRegistry:
1545
1544
  )
1546
1545
  return DataCoordinate.standardize(keys, dimensions=standardized.dimensions).expanded(records=records)
1547
1546
 
1547
+ def expand_data_ids(self, data_ids: Iterable[DataCoordinate]) -> list[DataCoordinate]:
1548
+ output = list(data_ids)
1549
+
1550
+ grouped_by_dimensions: defaultdict[DimensionGroup, list[int]] = defaultdict(list)
1551
+ for i, data_id in enumerate(data_ids):
1552
+ if not data_id.hasRecords():
1553
+ grouped_by_dimensions[data_id.dimensions].append(i)
1554
+
1555
+ if not grouped_by_dimensions:
1556
+ # All given DataCoordinate values are already expanded.
1557
+ return output
1558
+
1559
+ attacher = DimensionDataAttacher(
1560
+ cache=self.dimension_record_cache,
1561
+ dimensions=DimensionGroup.union(*grouped_by_dimensions.keys(), universe=self.dimensions),
1562
+ )
1563
+ with self._query() as query:
1564
+ for dimensions, indexes in grouped_by_dimensions.items():
1565
+ expanded = attacher.attach(dimensions, (output[index] for index in indexes), query)
1566
+ for index, data_id in zip(indexes, expanded):
1567
+ output[index] = data_id
1568
+
1569
+ return output
1570
+
1571
+ def expand_refs(self, dataset_refs: list[DatasetRef]) -> list[DatasetRef]:
1572
+ expanded_ids = self.expand_data_ids([ref.dataId for ref in dataset_refs])
1573
+ return [ref.expanded(data_id) for ref, data_id in zip(dataset_refs, expanded_ids)]
1574
+
1548
1575
  def insertDimensionData(
1549
1576
  self,
1550
1577
  element: DimensionElement | str,
@@ -174,13 +174,9 @@ class RepoExportContext:
174
174
  element = self._butler.dimensions[element]
175
175
  if element.has_own_table:
176
176
  standardized_elements.add(element)
177
- for dataId in dataIds:
178
- # This is potentially quite slow, because it's approximately
179
- # len(dataId.graph.elements) queries per data ID. But it's a no-op
180
- # if the data ID is already expanded, and DM-26692 will add (or at
181
- # least start to add / unblock) query functionality that should
182
- # let us speed this up internally as well.
183
- dataId = self._butler.registry.expandDataId(dataId)
177
+
178
+ expanded_data_ids = self._butler._registry.expand_data_ids(dataIds)
179
+ for dataId in expanded_data_ids:
184
180
  for element_name in dataId.dimensions.elements:
185
181
  record = dataId.records[element_name]
186
182
  if record is not None and record.definition in standardized_elements:
@@ -0,0 +1,2 @@
1
+ __all__ = ["__version__"]
2
+ __version__ = "29.2025.2700"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-daf-butler
3
- Version: 29.2025.2500
3
+ Version: 29.2025.2700
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
@@ -1,2 +0,0 @@
1
- __all__ = ["__version__"]
2
- __version__ = "29.2025.2500"