Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[skip-CI][cling] Refine build and usage guide #18161

Merged
merged 6 commits into from
Apr 3, 2025

Conversation

JeffBla
Copy link
Contributor

@JeffBla JeffBla commented Mar 26, 2025

This Pull request:

Clarify standalone and LLVM-integrated build methods, along with usage instructions. Improved installation steps to ensure successful execution.

Changes or fixes:

Build Cling As Standalone Project

Clarify the distinct build processes for standalone Cling and Cling integrated with LLVM, addressing common user errors related to missing dependencies and incorrect build commands. Standalone Cling's header file locations differ from LLVM-integrated builds, causing potential file not found.

$ ./bin/cling                   
input_line_2:1:10: fatal error: 'cling/Interpreter/RuntimeUniverse.h' file not found
#include <cling/Interpreter/RuntimeUniverse.h>
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

****************** CLING ******************
* Type C++ code and press enter to run it *
*             Type .q to exit             *
*******************************************
[cling]$ 

Build Cling Along with LLVM

issue#533, issue#536, issue#531 and issue#543 highlight a common error: building Cling with cmake --build . --target cling within an LLVM source tree fails because it only builds the Cling target, not the necessary Clang dependencies, clang.

Checklist:

  • tested changes locally
  • updated the docs (if necessary)

This PR fixes issue#533, fixes issue#536, fixes issue#531 and fixes issue#543

Fixes root-project/cling#546
Fixes root-project/cling#548
Fixes root-project/cling#527
Fixes root-project/cling#537

Clarified standalone and LLVM-integrated build methods, along with
usage instructions. Improved installation steps to ensure successful
execution.
@JeffBla JeffBla requested a review from dpiparo as a code owner March 26, 2025 16:43
@ferdymercury
Copy link
Contributor

Thanks a lot @JeffBla ! Would you also like to address root-project/cling#546 and root-project/cling#548 within this PR ?

JeffBla added 2 commits March 27, 2025 12:12
Updated the "See also" link in the README to point to the latest version
of Cling's web page on GitHack. The previous link referenced a specific
commit, which could become outdated. Now, it directly points to the
master branch for a more up-to-date reference.
Refined the README to provide clearer instructions for building Cling as
a standalone project. Updated CMake configuration details, clarified
dependency setup, and provided an example command to help users
correctly specify LLVM build paths. These improvements aim to make the
build process more comprehensible and reduce potential confusion.
@JeffBla
Copy link
Contributor Author

JeffBla commented Mar 27, 2025

Glad to hear I could help! The issue root-project/cling#548 has been resolved in this commit, which fixes a out-of-date link in the README. Additionally, the problem with the release notes that was mentioned has also been addressed by replacing the link with a relative reference to the file in the repo.

As for root-project/cling#546, I was considering whether to include the LLVM build instructions. After adding them, it seems to improve consistency and makes the README more comprehensive. The detailed description is in this commit.

Copy link
Contributor

@ferdymercury ferdymercury left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot

@ferdymercury ferdymercury requested a review from vgvassilev March 27, 2025 06:56
@devajithvs devajithvs self-assigned this Apr 3, 2025
@devajithvs devajithvs self-requested a review April 3, 2025 12:37
Copy link
Contributor

@devajithvs devajithvs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@devajithvs devajithvs merged commit add1a08 into root-project:master Apr 3, 2025
6 checks passed
edfink234 pushed a commit to edfink234/root that referenced this pull request Apr 7, 2025
[RFHS3] Remove mention of RapidYML backend, which is not supported.

Due to lack of time, only one RooFit backend can be supported. On CMake
configure, it, however, looked like RapidYML should be found. Here, the
corresponding YML messages and mentions throughout the documentation are
removed.
If the backend should be revived, this commit can be reverted.

Fix root-project#18128.

Introduce TObject::SavePrimitiveVector

Save array of doubles in C++ macro as std::vector<Double_t>.
Should replace in code use of SavePrimitiveArray -
while stack has limited memory and therefore plain arrays in macro can exhaust resources

Use SavePrimitiveVector for TH1/TProfile classes

Use SavePrimitiveVector in TGraph classes

Use SavePrimitiveVector for TCutG/TScatter/TEfficiency

Use SavePrimitiveVector for TF1/TF2

Use SavePrimitiveVector in TGraph2D

Use SavePrimitiveVector in TPolyLine/Mraker/3D classes

Remove SavePrimitiveArray

Was replaced by SavePrimitiveVector.
No longer used in the code, was not in released code

[ntuple] Move RNTupleView out of Experimental

No constraints to torch version in `requirements.txt`

Now that pytorch/pytorch#138333 is fixed,
commit 24fd0d8 can be reverted.

[tree] check for return values in WriteBaskets

Fixes https://its.cern.ch/jira/browse/ROOT-5137

[nfc] clangformat

[nfc] modernize

Co-authored-by: Philippe Canal <[email protected]>

[core] escape pluses in TRegexp::MakeWildcard

Fixes https://its.cern.ch/jira/browse/ROOT-7626

[Python] Format `rdf_filter_pyz.py` to pass ruff checks

[Python] Fix RDF Pythonization tests with `builtin_llvm=OFF`

On my machine, the RDF pythonization tests don't run when I build ROOT
with `builtin_llvm=OFF`. There is a crash unless I do `import numba` in
the beginning.

I guess it's not a priority to understand the underlying problem because
not many people build ROOT like this and the workaround is easy, but at
least the tests should be green.

We do the same "magically ordered imports" also in other Python tests
where ROOT doesn't work together with xgboost because of `std::regexp`
symbol clashes, unless you do the import in a certain order:

root-project#15183

[hist] fix red highlight box in log mode

Fixes root-project#12497

[ci] Disable TMVA on Alma8

[RF] Fix implementation of HS3 importers

Fix by @guitargeek.
The RooWSFactoryTool expression handler was not correctly matching branckets, leading to failures when importing
valid JSON filed with RooProdPdf objects.

[df] Avoid bad integer substitution in string formatting

The '%lu' token used in RLoopManager::RunDataSource does not correspond
to the correct integer representation of `std::uint64_t` on all
platforms. We use a stringstream instead to construct the warning
message.

Introduce TObject::SavePrimitiveDraw method

Store typical object->Draw() invocation.
Correctly handle "nodraw" arguments in options
Also replace special symbols if option string is not empty

Use SavePrimitiveDraw in graf2d/graf classes

Improve TGraphStruct::SavePrimitive

Use new method to store constructor and attributes
Simplify loops over nodes and edges
Use fixed variable name for TGraphEdge

Use SavePrimitiveDraw in hist classes

Use SavePrimitiveDraw in other classes

Fix TPave::SavePrimitive for web case

In case when canvas created in the batch mode,
it never rendered on server side.
And thus coordinates of TPave object remains not-initialized.
But there are macros where coordinates of TPaveStats are modified.
Such modification stored in NDC coordinates and should be taken into
account when TPave stored in C macro

Adjust stressGraphics_web.ref after TPave adjustments

Now positions of stats box modified in batch stored correctly

[RF] fix segfault in fillLegacyCorrMatrix

shown in https://root-forum.cern.ch/t/extracting-global-correlation-causes-a-seg-fault-with-sumw2error/55138

Implementing changes requested by @dpiparo

[webgeom] resize workaround for qt6

Rendering inside qt5/qt6 does not provide correct size,
therefore add resize handler in both cases

Do not use `source_dir` in widgets

This is location of JSROOT scripts, but normally
one should use `import {something } from 'jsroot'` statement
Now jsroot_importmap used in all widgets anyway

Reduce source_dir usage in eve7

[ntuple] Move RNTupleWriter out of Experimental

[hist] revert changes to v5 GetExpFormula fl_format

Since it breaks backward compatibility

Fixes root-project#18214

thanks guitargeek for finding out

[skip-ci] cleaner docu

Implementing changes requested by @dpiparo

Move qt5web classes to qt6webdisplay

They were used by both qt5 and qt6, now only for qt6

Completely delete qt5webdisplay sources

Delete/deprecate qt5web build option

Qt5 web engine no longer works with newest JSROOT and makes no sence to support. Everybody should be able to switch to comparable qt6 version

Remove kQt5 from RWebDsiaplayArgs

It was display kind for --web=qt5 argument

Adjust tutorials/visualisation/webgui/qtweb

Only support qt6 for building this tutorial

Remove qt5 workaround in THttpServer

For usage of qt5 webengine importmap has to be emulated
Now such emulation is no longer necessary

Introduce RWebDisplayArgs::GetQtEmbedQualifier

Keep old GetQt5EmbedQualifier to backward compatibility,
but prefer to use newer approach

Use GetQtEmbedQualifier in qtweb tutorial

Last place where qt5 was checked

Remove qt5 from documentation and comments

Update README/ReleaseNotes/v636/index.md

Co-authored-by: Jonas Rembser <[email protected]>

Use view framework with newest CEF

Latest CEF 134 shows URL/tabs with native widgets
Therefore switch to use of view framework starting from CEF 131

Update CEF readme with current CEF version

Let configure usage of CEF views framework via rootrc parameter

Use "WebGui.CefUseViews" parameter for this.
Default is platform-dependent

Mention CEF parameters in documentation

[jsroot] dev 1/04/2025

1. Introduce `settings.FilesTimeout` to configure global timeout for file reading operations
2. Introduce `settings.FilesRemap` to let provide fallback address for http server, used for `root.cern`
3. Remove support of qt5 webengine, only qt6web is supported
4.  Fix - correct axis range in `TScatter` drawing

More use of RWebWindowWSHandler::GetBoolEnv

Update docu

Fix warning caused by RPadLength arithmetic operators

Use `const` references as one should for `operator+` and `operator-`.

This fixes the following warning I get when building ROOT with tests:

```txt
In file included from /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/x86_64-unknown-linux-gnu/bits/c++allocator.h:33,
                 from /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/allocator.h:46,
                 from /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/memory:65,
                 from /nix/store/qf61vad876jgyd4vnn147cz2jyvy23vl-gtest-1.16.0-dev/include/gtest/gtest.h:55,
                 from /home/rembserj/code/root/root_src/graf2d/gpadv7/test/coords.cxx:12:
In member function ‘void std::__new_allocator<_Tp>::deallocate(_Tp*, size_type) [with _Tp = double]’,
    inlined from ‘static void std::allocator_traits<std::allocator<_Tp1> >::deallocate(allocator_type&, pointer, size_type) [with _Tp = double]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/alloc_traits.h:544:23,
    inlined from ‘void std::_Vector_base<_Tp, _Alloc>::_M_deallocate(pointer, std::size_t) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:389:19,
    inlined from ‘void std::_Vector_base<_Tp, _Alloc>::_M_deallocate(pointer, std::size_t) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:385:7,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::~_Vector_base() [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:368:15,
    inlined from ‘std::vector<_Tp, _Alloc>::~vector() [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:738:7,
    inlined from ‘ROOT::Experimental::RPadLength::~RPadLength()’ at /home/rembserj/code/root/root_src/graf2d/gpadv7/inc/ROOT/RPadLength.hxx:31:7,
    inlined from ‘virtual void PadCoord_AddSubtract_Test::TestBody()’ at /home/rembserj/code/root/root_src/graf2d/gpadv7/test/coords.cxx:36:26:
/nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/new_allocator.h:172:33: warning: ‘void operator delete(void*, std::size_t)’ called on pointer ‘<unknown>’ with nonzero offset [1, 9223372036854775800] [-Wfree-nonheap-object]
  172 |         _GLIBCXX_OPERATOR_DELETE(_GLIBCXX_SIZED_DEALLOC(__p, __n));
      |                                 ^
In member function ‘_Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = double]’,
    inlined from ‘static _Tp* std::allocator_traits<std::allocator<_Tp1> >::allocate(allocator_type&, size_type) [with _Tp = double]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/alloc_traits.h:509:28,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::pointer std::_Vector_base<_Tp, _Alloc>::_M_allocate(std::size_t) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:380:33,
    inlined from ‘void std::_Vector_base<_Tp, _Alloc>::_M_create_storage(std::size_t) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:398:44,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::_Vector_base(std::size_t, const allocator_type&) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:334:26,
    inlined from ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:603:61,
    inlined from ‘ROOT::Experimental::RPadLength::RPadLength(const ROOT::Experimental::RPadLength&)’ at /home/rembserj/code/root/root_src/graf2d/gpadv7/inc/ROOT/RPadLength.hxx:31:7,
    inlined from ‘virtual void PadCoord_AddSubtract_Test::TestBody()’ at /home/rembserj/code/root/root_src/graf2d/gpadv7/test/coords.cxx:36:26:
/nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/new_allocator.h:151:55: note: returned from ‘void* operator new(std::size_t)’
  151 |         return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
      |                                                       ^
```

Update WebDisplay.md file

Modify RGeomViewer::SaveAsMacro

Do not use RDirectory::Heap().
Just create shared_ptr variable outside of function scope
Use "\n" instead of std::endl

[Python] Correctly manage NumPy dependencey in pythonization tests

The dependency on Python libraries like NumPy needs to be declared in
the CMakeLists.txt, such that the test gets disabled when the library is
not available.

In some cases, the dependency on NumPy could be avoided by using the
builtin "array" library.

[Python] Apply suggestions by ruff

[CPyCppyy] Don't use deprecated `PyErr_Fetch` and `PyErr_Restore` API

Also, in some places the same logic could be implemented with just
`PyErr_Clear()`.

[Python] Update `sync-upstream` script for cppyyy syncups

SearchInstalledSoftware.cmake: correctly report name of option to disable

[skip-ci] cpu backend specify it's single threaded

See root-project#17344

[DF] Retrieve RDatasetSpec for RDF built from JSON

[CPyCppyy] Drop `__array__` from std::vector pythonizations

The addition of the __array__ utility to std::vector Python proxies causes a
bug where the resulting array is a single dimension, causing loss of data when
converting to numpy arrays, for >1dim vectors. The recursive nature of this
function, passes each subarray (pydata) to the next call and only the final
buffer is cast to a lowlevel view and resized (in VectorData), resulting in
only the first 1D array to be returned. See root-project#17729

Since this C++ pythonization was added with the upgrade in 6.32, and is only
defined and used recursively, the safe option is to disable this function and
no longer add it. It is temporarily removed to prevent errors due to -Wunused-function

Revert "[ci] Disable TMVA on Alma8"

This reverts commit ebab348.

Protect PyMva tutorials for a failurte in importing tensorflow

Disable also batchgenerator tests for Python version less than 3.9 since tensorflow is not working for these lower python versions

Fix build issue on macOS 15.4 / XCode 16.3

`less` is defined in functional according to the C++ standard.

cling: Add ROOT lock to LookupHelper::findType

This fixes root-project#18236

As seen in cms-sw/cmssw#47763 (comment)
there are cases where the ROOT global lock is taken too late:

In the stack trace below the lock is requested on frame root-project#7 where as
it should really be (also) requested on frame root-project#12 as soon as the
transaction is being generated.

```
 root-project#6  0x00001501421f55ea in ROOT::TVirtualRWMutex::Lock() () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#7  0x0000150133a680ca in TCling::HandleNewTransaction(cling::Transaction const&) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#8  0x0000150133a85778 in TCling::UpdateListsOnCommitted(cling::Transaction const&) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#9  0x0000150133b60018 in cling::MultiplexInterpreterCallbacks::TransactionCommitted(cling::Transaction const&) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#10 0x0000150133bec069 in cling::IncrementalParser::commitTransaction(llvm::PointerIntPair<cling::Transaction*, 2u, cling::IncrementalParser::EParseResult, llvm::PointerLikeTypeTraits<cling::Transaction*>, llvm::PointerIntPairInfo<cling::Transaction*, 2u, llvm::PointerLikeTypeTraits<cling::Transaction*> > >&, bool) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#11 0x0000150133b5663a in cling::Interpreter::PushTransactionRAII::~PushTransactionRAII() () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#12 0x0000150133b6b883 in cling::LookupHelper::findType(llvm::StringRef, cling::LookupHelper::DiagSetting) const () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#13 0x00001501339b6b06 in ROOT::TMetaUtils::TClingLookupHelper::GetPartiallyDesugaredNameWithScopeHandling(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, bool) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#14 0x00001501422f1458 in ResolveTypedefProcessType(char const*, unsigned int, unsigned int, bool, unsigned int, unsigned int, unsigned int, bool&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) [clone .constprop.0] () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#15 0x00001501422f1a0f in ResolveTypedefImpl(char const*, unsigned int, unsigned int&, bool&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#16 0x00001501422f2ef3 in TClassEdit::ResolveTypedef[abi:cxx11](char const*, bool) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#17 0x00001501422f5c20 in TClassEdit::TSplitType::ShortType(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#18 0x00001501422f6888 in TClassEdit::GetNormalizedName(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string_view<char, std::char_traits<char> >) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#19 0x000015014232e795 in ROOT::Internal::GetDemangledTypeName[abi:cxx11](std::type_info const&) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so

```

[ntuple] Add tests and a warning for projected Real32(Quant|Trunc)

Setting a projected field to quantized or truncated works and read proper
data but it doesn't do what one would probably expect.
The projected field can correctly read values from any fields that can
be read as float, but the value range and bits of precision set on the
projected field are silently ignored (since they only make sense for
physical columns that are actually stored on disk).
To reduce confusion, we now emit a warning if a user tries to call
AddProjectedField with a quantized or truncated field.

Remove current RHist prototype

For a number of reasons, it is not what we want for the future
generation of histogram classes in ROOT:

 * It is templated on the DIMENSIONS, the PRECISION, and optional
   bin statistics. This makes it hard(er) to use for IO.
 * The RHist interface has a pointer to an abstract, polymorphic
   RHistImplBase.
 * The concrete RHistImpl is templated on the processed axis types.
 * The polymorphic pointer makes the current prototype incompatible
   with RNTuple (unless using streamer fields).
 * It also takes minutes to compile for higher dimensions because
   concrete RHistImpl have to be generated for all combinations of
   axis types, which grows exponentially.

The plan is to remove the current prototype now, in time for the
next ROOT release v6.36, and then add a new implementation after.

[hist] reset kAxisRange bit when fully unzooming (root-project#18226)

When unzoom with mouse wheel, properly reset kAxisRange bit.
Adjust documentation

[graf] Patch libAsimage: fp.h is now part of math.h

Thanks to @ktf (ALICE) for this fix.

[runtime-cxxmodules] Adapt the darwin modulemaps to sdk 15.4. (root-project#18231)

* [runtime-cxxmodules] Adapt the darwin modulemaps to sdk 15.4.

* [runtime-cxmodules] Use separate modulemap for macOS15.2

* [runtime-cxxmodules] Add overlay entry for MacOSX15.2

---------

Co-authored-by: Devajith Valaparambil Sreeramaswamy <[email protected]>

[skip-CI][cling] Refine build and usage guide (root-project#18161)

* [cling] Refine build and usage guide

Clarified standalone and LLVM-integrated build methods, along with
usage instructions. Improved installation steps to ensure successful
execution.

* [cling] Fix broken link to web page in README

Updated the "See also" link in the README to point to the latest version
of Cling's web page on GitHack. The previous link referenced a specific
commit, which could become outdated. Now, it directly points to the
master branch for a more up-to-date reference.

* [cling] Improve Cling standalone build instruction

Refined the README to provide clearer instructions for building Cling as
a standalone project. Updated CMake configuration details, clarified
dependency setup, and provided an example command to help users
correctly specify LLVM build paths. These improvements aim to make the
build process more comprehensible and reduce potential confusion.

* [skip-ci] update link to binaries

* [skip-ci] fix jupyter link

Fixes root-project/cling#527

* [skip-ci] also mention jupyter notebook option

see root-project/cling#537

---------

Co-authored-by: ferdymercury <[email protected]>

[ntuple] Move RNTupleReader out of Experimental

[rfile] Remove current RFile prototype

It will replaced by a new prototype after 6.36.
The new prototype will go in a different direction by removing the
shared ownership between RFile and the application and it won't have
RFile inherit from RDirectory.

[hist] Add function to get sum of weights including under/overflows

Fix root-project#8951

Co-authored-by: Stephan Hageboeck <[email protected]>

[cling][JIT] Inject compiler-rt complex division symbols on macOS

Clang may emit calls to compiler-rt symbols such as __divdc3 for
std::complex<T> division. These may not be resolved during JIT'ing
on macOS when using Cling.

This patch forward-declares the relevant symbols and explicitly
injects them into the JIT symbol table.

Similar to: root-project@4b6075b

[rbrowser] do not allow to select text in items list

[rbrowser] implement items drag and drop

Drop handler behaves very similar to drawing with append flag,
but does not try to create new widget

[rbrowser] let switch between double-click and plain click handler

Double-click is ROOT-like style of drawing while single-click is openui5.
In last case one also can use keyboard navigation for drawing

[rbrowser] Change columns context menu

Old functionality deprecated, one need to have something else.
Assign to each column headmenu instead

[rbrowser] let resize columns via context menu

Add 'Resize colums' to context menu

[jsroot] dev 4/04/2025

1. Set 'user-select: none' style in drawings to exclude text selection, using `settings.UserSelect` value
2. Better handling of remap of file URL

[cmake] Update the version of VDT to 0.4.6

to address the new behaviour of the compiler shipped with XCode 16.3

Properly format the preprocessor if clause

following pnggroup/libpng@893b811

[interop] Upgrade to latest, add tag file for diff workflow

[ntuple] Mark some CreateEntry const

RNTupleReader::CreateEntry() needs to call GetModel(), which is not
const.

[ntuple] Move RFieldToken out of REntry

It will also be used by RRawPtrWriteEntry.

[ntuple] Refactor RNTupleFillContext::Fill*

... to avoid code duplication when adding RRawPtrWriteEntry.

[ntuple] Implement Detail::RRawPtrWriteEntry

It is a container of const raw pointers that can be used to write
constant data products in frameworks.

Closes root-project#17900

[ntuple] Demonstrate RRawPtrWriteEntry in ntpl014_framework.C

[ntuple] Amend documentation on model ID check

[tmva][sofie] memory optimization in convK and imcol for ConvTranspose (root-project#18168)

* feat: add convK and imcol to memory optimization for ConvTranspose

* fix: follow root naming convention for convK and imcol

[tmva][sofie]  Optimize LayerNormalization operator

Do square operation do not use std::pow with base 2 since it is slower than simple multiplication This speeds up evaluation on ATLAS GNN tracking model by 40%

Also avoids allocating a small shape vector in LayerNorm and improve indentation of sigmoid operator

[TMVA] Disable relevant PyMVA tests if BLAS is not found

This commit makes sure that the tests of PyMVA that require BLAS
(indirectly via SOFIE) are not run when BLAS is not available.

Following up on this PR, which did the same change already for the SOFIE
tests:

root-project#18065

[CMake] Veto tutorials depending on BLAS if it was not found

Closes root-project#16720.

Fix a warning when compiling quartz on macos 15.4 with clt 16.3

[tree] Avoid reading from nullptr in TTreeReader.

When a TTreeReaderValue is not initialised correctly, it generates
an error message. It could, however, inadvertently read a nullptr in doing
that.

Fix memory leak identified with valgrind in HistFactory histogram reading

Apply clang-format

[core] improve TDirectory::DecodeNameCycle

- avoid scanning the string twice
- allow `name` to be null if one only wants the cycle
- return the actual name length so the caller can know whether the name
  was truncated or not
- improve function documentation

[cppyy] Disable warnings for invalid function casts

Some C++ functions defined in CPyCppyy are passed to CPython API, e.g.
to build Python methods that use some C++ functionality. This is done by
creating a instance of a PyMethodDef struct
(https://docs.python.org/3/c-api/structures.html#c.PyMethodDef). One
data member of this struct is of type PyCFunction
(https://docs.python.org/3/c-api/structures.html#c.PyCFunction), a
typedef of a function with signature
```
PyObject *PyCFunction(PyObject *self,
                      PyObject *args);
```
In many cases, the C++ functions that are used as the data member of the
PyMethodDef are not directly implemented as PyCFunction, thus need to be
cast. This cast is often invalid, since many of such functions do not
really respect the function signature prescribed by the API. This
pattern is actually encouraged for CPython extension implementations by
the official CPython docs
(https://docs.python.org/3/extending/extending.html#keyword-parameters-for-extension-functions).
As such, the compiler warnings that are generated becausee of the
invalid function casts, for example
```
root/bindings/pyroot/cppyy/CPyCppyy/src/Pythonize.cxx:1949:50: warning: cast from 'PyObject *(*)(PyObject *)' (aka '_object *(*)(_object *)') to 'PyCFunction' (aka '_object *(*)(_object *, _object *)') converts to incompatible function type [-Wcast-function-type-mismatch]
 1949 |         Utility::AddToClass(pyclass, "__repr__", (PyCFunction)ComplexRepr, METH_NOARGS);
```
cannot be avoided and have to be suppressed. This is also done upstream,
see wlav/CPyCppyy@33d4a6e

Implementing requested changes by @vepadulano

[tree] Reset missing proxies list when changing trees.

When changing trees while the missing value feature of RDF was in use,
the proxies for branches could not get recreated, since TTreeReader
refuses the registration when fProxiesSet == true.
This lead to the TTreeReaderValue being in a broken state.

[tree] Refactor vector of missing proxies to a set.

When running over multiple trees, the list of missing proxies in
TTreeReader will grow indefinitely. Here, it is refactored to a set,
which also shortens the code that looks up the missing proxies.

[tree] Include branch name in an error message.

Pointed out by Philippe in root-project#18259.

[tree] Make test of error messages a bit more rigid.

In debugging a UB in TTreeReaderValueBase, it would have been easier to
have an explicit note of the expected error messages of that test.
Instead of globally suppressing all errors, the three expected message
were added here.

[tree] Don't dereference a nullptr in TTreeReaderValue test.

On mac15 beta, this generated a SIGTRAP, while it was OK on all other
platforms, because the reference was never used.
But retrieving the pointer instead of dereferencing, the problem
seems to go away.

[CMake] Restore Python tutorial dependencies.

Due to a missing quote, dependencies on Mac15 beta seemed to have gotten
deleted.

[ntuple] apply I/O rules also to persistent members

[ntuple] test I/O rule of persistent member

[json] check if map class has dictionary

When stream directly std::map object in macro like:
```
   std::map<int,string> m;
   m[1] = "number 1";
   m[2] = "number 2";
   auto json = TBufferJSON::ToJSON(&m);
```
Real dictionary class for std::map is required.
It checked automatically when map is member of user class,
but was not checked when map object intself streamed

[json] check map dictionary also when read object

Same when write object, reading is not possible for std::map<>
object without dictionary

[json] mention GenerateDictionary for map classes in documentation

While std::map uses in TBufferJSON in documentaiton,
mention gInterpreter->GenerateDictionary

[CMake] Improve handling of RPATH options

Some improvements to the handling of RPATH options, which are necessary
on my system because I need to add a custom RPATH to make my CUDA
package from nix packages findable.

  1. Don't set CMake variables to `FALSE` if the default is `FALSE`
     already. This makes it impossible to change these variables from
     the CMake user configuration, unnecessarily taking flexibility out
     of the build system.

  2. If `rpath=ON`, ROOT adds the relative path from the binary
     directory to the lib directory to the RPATH. But it doesn't append
     it, overriding any `CMAKE_INSTALL_RPATH` that the user might set in
     the CMake configuration. This commit suggests to append instead.

  3. If `rpath=OFF`, ROOT sets `CMAKE_SKIP_INSTALL_RPATH` to `TRUE`
     without any apparent reason, again, preventing the user from
     defining the RPATH via `CMAKE_INSTALL_RPATH`. This commit suggests
     to remove that line.

[cppyy] Do not use non-C++ GCC warning

Although `bad-function-cast` is present for both Clang and GCC, on the
latter it is only used for C and Objective-C code. Using
`no-cast-function-type` seems to already disable the
PyCFunction-cast-related warnings seen with AppleClang.

[ntuple] update RNTupleModel's documentation

[math] Ignore vla-cxx-extension in case veccore is active

Reintroduce rcanvas_mt.cxx demo with TH1 classes

Old macro was used RH1D classes
But RCanvas multithreading can be tested without it

[rbrowser] reintroduce provider for RCanvas class

RBrowser has to know about RCanvas class and
which library to load to get access to that class

[jsroot] dev 4/04/2025 with RPad fix

Fix redraw of RPad primitives
Adjust RAxis drawing

Adding suggestions from @ferdymercury
edfink234 pushed a commit to edfink234/root that referenced this pull request Apr 11, 2025
[RFHS3] Remove mention of RapidYML backend, which is not supported.

Due to lack of time, only one RooFit backend can be supported. On CMake
configure, it, however, looked like RapidYML should be found. Here, the
corresponding YML messages and mentions throughout the documentation are
removed.
If the backend should be revived, this commit can be reverted.

Fix root-project#18128.

Introduce TObject::SavePrimitiveVector

Save array of doubles in C++ macro as std::vector<Double_t>.
Should replace in code use of SavePrimitiveArray -
while stack has limited memory and therefore plain arrays in macro can exhaust resources

Use SavePrimitiveVector for TH1/TProfile classes

Use SavePrimitiveVector in TGraph classes

Use SavePrimitiveVector for TCutG/TScatter/TEfficiency

Use SavePrimitiveVector for TF1/TF2

Use SavePrimitiveVector in TGraph2D

Use SavePrimitiveVector in TPolyLine/Mraker/3D classes

Remove SavePrimitiveArray

Was replaced by SavePrimitiveVector.
No longer used in the code, was not in released code

[ntuple] Move RNTupleView out of Experimental

No constraints to torch version in `requirements.txt`

Now that pytorch/pytorch#138333 is fixed,
commit 24fd0d8 can be reverted.

[tree] check for return values in WriteBaskets

Fixes https://its.cern.ch/jira/browse/ROOT-5137

[nfc] clangformat

[nfc] modernize

Co-authored-by: Philippe Canal <[email protected]>

[core] escape pluses in TRegexp::MakeWildcard

Fixes https://its.cern.ch/jira/browse/ROOT-7626

[Python] Format `rdf_filter_pyz.py` to pass ruff checks

[Python] Fix RDF Pythonization tests with `builtin_llvm=OFF`

On my machine, the RDF pythonization tests don't run when I build ROOT
with `builtin_llvm=OFF`. There is a crash unless I do `import numba` in
the beginning.

I guess it's not a priority to understand the underlying problem because
not many people build ROOT like this and the workaround is easy, but at
least the tests should be green.

We do the same "magically ordered imports" also in other Python tests
where ROOT doesn't work together with xgboost because of `std::regexp`
symbol clashes, unless you do the import in a certain order:

root-project#15183

[hist] fix red highlight box in log mode

Fixes root-project#12497

[ci] Disable TMVA on Alma8

[RF] Fix implementation of HS3 importers

Fix by @guitargeek.
The RooWSFactoryTool expression handler was not correctly matching branckets, leading to failures when importing
valid JSON filed with RooProdPdf objects.

[df] Avoid bad integer substitution in string formatting

The '%lu' token used in RLoopManager::RunDataSource does not correspond
to the correct integer representation of `std::uint64_t` on all
platforms. We use a stringstream instead to construct the warning
message.

Introduce TObject::SavePrimitiveDraw method

Store typical object->Draw() invocation.
Correctly handle "nodraw" arguments in options
Also replace special symbols if option string is not empty

Use SavePrimitiveDraw in graf2d/graf classes

Improve TGraphStruct::SavePrimitive

Use new method to store constructor and attributes
Simplify loops over nodes and edges
Use fixed variable name for TGraphEdge

Use SavePrimitiveDraw in hist classes

Use SavePrimitiveDraw in other classes

Fix TPave::SavePrimitive for web case

In case when canvas created in the batch mode,
it never rendered on server side.
And thus coordinates of TPave object remains not-initialized.
But there are macros where coordinates of TPaveStats are modified.
Such modification stored in NDC coordinates and should be taken into
account when TPave stored in C macro

Adjust stressGraphics_web.ref after TPave adjustments

Now positions of stats box modified in batch stored correctly

[RF] fix segfault in fillLegacyCorrMatrix

shown in https://root-forum.cern.ch/t/extracting-global-correlation-causes-a-seg-fault-with-sumw2error/55138

Implementing changes requested by @dpiparo

[webgeom] resize workaround for qt6

Rendering inside qt5/qt6 does not provide correct size,
therefore add resize handler in both cases

Do not use `source_dir` in widgets

This is location of JSROOT scripts, but normally
one should use `import {something } from 'jsroot'` statement
Now jsroot_importmap used in all widgets anyway

Reduce source_dir usage in eve7

[ntuple] Move RNTupleWriter out of Experimental

[hist] revert changes to v5 GetExpFormula fl_format

Since it breaks backward compatibility

Fixes root-project#18214

thanks guitargeek for finding out

[skip-ci] cleaner docu

Implementing changes requested by @dpiparo

Move qt5web classes to qt6webdisplay

They were used by both qt5 and qt6, now only for qt6

Completely delete qt5webdisplay sources

Delete/deprecate qt5web build option

Qt5 web engine no longer works with newest JSROOT and makes no sence to support. Everybody should be able to switch to comparable qt6 version

Remove kQt5 from RWebDsiaplayArgs

It was display kind for --web=qt5 argument

Adjust tutorials/visualisation/webgui/qtweb

Only support qt6 for building this tutorial

Remove qt5 workaround in THttpServer

For usage of qt5 webengine importmap has to be emulated
Now such emulation is no longer necessary

Introduce RWebDisplayArgs::GetQtEmbedQualifier

Keep old GetQt5EmbedQualifier to backward compatibility,
but prefer to use newer approach

Use GetQtEmbedQualifier in qtweb tutorial

Last place where qt5 was checked

Remove qt5 from documentation and comments

Update README/ReleaseNotes/v636/index.md

Co-authored-by: Jonas Rembser <[email protected]>

Use view framework with newest CEF

Latest CEF 134 shows URL/tabs with native widgets
Therefore switch to use of view framework starting from CEF 131

Update CEF readme with current CEF version

Let configure usage of CEF views framework via rootrc parameter

Use "WebGui.CefUseViews" parameter for this.
Default is platform-dependent

Mention CEF parameters in documentation

[jsroot] dev 1/04/2025

1. Introduce `settings.FilesTimeout` to configure global timeout for file reading operations
2. Introduce `settings.FilesRemap` to let provide fallback address for http server, used for `root.cern`
3. Remove support of qt5 webengine, only qt6web is supported
4.  Fix - correct axis range in `TScatter` drawing

More use of RWebWindowWSHandler::GetBoolEnv

Update docu

Fix warning caused by RPadLength arithmetic operators

Use `const` references as one should for `operator+` and `operator-`.

This fixes the following warning I get when building ROOT with tests:

```txt
In file included from /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/x86_64-unknown-linux-gnu/bits/c++allocator.h:33,
                 from /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/allocator.h:46,
                 from /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/memory:65,
                 from /nix/store/qf61vad876jgyd4vnn147cz2jyvy23vl-gtest-1.16.0-dev/include/gtest/gtest.h:55,
                 from /home/rembserj/code/root/root_src/graf2d/gpadv7/test/coords.cxx:12:
In member function ‘void std::__new_allocator<_Tp>::deallocate(_Tp*, size_type) [with _Tp = double]’,
    inlined from ‘static void std::allocator_traits<std::allocator<_Tp1> >::deallocate(allocator_type&, pointer, size_type) [with _Tp = double]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/alloc_traits.h:544:23,
    inlined from ‘void std::_Vector_base<_Tp, _Alloc>::_M_deallocate(pointer, std::size_t) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:389:19,
    inlined from ‘void std::_Vector_base<_Tp, _Alloc>::_M_deallocate(pointer, std::size_t) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:385:7,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::~_Vector_base() [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:368:15,
    inlined from ‘std::vector<_Tp, _Alloc>::~vector() [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:738:7,
    inlined from ‘ROOT::Experimental::RPadLength::~RPadLength()’ at /home/rembserj/code/root/root_src/graf2d/gpadv7/inc/ROOT/RPadLength.hxx:31:7,
    inlined from ‘virtual void PadCoord_AddSubtract_Test::TestBody()’ at /home/rembserj/code/root/root_src/graf2d/gpadv7/test/coords.cxx:36:26:
/nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/new_allocator.h:172:33: warning: ‘void operator delete(void*, std::size_t)’ called on pointer ‘<unknown>’ with nonzero offset [1, 9223372036854775800] [-Wfree-nonheap-object]
  172 |         _GLIBCXX_OPERATOR_DELETE(_GLIBCXX_SIZED_DEALLOC(__p, __n));
      |                                 ^
In member function ‘_Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = double]’,
    inlined from ‘static _Tp* std::allocator_traits<std::allocator<_Tp1> >::allocate(allocator_type&, size_type) [with _Tp = double]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/alloc_traits.h:509:28,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::pointer std::_Vector_base<_Tp, _Alloc>::_M_allocate(std::size_t) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:380:33,
    inlined from ‘void std::_Vector_base<_Tp, _Alloc>::_M_create_storage(std::size_t) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:398:44,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::_Vector_base(std::size_t, const allocator_type&) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:334:26,
    inlined from ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = double; _Alloc = std::allocator<double>]’ at /nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/stl_vector.h:603:61,
    inlined from ‘ROOT::Experimental::RPadLength::RPadLength(const ROOT::Experimental::RPadLength&)’ at /home/rembserj/code/root/root_src/graf2d/gpadv7/inc/ROOT/RPadLength.hxx:31:7,
    inlined from ‘virtual void PadCoord_AddSubtract_Test::TestBody()’ at /home/rembserj/code/root/root_src/graf2d/gpadv7/test/coords.cxx:36:26:
/nix/store/aw0qxjd1phf16qhlwpdb4x87yymfv9rp-gcc-14-20241116/include/c++/14-20241116/bits/new_allocator.h:151:55: note: returned from ‘void* operator new(std::size_t)’
  151 |         return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
      |                                                       ^
```

Update WebDisplay.md file

Modify RGeomViewer::SaveAsMacro

Do not use RDirectory::Heap().
Just create shared_ptr variable outside of function scope
Use "\n" instead of std::endl

[Python] Correctly manage NumPy dependencey in pythonization tests

The dependency on Python libraries like NumPy needs to be declared in
the CMakeLists.txt, such that the test gets disabled when the library is
not available.

In some cases, the dependency on NumPy could be avoided by using the
builtin "array" library.

[Python] Apply suggestions by ruff

[CPyCppyy] Don't use deprecated `PyErr_Fetch` and `PyErr_Restore` API

Also, in some places the same logic could be implemented with just
`PyErr_Clear()`.

[Python] Update `sync-upstream` script for cppyyy syncups

SearchInstalledSoftware.cmake: correctly report name of option to disable

[skip-ci] cpu backend specify it's single threaded

See root-project#17344

[DF] Retrieve RDatasetSpec for RDF built from JSON

[CPyCppyy] Drop `__array__` from std::vector pythonizations

The addition of the __array__ utility to std::vector Python proxies causes a
bug where the resulting array is a single dimension, causing loss of data when
converting to numpy arrays, for >1dim vectors. The recursive nature of this
function, passes each subarray (pydata) to the next call and only the final
buffer is cast to a lowlevel view and resized (in VectorData), resulting in
only the first 1D array to be returned. See root-project#17729

Since this C++ pythonization was added with the upgrade in 6.32, and is only
defined and used recursively, the safe option is to disable this function and
no longer add it. It is temporarily removed to prevent errors due to -Wunused-function

Revert "[ci] Disable TMVA on Alma8"

This reverts commit ebab348.

Protect PyMva tutorials for a failurte in importing tensorflow

Disable also batchgenerator tests for Python version less than 3.9 since tensorflow is not working for these lower python versions

Fix build issue on macOS 15.4 / XCode 16.3

`less` is defined in functional according to the C++ standard.

cling: Add ROOT lock to LookupHelper::findType

This fixes root-project#18236

As seen in cms-sw/cmssw#47763 (comment)
there are cases where the ROOT global lock is taken too late:

In the stack trace below the lock is requested on frame root-project#7 where as
it should really be (also) requested on frame root-project#12 as soon as the
transaction is being generated.

```
 root-project#6  0x00001501421f55ea in ROOT::TVirtualRWMutex::Lock() () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#7  0x0000150133a680ca in TCling::HandleNewTransaction(cling::Transaction const&) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#8  0x0000150133a85778 in TCling::UpdateListsOnCommitted(cling::Transaction const&) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#9  0x0000150133b60018 in cling::MultiplexInterpreterCallbacks::TransactionCommitted(cling::Transaction const&) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#10 0x0000150133bec069 in cling::IncrementalParser::commitTransaction(llvm::PointerIntPair<cling::Transaction*, 2u, cling::IncrementalParser::EParseResult, llvm::PointerLikeTypeTraits<cling::Transaction*>, llvm::PointerIntPairInfo<cling::Transaction*, 2u, llvm::PointerLikeTypeTraits<cling::Transaction*> > >&, bool) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#11 0x0000150133b5663a in cling::Interpreter::PushTransactionRAII::~PushTransactionRAII() () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#12 0x0000150133b6b883 in cling::LookupHelper::findType(llvm::StringRef, cling::LookupHelper::DiagSetting) const () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#13 0x00001501339b6b06 in ROOT::TMetaUtils::TClingLookupHelper::GetPartiallyDesugaredNameWithScopeHandling(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, bool) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCling.so
 root-project#14 0x00001501422f1458 in ResolveTypedefProcessType(char const*, unsigned int, unsigned int, bool, unsigned int, unsigned int, unsigned int, bool&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) [clone .constprop.0] () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#15 0x00001501422f1a0f in ResolveTypedefImpl(char const*, unsigned int, unsigned int&, bool&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#16 0x00001501422f2ef3 in TClassEdit::ResolveTypedef[abi:cxx11](char const*, bool) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#17 0x00001501422f5c20 in TClassEdit::TSplitType::ShortType(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#18 0x00001501422f6888 in TClassEdit::GetNormalizedName(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string_view<char, std::char_traits<char> >) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so
 root-project#19 0x000015014232e795 in ROOT::Internal::GetDemangledTypeName[abi:cxx11](std::type_info const&) () from /cvmfs/cms-ib.cern.ch/sw/x86_64/nweek-02883/el8_amd64_gcc12/cms/cmssw-patch/CMSSW_15_1_RNTUPLE_X_2025-03-31-2300/external/el8_amd64_gcc12/lib/libCore.so

```

[ntuple] Add tests and a warning for projected Real32(Quant|Trunc)

Setting a projected field to quantized or truncated works and read proper
data but it doesn't do what one would probably expect.
The projected field can correctly read values from any fields that can
be read as float, but the value range and bits of precision set on the
projected field are silently ignored (since they only make sense for
physical columns that are actually stored on disk).
To reduce confusion, we now emit a warning if a user tries to call
AddProjectedField with a quantized or truncated field.

Remove current RHist prototype

For a number of reasons, it is not what we want for the future
generation of histogram classes in ROOT:

 * It is templated on the DIMENSIONS, the PRECISION, and optional
   bin statistics. This makes it hard(er) to use for IO.
 * The RHist interface has a pointer to an abstract, polymorphic
   RHistImplBase.
 * The concrete RHistImpl is templated on the processed axis types.
 * The polymorphic pointer makes the current prototype incompatible
   with RNTuple (unless using streamer fields).
 * It also takes minutes to compile for higher dimensions because
   concrete RHistImpl have to be generated for all combinations of
   axis types, which grows exponentially.

The plan is to remove the current prototype now, in time for the
next ROOT release v6.36, and then add a new implementation after.

[hist] reset kAxisRange bit when fully unzooming (root-project#18226)

When unzoom with mouse wheel, properly reset kAxisRange bit.
Adjust documentation

[graf] Patch libAsimage: fp.h is now part of math.h

Thanks to @ktf (ALICE) for this fix.

[runtime-cxxmodules] Adapt the darwin modulemaps to sdk 15.4. (root-project#18231)

* [runtime-cxxmodules] Adapt the darwin modulemaps to sdk 15.4.

* [runtime-cxmodules] Use separate modulemap for macOS15.2

* [runtime-cxxmodules] Add overlay entry for MacOSX15.2

---------

Co-authored-by: Devajith Valaparambil Sreeramaswamy <[email protected]>

[skip-CI][cling] Refine build and usage guide (root-project#18161)

* [cling] Refine build and usage guide

Clarified standalone and LLVM-integrated build methods, along with
usage instructions. Improved installation steps to ensure successful
execution.

* [cling] Fix broken link to web page in README

Updated the "See also" link in the README to point to the latest version
of Cling's web page on GitHack. The previous link referenced a specific
commit, which could become outdated. Now, it directly points to the
master branch for a more up-to-date reference.

* [cling] Improve Cling standalone build instruction

Refined the README to provide clearer instructions for building Cling as
a standalone project. Updated CMake configuration details, clarified
dependency setup, and provided an example command to help users
correctly specify LLVM build paths. These improvements aim to make the
build process more comprehensible and reduce potential confusion.

* [skip-ci] update link to binaries

* [skip-ci] fix jupyter link

Fixes root-project/cling#527

* [skip-ci] also mention jupyter notebook option

see root-project/cling#537

---------

Co-authored-by: ferdymercury <[email protected]>

[ntuple] Move RNTupleReader out of Experimental

[rfile] Remove current RFile prototype

It will replaced by a new prototype after 6.36.
The new prototype will go in a different direction by removing the
shared ownership between RFile and the application and it won't have
RFile inherit from RDirectory.

[hist] Add function to get sum of weights including under/overflows

Fix root-project#8951

Co-authored-by: Stephan Hageboeck <[email protected]>

[cling][JIT] Inject compiler-rt complex division symbols on macOS

Clang may emit calls to compiler-rt symbols such as __divdc3 for
std::complex<T> division. These may not be resolved during JIT'ing
on macOS when using Cling.

This patch forward-declares the relevant symbols and explicitly
injects them into the JIT symbol table.

Similar to: root-project@4b6075b

[rbrowser] do not allow to select text in items list

[rbrowser] implement items drag and drop

Drop handler behaves very similar to drawing with append flag,
but does not try to create new widget

[rbrowser] let switch between double-click and plain click handler

Double-click is ROOT-like style of drawing while single-click is openui5.
In last case one also can use keyboard navigation for drawing

[rbrowser] Change columns context menu

Old functionality deprecated, one need to have something else.
Assign to each column headmenu instead

[rbrowser] let resize columns via context menu

Add 'Resize colums' to context menu

[jsroot] dev 4/04/2025

1. Set 'user-select: none' style in drawings to exclude text selection, using `settings.UserSelect` value
2. Better handling of remap of file URL

[cmake] Update the version of VDT to 0.4.6

to address the new behaviour of the compiler shipped with XCode 16.3

Properly format the preprocessor if clause

following pnggroup/libpng@893b811

[interop] Upgrade to latest, add tag file for diff workflow

[ntuple] Mark some CreateEntry const

RNTupleReader::CreateEntry() needs to call GetModel(), which is not
const.

[ntuple] Move RFieldToken out of REntry

It will also be used by RRawPtrWriteEntry.

[ntuple] Refactor RNTupleFillContext::Fill*

... to avoid code duplication when adding RRawPtrWriteEntry.

[ntuple] Implement Detail::RRawPtrWriteEntry

It is a container of const raw pointers that can be used to write
constant data products in frameworks.

Closes root-project#17900

[ntuple] Demonstrate RRawPtrWriteEntry in ntpl014_framework.C

[ntuple] Amend documentation on model ID check

[tmva][sofie] memory optimization in convK and imcol for ConvTranspose (root-project#18168)

* feat: add convK and imcol to memory optimization for ConvTranspose

* fix: follow root naming convention for convK and imcol

[tmva][sofie]  Optimize LayerNormalization operator

Do square operation do not use std::pow with base 2 since it is slower than simple multiplication This speeds up evaluation on ATLAS GNN tracking model by 40%

Also avoids allocating a small shape vector in LayerNorm and improve indentation of sigmoid operator

[TMVA] Disable relevant PyMVA tests if BLAS is not found

This commit makes sure that the tests of PyMVA that require BLAS
(indirectly via SOFIE) are not run when BLAS is not available.

Following up on this PR, which did the same change already for the SOFIE
tests:

root-project#18065

[CMake] Veto tutorials depending on BLAS if it was not found

Closes root-project#16720.

Fix a warning when compiling quartz on macos 15.4 with clt 16.3

[tree] Avoid reading from nullptr in TTreeReader.

When a TTreeReaderValue is not initialised correctly, it generates
an error message. It could, however, inadvertently read a nullptr in doing
that.

Fix memory leak identified with valgrind in HistFactory histogram reading

Apply clang-format

[core] improve TDirectory::DecodeNameCycle

- avoid scanning the string twice
- allow `name` to be null if one only wants the cycle
- return the actual name length so the caller can know whether the name
  was truncated or not
- improve function documentation

[cppyy] Disable warnings for invalid function casts

Some C++ functions defined in CPyCppyy are passed to CPython API, e.g.
to build Python methods that use some C++ functionality. This is done by
creating a instance of a PyMethodDef struct
(https://docs.python.org/3/c-api/structures.html#c.PyMethodDef). One
data member of this struct is of type PyCFunction
(https://docs.python.org/3/c-api/structures.html#c.PyCFunction), a
typedef of a function with signature
```
PyObject *PyCFunction(PyObject *self,
                      PyObject *args);
```
In many cases, the C++ functions that are used as the data member of the
PyMethodDef are not directly implemented as PyCFunction, thus need to be
cast. This cast is often invalid, since many of such functions do not
really respect the function signature prescribed by the API. This
pattern is actually encouraged for CPython extension implementations by
the official CPython docs
(https://docs.python.org/3/extending/extending.html#keyword-parameters-for-extension-functions).
As such, the compiler warnings that are generated becausee of the
invalid function casts, for example
```
root/bindings/pyroot/cppyy/CPyCppyy/src/Pythonize.cxx:1949:50: warning: cast from 'PyObject *(*)(PyObject *)' (aka '_object *(*)(_object *)') to 'PyCFunction' (aka '_object *(*)(_object *, _object *)') converts to incompatible function type [-Wcast-function-type-mismatch]
 1949 |         Utility::AddToClass(pyclass, "__repr__", (PyCFunction)ComplexRepr, METH_NOARGS);
```
cannot be avoided and have to be suppressed. This is also done upstream,
see wlav/CPyCppyy@33d4a6e

Implementing requested changes by @vepadulano

[tree] Reset missing proxies list when changing trees.

When changing trees while the missing value feature of RDF was in use,
the proxies for branches could not get recreated, since TTreeReader
refuses the registration when fProxiesSet == true.
This lead to the TTreeReaderValue being in a broken state.

[tree] Refactor vector of missing proxies to a set.

When running over multiple trees, the list of missing proxies in
TTreeReader will grow indefinitely. Here, it is refactored to a set,
which also shortens the code that looks up the missing proxies.

[tree] Include branch name in an error message.

Pointed out by Philippe in root-project#18259.

[tree] Make test of error messages a bit more rigid.

In debugging a UB in TTreeReaderValueBase, it would have been easier to
have an explicit note of the expected error messages of that test.
Instead of globally suppressing all errors, the three expected message
were added here.

[tree] Don't dereference a nullptr in TTreeReaderValue test.

On mac15 beta, this generated a SIGTRAP, while it was OK on all other
platforms, because the reference was never used.
But retrieving the pointer instead of dereferencing, the problem
seems to go away.

[CMake] Restore Python tutorial dependencies.

Due to a missing quote, dependencies on Mac15 beta seemed to have gotten
deleted.

[ntuple] apply I/O rules also to persistent members

[ntuple] test I/O rule of persistent member

[json] check if map class has dictionary

When stream directly std::map object in macro like:
```
   std::map<int,string> m;
   m[1] = "number 1";
   m[2] = "number 2";
   auto json = TBufferJSON::ToJSON(&m);
```
Real dictionary class for std::map is required.
It checked automatically when map is member of user class,
but was not checked when map object intself streamed

[json] check map dictionary also when read object

Same when write object, reading is not possible for std::map<>
object without dictionary

[json] mention GenerateDictionary for map classes in documentation

While std::map uses in TBufferJSON in documentaiton,
mention gInterpreter->GenerateDictionary

[CMake] Improve handling of RPATH options

Some improvements to the handling of RPATH options, which are necessary
on my system because I need to add a custom RPATH to make my CUDA
package from nix packages findable.

  1. Don't set CMake variables to `FALSE` if the default is `FALSE`
     already. This makes it impossible to change these variables from
     the CMake user configuration, unnecessarily taking flexibility out
     of the build system.

  2. If `rpath=ON`, ROOT adds the relative path from the binary
     directory to the lib directory to the RPATH. But it doesn't append
     it, overriding any `CMAKE_INSTALL_RPATH` that the user might set in
     the CMake configuration. This commit suggests to append instead.

  3. If `rpath=OFF`, ROOT sets `CMAKE_SKIP_INSTALL_RPATH` to `TRUE`
     without any apparent reason, again, preventing the user from
     defining the RPATH via `CMAKE_INSTALL_RPATH`. This commit suggests
     to remove that line.

[cppyy] Do not use non-C++ GCC warning

Although `bad-function-cast` is present for both Clang and GCC, on the
latter it is only used for C and Objective-C code. Using
`no-cast-function-type` seems to already disable the
PyCFunction-cast-related warnings seen with AppleClang.

[ntuple] update RNTupleModel's documentation

[math] Ignore vla-cxx-extension in case veccore is active

Reintroduce rcanvas_mt.cxx demo with TH1 classes

Old macro was used RH1D classes
But RCanvas multithreading can be tested without it

[rbrowser] reintroduce provider for RCanvas class

RBrowser has to know about RCanvas class and
which library to load to get access to that class

[jsroot] dev 4/04/2025 with RPad fix

Fix redraw of RPad primitives
Adjust RAxis drawing

Adding suggestions from @ferdymercury
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants