uproot 5.6.0__tar.gz → 5.6.2__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 (309) hide show
  1. uproot-5.6.2/.github/workflows/build-distributions.yml +17 -0
  2. {uproot-5.6.0 → uproot-5.6.2}/.github/workflows/build-test.yml +31 -23
  3. {uproot-5.6.0 → uproot-5.6.2}/.github/workflows/deploy.yml +2 -2
  4. {uproot-5.6.0 → uproot-5.6.2}/.github/workflows/upload-nightly-wheels.yml +2 -2
  5. {uproot-5.6.0 → uproot-5.6.2}/.pre-commit-config.yaml +1 -1
  6. uproot-5.6.2/CONTRIBUTING.md +155 -0
  7. {uproot-5.6.0 → uproot-5.6.2}/PKG-INFO +1 -27
  8. {uproot-5.6.0 → uproot-5.6.2}/pyproject.toml +37 -30
  9. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/_dask.py +60 -23
  10. uproot-5.6.2/src/uproot/behaviors/RNTuple.py +1679 -0
  11. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TBranch.py +8 -3
  12. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/const.py +2 -0
  13. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/interpretation/library.py +1 -1
  14. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/RNTuple.py +240 -415
  15. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/source/fsspec.py +2 -7
  16. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/version.py +2 -2
  17. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/writing/_cascade.py +5 -5
  18. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/writing/_cascadentuple.py +69 -73
  19. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/writing/_cascadetree.py +23 -2
  20. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/writing/writable.py +1 -1
  21. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0630_rntuple_basics.py +6 -1
  22. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0662_rntuple_stl_containers.py +17 -15
  23. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1223_more_rntuple_types.py +2 -2
  24. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1250_rntuple_improvements.py +8 -8
  25. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1395_rntuple_writing_lists_and_structs.py +7 -5
  26. uproot-5.6.2/tests/test_1406_improved_rntuple_methods.py +130 -0
  27. uproot-5.6.2/tests/test_1411_rntuple_physlite_ATLAS.py +100 -0
  28. uproot-5.6.2/tests/test_1412_rntuple_dask.py +37 -0
  29. uproot-5.6.0/.github/workflows/build-distributions.yml +0 -32
  30. {uproot-5.6.0 → uproot-5.6.2}/.all-contributorsrc +0 -0
  31. {uproot-5.6.0 → uproot-5.6.2}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  32. {uproot-5.6.0 → uproot-5.6.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  33. {uproot-5.6.0 → uproot-5.6.2}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  34. {uproot-5.6.0 → uproot-5.6.2}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  35. {uproot-5.6.0 → uproot-5.6.2}/.github/dependabot.yml +0 -0
  36. {uproot-5.6.0 → uproot-5.6.2}/.github/workflows/semantic-pr-title.yml +0 -0
  37. {uproot-5.6.0 → uproot-5.6.2}/.gitignore +0 -0
  38. {uproot-5.6.0 → uproot-5.6.2}/.readthedocs.yml +0 -0
  39. {uproot-5.6.0 → uproot-5.6.2}/CITATION.cff +0 -0
  40. {uproot-5.6.0 → uproot-5.6.2}/LICENSE +0 -0
  41. {uproot-5.6.0 → uproot-5.6.2}/README.md +0 -0
  42. {uproot-5.6.0 → uproot-5.6.2}/dev/example-objects.py +0 -0
  43. {uproot-5.6.0 → uproot-5.6.2}/dev/make-models.py +0 -0
  44. {uproot-5.6.0 → uproot-5.6.2}/docs-img/diagrams/abstraction-layers.png +0 -0
  45. {uproot-5.6.0 → uproot-5.6.2}/docs-img/diagrams/abstraction-layers.svg +0 -0
  46. {uproot-5.6.0 → uproot-5.6.2}/docs-img/diagrams/example-dask-graph.png +0 -0
  47. {uproot-5.6.0 → uproot-5.6.2}/docs-img/diagrams/uproot-awkward-timeline.png +0 -0
  48. {uproot-5.6.0 → uproot-5.6.2}/docs-img/diagrams/uproot-awkward-timeline.svg +0 -0
  49. {uproot-5.6.0 → uproot-5.6.2}/docs-img/logo/logo-300px-white.png +0 -0
  50. {uproot-5.6.0 → uproot-5.6.2}/docs-img/logo/logo-300px.png +0 -0
  51. {uproot-5.6.0 → uproot-5.6.2}/docs-img/logo/logo-600px.png +0 -0
  52. {uproot-5.6.0 → uproot-5.6.2}/docs-img/logo/logo.svg +0 -0
  53. {uproot-5.6.0 → uproot-5.6.2}/docs-img/photos/switcheroo.jpg +0 -0
  54. {uproot-5.6.0 → uproot-5.6.2}/docs-sphinx/_templates/breadcrumbs.html +0 -0
  55. {uproot-5.6.0 → uproot-5.6.2}/docs-sphinx/basic.rst +0 -0
  56. {uproot-5.6.0 → uproot-5.6.2}/docs-sphinx/conf.py +0 -0
  57. {uproot-5.6.0 → uproot-5.6.2}/docs-sphinx/index.rst +0 -0
  58. {uproot-5.6.0 → uproot-5.6.2}/docs-sphinx/make_changelog.py +0 -0
  59. {uproot-5.6.0 → uproot-5.6.2}/docs-sphinx/prepare_docstrings.py +0 -0
  60. {uproot-5.6.0 → uproot-5.6.2}/docs-sphinx/requirements.txt +0 -0
  61. {uproot-5.6.0 → uproot-5.6.2}/docs-sphinx/uproot3-to-4.rst +0 -0
  62. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/__init__.py +0 -0
  63. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/_awkwardforth.py +0 -0
  64. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/_util.py +0 -0
  65. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behavior.py +0 -0
  66. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/RooCurve.py +0 -0
  67. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/RooHist.py +0 -0
  68. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TAxis.py +0 -0
  69. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TBranchElement.py +0 -0
  70. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TDatime.py +0 -0
  71. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TGraph.py +0 -0
  72. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TGraphAsymmErrors.py +0 -0
  73. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TGraphErrors.py +0 -0
  74. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TH1.py +0 -0
  75. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TH2.py +0 -0
  76. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TH2Poly.py +0 -0
  77. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TH3.py +0 -0
  78. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TParameter.py +0 -0
  79. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TProfile.py +0 -0
  80. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TProfile2D.py +0 -0
  81. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TProfile3D.py +0 -0
  82. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/TTree.py +0 -0
  83. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/behaviors/__init__.py +0 -0
  84. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/cache.py +0 -0
  85. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/compression.py +0 -0
  86. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/containers.py +0 -0
  87. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/deserialization.py +0 -0
  88. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/dynamic.py +0 -0
  89. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/exceptions.py +0 -0
  90. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/extras.py +0 -0
  91. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/interpretation/__init__.py +0 -0
  92. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/interpretation/grouped.py +0 -0
  93. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/interpretation/identify.py +0 -0
  94. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/interpretation/jagged.py +0 -0
  95. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/interpretation/known_forth/__init__.py +0 -0
  96. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/interpretation/known_forth/atlas.py +0 -0
  97. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/interpretation/numerical.py +0 -0
  98. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/interpretation/objects.py +0 -0
  99. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/interpretation/strings.py +0 -0
  100. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/language/__init__.py +0 -0
  101. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/language/python.py +0 -0
  102. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/model.py +0 -0
  103. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TArray.py +0 -0
  104. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TAtt.py +0 -0
  105. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TBasket.py +0 -0
  106. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TBranch.py +0 -0
  107. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TClonesArray.py +0 -0
  108. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TDatime.py +0 -0
  109. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TGraph.py +0 -0
  110. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TH.py +0 -0
  111. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/THashList.py +0 -0
  112. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TLeaf.py +0 -0
  113. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TList.py +0 -0
  114. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TMatrixT.py +0 -0
  115. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TNamed.py +0 -0
  116. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TObjArray.py +0 -0
  117. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TObjString.py +0 -0
  118. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TObject.py +0 -0
  119. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TRef.py +0 -0
  120. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TString.py +0 -0
  121. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TTable.py +0 -0
  122. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TTime.py +0 -0
  123. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/TTree.py +0 -0
  124. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/models/__init__.py +0 -0
  125. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/pyroot.py +0 -0
  126. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/reading.py +0 -0
  127. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/serialization.py +0 -0
  128. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/sink/__init__.py +0 -0
  129. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/sink/file.py +0 -0
  130. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/source/__init__.py +0 -0
  131. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/source/chunk.py +0 -0
  132. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/source/coalesce.py +0 -0
  133. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/source/cursor.py +0 -0
  134. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/source/file.py +0 -0
  135. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/source/futures.py +0 -0
  136. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/source/http.py +0 -0
  137. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/source/object.py +0 -0
  138. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/source/s3.py +0 -0
  139. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/source/xrootd.py +0 -0
  140. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/streamers.py +0 -0
  141. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/writing/__init__.py +0 -0
  142. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/writing/_dask_write.py +0 -0
  143. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/writing/identify.py +0 -0
  144. {uproot-5.6.0 → uproot-5.6.2}/src/uproot/writing/interpret.py +0 -0
  145. {uproot-5.6.0 → uproot-5.6.2}/tests/__init__.py +0 -0
  146. {uproot-5.6.0 → uproot-5.6.2}/tests/conftest.py +0 -0
  147. {uproot-5.6.0 → uproot-5.6.2}/tests/samples/h_dynamic.pkl +0 -0
  148. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0001_source_class.py +0 -0
  149. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0006_notify_when_downloaded.py +0 -0
  150. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0007_single_chunk_interface.py +0 -0
  151. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0008_start_interpretation.py +0 -0
  152. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0009_nested_directories.py +0 -0
  153. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0010_start_streamers.py +0 -0
  154. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0011_generate_classes_from_streamers.py +0 -0
  155. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0013_rntuple_anchor.py +0 -0
  156. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0014_all_ttree_versions.py +0 -0
  157. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0016_interpretations.py +0 -0
  158. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0017_multi_basket_multi_branch_fetch.py +0 -0
  159. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0018_array_fetching_interface.py +0 -0
  160. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0022_number_of_branches.py +0 -0
  161. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0023_more_interpretations_1.py +0 -0
  162. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0023_ttree_versions.py +0 -0
  163. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0028_fallback_to_read_streamer.py +0 -0
  164. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0029_more_string_types.py +0 -0
  165. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0031_test_stl_containers.py +0 -0
  166. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0033_more_interpretations_2.py +0 -0
  167. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0034_generic_objects_in_ttrees.py +0 -0
  168. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0035_datatype_generality.py +0 -0
  169. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0038_memberwise_serialization.py +0 -0
  170. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0043_iterate_function.py +0 -0
  171. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0044_concatenate_function.py +0 -0
  172. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0046_histograms_bh_hist.py +0 -0
  173. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0053_parents_should_not_be_bases.py +0 -0
  174. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0058_detach_model_objects_from_files.py +0 -0
  175. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0066_fix_http_fallback_freeze.py +0 -0
  176. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0067_common_entry_offsets.py +0 -0
  177. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0081_dont_parse_colons.py +0 -0
  178. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0087_memberwise_splitting_not_implemented_messages.py +0 -0
  179. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0088_read_with_http.py +0 -0
  180. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0099_read_from_file_object.py +0 -0
  181. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0112_fix_pandas_with_cut.py +0 -0
  182. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0118_fix_name_fetch_again.py +0 -0
  183. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0123_atlas_issues.py +0 -0
  184. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0126_turn_unknown_emptyarrays_into_known_types.py +0 -0
  185. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0167_use_the_common_histogram_interface.py +0 -0
  186. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0172_allow_allocators_in_vector_typenames.py +0 -0
  187. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0173_empty_and_multiprocessing_bugs.py +0 -0
  188. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0182_complain_about_missing_files.py +0 -0
  189. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0194_fix_lost_cuts_in_iterate.py +0 -0
  190. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0220_contiguous_byte_ranges_in_http.py +0 -0
  191. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0228_read_TProfiles.py +0 -0
  192. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0240_read_TGraphAsymmErrors.py +0 -0
  193. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0278_specializations_for_TParameter.py +0 -0
  194. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0302_pickle.py +0 -0
  195. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0303_empty_jagged_array.py +0 -0
  196. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0320_start_working_on_ROOT_writing.py +0 -0
  197. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0322_writablefile_infrastructure.py +0 -0
  198. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0329_update_existing_root_files.py +0 -0
  199. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0335_empty_ttree_division_by_zero.py +0 -0
  200. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0341_manipulate_streamer_info.py +0 -0
  201. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0344_writabledirectory_can_read.py +0 -0
  202. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0345_bulk_copy_method.py +0 -0
  203. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0349_write_TObjString.py +0 -0
  204. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0350_read_RooCurve_RooHist.py +0 -0
  205. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0351_write_TList.py +0 -0
  206. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0352_write_THashList.py +0 -0
  207. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0384_move_behavior_of_and_fix_383.py +0 -0
  208. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0398_dimensions_in_leaflist.py +0 -0
  209. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0405_write_a_histogram.py +0 -0
  210. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0406_write_a_ttree.py +0 -0
  211. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0407_read_TDatime.py +0 -0
  212. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0412_write_multidimensional_numpy_to_ttree.py +0 -0
  213. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0414_write_jagged_arrays.py +0 -0
  214. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0416_writing_compressed_data.py +0 -0
  215. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0418_read_TTable.py +0 -0
  216. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0420_pyroot_uproot_interoperability.py +0 -0
  217. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0422_hist_integration.py +0 -0
  218. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0430_global_index_for_tuples_of_DataFrames.py +0 -0
  219. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0438_TClonesArray_is_not_AsGrouped.py +0 -0
  220. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0439_check_awkward_before_numpy.py +0 -0
  221. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0442_regular_TClonesArray.py +0 -0
  222. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0472_tstreamerinfo_for_ttree.py +0 -0
  223. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0475_remember_to_update_freesegments.py +0 -0
  224. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0484_manually_add_model_for_TMatrixTSym_double_.py +0 -0
  225. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0487_implement_asdtypeinplace.py +0 -0
  226. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0498_create_leaf_branch_in_extend.py +0 -0
  227. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0519_remove_memmap_copy.py +0 -0
  228. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0520_dynamic_classes_cant_be_abc_subclasses.py +0 -0
  229. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0569_fBits_is_4_bytes.py +0 -0
  230. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0576_unicode_in_names.py +0 -0
  231. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0578_dask_for_numpy.py +0 -0
  232. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0580_round_trip_for_no_flow_histograms.py +0 -0
  233. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0589_explicitly_interpret_RVec_type.py +0 -0
  234. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0603_dask_delayed_open.py +0 -0
  235. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0609_num_enteries_func.py +0 -0
  236. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0610_awkward_form.py +0 -0
  237. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0637_setup_tests_for_AwkwardForth.py +0 -0
  238. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0643_reading_vector_pair_TLorentzVector_int.py +0 -0
  239. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0651_implement_transformed_axis.py +0 -0
  240. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0652_dask_for_awkward.py +0 -0
  241. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0692_fsspec_reading.py +0 -0
  242. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0692_fsspec_writing.py +0 -0
  243. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0700_dask_empty_arrays.py +0 -0
  244. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0705_rntuple_writing_metadata.py +0 -0
  245. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0750_avoid_empty_TBasket_issue.py +0 -0
  246. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0755_dask_awkward_column_projection.py +0 -0
  247. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0791_protect_uproot_project_columns_from_dask_node_names.py +0 -0
  248. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0798_DAOD_PHYSLITE.py +0 -0
  249. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0808_fix_awkward_form_for_AsStridedObjects.py +0 -0
  250. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0816_separate_AwkwardForth_machines_by_TBranch.py +0 -0
  251. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0832_ak_add_doc_should_also_add_to_typetracer.py +0 -0
  252. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0840_support_tleafG.py +0 -0
  253. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0841_fix_814.py +0 -0
  254. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0844_fix_delete_hist_from_root.py +0 -0
  255. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0852_fix_strided_interp_extra_offsets.py +0 -0
  256. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0870_writing_arrays_of_type_unknown_fix_822.py +0 -0
  257. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0876_uproot_dask_blind_steps.py +0 -0
  258. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0886_fix_awkward_form_breadcrumbs.py +0 -0
  259. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0910_fix_906_members_non_numerical_branches.py +0 -0
  260. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0911_fix_interp_array_non_numerical_objs_issue_880.py +0 -0
  261. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0912_fix_pandas_and_double_nested_vectors_issue_885.py +0 -0
  262. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0916_read_from_s3.py +0 -0
  263. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0927_dont_assume_uproot_in_global_scope_in_TPython_Eval.py +0 -0
  264. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0930_expressions_in_pandas.py +0 -0
  265. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0940_feat_add_TLeafC_string_support.py +0 -0
  266. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0962_rntuple_update.py +0 -0
  267. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0965_inverted_axes_variances_hist_888.py +0 -0
  268. {uproot-5.6.0 → uproot-5.6.2}/tests/test_0976_path_object_split.py +0 -0
  269. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1000-write-TProfiles.py +0 -0
  270. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1043_const_std_string.py +0 -0
  271. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1058_dask_awkward_report.py +0 -0
  272. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1063_dask_distributed.py +0 -0
  273. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1070_pandas_dataframe_building_performance_fix.py +0 -0
  274. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1085_dask_write.py +0 -0
  275. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1102_any_locks_in_models_must_be_transient.py +0 -0
  276. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1114_fix_attempt_to_concatenate_numpy_with_awkward.py +0 -0
  277. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1120_check_decompression_executor_pass_for_dask.py +0 -0
  278. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1127_fix_allow_colon_in_key_names.py +0 -0
  279. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1128_TGraph_writing.py +0 -0
  280. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1146_split_ranges_for_large_files_over_http.py +0 -0
  281. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1154_classof_using_relative_path.py +0 -0
  282. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1159_rntuple_cluster_groups.py +0 -0
  283. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1160_std_string_in_TDirectory.py +0 -0
  284. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1180_read_free_floating_vector_issue_1179.py +0 -0
  285. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1181_support_for_stl_list.py +0 -0
  286. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1182_add_support_for_bitset.py +0 -0
  287. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1183_ttime_custom.py +0 -0
  288. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1186_dtype_might_raise_ValueError.py +0 -0
  289. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1189_dask_failing_on_duplicate_keys.py +0 -0
  290. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1191_rntuple_fixes.py +0 -0
  291. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1198_coalesce.py +0 -0
  292. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1207_fix_title_of_TBranch_with_counter.py +0 -0
  293. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1212_dont_let_update_mess_up_file_version.py +0 -0
  294. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1221_AwkwardForth_bug.py +0 -0
  295. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1229_const_in_typename.py +0 -0
  296. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1254_test_threadpool_executor_for_dask.py +0 -0
  297. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1264_write_NumPy_array_of_strings.py +0 -0
  298. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1275_fix_TStreamerLoop_code_generation.py +0 -0
  299. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1282_add_known_forth_for_atlas.py +0 -0
  300. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1285_rntuple_multicluster_concatenation.py +0 -0
  301. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1318_dont_compare_big_endian_in_awkward.py +0 -0
  302. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1321_pandas_changed_api_again.py +0 -0
  303. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1347_rntuple_floats_suppressed_cols.py +0 -0
  304. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1356_basic_rntuple_writing.py +0 -0
  305. {uproot-5.6.0 → uproot-5.6.2}/tests/test_1375_extend_ak_add_doc.py +0 -0
  306. {uproot-5.6.0 → uproot-5.6.2}/tests-wasm/__init__.py +0 -0
  307. {uproot-5.6.0 → uproot-5.6.2}/tests-wasm/test_1272_basic_functionality.py +0 -0
  308. {uproot-5.6.0 → uproot-5.6.2}/tests-wasm/test_1365_awkwardforth_reading.py +0 -0
  309. {uproot-5.6.0 → uproot-5.6.2}/tests-wasm/utils.py +0 -0
@@ -0,0 +1,17 @@
1
+ name: Build sdist and wheel
2
+
3
+ on:
4
+ # Run on demand with workflow dispatch
5
+ workflow_dispatch:
6
+ # Use from other workflows
7
+ workflow_call:
8
+
9
+ jobs:
10
+ dist:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ with:
15
+ fetch-depth: 0
16
+
17
+ - uses: hynek/build-and-inspect-python-package@v2
@@ -29,26 +29,28 @@ jobs:
29
29
  steps:
30
30
  - uses: actions/checkout@v4
31
31
 
32
- - name: Get conda
33
- uses: conda-incubator/setup-miniconda@v3
32
+ - name: Get micromamba
33
+ uses: mamba-org/setup-micromamba@v2
34
34
  with:
35
- auto-update-conda: true
36
- python-version: ${{ matrix.python-version }}
37
- miniforge-version: latest
38
- use-mamba: true
35
+ environment-name: test-env
36
+ init-shell: bash
37
+ create-args: >-
38
+ python=${{ matrix.python-version }}
39
+
40
+ - uses: astral-sh/setup-uv@v6
39
41
 
40
42
  - name: Check active Python version
41
43
  run: python -c "import sys; assert '.'.join(str(s) for s in sys.version_info[:2]) == '${{ matrix.python-version }}', f'{version} incorrect!'"
42
44
 
43
45
  - name: Install ROOT
44
- if: matrix.python-version == 3.9 && runner.os != 'macOS' && runner.os != 'Windows'
46
+ if: matrix.python-version == 3.9 && runner.os == 'Linux'
45
47
  run: |
46
- conda env list
47
- mamba install root
48
- conda list
48
+ micromamba env list
49
+ micromamba install root
50
+ micromamba list
49
51
 
50
52
  - name: Install sshd for fsspec ssh tests
51
- if: runner.os != 'macOS' && runner.os != 'Windows'
53
+ if: runner.os == 'Linux'
52
54
  run: |
53
55
  sudo apt-get install -y openssh-server
54
56
  sudo service ssh restart
@@ -61,12 +63,12 @@ jobs:
61
63
  - name: Install XRootD
62
64
  if: runner.os != 'Windows'
63
65
  run: |
64
- conda env list
65
- mamba install xrootd
66
- conda list
66
+ micromamba env list
67
+ micromamba install xrootd
68
+ micromamba list
67
69
 
68
70
  - name: Pip install the package
69
- run: python -m pip install .[test,dev]
71
+ run: uv pip install --system -e. --group=dev
70
72
 
71
73
  - name: Run pytest
72
74
  run: |
@@ -90,10 +92,10 @@ jobs:
90
92
  python-version: ${{ matrix.python-version }}
91
93
  allow-prereleases: true
92
94
 
93
- - uses: astral-sh/setup-uv@v5
95
+ - uses: astral-sh/setup-uv@v6
94
96
 
95
97
  - name: Pip install the package
96
- run: uv pip install --system .[test,dev]
98
+ run: uv pip install --system -e. --group=dev
97
99
 
98
100
  - name: Run pytest
99
101
  run: |
@@ -116,19 +118,23 @@ jobs:
116
118
  with:
117
119
  python-version: ${{ matrix.python-version }}
118
120
 
121
+ - uses: astral-sh/setup-uv@v6
122
+
119
123
  - name: Pip install the package
120
- run: python -m pip install 'numpy<2' .[test]
124
+ run: |
125
+ uv venv
126
+ uv pip install -e. 'numpy<2' --group test
121
127
 
122
128
  - name: Run pytest
123
129
  run: |
124
- python -m pytest -vv tests --reruns 10 --reruns-delay 30 --only-rerun "(?i)http|ssl|timeout|expired|connection|socket"
130
+ uv run --no-sync pytest -vv tests --reruns 10 --reruns-delay 30 --only-rerun "(?i)http|ssl|timeout|expired|connection|socket"
125
131
 
126
132
  pyodide-build:
127
133
  runs-on: ubuntu-latest
128
134
  timeout-minutes: 30
129
135
  env:
130
- PYODIDE_VERSION: 0.27.3
131
- PYODIDE_BUILD_VERSION: 0.29.3
136
+ PYODIDE_VERSION: 0.27.5
137
+ PYODIDE_BUILD_VERSION: 0.30.0
132
138
  AWKWARD_VERSION: v2.7.4
133
139
 
134
140
  steps:
@@ -140,6 +146,8 @@ jobs:
140
146
  with:
141
147
  python-version: '3.12'
142
148
 
149
+ - uses: astral-sh/setup-uv@v6
150
+
143
151
  - name: Install pyodide-build
144
152
  run: python3 -m pip install pyodide-build==$PYODIDE_BUILD_VERSION
145
153
 
@@ -176,11 +184,11 @@ jobs:
176
184
  with:
177
185
  runner: selenium
178
186
  browser: chrome
179
- browser-version: latest
187
+ browser-version: 1446681
180
188
  github-token: ${{ secrets.GITHUB_TOKEN }}
181
189
 
182
190
  - name: Install dependencies
183
- run: pip install .[test-pyodide] pyodide-py==$PYODIDE_VERSION
191
+ run: uv pip install --system -e. --group=test-pyodide pyodide-py==$PYODIDE_VERSION
184
192
 
185
193
  - name: Run pytest
186
194
  run: |
@@ -31,14 +31,14 @@ jobs:
31
31
  steps:
32
32
  - uses: actions/download-artifact@v4
33
33
  with:
34
- name: distribution-artifact
34
+ name: Packages
35
35
  path: dist
36
36
 
37
37
  - name: List distributions to be deployed
38
38
  run: ls -lha dist/
39
39
 
40
40
  - name: Generate artifact attestation for sdist and wheel
41
- uses: actions/attest-build-provenance@c074443f1aee8d4aeeae555aebba3282517141b2 # v2.2.3
41
+ uses: actions/attest-build-provenance@db473fddc028af60658334401dc6fa3ffd8669fd # v2.3.0
42
42
  with:
43
43
  subject-path: dist/uproot-*
44
44
 
@@ -26,14 +26,14 @@ jobs:
26
26
  steps:
27
27
  - uses: actions/download-artifact@v4
28
28
  with:
29
- name: distribution-artifact
29
+ name: Packages
30
30
  path: dist
31
31
 
32
32
  - name: List wheel to be deployed
33
33
  run: ls -lha dist/*.whl
34
34
 
35
35
  - name: Upload wheel to Anaconda Cloud as nightly
36
- uses: scientific-python/upload-nightly-action@82396a2ed4269ba06c6b2988bb4fd568ef3c3d6b # 0.6.1
36
+ uses: scientific-python/upload-nightly-action@b36e8c0c10dbcfd2e05bf95f17ef8c14fd708dbf # 0.6.2
37
37
  with:
38
38
  artifacts_path: dist
39
39
  anaconda_nightly_upload_token: ${{ secrets.ANACONDA_ORG_UPLOAD_TOKEN }}
@@ -23,7 +23,7 @@ repos:
23
23
  - id: black
24
24
 
25
25
  - repo: https://github.com/astral-sh/ruff-pre-commit
26
- rev: v0.9.9
26
+ rev: v0.11.9
27
27
  hooks:
28
28
  - id: ruff
29
29
  args: [--fix, --show-fixes]
@@ -0,0 +1,155 @@
1
+ # Contributing to uproot
2
+
3
+ Thank you for your interest in contributing to **uproot**! uproot is a community-driven project, and we welcome contributions of all kinds, including bug reports, feature requests, documentation improvements, and code contributions.
4
+
5
+ This guide will help you get started with contributing.
6
+
7
+ ---
8
+
9
+ ## 🚀 Quick Start
10
+
11
+ 1. **Fork** the repository on GitHub.
12
+ 2. **Clone** your fork locally:
13
+ ```bash
14
+ git clone git@github.com:YOUR_USERNAME/uproot5.git
15
+ cd uproot
16
+ ```
17
+
18
+ 3. **Set up the development environment**:
19
+
20
+ We recommend using a conda environment. You can reproduce the full developer environment with:
21
+
22
+ ```bash
23
+ conda create -n uproot-py313 python=3.13
24
+ conda activate uproot-py313
25
+
26
+ # Add conda-forge channel and prioritize it
27
+ conda config --add channels conda-forge
28
+ conda config --set channel_priority strict
29
+
30
+ # Install dependencies
31
+ conda install xrootd
32
+ conda install root
33
+ conda install pandas
34
+ conda install dask
35
+ conda install minio
36
+
37
+ # pip-only dependencies
38
+ pip install scikit-hep-testdata
39
+ pip install rangehttpserver
40
+ pip install boost_histogram
41
+ pip install hist
42
+ pip install dask_awkward
43
+ pip install awkward-pandas
44
+ pip install pytest-timeout
45
+ pip install fsspec-xrootd
46
+ pip install uv
47
+
48
+ # Run local HTTP server (if needed for test data)
49
+ python -m RangeHTTPServer
50
+ ```
51
+
52
+ 4. **Install Uproot in editable mode**:
53
+ ```bash
54
+ uv pip install -e. --group=dev
55
+ ```
56
+
57
+ ---
58
+
59
+ ## 🌿 Branching and Naming Conventions
60
+
61
+ - Always work on a **feature branch**:
62
+ ```bash
63
+ git checkout -b YOUR_USERNAME/my-cool-feature
64
+ ```
65
+ - Use descriptive names, such as:
66
+ - `fix_streamer-parsing`
67
+ - `feature_custom-interpretation-api`
68
+ - `docs_improve-tutorials`
69
+
70
+ ---
71
+
72
+ ## 🎨 Code Style
73
+
74
+ - Use **pre-commit** for automatic linting, style issues, and formatting:
75
+ ```bash
76
+ pre-commit run --all
77
+
78
+ ---
79
+
80
+ ## ✅ Running Tests
81
+
82
+ Uproot uses **pytest** for testing.
83
+
84
+ To run the full test suite:
85
+ ```bash
86
+ python -m pytest tests -ss -vv
87
+ ```
88
+
89
+ To run a specific test module:
90
+ ```bash
91
+ pytest tests/test_my_module.py
92
+ ```
93
+
94
+ Some tests may depend on having ROOT or XRootD installed. These are covered in the environment setup.
95
+
96
+ ---
97
+
98
+ ## 🔃 Submitting a Pull Request
99
+
100
+ 1. Make sure all tests pass and your code is cleanly formatted.
101
+ 2. Push your changes to your fork:
102
+ ```bash
103
+ git push origin YOUR_USERNAME/my-cool-feature
104
+ ```
105
+ 3. Open a pull request (PR) from your fork to the `main` branch of [scikit-hep/uproot](https://github.com/scikit-hep/uproot).
106
+ 4. Fill in the PR template and explain what you did and why.
107
+ 5. Be responsive to feedback from reviewers—we’re all here to help!
108
+
109
+ ---
110
+
111
+ ## 🐛 Reporting Bugs
112
+
113
+ 1. Check if the bug is already reported on the [issue tracker](https://github.com/scikit-hep/uproot/issues).
114
+ 2. If not, [open a new issue](https://github.com/scikit-hep/uproot/issues/new/choose) and provide:
115
+ - A minimal reproducible example
116
+ - Expected vs. actual behavior
117
+ - Version info (`python -m uproot --version`)
118
+ - Any relevant stack trace or logs
119
+
120
+ ---
121
+
122
+ ## 💡 Requesting Features
123
+
124
+ 1. Search the issues to see if a similar feature has been discussed.
125
+ 2. If not, open a **Feature Request** issue and describe:
126
+ - What problem the feature solves
127
+ - A suggested implementation or interface (if applicable)
128
+ - Any related prior art in other libraries or experiments
129
+
130
+ ---
131
+
132
+ ## 📚 Improving Documentation
133
+
134
+ Documentation lives in the `docs-sphinx/` folder and is built using **Sphinx**. To build locally
135
+ make sure you have Sphinx and the ReadTheDocs theme installed in your virtualenv:
136
+ ```bash
137
+ pip install sphinx sphinx-rtd-theme
138
+ ```
139
+ Navigate to your docs folder and invoke the Sphinx builder to produce HTML in the _build/html directory:
140
+ ```
141
+ cd docs-sphinx
142
+ sphinx-build -b html . _build/html
143
+ ```
144
+ Once it finishes, open:
145
+ ```
146
+ open _build/html/index.html
147
+ ```
148
+
149
+ You can also suggest improvements to examples, tutorials, and API references.
150
+
151
+ ---
152
+
153
+ ## 🙌 Thanks!
154
+
155
+ uproot thrives on its community. Whether you're fixing a typo, contributing a feature, or suggesting a design&mdash;you're making a difference!
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uproot
3
- Version: 5.6.0
3
+ Version: 5.6.2
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
@@ -37,36 +37,10 @@ Requires-Dist: numpy
37
37
  Requires-Dist: packaging
38
38
  Requires-Dist: typing-extensions>=4.1.0; python_version < '3.11'
39
39
  Requires-Dist: xxhash
40
- Provides-Extra: dev
41
- Requires-Dist: awkward-pandas; extra == 'dev'
42
- Requires-Dist: boost-histogram>=0.13; extra == 'dev'
43
- Requires-Dist: dask-awkward>=2025.2.0; extra == 'dev'
44
- Requires-Dist: dask[array,distributed]; extra == 'dev'
45
- Requires-Dist: hist>=1.2; extra == 'dev'
46
- Requires-Dist: pandas; extra == 'dev'
47
40
  Provides-Extra: http
48
41
  Requires-Dist: aiohttp; extra == 'http'
49
42
  Provides-Extra: s3
50
43
  Requires-Dist: s3fs; extra == 's3'
51
- Provides-Extra: test
52
- Requires-Dist: aiohttp; extra == 'test'
53
- Requires-Dist: deflate; extra == 'test'
54
- Requires-Dist: fsspec-xrootd>=0.5.0; extra == 'test'
55
- Requires-Dist: isal; extra == 'test'
56
- Requires-Dist: minio; extra == 'test'
57
- Requires-Dist: paramiko; extra == 'test'
58
- Requires-Dist: pytest-rerunfailures; extra == 'test'
59
- Requires-Dist: pytest-timeout; extra == 'test'
60
- Requires-Dist: pytest>=6; extra == 'test'
61
- Requires-Dist: rangehttpserver; extra == 'test'
62
- Requires-Dist: requests; extra == 'test'
63
- Requires-Dist: s3fs; extra == 'test'
64
- Requires-Dist: scikit-hep-testdata; extra == 'test'
65
- Provides-Extra: test-pyodide
66
- Requires-Dist: pytest-pyodide; extra == 'test-pyodide'
67
- Requires-Dist: pytest-timeout; extra == 'test-pyodide'
68
- Requires-Dist: pytest>=6; extra == 'test-pyodide'
69
- Requires-Dist: scikit-hep-testdata; extra == 'test-pyodide'
70
44
  Provides-Extra: xrootd
71
45
  Requires-Dist: fsspec-xrootd>=0.5.0; extra == 'xrootd'
72
46
  Description-Content-Type: text/markdown
@@ -5,6 +5,42 @@ requires = [
5
5
  "hatch-vcs"
6
6
  ]
7
7
 
8
+ [dependency-groups]
9
+ dev = [
10
+ {include-group = "extra"},
11
+ {include-group = "test"}
12
+ ]
13
+ extra = [
14
+ "boost_histogram>=0.13",
15
+ "dask-awkward>=2025.5.0",
16
+ "dask[array,distributed]",
17
+ "hist>=1.2",
18
+ "pandas",
19
+ "awkward-pandas"
20
+ ]
21
+ test = [
22
+ "aiohttp",
23
+ "deflate",
24
+ "fsspec-xrootd>=0.5.0",
25
+ "isal",
26
+ "minio",
27
+ "paramiko",
28
+ "pytest-rerunfailures",
29
+ "rangehttpserver",
30
+ "requests",
31
+ "s3fs",
32
+ {include-group = "test-core"}
33
+ ]
34
+ test-core = [
35
+ "pytest-timeout",
36
+ "pytest>=6",
37
+ "scikit-hep-testdata"
38
+ ]
39
+ test-pyodide = [
40
+ "pytest-pyodide; python_version >='3.11'",
41
+ {include-group = "test-core"}
42
+ ]
43
+
8
44
  [lint.mccabe]
9
45
  max-complexity = 100
10
46
 
@@ -43,7 +79,7 @@ dependencies = [
43
79
  "numpy",
44
80
  "fsspec",
45
81
  "packaging",
46
- "typing_extensions>=4.1.0; python_version < \"3.11\""
82
+ "typing_extensions>=4.1.0; python_version < '3.11'"
47
83
  ]
48
84
  description = "ROOT I/O in pure Python and NumPy."
49
85
  dynamic = [
@@ -55,37 +91,8 @@ readme = "README.md"
55
91
  requires-python = ">=3.9"
56
92
 
57
93
  [project.optional-dependencies]
58
- dev = [
59
- "boost_histogram>=0.13",
60
- "dask-awkward>=2025.2.0",
61
- "dask[array,distributed]",
62
- "hist>=1.2",
63
- "pandas",
64
- "awkward-pandas"
65
- ]
66
94
  http = ["aiohttp"]
67
95
  s3 = ["s3fs"]
68
- test = [
69
- "isal",
70
- "deflate",
71
- "minio",
72
- "aiohttp",
73
- "fsspec-xrootd>=0.5.0",
74
- "s3fs",
75
- "paramiko",
76
- "pytest>=6",
77
- "pytest-timeout",
78
- "pytest-rerunfailures",
79
- "requests",
80
- "scikit-hep-testdata",
81
- "rangehttpserver"
82
- ]
83
- test-pyodide = [
84
- "pytest>=6",
85
- "pytest-pyodide",
86
- "pytest-timeout",
87
- "scikit-hep-testdata"
88
- ]
89
96
  xrootd = ["fsspec-xrootd>=0.5.0"]
90
97
 
91
98
  [project.urls]
@@ -20,6 +20,10 @@ import numpy
20
20
 
21
21
  import uproot
22
22
  from uproot._util import no_filter, unset
23
+ from uproot.behaviors.RNTuple import HasFields
24
+ from uproot.behaviors.RNTuple import (
25
+ _regularize_step_size as _RNTuple_regularize_step_size,
26
+ )
23
27
  from uproot.behaviors.TBranch import HasBranches, TBranch, _regularize_step_size
24
28
 
25
29
  if TYPE_CHECKING:
@@ -616,7 +620,13 @@ def _get_dask_array(
616
620
  recursive=recursive,
617
621
  filter_name=filter_name,
618
622
  filter_typename=filter_typename,
619
- filter_branch=real_filter_branch,
623
+ **{
624
+ (
625
+ "filter_field"
626
+ if isinstance(obj, HasFields)
627
+ else "filter_branch"
628
+ ): real_filter_branch
629
+ },
620
630
  full_paths=full_paths,
621
631
  ignore_duplicates=True,
622
632
  )
@@ -632,9 +642,7 @@ def _get_dask_array(
632
642
  assert steps_per_file is not unset # either assigned or assumed to be 1
633
643
  total_files = len(ttrees)
634
644
  total_entries = sum(ttree.num_entries for ttree in ttrees)
635
- step_size = max(
636
- 1, int(math.ceil(total_entries / (total_files * steps_per_file)))
637
- )
645
+ step_size = max(1, math.ceil(total_entries / (total_files * steps_per_file)))
638
646
 
639
647
  if count == 0:
640
648
  raise ValueError(
@@ -672,7 +680,7 @@ def _get_dask_array(
672
680
  )
673
681
  step_sum += int(ttree_step)
674
682
 
675
- entry_step = int(round(step_sum / len(ttrees)))
683
+ entry_step = round(step_sum / len(ttrees))
676
684
  assert entry_step >= 1
677
685
 
678
686
  for key in common_keys:
@@ -758,7 +766,11 @@ def _get_dask_array_delay_open(
758
766
  recursive=recursive,
759
767
  filter_name=filter_name,
760
768
  filter_typename=filter_typename,
761
- filter_branch=filter_branch,
769
+ **{
770
+ (
771
+ "filter_field" if isinstance(obj, HasFields) else "filter_branch"
772
+ ): filter_branch
773
+ },
762
774
  full_paths=full_paths,
763
775
  ignore_duplicates=True,
764
776
  )
@@ -927,6 +939,13 @@ class TrivialFormMappingInfo(ImplementsFormMappingInfo):
927
939
  how=tuple,
928
940
  )
929
941
 
942
+ if isinstance(tree, HasFields):
943
+ # Temporary workaround to have basic support for RNTuple
944
+ # This is needed since currently arrays only has top-level fields
945
+ # TODO: Ask people how they want this handled since the previous
946
+ # approach might not make sense for RNTuples
947
+ keys = [f for f in tree.field_names if f in keys]
948
+
930
949
  awkward = uproot.extras.awkward()
931
950
 
932
951
  # The subform generated by awkward.to_buffers() has different form keys
@@ -1474,7 +1493,13 @@ def _get_dak_array(
1474
1493
  recursive=recursive,
1475
1494
  filter_name=filter_name,
1476
1495
  filter_typename=filter_typename,
1477
- filter_branch=real_filter_branch,
1496
+ **{
1497
+ (
1498
+ "filter_field"
1499
+ if isinstance(obj, HasFields)
1500
+ else "filter_branch"
1501
+ ): real_filter_branch
1502
+ },
1478
1503
  full_paths=full_paths,
1479
1504
  ignore_duplicates=True,
1480
1505
  )
@@ -1490,9 +1515,7 @@ def _get_dak_array(
1490
1515
  assert steps_per_file is not unset # either assigned or assumed to be 1
1491
1516
  total_files = len(ttrees)
1492
1517
  total_entries = sum(ttree.num_entries for ttree in ttrees)
1493
- step_size = max(
1494
- 1, int(math.ceil(total_entries / (total_files * steps_per_file)))
1495
- )
1518
+ step_size = max(1, math.ceil(total_entries / (total_files * steps_per_file)))
1496
1519
 
1497
1520
  if count == 0:
1498
1521
  raise ValueError(
@@ -1519,16 +1542,23 @@ def _get_dak_array(
1519
1542
  entry_start = 0
1520
1543
  entry_stop = ttree.num_entries
1521
1544
 
1522
- branchid_interpretation = {}
1523
- for key in common_keys:
1524
- branch = ttree[key]
1525
- branchid_interpretation[branch.cache_key] = branch.interpretation
1526
- ttree_step = _regularize_step_size(
1527
- ttree, step_size, entry_start, entry_stop, branchid_interpretation
1528
- )
1529
- step_sum += int(ttree_step)
1545
+ if isinstance(ttree, HasFields):
1546
+ akform = ttree.to_akform(filter_name=common_keys)
1547
+ ttree_step = _RNTuple_regularize_step_size(
1548
+ ttree, akform, step_size, entry_start, entry_stop
1549
+ )
1550
+ step_sum += int(ttree_step)
1551
+ else:
1552
+ branchid_interpretation = {}
1553
+ for key in common_keys:
1554
+ branch = ttree[key]
1555
+ branchid_interpretation[branch.cache_key] = branch.interpretation
1556
+ ttree_step = _regularize_step_size(
1557
+ ttree, step_size, entry_start, entry_stop, branchid_interpretation
1558
+ )
1559
+ step_sum += int(ttree_step)
1530
1560
 
1531
- entry_step = int(round(step_sum / len(ttrees)))
1561
+ entry_step = round(step_sum / len(ttrees))
1532
1562
 
1533
1563
  divisions = [0]
1534
1564
  partition_args = []
@@ -1562,9 +1592,12 @@ which has {entry_stop} entries"""
1562
1592
  divisions.append(divisions[-1] + length)
1563
1593
  partition_args.append((i, start, stop))
1564
1594
 
1565
- base_form = _get_ttree_form(
1566
- awkward, ttrees[0], common_keys, interp_options.get("ak_add_doc")
1567
- )
1595
+ if isinstance(ttrees[0], HasFields):
1596
+ base_form = ttrees[0].to_akform(filter_name=common_keys)
1597
+ else:
1598
+ base_form = _get_ttree_form(
1599
+ awkward, ttrees[0], common_keys, interp_options.get("ak_add_doc")
1600
+ )
1568
1601
 
1569
1602
  if len(partition_args) == 0:
1570
1603
  divisions.append(0)
@@ -1632,7 +1665,11 @@ def _get_dak_array_delay_open(
1632
1665
  recursive=recursive,
1633
1666
  filter_name=filter_name,
1634
1667
  filter_typename=filter_typename,
1635
- filter_branch=filter_branch,
1668
+ **{
1669
+ (
1670
+ "filter_field" if isinstance(obj, HasFields) else "filter_branch"
1671
+ ): filter_branch
1672
+ },
1636
1673
  full_paths=full_paths,
1637
1674
  ignore_duplicates=True,
1638
1675
  )