lsst-daf-butler 29.2025.2600__tar.gz → 29.2025.2800__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. {lsst_daf_butler-29.2025.2600/python/lsst_daf_butler.egg-info → lsst_daf_butler-29.2025.2800}/PKG-INFO +1 -1
  2. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/queries.rst +30 -3
  3. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/writing-subcommands.rst +2 -0
  4. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler.py +1 -1
  5. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/_transfer.py +4 -4
  6. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_group.py +25 -0
  7. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_record_set.py +65 -45
  8. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_records.py +24 -9
  9. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_expression_strings.py +71 -6
  10. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/_predicate.py +34 -0
  11. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/check.py +20 -0
  12. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/normalForm.py +27 -0
  13. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/exprTree.py +153 -6
  14. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/treeVisitor.py +66 -1
  15. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/sql_registry.py +41 -14
  16. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/butler_queries.py +30 -14
  17. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/spatial.py +54 -9
  18. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/spatial.yaml +1 -1
  19. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/transfers/_context.py +3 -7
  20. lsst_daf_butler-29.2025.2800/python/lsst/daf/butler/version.py +2 -0
  21. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800/python/lsst_daf_butler.egg-info}/PKG-INFO +1 -1
  22. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_dimensions.py +18 -0
  23. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_exprParserYacc.py +202 -0
  24. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_normalFormExpression.py +12 -0
  25. lsst_daf_butler-29.2025.2600/python/lsst/daf/butler/version.py +0 -2
  26. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/COPYRIGHT +0 -0
  27. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/LICENSE +0 -0
  28. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/MANIFEST.in +0 -0
  29. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/README.md +0 -0
  30. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/bsd_license.txt +0 -0
  31. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/CHANGES.rst +0 -0
  32. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
  33. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/configuring.rst +0 -0
  34. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/datastores.rst +0 -0
  35. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/dimensions.rst +0 -0
  36. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/formatters.rst +0 -0
  37. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/index.rst +0 -0
  38. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/organizing.rst +0 -0
  39. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
  40. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/gpl-v3.0.txt +0 -0
  41. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/pyproject.toml +0 -0
  42. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/__init__.py +0 -0
  43. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/__init__.py +0 -0
  44. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/__init__.py +0 -0
  45. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler_collections.py +0 -0
  46. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler_config.py +0 -0
  47. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler_instance_options.py +0 -0
  48. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler_metrics.py +0 -0
  49. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
  50. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_collection_type.py +0 -0
  51. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_column_categorization.py +0 -0
  52. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_column_tags.py +0 -0
  53. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_column_type_info.py +0 -0
  54. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_config.py +0 -0
  55. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_config_support.py +0 -0
  56. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_dataset_association.py +0 -0
  57. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_dataset_existence.py +0 -0
  58. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_dataset_provenance.py +0 -0
  59. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_dataset_ref.py +0 -0
  60. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_dataset_type.py +0 -0
  61. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
  62. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_exceptions.py +0 -0
  63. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
  64. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_file_dataset.py +0 -0
  65. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_file_descriptor.py +0 -0
  66. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_formatter.py +0 -0
  67. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_labeled_butler_factory.py +0 -0
  68. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_limited_butler.py +0 -0
  69. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_location.py +0 -0
  70. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_named.py +0 -0
  71. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_quantum.py +0 -0
  72. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_quantum_backed.py +0 -0
  73. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_query_all_datasets.py +0 -0
  74. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_registry_shim.py +0 -0
  75. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_storage_class.py +0 -0
  76. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
  77. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_timespan.py +0 -0
  78. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_topology.py +0 -0
  79. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
  80. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
  81. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
  82. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
  83. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/arrow_utils.py +0 -0
  84. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/__init__.py +0 -0
  85. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/butler.py +0 -0
  86. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/cliLog.py +0 -0
  87. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
  88. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
  89. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +0 -0
  90. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/cmd/commands.py +0 -0
  91. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
  92. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
  93. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
  94. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/opt/options.py +0 -0
  95. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/progress.py +0 -0
  96. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/cli/utils.py +0 -0
  97. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/column_spec.py +0 -0
  98. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
  99. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
  100. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
  101. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/datastores/formatters.yaml +0 -0
  102. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
  103. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
  104. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
  105. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
  106. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
  107. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
  108. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
  109. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
  110. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
  111. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
  112. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/registry.yaml +0 -0
  113. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
  114. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/configs/storageClasses.yaml +0 -0
  115. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/__init__.py +0 -0
  116. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/_datastore.py +0 -0
  117. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
  118. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/composites.py +0 -0
  119. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/constraints.py +0 -0
  120. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
  121. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/generic_base.py +0 -0
  122. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/record_data.py +0 -0
  123. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastore/stored_file_info.py +0 -0
  124. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/__init__.py +0 -0
  125. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/chainedDatastore.py +0 -0
  126. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/fileDatastore.py +0 -0
  127. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/fileDatastoreClient.py +0 -0
  128. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
  129. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/file_datastore/get.py +0 -0
  130. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +0 -0
  131. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/file_datastore/transfer.py +0 -0
  132. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +0 -0
  133. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/ddl.py +0 -0
  134. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/delegates/__init__.py +0 -0
  135. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/delegates/arrowtable.py +0 -0
  136. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
  137. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_config.py +0 -0
  138. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_coordinate.py +0 -0
  139. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
  140. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_database.py +0 -0
  141. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_elements.py +0 -0
  142. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
  143. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
  144. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_record_table.py +0 -0
  145. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
  146. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
  147. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/_universe.py +0 -0
  148. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/construction.py +0 -0
  149. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/dimensions/record_cache.py +0 -0
  150. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
  151. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_butler/_direct_butler.py +0 -0
  152. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
  153. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
  154. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_driver.py +0 -0
  155. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
  156. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
  157. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +0 -0
  158. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +0 -0
  159. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
  160. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +0 -0
  161. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/__init__.py +0 -0
  162. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
  163. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/file.py +0 -0
  164. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/json.py +0 -0
  165. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/logs.py +0 -0
  166. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
  167. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/packages.py +0 -0
  168. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/parquet.py +0 -0
  169. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/pickle.py +0 -0
  170. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/typeless.py +0 -0
  171. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/formatters/yaml.py +0 -0
  172. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/json.py +0 -0
  173. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/logging.py +0 -0
  174. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/mapping_factory.py +0 -0
  175. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/name_shrinker.py +0 -0
  176. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/nonempty_mapping.py +0 -0
  177. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/persistence_context.py +0 -0
  178. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/progress.py +0 -0
  179. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/py.typed +0 -0
  180. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/pydantic_utils.py +0 -0
  181. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/__init__.py +0 -0
  182. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_base.py +0 -0
  183. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
  184. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
  185. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
  186. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_general_query_results.py +0 -0
  187. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_identifiers.py +0 -0
  188. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/_query.py +0 -0
  189. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/convert_args.py +0 -0
  190. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/driver.py +0 -0
  191. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/expression_factory.py +0 -0
  192. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/overlaps.py +0 -0
  193. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/predicate_constraints_summary.py +0 -0
  194. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/result_specs.py +0 -0
  195. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
  196. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_base.py +0 -0
  197. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_column_expression.py +0 -0
  198. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
  199. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
  200. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_column_set.py +0 -0
  201. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_predicate.py +0 -0
  202. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/tree/_query_tree.py +0 -0
  203. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/queries/visitors.py +0 -0
  204. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/__init__.py +0 -0
  205. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
  206. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_collection_record_cache.py +0 -0
  207. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
  208. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_collection_summary_cache.py +0 -0
  209. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_config.py +0 -0
  210. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_defaults.py +0 -0
  211. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
  212. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_registry.py +0 -0
  213. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
  214. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/attributes.py +0 -0
  215. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
  216. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/bridge/ephemeral.py +0 -0
  217. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/bridge/monolithic.py +0 -0
  218. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
  219. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/collections/_base.py +0 -0
  220. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
  221. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
  222. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/connectionString.py +0 -0
  223. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
  224. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/databases/postgresql.py +0 -0
  225. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/databases/sqlite.py +0 -0
  226. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
  227. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
  228. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +0 -0
  229. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +0 -0
  230. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +0 -0
  231. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
  232. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
  233. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/dimensions/static.py +0 -0
  234. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
  235. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
  236. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_bridge.py +0 -0
  237. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
  238. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_database.py +0 -0
  239. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
  240. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_datasets.py +0 -0
  241. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +0 -0
  242. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_obscore.py +0 -0
  243. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
  244. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
  245. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/managers.py +0 -0
  246. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
  247. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
  248. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/_config.py +0 -0
  249. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
  250. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/_records.py +0 -0
  251. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
  252. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/_spatial.py +0 -0
  253. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
  254. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
  255. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/opaque.py +0 -0
  256. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/__init__.py +0 -0
  257. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_builder.py +0 -0
  258. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_query.py +0 -0
  259. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_query_backend.py +0 -0
  260. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_query_context.py +0 -0
  261. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_readers.py +0 -0
  262. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_results.py +0 -0
  263. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_sql_query_backend.py +0 -0
  264. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_sql_query_context.py +0 -0
  265. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/_structs.py +0 -0
  266. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/butler_sql_engine.py +0 -0
  267. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/__init__.py +0 -0
  268. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/categorize.py +0 -0
  269. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/__init__.py +0 -0
  270. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/parser.py +0 -0
  271. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/parserLex.py +0 -0
  272. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/parserYacc.py +0 -0
  273. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/__init__.py +0 -0
  274. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/lex.py +0 -0
  275. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/yacc.py +0 -0
  276. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/queries/find_first_dataset.py +0 -0
  277. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
  278. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
  279. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/tests/_registry.py +0 -0
  280. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/versions.py +0 -0
  281. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/registry/wildcards.py +0 -0
  282. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
  283. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_authentication.py +0 -0
  284. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
  285. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
  286. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
  287. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
  288. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
  289. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_http_connection.py +0 -0
  290. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_query_driver.py +0 -0
  291. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
  292. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
  293. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_registry.py +0 -0
  294. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_remote_butler.py +0 -0
  295. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
  296. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py +0 -0
  297. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
  298. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/registry/_query_common.py +0 -0
  299. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/registry/_query_data_coordinates.py +0 -0
  300. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/registry/_query_datasets.py +0 -0
  301. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/registry/_query_dimension_records.py +0 -0
  302. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
  303. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_config.py +0 -0
  304. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_dependencies.py +0 -0
  305. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
  306. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py +0 -0
  307. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_server.py +0 -0
  308. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/_telemetry.py +0 -0
  309. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +0 -0
  310. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_external_query.py +0 -0
  311. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
  312. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_query_limits.py +0 -0
  313. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_query_serialization.py +0 -0
  314. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_query_streaming.py +0 -0
  315. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
  316. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
  317. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/repo_relocation.py +0 -0
  318. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/__init__.py +0 -0
  319. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/_associate.py +0 -0
  320. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/_pruneDatasets.py +0 -0
  321. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/butlerImport.py +0 -0
  322. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
  323. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/collectionChain.py +0 -0
  324. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/configDump.py +0 -0
  325. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/configValidate.py +0 -0
  326. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/createRepo.py +0 -0
  327. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
  328. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/ingest_files.py +0 -0
  329. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/ingest_zip.py +0 -0
  330. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/queryCollections.py +0 -0
  331. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
  332. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
  333. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
  334. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
  335. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
  336. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/removeCollections.py +0 -0
  337. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
  338. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/removeRuns.py +0 -0
  339. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/retrieveArtifacts.py +0 -0
  340. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/script/transferDatasets.py +0 -0
  341. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/__init__.py +0 -0
  342. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
  343. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
  344. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
  345. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
  346. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/cliCmdTestBase.py +0 -0
  347. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -0
  348. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
  349. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
  350. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/hybrid_butler.py +0 -0
  351. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
  352. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +0 -0
  353. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/postgresql.py +0 -0
  354. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/__init__.py +0 -0
  355. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/base.yaml +0 -0
  356. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset-skymap.yaml +0 -0
  357. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset.yaml +0 -0
  358. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/datasets.yaml +0 -0
  359. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/registry_data/hsc-rc2-subset-v0.yaml +0 -0
  360. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/server.py +0 -0
  361. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/server_utils.py +0 -0
  362. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
  363. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/tests/utils.py +0 -0
  364. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/time_utils.py +0 -0
  365. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/timespan_database_representation.py +0 -0
  366. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/transfers/__init__.py +0 -0
  367. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
  368. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
  369. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst/daf/butler/utils.py +0 -0
  370. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/SOURCES.txt +0 -0
  371. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
  372. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
  373. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/requires.txt +0 -0
  374. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
  375. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
  376. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/setup.cfg +0 -0
  377. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_astropyTableFormatter.py +0 -0
  378. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_authentication.py +0 -0
  379. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_butler.py +0 -0
  380. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_butler_factory.py +0 -0
  381. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdAssociate.py +0 -0
  382. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdConfigDump.py +0 -0
  383. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdConfigValidate.py +0 -0
  384. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdCreate.py +0 -0
  385. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdImport.py +0 -0
  386. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdIngestFiles.py +0 -0
  387. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdPruneDatasets.py +0 -0
  388. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdQueryCollections.py +0 -0
  389. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdQueryDataIds.py +0 -0
  390. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
  391. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdQueryDatasets.py +0 -0
  392. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
  393. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdRemoveCollections.py +0 -0
  394. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdRemoveRuns.py +0 -0
  395. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
  396. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliLog.py +0 -0
  397. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliPluginLoader.py +0 -0
  398. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliUtilSplitCommas.py +0 -0
  399. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliUtilSplitKv.py +0 -0
  400. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliUtilToUpper.py +0 -0
  401. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_cliUtils.py +0 -0
  402. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_column_spec.py +0 -0
  403. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_composites.py +0 -0
  404. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_config.py +0 -0
  405. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_connectionString.py +0 -0
  406. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_constraints.py +0 -0
  407. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_datasets.py +0 -0
  408. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_datastore.py +0 -0
  409. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_ddl.py +0 -0
  410. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_dimension_record_containers.py +0 -0
  411. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_exprParserLex.py +0 -0
  412. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_expressions.py +0 -0
  413. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_formatter.py +0 -0
  414. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_gafaelfawr.py +0 -0
  415. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_location.py +0 -0
  416. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_logFormatter.py +0 -0
  417. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_logging.py +0 -0
  418. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_matplotlibFormatter.py +0 -0
  419. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_nonempty_mapping.py +0 -0
  420. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_obscore.py +0 -0
  421. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_packages.py +0 -0
  422. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_parquet.py +0 -0
  423. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_postgresql.py +0 -0
  424. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_progress.py +0 -0
  425. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_pydantic_utils.py +0 -0
  426. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_quantum.py +0 -0
  427. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_quantumBackedButler.py +0 -0
  428. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_direct_postgresql.py +0 -0
  429. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_direct_sqlite.py +0 -0
  430. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_interface.py +0 -0
  431. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_relations.py +0 -0
  432. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_remote.py +0 -0
  433. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_query_utilities.py +0 -0
  434. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_remote_butler.py +0 -0
  435. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_server.py +0 -0
  436. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_simpleButler.py +0 -0
  437. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_sqlite.py +0 -0
  438. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_storageClass.py +0 -0
  439. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_templates.py +0 -0
  440. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_testRepo.py +0 -0
  441. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_thread_utils.py +0 -0
  442. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_time_utils.py +0 -0
  443. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_timespan.py +0 -0
  444. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_utils.py +0 -0
  445. {lsst_daf_butler-29.2025.2600 → lsst_daf_butler-29.2025.2800}/tests/test_versioning.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-daf-butler
3
- Version: 29.2025.2600
3
+ Version: 29.2025.2800
4
4
  Summary: An abstraction layer for reading and writing astronomical data to datastores.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
6
  License: BSD 3-Clause License
@@ -327,6 +327,12 @@ where ``ra`` and ``dec`` are specified as an ICRS sky position in degrees.
327
327
 
328
328
  visit.region OVERLAPS POINT(53.6, -32.7)
329
329
 
330
+ All types of regions supported by the language will work with ``OVERLAP`` as well.
331
+
332
+ .. code-block:: sql
333
+
334
+ visit.region OVERLAPS BOX(53.6, -32.7, 1, 1)
335
+
330
336
  You can check overlaps with arbitrary sky regions by binding values (see
331
337
  :ref:`daf_butler_dimension_expressions_identifiers`). Bound region values may
332
338
  be specified as the following object types:
@@ -364,16 +370,37 @@ consists of an identifier followed by zero or more comma-separated arguments
364
370
  enclosed in parentheses (e.g. ``func(1, 2, 3)``). An argument to a function
365
371
  can be any expression. Names of the functions are not case-sensitive.
366
372
 
367
- Presently the following functions are implemented in the query language:
373
+ A small set of functions is implemented in the query language presently.
374
+
375
+ Functions supporting operations on strings:
368
376
 
369
- - ``POINT(ra, dec)`` - function which declares (or returns) sky coordinates
370
- similarly to ADQL syntax.
371
377
  - ``GLOB(expression, pattern)`` - performs case-sensitive match of a string
372
378
  ``expression`` against ``pattern``. Pattern can include ``*`` and ``?``
373
379
  meta-characters, matching any number of characters or a single character
374
380
  respectfully. All other characters in pattern are matched literally, and
375
381
  whole expression string has to match for ``GLOB()`` to return ``True``.
376
382
 
383
+ Functions for defining sky coordinates or regions. All these functions accept
384
+ either numeric literals or bind identifiers (``:name`` syntax):
385
+
386
+ - ``POINT(ra, dec)`` - function which declares (or returns) sky coordinates
387
+ similarly to ADQL syntax, arguments are in degrees.
388
+ - ``CIRCLE(ra, dec, radius)`` - function which returns circular sky region,
389
+ all arguments are in degrees.
390
+ - ``BOX(center_ra, center_dec, width, height)`` - function which returns box
391
+ sky region, all arguments are in degrees.
392
+ - ``POLYGON(ra1, dec1, ra2, dec2, ...)`` - function which returns polygonal
393
+ sky region, all arguments are in degrees, at least three pairs of coordinates
394
+ have to be provided. Note that implementation for this function is based on
395
+ ``lsst.sphgeom.ConvexPolygon`` class which builds a convex hull out of all
396
+ vertices, thus ignoring their order. This is not strictly consistent with
397
+ ADQL definition that relies on ordering of the vertices and allows non-convex
398
+ polygons.
399
+ - ``REGION('string')`` - function returning sky region, string argument uses
400
+ `IVOA SIAv2 POS`_ syntax. Same caveat applies as for ``POLYGON`` function.
401
+
402
+ .. _IVOA SIAv2 POS: https://ivoa.net/documents/SIA/20151223/REC-SIA-2.0-20151223.html#toc12
403
+
377
404
 
378
405
  .. _time-literals-syntax:
379
406
 
@@ -433,6 +433,8 @@ An example implementation is:
433
433
 
434
434
  Which should be sufficient for most implementations where the commands are already stored in ``__all__``.
435
435
 
436
+ .. _Manifest:
437
+
436
438
  Manifest (Deprecated)
437
439
  ---------------------
438
440
 
@@ -1828,7 +1828,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1828
1828
  provided, the default collections are used. Can be a wildcard if
1829
1829
  ``find_first`` is `False` (if find first is requested the order
1830
1830
  of collections matters and wildcards make the order indeterminate).
1831
- See :ref:`daf_butler_collection_expressions` for more information.
1831
+ See :ref:`daf_butler_collection_expressions` for more information.
1832
1832
  find_first : `bool`, optional
1833
1833
  If `True` (default), for each result data ID, only yield one
1834
1834
  `DatasetRef` of each `DatasetType`, from the first collection in
@@ -56,8 +56,8 @@ class FileTransferSource(Protocol):
56
56
  dataset_ids : `~collections.abc.Iterable` [ `DatasetId` ]
57
57
  List of dataset IDs for which we will retrieve file information.
58
58
 
59
- Return
60
- ------
59
+ Returns
60
+ -------
61
61
  transfer_map : `FileTransferMap`
62
62
  Dictionary from `DatasetId` to a list of files found for that
63
63
  dataset. If information about any given dataset IDs could not
@@ -78,8 +78,8 @@ class FileTransferSource(Protocol):
78
78
  Optional mapping of datastore artifact to existence. Updated by
79
79
  this method with details of all artifacts tested.
80
80
 
81
- Return
82
- ------
81
+ Returns
82
+ -------
83
83
  transfer_map : `FileTransferMap`
84
84
  Dictionary from `DatasetId` to a list of files found for that
85
85
  dataset. If information about any given dataset IDs could not
@@ -414,12 +414,37 @@ class DimensionGroup: # numpydoc ignore=PR02
414
414
  names = set(self.names).intersection(*[other.names for other in others])
415
415
  return DimensionGroup(self.universe, names=names)
416
416
 
417
+ def difference(self, other: DimensionGroup) -> DimensionGroup:
418
+ """Construct a new group with dimensions that are in ``self`` but not
419
+ ``other`` OR dependencies of those in ``self`` but not in ``other``.
420
+
421
+ Parameters
422
+ ----------
423
+ other : `DimensionGroup`
424
+ Other group to compare with.
425
+
426
+ Returns
427
+ -------
428
+ diff : `DimensionGroup`
429
+ Difference of the two groups.
430
+
431
+ Notes
432
+ -----
433
+ This is not exactly equivalent to a true `set` difference, because the
434
+ result must be expanded to include required and implied dependencies,
435
+ and those may be common to ``self`` and ``other``.
436
+ """
437
+ return DimensionGroup(self.universe, names=self.names - other.names)
438
+
417
439
  def __or__(self, other: DimensionGroup) -> DimensionGroup:
418
440
  return self.union(other)
419
441
 
420
442
  def __and__(self, other: DimensionGroup) -> DimensionGroup:
421
443
  return self.intersection(other)
422
444
 
445
+ def __sub__(self, other: DimensionGroup) -> DimensionGroup:
446
+ return self.difference(other)
447
+
423
448
  @property
424
449
  def data_coordinate_keys(self) -> Set[str]:
425
450
  """A set of dimensions ordered like `DataCoordinate.mapping`.
@@ -809,8 +809,7 @@ class DimensionDataAttacher:
809
809
  been referenced in at least one of the constructor arguments.
810
810
  data_ids : `~collections.abc.Iterable` [ `DataCoordinate` ]
811
811
  Data IDs to attach dimension records to (not in place; data
812
- coordinates are immutable). Must have full values (i.e. implied
813
- as well as required dimensions).
812
+ coordinates are immutable).
814
813
  query : `.queries.Query`, optional
815
814
  A butler query that can be used to look up missing dimension
816
815
  records. Records fetched via query are cached in the `records`
@@ -822,49 +821,41 @@ class DimensionDataAttacher:
822
821
  Data IDs with dimension records attached, in the same order as the
823
822
  original iterable.
824
823
  """
825
- incomplete: list[_InProgressRecordDicts] = []
826
824
  lookup_helpers = [
827
825
  _DimensionRecordLookupHelper.build(dimensions, element_name, self)
828
- for element_name in dimensions.elements
826
+ for element_name in dimensions.lookup_order
829
827
  ]
830
- result: list[DataCoordinate] = []
831
- for n, data_id in enumerate(data_ids):
832
- records = _InProgressRecordDicts(n)
833
- for lookup_helper in lookup_helpers:
834
- lookup_helper.lookup(data_id.full_values, records)
835
- if records.missing:
836
- incomplete.append(records)
837
- else:
838
- data_id = data_id.expanded(records.done)
839
- result.append(data_id)
840
- if query is not None:
841
- for lookup_helper in lookup_helpers:
842
- lookup_helper.fetch_missing(query)
843
- for records in incomplete:
844
- for element, required_values in records.missing.items():
845
- records.done[element] = self.records[element].find_with_required_values(required_values)
846
- result[records.index] = result[records.index].expanded(records.done)
847
- else:
848
- # Other logic branches also raise LookupError internally (e.g. in
849
- # find_with_required_values); this one has a better message (i.e.
850
- # about all failures, not just the first one) just because we
851
- # happen to have any information at hand, while we don't in other
852
- # branches.
853
- for records in incomplete:
854
- raise LookupError(
855
- f"No dimension record for element(s) {list(records.missing.keys())} "
856
- f"for data ID {result[records.index]}. "
857
- f"{len(incomplete)} data ID{' was' if len(incomplete) == 1 else 's were'} "
858
- "missing at least one record."
859
- )
860
- return result
828
+ records = [_InProgressRecordDicts(data_id) for data_id in data_ids]
829
+ for lookup_helper in lookup_helpers:
830
+ for r in records:
831
+ lookup_helper.lookup(r)
832
+ incomplete = lookup_helper.incomplete_records
833
+ if incomplete:
834
+ if query is not None:
835
+ lookup_helper.fetch_missing(query)
836
+ # We may still be missing records at this point, if they
837
+ # were not available in the database.
838
+ # This is intentional, because in existing Butler
839
+ # repositories dimension records are not always fully
840
+ # populated. (For example, it is common for a visit to
841
+ # exist without corresponding visit_detector_region
842
+ # records, since these are populated at different times
843
+ # by different processes.)
844
+ else:
845
+ raise LookupError(
846
+ f"No dimension record for element '{lookup_helper.element}' "
847
+ f"for data ID {incomplete[0].data_id}. "
848
+ f"{len(incomplete)} data ID{' was' if len(incomplete) == 1 else 's were'} "
849
+ "missing at least one record."
850
+ )
851
+
852
+ return [r.data_id.expanded(r.done) for r in records]
861
853
 
862
854
 
863
855
  @dataclasses.dataclass
864
856
  class _InProgressRecordDicts:
865
- index: int # Index of the data ID these are for in the result list.
857
+ data_id: DataCoordinate
866
858
  done: dict[str, DimensionRecord] = dataclasses.field(default_factory=dict)
867
- missing: dict[str, tuple[DataIdValue, ...]] = dataclasses.field(default_factory=dict)
868
859
 
869
860
 
870
861
  @dataclasses.dataclass
@@ -873,7 +864,7 @@ class _DimensionRecordLookupHelper:
873
864
  # tuple in the to-be-expanded data ID's full-values tuple.
874
865
  indices: list[int]
875
866
  record_set: DimensionRecordSet
876
- missing: set[tuple[DataIdValue, ...]] = dataclasses.field(default_factory=set)
867
+ incomplete_records: list[_InProgressRecordDicts] = dataclasses.field(default_factory=list)
877
868
 
878
869
  @property
879
870
  def element(self) -> str:
@@ -902,33 +893,62 @@ class _DimensionRecordLookupHelper:
902
893
  else:
903
894
  return _DimensionRecordLookupHelper(indices, attacher.records[element])
904
895
 
905
- def lookup(self, full_data_id_values: tuple[DataIdValue, ...], records: _InProgressRecordDicts) -> None:
906
- required_values = tuple([full_data_id_values[i] for i in self.indices])
896
+ def lookup(self, records: _InProgressRecordDicts) -> None:
897
+ required_values = self._get_required_values(records)
907
898
  if (result := self.record_set._by_required_values.get(required_values)) is None:
908
899
  result = self.fallback(required_values)
909
900
  if result is not None:
910
901
  self.record_set.add(result)
911
902
  records.done[self.element] = result
912
903
  else:
913
- records.missing[self.element] = required_values
914
- self.missing.add(required_values)
904
+ self.incomplete_records.append(records)
915
905
  else:
916
906
  records.done[self.element] = result
917
907
 
908
+ def _get_required_values(self, records: _InProgressRecordDicts) -> tuple[DataIdValue, ...]:
909
+ if records.data_id.hasFull():
910
+ full_values = records.data_id.full_values
911
+ return tuple([full_values[i] for i in self.indices])
912
+ else:
913
+ values = []
914
+ dimensions = self.record_set.element.minimal_group.required
915
+ for dimension in dimensions:
916
+ value = records.data_id.get(dimension)
917
+ if value is None:
918
+ value = self._find_implied_value(dimension, records)
919
+ values.append(value)
920
+ return tuple(values)
921
+
922
+ def _find_implied_value(self, implied_dimension: str, records: _InProgressRecordDicts) -> DataIdValue:
923
+ for rec in records.done.values():
924
+ if implied_dimension in rec.definition.implied:
925
+ return rec.get(implied_dimension)
926
+
927
+ raise LookupError(
928
+ f"Implied value for dimension '{implied_dimension}' not found in records for"
929
+ f" {list(records.done.keys())}"
930
+ )
931
+
918
932
  def fallback(self, required_values: tuple[DataIdValue, ...]) -> DimensionRecord | None:
919
933
  return None
920
934
 
921
935
  def fetch_missing(self, query: Query) -> None:
922
- if self.missing:
936
+ if self.incomplete_records:
937
+ missing_values = set(self._get_required_values(r) for r in self.incomplete_records)
923
938
  self.record_set.update(
924
939
  query.join_data_coordinates(
925
940
  [
926
- DataCoordinate.from_required_values(self.record_set.element.minimal_group, row)
927
- for row in self.missing
941
+ DataCoordinate.from_required_values(self.record_set.element.minimal_group, values)
942
+ for values in missing_values
928
943
  ]
929
944
  ).dimension_records(self.record_set.element.name)
930
945
  )
931
946
 
947
+ missing = self.incomplete_records
948
+ self.incomplete_records = list()
949
+ for record in missing:
950
+ self.lookup(record)
951
+
932
952
 
933
953
  @dataclasses.dataclass
934
954
  class _DeserializingDimensionRecordLookupHelper(_DimensionRecordLookupHelper):
@@ -34,15 +34,7 @@ from collections.abc import Hashable
34
34
  from typing import TYPE_CHECKING, Any, ClassVar, TypeAlias
35
35
 
36
36
  import pydantic
37
- from pydantic import (
38
- BaseModel,
39
- Field,
40
- StrictBool,
41
- StrictFloat,
42
- StrictInt,
43
- StrictStr,
44
- create_model,
45
- )
37
+ from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr, create_model
46
38
 
47
39
  import lsst.sphgeom
48
40
  from lsst.utils.classes import immutable
@@ -533,6 +525,29 @@ class DimensionRecord:
533
525
  results["datetime_end"] = timespan.end
534
526
  return results
535
527
 
528
+ def get(self, name: str) -> Any:
529
+ """Return a single metadata value associated with this record.
530
+
531
+ Parameters
532
+ ----------
533
+ name : `str`
534
+ Key of the metadata value to be retrieved.
535
+
536
+ Returns
537
+ -------
538
+ value
539
+ The metadata value.
540
+
541
+ Raises
542
+ ------
543
+ KeyError
544
+ If the given name is not a valid key in this dimension record.
545
+ """
546
+ if name not in self.__slots__:
547
+ raise KeyError(f"'{name}' is not a valid record key for dimension '{self.definition.name}'")
548
+
549
+ return getattr(self, name)
550
+
536
551
  def serialize_key_value(self) -> SerializedKeyValueDimensionRecord:
537
552
  """Serialize this record to a `list` that can be sliced into a key
538
553
  (data ID values) / value (everything else) pair.
@@ -40,7 +40,17 @@ from .._timespan import Timespan
40
40
  from ..column_spec import ColumnType
41
41
  from ..dimensions import DimensionUniverse
42
42
  from ..registry.queries.expressions.categorize import ExpressionConstant, categorizeConstant
43
- from ..registry.queries.expressions.parser import Node, PointNode, RangeLiteral, TreeVisitor, parse_expression
43
+ from ..registry.queries.expressions.parser import (
44
+ BoxNode,
45
+ CircleNode,
46
+ Node,
47
+ PointNode,
48
+ PolygonNode,
49
+ RangeLiteral,
50
+ RegionNode,
51
+ TreeVisitor,
52
+ parse_expression,
53
+ )
44
54
  from ._identifiers import IdentifierContext, interpret_identifier
45
55
  from .tree import (
46
56
  BinaryExpression,
@@ -251,12 +261,67 @@ class _ConversionVisitor(TreeVisitor[_VisitorResult]):
251
261
  return expression
252
262
 
253
263
  def visitPointNode(self, ra: _VisitorResult, dec: _VisitorResult, node: PointNode) -> _VisitorResult:
254
- ra_value = _get_float_literal_value(ra, node.ra)
255
- dec_value = _get_float_literal_value(dec, node.dec)
264
+ ra_value = _get_float_literal_value(ra, node.ra, "POINT")
265
+ dec_value = _get_float_literal_value(dec, node.dec, "POINT")
256
266
 
257
267
  lon_lat = lsst.sphgeom.LonLat.fromDegrees(ra_value, dec_value)
258
268
  return _make_literal(lon_lat)
259
269
 
270
+ def visitCircleNode(
271
+ self, ra: _VisitorResult, dec: _VisitorResult, radius: _VisitorResult, node: CircleNode
272
+ ) -> _VisitorResult:
273
+ ra_value = _get_float_literal_value(ra, node.ra, "CIRCLE")
274
+ dec_value = _get_float_literal_value(dec, node.dec, "CIRCLE")
275
+ radius_value = _get_float_literal_value(radius, node.radius, "CIRCLE")
276
+
277
+ lon_lat = lsst.sphgeom.LonLat.fromDegrees(ra_value, dec_value)
278
+ open_angle = lsst.sphgeom.Angle.fromDegrees(radius_value * 2)
279
+ vec = lsst.sphgeom.UnitVector3d(lon_lat)
280
+ circle = lsst.sphgeom.Circle(vec, open_angle)
281
+ return _make_literal(circle)
282
+
283
+ def visitBoxNode(
284
+ self,
285
+ ra: _VisitorResult,
286
+ dec: _VisitorResult,
287
+ width: _VisitorResult,
288
+ height: _VisitorResult,
289
+ node: BoxNode,
290
+ ) -> _VisitorResult:
291
+ ra_value = _get_float_literal_value(ra, node.ra, "BOX")
292
+ dec_value = _get_float_literal_value(dec, node.dec, "BOX")
293
+ width_value = _get_float_literal_value(width, node.width, "BOX")
294
+ height_value = _get_float_literal_value(height, node.height, "BOX")
295
+
296
+ lon_lat = lsst.sphgeom.LonLat.fromDegrees(ra_value, dec_value)
297
+ half_width = lsst.sphgeom.Angle.fromDegrees(width_value / 2)
298
+ half_height = lsst.sphgeom.Angle.fromDegrees(height_value / 2)
299
+ box = lsst.sphgeom.Box(lon_lat, half_width, half_height)
300
+ return _make_literal(box)
301
+
302
+ def visitPolygonNode(
303
+ self, vertices: list[tuple[_VisitorResult, _VisitorResult]], node: PolygonNode
304
+ ) -> _VisitorResult:
305
+ sphgeom_vertices = []
306
+ for ra, dec in vertices:
307
+ ra_value = _get_float_literal_value(ra, node, "POLYGON")
308
+ dec_value = _get_float_literal_value(dec, node, "POLYGON")
309
+ lon_lat = lsst.sphgeom.LonLat.fromDegrees(ra_value, dec_value)
310
+ sphgeom_vertices.append(lsst.sphgeom.UnitVector3d(lon_lat))
311
+
312
+ polygon = lsst.sphgeom.ConvexPolygon(sphgeom_vertices)
313
+ return _make_literal(polygon)
314
+
315
+ def visitRegionNode(self, pos: _VisitorResult, node: RegionNode) -> _VisitorResult:
316
+ if isinstance(pos, _ColExpr):
317
+ expr = pos.value
318
+ if expr.expression_type == "string":
319
+ pos_str = expr.value
320
+ region = lsst.sphgeom.Region.from_ivoa_pos(pos_str)
321
+ return _make_literal(region)
322
+
323
+ raise InvalidQueryError(f"Expression '{node.pos}' in REGION() is not a literal string.")
324
+
260
325
  def visitRangeLiteral(
261
326
  self, start: int, stop: int, stride: int | None, node: RangeLiteral
262
327
  ) -> _VisitorResult:
@@ -379,7 +444,7 @@ def _get_boolean_column_reference(predicate: Predicate) -> ColumnReference | Non
379
444
  return None
380
445
 
381
446
 
382
- def _get_float_literal_value(value: _VisitorResult, node: Node) -> float:
447
+ def _get_float_literal_value(value: _VisitorResult, node: Node, name: str) -> float:
383
448
  """If the given ``value`` is a literal `float` or `int` expression, return
384
449
  it as a float. Otherwise raise an `InvalidQueryError` identifying a
385
450
  problem with the given ``node``.
@@ -391,6 +456,6 @@ def _get_float_literal_value(value: _VisitorResult, node: Node) -> float:
391
456
  elif expr.expression_type == "int":
392
457
  return float(expr.value)
393
458
  elif expr.expression_type == "unary" and expr.operator == "-":
394
- return -1 * _get_float_literal_value(_ColExpr(expr.operand), node)
459
+ return -1 * _get_float_literal_value(_ColExpr(expr.operand), node, name)
395
460
 
396
- raise InvalidQueryError(f"Expression '{node}' in POINT() is not a literal number.")
461
+ raise InvalidQueryError(f"Expression '{node}' in {name}() is not a literal number.")
@@ -457,6 +457,40 @@ class PredicateConversionVisitor(TreeVisitor[VisitorResult]):
457
457
  # do not support actual use just yet.
458
458
  raise NotImplementedError("POINT() function is not supported yet")
459
459
 
460
+ def visitCircleNode(
461
+ self, ra: VisitorResult, dec: VisitorResult, radius: VisitorResult, node: Node
462
+ ) -> VisitorResult:
463
+ # Docstring inherited.
464
+
465
+ # this is a placeholder for future extension, we enabled syntax but
466
+ # do not support actual use just yet.
467
+ raise NotImplementedError("CIRCLE() function is not supported yet")
468
+
469
+ def visitBoxNode(
470
+ self, ra: VisitorResult, dec: VisitorResult, width: VisitorResult, height: VisitorResult, node: Node
471
+ ) -> VisitorResult:
472
+ # Docstring inherited.
473
+
474
+ # this is a placeholder for future extension, we enabled syntax but
475
+ # do not support actual use just yet.
476
+ raise NotImplementedError("BOX() function is not supported yet")
477
+
478
+ def visitPolygonNode(
479
+ self, vertices: list[tuple[VisitorResult, VisitorResult]], node: Node
480
+ ) -> VisitorResult:
481
+ # Docstring inherited.
482
+
483
+ # this is a placeholder for future extension, we enabled syntax but
484
+ # do not support actual use just yet.
485
+ raise NotImplementedError("POLYGON() function is not supported yet")
486
+
487
+ def visitRegionNode(self, pos: VisitorResult, node: Node) -> VisitorResult:
488
+ # Docstring inherited.
489
+
490
+ # this is a placeholder for future extension, we enabled syntax but
491
+ # do not support actual use just yet.
492
+ raise NotImplementedError("REGION() function is not supported yet")
493
+
460
494
  def visitRangeLiteral(self, start: int, stop: int, stride: int | None, node: Node) -> VisitorResult:
461
495
  # Docstring inherited.
462
496
  return ColumnContainer.range_literal(range(start, stop + 1, stride or 1))
@@ -285,6 +285,26 @@ class InspectionVisitor(TreeVisitor[TreeSummary]):
285
285
  # Docstring inherited from base class
286
286
  return TreeSummary()
287
287
 
288
+ def visitCircleNode(
289
+ self, ra: TreeSummary, dec: TreeSummary, radius: TreeSummary, node: Node
290
+ ) -> TreeSummary:
291
+ # Docstring inherited from base class
292
+ return TreeSummary()
293
+
294
+ def visitPolygonNode(self, vertices: list[tuple[TreeSummary, TreeSummary]], node: Node) -> TreeSummary:
295
+ # Docstring inherited from base class
296
+ return TreeSummary()
297
+
298
+ def visitRegionNode(self, pos: TreeSummary, node: Node) -> TreeSummary:
299
+ # Docstring inherited from base class
300
+ return TreeSummary()
301
+
302
+ def visitBoxNode(
303
+ self, ra: TreeSummary, dec: TreeSummary, width: TreeSummary, height: TreeSummary, node: Node
304
+ ) -> TreeSummary:
305
+ # Docstring inherited from base class
306
+ return TreeSummary()
307
+
288
308
  def visitGlobNode(self, expression: TreeSummary, pattern: TreeSummary, node: Node) -> TreeSummary:
289
309
  # Docstring inherited from base class
290
310
  # pattern is a literal, but expression should refer to a dimension.
@@ -1098,6 +1098,33 @@ class TransformationVisitor(TreeVisitor[TransformationWrapper]):
1098
1098
  # Docstring inherited from TreeVisitor.visitPointNode
1099
1099
  raise NotImplementedError("POINT() function is not supported yet")
1100
1100
 
1101
+ def visitCircleNode(
1102
+ self, ra: TransformationWrapper, dec: TransformationWrapper, radius: TransformationWrapper, node: Node
1103
+ ) -> TransformationWrapper:
1104
+ # Docstring inherited from TreeVisitor.visitCircleNode
1105
+ raise NotImplementedError("CIRCLE() function is not supported yet")
1106
+
1107
+ def visitBoxNode(
1108
+ self,
1109
+ ra: TransformationWrapper,
1110
+ dec: TransformationWrapper,
1111
+ width: TransformationWrapper,
1112
+ height: TransformationWrapper,
1113
+ node: Node,
1114
+ ) -> TransformationWrapper:
1115
+ # Docstring inherited from TreeVisitor.visitBoxNode
1116
+ raise NotImplementedError("BOX() function is not supported yet")
1117
+
1118
+ def visitPolygonNode(
1119
+ self, vertices: list[tuple[TransformationWrapper, TransformationWrapper]], node: Node
1120
+ ) -> TransformationWrapper:
1121
+ # Docstring inherited from TreeVisitor.visitPolygonNode
1122
+ raise NotImplementedError("POLYGON() function is not supported yet")
1123
+
1124
+ def visitRegionNode(self, pos: TransformationWrapper, node: Node) -> TransformationWrapper:
1125
+ # Docstring inherited from TreeVisitor.visitRegionNode
1126
+ raise NotImplementedError("REGION() function is not supported yet")
1127
+
1101
1128
  def visitGlobNode(
1102
1129
  self, expression: TransformationWrapper, pattern: TransformationWrapper, node: Node
1103
1130
  ) -> TransformationWrapper: