uproot 5.6.2__tar.gz → 5.6.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.6.2 → uproot-5.6.3}/.github/workflows/deploy.yml +1 -1
- {uproot-5.6.2 → uproot-5.6.3}/.pre-commit-config.yaml +4 -3
- {uproot-5.6.2 → uproot-5.6.3}/PKG-INFO +5 -1
- {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/basic.rst +60 -0
- {uproot-5.6.2 → uproot-5.6.3}/pyproject.toml +14 -1
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/_util.py +23 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/RNTuple.py +292 -35
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TBranch.py +12 -6
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/const.py +13 -10
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/extras.py +48 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/RNTuple.py +601 -85
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/reading.py +1 -1
- uproot-5.6.3/src/uproot/source/cufile_interface.py +89 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/version.py +2 -2
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/_cascade.py +2 -4
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/_cascadentuple.py +118 -126
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/writable.py +18 -5
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1250_rntuple_improvements.py +5 -5
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1395_rntuple_writing_lists_and_structs.py +65 -0
- uproot-5.6.3/tests-cuda/test_0630_rntuple_basics.py +57 -0
- uproot-5.6.3/tests-cuda/test_0662_rntuple_stl_containers.py +90 -0
- uproot-5.6.3/tests-cuda/test_0962_rntuple_update.py +62 -0
- uproot-5.6.3/tests-cuda/test_1159_rntuple_cluster_groups.py +40 -0
- uproot-5.6.3/tests-cuda/test_1191_rntuple_fixes.py +91 -0
- uproot-5.6.3/tests-cuda/test_1223_more_rntuple_types.py +122 -0
- uproot-5.6.3/tests-cuda/test_1250_rntuple_improvements.py +89 -0
- uproot-5.6.3/tests-cuda/test_1285_rntuple_multicluster_concatenation.py +31 -0
- uproot-5.6.3/tests-cuda/test_1347_rntuple_floats_suppressed_cols.py +183 -0
- uproot-5.6.3/tests-cuda/test_1411_rntuple_physlite_ATLAS.py +130 -0
- {uproot-5.6.2 → uproot-5.6.3}/.all-contributorsrc +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/.github/dependabot.yml +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/.github/workflows/build-distributions.yml +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/.github/workflows/build-test.yml +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/.github/workflows/semantic-pr-title.yml +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/.github/workflows/upload-nightly-wheels.yml +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/.gitignore +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/.readthedocs.yml +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/CITATION.cff +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/CONTRIBUTING.md +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/LICENSE +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/README.md +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/dev/example-objects.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/dev/make-models.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-img/diagrams/abstraction-layers.png +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-img/diagrams/abstraction-layers.svg +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-img/diagrams/example-dask-graph.png +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-img/diagrams/uproot-awkward-timeline.png +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-img/diagrams/uproot-awkward-timeline.svg +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-img/logo/logo-300px-white.png +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-img/logo/logo-300px.png +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-img/logo/logo-600px.png +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-img/logo/logo.svg +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-img/photos/switcheroo.jpg +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/_templates/breadcrumbs.html +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/conf.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/index.rst +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/make_changelog.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/prepare_docstrings.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/requirements.txt +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/docs-sphinx/uproot3-to-4.rst +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/__init__.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/_awkwardforth.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/_dask.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behavior.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/RooCurve.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/RooHist.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TAxis.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TBranchElement.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TDatime.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TGraph.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TGraphAsymmErrors.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TGraphErrors.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TH1.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TH2.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TH2Poly.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TH3.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TParameter.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TProfile.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TProfile2D.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TProfile3D.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/TTree.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/behaviors/__init__.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/cache.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/compression.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/containers.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/deserialization.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/dynamic.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/exceptions.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/__init__.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/grouped.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/identify.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/jagged.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/known_forth/__init__.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/known_forth/atlas.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/library.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/numerical.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/objects.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/interpretation/strings.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/language/__init__.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/language/python.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/model.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TArray.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TAtt.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TBasket.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TBranch.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TClonesArray.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TDatime.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TGraph.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TH.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/THashList.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TLeaf.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TList.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TMatrixT.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TNamed.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TObjArray.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TObjString.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TObject.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TRef.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TString.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TTable.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TTime.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/TTree.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/models/__init__.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/pyroot.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/serialization.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/sink/__init__.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/sink/file.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/__init__.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/chunk.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/coalesce.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/cursor.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/file.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/fsspec.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/futures.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/http.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/object.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/s3.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/source/xrootd.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/streamers.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/__init__.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/_cascadetree.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/_dask_write.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/identify.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/src/uproot/writing/interpret.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/__init__.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/conftest.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/samples/h_dynamic.pkl +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0001_source_class.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0006_notify_when_downloaded.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0007_single_chunk_interface.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0008_start_interpretation.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0009_nested_directories.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0010_start_streamers.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0011_generate_classes_from_streamers.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0013_rntuple_anchor.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0014_all_ttree_versions.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0016_interpretations.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0017_multi_basket_multi_branch_fetch.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0018_array_fetching_interface.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0022_number_of_branches.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0023_more_interpretations_1.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0023_ttree_versions.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0028_fallback_to_read_streamer.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0029_more_string_types.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0031_test_stl_containers.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0033_more_interpretations_2.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0034_generic_objects_in_ttrees.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0035_datatype_generality.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0038_memberwise_serialization.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0043_iterate_function.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0044_concatenate_function.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0046_histograms_bh_hist.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0053_parents_should_not_be_bases.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0058_detach_model_objects_from_files.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0066_fix_http_fallback_freeze.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0067_common_entry_offsets.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0081_dont_parse_colons.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0087_memberwise_splitting_not_implemented_messages.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0088_read_with_http.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0099_read_from_file_object.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0112_fix_pandas_with_cut.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0118_fix_name_fetch_again.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0123_atlas_issues.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0126_turn_unknown_emptyarrays_into_known_types.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0167_use_the_common_histogram_interface.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0172_allow_allocators_in_vector_typenames.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0173_empty_and_multiprocessing_bugs.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0182_complain_about_missing_files.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0194_fix_lost_cuts_in_iterate.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0220_contiguous_byte_ranges_in_http.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0228_read_TProfiles.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0240_read_TGraphAsymmErrors.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0278_specializations_for_TParameter.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0302_pickle.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0303_empty_jagged_array.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0320_start_working_on_ROOT_writing.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0322_writablefile_infrastructure.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0329_update_existing_root_files.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0335_empty_ttree_division_by_zero.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0341_manipulate_streamer_info.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0344_writabledirectory_can_read.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0345_bulk_copy_method.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0349_write_TObjString.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0350_read_RooCurve_RooHist.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0351_write_TList.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0352_write_THashList.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0384_move_behavior_of_and_fix_383.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0398_dimensions_in_leaflist.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0405_write_a_histogram.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0406_write_a_ttree.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0407_read_TDatime.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0412_write_multidimensional_numpy_to_ttree.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0414_write_jagged_arrays.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0416_writing_compressed_data.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0418_read_TTable.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0420_pyroot_uproot_interoperability.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0422_hist_integration.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0430_global_index_for_tuples_of_DataFrames.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0438_TClonesArray_is_not_AsGrouped.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0439_check_awkward_before_numpy.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0442_regular_TClonesArray.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0472_tstreamerinfo_for_ttree.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0475_remember_to_update_freesegments.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0484_manually_add_model_for_TMatrixTSym_double_.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0487_implement_asdtypeinplace.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0498_create_leaf_branch_in_extend.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0519_remove_memmap_copy.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0520_dynamic_classes_cant_be_abc_subclasses.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0569_fBits_is_4_bytes.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0576_unicode_in_names.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0578_dask_for_numpy.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0580_round_trip_for_no_flow_histograms.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0589_explicitly_interpret_RVec_type.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0603_dask_delayed_open.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0609_num_enteries_func.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0610_awkward_form.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0630_rntuple_basics.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0637_setup_tests_for_AwkwardForth.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0643_reading_vector_pair_TLorentzVector_int.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0651_implement_transformed_axis.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0652_dask_for_awkward.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0662_rntuple_stl_containers.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0692_fsspec_reading.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0692_fsspec_writing.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0700_dask_empty_arrays.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0705_rntuple_writing_metadata.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0750_avoid_empty_TBasket_issue.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0755_dask_awkward_column_projection.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0791_protect_uproot_project_columns_from_dask_node_names.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0798_DAOD_PHYSLITE.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0808_fix_awkward_form_for_AsStridedObjects.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0816_separate_AwkwardForth_machines_by_TBranch.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0832_ak_add_doc_should_also_add_to_typetracer.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0840_support_tleafG.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0841_fix_814.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0844_fix_delete_hist_from_root.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0852_fix_strided_interp_extra_offsets.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0870_writing_arrays_of_type_unknown_fix_822.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0876_uproot_dask_blind_steps.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0886_fix_awkward_form_breadcrumbs.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0910_fix_906_members_non_numerical_branches.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0911_fix_interp_array_non_numerical_objs_issue_880.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0912_fix_pandas_and_double_nested_vectors_issue_885.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0916_read_from_s3.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0927_dont_assume_uproot_in_global_scope_in_TPython_Eval.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0930_expressions_in_pandas.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0940_feat_add_TLeafC_string_support.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0962_rntuple_update.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0965_inverted_axes_variances_hist_888.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_0976_path_object_split.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1000-write-TProfiles.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1043_const_std_string.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1058_dask_awkward_report.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1063_dask_distributed.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1070_pandas_dataframe_building_performance_fix.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1085_dask_write.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1102_any_locks_in_models_must_be_transient.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1114_fix_attempt_to_concatenate_numpy_with_awkward.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1120_check_decompression_executor_pass_for_dask.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1127_fix_allow_colon_in_key_names.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1128_TGraph_writing.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1146_split_ranges_for_large_files_over_http.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1154_classof_using_relative_path.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1159_rntuple_cluster_groups.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1160_std_string_in_TDirectory.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1180_read_free_floating_vector_issue_1179.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1181_support_for_stl_list.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1182_add_support_for_bitset.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1183_ttime_custom.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1186_dtype_might_raise_ValueError.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1189_dask_failing_on_duplicate_keys.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1191_rntuple_fixes.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1198_coalesce.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1207_fix_title_of_TBranch_with_counter.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1212_dont_let_update_mess_up_file_version.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1221_AwkwardForth_bug.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1223_more_rntuple_types.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1229_const_in_typename.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1254_test_threadpool_executor_for_dask.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1264_write_NumPy_array_of_strings.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1275_fix_TStreamerLoop_code_generation.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1282_add_known_forth_for_atlas.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1285_rntuple_multicluster_concatenation.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1318_dont_compare_big_endian_in_awkward.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1321_pandas_changed_api_again.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1347_rntuple_floats_suppressed_cols.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1356_basic_rntuple_writing.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1375_extend_ak_add_doc.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1406_improved_rntuple_methods.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1411_rntuple_physlite_ATLAS.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests/test_1412_rntuple_dask.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests-wasm/__init__.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests-wasm/test_1272_basic_functionality.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests-wasm/test_1365_awkwardforth_reading.py +0 -0
- {uproot-5.6.2 → uproot-5.6.3}/tests-wasm/utils.py +0 -0
|
@@ -38,7 +38,7 @@ jobs:
|
|
|
38
38
|
run: ls -lha dist/
|
|
39
39
|
|
|
40
40
|
- name: Generate artifact attestation for sdist and wheel
|
|
41
|
-
uses: actions/attest-build-provenance@
|
|
41
|
+
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0
|
|
42
42
|
with:
|
|
43
43
|
subject-path: dist/uproot-*
|
|
44
44
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
ci:
|
|
2
2
|
autoupdate_commit_msg: 'chore: update pre-commit hooks'
|
|
3
3
|
autofix_commit_msg: 'style: pre-commit fixes'
|
|
4
|
+
autoupdate_schedule: monthly
|
|
4
5
|
|
|
5
6
|
repos:
|
|
6
7
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
@@ -23,20 +24,20 @@ repos:
|
|
|
23
24
|
- id: black
|
|
24
25
|
|
|
25
26
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
26
|
-
rev: v0.
|
|
27
|
+
rev: v0.12.2
|
|
27
28
|
hooks:
|
|
28
29
|
- id: ruff
|
|
29
30
|
args: [--fix, --show-fixes]
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
- repo: https://github.com/asottile/pyupgrade
|
|
33
|
-
rev: v3.
|
|
34
|
+
rev: v3.20.0
|
|
34
35
|
hooks:
|
|
35
36
|
- id: pyupgrade
|
|
36
37
|
args: [--py38-plus]
|
|
37
38
|
|
|
38
39
|
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
|
|
39
|
-
rev: v2.
|
|
40
|
+
rev: v2.15.0
|
|
40
41
|
hooks:
|
|
41
42
|
- id: pretty-format-toml
|
|
42
43
|
args: [--autofix]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: uproot
|
|
3
|
-
Version: 5.6.
|
|
3
|
+
Version: 5.6.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
|
|
@@ -37,6 +37,10 @@ Requires-Dist: numpy
|
|
|
37
37
|
Requires-Dist: packaging
|
|
38
38
|
Requires-Dist: typing-extensions>=4.1.0; python_version < '3.11'
|
|
39
39
|
Requires-Dist: xxhash
|
|
40
|
+
Provides-Extra: gds-cu11
|
|
41
|
+
Requires-Dist: kvikio-cu11>=25.02.01; extra == 'gds-cu11'
|
|
42
|
+
Provides-Extra: gds-cu12
|
|
43
|
+
Requires-Dist: kvikio-cu12>=25.02.01; extra == 'gds-cu12'
|
|
40
44
|
Provides-Extra: http
|
|
41
45
|
Requires-Dist: aiohttp; extra == 'http'
|
|
42
46
|
Provides-Extra: s3
|
|
@@ -919,6 +919,52 @@ Like the caches, the default values for the last two are global ``uproot.decompr
|
|
|
919
919
|
|
|
920
920
|
If, however, you're working in an environment that puts limits on parallel processing (e.g. the CMS LPC or informal university computers), you may want to modify the defaults, either locally through a ``decompression_executor`` or ``interpretation_executor`` function parameter, or globally by replacing the global object.
|
|
921
921
|
|
|
922
|
+
Reading RNTuples
|
|
923
|
+
----------------
|
|
924
|
+
|
|
925
|
+
TTree has been the default format to store large datasets in ROOT files for decades. However, it has slowly become outdated and is not optimized for modern systems. This is where the RNTuple format comes in. It is a modern serialization format that is designed with modern systems in mind and is planned to replace TTree in the coming years. `Version 1.0.0.0 <https://cds.cern.ch/record/2923186>`__ is out and will be supported "forever".
|
|
926
|
+
|
|
927
|
+
RNTuples are deliberately simpler than TTrees by design. For the first time, there’s an official specification, making it much easier for third-party I/O tools like Uproot to support it. Uproot already supports reading the full RNTuple specification, meaning that you can read any RNTuple you find in the wild. It also already supports writing a large part of the specification, and intends to support as much as it makes sense for data analysis.
|
|
928
|
+
|
|
929
|
+
To ease the transition into RNTuples, we are designing the interface to closely match the existing TTree interface. Many of the functionality explained in the previous subsections works in the same way. However, there the terminology is slightly different (e.g. "branch" becomes "field") and arguments may vary slightly, accordingly.
|
|
930
|
+
|
|
931
|
+
Let's look at a few examples that illustrate how the RNTuple interface works.
|
|
932
|
+
|
|
933
|
+
When inspecting a file, will have a clear indication that it contains an RNTuple.
|
|
934
|
+
|
|
935
|
+
.. code-block:: python
|
|
936
|
+
|
|
937
|
+
>>> file = uproot.open("https://raw.githubusercontent.com/scikit-hep/scikit-hep-testdata/refs/heads/main/src/skhep_testdata/data/ntpl001_staff_rntuple_v1-0-0-0.root")
|
|
938
|
+
>>> file.classnames()
|
|
939
|
+
{'Staff;1': 'ROOT::RNTuple'}
|
|
940
|
+
|
|
941
|
+
Inspecting the contents of an RNTuple is done in the same way.
|
|
942
|
+
|
|
943
|
+
.. code-block:: python
|
|
944
|
+
|
|
945
|
+
>>> rntuple = uproot.open("https://raw.githubusercontent.com/scikit-hep/scikit-hep-testdata/refs/heads/main/src/skhep_testdata/data/ntpl001_staff_rntuple_v1-0-0-0.root:Staff")
|
|
946
|
+
>>> rntuple.keys()
|
|
947
|
+
['Category', 'Flag', 'Age', 'Service', 'Children', 'Grade', 'Step', 'Hrweek', 'Cost', 'Division', 'Nation']
|
|
948
|
+
>>> rntuple.typenames()
|
|
949
|
+
{'Category': 'std::int32_t', 'Flag': 'std::uint32_t', 'Age': 'std::int32_t', 'Service': 'std::int32_t', 'Children': 'std::int32_t', 'Grade': 'std::int32_t', 'Step': 'std::int32_t',
|
|
950
|
+
'Hrweek': 'std::int32_t', 'Cost': 'std::int32_t', 'Division': 'std::string', 'Nation': 'std::string'}
|
|
951
|
+
|
|
952
|
+
Reading the content of a single or multiple fields into an array also works very similarly.
|
|
953
|
+
|
|
954
|
+
.. code-block:: python
|
|
955
|
+
|
|
956
|
+
>>> rntuple = uproot.open("https://raw.githubusercontent.com/scikit-hep/scikit-hep-testdata/refs/heads/main/src/skhep_testdata/data/ntpl001_staff_rntuple_v1-0-0-0.root:Staff")
|
|
957
|
+
>>> rntuple["Age"].array()
|
|
958
|
+
<Array [58, 63, 56, 61, 52, 60, ..., 51, 25, 35, 28, 43] type='3354 * int32'>
|
|
959
|
+
>>> rntuple.arrays(["Age", "Cost", "Nation"])
|
|
960
|
+
<Array [{Age: 58, Cost: 11975, ...}, ...] type='3354 * {Age: int32, Cost: i...'>
|
|
961
|
+
>>> rntuple.arrays(filter_field=lambda f: f.field_id % 2 == 1)
|
|
962
|
+
<Array [{Flag: 15, Service: 28, ...}, ...] type='3354 * {Flag: uint32, Serv...'>
|
|
963
|
+
|
|
964
|
+
Note that for the last input we used the ``filter_field`` argument instead of ``filter_branch`` since the latter terminology doesn't apply to RNTuples.
|
|
965
|
+
|
|
966
|
+
There are still significant work required to achieve feature-parity with TTrees, but all the basic functionality is already implemented. We will continue to make the transition to RNTuples as seamless as possible.
|
|
967
|
+
|
|
922
968
|
Opening a file for writing
|
|
923
969
|
--------------------------
|
|
924
970
|
|
|
@@ -1251,3 +1297,17 @@ In addition, each TBranch of the TTree can have a different compression setting:
|
|
|
1251
1297
|
{'x': None, 'ny': None, 'y': ZLIB(4)}
|
|
1252
1298
|
|
|
1253
1299
|
Changes to the compression setting only affect TBaskets written after the change (with :ref:`uproot.writing.writable.WritableTree.extend`; see above).
|
|
1300
|
+
|
|
1301
|
+
Writing RNTuples
|
|
1302
|
+
----------------
|
|
1303
|
+
|
|
1304
|
+
Just like with reading, writing RNTuples is similar to writing TTree objects. Since RNTuples are much simpler, we aim to be able to write almost any RNTuple that you might want.
|
|
1305
|
+
|
|
1306
|
+
Here is an example of writing an RNTuple. Since TTree is still the default format for the near future, writing an RNTuple is a bit more verbose.
|
|
1307
|
+
|
|
1308
|
+
.. code-block:: python
|
|
1309
|
+
|
|
1310
|
+
>>> file = uproot.recreate("example.root")
|
|
1311
|
+
>>> data = {"my_int": [1,2], "my_vector": [[1,2], [3,4,5]]}
|
|
1312
|
+
>>> rntuple = file.mkrntuple("my_rntuple", data)
|
|
1313
|
+
>>> rntuple.extend(data) # Can be extended, just like TTrees
|
|
@@ -36,6 +36,10 @@ test-core = [
|
|
|
36
36
|
"pytest>=6",
|
|
37
37
|
"scikit-hep-testdata"
|
|
38
38
|
]
|
|
39
|
+
test-gpu = [
|
|
40
|
+
"kvikio-cu12>=25.02.01",
|
|
41
|
+
{include-group = "test-core"}
|
|
42
|
+
]
|
|
39
43
|
test-pyodide = [
|
|
40
44
|
"pytest-pyodide; python_version >='3.11'",
|
|
41
45
|
{include-group = "test-core"}
|
|
@@ -91,6 +95,12 @@ readme = "README.md"
|
|
|
91
95
|
requires-python = ">=3.9"
|
|
92
96
|
|
|
93
97
|
[project.optional-dependencies]
|
|
98
|
+
GDS_cu11 = [
|
|
99
|
+
"kvikio-cu11>=25.02.01"
|
|
100
|
+
]
|
|
101
|
+
GDS_cu12 = [
|
|
102
|
+
"kvikio-cu12>=25.02.01"
|
|
103
|
+
]
|
|
94
104
|
http = ["aiohttp"]
|
|
95
105
|
s3 = ["s3fs"]
|
|
96
106
|
xrootd = ["fsspec-xrootd>=0.5.0"]
|
|
@@ -131,6 +141,7 @@ xfail_strict = true
|
|
|
131
141
|
[tool.ruff]
|
|
132
142
|
exclude = [
|
|
133
143
|
"tests/*.py",
|
|
144
|
+
"tests-cuda/*.py",
|
|
134
145
|
"src/uproot/__init__.py",
|
|
135
146
|
"docs-sphinx/*.py"
|
|
136
147
|
]
|
|
@@ -148,7 +159,9 @@ ignore = [
|
|
|
148
159
|
"S307", # no eval allowed
|
|
149
160
|
"PLC1901", # empty string is falsey (but I don't want to rely on such weak typing)
|
|
150
161
|
"RUF012", # enforces type annotations on a codebase that lacks type annotations
|
|
151
|
-
"SIM103" # interferes with my if-elif-elif-else blocks
|
|
162
|
+
"SIM103", # interferes with my if-elif-elif-else blocks
|
|
163
|
+
"PLC0415", # imports outside top level
|
|
164
|
+
"PLW1641" # __eq__ without __hash__
|
|
152
165
|
]
|
|
153
166
|
select = [
|
|
154
167
|
"E",
|
|
@@ -1030,3 +1030,26 @@ class _Unset:
|
|
|
1030
1030
|
|
|
1031
1031
|
|
|
1032
1032
|
unset = _Unset()
|
|
1033
|
+
|
|
1034
|
+
|
|
1035
|
+
def get_array_library(arr):
|
|
1036
|
+
"""
|
|
1037
|
+
Determine if an array is a NumPy or CuPy ndarray, without importing CuPy.
|
|
1038
|
+
|
|
1039
|
+
Args:
|
|
1040
|
+
arr: The array to check.
|
|
1041
|
+
|
|
1042
|
+
Returns:
|
|
1043
|
+
String: 'numpy' if it's a NumPy array, 'cupy' if it's a CuPy array,
|
|
1044
|
+
'awkward' if it's an Awkward array, and 'unknown' otherwise.
|
|
1045
|
+
"""
|
|
1046
|
+
module_name = type(arr).__module__
|
|
1047
|
+
|
|
1048
|
+
if module_name.startswith("numpy"):
|
|
1049
|
+
return "numpy"
|
|
1050
|
+
elif module_name.startswith("cupy"):
|
|
1051
|
+
return "cupy"
|
|
1052
|
+
elif module_name.startswith("awkward"):
|
|
1053
|
+
return "awkward"
|
|
1054
|
+
else:
|
|
1055
|
+
return "unknown"
|