lsst-daf-butler 29.2025.2600__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.2600/python/lsst_daf_butler.egg-info → lsst_daf_butler-29.2025.2700}/PKG-INFO +1 -1
  2. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_record_set.py +65 -45
  3. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_records.py +24 -9
  4. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/sql_registry.py +41 -14
  5. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/transfers/_context.py +3 -7
  6. lsst_daf_butler-29.2025.2700/python/lsst/daf/butler/version.py +2 -0
  7. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700/python/lsst_daf_butler.egg-info}/PKG-INFO +1 -1
  8. lsst_daf_butler-29.2025.2600/python/lsst/daf/butler/version.py +0 -2
  9. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/COPYRIGHT +0 -0
  10. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/LICENSE +0 -0
  11. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/MANIFEST.in +0 -0
  12. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/README.md +0 -0
  13. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/bsd_license.txt +0 -0
  14. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/CHANGES.rst +0 -0
  15. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
  16. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/configuring.rst +0 -0
  17. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/datastores.rst +0 -0
  18. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/dimensions.rst +0 -0
  19. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/formatters.rst +0 -0
  20. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/index.rst +0 -0
  21. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/organizing.rst +0 -0
  22. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/queries.rst +0 -0
  23. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
  24. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/doc/lsst.daf.butler/writing-subcommands.rst +0 -0
  25. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/gpl-v3.0.txt +0 -0
  26. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/pyproject.toml +0 -0
  27. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/__init__.py +0 -0
  28. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/__init__.py +0 -0
  29. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/__init__.py +0 -0
  30. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler.py +0 -0
  31. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler_collections.py +0 -0
  32. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler_config.py +0 -0
  33. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler_instance_options.py +0 -0
  34. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler_metrics.py +0 -0
  35. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
  36. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_collection_type.py +0 -0
  37. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_column_categorization.py +0 -0
  38. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_column_tags.py +0 -0
  39. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_column_type_info.py +0 -0
  40. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_config.py +0 -0
  41. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_config_support.py +0 -0
  42. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_dataset_association.py +0 -0
  43. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_dataset_existence.py +0 -0
  44. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_dataset_provenance.py +0 -0
  45. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_dataset_ref.py +0 -0
  46. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_dataset_type.py +0 -0
  47. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
  48. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_exceptions.py +0 -0
  49. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
  50. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_file_dataset.py +0 -0
  51. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_file_descriptor.py +0 -0
  52. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_formatter.py +0 -0
  53. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_labeled_butler_factory.py +0 -0
  54. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_limited_butler.py +0 -0
  55. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_location.py +0 -0
  56. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_named.py +0 -0
  57. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_quantum.py +0 -0
  58. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_quantum_backed.py +0 -0
  59. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_query_all_datasets.py +0 -0
  60. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_registry_shim.py +0 -0
  61. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_storage_class.py +0 -0
  62. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
  63. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_timespan.py +0 -0
  64. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_topology.py +0 -0
  65. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
  66. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
  67. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
  68. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
  69. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/arrow_utils.py +0 -0
  70. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/__init__.py +0 -0
  71. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/butler.py +0 -0
  72. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/cliLog.py +0 -0
  73. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
  74. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
  75. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +0 -0
  76. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/cmd/commands.py +0 -0
  77. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
  78. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
  79. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
  80. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/opt/options.py +0 -0
  81. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/progress.py +0 -0
  82. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/cli/utils.py +0 -0
  83. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/column_spec.py +0 -0
  84. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
  85. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
  86. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
  87. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/datastores/formatters.yaml +0 -0
  88. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
  89. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
  90. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
  91. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
  92. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
  93. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
  94. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
  95. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
  96. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
  97. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
  98. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/registry.yaml +0 -0
  99. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
  100. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/configs/storageClasses.yaml +0 -0
  101. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/__init__.py +0 -0
  102. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/_datastore.py +0 -0
  103. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/_transfer.py +0 -0
  104. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
  105. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/composites.py +0 -0
  106. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/constraints.py +0 -0
  107. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
  108. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/generic_base.py +0 -0
  109. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/record_data.py +0 -0
  110. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastore/stored_file_info.py +0 -0
  111. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/__init__.py +0 -0
  112. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/chainedDatastore.py +0 -0
  113. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/fileDatastore.py +0 -0
  114. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/fileDatastoreClient.py +0 -0
  115. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
  116. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/file_datastore/get.py +0 -0
  117. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +0 -0
  118. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/file_datastore/transfer.py +0 -0
  119. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +0 -0
  120. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/ddl.py +0 -0
  121. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/delegates/__init__.py +0 -0
  122. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/delegates/arrowtable.py +0 -0
  123. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
  124. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_config.py +0 -0
  125. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_coordinate.py +0 -0
  126. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
  127. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_database.py +0 -0
  128. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_elements.py +0 -0
  129. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
  130. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_group.py +0 -0
  131. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
  132. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_record_table.py +0 -0
  133. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
  134. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
  135. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/_universe.py +0 -0
  136. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/construction.py +0 -0
  137. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/dimensions/record_cache.py +0 -0
  138. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
  139. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_butler/_direct_butler.py +0 -0
  140. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
  141. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
  142. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_driver.py +0 -0
  143. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
  144. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
  145. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +0 -0
  146. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +0 -0
  147. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
  148. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +0 -0
  149. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/__init__.py +0 -0
  150. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
  151. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/file.py +0 -0
  152. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/json.py +0 -0
  153. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/logs.py +0 -0
  154. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
  155. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/packages.py +0 -0
  156. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/parquet.py +0 -0
  157. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/pickle.py +0 -0
  158. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/typeless.py +0 -0
  159. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/formatters/yaml.py +0 -0
  160. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/json.py +0 -0
  161. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/logging.py +0 -0
  162. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/mapping_factory.py +0 -0
  163. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/name_shrinker.py +0 -0
  164. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/nonempty_mapping.py +0 -0
  165. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/persistence_context.py +0 -0
  166. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/progress.py +0 -0
  167. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/py.typed +0 -0
  168. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/pydantic_utils.py +0 -0
  169. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/__init__.py +0 -0
  170. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_base.py +0 -0
  171. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
  172. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
  173. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
  174. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_expression_strings.py +0 -0
  175. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_general_query_results.py +0 -0
  176. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_identifiers.py +0 -0
  177. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/_query.py +0 -0
  178. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/convert_args.py +0 -0
  179. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/driver.py +0 -0
  180. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/expression_factory.py +0 -0
  181. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/overlaps.py +0 -0
  182. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/predicate_constraints_summary.py +0 -0
  183. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/result_specs.py +0 -0
  184. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
  185. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_base.py +0 -0
  186. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_column_expression.py +0 -0
  187. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
  188. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
  189. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_column_set.py +0 -0
  190. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_predicate.py +0 -0
  191. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/tree/_query_tree.py +0 -0
  192. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/queries/visitors.py +0 -0
  193. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/__init__.py +0 -0
  194. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
  195. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_collection_record_cache.py +0 -0
  196. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
  197. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_collection_summary_cache.py +0 -0
  198. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_config.py +0 -0
  199. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_defaults.py +0 -0
  200. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
  201. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_registry.py +0 -0
  202. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
  203. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/attributes.py +0 -0
  204. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
  205. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/bridge/ephemeral.py +0 -0
  206. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/bridge/monolithic.py +0 -0
  207. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
  208. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/collections/_base.py +0 -0
  209. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
  210. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
  211. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/connectionString.py +0 -0
  212. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
  213. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/databases/postgresql.py +0 -0
  214. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/databases/sqlite.py +0 -0
  215. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
  216. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
  217. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +0 -0
  218. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +0 -0
  219. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +0 -0
  220. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
  221. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
  222. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/dimensions/static.py +0 -0
  223. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
  224. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
  225. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_bridge.py +0 -0
  226. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
  227. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_database.py +0 -0
  228. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
  229. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_datasets.py +0 -0
  230. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +0 -0
  231. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_obscore.py +0 -0
  232. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
  233. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
  234. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/managers.py +0 -0
  235. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
  236. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
  237. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/_config.py +0 -0
  238. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
  239. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/_records.py +0 -0
  240. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
  241. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/_spatial.py +0 -0
  242. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
  243. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
  244. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/opaque.py +0 -0
  245. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/__init__.py +0 -0
  246. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_builder.py +0 -0
  247. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_query.py +0 -0
  248. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_query_backend.py +0 -0
  249. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_query_context.py +0 -0
  250. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_readers.py +0 -0
  251. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_results.py +0 -0
  252. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_sql_query_backend.py +0 -0
  253. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_sql_query_context.py +0 -0
  254. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/_structs.py +0 -0
  255. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/butler_sql_engine.py +0 -0
  256. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/__init__.py +0 -0
  257. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/_predicate.py +0 -0
  258. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/categorize.py +0 -0
  259. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/check.py +0 -0
  260. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/normalForm.py +0 -0
  261. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/__init__.py +0 -0
  262. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/exprTree.py +0 -0
  263. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/parser.py +0 -0
  264. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/parserLex.py +0 -0
  265. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/parserYacc.py +0 -0
  266. {lsst_daf_butler-29.2025.2600 → 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.2600 → 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.2600 → 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.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/expressions/parser/treeVisitor.py +0 -0
  270. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/queries/find_first_dataset.py +0 -0
  271. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
  272. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
  273. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/tests/_registry.py +0 -0
  274. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/versions.py +0 -0
  275. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/registry/wildcards.py +0 -0
  276. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
  277. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_authentication.py +0 -0
  278. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
  279. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
  280. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
  281. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
  282. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
  283. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_http_connection.py +0 -0
  284. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_query_driver.py +0 -0
  285. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
  286. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
  287. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_registry.py +0 -0
  288. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_remote_butler.py +0 -0
  289. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
  290. {lsst_daf_butler-29.2025.2600 → 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.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
  292. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/registry/_query_common.py +0 -0
  293. {lsst_daf_butler-29.2025.2600 → 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.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/registry/_query_datasets.py +0 -0
  295. {lsst_daf_butler-29.2025.2600 → 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.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
  297. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_config.py +0 -0
  298. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_dependencies.py +0 -0
  299. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
  300. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py +0 -0
  301. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_server.py +0 -0
  302. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/_telemetry.py +0 -0
  303. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +0 -0
  304. {lsst_daf_butler-29.2025.2600 → 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.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
  306. {lsst_daf_butler-29.2025.2600 → 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.2600 → 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.2600 → 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.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
  310. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
  311. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/repo_relocation.py +0 -0
  312. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/__init__.py +0 -0
  313. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/_associate.py +0 -0
  314. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/_pruneDatasets.py +0 -0
  315. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/butlerImport.py +0 -0
  316. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
  317. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/collectionChain.py +0 -0
  318. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/configDump.py +0 -0
  319. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/configValidate.py +0 -0
  320. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/createRepo.py +0 -0
  321. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
  322. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/ingest_files.py +0 -0
  323. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/ingest_zip.py +0 -0
  324. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/queryCollections.py +0 -0
  325. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
  326. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
  327. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
  328. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
  329. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
  330. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/removeCollections.py +0 -0
  331. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
  332. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/removeRuns.py +0 -0
  333. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/retrieveArtifacts.py +0 -0
  334. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/script/transferDatasets.py +0 -0
  335. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/__init__.py +0 -0
  336. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
  337. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
  338. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
  339. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
  340. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/butler_queries.py +0 -0
  341. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/cliCmdTestBase.py +0 -0
  342. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -0
  343. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
  344. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
  345. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/hybrid_butler.py +0 -0
  346. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
  347. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +0 -0
  348. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/postgresql.py +0 -0
  349. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/__init__.py +0 -0
  350. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/base.yaml +0 -0
  351. {lsst_daf_butler-29.2025.2600 → 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.2600 → 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.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/datasets.yaml +0 -0
  354. {lsst_daf_butler-29.2025.2600 → 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.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/spatial.py +0 -0
  356. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/registry_data/spatial.yaml +0 -0
  357. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/server.py +0 -0
  358. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/server_utils.py +0 -0
  359. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
  360. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/tests/utils.py +0 -0
  361. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/time_utils.py +0 -0
  362. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/timespan_database_representation.py +0 -0
  363. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/transfers/__init__.py +0 -0
  364. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
  365. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
  366. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst/daf/butler/utils.py +0 -0
  367. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/SOURCES.txt +0 -0
  368. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
  369. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
  370. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/requires.txt +0 -0
  371. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
  372. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
  373. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/setup.cfg +0 -0
  374. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_astropyTableFormatter.py +0 -0
  375. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_authentication.py +0 -0
  376. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_butler.py +0 -0
  377. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_butler_factory.py +0 -0
  378. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdAssociate.py +0 -0
  379. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdConfigDump.py +0 -0
  380. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdConfigValidate.py +0 -0
  381. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdCreate.py +0 -0
  382. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdImport.py +0 -0
  383. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdIngestFiles.py +0 -0
  384. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdPruneDatasets.py +0 -0
  385. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdQueryCollections.py +0 -0
  386. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdQueryDataIds.py +0 -0
  387. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
  388. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdQueryDatasets.py +0 -0
  389. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
  390. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdRemoveCollections.py +0 -0
  391. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdRemoveRuns.py +0 -0
  392. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
  393. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliLog.py +0 -0
  394. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliPluginLoader.py +0 -0
  395. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliUtilSplitCommas.py +0 -0
  396. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliUtilSplitKv.py +0 -0
  397. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliUtilToUpper.py +0 -0
  398. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_cliUtils.py +0 -0
  399. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_column_spec.py +0 -0
  400. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_composites.py +0 -0
  401. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_config.py +0 -0
  402. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_connectionString.py +0 -0
  403. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_constraints.py +0 -0
  404. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_datasets.py +0 -0
  405. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_datastore.py +0 -0
  406. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_ddl.py +0 -0
  407. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_dimension_record_containers.py +0 -0
  408. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_dimensions.py +0 -0
  409. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_exprParserLex.py +0 -0
  410. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_exprParserYacc.py +0 -0
  411. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_expressions.py +0 -0
  412. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_formatter.py +0 -0
  413. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_gafaelfawr.py +0 -0
  414. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_location.py +0 -0
  415. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_logFormatter.py +0 -0
  416. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_logging.py +0 -0
  417. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_matplotlibFormatter.py +0 -0
  418. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_nonempty_mapping.py +0 -0
  419. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_normalFormExpression.py +0 -0
  420. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_obscore.py +0 -0
  421. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_packages.py +0 -0
  422. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_parquet.py +0 -0
  423. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_postgresql.py +0 -0
  424. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_progress.py +0 -0
  425. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_pydantic_utils.py +0 -0
  426. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_quantum.py +0 -0
  427. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_quantumBackedButler.py +0 -0
  428. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_query_direct_postgresql.py +0 -0
  429. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_query_direct_sqlite.py +0 -0
  430. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_query_interface.py +0 -0
  431. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_query_relations.py +0 -0
  432. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_query_remote.py +0 -0
  433. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_query_utilities.py +0 -0
  434. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_remote_butler.py +0 -0
  435. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_server.py +0 -0
  436. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_simpleButler.py +0 -0
  437. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_sqlite.py +0 -0
  438. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_storageClass.py +0 -0
  439. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_templates.py +0 -0
  440. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_testRepo.py +0 -0
  441. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_thread_utils.py +0 -0
  442. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_time_utils.py +0 -0
  443. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_timespan.py +0 -0
  444. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2700}/tests/test_utils.py +0 -0
  445. {lsst_daf_butler-29.2025.2600 → 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.2600
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.
@@ -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.2600
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.2600"