uproot 5.4.0__tar.gz → 5.4.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 (293) hide show
  1. {uproot-5.4.0 → uproot-5.4.2}/.all-contributorsrc +18 -0
  2. {uproot-5.4.0 → uproot-5.4.2}/.github/workflows/build-test.yml +24 -7
  3. {uproot-5.4.0 → uproot-5.4.2}/.github/workflows/upload-nightly-wheels.yml +1 -1
  4. {uproot-5.4.0 → uproot-5.4.2}/.pre-commit-config.yaml +4 -4
  5. {uproot-5.4.0 → uproot-5.4.2}/PKG-INFO +7 -1
  6. {uproot-5.4.0 → uproot-5.4.2}/README.md +4 -0
  7. {uproot-5.4.0 → uproot-5.4.2}/pyproject.toml +2 -0
  8. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TBranch.py +33 -11
  9. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/const.py +51 -7
  10. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/containers.py +2 -2
  11. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/interpretation/identify.py +8 -0
  12. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/interpretation/library.py +6 -1
  13. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/language/python.py +4 -0
  14. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/RNTuple.py +456 -104
  15. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/source/coalesce.py +9 -2
  16. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/version.py +2 -2
  17. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/writing/_cascadentuple.py +5 -5
  18. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/writing/_cascadetree.py +3 -1
  19. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0013_rntuple_anchor.py +1 -1
  20. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1191_rntuple_fixes.py +1 -1
  21. uproot-5.4.2/tests/test_1250_rntuple_improvements.py +85 -0
  22. uproot-5.4.2/tests/test_1285_rntuple_multicluster_concatenation.py +20 -0
  23. uproot-5.4.2/tests/test_1318_dont_compare_big_endian_in_awkward.py +18 -0
  24. uproot-5.4.2/tests/test_1321_pandas_changed_api_again.py +20 -0
  25. {uproot-5.4.0 → uproot-5.4.2}/tests-wasm/test_1272_basic_functionality.py +13 -7
  26. {uproot-5.4.0 → uproot-5.4.2}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  27. {uproot-5.4.0 → uproot-5.4.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  28. {uproot-5.4.0 → uproot-5.4.2}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  29. {uproot-5.4.0 → uproot-5.4.2}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  30. {uproot-5.4.0 → uproot-5.4.2}/.github/dependabot.yml +0 -0
  31. {uproot-5.4.0 → uproot-5.4.2}/.github/workflows/build-distributions.yml +0 -0
  32. {uproot-5.4.0 → uproot-5.4.2}/.github/workflows/deploy.yml +0 -0
  33. {uproot-5.4.0 → uproot-5.4.2}/.github/workflows/semantic-pr-title.yml +0 -0
  34. {uproot-5.4.0 → uproot-5.4.2}/.gitignore +0 -0
  35. {uproot-5.4.0 → uproot-5.4.2}/.readthedocs.yml +0 -0
  36. {uproot-5.4.0 → uproot-5.4.2}/CITATION.cff +0 -0
  37. {uproot-5.4.0 → uproot-5.4.2}/LICENSE +0 -0
  38. {uproot-5.4.0 → uproot-5.4.2}/dev/example-objects.py +0 -0
  39. {uproot-5.4.0 → uproot-5.4.2}/dev/make-models.py +0 -0
  40. {uproot-5.4.0 → uproot-5.4.2}/docs-img/diagrams/abstraction-layers.png +0 -0
  41. {uproot-5.4.0 → uproot-5.4.2}/docs-img/diagrams/abstraction-layers.svg +0 -0
  42. {uproot-5.4.0 → uproot-5.4.2}/docs-img/diagrams/example-dask-graph.png +0 -0
  43. {uproot-5.4.0 → uproot-5.4.2}/docs-img/diagrams/uproot-awkward-timeline.png +0 -0
  44. {uproot-5.4.0 → uproot-5.4.2}/docs-img/diagrams/uproot-awkward-timeline.svg +0 -0
  45. {uproot-5.4.0 → uproot-5.4.2}/docs-img/logo/logo-300px-white.png +0 -0
  46. {uproot-5.4.0 → uproot-5.4.2}/docs-img/logo/logo-300px.png +0 -0
  47. {uproot-5.4.0 → uproot-5.4.2}/docs-img/logo/logo-600px.png +0 -0
  48. {uproot-5.4.0 → uproot-5.4.2}/docs-img/logo/logo.svg +0 -0
  49. {uproot-5.4.0 → uproot-5.4.2}/docs-img/photos/switcheroo.jpg +0 -0
  50. {uproot-5.4.0 → uproot-5.4.2}/docs-sphinx/_templates/breadcrumbs.html +0 -0
  51. {uproot-5.4.0 → uproot-5.4.2}/docs-sphinx/basic.rst +0 -0
  52. {uproot-5.4.0 → uproot-5.4.2}/docs-sphinx/conf.py +0 -0
  53. {uproot-5.4.0 → uproot-5.4.2}/docs-sphinx/index.rst +0 -0
  54. {uproot-5.4.0 → uproot-5.4.2}/docs-sphinx/make_changelog.py +0 -0
  55. {uproot-5.4.0 → uproot-5.4.2}/docs-sphinx/prepare_docstrings.py +0 -0
  56. {uproot-5.4.0 → uproot-5.4.2}/docs-sphinx/requirements.txt +0 -0
  57. {uproot-5.4.0 → uproot-5.4.2}/docs-sphinx/uproot3-to-4.rst +0 -0
  58. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/__init__.py +0 -0
  59. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/_awkwardforth.py +0 -0
  60. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/_dask.py +0 -0
  61. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/_util.py +0 -0
  62. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behavior.py +0 -0
  63. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/RooCurve.py +0 -0
  64. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/RooHist.py +0 -0
  65. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TAxis.py +0 -0
  66. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TBranchElement.py +0 -0
  67. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TDatime.py +0 -0
  68. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TGraph.py +0 -0
  69. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TGraphAsymmErrors.py +0 -0
  70. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TGraphErrors.py +0 -0
  71. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TH1.py +0 -0
  72. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TH2.py +0 -0
  73. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TH2Poly.py +0 -0
  74. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TH3.py +0 -0
  75. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TParameter.py +0 -0
  76. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TProfile.py +0 -0
  77. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TProfile2D.py +0 -0
  78. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TProfile3D.py +0 -0
  79. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/TTree.py +0 -0
  80. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/behaviors/__init__.py +0 -0
  81. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/cache.py +0 -0
  82. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/compression.py +0 -0
  83. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/deserialization.py +0 -0
  84. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/dynamic.py +0 -0
  85. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/exceptions.py +0 -0
  86. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/extras.py +0 -0
  87. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/interpretation/__init__.py +0 -0
  88. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/interpretation/grouped.py +0 -0
  89. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/interpretation/jagged.py +0 -0
  90. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/interpretation/numerical.py +0 -0
  91. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/interpretation/objects.py +0 -0
  92. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/interpretation/strings.py +0 -0
  93. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/language/__init__.py +0 -0
  94. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/model.py +0 -0
  95. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TArray.py +0 -0
  96. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TAtt.py +0 -0
  97. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TBasket.py +0 -0
  98. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TBranch.py +0 -0
  99. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TClonesArray.py +0 -0
  100. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TDatime.py +0 -0
  101. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TGraph.py +0 -0
  102. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TH.py +0 -0
  103. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/THashList.py +0 -0
  104. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TLeaf.py +0 -0
  105. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TList.py +0 -0
  106. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TMatrixT.py +0 -0
  107. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TNamed.py +0 -0
  108. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TObjArray.py +0 -0
  109. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TObjString.py +0 -0
  110. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TObject.py +0 -0
  111. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TRef.py +0 -0
  112. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TString.py +0 -0
  113. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TTable.py +0 -0
  114. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TTime.py +0 -0
  115. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/TTree.py +0 -0
  116. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/models/__init__.py +0 -0
  117. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/pyroot.py +0 -0
  118. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/reading.py +0 -0
  119. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/serialization.py +0 -0
  120. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/sink/__init__.py +0 -0
  121. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/sink/file.py +0 -0
  122. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/source/__init__.py +0 -0
  123. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/source/chunk.py +0 -0
  124. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/source/cursor.py +0 -0
  125. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/source/file.py +0 -0
  126. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/source/fsspec.py +0 -0
  127. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/source/futures.py +0 -0
  128. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/source/http.py +0 -0
  129. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/source/object.py +0 -0
  130. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/source/s3.py +0 -0
  131. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/source/xrootd.py +0 -0
  132. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/streamers.py +0 -0
  133. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/writing/__init__.py +0 -0
  134. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/writing/_cascade.py +0 -0
  135. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/writing/_dask_write.py +0 -0
  136. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/writing/identify.py +0 -0
  137. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/writing/interpret.py +0 -0
  138. {uproot-5.4.0 → uproot-5.4.2}/src/uproot/writing/writable.py +0 -0
  139. {uproot-5.4.0 → uproot-5.4.2}/tests/__init__.py +0 -0
  140. {uproot-5.4.0 → uproot-5.4.2}/tests/conftest.py +0 -0
  141. {uproot-5.4.0 → uproot-5.4.2}/tests/samples/h_dynamic.pkl +0 -0
  142. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0001_source_class.py +0 -0
  143. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0006_notify_when_downloaded.py +0 -0
  144. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0007_single_chunk_interface.py +0 -0
  145. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0008_start_interpretation.py +0 -0
  146. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0009_nested_directories.py +0 -0
  147. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0010_start_streamers.py +0 -0
  148. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0011_generate_classes_from_streamers.py +0 -0
  149. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0014_all_ttree_versions.py +0 -0
  150. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0016_interpretations.py +0 -0
  151. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0017_multi_basket_multi_branch_fetch.py +0 -0
  152. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0018_array_fetching_interface.py +0 -0
  153. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0022_number_of_branches.py +0 -0
  154. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0023_more_interpretations_1.py +0 -0
  155. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0023_ttree_versions.py +0 -0
  156. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0028_fallback_to_read_streamer.py +0 -0
  157. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0029_more_string_types.py +0 -0
  158. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0031_test_stl_containers.py +0 -0
  159. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0033_more_interpretations_2.py +0 -0
  160. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0034_generic_objects_in_ttrees.py +0 -0
  161. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0035_datatype_generality.py +0 -0
  162. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0038_memberwise_serialization.py +0 -0
  163. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0043_iterate_function.py +0 -0
  164. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0044_concatenate_function.py +0 -0
  165. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0046_histograms_bh_hist.py +0 -0
  166. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0053_parents_should_not_be_bases.py +0 -0
  167. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0058_detach_model_objects_from_files.py +0 -0
  168. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0066_fix_http_fallback_freeze.py +0 -0
  169. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0067_common_entry_offsets.py +0 -0
  170. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0081_dont_parse_colons.py +0 -0
  171. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0087_memberwise_splitting_not_implemented_messages.py +0 -0
  172. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0088_read_with_http.py +0 -0
  173. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0099_read_from_file_object.py +0 -0
  174. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0112_fix_pandas_with_cut.py +0 -0
  175. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0118_fix_name_fetch_again.py +0 -0
  176. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0123_atlas_issues.py +0 -0
  177. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0126_turn_unknown_emptyarrays_into_known_types.py +0 -0
  178. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0167_use_the_common_histogram_interface.py +0 -0
  179. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0172_allow_allocators_in_vector_typenames.py +0 -0
  180. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0173_empty_and_multiprocessing_bugs.py +0 -0
  181. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0182_complain_about_missing_files.py +0 -0
  182. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0194_fix_lost_cuts_in_iterate.py +0 -0
  183. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0220_contiguous_byte_ranges_in_http.py +0 -0
  184. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0228_read_TProfiles.py +0 -0
  185. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0240_read_TGraphAsymmErrors.py +0 -0
  186. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0278_specializations_for_TParameter.py +0 -0
  187. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0302_pickle.py +0 -0
  188. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0303_empty_jagged_array.py +0 -0
  189. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0320_start_working_on_ROOT_writing.py +0 -0
  190. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0322_writablefile_infrastructure.py +0 -0
  191. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0329_update_existing_root_files.py +0 -0
  192. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0335_empty_ttree_division_by_zero.py +0 -0
  193. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0341_manipulate_streamer_info.py +0 -0
  194. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0344_writabledirectory_can_read.py +0 -0
  195. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0345_bulk_copy_method.py +0 -0
  196. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0349_write_TObjString.py +0 -0
  197. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0350_read_RooCurve_RooHist.py +0 -0
  198. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0351_write_TList.py +0 -0
  199. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0352_write_THashList.py +0 -0
  200. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0384_move_behavior_of_and_fix_383.py +0 -0
  201. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0398_dimensions_in_leaflist.py +0 -0
  202. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0405_write_a_histogram.py +0 -0
  203. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0406_write_a_ttree.py +0 -0
  204. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0407_read_TDatime.py +0 -0
  205. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0412_write_multidimensional_numpy_to_ttree.py +0 -0
  206. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0414_write_jagged_arrays.py +0 -0
  207. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0416_writing_compressed_data.py +0 -0
  208. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0418_read_TTable.py +0 -0
  209. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0420_pyroot_uproot_interoperability.py +0 -0
  210. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0422_hist_integration.py +0 -0
  211. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0430_global_index_for_tuples_of_DataFrames.py +0 -0
  212. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0438_TClonesArray_is_not_AsGrouped.py +0 -0
  213. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0439_check_awkward_before_numpy.py +0 -0
  214. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0442_regular_TClonesArray.py +0 -0
  215. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0472_tstreamerinfo_for_ttree.py +0 -0
  216. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0475_remember_to_update_freesegments.py +0 -0
  217. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0484_manually_add_model_for_TMatrixTSym_double_.py +0 -0
  218. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0487_implement_asdtypeinplace.py +0 -0
  219. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0498_create_leaf_branch_in_extend.py +0 -0
  220. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0519_remove_memmap_copy.py +0 -0
  221. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0520_dynamic_classes_cant_be_abc_subclasses.py +0 -0
  222. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0569_fBits_is_4_bytes.py +0 -0
  223. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0576_unicode_in_names.py +0 -0
  224. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0578_dask_for_numpy.py +0 -0
  225. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0580_round_trip_for_no_flow_histograms.py +0 -0
  226. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0589_explicitly_interpret_RVec_type.py +0 -0
  227. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0603_dask_delayed_open.py +0 -0
  228. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0609_num_enteries_func.py +0 -0
  229. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0610_awkward_form.py +0 -0
  230. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0630_rntuple_basics.py +0 -0
  231. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0637_setup_tests_for_AwkwardForth.py +0 -0
  232. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0643_reading_vector_pair_TLorentzVector_int.py +0 -0
  233. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0651_implement_transformed_axis.py +0 -0
  234. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0652_dask_for_awkward.py +0 -0
  235. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0662_rntuple_stl_containers.py +0 -0
  236. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0692_fsspec_reading.py +0 -0
  237. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0692_fsspec_writing.py +0 -0
  238. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0700_dask_empty_arrays.py +0 -0
  239. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0705_rntuple_writing_metadata.py +0 -0
  240. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0750_avoid_empty_TBasket_issue.py +0 -0
  241. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0755_dask_awkward_column_projection.py +0 -0
  242. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0791_protect_uproot_project_columns_from_dask_node_names.py +0 -0
  243. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0798_DAOD_PHYSLITE.py +0 -0
  244. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0808_fix_awkward_form_for_AsStridedObjects.py +0 -0
  245. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0816_separate_AwkwardForth_machines_by_TBranch.py +0 -0
  246. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0832_ak_add_doc_should_also_add_to_typetracer.py +0 -0
  247. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0840_support_tleafG.py +0 -0
  248. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0841_fix_814.py +0 -0
  249. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0844_fix_delete_hist_from_root.py +0 -0
  250. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0852_fix_strided_interp_extra_offsets.py +0 -0
  251. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0870_writing_arrays_of_type_unknown_fix_822.py +0 -0
  252. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0876_uproot_dask_blind_steps.py +0 -0
  253. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0886_fix_awkward_form_breadcrumbs.py +0 -0
  254. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0910_fix_906_members_non_numerical_branches.py +0 -0
  255. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0911_fix_interp_array_non_numerical_objs_issue_880.py +0 -0
  256. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0912_fix_pandas_and_double_nested_vectors_issue_885.py +0 -0
  257. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0916_read_from_s3.py +0 -0
  258. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0927_dont_assume_uproot_in_global_scope_in_TPython_Eval.py +0 -0
  259. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0930_expressions_in_pandas.py +0 -0
  260. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0940_feat_add_TLeafC_string_support.py +0 -0
  261. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0962_RNTuple_update.py +0 -0
  262. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0965_inverted_axes_variances_hist_888.py +0 -0
  263. {uproot-5.4.0 → uproot-5.4.2}/tests/test_0976_path_object_split.py +0 -0
  264. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1000-write-TProfiles.py +0 -0
  265. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1043_const_std_string.py +0 -0
  266. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1058_dask_awkward_report.py +0 -0
  267. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1063_dask_distributed.py +0 -0
  268. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1070_pandas_dataframe_building_performance_fix.py +0 -0
  269. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1085_dask_write.py +0 -0
  270. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1102_any_locks_in_models_must_be_transient.py +0 -0
  271. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1114_fix_attempt_to_concatenate_numpy_with_awkward.py +0 -0
  272. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1120_check_decompression_executor_pass_for_dask.py +0 -0
  273. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1127_fix_allow_colon_in_key_names.py +0 -0
  274. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1128_TGraph_writing.py +0 -0
  275. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1146_split_ranges_for_large_files_over_http.py +0 -0
  276. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1154_classof_using_relative_path.py +0 -0
  277. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1160_std_string_in_TDirectory.py +0 -0
  278. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1180_read_free_floating_vector_issue_1179.py +0 -0
  279. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1181_support_for_stl_list.py +0 -0
  280. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1182_add_support_for_bitset.py +0 -0
  281. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1183_ttime_custom.py +0 -0
  282. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1186_dtype_might_raise_ValueError.py +0 -0
  283. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1189_dask_failing_on_duplicate_keys.py +0 -0
  284. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1198_coalesce.py +0 -0
  285. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1207_fix_title_of_TBranch_with_counter.py +0 -0
  286. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1212_dont_let_update_mess_up_file_version.py +0 -0
  287. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1221_AwkwardForth_bug.py +0 -0
  288. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1223_more_rntuple_types.py +0 -0
  289. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1254_test_threadpool_executor_for_dask.py +0 -0
  290. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1264_write_NumPy_array_of_strings.py +0 -0
  291. {uproot-5.4.0 → uproot-5.4.2}/tests/test_1275_fix_TStreamerLoop_code_generation.py +0 -0
  292. {uproot-5.4.0 → uproot-5.4.2}/tests-wasm/__init__.py +0 -0
  293. {uproot-5.4.0 → uproot-5.4.2}/tests-wasm/utils.py +0 -0
@@ -587,6 +587,24 @@
587
587
  "contributions": [
588
588
  "code"
589
589
  ]
590
+ },
591
+ {
592
+ "login": "MatousVozak",
593
+ "name": "MatousVozak",
594
+ "avatar_url": "https://avatars.githubusercontent.com/u/33348191?v=4",
595
+ "profile": "https://github.com/MatousVozak",
596
+ "contributions": [
597
+ "code"
598
+ ]
599
+ },
600
+ {
601
+ "login": "rossodisera",
602
+ "name": "Andrea Serafini",
603
+ "avatar_url": "https://avatars.githubusercontent.com/u/46961664?v=4",
604
+ "profile": "https://github.com/rossodisera",
605
+ "contributions": [
606
+ "code"
607
+ ]
590
608
  }
591
609
  ],
592
610
  "contributorsPerLine": 7,
@@ -34,9 +34,12 @@ jobs:
34
34
  with:
35
35
  auto-update-conda: true
36
36
  python-version: ${{ matrix.python-version }}
37
- miniforge-variant: Mambaforge
37
+ miniforge-version: latest
38
38
  use-mamba: true
39
39
 
40
+ - name: Check active Python version
41
+ run: python -c "import sys; assert '.'.join(str(s) for s in sys.version_info[:2]) == '${{ matrix.python-version }}', f'{version} incorrect!'"
42
+
40
43
  - name: Install ROOT
41
44
  if: matrix.python-version == 3.8 && runner.os != 'macOS' && runner.os != 'Windows'
42
45
  run: |
@@ -45,7 +48,7 @@ jobs:
45
48
  conda list
46
49
 
47
50
  - name: Install sshd for fsspec ssh tests
48
- if: runner.os != 'macOS' && runner.os != 'Windows'
51
+ if: runner.os != 'macOS' && runner.os != 'Windows'
49
52
  run: |
50
53
  sudo apt-get install -y openssh-server
51
54
  sudo service ssh restart
@@ -56,7 +59,7 @@ jobs:
56
59
  ssh -o StrictHostKeyChecking=no localhost echo "ssh connection successful"
57
60
 
58
61
  - name: Install XRootD
59
- if: runner.os != 'macOS' && runner.os != 'Windows'
62
+ if: runner.os != 'macOS' && runner.os != 'Windows'
60
63
  run: |
61
64
  conda env list
62
65
  mamba install xrootd
@@ -74,7 +77,7 @@ jobs:
74
77
  fail-fast: false
75
78
  matrix:
76
79
  platform: [windows-latest, ubuntu-latest, macos-latest]
77
- python-version: ['3.11']
80
+ python-version: ['3.13']
78
81
 
79
82
  runs-on: ${{ matrix.platform }}
80
83
  timeout-minutes: 30
@@ -85,9 +88,12 @@ jobs:
85
88
  - uses: actions/setup-python@v5
86
89
  with:
87
90
  python-version: ${{ matrix.python-version }}
91
+ allow-prereleases: true
92
+
93
+ - uses: astral-sh/setup-uv@v3
88
94
 
89
95
  - name: Pip install the package
90
- run: python -m pip install .[test,dev]
96
+ run: uv pip install --system .[test,dev]
91
97
 
92
98
  - name: Run pytest
93
99
  run: |
@@ -160,13 +166,13 @@ jobs:
160
166
  rm -rf dependencies/
161
167
 
162
168
  - name: Download Pyodide
163
- uses: pyodide/pyodide-actions/download-pyodide@v1
169
+ uses: pyodide/pyodide-actions/download-pyodide@v2
164
170
  with:
165
171
  version: ${{ env.PYODIDE_VERSION }}
166
172
  to: pyodide-dist
167
173
 
168
174
  - name: Install browser
169
- uses: pyodide/pyodide-actions/install-browser@v1
175
+ uses: pyodide/pyodide-actions/install-browser@v2
170
176
  with:
171
177
  runner: selenium
172
178
  browser: chrome
@@ -179,3 +185,14 @@ jobs:
179
185
  - name: Run pytest
180
186
  run: |
181
187
  pytest -vv --dist-dir=./pyodide-dist/ --runner=selenium --runtime=chrome tests-wasm
188
+
189
+ pass:
190
+ if: always()
191
+ needs: [build, vanilla-build, numpy1-build, pyodide-build]
192
+ runs-on: ubuntu-latest
193
+ timeout-minutes: 2
194
+ steps:
195
+ - name: Decide whether the needed jobs succeeded or failed
196
+ uses: re-actors/alls-green@release/v1
197
+ with:
198
+ jobs: ${{ toJSON(needs) }}
@@ -33,7 +33,7 @@ jobs:
33
33
  run: ls -lha dist/*.whl
34
34
 
35
35
  - name: Upload wheel to Anaconda Cloud as nightly
36
- uses: scientific-python/upload-nightly-action@b67d7fcc0396e1128a474d1ab2b48aa94680f9fc # 0.5.0
36
+ uses: scientific-python/upload-nightly-action@82396a2ed4269ba06c6b2988bb4fd568ef3c3d6b # 0.6.1
37
37
  with:
38
38
  artifacts_path: dist
39
39
  anaconda_nightly_upload_token: ${{ secrets.ANACONDA_ORG_UPLOAD_TOKEN }}
@@ -4,7 +4,7 @@ ci:
4
4
 
5
5
  repos:
6
6
  - repo: https://github.com/pre-commit/pre-commit-hooks
7
- rev: v4.6.0
7
+ rev: v5.0.0
8
8
  hooks:
9
9
  - id: check-added-large-files
10
10
  - id: check-case-conflict
@@ -18,19 +18,19 @@ repos:
18
18
  - id: trailing-whitespace
19
19
 
20
20
  - repo: https://github.com/psf/black-pre-commit-mirror
21
- rev: 24.8.0
21
+ rev: 24.10.0
22
22
  hooks:
23
23
  - id: black
24
24
 
25
25
  - repo: https://github.com/astral-sh/ruff-pre-commit
26
- rev: v0.6.5
26
+ rev: v0.7.2
27
27
  hooks:
28
28
  - id: ruff
29
29
  args: [--fix, --show-fixes]
30
30
 
31
31
 
32
32
  - repo: https://github.com/asottile/pyupgrade
33
- rev: v3.17.0
33
+ rev: v3.19.0
34
34
  hooks:
35
35
  - id: pyupgrade
36
36
  args: [--py38-plus]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: uproot
3
- Version: 5.4.0
3
+ Version: 5.4.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
@@ -23,6 +23,7 @@ Classifier: Programming Language :: Python :: 3.9
23
23
  Classifier: Programming Language :: Python :: 3.10
24
24
  Classifier: Programming Language :: Python :: 3.11
25
25
  Classifier: Programming Language :: Python :: 3.12
26
+ Classifier: Programming Language :: Python :: 3.13
26
27
  Classifier: Topic :: Scientific/Engineering
27
28
  Classifier: Topic :: Scientific/Engineering :: Information Analysis
28
29
  Classifier: Topic :: Scientific/Engineering :: Mathematics
@@ -67,6 +68,7 @@ Requires-Dist: pytest-pyodide; extra == 'test-pyodide'
67
68
  Requires-Dist: pytest-timeout; extra == 'test-pyodide'
68
69
  Requires-Dist: pytest>=6; extra == 'test-pyodide'
69
70
  Requires-Dist: scikit-hep-testdata; extra == 'test-pyodide'
71
+ Requires-Dist: selenium<=4.25.0; extra == 'test-pyodide'
70
72
  Provides-Extra: xrootd
71
73
  Requires-Dist: fsspec-xrootd; extra == 'xrootd'
72
74
  Description-Content-Type: text/markdown
@@ -263,6 +265,10 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
263
265
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/Pepesob"><img src="https://avatars.githubusercontent.com/u/113636251?v=4?s=100" width="100px;" alt="Piotr Sobczyński"/><br /><sub><b>Piotr Sobczyński</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=Pepesob" title="Code">💻</a></td>
264
266
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/giedrius2020"><img src="https://avatars.githubusercontent.com/u/71819123?v=4?s=100" width="100px;" alt="Giedrius Juškevičius"/><br /><sub><b>Giedrius Juškevičius</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=giedrius2020" title="Code">💻</a></td>
265
267
  </tr>
268
+ <tr>
269
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/MatousVozak"><img src="https://avatars.githubusercontent.com/u/33348191?v=4?s=100" width="100px;" alt="MatousVozak"/><br /><sub><b>MatousVozak</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=MatousVozak" title="Code">💻</a></td>
270
+ <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>
271
+ </tr>
266
272
  </tbody>
267
273
  </table>
268
274
 
@@ -190,6 +190,10 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
190
190
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/Pepesob"><img src="https://avatars.githubusercontent.com/u/113636251?v=4?s=100" width="100px;" alt="Piotr Sobczyński"/><br /><sub><b>Piotr Sobczyński</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=Pepesob" title="Code">💻</a></td>
191
191
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/giedrius2020"><img src="https://avatars.githubusercontent.com/u/71819123?v=4?s=100" width="100px;" alt="Giedrius Juškevičius"/><br /><sub><b>Giedrius Juškevičius</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=giedrius2020" title="Code">💻</a></td>
192
192
  </tr>
193
+ <tr>
194
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/MatousVozak"><img src="https://avatars.githubusercontent.com/u/33348191?v=4?s=100" width="100px;" alt="MatousVozak"/><br /><sub><b>MatousVozak</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=MatousVozak" title="Code">💻</a></td>
195
+ <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
+ </tr>
193
197
  </tbody>
194
198
  </table>
195
199
 
@@ -29,6 +29,7 @@ classifiers = [
29
29
  "Programming Language :: Python :: 3.10",
30
30
  "Programming Language :: Python :: 3.11",
31
31
  "Programming Language :: Python :: 3.12",
32
+ "Programming Language :: Python :: 3.13",
32
33
  "Topic :: Scientific/Engineering",
33
34
  "Topic :: Scientific/Engineering :: Information Analysis",
34
35
  "Topic :: Scientific/Engineering :: Mathematics",
@@ -82,6 +83,7 @@ test = [
82
83
  ]
83
84
  test-pyodide = [
84
85
  "pytest>=6",
86
+ "selenium<=4.25.0", # unpin once >4.26.0 is available
85
87
  "pytest-pyodide",
86
88
  "pytest-timeout",
87
89
  "scikit-hep-testdata"
@@ -210,10 +210,16 @@ def iterate(
210
210
  arrays, report = item
211
211
  arrays = library.global_index(arrays, global_offset)
212
212
  report = report.to_global(global_offset)
213
- yield arrays, report
213
+ popper = [arrays]
214
+ del arrays
215
+ del item
216
+ yield popper.pop(), report
217
+
214
218
  else:
215
- arrays = library.global_index(item, global_offset)
216
- yield arrays
219
+ popper = [library.global_index(item, global_offset)]
220
+ del item
221
+ yield popper.pop()
222
+
217
223
  except uproot.exceptions.KeyInFileError:
218
224
  if allow_missing:
219
225
  continue
@@ -1111,6 +1117,9 @@ class HasBranches(Mapping):
1111
1117
  ak_add_doc,
1112
1118
  )
1113
1119
 
1120
+ # no longer needed; save memory
1121
+ del output
1122
+
1114
1123
  next_baskets = {}
1115
1124
  for branch, basket_num, basket in ranges_or_baskets:
1116
1125
  basket_entry_start, basket_entry_stop = basket.entry_start_stop
@@ -1119,10 +1128,14 @@ class HasBranches(Mapping):
1119
1128
 
1120
1129
  previous_baskets = next_baskets
1121
1130
 
1131
+ # no longer needed; save memory
1132
+ popper = [out]
1133
+ del out
1134
+
1122
1135
  if report:
1123
- yield out, Report(self, sub_entry_start, sub_entry_stop)
1136
+ yield popper.pop(), Report(self, sub_entry_start, sub_entry_stop)
1124
1137
  else:
1125
- yield out
1138
+ yield popper.pop()
1126
1139
 
1127
1140
  def keys(
1128
1141
  self,
@@ -2959,6 +2972,9 @@ def _regularize_expressions(
2959
2972
  return arrays, expression_context, branchid_interpretation
2960
2973
 
2961
2974
 
2975
+ _basket_arrays_lock = threading.Lock()
2976
+
2977
+
2962
2978
  def _ranges_or_baskets_to_arrays(
2963
2979
  hasbranches,
2964
2980
  ranges_or_baskets,
@@ -3057,7 +3073,7 @@ def _ranges_or_baskets_to_arrays(
3057
3073
  context = dict(branch.context)
3058
3074
  context["forth"] = forth_context[branch.cache_key]
3059
3075
 
3060
- basket_arrays[basket.basket_num] = interpretation.basket_array(
3076
+ basket_array = interpretation.basket_array(
3061
3077
  basket.data,
3062
3078
  basket.byte_offsets,
3063
3079
  basket,
@@ -3067,16 +3083,21 @@ def _ranges_or_baskets_to_arrays(
3067
3083
  library,
3068
3084
  interp_options,
3069
3085
  )
3070
- if basket.num_entries != len(basket_arrays[basket.basket_num]):
3086
+ if basket.num_entries != len(basket_array):
3071
3087
  raise ValueError(
3072
3088
  f"""basket {basket.basket_num} in tree/branch {branch.object_path} has the wrong number of entries """
3073
- f"""(expected {basket.num_entries}, obtained {len(basket_arrays[basket.basket_num])}) when interpreted as {interpretation}
3089
+ f"""(expected {basket.num_entries}, obtained {len(basket_array)}) when interpreted as {interpretation}
3074
3090
  in file {branch.file.file_path}"""
3075
3091
  )
3076
3092
 
3093
+ basket_num = basket.basket_num
3077
3094
  basket = None
3078
3095
 
3079
- if len(basket_arrays) == branchid_num_baskets[branch.cache_key]:
3096
+ with _basket_arrays_lock:
3097
+ basket_arrays[basket_num] = basket_array
3098
+ len_basket_arrays = len(basket_arrays)
3099
+
3100
+ if len_basket_arrays == branchid_num_baskets[branch.cache_key]:
3080
3101
  arrays[branch.cache_key] = interpretation.final_array(
3081
3102
  basket_arrays,
3082
3103
  entry_start,
@@ -3086,8 +3107,9 @@ def _ranges_or_baskets_to_arrays(
3086
3107
  branch,
3087
3108
  interp_options,
3088
3109
  )
3089
- # no longer needed, save memory
3090
- basket_arrays.clear()
3110
+ with _basket_arrays_lock:
3111
+ # no longer needed, save memory
3112
+ basket_arrays.clear()
3091
3113
 
3092
3114
  except Exception:
3093
3115
  notifications.put(sys.exc_info())
@@ -5,7 +5,7 @@ This module defines integer constants used by serialization and deserialization
5
5
  """
6
6
  from __future__ import annotations
7
7
 
8
- import struct
8
+ from enum import IntEnum
9
9
 
10
10
  import numpy
11
11
 
@@ -118,8 +118,6 @@ kGenerateOffsetMap = numpy.uint8(1)
118
118
  kStreamedMemberWise = numpy.uint16(1 << 14)
119
119
 
120
120
  ############ RNTuple https://github.com/root-project/root/blob/master/tree/ntuple/v7/doc/specifications.md
121
- _rntuple_frame_format = struct.Struct("<Q")
122
- rntuple_env_header = _rntuple_frame_format.pack(0) # TODO: need to check this
123
121
  rntuple_col_num_to_dtype_dict = {
124
122
  1: "uint64",
125
123
  2: "uint32",
@@ -149,6 +147,8 @@ rntuple_col_num_to_dtype_dict = {
149
147
  26: "int64", # split + zigzag encoding
150
148
  27: "int32", # split + zigzag encoding
151
149
  28: "int16", # split + zigzag encoding
150
+ 29: "float32trunc",
151
+ 30: "float32quant",
152
152
  }
153
153
  rntuple_col_num_to_size_dict = {
154
154
  1: 64,
@@ -179,6 +179,8 @@ rntuple_col_num_to_size_dict = {
179
179
  26: 64, # split + zigzag encoding
180
180
  27: 32, # split + zigzag encoding
181
181
  28: 16, # split + zigzag encoding
182
+ 29: 32, # TODO: variable size
183
+ 30: 32, # TODO: variable size
182
184
  }
183
185
 
184
186
  rntuple_col_type_to_num_dict = {
@@ -212,7 +214,49 @@ rntuple_col_type_to_num_dict = {
212
214
  "splitzigzagint16": 28,
213
215
  }
214
216
 
215
- rntuple_role_leaf = 0
216
- rntuple_role_vector = 1
217
- rntuple_role_struct = 2
218
- rntuple_role_union = 3
217
+
218
+ class RNTupleLocatorType(IntEnum):
219
+ STANDARD = 0x00
220
+ LARGE = 0x01
221
+ DAOS = 0x02
222
+
223
+
224
+ class RNTupleEnvelopeType(IntEnum):
225
+ RESERVED = 0x00
226
+ HEADER = 0x01
227
+ FOOTER = 0x02
228
+ PAGELIST = 0x03
229
+
230
+
231
+ class RNTupleFieldRole(IntEnum):
232
+ LEAF = 0x00
233
+ VECTOR = 0x01
234
+ STRUCT = 0x02
235
+ UNION = 0x03
236
+ UNSPLIT = 0x04
237
+
238
+
239
+ class RNTupleFieldFlag(IntEnum):
240
+ REPETITIVE = 0x01
241
+ PROJECTED = 0x02
242
+ CHECKSUM = 0x04
243
+
244
+
245
+ class RNTupleColumnFlag(IntEnum):
246
+ DEFERRED = 0x08
247
+ RANGE = 0x10
248
+
249
+
250
+ class RNTupleExtraTypeIdentifier(IntEnum):
251
+ ROOT = 0x00
252
+
253
+
254
+ class RNTupleUserMetadataType(IntEnum):
255
+ INT = 0x01
256
+ BOOL = 0x02
257
+ DOUBLE = 0x03
258
+ STRING = 0x04
259
+
260
+
261
+ class RNTupleClusterFlag(IntEnum):
262
+ SHARDED = 0x01
@@ -1541,7 +1541,7 @@ class ROOTRVec(Container, Sequence):
1541
1541
  return False
1542
1542
 
1543
1543
  def __array__(self, *args, **kwargs):
1544
- return numpy.asarray(self._vector, *args, **kwargs)
1544
+ return numpy.asarray(self._values, *args, **kwargs)
1545
1545
 
1546
1546
  def tolist(self):
1547
1547
  return [
@@ -1656,7 +1656,7 @@ class STLVector(Container, Sequence):
1656
1656
  return False
1657
1657
 
1658
1658
  def __array__(self, *args, **kwargs):
1659
- return numpy.asarray(self._vector, *args, **kwargs)
1659
+ return numpy.asarray(self._values, *args, **kwargs)
1660
1660
 
1661
1661
  def tolist(self):
1662
1662
  return [
@@ -607,6 +607,8 @@ def _parse_node(tokens, i, typename, file, quote, header, inner_header):
607
607
  return i + 1, _parse_maybe_quote('numpy.dtype("u1")', quote)
608
608
  elif has2 and tokens[i].group(0) == "unsigned" and tokens[i + 1].group(0) == "char":
609
609
  return i + 2, _parse_maybe_quote('numpy.dtype("u1")', quote)
610
+ elif has2 and tokens[i].group(0) == "signed" and tokens[i + 1].group(0) == "char":
611
+ return i + 2, _parse_maybe_quote('numpy.dtype(">i1")', quote)
610
612
 
611
613
  elif _simplify_token(tokens[i]) == "UChar_t*":
612
614
  return (
@@ -639,6 +641,8 @@ def _parse_node(tokens, i, typename, file, quote, header, inner_header):
639
641
  has2 and tokens[i].group(0) == "unsigned" and tokens[i + 1].group(0) == "short"
640
642
  ):
641
643
  return i + 2, _parse_maybe_quote('numpy.dtype(">u2")', quote)
644
+ elif has2 and tokens[i].group(0) == "signed" and tokens[i + 1].group(0) == "short":
645
+ return i + 2, _parse_maybe_quote('numpy.dtype(">i2")', quote)
642
646
 
643
647
  elif _simplify_token(tokens[i]) == "Short_t*":
644
648
  return (
@@ -685,6 +689,8 @@ def _parse_node(tokens, i, typename, file, quote, header, inner_header):
685
689
  return i + 1, _parse_maybe_quote('numpy.dtype(">u4")', quote)
686
690
  elif has2 and tokens[i].group(0) == "unsigned" and tokens[i + 1].group(0) == "int":
687
691
  return i + 2, _parse_maybe_quote('numpy.dtype(">u4")', quote)
692
+ elif has2 and tokens[i].group(0) == "signed" and tokens[i + 1].group(0) == "int":
693
+ return i + 2, _parse_maybe_quote('numpy.dtype(">i4")', quote)
688
694
 
689
695
  elif _simplify_token(tokens[i]) == "Int_t*":
690
696
  return (
@@ -744,6 +750,8 @@ def _parse_node(tokens, i, typename, file, quote, header, inner_header):
744
750
  return i + 1, _parse_maybe_quote('numpy.dtype(">u8")', quote)
745
751
  elif has2 and tokens[i].group(0) == "unsigned" and tokens[i + 1].group(0) == "long":
746
752
  return i + 2, _parse_maybe_quote('numpy.dtype(">u8")', quote)
753
+ elif has2 and tokens[i].group(0) == "signed" and tokens[i + 1].group(0) == "long":
754
+ return i + 2, _parse_maybe_quote('numpy.dtype(">i8")', quote)
747
755
 
748
756
  elif (
749
757
  has2
@@ -919,7 +919,12 @@ class Pandas(Library):
919
919
  )
920
920
 
921
921
  else:
922
- index = arrays.index.arrays
922
+ # arrays.index.values before Pandas 0.24 and again now;
923
+ # arrays.index.arrays from Pandas 0.24 through some time ago.
924
+ if hasattr(arrays.index, "values"):
925
+ index = arrays.index.values
926
+ else:
927
+ index = arrays.index.arrays
923
928
  numpy.add(index, global_offset, out=index)
924
929
 
925
930
  return arrays
@@ -516,6 +516,10 @@ class PythonLanguage(uproot.language.Language):
516
516
  else:
517
517
  output[name] = output[name][cut]
518
518
 
519
+ # clear dicts to get rid of big arrays.
520
+ # note: without this these arrays are not properly released from memory!
521
+ values.clear()
522
+ scope.clear()
519
523
  return output
520
524
 
521
525