uproot 5.6.2__tar.gz → 5.6.4__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 (322) hide show
  1. {uproot-5.6.2 → uproot-5.6.4}/.all-contributorsrc +18 -0
  2. {uproot-5.6.2 → uproot-5.6.4}/.github/workflows/deploy.yml +1 -1
  3. {uproot-5.6.2 → uproot-5.6.4}/.pre-commit-config.yaml +4 -3
  4. {uproot-5.6.2 → uproot-5.6.4}/CITATION.cff +5 -0
  5. {uproot-5.6.2 → uproot-5.6.4}/PKG-INFO +12 -3
  6. {uproot-5.6.2 → uproot-5.6.4}/README.md +6 -1
  7. {uproot-5.6.2 → uproot-5.6.4}/docs-sphinx/basic.rst +60 -0
  8. {uproot-5.6.2 → uproot-5.6.4}/pyproject.toml +15 -2
  9. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/_dask.py +2 -2
  10. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/_util.py +25 -2
  11. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/RNTuple.py +195 -73
  12. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TBranch.py +12 -6
  13. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/const.py +13 -10
  14. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/extras.py +48 -0
  15. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/RNTuple.py +779 -186
  16. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/pyroot.py +6 -5
  17. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/reading.py +10 -4
  18. uproot-5.6.4/src/uproot/source/cufile_interface.py +89 -0
  19. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/version.py +2 -2
  20. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/writing/_cascade.py +2 -4
  21. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/writing/_cascadentuple.py +118 -126
  22. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/writing/writable.py +18 -5
  23. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0705_rntuple_writing_metadata.py +5 -2
  24. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0976_path_object_split.py +7 -1
  25. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1191_rntuple_fixes.py +2 -1
  26. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1250_rntuple_improvements.py +14 -6
  27. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1356_basic_rntuple_writing.py +6 -1
  28. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1395_rntuple_writing_lists_and_structs.py +71 -1
  29. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1406_improved_rntuple_methods.py +38 -19
  30. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1411_rntuple_physlite_ATLAS.py +1 -1
  31. uproot-5.6.4/tests/test_1465_ignorecase_extension.py +17 -0
  32. uproot-5.6.4/tests/test_1467_rntuple_akform_construction.py +21 -0
  33. uproot-5.6.4/tests/test_1476_rntuple_jagged_subfields.py +120 -0
  34. uproot-5.6.4/tests-cuda/test_0630_rntuple_basics.py +63 -0
  35. uproot-5.6.4/tests-cuda/test_0662_rntuple_stl_containers.py +91 -0
  36. uproot-5.6.4/tests-cuda/test_0962_rntuple_update.py +62 -0
  37. uproot-5.6.4/tests-cuda/test_1159_rntuple_cluster_groups.py +40 -0
  38. uproot-5.6.4/tests-cuda/test_1191_rntuple_fixes.py +94 -0
  39. uproot-5.6.4/tests-cuda/test_1223_more_rntuple_types.py +122 -0
  40. uproot-5.6.4/tests-cuda/test_1250_rntuple_improvements.py +91 -0
  41. uproot-5.6.4/tests-cuda/test_1285_rntuple_multicluster_concatenation.py +31 -0
  42. uproot-5.6.4/tests-cuda/test_1347_rntuple_floats_suppressed_cols.py +183 -0
  43. uproot-5.6.4/tests-cuda/test_1411_rntuple_physlite_ATLAS.py +132 -0
  44. {uproot-5.6.2 → uproot-5.6.4}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  45. {uproot-5.6.2 → uproot-5.6.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  46. {uproot-5.6.2 → uproot-5.6.4}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  47. {uproot-5.6.2 → uproot-5.6.4}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  48. {uproot-5.6.2 → uproot-5.6.4}/.github/dependabot.yml +0 -0
  49. {uproot-5.6.2 → uproot-5.6.4}/.github/workflows/build-distributions.yml +0 -0
  50. {uproot-5.6.2 → uproot-5.6.4}/.github/workflows/build-test.yml +0 -0
  51. {uproot-5.6.2 → uproot-5.6.4}/.github/workflows/semantic-pr-title.yml +0 -0
  52. {uproot-5.6.2 → uproot-5.6.4}/.github/workflows/upload-nightly-wheels.yml +0 -0
  53. {uproot-5.6.2 → uproot-5.6.4}/.gitignore +0 -0
  54. {uproot-5.6.2 → uproot-5.6.4}/.readthedocs.yml +0 -0
  55. {uproot-5.6.2 → uproot-5.6.4}/CONTRIBUTING.md +0 -0
  56. {uproot-5.6.2 → uproot-5.6.4}/LICENSE +0 -0
  57. {uproot-5.6.2 → uproot-5.6.4}/dev/example-objects.py +0 -0
  58. {uproot-5.6.2 → uproot-5.6.4}/dev/make-models.py +0 -0
  59. {uproot-5.6.2 → uproot-5.6.4}/docs-img/diagrams/abstraction-layers.png +0 -0
  60. {uproot-5.6.2 → uproot-5.6.4}/docs-img/diagrams/abstraction-layers.svg +0 -0
  61. {uproot-5.6.2 → uproot-5.6.4}/docs-img/diagrams/example-dask-graph.png +0 -0
  62. {uproot-5.6.2 → uproot-5.6.4}/docs-img/diagrams/uproot-awkward-timeline.png +0 -0
  63. {uproot-5.6.2 → uproot-5.6.4}/docs-img/diagrams/uproot-awkward-timeline.svg +0 -0
  64. {uproot-5.6.2 → uproot-5.6.4}/docs-img/logo/logo-300px-white.png +0 -0
  65. {uproot-5.6.2 → uproot-5.6.4}/docs-img/logo/logo-300px.png +0 -0
  66. {uproot-5.6.2 → uproot-5.6.4}/docs-img/logo/logo-600px.png +0 -0
  67. {uproot-5.6.2 → uproot-5.6.4}/docs-img/logo/logo.svg +0 -0
  68. {uproot-5.6.2 → uproot-5.6.4}/docs-img/photos/switcheroo.jpg +0 -0
  69. {uproot-5.6.2 → uproot-5.6.4}/docs-sphinx/_templates/breadcrumbs.html +0 -0
  70. {uproot-5.6.2 → uproot-5.6.4}/docs-sphinx/conf.py +0 -0
  71. {uproot-5.6.2 → uproot-5.6.4}/docs-sphinx/index.rst +0 -0
  72. {uproot-5.6.2 → uproot-5.6.4}/docs-sphinx/make_changelog.py +0 -0
  73. {uproot-5.6.2 → uproot-5.6.4}/docs-sphinx/prepare_docstrings.py +0 -0
  74. {uproot-5.6.2 → uproot-5.6.4}/docs-sphinx/requirements.txt +0 -0
  75. {uproot-5.6.2 → uproot-5.6.4}/docs-sphinx/uproot3-to-4.rst +0 -0
  76. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/__init__.py +0 -0
  77. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/_awkwardforth.py +0 -0
  78. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behavior.py +0 -0
  79. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/RooCurve.py +0 -0
  80. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/RooHist.py +0 -0
  81. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TAxis.py +0 -0
  82. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TBranchElement.py +0 -0
  83. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TDatime.py +0 -0
  84. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TGraph.py +0 -0
  85. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TGraphAsymmErrors.py +0 -0
  86. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TGraphErrors.py +0 -0
  87. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TH1.py +0 -0
  88. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TH2.py +0 -0
  89. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TH2Poly.py +0 -0
  90. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TH3.py +0 -0
  91. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TParameter.py +0 -0
  92. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TProfile.py +0 -0
  93. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TProfile2D.py +0 -0
  94. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TProfile3D.py +0 -0
  95. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/TTree.py +0 -0
  96. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/behaviors/__init__.py +0 -0
  97. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/cache.py +0 -0
  98. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/compression.py +0 -0
  99. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/containers.py +0 -0
  100. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/deserialization.py +0 -0
  101. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/dynamic.py +0 -0
  102. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/exceptions.py +0 -0
  103. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/interpretation/__init__.py +0 -0
  104. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/interpretation/grouped.py +0 -0
  105. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/interpretation/identify.py +0 -0
  106. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/interpretation/jagged.py +0 -0
  107. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/interpretation/known_forth/__init__.py +0 -0
  108. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/interpretation/known_forth/atlas.py +0 -0
  109. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/interpretation/library.py +0 -0
  110. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/interpretation/numerical.py +0 -0
  111. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/interpretation/objects.py +0 -0
  112. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/interpretation/strings.py +0 -0
  113. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/language/__init__.py +0 -0
  114. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/language/python.py +0 -0
  115. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/model.py +0 -0
  116. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TArray.py +0 -0
  117. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TAtt.py +0 -0
  118. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TBasket.py +0 -0
  119. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TBranch.py +0 -0
  120. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TClonesArray.py +0 -0
  121. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TDatime.py +0 -0
  122. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TGraph.py +0 -0
  123. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TH.py +0 -0
  124. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/THashList.py +0 -0
  125. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TLeaf.py +0 -0
  126. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TList.py +0 -0
  127. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TMatrixT.py +0 -0
  128. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TNamed.py +0 -0
  129. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TObjArray.py +0 -0
  130. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TObjString.py +0 -0
  131. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TObject.py +0 -0
  132. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TRef.py +0 -0
  133. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TString.py +0 -0
  134. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TTable.py +0 -0
  135. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TTime.py +0 -0
  136. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/TTree.py +0 -0
  137. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/models/__init__.py +0 -0
  138. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/serialization.py +0 -0
  139. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/sink/__init__.py +0 -0
  140. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/sink/file.py +0 -0
  141. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/source/__init__.py +0 -0
  142. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/source/chunk.py +0 -0
  143. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/source/coalesce.py +0 -0
  144. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/source/cursor.py +0 -0
  145. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/source/file.py +0 -0
  146. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/source/fsspec.py +0 -0
  147. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/source/futures.py +0 -0
  148. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/source/http.py +0 -0
  149. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/source/object.py +0 -0
  150. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/source/s3.py +0 -0
  151. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/source/xrootd.py +0 -0
  152. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/streamers.py +0 -0
  153. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/writing/__init__.py +0 -0
  154. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/writing/_cascadetree.py +0 -0
  155. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/writing/_dask_write.py +0 -0
  156. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/writing/identify.py +0 -0
  157. {uproot-5.6.2 → uproot-5.6.4}/src/uproot/writing/interpret.py +0 -0
  158. {uproot-5.6.2 → uproot-5.6.4}/tests/__init__.py +0 -0
  159. {uproot-5.6.2 → uproot-5.6.4}/tests/conftest.py +0 -0
  160. {uproot-5.6.2 → uproot-5.6.4}/tests/samples/h_dynamic.pkl +0 -0
  161. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0001_source_class.py +0 -0
  162. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0006_notify_when_downloaded.py +0 -0
  163. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0007_single_chunk_interface.py +0 -0
  164. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0008_start_interpretation.py +0 -0
  165. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0009_nested_directories.py +0 -0
  166. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0010_start_streamers.py +0 -0
  167. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0011_generate_classes_from_streamers.py +0 -0
  168. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0013_rntuple_anchor.py +0 -0
  169. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0014_all_ttree_versions.py +0 -0
  170. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0016_interpretations.py +0 -0
  171. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0017_multi_basket_multi_branch_fetch.py +0 -0
  172. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0018_array_fetching_interface.py +0 -0
  173. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0022_number_of_branches.py +0 -0
  174. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0023_more_interpretations_1.py +0 -0
  175. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0023_ttree_versions.py +0 -0
  176. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0028_fallback_to_read_streamer.py +0 -0
  177. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0029_more_string_types.py +0 -0
  178. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0031_test_stl_containers.py +0 -0
  179. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0033_more_interpretations_2.py +0 -0
  180. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0034_generic_objects_in_ttrees.py +0 -0
  181. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0035_datatype_generality.py +0 -0
  182. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0038_memberwise_serialization.py +0 -0
  183. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0043_iterate_function.py +0 -0
  184. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0044_concatenate_function.py +0 -0
  185. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0046_histograms_bh_hist.py +0 -0
  186. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0053_parents_should_not_be_bases.py +0 -0
  187. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0058_detach_model_objects_from_files.py +0 -0
  188. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0066_fix_http_fallback_freeze.py +0 -0
  189. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0067_common_entry_offsets.py +0 -0
  190. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0081_dont_parse_colons.py +0 -0
  191. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0087_memberwise_splitting_not_implemented_messages.py +0 -0
  192. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0088_read_with_http.py +0 -0
  193. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0099_read_from_file_object.py +0 -0
  194. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0112_fix_pandas_with_cut.py +0 -0
  195. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0118_fix_name_fetch_again.py +0 -0
  196. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0123_atlas_issues.py +0 -0
  197. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0126_turn_unknown_emptyarrays_into_known_types.py +0 -0
  198. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0167_use_the_common_histogram_interface.py +0 -0
  199. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0172_allow_allocators_in_vector_typenames.py +0 -0
  200. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0173_empty_and_multiprocessing_bugs.py +0 -0
  201. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0182_complain_about_missing_files.py +0 -0
  202. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0194_fix_lost_cuts_in_iterate.py +0 -0
  203. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0220_contiguous_byte_ranges_in_http.py +0 -0
  204. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0228_read_TProfiles.py +0 -0
  205. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0240_read_TGraphAsymmErrors.py +0 -0
  206. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0278_specializations_for_TParameter.py +0 -0
  207. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0302_pickle.py +0 -0
  208. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0303_empty_jagged_array.py +0 -0
  209. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0320_start_working_on_ROOT_writing.py +0 -0
  210. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0322_writablefile_infrastructure.py +0 -0
  211. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0329_update_existing_root_files.py +0 -0
  212. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0335_empty_ttree_division_by_zero.py +0 -0
  213. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0341_manipulate_streamer_info.py +0 -0
  214. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0344_writabledirectory_can_read.py +0 -0
  215. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0345_bulk_copy_method.py +0 -0
  216. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0349_write_TObjString.py +0 -0
  217. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0350_read_RooCurve_RooHist.py +0 -0
  218. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0351_write_TList.py +0 -0
  219. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0352_write_THashList.py +0 -0
  220. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0384_move_behavior_of_and_fix_383.py +0 -0
  221. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0398_dimensions_in_leaflist.py +0 -0
  222. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0405_write_a_histogram.py +0 -0
  223. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0406_write_a_ttree.py +0 -0
  224. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0407_read_TDatime.py +0 -0
  225. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0412_write_multidimensional_numpy_to_ttree.py +0 -0
  226. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0414_write_jagged_arrays.py +0 -0
  227. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0416_writing_compressed_data.py +0 -0
  228. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0418_read_TTable.py +0 -0
  229. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0420_pyroot_uproot_interoperability.py +0 -0
  230. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0422_hist_integration.py +0 -0
  231. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0430_global_index_for_tuples_of_DataFrames.py +0 -0
  232. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0438_TClonesArray_is_not_AsGrouped.py +0 -0
  233. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0439_check_awkward_before_numpy.py +0 -0
  234. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0442_regular_TClonesArray.py +0 -0
  235. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0472_tstreamerinfo_for_ttree.py +0 -0
  236. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0475_remember_to_update_freesegments.py +0 -0
  237. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0484_manually_add_model_for_TMatrixTSym_double_.py +0 -0
  238. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0487_implement_asdtypeinplace.py +0 -0
  239. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0498_create_leaf_branch_in_extend.py +0 -0
  240. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0519_remove_memmap_copy.py +0 -0
  241. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0520_dynamic_classes_cant_be_abc_subclasses.py +0 -0
  242. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0569_fBits_is_4_bytes.py +0 -0
  243. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0576_unicode_in_names.py +0 -0
  244. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0578_dask_for_numpy.py +0 -0
  245. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0580_round_trip_for_no_flow_histograms.py +0 -0
  246. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0589_explicitly_interpret_RVec_type.py +0 -0
  247. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0603_dask_delayed_open.py +0 -0
  248. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0609_num_enteries_func.py +0 -0
  249. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0610_awkward_form.py +0 -0
  250. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0630_rntuple_basics.py +0 -0
  251. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0637_setup_tests_for_AwkwardForth.py +0 -0
  252. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0643_reading_vector_pair_TLorentzVector_int.py +0 -0
  253. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0651_implement_transformed_axis.py +0 -0
  254. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0652_dask_for_awkward.py +0 -0
  255. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0662_rntuple_stl_containers.py +0 -0
  256. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0692_fsspec_reading.py +0 -0
  257. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0692_fsspec_writing.py +0 -0
  258. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0700_dask_empty_arrays.py +0 -0
  259. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0750_avoid_empty_TBasket_issue.py +0 -0
  260. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0755_dask_awkward_column_projection.py +0 -0
  261. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0791_protect_uproot_project_columns_from_dask_node_names.py +0 -0
  262. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0798_DAOD_PHYSLITE.py +0 -0
  263. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0808_fix_awkward_form_for_AsStridedObjects.py +0 -0
  264. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0816_separate_AwkwardForth_machines_by_TBranch.py +0 -0
  265. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0832_ak_add_doc_should_also_add_to_typetracer.py +0 -0
  266. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0840_support_tleafG.py +0 -0
  267. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0841_fix_814.py +0 -0
  268. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0844_fix_delete_hist_from_root.py +0 -0
  269. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0852_fix_strided_interp_extra_offsets.py +0 -0
  270. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0870_writing_arrays_of_type_unknown_fix_822.py +0 -0
  271. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0876_uproot_dask_blind_steps.py +0 -0
  272. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0886_fix_awkward_form_breadcrumbs.py +0 -0
  273. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0910_fix_906_members_non_numerical_branches.py +0 -0
  274. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0911_fix_interp_array_non_numerical_objs_issue_880.py +0 -0
  275. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0912_fix_pandas_and_double_nested_vectors_issue_885.py +0 -0
  276. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0916_read_from_s3.py +0 -0
  277. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0927_dont_assume_uproot_in_global_scope_in_TPython_Eval.py +0 -0
  278. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0930_expressions_in_pandas.py +0 -0
  279. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0940_feat_add_TLeafC_string_support.py +0 -0
  280. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0962_rntuple_update.py +0 -0
  281. {uproot-5.6.2 → uproot-5.6.4}/tests/test_0965_inverted_axes_variances_hist_888.py +0 -0
  282. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1000-write-TProfiles.py +0 -0
  283. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1043_const_std_string.py +0 -0
  284. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1058_dask_awkward_report.py +0 -0
  285. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1063_dask_distributed.py +0 -0
  286. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1070_pandas_dataframe_building_performance_fix.py +0 -0
  287. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1085_dask_write.py +0 -0
  288. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1102_any_locks_in_models_must_be_transient.py +0 -0
  289. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1114_fix_attempt_to_concatenate_numpy_with_awkward.py +0 -0
  290. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1120_check_decompression_executor_pass_for_dask.py +0 -0
  291. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1127_fix_allow_colon_in_key_names.py +0 -0
  292. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1128_TGraph_writing.py +0 -0
  293. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1146_split_ranges_for_large_files_over_http.py +0 -0
  294. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1154_classof_using_relative_path.py +0 -0
  295. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1159_rntuple_cluster_groups.py +0 -0
  296. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1160_std_string_in_TDirectory.py +0 -0
  297. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1180_read_free_floating_vector_issue_1179.py +0 -0
  298. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1181_support_for_stl_list.py +0 -0
  299. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1182_add_support_for_bitset.py +0 -0
  300. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1183_ttime_custom.py +0 -0
  301. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1186_dtype_might_raise_ValueError.py +0 -0
  302. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1189_dask_failing_on_duplicate_keys.py +0 -0
  303. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1198_coalesce.py +0 -0
  304. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1207_fix_title_of_TBranch_with_counter.py +0 -0
  305. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1212_dont_let_update_mess_up_file_version.py +0 -0
  306. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1221_AwkwardForth_bug.py +0 -0
  307. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1223_more_rntuple_types.py +0 -0
  308. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1229_const_in_typename.py +0 -0
  309. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1254_test_threadpool_executor_for_dask.py +0 -0
  310. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1264_write_NumPy_array_of_strings.py +0 -0
  311. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1275_fix_TStreamerLoop_code_generation.py +0 -0
  312. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1282_add_known_forth_for_atlas.py +0 -0
  313. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1285_rntuple_multicluster_concatenation.py +0 -0
  314. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1318_dont_compare_big_endian_in_awkward.py +0 -0
  315. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1321_pandas_changed_api_again.py +0 -0
  316. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1347_rntuple_floats_suppressed_cols.py +0 -0
  317. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1375_extend_ak_add_doc.py +0 -0
  318. {uproot-5.6.2 → uproot-5.6.4}/tests/test_1412_rntuple_dask.py +0 -0
  319. {uproot-5.6.2 → uproot-5.6.4}/tests-wasm/__init__.py +0 -0
  320. {uproot-5.6.2 → uproot-5.6.4}/tests-wasm/test_1272_basic_functionality.py +0 -0
  321. {uproot-5.6.2 → uproot-5.6.4}/tests-wasm/test_1365_awkwardforth_reading.py +0 -0
  322. {uproot-5.6.2 → uproot-5.6.4}/tests-wasm/utils.py +0 -0
@@ -623,6 +623,24 @@
623
623
  "contributions": [
624
624
  "code"
625
625
  ]
626
+ },
627
+ {
628
+ "login": "fstrug",
629
+ "name": "fstrug",
630
+ "avatar_url": "https://avatars.githubusercontent.com/u/84533949?v=4",
631
+ "profile": "https://github.com/fstrug",
632
+ "contributions": [
633
+ "code"
634
+ ]
635
+ },
636
+ {
637
+ "login": "zlmarshall",
638
+ "name": "Zach Marshall",
639
+ "avatar_url": "https://avatars.githubusercontent.com/u/10702398?v=4",
640
+ "profile": "https://github.com/zlmarshall",
641
+ "contributions": [
642
+ "code"
643
+ ]
626
644
  }
627
645
  ],
628
646
  "contributorsPerLine": 7,
@@ -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@db473fddc028af60658334401dc6fa3ffd8669fd # v2.3.0
41
+ uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0
42
42
  with:
43
43
  subject-path: dist/uproot-*
44
44
 
@@ -1,6 +1,7 @@
1
1
  ci:
2
2
  autoupdate_commit_msg: 'chore: update pre-commit hooks'
3
3
  autofix_commit_msg: 'style: pre-commit fixes'
4
+ autoupdate_schedule: monthly
4
5
 
5
6
  repos:
6
7
  - repo: https://github.com/pre-commit/pre-commit-hooks
@@ -23,20 +24,20 @@ repos:
23
24
  - id: black
24
25
 
25
26
  - repo: https://github.com/astral-sh/ruff-pre-commit
26
- rev: v0.11.9
27
+ rev: v0.12.2
27
28
  hooks:
28
29
  - id: ruff
29
30
  args: [--fix, --show-fixes]
30
31
 
31
32
 
32
33
  - repo: https://github.com/asottile/pyupgrade
33
- rev: v3.19.1
34
+ rev: v3.20.0
34
35
  hooks:
35
36
  - id: pyupgrade
36
37
  args: [--py38-plus]
37
38
 
38
39
  - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
39
- rev: v2.14.0
40
+ rev: v2.15.0
40
41
  hooks:
41
42
  - id: pretty-format-toml
42
43
  args: [--autofix]
@@ -54,3 +54,8 @@ authors:
54
54
  affiliation: "Santa Cruz Institute for Particle Physics"
55
55
  orcid: "https://orcid.org/0000-0001-6616-3433"
56
56
  email: "gstark@cern.ch"
57
+ - family-names: "Rios Tascon"
58
+ given-names: "Andres"
59
+ affiliation: "Princeton University"
60
+ orcid: "https://orcid.org/0000-0003-3282-2634"
61
+ email: "ariostas@princeton.edu"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uproot
3
- Version: 5.6.2
3
+ Version: 5.6.4
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
@@ -32,11 +32,15 @@ Classifier: Topic :: Utilities
32
32
  Requires-Python: >=3.9
33
33
  Requires-Dist: awkward>=2.4.6
34
34
  Requires-Dist: cramjam>=2.5.0
35
- Requires-Dist: fsspec
35
+ Requires-Dist: fsspec!=2025.7.0
36
36
  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: gds-cu11
41
+ Requires-Dist: kvikio-cu11>=25.02.01; extra == 'gds-cu11'
42
+ Provides-Extra: gds-cu12
43
+ Requires-Dist: kvikio-cu12>=25.02.01; extra == 'gds-cu12'
40
44
  Provides-Extra: http
41
45
  Requires-Dist: aiohttp; extra == 'http'
42
46
  Provides-Extra: s3
@@ -54,11 +58,14 @@ Description-Content-Type: text/markdown
54
58
  [![Continuous integration tests](https://github.com/scikit-hep/uproot5/actions/workflows/build-test.yml/badge.svg)](https://github.com/scikit-hep/uproot5/actions)
55
59
 
56
60
  [![Scikit-HEP](https://scikit-hep.org/assets/images/Scikit--HEP-Project-blue.svg)](https://scikit-hep.org/)
57
- [![NSF-1836650](https://img.shields.io/badge/NSF-1836650-blue.svg)](https://nsf.gov/awardsearch/showAward?AWD_ID=1836650)
58
61
  [![DOI 10.5281/zenodo.4340632](https://zenodo.org/badge/DOI/10.5281/zenodo.4340632.svg)](https://doi.org/10.5281/zenodo.4340632)
59
62
  [![Documentation](https://img.shields.io/badge/docs-online-success)](https://uproot.readthedocs.io/)
60
63
  [![Gitter](https://img.shields.io/badge/chat-online-success)](https://gitter.im/Scikit-HEP/uproot)
61
64
 
65
+ [![NSF-1836650](https://img.shields.io/badge/NSF-1836650-blue.svg)](https://nsf.gov/awardsearch/showAward?AWD_ID=1836650)
66
+ [![NSF-2121686](https://img.shields.io/badge/NSF-2121686-blue.svg)](https://nsf.gov/awardsearch/showAward?AWD_ID=2121686)
67
+ [![NSF-2323298](https://img.shields.io/badge/NSF-2323298-blue.svg)](https://nsf.gov/awardsearch/showAward?AWD_ID=2323298)
68
+
62
69
  Uproot is a library for reading and writing [ROOT files](https://root.cern/) in pure Python and NumPy.
63
70
 
64
71
  Unlike the standard C++ ROOT implementation, Uproot is only an I/O library, primarily intended to stream data into machine learning libraries in Python. Unlike PyROOT and root_numpy, Uproot does not depend on C++ ROOT. Instead, it uses Numpy to cast blocks of data from the ROOT file as Numpy arrays.
@@ -242,6 +249,8 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
242
249
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/rossodisera"><img src="https://avatars.githubusercontent.com/u/46961664?v=4?s=100" width="100px;" alt="Andrea Serafini"/><br /><sub><b>Andrea Serafini</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=rossodisera" title="Code">💻</a></td>
243
250
  <td align="center" valign="top" width="14.28%"><a href="http://www.ariostas.com"><img src="https://avatars.githubusercontent.com/u/7596837?v=4?s=100" width="100px;" alt="Andres Rios Tascon"/><br /><sub><b>Andres Rios Tascon</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=ariostas" title="Code">💻</a></td>
244
251
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/ikrommyd"><img src="https://avatars.githubusercontent.com/u/82155404?v=4?s=100" width="100px;" alt="Iason Krommydas"/><br /><sub><b>Iason Krommydas</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=ikrommyd" title="Code">💻</a></td>
252
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/fstrug"><img src="https://avatars.githubusercontent.com/u/84533949?v=4?s=100" width="100px;" alt="fstrug"/><br /><sub><b>fstrug</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=fstrug" title="Code">💻</a></td>
253
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/zlmarshall"><img src="https://avatars.githubusercontent.com/u/10702398?v=4?s=100" width="100px;" alt="Zach Marshall"/><br /><sub><b>Zach Marshall</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=zlmarshall" title="Code">💻</a></td>
245
254
  </tr>
246
255
  </tbody>
247
256
  </table>
@@ -7,11 +7,14 @@
7
7
  [![Continuous integration tests](https://github.com/scikit-hep/uproot5/actions/workflows/build-test.yml/badge.svg)](https://github.com/scikit-hep/uproot5/actions)
8
8
 
9
9
  [![Scikit-HEP](https://scikit-hep.org/assets/images/Scikit--HEP-Project-blue.svg)](https://scikit-hep.org/)
10
- [![NSF-1836650](https://img.shields.io/badge/NSF-1836650-blue.svg)](https://nsf.gov/awardsearch/showAward?AWD_ID=1836650)
11
10
  [![DOI 10.5281/zenodo.4340632](https://zenodo.org/badge/DOI/10.5281/zenodo.4340632.svg)](https://doi.org/10.5281/zenodo.4340632)
12
11
  [![Documentation](https://img.shields.io/badge/docs-online-success)](https://uproot.readthedocs.io/)
13
12
  [![Gitter](https://img.shields.io/badge/chat-online-success)](https://gitter.im/Scikit-HEP/uproot)
14
13
 
14
+ [![NSF-1836650](https://img.shields.io/badge/NSF-1836650-blue.svg)](https://nsf.gov/awardsearch/showAward?AWD_ID=1836650)
15
+ [![NSF-2121686](https://img.shields.io/badge/NSF-2121686-blue.svg)](https://nsf.gov/awardsearch/showAward?AWD_ID=2121686)
16
+ [![NSF-2323298](https://img.shields.io/badge/NSF-2323298-blue.svg)](https://nsf.gov/awardsearch/showAward?AWD_ID=2323298)
17
+
15
18
  Uproot is a library for reading and writing [ROOT files](https://root.cern/) in pure Python and NumPy.
16
19
 
17
20
  Unlike the standard C++ ROOT implementation, Uproot is only an I/O library, primarily intended to stream data into machine learning libraries in Python. Unlike PyROOT and root_numpy, Uproot does not depend on C++ ROOT. Instead, it uses Numpy to cast blocks of data from the ROOT file as Numpy arrays.
@@ -195,6 +198,8 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
195
198
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/rossodisera"><img src="https://avatars.githubusercontent.com/u/46961664?v=4?s=100" width="100px;" alt="Andrea Serafini"/><br /><sub><b>Andrea Serafini</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=rossodisera" title="Code">💻</a></td>
196
199
  <td align="center" valign="top" width="14.28%"><a href="http://www.ariostas.com"><img src="https://avatars.githubusercontent.com/u/7596837?v=4?s=100" width="100px;" alt="Andres Rios Tascon"/><br /><sub><b>Andres Rios Tascon</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=ariostas" title="Code">💻</a></td>
197
200
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/ikrommyd"><img src="https://avatars.githubusercontent.com/u/82155404?v=4?s=100" width="100px;" alt="Iason Krommydas"/><br /><sub><b>Iason Krommydas</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=ikrommyd" title="Code">💻</a></td>
201
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/fstrug"><img src="https://avatars.githubusercontent.com/u/84533949?v=4?s=100" width="100px;" alt="fstrug"/><br /><sub><b>fstrug</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=fstrug" title="Code">💻</a></td>
202
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/zlmarshall"><img src="https://avatars.githubusercontent.com/u/10702398?v=4?s=100" width="100px;" alt="Zach Marshall"/><br /><sub><b>Zach Marshall</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=zlmarshall" title="Code">💻</a></td>
198
203
  </tr>
199
204
  </tbody>
200
205
  </table>
@@ -919,6 +919,52 @@ Like the caches, the default values for the last two are global ``uproot.decompr
919
919
 
920
920
  If, however, you're working in an environment that puts limits on parallel processing (e.g. the CMS LPC or informal university computers), you may want to modify the defaults, either locally through a ``decompression_executor`` or ``interpretation_executor`` function parameter, or globally by replacing the global object.
921
921
 
922
+ Reading RNTuples
923
+ ----------------
924
+
925
+ TTree has been the default format to store large datasets in ROOT files for decades. However, it has slowly become outdated and is not optimized for modern systems. This is where the RNTuple format comes in. It is a modern serialization format that is designed with modern systems in mind and is planned to replace TTree in the coming years. `Version 1.0.0.0 <https://cds.cern.ch/record/2923186>`__ is out and will be supported "forever".
926
+
927
+ RNTuples are deliberately simpler than TTrees by design. For the first time, there’s an official specification, making it much easier for third-party I/O tools like Uproot to support it. Uproot already supports reading the full RNTuple specification, meaning that you can read any RNTuple you find in the wild. It also already supports writing a large part of the specification, and intends to support as much as it makes sense for data analysis.
928
+
929
+ To ease the transition into RNTuples, we are designing the interface to closely match the existing TTree interface. Many of the functionality explained in the previous subsections works in the same way. However, there the terminology is slightly different (e.g. "branch" becomes "field") and arguments may vary slightly, accordingly.
930
+
931
+ Let's look at a few examples that illustrate how the RNTuple interface works.
932
+
933
+ When inspecting a file, will have a clear indication that it contains an RNTuple.
934
+
935
+ .. code-block:: python
936
+
937
+ >>> file = uproot.open("https://raw.githubusercontent.com/scikit-hep/scikit-hep-testdata/refs/heads/main/src/skhep_testdata/data/ntpl001_staff_rntuple_v1-0-0-0.root")
938
+ >>> file.classnames()
939
+ {'Staff;1': 'ROOT::RNTuple'}
940
+
941
+ Inspecting the contents of an RNTuple is done in the same way.
942
+
943
+ .. code-block:: python
944
+
945
+ >>> rntuple = uproot.open("https://raw.githubusercontent.com/scikit-hep/scikit-hep-testdata/refs/heads/main/src/skhep_testdata/data/ntpl001_staff_rntuple_v1-0-0-0.root:Staff")
946
+ >>> rntuple.keys()
947
+ ['Category', 'Flag', 'Age', 'Service', 'Children', 'Grade', 'Step', 'Hrweek', 'Cost', 'Division', 'Nation']
948
+ >>> rntuple.typenames()
949
+ {'Category': 'std::int32_t', 'Flag': 'std::uint32_t', 'Age': 'std::int32_t', 'Service': 'std::int32_t', 'Children': 'std::int32_t', 'Grade': 'std::int32_t', 'Step': 'std::int32_t',
950
+ 'Hrweek': 'std::int32_t', 'Cost': 'std::int32_t', 'Division': 'std::string', 'Nation': 'std::string'}
951
+
952
+ Reading the content of a single or multiple fields into an array also works very similarly.
953
+
954
+ .. code-block:: python
955
+
956
+ >>> rntuple = uproot.open("https://raw.githubusercontent.com/scikit-hep/scikit-hep-testdata/refs/heads/main/src/skhep_testdata/data/ntpl001_staff_rntuple_v1-0-0-0.root:Staff")
957
+ >>> rntuple["Age"].array()
958
+ <Array [58, 63, 56, 61, 52, 60, ..., 51, 25, 35, 28, 43] type='3354 * int32'>
959
+ >>> rntuple.arrays(["Age", "Cost", "Nation"])
960
+ <Array [{Age: 58, Cost: 11975, ...}, ...] type='3354 * {Age: int32, Cost: i...'>
961
+ >>> rntuple.arrays(filter_field=lambda f: f.field_id % 2 == 1)
962
+ <Array [{Flag: 15, Service: 28, ...}, ...] type='3354 * {Flag: uint32, Serv...'>
963
+
964
+ Note that for the last input we used the ``filter_field`` argument instead of ``filter_branch`` since the latter terminology doesn't apply to RNTuples.
965
+
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
+
922
968
  Opening a file for writing
923
969
  --------------------------
924
970
 
@@ -1251,3 +1297,17 @@ In addition, each TBranch of the TTree can have a different compression setting:
1251
1297
  {'x': None, 'ny': None, 'y': ZLIB(4)}
1252
1298
 
1253
1299
  Changes to the compression setting only affect TBaskets written after the change (with :ref:`uproot.writing.writable.WritableTree.extend`; see above).
1300
+
1301
+ Writing RNTuples
1302
+ ----------------
1303
+
1304
+ Just like with reading, writing RNTuples is similar to writing TTree objects. Since RNTuples are much simpler, we aim to be able to write almost any RNTuple that you might want.
1305
+
1306
+ Here is an example of writing an RNTuple. Since TTree is still the default format for the near future, writing an RNTuple is a bit more verbose.
1307
+
1308
+ .. code-block:: python
1309
+
1310
+ >>> file = uproot.recreate("example.root")
1311
+ >>> data = {"my_int": [1,2], "my_vector": [[1,2], [3,4,5]]}
1312
+ >>> rntuple = file.mkrntuple("my_rntuple", data)
1313
+ >>> rntuple.extend(data) # Can be extended, just like TTrees
@@ -36,6 +36,10 @@ test-core = [
36
36
  "pytest>=6",
37
37
  "scikit-hep-testdata"
38
38
  ]
39
+ test-gpu = [
40
+ "kvikio-cu12>=25.02.01",
41
+ {include-group = "test-core"}
42
+ ]
39
43
  test-pyodide = [
40
44
  "pytest-pyodide; python_version >='3.11'",
41
45
  {include-group = "test-core"}
@@ -77,7 +81,7 @@ dependencies = [
77
81
  "cramjam>=2.5.0",
78
82
  "xxhash",
79
83
  "numpy",
80
- "fsspec",
84
+ "fsspec!=2025.7.0",
81
85
  "packaging",
82
86
  "typing_extensions>=4.1.0; python_version < '3.11'"
83
87
  ]
@@ -91,6 +95,12 @@ readme = "README.md"
91
95
  requires-python = ">=3.9"
92
96
 
93
97
  [project.optional-dependencies]
98
+ GDS_cu11 = [
99
+ "kvikio-cu11>=25.02.01"
100
+ ]
101
+ GDS_cu12 = [
102
+ "kvikio-cu12>=25.02.01"
103
+ ]
94
104
  http = ["aiohttp"]
95
105
  s3 = ["s3fs"]
96
106
  xrootd = ["fsspec-xrootd>=0.5.0"]
@@ -131,6 +141,7 @@ xfail_strict = true
131
141
  [tool.ruff]
132
142
  exclude = [
133
143
  "tests/*.py",
144
+ "tests-cuda/*.py",
134
145
  "src/uproot/__init__.py",
135
146
  "docs-sphinx/*.py"
136
147
  ]
@@ -148,7 +159,9 @@ ignore = [
148
159
  "S307", # no eval allowed
149
160
  "PLC1901", # empty string is falsey (but I don't want to rely on such weak typing)
150
161
  "RUF012", # enforces type annotations on a codebase that lacks type annotations
151
- "SIM103" # interferes with my if-elif-elif-else blocks
162
+ "SIM103", # interferes with my if-elif-elif-else blocks
163
+ "PLC0415", # imports outside top level
164
+ "PLW1641" # __eq__ without __hash__
152
165
  ]
153
166
  select = [
154
167
  "E",
@@ -1543,7 +1543,7 @@ def _get_dak_array(
1543
1543
  entry_stop = ttree.num_entries
1544
1544
 
1545
1545
  if isinstance(ttree, HasFields):
1546
- akform = ttree.to_akform(filter_name=common_keys)
1546
+ akform, _ = ttree.to_akform(filter_name=common_keys)
1547
1547
  ttree_step = _RNTuple_regularize_step_size(
1548
1548
  ttree, akform, step_size, entry_start, entry_stop
1549
1549
  )
@@ -1593,7 +1593,7 @@ which has {entry_stop} entries"""
1593
1593
  partition_args.append((i, start, stop))
1594
1594
 
1595
1595
  if isinstance(ttrees[0], HasFields):
1596
- base_form = ttrees[0].to_akform(filter_name=common_keys)
1596
+ base_form, _ = ttrees[0].to_akform(filter_name=common_keys)
1597
1597
  else:
1598
1598
  base_form = _get_ttree_form(
1599
1599
  awkward, ttrees[0], common_keys, interp_options.get("ak_add_doc")
@@ -313,11 +313,11 @@ def file_object_path_split(urlpath: str) -> tuple[str, str | None]:
313
313
 
314
314
  separator = "::"
315
315
  parts = urlpath.split(separator)
316
- object_regex = re.compile(r"(.+\.root):(.*$)")
316
+ object_regex = re.compile(r"(.+\.root(\.[0-9]+)?):(.*$)", re.IGNORECASE)
317
317
  for i, part in enumerate(reversed(parts)):
318
318
  match = object_regex.match(part)
319
319
  if match:
320
- obj = re.sub(r"/+", "/", match.group(2).strip().lstrip("/")).rstrip("/")
320
+ obj = re.sub(r"/+", "/", match.group(3).strip().lstrip("/")).rstrip("/")
321
321
  parts[-i - 1] = match.group(1)
322
322
  break
323
323
 
@@ -1030,3 +1030,26 @@ class _Unset:
1030
1030
 
1031
1031
 
1032
1032
  unset = _Unset()
1033
+
1034
+
1035
+ def get_array_library(arr):
1036
+ """
1037
+ Determine if an array is a NumPy or CuPy ndarray, without importing CuPy.
1038
+
1039
+ Args:
1040
+ arr: The array to check.
1041
+
1042
+ Returns:
1043
+ String: 'numpy' if it's a NumPy array, 'cupy' if it's a CuPy array,
1044
+ 'awkward' if it's an Awkward array, and 'unknown' otherwise.
1045
+ """
1046
+ module_name = type(arr).__module__
1047
+
1048
+ if module_name.startswith("numpy"):
1049
+ return "numpy"
1050
+ elif module_name.startswith("cupy"):
1051
+ return "cupy"
1052
+ elif module_name.startswith("awkward"):
1053
+ return "awkward"
1054
+ else:
1055
+ return "unknown"