uproot 5.2.2__tar.gz → 5.3.0__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 (263) hide show
  1. {uproot-5.2.2 → uproot-5.3.0}/.all-contributorsrc +9 -0
  2. {uproot-5.2.2 → uproot-5.3.0}/.pre-commit-config.yaml +3 -3
  3. {uproot-5.2.2 → uproot-5.3.0}/PKG-INFO +4 -3
  4. {uproot-5.2.2 → uproot-5.3.0}/README.md +1 -0
  5. {uproot-5.2.2 → uproot-5.3.0}/dev/example-objects.py +1 -0
  6. {uproot-5.2.2 → uproot-5.3.0}/dev/make-models.py +1 -0
  7. {uproot-5.2.2 → uproot-5.3.0}/docs-sphinx/prepare_docstrings.py +3 -2
  8. {uproot-5.2.2 → uproot-5.3.0}/pyproject.toml +11 -11
  9. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/_dask.py +107 -17
  10. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TBranch.py +3 -2
  11. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/compression.py +78 -38
  12. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/extras.py +21 -27
  13. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/interpretation/library.py +59 -30
  14. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/interpretation/objects.py +42 -4
  15. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/model.py +5 -3
  16. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/RNTuple.py +3 -3
  17. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/reading.py +2 -0
  18. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/source/fsspec.py +2 -0
  19. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/version.py +2 -2
  20. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/writing/_cascade.py +2 -4
  21. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/writing/_cascadetree.py +12 -12
  22. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/writing/identify.py +4 -2
  23. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0008_start_interpretation.py +5 -1
  24. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0416_writing_compressed_data.py +64 -15
  25. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0692_fsspec_writing.py +29 -2
  26. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0962_RNTuple_update.py +1 -1
  27. uproot-5.3.0/tests/test_1114_fix_attempt_to_concatenate_numpy_with_awkward.py +21 -0
  28. uproot-5.3.0/tests/test_1120_check_decompression_executor_pass_for_dask.py +27 -0
  29. uproot-5.3.0/tests/test_1127_fix_allow_colon_in_key_names.py +26 -0
  30. {uproot-5.2.2 → uproot-5.3.0}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  31. {uproot-5.2.2 → uproot-5.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  32. {uproot-5.2.2 → uproot-5.3.0}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  33. {uproot-5.2.2 → uproot-5.3.0}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  34. {uproot-5.2.2 → uproot-5.3.0}/.github/dependabot.yml +0 -0
  35. {uproot-5.2.2 → uproot-5.3.0}/.github/workflows/build-test.yml +0 -0
  36. {uproot-5.2.2 → uproot-5.3.0}/.github/workflows/deploy.yml +0 -0
  37. {uproot-5.2.2 → uproot-5.3.0}/.github/workflows/semantic-pr-title.yml +0 -0
  38. {uproot-5.2.2 → uproot-5.3.0}/.gitignore +0 -0
  39. {uproot-5.2.2 → uproot-5.3.0}/.readthedocs.yml +0 -0
  40. {uproot-5.2.2 → uproot-5.3.0}/CITATION.cff +0 -0
  41. {uproot-5.2.2 → uproot-5.3.0}/LICENSE +0 -0
  42. {uproot-5.2.2 → uproot-5.3.0}/docs-img/.DS_Store +0 -0
  43. {uproot-5.2.2 → uproot-5.3.0}/docs-img/diagrams/abstraction-layers.png +0 -0
  44. {uproot-5.2.2 → uproot-5.3.0}/docs-img/diagrams/abstraction-layers.svg +0 -0
  45. {uproot-5.2.2 → uproot-5.3.0}/docs-img/diagrams/example-dask-graph.png +0 -0
  46. {uproot-5.2.2 → uproot-5.3.0}/docs-img/diagrams/uproot-awkward-timeline.png +0 -0
  47. {uproot-5.2.2 → uproot-5.3.0}/docs-img/diagrams/uproot-awkward-timeline.svg +0 -0
  48. {uproot-5.2.2 → uproot-5.3.0}/docs-img/logo/logo-300px-white.png +0 -0
  49. {uproot-5.2.2 → uproot-5.3.0}/docs-img/logo/logo-300px.png +0 -0
  50. {uproot-5.2.2 → uproot-5.3.0}/docs-img/logo/logo-600px.png +0 -0
  51. {uproot-5.2.2 → uproot-5.3.0}/docs-img/logo/logo.svg +0 -0
  52. {uproot-5.2.2 → uproot-5.3.0}/docs-img/photos/switcheroo.jpg +0 -0
  53. {uproot-5.2.2 → uproot-5.3.0}/docs-sphinx/_templates/breadcrumbs.html +0 -0
  54. {uproot-5.2.2 → uproot-5.3.0}/docs-sphinx/basic.rst +0 -0
  55. {uproot-5.2.2 → uproot-5.3.0}/docs-sphinx/conf.py +0 -0
  56. {uproot-5.2.2 → uproot-5.3.0}/docs-sphinx/index.rst +0 -0
  57. {uproot-5.2.2 → uproot-5.3.0}/docs-sphinx/make_changelog.py +0 -0
  58. {uproot-5.2.2 → uproot-5.3.0}/docs-sphinx/requirements.txt +0 -0
  59. {uproot-5.2.2 → uproot-5.3.0}/docs-sphinx/uproot3-to-4.rst +0 -0
  60. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/__init__.py +0 -0
  61. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/_awkwardforth.py +0 -0
  62. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/_util.py +0 -0
  63. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behavior.py +0 -0
  64. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/RooCurve.py +0 -0
  65. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/RooHist.py +0 -0
  66. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TAxis.py +0 -0
  67. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TBranchElement.py +0 -0
  68. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TDatime.py +0 -0
  69. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TGraph.py +0 -0
  70. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TGraphAsymmErrors.py +0 -0
  71. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TGraphErrors.py +0 -0
  72. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TH1.py +0 -0
  73. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TH2.py +0 -0
  74. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TH2Poly.py +0 -0
  75. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TH3.py +0 -0
  76. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TParameter.py +0 -0
  77. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TProfile.py +0 -0
  78. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TProfile2D.py +0 -0
  79. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TProfile3D.py +0 -0
  80. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/TTree.py +0 -0
  81. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/behaviors/__init__.py +0 -0
  82. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/cache.py +0 -0
  83. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/const.py +0 -0
  84. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/containers.py +0 -0
  85. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/deserialization.py +0 -0
  86. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/dynamic.py +0 -0
  87. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/exceptions.py +0 -0
  88. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/interpretation/__init__.py +0 -0
  89. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/interpretation/grouped.py +0 -0
  90. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/interpretation/identify.py +0 -0
  91. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/interpretation/jagged.py +0 -0
  92. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/interpretation/numerical.py +0 -0
  93. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/interpretation/strings.py +0 -0
  94. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/language/__init__.py +0 -0
  95. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/language/python.py +0 -0
  96. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TArray.py +0 -0
  97. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TAtt.py +0 -0
  98. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TBasket.py +0 -0
  99. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TBranch.py +0 -0
  100. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TClonesArray.py +0 -0
  101. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TDatime.py +0 -0
  102. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TGraph.py +0 -0
  103. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TH.py +0 -0
  104. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/THashList.py +0 -0
  105. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TLeaf.py +0 -0
  106. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TList.py +0 -0
  107. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TMatrixT.py +0 -0
  108. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TNamed.py +0 -0
  109. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TObjArray.py +0 -0
  110. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TObjString.py +0 -0
  111. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TObject.py +0 -0
  112. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TRef.py +0 -0
  113. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TString.py +0 -0
  114. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TTable.py +0 -0
  115. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/TTree.py +0 -0
  116. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/models/__init__.py +0 -0
  117. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/pyroot.py +0 -0
  118. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/serialization.py +0 -0
  119. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/sink/__init__.py +0 -0
  120. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/sink/file.py +0 -0
  121. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/source/__init__.py +0 -0
  122. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/source/chunk.py +0 -0
  123. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/source/cursor.py +0 -0
  124. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/source/file.py +0 -0
  125. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/source/futures.py +0 -0
  126. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/source/http.py +0 -0
  127. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/source/object.py +0 -0
  128. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/source/s3.py +0 -0
  129. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/source/xrootd.py +0 -0
  130. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/streamers.py +0 -0
  131. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/writing/__init__.py +0 -0
  132. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/writing/_cascadentuple.py +0 -0
  133. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/writing/_dask_write.py +0 -0
  134. {uproot-5.2.2 → uproot-5.3.0}/src/uproot/writing/writable.py +0 -0
  135. {uproot-5.2.2 → uproot-5.3.0}/tests/__init__.py +0 -0
  136. {uproot-5.2.2 → uproot-5.3.0}/tests/conftest.py +0 -0
  137. {uproot-5.2.2 → uproot-5.3.0}/tests/samples/h_dynamic.pkl +0 -0
  138. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0001_source_class.py +0 -0
  139. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0006_notify_when_downloaded.py +0 -0
  140. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0007_single_chunk_interface.py +0 -0
  141. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0009_nested_directories.py +0 -0
  142. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0010_start_streamers.py +0 -0
  143. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0011_generate_classes_from_streamers.py +0 -0
  144. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0013_rntuple_anchor.py +0 -0
  145. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0014_all_ttree_versions.py +0 -0
  146. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0016_interpretations.py +0 -0
  147. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0017_multi_basket_multi_branch_fetch.py +0 -0
  148. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0018_array_fetching_interface.py +0 -0
  149. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0022_number_of_branches.py +0 -0
  150. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0023_more_interpretations_1.py +0 -0
  151. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0023_ttree_versions.py +0 -0
  152. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0028_fallback_to_read_streamer.py +0 -0
  153. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0029_more_string_types.py +0 -0
  154. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0031_test_stl_containers.py +0 -0
  155. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0033_more_interpretations_2.py +0 -0
  156. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0034_generic_objects_in_ttrees.py +0 -0
  157. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0035_datatype_generality.py +0 -0
  158. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0038_memberwise_serialization.py +0 -0
  159. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0043_iterate_function.py +0 -0
  160. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0044_concatenate_function.py +0 -0
  161. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0046_histograms_bh_hist.py +0 -0
  162. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0053_parents_should_not_be_bases.py +0 -0
  163. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0058_detach_model_objects_from_files.py +0 -0
  164. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0066_fix_http_fallback_freeze.py +0 -0
  165. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0067_common_entry_offsets.py +0 -0
  166. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0081_dont_parse_colons.py +0 -0
  167. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0087_memberwise_splitting_not_implemented_messages.py +0 -0
  168. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0088_read_with_http.py +0 -0
  169. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0099_read_from_file_object.py +0 -0
  170. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0112_fix_pandas_with_cut.py +0 -0
  171. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0118_fix_name_fetch_again.py +0 -0
  172. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0123_atlas_issues.py +0 -0
  173. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0126_turn_unknown_emptyarrays_into_known_types.py +0 -0
  174. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0167_use_the_common_histogram_interface.py +0 -0
  175. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0172_allow_allocators_in_vector_typenames.py +0 -0
  176. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0173_empty_and_multiprocessing_bugs.py +0 -0
  177. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0182_complain_about_missing_files.py +0 -0
  178. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0194_fix_lost_cuts_in_iterate.py +0 -0
  179. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0220_contiguous_byte_ranges_in_http.py +0 -0
  180. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0228_read_TProfiles.py +0 -0
  181. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0240_read_TGraphAsymmErrors.py +0 -0
  182. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0278_specializations_for_TParameter.py +0 -0
  183. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0302_pickle.py +0 -0
  184. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0303_empty_jagged_array.py +0 -0
  185. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0320_start_working_on_ROOT_writing.py +0 -0
  186. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0322_writablefile_infrastructure.py +0 -0
  187. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0329_update_existing_root_files.py +0 -0
  188. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0335_empty_ttree_division_by_zero.py +0 -0
  189. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0341_manipulate_streamer_info.py +0 -0
  190. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0344_writabledirectory_can_read.py +0 -0
  191. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0345_bulk_copy_method.py +0 -0
  192. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0349_write_TObjString.py +0 -0
  193. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0350_read_RooCurve_RooHist.py +0 -0
  194. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0351_write_TList.py +0 -0
  195. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0352_write_THashList.py +0 -0
  196. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0384_move_behavior_of_and_fix_383.py +0 -0
  197. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0398_dimensions_in_leaflist.py +0 -0
  198. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0405_write_a_histogram.py +0 -0
  199. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0406_write_a_ttree.py +0 -0
  200. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0407_read_TDatime.py +0 -0
  201. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0412_write_multidimensional_numpy_to_ttree.py +0 -0
  202. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0414_write_jagged_arrays.py +0 -0
  203. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0418_read_TTable.py +0 -0
  204. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0420_pyroot_uproot_interoperability.py +0 -0
  205. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0422_hist_integration.py +0 -0
  206. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0430_global_index_for_tuples_of_DataFrames.py +0 -0
  207. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0438_TClonesArray_is_not_AsGrouped.py +0 -0
  208. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0439_check_awkward_before_numpy.py +0 -0
  209. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0442_regular_TClonesArray.py +0 -0
  210. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0472_tstreamerinfo_for_ttree.py +0 -0
  211. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0475_remember_to_update_freesegments.py +0 -0
  212. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0484_manually_add_model_for_TMatrixTSym_double_.py +0 -0
  213. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0487_implement_asdtypeinplace.py +0 -0
  214. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0498_create_leaf_branch_in_extend.py +0 -0
  215. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0519_remove_memmap_copy.py +0 -0
  216. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0520_dynamic_classes_cant_be_abc_subclasses.py +0 -0
  217. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0569_fBits_is_4_bytes.py +0 -0
  218. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0576_unicode_in_names.py +0 -0
  219. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0578_dask_for_numpy.py +0 -0
  220. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0580_round_trip_for_no_flow_histograms.py +0 -0
  221. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0589_explicitly_interpret_RVec_type.py +0 -0
  222. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0603_dask_delayed_open.py +0 -0
  223. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0609_num_enteries_func.py +0 -0
  224. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0610_awkward_form.py +0 -0
  225. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0630_rntuple_basics.py +0 -0
  226. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0637_setup_tests_for_AwkwardForth.py +0 -0
  227. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0643_reading_vector_pair_TLorentzVector_int.py +0 -0
  228. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0651_implement_transformed_axis.py +0 -0
  229. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0652_dask_for_awkward.py +0 -0
  230. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0662_rntuple_stl_containers.py +0 -0
  231. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0692_fsspec_reading.py +0 -0
  232. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0700_dask_empty_arrays.py +0 -0
  233. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0705_rntuple_writing_metadata.py +0 -0
  234. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0750_avoid_empty_TBasket_issue.py +0 -0
  235. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0755_dask_awkward_column_projection.py +0 -0
  236. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0791_protect_uproot_project_columns_from_dask_node_names.py +0 -0
  237. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0798_DAOD_PHYSLITE.py +0 -0
  238. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0808_fix_awkward_form_for_AsStridedObjects.py +0 -0
  239. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0816_separate_AwkwardForth_machines_by_TBranch.py +0 -0
  240. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0832_ak_add_doc_should_also_add_to_typetracer.py +0 -0
  241. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0840_support_tleafG.py +0 -0
  242. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0841_fix_814.py +0 -0
  243. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0844_fix_delete_hist_from_root.py +0 -0
  244. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0852_fix_strided_interp_extra_offsets.py +0 -0
  245. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0870_writing_arrays_of_type_unknown_fix_822.py +0 -0
  246. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0876_uproot_dask_blind_steps.py +0 -0
  247. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0886_fix_awkward_form_breadcrumbs.py +0 -0
  248. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0910_fix_906_members_non_numerical_branches.py +0 -0
  249. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0911_fix_interp_array_non_numerical_objs_issue_880.py +0 -0
  250. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0912_fix_pandas_and_double_nested_vectors_issue_885.py +0 -0
  251. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0916_read_from_s3.py +0 -0
  252. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0927_dont_assume_uproot_in_global_scope_in_TPython_Eval.py +0 -0
  253. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0930_expressions_in_pandas.py +0 -0
  254. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0940_feat_add_TLeafC_string_support.py +0 -0
  255. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0965_inverted_axes_variances_hist_888.py +0 -0
  256. {uproot-5.2.2 → uproot-5.3.0}/tests/test_0976_path_object_split.py +0 -0
  257. {uproot-5.2.2 → uproot-5.3.0}/tests/test_1000-write-TProfiles.py +0 -0
  258. {uproot-5.2.2 → uproot-5.3.0}/tests/test_1043_const_std_string.py +0 -0
  259. {uproot-5.2.2 → uproot-5.3.0}/tests/test_1058_dask_awkward_report.py +0 -0
  260. {uproot-5.2.2 → uproot-5.3.0}/tests/test_1063_dask_distributed.py +0 -0
  261. {uproot-5.2.2 → uproot-5.3.0}/tests/test_1070_pandas_dataframe_building_performance_fix.py +0 -0
  262. {uproot-5.2.2 → uproot-5.3.0}/tests/test_1085_dask_write.py +0 -0
  263. {uproot-5.2.2 → uproot-5.3.0}/tests/test_1102_any_locks_in_models_must_be_transient.py +0 -0
@@ -533,6 +533,15 @@
533
533
  "contributions": [
534
534
  "test"
535
535
  ]
536
+ },
537
+ {
538
+ "login": "YSelfTool",
539
+ "name": "Robin Sonnabend",
540
+ "avatar_url": "https://avatars.githubusercontent.com/u/1640386?v=4",
541
+ "profile": "http://tooldev.de",
542
+ "contributions": [
543
+ "code"
544
+ ]
536
545
  }
537
546
  ],
538
547
  "contributorsPerLine": 7,
@@ -18,19 +18,19 @@ repos:
18
18
  - id: trailing-whitespace
19
19
 
20
20
  - repo: https://github.com/psf/black-pre-commit-mirror
21
- rev: 23.12.1
21
+ rev: 24.2.0
22
22
  hooks:
23
23
  - id: black
24
24
 
25
25
  - repo: https://github.com/astral-sh/ruff-pre-commit
26
- rev: v0.1.14
26
+ rev: v0.2.2
27
27
  hooks:
28
28
  - id: ruff
29
29
  args: [--fix, --show-fixes]
30
30
 
31
31
 
32
32
  - repo: https://github.com/asottile/pyupgrade
33
- rev: v3.15.0
33
+ rev: v3.15.1
34
34
  hooks:
35
35
  - id: pyupgrade
36
36
  args: [--py38-plus]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: uproot
3
- Version: 5.2.2
3
+ Version: 5.3.0
4
4
  Summary: ROOT I/O in pure Python and NumPy.
5
5
  Project-URL: Download, https://github.com/scikit-hep/uproot5/releases
6
6
  Project-URL: Homepage, https://github.com/scikit-hep/uproot5
@@ -31,6 +31,7 @@ Classifier: Topic :: Software Development
31
31
  Classifier: Topic :: Utilities
32
32
  Requires-Python: >=3.8
33
33
  Requires-Dist: awkward>=2.4.6
34
+ Requires-Dist: cramjam>=2.8.1
34
35
  Requires-Dist: fsspec
35
36
  Requires-Dist: importlib-metadata; python_version < '3.8'
36
37
  Requires-Dist: numpy
@@ -46,7 +47,7 @@ Requires-Dist: pandas; extra == 'dev'
46
47
  Provides-Extra: test
47
48
  Requires-Dist: aiohttp; extra == 'test'
48
49
  Requires-Dist: fsspec-xrootd; extra == 'test'
49
- Requires-Dist: lz4; extra == 'test'
50
+ Requires-Dist: isal; extra == 'test'
50
51
  Requires-Dist: minio; extra == 'test'
51
52
  Requires-Dist: paramiko; extra == 'test'
52
53
  Requires-Dist: pytest-rerunfailures; extra == 'test'
@@ -57,7 +58,6 @@ Requires-Dist: requests; extra == 'test'
57
58
  Requires-Dist: s3fs; extra == 'test'
58
59
  Requires-Dist: scikit-hep-testdata; extra == 'test'
59
60
  Requires-Dist: xxhash; extra == 'test'
60
- Requires-Dist: zstandard; extra == 'test'
61
61
  Description-Content-Type: text/markdown
62
62
 
63
63
  <img src="https://raw.githubusercontent.com/scikit-hep/uproot5/main/docs-img/logo/logo.svg" width="300px">
@@ -245,6 +245,7 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
245
245
  </tr>
246
246
  <tr>
247
247
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/bnavigator"><img src="https://avatars.githubusercontent.com/u/4623504?v=4?s=100" width="100px;" alt="Ben Greiner"/><br /><sub><b>Ben Greiner</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=bnavigator" title="Tests">⚠️</a></td>
248
+ <td align="center" valign="top" width="14.28%"><a href="http://tooldev.de"><img src="https://avatars.githubusercontent.com/u/1640386?v=4?s=100" width="100px;" alt="Robin Sonnabend"/><br /><sub><b>Robin Sonnabend</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=YSelfTool" title="Code">💻</a></td>
248
249
  </tr>
249
250
  </tbody>
250
251
  </table>
@@ -183,6 +183,7 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
183
183
  </tr>
184
184
  <tr>
185
185
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/bnavigator"><img src="https://avatars.githubusercontent.com/u/4623504?v=4?s=100" width="100px;" alt="Ben Greiner"/><br /><sub><b>Ben Greiner</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=bnavigator" title="Tests">⚠️</a></td>
186
+ <td align="center" valign="top" width="14.28%"><a href="http://tooldev.de"><img src="https://avatars.githubusercontent.com/u/1640386?v=4?s=100" width="100px;" alt="Robin Sonnabend"/><br /><sub><b>Robin Sonnabend</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=YSelfTool" title="Code">💻</a></td>
186
187
  </tr>
187
188
  </tbody>
188
189
  </table>
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Use this to make an example ROOT file for src/uproot/models/TH.py and src/uproot/models/TGraph.py.
3
3
  """
4
+
4
5
  from __future__ import annotations
5
6
 
6
7
  import numpy as np
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Use this to make src/uproot/models/TH.py and src/uproot/models/TGraph.py.
3
3
  """
4
+
4
5
  from __future__ import annotations
5
6
 
6
7
  import numpy as np
@@ -107,7 +107,7 @@ def ensure(filename, content):
107
107
 
108
108
  def handle_module(modulename, module):
109
109
  if any(x.startswith("_") for x in modulename.split(".")) and not any(
110
- x == "_dask" for x in modulename.split(".")
110
+ x == "_dask" or x == "_dask_write" for x in modulename.split(".")
111
111
  ):
112
112
  return
113
113
 
@@ -125,7 +125,8 @@ def handle_module(modulename, module):
125
125
  toctree2.write(" " + modulename + " (module) <" + modulename + ">\n")
126
126
 
127
127
  if modulename != "uproot" and all(
128
- not x.startswith("_") or x == "_dask" for x in modulename.split(".")
128
+ not x.startswith("_") or x == "_dask" or x == "_dask_write"
129
+ for x in modulename.split(".")
129
130
  ):
130
131
 
131
132
  def good(obj):
@@ -5,6 +5,9 @@ requires = [
5
5
  "hatch-vcs"
6
6
  ]
7
7
 
8
+ [lint.mccabe]
9
+ max-complexity = 100
10
+
8
11
  [project]
9
12
  authors = [
10
13
  {name = "Jim Pivarski", email = "pivarski@princeton.edu"}
@@ -35,6 +38,7 @@ classifiers = [
35
38
  ]
36
39
  dependencies = [
37
40
  "awkward>=2.4.6",
41
+ "cramjam>=2.8.1",
38
42
  "importlib-metadata;python_version<\"3.8\"",
39
43
  "numpy",
40
44
  "fsspec",
@@ -60,9 +64,8 @@ dev = [
60
64
  "awkward-pandas"
61
65
  ]
62
66
  test = [
63
- "lz4",
67
+ "isal",
64
68
  "xxhash",
65
- "zstandard",
66
69
  "minio",
67
70
  "aiohttp",
68
71
  "fsspec-xrootd",
@@ -114,6 +117,9 @@ exclude = [
114
117
  "src/uproot/__init__.py",
115
118
  "docs-sphinx/*.py"
116
119
  ]
120
+ src = ["src"]
121
+
122
+ [tool.ruff.lint]
117
123
  ignore = [
118
124
  "E501",
119
125
  "E722",
@@ -122,7 +128,7 @@ ignore = [
122
128
  "SIM118", # key in dict, broken since uproot doesn't behave like a dict
123
129
  "PGH003", # too-broad type ignore
124
130
  "SIM114", # combine `if` branches using logical `or` operator
125
- "PGH001", # no eval allowed
131
+ "S307", # no eval allowed
126
132
  "PLC1901", # empty string is falsey (but I don't want to rely on such weak typing)
127
133
  "RUF012" # enforces type annotations on a codebase that lacks type annotations
128
134
  ]
@@ -146,16 +152,10 @@ select = [
146
152
  "UP", # pyupgrade
147
153
  "YTT" # flake8-2020
148
154
  ]
149
- src = ["src"]
150
-
151
- [tool.ruff.lint]
152
155
  isort.required-imports = ["from __future__ import annotations"]
153
156
 
154
- [tool.ruff.mccabe]
155
- max-complexity = 100
156
-
157
- [tool.ruff.per-file-ignores]
158
- "dev/*" = ["T20"]
157
+ [tool.ruff.lint.per-file-ignores]
158
+ "dev/*" = ["T20", "T201"]
159
159
  "src/uproot/*/file.py" = ["SIM115"]
160
160
 
161
161
  [tool.setuptools_scm]
@@ -43,6 +43,8 @@ def dask(
43
43
  form_mapping=None,
44
44
  allow_read_errors_with_report=False,
45
45
  known_base_form=None,
46
+ decompression_executor=None,
47
+ interpretation_executor=None,
46
48
  **options,
47
49
  ):
48
50
  """
@@ -104,6 +106,15 @@ def dask(
104
106
  report dask-awkward collection.
105
107
  known_base_form (awkward.forms.Form | None): If not none use this form instead of opening
106
108
  one file to determine the dataset's form. Only available with open_files=False.
109
+ decompression_executor (None or Executor with a ``submit`` method): The
110
+ executor that is used to decompress ``TBaskets``; if None, a
111
+ :doc:`uproot.source.futures.TrivialExecutor` is created.
112
+ Executors attached to a file are ``shutdown`` when the file is closed.
113
+ interpretation_executor (None or Executor with a ``submit`` method): The
114
+ executor that is used to interpret uncompressed ``TBasket`` data as
115
+ arrays; if None, a :doc:`uproot.source.futures.TrivialExecutor`
116
+ is created.
117
+ Executors attached to a file are ``shutdown`` when the file is closed.
107
118
  options: See below.
108
119
 
109
120
  Returns dask equivalents of the backends supported by uproot. If ``library='np'``,
@@ -239,6 +250,8 @@ def dask(
239
250
  real_options,
240
251
  interp_options,
241
252
  steps_per_file,
253
+ decompression_executor,
254
+ interpretation_executor,
242
255
  )
243
256
  else:
244
257
  return _get_dask_array_delay_open(
@@ -253,6 +266,8 @@ def dask(
253
266
  real_options,
254
267
  interp_options,
255
268
  steps_per_file,
269
+ decompression_executor,
270
+ interpretation_executor,
256
271
  )
257
272
  elif library.name == "ak":
258
273
  if open_files:
@@ -271,6 +286,8 @@ def dask(
271
286
  form_mapping,
272
287
  steps_per_file,
273
288
  allow_read_errors_with_report,
289
+ decompression_executor,
290
+ interpretation_executor,
274
291
  )
275
292
  else:
276
293
  return _get_dak_array_delay_open(
@@ -288,6 +305,8 @@ def dask(
288
305
  steps_per_file,
289
306
  allow_read_errors_with_report,
290
307
  known_base_form,
308
+ decompression_executor,
309
+ interpretation_executor,
291
310
  )
292
311
  else:
293
312
  raise NotImplementedError()
@@ -438,10 +457,19 @@ def _dask_array_from_map(
438
457
 
439
458
 
440
459
  class _UprootReadNumpy:
441
- def __init__(self, ttrees, key, interp_options) -> None:
460
+ def __init__(
461
+ self,
462
+ ttrees,
463
+ key,
464
+ interp_options,
465
+ decompression_executor=None,
466
+ interpretation_executor=None,
467
+ ) -> None:
442
468
  self.ttrees = ttrees
443
469
  self.key = key
444
470
  self.interp_options = interp_options
471
+ self.decompression_executor = decompression_executor
472
+ self.interpretation_executor = interpretation_executor
445
473
 
446
474
  def __call__(self, i_start_stop):
447
475
  i, start, stop = i_start_stop
@@ -450,18 +478,29 @@ class _UprootReadNumpy:
450
478
  entry_stop=stop,
451
479
  library="np",
452
480
  ak_add_doc=self.interp_options["ak_add_doc"],
481
+ decompression_executor=self.decompression_executor,
482
+ interpretation_executor=self.interpretation_executor,
453
483
  )
454
484
 
455
485
 
456
486
  class _UprootOpenAndReadNumpy:
457
487
  def __init__(
458
- self, custom_classes, allow_missing, real_options, key, interp_options
488
+ self,
489
+ custom_classes,
490
+ allow_missing,
491
+ real_options,
492
+ key,
493
+ interp_options,
494
+ decompression_executor=None,
495
+ interpretation_executor=None,
459
496
  ):
460
497
  self.custom_classes = custom_classes
461
498
  self.allow_missing = allow_missing
462
499
  self.real_options = real_options
463
500
  self.key = key
464
501
  self.interp_options = interp_options
502
+ self.decompression_executor = decompression_executor
503
+ self.interpretation_executor = interpretation_executor
465
504
 
466
505
  def __call__(self, file_path_object_path_istep_nsteps_ischunk):
467
506
  (
@@ -503,6 +542,8 @@ which has {num_entries} entries"""
503
542
  entry_start=start,
504
543
  entry_stop=stop,
505
544
  ak_add_doc=self.interp_options["ak_add_doc"],
545
+ decompression_executor=self.decompression_executor,
546
+ interpretation_executor=self.interpretation_executor,
506
547
  )
507
548
 
508
549
 
@@ -519,6 +560,8 @@ def _get_dask_array(
519
560
  real_options,
520
561
  interp_options,
521
562
  steps_per_file,
563
+ decompression_executor,
564
+ interpretation_executor,
522
565
  ):
523
566
  ttrees = []
524
567
  explicit_chunks = []
@@ -670,7 +713,13 @@ which has {entry_stop} entries"""
670
713
  chunk_args.append((0, 0, 0))
671
714
 
672
715
  dask_dict[key] = _dask_array_from_map(
673
- _UprootReadNumpy(ttrees, key, interp_options),
716
+ _UprootReadNumpy(
717
+ ttrees,
718
+ key,
719
+ interp_options,
720
+ decompression_executor,
721
+ interpretation_executor,
722
+ ),
674
723
  chunk_args,
675
724
  chunks=(tuple(chunks),),
676
725
  dtype=dt,
@@ -692,6 +741,8 @@ def _get_dask_array_delay_open(
692
741
  real_options,
693
742
  interp_options,
694
743
  steps_per_file,
744
+ decompression_executor,
745
+ interpretation_executor,
695
746
  ):
696
747
  ffile_path, fobject_path = files[0][0:2]
697
748
  obj = uproot._util.regularize_object_path(
@@ -750,7 +801,13 @@ def _get_dask_array_delay_open(
750
801
 
751
802
  dask_dict[key] = _dask_array_from_map(
752
803
  _UprootOpenAndReadNumpy(
753
- custom_classes, allow_missing, real_options, key, interp_options
804
+ custom_classes,
805
+ allow_missing,
806
+ real_options,
807
+ key,
808
+ interp_options,
809
+ decompression_executor,
810
+ interpretation_executor,
754
811
  ),
755
812
  partition_args,
756
813
  chunks=(tuple(partitions),),
@@ -762,16 +819,13 @@ def _get_dask_array_delay_open(
762
819
 
763
820
  class ImplementsFormMappingInfo(Protocol):
764
821
  @property
765
- def behavior(self) -> dict | None:
766
- ...
822
+ def behavior(self) -> dict | None: ...
767
823
 
768
824
  buffer_key: str | Callable
769
825
 
770
- def parse_buffer_key(self, buffer_key: str) -> tuple[str, str]:
771
- ...
826
+ def parse_buffer_key(self, buffer_key: str) -> tuple[str, str]: ...
772
827
 
773
- def keys_for_buffer_keys(self, buffer_keys: frozenset[str]) -> frozenset[str]:
774
- ...
828
+ def keys_for_buffer_keys(self, buffer_keys: frozenset[str]) -> frozenset[str]: ...
775
829
 
776
830
  def load_buffers(
777
831
  self,
@@ -780,13 +834,11 @@ class ImplementsFormMappingInfo(Protocol):
780
834
  start: int,
781
835
  stop: int,
782
836
  options: Any,
783
- ) -> Mapping[str, AwkArray]:
784
- ...
837
+ ) -> Mapping[str, AwkArray]: ...
785
838
 
786
839
 
787
840
  class ImplementsFormMapping(Protocol):
788
- def __call__(self, form: Form) -> tuple[Form, ImplementsFormMappingInfo]:
789
- ...
841
+ def __call__(self, form: Form) -> tuple[Form, ImplementsFormMappingInfo]: ...
790
842
 
791
843
 
792
844
  class TrivialFormMappingInfo(ImplementsFormMappingInfo):
@@ -851,6 +903,8 @@ class TrivialFormMappingInfo(ImplementsFormMappingInfo):
851
903
  keys: frozenset[str],
852
904
  start: int,
853
905
  stop: int,
906
+ decompression_executor,
907
+ interpretation_executor,
854
908
  options: Any,
855
909
  ) -> Mapping[str, AwkArray]:
856
910
  # First, let's read the arrays as a tuple (to associate with each key)
@@ -859,6 +913,8 @@ class TrivialFormMappingInfo(ImplementsFormMappingInfo):
859
913
  entry_start=start,
860
914
  entry_stop=stop,
861
915
  ak_add_doc=options["ak_add_doc"],
916
+ decompression_executor=decompression_executor,
917
+ interpretation_executor=interpretation_executor,
862
918
  how=tuple,
863
919
  )
864
920
 
@@ -928,7 +984,13 @@ class UprootReadMixin:
928
984
  # buffer mapping in __call__, such that the high-level form can be
929
985
  # used in `from_buffers`
930
986
  mapping = self.form_mapping_info.load_buffers(
931
- tree, self.common_keys, start, stop, self.interp_options
987
+ tree,
988
+ self.common_keys,
989
+ start,
990
+ stop,
991
+ self.decompression_executor,
992
+ self.interpretation_executor,
993
+ self.interp_options,
932
994
  )
933
995
 
934
996
  # Populate container with placeholders if keys aren't required
@@ -1102,6 +1164,8 @@ class _UprootRead(UprootReadMixin):
1102
1164
  expected_form: Form,
1103
1165
  form_mapping_info: ImplementsFormMappingInfo,
1104
1166
  allow_read_errors_with_report: bool | tuple[type[BaseException], ...],
1167
+ decompression_executor,
1168
+ interpretation_executor,
1105
1169
  ) -> None:
1106
1170
  self.ttrees = ttrees
1107
1171
  self.common_keys = frozenset(common_keys)
@@ -1110,6 +1174,8 @@ class _UprootRead(UprootReadMixin):
1110
1174
  self.expected_form = expected_form
1111
1175
  self.form_mapping_info = form_mapping_info
1112
1176
  self.allow_read_errors_with_report = allow_read_errors_with_report
1177
+ self.decompression_executor = decompression_executor
1178
+ self.interpretation_executor = interpretation_executor
1113
1179
 
1114
1180
  def project_keys(self: T, keys: frozenset[str]) -> T:
1115
1181
  return _UprootRead(
@@ -1120,6 +1186,8 @@ class _UprootRead(UprootReadMixin):
1120
1186
  self.expected_form,
1121
1187
  self.form_mapping_info,
1122
1188
  self.allow_read_errors_with_report,
1189
+ self.decompression_executor,
1190
+ self.interpretation_executor,
1123
1191
  )
1124
1192
 
1125
1193
  def __call__(self, i_start_stop):
@@ -1152,7 +1220,11 @@ class _UprootRead(UprootReadMixin):
1152
1220
  return self._call_impl(i, start, stop)
1153
1221
 
1154
1222
  def _call_impl(self, i, start, stop):
1155
- return self.read_tree(self.ttrees[i], start, stop)
1223
+ return self.read_tree(
1224
+ self.ttrees[i],
1225
+ start,
1226
+ stop,
1227
+ )
1156
1228
 
1157
1229
 
1158
1230
  class _UprootOpenAndRead(UprootReadMixin):
@@ -1167,6 +1239,8 @@ class _UprootOpenAndRead(UprootReadMixin):
1167
1239
  expected_form: Form,
1168
1240
  form_mapping_info: ImplementsFormMappingInfo,
1169
1241
  allow_read_errors_with_report: bool | tuple[type[BaseException], ...],
1242
+ decompression_executor,
1243
+ interpretation_executor,
1170
1244
  ) -> None:
1171
1245
  self.custom_classes = custom_classes
1172
1246
  self.allow_missing = allow_missing
@@ -1177,6 +1251,8 @@ class _UprootOpenAndRead(UprootReadMixin):
1177
1251
  self.expected_form = expected_form
1178
1252
  self.form_mapping_info = form_mapping_info
1179
1253
  self.allow_read_errors_with_report = allow_read_errors_with_report
1254
+ self.decompression_executor = decompression_executor
1255
+ self.interpretation_executor = interpretation_executor
1180
1256
 
1181
1257
  def _call_impl(
1182
1258
  self, file_path, object_path, i_step_or_start, n_steps_or_stop, is_chunk
@@ -1211,7 +1287,11 @@ which has {num_entries} entries"""
1211
1287
 
1212
1288
  assert start <= stop
1213
1289
 
1214
- return self.read_tree(ttree, start, stop)
1290
+ return self.read_tree(
1291
+ ttree,
1292
+ start,
1293
+ stop,
1294
+ )
1215
1295
 
1216
1296
  def __call__(self, blockwise_args):
1217
1297
  (
@@ -1268,6 +1348,8 @@ which has {num_entries} entries"""
1268
1348
  self.expected_form,
1269
1349
  self.form_mapping_info,
1270
1350
  self.allow_read_errors_with_report,
1351
+ self.decompression_executor,
1352
+ self.interpretation_executor,
1271
1353
  )
1272
1354
 
1273
1355
 
@@ -1305,6 +1387,8 @@ def _get_dak_array(
1305
1387
  form_mapping,
1306
1388
  steps_per_file,
1307
1389
  allow_read_errors_with_report,
1390
+ decompression_executor,
1391
+ interpretation_executor,
1308
1392
  ):
1309
1393
  dask_awkward = uproot.extras.dask_awkward()
1310
1394
  awkward = uproot.extras.awkward()
@@ -1468,6 +1552,8 @@ which has {entry_stop} entries"""
1468
1552
  expected_form=expected_form,
1469
1553
  form_mapping_info=form_mapping_info,
1470
1554
  allow_read_errors_with_report=allow_read_errors_with_report,
1555
+ decompression_executor=decompression_executor,
1556
+ interpretation_executor=interpretation_executor,
1471
1557
  )
1472
1558
 
1473
1559
  return dask_awkward.from_map(
@@ -1493,6 +1579,8 @@ def _get_dak_array_delay_open(
1493
1579
  steps_per_file,
1494
1580
  allow_read_errors_with_report,
1495
1581
  known_base_form,
1582
+ decompression_executor,
1583
+ interpretation_executor,
1496
1584
  ):
1497
1585
  dask_awkward = uproot.extras.dask_awkward()
1498
1586
  awkward = uproot.extras.awkward()
@@ -1568,6 +1656,8 @@ def _get_dak_array_delay_open(
1568
1656
  expected_form=expected_form,
1569
1657
  form_mapping_info=form_mapping_info,
1570
1658
  allow_read_errors_with_report=allow_read_errors_with_report,
1659
+ decompression_executor=decompression_executor,
1660
+ interpretation_executor=interpretation_executor,
1571
1661
  )
1572
1662
 
1573
1663
  return dask_awkward.from_map(
@@ -2788,7 +2788,8 @@ def _regularize_expression(
2788
2788
  )
2789
2789
 
2790
2790
  else:
2791
- to_compute = aliases[expression] if expression in aliases else expression
2791
+ # the value of `expression` is either what we want to compute or a lookup value for it
2792
+ to_compute = aliases.get(expression, expression)
2792
2793
 
2793
2794
  is_jagged = False
2794
2795
  expression_branches = []
@@ -3028,7 +3029,7 @@ def _ranges_or_baskets_to_arrays(
3028
3029
  else:
3029
3030
  notifications.put(range_or_basket)
3030
3031
 
3031
- original_index += 1
3032
+ original_index += 1 # noqa: SIM113 (don't use `enumerate` for `original_index`)
3032
3033
 
3033
3034
  branchid_to_branch[branch.cache_key] = branch
3034
3035