root icon indicating copy to clipboard operation
root copied to clipboard

[cling] Fix failing python enum tests in cppyy

Open devajithvs opened this issue 1 year ago • 4 comments

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-cpp
  • roottest-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 #

devajithvs avatar Jul 08 '24 11:07 devajithvs

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.

github-actions[bot] avatar Jul 08 '24 13:07 github-actions[bot]

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

guitargeek avatar Jul 08 '24 20:07 guitargeek

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

devajithvs avatar Jul 09 '24 11:07 devajithvs

@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...

hahnjo avatar Aug 24 '24 12:08 hahnjo

I believe this can be closed.

hahnjo avatar Sep 11 '24 06:09 hahnjo