uproot 5.7.1__tar.gz → 5.7.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 (334) hide show
  1. {uproot-5.7.1 → uproot-5.7.2}/.all-contributorsrc +18 -0
  2. {uproot-5.7.1 → uproot-5.7.2}/.github/workflows/build-test.yml +26 -2
  3. {uproot-5.7.1 → uproot-5.7.2}/.github/workflows/deploy.yml +2 -2
  4. {uproot-5.7.1 → uproot-5.7.2}/.github/workflows/upload-nightly-wheels.yml +1 -1
  5. {uproot-5.7.1 → uproot-5.7.2}/.pre-commit-config.yaml +3 -3
  6. {uproot-5.7.1 → uproot-5.7.2}/CONTRIBUTING.md +17 -0
  7. {uproot-5.7.1 → uproot-5.7.2}/PKG-INFO +10 -16
  8. {uproot-5.7.1 → uproot-5.7.2}/README.md +3 -11
  9. uproot-5.7.2/codecov.yml +22 -0
  10. {uproot-5.7.1 → uproot-5.7.2}/dev/make-models.py +10 -20
  11. {uproot-5.7.1 → uproot-5.7.2}/docs-sphinx/basic.rst +22 -0
  12. {uproot-5.7.1 → uproot-5.7.2}/docs-sphinx/make_changelog.py +2 -4
  13. {uproot-5.7.1 → uproot-5.7.2}/docs-sphinx/prepare_docstrings.py +10 -28
  14. {uproot-5.7.1 → uproot-5.7.2}/pyproject.toml +15 -7
  15. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/_awkwardforth.py +5 -4
  16. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/_dask.py +8 -18
  17. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/_util.py +3 -11
  18. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behavior.py +1 -0
  19. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/RNTuple.py +30 -23
  20. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/RooCurve.py +1 -0
  21. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/RooHist.py +1 -0
  22. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TAxis.py +1 -0
  23. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TBranch.py +2 -3
  24. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TBranchElement.py +1 -0
  25. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TDatime.py +1 -0
  26. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TGraph.py +1 -0
  27. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TGraphAsymmErrors.py +1 -0
  28. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TGraphErrors.py +1 -0
  29. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TH1.py +1 -0
  30. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TH2.py +1 -0
  31. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TH2Poly.py +1 -0
  32. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TH3.py +1 -0
  33. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TParameter.py +1 -0
  34. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TProfile.py +1 -0
  35. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TProfile2D.py +1 -0
  36. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TProfile3D.py +1 -0
  37. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/TTree.py +1 -0
  38. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/cache.py +1 -0
  39. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/compression.py +8 -12
  40. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/const.py +1 -0
  41. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/containers.py +3 -6
  42. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/deserialization.py +2 -3
  43. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/dynamic.py +1 -0
  44. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/exceptions.py +1 -0
  45. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/extras.py +19 -94
  46. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/interpretation/__init__.py +1 -0
  47. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/interpretation/custom.py +2 -3
  48. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/interpretation/grouped.py +3 -1
  49. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/interpretation/identify.py +3 -6
  50. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/interpretation/jagged.py +2 -1
  51. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/interpretation/known_forth/__init__.py +1 -0
  52. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/interpretation/library.py +11 -4
  53. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/interpretation/numerical.py +2 -3
  54. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/interpretation/objects.py +6 -14
  55. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/interpretation/strings.py +2 -2
  56. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/language/__init__.py +1 -0
  57. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/language/python.py +1 -0
  58. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/model.py +1 -0
  59. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/RNTuple.py +284 -88
  60. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TArray.py +2 -1
  61. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TAtt.py +2 -5
  62. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TBasket.py +1 -0
  63. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TBranch.py +1 -0
  64. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TClonesArray.py +1 -0
  65. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TDatime.py +2 -1
  66. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TGraph.py +1 -0
  67. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TH.py +1 -0
  68. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/THashList.py +1 -0
  69. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TLeaf.py +1 -0
  70. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TList.py +1 -0
  71. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TMatrixT.py +1 -0
  72. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TNamed.py +2 -1
  73. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TObjArray.py +1 -0
  74. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TObjString.py +3 -1
  75. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TObject.py +2 -1
  76. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TRef.py +2 -2
  77. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TString.py +1 -0
  78. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TTable.py +1 -0
  79. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TTime.py +1 -0
  80. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/TTree.py +1 -0
  81. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/pyroot.py +30 -19
  82. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/reading.py +3 -4
  83. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/serialization.py +1 -0
  84. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/source/chunk.py +4 -8
  85. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/streamers.py +1 -0
  86. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/version.py +2 -2
  87. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/writing/__init__.py +1 -0
  88. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/writing/_cascade.py +1 -0
  89. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/writing/_cascadentuple.py +31 -1
  90. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/writing/_cascadetree.py +33 -74
  91. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/writing/identify.py +9 -6
  92. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/writing/writable.py +27 -40
  93. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0010_start_streamers.py +28 -56
  94. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0011_generate_classes_from_streamers.py +2 -4
  95. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0014_all_ttree_versions.py +1 -4
  96. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0016_interpretations.py +16 -0
  97. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0406_write_a_ttree.py +1 -1
  98. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0412_write_multidimensional_numpy_to_ttree.py +6 -6
  99. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0420_pyroot_uproot_interoperability.py +21 -0
  100. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0962_rntuple_update.py +27 -0
  101. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1058_dask_awkward_report.py +1 -2
  102. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1395_rntuple_writing_lists_and_structs.py +5 -1
  103. uproot-5.7.2/tests/test_1510_rntuple_v1010.py +96 -0
  104. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1556_default_rntuple_writing.py +23 -4
  105. uproot-5.7.2/tests/test_1573_out_of_bounds_slicing.py +142 -0
  106. uproot-5.7.2/tests/test_1589_rntuple_inheritance.py +116 -0
  107. uproot-5.7.2/tests/test_1591_rntuple_read_to_numpy.py +28 -0
  108. {uproot-5.7.1 → uproot-5.7.2}/tests-cuda/test_0630_rntuple_basics.py +3 -9
  109. {uproot-5.7.1 → uproot-5.7.2}/tests-cuda/test_0662_rntuple_stl_containers.py +3 -9
  110. {uproot-5.7.1 → uproot-5.7.2}/tests-cuda/test_0962_rntuple_update.py +7 -11
  111. {uproot-5.7.1 → uproot-5.7.2}/tests-cuda/test_1159_rntuple_cluster_groups.py +3 -9
  112. {uproot-5.7.1 → uproot-5.7.2}/tests-cuda/test_1191_rntuple_fixes.py +4 -10
  113. {uproot-5.7.1 → uproot-5.7.2}/tests-cuda/test_1223_more_rntuple_types.py +3 -9
  114. {uproot-5.7.1 → uproot-5.7.2}/tests-cuda/test_1250_rntuple_improvements.py +3 -9
  115. {uproot-5.7.1 → uproot-5.7.2}/tests-cuda/test_1285_rntuple_multicluster_concatenation.py +3 -9
  116. {uproot-5.7.1 → uproot-5.7.2}/tests-cuda/test_1347_rntuple_floats_suppressed_cols.py +3 -9
  117. {uproot-5.7.1 → uproot-5.7.2}/tests-cuda/test_1411_rntuple_physlite_ATLAS.py +3 -9
  118. {uproot-5.7.1 → uproot-5.7.2}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  119. {uproot-5.7.1 → uproot-5.7.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  120. {uproot-5.7.1 → uproot-5.7.2}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  121. {uproot-5.7.1 → uproot-5.7.2}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  122. {uproot-5.7.1 → uproot-5.7.2}/.github/dependabot.yml +0 -0
  123. {uproot-5.7.1 → uproot-5.7.2}/.github/workflows/build-distributions.yml +0 -0
  124. {uproot-5.7.1 → uproot-5.7.2}/.github/workflows/semantic-pr-title.yml +0 -0
  125. {uproot-5.7.1 → uproot-5.7.2}/.gitignore +0 -0
  126. {uproot-5.7.1 → uproot-5.7.2}/.readthedocs.yml +0 -0
  127. {uproot-5.7.1 → uproot-5.7.2}/CITATION.cff +0 -0
  128. {uproot-5.7.1 → uproot-5.7.2}/LICENSE +0 -0
  129. {uproot-5.7.1 → uproot-5.7.2}/dev/custom-interpretation/README.md +0 -0
  130. {uproot-5.7.1 → uproot-5.7.2}/dev/example-objects.py +0 -0
  131. {uproot-5.7.1 → uproot-5.7.2}/docs-img/diagrams/abstraction-layers.png +0 -0
  132. {uproot-5.7.1 → uproot-5.7.2}/docs-img/diagrams/abstraction-layers.svg +0 -0
  133. {uproot-5.7.1 → uproot-5.7.2}/docs-img/diagrams/example-dask-graph.png +0 -0
  134. {uproot-5.7.1 → uproot-5.7.2}/docs-img/diagrams/uproot-awkward-timeline.png +0 -0
  135. {uproot-5.7.1 → uproot-5.7.2}/docs-img/diagrams/uproot-awkward-timeline.svg +0 -0
  136. {uproot-5.7.1 → uproot-5.7.2}/docs-img/logo/logo-300px-white.png +0 -0
  137. {uproot-5.7.1 → uproot-5.7.2}/docs-img/logo/logo-300px.png +0 -0
  138. {uproot-5.7.1 → uproot-5.7.2}/docs-img/logo/logo-600px.png +0 -0
  139. {uproot-5.7.1 → uproot-5.7.2}/docs-img/logo/logo.svg +0 -0
  140. {uproot-5.7.1 → uproot-5.7.2}/docs-img/photos/switcheroo.jpg +0 -0
  141. {uproot-5.7.1 → uproot-5.7.2}/docs-sphinx/_templates/breadcrumbs.html +0 -0
  142. {uproot-5.7.1 → uproot-5.7.2}/docs-sphinx/conf.py +0 -0
  143. {uproot-5.7.1 → uproot-5.7.2}/docs-sphinx/index.rst +0 -0
  144. {uproot-5.7.1 → uproot-5.7.2}/docs-sphinx/requirements.txt +0 -0
  145. {uproot-5.7.1 → uproot-5.7.2}/docs-sphinx/uproot3-to-4.rst +0 -0
  146. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/__init__.py +0 -0
  147. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/behaviors/__init__.py +0 -0
  148. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/interpretation/known_forth/atlas.py +0 -0
  149. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/models/__init__.py +0 -0
  150. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/sink/__init__.py +0 -0
  151. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/sink/file.py +0 -0
  152. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/source/__init__.py +0 -0
  153. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/source/coalesce.py +0 -0
  154. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/source/cufile_interface.py +0 -0
  155. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/source/cursor.py +0 -0
  156. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/source/file.py +0 -0
  157. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/source/fsspec.py +0 -0
  158. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/source/futures.py +0 -0
  159. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/source/http.py +0 -0
  160. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/source/object.py +0 -0
  161. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/source/xrootd.py +0 -0
  162. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/writing/_dask_write.py +0 -0
  163. {uproot-5.7.1 → uproot-5.7.2}/src/uproot/writing/interpret.py +0 -0
  164. {uproot-5.7.1 → uproot-5.7.2}/tests/__init__.py +0 -0
  165. {uproot-5.7.1 → uproot-5.7.2}/tests/conftest.py +0 -0
  166. {uproot-5.7.1 → uproot-5.7.2}/tests/samples/h_dynamic.pkl +0 -0
  167. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0001_source_class.py +0 -0
  168. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0006_notify_when_downloaded.py +0 -0
  169. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0007_single_chunk_interface.py +0 -0
  170. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0008_start_interpretation.py +0 -0
  171. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0009_nested_directories.py +0 -0
  172. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0013_rntuple_anchor.py +0 -0
  173. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0017_multi_basket_multi_branch_fetch.py +0 -0
  174. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0018_array_fetching_interface.py +0 -0
  175. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0022_number_of_branches.py +0 -0
  176. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0023_more_interpretations_1.py +0 -0
  177. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0023_ttree_versions.py +0 -0
  178. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0028_fallback_to_read_streamer.py +0 -0
  179. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0029_more_string_types.py +0 -0
  180. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0031_test_stl_containers.py +0 -0
  181. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0033_more_interpretations_2.py +0 -0
  182. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0034_generic_objects_in_ttrees.py +0 -0
  183. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0035_datatype_generality.py +0 -0
  184. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0038_memberwise_serialization.py +0 -0
  185. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0043_iterate_function.py +0 -0
  186. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0044_concatenate_function.py +0 -0
  187. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0046_histograms_bh_hist.py +0 -0
  188. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0053_parents_should_not_be_bases.py +0 -0
  189. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0058_detach_model_objects_from_files.py +0 -0
  190. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0066_fix_http_fallback_freeze.py +0 -0
  191. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0067_common_entry_offsets.py +0 -0
  192. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0081_dont_parse_colons.py +0 -0
  193. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0087_memberwise_splitting_not_implemented_messages.py +0 -0
  194. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0088_read_with_http.py +0 -0
  195. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0099_read_from_file_object.py +0 -0
  196. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0112_fix_pandas_with_cut.py +0 -0
  197. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0118_fix_name_fetch_again.py +0 -0
  198. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0123_atlas_issues.py +0 -0
  199. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0126_turn_unknown_emptyarrays_into_known_types.py +0 -0
  200. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0167_use_the_common_histogram_interface.py +0 -0
  201. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0172_allow_allocators_in_vector_typenames.py +0 -0
  202. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0173_empty_and_multiprocessing_bugs.py +0 -0
  203. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0182_complain_about_missing_files.py +0 -0
  204. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0194_fix_lost_cuts_in_iterate.py +0 -0
  205. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0220_contiguous_byte_ranges_in_http.py +0 -0
  206. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0228_read_TProfiles.py +0 -0
  207. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0240_read_TGraphAsymmErrors.py +0 -0
  208. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0278_specializations_for_TParameter.py +0 -0
  209. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0302_pickle.py +0 -0
  210. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0303_empty_jagged_array.py +0 -0
  211. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0320_start_working_on_ROOT_writing.py +0 -0
  212. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0322_writablefile_infrastructure.py +0 -0
  213. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0329_update_existing_root_files.py +0 -0
  214. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0335_empty_ttree_division_by_zero.py +0 -0
  215. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0341_manipulate_streamer_info.py +0 -0
  216. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0344_writabledirectory_can_read.py +0 -0
  217. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0345_bulk_copy_method.py +0 -0
  218. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0349_write_TObjString.py +0 -0
  219. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0350_read_RooCurve_RooHist.py +0 -0
  220. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0351_write_TList.py +0 -0
  221. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0352_write_THashList.py +0 -0
  222. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0384_move_behavior_of_and_fix_383.py +0 -0
  223. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0398_dimensions_in_leaflist.py +0 -0
  224. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0405_write_a_histogram.py +0 -0
  225. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0407_read_TDatime.py +0 -0
  226. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0414_write_jagged_arrays.py +0 -0
  227. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0416_writing_compressed_data.py +0 -0
  228. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0418_read_TTable.py +0 -0
  229. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0422_hist_integration.py +0 -0
  230. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0430_global_index_for_tuples_of_DataFrames.py +0 -0
  231. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0438_TClonesArray_is_not_AsGrouped.py +0 -0
  232. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0439_check_awkward_before_numpy.py +0 -0
  233. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0442_regular_TClonesArray.py +0 -0
  234. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0472_tstreamerinfo_for_ttree.py +0 -0
  235. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0475_remember_to_update_freesegments.py +0 -0
  236. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0484_manually_add_model_for_TMatrixTSym_double_.py +0 -0
  237. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0487_implement_asdtypeinplace.py +0 -0
  238. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0498_create_leaf_branch_in_extend.py +0 -0
  239. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0519_remove_memmap_copy.py +0 -0
  240. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0520_dynamic_classes_cant_be_abc_subclasses.py +0 -0
  241. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0569_fBits_is_4_bytes.py +0 -0
  242. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0576_unicode_in_names.py +0 -0
  243. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0578_dask_for_numpy.py +0 -0
  244. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0580_round_trip_for_no_flow_histograms.py +0 -0
  245. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0589_explicitly_interpret_RVec_type.py +0 -0
  246. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0603_dask_delayed_open.py +0 -0
  247. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0609_num_enteries_func.py +0 -0
  248. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0610_awkward_form.py +0 -0
  249. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0630_rntuple_basics.py +0 -0
  250. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0637_setup_tests_for_AwkwardForth.py +0 -0
  251. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0643_reading_vector_pair_TLorentzVector_int.py +0 -0
  252. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0651_implement_transformed_axis.py +0 -0
  253. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0652_dask_for_awkward.py +0 -0
  254. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0662_rntuple_stl_containers.py +0 -0
  255. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0692_fsspec_reading.py +0 -0
  256. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0692_fsspec_writing.py +0 -0
  257. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0700_dask_empty_arrays.py +0 -0
  258. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0705_rntuple_writing_metadata.py +0 -0
  259. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0750_avoid_empty_TBasket_issue.py +0 -0
  260. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0755_dask_awkward_column_projection.py +0 -0
  261. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0791_protect_uproot_project_columns_from_dask_node_names.py +0 -0
  262. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0798_DAOD_PHYSLITE.py +0 -0
  263. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0808_fix_awkward_form_for_AsStridedObjects.py +0 -0
  264. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0816_separate_AwkwardForth_machines_by_TBranch.py +0 -0
  265. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0832_ak_add_doc_should_also_add_to_typetracer.py +0 -0
  266. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0840_support_tleafG.py +0 -0
  267. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0841_fix_814.py +0 -0
  268. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0844_fix_delete_hist_from_root.py +0 -0
  269. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0852_fix_strided_interp_extra_offsets.py +0 -0
  270. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0870_writing_arrays_of_type_unknown_fix_822.py +0 -0
  271. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0876_uproot_dask_blind_steps.py +0 -0
  272. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0886_fix_awkward_form_breadcrumbs.py +0 -0
  273. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0910_fix_906_members_non_numerical_branches.py +0 -0
  274. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0911_fix_interp_array_non_numerical_objs_issue_880.py +0 -0
  275. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0912_fix_pandas_and_double_nested_vectors_issue_885.py +0 -0
  276. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0916_read_from_s3.py +0 -0
  277. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0927_dont_assume_uproot_in_global_scope_in_TPython_Eval.py +0 -0
  278. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0930_expressions_in_pandas.py +0 -0
  279. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0940_feat_add_TLeafC_string_support.py +0 -0
  280. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0965_inverted_axes_variances_hist_888.py +0 -0
  281. {uproot-5.7.1 → uproot-5.7.2}/tests/test_0976_path_object_split.py +0 -0
  282. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1000-write-TProfiles.py +0 -0
  283. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1043_const_std_string.py +0 -0
  284. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1063_dask_distributed.py +0 -0
  285. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1070_pandas_dataframe_building_performance_fix.py +0 -0
  286. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1085_dask_write.py +0 -0
  287. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1102_any_locks_in_models_must_be_transient.py +0 -0
  288. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1114_fix_attempt_to_concatenate_numpy_with_awkward.py +0 -0
  289. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1120_check_decompression_executor_pass_for_dask.py +0 -0
  290. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1127_fix_allow_colon_in_key_names.py +0 -0
  291. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1128_TGraph_writing.py +0 -0
  292. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1146_split_ranges_for_large_files_over_http.py +0 -0
  293. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1154_classof_using_relative_path.py +0 -0
  294. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1159_rntuple_cluster_groups.py +0 -0
  295. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1160_std_string_in_TDirectory.py +0 -0
  296. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1180_read_free_floating_vector_issue_1179.py +0 -0
  297. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1181_support_for_stl_list.py +0 -0
  298. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1182_add_support_for_bitset.py +0 -0
  299. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1183_ttime_custom.py +0 -0
  300. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1186_dtype_might_raise_ValueError.py +0 -0
  301. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1189_dask_failing_on_duplicate_keys.py +0 -0
  302. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1191_rntuple_fixes.py +0 -0
  303. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1198_coalesce.py +0 -0
  304. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1207_fix_title_of_TBranch_with_counter.py +0 -0
  305. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1212_dont_let_update_mess_up_file_version.py +0 -0
  306. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1221_AwkwardForth_bug.py +0 -0
  307. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1223_more_rntuple_types.py +0 -0
  308. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1229_const_in_typename.py +0 -0
  309. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1250_rntuple_improvements.py +0 -0
  310. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1254_test_threadpool_executor_for_dask.py +0 -0
  311. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1264_write_NumPy_array_of_strings.py +0 -0
  312. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1275_fix_TStreamerLoop_code_generation.py +0 -0
  313. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1282_add_known_forth_for_atlas.py +0 -0
  314. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1285_rntuple_multicluster_concatenation.py +0 -0
  315. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1318_dont_compare_big_endian_in_awkward.py +0 -0
  316. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1321_pandas_changed_api_again.py +0 -0
  317. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1347_rntuple_floats_suppressed_cols.py +0 -0
  318. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1356_basic_rntuple_writing.py +0 -0
  319. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1375_extend_ak_add_doc.py +0 -0
  320. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1393_TTree_virtual_arrays.py +0 -0
  321. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1406_improved_rntuple_methods.py +0 -0
  322. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1411_rntuple_physlite_ATLAS.py +0 -0
  323. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1412_rntuple_dask.py +0 -0
  324. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1465_ignorecase_extension.py +0 -0
  325. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1467_rntuple_akform_construction.py +0 -0
  326. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1476_rntuple_jagged_subfields.py +0 -0
  327. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1477_custom_interpretation.py +0 -0
  328. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1492_rntuple_hidden_keys.py +0 -0
  329. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1496_rntuple_write_index_arrays.py +0 -0
  330. {uproot-5.7.1 → uproot-5.7.2}/tests/test_1503_rntuple_virtual_arrays.py +0 -0
  331. {uproot-5.7.1 → uproot-5.7.2}/tests-wasm/__init__.py +0 -0
  332. {uproot-5.7.1 → uproot-5.7.2}/tests-wasm/test_1272_basic_functionality.py +0 -0
  333. {uproot-5.7.1 → uproot-5.7.2}/tests-wasm/test_1365_awkwardforth_reading.py +0 -0
  334. {uproot-5.7.1 → uproot-5.7.2}/tests-wasm/utils.py +0 -0
@@ -668,6 +668,24 @@
668
668
  "contributions": [
669
669
  "doc"
670
670
  ]
671
+ },
672
+ {
673
+ "login": "wdconinc",
674
+ "name": "Wouter Deconinck",
675
+ "avatar_url": "https://avatars.githubusercontent.com/u/4656391?v=4",
676
+ "profile": "https://github.com/wdconinc",
677
+ "contributions": [
678
+ "code"
679
+ ]
680
+ },
681
+ {
682
+ "login": "KaranSinghDev",
683
+ "name": "Karan Singh",
684
+ "avatar_url": "https://avatars.githubusercontent.com/u/102300776?v=4",
685
+ "profile": "https://github.com/KaranSinghDev",
686
+ "contributions": [
687
+ "code"
688
+ ]
671
689
  }
672
690
  ],
673
691
  "contributorsPerLine": 7,
@@ -233,16 +233,40 @@ jobs:
233
233
  python=3.13
234
234
  cuda-version=${{ matrix.cuda-version }}
235
235
  cuda-toolkit
236
+ cuda-python
237
+ cccl-python
236
238
  cupy
237
239
  kvikio
240
+ nvcomp
241
+ pytest-cov
242
+ ${{ matrix.cuda-version == 13 && 'root' || '' }}
238
243
 
239
244
  - name: Pip install the package
240
- run: pip install --group=test .
245
+ run: pip install --group=dev .
241
246
 
242
- - name: Run pytest
247
+ - name: Run only GPU tests
248
+ if: matrix.cuda-version != 13
243
249
  run: |
244
250
  python -m pytest -vv tests-cuda --reruns 10 --reruns-delay 30 --only-rerun "(?i)http|ssl|timeout|expired|connection|socket"
245
251
 
252
+ - name: Run full test suite and collect coverage
253
+ if: matrix.cuda-version == 13
254
+ run: |
255
+ python -m pytest -vv tests tests-cuda --reruns 10 --reruns-delay 30 --only-rerun "(?i)http|ssl|timeout|expired|connection|socket"\
256
+ --cov=uproot --cov-branch --cov-report=xml --junitxml=junit.xml -o junit_family=legacy
257
+
258
+ - name: Upload coverage reports to Codecov
259
+ if: matrix.cuda-version == 13
260
+ uses: codecov/codecov-action@v5
261
+ with:
262
+ token: ${{ secrets.CODECOV_TOKEN }}
263
+
264
+ - name: Upload test results to Codecov
265
+ if: ${{ !cancelled() }}
266
+ uses: codecov/test-results-action@v1
267
+ with:
268
+ token: ${{ secrets.CODECOV_TOKEN }}
269
+
246
270
  pass:
247
271
  if: always()
248
272
  needs: [build, vanilla-build, numpy1-build, pyodide-build]
@@ -29,7 +29,7 @@ jobs:
29
29
  contents: read
30
30
 
31
31
  steps:
32
- - uses: actions/download-artifact@v7
32
+ - uses: actions/download-artifact@v8
33
33
  with:
34
34
  name: Packages
35
35
  path: dist
@@ -38,7 +38,7 @@ jobs:
38
38
  run: ls -lha dist/
39
39
 
40
40
  - name: Generate artifact attestation for sdist and wheel
41
- uses: actions/attest-build-provenance@00014ed6ed5efc5b1ab7f7f34a39eb55d41aa4f8 # v3.1.0
41
+ uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0
42
42
  with:
43
43
  subject-path: dist/uproot-*
44
44
 
@@ -24,7 +24,7 @@ jobs:
24
24
  runs-on: ubuntu-latest
25
25
 
26
26
  steps:
27
- - uses: actions/download-artifact@v7
27
+ - uses: actions/download-artifact@v8
28
28
  with:
29
29
  name: Packages
30
30
  path: dist
@@ -19,18 +19,18 @@ repos:
19
19
  - id: trailing-whitespace
20
20
 
21
21
  - repo: https://github.com/psf/black-pre-commit-mirror
22
- rev: 25.12.0
22
+ rev: 26.1.0
23
23
  hooks:
24
24
  - id: black
25
25
 
26
26
  - repo: https://github.com/astral-sh/ruff-pre-commit
27
- rev: v0.14.10
27
+ rev: v0.15.4
28
28
  hooks:
29
29
  - id: ruff-check
30
30
  args: [--fix, --show-fixes]
31
31
 
32
32
  - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
33
- rev: v2.15.0
33
+ rev: v2.16.0
34
34
  hooks:
35
35
  - id: pretty-format-toml
36
36
  args: [--autofix]
@@ -107,6 +107,23 @@ Some tests may depend on having ROOT or XRootD installed. These are covered in t
107
107
 
108
108
  ---
109
109
 
110
+ ## 🤖 AI-assisted contributions
111
+
112
+ We welcome the use of AI tools as part of the development process. They can be valuable aids for drafting, refactoring, documentation, and exploration. However, contributions to Uproot require human judgment, contextual understanding, and familiarity with the project’s structure, goals, and standards.
113
+
114
+ When using AI tools:
115
+
116
+ * **You remain the author of the contribution.** Review, understand, and test all AI-assisted code or documentation before submitting it under your name. You should be able to explain and defend the changes on request.
117
+ * **Avoid fully automated submissions.** Issues or pull requests generated end-to-end by automated tools, without meaningful human review or intent, are not appropriate.
118
+ * **Be respectful of reviewers’ time.** Ensure that both the content of the PR and its description reflect your own understanding. Reviewers should not be expected to infer authorship or unknowingly interact with an AI during review.
119
+ * **Disclose significant AI assistance.** If AI tools were used for a substantial portion of the contribution, please note this in the PR description. (This guide is an example of that: we used ChatGPT to help with the writing, and in this comment, we acknowledge that fact.)
120
+
121
+ Contributors are responsible for the correctness, maintainability, and long-term impact of all submitted changes, regardless of whether AI tools were used.
122
+
123
+ Pull requests that do not meet these expectations may be closed without review.
124
+
125
+ ---
126
+
110
127
  ## 🐛 Reporting Bugs
111
128
 
112
129
  1. Check if the bug is already reported on the [issue tracker](https://github.com/scikit-hep/uproot/issues).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uproot
3
- Version: 5.7.1
3
+ Version: 5.7.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
@@ -31,15 +31,17 @@ Classifier: Topic :: Utilities
31
31
  Requires-Python: >=3.10
32
32
  Requires-Dist: awkward>=2.8.2
33
33
  Requires-Dist: cramjam>=2.5.0
34
- Requires-Dist: fsspec!=2025.7.0
34
+ Requires-Dist: fsspec!=2026.2.0
35
35
  Requires-Dist: numpy
36
36
  Requires-Dist: packaging
37
37
  Requires-Dist: typing-extensions>=4.1.0; python_version < '3.11'
38
38
  Requires-Dist: xxhash
39
- Provides-Extra: gds-cu11
40
- Requires-Dist: kvikio-cu11>=25.02.01; extra == 'gds-cu11'
41
39
  Provides-Extra: gds-cu12
42
- Requires-Dist: kvikio-cu12>=25.02.01; extra == 'gds-cu12'
40
+ Requires-Dist: kvikio-cu12; extra == 'gds-cu12'
41
+ Requires-Dist: nvidia-nvcomp-cu12; extra == 'gds-cu12'
42
+ Provides-Extra: gds-cu13
43
+ Requires-Dist: kvikio-cu13; extra == 'gds-cu13'
44
+ Requires-Dist: nvidia-nvcomp-cu13; extra == 'gds-cu13'
43
45
  Provides-Extra: http
44
46
  Requires-Dist: aiohttp; extra == 'http'
45
47
  Provides-Extra: s3
@@ -115,20 +117,10 @@ If you need to develop Awkward Array as well, see its [installation for develope
115
117
 
116
118
  # Dependencies
117
119
 
118
- **Uproot's only strict dependencies are NumPy and packaging.** Strict dependencies are automatically installed by pip (or conda).
119
-
120
- **[Awkward Array](https://anaconda.org/conda-forge/awkward) is highly recommended** and is automatically installed by pip (or conda), though it is _possible_ to use Uproot without it. If you need a minimal installation, pass `--no-deps` to pip and pass `library="np"` to every array-fetching function, or globally set `uproot.default_library` to get NumPy arrays instead of Awkward Arrays.
121
-
122
- * `awkward`: Uproot 5.x requires Awkward 2.x.
120
+ **Uproot's only strict dependencies are Awkward, Cramjam, xxhash, fsspec, NumPy, packaging.** Strict dependencies are automatically installed by pip (or conda).
123
121
 
124
122
  The following libraries are also useful in conjunction with Uproot, but are not necessary. If you call a function that needs one, you'll be prompted to install it. (Conda installs most of these automatically.)
125
123
 
126
- **For ROOT files, compressed different ways:**
127
-
128
- * `lz4` and `xxhash`: if reading ROOT files that have been LZ4-compressed.
129
- * `zstandard`: if reading ROOT files that have been ZSTD-compressed.
130
- * ZLIB and LZMA are built in (Python standard library).
131
-
132
124
  **For accessing remote files:**
133
125
 
134
126
  * `s3fs`: if reading files with `s3://` URIs.
@@ -255,6 +247,8 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
255
247
  <tr>
256
248
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/ianna"><img src="https://avatars.githubusercontent.com/u/1390682?v=4?s=100" width="100px;" alt="Ianna Osborne"/><br /><sub><b>Ianna Osborne</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=ianna" title="Code">💻</a></td>
257
249
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/Rachit931"><img src="https://avatars.githubusercontent.com/u/199397286?v=4?s=100" width="100px;" alt="Rachit931"/><br /><sub><b>Rachit931</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=Rachit931" title="Documentation">📖</a></td>
250
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/wdconinc"><img src="https://avatars.githubusercontent.com/u/4656391?v=4?s=100" width="100px;" alt="Wouter Deconinck"/><br /><sub><b>Wouter Deconinck</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=wdconinc" title="Code">💻</a></td>
251
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/KaranSinghDev"><img src="https://avatars.githubusercontent.com/u/102300776?v=4?s=100" width="100px;" alt="Karan Singh"/><br /><sub><b>Karan Singh</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=KaranSinghDev" title="Code">💻</a></td>
258
252
  </tr>
259
253
  </tbody>
260
254
  </table>
@@ -65,20 +65,10 @@ If you need to develop Awkward Array as well, see its [installation for develope
65
65
 
66
66
  # Dependencies
67
67
 
68
- **Uproot's only strict dependencies are NumPy and packaging.** Strict dependencies are automatically installed by pip (or conda).
69
-
70
- **[Awkward Array](https://anaconda.org/conda-forge/awkward) is highly recommended** and is automatically installed by pip (or conda), though it is _possible_ to use Uproot without it. If you need a minimal installation, pass `--no-deps` to pip and pass `library="np"` to every array-fetching function, or globally set `uproot.default_library` to get NumPy arrays instead of Awkward Arrays.
71
-
72
- * `awkward`: Uproot 5.x requires Awkward 2.x.
68
+ **Uproot's only strict dependencies are Awkward, Cramjam, xxhash, fsspec, NumPy, packaging.** Strict dependencies are automatically installed by pip (or conda).
73
69
 
74
70
  The following libraries are also useful in conjunction with Uproot, but are not necessary. If you call a function that needs one, you'll be prompted to install it. (Conda installs most of these automatically.)
75
71
 
76
- **For ROOT files, compressed different ways:**
77
-
78
- * `lz4` and `xxhash`: if reading ROOT files that have been LZ4-compressed.
79
- * `zstandard`: if reading ROOT files that have been ZSTD-compressed.
80
- * ZLIB and LZMA are built in (Python standard library).
81
-
82
72
  **For accessing remote files:**
83
73
 
84
74
  * `s3fs`: if reading files with `s3://` URIs.
@@ -205,6 +195,8 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
205
195
  <tr>
206
196
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/ianna"><img src="https://avatars.githubusercontent.com/u/1390682?v=4?s=100" width="100px;" alt="Ianna Osborne"/><br /><sub><b>Ianna Osborne</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=ianna" title="Code">💻</a></td>
207
197
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/Rachit931"><img src="https://avatars.githubusercontent.com/u/199397286?v=4?s=100" width="100px;" alt="Rachit931"/><br /><sub><b>Rachit931</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=Rachit931" title="Documentation">📖</a></td>
198
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/wdconinc"><img src="https://avatars.githubusercontent.com/u/4656391?v=4?s=100" width="100px;" alt="Wouter Deconinck"/><br /><sub><b>Wouter Deconinck</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=wdconinc" title="Code">💻</a></td>
199
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/KaranSinghDev"><img src="https://avatars.githubusercontent.com/u/102300776?v=4?s=100" width="100px;" alt="Karan Singh"/><br /><sub><b>Karan Singh</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=KaranSinghDev" title="Code">💻</a></td>
208
200
  </tr>
209
201
  </tbody>
210
202
  </table>
@@ -0,0 +1,22 @@
1
+ codecov:
2
+ require_ci_to_pass: true
3
+
4
+ comment:
5
+ layout: files
6
+
7
+ coverage:
8
+ status:
9
+ project:
10
+ default:
11
+ # 'auto' sets the target to our current coverage %
12
+ # 'threshold' allows a tiny 0.5% drop to prevent "flaky" failures
13
+ target: auto
14
+ threshold: 0.5%
15
+ patch:
16
+ default:
17
+ # Ensures 98% of NEW code added in the PR is covered
18
+ target: 98%
19
+ threshold: 0%
20
+
21
+ github_checks:
22
+ annotations: false
@@ -70,8 +70,7 @@ with uproot.open("example-objects.root") as f:
70
70
  for classname, class_version in superclasses:
71
71
  cls = f.file.class_named(classname, class_version)
72
72
  print(cls.class_code)
73
- print(
74
- f"""
73
+ print(f"""
75
74
  writable = True
76
75
 
77
76
  def _serialize(self, out, header, name):
@@ -90,16 +89,13 @@ class {uproot.model.classname_encode(classname)}(uproot.model.DispatchByVersion)
90
89
  \"\"\"
91
90
 
92
91
  known_versions = {{{class_version}: {cls.__name__}}}
93
- """
94
- )
92
+ """)
95
93
 
96
94
  for key in keys:
97
95
  obj = f[key]
98
96
  print(type(obj).class_code)
99
- print(
100
- """
101
- class_rawstreamers = ("""
102
- )
97
+ print("""
98
+ class_rawstreamers = (""")
103
99
  for streamer_name, streamer_version in f.file.streamer_dependencies(
104
100
  obj.classname, obj.class_version
105
101
  ):
@@ -110,16 +106,13 @@ class {uproot.model.classname_encode(classname)}(uproot.model.DispatchByVersion)
110
106
  ).tobytes()
111
107
  preamble = b"\xff\xff\xff\xffTStreamerInfo\x00"
112
108
  full = header + preamble + inner + b"\x00"
113
- print(
114
- f""" uproot._writing.RawStreamerInfo(
109
+ print(f""" uproot._writing.RawStreamerInfo(
115
110
  None,
116
111
  {full},
117
112
  {streamer_name!r},
118
113
  {streamer_version},
119
- ),"""
120
- )
121
- print(
122
- f""" )
114
+ ),""")
115
+ print(f""" )
123
116
  writable = True
124
117
 
125
118
  def _serialize(self, out, header, name):
@@ -131,19 +124,16 @@ class {uproot.model.classname_encode(classname)}(uproot.model.DispatchByVersion)
131
124
  num_bytes = sum(len(x) for x in out[where:])
132
125
  version = {obj.class_version}
133
126
  out.insert(where, uproot.serialization.numbytes_version(num_bytes, version))
134
- """
135
- )
127
+ """)
136
128
 
137
- print(
138
- f"""
129
+ print(f"""
139
130
  class {uproot.model.classname_encode(obj.classname)}(uproot.model.DispatchByVersion):
140
131
  \"\"\"
141
132
  A :doc:`uproot.model.DispatchByVersion` for ``{obj.classname}``.
142
133
  \"\"\"
143
134
 
144
135
  known_versions = {{{obj.class_version}: {type(obj).__name__}}}
145
- """
146
- )
136
+ """)
147
137
 
148
138
  for classname, _ in superclasses:
149
139
  print(
@@ -965,6 +965,28 @@ Note that for the last input we used the ``filter_field`` argument instead of ``
965
965
 
966
966
  There are still significant work required to achieve feature-parity with TTrees, but all the basic functionality is already implemented. We will continue to make the transition to RNTuples as seamless as possible.
967
967
 
968
+ GPU reading with CUDA support
969
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
970
+ Uproot supports GPU-based reading and processing of payload data on CUDA-capable GPUs for CUDA major versions 12 and 13. On systems that support GPU Direct Storage (GDS), raw payload data can be transferred directly from storage into GPU memory without a CPU bounce buffer. File metadata is still read by the CPU in both cases. GPU reading over HTTP is not supported.
971
+
972
+ For GPU reading of RNTuple data, the values ``backend="cuda"`` and ``interpreter="gpu"`` must be passed to ``RNTuple.arrays()``.
973
+
974
+ .. code-block:: python
975
+
976
+ >>> rntuple = uproot.open("ntpl001_staff_rntuple_v1-0-0-0.root:Staff")
977
+ >>> rntuple["Age"].array(backend="cuda", interpreter="gpu")
978
+ <Array [58, 63, 56, 61, 52, 60, ..., 51, 25, 35, 28, 43] type='3354 * int32'>
979
+ >>> rntuple.arrays(["Age", "Cost", "Nation"], backend="cuda", interpreter="gpu")
980
+ <Array [{Age: 58, Cost: 11975, ...}, ...] type='3354 * {Age: int32, Cost: i...'>
981
+
982
+ Uproot uses the ``kvikio`` library to perform GPU-efficient I/O using CuFile and POSIX APIs. ``kvikio`` provides runtime settings that can be configured, documented `here <https://docs.rapids.ai/api/kvikio/stable/runtime_settings/#>`__.
983
+
984
+ By default, ``KVIKIO_NTHREADS`` is 1. Increasing this value can improve I/O performance by allowing multiple threads to perform I/O concurrently (up to a system-dependent limit).
985
+
986
+ .. code-block:: python
987
+
988
+ >>> kvikio.defaults.set({"num_threads": 5})
989
+
968
990
  Opening a file for writing
969
991
  --------------------------
970
992
 
@@ -203,8 +203,7 @@ with open("changelog.rst", "w") as outfile:
203
203
 
204
204
  first = False
205
205
 
206
- outfile.write(
207
- """
206
+ outfile.write("""
208
207
  Earlier releases
209
208
  ================
210
209
 
@@ -217,5 +216,4 @@ This was to allow users to transition from Awkward Array 0.x and Uproot 3.x, whi
217
216
 
218
217
  .. image:: https://raw.githubusercontent.com/scikit-hep/uproot5/main/docs-img/diagrams/uproot-awkward-timeline.png
219
218
  :width: 100%
220
- """
221
- )
219
+ """)
@@ -74,23 +74,17 @@ latest_commit = (
74
74
  )
75
75
 
76
76
  main = open("main.toctree", "w")
77
- main.write(
78
- """.. toctree::
77
+ main.write(""".. toctree::
79
78
  :caption: Main Interface
80
79
  :hidden:
81
80
 
82
- {}""".format(
83
- "".join(f" {x}\n" for x in common)
84
- )
85
- )
81
+ {}""".format("".join(f" {x}\n" for x in common)))
86
82
  toctree = open("uproot.toctree", "w")
87
- toctree.write(
88
- """.. toctree::
83
+ toctree.write(""".. toctree::
89
84
  :caption: Detailed Reference
90
85
  :hidden:
91
86
 
92
- """
93
- )
87
+ """)
94
88
  toctree2 = None
95
89
 
96
90
 
@@ -115,9 +109,7 @@ def handle_module(modulename, module):
115
109
  {1}
116
110
 
117
111
  .. automodule:: {0}
118
- """.format(
119
- modulename, "=" * len(modulename)
120
- )
112
+ """.format(modulename, "=" * len(modulename))
121
113
  ensure(modulename + ".rst", content)
122
114
  if toctree2 is None:
123
115
  toctree.write(" " + modulename + " (module) <" + modulename + ">\n")
@@ -241,13 +233,9 @@ def handle_class(classname, cls):
241
233
  +-{}-+
242
234
  | **Inheritance order:** {}|
243
235
  +={}=+
244
- | """.format(
245
- "-" * longest_cell, " " * (longest_cell - 22), "=" * longest_cell
246
- )
236
+ | """.format("-" * longest_cell, " " * (longest_cell - 22), "=" * longest_cell)
247
237
  inheritance_footer = """ |
248
- +-{}-+""".format(
249
- "-" * longest_cell
250
- )
238
+ +-{}-+""".format("-" * longest_cell)
251
239
  inheritance = [x + " " * (longest_cell - len(x)) for x in inheritance]
252
240
  inheritance_sep = """ |
253
241
  | """
@@ -304,9 +292,7 @@ def handle_function(functionname, cls):
304
292
  Defined in {} on {}.
305
293
 
306
294
  .. autofunction:: {}
307
- """.format(
308
- title, "=" * len(title), link, linelink, functionname
309
- )
295
+ """.format(title, "=" * len(title), link, linelink, functionname)
310
296
  ensure(functionname + ".rst", content)
311
297
  if upfront or toctree2 is None:
312
298
  if functionname not in common:
@@ -321,15 +307,11 @@ for modulename in order:
321
307
 
322
308
  if modulename != "uproot":
323
309
  toctree2 = open(modulename + ".toctree", "w")
324
- toctree2.write(
325
- """.. toctree::
310
+ toctree2.write(""".. toctree::
326
311
  :caption: {}
327
312
  :hidden:
328
313
 
329
- """.format(
330
- modulename.replace("uproot.", "")
331
- )
332
- )
314
+ """.format(modulename.replace("uproot.", "")))
333
315
 
334
316
  handle_module(modulename, module)
335
317
  if module.__file__.endswith("__init__.py") and modulename != "uproot":
@@ -35,8 +35,14 @@ test-core = [
35
35
  "pytest>=6",
36
36
  "scikit-hep-testdata"
37
37
  ]
38
- test-gpu = [
39
- "kvikio-cu12>=25.02.01",
38
+ test-gpu-cu12 = [
39
+ "kvikio-cu12",
40
+ "nvidia-nvcomp-cu12",
41
+ {include-group = "test-core"}
42
+ ]
43
+ test-gpu-cu13 = [
44
+ "kvikio-cu13",
45
+ "nvidia-nvcomp-cu13",
40
46
  {include-group = "test-core"}
41
47
  ]
42
48
  test-pyodide = [
@@ -76,7 +82,7 @@ dependencies = [
76
82
  "cramjam>=2.5.0",
77
83
  "xxhash",
78
84
  "numpy",
79
- "fsspec!=2025.7.0",
85
+ "fsspec!=2026.2.0",
80
86
  "packaging",
81
87
  "typing_extensions>=4.1.0; python_version < '3.11'"
82
88
  ]
@@ -90,11 +96,13 @@ readme = "README.md"
90
96
  requires-python = ">=3.10"
91
97
 
92
98
  [project.optional-dependencies]
93
- GDS_cu11 = [
94
- "kvikio-cu11>=25.02.01"
99
+ gds-cu12 = [
100
+ "kvikio-cu12",
101
+ "nvidia-nvcomp-cu12"
95
102
  ]
96
- GDS_cu12 = [
97
- "kvikio-cu12>=25.02.01"
103
+ gds-cu13 = [
104
+ "kvikio-cu13",
105
+ "nvidia-nvcomp-cu13"
98
106
  ]
99
107
  http = ["aiohttp"]
100
108
  s3 = ["s3fs"]
@@ -3,6 +3,7 @@
3
3
  """
4
4
  This module defines utilities for adding components to the forth reader.
5
5
  """
6
+
6
7
  from __future__ import annotations
7
8
 
8
9
  import json
@@ -165,10 +166,10 @@ class Node:
165
166
  if len(self._children) != 0:
166
167
  children = "\n" + indent + " " + children + "\n" + indent
167
168
  return f"""Node({self._name!r},
168
- {indent} pre={''.join(self._pre_code)!r},
169
- {indent} post={''.join(self._post_code)!r},
170
- {indent} init={''.join(self._init_code)!r},
171
- {indent} header={''.join(self._header_code)!r},
169
+ {indent} pre={"".join(self._pre_code)!r},
170
+ {indent} post={"".join(self._post_code)!r},
171
+ {indent} init={"".join(self._init_code)!r},
172
+ {indent} header={"".join(self._header_code)!r},
172
173
  {indent} form_details={json.dumps(self._form_details)},
173
174
  {indent} field_name={self._field_name!r},
174
175
  {indent} children=[{children}])"""