Compare commits

..

No commits in common. "rawhide" and "epel10.0" have entirely different histories.

23 changed files with 797 additions and 1050 deletions

View file

@ -1,49 +1,33 @@
From f7bfa429deb9dbae9058998888bbcaa84af0ca08 Mon Sep 17 00:00:00 2001
From 81286803e7791377ae75f40e9c65f8928ad8fe31 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 2 Dec 2025 05:33:31 +0100
Date: Fri, 30 May 2025 05:31:08 +0200
Subject: [PATCH] Adjust test/stressGraphics.ref
Test 37: TScatter with TPolyMarker test............................ OK
PDF output......................................... 37 FAILED
Result = 22236
Reference = 22560
Error = 324 (was 300)
JPG output................................................ OK
PNG output................................................ OK
C file result............................................. OK
---
test/stressGraphics.ref | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
test/stressGraphics.ref | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/stressGraphics.ref b/test/stressGraphics.ref
index 2498ec6d755..4520a5ab113 100644
index a894796951..a8746db4df 100644
--- a/test/stressGraphics.ref
+++ b/test/stressGraphics.ref
@@ -10,11 +10,11 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN
9 9253 100 14377 150 19851 2400 12199 900 9283 100
10 8863 70 13645 100 24343 1100 23278 1700 8894 70
11 12971 100 14750 50 34063 2000 32033 1200 13070 150
- 12 7674 100 13533 50 83557 3000 38505 4000 7720 150
- 13 5600 400 13242 300 16881 400 15063 800 5638 400
+ 12 7674 100 13533 100 83557 3000 38505 4000 7720 150
+ 13 5600 400 13242 400 16881 400 15063 800 5638 400
14 14190539 4000000 12926 100 23076 9500 25987 3000 14190704 4000000
15 15690 5000 17179 200 23076 9500 14232 1500 10437 5000
- 16 28072 400 23520 200 44462 11000 30062 5000 38007 400
+ 16 28072 400 23520 250 44462 11000 30062 5000 38007 400
17 20444 400 21520 150 27511 11000 16867 600 20721 400
18 15894 100 19305 200 27187 10300 15925 350 15925 100
19 22521 300 42926 250 43868 17000 19232 11000 22729 300
@@ -44,7 +44,7 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN
43 207729 750 87126 750 76094 38000 54717 11000 210497 800
44 401670 6500 156361 2000 62719 34100 45592 14000 410114 6500
45 566142 5000 225206 2000 65828 31800 53934 6500 573396 5000
- 46 3738751 35000 1292739 12000 60580 9900 133547 3500 3783013 35000
+ 46 3738751 35000 1292739 13000 60580 9900 133547 3500 3783013 35000
47 1466028 9000 853193 50000 38425 13500 91242 18100 1463263 7500
48 38312 200 56877 750 36524 11800 119641 8000 38121 200
49 19556 1000 31967 1000 36859 10000 37602 8000 19900 3000
@@ -53,7 +53,7 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN
52 270825 10000 115500 1000 45496 11000 34685 5000 272950 10000
53 15025 3000 29289 500 42525 11300 33336 3900 14787 4000
54 254604 5000 383258 7000 55666 30400 46534 6500 259594 7000
- 55 4846 150 14075 150 33239 600 25303 500 4877 150
+ 55 4846 150 14075 200 33239 600 25303 500 4877 150
56 1435879 150000 12837 100 25830 100 365000 15000 1085792 250000
57 5884 500 16577 200 40706 14000 30026 4000 5884 500
58 5723 700 15720 200 32236 11000 16916 3200 5670 800
@@ -35,7 +35,7 @@ Test# PS1Ref# PS1Err# PDFRef# PDFErr# JPGRef# JPGErr# PNGRef# PN
34 3304592 100 712308 3000 62688 19000 123056 7000 3396789 1000
35 3954 100 14654 300 17378 7800 9629 2000 3794 200
36 9073 100 22150 300 27691 7800 20712 2000 9157 200
- 37 17800 200 22560 300 28599 7800 42618 2000 17600 200
+ 37 17800 200 22560 400 28599 7800 42618 2000 17600 200
38 12926 200 24304 300 24021 6800 12637 2000 12584 200
39 29664 200 19354 300 23024 6500 12821 2000 31317 200
40 46000 400 23482 300 38792 8500 30458 4000 46000 400
--
2.52.0
2.49.0

View file

@ -0,0 +1,41 @@
From c3a9293a08fecb288cdd09b399c9c2808923e617 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Wed, 27 Aug 2025 17:09:12 +0200
Subject: [PATCH] Avoid OverflowError from RDF pythonization
Fixes test failures on 32 bit intel ix86.
The following tests FAILED:
62 - pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-rdataframe-makenumpy (Failed) python python_runtime_deps
1257 - tutorial-analysis-dataframe-df032_RDFFromNumpy-py (Failed) python_runtime_deps tutorial
1259/1470 Test #1257: tutorial-analysis-dataframe-df032_RDFFromNumpy-py .............................................***Failed 1.14 sec
Traceback (most recent call last):
File ".../tutorials/analysis/dataframe/df032_RDFFromNumpy.py", line 23, in <module>
df = ROOT.RDF.FromNumpy({'x': x, 'y': y})
File ".../redhat-linux-build/lib/ROOT/_facade.py", line 349, in MakeNumpyDataFrameCopy
return _MakeNumpyDataFrame(np_dict)
File ".../redhat-linux-build/lib/ROOT/_pythonization/_rdataframe.py", line 601, in _MakeNumpyDataFrame
return ROOT.Internal.RDF.MakeRVecDataFrame(ROOT.__ROOT_Internal.MakePyDeleter(key), *args)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
OverflowError: Python int too large to convert to C long
---
.../pythonizations/python/ROOT/_pythonization/_rdataframe.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_rdataframe.py b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_rdataframe.py
index d5cade59805..f9bb2771a73 100644
--- a/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_rdataframe.py
+++ b/bindings/pyroot/pythonizations/python/ROOT/_pythonization/_rdataframe.py
@@ -584,7 +584,7 @@ def _MakeNumpyDataFrame(np_dict):
namespace __ROOT_Internal {
- inline std::function<void()> MakePyDeleter(std::intptr_t ptr) {
+ inline std::function<void()> MakePyDeleter(std::uintptr_t ptr) {
PyObject *obj = reinterpret_cast<PyObject*>(ptr);
Py_INCREF(obj);
return [obj](){ Py_DECREF(obj); };
--
2.51.0

View file

@ -1,32 +0,0 @@
From 40f8cd0adeb7257778c789e1ae639f260780402b Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 7 Dec 2025 19:30:55 +0100
Subject: [PATCH] Fix a numpy test for 32 bit archs
The default dtype used in numpy array is "int". This type has
different sizes on 32 and 64 bit architectures. The test tries to use
the numpy array as a Long64_t dataframe. On 32 bit architectures this
results in an error.
This commit explicitly changes the numpy array's dtype to "int64" to
match the Long64_t dataframe type on all architectyres.
---
bindings/pyroot/pythonizations/test/rdataframe_misc.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bindings/pyroot/pythonizations/test/rdataframe_misc.py b/bindings/pyroot/pythonizations/test/rdataframe_misc.py
index 1a1efd21b3e..150828613b3 100644
--- a/bindings/pyroot/pythonizations/test/rdataframe_misc.py
+++ b/bindings/pyroot/pythonizations/test/rdataframe_misc.py
@@ -132,7 +132,7 @@ class RDataFrameMisc(unittest.TestCase):
return
out_path = "dataframe_misc_regression_gh20291.root"
try:
- x, y = numpy.array([1, 2, 3]), numpy.array([4, 5, 6])
+ x, y = numpy.array([1, 2, 3], dtype='int64'), numpy.array([4, 5, 6], dtype='int64')
df = ROOT.RDF.FromNumpy({"x": x, "y": y})
df.Snapshot("tree", out_path)
--
2.52.0

View file

@ -0,0 +1,57 @@
From 8f08aac1c5d356352d2bd24b05dcdd092d3ca864 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 19 Jun 2025 13:28:24 +0200
Subject: [PATCH] Fix test for 32 bit architectures
[ RUN ] TypeReflectionTest.GetSizeOfType
/builddir/build/BUILD/root-6.36.00-build/root-6.36.00/interpreter/CppInterOp/unittests/CppInterOp/TypeReflectionTest.cpp:79: Failure
Expected equality of these values:
Cpp::GetSizeOfType(Cpp::GetVariableType(Decls[4]))
Which is: 12
16
[ FAILED ] TypeReflectionTest.GetSizeOfType (23 ms)
[ RUN ] ScopeReflectionTest.SizeOf
/builddir/build/BUILD/root-6.36.00-build/root-6.36.00/interpreter/CppInterOp/unittests/CppInterOp/ScopeReflectionTest.cpp:161: Failure
Expected equality of these values:
Cpp::SizeOf(Decls[7])
Which is: 12
(size_t)16
Which is: 16
[ FAILED ] ScopeReflectionTest.SizeOf (26 ms)
---
.../CppInterOp/unittests/CppInterOp/ScopeReflectionTest.cpp | 3 ++-
.../CppInterOp/unittests/CppInterOp/TypeReflectionTest.cpp | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/interpreter/CppInterOp/unittests/CppInterOp/ScopeReflectionTest.cpp b/interpreter/CppInterOp/unittests/CppInterOp/ScopeReflectionTest.cpp
index 0b39080859..d490d0833c 100644
--- a/interpreter/CppInterOp/unittests/CppInterOp/ScopeReflectionTest.cpp
+++ b/interpreter/CppInterOp/unittests/CppInterOp/ScopeReflectionTest.cpp
@@ -158,7 +158,8 @@ TEST(ScopeReflectionTest, SizeOf) {
EXPECT_EQ(Cpp::SizeOf(Decls[4]), (size_t)0);
EXPECT_EQ(Cpp::SizeOf(Decls[5]), (size_t)1);
EXPECT_EQ(Cpp::SizeOf(Decls[6]), (size_t)4);
- EXPECT_EQ(Cpp::SizeOf(Decls[7]), (size_t)16);
+ struct B {short a; double b;};
+ EXPECT_EQ(Cpp::SizeOf(Decls[7]), sizeof(B));
}
diff --git a/interpreter/CppInterOp/unittests/CppInterOp/TypeReflectionTest.cpp b/interpreter/CppInterOp/unittests/CppInterOp/TypeReflectionTest.cpp
index a3e482596d..28cc32f166 100644
--- a/interpreter/CppInterOp/unittests/CppInterOp/TypeReflectionTest.cpp
+++ b/interpreter/CppInterOp/unittests/CppInterOp/TypeReflectionTest.cpp
@@ -77,7 +77,8 @@ TEST(TypeReflectionTest, GetSizeOfType) {
EXPECT_EQ(Cpp::GetSizeOfType(Cpp::GetVariableType(Decls[1])), 1);
EXPECT_EQ(Cpp::GetSizeOfType(Cpp::GetVariableType(Decls[2])), 4);
EXPECT_EQ(Cpp::GetSizeOfType(Cpp::GetVariableType(Decls[3])), 8);
- EXPECT_EQ(Cpp::GetSizeOfType(Cpp::GetVariableType(Decls[4])), 16);
+ struct B {int a; double b;};
+ EXPECT_EQ(Cpp::GetSizeOfType(Cpp::GetVariableType(Decls[4])), sizeof(B));
EXPECT_EQ(Cpp::GetSizeOfType(Cpp::GetTypeFromScope(Decls[5])), 0);
EXPECT_EQ(Cpp::GetSizeOfType(Cpp::GetVariableType(Decls[6])),
sizeof(intptr_t));
--
2.49.0

View file

@ -1,63 +0,0 @@
From 0e1e1f0ba1908ae1020337ed7ec0565bf979b92c Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 2 Dec 2025 04:57:30 +0100
Subject: [PATCH] [Geom] Add missing includes of TMath.h
---
geom/geombuilder/src/TGeoParaEditor.cxx | 1 +
geom/geombuilder/src/TGeoPconEditor.cxx | 1 +
geom/geombuilder/src/TGeoPgonEditor.cxx | 1 +
geom/geombuilder/src/TGeoTrapEditor.cxx | 1 +
4 files changed, 4 insertions(+)
diff --git a/geom/geombuilder/src/TGeoParaEditor.cxx b/geom/geombuilder/src/TGeoParaEditor.cxx
index fdc344ba4d2..bd173607d2c 100644
--- a/geom/geombuilder/src/TGeoParaEditor.cxx
+++ b/geom/geombuilder/src/TGeoParaEditor.cxx
@@ -27,6 +27,7 @@ Editor for a TGeoPara.
#include "TVirtualGeoPainter.h"
#include "TVirtualPad.h"
#include "TView.h"
+#include "TMath.h"
#include "TGButton.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
diff --git a/geom/geombuilder/src/TGeoPconEditor.cxx b/geom/geombuilder/src/TGeoPconEditor.cxx
index a66359853be..50598d2cb90 100644
--- a/geom/geombuilder/src/TGeoPconEditor.cxx
+++ b/geom/geombuilder/src/TGeoPconEditor.cxx
@@ -27,6 +27,7 @@ Editor for a TGeoPcon.
#include "TVirtualGeoPainter.h"
#include "TVirtualPad.h"
#include "TView.h"
+#include "TMath.h"
#include "TGCanvas.h"
#include "TGButton.h"
#include "TGTextEntry.h"
diff --git a/geom/geombuilder/src/TGeoPgonEditor.cxx b/geom/geombuilder/src/TGeoPgonEditor.cxx
index 949d0045a66..33638d66b2b 100644
--- a/geom/geombuilder/src/TGeoPgonEditor.cxx
+++ b/geom/geombuilder/src/TGeoPgonEditor.cxx
@@ -27,6 +27,7 @@ Editor for a TGeoPgon.
#include "TVirtualGeoPainter.h"
#include "TVirtualPad.h"
#include "TView.h"
+#include "TMath.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
#include "TGLabel.h"
diff --git a/geom/geombuilder/src/TGeoTrapEditor.cxx b/geom/geombuilder/src/TGeoTrapEditor.cxx
index d9c2916d075..459e0191117 100644
--- a/geom/geombuilder/src/TGeoTrapEditor.cxx
+++ b/geom/geombuilder/src/TGeoTrapEditor.cxx
@@ -27,6 +27,7 @@ Editor for a TGeoTrap.
#include "TVirtualGeoPainter.h"
#include "TVirtualPad.h"
#include "TView.h"
+#include "TMath.h"
#include "TGButton.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
--
2.52.0

View file

@ -0,0 +1,62 @@
From f4ac6bf20278c19c88cf98f6062ecfad86b87378 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 19 Jun 2025 14:02:31 +0200
Subject: [PATCH] Ignore warnings from uring IO
Tests randomly fail because the uring memory is exhausted.
Here are some examples:
[ RUN ] RNTuple.RandomAccess
.../root-6.36.00/core/testsupport/src/TestSupport.cxx:79: Failure
Failed
Received unexpected diagnostic of severity 2000 at 'RIoUring' reading 'io_uring is unexpectedly not available because:
Failed to allocate memory for the smallest possible io_uring instance. 'memlock' memory has been exhausted for this user'.
Suppress those using ROOT/TestSupport.hxx
.../root-6.36.00/core/testsupport/src/TestSupport.cxx:79: Failure
Failed
Received unexpected diagnostic of severity 2000 at 'RRawFileUnix' reading 'io_uring setup failed, falling back to blocking I/O in ReadV'.
Suppress those using ROOT/TestSupport.hxx
[ FAILED ] RNTuple.RandomAccess (20472 ms)
[ RUN ] RNTupleDSTest.ChainMT
.../root-6.34.08/core/testsupport/src/TestSupport.cxx:79: Failure
Failed
Received unexpected diagnostic of severity 2000 at 'RIoUring' reading 'io_uring is unexpectedly not available because:
Failed to allocate memory for the smallest possible io_uring instance. 'memlock' memory has been exhausted for this user'.
Suppress those using ROOT/TestSupport.hxx
.../root-6.34.08/core/testsupport/src/TestSupport.cxx:79: Failure
Failed
Received unexpected diagnostic of severity 2000 at 'RRawFileUnix' reading 'io_uring setup failed, falling back to blocking I/O in ReadV'.
Suppress those using ROOT/TestSupport.hxx
[ FAILED ] RNTupleDSTest.ChainMT (1004 ms)
---
core/testsupport/src/TestSupport.cxx | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/core/testsupport/src/TestSupport.cxx b/core/testsupport/src/TestSupport.cxx
index 9889a432f4..4c3395ef16 100644
--- a/core/testsupport/src/TestSupport.cxx
+++ b/core/testsupport/src/TestSupport.cxx
@@ -76,6 +76,18 @@ static struct ForbidDiagnostics {
return;
}
+ if (level == kWarning && strcmp(location, "RIoUring") == 0 &&
+ strstr(msg, "io_uring is unexpectedly not available because:") != nullptr) {
+ std::cerr << "Warning in " << location << " " << msg << std::endl;
+ return;
+ }
+
+ if (level == kWarning && strcmp(location, "RRawFileUnix") == 0 &&
+ strcmp(msg, "io_uring setup failed, falling back to blocking I/O in ReadV") == 0) {
+ std::cerr << "Warning in " << location << " " << msg << std::endl;
+ return;
+ }
+
FAIL() << "Received unexpected diagnostic of severity "
<< level
<< " at '" << location << "' reading '" << msg << "'.\n"
--
2.49.0

View file

@ -1,70 +0,0 @@
From f09b4ce027b31dcd19ea8a398c35c5dfbcc0507f Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 18 Dec 2025 11:49:12 +0100
Subject: [PATCH] [PyROOT] Don't install the python modules twice
The binary python modules were moved one directory level down into the
ROOT and cppyy directories, so that they reside alongside the python
files in the same directories. The install rule for the python files
must therefore be extended to exclude the binary modules (PATTERN *.so
EXCLUDE) so that these are not installed a second time overwriting the
files installed by the install rule for the binary modules with another
copy with the wrong file permissions.
Also use the no-version option for the cppyy binary module as is
already done for the pythonization binary module, since it is now
installed in the python directory. Before it was installed in the
library directory with an unversioned symlink in the python directory.
---
bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt | 2 +-
bindings/pyroot/cppyy/cppyy/CMakeLists.txt | 5 +++--
bindings/pyroot/pythonizations/CMakeLists.txt | 3 ++-
3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
index bb48c032974..065a89348ff 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
+++ b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
@@ -73,7 +73,7 @@ endif()
add_library(cppyy SHARED src/CPyCppyyPyModule.cxx)
# Set the suffix to '.so' and the prefix to 'lib'
-set_target_properties(cppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES}
+set_target_properties(cppyy PROPERTIES ${ROOT_LIBRARY_PROPERTIES_NO_VERSION}
LIBRARY_OUTPUT_DIRECTORY ${localruntimedir}/cppyy)
if(MSVC)
target_link_libraries(cppyy PRIVATE CPyCppyy)
diff --git a/bindings/pyroot/cppyy/cppyy/CMakeLists.txt b/bindings/pyroot/cppyy/cppyy/CMakeLists.txt
index 3a29b4525f7..842ad12df97 100644
--- a/bindings/pyroot/cppyy/cppyy/CMakeLists.txt
+++ b/bindings/pyroot/cppyy/cppyy/CMakeLists.txt
@@ -31,8 +31,9 @@ endforeach()
# Install Python sources and bytecode
install(DIRECTORY ${localruntimedir}/cppyy
DESTINATION ${CMAKE_INSTALL_PYTHONDIR}
- COMPONENT libraries)
+ COMPONENT libraries
+ PATTERN *.so EXCLUDE)
if(NOT MSVC)
ROOT_ADD_TEST_SUBDIRECTORY(test)
-endif()
\ No newline at end of file
+endif()
diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt
index 1230f18ca47..b415ba13697 100644
--- a/bindings/pyroot/pythonizations/CMakeLists.txt
+++ b/bindings/pyroot/pythonizations/CMakeLists.txt
@@ -239,7 +239,8 @@ install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports
# Install Python sources and bytecode
install(DIRECTORY ${localruntimedir}/ROOT
DESTINATION ${CMAKE_INSTALL_PYTHONDIR}
- COMPONENT libraries)
+ COMPONENT libraries
+ PATTERN *.so EXCLUDE)
# Install headers required by pythonizations
install(FILES ${PYROOT_EXTRA_HEADERS}
--
2.52.0

View file

@ -1,82 +0,0 @@
From d5135f7869406396b3ba8e944c71dbdd67d3ea01 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Tue, 23 Dec 2025 19:04:45 +0100
Subject: [PATCH] [Python] Fix TF1 Pythonization test for NumPy 2.4.0
The new NumPy 2.4.0 is more strict when implicitly converting 1-element
arrays to scalars. It doesn't do that anymore, causing the TF1
Pythonization tests to fail (see log below).
This actually pointed to a real mistake in setting up the test, where a
2D array was used to define the TFormula parameters while it should be a
1D array.
```txt
962/3718 Test #93: pyunittests-bindings-pyroot-pythonizations-pyroot-pyz-tf-pycallables ..............................***Failed 3.05 sec
test_callable (tf_pycallables.TF1.test_callable)
Test function provided as callable ... ok
test_evalpar (tf_pycallables.TF1.test_evalpar)
Test the 2D Numpy array pythonizations for TF1::EvalPar ... ERROR
test_evalpar_dynamic (tf_pycallables.TF1.test_evalpar_dynamic)
Test the 2D NumPy pythonizations with dynamic TF1 data dimensions ... ok
test_fitgauss (tf_pycallables.TF1.test_fitgauss)
Test fitting a histogram to a Python function ... ok
test_identity (tf_pycallables.TF1.test_identity)
Test simple function without parameters ... ok
test_params (tf_pycallables.TF1.test_params)
Test function with parameters ... ok
test_params (tf_pycallables.TF2.test_params)
Test function with parameters ... ok
test_params (tf_pycallables.TF3.test_params)
Test function with parameters ... ok
======================================================================
ERROR: test_evalpar (tf_pycallables.TF1.test_evalpar)
Test the 2D Numpy array pythonizations for TF1::EvalPar
----------------------------------------------------------------------
Traceback (most recent call last):
File "/github/home/ROOT-CI/src/bindings/pyroot/pythonizations/test/tf_pycallables.py", line 129, in test_evalpar
expected_value = pyf_tf1_coulomb(x[i, ::2], params)
File "/github/home/ROOT-CI/src/bindings/pyroot/pythonizations/test/tf_pycallables.py", line 33, in pyf_tf1_coulomb
return p[1] * x[0] * x[1] / (p[0]**2) * math.exp(-p[2] / p[0])
~~~~~~~~^^^^^^^^^^^^^^
TypeError: only 0-dimensional arrays can be converted to Python scalars
----------------------------------------------------------------------
Ran 8 tests in 1.469s
FAILED (errors=1)
CMake Error at /github/home/ROOT-CI/src/cmake/modules/RootTestDriver.cmake:232 (message):
error code: 1
```
---
.../pyroot/pythonizations/test/tf_pycallables.py | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/bindings/pyroot/pythonizations/test/tf_pycallables.py b/bindings/pyroot/pythonizations/test/tf_pycallables.py
index 2a7d6b72462..5a223030ec9 100644
--- a/bindings/pyroot/pythonizations/test/tf_pycallables.py
+++ b/bindings/pyroot/pythonizations/test/tf_pycallables.py
@@ -116,11 +116,13 @@ class TF1(unittest.TestCase):
[3.0, 10, 4.0]
])
- params = np.array([
- [1.0], # Distance between charges r
- [8.99e9], # Coulomb constant k (in N·m²/C²)
- [0.1] # Additional factor for modulation
- ])
+ params = np.array(
+ [
+ 1.0, # Distance between charges r
+ 8.99e9, # Coulomb constant k (in N·m²/C²)
+ 0.1, # Additional factor for modulation
+ ]
+ )
# Slice to avoid the dummy column of 10's
res = rtf1_coulomb.EvalPar(x[:, ::2], params)
--
2.52.0

View file

@ -0,0 +1,66 @@
From f26668d48bfc75e9c176f7981e51ddc3b5ed7895 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Wed, 11 Jun 2025 14:15:07 +0200
Subject: [PATCH] [Python] Update reference refcount values for Python 3.14
compatibility
Closes: #18988.
---
.../pyroot/pythonizations/test/rdataframe_makenumpy.py | 9 ++++++++-
bindings/pyroot/pythonizations/test/rvec_asrvec.py | 10 +++++++---
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py b/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py
index 072148aeb6..c7da723523 100644
--- a/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py
+++ b/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py
@@ -75,10 +75,17 @@ class DataFrameFromNumpy(unittest.TestCase):
def test_refcount(self):
"""
Check refcounts of associated PyObjects
+
+ In case of Python <=3.14, we expect a refcount of 2 for the data dict,
+ because the call to sys.getrefcount creates a second reference by
+ itself. Starting from Python 3.14, we expect a refcount of 1 because
+ there were changes to the interpreter to avoid some unnecessary ref
+ counts. See also:
+ https://docs.python.org/3.14/whatsnew/3.14.html#whatsnew314-refcount
"""
data = {"x": np.array([1, 2, 3], dtype="float32")}
gc.collect()
- self.assertEqual(sys.getrefcount(data), 2)
+ self.assertEqual(sys.getrefcount(data), 1 + int(sys.version_info < (3, 14)))
self.assertEqual(sys.getrefcount(data["x"]), 2)
df = ROOT.RDF.FromNumpy(data)
diff --git a/bindings/pyroot/pythonizations/test/rvec_asrvec.py b/bindings/pyroot/pythonizations/test/rvec_asrvec.py
index 5e6c820705..9d3a294bf1 100644
--- a/bindings/pyroot/pythonizations/test/rvec_asrvec.py
+++ b/bindings/pyroot/pythonizations/test/rvec_asrvec.py
@@ -123,8 +123,12 @@ class AsRVec(unittest.TestCase):
"""
Test reference count of returned RVec
- We expect a refcount of 2 for the RVec because the call to sys.getrefcount
- creates a second reference by itself.
+ In case of Python <=3.14, we expect a refcount of 2 for the RVec
+ because the call to sys.getrefcount creates a second reference by
+ itself. Starting from Python 3.14, we expect a refcount of 1 because
+ there were changes to the interpreter to avoid some unnecessary ref
+ counts. See also:
+ https://docs.python.org/3.14/whatsnew/3.14.html#whatsnew314-refcount
We attach the adopted pyobject to the RVec and increase the refcount of the
numpy array. After deletion of the rvec, the refcount of the numpy array
is decreased.
@@ -132,7 +136,7 @@ class AsRVec(unittest.TestCase):
np_obj = np.array([1, 2])
rvec = ROOT.VecOps.AsRVec(np_obj)
gc.collect()
- self.assertEqual(sys.getrefcount(rvec), 2)
+ self.assertEqual(sys.getrefcount(rvec), 1 + int(sys.version_info < (3, 14)))
self.assertEqual(sys.getrefcount(np_obj), 3)
del rvec
gc.collect()
--
2.49.0

View file

@ -0,0 +1,44 @@
From 530d925f9832fe5fd1469ebf145f85227cfce1d4 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 20 Jun 2025 07:21:05 +0200
Subject: [PATCH] [Python] Update reference refcount values for Python 3.14
compatibility
---
bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py | 2 +-
bindings/pyroot/pythonizations/test/rvec_asrvec.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py b/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py
index c7da723523..fc0f88155a 100644
--- a/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py
+++ b/bindings/pyroot/pythonizations/test/rdataframe_makenumpy.py
@@ -90,7 +90,7 @@ class DataFrameFromNumpy(unittest.TestCase):
df = ROOT.RDF.FromNumpy(data)
gc.collect()
- self.assertEqual(sys.getrefcount(df), 2)
+ self.assertEqual(sys.getrefcount(df), 1 + int(sys.version_info < (3, 14)))
self.assertEqual(sys.getrefcount(data["x"]), 3)
diff --git a/bindings/pyroot/pythonizations/test/rvec_asrvec.py b/bindings/pyroot/pythonizations/test/rvec_asrvec.py
index 9d3a294bf1..f489da826e 100644
--- a/bindings/pyroot/pythonizations/test/rvec_asrvec.py
+++ b/bindings/pyroot/pythonizations/test/rvec_asrvec.py
@@ -137,10 +137,10 @@ class AsRVec(unittest.TestCase):
rvec = ROOT.VecOps.AsRVec(np_obj)
gc.collect()
self.assertEqual(sys.getrefcount(rvec), 1 + int(sys.version_info < (3, 14)))
- self.assertEqual(sys.getrefcount(np_obj), 3)
+ self.assertEqual(sys.getrefcount(np_obj), 2 + int(sys.version_info < (3, 14)))
del rvec
gc.collect()
- self.assertEqual(sys.getrefcount(np_obj), 2)
+ self.assertEqual(sys.getrefcount(np_obj), 1 + int(sys.version_info < (3, 14)))
if __name__ == "__main__":
--
2.49.0

View file

@ -1,50 +0,0 @@
From e1f42658629ad67ce7cb224a1379d133f61f2e35 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Sun, 11 Jan 2026 10:25:51 +0100
Subject: [PATCH] [RF] Use TRandom3 in test RooFuncWrapper
Use TRandom3 instead of the `<random>` to get compiler-independent,
reproducible behavior.
---
roofit/roofitcore/test/testRooFuncWrapper.cxx | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/roofit/roofitcore/test/testRooFuncWrapper.cxx b/roofit/roofitcore/test/testRooFuncWrapper.cxx
index 2ebdf95333f..189e8f2e266 100644
--- a/roofit/roofitcore/test/testRooFuncWrapper.cxx
+++ b/roofit/roofitcore/test/testRooFuncWrapper.cxx
@@ -34,12 +34,12 @@
#include <RooWorkspace.h>
#include <ROOT/StringUtils.hxx>
+#include <TMath.h>
#include <TROOT.h>
+#include <TRandom3.h>
#include <TSystem.h>
-#include <TMath.h>
#include <functional>
-#include <random>
#include "gtest_wrapper.h"
@@ -66,13 +66,13 @@ double getNumDerivative(const RooAbsReal &pdf, RooRealVar &var, const RooArgSet
void randomizeParameters(const RooArgSet &parameters)
{
+ TRandom3 rng(1337);
+
double lowerBound = -0.1;
double upperBound = 0.1;
- std::uniform_real_distribution<double> unif(lowerBound, upperBound);
- std::default_random_engine re;
for (auto *param : parameters) {
- double mul = unif(re);
+ double mul = rng.Uniform(lowerBound, upperBound);
auto par = dynamic_cast<RooAbsRealLValue *>(param);
if (!par)
--
2.52.0

View file

@ -1,4 +1,4 @@
From 98a5042a02dd7c1aaa9fbd5e54c8620c6b72484f Mon Sep 17 00:00:00 2001
From e59ece55e4eead85b2b6fd8c6ddc2dfa179f0d09 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Mon, 2 Jun 2025 21:22:39 +0200
Subject: [PATCH] Save memory. Do not link to LLVM libraries in parallel
@ -9,21 +9,21 @@ Subject: [PATCH] Save memory. Do not link to LLVM libraries in parallel
2 files changed, 9 insertions(+)
diff --git a/core/clingutils/test/CMakeLists.txt b/core/clingutils/test/CMakeLists.txt
index a6c7aedac99..90ac0139c24 100644
index 15cc3ff48a..f62735e972 100644
--- a/core/clingutils/test/CMakeLists.txt
+++ b/core/clingutils/test/CMakeLists.txt
@@ -36,3 +36,6 @@ if(NOT builtin_clang)
@@ -31,3 +31,6 @@ if(NOT builtin_clang)
endif()
ROOT_ADD_UNITTEST_DIR(Core ${CLING_LIBRARIES} $<TARGET_OBJECTS:ClingUtils>)
ROOT_ADD_UNITTEST_DIR(Core RIO ${CLING_LIBRARIES} $<TARGET_OBJECTS:ClingUtils>)
+
+# Save memory. Do not link to LLVM libraries in parallel
+add_dependencies(coreclingutilstestUnit CppInterOpTests)
diff --git a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
index 4b4b43bdd29..a028802fedc 100644
index 0ba35053fd..c6440cf301 100644
--- a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
+++ b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
@@ -66,6 +66,9 @@ target_link_libraries(CppInterOpTests
@@ -65,6 +65,9 @@ target_link_libraries(CppInterOpTests
clangCppInterOp
)
@ -33,7 +33,7 @@ index 4b4b43bdd29..a028802fedc 100644
set_output_directory(CppInterOpTests
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${EXTRA_PATH_TEST_BINARIES}
LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${EXTRA_PATH_TEST_BINARIES}
@@ -129,5 +132,8 @@ set_output_directory(DynamicLibraryManagerTests
@@ -116,5 +119,8 @@ set_output_directory(DynamicLibraryManagerTests
add_dependencies(DynamicLibraryManagerTests TestSharedLib)
@ -43,5 +43,5 @@ index 4b4b43bdd29..a028802fedc 100644
#export_executable_symbols_for_plugins(TestSharedLib)
add_subdirectory(TestSharedLib)
--
2.52.0
2.49.0

View file

@ -0,0 +1,60 @@
From 7bfd27ac478356e7c718b18b5eb3a3b277b833d1 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 3 Jun 2025 06:49:27 +0200
Subject: [PATCH] Use size_t for offset
[ RUN ] VariableReflectionTest.StaticConstExprDatamember
/builddir/build/BUILD/root-6.36.00/interpreter/CppInterOp/unittests/CppInterOp/VariableReflectionTest.cpp:545: Failure
Expected equality of these values:
3
*(int*)offset
Which is: 0
/builddir/build/BUILD/root-6.36.00/interpreter/CppInterOp/unittests/CppInterOp/VariableReflectionTest.cpp:561: Failure
Expected equality of these values:
5
*(int*)offset
Which is: 0
/builddir/build/BUILD/root-6.36.00/interpreter/CppInterOp/unittests/CppInterOp/VariableReflectionTest.cpp:580: Failure
Expected equality of these values:
2
*(int*)offset
Which is: 0
[ FAILED ] VariableReflectionTest.StaticConstExprDatamember (9 ms)
---
.../unittests/CppInterOp/VariableReflectionTest.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/interpreter/CppInterOp/unittests/CppInterOp/VariableReflectionTest.cpp b/interpreter/CppInterOp/unittests/CppInterOp/VariableReflectionTest.cpp
index 26dad4f25c..571ae5cd5d 100644
--- a/interpreter/CppInterOp/unittests/CppInterOp/VariableReflectionTest.cpp
+++ b/interpreter/CppInterOp/unittests/CppInterOp/VariableReflectionTest.cpp
@@ -552,7 +552,7 @@ TEST(VariableReflectionTest, StaticConstExprDatamember) {
EXPECT_EQ(datamembers.size(), 1);
intptr_t offset = Cpp::GetVariableOffset(datamembers[0]);
- EXPECT_EQ(3, *(int*)offset);
+ EXPECT_EQ(3, *(size_t*)offset);
ASTContext& C = Interp->getCI()->getASTContext();
std::vector<Cpp::TemplateArgInfo> template_args = {
@@ -568,7 +568,7 @@ TEST(VariableReflectionTest, StaticConstExprDatamember) {
EXPECT_EQ(datamembers.size(), 1);
offset = Cpp::GetVariableOffset(datamembers[0]);
- EXPECT_EQ(5, *(int*)offset);
+ EXPECT_EQ(5, *(size_t*)offset);
std::vector<Cpp::TemplateArgInfo> ele_template_args = {
{C.IntTy.getAsOpaquePtr()}, {C.FloatTy.getAsOpaquePtr()}};
@@ -587,7 +587,7 @@ TEST(VariableReflectionTest, StaticConstExprDatamember) {
EXPECT_EQ(datamembers.size(), 1);
offset = Cpp::GetVariableOffset(datamembers[0]);
- EXPECT_EQ(2, *(int*)offset);
+ EXPECT_EQ(2, *(size_t*)offset);
}
TEST(VariableReflectionTest, GetEnumConstantDatamembers) {
--
2.49.0

View file

@ -1,34 +0,0 @@
From fd18e83ae79760f7e8cca6f28b6d0f89d912b152 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Wed, 26 Nov 2025 12:40:03 +0100
Subject: [PATCH] [VecOps] Remove outdated `IsSmall` helper function in tests
The commit 2605710bea7b1 changed from using the `ROOT::Detail::VecOps::`
namespace explicitly for `IsSmall` to a `using` statement. However,
there was also a remnant `IsSmall` function with an outdated
implementation in the test file itself, which we can now remove.
---
math/vecops/test/vecops_rvec.cxx | 7 -------
1 file changed, 7 deletions(-)
diff --git a/math/vecops/test/vecops_rvec.cxx b/math/vecops/test/vecops_rvec.cxx
index 034f06ca211..432c673a553 100644
--- a/math/vecops/test/vecops_rvec.cxx
+++ b/math/vecops/test/vecops_rvec.cxx
@@ -1493,13 +1493,6 @@ TEST(VecOps, Construct)
EXPECT_TRUE(fourVects[2] == ref2);
}
-bool IsSmall(const RVec<int> &v)
-{
- // the first array element is right after the 3 data members of SmallVectorBase
- return reinterpret_cast<std::uintptr_t>(v.begin()) - reinterpret_cast<std::uintptr_t>(&v) ==
- sizeof(void *) + 2 * sizeof(int);
-}
-
// this is a regression test for https://github.com/root-project/root/issues/6796
TEST(VecOps, MemoryAdoptionAndClear)
{
--
2.52.0

View file

@ -1,109 +0,0 @@
From 251de0f8b237ce041df4960f831fe4a1fade6d92 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Sat, 6 Dec 2025 17:39:40 +0100
Subject: [PATCH] [cppyy] Remove code related to finding CPyCppyy API header
path
This is not needed for ROOT, because the CPyCppyy API headers are
installed with the other ROOT headers anyway, and ROOT knows where to
find them already.
---
.../cppyy/cppyy/python/cppyy/__init__.py | 82 -------------------
1 file changed, 82 deletions(-)
diff --git a/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py b/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py
index 68e3c49e5fe..c8dd458bfdd 100644
--- a/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py
+++ b/bindings/pyroot/cppyy/cppyy/python/cppyy/__init__.py
@@ -297,88 +297,6 @@ elif ispypy:
if os.path.exists(apipath) and os.path.exists(os.path.join(apipath, 'Python.h')):
add_include_path(apipath)
-# add access to extra headers for dispatcher (CPyCppyy only (?))
-if not ispypy:
- try:
- apipath_extra = os.environ['CPPYY_API_PATH']
- if os.path.basename(apipath_extra) == 'CPyCppyy':
- apipath_extra = os.path.dirname(apipath_extra)
- except KeyError:
- apipath_extra = None
-
- if apipath_extra is None:
- try:
- if 0x30a0000 <= sys.hexversion:
- import importlib.metadata as m
-
- for p in m.files('CPyCppyy'):
- if p.match('API.h'):
- ape = p.locate()
- break
- del p, m
- else:
- import pkg_resources as pr
-
- d = pr.get_distribution('CPyCppyy')
- for line in d.get_metadata_lines('RECORD'):
- if 'API.h' in line:
- ape = os.path.join(d.location, line[0:line.find(',')])
- break
- del line, d, pr
-
- if os.path.exists(ape):
- apipath_extra = os.path.dirname(os.path.dirname(ape))
- del ape
- except Exception:
- pass
-
- if apipath_extra is None:
- ldversion = sysconfig.get_config_var('LDVERSION')
- if not ldversion:
- ldversion = sys.version[:3]
-
- apipath_extra = os.path.join(os.path.dirname(apipath), 'site', 'python'+ldversion)
- if not os.path.exists(os.path.join(apipath_extra, 'CPyCppyy')):
- import glob
- import platform
-
- if platform.system() == "Windows":
- # Install locations are handled differently on Windows
- import libcppyy
-
- ape = os.path.dirname(libcppyy.__file__)
- else:
- import cppyy.libcppyy as libcppyy
-
- ape = os.path.dirname(libcppyy.__file__)
- # a "normal" structure finds the include directory up to 3 levels up,
- # ie. dropping lib/pythonx.y[md]/site-packages
- for i in range(3):
- if os.path.exists(os.path.join(ape, 'include')):
- break
- ape = os.path.dirname(ape)
-
- ape = os.path.join(ape, 'include')
- if os.path.exists(os.path.join(ape, 'CPyCppyy')):
- apipath_extra = ape
- else:
- # add back pythonx.y or site/pythonx.y if present
- for p in glob.glob(os.path.join(ape, 'python'+sys.version[:3]+'*'))+\
- glob.glob(os.path.join(ape, '*', 'python'+sys.version[:3]+'*')):
- if os.path.exists(os.path.join(p, 'CPyCppyy')):
- apipath_extra = p
- break
-
- if apipath_extra.lower() != 'none':
- if not os.path.exists(os.path.join(apipath_extra, 'CPyCppyy')):
- warnings.warn("CPyCppyy API not found (tried: %s); "
- "set CPPYY_API_PATH envar to the 'CPyCppyy' API directory to fix"
- % apipath_extra)
- else:
- add_include_path(apipath_extra)
-
- del apipath_extra
-
if os.getenv('CONDA_PREFIX'):
# MacOS, Linux
include_path = os.path.join(os.getenv('CONDA_PREFIX'), 'include')
--
2.52.0

View file

@ -1,46 +0,0 @@
From f4577e76a5dc23842d6be0a82df804f71fc820ef Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Mon, 1 Dec 2025 16:51:36 +0100
Subject: [PATCH] [cppyy] Remove now irrelevant `load_cpp_backend()` call
As we don't have a separate `cppyy_backend` anymore (neither as a Python
package, nor as a shared library), trying to load the backend library
will always give an exception that will be caught as an `ImportError`.
It would be cleaner if this code branch is not even taken.
---
.../cppyy/cppyy/python/cppyy/_cpython_cppyy.py | 12 ------------
1 file changed, 12 deletions(-)
diff --git a/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py b/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py
index bac078ea7c9..f98a34a697c 100644
--- a/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py
+++ b/bindings/pyroot/cppyy/cppyy/python/cppyy/_cpython_cppyy.py
@@ -19,24 +19,12 @@ __all__ = [
'_end_capture_stderr'
]
-# First load the dependency libraries of the backend, then pull in the libcppyy
-# extension module. If the backed can't be loaded, it was probably linked
-# statically into the extension module, so we don't error out at this point.
-try:
- from cppyy_backend import loader
- c = loader.load_cpp_backend()
-except ImportError:
- c = None
-
if platform.system() == "Windows":
# On Windows, the library has to be searched without prefix
import libcppyy as _backend
else:
import cppyy.libcppyy as _backend
-if c is not None:
- _backend._cpp_backend = c
-
# explicitly expose APIs from libcppyy
_w = ctypes.CDLL(_backend.__file__, ctypes.RTLD_GLOBAL)
--
2.52.0

View file

@ -0,0 +1,44 @@
From 4bfc8d1ff53b398c8e5bd879ca32ead4321b844a Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Wed, 20 Aug 2025 08:17:16 +0200
Subject: [PATCH] [df] Support libarrow 21
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
arrow::internal::GenericToStatus → arrow::ToStatus
---
tree/dataframe/test/datasource_arrow.cxx | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/tree/dataframe/test/datasource_arrow.cxx b/tree/dataframe/test/datasource_arrow.cxx
index 05493baa3d4..73749b59afc 100644
--- a/tree/dataframe/test/datasource_arrow.cxx
+++ b/tree/dataframe/test/datasource_arrow.cxx
@@ -12,6 +12,7 @@
#include <arrow/record_batch.h>
#include <arrow/table.h>
#include <arrow/type.h>
+#include <arrow/util/config.h>
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
@@ -21,9 +22,15 @@
#include <iostream>
using namespace arrow;
+#if ARROW_VERSION_MAJOR >= 21
+#define ASSERT_OK(expr) \
+ for (::arrow::Status _st = ::arrow::ToStatus((expr)); !_st.ok();) \
+ FAIL() << "'" ARROW_STRINGIFY(expr) "' failed with " << _st.ToString()
+#else
#define ASSERT_OK(expr) \
for (::arrow::Status _st = ::arrow::internal::GenericToStatus((expr)); !_st.ok();) \
FAIL() << "'" ARROW_STRINGIFY(expr) "' failed with " << _st.ToString()
+#endif
// Copied from arrow/testing/builder.h
template <typename TYPE, typename C_TYPE = typename TYPE::c_type>
--
2.50.1

View file

@ -1,4 +1,4 @@
From 4d450f306a8ab8220f43675c70f399d89e5a4a03 Mon Sep 17 00:00:00 2001
From c5f13cb25c3b803346d1a6cac483badbcf2ced62 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sat, 11 May 2024 20:09:47 +0200
Subject: [PATCH] Use system fonts via fontconfig
@ -9,19 +9,20 @@ Subject: [PATCH] Use system fonts via fontconfig
graf2d/asimage/src/TASImage.cxx | 91 +++++++-
graf2d/graf/CMakeLists.txt | 1 +
graf2d/graf/inc/TTF.h | 3 +-
graf2d/graf/src/TTF.cxx | 295 +++++++++++++++++---------
graf2d/graf/src/TTF.cxx | 291 +++++++++++++++++---------
graf2d/postscript/CMakeLists.txt | 1 +
graf2d/postscript/src/TPostScript.cxx | 106 ++++-----
graf2d/postscript/src/TPostScript.cxx | 106 +++++-----
graf3d/gl/CMakeLists.txt | 1 +
graf3d/gl/src/TGLFontManager.cxx | 123 ++++++++++-
graf3d/gl/src/TGLText.cxx | 56 +++--
11 files changed, 495 insertions(+), 194 deletions(-)
gui/gui/src/TGApplication.cxx | 10 +-
12 files changed, 494 insertions(+), 201 deletions(-)
diff --git a/core/base/src/TApplication.cxx b/core/base/src/TApplication.cxx
index f0d2124a8f6..41ad4c73020 100644
index 992713264a..32bfc0bbb9 100644
--- a/core/base/src/TApplication.cxx
+++ b/core/base/src/TApplication.cxx
@@ -253,18 +253,12 @@ void TApplication::InitializeGraphics(Bool_t only_web)
@@ -251,18 +251,12 @@ void TApplication::InitializeGraphics(Bool_t only_web)
LoadGraphicsLibs();
// Try to load TrueType font renderer. Only try to load if not in batch
@ -42,7 +43,7 @@ index f0d2124a8f6..41ad4c73020 100644
if (gClassTable->GetDict("TGX11TTF")) {
// in principle we should not have linked anything against libGX11TTF
// but with ACLiC this can happen, initialize TGX11TTF by hand
@@ -278,7 +272,6 @@ void TApplication::InitializeGraphics(Bool_t only_web)
@@ -276,7 +270,6 @@ void TApplication::InitializeGraphics(Bool_t only_web)
}
}
#endif
@ -51,10 +52,10 @@ index f0d2124a8f6..41ad4c73020 100644
if (!only_web || !fAppImp) {
diff --git a/graf2d/asimage/CMakeLists.txt b/graf2d/asimage/CMakeLists.txt
index b5ccf983473..8ee57c1fac0 100644
index 31114ad45d..be95419491 100644
--- a/graf2d/asimage/CMakeLists.txt
+++ b/graf2d/asimage/CMakeLists.txt
@@ -28,6 +28,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ASImage
@@ -30,6 +30,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ASImage
${FREETYPE_LIBRARIES}
${X11_LIBRARIES}
ZLIB::ZLIB
@ -63,7 +64,7 @@ index b5ccf983473..8ee57c1fac0 100644
Core
Graf
diff --git a/graf2d/asimage/src/TASImage.cxx b/graf2d/asimage/src/TASImage.cxx
index 6ea60a78801..e85d804b7ec 100644
index 7e046f4724..137265bd4a 100644
--- a/graf2d/asimage/src/TASImage.cxx
+++ b/graf2d/asimage/src/TASImage.cxx
@@ -117,6 +117,8 @@ extern "C" {
@ -75,7 +76,7 @@ index 6ea60a78801..e85d804b7ec 100644
// auxiliary functions for general polygon filling
#include "TASPolyUtils.c"
@@ -2620,11 +2622,88 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
@@ -2595,11 +2597,88 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
// This is for backward compatibility...
if (fn.Last('/') == 0) fn = fn(1, fn.Length() - 1);
@ -169,7 +170,7 @@ index 6ea60a78801..e85d804b7ec 100644
if (fn.EndsWith(".pfa") || fn.EndsWith(".PFA") || fn.EndsWith(".pfb") || fn.EndsWith(".PFB") || fn.EndsWith(".ttf") || fn.EndsWith(".TTF") || fn.EndsWith(".otf") || fn.EndsWith(".OTF")) {
ttfont = kTRUE;
@@ -2648,7 +2727,7 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
@@ -2623,7 +2702,7 @@ void TASImage::DrawText(Int_t x, Int_t y, const char *text, Int_t size,
return;
}
@ -179,7 +180,7 @@ index 6ea60a78801..e85d804b7ec 100644
if (!font) {
font = get_asfont(gFontManager, "fixed", 0, size, ASF_GuessWho);
diff --git a/graf2d/graf/CMakeLists.txt b/graf2d/graf/CMakeLists.txt
index d7d1b77c21a..c4ebb994a4a 100644
index d7d1b77c21..c4ebb994a4 100644
--- a/graf2d/graf/CMakeLists.txt
+++ b/graf2d/graf/CMakeLists.txt
@@ -91,6 +91,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Graf
@ -191,7 +192,7 @@ index d7d1b77c21a..c4ebb994a4a 100644
Hist
Matrix
diff --git a/graf2d/graf/inc/TTF.h b/graf2d/graf/inc/TTF.h
index 864ce06b4f0..050796d1ded 100644
index 0bef9dcb95..ea96fe47ce 100644
--- a/graf2d/graf/inc/TTF.h
+++ b/graf2d/graf/inc/TTF.h
@@ -76,9 +76,10 @@ protected:
@ -207,7 +208,7 @@ index 864ce06b4f0..050796d1ded 100644
static TTF::TTGlyph fgGlyphs[kMaxGlyphs]; ///< glyphs
static Bool_t fgHinting; ///< use hinting (true by default)
diff --git a/graf2d/graf/src/TTF.cxx b/graf2d/graf/src/TTF.cxx
index 758bb98c192..c90d0ac70a9 100644
index ca38ed1f9c..8f1d62686b 100644
--- a/graf2d/graf/src/TTF.cxx
+++ b/graf2d/graf/src/TTF.cxx
@@ -25,6 +25,8 @@ Interface to the freetype 2 library.
@ -232,7 +233,7 @@ index 758bb98c192..c90d0ac70a9 100644
FT_Matrix *TTF::fgRotMatrix = nullptr;
FT_Library TTF::fgLibrary;
FT_BBox TTF::fgCBox;
@@ -71,6 +74,11 @@ void TTF::Init()
@@ -72,6 +75,11 @@ void TTF::Init()
return;
}
@ -244,7 +245,7 @@ index 758bb98c192..c90d0ac70a9 100644
// load default font (arialbd)
SetTextFont(62);
}
@@ -108,12 +116,15 @@ Short_t TTF::CharToUnicode(UInt_t code)
@@ -109,12 +117,15 @@ Short_t TTF::CharToUnicode(UInt_t code)
charmap = fgFace[fgCurFontIdx]->charmaps[i];
platform = charmap->platform_id;
encoding = charmap->encoding_id;
@ -264,7 +265,7 @@ index 758bb98c192..c90d0ac70a9 100644
{
fgCharMap[fgCurFontIdx] = charmap;
if (FT_Set_Charmap(fgFace[fgCurFontIdx], fgCharMap[fgCurFontIdx]))
@@ -392,21 +403,145 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic)
@@ -387,21 +398,145 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic)
}
const char *basename = gSystem->BaseName(fontname);
@ -422,7 +423,7 @@ index 758bb98c192..c90d0ac70a9 100644
}
}
@@ -416,28 +551,13 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic)
@@ -411,28 +546,13 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic)
kTTMaxFonts);
Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]);
fgCurFontIdx = 0; // use font 0 (default font, set in ctor)
@ -436,7 +437,7 @@ index 758bb98c192..c90d0ac70a9 100644
- char *ttfont = gSystem->Which(ttpath, fontname, kReadPermission);
-
- if (!ttfont) {
- Error("TTF::SetTextFont", "font file %s not found in path %s", fontname, ttpath);
- Error("TTF::SetTextFont", "font file %s not found in path", fontname);
- if (fgFontCount) {
- Warning("TTF::SetTextFont", "using default font %s", fgFontName[0]);
- fgCurFontIdx = 0; // use font 0 (default font, set in ctor)
@ -453,12 +454,9 @@ index 758bb98c192..c90d0ac70a9 100644
Error("TTF::SetTextFont", "error loading font %s", ttfont);
delete [] ttfont;
if (tface) FT_Done_Face(tface);
@@ -450,24 +570,25 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic)
}
}
@@ -448,19 +568,20 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic)
delete [] ttfont;
- delete [] ttfont;
-
fgFontName[fgFontCount] = StrDup(basename);
+ fgFontIdx[fgFontCount] = ttindex;
+ fgFontIta[fgFontCount] = italic;
@ -479,12 +477,8 @@ index 758bb98c192..c90d0ac70a9 100644
+ FT_Set_Transform( fgFace[fgCurFontIdx], &slantMat, nullptr );
}
+ delete [] ttfont;
+
return 0;
}
@@ -494,70 +615,50 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic)
@@ -489,70 +610,50 @@ Int_t TTF::SetTextFont(const char *fontname, Int_t italic)
void TTF::SetTextFont(Font_t fontnumber)
{
@ -594,7 +588,7 @@ index 758bb98c192..c90d0ac70a9 100644
////////////////////////////////////////////////////////////////////////////////
diff --git a/graf2d/postscript/CMakeLists.txt b/graf2d/postscript/CMakeLists.txt
index eb091bbb396..a05023a3f41 100644
index eb091bbb39..a05023a3f4 100644
--- a/graf2d/postscript/CMakeLists.txt
+++ b/graf2d/postscript/CMakeLists.txt
@@ -27,6 +27,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Postscript
@ -606,7 +600,7 @@ index eb091bbb396..a05023a3f41 100644
Graf
)
diff --git a/graf2d/postscript/src/TPostScript.cxx b/graf2d/postscript/src/TPostScript.cxx
index df9e3ae16ea..1e353e1ca53 100644
index 09ea7ffa9c..180fd5e3c1 100644
--- a/graf2d/postscript/src/TPostScript.cxx
+++ b/graf2d/postscript/src/TPostScript.cxx
@@ -234,6 +234,7 @@ To change the color model use `gStyle->SetColorModelPS(c)`.
@ -617,7 +611,7 @@ index df9e3ae16ea..1e353e1ca53 100644
#include "strlcpy.h"
#include "snprintf.h"
@@ -1584,56 +1585,60 @@ Bool_t TPostScript::FontEmbedType42(const char *filename)
@@ -1585,56 +1586,60 @@ Bool_t TPostScript::FontEmbedType42(const char *filename)
void TPostScript::FontEmbed(void)
{
@ -721,7 +715,7 @@ index df9e3ae16ea..1e353e1ca53 100644
} else {
if (FontEmbedType2(ttfont)) {
// nothing
@@ -1642,12 +1647,13 @@ void TPostScript::FontEmbed(void)
@@ -1643,12 +1648,13 @@ void TPostScript::FontEmbed(void)
} else if(FontEmbedType42(ttfont)) {
// nothing
} else {
@ -739,7 +733,7 @@ index df9e3ae16ea..1e353e1ca53 100644
}
}
PrintStr("%%IncludeResource: font Times-Roman@");
@@ -2836,10 +2842,10 @@ void TPostScript::Text(Double_t xx, Double_t yy, const wchar_t *chars)
@@ -2837,10 +2843,10 @@ void TPostScript::Text(Double_t xx, Double_t yy, const wchar_t *chars)
{ "Root.PSFont.9", "/FreeMonoOblique" },
{ "Root.PSFont.10", "/FreeMonoBold" },
{ "Root.PSFont.11", "/FreeMonoBoldOblique" },
@ -754,10 +748,10 @@ index df9e3ae16ea..1e353e1ca53 100644
{ "Root.PSFont.STIXGenIt", "/STIXGeneral-Italic" },
{ "Root.PSFont.STIXGenBd", "/STIXGeneral-Bold" },
diff --git a/graf3d/gl/CMakeLists.txt b/graf3d/gl/CMakeLists.txt
index e759473ca0f..c453397fc52 100644
index a874da9e1d..5454469606 100644
--- a/graf3d/gl/CMakeLists.txt
+++ b/graf3d/gl/CMakeLists.txt
@@ -211,6 +211,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(RGL
@@ -208,6 +208,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(RGL
${GL2PS_LIBRARIES}
${X11_LIBRARIES}
RGlew
@ -766,7 +760,7 @@ index e759473ca0f..c453397fc52 100644
Hist
Gui
diff --git a/graf3d/gl/src/TGLFontManager.cxx b/graf3d/gl/src/TGLFontManager.cxx
index 58ea1188d59..647642de615 100644
index 776e9d286f..c4134c5980 100644
--- a/graf3d/gl/src/TGLFontManager.cxx
+++ b/graf3d/gl/src/TGLFontManager.cxx
@@ -36,6 +36,7 @@
@ -777,7 +771,7 @@ index 58ea1188d59..647642de615 100644
/** \class TGLFont
\ingroup opengl
@@ -448,16 +449,120 @@ void TGLFontManager::RegisterFont(Int_t sizeIn, Int_t fileID, TGLFont::EMode mod
@@ -450,16 +451,120 @@ void TGLFontManager::RegisterFont(Int_t sizeIn, Int_t fileID, TGLFont::EMode mod
FontMap_i it = fFontMap.find(TGLFont(size, fileID, mode));
if (it == fFontMap.end())
{
@ -908,7 +902,7 @@ index 58ea1188d59..647642de615 100644
FTFont* ftfont = 0;
switch (mode)
diff --git a/graf3d/gl/src/TGLText.cxx b/graf3d/gl/src/TGLText.cxx
index 2ed3ee0917a..03feb0ee0a4 100644
index f84f5193d2..8a672c787c 100644
--- a/graf3d/gl/src/TGLText.cxx
+++ b/graf3d/gl/src/TGLText.cxx
@@ -32,6 +32,8 @@
@ -920,7 +914,7 @@ index 2ed3ee0917a..03feb0ee0a4 100644
#define FTGL_BITMAP 0
#define FTGL_PIXMAP 1
#define FTGL_OUTLINE 2
@@ -175,27 +177,35 @@ void TGLText::SetGLTextFont(Font_t fontnumber)
@@ -176,27 +178,35 @@ void TGLText::SetGLTextFont(Font_t fontnumber)
{
int fontid = fontnumber / 10;
@ -977,7 +971,7 @@ index 2ed3ee0917a..03feb0ee0a4 100644
if (fGLTextFont) delete fGLTextFont;
@@ -203,7 +213,9 @@ void TGLText::SetGLTextFont(Font_t fontnumber)
@@ -204,7 +214,9 @@ void TGLText::SetGLTextFont(Font_t fontnumber)
fGLTextFont = new FTGLPolygonFont(ttfont);
@ -988,6 +982,32 @@ index 2ed3ee0917a..03feb0ee0a4 100644
Error("SetGLTextFont","Cannot set FTGL::FaceSize");
- delete [] ttfont;
}
diff --git a/gui/gui/src/TGApplication.cxx b/gui/gui/src/TGApplication.cxx
index 72d7dbbf95..73a44fdd7f 100644
--- a/gui/gui/src/TGApplication.cxx
+++ b/gui/gui/src/TGApplication.cxx
@@ -81,20 +81,12 @@ TGApplication::TGApplication(const char *appClassName,
gROOT->SetBatch(kFALSE);
if (strcmp(appClassName, "proofserv")) {
- const char *ttpath = gEnv->GetValue("Root.TTFontPath",
- TROOT::GetTTFFontDir());
- char *ttfont = gSystem->Which(ttpath, "arialbd.ttf", kReadPermission);
- // Added by cholm for use of DFSG - fonts - based on fix by Kevin
- if (!ttfont)
- ttfont = gSystem->Which(ttpath, "FreeSansBold.ttf", kReadPermission);
- if (ttfont && gEnv->GetValue("Root.UseTTFonts", 1)) {
+ if (gEnv->GetValue("Root.UseTTFonts", 1)) {
TPluginHandler *h;
if ((h = gROOT->GetPluginManager()->FindHandler("TVirtualX", "x11ttf")))
if (h->LoadPlugin() == -1)
Info("TGApplication", "no TTF support");
}
-
- delete [] ttfont;
}
// Create the canvas colors early so they are allocated before
--
2.52.0
2.45.0

View file

@ -1,32 +0,0 @@
From 7b1632f5602a1bb6e6278d66c25640349c852ab1 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 9 Jan 2026 00:32:27 +0100
Subject: [PATCH] Starting with gcc 16, libstdc++ links to libatomic. Add to
whitelist.
$ ldd /lib64/libstdc++.so.6
linux-vdso.so.1 (0x00007f3cb4c13000)
libm.so.6 => /lib64/libm.so.6 (0x00007f3cb4afc000)
libatomic.so.1 => /lib64/libatomic.so.1 (0x00007f3cb4af1000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3cb460d000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f3cb4ac5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3cb4c15000)
---
bindings/pyroot/pythonizations/test/import_load_libs.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/bindings/pyroot/pythonizations/test/import_load_libs.py b/bindings/pyroot/pythonizations/test/import_load_libs.py
index 63feeca89ba..18906ff921e 100644
--- a/bindings/pyroot/pythonizations/test/import_load_libs.py
+++ b/bindings/pyroot/pythonizations/test/import_load_libs.py
@@ -77,6 +77,7 @@ class ImportLoadLibs(unittest.TestCase):
"ld.*",
"libffi",
"libgcc_s",
+ "libatomic",
# AddressSanitizer runtime and ROOT configuration
"libclang_rt.asan-.*",
"libROOTSanitizerConfig",
--
2.52.0

View file

@ -1,53 +1,16 @@
From b4e57c8ccd59d69fe61fa5f6470b3a99ba52aeeb Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 4 Dec 2025 23:13:28 +0100
Subject: [PATCH] Dont export Python modules
---
bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt | 3 +--
bindings/pyroot/pythonizations/CMakeLists.txt | 8 +-------
2 files changed, 2 insertions(+), 9 deletions(-)
diff --git a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
index bb48c032974..c34069855b2 100644
--- a/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
+++ b/bindings/pyroot/cppyy/CPyCppyy/CMakeLists.txt
@@ -119,8 +119,7 @@ install(TARGETS CPyCppyy EXPORT ${CMAKE_PROJECT_NAME}Exports
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
-install(TARGETS cppyy EXPORT ${CMAKE_PROJECT_NAME}Exports
- RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries # Windows
+install(TARGETS cppyy RUNTIME DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries # Windows
LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries
ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/cppyy COMPONENT libraries)
diff --git a/bindings/pyroot/pythonizations/CMakeLists.txt b/bindings/pyroot/pythonizations/CMakeLists.txt
index 1230f18ca47..2df4b733320 100644
--- a/bindings/pyroot/pythonizations/CMakeLists.txt
+++ b/bindings/pyroot/pythonizations/CMakeLists.txt
@@ -202,11 +202,6 @@ foreach(py_source ${py_sources})
COMMENT "Compiling PyROOT source ${py_source} for Python ${Python3_VERSION}")
endforeach()
-# Create meta-target PyROOT3 (INTERFACE library)
-# Export of targets are not supported for custom targets(add_custom_targets())
-add_library(PyROOT INTERFACE)
--- root-6.32.00/bindings/pyroot/pythonizations/CMakeLists.txt 2024-05-28 06:06:46.000000000 +0200
+++ root-6.32.00/bindings/pyroot/pythonizations/CMakeLists.txt 2024-05-29 09:47:08.960324940 +0200
@@ -189,11 +189,10 @@
# Create meta-target PyROOT3 (INTERFACE library)
# Export of targets are not supported for custom targets(add_custom_targets())
add_library(PyROOT INTERFACE)
-target_link_libraries(PyROOT INTERFACE cppyy_backend cppyy ROOTPythonizations)
-
# Define library output directories for build and install trees
set(pymoduledir_build "${localruntimedir}/ROOT")
set(pymoduledir_install "${CMAKE_INSTALL_PYTHONDIR}/ROOT")
@@ -231,8 +226,7 @@ if(NOT MSVC)
endif()
+target_link_libraries(PyROOT INTERFACE cppyy_backend cppyy)
# Install library
-install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports
- RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries
+install(TARGETS ${libname} RUNTIME DESTINATION ${pymoduledir_install} COMPONENT libraries
LIBRARY DESTINATION ${pymoduledir_install} COMPONENT libraries
ARCHIVE DESTINATION ${pymoduledir_install} COMPONENT libraries)
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries
+install(TARGETS ${libname} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries
LIBRARY DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries
ARCHIVE DESTINATION ${CMAKE_INSTALL_PYTHONDIR} COMPONENT libraries)
--
2.52.0

View file

@ -1,135 +0,0 @@
From 44c501ac9fdb9049783d9738a9603eec572f52f0 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Wed, 26 Nov 2025 18:11:25 +0100
Subject: [PATCH] [vecops] Adaptive size of long RVec instances in RVec test
For the tests to make sense, some vectors need to be longer than the
maximum small vector size. This maximum size is compiler and
architecture dependent. For `RVec<int>` on ARM64 with gcc 14, the
small vector capacity turns out to be 60, which is larger than the
current test vector size of 18.
Therefore, the test is refactored to adapt the large vector size
automatically, according to the maximum small vector size.
---
math/vecops/test/vecops_rvec.cxx | 81 +++++++++++++++++++++++++-------
1 file changed, 63 insertions(+), 18 deletions(-)
diff --git a/math/vecops/test/vecops_rvec.cxx b/math/vecops/test/vecops_rvec.cxx
index 432c673a553..8cbe36ee6d8 100644
--- a/math/vecops/test/vecops_rvec.cxx
+++ b/math/vecops/test/vecops_rvec.cxx
@@ -1672,15 +1672,35 @@ TEST_P(VecOpsSwap, BothSmallVectors)
TEST_P(VecOpsSwap, BothRegularVectors)
{
- RVec<int> fixed_vreg1{1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3};
- RVec<int> fixed_vreg2{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
- RVec<int> fixed_vreg3{7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7};
+ constexpr std::size_t smallVecSize = ROOT::Internal::VecOps::RVecInlineStorageSize<int>::value;
+
+ // The number of elemens in the large RVecs will be the smallest multiple of
+ // three that larger than smallVecSize.
+ constexpr int nCycle = 3;
+ constexpr std::size_t nElems = ((smallVecSize / nCycle) + 1) * nCycle;
+
+ RVec<int> fixed_vreg1(nElems);
+ RVec<int> fixed_vreg2(nElems);
+ RVec<int> fixed_vreg3(nElems + 1);
RVec<int> fixed_vmocksmall{0, 7};
- RVec<int> vreg1{1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3};
- RVec<int> vreg2{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
- RVec<int> vreg3{7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7};
- RVec<int> vmocksmall{0, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 7, 8, 9, 7, 8, 9};
+ RVec<int> vreg1(nElems);
+ RVec<int> vreg2(nElems);
+ RVec<int> vreg3(nElems + 1);
+ RVec<int> vmocksmall(nElems + 1);
+
+ for (std::size_t i = 0; i < nElems; ++i) {
+ vreg1[i] = (i % nCycle) + 1;
+ vreg2[i] = vreg1[i] + nCycle;
+ vreg3[i] = vreg2[i] + nCycle;
+ fixed_vreg1[i] = vreg1[i];
+ fixed_vreg2[i] = vreg2[i];
+ fixed_vreg3[i] = vreg3[i];
+ vmocksmall[i + 1] = vreg3[i];
+ }
+ fixed_vreg3[nElems] = fixed_vreg3[0];
+ vreg3[nElems] = vreg3[0];
+
vmocksmall.erase(vmocksmall.begin() + 2, vmocksmall.end());
// vmocksmall is a regular vector of size 2
@@ -1798,11 +1818,22 @@ TEST_P(VecOpsSwap, BothAdoptingVectors)
// in cases where ROOT::VecOps::swap produces 1 regular and 1 adopting vector
TEST_P(VecOpsSwap, SmallRegularVectors)
{
+ constexpr std::size_t smallVecSize = ROOT::Internal::VecOps::RVecInlineStorageSize<int>::value;
+
+ // The number of elemens in the large RVecs will be the smallest multiple of
+ // three that larger than smallVecSize.
+ constexpr int nCycle = 3;
+ constexpr std::size_t nElems1 = ((smallVecSize / nCycle) + 1) * nCycle;
+ constexpr std::size_t nElems2 = nElems1 + nCycle; // some vectors should be larger than others
+
RVec<int> fixed_vsmall{1, 2, 3};
RVec<int> fixed_vreg1{4, 5, 6};
RVec<int> fixed_vreg2{7, 8};
RVec<int> fixed_vreg3{9, 10, 11, 12, 13, 14};
- RVec<int> fixed_vreg4{15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30};
+ RVec<int> fixed_vreg4(nElems1);
+ for (std::size_t i = 0; i < nElems1; ++i) {
+ fixed_vreg4[i] = i + 15;
+ }
// need multiple hard copies since after swap of a small and a regular,
// there is no fixed policy whether 2 regular vectors are produced or 1 small and 1 regular
@@ -1815,19 +1846,33 @@ TEST_P(VecOpsSwap, SmallRegularVectors)
RVec<int> vsmall7{1, 2, 3};
RVec<int> vsmall8{1, 2, 3};
- RVec<int> vreg1{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
- vreg1.erase(vreg1.begin() + 3, vreg1.end()); // regular vector of size 3
- RVec<int> vreg10{4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
+ RVec<int> vreg1;
+ RVec<int> vreg10;
+ RVec<int> vreg2{7, 8};
+ RVec<int> vreg20{7, 8};
+ RVec<int> vreg3{9, 10, 11, 12, 13, 14};
+ RVec<int> vreg30{9, 10, 11, 12, 13, 14};
+ RVec<int> vreg4(nElems1);
+
+ for (std::size_t i = 0; i < nElems2; ++i) {
+ double val = (i % nCycle) + 4;
+ vreg1.push_back(val);
+ vreg10.push_back(vreg1.back());
+ vreg2.push_back(val);
+ vreg20.push_back(vreg2.back());
+ vreg3.push_back(val);
+ vreg30.push_back(vreg3.back());
+ }
+ for (std::size_t i = 0; i < nElems1; ++i) {
+ vreg4[i] = i + 15;
+ }
+
+ vreg1.erase(vreg1.begin() + 3, vreg1.end()); // regular vector of size 3
vreg10.erase(vreg10.begin() + 3, vreg10.end()); // regular vector of size 3
- RVec<int> vreg2{7, 8, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
- vreg2.erase(vreg2.begin() + 2, vreg2.end()); // regular vector of size 2
- RVec<int> vreg20{7, 8, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
+ vreg2.erase(vreg2.begin() + 2, vreg2.end()); // regular vector of size 2
vreg20.erase(vreg20.begin() + 2, vreg20.end()); // regular vector of size 2
- RVec<int> vreg3{9, 10, 11, 12, 13, 14, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
- vreg3.erase(vreg3.begin() + 6, vreg3.end()); // regular vector of size 6
- RVec<int> vreg30{9, 10, 11, 12, 13, 14, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6};
+ vreg3.erase(vreg3.begin() + 6, vreg3.end()); // regular vector of size 6
vreg30.erase(vreg30.begin() + 6, vreg30.end()); // regular vector of size 6
- RVec<int> vreg4{15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30};
// vreg4 is a regular vector that cannot "fit" to small vector
// verify that initially vectors are not small
--
2.52.0

573
root.spec

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,3 @@
SHA512 (root-6.38.00.tar.xz) = 7c452b509e8171a0cbb7c102a3d4c07333fc8535f1b2c2ab0b9f7434604f098989a78bb71c41039dd41dbbd3438ea8703939826092f075d9d730b6b53c84ac55
SHA512 (root-6.36.04.tar.xz) = d8798d777f308e59ebb3429323895757ca9538499dbb1989d70b3a01c2122b2a01911b0e7da673d7a9fc40acd49fdbf6a5b4341266c1b68a8a88d9f904e7919b
SHA512 (root-testfiles.tar.xz) = 4bb7f8ca00b1427ba49f6428e9cfe5908a2ffdd2ce4134d3bc169a0629198352b5500fe0cf92c121d148e5af41f7016c96038a77794a4d37d94e6ec0a9d75670
SHA512 (clad-2.2.tar.gz) = 6f76d706a829901fc0fcdb38b5ddad6ea8ad9186ea48a4b6b585fc62974a2cda11b96a448c25daaba0586962d6428773e7ab751236c6afa72a91d12f30f2d05e
SHA512 (clad-1.9.tar.gz) = df0569f12e3381e9285639eee927d9effb2812765caad2d281c41f6673828ab28b7bf8143ae9686090649cf889e757cfead58baa47e907de468185125a4d772c