uproot 5.5.0__tar.gz → 5.5.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 (301) hide show
  1. {uproot-5.5.0 → uproot-5.5.2}/.all-contributorsrc +9 -0
  2. {uproot-5.5.0 → uproot-5.5.2}/.github/workflows/build-test.yml +1 -1
  3. {uproot-5.5.0 → uproot-5.5.2}/.github/workflows/deploy.yml +2 -2
  4. {uproot-5.5.0 → uproot-5.5.2}/.pre-commit-config.yaml +3 -3
  5. {uproot-5.5.0 → uproot-5.5.2}/CITATION.cff +1 -1
  6. {uproot-5.5.0 → uproot-5.5.2}/PKG-INFO +5 -5
  7. {uproot-5.5.0 → uproot-5.5.2}/README.md +1 -0
  8. {uproot-5.5.0 → uproot-5.5.2}/pyproject.toml +2 -3
  9. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/_dask.py +18 -8
  10. uproot-5.5.2/src/uproot/const.py +287 -0
  11. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/identify.py +2 -25
  12. uproot-5.5.2/src/uproot/interpretation/known_forth/__init__.py +46 -0
  13. uproot-5.5.2/src/uproot/interpretation/known_forth/atlas.py +99 -0
  14. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/objects.py +16 -3
  15. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/language/python.py +4 -4
  16. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/RNTuple.py +222 -119
  17. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/reading.py +5 -5
  18. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/serialization.py +2 -2
  19. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/fsspec.py +7 -1
  20. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/version.py +2 -2
  21. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/_cascadetree.py +4 -6
  22. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0001_source_class.py +2 -0
  23. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0013_rntuple_anchor.py +25 -26
  24. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0630_rntuple_basics.py +5 -3
  25. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0662_rntuple_stl_containers.py +1 -1
  26. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0840_support_tleafG.py +1 -1
  27. uproot-5.5.0/tests/test_0962_RNTuple_update.py → uproot-5.5.2/tests/test_0962_rntuple_update.py +5 -28
  28. uproot-5.5.2/tests/test_1159_rntuple_cluster_groups.py +27 -0
  29. uproot-5.5.2/tests/test_1191_rntuple_fixes.py +63 -0
  30. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1223_more_rntuple_types.py +9 -6
  31. uproot-5.5.2/tests/test_1229_const_in_typename.py +27 -0
  32. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1250_rntuple_improvements.py +14 -14
  33. uproot-5.5.2/tests/test_1282_add_known_forth_for_atlas.py +48 -0
  34. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1285_rntuple_multicluster_concatenation.py +1 -1
  35. uproot-5.5.2/tests/test_1347_rntuple_floats_suppressed_cols.py +167 -0
  36. {uproot-5.5.0 → uproot-5.5.2}/tests-wasm/test_1272_basic_functionality.py +3 -0
  37. uproot-5.5.0/src/uproot/const.py +0 -262
  38. uproot-5.5.0/tests/test_1191_rntuple_fixes.py +0 -87
  39. {uproot-5.5.0 → uproot-5.5.2}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  40. {uproot-5.5.0 → uproot-5.5.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  41. {uproot-5.5.0 → uproot-5.5.2}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  42. {uproot-5.5.0 → uproot-5.5.2}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  43. {uproot-5.5.0 → uproot-5.5.2}/.github/dependabot.yml +0 -0
  44. {uproot-5.5.0 → uproot-5.5.2}/.github/workflows/build-distributions.yml +0 -0
  45. {uproot-5.5.0 → uproot-5.5.2}/.github/workflows/semantic-pr-title.yml +0 -0
  46. {uproot-5.5.0 → uproot-5.5.2}/.github/workflows/upload-nightly-wheels.yml +0 -0
  47. {uproot-5.5.0 → uproot-5.5.2}/.gitignore +0 -0
  48. {uproot-5.5.0 → uproot-5.5.2}/.readthedocs.yml +0 -0
  49. {uproot-5.5.0 → uproot-5.5.2}/LICENSE +0 -0
  50. {uproot-5.5.0 → uproot-5.5.2}/dev/example-objects.py +0 -0
  51. {uproot-5.5.0 → uproot-5.5.2}/dev/make-models.py +0 -0
  52. {uproot-5.5.0 → uproot-5.5.2}/docs-img/diagrams/abstraction-layers.png +0 -0
  53. {uproot-5.5.0 → uproot-5.5.2}/docs-img/diagrams/abstraction-layers.svg +0 -0
  54. {uproot-5.5.0 → uproot-5.5.2}/docs-img/diagrams/example-dask-graph.png +0 -0
  55. {uproot-5.5.0 → uproot-5.5.2}/docs-img/diagrams/uproot-awkward-timeline.png +0 -0
  56. {uproot-5.5.0 → uproot-5.5.2}/docs-img/diagrams/uproot-awkward-timeline.svg +0 -0
  57. {uproot-5.5.0 → uproot-5.5.2}/docs-img/logo/logo-300px-white.png +0 -0
  58. {uproot-5.5.0 → uproot-5.5.2}/docs-img/logo/logo-300px.png +0 -0
  59. {uproot-5.5.0 → uproot-5.5.2}/docs-img/logo/logo-600px.png +0 -0
  60. {uproot-5.5.0 → uproot-5.5.2}/docs-img/logo/logo.svg +0 -0
  61. {uproot-5.5.0 → uproot-5.5.2}/docs-img/photos/switcheroo.jpg +0 -0
  62. {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/_templates/breadcrumbs.html +0 -0
  63. {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/basic.rst +0 -0
  64. {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/conf.py +0 -0
  65. {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/index.rst +0 -0
  66. {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/make_changelog.py +0 -0
  67. {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/prepare_docstrings.py +0 -0
  68. {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/requirements.txt +0 -0
  69. {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/uproot3-to-4.rst +0 -0
  70. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/__init__.py +0 -0
  71. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/_awkwardforth.py +0 -0
  72. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/_util.py +0 -0
  73. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behavior.py +0 -0
  74. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/RooCurve.py +0 -0
  75. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/RooHist.py +0 -0
  76. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TAxis.py +0 -0
  77. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TBranch.py +0 -0
  78. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TBranchElement.py +0 -0
  79. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TDatime.py +0 -0
  80. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TGraph.py +0 -0
  81. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TGraphAsymmErrors.py +0 -0
  82. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TGraphErrors.py +0 -0
  83. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TH1.py +0 -0
  84. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TH2.py +0 -0
  85. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TH2Poly.py +0 -0
  86. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TH3.py +0 -0
  87. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TParameter.py +0 -0
  88. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TProfile.py +0 -0
  89. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TProfile2D.py +0 -0
  90. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TProfile3D.py +0 -0
  91. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TTree.py +0 -0
  92. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/__init__.py +0 -0
  93. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/cache.py +0 -0
  94. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/compression.py +0 -0
  95. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/containers.py +0 -0
  96. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/deserialization.py +0 -0
  97. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/dynamic.py +0 -0
  98. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/exceptions.py +0 -0
  99. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/extras.py +0 -0
  100. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/__init__.py +0 -0
  101. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/grouped.py +0 -0
  102. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/jagged.py +0 -0
  103. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/library.py +0 -0
  104. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/numerical.py +0 -0
  105. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/strings.py +0 -0
  106. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/language/__init__.py +0 -0
  107. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/model.py +0 -0
  108. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TArray.py +0 -0
  109. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TAtt.py +0 -0
  110. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TBasket.py +0 -0
  111. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TBranch.py +0 -0
  112. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TClonesArray.py +0 -0
  113. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TDatime.py +0 -0
  114. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TGraph.py +0 -0
  115. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TH.py +0 -0
  116. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/THashList.py +0 -0
  117. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TLeaf.py +0 -0
  118. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TList.py +0 -0
  119. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TMatrixT.py +0 -0
  120. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TNamed.py +0 -0
  121. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TObjArray.py +0 -0
  122. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TObjString.py +0 -0
  123. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TObject.py +0 -0
  124. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TRef.py +0 -0
  125. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TString.py +0 -0
  126. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TTable.py +0 -0
  127. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TTime.py +0 -0
  128. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TTree.py +0 -0
  129. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/__init__.py +0 -0
  130. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/pyroot.py +0 -0
  131. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/sink/__init__.py +0 -0
  132. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/sink/file.py +0 -0
  133. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/__init__.py +0 -0
  134. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/chunk.py +0 -0
  135. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/coalesce.py +0 -0
  136. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/cursor.py +0 -0
  137. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/file.py +0 -0
  138. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/futures.py +0 -0
  139. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/http.py +0 -0
  140. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/object.py +0 -0
  141. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/s3.py +0 -0
  142. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/xrootd.py +0 -0
  143. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/streamers.py +0 -0
  144. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/__init__.py +7 -7
  145. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/_cascade.py +0 -0
  146. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/_cascadentuple.py +0 -0
  147. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/_dask_write.py +0 -0
  148. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/identify.py +0 -0
  149. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/interpret.py +0 -0
  150. {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/writable.py +0 -0
  151. {uproot-5.5.0 → uproot-5.5.2}/tests/__init__.py +0 -0
  152. {uproot-5.5.0 → uproot-5.5.2}/tests/conftest.py +0 -0
  153. {uproot-5.5.0 → uproot-5.5.2}/tests/samples/h_dynamic.pkl +0 -0
  154. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0006_notify_when_downloaded.py +0 -0
  155. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0007_single_chunk_interface.py +0 -0
  156. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0008_start_interpretation.py +0 -0
  157. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0009_nested_directories.py +0 -0
  158. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0010_start_streamers.py +0 -0
  159. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0011_generate_classes_from_streamers.py +0 -0
  160. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0014_all_ttree_versions.py +0 -0
  161. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0016_interpretations.py +0 -0
  162. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0017_multi_basket_multi_branch_fetch.py +0 -0
  163. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0018_array_fetching_interface.py +0 -0
  164. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0022_number_of_branches.py +0 -0
  165. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0023_more_interpretations_1.py +0 -0
  166. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0023_ttree_versions.py +0 -0
  167. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0028_fallback_to_read_streamer.py +0 -0
  168. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0029_more_string_types.py +0 -0
  169. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0031_test_stl_containers.py +0 -0
  170. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0033_more_interpretations_2.py +0 -0
  171. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0034_generic_objects_in_ttrees.py +0 -0
  172. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0035_datatype_generality.py +0 -0
  173. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0038_memberwise_serialization.py +0 -0
  174. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0043_iterate_function.py +0 -0
  175. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0044_concatenate_function.py +0 -0
  176. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0046_histograms_bh_hist.py +0 -0
  177. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0053_parents_should_not_be_bases.py +0 -0
  178. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0058_detach_model_objects_from_files.py +0 -0
  179. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0066_fix_http_fallback_freeze.py +0 -0
  180. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0067_common_entry_offsets.py +0 -0
  181. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0081_dont_parse_colons.py +0 -0
  182. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0087_memberwise_splitting_not_implemented_messages.py +0 -0
  183. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0088_read_with_http.py +0 -0
  184. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0099_read_from_file_object.py +0 -0
  185. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0112_fix_pandas_with_cut.py +0 -0
  186. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0118_fix_name_fetch_again.py +0 -0
  187. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0123_atlas_issues.py +0 -0
  188. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0126_turn_unknown_emptyarrays_into_known_types.py +0 -0
  189. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0167_use_the_common_histogram_interface.py +0 -0
  190. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0172_allow_allocators_in_vector_typenames.py +0 -0
  191. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0173_empty_and_multiprocessing_bugs.py +0 -0
  192. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0182_complain_about_missing_files.py +0 -0
  193. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0194_fix_lost_cuts_in_iterate.py +0 -0
  194. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0220_contiguous_byte_ranges_in_http.py +0 -0
  195. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0228_read_TProfiles.py +0 -0
  196. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0240_read_TGraphAsymmErrors.py +0 -0
  197. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0278_specializations_for_TParameter.py +0 -0
  198. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0302_pickle.py +0 -0
  199. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0303_empty_jagged_array.py +0 -0
  200. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0320_start_working_on_ROOT_writing.py +0 -0
  201. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0322_writablefile_infrastructure.py +0 -0
  202. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0329_update_existing_root_files.py +0 -0
  203. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0335_empty_ttree_division_by_zero.py +0 -0
  204. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0341_manipulate_streamer_info.py +0 -0
  205. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0344_writabledirectory_can_read.py +0 -0
  206. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0345_bulk_copy_method.py +0 -0
  207. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0349_write_TObjString.py +0 -0
  208. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0350_read_RooCurve_RooHist.py +0 -0
  209. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0351_write_TList.py +0 -0
  210. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0352_write_THashList.py +0 -0
  211. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0384_move_behavior_of_and_fix_383.py +0 -0
  212. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0398_dimensions_in_leaflist.py +0 -0
  213. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0405_write_a_histogram.py +0 -0
  214. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0406_write_a_ttree.py +0 -0
  215. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0407_read_TDatime.py +0 -0
  216. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0412_write_multidimensional_numpy_to_ttree.py +0 -0
  217. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0414_write_jagged_arrays.py +0 -0
  218. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0416_writing_compressed_data.py +0 -0
  219. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0418_read_TTable.py +0 -0
  220. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0420_pyroot_uproot_interoperability.py +0 -0
  221. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0422_hist_integration.py +0 -0
  222. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0430_global_index_for_tuples_of_DataFrames.py +0 -0
  223. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0438_TClonesArray_is_not_AsGrouped.py +0 -0
  224. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0439_check_awkward_before_numpy.py +0 -0
  225. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0442_regular_TClonesArray.py +0 -0
  226. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0472_tstreamerinfo_for_ttree.py +0 -0
  227. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0475_remember_to_update_freesegments.py +0 -0
  228. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0484_manually_add_model_for_TMatrixTSym_double_.py +0 -0
  229. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0487_implement_asdtypeinplace.py +0 -0
  230. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0498_create_leaf_branch_in_extend.py +0 -0
  231. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0519_remove_memmap_copy.py +0 -0
  232. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0520_dynamic_classes_cant_be_abc_subclasses.py +0 -0
  233. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0569_fBits_is_4_bytes.py +0 -0
  234. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0576_unicode_in_names.py +0 -0
  235. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0578_dask_for_numpy.py +0 -0
  236. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0580_round_trip_for_no_flow_histograms.py +0 -0
  237. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0589_explicitly_interpret_RVec_type.py +0 -0
  238. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0603_dask_delayed_open.py +0 -0
  239. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0609_num_enteries_func.py +0 -0
  240. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0610_awkward_form.py +0 -0
  241. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0637_setup_tests_for_AwkwardForth.py +0 -0
  242. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0643_reading_vector_pair_TLorentzVector_int.py +0 -0
  243. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0651_implement_transformed_axis.py +0 -0
  244. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0652_dask_for_awkward.py +0 -0
  245. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0692_fsspec_reading.py +0 -0
  246. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0692_fsspec_writing.py +0 -0
  247. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0700_dask_empty_arrays.py +0 -0
  248. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0705_rntuple_writing_metadata.py +0 -0
  249. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0750_avoid_empty_TBasket_issue.py +0 -0
  250. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0755_dask_awkward_column_projection.py +0 -0
  251. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0791_protect_uproot_project_columns_from_dask_node_names.py +0 -0
  252. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0798_DAOD_PHYSLITE.py +0 -0
  253. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0808_fix_awkward_form_for_AsStridedObjects.py +0 -0
  254. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0816_separate_AwkwardForth_machines_by_TBranch.py +0 -0
  255. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0832_ak_add_doc_should_also_add_to_typetracer.py +0 -0
  256. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0841_fix_814.py +0 -0
  257. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0844_fix_delete_hist_from_root.py +0 -0
  258. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0852_fix_strided_interp_extra_offsets.py +0 -0
  259. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0870_writing_arrays_of_type_unknown_fix_822.py +0 -0
  260. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0876_uproot_dask_blind_steps.py +0 -0
  261. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0886_fix_awkward_form_breadcrumbs.py +0 -0
  262. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0910_fix_906_members_non_numerical_branches.py +0 -0
  263. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0911_fix_interp_array_non_numerical_objs_issue_880.py +0 -0
  264. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0912_fix_pandas_and_double_nested_vectors_issue_885.py +0 -0
  265. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0916_read_from_s3.py +0 -0
  266. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0927_dont_assume_uproot_in_global_scope_in_TPython_Eval.py +0 -0
  267. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0930_expressions_in_pandas.py +0 -0
  268. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0940_feat_add_TLeafC_string_support.py +0 -0
  269. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0965_inverted_axes_variances_hist_888.py +0 -0
  270. {uproot-5.5.0 → uproot-5.5.2}/tests/test_0976_path_object_split.py +0 -0
  271. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1000-write-TProfiles.py +0 -0
  272. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1043_const_std_string.py +0 -0
  273. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1058_dask_awkward_report.py +0 -0
  274. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1063_dask_distributed.py +0 -0
  275. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1070_pandas_dataframe_building_performance_fix.py +0 -0
  276. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1085_dask_write.py +0 -0
  277. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1102_any_locks_in_models_must_be_transient.py +0 -0
  278. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1114_fix_attempt_to_concatenate_numpy_with_awkward.py +0 -0
  279. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1120_check_decompression_executor_pass_for_dask.py +0 -0
  280. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1127_fix_allow_colon_in_key_names.py +0 -0
  281. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1128_TGraph_writing.py +0 -0
  282. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1146_split_ranges_for_large_files_over_http.py +0 -0
  283. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1154_classof_using_relative_path.py +0 -0
  284. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1160_std_string_in_TDirectory.py +0 -0
  285. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1180_read_free_floating_vector_issue_1179.py +0 -0
  286. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1181_support_for_stl_list.py +0 -0
  287. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1182_add_support_for_bitset.py +0 -0
  288. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1183_ttime_custom.py +0 -0
  289. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1186_dtype_might_raise_ValueError.py +0 -0
  290. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1189_dask_failing_on_duplicate_keys.py +0 -0
  291. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1198_coalesce.py +0 -0
  292. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1207_fix_title_of_TBranch_with_counter.py +0 -0
  293. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1212_dont_let_update_mess_up_file_version.py +0 -0
  294. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1221_AwkwardForth_bug.py +0 -0
  295. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1254_test_threadpool_executor_for_dask.py +0 -0
  296. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1264_write_NumPy_array_of_strings.py +0 -0
  297. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1275_fix_TStreamerLoop_code_generation.py +0 -0
  298. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1318_dont_compare_big_endian_in_awkward.py +0 -0
  299. {uproot-5.5.0 → uproot-5.5.2}/tests/test_1321_pandas_changed_api_again.py +0 -0
  300. {uproot-5.5.0 → uproot-5.5.2}/tests-wasm/__init__.py +0 -0
  301. {uproot-5.5.0 → uproot-5.5.2}/tests-wasm/utils.py +0 -0
@@ -605,6 +605,15 @@
605
605
  "contributions": [
606
606
  "code"
607
607
  ]
608
+ },
609
+ {
610
+ "login": "ariostas",
611
+ "name": "Andres Rios Tascon",
612
+ "avatar_url": "https://avatars.githubusercontent.com/u/7596837?v=4",
613
+ "profile": "http://www.ariostas.com",
614
+ "contributions": [
615
+ "code"
616
+ ]
608
617
  }
609
618
  ],
610
619
  "contributorsPerLine": 7,
@@ -90,7 +90,7 @@ jobs:
90
90
  python-version: ${{ matrix.python-version }}
91
91
  allow-prereleases: true
92
92
 
93
- - uses: astral-sh/setup-uv@v3
93
+ - uses: astral-sh/setup-uv@v5
94
94
 
95
95
  - name: Pip install the package
96
96
  run: uv pip install --system .[test,dev]
@@ -36,10 +36,10 @@ jobs:
36
36
  run: ls -lha dist/
37
37
 
38
38
  - name: Generate artifact attestation for sdist and wheel
39
- uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3
39
+ uses: actions/attest-build-provenance@520d128f165991a6c774bcb264f323e3d70747f4 # v2.2.0
40
40
  with:
41
41
  subject-path: dist/uproot-*
42
42
 
43
43
  - uses: pypa/gh-action-pypi-publish@release/v1
44
44
  with:
45
- password: ${{ secrets.pypi_password }}
45
+ print-hash: true
@@ -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.10.0
21
+ rev: 25.1.0
22
22
  hooks:
23
23
  - id: black
24
24
 
25
25
  - repo: https://github.com/astral-sh/ruff-pre-commit
26
- rev: v0.7.2
26
+ rev: v0.9.6
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.19.0
33
+ rev: v3.19.1
34
34
  hooks:
35
35
  - id: pyupgrade
36
36
  args: [--py38-plus]
@@ -8,7 +8,7 @@ authors:
8
8
  given-names: "Jim"
9
9
  affiliation: "Princeton University"
10
10
  orcid: "https://orcid.org/0000-0002-6649-343X"
11
- email: "pivarski@princeton.edu"
11
+ email: "jpivarski@gmail.com"
12
12
  - family-names: "Schreiner"
13
13
  given-names: "Henry"
14
14
  affiliation: "Princeton University"
@@ -1,10 +1,10 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: uproot
3
- Version: 5.5.0
3
+ Version: 5.5.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
7
- Author-email: Jim Pivarski <pivarski@princeton.edu>
7
+ Author-email: Jim Pivarski <jpivarski@gmail.com>
8
8
  License-Expression: BSD-3-Clause
9
9
  License-File: LICENSE
10
10
  Classifier: Development Status :: 5 - Production/Stable
@@ -40,7 +40,7 @@ Requires-Dist: xxhash
40
40
  Provides-Extra: dev
41
41
  Requires-Dist: awkward-pandas; extra == 'dev'
42
42
  Requires-Dist: boost-histogram>=0.13; extra == 'dev'
43
- Requires-Dist: dask-awkward>=2023.12.1; extra == 'dev'
43
+ Requires-Dist: dask-awkward>=2025.2.0; extra == 'dev'
44
44
  Requires-Dist: dask[array,distributed]; extra == 'dev'
45
45
  Requires-Dist: hist>=1.2; extra == 'dev'
46
46
  Requires-Dist: pandas; extra == 'dev'
@@ -67,7 +67,6 @@ Requires-Dist: pytest-pyodide; extra == 'test-pyodide'
67
67
  Requires-Dist: pytest-timeout; extra == 'test-pyodide'
68
68
  Requires-Dist: pytest>=6; extra == 'test-pyodide'
69
69
  Requires-Dist: scikit-hep-testdata; extra == 'test-pyodide'
70
- Requires-Dist: selenium<=4.25.0; extra == 'test-pyodide'
71
70
  Provides-Extra: xrootd
72
71
  Requires-Dist: fsspec-xrootd; extra == 'xrootd'
73
72
  Description-Content-Type: text/markdown
@@ -267,6 +266,7 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
267
266
  <tr>
268
267
  <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>
269
268
  <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>
269
+ <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>
270
270
  </tr>
271
271
  </tbody>
272
272
  </table>
@@ -193,6 +193,7 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
193
193
  <tr>
194
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
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
+ <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>
196
197
  </tr>
197
198
  </tbody>
198
199
  </table>
@@ -10,7 +10,7 @@ max-complexity = 100
10
10
 
11
11
  [project]
12
12
  authors = [
13
- {name = "Jim Pivarski", email = "pivarski@princeton.edu"}
13
+ {name = "Jim Pivarski", email = "jpivarski@gmail.com"}
14
14
  ]
15
15
  classifiers = [
16
16
  "Development Status :: 5 - Production/Stable",
@@ -57,7 +57,7 @@ requires-python = ">=3.9"
57
57
  [project.optional-dependencies]
58
58
  dev = [
59
59
  "boost_histogram>=0.13",
60
- "dask-awkward>=2023.12.1",
60
+ "dask-awkward>=2025.2.0",
61
61
  "dask[array,distributed]",
62
62
  "hist>=1.2",
63
63
  "pandas",
@@ -82,7 +82,6 @@ test = [
82
82
  ]
83
83
  test-pyodide = [
84
84
  "pytest>=6",
85
- "selenium<=4.25.0", # unpin once >4.26.0 is available
86
85
  "pytest-pyodide",
87
86
  "pytest-timeout",
88
87
  "scikit-hep-testdata"
@@ -383,6 +383,8 @@ def _dask_array_from_map(
383
383
  **kwargs,
384
384
  ):
385
385
  dask = uproot.extras.dask()
386
+ _dask_uses_tasks = hasattr(dask, "_task_spec")
387
+
386
388
  da = uproot.extras.dask_array()
387
389
  if not callable(func):
388
390
  raise ValueError("`func` argument must be `callable`")
@@ -446,14 +448,22 @@ def _dask_array_from_map(
446
448
  produces_tasks=produces_tasks,
447
449
  )
448
450
 
449
- dsk = dask.blockwise.Blockwise(
450
- output=name,
451
- output_indices="i",
452
- dsk={name: (io_func, dask.blockwise.blockwise_token(0))},
453
- indices=[(io_arg_map, "i")],
454
- numblocks={},
455
- annotations=None,
456
- )
451
+ blockwise_kwargs = {
452
+ "output": name,
453
+ "output_indices": "i",
454
+ "indices": [(io_arg_map, "i")],
455
+ "numblocks": {},
456
+ "annotations": None,
457
+ }
458
+
459
+ if _dask_uses_tasks:
460
+ blockwise_kwargs["task"] = dask._task_spec.Task(
461
+ name, io_func, dask._task_spec.TaskRef(dask.blockwise.blockwise_token(0))
462
+ )
463
+ else:
464
+ blockwise_kwargs["dsk"] = {name: (io_func, dask.blockwise.blockwise_token(0))}
465
+
466
+ dsk = dask.blockwise.Blockwise(**blockwise_kwargs)
457
467
 
458
468
  hlg = dask.highlevelgraph.HighLevelGraph.from_collections(name, dsk)
459
469
  return da.core.Array(hlg, name, chunks, dtype=dtype)
@@ -0,0 +1,287 @@
1
+ # BSD 3-Clause License; see https://github.com/scikit-hep/uproot5/blob/main/LICENSE
2
+
3
+ """
4
+ This module defines integer constants used by serialization and deserialization routines.
5
+ """
6
+ from __future__ import annotations
7
+
8
+ from enum import IntEnum
9
+
10
+ import numpy
11
+
12
+ # determines when a file is "big"
13
+ kStartBigFile = 2000000000
14
+
15
+ # used in unmarshaling
16
+ kByteCountMask = numpy.int64(0x40000000)
17
+ kByteCountVMask = numpy.int64(0x4000)
18
+ kClassMask = numpy.int64(0x80000000)
19
+ kNewClassTag = numpy.int64(0xFFFFFFFF)
20
+
21
+ kIsOnHeap = numpy.uint32(0x01000000)
22
+ kNotDeleted = numpy.uint32(0x02000000)
23
+ kMustCleanup = numpy.uint32(1 << 3)
24
+ kIsReferenced = numpy.uint32(1 << 4)
25
+
26
+ kMapOffset = 2
27
+
28
+ # not used?
29
+ kNullTag = 0
30
+ kZombie = numpy.uint32(0x04000000)
31
+ kBitMask = numpy.uint32(0x00FFFFFF)
32
+ kDisplacementMask = numpy.uint32(0xFF000000)
33
+
34
+ ############# core/zip/inc/Compression.h
35
+
36
+ kZLIB = 1
37
+ kLZMA = 2
38
+ kOldCompressionAlgo = 3
39
+ kLZ4 = 4
40
+ kZSTD = 5
41
+ kUndefinedCompressionAlgorithm = 6
42
+
43
+ ############# constants for streamers
44
+
45
+ kBase = 0
46
+ kChar = 1
47
+ kShort = 2
48
+ kInt = 3
49
+ kLong = 4
50
+ kFloat = 5
51
+ kCounter = 6
52
+ kCharStar = 7
53
+ kDouble = 8
54
+ kDouble32 = 9
55
+ kLegacyChar = 10
56
+ kUChar = 11
57
+ kUShort = 12
58
+ kUInt = 13
59
+ kULong = 14
60
+ kBits = 15
61
+ kLong64 = 16
62
+ kULong64 = 17
63
+ kBool = 18
64
+ kFloat16 = 19
65
+ kOffsetL = 20
66
+ kOffsetP = 40
67
+ kObject = 61
68
+ kAny = 62
69
+ kObjectp = 63
70
+ kObjectP = 64
71
+ kTString = 65
72
+ kTObject = 66
73
+ kTNamed = 67
74
+ kAnyp = 68
75
+ kAnyP = 69
76
+ kAnyPnoVT = 70
77
+ kSTLp = 71
78
+
79
+ kSkip = 100
80
+ kSkipL = 120
81
+ kSkipP = 140
82
+
83
+ kConv = 200
84
+ kConvL = 220
85
+ kConvP = 240
86
+
87
+ kSTL = 300
88
+ kSTLstring = 365
89
+
90
+ kStreamer = 500
91
+ kStreamLoop = 501
92
+
93
+ ############# constants from core/foundation/inc/ESTLType.h
94
+
95
+ kNotSTL = 0
96
+ kSTLvector = 1
97
+ kSTLlist = 2
98
+ kSTLdeque = 3
99
+ kSTLmap = 4
100
+ kSTLmultimap = 5
101
+ kSTLset = 6
102
+ kSTLmultiset = 7
103
+ kSTLbitset = 8
104
+ kSTLforwardlist = 9
105
+ kSTLunorderedset = 10
106
+ kSTLunorderedmultiset = 11
107
+ kSTLunorderedmap = 12
108
+ kSTLunorderedmultimap = 13
109
+ kSTLend = 14
110
+ kSTLany = 300
111
+
112
+ ############# IOFeatures
113
+
114
+ kGenerateOffsetMap = numpy.uint8(1)
115
+
116
+ ############# other
117
+
118
+ kStreamedMemberWise = numpy.uint16(1 << 14)
119
+
120
+ ############ RNTuple https://github.com/root-project/root/blob/0b9cdbcfd326ba50ee6c2f202675656129eafbe7/tree/ntuple/v7/doc/BinaryFormatSpecification.md
121
+ rntuple_col_num_to_dtype_dict = {
122
+ 0x00: "bit",
123
+ 0x01: "uint8", # uninterpreted byte
124
+ 0x02: "uint8", # char
125
+ 0x03: "int8",
126
+ 0x04: "uint8",
127
+ 0x05: "int16",
128
+ 0x06: "uint16",
129
+ 0x07: "int32",
130
+ 0x08: "uint32",
131
+ 0x09: "int64",
132
+ 0x0A: "uint64",
133
+ 0x0B: "float16",
134
+ 0x0C: "float32",
135
+ 0x0D: "float64",
136
+ 0x0E: "uint32", # Index32
137
+ 0x0F: "uint64", # Index64
138
+ 0x10: "switch", # Switch: (uint64, uint32)
139
+ 0x11: "int16", # SplitInt16: split + zigzag encoding
140
+ 0x12: "uint16", # SplitUInt16: split encoding
141
+ 0x13: "int32", # SplitInt32: split + zigzag encoding
142
+ 0x14: "uint32", # SplitUInt32: split encoding
143
+ 0x15: "int64", # SplitInt64: split + zigzag encoding
144
+ 0x16: "uint64", # SplitUInt64: split encoding
145
+ 0x17: "float16", # SplitReal16: split encoding
146
+ 0x18: "float32", # SplitReal32: split encoding
147
+ 0x19: "float64", # SplitReal64: split encoding
148
+ 0x1A: "uint32", # SplitIndex32: split + delta encoding
149
+ 0x1B: "uint64", # SplitIndex64: split + delta encoding
150
+ 0x1C: "real32trunc", # Real32Trunc: float32 with truncated mantissa
151
+ 0x1D: "real32quant", # Real32Quant: float32 with quantized integer representation
152
+ }
153
+ rntuple_col_num_to_size_dict = {
154
+ 0x00: 1,
155
+ 0x01: 8,
156
+ 0x02: 8,
157
+ 0x03: 8,
158
+ 0x04: 8,
159
+ 0x05: 16,
160
+ 0x06: 16,
161
+ 0x07: 32,
162
+ 0x08: 32,
163
+ 0x09: 64,
164
+ 0x0A: 64,
165
+ 0x0B: 16,
166
+ 0x0C: 32,
167
+ 0x0D: 64,
168
+ 0x0E: 32,
169
+ 0x0F: 64,
170
+ 0x10: 96,
171
+ 0x11: 16,
172
+ 0x12: 16,
173
+ 0x13: 32,
174
+ 0x14: 32,
175
+ 0x15: 64,
176
+ 0x16: 64,
177
+ 0x17: 16,
178
+ 0x18: 32,
179
+ 0x19: 64,
180
+ 0x1A: 32,
181
+ 0x1B: 64,
182
+ 0x1C: 31, # variable from 10 to 31
183
+ 0x1D: 32, # variable from 1 to 32
184
+ }
185
+ rntuple_col_type_to_num_dict = {
186
+ "bit": 0x00,
187
+ "byte": 0x01,
188
+ "char": 0x02,
189
+ "int8": 0x03,
190
+ "uint8": 0x04,
191
+ "int16": 0x05,
192
+ "uint16": 0x06,
193
+ "int32": 0x07,
194
+ "uint32": 0x08,
195
+ "int64": 0x09,
196
+ "uint64": 0x0A,
197
+ "real16": 0x0B,
198
+ "real32": 0x0C,
199
+ "real64": 0x0D,
200
+ "index32": 0x0E,
201
+ "index64": 0x0F,
202
+ "switch": 0x10,
203
+ "splitint16": 0x11,
204
+ "splituint16": 0x12,
205
+ "splitint32": 0x13,
206
+ "splituint32": 0x14,
207
+ "splitint64": 0x15,
208
+ "splituint64": 0x16,
209
+ "splitreal16": 0x17,
210
+ "splitreal32": 0x18,
211
+ "splitreal64": 0x19,
212
+ "splitindex32": 0x1A,
213
+ "splitindex64": 0x1B,
214
+ "real32trunc": 0x1C,
215
+ "real32quant": 0x1D,
216
+ }
217
+ rntuple_index_types = (
218
+ rntuple_col_type_to_num_dict["index32"],
219
+ rntuple_col_type_to_num_dict["index64"],
220
+ rntuple_col_type_to_num_dict["splitindex32"],
221
+ rntuple_col_type_to_num_dict["splitindex64"],
222
+ )
223
+ rntuple_split_types = (
224
+ rntuple_col_type_to_num_dict["splitint16"],
225
+ rntuple_col_type_to_num_dict["splituint16"],
226
+ rntuple_col_type_to_num_dict["splitint32"],
227
+ rntuple_col_type_to_num_dict["splituint32"],
228
+ rntuple_col_type_to_num_dict["splitint64"],
229
+ rntuple_col_type_to_num_dict["splituint64"],
230
+ rntuple_col_type_to_num_dict["splitreal16"],
231
+ rntuple_col_type_to_num_dict["splitreal32"],
232
+ rntuple_col_type_to_num_dict["splitreal64"],
233
+ rntuple_col_type_to_num_dict["splitindex32"],
234
+ rntuple_col_type_to_num_dict["splitindex64"],
235
+ )
236
+ rntuple_zigzag_types = (
237
+ rntuple_col_type_to_num_dict["splitint16"],
238
+ rntuple_col_type_to_num_dict["splitint32"],
239
+ rntuple_col_type_to_num_dict["splitint64"],
240
+ )
241
+ rntuple_delta_types = (
242
+ rntuple_col_type_to_num_dict["splitindex32"],
243
+ rntuple_col_type_to_num_dict["splitindex64"],
244
+ )
245
+ rntuple_custom_float_types = (
246
+ rntuple_col_type_to_num_dict["real32trunc"],
247
+ rntuple_col_type_to_num_dict["real32quant"],
248
+ )
249
+
250
+
251
+ class RNTupleLocatorType(IntEnum):
252
+ STANDARD = 0x00
253
+ LARGE = 0x01
254
+
255
+
256
+ class RNTupleEnvelopeType(IntEnum):
257
+ RESERVED = 0x00
258
+ HEADER = 0x01
259
+ FOOTER = 0x02
260
+ PAGELIST = 0x03
261
+
262
+
263
+ class RNTupleFieldRole(IntEnum):
264
+ LEAF = 0x00
265
+ COLLECTION = 0x01
266
+ RECORD = 0x02
267
+ VARIANT = 0x03
268
+ STREAMER = 0x04
269
+
270
+
271
+ class RNTupleFieldFlag(IntEnum):
272
+ REPETITIVE = 0x01
273
+ PROJECTED = 0x02
274
+ CHECKSUM = 0x04
275
+
276
+
277
+ class RNTupleColumnFlag(IntEnum):
278
+ DEFERRED = 0x01
279
+ RANGE = 0x02
280
+
281
+
282
+ class RNTupleExtraTypeIdentifier(IntEnum):
283
+ ROOT = 0x00
284
+
285
+
286
+ class RNTupleClusterFlag(IntEnum):
287
+ SHARDED = 0x01
@@ -577,6 +577,8 @@ def _parse_node(tokens, i, typename, file, quote, header, inner_header):
577
577
  if tokens[i].group(0) == ",":
578
578
  _parse_error(tokens[i].start() + 1, typename, file)
579
579
 
580
+ elif tokens[i].group(0) == "const":
581
+ return _parse_node(tokens, i + 1, typename, file, quote, header, inner_header)
580
582
  elif tokens[i].group(0) == "Bool_t":
581
583
  return i + 1, _parse_maybe_quote('numpy.dtype("?")', quote)
582
584
  elif tokens[i].group(0) == "bool":
@@ -919,19 +921,6 @@ def _parse_node(tokens, i, typename, file, quote, header, inner_header):
919
921
  _parse_maybe_quote(f"uproot.containers.AsString({header})", quote),
920
922
  )
921
923
 
922
- elif (
923
- has2
924
- and tokens[i].group(0) == "const"
925
- and (
926
- tokens[i + 1].group(0) == "string"
927
- or _simplify_token(tokens[i + 1]) == "std::string"
928
- )
929
- ):
930
- return (
931
- i + 2,
932
- _parse_maybe_quote(f"uproot.containers.AsString({header})", quote),
933
- )
934
-
935
924
  elif tokens[i].group(0) == "TString":
936
925
  return (
937
926
  i + 1,
@@ -947,18 +936,6 @@ def _parse_node(tokens, i, typename, file, quote, header, inner_header):
947
936
  quote,
948
937
  ),
949
938
  )
950
- elif (
951
- has2
952
- and tokens[i].group(0) == "const"
953
- and _simplify_token(tokens[i + 1]) == "char*"
954
- ):
955
- return (
956
- i + 2,
957
- _parse_maybe_quote(
958
- "uproot.containers.AsString(False, length_bytes='4', typename='char*')",
959
- quote,
960
- ),
961
- )
962
939
 
963
940
  elif tokens[i].group(0) == "bitset" or _simplify_token(tokens[i]) == "std::bitset":
964
941
  _parse_expect("<", tokens, i + 1, typename, file)
@@ -0,0 +1,46 @@
1
+ # BSD 3-Clause License; see https://github.com/scikit-hep/uproot5/blob/main/LICENSE
2
+
3
+ """
4
+ This module provides known forth code and awkward forms for types where it is known a priori.
5
+
6
+ See :doc:`uproot.interpretation.known_forth.known_forth_of` for the function
7
+ that provides the lookup of known forth codes and :doc:`uproot.interpretation.known_forth.atlas.VectorVectorElementLink` for an
8
+ implementation used in ATLAS (D)AODs.
9
+ """
10
+ from __future__ import annotations
11
+
12
+ import uproot
13
+ from uproot.interpretation.known_forth.atlas import VectorVectorElementLink
14
+
15
+ KNOWN_FORTH_DICT = {
16
+ "std::vector<std::vector<ElementLink<DataVector<xAOD::CaloCluster_v1>>>>": VectorVectorElementLink,
17
+ "std::vector<std::vector<ElementLink<DataVector<xAOD::IParticle>>>>": VectorVectorElementLink,
18
+ "std::vector<std::vector<ElementLink<DataVector<xAOD::MuonSegment_v1>>>>": VectorVectorElementLink,
19
+ "std::vector<std::vector<ElementLink<DataVector<xAOD::NeutralParticle_v1>>>>": VectorVectorElementLink,
20
+ "std::vector<std::vector<ElementLink<DataVector<xAOD::TauTrack_v1>>>>": VectorVectorElementLink,
21
+ "std::vector<std::vector<ElementLink<DataVector<xAOD::TrackParticle_v1>>>>": VectorVectorElementLink,
22
+ "std::vector<std::vector<ElementLink<DataVector<xAOD::TruthParticle_v1>>>>": VectorVectorElementLink,
23
+ "std::vector<std::vector<ElementLink<DataVector<xAOD::Vertex_v1>>>>": VectorVectorElementLink,
24
+ }
25
+
26
+
27
+ def known_forth_of(model):
28
+ """
29
+ Args:
30
+ model: The :doc:`uproot.model.Model` to look up known forth for
31
+
32
+ Returns an object with attributes `forth_code` and `awkward_form` if a known
33
+ special case exists, else None
34
+ """
35
+ try:
36
+ typename = model.typename
37
+ except AttributeError:
38
+ try:
39
+ typename = model.classname
40
+ except AttributeError:
41
+ typename = uproot.model.classname_decode(model.__name__)
42
+
43
+ if typename not in KNOWN_FORTH_DICT:
44
+ return
45
+
46
+ return KNOWN_FORTH_DICT[typename](typename)
@@ -0,0 +1,99 @@
1
+ # BSD 3-Clause License; see https://github.com/scikit-hep/uproot5/blob/main/LICENSE
2
+
3
+ """
4
+ This module defines ATLAS specific known forth code
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import re
10
+
11
+
12
+ class VectorVectorElementLink:
13
+ """
14
+ Known forth and awkward form for ``std::vector<std::vector<ElementLink<T>>`` types in ATLAS (D)AODs
15
+
16
+ The forth code was adjusted from what was provided in
17
+ ``branch._complete_forth_code`` after running ``.array()`` once.
18
+
19
+ The binary data of one vector<vector<ElementLink<T>> looks as follows:
20
+
21
+ * 6 bytes header for the outer vector
22
+ * 4 bytes big endian uint for the size of the outer vector (node1)
23
+ * for each outer vector element:
24
+ * 4 bytes big endian uint for the size of the inner vector (node2)
25
+ * for each inner vector element:
26
+ * 20 bytes header for the ElementLink object
27
+ * 4 bytes big endian uint for the ``m_persKey`` member (node3)
28
+ * 4 bytes big endian uint for the ``m_persIndex`` member (node4)
29
+ """
30
+
31
+ forth_code = """
32
+ input stream
33
+ input byteoffsets
34
+ input bytestops
35
+ output node1-offsets int64
36
+ output node2-offsets int64
37
+ output node3-data uint32
38
+ output node4-data uint32
39
+
40
+ 0 node1-offsets <- stack
41
+ 0 node2-offsets <- stack
42
+
43
+ 0 do
44
+ byteoffsets I-> stack
45
+ stream seek
46
+ 6 stream skip
47
+ stream !I-> stack
48
+ dup node1-offsets +<- stack
49
+ 0 do
50
+ stream !I-> stack
51
+ dup node2-offsets +<- stack
52
+ 0 do
53
+ 20 stream skip
54
+ stream !I-> node3-data
55
+ stream !I-> node4-data
56
+ loop
57
+ loop
58
+ loop
59
+ """
60
+
61
+ def __init__(self, typename):
62
+ self.typename = typename
63
+ self.inner_typename = re.sub(
64
+ "std::vector<std::vector<(.*)>>", r"\1", self.typename
65
+ )
66
+
67
+ @property
68
+ def awkward_form(self):
69
+ return {
70
+ "class": "ListOffsetArray",
71
+ "offsets": "i64",
72
+ "form_key": "node1",
73
+ "content": {
74
+ "class": "ListOffsetArray",
75
+ "offsets": "i64",
76
+ "form_key": "node2",
77
+ "content": {
78
+ "class": "RecordArray",
79
+ "fields": ["m_persKey", "m_persIndex"],
80
+ "contents": [
81
+ {
82
+ "class": "NumpyArray",
83
+ "primitive": "uint32",
84
+ "inner_shape": [],
85
+ "parameters": {},
86
+ "form_key": "node3",
87
+ },
88
+ {
89
+ "class": "NumpyArray",
90
+ "primitive": "uint32",
91
+ "inner_shape": [],
92
+ "parameters": {},
93
+ "form_key": "node4",
94
+ },
95
+ ],
96
+ "parameters": {"__record__": f"{self.inner_typename}"},
97
+ },
98
+ },
99
+ }