[cling] Fix failing python enum tests in cppyy
This Pull request:
Just a draft PR to test for performance issues/failing tests.
This fixes the failing python enum tests like:
roottest-python-cpp-cpproottest-python-cmdLineUtils-ROOT_8197
A memory leak was fixed in LLVM commit 142f270, which caused our tests to fail as they relied on the previous behavior.
If there are no serious performance issues/failure, we can clean up and try to upstream this patch to cppyy.
Currently a temporary fix https://github.com/devajithvs/root/commit/de5d1413e07170e396ac51d982c0844e4f548f4b is used to fix the failing tests for LLVM18
Changes or fixes:
Checklist:
- [ ] tested changes locally
- [ ] updated the docs (if necessary)
This PR fixes #
Test Results
13 files 13 suites 2d 14h 54m 44s :stopwatch: 2 651 tests 2 651 :white_check_mark: 0 :zzz: 0 :x: 32 645 runs 32 645 :white_check_mark: 0 :zzz: 0 :x:
Results for commit 9a896ba8.
:recycle: This comment has been updated with latest results.
Thanks a lot for opening the PR, @devajithvs!
I have measured the runtime of all PyROOT tests without and with this PR, and there is no significant difference (see results at the end of this post).
Given that the CI is also green, I would suggest you polish up the implementation a little bit and open a PR upstream: https://github.com/wlav/CPyCppyy
Test name Before After
pyunittests-pyroot-root-module 0.57 s 0.57 s
pyunittests-pyroot-pyz-decorator 0.47 s 0.48 s
pyunittests-pyroot-pyz-pretty-printing 0.81 s 0.81 s
test-import-numpy 0.10 s 0.10 s
pyunittests-pyroot-pyz-array-interface 1.06 s 1.05 s
pyunittests-pyroot-pyz-stl-vector 0.79 s 0.77 s
pyunittests-pyroot-pyz-stl-set 0.81 s 0.82 s
pyunittests-pyroot-pyz-tobject-contains 0.49 s 0.49 s
pyunittests-pyroot-pyz-tobject-comparisonops 0.50 s 0.49 s
pyunittests-pyroot-pyz-tclass-dynamiccast 0.49 s 0.48 s
pyunittests-pyroot-pyz-tcontext-contextmanager 0.53 s 0.52 s
pyunittests-pyroot-pyz-tdirectory-attrsyntax 0.52 s 0.52 s
pyunittests-pyroot-pyz-tdirectoryfile-attrsyntax-get 0.54 s 0.52 s
pyunittests-pyroot-pyz-tfile-attrsyntax-get-writeobject-open 0.63 s 0.62 s
pyunittests-pyroot-pyz-tfile-constructor 0.49 s 0.49 s
pyunittests-pyroot-pyz-tfile-context-manager 0.58 s 0.59 s
pyunittests-pyroot-pyz-ttree-branch-attr 0.80 s 0.80 s
pyunittests-pyroot-pyz-ttree-iterable 0.75 s 0.75 s
pyunittests-pyroot-pyz-ttree-setbranchaddress 0.86 s 0.85 s
pyunittests-pyroot-pyz-ttree-branch 0.79 s 0.78 s
pyunittests-pyroot-pyz-th1-operators 0.56 s 0.56 s
pyunittests-pyroot-pyz-th2 0.50 s 0.50 s
pyunittests-pyroot-pyz-tgraph-getters 0.68 s 0.67 s
pyunittests-pyroot-pyz-tcollection-len 0.50 s 0.50 s
pyunittests-pyroot-pyz-tcollection-listmethods 0.50 s 0.50 s
pyunittests-pyroot-pyz-tcollection-operators 0.50 s 0.50 s
pyunittests-pyroot-pyz-tcollection-iterable 0.49 s 0.50 s
pyunittests-pyroot-pyz-tseqcollection-itemaccess 0.51 s 0.51 s
pyunittests-pyroot-pyz-tseqcollection-listmethods 0.52 s 0.52 s
pyunittests-pyroot-pyz-titer-iterator 0.50 s 0.50 s
pyunittests-pyroot-pyz-tarray-len 0.47 s 0.47 s
pyunittests-pyroot-pyz-tarray-getitem 0.50 s 0.47 s
pyunittests-pyroot-pyz-tvectort-len 0.49 s 0.47 s
pyunittests-pyroot-pyz-tvectort-getitem 0.48 s 0.48 s
pyunittests-pyroot-pyz-tvector3-len 0.48 s 0.47 s
pyunittests-pyroot-pyz-tvector3-getitem 0.48 s 0.48 s
pyunittests-pyroot-pyz-tstring-len 0.49 s 0.48 s
pyunittests-pyroot-pyz-tstring-str-repr 0.49 s 0.47 s
pyunittests-pyroot-pyz-tstring-comparisonops 0.49 s 0.48 s
pyunittests-pyroot-conv-tstring 0.49 s 0.49 s
pyunittests-pyroot-pyz-tobjstring-len 0.48 s 0.47 s
pyunittests-pyroot-pyz-tobjstring-str-repr 0.47 s 0.47 s
pyunittests-pyroot-pyz-tobjstring-comparisonops 0.48 s 0.48 s
pyunittests-pyroot-pyz-rvec 0.69 s 0.69 s
pyunittests-pyroot-pyz-rvec-asrvec 0.74 s 0.73 s
pyunittests-pyroot-pyz-rdataframe-makenumpy 8.57 s 8.31 s
pyunittests-pyroot-pyz-rdataframe-asnumpy 14.65 s 14.48 s
pyunittests-pyroot-pyz-rdataframe-histo-profile 6.13 s 6.08 s
pyunittests-pyroot-rdfdescription 0.67 s 0.66 s
pyunittests-pyroot-pyz-tf-pycallables 1.02 s 1.01 s
pyunittests-pyroot-roofit-rooabscollection 0.76 s 0.80 s
pyunittests-pyroot-roofit-rooarglist 0.59 s 0.60 s
pyunittests-pyroot-roofit-roodatahist-ploton 0.79 s 0.80 s
pyunittests-pyroot-roofit-roodataset 0.72 s 0.72 s
pyunittests-pyroot-roofit-rooabspdf-fitto 0.79 s 0.79 s
pyunittests-pyroot-roofit-rooabsreal-ploton 0.81 s 0.82 s
pyunittests-pyroot-roofit-roolinkedlist 0.55 s 0.55 s
pyunittests-pyroot-roofit-roojsonfactorywstool 0.91 s 0.91 s
pyunittests-pyroot-roofit-rooglobalfunc 0.85 s 0.83 s
pyunittests-pyroot-roofit-roosimultaneous 0.77 s 0.76 s
pyunittests-pyroot-roofit-rooworkspace 0.88 s 0.87 s
pyunittests-pyroot-roofit-roodataset-numpy 1.33 s 1.32 s
pyunittests-pyroot-roofit-roodatahist-numpy 1.00 s 1.02 s
pyunittests-pyroot-string-view 0.80 s 0.80 s
test-import-numba 0.26 s 0.27 s
pyunittests-pyroot-numbadeclare 8.70 s 8.74 s
pyunittests-pyroot-rdf-filter-pyz 21.51 s 21.09 s
pyunittests-pyroot-rdf-define-pyz 17.02 s 17.11 s
pyunittests-pyroot-tcomplex 0.49 s 0.49 s
pyunittests-pyroot-memory 1.59 s 1.59 s
roottest-python-JupyROOT-cppcompleter_doctest 0.90 s 0.90 s
roottest-python-JupyROOT-handlers_doctest 3.68 s 3.69 s
roottest-python-JupyROOT-utils_doctest 0.66 s 0.67 s
roottest-python-JupyROOT-importROOT_notebook 5.16 s 2.74 s
roottest-python-JupyROOT-simpleCppMagic_notebook 6.18 s 6.25 s
roottest-python-JupyROOT-thread_local_notebook 6.62 s 6.75 s
roottest-python-JupyROOT-ROOT_kernel_notebook 10.68 s 10.75 s
roottest-python-JupyROOT-tpython_notebook 3.69 s 3.78 s
roottest-python-JupyROOT-Cpp_IMT_Canvas_notebook 3.55 s 3.56 s
roottest-python-basic-basic 8.20 s 8.17 s
roottest-python-basic-datatype 4.77 s 4.80 s
roottest-python-basic-operator 3.93 s 3.94 s
roottest-python-basic-overload 4.31 s 4.31 s
roottest-python-cling-api 0.52 s 0.53 s
roottest-python-cling-class 0.70 s 0.69 s
roottest-python-cling-cling 0.55 s 0.57 s
roottest-python-cmdLineUtils-SimplePattern1 0.51 s 0.51 s
roottest-python-cmdLineUtils-SimplePattern2 0.61 s 0.63 s
roottest-python-cmdLineUtils-SimplePattern3 0.60 s 0.61 s
roottest-python-cmdLineUtils-SimpleRootls1 0.61 s 0.64 s
roottest-python-cmdLineUtils-SimpleRootls2 0.63 s 0.64 s
roottest-python-cmdLineUtils-SimpleRootls3 0.63 s 0.63 s
roottest-python-cmdLineUtils-SimpleRootls4 0.63 s 0.63 s
roottest-python-cmdLineUtils-LongRootls1 0.63 s 0.64 s
roottest-python-cmdLineUtils-LongRootls2 0.63 s 0.65 s
roottest-python-cmdLineUtils-LongRootls3 0.66 s 0.65 s
roottest-python-cmdLineUtils-LongRootls4 0.65 s 0.65 s
roottest-python-cmdLineUtils-WebRootls1 0.63 s 0.64 s
roottest-python-cmdLineUtils-WebRootls2 0.66 s 0.67 s
roottest-python-cmdLineUtils-TreeRootls1 0.71 s 0.72 s
roottest-python-cmdLineUtils-NameCyclesRootls 0.69 s 0.71 s
roottest-python-cmdLineUtils-RecursiveRootls 0.64 s 0.65 s
roottest-python-cmdLineUtils-SimpleRootrm1PrepareInput 0.67 s 0.69 s
roottest-python-cmdLineUtils-SimpleRootrm1 0.61 s 0.62 s
roottest-python-cmdLineUtils-SimpleRootrm1CheckOutput 0.60 s 0.60 s
roottest-python-cmdLineUtils-SimpleRootrm1Clean 0.57 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootrm2PrepareInput 0.67 s 0.66 s
roottest-python-cmdLineUtils-SimpleRootrm2 0.60 s 0.60 s
roottest-python-cmdLineUtils-SimpleRootrm2CheckOutput 0.61 s 0.61 s
roottest-python-cmdLineUtils-SimpleRootrm2Clean 0.57 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootrm3PrepareInput 0.68 s 0.68 s
roottest-python-cmdLineUtils-SimpleRootrm3 0.63 s 0.62 s
roottest-python-cmdLineUtils-SimpleRootrm3CheckOutput 0.63 s 0.63 s
roottest-python-cmdLineUtils-SimpleRootrm3Clean 0.57 s 0.58 s
roottest-python-cmdLineUtils-SimpleRootmkdir1PrepareInput 0.68 s 0.68 s
roottest-python-cmdLineUtils-SimpleRootmkdir1 0.57 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootmkdir1CheckOutput 0.61 s 0.61 s
roottest-python-cmdLineUtils-SimpleRootmkdir1Clean 0.57 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootmkdir2PrepareInput 0.68 s 0.67 s
roottest-python-cmdLineUtils-SimpleRootmkdir2 0.57 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootmkdir2CheckOutput 0.61 s 0.60 s
roottest-python-cmdLineUtils-SimpleRootmkdir2Clean 0.57 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootmkdir3PrepareInput 0.67 s 0.68 s
roottest-python-cmdLineUtils-SimpleRootmkdir3 0.59 s 0.58 s
roottest-python-cmdLineUtils-SimpleRootmkdir3CheckOutput 0.63 s 0.62 s
roottest-python-cmdLineUtils-SimpleRootmkdir3Clean 0.57 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootcp1PrepareInput 0.67 s 0.67 s
roottest-python-cmdLineUtils-SimpleRootcp1 0.66 s 0.65 s
roottest-python-cmdLineUtils-SimpleRootcp1CheckOutput 0.61 s 0.61 s
roottest-python-cmdLineUtils-SimpleRootcp1Clean 0.58 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootcp2PrepareInput 0.68 s 0.67 s
roottest-python-cmdLineUtils-SimpleRootcp2 0.66 s 0.66 s
roottest-python-cmdLineUtils-SimpleRootcp2CheckOutput 0.61 s 0.60 s
roottest-python-cmdLineUtils-SimpleRootcp2Clean 0.58 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootcp3PrepareInput 0.67 s 0.67 s
roottest-python-cmdLineUtils-SimpleRootcp3 0.66 s 0.65 s
roottest-python-cmdLineUtils-SimpleRootcp3CheckOutput 0.61 s 0.63 s
roottest-python-cmdLineUtils-SimpleRootcp3Clean 0.58 s 0.60 s
roottest-python-cmdLineUtils-SimpleRootcp4PrepareInput 0.67 s 0.68 s
roottest-python-cmdLineUtils-SimpleRootcp4 0.66 s 0.65 s
roottest-python-cmdLineUtils-SimpleRootcp4CheckOutput 0.62 s 0.62 s
roottest-python-cmdLineUtils-SimpleRootcp4Clean 0.57 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootcp5PrepareInput 0.68 s 0.67 s
roottest-python-cmdLineUtils-SimpleRootcp5 0.68 s 0.66 s
roottest-python-cmdLineUtils-SimpleRootcp5CheckOutput 0.64 s 0.63 s
roottest-python-cmdLineUtils-SimpleRootcp5Clean 0.57 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootmv1PrepareInput 0.69 s 0.68 s
roottest-python-cmdLineUtils-SimpleRootmv1 0.66 s 0.65 s
roottest-python-cmdLineUtils-SimpleRootmv1CheckOutput 0.63 s 0.61 s
roottest-python-cmdLineUtils-SimpleRootmv1Clean 0.59 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootmv2PrepareInput 0.69 s 0.68 s
roottest-python-cmdLineUtils-SimpleRootmv2 0.71 s 0.71 s
roottest-python-cmdLineUtils-SimpleRootmv2CheckOutput 0.62 s 0.61 s
roottest-python-cmdLineUtils-SimpleRootmv2Clean 0.58 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootmv3PrepareInput 0.68 s 0.67 s
roottest-python-cmdLineUtils-SimpleRootmv3 0.66 s 0.66 s
roottest-python-cmdLineUtils-SimpleRootmv3CheckOutput 0.61 s 0.61 s
roottest-python-cmdLineUtils-SimpleRootmv3Clean 0.57 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootmv4PrepareInput 0.67 s 0.67 s
roottest-python-cmdLineUtils-SimpleRootmv4 0.65 s 0.65 s
roottest-python-cmdLineUtils-SimpleRootmv4CheckOutput 0.63 s 0.63 s
roottest-python-cmdLineUtils-SimpleRootmv4Clean 0.58 s 0.57 s
roottest-python-cmdLineUtils-SimpleRootmv5PrepareInput 0.68 s 0.68 s
roottest-python-cmdLineUtils-SimpleRootmv5 0.74 s 0.71 s
roottest-python-cmdLineUtils-SimpleRootmv5CheckOutput 0.64 s 0.62 s
roottest-python-cmdLineUtils-SimpleRootmv5Clean 0.57 s 0.57 s
roottest-python-cmdLineUtils-NameCyclesRootmvPrepareInput 0.25 s 0.25 s
roottest-python-cmdLineUtils-NameCyclesRootmv 0.68 s 0.68 s
roottest-python-cmdLineUtils-NameCyclesRootmvCheckOutput 0.61 s 0.61 s
roottest-python-cmdLineUtils-ROOT_8197 0.82 s 0.81 s
roottest-python-cpp-cpp 10.18 s 10.00 s
roottest-python-cpp-advanced 9.79 s 9.79 s
roottest-python-cpp-cpp11 3.83 s 3.87 s
roottest-python-function-function 9.99 s 9.93 s
roottest-python-memory-memory 3.80 s 3.76 s
roottest-python-numba-numba 3.41 s 3.39 s
roottest-python-pickle-write 4.60 s 4.57 s
roottest-python-pickle-read 1.01 s 1.01 s
roottest-python-pythonizations-pythonizations 4.19 s 4.17 s
roottest-python-pythonizations-smartptr 3.97 s 4.00 s
roottest-python-regression-regression 33.84 s 30.31 s
roottest-python-regression-root_6023 3.75 s 3.74 s
roottest-python-stl-stl 6.61 s 6.63 s
roottest-python-tpython-execscript 0.49 s 0.50 s
roottest-python-ttree-ttree 5.06 s 5.09 s
I have measured the runtime of all PyROOT tests without and with this PR, and there is no significant difference (see results at the end of this post).
Thank you very much @guitargeek.
Given that the CI is also green, I would suggest you polish up the implementation a little bit and open a PR upstream: https://github.com/wlav/CPyCppyy
I will open a new PR with the changes I just made. Thanks
@guitargeek any updates on this? This is one of the remaining blockers for the LLVM 18 upgrade, and I hope we can avoid it getting on the critical path. For the moment, we have a temporary workaround by reintroducing the memory leak (https://github.com/root-project/root/pull/15696/commits/ca5492df57a70e3e69abf3c355f2d66767c88fd9) and we can go with that, but this change seems like the better fix...
I believe this can be closed.