lsst-daf-butler 30.0.1rc1__tar.gz → 30.2025.5000__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 (440) hide show
  1. {lsst_daf_butler-30.0.1rc1/python/lsst_daf_butler.egg-info → lsst_daf_butler-30.2025.5000}/PKG-INFO +2 -3
  2. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/doc/lsst.daf.butler/CHANGES.rst +0 -138
  3. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/doc/lsst.daf.butler/writing-subcommands.rst +4 -4
  4. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/pyproject.toml +1 -3
  5. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_butler.py +8 -27
  6. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_butler_collections.py +4 -4
  7. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_butler_metrics.py +2 -51
  8. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_dataset_provenance.py +1 -1
  9. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_dataset_ref.py +1 -1
  10. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_exceptions.py +2 -2
  11. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_file_dataset.py +1 -2
  12. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_formatter.py +9 -14
  13. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_labeled_butler_factory.py +8 -28
  14. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_query_all_datasets.py +0 -2
  15. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +12 -1
  16. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/column_spec.py +4 -4
  17. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/datastores/formatters.yaml +0 -1
  18. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/storageClasses.yaml +0 -15
  19. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastore/_datastore.py +1 -21
  20. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastore/record_data.py +1 -1
  21. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastore/stored_file_info.py +2 -2
  22. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastores/chainedDatastore.py +0 -4
  23. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastores/fileDatastore.py +1 -25
  24. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastores/file_datastore/get.py +4 -4
  25. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +1 -5
  26. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastores/file_datastore/transfer.py +2 -2
  27. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +0 -8
  28. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/ddl.py +2 -2
  29. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_coordinate.py +8 -11
  30. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_record_set.py +1 -1
  31. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_records.py +3 -9
  32. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/direct_butler/_direct_butler.py +51 -85
  33. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/direct_query_driver/_driver.py +4 -5
  34. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +1 -1
  35. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/formatters/parquet.py +6 -6
  36. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/logging.py +3 -9
  37. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/nonempty_mapping.py +1 -1
  38. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/persistence_context.py +5 -8
  39. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/_general_query_results.py +1 -1
  40. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/driver.py +1 -1
  41. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expression_factory.py +2 -2
  42. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expressions/parser/exprTree.py +1 -1
  43. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expressions/parser/parserYacc.py +1 -1
  44. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/overlaps.py +2 -2
  45. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/tree/_column_set.py +1 -1
  46. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/_collection_record_cache.py +1 -1
  47. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/_collection_summary_cache.py +4 -5
  48. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/_registry.py +0 -4
  49. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/bridge/monolithic.py +13 -17
  50. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/databases/postgresql.py +1 -2
  51. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +1 -1
  52. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +47 -53
  53. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +2 -3
  54. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/interfaces/_database.py +1 -6
  55. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/interfaces/_datasets.py +1 -2
  56. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/interfaces/_obscore.py +1 -1
  57. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/obscore/_records.py +1 -1
  58. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/obscore/_spatial.py +2 -2
  59. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/queries/_results.py +2 -2
  60. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/sql_registry.py +25 -3
  61. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/wildcards.py +5 -5
  62. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_get.py +1 -1
  63. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_remote_butler.py +1 -6
  64. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py +0 -4
  65. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/authentication/cadc.py +3 -4
  66. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/_pruneDatasets.py +2 -4
  67. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/configValidate.py +2 -2
  68. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/queryCollections.py +2 -2
  69. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/removeCollections.py +0 -2
  70. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/removeRuns.py +0 -2
  71. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/cliCmdTestBase.py +0 -2
  72. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -2
  73. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/hybrid_butler.py +2 -10
  74. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/registry_data/spatial.py +2 -4
  75. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/utils.py +1 -1
  76. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/timespan_database_representation.py +3 -3
  77. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/transfers/_context.py +6 -7
  78. lsst_daf_butler-30.2025.5000/python/lsst/daf/butler/version.py +2 -0
  79. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000/python/lsst_daf_butler.egg-info}/PKG-INFO +2 -3
  80. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst_daf_butler.egg-info/SOURCES.txt +0 -3
  81. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst_daf_butler.egg-info/requires.txt +1 -1
  82. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_butler.py +1 -132
  83. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_butler_factory.py +7 -11
  84. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdPruneDatasets.py +2 -2
  85. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdRemoveCollections.py +3 -3
  86. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_datastore.py +1 -44
  87. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_quantumBackedButler.py +0 -7
  88. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_simpleButler.py +0 -10
  89. lsst_daf_butler-30.0.1rc1/python/lsst/daf/butler/_rubin/temporary_for_ingest.py +0 -207
  90. lsst_daf_butler-30.0.1rc1/python/lsst/daf/butler/registry/expand_data_ids.py +0 -93
  91. lsst_daf_butler-30.0.1rc1/python/lsst/daf/butler/tests/registry_data/lsstcam-subset.yaml +0 -191
  92. lsst_daf_butler-30.0.1rc1/python/lsst/daf/butler/version.py +0 -2
  93. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/COPYRIGHT +0 -0
  94. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/LICENSE +0 -0
  95. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/MANIFEST.in +0 -0
  96. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/README.md +0 -0
  97. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/bsd_license.txt +0 -0
  98. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
  99. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/doc/lsst.daf.butler/configuring.rst +0 -0
  100. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/doc/lsst.daf.butler/datastores.rst +0 -0
  101. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/doc/lsst.daf.butler/dimensions.rst +0 -0
  102. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/doc/lsst.daf.butler/formatters.rst +0 -0
  103. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/doc/lsst.daf.butler/index.rst +0 -0
  104. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/doc/lsst.daf.butler/organizing.rst +0 -0
  105. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/doc/lsst.daf.butler/queries.rst +0 -0
  106. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
  107. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/gpl-v3.0.txt +0 -0
  108. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/__init__.py +0 -0
  109. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/__init__.py +0 -0
  110. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/__init__.py +0 -0
  111. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_butler_config.py +0 -0
  112. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_butler_instance_options.py +0 -0
  113. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
  114. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_collection_type.py +0 -0
  115. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_config.py +0 -0
  116. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_config_support.py +0 -0
  117. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_dataset_association.py +0 -0
  118. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_dataset_existence.py +0 -0
  119. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_dataset_type.py +0 -0
  120. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
  121. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
  122. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_file_descriptor.py +0 -0
  123. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_limited_butler.py +0 -0
  124. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_location.py +0 -0
  125. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_named.py +0 -0
  126. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_quantum.py +0 -0
  127. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_quantum_backed.py +0 -0
  128. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_registry_shim.py +0 -0
  129. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_rubin/__init__.py +0 -0
  130. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_rubin/file_datasets.py +0 -0
  131. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_standalone_datastore.py +0 -0
  132. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_storage_class.py +0 -0
  133. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
  134. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_timespan.py +0 -0
  135. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_topology.py +0 -0
  136. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
  137. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
  138. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
  139. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
  140. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/_uuid.py +0 -0
  141. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/arrow_utils.py +0 -0
  142. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/__init__.py +0 -0
  143. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/butler.py +0 -0
  144. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/cliLog.py +0 -0
  145. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
  146. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
  147. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/cmd/commands.py +0 -0
  148. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
  149. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
  150. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
  151. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/opt/options.py +0 -0
  152. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/progress.py +0 -0
  153. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/cli/utils.py +0 -0
  154. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
  155. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
  156. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
  157. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
  158. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
  159. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
  160. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
  161. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
  162. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
  163. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
  164. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
  165. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
  166. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
  167. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/registry.yaml +0 -0
  168. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
  169. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastore/__init__.py +0 -0
  170. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastore/_transfer.py +0 -0
  171. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
  172. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastore/composites.py +0 -0
  173. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastore/constraints.py +0 -0
  174. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
  175. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastore/generic_base.py +0 -0
  176. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastores/__init__.py +0 -0
  177. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
  178. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/delegates/__init__.py +0 -0
  179. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/delegates/arrowtable.py +0 -0
  180. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
  181. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_config.py +0 -0
  182. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
  183. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_database.py +0 -0
  184. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_elements.py +0 -0
  185. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
  186. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_group.py +0 -0
  187. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
  188. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_record_table.py +0 -0
  189. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
  190. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
  191. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/_universe.py +0 -0
  192. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/construction.py +0 -0
  193. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/dimensions/record_cache.py +0 -0
  194. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
  195. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
  196. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
  197. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
  198. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
  199. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +0 -0
  200. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
  201. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +0 -0
  202. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/formatters/__init__.py +0 -0
  203. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
  204. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/formatters/file.py +0 -0
  205. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/formatters/json.py +0 -0
  206. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/formatters/logs.py +0 -0
  207. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
  208. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/formatters/packages.py +0 -0
  209. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/formatters/pickle.py +0 -0
  210. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/formatters/typeless.py +0 -0
  211. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/formatters/yaml.py +0 -0
  212. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/json.py +0 -0
  213. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/mapping_factory.py +0 -0
  214. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/name_shrinker.py +0 -0
  215. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/progress.py +0 -0
  216. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/py.typed +0 -0
  217. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/pydantic_utils.py +0 -0
  218. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/__init__.py +0 -0
  219. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/_base.py +0 -0
  220. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
  221. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
  222. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
  223. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/_expression_strings.py +0 -0
  224. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/_identifiers.py +0 -0
  225. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/_query.py +0 -0
  226. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/convert_args.py +0 -0
  227. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expressions/__init__.py +0 -0
  228. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expressions/categorize.py +0 -0
  229. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expressions/parser/__init__.py +0 -0
  230. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expressions/parser/parser.py +0 -0
  231. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expressions/parser/parserLex.py +0 -0
  232. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expressions/parser/ply/__init__.py +0 -0
  233. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expressions/parser/ply/lex.py +0 -0
  234. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py +0 -0
  235. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py +0 -0
  236. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/predicate_constraints_summary.py +0 -0
  237. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/result_specs.py +0 -0
  238. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
  239. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/tree/_base.py +0 -0
  240. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/tree/_column_expression.py +0 -0
  241. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
  242. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
  243. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/tree/_predicate.py +0 -0
  244. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/tree/_query_tree.py +0 -0
  245. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/queries/visitors.py +0 -0
  246. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/__init__.py +0 -0
  247. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
  248. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
  249. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/_config.py +0 -0
  250. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/_defaults.py +0 -0
  251. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
  252. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/_registry_base.py +0 -0
  253. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
  254. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/attributes.py +0 -0
  255. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
  256. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/bridge/ephemeral.py +0 -0
  257. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
  258. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/collections/_base.py +0 -0
  259. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
  260. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
  261. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/connectionString.py +0 -0
  262. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
  263. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/databases/sqlite.py +0 -0
  264. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
  265. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
  266. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
  267. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
  268. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/dimensions/static.py +0 -0
  269. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
  270. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
  271. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/interfaces/_bridge.py +0 -0
  272. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
  273. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
  274. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +0 -0
  275. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
  276. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
  277. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/managers.py +0 -0
  278. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
  279. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
  280. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/obscore/_config.py +0 -0
  281. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
  282. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
  283. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
  284. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
  285. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/opaque.py +0 -0
  286. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/queries/__init__.py +0 -0
  287. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/queries/_query_common.py +0 -0
  288. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/queries/_query_data_coordinates.py +0 -0
  289. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/queries/_query_datasets.py +0 -0
  290. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/queries/_query_dimension_records.py +0 -0
  291. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
  292. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
  293. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/tests/_registry.py +0 -0
  294. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/registry/versions.py +0 -0
  295. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
  296. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
  297. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
  298. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
  299. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
  300. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
  301. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_http_connection.py +0 -0
  302. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_query_driver.py +0 -0
  303. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
  304. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
  305. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_registry.py +0 -0
  306. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
  307. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/authentication/__init__.py +0 -0
  308. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/authentication/interface.py +0 -0
  309. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/authentication/rubin.py +0 -0
  310. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
  311. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
  312. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/_config.py +0 -0
  313. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/_dependencies.py +0 -0
  314. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
  315. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py +0 -0
  316. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/_server.py +0 -0
  317. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/_telemetry.py +0 -0
  318. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +0 -0
  319. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/handlers/_external_query.py +0 -0
  320. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/handlers/_file_info.py +0 -0
  321. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
  322. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/handlers/_query_limits.py +0 -0
  323. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/handlers/_query_serialization.py +0 -0
  324. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/handlers/_query_streaming.py +0 -0
  325. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
  326. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
  327. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/repo_relocation.py +0 -0
  328. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/__init__.py +0 -0
  329. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/_associate.py +0 -0
  330. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/butlerImport.py +0 -0
  331. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
  332. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/collectionChain.py +0 -0
  333. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/configDump.py +0 -0
  334. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/createRepo.py +0 -0
  335. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
  336. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/ingest_files.py +0 -0
  337. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/ingest_zip.py +0 -0
  338. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
  339. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
  340. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
  341. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
  342. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
  343. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
  344. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/retrieveArtifacts.py +0 -0
  345. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/script/transferDatasets.py +0 -0
  346. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/__init__.py +0 -0
  347. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
  348. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
  349. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
  350. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
  351. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/butler_queries.py +0 -0
  352. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
  353. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
  354. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
  355. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +0 -0
  356. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/postgresql.py +0 -0
  357. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/registry_data/__init__.py +0 -0
  358. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/registry_data/base.yaml +0 -0
  359. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset-skymap.yaml +0 -0
  360. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset.yaml +0 -0
  361. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/registry_data/datasets.yaml +0 -0
  362. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/registry_data/hsc-rc2-subset-v0.yaml +0 -0
  363. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/registry_data/spatial.yaml +0 -0
  364. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/server.py +0 -0
  365. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/server_available.py +0 -0
  366. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/server_utils.py +0 -0
  367. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
  368. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/time_utils.py +0 -0
  369. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/transfers/__init__.py +0 -0
  370. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
  371. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
  372. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst/daf/butler/utils.py +0 -0
  373. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
  374. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
  375. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
  376. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
  377. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/setup.cfg +0 -0
  378. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_astropyTableFormatter.py +0 -0
  379. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_authentication.py +0 -0
  380. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdAssociate.py +0 -0
  381. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdConfigDump.py +0 -0
  382. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdConfigValidate.py +0 -0
  383. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdCreate.py +0 -0
  384. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdImport.py +0 -0
  385. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdIngestFiles.py +0 -0
  386. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdQueryCollections.py +0 -0
  387. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdQueryDataIds.py +0 -0
  388. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
  389. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdQueryDatasets.py +0 -0
  390. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
  391. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdRemoveRuns.py +0 -0
  392. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
  393. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliLog.py +0 -0
  394. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliPluginLoader.py +0 -0
  395. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliUtilSplitCommas.py +0 -0
  396. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliUtilSplitKv.py +0 -0
  397. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliUtilToUpper.py +0 -0
  398. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_cliUtils.py +0 -0
  399. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_column_spec.py +0 -0
  400. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_composites.py +0 -0
  401. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_config.py +0 -0
  402. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_connectionString.py +0 -0
  403. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_constraints.py +0 -0
  404. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_datasets.py +0 -0
  405. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_ddl.py +0 -0
  406. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_dimension_record_containers.py +0 -0
  407. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_dimensions.py +0 -0
  408. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_exprParserLex.py +0 -0
  409. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_exprParserYacc.py +0 -0
  410. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_formatter.py +0 -0
  411. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_gafaelfawr.py +0 -0
  412. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_location.py +0 -0
  413. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_logFormatter.py +0 -0
  414. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_logging.py +0 -0
  415. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_matplotlibFormatter.py +0 -0
  416. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_nonempty_mapping.py +0 -0
  417. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_obscore.py +0 -0
  418. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_packages.py +0 -0
  419. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_parquet.py +0 -0
  420. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_postgresql.py +0 -0
  421. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_progress.py +0 -0
  422. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_pydantic_utils.py +0 -0
  423. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_quantum.py +0 -0
  424. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_query_direct_postgresql.py +0 -0
  425. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_query_direct_sqlite.py +0 -0
  426. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_query_interface.py +0 -0
  427. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_query_remote.py +0 -0
  428. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_query_utilities.py +0 -0
  429. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_remote_butler.py +0 -0
  430. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_server.py +0 -0
  431. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_sqlite.py +0 -0
  432. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_storageClass.py +0 -0
  433. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_templates.py +0 -0
  434. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_testRepo.py +0 -0
  435. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_thread_utils.py +0 -0
  436. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_time_utils.py +0 -0
  437. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_timespan.py +0 -0
  438. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_utils.py +0 -0
  439. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_uuid.py +0 -0
  440. {lsst_daf_butler-30.0.1rc1 → lsst_daf_butler-30.2025.5000}/tests/test_versioning.py +0 -0
@@ -1,11 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-daf-butler
3
- Version: 30.0.1rc1
3
+ Version: 30.2025.5000
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
7
7
  Project-URL: Homepage, https://github.com/lsst/daf_butler
8
- Project-URL: Source, https://github.com/lsst/daf_butler
9
8
  Keywords: lsst
10
9
  Classifier: Intended Audience :: Science/Research
11
10
  Classifier: Operating System :: OS Independent
@@ -43,7 +42,7 @@ Provides-Extra: test
43
42
  Requires-Dist: pytest>=3.2; extra == "test"
44
43
  Requires-Dist: numpy>=1.17; extra == "test"
45
44
  Requires-Dist: matplotlib>=3.0.3; extra == "test"
46
- Requires-Dist: pandas<3.0,>=1.0; extra == "test"
45
+ Requires-Dist: pandas>=1.0; extra == "test"
47
46
  Provides-Extra: s3
48
47
  Requires-Dist: lsst-resources[s3]; extra == "s3"
49
48
  Provides-Extra: https
@@ -1,141 +1,3 @@
1
- Butler v30.0.1 (2026-02-02)
2
- ===========================
3
-
4
- API Changes
5
- -----------
6
-
7
- - * Added ``ZipIndex.from_open_zip()`` method to allow the index to be read from a previously opened zip file.
8
- * Added ``skip_existing`` parameter to ``Butler.ingest_zip`` to allow the command to ignore any previously ingested datasets. (`DM-52925 <https://rubinobs.atlassian.net/browse/DM-52925>`_)
9
-
10
-
11
- Bug Fixes
12
- ---------
13
-
14
- - Fixed a bug that caused datastore checksums to be read back in as UUIDs, which would then break task execution with the ``QuantumBackedButler``. (`DM-53631 <https://rubinobs.atlassian.net/browse/DM-53631>`_)
15
-
16
-
17
- Other Changes and Additions
18
- ---------------------------
19
-
20
- - Added metrics recording to ``Butler.ingest_zip()``. (`DM-52925 <https://rubinobs.atlassian.net/browse/DM-52925>`_)
21
-
22
-
23
- Butler v30.0.0 (2026-01-15)
24
- ===========================
25
-
26
- New Features
27
- ------------
28
-
29
- - Modified ``ButlerMDC`` to preserve metadata for exceptions that are raised in a context but handled outside it.
30
- This lets exceptions be logged by high-level handlers the same way they would have been if the problem were logged immediately. (`DM-42272 <https://rubinobs.atlassian.net/browse/DM-42272>`_)
31
- - Added a new method ``Butler.query_all_datasets()``, which can be used to query for datasets of multiple types more efficiently than looping over ``query_datasets()``. (`DM-47563 <https://rubinobs.atlassian.net/browse/DM-47563>`_)
32
- - Added a new registry configuration option ``temporary_tables: False`` to disable the use of temporary tables by the database backend. (`DM-51125 <https://rubinobs.atlassian.net/browse/DM-51125>`_)
33
- - Added support to the query language to allow sky regions to be specified directly in an ADQL-like way. This includes ``CIRCLE``, ``BOX``, ``POLYGON``, and ``REGION``. (`DM-51454 <https://rubinobs.atlassian.net/browse/DM-51454>`_)
34
- - ``Butler.transfer_dimension_records_from`` now accepts ``DataCoordinate`` instances in addition to ``DatasetRef`` instances to specify the dimension records to be transferred. (`DM-51681 <https://rubinobs.atlassian.net/browse/DM-51681>`_)
35
- - ``Butler.ingest()`` now has an optional ``skip_existing`` parameter that makes it ignore datasets that already exist in the repository instead of raising an error. This makes it easier for applications to retry ingests. (`DM-52179 <https://rubinobs.atlassian.net/browse/DM-52179>`_)
36
- - Added glob-style matching to column names in parquet tables, when specified via the ``columns`` parameter. (`DM-52515 <https://rubinobs.atlassian.net/browse/DM-52515>`_)
37
- - Added a new ``--remove-from-parents`` flag for the ``remove-collections`` CLI to allow removal of collections that are still referenced from chained collections. (`DM-52782 <https://rubinobs.atlassian.net/browse/DM-52782>`_)
38
- - We now build the Butler server Docker container for both arm64 and amd64. (`DM-52819 <https://rubinobs.atlassian.net/browse/DM-52819>`_)
39
- - Made ``ButlerLogRecords`` extensible.
40
-
41
- This changes the ``ButlerLogRecords`` file format (the old format can still be
42
- read) to allow arbitrary JSON data to be serialized with the log records.
43
-
44
- The ``ButlerLogRecords`` class has been modified to inherit from
45
- ``collections.abc.MutableSequence`` instead of `pydantic.RootModel`, which means
46
- Pydantic methods can no longer be called on it directly (in particular, use
47
- ``to_json_data`` to serialize instead of ``model_dump_json``). (`DM-53019 <https://rubinobs.atlassian.net/browse/DM-53019>`_)
48
- - The ``id`` parameter to ``Butler.get_dataset`` now accepts hexadecimal strings, in addition to UUID instances.
49
- A new method ``Butler.get_many_datasets()`` allows the efficient lookup of multiple ``DatasetRef`` by dataset UUID. (`DM-53176 <https://rubinobs.atlassian.net/browse/DM-53176>`_)
50
- - Added ``Butler.close()``, a context manager implementation for ``Butler``, and ``QuantumBackedButler.close()``. These can be used to ensure that database connections are closed deterministically, rather than waiting for mark-and-sweep garbage collection. (`DM-53233 <https://rubinobs.atlassian.net/browse/DM-53233>`_)
51
- - ``LabeledButlerFactory`` now has a ``writeable`` constructor option to allow writeable Butlers to be instantiated.
52
- ``LabeledButlerFactory`` can now be used as a context manager to control the lifetime of its database connections. (`DM-53739 <https://rubinobs.atlassian.net/browse/DM-53739>`_)
53
-
54
- Bug Fixes
55
- ---------
56
-
57
- - Fixed a few server-side exceptions that should have been sent to ``RemoteButler`` clients as meaningful exceptions, but instead were triggering an HTTP 500 Internal Server Error. (`DM-51314 <https://rubinobs.atlassian.net/browse/DM-51314>`_)
58
- - Deferred loading storage class definitions when deserializing datastore records.
59
-
60
- This prevents storage class lookup errors when loading quantum graphs, when the storage class definitions are defined somewhere other than the defaults in ``daf_butler`` (such as a repository root). (`DM-51381 <https://rubinobs.atlassian.net/browse/DM-51381>`_)
61
- - When exporting ``visit`` dimension records, ``Butler.export()`` now includes ``populated_by: visit`` records like ``visit_definition``/``visit_system_membership``, and the associated ``exposure`` records. (`DM-51681 <https://rubinobs.atlassian.net/browse/DM-51681>`_)
62
- - Fixed a bug introduced in July 2024 in collection query methods that specify ``flatten_chains=True`` with name patterns.
63
-
64
- The bug resulted in not returning all children names for a chain collection that matches the pattern, only child names that also match the pattern were returned. (`DM-51819 <https://rubinobs.atlassian.net/browse/DM-51819>`_)
65
- - ``Butler.ingest()`` now checks for conflicting datastore records before ingesting files, reducing the likelihood of an issue where existing files are overwritten/deleted by an ingest that fails due to conflicting datasets. (`DM-52179 <https://rubinobs.atlassian.net/browse/DM-52179>`_)
66
- - Query generation will no longer throw ``sqlalchemy.exc.ArgumentError`` when attempting to use a dataset calibration timespan constraint for a dataset search without any calibration collections. (`DM-52398 <https://rubinobs.atlassian.net/browse/DM-52398>`_)
67
- - Changed the conceptual timespan associated with ``RUN`` and ``TAGGED`` collections from `None` / ``NULL`` to an unbounded timespan.
68
-
69
- This fixes the behavior of temporal joins in quantum graph builds, where prior to this change a ``RUN`` or ``TAGGED`` collection earlier in the search path would be silently ignored in favor of a later ``CALIBRATION`` collection.
70
- It also changes the value of timespan columns for these collection types via the ``Query.general`` interface.
71
- The behavior of ``queryDatasetAssociations`` has *not* been changed for backwards-compatibility; it continues to return ``timespan=None`` for non-``CALIBRATION``` collections. (`DM-52895 <https://rubinobs.atlassian.net/browse/DM-52895>`_)
72
- - The unit tests will no longer fail due to file descriptor exhaustion.
73
- All `ResourceWarning` messages in the unit test suite have been fixed.
74
- Butler instances are now garbage-collected immediately when they are no longer referenced, although their database connections still might not be released until mark-and-sweep garbage collection runs. (`DM-53233 <https://rubinobs.atlassian.net/browse/DM-53233>`_)
75
- - Fixed compatibility of the unit test suite with pytest v9. (`DM-53266 <https://rubinobs.atlassian.net/browse/DM-53266>`_)
76
- - Storage classes are no longer loaded implicitly when using ``Butler.registry.queryDatasets()``.
77
- A warning about the ``datasetType`` parameter being deprecated is no longer issued when calling ``Butler.registry.queryDatasetAssociations``. (`DM-53342 <https://rubinobs.atlassian.net/browse/DM-53342>`_)
78
- - ``FileDatastore.export_records()`` will no longer fail with ``sqlalchemy.exc.InternalError`` when given a large number of dataset IDs.
79
- ``Butler.get_many_datasets()`` will no longer fail with ``sqlalchemy.exc.InternalError`` when given a large number of dataset IDs. (`DM-53610 <https://rubinobs.atlassian.net/browse/DM-53610>`_)
80
-
81
-
82
- Performance Enhancement
83
- -----------------------
84
-
85
- - Fewer database queries are now used when inserting/exporting datasets, in cases where the datasets do not have "expanded data ID" values known in advance. (`DM-51593 <https://rubinobs.atlassian.net/browse/DM-51593>`_)
86
- - ``Butler.transfer_from(transfer_dimensions = True)``, ``Butler.transfer_dimension_records_from()``, and ``butler transfer-datasets`` are now significantly faster. (`DM-51681 <https://rubinobs.atlassian.net/browse/DM-51681>`_)
87
- - New dataset UUIDs are now generated using UUIDv7 instead of UUIDv4, to improve Postgres insert performance. (`DM-52719 <https://rubinobs.atlassian.net/browse/DM-52719>`_)
88
- - Removed unnecessary directory existence checks when writing files to the datastore.
89
- We no longer create zero-byte files to represent "directories" when writing files to an S3 datastore. (`DM-53580 <https://rubinobs.atlassian.net/browse/DM-53580>`_)
90
-
91
-
92
- Other Changes and Additions
93
- ---------------------------
94
-
95
- - Updated the storage class definitions for scarlet lite models to be Zip archives that can be accessed as single blends. (`DM-49537 <https://rubinobs.atlassian.net/browse/DM-49537>`_)
96
- - Made some registry test data available to downstream packages via `importlib.resources`. (`DM-51363 <https://rubinobs.atlassian.net/browse/DM-51363>`_)
97
- - Added support for ``obs_publisher_did`` value in ObsCore config file. (`DM-51383 <https://rubinobs.atlassian.net/browse/DM-51383>`_)
98
- - * Modified ``ObsCore`` records to place "exposure" in any visit fields if there is an exposure but no visit defined.
99
- This required the addition of a new method to the ``RecordFactory`` which can be subclassed by other plugins.
100
- * Added ability to hard code the ``s_xel1`` and ``s_xel2`` ObsCore fields per dataset type. (`DM-51495 <https://rubinobs.atlassian.net/browse/DM-51495>`_)
101
- - Added ``PhotozModel`` as an alternate name for the ``PZModel`` storage class. (`DM-51660 <https://rubinobs.atlassian.net/browse/DM-51660>`_)
102
- - Drop incomplete support for case-insensitive handling of identifiers in query expressions.
103
-
104
- Some code in the query generation system was trying to allow dimension names to be case-insensitive, but was actually just inadvertently requiring all dimension names to be defined as lowercase.
105
- Our Python-flavored user base probably expects case-sensitive dimension and dataset type names anyway.
106
-
107
- Constants (e.g., ``AND`` or ``OVERLAPS``) in the query system are still case insensitive. (`DM-52339 <https://rubinobs.atlassian.net/browse/DM-52339>`_)
108
- - ``Butler.registry.queryDatasets``, ``Butler.registry.queryDataIds``, and ``Butler.registry.queryDimensionRecords`` have been re-implemented using the same query framework backing ``Butler.query()`` and the various ``Butler.query_*()`` methods. Though the ``Butler.registry.*`` methods are not yet deprecated, users are encouraged to begin migrating to the equivalent ``Butler.query_*`` functions. The new implementation comes with a number of minor behavior changes:
109
- - We no longer raise an exception if governor dimension values in a query constraint are not known to the registry. Instead, we return no results.
110
- - Result rows are now deduplicated.
111
- - ``findFirst`` searches are now supported in calibration collections. (`DM-52397 <https://rubinobs.atlassian.net/browse/DM-52397>`_)
112
- - ``Butler.find_dataset()`` / ``Butler.registry.findDataset()`` have been re-implemented using the same query framework backing ``Butler.query()``. These methods now always return ``DatasetRef`` instances with ``dataId.hasFull() = True``. (`DM-52398 <https://rubinobs.atlassian.net/browse/DM-52398>`_)
113
- - For EUPS users we now set the ``ARROW_DEFAULT_MEMORY_POOL`` environment variable to ``jemalloc``.
114
- This works around a memory leak reported in https://github.com/apache/arrow/issues/45882 for pyarrow v18 and newer. (`DM-52412 <https://rubinobs.atlassian.net/browse/DM-52412>`_)
115
- - Added a new ``Datastore`` API for retrieving the datastore records for datasets that might not have been written yet.
116
- There is also a related API added to ``QuantumBackedButler``. (`DM-52653 <https://rubinobs.atlassian.net/browse/DM-52653>`_)
117
- - Rewrote the default compression write recipes to match the new interfaces for FITS compression in ``afw`` and ``obs_base``. (`DM-52879 <https://rubinobs.atlassian.net/browse/DM-52879>`_)
118
- - Added new options to ``DatasetProvenance`` to prevent excessive numbers of input datasets being recorded in file metadata.
119
- The limit for parquet datasets was set to 2,000 inputs. (`DM-53326 <https://rubinobs.atlassian.net/browse/DM-53326>`_)
120
- - Added ``lossy16`` compression recipe to replace ``lossyBasic`` (`DM-53420 <https://rubinobs.atlassian.net/browse/DM-53420>`_)
121
- - Added a storage class and formatter declaration for the ``ProvenanceQuantumGraph`` class.
122
-
123
- Allowed a ``ButlerLogRecords`` container to be passed to the log handler at construction. (`DM-53622 <https://rubinobs.atlassian.net/browse/DM-53622>`_)
124
- - Added metrics recording for ``butler.ingest``. (`DM-53679 <https://rubinobs.atlassian.net/browse/DM-53679>`_)
125
- - Added Butler storage class definitions for ``GuiderROI`` ``VignettingCorrection`` class (`OSW-1064 <https://rubinobs.atlassian.net/browse/OSW-1064>`_)
126
-
127
- An API Removal or Deprecation
128
- -----------------------------
129
-
130
- - ``daf_butler`` no longer depends on the ``daf_relation`` library.
131
- ``daf_relation``-related internal classes are no longer exported from the top-level module.
132
- Butler query expression classes have moved from ``lsst.daf.butler.registry.queries`` to ``lsst.daf.butler.queries``. (`DM-52345 <https://rubinobs.atlassian.net/browse/DM-52345>`_)
133
- - Removed deprecated ``DatasetQueryResults.materialize()`` method.
134
- Removed deprecated ``offset`` parameter from the ``limit`` method in the ``DataCoordinateQueryResults``, ``DatasetQueryResults``, and ``DimensionRecordQueryResults`` classes.
135
- Removed the deprecated feature where HTM and HEALPix spatial dimensions like ``htm11`` or ``healpix10`` could be used in data ID constraints passed to queries. The exception is ``htm7``, which will continue to work. Users should instead use region ``OVERLAPS`` constraints in query ``where`` expressions.
136
- Removed support for ``<`` and ``>`` operators in ``Butler.registry.query*()`` ``where`` strings for comparisons of ``Timespan`` vs ``Timespan``, or ``Timespan`` vs ``Time``. Instead, use ``timespan.begin < ts`` or ``timespan.end > ts`` to explicitly indicate which timespan bound you are comparing with. (`DM-52397 <https://rubinobs.atlassian.net/browse/DM-52397>`_)
137
-
138
-
139
1
  Butler v29.1.0 (2025-06-13)
140
2
  ===========================
141
3
 
@@ -62,8 +62,8 @@ Example of a command or subcommand definition:
62
62
  if __name__ == "__main__":
63
63
  git()
64
64
 
65
- This creates a command that is called by ``main``, which has a subcommand ``pull``.
66
- It automatically has a ``--help`` option:
65
+ This creates a command that is called by `main`, which has a subcommand `pull`.
66
+ It automatically has a `--help` option:
67
67
 
68
68
  .. code-block:: text
69
69
 
@@ -75,7 +75,7 @@ It automatically has a ``--help`` option:
75
75
  Options:
76
76
  --help Show this message and exit.
77
77
 
78
- And ``pull`` can be called as a subcommand:
78
+ And `pull` can be called as a subcommand:
79
79
 
80
80
  .. code-block:: text
81
81
 
@@ -98,7 +98,7 @@ For example, the function
98
98
  def register_instrument():
99
99
  ...
100
100
 
101
- Becomes a subcommand of ``butler`` called ``register-instrument``.
101
+ Becomes a subcommand of `butler` called ``register-instrument``.
102
102
 
103
103
  Butler Subcommands
104
104
  ~~~~~~~~~~~~~~~~~~
@@ -39,7 +39,6 @@ dependencies = [
39
39
  dynamic = ["version"]
40
40
  [project.urls]
41
41
  "Homepage" = "https://github.com/lsst/daf_butler"
42
- "Source" = "https://github.com/lsst/daf_butler"
43
42
 
44
43
  [project.optional-dependencies]
45
44
  postgres = ["psycopg2"]
@@ -57,7 +56,7 @@ test = [
57
56
  "pytest >= 3.2",
58
57
  "numpy >= 1.17",
59
58
  "matplotlib >= 3.0.3",
60
- "pandas >= 1.0, < 3.0",
59
+ "pandas >= 1.0",
61
60
  ]
62
61
  # Also expose the optional dependencies of lsst-resources as optional
63
62
  # dependencies of lsst-daf-butler. lsst-daf-butler itself doesn't care what
@@ -234,7 +233,6 @@ checks = [
234
233
  "RT01", # Unfortunately our @property trigger this.
235
234
  "RT02", # Does not want named return value. DM style says we do.
236
235
  "SS05", # pydocstyle is better at finding infinitive verb.
237
- "RT03", # Temporarily disable for sphinx empty returns.
238
236
  ]
239
237
  exclude = [
240
238
  "^test_.*", # Do not test docstrings in test code.
@@ -138,10 +138,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
138
138
  without_datastore : `bool`, optional
139
139
  If `True` do not attach a datastore to this butler. Any attempts
140
140
  to use a datastore will fail.
141
- metrics : `ButlerMetrics` or `None`
142
- External metrics object to be used for tracking butler usage. If `None`
143
- a new metrics object is created.
144
- **kwargs : `typing.Any`
141
+ **kwargs : `Any`
145
142
  Additional keyword arguments passed to a constructor of actual butler
146
143
  class.
147
144
 
@@ -243,7 +240,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
243
240
  to use a datastore will fail.
244
241
  metrics : `ButlerMetrics` or `None`, optional
245
242
  Metrics object to record butler usage statistics.
246
- **kwargs : `typing.Any`
243
+ **kwargs : `Any`
247
244
  Default data ID key-value pairs. These may only identify
248
245
  "governor" dimensions like ``instrument`` and ``skymap``.
249
246
 
@@ -1393,10 +1390,6 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1393
1390
  raised if any datasets with the same dataset ID already exist
1394
1391
  in the datastore.
1395
1392
 
1396
- Returns
1397
- -------
1398
- None
1399
-
1400
1393
  Raises
1401
1394
  ------
1402
1395
  TypeError
@@ -1436,7 +1429,6 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1436
1429
  *,
1437
1430
  transfer_dimensions: bool = False,
1438
1431
  dry_run: bool = False,
1439
- skip_existing: bool = False,
1440
1432
  ) -> None:
1441
1433
  """Ingest a Zip file into this butler.
1442
1434
 
@@ -1455,14 +1447,6 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1455
1447
  If `True` the ingest will be processed without any modifications
1456
1448
  made to the target butler and as if the target butler did not
1457
1449
  have any of the datasets.
1458
- skip_existing : `bool`, optional
1459
- If `True`, a zip will not be ingested if the dataset entries listed
1460
- in the index with the same dataset ID already exists in the butler.
1461
- If `False` (the default), a `ConflictingDefinitionError` will be
1462
- raised if any datasets with the same dataset ID already exist
1463
- in the repository. If, somehow, some datasets are known to the
1464
- butler and some are not, this is currently treated as an error
1465
- rather than attempting to do a partial ingest.
1466
1450
 
1467
1451
  Notes
1468
1452
  -----
@@ -1582,7 +1566,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1582
1566
 
1583
1567
  @abstractmethod
1584
1568
  def transfer_dimension_records_from(
1585
- self, source_butler: LimitedButler | Butler, source_refs: Iterable[DatasetRef | DataCoordinate]
1569
+ self, source_butler: LimitedButler | Butler, source_refs: Iterable[DatasetRef]
1586
1570
  ) -> None:
1587
1571
  """Transfer dimension records to this Butler from another Butler.
1588
1572
 
@@ -1594,9 +1578,10 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1594
1578
  `Butler` whose registry will be used to expand data IDs. If the
1595
1579
  source refs contain coordinates that are used to populate other
1596
1580
  records then this will also need to be a full `Butler`.
1597
- source_refs : iterable of `DatasetRef` or `DataCoordinate`
1598
- Datasets or data IDs defined in the source butler whose dimension
1599
- records should be transferred to this butler.
1581
+ source_refs : iterable of `DatasetRef`
1582
+ Datasets defined in the source butler whose dimension records
1583
+ should be transferred to this butler. In most circumstances.
1584
+ transfer is faster if the dataset refs are expanded.
1600
1585
  """
1601
1586
  raise NotImplementedError()
1602
1587
 
@@ -2040,7 +2025,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
2040
2025
 
2041
2026
  Returns
2042
2027
  -------
2043
- records : `list` [`DimensionRecord`]
2028
+ records : `list`[`DimensionRecord`]
2044
2029
  Dimension records matching the given query parameters.
2045
2030
 
2046
2031
  Raises
@@ -2242,7 +2227,3 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
2242
2227
  @abstractmethod
2243
2228
  def close(self) -> None:
2244
2229
  raise NotImplementedError()
2245
-
2246
- @abstractmethod
2247
- def _expand_data_ids(self, data_ids: Iterable[DataCoordinate]) -> list[DataCoordinate]:
2248
- raise NotImplementedError()
@@ -360,10 +360,10 @@ class ButlerCollections(ABC, Sequence):
360
360
  name : `str`
361
361
  The name of the collection of interest.
362
362
  include_parents : `bool`, optional
363
- If `True` any parents of this collection will be included.
363
+ If `True` any parents of this collection will be included.
364
364
  include_summary : `bool`, optional
365
- If `True` dataset type names and governor dimensions of datasets
366
- stored in this collection will be included in the result.
365
+ If `True` dataset type names and governor dimensions of datasets
366
+ stored in this collection will be included in the result.
367
367
 
368
368
  Returns
369
369
  -------
@@ -464,7 +464,7 @@ class ButlerCollections(ABC, Sequence):
464
464
 
465
465
  Returns
466
466
  -------
467
- filtered : `~collections.abc.Mapping` [`str`, `list` [`str`]]
467
+ filtered : `~collections.abc.Mapping` [`str`, `list`[`str`]]
468
468
  Mapping of the dataset type name to its corresponding list of
469
469
  collection names.
470
470
  """
@@ -27,19 +27,14 @@
27
27
 
28
28
  from __future__ import annotations
29
29
 
30
- __all__ = ["ButlerMetrics"]
31
-
32
30
  from collections.abc import Callable, Iterator
33
31
  from contextlib import contextmanager
34
- from typing import Concatenate, ParamSpec
35
32
 
36
33
  from pydantic import BaseModel
37
34
 
38
35
  from lsst.utils.logging import LsstLoggers
39
36
  from lsst.utils.timer import time_this
40
37
 
41
- P = ParamSpec("P")
42
-
43
38
 
44
39
  class ButlerMetrics(BaseModel):
45
40
  """Metrics collected during Butler operations."""
@@ -50,26 +45,18 @@ class ButlerMetrics(BaseModel):
50
45
  time_in_get: float = 0.0
51
46
  """Wall-clock time, in seconds, spent in get()."""
52
47
 
53
- time_in_ingest: float = 0.0
54
- """Wall-clock time, in seconds, spent in ingest()."""
55
-
56
48
  n_get: int = 0
57
49
  """Number of datasets retrieved with get()."""
58
50
 
59
51
  n_put: int = 0
60
52
  """Number of datasets stored with put()."""
61
53
 
62
- n_ingest: int = 0
63
- """Number of datasets ingested."""
64
-
65
54
  def reset(self) -> None:
66
55
  """Reset all metrics."""
67
56
  self.time_in_put = 0.0
68
57
  self.time_in_get = 0.0
69
- self.time_in_ingest = 0.0
70
58
  self.n_get = 0
71
59
  self.n_put = 0
72
- self.n_ingest = 0
73
60
 
74
61
  def increment_get(self, duration: float) -> None:
75
62
  """Increment time for get().
@@ -93,31 +80,13 @@ class ButlerMetrics(BaseModel):
93
80
  self.time_in_put += duration
94
81
  self.n_put += 1
95
82
 
96
- def increment_ingest(self, duration: float, n_datasets: int) -> None:
97
- """Increment time and datasets for ingest().
98
-
99
- Parameters
100
- ----------
101
- duration : `float`
102
- Duration to add to the ingest() statistics.
103
- n_datasets : `int`
104
- Number of datasets to be ingested for this call.
105
- """
106
- self.time_in_ingest += duration
107
- self.n_ingest += n_datasets
108
-
109
83
  @contextmanager
110
84
  def _timer(
111
- self,
112
- handler: Callable[Concatenate[float, P], None],
113
- log: LsstLoggers | None = None,
114
- msg: str | None = None,
115
- *args: P.args,
116
- **kwargs: P.kwargs,
85
+ self, handler: Callable[[float], None], log: LsstLoggers | None = None, msg: str | None = None
117
86
  ) -> Iterator[None]:
118
87
  with time_this(log=log, msg=msg) as timer:
119
88
  yield
120
- handler(timer.duration, *args, **kwargs)
89
+ handler(timer.duration)
121
90
 
122
91
  @contextmanager
123
92
  def instrument_get(self, log: LsstLoggers | None = None, msg: str | None = None) -> Iterator[None]:
@@ -146,21 +115,3 @@ class ButlerMetrics(BaseModel):
146
115
  """
147
116
  with self._timer(self.increment_put, log=log, msg=msg):
148
117
  yield
149
-
150
- @contextmanager
151
- def instrument_ingest(
152
- self, n_datasets: int, log: LsstLoggers | None = None, msg: str | None = None
153
- ) -> Iterator[None]:
154
- """Run code and increment ingest statistics.
155
-
156
- Parameters
157
- ----------
158
- n_datasets : `int`
159
- Number of datasets being ingested.
160
- log : `logging.Logger` or `None`
161
- Logger to use for any timing information.
162
- msg : `str` or `None`
163
- Any message to be included in log output.
164
- """
165
- with self._timer(self.increment_ingest, n_datasets=n_datasets, log=log, msg=msg):
166
- yield
@@ -267,7 +267,7 @@ class DatasetProvenance(pydantic.BaseModel):
267
267
  use_upper : `bool` or `None`
268
268
  If `True` use upper case for provenance keys, if `False` use lower
269
269
  case, if `None` match the case of the prefix.
270
- *keys : `tuple` of `str` | `int`
270
+ keys : `tuple` of `str` | `int`
271
271
  Components of key to combine with prefix and separator.
272
272
 
273
273
  Returns
@@ -479,7 +479,7 @@ class DatasetRef:
479
479
 
480
480
  Parameters
481
481
  ----------
482
- simple : `dict` of [`str`, `typing.Any`]
482
+ simple : `dict` of [`str`, `Any`]
483
483
  The value returned by `to_simple()`.
484
484
  universe : `DimensionUniverse`
485
485
  The special graph of all known dimensions.
@@ -196,8 +196,8 @@ class ValidationError(RuntimeError):
196
196
 
197
197
 
198
198
  class EmptyQueryResultError(Exception):
199
- """Exception raised when query methods return an empty result and
200
- ``explain`` flag is set.
199
+ """Exception raised when query methods return an empty result and `explain`
200
+ flag is set.
201
201
 
202
202
  Parameters
203
203
  ----------
@@ -129,8 +129,7 @@ class FileDataset:
129
129
  ----------
130
130
  dataset : `SerializedFileDataset`
131
131
  Object to deserialize.
132
- dataset_type_loader : `~collections.abc.Callable` \
133
- [[ `str` ], `DatasetType` ]
132
+ dataset_type_loader : `Callable` [[ `str` ], `DatasetType` ]
134
133
  Function that takes a string dataset type name as its
135
134
  only parameter, and returns an instance of `DatasetType`.
136
135
  Used to deserialize the `DatasetRef` instances contained
@@ -54,7 +54,6 @@ from ._config import Config
54
54
  from ._config_support import LookupKey, processLookupConfigs
55
55
  from ._file_descriptor import FileDescriptor
56
56
  from ._location import Location
57
- from ._rubin.temporary_for_ingest import TemporaryForIngest
58
57
  from .dimensions import DataCoordinate, DimensionUniverse
59
58
  from .mapping_factory import MappingFactory
60
59
 
@@ -910,10 +909,6 @@ class FormatterV2:
910
909
  provenance : `DatasetProvenance` | `None`, optional
911
910
  Provenance to attach to the file being written.
912
911
 
913
- Returns
914
- -------
915
- None
916
-
917
912
  Raises
918
913
  ------
919
914
  FormatterNotImplementedError
@@ -1036,7 +1031,15 @@ class FormatterV2:
1036
1031
  """
1037
1032
  cache_manager = self._ensure_cache(cache_manager)
1038
1033
 
1039
- with TemporaryForIngest.make_path(uri) as temporary_uri:
1034
+ # Always write to a temporary even if
1035
+ # using a local file system -- that gives us atomic writes.
1036
+ # If a process is killed as the file is being written we do not
1037
+ # want it to remain in the correct place but in corrupt state.
1038
+ # For local files write to the output directory not temporary dir.
1039
+ prefix = uri.dirname() if uri.isLocal else None
1040
+ if prefix is not None:
1041
+ prefix.mkdir()
1042
+ with ResourcePath.temporary_uri(suffix=uri.getExtension(), prefix=prefix) as temporary_uri:
1040
1043
  # Need to configure the formatter to write to a different
1041
1044
  # location and that needs us to overwrite internals
1042
1045
  log.debug("Writing dataset to temporary location at %s", temporary_uri)
@@ -1141,10 +1144,6 @@ class FormatterV2:
1141
1144
  location : `Location`
1142
1145
  Location from which to extract a file extension.
1143
1146
 
1144
- Returns
1145
- -------
1146
- None
1147
-
1148
1147
  Raises
1149
1148
  ------
1150
1149
  ValueError
@@ -1591,10 +1590,6 @@ class Formatter(metaclass=ABCMeta):
1591
1590
  location : `Location`
1592
1591
  Location from which to extract a file extension.
1593
1592
 
1594
- Returns
1595
- -------
1596
- None
1597
-
1598
1593
  Raises
1599
1594
  ------
1600
1595
  NotImplementedError
@@ -30,9 +30,7 @@ from __future__ import annotations
30
30
  __all__ = ("LabeledButlerFactory", "LabeledButlerFactoryProtocol")
31
31
 
32
32
  from collections.abc import Mapping
33
- from contextlib import AbstractContextManager
34
- from logging import getLogger
35
- from typing import Any, Literal, Protocol, Self
33
+ from typing import Protocol
36
34
 
37
35
  from lsst.resources import ResourcePathExpression
38
36
 
@@ -42,8 +40,6 @@ from ._butler_repo_index import ButlerRepoIndex
42
40
  from ._utilities.named_locks import NamedLocks
43
41
  from ._utilities.thread_safe_cache import ThreadSafeCache
44
42
 
45
- _LOG = getLogger(__name__)
46
-
47
43
 
48
44
  class LabeledButlerFactoryProtocol(Protocol):
49
45
  """Callable to retrieve a butler from a label."""
@@ -51,7 +47,7 @@ class LabeledButlerFactoryProtocol(Protocol):
51
47
  def __call__(self, label: str) -> Butler: ...
52
48
 
53
49
 
54
- class LabeledButlerFactory(AbstractContextManager):
50
+ class LabeledButlerFactory:
55
51
  """Factory for efficiently instantiating Butler instances from the
56
52
  repository index file. This is intended for use from long-lived services
57
53
  that want to instantiate a separate Butler instance for each end user
@@ -64,9 +60,6 @@ class LabeledButlerFactory(AbstractContextManager):
64
60
  files. If not provided, defaults to the global repository index
65
61
  configured by the ``DAF_BUTLER_REPOSITORY_INDEX`` environment variable
66
62
  -- see `ButlerRepoIndex`.
67
- writeable : `bool`, optional
68
- If `True`, Butler instances created by this factory will be writeable.
69
- If `False` (the default), instances will be read-only.
70
63
 
71
64
  Notes
72
65
  -----
@@ -83,12 +76,11 @@ class LabeledButlerFactory(AbstractContextManager):
83
76
  safely be used by separate threads.
84
77
  """
85
78
 
86
- def __init__(self, repositories: Mapping[str, str] | None = None, writeable: bool = False) -> None:
79
+ def __init__(self, repositories: Mapping[str, str] | None = None) -> None:
87
80
  if repositories is None:
88
81
  self._repositories = None
89
82
  else:
90
83
  self._repositories = dict(repositories)
91
- self._writeable = writeable
92
84
 
93
85
  self._factories = ThreadSafeCache[str, _ButlerFactory]()
94
86
  self._initialization_locks = NamedLocks()
@@ -96,16 +88,6 @@ class LabeledButlerFactory(AbstractContextManager):
96
88
  # This may be overridden by unit tests.
97
89
  self._preload_unsafe_direct_butler_caches = True
98
90
 
99
- def __enter__(self) -> Self:
100
- return self
101
-
102
- def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> Literal[False]:
103
- try:
104
- self.close()
105
- except Exception:
106
- _LOG.exception("An exception occurred during LabeledButlerFactory.close()")
107
- return False
108
-
109
91
  def bind(self, access_token: str | None) -> LabeledButlerFactoryProtocol:
110
92
  """Create a callable factory function for generating Butler instances
111
93
  with out needing to specify access tokans again.
@@ -127,7 +109,7 @@ class LabeledButlerFactory(AbstractContextManager):
127
109
 
128
110
  return create
129
111
 
130
- def create_butler(self, label: str, *, access_token: str | None = None) -> Butler:
112
+ def create_butler(self, *, label: str, access_token: str | None) -> Butler:
131
113
  """Create a Butler instance.
132
114
 
133
115
  Parameters
@@ -136,7 +118,7 @@ class LabeledButlerFactory(AbstractContextManager):
136
118
  Label of the repository to instantiate, from the ``repositories``
137
119
  parameter to the `LabeledButlerFactory` constructor or the global
138
120
  repository index file.
139
- access_token : `str` | `None`, optional
121
+ access_token : `str` | `None`
140
122
  Gafaelfawr access token used to authenticate to a Butler server.
141
123
  This is required for any repositories configured to use
142
124
  `RemoteButler`. If you only use `DirectButler`, this may be
@@ -185,9 +167,7 @@ class LabeledButlerFactory(AbstractContextManager):
185
167
 
186
168
  match butler_type:
187
169
  case ButlerType.DIRECT:
188
- return _DirectButlerFactory(
189
- config, self._preload_unsafe_direct_butler_caches, self._writeable
190
- )
170
+ return _DirectButlerFactory(config, self._preload_unsafe_direct_butler_caches)
191
171
  case ButlerType.REMOTE:
192
172
  return _RemoteButlerFactory(config)
193
173
  case _:
@@ -209,12 +189,12 @@ class _ButlerFactory(Protocol):
209
189
 
210
190
 
211
191
  class _DirectButlerFactory(_ButlerFactory):
212
- def __init__(self, config: ButlerConfig, preload_unsafe_caches: bool, writeable: bool) -> None:
192
+ def __init__(self, config: ButlerConfig, preload_unsafe_caches: bool) -> None:
213
193
  import lsst.daf.butler.direct_butler
214
194
 
215
195
  # Create a 'template' Butler that will be cloned when callers request
216
196
  # an instance.
217
- self._butler = Butler.from_config(config, writeable=writeable)
197
+ self._butler = Butler.from_config(config)
218
198
  assert isinstance(self._butler, lsst.daf.butler.direct_butler.DirectButler)
219
199
 
220
200
  # Load caches so that data is available in cloned instances without