lsst-daf-butler 29.2025.4000__tar.gz → 29.2025.4100__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 (455) hide show
  1. {lsst_daf_butler-29.2025.4000/python/lsst_daf_butler.egg-info → lsst_daf_butler-29.2025.4100}/PKG-INFO +1 -1
  2. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_dataset_ref.py +10 -3
  3. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_dataset_type.py +2 -2
  4. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_registry_shim.py +9 -96
  5. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_rubin/__init__.py +3 -0
  6. lsst_daf_butler-29.2025.4100/python/lsst/daf/butler/_uuid.py +79 -0
  7. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_coordinate.py +3 -3
  8. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_elements.py +3 -2
  9. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_records.py +3 -3
  10. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/direct_query_driver/_driver.py +5 -1
  11. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/_query.py +4 -0
  12. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/predicate_constraints_summary.py +8 -3
  13. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/tree/_query_tree.py +5 -0
  14. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/_registry.py +6 -3
  15. lsst_daf_butler-29.2025.4100/python/lsst/daf/butler/registry/_registry_base.py +265 -0
  16. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/dimensions/static.py +0 -120
  17. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +0 -40
  18. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/__init__.py +0 -3
  19. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/_query_backend.py +0 -65
  20. {lsst_daf_butler-29.2025.4000/python/lsst/daf/butler/remote_butler/registry → lsst_daf_butler-29.2025.4100/python/lsst/daf/butler/registry/queries}/_query_common.py +73 -31
  21. {lsst_daf_butler-29.2025.4000/python/lsst/daf/butler/remote_butler/registry → lsst_daf_butler-29.2025.4100/python/lsst/daf/butler/registry/queries}/_query_data_coordinates.py +51 -14
  22. {lsst_daf_butler-29.2025.4000/python/lsst/daf/butler/remote_butler/registry → lsst_daf_butler-29.2025.4100/python/lsst/daf/butler/registry/queries}/_query_datasets.py +8 -11
  23. {lsst_daf_butler-29.2025.4000/python/lsst/daf/butler/remote_butler/registry → lsst_daf_butler-29.2025.4100/python/lsst/daf/butler/registry/queries}/_query_dimension_records.py +7 -8
  24. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/_results.py +2 -316
  25. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/_sql_query_backend.py +1 -147
  26. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/sql_registry.py +1 -606
  27. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/tests/_registry.py +109 -451
  28. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_registry.py +3 -219
  29. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +3 -94
  30. lsst_daf_butler-29.2025.4100/python/lsst/daf/butler/version.py +2 -0
  31. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100/python/lsst_daf_butler.egg-info}/PKG-INFO +1 -1
  32. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst_daf_butler.egg-info/SOURCES.txt +7 -8
  33. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_postgresql.py +6 -3
  34. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_remote_butler.py +0 -26
  35. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_sqlite.py +0 -6
  36. lsst_daf_butler-29.2025.4100/tests/test_uuid.py +53 -0
  37. lsst_daf_butler-29.2025.4000/python/lsst/daf/butler/registry/queries/_builder.py +0 -276
  38. lsst_daf_butler-29.2025.4000/python/lsst/daf/butler/registry/queries/_query.py +0 -1087
  39. lsst_daf_butler-29.2025.4000/python/lsst/daf/butler/registry/queries/_structs.py +0 -525
  40. lsst_daf_butler-29.2025.4000/python/lsst/daf/butler/version.py +0 -2
  41. lsst_daf_butler-29.2025.4000/tests/test_query_relations.py +0 -361
  42. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/COPYRIGHT +0 -0
  43. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/LICENSE +0 -0
  44. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/MANIFEST.in +0 -0
  45. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/README.md +0 -0
  46. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/bsd_license.txt +0 -0
  47. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/doc/lsst.daf.butler/CHANGES.rst +0 -0
  48. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
  49. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/doc/lsst.daf.butler/configuring.rst +0 -0
  50. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/doc/lsst.daf.butler/datastores.rst +0 -0
  51. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/doc/lsst.daf.butler/dimensions.rst +0 -0
  52. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/doc/lsst.daf.butler/formatters.rst +0 -0
  53. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/doc/lsst.daf.butler/index.rst +0 -0
  54. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/doc/lsst.daf.butler/organizing.rst +0 -0
  55. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/doc/lsst.daf.butler/queries.rst +0 -0
  56. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
  57. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/doc/lsst.daf.butler/writing-subcommands.rst +0 -0
  58. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/gpl-v3.0.txt +0 -0
  59. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/pyproject.toml +0 -0
  60. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/__init__.py +0 -0
  61. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/__init__.py +0 -0
  62. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/__init__.py +0 -0
  63. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_butler.py +0 -0
  64. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_butler_collections.py +0 -0
  65. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_butler_config.py +0 -0
  66. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_butler_instance_options.py +0 -0
  67. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_butler_metrics.py +0 -0
  68. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
  69. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_collection_type.py +0 -0
  70. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_column_categorization.py +0 -0
  71. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_column_tags.py +0 -0
  72. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_column_type_info.py +0 -0
  73. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_config.py +0 -0
  74. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_config_support.py +0 -0
  75. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_dataset_association.py +0 -0
  76. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_dataset_existence.py +0 -0
  77. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_dataset_provenance.py +0 -0
  78. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
  79. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_exceptions.py +0 -0
  80. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
  81. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_file_dataset.py +0 -0
  82. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_file_descriptor.py +0 -0
  83. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_formatter.py +0 -0
  84. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_labeled_butler_factory.py +0 -0
  85. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_limited_butler.py +0 -0
  86. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_location.py +0 -0
  87. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_named.py +0 -0
  88. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_quantum.py +0 -0
  89. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_quantum_backed.py +0 -0
  90. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_query_all_datasets.py +0 -0
  91. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_rubin/file_datasets.py +0 -0
  92. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_standalone_datastore.py +0 -0
  93. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_storage_class.py +0 -0
  94. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
  95. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_timespan.py +0 -0
  96. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_topology.py +0 -0
  97. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
  98. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
  99. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
  100. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
  101. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/arrow_utils.py +0 -0
  102. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/__init__.py +0 -0
  103. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/butler.py +0 -0
  104. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/cliLog.py +0 -0
  105. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
  106. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
  107. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +0 -0
  108. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/cmd/commands.py +0 -0
  109. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
  110. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
  111. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
  112. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/opt/options.py +0 -0
  113. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/progress.py +0 -0
  114. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/cli/utils.py +0 -0
  115. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/column_spec.py +0 -0
  116. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
  117. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
  118. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
  119. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/datastores/formatters.yaml +0 -0
  120. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
  121. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
  122. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
  123. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
  124. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
  125. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
  126. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
  127. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
  128. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
  129. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
  130. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/registry.yaml +0 -0
  131. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
  132. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/configs/storageClasses.yaml +0 -0
  133. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastore/__init__.py +0 -0
  134. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastore/_datastore.py +0 -0
  135. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastore/_transfer.py +0 -0
  136. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
  137. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastore/composites.py +0 -0
  138. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastore/constraints.py +0 -0
  139. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
  140. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastore/generic_base.py +0 -0
  141. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastore/record_data.py +0 -0
  142. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastore/stored_file_info.py +0 -0
  143. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastores/__init__.py +0 -0
  144. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastores/chainedDatastore.py +0 -0
  145. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastores/fileDatastore.py +0 -0
  146. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
  147. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastores/file_datastore/get.py +0 -0
  148. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +0 -0
  149. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastores/file_datastore/transfer.py +0 -0
  150. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +0 -0
  151. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/ddl.py +0 -0
  152. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/delegates/__init__.py +0 -0
  153. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/delegates/arrowtable.py +0 -0
  154. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
  155. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_config.py +0 -0
  156. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
  157. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_database.py +0 -0
  158. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
  159. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_group.py +0 -0
  160. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
  161. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_record_set.py +0 -0
  162. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_record_table.py +0 -0
  163. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
  164. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
  165. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/_universe.py +0 -0
  166. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/construction.py +0 -0
  167. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/dimensions/record_cache.py +0 -0
  168. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
  169. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/direct_butler/_direct_butler.py +0 -0
  170. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
  171. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
  172. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
  173. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
  174. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +0 -0
  175. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +0 -0
  176. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
  177. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +0 -0
  178. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/formatters/__init__.py +0 -0
  179. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
  180. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/formatters/file.py +0 -0
  181. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/formatters/json.py +0 -0
  182. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/formatters/logs.py +0 -0
  183. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
  184. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/formatters/packages.py +0 -0
  185. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/formatters/parquet.py +0 -0
  186. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/formatters/pickle.py +0 -0
  187. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/formatters/typeless.py +0 -0
  188. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/formatters/yaml.py +0 -0
  189. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/json.py +0 -0
  190. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/logging.py +0 -0
  191. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/mapping_factory.py +0 -0
  192. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/name_shrinker.py +0 -0
  193. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/nonempty_mapping.py +0 -0
  194. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/persistence_context.py +0 -0
  195. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/progress.py +0 -0
  196. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/py.typed +0 -0
  197. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/pydantic_utils.py +0 -0
  198. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/__init__.py +0 -0
  199. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/_base.py +0 -0
  200. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
  201. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
  202. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
  203. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/_expression_strings.py +0 -0
  204. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/_general_query_results.py +0 -0
  205. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/_identifiers.py +0 -0
  206. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/convert_args.py +0 -0
  207. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/driver.py +0 -0
  208. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/expression_factory.py +0 -0
  209. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/overlaps.py +0 -0
  210. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/result_specs.py +0 -0
  211. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
  212. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/tree/_base.py +0 -0
  213. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/tree/_column_expression.py +0 -0
  214. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
  215. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
  216. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/tree/_column_set.py +0 -0
  217. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/tree/_predicate.py +0 -0
  218. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/queries/visitors.py +0 -0
  219. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/__init__.py +0 -0
  220. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
  221. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/_collection_record_cache.py +0 -0
  222. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
  223. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/_collection_summary_cache.py +0 -0
  224. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/_config.py +0 -0
  225. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/_defaults.py +0 -0
  226. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
  227. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
  228. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/attributes.py +0 -0
  229. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
  230. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/bridge/ephemeral.py +0 -0
  231. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/bridge/monolithic.py +0 -0
  232. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
  233. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/collections/_base.py +0 -0
  234. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
  235. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
  236. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/connectionString.py +0 -0
  237. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
  238. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/databases/postgresql.py +0 -0
  239. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/databases/sqlite.py +0 -0
  240. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
  241. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
  242. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +0 -0
  243. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +0 -0
  244. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +0 -0
  245. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
  246. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
  247. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
  248. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
  249. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/interfaces/_bridge.py +0 -0
  250. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
  251. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/interfaces/_database.py +0 -0
  252. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
  253. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/interfaces/_datasets.py +0 -0
  254. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/interfaces/_obscore.py +0 -0
  255. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
  256. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
  257. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/managers.py +0 -0
  258. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
  259. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
  260. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/obscore/_config.py +0 -0
  261. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
  262. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/obscore/_records.py +0 -0
  263. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
  264. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/obscore/_spatial.py +0 -0
  265. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
  266. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
  267. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/opaque.py +0 -0
  268. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/_query_context.py +0 -0
  269. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/_readers.py +0 -0
  270. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/_sql_query_context.py +0 -0
  271. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/butler_sql_engine.py +0 -0
  272. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/__init__.py +0 -0
  273. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/_predicate.py +0 -0
  274. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/categorize.py +0 -0
  275. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/check.py +0 -0
  276. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/normalForm.py +0 -0
  277. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/parser/__init__.py +0 -0
  278. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/parser/exprTree.py +0 -0
  279. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/parser/parser.py +0 -0
  280. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/parser/parserLex.py +0 -0
  281. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/parser/parserYacc.py +0 -0
  282. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/__init__.py +0 -0
  283. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/lex.py +0 -0
  284. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/yacc.py +0 -0
  285. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/expressions/parser/treeVisitor.py +0 -0
  286. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/queries/find_first_dataset.py +0 -0
  287. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
  288. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
  289. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/versions.py +0 -0
  290. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/registry/wildcards.py +0 -0
  291. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
  292. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
  293. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
  294. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
  295. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
  296. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
  297. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_get.py +0 -0
  298. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_http_connection.py +0 -0
  299. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_query_driver.py +0 -0
  300. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
  301. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
  302. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_remote_butler.py +0 -0
  303. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
  304. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py +0 -0
  305. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/authentication/__init__.py +0 -0
  306. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/authentication/cadc.py +0 -0
  307. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/authentication/interface.py +0 -0
  308. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/authentication/rubin.py +0 -0
  309. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
  310. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
  311. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/_config.py +0 -0
  312. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/_dependencies.py +0 -0
  313. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
  314. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py +0 -0
  315. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/_server.py +0 -0
  316. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/_telemetry.py +0 -0
  317. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +0 -0
  318. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/handlers/_external_query.py +0 -0
  319. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/handlers/_file_info.py +0 -0
  320. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
  321. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/handlers/_query_limits.py +0 -0
  322. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/handlers/_query_serialization.py +0 -0
  323. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/handlers/_query_streaming.py +0 -0
  324. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
  325. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
  326. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/repo_relocation.py +0 -0
  327. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/__init__.py +0 -0
  328. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/_associate.py +0 -0
  329. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/_pruneDatasets.py +0 -0
  330. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/butlerImport.py +0 -0
  331. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
  332. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/collectionChain.py +0 -0
  333. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/configDump.py +0 -0
  334. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/configValidate.py +0 -0
  335. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/createRepo.py +0 -0
  336. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
  337. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/ingest_files.py +0 -0
  338. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/ingest_zip.py +0 -0
  339. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/queryCollections.py +0 -0
  340. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
  341. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
  342. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
  343. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
  344. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
  345. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/removeCollections.py +0 -0
  346. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
  347. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/removeRuns.py +0 -0
  348. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/retrieveArtifacts.py +0 -0
  349. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/script/transferDatasets.py +0 -0
  350. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/__init__.py +0 -0
  351. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
  352. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
  353. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
  354. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
  355. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/butler_queries.py +0 -0
  356. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/cliCmdTestBase.py +0 -0
  357. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -0
  358. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
  359. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
  360. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/hybrid_butler.py +0 -0
  361. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
  362. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/postgresql.py +0 -0
  363. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/registry_data/__init__.py +0 -0
  364. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/registry_data/base.yaml +0 -0
  365. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset-skymap.yaml +0 -0
  366. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset.yaml +0 -0
  367. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/registry_data/datasets.yaml +0 -0
  368. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/registry_data/hsc-rc2-subset-v0.yaml +0 -0
  369. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/registry_data/spatial.py +0 -0
  370. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/registry_data/spatial.yaml +0 -0
  371. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/server.py +0 -0
  372. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/server_utils.py +0 -0
  373. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
  374. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/tests/utils.py +0 -0
  375. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/time_utils.py +0 -0
  376. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/timespan_database_representation.py +0 -0
  377. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/transfers/__init__.py +0 -0
  378. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/transfers/_context.py +0 -0
  379. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
  380. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
  381. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst/daf/butler/utils.py +0 -0
  382. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
  383. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
  384. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst_daf_butler.egg-info/requires.txt +0 -0
  385. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
  386. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
  387. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/setup.cfg +0 -0
  388. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_astropyTableFormatter.py +0 -0
  389. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_authentication.py +0 -0
  390. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_butler.py +0 -0
  391. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_butler_factory.py +0 -0
  392. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdAssociate.py +0 -0
  393. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdConfigDump.py +0 -0
  394. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdConfigValidate.py +0 -0
  395. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdCreate.py +0 -0
  396. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdImport.py +0 -0
  397. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdIngestFiles.py +0 -0
  398. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdPruneDatasets.py +0 -0
  399. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdQueryCollections.py +0 -0
  400. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdQueryDataIds.py +0 -0
  401. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
  402. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdQueryDatasets.py +0 -0
  403. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
  404. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdRemoveCollections.py +0 -0
  405. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdRemoveRuns.py +0 -0
  406. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
  407. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliLog.py +0 -0
  408. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliPluginLoader.py +0 -0
  409. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliUtilSplitCommas.py +0 -0
  410. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliUtilSplitKv.py +0 -0
  411. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliUtilToUpper.py +0 -0
  412. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_cliUtils.py +0 -0
  413. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_column_spec.py +0 -0
  414. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_composites.py +0 -0
  415. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_config.py +0 -0
  416. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_connectionString.py +0 -0
  417. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_constraints.py +0 -0
  418. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_datasets.py +0 -0
  419. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_datastore.py +0 -0
  420. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_ddl.py +0 -0
  421. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_dimension_record_containers.py +0 -0
  422. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_dimensions.py +0 -0
  423. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_exprParserLex.py +0 -0
  424. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_exprParserYacc.py +0 -0
  425. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_expressions.py +0 -0
  426. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_formatter.py +0 -0
  427. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_gafaelfawr.py +0 -0
  428. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_location.py +0 -0
  429. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_logFormatter.py +0 -0
  430. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_logging.py +0 -0
  431. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_matplotlibFormatter.py +0 -0
  432. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_nonempty_mapping.py +0 -0
  433. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_normalFormExpression.py +0 -0
  434. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_obscore.py +0 -0
  435. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_packages.py +0 -0
  436. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_parquet.py +0 -0
  437. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_progress.py +0 -0
  438. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_pydantic_utils.py +0 -0
  439. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_quantum.py +0 -0
  440. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_quantumBackedButler.py +0 -0
  441. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_query_direct_postgresql.py +0 -0
  442. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_query_direct_sqlite.py +0 -0
  443. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_query_interface.py +0 -0
  444. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_query_remote.py +0 -0
  445. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_query_utilities.py +0 -0
  446. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_server.py +0 -0
  447. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_simpleButler.py +0 -0
  448. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_storageClass.py +0 -0
  449. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_templates.py +0 -0
  450. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_testRepo.py +0 -0
  451. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_thread_utils.py +0 -0
  452. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_time_utils.py +0 -0
  453. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_timespan.py +0 -0
  454. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/tests/test_utils.py +0 -0
  455. {lsst_daf_butler-29.2025.4000 → lsst_daf_butler-29.2025.4100}/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.4000
3
+ Version: 29.2025.4100
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-Expression: BSD-3-Clause OR GPL-3.0-or-later
@@ -42,7 +42,7 @@ import enum
42
42
  import logging
43
43
  import sys
44
44
  import uuid
45
- from collections.abc import Iterable, Mapping
45
+ from collections.abc import Callable, Iterable, Mapping
46
46
  from typing import (
47
47
  TYPE_CHECKING,
48
48
  Annotated,
@@ -52,6 +52,7 @@ from typing import (
52
52
  Protocol,
53
53
  Self,
54
54
  TypeAlias,
55
+ cast,
55
56
  runtime_checkable,
56
57
  )
57
58
 
@@ -63,6 +64,7 @@ from lsst.utils.classes import immutable
63
64
  from ._config_support import LookupKey
64
65
  from ._dataset_type import DatasetType, SerializedDatasetType
65
66
  from ._named import NamedKeyDict
67
+ from ._uuid import generate_uuidv7
66
68
  from .datastore.stored_file_info import StoredDatastoreItemInfo
67
69
  from .dimensions import (
68
70
  DataCoordinate,
@@ -181,7 +183,12 @@ class DatasetIdFactory:
181
183
  Dataset identifier.
182
184
  """
183
185
  if idGenerationMode is DatasetIdGenEnum.UNIQUE:
184
- return uuid.uuid4()
186
+ # Earlier versions of this code used UUIDv4. However, totally
187
+ # random IDs create problems for Postgres insert performance,
188
+ # because it scatters index updates randomly around the disk.
189
+ # UUIDv7 has similar uniqueness properties to v4, but IDs generated
190
+ # at the same time are close together in the index.
191
+ return generate_uuidv7()
185
192
  else:
186
193
  # WARNING: If you modify this code make sure that the order of
187
194
  # items in the `items` list below never changes.
@@ -559,7 +566,7 @@ class DatasetRef:
559
566
  return ref
560
567
 
561
568
  to_json = to_json_pydantic
562
- from_json: ClassVar = classmethod(from_json_pydantic)
569
+ from_json: ClassVar[Callable[..., Self]] = cast(Callable[..., Self], classmethod(from_json_pydantic))
563
570
 
564
571
  @classmethod
565
572
  def _unpickle(
@@ -33,7 +33,7 @@ import re
33
33
  from collections.abc import Callable, Iterable, Mapping
34
34
  from copy import deepcopy
35
35
  from types import MappingProxyType
36
- from typing import TYPE_CHECKING, Any, ClassVar
36
+ from typing import TYPE_CHECKING, Any, ClassVar, Self, cast
37
37
 
38
38
  from pydantic import BaseModel, StrictBool, StrictStr
39
39
 
@@ -756,7 +756,7 @@ class DatasetType:
756
756
  return newType
757
757
 
758
758
  to_json = to_json_pydantic
759
- from_json: ClassVar = classmethod(from_json_pydantic)
759
+ from_json: ClassVar[Callable[..., Self]] = cast(Callable[..., Self], classmethod(from_json_pydantic))
760
760
 
761
761
  def __reduce__(
762
762
  self,
@@ -27,16 +27,16 @@
27
27
 
28
28
  from __future__ import annotations
29
29
 
30
- __all__ = ("Registry",)
30
+ __all__ = ("RegistryShim",)
31
31
 
32
32
  import contextlib
33
33
  from collections.abc import Iterable, Iterator, Mapping, Sequence
34
34
  from typing import TYPE_CHECKING, Any
35
35
 
36
36
  from ._collection_type import CollectionType
37
- from ._dataset_association import DatasetAssociation
38
37
  from ._dataset_ref import DatasetId, DatasetIdGenEnum, DatasetRef
39
38
  from ._dataset_type import DatasetType
39
+ from ._storage_class import StorageClassFactory
40
40
  from ._timespan import Timespan
41
41
  from .dimensions import (
42
42
  DataCoordinate,
@@ -46,10 +46,9 @@ from .dimensions import (
46
46
  DimensionRecord,
47
47
  DimensionUniverse,
48
48
  )
49
- from .registry import Registry
50
49
  from .registry._collection_summary import CollectionSummary
51
50
  from .registry._defaults import RegistryDefaults
52
- from .registry.queries import DataCoordinateQueryResults, DatasetQueryResults, DimensionRecordQueryResults
51
+ from .registry._registry_base import RegistryBase
53
52
 
54
53
  if TYPE_CHECKING:
55
54
  from .direct_butler import DirectButler
@@ -57,7 +56,7 @@ if TYPE_CHECKING:
57
56
  from .registry.interfaces import ObsCoreTableManager
58
57
 
59
58
 
60
- class RegistryShim(Registry):
59
+ class RegistryShim(RegistryBase):
61
60
  """Implementation of `Registry` interface exposed to clients by `Butler`.
62
61
 
63
62
  Parameters
@@ -74,7 +73,7 @@ class RegistryShim(Registry):
74
73
  """
75
74
 
76
75
  def __init__(self, butler: DirectButler):
77
- self._butler = butler
76
+ super().__init__(butler)
78
77
  self._registry = butler._registry
79
78
 
80
79
  def isWriteable(self) -> bool:
@@ -299,97 +298,11 @@ class RegistryShim(Registry):
299
298
  expression, datasetType, collectionTypes, flattenChains, includeChains
300
299
  )
301
300
 
302
- def queryDatasets(
303
- self,
304
- datasetType: Any,
305
- *,
306
- collections: CollectionArgType | None = None,
307
- dimensions: Iterable[str] | None = None,
308
- dataId: DataId | None = None,
309
- where: str = "",
310
- findFirst: bool = False,
311
- bind: Mapping[str, Any] | None = None,
312
- check: bool = True,
313
- **kwargs: Any,
314
- ) -> DatasetQueryResults:
315
- # Docstring inherited from a base class.
316
- return self._registry.queryDatasets(
317
- datasetType,
318
- collections=collections,
319
- dimensions=dimensions,
320
- dataId=dataId,
321
- where=where,
322
- findFirst=findFirst,
323
- bind=bind,
324
- check=check,
325
- **kwargs,
326
- )
327
-
328
- def queryDataIds(
329
- self,
330
- dimensions: DimensionGroup | Iterable[str] | str,
331
- *,
332
- dataId: DataId | None = None,
333
- datasets: Any = None,
334
- collections: CollectionArgType | None = None,
335
- where: str = "",
336
- bind: Mapping[str, Any] | None = None,
337
- check: bool = True,
338
- **kwargs: Any,
339
- ) -> DataCoordinateQueryResults:
340
- # Docstring inherited from a base class.
341
- return self._registry.queryDataIds(
342
- dimensions,
343
- dataId=dataId,
344
- datasets=datasets,
345
- collections=collections,
346
- where=where,
347
- bind=bind,
348
- check=check,
349
- **kwargs,
350
- )
351
-
352
- def queryDimensionRecords(
353
- self,
354
- element: DimensionElement | str,
355
- *,
356
- dataId: DataId | None = None,
357
- datasets: Any = None,
358
- collections: CollectionArgType | None = None,
359
- where: str = "",
360
- bind: Mapping[str, Any] | None = None,
361
- check: bool = True,
362
- **kwargs: Any,
363
- ) -> DimensionRecordQueryResults:
364
- # Docstring inherited from a base class.
365
- return self._registry.queryDimensionRecords(
366
- element,
367
- dataId=dataId,
368
- datasets=datasets,
369
- collections=collections,
370
- where=where,
371
- bind=bind,
372
- check=check,
373
- **kwargs,
374
- )
375
-
376
- def queryDatasetAssociations(
377
- self,
378
- datasetType: str | DatasetType,
379
- collections: CollectionArgType | None = ...,
380
- *,
381
- collectionTypes: Iterable[CollectionType] = CollectionType.all(),
382
- flattenChains: bool = False,
383
- ) -> Iterator[DatasetAssociation]:
384
- # Docstring inherited from a base class.
385
- return self._registry.queryDatasetAssociations(
386
- datasetType,
387
- collections,
388
- collectionTypes=collectionTypes,
389
- flattenChains=flattenChains,
390
- )
391
-
392
301
  @property
393
302
  def obsCoreTableManager(self) -> ObsCoreTableManager | None:
394
303
  # Docstring inherited from a base class.
395
304
  return self._registry.obsCoreTableManager
305
+
306
+ @property
307
+ def storageClasses(self) -> StorageClassFactory:
308
+ return self._registry.storageClasses
@@ -29,3 +29,6 @@
29
29
  by other LSST packages. The interfaces and behavior of these functions are
30
30
  subject to change at any time.
31
31
  """
32
+
33
+ # UUIDv7 generation is used by pipe_base.
34
+ from .._uuid import generate_uuidv7
@@ -0,0 +1,79 @@
1
+ # This file is part of daf_butler.
2
+ #
3
+ # Developed for the LSST Data Management System.
4
+ # This product includes software developed by the LSST Project
5
+ # (http://www.lsst.org).
6
+ # See the COPYRIGHT file at the top-level directory of this distribution
7
+ # for details of code ownership.
8
+ #
9
+ # This software is dual licensed under the GNU General Public License and also
10
+ # under a 3-clause BSD license. Recipients may choose which of these licenses
11
+ # to use; please see the files gpl-3.0.txt and/or bsd_license.txt,
12
+ # respectively. If you choose the GPL option then the following text applies
13
+ # (but note that there is still no warranty even if you opt for BSD instead):
14
+ #
15
+ # This program is free software: you can redistribute it and/or modify
16
+ # it under the terms of the GNU General Public License as published by
17
+ # the Free Software Foundation, either version 3 of the License, or
18
+ # (at your option) any later version.
19
+ #
20
+ # This program is distributed in the hope that it will be useful,
21
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
22
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23
+ # GNU General Public License for more details.
24
+ #
25
+ # You should have received a copy of the GNU General Public License
26
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
27
+
28
+ from __future__ import annotations
29
+
30
+ __all__ = ("generate_uuidv7",)
31
+
32
+ import time
33
+ from uuid import UUID, uuid4
34
+
35
+
36
+ def generate_uuidv7() -> UUID:
37
+ """Generate a v7 UUID compliant with IETF RFC-9562.
38
+
39
+ Returns
40
+ -------
41
+ uuid : `uuid.UUID`
42
+ Version 7 UUID.
43
+ """
44
+ # Python 3.14 will include an implementation of UUIDv7 that can replace
45
+ # this, but at the time of writing 3.14 hasn't been released and we're
46
+ # still supporting 3.12. There are a few libraries on PyPI with an
47
+ # implementation of v7 UUIDs, but none of them look well-maintained.
48
+ #
49
+ # This is the format of a v7 UUID:
50
+ # 0 1 2 3
51
+ # 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
52
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
53
+ # | unix_ts_ms |
54
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
55
+ # | unix_ts_ms | ver | rand_a |
56
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
57
+ # |var| rand_b |
58
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
59
+ # | rand_b |
60
+ # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
61
+ #
62
+ # It's basically identical to a UUID v4, but with the top 6 bytes
63
+ # replaced with a millisecond UNIX timestamp.
64
+
65
+ # Generate a UUIDv4 for the random portion of the data.
66
+ # A little wasteful, but means we inherit the best practices from
67
+ # the standard library for generating this random data.
68
+ byte_data = bytearray(uuid4().bytes)
69
+
70
+ # Replace high 6 bytes with millisecond UNIX timestamp.
71
+ timestamp = time.time_ns() // 1_000_000
72
+ timestamp_bytes = timestamp.to_bytes(length=6, byteorder="big")
73
+ byte_data[0:6] = timestamp_bytes
74
+
75
+ # Set 4-bit version field to 7.
76
+ byte_data[6] &= 0x0F
77
+ byte_data[6] |= 0x70
78
+
79
+ return UUID(bytes=bytes(byte_data))
@@ -43,8 +43,8 @@ __all__ = (
43
43
 
44
44
  import numbers
45
45
  from abc import abstractmethod
46
- from collections.abc import Iterable, Iterator, Mapping
47
- from typing import TYPE_CHECKING, Any, ClassVar, TypeAlias, overload
46
+ from collections.abc import Callable, Iterable, Iterator, Mapping
47
+ from typing import TYPE_CHECKING, Any, ClassVar, Self, TypeAlias, cast, overload
48
48
 
49
49
  import pydantic
50
50
 
@@ -753,7 +753,7 @@ class DataCoordinate:
753
753
  return dataId
754
754
 
755
755
  to_json = to_json_pydantic
756
- from_json: ClassVar = classmethod(from_json_pydantic)
756
+ from_json: ClassVar[Callable[..., Self]] = cast(Callable[..., Self], classmethod(from_json_pydantic))
757
757
 
758
758
 
759
759
  DataId = DataCoordinate | Mapping[str, Any]
@@ -34,7 +34,8 @@ __all__ = (
34
34
  )
35
35
 
36
36
  from abc import abstractmethod
37
- from typing import TYPE_CHECKING, Annotated, Any, ClassVar, TypeAlias, Union, cast
37
+ from collections.abc import Callable
38
+ from typing import TYPE_CHECKING, Annotated, Any, ClassVar, Self, TypeAlias, Union, cast
38
39
 
39
40
  import pydantic
40
41
  from pydantic_core import core_schema
@@ -212,7 +213,7 @@ class DimensionElement(TopologicalRelationshipEndpoint):
212
213
  return universe[simple]
213
214
 
214
215
  to_json = to_json_generic
215
- from_json: ClassVar = classmethod(from_json_generic)
216
+ from_json: ClassVar[Callable[..., Self]] = cast(Callable[..., Self], classmethod(from_json_generic))
216
217
 
217
218
  def hasTable(self) -> bool:
218
219
  """Indicate if this element is associated with a table.
@@ -30,8 +30,8 @@ from __future__ import annotations
30
30
  __all__ = ("DimensionRecord", "SerializedDimensionRecord", "SerializedKeyValueDimensionRecord")
31
31
 
32
32
  import itertools
33
- from collections.abc import Hashable
34
- from typing import TYPE_CHECKING, Any, ClassVar, TypeAlias
33
+ from collections.abc import Callable, Hashable
34
+ from typing import TYPE_CHECKING, Any, ClassVar, Self, TypeAlias, cast
35
35
 
36
36
  import pydantic
37
37
  from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr, create_model
@@ -505,7 +505,7 @@ class DimensionRecord:
505
505
  return dimRec
506
506
 
507
507
  to_json = to_json_pydantic
508
- from_json: ClassVar = classmethod(from_json_pydantic)
508
+ from_json: ClassVar[Callable[..., Self]] = cast(Callable[..., Self], classmethod(from_json_pydantic))
509
509
 
510
510
  def toDict(self, splitTimespan: bool = False) -> dict[str, Any]:
511
511
  """Return a vanilla `dict` representation of this record.
@@ -641,7 +641,11 @@ class DirectQueryDriver(QueryDriver):
641
641
  # datasets later.
642
642
  predicate_constraints = PredicateConstraintsSummary(tree.predicate)
643
643
  # Use the default data ID to apply additional constraints where needed.
644
- predicate_constraints.apply_default_data_id(self._default_data_id, tree.dimensions)
644
+ predicate_constraints.apply_default_data_id(
645
+ self._default_data_id,
646
+ tree.dimensions,
647
+ validate_governor_constraints=tree.validateGovernorConstraints,
648
+ )
645
649
  predicate = predicate_constraints.predicate
646
650
  # Delegate to the dimensions manager to rewrite the predicate and start
647
651
  # a SqlSelectBuilder to cover any spatial overlap joins or constraints.
@@ -746,6 +746,10 @@ class Query(QueryBase):
746
746
  driver=self._driver,
747
747
  )
748
748
 
749
+ def _skip_governor_validation(self) -> Query:
750
+ tree = self._tree.model_copy(update={"validateGovernorConstraints": False})
751
+ return Query(tree=tree, driver=self._driver)
752
+
749
753
  def _join_dataset_search_impl(
750
754
  self,
751
755
  dataset_type: str | DatasetType,
@@ -71,7 +71,10 @@ class PredicateConstraintsSummary:
71
71
  )
72
72
 
73
73
  def apply_default_data_id(
74
- self, default_data_id: DataCoordinate, query_dimensions: DimensionGroup
74
+ self,
75
+ default_data_id: DataCoordinate,
76
+ query_dimensions: DimensionGroup,
77
+ validate_governor_constraints: bool,
75
78
  ) -> None:
76
79
  """Augment the predicate and summary by adding missing constraints for
77
80
  governor dimensions using a default data ID.
@@ -81,9 +84,11 @@ class PredicateConstraintsSummary:
81
84
  default_data_id : `DataCoordinate`
82
85
  Data ID values that will be used to constrain the query if governor
83
86
  dimensions have not already been constrained by the predicate.
84
-
85
87
  query_dimensions : `DimensionGroup`
86
88
  The set of dimensions returned in result rows from the query.
89
+ validate_governor_constraints : `bool`
90
+ If `True`, enforce the requirement that governor dimensions must be
91
+ constrained if any dimensions that depend on them have constraints.
87
92
  """
88
93
  # Find governor dimensions required by the predicate.
89
94
  # If these are not constrained by the predicate or the default data ID,
@@ -108,7 +113,7 @@ class PredicateConstraintsSummary:
108
113
  self.predicate = self.predicate.logical_and(
109
114
  _create_data_id_predicate(governor, data_id_value, query_dimensions.universe)
110
115
  )
111
- elif governor in where_governors:
116
+ elif governor in where_governors and validate_governor_constraints:
112
117
  # Check that the predicate doesn't reference any dimensions
113
118
  # without constraining their governor dimensions, since
114
119
  # that's a particularly easy mistake to make and it's
@@ -146,6 +146,11 @@ class QueryTree(QueryTreeBase):
146
146
  predicate: Predicate = Predicate.from_bool(True)
147
147
  """Boolean expression trees whose logical AND defines a row filter."""
148
148
 
149
+ validateGovernorConstraints: bool = True
150
+ """If True, enforce the requirement that governor dimensions must be
151
+ constrained if any dimensions that depend on them have constraints.
152
+ """
153
+
149
154
  def iter_all_dataset_searches(self) -> Iterator[tuple[str | AnyDatasetType, DatasetSearch]]:
150
155
  yield from self.datasets.items()
151
156
  if self.any_dataset is not None:
@@ -1449,6 +1449,9 @@ class Registry(ABC):
1449
1449
  """
1450
1450
  return None
1451
1451
 
1452
- storageClasses: StorageClassFactory
1453
- """All storage classes known to the registry (`StorageClassFactory`).
1454
- """
1452
+ @property
1453
+ def storageClasses(self) -> StorageClassFactory:
1454
+ """All storage classes known to the registry
1455
+ (`StorageClassFactory`).
1456
+ """
1457
+ raise NotImplementedError()