uproot 5.6.2__tar.gz → 5.6.3__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 (319) hide show
  1. {uproot-5.6.2 → uproot-5.6.3}/.github/workflows/deploy.yml +1 -1
  2. {uproot-5.6.2 → uproot-5.6.3}/.pre-commit-config.yaml +4 -3
  3. {uproot-5.6.2 → uproot-5.6.3}/PKG-INFO +5 -1
  4. {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/basic.rst +60 -0
  5. {uproot-5.6.2 → uproot-5.6.3}/pyproject.toml +14 -1
  6. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/_util.py +23 -0
  7. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/RNTuple.py +292 -35
  8. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TBranch.py +12 -6
  9. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/const.py +13 -10
  10. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/extras.py +48 -0
  11. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/RNTuple.py +601 -85
  12. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/reading.py +1 -1
  13. uproot-5.6.3/src/uproot/source/cufile_interface.py +89 -0
  14. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/version.py +2 -2
  15. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/_cascade.py +2 -4
  16. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/_cascadentuple.py +118 -126
  17. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/writable.py +18 -5
  18. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1250_rntuple_improvements.py +5 -5
  19. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1395_rntuple_writing_lists_and_structs.py +65 -0
  20. uproot-5.6.3/tests-cuda/test_0630_rntuple_basics.py +57 -0
  21. uproot-5.6.3/tests-cuda/test_0662_rntuple_stl_containers.py +90 -0
  22. uproot-5.6.3/tests-cuda/test_0962_rntuple_update.py +62 -0
  23. uproot-5.6.3/tests-cuda/test_1159_rntuple_cluster_groups.py +40 -0
  24. uproot-5.6.3/tests-cuda/test_1191_rntuple_fixes.py +91 -0
  25. uproot-5.6.3/tests-cuda/test_1223_more_rntuple_types.py +122 -0
  26. uproot-5.6.3/tests-cuda/test_1250_rntuple_improvements.py +89 -0
  27. uproot-5.6.3/tests-cuda/test_1285_rntuple_multicluster_concatenation.py +31 -0
  28. uproot-5.6.3/tests-cuda/test_1347_rntuple_floats_suppressed_cols.py +183 -0
  29. uproot-5.6.3/tests-cuda/test_1411_rntuple_physlite_ATLAS.py +130 -0
  30. {uproot-5.6.2 → uproot-5.6.3}/.all-contributorsrc +0 -0
  31. {uproot-5.6.2 → uproot-5.6.3}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  32. {uproot-5.6.2 → uproot-5.6.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  33. {uproot-5.6.2 → uproot-5.6.3}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  34. {uproot-5.6.2 → uproot-5.6.3}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  35. {uproot-5.6.2 → uproot-5.6.3}/.github/dependabot.yml +0 -0
  36. {uproot-5.6.2 → uproot-5.6.3}/.github/workflows/build-distributions.yml +0 -0
  37. {uproot-5.6.2 → uproot-5.6.3}/.github/workflows/build-test.yml +0 -0
  38. {uproot-5.6.2 → uproot-5.6.3}/.github/workflows/semantic-pr-title.yml +0 -0
  39. {uproot-5.6.2 → uproot-5.6.3}/.github/workflows/upload-nightly-wheels.yml +0 -0
  40. {uproot-5.6.2 → uproot-5.6.3}/.gitignore +0 -0
  41. {uproot-5.6.2 → uproot-5.6.3}/.readthedocs.yml +0 -0
  42. {uproot-5.6.2 → uproot-5.6.3}/CITATION.cff +0 -0
  43. {uproot-5.6.2 → uproot-5.6.3}/CONTRIBUTING.md +0 -0
  44. {uproot-5.6.2 → uproot-5.6.3}/LICENSE +0 -0
  45. {uproot-5.6.2 → uproot-5.6.3}/README.md +0 -0
  46. {uproot-5.6.2 → uproot-5.6.3}/dev/example-objects.py +0 -0
  47. {uproot-5.6.2 → uproot-5.6.3}/dev/make-models.py +0 -0
  48. {uproot-5.6.2 → uproot-5.6.3}/docs-img/diagrams/abstraction-layers.png +0 -0
  49. {uproot-5.6.2 → uproot-5.6.3}/docs-img/diagrams/abstraction-layers.svg +0 -0
  50. {uproot-5.6.2 → uproot-5.6.3}/docs-img/diagrams/example-dask-graph.png +0 -0
  51. {uproot-5.6.2 → uproot-5.6.3}/docs-img/diagrams/uproot-awkward-timeline.png +0 -0
  52. {uproot-5.6.2 → uproot-5.6.3}/docs-img/diagrams/uproot-awkward-timeline.svg +0 -0
  53. {uproot-5.6.2 → uproot-5.6.3}/docs-img/logo/logo-300px-white.png +0 -0
  54. {uproot-5.6.2 → uproot-5.6.3}/docs-img/logo/logo-300px.png +0 -0
  55. {uproot-5.6.2 → uproot-5.6.3}/docs-img/logo/logo-600px.png +0 -0
  56. {uproot-5.6.2 → uproot-5.6.3}/docs-img/logo/logo.svg +0 -0
  57. {uproot-5.6.2 → uproot-5.6.3}/docs-img/photos/switcheroo.jpg +0 -0
  58. {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/_templates/breadcrumbs.html +0 -0
  59. {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/conf.py +0 -0
  60. {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/index.rst +0 -0
  61. {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/make_changelog.py +0 -0
  62. {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/prepare_docstrings.py +0 -0
  63. {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/requirements.txt +0 -0
  64. {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/uproot3-to-4.rst +0 -0
  65. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/__init__.py +0 -0
  66. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/_awkwardforth.py +0 -0
  67. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/_dask.py +0 -0
  68. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behavior.py +0 -0
  69. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/RooCurve.py +0 -0
  70. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/RooHist.py +0 -0
  71. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TAxis.py +0 -0
  72. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TBranchElement.py +0 -0
  73. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TDatime.py +0 -0
  74. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TGraph.py +0 -0
  75. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TGraphAsymmErrors.py +0 -0
  76. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TGraphErrors.py +0 -0
  77. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TH1.py +0 -0
  78. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TH2.py +0 -0
  79. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TH2Poly.py +0 -0
  80. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TH3.py +0 -0
  81. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TParameter.py +0 -0
  82. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TProfile.py +0 -0
  83. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TProfile2D.py +0 -0
  84. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TProfile3D.py +0 -0
  85. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TTree.py +0 -0
  86. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/__init__.py +0 -0
  87. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/cache.py +0 -0
  88. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/compression.py +0 -0
  89. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/containers.py +0 -0
  90. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/deserialization.py +0 -0
  91. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/dynamic.py +0 -0
  92. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/exceptions.py +0 -0
  93. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/__init__.py +0 -0
  94. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/grouped.py +0 -0
  95. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/identify.py +0 -0
  96. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/jagged.py +0 -0
  97. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/known_forth/__init__.py +0 -0
  98. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/known_forth/atlas.py +0 -0
  99. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/library.py +0 -0
  100. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/numerical.py +0 -0
  101. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/objects.py +0 -0
  102. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/strings.py +0 -0
  103. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/language/__init__.py +0 -0
  104. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/language/python.py +0 -0
  105. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/model.py +0 -0
  106. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TArray.py +0 -0
  107. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TAtt.py +0 -0
  108. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TBasket.py +0 -0
  109. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TBranch.py +0 -0
  110. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TClonesArray.py +0 -0
  111. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TDatime.py +0 -0
  112. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TGraph.py +0 -0
  113. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TH.py +0 -0
  114. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/THashList.py +0 -0
  115. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TLeaf.py +0 -0
  116. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TList.py +0 -0
  117. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TMatrixT.py +0 -0
  118. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TNamed.py +0 -0
  119. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TObjArray.py +0 -0
  120. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TObjString.py +0 -0
  121. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TObject.py +0 -0
  122. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TRef.py +0 -0
  123. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TString.py +0 -0
  124. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TTable.py +0 -0
  125. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TTime.py +0 -0
  126. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TTree.py +0 -0
  127. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/__init__.py +0 -0
  128. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/pyroot.py +0 -0
  129. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/serialization.py +0 -0
  130. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/sink/__init__.py +0 -0
  131. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/sink/file.py +0 -0
  132. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/__init__.py +0 -0
  133. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/chunk.py +0 -0
  134. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/coalesce.py +0 -0
  135. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/cursor.py +0 -0
  136. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/file.py +0 -0
  137. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/fsspec.py +0 -0
  138. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/futures.py +0 -0
  139. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/http.py +0 -0
  140. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/object.py +0 -0
  141. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/s3.py +0 -0
  142. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/xrootd.py +0 -0
  143. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/streamers.py +0 -0
  144. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/__init__.py +0 -0
  145. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/_cascadetree.py +0 -0
  146. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/_dask_write.py +0 -0
  147. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/identify.py +0 -0
  148. {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/interpret.py +0 -0
  149. {uproot-5.6.2 → uproot-5.6.3}/tests/__init__.py +0 -0
  150. {uproot-5.6.2 → uproot-5.6.3}/tests/conftest.py +0 -0
  151. {uproot-5.6.2 → uproot-5.6.3}/tests/samples/h_dynamic.pkl +0 -0
  152. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0001_source_class.py +0 -0
  153. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0006_notify_when_downloaded.py +0 -0
  154. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0007_single_chunk_interface.py +0 -0
  155. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0008_start_interpretation.py +0 -0
  156. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0009_nested_directories.py +0 -0
  157. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0010_start_streamers.py +0 -0
  158. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0011_generate_classes_from_streamers.py +0 -0
  159. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0013_rntuple_anchor.py +0 -0
  160. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0014_all_ttree_versions.py +0 -0
  161. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0016_interpretations.py +0 -0
  162. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0017_multi_basket_multi_branch_fetch.py +0 -0
  163. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0018_array_fetching_interface.py +0 -0
  164. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0022_number_of_branches.py +0 -0
  165. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0023_more_interpretations_1.py +0 -0
  166. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0023_ttree_versions.py +0 -0
  167. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0028_fallback_to_read_streamer.py +0 -0
  168. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0029_more_string_types.py +0 -0
  169. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0031_test_stl_containers.py +0 -0
  170. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0033_more_interpretations_2.py +0 -0
  171. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0034_generic_objects_in_ttrees.py +0 -0
  172. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0035_datatype_generality.py +0 -0
  173. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0038_memberwise_serialization.py +0 -0
  174. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0043_iterate_function.py +0 -0
  175. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0044_concatenate_function.py +0 -0
  176. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0046_histograms_bh_hist.py +0 -0
  177. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0053_parents_should_not_be_bases.py +0 -0
  178. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0058_detach_model_objects_from_files.py +0 -0
  179. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0066_fix_http_fallback_freeze.py +0 -0
  180. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0067_common_entry_offsets.py +0 -0
  181. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0081_dont_parse_colons.py +0 -0
  182. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0087_memberwise_splitting_not_implemented_messages.py +0 -0
  183. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0088_read_with_http.py +0 -0
  184. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0099_read_from_file_object.py +0 -0
  185. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0112_fix_pandas_with_cut.py +0 -0
  186. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0118_fix_name_fetch_again.py +0 -0
  187. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0123_atlas_issues.py +0 -0
  188. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0126_turn_unknown_emptyarrays_into_known_types.py +0 -0
  189. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0167_use_the_common_histogram_interface.py +0 -0
  190. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0172_allow_allocators_in_vector_typenames.py +0 -0
  191. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0173_empty_and_multiprocessing_bugs.py +0 -0
  192. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0182_complain_about_missing_files.py +0 -0
  193. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0194_fix_lost_cuts_in_iterate.py +0 -0
  194. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0220_contiguous_byte_ranges_in_http.py +0 -0
  195. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0228_read_TProfiles.py +0 -0
  196. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0240_read_TGraphAsymmErrors.py +0 -0
  197. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0278_specializations_for_TParameter.py +0 -0
  198. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0302_pickle.py +0 -0
  199. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0303_empty_jagged_array.py +0 -0
  200. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0320_start_working_on_ROOT_writing.py +0 -0
  201. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0322_writablefile_infrastructure.py +0 -0
  202. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0329_update_existing_root_files.py +0 -0
  203. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0335_empty_ttree_division_by_zero.py +0 -0
  204. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0341_manipulate_streamer_info.py +0 -0
  205. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0344_writabledirectory_can_read.py +0 -0
  206. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0345_bulk_copy_method.py +0 -0
  207. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0349_write_TObjString.py +0 -0
  208. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0350_read_RooCurve_RooHist.py +0 -0
  209. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0351_write_TList.py +0 -0
  210. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0352_write_THashList.py +0 -0
  211. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0384_move_behavior_of_and_fix_383.py +0 -0
  212. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0398_dimensions_in_leaflist.py +0 -0
  213. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0405_write_a_histogram.py +0 -0
  214. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0406_write_a_ttree.py +0 -0
  215. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0407_read_TDatime.py +0 -0
  216. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0412_write_multidimensional_numpy_to_ttree.py +0 -0
  217. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0414_write_jagged_arrays.py +0 -0
  218. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0416_writing_compressed_data.py +0 -0
  219. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0418_read_TTable.py +0 -0
  220. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0420_pyroot_uproot_interoperability.py +0 -0
  221. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0422_hist_integration.py +0 -0
  222. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0430_global_index_for_tuples_of_DataFrames.py +0 -0
  223. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0438_TClonesArray_is_not_AsGrouped.py +0 -0
  224. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0439_check_awkward_before_numpy.py +0 -0
  225. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0442_regular_TClonesArray.py +0 -0
  226. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0472_tstreamerinfo_for_ttree.py +0 -0
  227. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0475_remember_to_update_freesegments.py +0 -0
  228. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0484_manually_add_model_for_TMatrixTSym_double_.py +0 -0
  229. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0487_implement_asdtypeinplace.py +0 -0
  230. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0498_create_leaf_branch_in_extend.py +0 -0
  231. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0519_remove_memmap_copy.py +0 -0
  232. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0520_dynamic_classes_cant_be_abc_subclasses.py +0 -0
  233. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0569_fBits_is_4_bytes.py +0 -0
  234. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0576_unicode_in_names.py +0 -0
  235. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0578_dask_for_numpy.py +0 -0
  236. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0580_round_trip_for_no_flow_histograms.py +0 -0
  237. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0589_explicitly_interpret_RVec_type.py +0 -0
  238. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0603_dask_delayed_open.py +0 -0
  239. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0609_num_enteries_func.py +0 -0
  240. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0610_awkward_form.py +0 -0
  241. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0630_rntuple_basics.py +0 -0
  242. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0637_setup_tests_for_AwkwardForth.py +0 -0
  243. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0643_reading_vector_pair_TLorentzVector_int.py +0 -0
  244. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0651_implement_transformed_axis.py +0 -0
  245. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0652_dask_for_awkward.py +0 -0
  246. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0662_rntuple_stl_containers.py +0 -0
  247. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0692_fsspec_reading.py +0 -0
  248. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0692_fsspec_writing.py +0 -0
  249. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0700_dask_empty_arrays.py +0 -0
  250. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0705_rntuple_writing_metadata.py +0 -0
  251. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0750_avoid_empty_TBasket_issue.py +0 -0
  252. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0755_dask_awkward_column_projection.py +0 -0
  253. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0791_protect_uproot_project_columns_from_dask_node_names.py +0 -0
  254. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0798_DAOD_PHYSLITE.py +0 -0
  255. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0808_fix_awkward_form_for_AsStridedObjects.py +0 -0
  256. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0816_separate_AwkwardForth_machines_by_TBranch.py +0 -0
  257. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0832_ak_add_doc_should_also_add_to_typetracer.py +0 -0
  258. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0840_support_tleafG.py +0 -0
  259. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0841_fix_814.py +0 -0
  260. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0844_fix_delete_hist_from_root.py +0 -0
  261. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0852_fix_strided_interp_extra_offsets.py +0 -0
  262. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0870_writing_arrays_of_type_unknown_fix_822.py +0 -0
  263. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0876_uproot_dask_blind_steps.py +0 -0
  264. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0886_fix_awkward_form_breadcrumbs.py +0 -0
  265. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0910_fix_906_members_non_numerical_branches.py +0 -0
  266. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0911_fix_interp_array_non_numerical_objs_issue_880.py +0 -0
  267. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0912_fix_pandas_and_double_nested_vectors_issue_885.py +0 -0
  268. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0916_read_from_s3.py +0 -0
  269. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0927_dont_assume_uproot_in_global_scope_in_TPython_Eval.py +0 -0
  270. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0930_expressions_in_pandas.py +0 -0
  271. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0940_feat_add_TLeafC_string_support.py +0 -0
  272. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0962_rntuple_update.py +0 -0
  273. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0965_inverted_axes_variances_hist_888.py +0 -0
  274. {uproot-5.6.2 → uproot-5.6.3}/tests/test_0976_path_object_split.py +0 -0
  275. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1000-write-TProfiles.py +0 -0
  276. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1043_const_std_string.py +0 -0
  277. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1058_dask_awkward_report.py +0 -0
  278. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1063_dask_distributed.py +0 -0
  279. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1070_pandas_dataframe_building_performance_fix.py +0 -0
  280. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1085_dask_write.py +0 -0
  281. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1102_any_locks_in_models_must_be_transient.py +0 -0
  282. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1114_fix_attempt_to_concatenate_numpy_with_awkward.py +0 -0
  283. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1120_check_decompression_executor_pass_for_dask.py +0 -0
  284. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1127_fix_allow_colon_in_key_names.py +0 -0
  285. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1128_TGraph_writing.py +0 -0
  286. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1146_split_ranges_for_large_files_over_http.py +0 -0
  287. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1154_classof_using_relative_path.py +0 -0
  288. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1159_rntuple_cluster_groups.py +0 -0
  289. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1160_std_string_in_TDirectory.py +0 -0
  290. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1180_read_free_floating_vector_issue_1179.py +0 -0
  291. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1181_support_for_stl_list.py +0 -0
  292. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1182_add_support_for_bitset.py +0 -0
  293. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1183_ttime_custom.py +0 -0
  294. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1186_dtype_might_raise_ValueError.py +0 -0
  295. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1189_dask_failing_on_duplicate_keys.py +0 -0
  296. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1191_rntuple_fixes.py +0 -0
  297. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1198_coalesce.py +0 -0
  298. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1207_fix_title_of_TBranch_with_counter.py +0 -0
  299. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1212_dont_let_update_mess_up_file_version.py +0 -0
  300. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1221_AwkwardForth_bug.py +0 -0
  301. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1223_more_rntuple_types.py +0 -0
  302. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1229_const_in_typename.py +0 -0
  303. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1254_test_threadpool_executor_for_dask.py +0 -0
  304. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1264_write_NumPy_array_of_strings.py +0 -0
  305. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1275_fix_TStreamerLoop_code_generation.py +0 -0
  306. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1282_add_known_forth_for_atlas.py +0 -0
  307. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1285_rntuple_multicluster_concatenation.py +0 -0
  308. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1318_dont_compare_big_endian_in_awkward.py +0 -0
  309. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1321_pandas_changed_api_again.py +0 -0
  310. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1347_rntuple_floats_suppressed_cols.py +0 -0
  311. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1356_basic_rntuple_writing.py +0 -0
  312. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1375_extend_ak_add_doc.py +0 -0
  313. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1406_improved_rntuple_methods.py +0 -0
  314. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1411_rntuple_physlite_ATLAS.py +0 -0
  315. {uproot-5.6.2 → uproot-5.6.3}/tests/test_1412_rntuple_dask.py +0 -0
  316. {uproot-5.6.2 → uproot-5.6.3}/tests-wasm/__init__.py +0 -0
  317. {uproot-5.6.2 → uproot-5.6.3}/tests-wasm/test_1272_basic_functionality.py +0 -0
  318. {uproot-5.6.2 → uproot-5.6.3}/tests-wasm/test_1365_awkwardforth_reading.py +0 -0
  319. {uproot-5.6.2 → uproot-5.6.3}/tests-wasm/utils.py +0 -0
@@ -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]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uproot
3
- Version: 5.6.2
3
+ Version: 5.6.3
4
4
  Summary: ROOT I/O in pure Python and NumPy.
5
5
  Project-URL: Download, https://github.com/scikit-hep/uproot5/releases
6
6
  Project-URL: Homepage, https://github.com/scikit-hep/uproot5
@@ -37,6 +37,10 @@ Requires-Dist: numpy
37
37
  Requires-Dist: packaging
38
38
  Requires-Dist: typing-extensions>=4.1.0; python_version < '3.11'
39
39
  Requires-Dist: xxhash
40
+ Provides-Extra: 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
@@ -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"}
@@ -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",
@@ -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"