uproot 5.3.2__tar.gz → 5.3.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 (274) hide show
  1. {uproot-5.3.2 → uproot-5.3.3}/.github/workflows/build-test.yml +24 -0
  2. {uproot-5.3.2 → uproot-5.3.3}/.pre-commit-config.yaml +3 -3
  3. {uproot-5.3.2 → uproot-5.3.3}/PKG-INFO +1 -1
  4. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/_dask.py +5 -1
  5. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/_util.py +3 -1
  6. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TBranch.py +22 -2
  7. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/containers.py +76 -2
  8. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/interpretation/identify.py +1 -1
  9. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/interpretation/numerical.py +1 -1
  10. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/source/cursor.py +1 -1
  11. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/streamers.py +1 -1
  12. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/version.py +2 -2
  13. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0692_fsspec_reading.py +9 -8
  14. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0692_fsspec_writing.py +13 -6
  15. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1070_pandas_dataframe_building_performance_fix.py +4 -1
  16. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1120_check_decompression_executor_pass_for_dask.py +4 -1
  17. uproot-5.3.3/tests/test_1182_add_support_for_bitset.py +40 -0
  18. uproot-5.3.3/tests/test_1189_dask_failing_on_duplicate_keys.py +24 -0
  19. {uproot-5.3.2 → uproot-5.3.3}/.all-contributorsrc +0 -0
  20. {uproot-5.3.2 → uproot-5.3.3}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  21. {uproot-5.3.2 → uproot-5.3.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  22. {uproot-5.3.2 → uproot-5.3.3}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  23. {uproot-5.3.2 → uproot-5.3.3}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  24. {uproot-5.3.2 → uproot-5.3.3}/.github/dependabot.yml +0 -0
  25. {uproot-5.3.2 → uproot-5.3.3}/.github/workflows/build-distributions.yml +0 -0
  26. {uproot-5.3.2 → uproot-5.3.3}/.github/workflows/deploy.yml +0 -0
  27. {uproot-5.3.2 → uproot-5.3.3}/.github/workflows/semantic-pr-title.yml +0 -0
  28. {uproot-5.3.2 → uproot-5.3.3}/.github/workflows/upload-nightly-wheels.yml +0 -0
  29. {uproot-5.3.2 → uproot-5.3.3}/.gitignore +0 -0
  30. {uproot-5.3.2 → uproot-5.3.3}/.readthedocs.yml +0 -0
  31. {uproot-5.3.2 → uproot-5.3.3}/CITATION.cff +0 -0
  32. {uproot-5.3.2 → uproot-5.3.3}/LICENSE +0 -0
  33. {uproot-5.3.2 → uproot-5.3.3}/README.md +0 -0
  34. {uproot-5.3.2 → uproot-5.3.3}/dev/example-objects.py +0 -0
  35. {uproot-5.3.2 → uproot-5.3.3}/dev/make-models.py +0 -0
  36. {uproot-5.3.2 → uproot-5.3.3}/docs-img/diagrams/abstraction-layers.png +0 -0
  37. {uproot-5.3.2 → uproot-5.3.3}/docs-img/diagrams/abstraction-layers.svg +0 -0
  38. {uproot-5.3.2 → uproot-5.3.3}/docs-img/diagrams/example-dask-graph.png +0 -0
  39. {uproot-5.3.2 → uproot-5.3.3}/docs-img/diagrams/uproot-awkward-timeline.png +0 -0
  40. {uproot-5.3.2 → uproot-5.3.3}/docs-img/diagrams/uproot-awkward-timeline.svg +0 -0
  41. {uproot-5.3.2 → uproot-5.3.3}/docs-img/logo/logo-300px-white.png +0 -0
  42. {uproot-5.3.2 → uproot-5.3.3}/docs-img/logo/logo-300px.png +0 -0
  43. {uproot-5.3.2 → uproot-5.3.3}/docs-img/logo/logo-600px.png +0 -0
  44. {uproot-5.3.2 → uproot-5.3.3}/docs-img/logo/logo.svg +0 -0
  45. {uproot-5.3.2 → uproot-5.3.3}/docs-img/photos/switcheroo.jpg +0 -0
  46. {uproot-5.3.2 → uproot-5.3.3}/docs-sphinx/_templates/breadcrumbs.html +0 -0
  47. {uproot-5.3.2 → uproot-5.3.3}/docs-sphinx/basic.rst +0 -0
  48. {uproot-5.3.2 → uproot-5.3.3}/docs-sphinx/conf.py +0 -0
  49. {uproot-5.3.2 → uproot-5.3.3}/docs-sphinx/index.rst +0 -0
  50. {uproot-5.3.2 → uproot-5.3.3}/docs-sphinx/make_changelog.py +0 -0
  51. {uproot-5.3.2 → uproot-5.3.3}/docs-sphinx/prepare_docstrings.py +0 -0
  52. {uproot-5.3.2 → uproot-5.3.3}/docs-sphinx/requirements.txt +0 -0
  53. {uproot-5.3.2 → uproot-5.3.3}/docs-sphinx/uproot3-to-4.rst +0 -0
  54. {uproot-5.3.2 → uproot-5.3.3}/pyproject.toml +0 -0
  55. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/__init__.py +0 -0
  56. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/_awkwardforth.py +0 -0
  57. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behavior.py +0 -0
  58. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/RooCurve.py +0 -0
  59. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/RooHist.py +0 -0
  60. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TAxis.py +0 -0
  61. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TBranchElement.py +0 -0
  62. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TDatime.py +0 -0
  63. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TGraph.py +0 -0
  64. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TGraphAsymmErrors.py +0 -0
  65. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TGraphErrors.py +0 -0
  66. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TH1.py +0 -0
  67. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TH2.py +0 -0
  68. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TH2Poly.py +0 -0
  69. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TH3.py +0 -0
  70. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TParameter.py +0 -0
  71. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TProfile.py +0 -0
  72. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TProfile2D.py +0 -0
  73. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TProfile3D.py +0 -0
  74. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/TTree.py +0 -0
  75. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/behaviors/__init__.py +0 -0
  76. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/cache.py +0 -0
  77. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/compression.py +0 -0
  78. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/const.py +0 -0
  79. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/deserialization.py +0 -0
  80. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/dynamic.py +0 -0
  81. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/exceptions.py +0 -0
  82. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/extras.py +0 -0
  83. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/interpretation/__init__.py +0 -0
  84. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/interpretation/grouped.py +0 -0
  85. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/interpretation/jagged.py +0 -0
  86. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/interpretation/library.py +0 -0
  87. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/interpretation/objects.py +0 -0
  88. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/interpretation/strings.py +0 -0
  89. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/language/__init__.py +0 -0
  90. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/language/python.py +0 -0
  91. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/model.py +0 -0
  92. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/RNTuple.py +0 -0
  93. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TArray.py +0 -0
  94. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TAtt.py +0 -0
  95. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TBasket.py +0 -0
  96. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TBranch.py +0 -0
  97. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TClonesArray.py +0 -0
  98. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TDatime.py +0 -0
  99. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TGraph.py +0 -0
  100. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TH.py +0 -0
  101. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/THashList.py +0 -0
  102. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TLeaf.py +0 -0
  103. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TList.py +0 -0
  104. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TMatrixT.py +0 -0
  105. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TNamed.py +0 -0
  106. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TObjArray.py +0 -0
  107. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TObjString.py +0 -0
  108. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TObject.py +0 -0
  109. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TRef.py +0 -0
  110. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TString.py +0 -0
  111. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TTable.py +0 -0
  112. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TTime.py +0 -0
  113. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/TTree.py +0 -0
  114. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/models/__init__.py +0 -0
  115. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/pyroot.py +0 -0
  116. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/reading.py +0 -0
  117. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/serialization.py +0 -0
  118. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/sink/__init__.py +0 -0
  119. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/sink/file.py +0 -0
  120. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/source/__init__.py +0 -0
  121. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/source/chunk.py +0 -0
  122. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/source/file.py +0 -0
  123. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/source/fsspec.py +0 -0
  124. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/source/futures.py +0 -0
  125. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/source/http.py +0 -0
  126. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/source/object.py +0 -0
  127. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/source/s3.py +0 -0
  128. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/source/xrootd.py +0 -0
  129. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/writing/__init__.py +0 -0
  130. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/writing/_cascade.py +0 -0
  131. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/writing/_cascadentuple.py +0 -0
  132. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/writing/_cascadetree.py +0 -0
  133. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/writing/_dask_write.py +0 -0
  134. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/writing/identify.py +0 -0
  135. {uproot-5.3.2 → uproot-5.3.3}/src/uproot/writing/writable.py +0 -0
  136. {uproot-5.3.2 → uproot-5.3.3}/tests/__init__.py +0 -0
  137. {uproot-5.3.2 → uproot-5.3.3}/tests/conftest.py +0 -0
  138. {uproot-5.3.2 → uproot-5.3.3}/tests/samples/h_dynamic.pkl +0 -0
  139. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0001_source_class.py +0 -0
  140. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0006_notify_when_downloaded.py +0 -0
  141. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0007_single_chunk_interface.py +0 -0
  142. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0008_start_interpretation.py +0 -0
  143. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0009_nested_directories.py +0 -0
  144. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0010_start_streamers.py +0 -0
  145. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0011_generate_classes_from_streamers.py +0 -0
  146. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0013_rntuple_anchor.py +0 -0
  147. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0014_all_ttree_versions.py +0 -0
  148. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0016_interpretations.py +0 -0
  149. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0017_multi_basket_multi_branch_fetch.py +0 -0
  150. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0018_array_fetching_interface.py +0 -0
  151. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0022_number_of_branches.py +0 -0
  152. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0023_more_interpretations_1.py +0 -0
  153. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0023_ttree_versions.py +0 -0
  154. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0028_fallback_to_read_streamer.py +0 -0
  155. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0029_more_string_types.py +0 -0
  156. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0031_test_stl_containers.py +0 -0
  157. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0033_more_interpretations_2.py +0 -0
  158. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0034_generic_objects_in_ttrees.py +0 -0
  159. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0035_datatype_generality.py +0 -0
  160. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0038_memberwise_serialization.py +0 -0
  161. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0043_iterate_function.py +0 -0
  162. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0044_concatenate_function.py +0 -0
  163. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0046_histograms_bh_hist.py +0 -0
  164. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0053_parents_should_not_be_bases.py +0 -0
  165. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0058_detach_model_objects_from_files.py +0 -0
  166. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0066_fix_http_fallback_freeze.py +0 -0
  167. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0067_common_entry_offsets.py +0 -0
  168. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0081_dont_parse_colons.py +0 -0
  169. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0087_memberwise_splitting_not_implemented_messages.py +0 -0
  170. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0088_read_with_http.py +0 -0
  171. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0099_read_from_file_object.py +0 -0
  172. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0112_fix_pandas_with_cut.py +0 -0
  173. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0118_fix_name_fetch_again.py +0 -0
  174. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0123_atlas_issues.py +0 -0
  175. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0126_turn_unknown_emptyarrays_into_known_types.py +0 -0
  176. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0167_use_the_common_histogram_interface.py +0 -0
  177. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0172_allow_allocators_in_vector_typenames.py +0 -0
  178. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0173_empty_and_multiprocessing_bugs.py +0 -0
  179. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0182_complain_about_missing_files.py +0 -0
  180. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0194_fix_lost_cuts_in_iterate.py +0 -0
  181. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0220_contiguous_byte_ranges_in_http.py +0 -0
  182. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0228_read_TProfiles.py +0 -0
  183. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0240_read_TGraphAsymmErrors.py +0 -0
  184. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0278_specializations_for_TParameter.py +0 -0
  185. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0302_pickle.py +0 -0
  186. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0303_empty_jagged_array.py +0 -0
  187. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0320_start_working_on_ROOT_writing.py +0 -0
  188. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0322_writablefile_infrastructure.py +0 -0
  189. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0329_update_existing_root_files.py +0 -0
  190. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0335_empty_ttree_division_by_zero.py +0 -0
  191. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0341_manipulate_streamer_info.py +0 -0
  192. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0344_writabledirectory_can_read.py +0 -0
  193. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0345_bulk_copy_method.py +0 -0
  194. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0349_write_TObjString.py +0 -0
  195. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0350_read_RooCurve_RooHist.py +0 -0
  196. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0351_write_TList.py +0 -0
  197. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0352_write_THashList.py +0 -0
  198. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0384_move_behavior_of_and_fix_383.py +0 -0
  199. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0398_dimensions_in_leaflist.py +0 -0
  200. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0405_write_a_histogram.py +0 -0
  201. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0406_write_a_ttree.py +0 -0
  202. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0407_read_TDatime.py +0 -0
  203. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0412_write_multidimensional_numpy_to_ttree.py +0 -0
  204. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0414_write_jagged_arrays.py +0 -0
  205. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0416_writing_compressed_data.py +0 -0
  206. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0418_read_TTable.py +0 -0
  207. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0420_pyroot_uproot_interoperability.py +0 -0
  208. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0422_hist_integration.py +0 -0
  209. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0430_global_index_for_tuples_of_DataFrames.py +0 -0
  210. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0438_TClonesArray_is_not_AsGrouped.py +0 -0
  211. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0439_check_awkward_before_numpy.py +0 -0
  212. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0442_regular_TClonesArray.py +0 -0
  213. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0472_tstreamerinfo_for_ttree.py +0 -0
  214. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0475_remember_to_update_freesegments.py +0 -0
  215. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0484_manually_add_model_for_TMatrixTSym_double_.py +0 -0
  216. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0487_implement_asdtypeinplace.py +0 -0
  217. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0498_create_leaf_branch_in_extend.py +0 -0
  218. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0519_remove_memmap_copy.py +0 -0
  219. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0520_dynamic_classes_cant_be_abc_subclasses.py +0 -0
  220. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0569_fBits_is_4_bytes.py +0 -0
  221. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0576_unicode_in_names.py +0 -0
  222. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0578_dask_for_numpy.py +0 -0
  223. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0580_round_trip_for_no_flow_histograms.py +0 -0
  224. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0589_explicitly_interpret_RVec_type.py +0 -0
  225. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0603_dask_delayed_open.py +0 -0
  226. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0609_num_enteries_func.py +0 -0
  227. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0610_awkward_form.py +0 -0
  228. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0630_rntuple_basics.py +0 -0
  229. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0637_setup_tests_for_AwkwardForth.py +0 -0
  230. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0643_reading_vector_pair_TLorentzVector_int.py +0 -0
  231. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0651_implement_transformed_axis.py +0 -0
  232. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0652_dask_for_awkward.py +0 -0
  233. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0662_rntuple_stl_containers.py +0 -0
  234. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0700_dask_empty_arrays.py +0 -0
  235. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0705_rntuple_writing_metadata.py +0 -0
  236. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0750_avoid_empty_TBasket_issue.py +0 -0
  237. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0755_dask_awkward_column_projection.py +0 -0
  238. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0791_protect_uproot_project_columns_from_dask_node_names.py +0 -0
  239. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0798_DAOD_PHYSLITE.py +0 -0
  240. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0808_fix_awkward_form_for_AsStridedObjects.py +0 -0
  241. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0816_separate_AwkwardForth_machines_by_TBranch.py +0 -0
  242. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0832_ak_add_doc_should_also_add_to_typetracer.py +0 -0
  243. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0840_support_tleafG.py +0 -0
  244. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0841_fix_814.py +0 -0
  245. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0844_fix_delete_hist_from_root.py +0 -0
  246. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0852_fix_strided_interp_extra_offsets.py +0 -0
  247. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0870_writing_arrays_of_type_unknown_fix_822.py +0 -0
  248. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0876_uproot_dask_blind_steps.py +0 -0
  249. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0886_fix_awkward_form_breadcrumbs.py +0 -0
  250. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0910_fix_906_members_non_numerical_branches.py +0 -0
  251. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0911_fix_interp_array_non_numerical_objs_issue_880.py +0 -0
  252. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0912_fix_pandas_and_double_nested_vectors_issue_885.py +0 -0
  253. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0916_read_from_s3.py +0 -0
  254. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0927_dont_assume_uproot_in_global_scope_in_TPython_Eval.py +0 -0
  255. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0930_expressions_in_pandas.py +0 -0
  256. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0940_feat_add_TLeafC_string_support.py +0 -0
  257. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0962_RNTuple_update.py +0 -0
  258. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0965_inverted_axes_variances_hist_888.py +0 -0
  259. {uproot-5.3.2 → uproot-5.3.3}/tests/test_0976_path_object_split.py +0 -0
  260. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1000-write-TProfiles.py +0 -0
  261. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1043_const_std_string.py +0 -0
  262. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1058_dask_awkward_report.py +0 -0
  263. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1063_dask_distributed.py +0 -0
  264. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1085_dask_write.py +0 -0
  265. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1102_any_locks_in_models_must_be_transient.py +0 -0
  266. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1114_fix_attempt_to_concatenate_numpy_with_awkward.py +0 -0
  267. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1127_fix_allow_colon_in_key_names.py +0 -0
  268. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1146_split_ranges_for_large_files_over_http.py +0 -0
  269. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1154_classof_using_relative_path.py +0 -0
  270. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1160_std_string_in_TDirectory.py +0 -0
  271. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1180_read_free_floating_vector_issue_1179.py +0 -0
  272. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1181_support_for_stl_list.py +0 -0
  273. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1183_ttime_custom.py +0 -0
  274. {uproot-5.3.2 → uproot-5.3.3}/tests/test_1186_dtype_might_raise_ValueError.py +0 -0
@@ -92,3 +92,27 @@ jobs:
92
92
  - name: Run pytest
93
93
  run: |
94
94
  python -m pytest -vv tests --reruns 10 --reruns-delay 30 --only-rerun "(?i)http|ssl|timeout|expired|connection|socket"
95
+
96
+ numpy2-build:
97
+ strategy:
98
+ fail-fast: false
99
+ matrix:
100
+ platform: [windows-latest, ubuntu-latest, macos-latest]
101
+ python-version: ['3.11']
102
+
103
+ runs-on: ${{ matrix.platform }}
104
+ timeout-minutes: 30
105
+
106
+ steps:
107
+ - uses: actions/checkout@v4
108
+
109
+ - uses: actions/setup-python@v5
110
+ with:
111
+ python-version: ${{ matrix.python-version }}
112
+
113
+ - name: Pip install the package
114
+ run: python -m pip install 'numpy>=2.0.0b1' .[test]
115
+
116
+ - name: Run pytest
117
+ run: |
118
+ python -m pytest -vv tests --reruns 10 --reruns-delay 30 --only-rerun "(?i)http|ssl|timeout|expired|connection|socket"
@@ -4,7 +4,7 @@ ci:
4
4
 
5
5
  repos:
6
6
  - repo: https://github.com/pre-commit/pre-commit-hooks
7
- rev: v4.5.0
7
+ rev: v4.6.0
8
8
  hooks:
9
9
  - id: check-added-large-files
10
10
  - id: check-case-conflict
@@ -23,7 +23,7 @@ repos:
23
23
  - id: black
24
24
 
25
25
  - repo: https://github.com/astral-sh/ruff-pre-commit
26
- rev: v0.3.4
26
+ rev: v0.3.5
27
27
  hooks:
28
28
  - id: ruff
29
29
  args: [--fix, --show-fixes]
@@ -36,7 +36,7 @@ repos:
36
36
  args: [--py38-plus]
37
37
 
38
38
  - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
39
- rev: v2.12.0
39
+ rev: v2.13.0
40
40
  hooks:
41
41
  - id: pretty-format-toml
42
42
  args: [--autofix]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: uproot
3
- Version: 5.3.2
3
+ Version: 5.3.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
@@ -606,6 +606,7 @@ def _get_dask_array(
606
606
  filter_typename=filter_typename,
607
607
  filter_branch=real_filter_branch,
608
608
  full_paths=full_paths,
609
+ ignore_duplicates=True,
609
610
  )
610
611
 
611
612
  if common_keys is None:
@@ -747,6 +748,7 @@ def _get_dask_array_delay_open(
747
748
  filter_typename=filter_typename,
748
749
  filter_branch=filter_branch,
749
750
  full_paths=full_paths,
751
+ ignore_duplicates=True,
750
752
  )
751
753
 
752
754
  dask_dict = {}
@@ -1441,6 +1443,7 @@ def _get_dak_array(
1441
1443
  filter_typename=filter_typename,
1442
1444
  filter_branch=real_filter_branch,
1443
1445
  full_paths=full_paths,
1446
+ ignore_duplicates=True,
1444
1447
  )
1445
1448
 
1446
1449
  if common_keys is None:
@@ -1586,7 +1589,7 @@ def _get_dak_array_delay_open(
1586
1589
  ffile_path, fobject_path = files[0][0:2]
1587
1590
 
1588
1591
  if known_base_form is not None:
1589
- common_keys = list(known_base_form.fields)
1592
+ common_keys = list(dict.fromkeys(known_base_form.fields))
1590
1593
  base_form = known_base_form
1591
1594
  else:
1592
1595
  obj = uproot._util.regularize_object_path(
@@ -1598,6 +1601,7 @@ def _get_dak_array_delay_open(
1598
1601
  filter_typename=filter_typename,
1599
1602
  filter_branch=filter_branch,
1600
1603
  full_paths=full_paths,
1604
+ ignore_duplicates=True,
1601
1605
  )
1602
1606
  base_form = _get_ttree_form(
1603
1607
  awkward, obj, common_keys, interp_options.get("ak_add_doc")
@@ -80,7 +80,9 @@ def ensure_numpy(array, types=(numpy.bool_, numpy.integer, numpy.floating)):
80
80
 
81
81
  awkward = uproot.extras.awkward()
82
82
  with warnings.catch_warnings():
83
- warnings.simplefilter("error", numpy.VisibleDeprecationWarning)
83
+ warnings.simplefilter(
84
+ "error", getattr(numpy, "exceptions", numpy).VisibleDeprecationWarning
85
+ )
84
86
  if isinstance(array, awkward.contents.Content):
85
87
  out = awkward.to_numpy(array)
86
88
  else:
@@ -1126,6 +1126,7 @@ class HasBranches(Mapping):
1126
1126
  filter_branch=no_filter,
1127
1127
  recursive=True,
1128
1128
  full_paths=True,
1129
+ ignore_duplicates=False,
1129
1130
  ):
1130
1131
  """
1131
1132
  Args:
@@ -1143,6 +1144,7 @@ class HasBranches(Mapping):
1143
1144
  full_paths (bool): If True, include the full path to each subbranch
1144
1145
  with slashes (``/``); otherwise, use the descendant's name as
1145
1146
  the output name.
1147
+ ignore_duplicates (bool): If True, return a set of the keys; otherwise, return the full list of keys.
1146
1148
 
1147
1149
  Returns the names of the subbranches as a list of strings.
1148
1150
  """
@@ -1153,6 +1155,7 @@ class HasBranches(Mapping):
1153
1155
  filter_branch=filter_branch,
1154
1156
  recursive=recursive,
1155
1157
  full_paths=full_paths,
1158
+ ignore_duplicates=ignore_duplicates,
1156
1159
  )
1157
1160
  )
1158
1161
 
@@ -1279,6 +1282,7 @@ class HasBranches(Mapping):
1279
1282
  filter_branch=no_filter,
1280
1283
  recursive=True,
1281
1284
  full_paths=True,
1285
+ ignore_duplicates=False,
1282
1286
  ):
1283
1287
  """
1284
1288
  Args:
@@ -1296,6 +1300,8 @@ class HasBranches(Mapping):
1296
1300
  full_paths (bool): If True, include the full path to each subbranch
1297
1301
  with slashes (``/``); otherwise, use the descendant's name as
1298
1302
  the output name.
1303
+ ignore_duplicates (bool): If True, return a set of the keys; otherwise, return the full list of keys.
1304
+
1299
1305
 
1300
1306
  Returns the names of the subbranches as an iterator over strings.
1301
1307
  """
@@ -1305,6 +1311,7 @@ class HasBranches(Mapping):
1305
1311
  filter_branch=filter_branch,
1306
1312
  recursive=recursive,
1307
1313
  full_paths=full_paths,
1314
+ ignore_duplicates=ignore_duplicates,
1308
1315
  ):
1309
1316
  yield k
1310
1317
 
@@ -1353,6 +1360,7 @@ class HasBranches(Mapping):
1353
1360
  filter_branch=no_filter,
1354
1361
  recursive=True,
1355
1362
  full_paths=True,
1363
+ ignore_duplicates=False,
1356
1364
  ):
1357
1365
  """
1358
1366
  Args:
@@ -1370,6 +1378,8 @@ class HasBranches(Mapping):
1370
1378
  full_paths (bool): If True, include the full path to each subbranch
1371
1379
  with slashes (``/``) in the name; otherwise, use the descendant's
1372
1380
  name as the name without modification.
1381
+ ignore_duplicates (bool): If True, return a set of the keys; otherwise, return the full list of keys.
1382
+
1373
1383
 
1374
1384
  Returns (name, branch) pairs of the subbranches as an iterator over
1375
1385
  2-tuples of (str, :doc:`uproot.behaviors.TBranch.TBranch`).
@@ -1385,6 +1395,8 @@ class HasBranches(Mapping):
1385
1395
  f"filter_branch must be None or a function: TBranch -> bool, not {filter_branch!r}"
1386
1396
  )
1387
1397
 
1398
+ keys_set = set()
1399
+
1388
1400
  for branch in self.branches:
1389
1401
  if (
1390
1402
  (
@@ -1394,7 +1406,11 @@ class HasBranches(Mapping):
1394
1406
  and (filter_typename is no_filter or filter_typename(branch.typename))
1395
1407
  and (filter_branch is no_filter or filter_branch(branch))
1396
1408
  ):
1397
- yield branch.name, branch
1409
+ if ignore_duplicates and branch.name in keys_set:
1410
+ pass
1411
+ else:
1412
+ keys_set.add(branch.name)
1413
+ yield branch.name, branch
1398
1414
 
1399
1415
  if recursive:
1400
1416
  for k1, v in branch.iteritems(
@@ -1408,7 +1424,11 @@ class HasBranches(Mapping):
1408
1424
  if filter_name is no_filter or _filter_name_deep(
1409
1425
  filter_name, self, v
1410
1426
  ):
1411
- yield k2, v
1427
+ if ignore_duplicates and branch.name in keys_set:
1428
+ pass
1429
+ else:
1430
+ keys_set.add(k2)
1431
+ yield k2, v
1412
1432
 
1413
1433
  def itertypenames(
1414
1434
  self,
@@ -864,7 +864,9 @@ class AsVectorLike(AsContainer):
864
864
 
865
865
  def __init__(self, header, values):
866
866
  self.header = header
867
- if isinstance(values, AsContainer):
867
+ if isinstance(self, uproot.containers.AsBitSet):
868
+ self._items = numpy.dtype(numpy.bool_)
869
+ elif isinstance(values, AsContainer):
868
870
  self._items = values
869
871
  elif isinstance(values, type) and issubclass(
870
872
  values, (uproot.model.Model, uproot.model.DispatchByVersion)
@@ -1117,7 +1119,6 @@ class AsList(AsVectorLike):
1117
1119
  header (bool): Sets the :ref:`uproot.containers.AsContainer.header`.
1118
1120
  values (:doc:`uproot.model.Model` or :doc:`uproot.containers.Container`): Data
1119
1121
  type for data nested in the container.
1120
-
1121
1122
  A :doc:`uproot.containers.AsContainer` for ``std::list``.
1122
1123
  """
1123
1124
 
@@ -1139,6 +1140,36 @@ class AsList(AsVectorLike):
1139
1140
  return STLList
1140
1141
 
1141
1142
 
1143
+ class AsBitSet(AsVectorLike):
1144
+ """
1145
+ Args:
1146
+ header (bool): Sets the :ref:`uproot.containers.AsContainer.header`.
1147
+ keys (:doc:`uproot.model.Model` or :doc:`uproot.containers.Container`): Data
1148
+ type for data nested in the container.
1149
+
1150
+ A :doc:`uproot.containers.AsContainer` for ``std::bitset``.
1151
+ """
1152
+
1153
+ _specialpathitem_name = "bitset"
1154
+
1155
+ @property
1156
+ def typename(self):
1157
+ return f"std::bitset<{_content_typename(self.keys)}>"
1158
+
1159
+ @property
1160
+ def keys(self):
1161
+ """
1162
+ Data type for data nested in the container.
1163
+ """
1164
+ return self._items
1165
+
1166
+ _form_parameters = {"__array__": "bitset"}
1167
+
1168
+ @property
1169
+ def _container_type(self):
1170
+ return STLBitSet
1171
+
1172
+
1142
1173
  class AsSet(AsVectorLike):
1143
1174
  """
1144
1175
  Args:
@@ -1633,6 +1664,49 @@ class STLVector(Container, Sequence):
1633
1664
  ]
1634
1665
 
1635
1666
 
1667
+ class STLBitSet(Container, Sequence):
1668
+ """
1669
+ Args:
1670
+ values (``numpy.ndarray`` or iterable): Contents of the ``std::vector``.
1671
+
1672
+ Representation of a C++ ``std::bitset`` as a Python ``Sequence``.
1673
+ """
1674
+
1675
+ def __init__(self, numbytes):
1676
+ self._numbytes = numpy.asarray(numbytes)
1677
+
1678
+ def __str__(self, limit=85):
1679
+ def tostring(i):
1680
+ return _tostring(self._values[i])
1681
+
1682
+ return _str_with_ellipsis(tostring, len(self), "[", "]", limit)
1683
+
1684
+ def __repr__(self, limit=85):
1685
+ return f"<STLBitSet {self.__str__(limit=limit - 30)} at 0x{id(self):012x}>"
1686
+
1687
+ def __getitem__(self, where):
1688
+ return self._numbytes[where]
1689
+
1690
+ def __len__(self):
1691
+ return self._numbytes
1692
+
1693
+ def __iter__(self):
1694
+ return iter(self._numbytes)
1695
+
1696
+ def __eq__(self, other):
1697
+ if isinstance(other, STLBitSet):
1698
+ return self._numbytes == other._numbytes
1699
+ elif isinstance(other, Sequence):
1700
+ return self._numbytes == other
1701
+ else:
1702
+ return False
1703
+
1704
+ def tolist(self):
1705
+ return [
1706
+ x.tolist() if isinstance(x, (Container, numpy.ndarray)) else x for x in self
1707
+ ]
1708
+
1709
+
1636
1710
  class STLSet(Container, Set):
1637
1711
  """
1638
1712
  Args:
@@ -964,7 +964,7 @@ def _parse_node(tokens, i, typename, file, quote, header, inner_header):
964
964
  return (
965
965
  i + 4,
966
966
  _parse_maybe_quote(
967
- f'uproot.containers.AsFIXME("std::bitset<{num_bits}>")',
967
+ f"uproot.containers.AsBitSet({header}, {num_bits})",
968
968
  quote,
969
969
  ),
970
970
  )
@@ -106,7 +106,7 @@ class Numerical(uproot.interpretation.Interpretation):
106
106
 
107
107
  start = stop
108
108
 
109
- output = output.newbyteorder("=")
109
+ output = output.view(output.dtype.newbyteorder("="))
110
110
  self.hook_before_library_finalize(
111
111
  basket_arrays=basket_arrays,
112
112
  entry_start=entry_start,
@@ -386,7 +386,7 @@ class Cursor:
386
386
  length_data = chunk.get(start, stop, self, context)
387
387
  length = numpy.frombuffer(length_data, dtype=self._u1).view(self._i4)[0]
388
388
  start = stop
389
- stop = start + length
389
+ stop = start + int(length)
390
390
  if move:
391
391
  self._index = stop
392
392
  return uproot._util.tobytes(chunk.get(start, stop, self, context))
@@ -1128,7 +1128,7 @@ class Model_TStreamerBasicType(Model_TStreamerElement):
1128
1128
  uproot.const.kULong,
1129
1129
  uproot.const.kLong,
1130
1130
  ):
1131
- self._bases[0]._members["fSize"] = numpy.dtype(numpy.compat.long).itemsize
1131
+ self._bases[0]._members["fSize"] = numpy.dtype(numpy.int64).itemsize
1132
1132
 
1133
1133
  elif self._bases[0]._members["fType"] in (
1134
1134
  uproot.const.kULong64,
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '5.3.2'
16
- __version_tuple__ = version_tuple = (5, 3, 2)
15
+ __version__ = version = '5.3.3'
16
+ __version_tuple__ = version_tuple = (5, 3, 3)
@@ -1,12 +1,5 @@
1
1
  # BSD 3-Clause License; see https://github.com/scikit-hep/uproot4/blob/main/LICENSE
2
2
 
3
- import pytest
4
- import uproot
5
- import uproot.source.fsspec
6
- import uproot.source.file
7
- import uproot.source.xrootd
8
- import uproot.source.s3
9
-
10
3
  from typing import BinaryIO
11
4
  import skhep_testdata
12
5
  import queue
@@ -15,6 +8,14 @@ import requests
15
8
  import os
16
9
  import sys
17
10
 
11
+ import pytest
12
+
13
+ import uproot
14
+ import uproot.source.fsspec
15
+ import uproot.source.file
16
+ import uproot.source.xrootd
17
+ import uproot.source.s3
18
+
18
19
  is_windows = sys.platform.startswith("win")
19
20
 
20
21
 
@@ -243,7 +244,7 @@ def test_fsspec_chunks(http_server):
243
244
  chunk = notifications.get()
244
245
  expected.pop((chunk.start, chunk.stop))
245
246
 
246
- chunk_data_sum = {sum(chunk.raw_data) for chunk in chunks}
247
+ chunk_data_sum = {sum(map(int, chunk.raw_data)) for chunk in chunks}
247
248
  assert chunk_data_sum == {3967, 413, 10985}, "Chunk data does not match"
248
249
 
249
250
 
@@ -51,12 +51,19 @@ def test_fsspec_writing_local(tmp_path, scheme):
51
51
  "slash_prefix",
52
52
  [""] if is_windows else ["", "/"],
53
53
  )
54
- def test_fsspec_writing_local_uri(tmp_path, scheme, slash_prefix, filename):
55
- uri = scheme + slash_prefix + os.path.join(tmp_path, "some", "path", filename)
56
- with uproot.create(uri) as f:
57
- f["tree"] = {"x": np.array([1, 2, 3])}
58
- with uproot.open(uri) as f:
59
- assert f["tree"]["x"].array().tolist() == [1, 2, 3]
54
+ def test_fsspec_writing_local_uri(tmp_path, scheme, slash_prefix, filename, request):
55
+ os.chdir(tmp_path)
56
+
57
+ try:
58
+ uri = scheme + slash_prefix + os.path.join(tmp_path, "some", "path", filename)
59
+
60
+ with uproot.create(uri) as f:
61
+ f["tree"] = {"x": np.array([1, 2, 3])}
62
+ with uproot.open(uri) as f:
63
+ assert f["tree"]["x"].array().tolist() == [1, 2, 3]
64
+
65
+ finally:
66
+ os.chdir(request.config.invocation_params.dir)
60
67
 
61
68
 
62
69
  @pytest.mark.parametrize(
@@ -1,9 +1,12 @@
1
1
  # BSD 3-Clause License; see https://github.com/scikit-hep/uproot5/blob/main/LICENSE
2
2
 
3
3
  import pytest
4
- import uproot
5
4
  import skhep_testdata
6
5
 
6
+ import uproot
7
+
8
+ pytest.importorskip("pandas")
9
+
7
10
 
8
11
  def test_pandas_performance_many_branches(tmp_path):
9
12
  for array in uproot.iterate(
@@ -1,9 +1,12 @@
1
1
  # BSD 3-Clause License; see https://github.com/scikit-hep/uproot5/blob/main/LICENSE
2
2
 
3
3
  import pytest
4
- import uproot
5
4
  import skhep_testdata
6
5
 
6
+ import uproot
7
+
8
+ pytest.importorskip("pandas")
9
+
7
10
 
8
11
  def test_decompression_executor_for_dask():
9
12
 
@@ -0,0 +1,40 @@
1
+ # BSD 3-Clause License; see https://github.com/scikit-hep/uproot5/blob/main/LICENSE
2
+
3
+ import uproot
4
+ import skhep_testdata
5
+
6
+
7
+ def test_add_support_for_bitset():
8
+ with uproot.open(skhep_testdata.data_path("uproot-issue-40.root")) as f:
9
+ assert (
10
+ repr(f["tree"]["bitset8"].interpretation)
11
+ == "AsObjects(AsBitSet(True, dtype('bool')))"
12
+ )
13
+ assert (
14
+ repr(f["tree"]["bitset16"].interpretation)
15
+ == "AsObjects(AsBitSet(True, dtype('bool')))"
16
+ )
17
+
18
+ assert f["tree"]["bitset8"].array().tolist() == [
19
+ [True, False, True, False, True, False, False, False]
20
+ ]
21
+ assert f["tree"]["bitset16"].array().tolist() == [
22
+ [
23
+ False,
24
+ True,
25
+ False,
26
+ True,
27
+ False,
28
+ True,
29
+ True,
30
+ True,
31
+ True,
32
+ False,
33
+ True,
34
+ False,
35
+ True,
36
+ False,
37
+ False,
38
+ False,
39
+ ]
40
+ ]
@@ -0,0 +1,24 @@
1
+ # BSD 3-Clause License; see https://github.com/scikit-hep/uproot5/blob/main/LICENSE
2
+
3
+ import pytest
4
+ import skhep_testdata
5
+
6
+ import uproot
7
+
8
+ pytest.importorskip("pandas")
9
+
10
+
11
+ def test_dask_duplicated_keys():
12
+
13
+ lazy = uproot.dask(
14
+ skhep_testdata.data_path("uproot-metadata-performance.root") + ":Events"
15
+ )
16
+ materialized = lazy.FatJet_btagDDBvLV2.compute()
17
+
18
+ lazy = uproot.dask(skhep_testdata.data_path("uproot-issue513.root") + ":Delphes")
19
+ materialized = lazy.Particle.compute()
20
+
21
+ lazy = uproot.dask(
22
+ skhep_testdata.data_path("uproot-issue443.root") + ":muonDataTree"
23
+ )
24
+ materialized = lazy.hitEnd.compute()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes