Compare commits

...
Sign in to create a new pull request.

83 commits

Author SHA1 Message Date
Mattias Ellert
e8626580cf Fixes for gcc 16 2026-01-12 00:03:45 +01:00
Mattias Ellert
27b349be2a Fix test for stricter syntax in numpy 2.4.0 (backport) 2025-12-25 17:38:55 +01:00
Mattias Ellert
732511f3a6 Exclude tests for Fedora 43+ on s390x that fail due to hardware
acceleration in the zlib-ng library.
2025-12-20 12:41:20 +01:00
Mattias Ellert
64acc88ed1 Don't install the python modules twice
Fix Requires and Provides in the python3-root rpm
2025-12-18 13:08:34 +01:00
Mattias Ellert
bdcedb0537 Skip RPATH using -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON (replaces
previously used root specific -Drpath:BOOL=OFF no longer available)
Backport fixes to python module
Rebuild for pythia8 8.3.16
2025-12-13 12:55:11 +01:00
Mattias Ellert
bbcab50659 Update to 6.38.00
Removed subpackages: root-proof, root-proof-bench, root-proof-player,
    root-proof-sessionviewer, root-sql-mysql, root-sql-odbc, root-sql-pgsql
New subpackages: root-geom-checker, root-gui-treemap,
    root-tree-ntuple-browse, root-histv7
JsMVA python (sub)module dropped from python3-root package
Compile minuit2 with Open MP support
Dropped patches: 7
New patches: 4
2025-12-09 20:53:49 +01:00
Stephen Gallagher
32ec236e95
Rebuild for libarrow 22
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
2025-10-29 09:28:19 -04:00
Jaroslav Škarvada
f287293ea9 - Rebuilt for new graphviz 2025-10-09 17:11:17 +02:00
Python Maint
84f092c91d Rebuilt for Python 3.14.0rc3 bytecode 2025-09-19 14:53:54 +02:00
Mattias Ellert
da1ca8ff8f Update sources 2025-08-28 06:37:03 +02:00
Mattias Ellert
66c113fcb0 Update to 6.36.04 2025-08-28 02:21:32 +02:00
Jerry James
18473dc6e6 Rebuild for tbb 2022.2.0 2025-08-20 15:52:02 -06:00
Jerry James
895043f78c Rebuild for tbb 2022.2.0 2025-08-20 15:39:40 -06:00
Mattias Ellert
c3014d3347 Fix typo in patch 2025-08-20 08:19:57 +02:00
Mattias Ellert
cb90d9590d Support libarrow 21 2025-08-20 06:32:28 +02:00
Orion Poplawski
3d242ce025 Rebuild for libarrow 21 2025-08-18 07:36:23 -06:00
Python Maint
146af48801 Rebuilt for Python 3.14.0rc2 bytecode 2025-08-15 15:16:09 +02:00
Orion Poplawski
e4856607de Rebuild for libarrow 21 2025-08-13 11:00:08 -06:00
Fedora Release Engineering
f25bdb0931 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-25 12:04:15 +00:00
Mattias Ellert
e076764de0 Disable two failing test for rawhide ppc64le 2025-07-13 18:59:06 +02:00
Mattias Ellert
3a74b8b610 Update to 6.36.02 2025-07-13 07:11:20 +02:00
Stephen Gallagher
2726b64fa0 Rebuilt for libarrow 20
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
2025-07-10 19:21:27 -04:00
Mattias Ellert
0afdff9fae Add root-tree-ntuple and root-tree-ntuple-utils dependensies to root-core
(listed in root-config --libs)
Rename root-fonts package to root-font-files
Add optional test dependency python3-pandas now available in EPEL 10
Add dependency jupyter-notebook to root-jupyroot for EPEL 10.1 and later
Fix Python 3.14 refcount issues in tests
2025-06-21 05:38:04 +02:00
Mattias Ellert
6edd65804f Update to 6.36.00
Enable the R interface for EPEL 10.1
Removed subpackages: root-gui-qt5webdisplay, -hist-draw, -histv7 and -html
New subpackage: root-roofit-codegen
2025-06-09 14:00:51 +02:00
Python Maint
5a76613429 Rebuilt for Python 3.14 2025-06-03 15:33:23 +02:00
Iñaki Úcar
593e746266 R-maint-sig mass rebuild 2025-04-18 22:02:09 +02:00
Iñaki Úcar
ab1aa62b45 R-maint-sig mass rebuild 2025-04-18 20:42:27 +02:00
Iñaki Úcar
aaf51a11c7 R-maint-sig mass rebuild 2025-04-18 13:19:10 +02:00
Mattias Ellert
920e7b2575 Update to 6.34.08 2025-04-17 23:39:33 +02:00
Mattias Ellert
fe8a030c52 Update to 6.34.06
Drop patches accepted upstream or previously backported
2025-03-31 15:19:04 +02:00
Mattias Ellert
450c67721a Fix roofit/roostats test failures with gcc 15 2025-02-19 08:36:52 +01:00
Mattias Ellert
40be88f67c Update to 6.34.04
Drop patches accepted upstream or previously backported
2025-02-14 22:05:06 +01:00
Benjamin A. Beasley
71b6707207 Rebuilt for libarrow 19 2025-02-13 21:44:04 -05:00
Orion Poplawski
b1bbc0fadf Rebuild with gsl 2.8 2025-02-02 13:48:38 -07:00
Björn Esser
02870ffba1
Add explicit BR: libxcrypt-devel
Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2025-02-01 19:57:12 +01:00
Mattias Ellert
3487b3a060 Apply patches to fix build with gcc 15
Enable roofit-multiprocess for EPEL 10 (dependencies available)
Rebuild for pythia8 8.3.13
2025-01-31 13:22:57 +01:00
Fedora Release Engineering
2ad57ba760 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-18 22:37:32 +00:00
Mattias Ellert
745e82c601 Don't add dependencies on root-roofit-multiprocess and root-roofit-zmq
to root-roofit-core for EPEL builds
2025-01-15 06:32:29 +01:00
Mattias Ellert
8d9fc44478 Adjust stressGraphics.ref
Build for EPEL 10
Disable the R interface for EPEL 10 (R not yet abailable)
Enable uring support for EPEL 9 (supported in kernel since RHEL 9.3)
2025-01-12 10:48:54 +01:00
Mattias Ellert
75f062bccd Update to 6.34.02
Build CLAD plugin
Removed package: root-roofit-dataframe-helpers
2024-12-26 10:59:52 +01:00
Richard W.M. Jones
cac5562c15 Rebuild for libarrow 18 2024-11-27 14:35:57 +00:00
Mattias Ellert
6b314d2ebb Update to 6.32.08 2024-11-14 22:31:01 +01:00
Mattias Ellert
5498e74caf Update to 6.32.06
Split out ROOT 7 dependent parts of root-browsable to a separate package
Split out ROOT 7 dependent parts of root-browserv7 to a separate package
2024-09-25 14:02:06 +02:00
Mattias Ellert
59f38a443a Re-enable Qt5 Web display for Fedora 41+ (qt5-qtwebengine fixed) 2024-08-21 16:38:38 +02:00
Mattias Ellert
1617973423 Update to 6.32.04
Drop patches accepted upstream
Disable Qt5 Web display for Fedora 41+ (broken qt5-qtwebengine package)
2024-08-16 06:35:34 +02:00
Mattias Ellert
dafa5d9be6 Update ROOT's R interface for Rcpp 1.0.13 2024-07-21 23:44:51 +02:00
Fedora Release Engineering
c960d44c7d Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-19 18:44:52 +00:00
Mattias Ellert
8bc319c318 Fixes for TUri class (PCRE2 compatibility)
Fix test failure with tbb 2021.13.0
2024-07-12 01:01:14 +02:00
Mattias Ellert
82f076284e Add openssl-devel-engine build requirement on Fedora 41+ 2024-07-11 21:27:50 +02:00
Mattias Ellert
c1e2a7a6b3 Update to 6.32.02
Drop paches accepted upstream
2024-06-18 17:15:43 +02:00
Mattias Ellert
ea27f7093b Add dependency on liburing-devel to root-io
Exclude failing tutorial-tmva-RBatchGenerator_filters_vectors-py test
  on aarch64 (Fedora 40+)
2024-06-18 04:22:08 +02:00
Mattias Ellert
4946c86aea Backport fix for failing test with Python 3.13 2024-06-10 22:42:59 +02:00
Python Maint
48045b2bdf Rebuilt for Python 3.13 2024-06-09 02:47:16 +02:00
Mattias Ellert
559fe2b850 Python 3.13 compatibility 2024-06-08 22:04:11 +02:00
Mattias Ellert
95f73fc33a Update to 6.32.00
Drop EPEL 8 build (now requires Python >= 3.7 ans tbb >= 2020)
Dropped patches: 12
New patches: 6
The JsMVA python module is now a submodule of the ROOT python module
The notebook package was merged with the JupyROOT package
2024-06-07 12:04:22 +02:00
Mattias Ellert
4d9bac3891 Rebuilt for libarrow.so.1601
Improved fontconfig support
2024-05-15 12:58:24 +02:00
Benjamin A. Beasley
0f2b684662 Do not test with Pandas on 32-bit architectures
https://bugzilla.redhat.com/show_bug.cgi?id=2263999
2024-04-28 08:30:34 -04:00
Iñaki Úcar
518c033b52 R-maint-sig mass rebuild 2024-04-25 16:16:49 +02:00
Mattias Ellert
fbaff99ab6 Rebuilt for libarrow.so.1600 2024-04-23 09:53:13 +02:00
Mattias Ellert
d22cdf6344 Update to 6.30.06 2024-04-05 15:37:21 +02:00
Mattias Ellert
29328ac08b Support StandardSymbolsPS.otf 2024-03-25 11:16:05 +01:00
Mattias Ellert
c2cd7682c3 Update to 6.30.04
Drop patch root-adjust-test-for-failures-on-aarch64-ppc64le-s390x.patch
  (accepted upstrem)
Exclude failing TClingDataMemberInfo.Offset test on s390x
2024-02-01 07:40:40 +01:00
Mattias Ellert
a5b9453dc4 Rebuilt for libarrow.so.1500 2024-01-26 23:46:38 +01:00
Mattias Ellert
65481a9244 Exclude failing gtest-math-matrix-test-testMatrixTSparse on Fedora 40
(aarch64, ppc64le and s390x)
2024-01-26 07:10:54 +01:00
Fedora Release Engineering
277c592ff2 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-22 11:52:28 +00:00
Jonathan Wakely
40040121b9 Rebuilt for TBB 2021.11 2024-01-17 23:46:44 +00:00
Mattias Ellert
63c341633f Define PYTHON_EXECUTABLE when calling cmake (Fixes EPEL 8 build) 2024-01-12 20:24:43 +01:00
Mattias Ellert
b4f122310f Adjust tests for zlib-ng 2023-12-21 21:31:38 +01:00
Mattias Ellert
735b7a8692 Use "standardsymbolsps" instead of "symbol" when searching for the
Symbols font in order to not find Noto Symbols instead
2023-12-18 20:23:26 +01:00
Mattias Ellert
9875b6b48a Exclude pyunittests-pyroot-numbadeclare test 2023-12-15 22:08:26 +01:00
Mattias Ellert
6d457ab71f Update to 6.30.02 2023-12-05 13:15:36 +01:00
Mattias Ellert
59989efa5f Update to 6.30.00
Removed subpackages: root-io-gfal and root-roofit-common
Dropped patches: 6
New patches: 6
2023-11-26 16:11:31 +01:00
Mattias Ellert
ae0a791925 Rebuilt for libarrow.so.1400 2023-11-02 12:45:23 +01:00
Mattias Ellert
fb5c22a14d Enable RooFit::MultiProcess on Fedroa 40+ 2023-11-01 13:42:56 +01:00
Mattias Ellert
85ea672407 Update to 6.28.08
New subpackage root-tmva-utils (split off from root-tmva)
Port to pcre2
2023-10-14 23:56:11 +02:00
Mattias Ellert
79c12df5ba Update to 6.28.06
Drop patches root-testRooAbsL-test-compares-two-doubles-and-fails.patch and
  root-strlcpy.patch (fixed upstream)
2023-09-06 23:23:03 +02:00
Mattias Ellert
d58a4c22ba Rebuilt for libarrow.so.1300 2023-08-06 06:49:55 +02:00
Fedora Release Engineering
879bb250d3 Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-21 17:00:48 +00:00
Mattias Ellert
c3f7b6f7f1 Fix build on Fedora 39+ where glibc has strlcpy and strlcat
Enable build of root-gui-qt6webdisplay sub-package if Qt6 is available
2023-07-09 07:02:33 +02:00
Orion Poplawski
08cf4b36a2 Rebuilt for Python 3.12 2023-06-26 08:06:21 -06:00
Mattias Ellert
c39df0d6ce Update to 6.28.04
Drop patch root-RF-Rewrite-RooProdPdf.TestGetPartIntList-unit-test.patch
  (previously backported)
Enable Apache Arrow support (64 bit architectures only)
2023-05-09 21:38:39 +02:00
Iñaki Úcar
0de23e866b R-maint-sig mass rebuild 2023-04-21 12:42:03 +02:00
Mattias Ellert
3365b50fc9 Disable uring in EPEL 9 (liburing is available, but uring not
supported by kernel)
2023-03-23 03:47:57 +01:00
29 changed files with 2532 additions and 2907 deletions

View file

@ -1,7 +1,7 @@
From 70d941cd6ebbc3726e08ef7f52d0135453f0b840 Mon Sep 17 00:00:00 2001
From 55446dcd6eabc1fff218f266c11f31697fe99f09 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 13 Mar 2020 16:21:55 +0100
Subject: [PATCH 2/3] Run tests on 32 bit
Subject: [PATCH] Run tests on 32 bit
---
test/stressGeometry.cxx | 8 --------
@ -9,7 +9,7 @@ Subject: [PATCH 2/3] Run tests on 32 bit
2 files changed, 3 insertions(+), 15 deletions(-)
diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx
index 5e81f5f2ca..18e41a6f45 100644
index f8d78f4f54..617b9e1644 100644
--- a/test/stressGeometry.cxx
+++ b/test/stressGeometry.cxx
@@ -257,14 +257,6 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg
@ -28,26 +28,26 @@ index 5e81f5f2ca..18e41a6f45 100644
TString fname;
for (i=0; i<NG; i++) {
diff --git a/tree/tree/test/CMakeLists.txt b/tree/tree/test/CMakeLists.txt
index 0c1a39d01e..3bafe47934 100644
index 5bb222edc5..f29a17801d 100644
--- a/tree/tree/test/CMakeLists.txt
+++ b/tree/tree/test/CMakeLists.txt
@@ -12,13 +12,9 @@ ROOT_ADD_GTEST(testTOffsetGeneration TOffsetGeneration.cxx ElementStruct.cxx Ele
@@ -17,13 +17,9 @@ endif()
target_include_directories(testTOffsetGeneration PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
ROOT_STANDARD_LIBRARY_PACKAGE(SillyStruct NO_INSTALL_HEADERS HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/SillyStruct.h SOURCES SillyStruct.cxx LINKDEF SillyStructLinkDef.h DEPENDENCIES RIO)
ROOT_ADD_GTEST(testBulkApi BulkApi.cxx LIBRARIES RIO Tree TreePlayer)
-#FIXME: tests are having timeout on 32bit CERN VM (in docker container everything is fine),
-# to be reverted after investigation.
-if(NOT CMAKE_SIZEOF_VOID_P EQUAL 4)
- ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer)
- ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer TIMEOUT 3000)
- ROOT_ADD_GTEST(testBulkApiVarLength BulkApiVarLength.cxx LIBRARIES RIO Tree TreePlayer)
- ROOT_ADD_GTEST(testBulkApiSillyStruct BulkApiSillyStruct.cxx LIBRARIES RIO Tree TreePlayer SillyStruct)
-endif()
+ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer)
+ROOT_ADD_GTEST(testBulkApiMultiple BulkApiMultiple.cxx LIBRARIES RIO Tree TreePlayer TIMEOUT 3000)
+ROOT_ADD_GTEST(testBulkApiVarLength BulkApiVarLength.cxx LIBRARIES RIO Tree TreePlayer)
+ROOT_ADD_GTEST(testBulkApiSillyStruct BulkApiSillyStruct.cxx LIBRARIES RIO Tree TreePlayer SillyStruct)
ROOT_ADD_GTEST(testTBasket TBasket.cxx LIBRARIES RIO Tree)
ROOT_ADD_GTEST(testTBranch TBranch.cxx LIBRARIES RIO Tree MathCore)
ROOT_ADD_GTEST(testTIOFeatures TIOFeatures.cxx LIBRARIES RIO Tree)
--
2.24.1
2.45.1

View file

@ -0,0 +1,49 @@
From f7bfa429deb9dbae9058998888bbcaa84af0ca08 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 2 Dec 2025 05:33:31 +0100
Subject: [PATCH] Adjust test/stressGraphics.ref
---
test/stressGraphics.ref | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/test/stressGraphics.ref b/test/stressGraphics.ref
index 2498ec6d755..4520a5ab113 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
--
2.52.0

View file

@ -0,0 +1,32 @@
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,63 @@
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,70 @@
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

@ -0,0 +1,82 @@
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

@ -1,168 +0,0 @@
From c20004230608a5679ee6c0a7648af5f190c415c9 Mon Sep 17 00:00:00 2001
From: Jonas Rembser <jonas.rembser@cern.ch>
Date: Tue, 7 Mar 2023 11:53:01 +0100
Subject: [PATCH] [RF] Rewrite `RooProdPdf.TestGetPartIntList` unit test
In the ROOT 6.26 development cycle, the RooProdPdf was partially
rewritten in moden C++ with less manual memory allocation to improve
performance (PR #7907).
In that PR, a unit test that verifies the RooProdPdf can correctly deal
with factorizing PDFs was implemented. However, that test used an
arbitrary PDF where the correct factorization was checked in a rather
crude way: check by hashing the content of the RooProdPdf cache element
for a given normalization set that said PR doesn't change any behavior
(the reference hash was hardcoded in the unit test).
This commit suggests a better alternative for the unit test, checking
for a multidimensional product pdf of factorizing uniform pdfs that the
pdf values for differenc normalization sets is as expected. This should
cover the same functionality and is less fragile and implementation
dependend than hashing the cache elements.
This closes GitHub issue #12430, as the rewritten test is not affected
anymore by the problem reported in that issue.
---
roofit/roofitcore/inc/RooProdPdf.h | 2 -
roofit/roofitcore/src/RooProdPdf.cxx | 4 --
roofit/roofitcore/test/testRooProdPdf.cxx | 88 +++++++----------------
3 files changed, 26 insertions(+), 68 deletions(-)
diff --git a/roofit/roofitcore/inc/RooProdPdf.h b/roofit/roofitcore/inc/RooProdPdf.h
index 3d779a4901..0a76c839aa 100644
--- a/roofit/roofitcore/inc/RooProdPdf.h
+++ b/roofit/roofitcore/inc/RooProdPdf.h
@@ -96,8 +96,6 @@ public:
RooArgSet* findPdfNSet(RooAbsPdf const& pdf) const ;
- void writeCacheToStream(std::ostream& os, RooArgSet const* nset) const;
-
std::unique_ptr<RooAbsArg> compileForNormSet(RooArgSet const &normSet, RooFit::Detail::CompileContext & ctx) const override;
private:
diff --git a/roofit/roofitcore/src/RooProdPdf.cxx b/roofit/roofitcore/src/RooProdPdf.cxx
index 8c8c7e01c6..6af7279603 100644
--- a/roofit/roofitcore/src/RooProdPdf.cxx
+++ b/roofit/roofitcore/src/RooProdPdf.cxx
@@ -2324,10 +2324,6 @@ void RooProdPdf::CacheElem::writeToStream(std::ostream& os) const {
}
}
-void RooProdPdf::writeCacheToStream(std::ostream& os, RooArgSet const* nset) const {
- getCacheElem(nset)->writeToStream(os);
-}
-
std::unique_ptr<RooArgSet> RooProdPdf::fillNormSetForServer(RooArgSet const &normSet, RooAbsArg const &server) const
{
if (normSet.empty())
diff --git a/roofit/roofitcore/test/testRooProdPdf.cxx b/roofit/roofitcore/test/testRooProdPdf.cxx
index d794fb415a..ff334211d2 100644
--- a/roofit/roofitcore/test/testRooProdPdf.cxx
+++ b/roofit/roofitcore/test/testRooProdPdf.cxx
@@ -74,76 +74,40 @@ INSTANTIATE_TEST_SUITE_P(RooProdPdf, TestProdPdf,
return ss.str();
});
-std::vector<std::vector<RooAbsArg *>> allPossibleSubset(RooAbsCollection const &arr)
+TEST(RooProdPdf, TestGetPartIntList)
{
- std::vector<std::vector<RooAbsArg *>> out;
- std::size_t n = arr.size();
-
- std::size_t count = std::pow(2, n);
- for (std::size_t i = 0; i < count; i++) {
- out.emplace_back();
- auto &back = out.back();
- for (std::size_t j = 0; j < n; j++) {
- if ((i & (1 << j)) != 0) {
- back.push_back(arr[j]);
- }
- }
- }
- return out;
-}
+ RooHelpers::LocalChangeMsgLevel chmsglvl1{RooFit::ERROR, 0u, RooFit::InputArguments, true};
+ RooHelpers::LocalChangeMsgLevel chmsglvl2{RooFit::WARNING, 0u, RooFit::NumIntegration, true};
-// Hash the integral configuration for all possible normalization sets.
-unsigned int hashRooProduct(RooProdPdf const &prod)
-{
- RooArgSet params;
- prod.getParameters(nullptr, params);
- auto subsets = allPossibleSubset(params);
+ // This test checks if RooProdPdf::getPartIntList factorizes the integrals
+ // as expected, for the example of a three dimensional RooProdPdf.
- std::stringstream ss;
+ RooWorkspace ws;
- for (auto const &subset : subsets) {
- // this can't be on the stack, otherwise we will always get the same
- // address and therefore get wrong cache hits!
- auto nset = std::make_unique<RooArgSet>(subset.begin(), subset.end());
- prod.writeCacheToStream(ss, nset.get());
- }
+ double a = 10.;
+ double b = 4.;
+ double c = 2.5;
- std::string s = ss.str();
- return TString::Hash(s.c_str(), s.size());
-}
+ auto &x = static_cast<RooRealVar &>(*ws.factory("x[0, 0, " + std::to_string(a) + "]"));
+ auto &y = static_cast<RooRealVar &>(*ws.factory("y[0, 0, " + std::to_string(b) + "]"));
+ auto &z = static_cast<RooRealVar &>(*ws.factory("z[0, 0, " + std::to_string(c) + "]"));
-TEST(RooProdPdf, TestGetPartIntList)
-{
- // This test checks if RooProdPdf::getPartIntList factorizes the integrals
- // as expected.
- // Instead of trying to construct tests for all possible cases by hand,
- // this test creates a product where the factors have different patters of
- // overlapping parameters. To make sure all possible cases are covered, we
- // are using all possible subsets of the parameters one after the other to
- // create the reference test result.
-
- RooRealVar x{"x", "x", 1., 0, 10};
- RooRealVar y{"y", "y", 1., 0, 10};
- RooRealVar z{"z", "z", 1., 0, 10};
-
- RooRealVar m1{"m1", "m1", 1., 0, 10};
- RooRealVar m2{"m2", "m2", 1., 0, 10};
- RooRealVar m3{"m3", "m3", 1., 0, 10};
-
- RooGenericPdf gauss1{"gauss1", "gauss1", "x+m1", {x, m1}};
- RooGenericPdf gauss2{"gauss2", "gauss2", "x+m2", {x, m2}};
- RooGenericPdf gauss3{"gauss3", "gauss3", "y+m3", {y, m3}};
- RooGenericPdf gauss4{"gauss4", "gauss4", "z+m1", {z, m1}};
- RooGenericPdf gauss5{"gauss5", "gauss5", "x+m1", {x, m1}};
+ // Factorize the product in one 1D and one 2D pdf to get a more complicated
+ // and complete test case.
+ ws.factory("Uniform::pdf1({x})");
+ ws.factory("Uniform::pdf2({y, z})");
// Product of all the pdfs.
- RooProdPdf prod{"prod", "prod", RooArgList{gauss1, gauss2, gauss3, gauss4, gauss5}};
-
- // We hash the string serializations of caches for all possible
- // normalization sets and compare it to the expected hash.
- // This value must be updated if the convention for integral names in
- // RooProdPdf changes.
- EXPECT_EQ(hashRooProduct(prod), 2448666198);
+ auto &prod = static_cast<RooProdPdf &>(*ws.factory("PROD::prod(pdf1, pdf2)"));
+
+ EXPECT_DOUBLE_EQ(prod.getVal({}), 1.0);
+ EXPECT_DOUBLE_EQ(prod.getVal({x}), 1. / a);
+ EXPECT_DOUBLE_EQ(prod.getVal({y}), 1. / b);
+ EXPECT_DOUBLE_EQ(prod.getVal({z}), 1. / c);
+ EXPECT_DOUBLE_EQ(prod.getVal({x, y}), 1. / a / b);
+ EXPECT_DOUBLE_EQ(prod.getVal({x, z}), 1. / a / c);
+ EXPECT_DOUBLE_EQ(prod.getVal({y, z}), 1. / b / c);
+ EXPECT_DOUBLE_EQ(prod.getVal({x, y, z}), 1. / a / b / c);
}
TEST(RooProdPdf, TestDepsAreCond)
--
2.39.2

View file

@ -0,0 +1,50 @@
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

@ -0,0 +1,60 @@
From 4da50ef374cd231163dff77493f9367cd62583d9 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 30 Mar 2025 21:23:14 +0200
Subject: [PATCH] Revert "[test] Fetch the geometries from EOS and not from the
website"
This reverts commit a8a879ce252e45405452db38d9178c7883582a7d.
---
test/stressGeometry.cxx | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx
index 7fb6bf97e7..f8d78f4f54 100644
--- a/test/stressGeometry.cxx
+++ b/test/stressGeometry.cxx
@@ -1,6 +1,6 @@
// Program to check a TGeo geometry
// The first time you run this program, the geometry files will be taken
-// from /eos/root-eos/testfiles/ (previously from http://root.cern/files)
+// from http://root.cern/files
//
// How the program works
// If the file <geom_name>_ref.root does not exist, it is generated. The file
@@ -274,13 +274,13 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg
delete gGeoManager;
gGeoManager = 0;
}
- TGeoManager::Import(Form("root://eospublic.cern.ch//eos/root-eos/testfiles/%s",fname.Data()));
+ TGeoManager::Import(Form("http://root.cern/files/%s",fname.Data()));
if (!gGeoManager) return;
if (vecgeom) TVirtualGeoConverter::Instance()->ConvertGeometry();
fname = TString::Format("files/%s_ref_%d.root", exps[i],versions[i]);
- if (gen_ref || !TFile::Open(Form("root://eospublic.cern.ch//eos/root-eos/testfiles//%s_ref_%d.root",exps[i],versions[i]),"CACHEREAD")) {
+ if (gen_ref || !TFile::Open(Form("http://root.cern/files/%s_ref_%d.root",exps[i],versions[i]),"CACHEREAD")) {
if (!gen_ref) fprintf(stderr,"File: %s does not exist, generating it\n", fname.Data());
else fprintf(stderr,"Generating reference file %s\n", fname.Data());
WriteRef(i);
@@ -320,7 +320,7 @@ void ReadRef(Int_t kexp) {
TFile *f = 0;
//use ref_[version[i]] files
if (!gen_ref)
- fname = TString::Format("root://eospublic.cern.ch//eos/root-eos/testfiles//%s_ref_%d.root", exps[kexp],versions[kexp]);
+ fname = TString::Format("http://root.cern/files/%s_ref_%d.root", exps[kexp],versions[kexp]);
else
fname.Format("files/%s_ref_%d.root", exps[kexp],versions[kexp]);
@@ -546,7 +546,7 @@ void InspectDiff(const char* exp="alice",Long64_t ientry=-1) {
Float_t rad = 0.;
TString fname(TString::Format("%s.root",exp));
if (gSystem->AccessPathName(fname)) {
- TGeoManager::Import(Form("root://eospublic.cern.ch//eos/root-eos/testfiles//%s",fname.Data()));
+ TGeoManager::Import(Form("http://root.cern/files/%s",fname.Data()));
} else {
TGeoManager::Import(fname);
}
--
2.49.0

View file

@ -0,0 +1,47 @@
From 98a5042a02dd7c1aaa9fbd5e54c8620c6b72484f 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
---
core/clingutils/test/CMakeLists.txt | 3 +++
interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt | 6 ++++++
2 files changed, 9 insertions(+)
diff --git a/core/clingutils/test/CMakeLists.txt b/core/clingutils/test/CMakeLists.txt
index a6c7aedac99..90ac0139c24 100644
--- a/core/clingutils/test/CMakeLists.txt
+++ b/core/clingutils/test/CMakeLists.txt
@@ -36,3 +36,6 @@ if(NOT builtin_clang)
endif()
ROOT_ADD_UNITTEST_DIR(Core ${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
--- a/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
+++ b/interpreter/CppInterOp/unittests/CppInterOp/CMakeLists.txt
@@ -66,6 +66,9 @@ target_link_libraries(CppInterOpTests
clangCppInterOp
)
+# Save memory. Do not link to LLVM libraries in parallel
+add_dependencies(CppInterOpTests DynamicLibraryManagerTests)
+
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
add_dependencies(DynamicLibraryManagerTests TestSharedLib)
+# Save memory. Do not link to LLVM libraries in parallel
+add_dependencies(DynamicLibraryManagerTests Cling)
+
#export_executable_symbols_for_plugins(TestSharedLib)
add_subdirectory(TestSharedLib)
--
2.52.0

View file

@ -0,0 +1,34 @@
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,58 +0,0 @@
From b32c7a1b080cb5d14f242070bf906ea6929d604d Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 25 Mar 2022 11:13:12 +0100
Subject: [PATCH] Byte swap values read from the protobuf raw data stream on
big endian
---
tmva/sofie_parsers/src/RModelParser_ONNX.cxx | 23 +++++++++++++++-----
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
index ab457dcddc..d701fb3299 100644
--- a/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
+++ b/tmva/sofie_parsers/src/RModelParser_ONNX.cxx
@@ -1,3 +1,4 @@
+#include "Byteswap.h"
#include "TMVA/RModelParser_ONNX.hxx"
#include "onnx_proto3.pb.h"
@@ -335,9 +336,14 @@ RModel RModelParser_ONNX::Parse(std::string filename, bool verbose)
case ETensorType::FLOAT: {
std::shared_ptr<void> data(malloc(fLength * sizeof(float)), free);
- if (tensorproto->raw_data().empty() == false) {
- auto raw_data_ptr = reinterpret_cast<float *>(const_cast<char *>(tensorproto->raw_data().c_str()));
- std::memcpy(data.get(), raw_data_ptr, fLength * sizeof(float));
+ if (!tensorproto->raw_data().empty()) {
+#ifdef R__BYTESWAP
+ std::memcpy(data.get(), tensorproto->raw_data().c_str(), fLength * sizeof(float));
+#else
+ for (std::size_t k = 0; k < fLength; ++k)
+ (reinterpret_cast<uint32_t *>(data.get()))[k] =
+ Rbswap_32((reinterpret_cast<const uint32_t *>(tensorproto->raw_data().c_str()))[k]);
+#endif
} else {
tensorproto->mutable_float_data()->ExtractSubrange(0, tensorproto->float_data_size(),
static_cast<float *>(data.get()));
@@ -350,9 +356,14 @@ RModel RModelParser_ONNX::Parse(std::string filename, bool verbose)
case ETensorType::INT64: {
std::shared_ptr<void> data(malloc(fLength * sizeof(int64_t)), free);
- if (tensorproto->raw_data().empty() == false) {
- auto raw_data_ptr = reinterpret_cast<int64_t *>(const_cast<char *>(tensorproto->raw_data().c_str()));
- std::memcpy(data.get(), raw_data_ptr, fLength * sizeof(int64_t));
+ if (!tensorproto->raw_data().empty()) {
+#ifdef R__BYTESWAP
+ std::memcpy(data.get(), tensorproto->raw_data().c_str(), fLength * sizeof(int64_t));
+#else
+ for (std::size_t k = 0; k < fLength; ++k)
+ (reinterpret_cast<uint64_t *>(data.get()))[k] =
+ Rbswap_64((reinterpret_cast<const uint64_t *>(tensorproto->raw_data().c_str()))[k]);
+#endif
} else {
tensorproto->mutable_int64_data()->ExtractSubrange(0, tensorproto->int64_data_size(),
static_cast<int64_t *>(data.get()));
--
2.39.2

View file

@ -0,0 +1,109 @@
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

@ -0,0 +1,46 @@
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

@ -1,44 +0,0 @@
From 0191a987b7583c2aa84b1293105db353fee40b1d Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Fri, 10 Mar 2023 20:49:02 +0100
Subject: [PATCH] Do not remove -Wp, before -D and -U when recording used
compiler flags
This breaks the pattern used when undefining and then defining a
variable in the same flag:
$ echo | g++ -Wp,-UVAR,-DVAR=1 -c -x c++ -
Here -Wp,-UVAR,-DVAR=1 will first undefine VAR and then define it to 1
If the -Wp, is dropped, this fails:
$ echo | g++ -UVAR,-DVAR=1 -c -x c++ -
<command-line>: warning: extra tokens at end of #undef directive
Now it will only undefine VAR, but not defin it. I.e.
insted of
you get
which explains the rather cryptic warning about extra token after #undef.
---
cmake/modules/RootConfiguration.cmake | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmake/modules/RootConfiguration.cmake b/cmake/modules/RootConfiguration.cmake
index 3d1ae9be53..042b43f039 100644
--- a/cmake/modules/RootConfiguration.cmake
+++ b/cmake/modules/RootConfiguration.cmake
@@ -729,7 +729,7 @@ if (cxxmodules)
endif()
string(REGEX REPLACE "(^|[ ]*)-W[^ ]*" "" __fflags "${CMAKE_Fortran_FLAGS}")
-string(REGEX MATCHALL "-(D|U)[^ ]*" __defs "${CMAKE_CXX_FLAGS}")
+string(REGEX MATCHALL "(-Wp,)?-(D|U)[^ ]*" __defs "${CMAKE_CXX_FLAGS}")
set(ROOT_COMPILER_FLAG_HINTS "#
set(ROOT_DEFINITIONS \"${__defs}\")
set(ROOT_CXX_FLAGS \"${__cxxflags}\")
--
2.39.2

View file

@ -1,26 +0,0 @@
From 74aaf99530443a712f9b0577d8edde615ea8902d Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sat, 4 Mar 2023 21:27:35 +0100
Subject: [PATCH] Use FILTER instead of REMOVE_ITEM since GLOB returns absolute
paths
---
build/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build/CMakeLists.txt b/build/CMakeLists.txt
index e964b5e255..2b24b1d6e6 100644
--- a/build/CMakeLists.txt
+++ b/build/CMakeLists.txt
@@ -30,7 +30,7 @@ ROOT_EXECUTABLE(rmkdepend
if(NOT MSVC AND _BUILD_TYPE_UPPER MATCHES "DEBUG|RELWITHDEBINFO")
file(GLOB PRETTY_PRINTERS "gdbPrinters/*.so-gdb.py")
if(NOT roofit)
- list(REMOVE_ITEM PRETTY_PRINTERS gdbPrinters/libRooFitCore.so-gdb.py)
+ list(FILTER PRETTY_PRINTERS EXCLUDE REGEX libRooFitCore.so-gdb.py)
endif()
set(PRETTY_PRINTER_DESTS)
foreach(PRETTY_PRINTER ${PRETTY_PRINTERS})
--
2.39.2

View file

@ -1,44 +0,0 @@
From 15f50c71b4d89bfbf06ce817dee38e843f0f55cd Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Mon, 17 Jan 2022 23:50:47 +0100
Subject: [PATCH] Fix test failure on ppc64le and aarch64 with gcc 12
.../hist/hist/test/test_tprofile2poly.cxx:61: Failure
The difference between cont1 and cont2 is 1.4551915228366852e-11, which exceeds delta, where
cont1 evaluates to 54886.064319363642,
cont2 evaluates to 54886.064319363628, and
delta evaluates to 9.999999960041972e-12.
.../hist/hist/test/test_tprofile2poly.cxx:61: Failure
The difference between cont1 and cont2 is 1.4551915228366852e-11, where
cont1 evaluates to 109868.61342004745,
cont2 evaluates to 109868.61342004743.
The abs_error parameter delta evaluates to 9.999999960041972e-12 which is smaller than the minimum distance between doubles for numbers of this magnitude which is 1.4551915228366852e-11, thus making this EXPECT_NEAR check equivalent to EXPECT_EQUAL. Consider using EXPECT_DOUBLE_EQ instead.
---
hist/hist/test/test_tprofile2poly.cxx | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/hist/hist/test/test_tprofile2poly.cxx b/hist/hist/test/test_tprofile2poly.cxx
index 40cb3052a2..ecf559a4b3 100644
--- a/hist/hist/test/test_tprofile2poly.cxx
+++ b/hist/hist/test/test_tprofile2poly.cxx
@@ -58,15 +58,14 @@ void binEntriesCompare(TProfile2D* tp2d, TProfile2Poly* tpp) {
for(Double_t x=0.5; x<10; x+=2.0) {
cont1 = tp2d->GetBinEffectiveEntries(tp2d->FindBin(x,y));
cont2 = tpp->GetBinEffectiveEntries(tpp->FindBin(x,y));
- ASSERT_NEAR(cont1, cont2, delta);
+ ASSERT_NEAR(cont1, cont2, 2 * delta);
}
}
// test overflow
cont1 = tp2d->GetBinEffectiveEntries(tp2d->FindBin(11,11));
cont2 = tpp->GetBinEffectiveEntries(tpp->FindBin(11,11));
- ASSERT_NEAR(cont1, cont2, delta);
-
+ ASSERT_NEAR(cont1, cont2, 2 * delta);
}
void binErrorCompare(TProfile2D* tp2d, TProfile2Poly* tpp) {
--
2.39.2

View file

@ -1,185 +0,0 @@
From 6f69a59010a60c949b1955e52275137e39a85b82 Mon Sep 17 00:00:00 2001
From: Jakob Blomer <jblomer@cern.ch>
Date: Thu, 9 Mar 2023 15:14:22 +0100
Subject: [PATCH] [ntuple] fixes for 32bit / non-x86_64 builds
---
tree/dataframe/src/RNTupleDS.cxx | 1 +
tree/ntuple/v7/inc/ROOT/RField.hxx | 21 +++++++++++++++++++--
tree/ntuple/v7/test/ntuple_extended.cxx | 8 ++++----
3 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/tree/dataframe/src/RNTupleDS.cxx b/tree/dataframe/src/RNTupleDS.cxx
index f7eb0ab5f284..aaea6df81622 100644
--- a/tree/dataframe/src/RNTupleDS.cxx
+++ b/tree/dataframe/src/RNTupleDS.cxx
@@ -94,6 +94,7 @@ class RRDFCardinalityField : public ROOT::Experimental::Detail::RFieldBase {
return ROOT::Experimental::Detail::RFieldValue(true /* captureFlag */, this, where);
}
size_t GetValueSize() const final { return sizeof(std::size_t); }
+ size_t GetAlignment() const final { return alignof(std::size_t); }
/// Get the number of elements of the collection identified by globalIndex
void
diff --git a/tree/ntuple/v7/inc/ROOT/RField.hxx b/tree/ntuple/v7/inc/ROOT/RField.hxx
index b05267d16030..9a85368a94e3 100644
--- a/tree/ntuple/v7/inc/ROOT/RField.hxx
+++ b/tree/ntuple/v7/inc/ROOT/RField.hxx
@@ -270,8 +270,9 @@ public:
virtual std::vector<RFieldValue> SplitValue(const RFieldValue &value) const;
/// The number of bytes taken by a value of the appropriate type
virtual size_t GetValueSize() const = 0;
- /// For many types, the alignment requirement is equal to the size; otherwise override.
- virtual size_t GetAlignment() const { return GetValueSize(); }
+ /// As a rule of thumb, the alignment is equal to the size of the type. There are, however, various exceptions
+ /// to this rule depending on OS and CPU architecture. So enforce the alignment to be explicitly spelled out.
+ virtual size_t GetAlignment() const = 0;
int GetTraits() const { return fTraits; }
bool HasReadCallbacks() const { return !fReadCallbacks.empty(); }
@@ -383,6 +384,7 @@ public:
Detail::RFieldValue GenerateValue(void*) override { return Detail::RFieldValue(); }
Detail::RFieldValue CaptureValue(void*) final { return Detail::RFieldValue(); }
size_t GetValueSize() const final { return 0; }
+ size_t GetAlignment() const final { return 0; }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -889,6 +891,7 @@ public:
Detail::RColumnElement<ClusterSize_t>(static_cast<ClusterSize_t*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(ClusterSize_t); }
+ size_t GetAlignment() const final { return alignof(ClusterSize_t); }
void CommitCluster() final;
};
@@ -990,6 +993,7 @@ public:
Detail::RColumnElement<ClusterSize_t>(static_cast<ClusterSize_t*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(ClusterSize_t); }
+ size_t GetAlignment() const final { return alignof(ClusterSize_t); }
/// Special help for offset fields
void GetCollectionInfo(NTupleSize_t globalIndex, RClusterIndex *collectionStart, ClusterSize_t *size) {
@@ -1110,6 +1115,7 @@ public:
Detail::RColumnElement<bool>(static_cast<bool*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(bool); }
+ size_t GetAlignment() const final { return alignof(bool); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -1162,6 +1168,7 @@ public:
Detail::RColumnElement<float>(static_cast<float*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(float); }
+ size_t GetAlignment() const final { return alignof(float); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -1215,6 +1222,7 @@ public:
Detail::RColumnElement<double>(static_cast<double*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(double); }
+ size_t GetAlignment() const final { return alignof(double); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -1267,6 +1275,7 @@ public:
Detail::RColumnElement<char>(static_cast<char*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(char); }
+ size_t GetAlignment() const final { return alignof(char); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -1319,6 +1328,7 @@ public:
Detail::RColumnElement<std::int8_t>(static_cast<std::int8_t*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(std::int8_t); }
+ size_t GetAlignment() const final { return alignof(std::int8_t); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -1371,6 +1381,7 @@ public:
Detail::RColumnElement<std::uint8_t>(static_cast<std::uint8_t*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(std::uint8_t); }
+ size_t GetAlignment() const final { return alignof(std::uint8_t); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -1423,6 +1434,7 @@ public:
Detail::RColumnElement<std::int16_t>(static_cast<std::int16_t*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(std::int16_t); }
+ size_t GetAlignment() const final { return alignof(std::int16_t); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -1475,6 +1487,7 @@ public:
Detail::RColumnElement<std::uint16_t>(static_cast<std::uint16_t*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(std::uint16_t); }
+ size_t GetAlignment() const final { return alignof(std::uint16_t); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -1527,6 +1540,7 @@ public:
Detail::RColumnElement<std::int32_t>(static_cast<std::int32_t*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(std::int32_t); }
+ size_t GetAlignment() const final { return alignof(std::int32_t); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -1579,6 +1593,7 @@ public:
Detail::RColumnElement<std::uint32_t>(static_cast<std::uint32_t*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(std::uint32_t); }
+ size_t GetAlignment() const final { return alignof(std::uint32_t); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -1631,6 +1646,7 @@ public:
Detail::RColumnElement<std::uint64_t>(static_cast<std::uint64_t*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(std::uint64_t); }
+ size_t GetAlignment() const final { return alignof(std::uint64_t); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
@@ -1683,6 +1699,7 @@ public:
Detail::RColumnElement<std::int64_t>(static_cast<std::int64_t*>(where)), this, where);
}
size_t GetValueSize() const final { return sizeof(std::int64_t); }
+ size_t GetAlignment() const final { return alignof(std::int64_t); }
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final;
};
diff --git a/tree/ntuple/v7/test/ntuple_extended.cxx b/tree/ntuple/v7/test/ntuple_extended.cxx
index 91871e288e98..d3b6ee466359 100644
--- a/tree/ntuple/v7/test/ntuple_extended.cxx
+++ b/tree/ntuple/v7/test/ntuple_extended.cxx
@@ -123,8 +123,8 @@ TEST(RNTuple, LargeFile1)
RNTupleWriteOptions options;
options.SetCompression(0);
auto ntuple = RNTupleWriter::Recreate(std::move(modelWrite), "myNTuple", fileGuard.GetPath(), options);
- constexpr unsigned long nEvents = 1024 * 1024 * 256; // Exceed 2GB file size
- for (unsigned int i = 0; i < nEvents; ++i) {
+ constexpr std::uint64_t nEvents = 1024 * 1024 * 256; // Exceed 2GB file size
+ for (std::uint64_t i = 0; i < nEvents; ++i) {
wrEnergy = rnd.Rndm();
chksumWrite += wrEnergy;
ntuple->Fill();
@@ -195,8 +195,8 @@ TEST(RNTuple, LargeFile2)
TRandom3 rnd(42);
double chksumWrite = 0.0;
- constexpr unsigned long nEvents = 1024 * 1024 * 256; // Exceed 2GB file size
- for (unsigned int i = 0; i < nEvents; ++i) {
+ constexpr std::uint64_t nEvents = 1024 * 1024 * 256; // Exceed 2GB file size
+ for (std::uint64_t i = 0; i < nEvents; ++i) {
*E = rnd.Rndm();
chksumWrite += *E;
writer->Fill();

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,32 @@
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,36 +0,0 @@
diff -ur root-6.24.02.orig/bindings/jsmva/python/JsMVA/JPyInterface.py root-6.24.02/bindings/jsmva/python/JsMVA/JPyInterface.py
--- root-6.24.02.orig/bindings/jsmva/python/JsMVA/JPyInterface.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/bindings/jsmva/python/JsMVA/JPyInterface.py 2021-08-11 09:06:21.894746090 +0200
@@ -188,7 +188,7 @@
## Class for creating the output scripts and inserting them to cell output
class JsDraw:
## Base repository
- __jsMVARepo = "https://root.cern.ch/js/jsmva/latest"
+ __jsMVARepo = "/static/JsMVA"
## String containing the link to JavaScript files
__jsMVASourceDir = __jsMVARepo + "/js"
diff -ur root-6.24.02.orig/bindings/pyroot_legacy/JsMVA/JPyInterface.py root-6.24.02/bindings/pyroot_legacy/JsMVA/JPyInterface.py
--- root-6.24.02.orig/bindings/pyroot_legacy/JsMVA/JPyInterface.py 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/bindings/pyroot_legacy/JsMVA/JPyInterface.py 2021-08-11 09:06:21.925746168 +0200
@@ -188,7 +188,7 @@
## Class for creating the output scripts and inserting them to cell output
class JsDraw:
## Base repository
- __jsMVARepo = "https://root.cern.ch/js/jsmva/latest"
+ __jsMVARepo = "/static/JsMVA"
## String containing the link to JavaScript files
__jsMVASourceDir = __jsMVARepo + "/js"
diff -ur root-6.24.02.orig/etc/notebook/JsMVA/js/JsMVA.js root-6.24.02/etc/notebook/JsMVA/js/JsMVA.js
--- root-6.24.02.orig/etc/notebook/JsMVA/js/JsMVA.js 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/etc/notebook/JsMVA/js/JsMVA.js 2021-08-11 09:10:45.638410266 +0200
@@ -16,7 +16,7 @@
(function(factory){
- var JSROOT_source_dir = "https://root.cern/js/5.9.1/scripts/";
+ var JSROOT_source_dir = "/static/scripts/";
var url = "";
if (requirejs.s.contexts.hasOwnProperty("_")) {

View file

@ -1,30 +1,53 @@
diff -ur root-6.24.02.orig/bindings/jupyroot/CMakeLists.txt root-6.24.02/bindings/jupyroot/CMakeLists.txt
--- root-6.24.02.orig/bindings/jupyroot/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/bindings/jupyroot/CMakeLists.txt 2021-08-11 10:53:03.272202496 +0200
@@ -70,8 +70,7 @@
endforeach()
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 library
- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports
- 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)
-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 -ur root-6.24.02.orig/bindings/pyroot/pythonizations/CMakeLists.txt root-6.24.02/bindings/pyroot/pythonizations/CMakeLists.txt
--- root-6.24.02.orig/bindings/pyroot/pythonizations/CMakeLists.txt 2021-06-28 11:17:14.000000000 +0200
+++ root-6.24.02/bindings/pyroot/pythonizations/CMakeLists.txt 2021-08-11 10:53:03.272202496 +0200
@@ -137,11 +137,10 @@
# Create meta-target PyROOT2 and PyROOT3 (INTERFACE library)
# Export of targets are not supported for custom targets(add_custom_targets())
add_library(PyROOT${python_major_version_string} INTERFACE)
- target_link_libraries(PyROOT${python_major_version_string} INTERFACE cppyy_backend${python_under_version_string} cppyy${python_under_version_string} ROOTPythonizations${python_under_version_string})
+ target_link_libraries(PyROOT${python_major_version_string} INTERFACE cppyy_backend${python_under_version_string} cppyy${python_under_version_string})
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()
# Install library
- install(TARGETS ${libname} EXPORT ${CMAKE_PROJECT_NAME}Exports
- 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)
-# 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()
# 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)
--
2.52.0

View file

@ -1,37 +0,0 @@
From df2902f6c970aa903200a272fd6a79788da3df4f Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 28 Feb 2023 11:33:28 +0100
Subject: [PATCH] The stressVector test fails on ix86 due to too strict check:
DeltaR TLorentzVector time = 0.2610929 (sec)
DeltaR XYZTVector time = 0.22973299 (sec)
DeltaR PtEtaPhiEVector time = 0.0016570091 (sec)
-12823.3585955796 -12823.35859557827 -12823.35859557827
Test DeltaR failed !!
The new value for the scale parameter (50) was calculated from the
above values:
root [2] (-12823.3585955796 - (-12823.35859557827)) / -12823.3585955796 / std::numeric_limits<double>::epsilon() / 10
(double) 46.762663
---
test/stressVector.cxx | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/test/stressVector.cxx b/test/stressVector.cxx
index 83b86fb2b4..18dc97d421 100644
--- a/test/stressVector.cxx
+++ b/test/stressVector.cxx
@@ -540,8 +540,7 @@ int main(int argc,const char *argv[]) {
s1=a.testDeltaR (v1, t, t1, "DeltaR TLorentzVector " );
s2=a.testDeltaR (v2, t, t2, "DeltaR XYZTVector " );
s3=a.testDeltaR (v3, t, t3, "DeltaR PtEtaPhiEVector " );
- a.check("DeltaR",s1,s2,s3,15);
-
+ a.check("DeltaR", s1, s2, s3, 50);
int n1, n2, n3;
n1 = a.testAnalysis (v1, t, t1, "Analysis1 TLorentzVector " );
--
2.39.2

View file

@ -1,49 +0,0 @@
From d6a11ace0d3d25c96dd20cef1436642b5caa102e Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Tue, 28 Feb 2023 11:02:03 +0100
Subject: [PATCH] The testRooAbsL test compares two doubles and fails due to
rounding errors. The failure happens on ppc64le and aarch64.
This PR changes EXPECT_EQ to EXPECT_DOUBLE_EQ in the affected test.
[ RUN ] SimBinnedConstrainedTest.SubEventSections
/builddir/build/BUILD/root-6.28.00/roofit/roofitcore/test/TestStatistics/testRooAbsL.cxx:293: Failure
Expected equality of these values:
whole.Sum()
Which is: -1263.796050661927
N_events_total_parts.Sum()
Which is: -1263.7960506619268
/builddir/build/BUILD/root-6.28.00/roofit/roofitcore/test/TestStatistics/testRooAbsL.cxx:303: Failure
Expected equality of these values:
whole.Sum()
Which is: -1263.796050661927
thrice_N_events_total_parts.Sum()
Which is: -1263.7960506619268
[ FAILED ] SimBinnedConstrainedTest.SubEventSections (199 ms)
---
roofit/roofitcore/test/TestStatistics/testRooAbsL.cxx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/roofit/roofitcore/test/TestStatistics/testRooAbsL.cxx b/roofit/roofitcore/test/TestStatistics/testRooAbsL.cxx
index 600f4da7be..05dcd6a241 100644
--- a/roofit/roofitcore/test/TestStatistics/testRooAbsL.cxx
+++ b/roofit/roofitcore/test/TestStatistics/testRooAbsL.cxx
@@ -293,7 +293,7 @@ TEST_F(SimBinnedConstrainedTest, SubEventSections)
{static_cast<double>(ix) / N_events_total, static_cast<double>(ix + 1) / N_events_total}, 0,
likelihood->getNComponents());
}
- EXPECT_EQ(whole.Sum(), N_events_total_parts.Sum());
+ EXPECT_DOUBLE_EQ(whole.Sum(), N_events_total_parts.Sum());
// now let's do it again over a number of sections 3 times the number of events
ROOT::Math::KahanSum<double> thrice_N_events_total_parts;
@@ -303,5 +303,5 @@ TEST_F(SimBinnedConstrainedTest, SubEventSections)
{static_cast<double>(ix) / (3 * N_events_total), static_cast<double>(ix + 1) / (3 * N_events_total)}, 0,
likelihood->getNComponents());
}
- EXPECT_EQ(whole.Sum(), thrice_N_events_total_parts.Sum());
+ EXPECT_DOUBLE_EQ(whole.Sum(), thrice_N_events_total_parts.Sum());
}
--
2.39.2

View file

@ -72,14 +72,7 @@ wget -N ${SITE}/tesla.root
wget -N ${SITE}/wa91_ref_3.root
wget -N ${SITE}/wa91.root
wget -N ${SITE}/AtlasGraphs.root
wget -N ${SITE}/europe.root
wget -N ${SITE}/Higgs_data.root
wget -N ${SITE}/linearIO.root
wget -N ${SITE}/stressHistogram.5.18.00.root
wget -N ${SITE}/tmva_class_example.root
wget -N ${SITE}/tmva_multiclass_example.root
wget -N ${SITE}/tmva_reg_example.root
wget -N ${SITE}/usa.root
for f in *.root ; do ln -s $f $f.ROOT.cachefile ; done

View file

@ -1,86 +0,0 @@
From e6928c405fe1647a0ee6ea32543b18ebc3828227 Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Thu, 23 Feb 2023 22:10:46 +0100
Subject: [PATCH] Use consistent wording of the comments in the different TMVA
classification tests to avoid confusion.
---
tutorials/tmva/TMVA_CNN_Classification.C | 2 +-
tutorials/tmva/TMVA_CNN_Classification.py | 4 ++--
tutorials/tmva/TMVA_RNN_Classification.C | 6 ++++--
tutorials/tmva/TMVA_RNN_Classification.py | 5 +++--
4 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/tutorials/tmva/TMVA_CNN_Classification.C b/tutorials/tmva/TMVA_CNN_Classification.C
index cc6829a24d..db5af784d4 100644
--- a/tutorials/tmva/TMVA_CNN_Classification.C
+++ b/tutorials/tmva/TMVA_CNN_Classification.C
@@ -134,7 +134,7 @@ void TMVA_CNN_Classification(int nevts = 1000, std::vector<bool> opt = {1, 1, 1,
bool writeOutputFile = true;
- int num_threads = 4; // use by default 4 threads if value is not set before
+ int num_threads = 4; // use max 4 threads
// switch off MT in OpenBLAS to avoid conflict with tbb
gSystem->Setenv("OMP_NUM_THREADS", "1");
diff --git a/tutorials/tmva/TMVA_CNN_Classification.py b/tutorials/tmva/TMVA_CNN_Classification.py
index 85fde20763..5d3c6e7220 100644
--- a/tutorials/tmva/TMVA_CNN_Classification.py
+++ b/tutorials/tmva/TMVA_CNN_Classification.py
@@ -25,7 +25,7 @@
import ROOT
-#switch off MT in OpenMP (BLAS)
+# switch off MT in OpenBLAS to avoid conflict with tbb
ROOT.gSystem.Setenv("OMP_NUM_THREADS", "1")
TMVA = ROOT.TMVA
@@ -145,7 +145,7 @@ if not useTMVACNN:
writeOutputFile = True
-num_threads = 4 # use default threads
+num_threads = 4 # use max 4 threads
max_epochs = 10 # maximum number of epochs used for training
diff --git a/tutorials/tmva/TMVA_RNN_Classification.C b/tutorials/tmva/TMVA_RNN_Classification.C
index 8701ba6c19..d4bb7a4e4a 100644
--- a/tutorials/tmva/TMVA_RNN_Classification.C
+++ b/tutorials/tmva/TMVA_RNN_Classification.C
@@ -191,8 +191,10 @@ void TMVA_RNN_Classification(int nevts = 2000, int use_type = 1)
useKeras = false;
#endif
- int num_threads = 4; // use by default all threads
- gSystem->Setenv("OMP_NUM_THREADS", "1"); // switch off MT in OpenBLAS
+ int num_threads = 4; // use max 4 threads
+ // switch off MT in OpenBLAS to avoid conflict with tbb
+ gSystem->Setenv("OMP_NUM_THREADS", "1");
+
// do enable MT running
if (num_threads >= 0) {
ROOT::EnableImplicitMT(num_threads);
diff --git a/tutorials/tmva/TMVA_RNN_Classification.py b/tutorials/tmva/TMVA_RNN_Classification.py
index 625a120b3d..65aa83c070 100644
--- a/tutorials/tmva/TMVA_RNN_Classification.py
+++ b/tutorials/tmva/TMVA_RNN_Classification.py
@@ -26,10 +26,11 @@ num_threads = 4 # use max 4 threads
# do enable MT running
if ROOT.gSystem.GetFromPipe("root-config --has-imt") == "yes":
ROOT.EnableImplicitMT(num_threads)
- ROOT.gSystem.Setenv("OMP_NUM_THREADS", "1") # switch OFF MT in OpenBLAS
+ # switch off MT in OpenBLAS to avoid conflict with tbb
+ ROOT.gSystem.Setenv("OMP_NUM_THREADS", "1")
print("Running with nthreads = {}".format(ROOT.GetThreadPoolSize()))
else:
- print("Running in serail mode since ROOT does not support MT")
+ print("Running in serial mode since ROOT does not support MT")
TMVA = ROOT.TMVA
--
2.39.2

View file

@ -0,0 +1,135 @@
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

2286
root.spec

File diff suppressed because it is too large Load diff

View file

@ -1,2 +1,3 @@
SHA512 (root-6.28.02.tar.xz) = acc1d1e31cb368f499dee0244936b78042cb21e5072cebcc4cc7d05f505359b7ecab3383a13311d8af7a67db72f31fe482dcaa54724c4b02194ffb98894e669f
SHA512 (root-testfiles.tar.xz) = 945aef1a0cf5af672d4ab84b0ac00b76118e93008ff72447658ee82d9e955a1540af3ff7126e701418872f1d91b92ee96d4985840a519036c42732023a13f00f
SHA512 (root-6.38.00.tar.xz) = 7c452b509e8171a0cbb7c102a3d4c07333fc8535f1b2c2ab0b9f7434604f098989a78bb71c41039dd41dbbd3438ea8703939826092f075d9d730b6b53c84ac55
SHA512 (root-testfiles.tar.xz) = 4bb7f8ca00b1427ba49f6428e9cfe5908a2ffdd2ce4134d3bc169a0629198352b5500fe0cf92c121d148e5af41f7016c96038a77794a4d37d94e6ec0a9d75670
SHA512 (clad-2.2.tar.gz) = 6f76d706a829901fc0fcdb38b5ddad6ea8ad9186ea48a4b6b585fc62974a2cda11b96a448c25daaba0586962d6428773e7ab751236c6afa72a91d12f30f2d05e