uproot 5.7.2__tar.gz → 5.7.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.
- {uproot-5.7.2 → uproot-5.7.3}/.all-contributorsrc +9 -0
- {uproot-5.7.2 → uproot-5.7.3}/.github/workflows/build-test.yml +4 -4
- {uproot-5.7.2 → uproot-5.7.3}/PKG-INFO +2 -1
- {uproot-5.7.2 → uproot-5.7.3}/README.md +1 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/_util.py +1 -1
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/RNTuple.py +5 -6
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TBranch.py +3 -1
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/RNTuple.py +4 -2
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TMatrixT.py +30 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TTree.py +2 -9
- uproot-5.7.3/src/uproot/version.py +24 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/writing/_cascade.py +2 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/writing/writable.py +71 -7
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0043_iterate_function.py +10 -10
- uproot-5.7.3/tests/test_0578_dask_for_numpy.py +100 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0652_dask_for_awkward.py +2 -2
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1250_rntuple_improvements.py +10 -8
- uproot-5.7.3/tests/test_1599_mktree_mkrntuple_with_subdir.py +59 -0
- uproot-5.7.3/tests/test_1601_freesegments_stale_allocation.py +632 -0
- uproot-5.7.3/tests/test_1603_num_entries.py +19 -0
- uproot-5.7.3/tests/test_1604_write_tuple_dtypes.py +151 -0
- uproot-5.7.3/tests/test_1610_read_TMatrixTSym_from_ttree.py +32 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-cuda/test_1250_rntuple_improvements.py +10 -8
- uproot-5.7.2/src/uproot/version.py +0 -34
- uproot-5.7.2/tests/test_0578_dask_for_numpy.py +0 -1588
- {uproot-5.7.2 → uproot-5.7.3}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/.github/dependabot.yml +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/.github/workflows/build-distributions.yml +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/.github/workflows/deploy.yml +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/.github/workflows/semantic-pr-title.yml +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/.github/workflows/upload-nightly-wheels.yml +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/.gitignore +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/.pre-commit-config.yaml +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/.readthedocs.yml +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/CITATION.cff +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/CONTRIBUTING.md +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/LICENSE +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/codecov.yml +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/dev/custom-interpretation/README.md +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/dev/example-objects.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/dev/make-models.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-img/diagrams/abstraction-layers.png +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-img/diagrams/abstraction-layers.svg +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-img/diagrams/example-dask-graph.png +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-img/diagrams/uproot-awkward-timeline.png +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-img/diagrams/uproot-awkward-timeline.svg +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-img/logo/logo-300px-white.png +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-img/logo/logo-300px.png +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-img/logo/logo-600px.png +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-img/logo/logo.svg +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-img/photos/switcheroo.jpg +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-sphinx/_templates/breadcrumbs.html +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-sphinx/basic.rst +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-sphinx/conf.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-sphinx/index.rst +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-sphinx/make_changelog.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-sphinx/prepare_docstrings.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-sphinx/requirements.txt +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/docs-sphinx/uproot3-to-4.rst +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/pyproject.toml +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/__init__.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/_awkwardforth.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/_dask.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behavior.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/RooCurve.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/RooHist.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TAxis.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TBranchElement.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TDatime.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TGraph.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TGraphAsymmErrors.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TGraphErrors.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TH1.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TH2.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TH2Poly.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TH3.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TParameter.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TProfile.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TProfile2D.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TProfile3D.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/TTree.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/behaviors/__init__.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/cache.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/compression.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/const.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/containers.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/deserialization.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/dynamic.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/exceptions.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/extras.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/interpretation/__init__.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/interpretation/custom.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/interpretation/grouped.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/interpretation/identify.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/interpretation/jagged.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/interpretation/known_forth/__init__.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/interpretation/known_forth/atlas.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/interpretation/library.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/interpretation/numerical.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/interpretation/objects.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/interpretation/strings.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/language/__init__.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/language/python.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/model.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TArray.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TAtt.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TBasket.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TBranch.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TClonesArray.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TDatime.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TGraph.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TH.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/THashList.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TLeaf.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TList.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TNamed.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TObjArray.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TObjString.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TObject.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TRef.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TString.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TTable.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/TTime.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/models/__init__.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/pyroot.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/reading.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/serialization.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/sink/__init__.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/sink/file.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/source/__init__.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/source/chunk.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/source/coalesce.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/source/cufile_interface.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/source/cursor.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/source/file.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/source/fsspec.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/source/futures.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/source/http.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/source/object.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/source/xrootd.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/streamers.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/writing/__init__.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/writing/_cascadentuple.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/writing/_cascadetree.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/writing/_dask_write.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/writing/identify.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/src/uproot/writing/interpret.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/__init__.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/conftest.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/samples/h_dynamic.pkl +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0001_source_class.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0006_notify_when_downloaded.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0007_single_chunk_interface.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0008_start_interpretation.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0009_nested_directories.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0010_start_streamers.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0011_generate_classes_from_streamers.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0013_rntuple_anchor.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0014_all_ttree_versions.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0016_interpretations.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0017_multi_basket_multi_branch_fetch.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0018_array_fetching_interface.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0022_number_of_branches.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0023_more_interpretations_1.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0023_ttree_versions.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0028_fallback_to_read_streamer.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0029_more_string_types.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0031_test_stl_containers.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0033_more_interpretations_2.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0034_generic_objects_in_ttrees.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0035_datatype_generality.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0038_memberwise_serialization.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0044_concatenate_function.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0046_histograms_bh_hist.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0053_parents_should_not_be_bases.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0058_detach_model_objects_from_files.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0066_fix_http_fallback_freeze.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0067_common_entry_offsets.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0081_dont_parse_colons.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0087_memberwise_splitting_not_implemented_messages.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0088_read_with_http.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0099_read_from_file_object.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0112_fix_pandas_with_cut.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0118_fix_name_fetch_again.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0123_atlas_issues.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0126_turn_unknown_emptyarrays_into_known_types.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0167_use_the_common_histogram_interface.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0172_allow_allocators_in_vector_typenames.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0173_empty_and_multiprocessing_bugs.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0182_complain_about_missing_files.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0194_fix_lost_cuts_in_iterate.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0220_contiguous_byte_ranges_in_http.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0228_read_TProfiles.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0240_read_TGraphAsymmErrors.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0278_specializations_for_TParameter.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0302_pickle.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0303_empty_jagged_array.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0320_start_working_on_ROOT_writing.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0322_writablefile_infrastructure.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0329_update_existing_root_files.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0335_empty_ttree_division_by_zero.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0341_manipulate_streamer_info.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0344_writabledirectory_can_read.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0345_bulk_copy_method.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0349_write_TObjString.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0350_read_RooCurve_RooHist.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0351_write_TList.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0352_write_THashList.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0384_move_behavior_of_and_fix_383.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0398_dimensions_in_leaflist.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0405_write_a_histogram.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0406_write_a_ttree.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0407_read_TDatime.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0412_write_multidimensional_numpy_to_ttree.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0414_write_jagged_arrays.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0416_writing_compressed_data.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0418_read_TTable.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0420_pyroot_uproot_interoperability.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0422_hist_integration.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0430_global_index_for_tuples_of_DataFrames.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0438_TClonesArray_is_not_AsGrouped.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0439_check_awkward_before_numpy.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0442_regular_TClonesArray.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0472_tstreamerinfo_for_ttree.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0475_remember_to_update_freesegments.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0484_manually_add_model_for_TMatrixTSym_double_.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0487_implement_asdtypeinplace.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0498_create_leaf_branch_in_extend.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0519_remove_memmap_copy.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0520_dynamic_classes_cant_be_abc_subclasses.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0569_fBits_is_4_bytes.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0576_unicode_in_names.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0580_round_trip_for_no_flow_histograms.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0589_explicitly_interpret_RVec_type.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0603_dask_delayed_open.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0609_num_enteries_func.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0610_awkward_form.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0630_rntuple_basics.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0637_setup_tests_for_AwkwardForth.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0643_reading_vector_pair_TLorentzVector_int.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0651_implement_transformed_axis.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0662_rntuple_stl_containers.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0692_fsspec_reading.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0692_fsspec_writing.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0700_dask_empty_arrays.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0705_rntuple_writing_metadata.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0750_avoid_empty_TBasket_issue.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0755_dask_awkward_column_projection.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0791_protect_uproot_project_columns_from_dask_node_names.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0798_DAOD_PHYSLITE.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0808_fix_awkward_form_for_AsStridedObjects.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0816_separate_AwkwardForth_machines_by_TBranch.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0832_ak_add_doc_should_also_add_to_typetracer.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0840_support_tleafG.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0841_fix_814.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0844_fix_delete_hist_from_root.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0852_fix_strided_interp_extra_offsets.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0870_writing_arrays_of_type_unknown_fix_822.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0876_uproot_dask_blind_steps.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0886_fix_awkward_form_breadcrumbs.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0910_fix_906_members_non_numerical_branches.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0911_fix_interp_array_non_numerical_objs_issue_880.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0912_fix_pandas_and_double_nested_vectors_issue_885.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0916_read_from_s3.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0927_dont_assume_uproot_in_global_scope_in_TPython_Eval.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0930_expressions_in_pandas.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0940_feat_add_TLeafC_string_support.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0962_rntuple_update.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0965_inverted_axes_variances_hist_888.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_0976_path_object_split.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1000-write-TProfiles.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1043_const_std_string.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1058_dask_awkward_report.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1063_dask_distributed.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1070_pandas_dataframe_building_performance_fix.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1085_dask_write.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1102_any_locks_in_models_must_be_transient.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1114_fix_attempt_to_concatenate_numpy_with_awkward.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1120_check_decompression_executor_pass_for_dask.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1127_fix_allow_colon_in_key_names.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1128_TGraph_writing.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1146_split_ranges_for_large_files_over_http.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1154_classof_using_relative_path.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1159_rntuple_cluster_groups.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1160_std_string_in_TDirectory.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1180_read_free_floating_vector_issue_1179.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1181_support_for_stl_list.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1182_add_support_for_bitset.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1183_ttime_custom.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1186_dtype_might_raise_ValueError.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1189_dask_failing_on_duplicate_keys.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1191_rntuple_fixes.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1198_coalesce.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1207_fix_title_of_TBranch_with_counter.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1212_dont_let_update_mess_up_file_version.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1221_AwkwardForth_bug.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1223_more_rntuple_types.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1229_const_in_typename.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1254_test_threadpool_executor_for_dask.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1264_write_NumPy_array_of_strings.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1275_fix_TStreamerLoop_code_generation.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1282_add_known_forth_for_atlas.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1285_rntuple_multicluster_concatenation.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1318_dont_compare_big_endian_in_awkward.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1321_pandas_changed_api_again.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1347_rntuple_floats_suppressed_cols.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1356_basic_rntuple_writing.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1375_extend_ak_add_doc.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1393_TTree_virtual_arrays.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1395_rntuple_writing_lists_and_structs.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1406_improved_rntuple_methods.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1411_rntuple_physlite_ATLAS.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1412_rntuple_dask.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1465_ignorecase_extension.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1467_rntuple_akform_construction.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1476_rntuple_jagged_subfields.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1477_custom_interpretation.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1492_rntuple_hidden_keys.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1496_rntuple_write_index_arrays.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1503_rntuple_virtual_arrays.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1510_rntuple_v1010.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1556_default_rntuple_writing.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1573_out_of_bounds_slicing.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1589_rntuple_inheritance.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests/test_1591_rntuple_read_to_numpy.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-cuda/test_0630_rntuple_basics.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-cuda/test_0662_rntuple_stl_containers.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-cuda/test_0962_rntuple_update.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-cuda/test_1159_rntuple_cluster_groups.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-cuda/test_1191_rntuple_fixes.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-cuda/test_1223_more_rntuple_types.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-cuda/test_1285_rntuple_multicluster_concatenation.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-cuda/test_1347_rntuple_floats_suppressed_cols.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-cuda/test_1411_rntuple_physlite_ATLAS.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-wasm/__init__.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-wasm/test_1272_basic_functionality.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-wasm/test_1365_awkwardforth_reading.py +0 -0
- {uproot-5.7.2 → uproot-5.7.3}/tests-wasm/utils.py +0 -0
|
@@ -686,6 +686,15 @@
|
|
|
686
686
|
"contributions": [
|
|
687
687
|
"code"
|
|
688
688
|
]
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
"login": "nickwp",
|
|
692
|
+
"name": "Nick Prouse",
|
|
693
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/9571544?v=4",
|
|
694
|
+
"profile": "https://github.com/nickwp",
|
|
695
|
+
"contributions": [
|
|
696
|
+
"code"
|
|
697
|
+
]
|
|
689
698
|
}
|
|
690
699
|
],
|
|
691
700
|
"contributorsPerLine": 7,
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
- uses: actions/checkout@v6
|
|
31
31
|
|
|
32
32
|
- name: Get micromamba
|
|
33
|
-
uses: mamba-org/setup-micromamba@
|
|
33
|
+
uses: mamba-org/setup-micromamba@v3
|
|
34
34
|
with:
|
|
35
35
|
environment-name: test-env
|
|
36
36
|
init-shell: bash
|
|
@@ -223,7 +223,7 @@ jobs:
|
|
|
223
223
|
- uses: actions/checkout@v6
|
|
224
224
|
|
|
225
225
|
- name: Get micromamba
|
|
226
|
-
uses: mamba-org/setup-micromamba@
|
|
226
|
+
uses: mamba-org/setup-micromamba@v3
|
|
227
227
|
with:
|
|
228
228
|
environment-name: test-env
|
|
229
229
|
init-shell: bash
|
|
@@ -257,12 +257,12 @@ jobs:
|
|
|
257
257
|
|
|
258
258
|
- name: Upload coverage reports to Codecov
|
|
259
259
|
if: matrix.cuda-version == 13
|
|
260
|
-
uses: codecov/codecov-action@
|
|
260
|
+
uses: codecov/codecov-action@v6
|
|
261
261
|
with:
|
|
262
262
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
263
263
|
|
|
264
264
|
- name: Upload test results to Codecov
|
|
265
|
-
if: ${{ !cancelled() }}
|
|
265
|
+
if: ${{ !cancelled() && matrix.cuda-version == 13 }}
|
|
266
266
|
uses: codecov/test-results-action@v1
|
|
267
267
|
with:
|
|
268
268
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: uproot
|
|
3
|
-
Version: 5.7.
|
|
3
|
+
Version: 5.7.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
|
|
@@ -249,6 +249,7 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
|
|
|
249
249
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Rachit931"><img src="https://avatars.githubusercontent.com/u/199397286?v=4?s=100" width="100px;" alt="Rachit931"/><br /><sub><b>Rachit931</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=Rachit931" title="Documentation">📖</a></td>
|
|
250
250
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wdconinc"><img src="https://avatars.githubusercontent.com/u/4656391?v=4?s=100" width="100px;" alt="Wouter Deconinck"/><br /><sub><b>Wouter Deconinck</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=wdconinc" title="Code">💻</a></td>
|
|
251
251
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KaranSinghDev"><img src="https://avatars.githubusercontent.com/u/102300776?v=4?s=100" width="100px;" alt="Karan Singh"/><br /><sub><b>Karan Singh</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=KaranSinghDev" title="Code">💻</a></td>
|
|
252
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nickwp"><img src="https://avatars.githubusercontent.com/u/9571544?v=4?s=100" width="100px;" alt="Nick Prouse"/><br /><sub><b>Nick Prouse</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=nickwp" title="Code">💻</a></td>
|
|
252
253
|
</tr>
|
|
253
254
|
</tbody>
|
|
254
255
|
</table>
|
|
@@ -197,6 +197,7 @@ Thanks especially to the gracious help of Uproot contributors (including the [or
|
|
|
197
197
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Rachit931"><img src="https://avatars.githubusercontent.com/u/199397286?v=4?s=100" width="100px;" alt="Rachit931"/><br /><sub><b>Rachit931</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=Rachit931" title="Documentation">📖</a></td>
|
|
198
198
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wdconinc"><img src="https://avatars.githubusercontent.com/u/4656391?v=4?s=100" width="100px;" alt="Wouter Deconinck"/><br /><sub><b>Wouter Deconinck</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=wdconinc" title="Code">💻</a></td>
|
|
199
199
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KaranSinghDev"><img src="https://avatars.githubusercontent.com/u/102300776?v=4?s=100" width="100px;" alt="Karan Singh"/><br /><sub><b>Karan Singh</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=KaranSinghDev" title="Code">💻</a></td>
|
|
200
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nickwp"><img src="https://avatars.githubusercontent.com/u/9571544?v=4?s=100" width="100px;" alt="Nick Prouse"/><br /><sub><b>Nick Prouse</b></sub></a><br /><a href="https://github.com/scikit-hep/uproot5/commits?author=nickwp" title="Code">💻</a></td>
|
|
200
201
|
</tr>
|
|
201
202
|
</tbody>
|
|
202
203
|
</table>
|
|
@@ -414,7 +414,7 @@ def memory_size(data, error_message=None) -> int:
|
|
|
414
414
|
"""
|
|
415
415
|
if isinstance(data, str):
|
|
416
416
|
m = re.match(
|
|
417
|
-
r"^\s*([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)\s*([kmgtpezy]?b)\s*$",
|
|
417
|
+
r"^\s*([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)\s*([kmgtpezy]?[i]?b)\s*$",
|
|
418
418
|
data,
|
|
419
419
|
re.I,
|
|
420
420
|
)
|
|
@@ -1768,7 +1768,6 @@ def _get_recursive(hasfields, where):
|
|
|
1768
1768
|
|
|
1769
1769
|
|
|
1770
1770
|
def _num_entries_for(ntuple, akform, target_num_bytes, entry_start, entry_stop):
|
|
1771
|
-
# TODO: there might be a better way to estimate the number of entries
|
|
1772
1771
|
clusters = ntuple.cluster_summaries
|
|
1773
1772
|
cluster_starts = numpy.array([c.num_first_entry for c in clusters])
|
|
1774
1773
|
|
|
@@ -1784,9 +1783,10 @@ def _num_entries_for(ntuple, akform, target_num_bytes, entry_start, entry_stop):
|
|
|
1784
1783
|
for key in target_cols:
|
|
1785
1784
|
if "column" in key:
|
|
1786
1785
|
key_nr = int(key.split("-")[1])
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1786
|
+
n_entries, _, dt = ntuple._expected_array_length_starts_dtype(
|
|
1787
|
+
key_nr, start_cluster_idx, stop_cluster_idx
|
|
1788
|
+
)
|
|
1789
|
+
total_bytes += n_entries * dt.itemsize
|
|
1790
1790
|
|
|
1791
1791
|
total_entries = entry_stop - entry_start
|
|
1792
1792
|
if total_bytes == 0:
|
|
@@ -1795,8 +1795,7 @@ def _num_entries_for(ntuple, akform, target_num_bytes, entry_start, entry_stop):
|
|
|
1795
1795
|
num_entries = round(target_num_bytes * total_entries / total_bytes)
|
|
1796
1796
|
if num_entries <= 0:
|
|
1797
1797
|
return 1
|
|
1798
|
-
|
|
1799
|
-
return num_entries
|
|
1798
|
+
return num_entries
|
|
1800
1799
|
|
|
1801
1800
|
|
|
1802
1801
|
def _regularize_step_size(ntuple, akform, step_size, entry_start, entry_stop):
|
|
@@ -2655,6 +2655,8 @@ in file {self._file.file_path}"""
|
|
|
2655
2655
|
if 0 <= basket_num < self._num_normal_baskets:
|
|
2656
2656
|
start = self.member("fBasketSeek")[basket_num]
|
|
2657
2657
|
stop = start + self.basket_compressed_bytes(basket_num)
|
|
2658
|
+
# xrootd doesn't like NumPy ints
|
|
2659
|
+
start, stop = int(start), int(stop)
|
|
2658
2660
|
cursor = uproot.source.cursor.Cursor(start)
|
|
2659
2661
|
chunk = self._file.source.chunk(start, stop)
|
|
2660
2662
|
return chunk, cursor
|
|
@@ -3565,7 +3567,7 @@ def _hasbranches_num_entries_for(
|
|
|
3565
3567
|
start = entry_offsets[0]
|
|
3566
3568
|
for basket_num, stop in enumerate(entry_offsets[1:]):
|
|
3567
3569
|
if entry_start < stop and start <= entry_stop:
|
|
3568
|
-
total_bytes += branch.
|
|
3570
|
+
total_bytes += branch.basket_uncompressed_bytes(basket_num)
|
|
3569
3571
|
start = stop
|
|
3570
3572
|
|
|
3571
3573
|
total_entries = entry_stop - entry_start
|
|
@@ -229,15 +229,17 @@ in file {self.file.file_path}"""
|
|
|
229
229
|
]
|
|
230
230
|
|
|
231
231
|
name_counter = Counter(new_names)
|
|
232
|
+
max_prefixes = max(len(stack) for stack in ancestor_name_stacks)
|
|
232
233
|
while len(new_names) != len(name_counter):
|
|
233
234
|
for i in range(len(n_prefixes)):
|
|
234
235
|
# For non-unique names, add one more prefix and regenerate the name
|
|
235
236
|
if name_counter[new_names[i]] > 1:
|
|
236
237
|
n_prefixes[i] += 1
|
|
237
238
|
|
|
238
|
-
if n_prefixes[i] >=
|
|
239
|
+
if n_prefixes[i] >= max_prefixes:
|
|
240
|
+
self._all_fields = None
|
|
239
241
|
raise RuntimeError(
|
|
240
|
-
"
|
|
242
|
+
"Reached maximum number of prefixes, but names are still not unique."
|
|
241
243
|
)
|
|
242
244
|
|
|
243
245
|
new_names[i] = _generate_fieldname(
|
|
@@ -8,6 +8,7 @@ from __future__ import annotations
|
|
|
8
8
|
|
|
9
9
|
import struct
|
|
10
10
|
|
|
11
|
+
import awkward
|
|
11
12
|
import numpy
|
|
12
13
|
|
|
13
14
|
import uproot
|
|
@@ -56,6 +57,35 @@ class Model_TMatrixTSym_3c_double_3e__v5(uproot.model.VersionedModel):
|
|
|
56
57
|
)
|
|
57
58
|
self._num_bytes += self._members["fElements"].nbytes
|
|
58
59
|
|
|
60
|
+
@classmethod
|
|
61
|
+
def awkward_form(cls, file, context):
|
|
62
|
+
return awkward.forms.RecordForm(
|
|
63
|
+
[
|
|
64
|
+
awkward.forms.NumpyForm("int32"),
|
|
65
|
+
awkward.forms.NumpyForm("int32"),
|
|
66
|
+
awkward.forms.NumpyForm("int32"),
|
|
67
|
+
awkward.forms.NumpyForm("int32"),
|
|
68
|
+
awkward.forms.NumpyForm("uint32"),
|
|
69
|
+
awkward.forms.NumpyForm("int32"),
|
|
70
|
+
awkward.forms.NumpyForm("float64"),
|
|
71
|
+
awkward.forms.ListOffsetForm(
|
|
72
|
+
context["index_format"],
|
|
73
|
+
awkward.forms.NumpyForm("float64"),
|
|
74
|
+
),
|
|
75
|
+
],
|
|
76
|
+
[
|
|
77
|
+
"fNrows",
|
|
78
|
+
"fNcols",
|
|
79
|
+
"fRowLwb",
|
|
80
|
+
"fColLwb",
|
|
81
|
+
"fNelems",
|
|
82
|
+
"fNrowIndex",
|
|
83
|
+
"fTol",
|
|
84
|
+
"fElements",
|
|
85
|
+
],
|
|
86
|
+
parameters={"__record__": "TMatrixTSym<double>"},
|
|
87
|
+
)
|
|
88
|
+
|
|
59
89
|
_format0 = struct.Struct(">iiiiiid")
|
|
60
90
|
_format_memberwise0 = struct.Struct(">i")
|
|
61
91
|
_format_memberwise1 = struct.Struct(">i")
|
|
@@ -960,15 +960,8 @@ def num_entries(paths):
|
|
|
960
960
|
"""
|
|
961
961
|
paths2 = uproot._util.regularize_files(paths, steps_allowed=False)
|
|
962
962
|
|
|
963
|
-
|
|
964
|
-
paths = list(paths.items())
|
|
965
|
-
elif not isinstance(paths, str):
|
|
966
|
-
paths = [(uproot._util.file_object_path_split(path)) for path in paths]
|
|
967
|
-
else:
|
|
968
|
-
paths = [uproot._util.file_object_path_split(paths)]
|
|
969
|
-
|
|
970
|
-
for i, (file_path, object_path) in enumerate(paths2):
|
|
963
|
+
for file_path, object_path in paths2:
|
|
971
964
|
with uproot.open(
|
|
972
965
|
{file_path: object_path}, custom_classes={"TTree": Model_TTree_NumEntries}
|
|
973
966
|
) as f:
|
|
974
|
-
yield
|
|
967
|
+
yield file_path, object_path, f.all_members["fEntries"][0]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# file generated by vcs-versioning
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"__version__",
|
|
7
|
+
"__version_tuple__",
|
|
8
|
+
"version",
|
|
9
|
+
"version_tuple",
|
|
10
|
+
"__commit_id__",
|
|
11
|
+
"commit_id",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
version: str
|
|
15
|
+
__version__: str
|
|
16
|
+
__version_tuple__: tuple[int | str, ...]
|
|
17
|
+
version_tuple: tuple[int | str, ...]
|
|
18
|
+
commit_id: str | None
|
|
19
|
+
__commit_id__: str | None
|
|
20
|
+
|
|
21
|
+
__version__ = version = '5.7.3'
|
|
22
|
+
__version_tuple__ = version_tuple = (5, 7, 3)
|
|
23
|
+
|
|
24
|
+
__commit_id__ = commit_id = None
|
|
@@ -474,6 +474,7 @@ class FreeSegmentsData(CascadeLeaf):
|
|
|
474
474
|
def slices(self, value):
|
|
475
475
|
if self._slices != value:
|
|
476
476
|
self._file_dirty = True
|
|
477
|
+
self._allocation = None
|
|
477
478
|
self._slices = value
|
|
478
479
|
|
|
479
480
|
@property
|
|
@@ -484,6 +485,7 @@ class FreeSegmentsData(CascadeLeaf):
|
|
|
484
485
|
def end(self, value):
|
|
485
486
|
if self._end != value:
|
|
486
487
|
self._file_dirty = True
|
|
488
|
+
self._allocation = None
|
|
487
489
|
self._end = value
|
|
488
490
|
|
|
489
491
|
@property
|
|
@@ -1237,6 +1237,7 @@ class WritableDirectory(MutableMapping):
|
|
|
1237
1237
|
self._file.uuid_function(),
|
|
1238
1238
|
),
|
|
1239
1239
|
)
|
|
1240
|
+
self._subdirs[head] = directory
|
|
1240
1241
|
|
|
1241
1242
|
elif key.classname.string not in ("TDirectory", "TDirectoryFile"):
|
|
1242
1243
|
raise TypeError(
|
|
@@ -2234,9 +2235,39 @@ def _is_type_specification(obj):
|
|
|
2234
2235
|
else:
|
|
2235
2236
|
return False
|
|
2236
2237
|
if not isinstance(
|
|
2237
|
-
obj,
|
|
2238
|
+
obj,
|
|
2239
|
+
(
|
|
2240
|
+
numpy.dtype,
|
|
2241
|
+
awkward.types.Type,
|
|
2242
|
+
awkward.types.ArrayType,
|
|
2243
|
+
type,
|
|
2244
|
+
str,
|
|
2245
|
+
tuple,
|
|
2246
|
+
),
|
|
2238
2247
|
):
|
|
2239
2248
|
return False
|
|
2249
|
+
# for tuples and strings we need to make sure they actually specify a type and are not just data
|
|
2250
|
+
if isinstance(obj, tuple):
|
|
2251
|
+
try:
|
|
2252
|
+
numpy.dtype(obj)
|
|
2253
|
+
except (TypeError, ValueError):
|
|
2254
|
+
return False
|
|
2255
|
+
else:
|
|
2256
|
+
continue
|
|
2257
|
+
if isinstance(obj, str):
|
|
2258
|
+
try:
|
|
2259
|
+
numpy.dtype(obj)
|
|
2260
|
+
except (TypeError, ValueError):
|
|
2261
|
+
pass
|
|
2262
|
+
else:
|
|
2263
|
+
continue
|
|
2264
|
+
try:
|
|
2265
|
+
awkward.types.from_datashape(obj, highlevel=False)
|
|
2266
|
+
except Exception:
|
|
2267
|
+
pass
|
|
2268
|
+
else:
|
|
2269
|
+
continue
|
|
2270
|
+
return False
|
|
2240
2271
|
return True
|
|
2241
2272
|
|
|
2242
2273
|
|
|
@@ -2245,12 +2276,45 @@ def _type_specification_to_awkward_form(obj):
|
|
|
2245
2276
|
return obj
|
|
2246
2277
|
if isinstance(obj, (awkward.types.Type, awkward.types.ArrayType)):
|
|
2247
2278
|
return awkward.forms.from_type(obj)
|
|
2248
|
-
if isinstance(obj,
|
|
2249
|
-
obj =
|
|
2279
|
+
if isinstance(obj, type):
|
|
2280
|
+
obj = numpy.dtype(obj)
|
|
2281
|
+
if obj == numpy.dtype("O"):
|
|
2282
|
+
raise TypeError(f"Cannot construct a NumPy dtype from {obj!r}.")
|
|
2283
|
+
if isinstance(obj, tuple):
|
|
2284
|
+
try:
|
|
2285
|
+
obj = numpy.dtype(obj)
|
|
2286
|
+
except (TypeError, ValueError):
|
|
2287
|
+
raise TypeError(
|
|
2288
|
+
f"Cannot construct a NumPy dtype from the tuple {obj!r}."
|
|
2289
|
+
) from None
|
|
2250
2290
|
if isinstance(obj, str):
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2291
|
+
# First we try to interpret the string as a NumPy dtype
|
|
2292
|
+
# so we can try to convert it to a string Awkward understands
|
|
2293
|
+
try:
|
|
2294
|
+
dt = numpy.dtype(obj)
|
|
2295
|
+
except (TypeError, ValueError):
|
|
2296
|
+
pass
|
|
2297
|
+
else:
|
|
2298
|
+
obj = dt
|
|
2299
|
+
if isinstance(obj, numpy.dtype):
|
|
2300
|
+
obj = obj.newbyteorder("<")
|
|
2301
|
+
if obj.subdtype is None:
|
|
2302
|
+
field_shape = ()
|
|
2303
|
+
else:
|
|
2304
|
+
obj, field_shape = obj.subdtype
|
|
2305
|
+
dims = ""
|
|
2306
|
+
if len(field_shape) > 0:
|
|
2307
|
+
dims = dims + "".join(str(x) + " * " for x in field_shape)
|
|
2308
|
+
obj = f"{dims}{obj}"
|
|
2309
|
+
if isinstance(obj, str):
|
|
2310
|
+
try:
|
|
2311
|
+
return awkward.forms.from_type(
|
|
2312
|
+
awkward.types.from_datashape(obj, highlevel=False)
|
|
2313
|
+
)
|
|
2314
|
+
except Exception:
|
|
2315
|
+
raise TypeError(
|
|
2316
|
+
f"Cannot construct an Awkward Form from type specification {obj!r}"
|
|
2317
|
+
) from None
|
|
2254
2318
|
if isinstance(obj, Mapping):
|
|
2255
2319
|
return awkward.forms.RecordForm(
|
|
2256
2320
|
[_type_specification_to_awkward_form(v) for v in obj.values()],
|
|
@@ -2258,7 +2322,7 @@ def _type_specification_to_awkward_form(obj):
|
|
|
2258
2322
|
)
|
|
2259
2323
|
raise TypeError(
|
|
2260
2324
|
f"Cannot construct an Awkward Form from {type(obj).__name__}. "
|
|
2261
|
-
f"Supported types: Form, Type, ArrayType, dtype, str,
|
|
2325
|
+
f"Supported types: Form, Type, ArrayType, dtype, Mapping, str, tuple."
|
|
2262
2326
|
)
|
|
2263
2327
|
|
|
2264
2328
|
|
|
@@ -9,27 +9,27 @@ import uproot
|
|
|
9
9
|
|
|
10
10
|
def test_num_entries_for():
|
|
11
11
|
with uproot.open(skhep_testdata.data_path("uproot-HZZ.root"))["events"] as events:
|
|
12
|
-
assert events.num_entries_for("1 kB") ==
|
|
13
|
-
assert events.num_entries_for("10 kB") ==
|
|
14
|
-
assert events.num_entries_for("0.1 MB") ==
|
|
12
|
+
assert events.num_entries_for("1 kB") == 4
|
|
13
|
+
assert events.num_entries_for("10 kB") == 37
|
|
14
|
+
assert events.num_entries_for("0.1 MB") == 372
|
|
15
15
|
assert events.num_entries == 2421
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
def test_num_entries_for_2():
|
|
19
19
|
with uproot.open(skhep_testdata.data_path("uproot-Zmumu.root"))["events"] as events:
|
|
20
|
-
assert events.num_entries_for("1 kB") ==
|
|
21
|
-
assert events.num_entries_for("10 kB") ==
|
|
22
|
-
assert events.num_entries_for("0.1 MB") ==
|
|
20
|
+
assert events.num_entries_for("1 kB") == 7
|
|
21
|
+
assert events.num_entries_for("10 kB") == 70
|
|
22
|
+
assert events.num_entries_for("0.1 MB") == 696
|
|
23
23
|
assert events.num_entries == 2304
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def test_iterate_1():
|
|
27
27
|
with uproot.open(skhep_testdata.data_path("uproot-Zmumu.root"))["events"] as events:
|
|
28
28
|
for i, arrays in enumerate(events.iterate(step_size="0.1 MB", library="np")):
|
|
29
|
-
if i
|
|
30
|
-
assert len(arrays["px1"]) ==
|
|
31
|
-
elif i ==
|
|
32
|
-
assert len(arrays["px1"]) ==
|
|
29
|
+
if i in range(3):
|
|
30
|
+
assert len(arrays["px1"]) == 696
|
|
31
|
+
elif i == 3:
|
|
32
|
+
assert len(arrays["px1"]) == 216
|
|
33
33
|
else:
|
|
34
34
|
assert False
|
|
35
35
|
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# BSD 3-Clause License; see https://github.com/scikit-hep/uproot5/blob/main/LICENSE
|
|
2
|
+
|
|
3
|
+
import numpy
|
|
4
|
+
import pytest
|
|
5
|
+
import skhep_testdata
|
|
6
|
+
|
|
7
|
+
import uproot
|
|
8
|
+
|
|
9
|
+
dask = pytest.importorskip("dask")
|
|
10
|
+
da = pytest.importorskip("dask.array")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def test_single_dask_array():
|
|
14
|
+
test_path = skhep_testdata.data_path("uproot-Zmumu.root") + ":events"
|
|
15
|
+
ttree = uproot.open(test_path)
|
|
16
|
+
|
|
17
|
+
np_arrays = ttree.arrays(library="np")
|
|
18
|
+
dask_arrays = uproot.dask(test_path, library="np")
|
|
19
|
+
|
|
20
|
+
assert list(dask_arrays.keys()) == list(
|
|
21
|
+
np_arrays.keys()
|
|
22
|
+
), "Different keys detected in dictionary of dask arrays and dictionary of numpy arrays"
|
|
23
|
+
|
|
24
|
+
for key in np_arrays.keys():
|
|
25
|
+
comp = dask_arrays[key].compute() == np_arrays[key]
|
|
26
|
+
assert comp.all(), f"Incorrect array at key {key}"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_dask_concatenation():
|
|
30
|
+
test_path1 = skhep_testdata.data_path("uproot-Zmumu.root") + ":events"
|
|
31
|
+
test_path2 = skhep_testdata.data_path("uproot-Zmumu-uncompressed.root") + ":events"
|
|
32
|
+
test_path3 = skhep_testdata.data_path("uproot-Zmumu-zlib.root") + ":events"
|
|
33
|
+
test_path4 = skhep_testdata.data_path("uproot-Zmumu-lzma.root") + ":events"
|
|
34
|
+
|
|
35
|
+
np_arrays = uproot.concatenate(
|
|
36
|
+
[test_path1, test_path2, test_path3, test_path4], library="np"
|
|
37
|
+
)
|
|
38
|
+
dask_arrays = uproot.dask(
|
|
39
|
+
[test_path1, test_path2, test_path3, test_path4], library="np"
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
assert list(dask_arrays.keys()) == list(
|
|
43
|
+
np_arrays.keys()
|
|
44
|
+
), "Different keys detected in dictionary of dask arrays and dictionary of numpy arrays"
|
|
45
|
+
|
|
46
|
+
for key in np_arrays.keys():
|
|
47
|
+
comp = dask_arrays[key].compute() == np_arrays[key]
|
|
48
|
+
assert comp.all(), f"Incorrect array at key {key}"
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def test_multidim_array():
|
|
52
|
+
test_path = (
|
|
53
|
+
skhep_testdata.data_path("uproot-sample-6.08.04-uncompressed.root") + ":sample"
|
|
54
|
+
)
|
|
55
|
+
ttree = uproot.open(test_path)
|
|
56
|
+
|
|
57
|
+
np_arrays = ttree.arrays(library="np")
|
|
58
|
+
dask_arrays = uproot.dask(test_path, library="np")
|
|
59
|
+
|
|
60
|
+
assert list(dask_arrays.keys()) == list(
|
|
61
|
+
np_arrays.keys()
|
|
62
|
+
), "Different keys detected in dictionary of dask arrays and dictionary of numpy arrays"
|
|
63
|
+
|
|
64
|
+
comp = dask_arrays["ab"].compute() == np_arrays["ab"]
|
|
65
|
+
assert comp.all(), "Incorrect array at key {}".format("ab")
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def test_chunking_single_num():
|
|
69
|
+
filename1 = skhep_testdata.data_path("uproot-Zmumu.root") + ":events"
|
|
70
|
+
assert uproot.dask(filename1, step_size=30, library="np")["px1"].chunks == (
|
|
71
|
+
(30,) * 76 + (24,),
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def test_chunking_single_string():
|
|
76
|
+
dask = pytest.importorskip("dask")
|
|
77
|
+
da = pytest.importorskip("dask.array")
|
|
78
|
+
filename1 = skhep_testdata.data_path("uproot-Zmumu.root") + ":events"
|
|
79
|
+
print(uproot.dask(filename1, step_size="500B", library="np")["px1"].chunks)
|
|
80
|
+
assert uproot.dask(filename1, step_size="500B", library="np")["px1"].chunks == (
|
|
81
|
+
(3,) * 768,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def test_chunking_multiple_num():
|
|
86
|
+
filename1 = skhep_testdata.data_path("uproot-Zmumu.root") + ":events"
|
|
87
|
+
filename2 = skhep_testdata.data_path("uproot-Zmumu-uncompressed.root") + ":events"
|
|
88
|
+
assert uproot.dask([filename1, filename2], step_size=30, library="np")[
|
|
89
|
+
"px1"
|
|
90
|
+
].chunks == (
|
|
91
|
+
(30,) * 76 + (24,) + (30,) * 76 + (24,),
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def test_chunking_multiple_string():
|
|
96
|
+
filename1 = skhep_testdata.data_path("uproot-Zmumu.root") + ":events"
|
|
97
|
+
filename2 = skhep_testdata.data_path("uproot-Zmumu-uncompressed.root") + ":events"
|
|
98
|
+
assert uproot.dask([filename1, filename2], step_size="500B", library="np")[
|
|
99
|
+
"px1"
|
|
100
|
+
].chunks == ((3,) * 1536,)
|
|
@@ -56,7 +56,7 @@ def test_chunking_single_num():
|
|
|
56
56
|
|
|
57
57
|
def test_chunking_single_string():
|
|
58
58
|
test_path = skhep_testdata.data_path("uproot-Zmumu.root") + ":events"
|
|
59
|
-
assert uproot.dask(test_path, step_size="500B", library="ak").npartitions ==
|
|
59
|
+
assert uproot.dask(test_path, step_size="500B", library="ak").npartitions == 768
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
def test_chunking_multiple_num():
|
|
@@ -73,7 +73,7 @@ def test_chunking_multiple_string():
|
|
|
73
73
|
filename2 = skhep_testdata.data_path("uproot-Zmumu-uncompressed.root") + ":events"
|
|
74
74
|
assert (
|
|
75
75
|
uproot.dask([filename1, filename2], step_size="500B", library="ak").npartitions
|
|
76
|
-
==
|
|
76
|
+
== 1536
|
|
77
77
|
)
|
|
78
78
|
|
|
79
79
|
|
|
@@ -63,15 +63,15 @@ def test_iterate():
|
|
|
63
63
|
|
|
64
64
|
for i, arrays in enumerate(obj.iterate(step_size="10 kB")):
|
|
65
65
|
if i == 0:
|
|
66
|
-
assert len(arrays) ==
|
|
66
|
+
assert len(arrays) == 158
|
|
67
67
|
expected_pt = [10.763696670532227, 15.736522674560547]
|
|
68
68
|
expected_charge = [-1, -1]
|
|
69
69
|
assert arrays["Muon_pt"][0].tolist() == expected_pt
|
|
70
70
|
assert arrays["Muon_charge"][0].tolist() == expected_charge
|
|
71
|
-
elif i
|
|
72
|
-
assert len(arrays) ==
|
|
73
|
-
elif i ==
|
|
74
|
-
assert len(arrays) ==
|
|
71
|
+
elif i in range(1, 6):
|
|
72
|
+
assert len(arrays) == 158
|
|
73
|
+
elif i == 6:
|
|
74
|
+
assert len(arrays) == 52
|
|
75
75
|
else:
|
|
76
76
|
assert False
|
|
77
77
|
|
|
@@ -84,10 +84,12 @@ def test_iterate():
|
|
|
84
84
|
|
|
85
85
|
for i, arrays in enumerate(Muon_pt.iterate(step_size="5 kB")):
|
|
86
86
|
if i == 0:
|
|
87
|
-
assert len(arrays) ==
|
|
87
|
+
assert len(arrays) == 286
|
|
88
88
|
expected_pt = [10.763696670532227, 15.736522674560547]
|
|
89
89
|
assert arrays["Muon_pt"][0].tolist() == expected_pt
|
|
90
|
-
elif i
|
|
91
|
-
assert len(arrays) ==
|
|
90
|
+
elif i in (1, 2):
|
|
91
|
+
assert len(arrays) == 286
|
|
92
|
+
elif i == 3:
|
|
93
|
+
assert len(arrays) == 142
|
|
92
94
|
else:
|
|
93
95
|
assert False
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# BSD 3-Clause License; see https://github.com/scikit-hep/uproot5/blob/main/LICENSE
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
import uproot
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_mktree_repeated_same_subdir(tmp_path):
|
|
9
|
+
newfile = os.path.join(tmp_path, "newfile.root")
|
|
10
|
+
|
|
11
|
+
with uproot.recreate(newfile) as f:
|
|
12
|
+
f.mktree("tree/x", {"x": [1, 2, 3]})
|
|
13
|
+
f.mktree("tree/y", {"x": [1, 2, 3]})
|
|
14
|
+
f.mktree("tree/z", {"x": [1, 2, 3]})
|
|
15
|
+
f.mktree("tree/w", {"x": [1, 2, 3]})
|
|
16
|
+
|
|
17
|
+
assert set(f.keys(cycle=False)) == {
|
|
18
|
+
"tree",
|
|
19
|
+
"tree/x",
|
|
20
|
+
"tree/y",
|
|
21
|
+
"tree/z",
|
|
22
|
+
"tree/w",
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
with uproot.open(newfile) as fin:
|
|
26
|
+
assert set(fin.keys(cycle=False)) == {
|
|
27
|
+
"tree",
|
|
28
|
+
"tree/x",
|
|
29
|
+
"tree/y",
|
|
30
|
+
"tree/z",
|
|
31
|
+
"tree/w",
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def test_mkrntuple_repeated_same_subdir(tmp_path):
|
|
36
|
+
newfile = os.path.join(tmp_path, "newfile.root")
|
|
37
|
+
|
|
38
|
+
with uproot.recreate(newfile) as f:
|
|
39
|
+
f.mkrntuple("ntpl/x", {"x": [1, 2, 3]})
|
|
40
|
+
f.mkrntuple("ntpl/y", {"x": [1, 2, 3]})
|
|
41
|
+
f.mkrntuple("ntpl/z", {"x": [1, 2, 3]})
|
|
42
|
+
f.mkrntuple("ntpl/w", {"x": [1, 2, 3]})
|
|
43
|
+
|
|
44
|
+
assert set(f.keys(cycle=False)) == {
|
|
45
|
+
"ntpl",
|
|
46
|
+
"ntpl/x",
|
|
47
|
+
"ntpl/y",
|
|
48
|
+
"ntpl/z",
|
|
49
|
+
"ntpl/w",
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
with uproot.open(newfile) as fin:
|
|
53
|
+
assert set(fin.keys(cycle=False)) == {
|
|
54
|
+
"ntpl",
|
|
55
|
+
"ntpl/x",
|
|
56
|
+
"ntpl/y",
|
|
57
|
+
"ntpl/z",
|
|
58
|
+
"ntpl/w",
|
|
59
|
+
}
|