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.
- {uproot-5.5.0 → uproot-5.5.2}/.all-contributorsrc +9 -0
- {uproot-5.5.0 → uproot-5.5.2}/.github/workflows/build-test.yml +1 -1
- {uproot-5.5.0 → uproot-5.5.2}/.github/workflows/deploy.yml +2 -2
- {uproot-5.5.0 → uproot-5.5.2}/.pre-commit-config.yaml +3 -3
- {uproot-5.5.0 → uproot-5.5.2}/CITATION.cff +1 -1
- {uproot-5.5.0 → uproot-5.5.2}/PKG-INFO +5 -5
- {uproot-5.5.0 → uproot-5.5.2}/README.md +1 -0
- {uproot-5.5.0 → uproot-5.5.2}/pyproject.toml +2 -3
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/_dask.py +18 -8
- uproot-5.5.2/src/uproot/const.py +287 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/identify.py +2 -25
- uproot-5.5.2/src/uproot/interpretation/known_forth/__init__.py +46 -0
- uproot-5.5.2/src/uproot/interpretation/known_forth/atlas.py +99 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/objects.py +16 -3
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/language/python.py +4 -4
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/RNTuple.py +222 -119
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/reading.py +5 -5
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/serialization.py +2 -2
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/fsspec.py +7 -1
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/version.py +2 -2
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/_cascadetree.py +4 -6
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0001_source_class.py +2 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0013_rntuple_anchor.py +25 -26
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0630_rntuple_basics.py +5 -3
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0662_rntuple_stl_containers.py +1 -1
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0840_support_tleafG.py +1 -1
- uproot-5.5.0/tests/test_0962_RNTuple_update.py → uproot-5.5.2/tests/test_0962_rntuple_update.py +5 -28
- uproot-5.5.2/tests/test_1159_rntuple_cluster_groups.py +27 -0
- uproot-5.5.2/tests/test_1191_rntuple_fixes.py +63 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1223_more_rntuple_types.py +9 -6
- uproot-5.5.2/tests/test_1229_const_in_typename.py +27 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1250_rntuple_improvements.py +14 -14
- uproot-5.5.2/tests/test_1282_add_known_forth_for_atlas.py +48 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1285_rntuple_multicluster_concatenation.py +1 -1
- uproot-5.5.2/tests/test_1347_rntuple_floats_suppressed_cols.py +167 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests-wasm/test_1272_basic_functionality.py +3 -0
- uproot-5.5.0/src/uproot/const.py +0 -262
- uproot-5.5.0/tests/test_1191_rntuple_fixes.py +0 -87
- {uproot-5.5.0 → uproot-5.5.2}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/.github/dependabot.yml +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/.github/workflows/build-distributions.yml +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/.github/workflows/semantic-pr-title.yml +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/.github/workflows/upload-nightly-wheels.yml +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/.gitignore +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/.readthedocs.yml +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/LICENSE +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/dev/example-objects.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/dev/make-models.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-img/diagrams/abstraction-layers.png +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-img/diagrams/abstraction-layers.svg +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-img/diagrams/example-dask-graph.png +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-img/diagrams/uproot-awkward-timeline.png +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-img/diagrams/uproot-awkward-timeline.svg +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-img/logo/logo-300px-white.png +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-img/logo/logo-300px.png +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-img/logo/logo-600px.png +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-img/logo/logo.svg +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-img/photos/switcheroo.jpg +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/_templates/breadcrumbs.html +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/basic.rst +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/conf.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/index.rst +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/make_changelog.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/prepare_docstrings.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/requirements.txt +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/docs-sphinx/uproot3-to-4.rst +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/__init__.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/_awkwardforth.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/_util.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behavior.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/RooCurve.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/RooHist.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TAxis.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TBranch.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TBranchElement.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TDatime.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TGraph.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TGraphAsymmErrors.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TGraphErrors.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TH1.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TH2.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TH2Poly.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TH3.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TParameter.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TProfile.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TProfile2D.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TProfile3D.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/TTree.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/behaviors/__init__.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/cache.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/compression.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/containers.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/deserialization.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/dynamic.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/exceptions.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/extras.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/__init__.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/grouped.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/jagged.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/library.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/numerical.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/interpretation/strings.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/language/__init__.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/model.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TArray.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TAtt.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TBasket.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TBranch.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TClonesArray.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TDatime.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TGraph.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TH.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/THashList.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TLeaf.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TList.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TMatrixT.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TNamed.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TObjArray.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TObjString.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TObject.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TRef.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TString.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TTable.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TTime.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/TTree.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/models/__init__.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/pyroot.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/sink/__init__.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/sink/file.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/__init__.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/chunk.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/coalesce.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/cursor.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/file.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/futures.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/http.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/object.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/s3.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/source/xrootd.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/streamers.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/__init__.py +7 -7
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/_cascade.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/_cascadentuple.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/_dask_write.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/identify.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/interpret.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/src/uproot/writing/writable.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/__init__.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/conftest.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/samples/h_dynamic.pkl +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0006_notify_when_downloaded.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0007_single_chunk_interface.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0008_start_interpretation.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0009_nested_directories.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0010_start_streamers.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0011_generate_classes_from_streamers.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0014_all_ttree_versions.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0016_interpretations.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0017_multi_basket_multi_branch_fetch.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0018_array_fetching_interface.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0022_number_of_branches.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0023_more_interpretations_1.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0023_ttree_versions.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0028_fallback_to_read_streamer.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0029_more_string_types.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0031_test_stl_containers.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0033_more_interpretations_2.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0034_generic_objects_in_ttrees.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0035_datatype_generality.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0038_memberwise_serialization.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0043_iterate_function.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0044_concatenate_function.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0046_histograms_bh_hist.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0053_parents_should_not_be_bases.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0058_detach_model_objects_from_files.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0066_fix_http_fallback_freeze.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0067_common_entry_offsets.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0081_dont_parse_colons.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0087_memberwise_splitting_not_implemented_messages.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0088_read_with_http.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0099_read_from_file_object.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0112_fix_pandas_with_cut.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0118_fix_name_fetch_again.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0123_atlas_issues.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0126_turn_unknown_emptyarrays_into_known_types.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0167_use_the_common_histogram_interface.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0172_allow_allocators_in_vector_typenames.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0173_empty_and_multiprocessing_bugs.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0182_complain_about_missing_files.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0194_fix_lost_cuts_in_iterate.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0220_contiguous_byte_ranges_in_http.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0228_read_TProfiles.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0240_read_TGraphAsymmErrors.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0278_specializations_for_TParameter.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0302_pickle.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0303_empty_jagged_array.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0320_start_working_on_ROOT_writing.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0322_writablefile_infrastructure.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0329_update_existing_root_files.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0335_empty_ttree_division_by_zero.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0341_manipulate_streamer_info.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0344_writabledirectory_can_read.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0345_bulk_copy_method.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0349_write_TObjString.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0350_read_RooCurve_RooHist.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0351_write_TList.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0352_write_THashList.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0384_move_behavior_of_and_fix_383.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0398_dimensions_in_leaflist.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0405_write_a_histogram.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0406_write_a_ttree.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0407_read_TDatime.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0412_write_multidimensional_numpy_to_ttree.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0414_write_jagged_arrays.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0416_writing_compressed_data.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0418_read_TTable.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0420_pyroot_uproot_interoperability.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0422_hist_integration.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0430_global_index_for_tuples_of_DataFrames.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0438_TClonesArray_is_not_AsGrouped.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0439_check_awkward_before_numpy.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0442_regular_TClonesArray.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0472_tstreamerinfo_for_ttree.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0475_remember_to_update_freesegments.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0484_manually_add_model_for_TMatrixTSym_double_.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0487_implement_asdtypeinplace.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0498_create_leaf_branch_in_extend.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0519_remove_memmap_copy.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0520_dynamic_classes_cant_be_abc_subclasses.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0569_fBits_is_4_bytes.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0576_unicode_in_names.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0578_dask_for_numpy.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0580_round_trip_for_no_flow_histograms.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0589_explicitly_interpret_RVec_type.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0603_dask_delayed_open.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0609_num_enteries_func.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0610_awkward_form.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0637_setup_tests_for_AwkwardForth.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0643_reading_vector_pair_TLorentzVector_int.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0651_implement_transformed_axis.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0652_dask_for_awkward.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0692_fsspec_reading.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0692_fsspec_writing.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0700_dask_empty_arrays.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0705_rntuple_writing_metadata.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0750_avoid_empty_TBasket_issue.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0755_dask_awkward_column_projection.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0791_protect_uproot_project_columns_from_dask_node_names.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0798_DAOD_PHYSLITE.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0808_fix_awkward_form_for_AsStridedObjects.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0816_separate_AwkwardForth_machines_by_TBranch.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0832_ak_add_doc_should_also_add_to_typetracer.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0841_fix_814.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0844_fix_delete_hist_from_root.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0852_fix_strided_interp_extra_offsets.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0870_writing_arrays_of_type_unknown_fix_822.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0876_uproot_dask_blind_steps.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0886_fix_awkward_form_breadcrumbs.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0910_fix_906_members_non_numerical_branches.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0911_fix_interp_array_non_numerical_objs_issue_880.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0912_fix_pandas_and_double_nested_vectors_issue_885.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0916_read_from_s3.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0927_dont_assume_uproot_in_global_scope_in_TPython_Eval.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0930_expressions_in_pandas.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0940_feat_add_TLeafC_string_support.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0965_inverted_axes_variances_hist_888.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_0976_path_object_split.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1000-write-TProfiles.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1043_const_std_string.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1058_dask_awkward_report.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1063_dask_distributed.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1070_pandas_dataframe_building_performance_fix.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1085_dask_write.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1102_any_locks_in_models_must_be_transient.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1114_fix_attempt_to_concatenate_numpy_with_awkward.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1120_check_decompression_executor_pass_for_dask.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1127_fix_allow_colon_in_key_names.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1128_TGraph_writing.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1146_split_ranges_for_large_files_over_http.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1154_classof_using_relative_path.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1160_std_string_in_TDirectory.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1180_read_free_floating_vector_issue_1179.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1181_support_for_stl_list.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1182_add_support_for_bitset.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1183_ttime_custom.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1186_dtype_might_raise_ValueError.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1189_dask_failing_on_duplicate_keys.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1198_coalesce.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1207_fix_title_of_TBranch_with_counter.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1212_dont_let_update_mess_up_file_version.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1221_AwkwardForth_bug.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1254_test_threadpool_executor_for_dask.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1264_write_NumPy_array_of_strings.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1275_fix_TStreamerLoop_code_generation.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1318_dont_compare_big_endian_in_awkward.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests/test_1321_pandas_changed_api_again.py +0 -0
- {uproot-5.5.0 → uproot-5.5.2}/tests-wasm/__init__.py +0 -0
- {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,
|
|
@@ -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@
|
|
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
|
-
|
|
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:
|
|
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.
|
|
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.
|
|
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: "
|
|
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.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: uproot
|
|
3
|
-
Version: 5.5.
|
|
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 <
|
|
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>=
|
|
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 = "
|
|
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>=
|
|
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
|
-
|
|
450
|
-
output
|
|
451
|
-
output_indices
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
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
|
+
}
|