Compare commits
74 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8626580cf | ||
|
|
27b349be2a | ||
|
|
732511f3a6 | ||
|
|
64acc88ed1 | ||
|
|
bdcedb0537 | ||
|
|
bbcab50659 | ||
|
|
32ec236e95 |
||
|
|
f287293ea9 | ||
|
|
84f092c91d | ||
|
|
da1ca8ff8f | ||
|
|
66c113fcb0 | ||
|
|
18473dc6e6 | ||
|
|
895043f78c | ||
|
|
c3014d3347 | ||
|
|
cb90d9590d | ||
|
|
3d242ce025 | ||
|
|
146af48801 | ||
|
|
e4856607de | ||
|
|
f25bdb0931 | ||
|
|
e076764de0 | ||
|
|
3a74b8b610 | ||
|
|
2726b64fa0 | ||
|
|
0afdff9fae | ||
|
|
6edd65804f | ||
|
|
5a76613429 | ||
|
|
593e746266 | ||
|
|
ab1aa62b45 | ||
|
|
aaf51a11c7 | ||
|
|
920e7b2575 | ||
|
|
fe8a030c52 | ||
|
|
450c67721a | ||
|
|
40be88f67c | ||
|
|
71b6707207 | ||
|
|
b1bbc0fadf | ||
|
|
02870ffba1 |
||
|
|
3487b3a060 | ||
|
|
2ad57ba760 | ||
|
|
745e82c601 | ||
|
|
8d9fc44478 | ||
|
|
75f062bccd | ||
|
|
cac5562c15 | ||
|
|
6b314d2ebb | ||
|
|
5498e74caf | ||
|
|
59f38a443a | ||
|
|
1617973423 | ||
|
|
dafa5d9be6 | ||
|
|
c960d44c7d | ||
|
|
8bc319c318 | ||
|
|
82f076284e | ||
|
|
c1e2a7a6b3 | ||
|
|
ea27f7093b | ||
|
|
4946c86aea | ||
|
|
48045b2bdf | ||
|
|
559fe2b850 | ||
|
|
95f73fc33a | ||
|
|
4d9bac3891 | ||
|
|
0f2b684662 | ||
|
|
518c033b52 | ||
|
|
fbaff99ab6 | ||
|
|
d22cdf6344 | ||
|
|
29328ac08b | ||
|
|
c2cd7682c3 | ||
|
|
a5b9453dc4 | ||
|
|
65481a9244 | ||
|
|
277c592ff2 | ||
|
|
40040121b9 | ||
|
|
63c341633f | ||
|
|
b4f122310f | ||
|
|
735b7a8692 | ||
|
|
9875b6b48a | ||
|
|
6d457ab71f | ||
|
|
59989efa5f | ||
|
|
ae0a791925 | ||
|
|
fb5c22a14d |
31 changed files with 2433 additions and 3238 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
49
root-Adjust-test-stressGraphics.ref.patch
Normal file
49
root-Adjust-test-stressGraphics.ref.patch
Normal 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
|
||||
|
||||
32
root-Fix-a-numpy-test-for-32-bit-archs.patch
Normal file
32
root-Fix-a-numpy-test-for-32-bit-archs.patch
Normal 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
|
||||
|
||||
63
root-Geom-Add-missing-includes-of-TMath.h.patch
Normal file
63
root-Geom-Add-missing-includes-of-TMath.h.patch
Normal 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
|
||||
|
||||
70
root-PyROOT-Don-t-install-the-python-modules-twice.patch
Normal file
70
root-PyROOT-Don-t-install-the-python-modules-twice.patch
Normal 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
|
||||
|
||||
82
root-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch
Normal file
82
root-Python-Fix-TF1-Pythonization-test-for-NumPy-2.4.0.patch
Normal 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
|
||||
|
||||
50
root-RF-Use-TRandom3-in-test-RooFuncWrapper.patch
Normal file
50
root-RF-Use-TRandom3-in-test-RooFuncWrapper.patch
Normal 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 ¶meters)
|
||||
{
|
||||
+ 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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
From 2b3dd4f1bfecea5b1b936d5507f8b0c664322a19 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Rembser <jonas.rembser@cern.ch>
|
||||
Date: Wed, 6 Sep 2023 02:16:33 +0200
|
||||
Subject: [PATCH] [RF][PyROOT] Avoid boolean operators on numpy arrays in unit
|
||||
test
|
||||
|
||||
The `n_in_range` reference value in the unit test
|
||||
`roodataset_numpy.TestRooDataSetNumpy.test_ignoring_out_of_range`
|
||||
apparently doesn't get computed right on some 32 platforms.
|
||||
|
||||
I can't reproduce the problem, but I'm sure it will be fixed by avoiding
|
||||
the use of the operators `&` and `|` with numpy arrays. Just doing a
|
||||
manual loop in Python should be more platform independent.
|
||||
|
||||
Closes #12162.
|
||||
---
|
||||
.../pythonizations/test/roofit/roodataset_numpy.py | 12 +++++++++---
|
||||
1 file changed, 9 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/bindings/pyroot/pythonizations/test/roofit/roodataset_numpy.py b/bindings/pyroot/pythonizations/test/roofit/roodataset_numpy.py
|
||||
index 79259af321..5587677c45 100644
|
||||
--- a/bindings/pyroot/pythonizations/test/roofit/roodataset_numpy.py
|
||||
+++ b/bindings/pyroot/pythonizations/test/roofit/roodataset_numpy.py
|
||||
@@ -135,9 +135,15 @@ class TestRooDataSetNumpy(unittest.TestCase):
|
||||
cat.defineType("minus", -1)
|
||||
cat.defineType("plus", +1)
|
||||
|
||||
- in_x_range = (data["x"] <= x.getMax()) & (data["x"] >= x.getMin())
|
||||
- in_cat_range = (data["cat"] == -1) | (data["cat"] == +1)
|
||||
- n_in_range = np.sum(in_x_range & in_cat_range)
|
||||
+ # Use manual loop because we had some problems with numpys boolean
|
||||
+ # comparisions in the past (see GitHub issue #12162).
|
||||
+ n_in_range = 0
|
||||
+ for i in range(n_events):
|
||||
+ in_x_range = data["x"][i] <= x.getMax() and data["x"][i] >= x.getMin()
|
||||
+ in_cat_range = (data["cat"][i] == -1) or (data["cat"][i] == +1)
|
||||
+ is_in_range = in_x_range and in_cat_range
|
||||
+ if is_in_range:
|
||||
+ n_in_range = n_in_range + 1
|
||||
|
||||
dataset_numpy = ROOT.RooDataSet.from_numpy(data, {x, cat}, name="dataSetNumpy")
|
||||
|
||||
--
|
||||
2.41.0
|
||||
|
||||
109
root-cppyy-Remove-code-related-to-finding-CPyCppyy-API-he.patch
Normal file
109
root-cppyy-Remove-code-related-to-finding-CPyCppyy-API-he.patch
Normal 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
|
||||
|
||||
46
root-cppyy-Remove-now-irrelevant-load_cpp_backend-call.patch
Normal file
46
root-cppyy-Remove-now-irrelevant-load_cpp_backend-call.patch
Normal 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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
32
root-gcc-16-libstdc-links-to-libatomic.patch
Normal file
32
root-gcc-16-libstdc-links-to-libatomic.patch
Normal 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
|
||||
|
||||
|
|
@ -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("_")) {
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -1,52 +0,0 @@
|
|||
diff -ur root-6.28.06.orig/core/base/CMakeLists.txt root-6.28.06/core/base/CMakeLists.txt
|
||||
--- root-6.28.06.orig/core/base/CMakeLists.txt 2023-08-28 13:26:43.000000000 +0200
|
||||
+++ root-6.28.06/core/base/CMakeLists.txt 2023-10-02 01:53:35.956143717 +0200
|
||||
@@ -212,9 +212,15 @@
|
||||
|
||||
ROOT_OBJECT_LIBRARY(Base ${BASE_SOURCES})
|
||||
|
||||
+if (PCRE2_FOUND)
|
||||
+ set(PCRE_INCDIR ${PCRE2_INCLUDE_DIR})
|
||||
+else()
|
||||
+ set(PCRE_INCDIR ${PCRE_INCLUDE_DIR})
|
||||
+endif()
|
||||
+
|
||||
target_include_directories(Base PRIVATE
|
||||
${BASE_V7_INC}
|
||||
- ${PCRE_INCLUDE_DIR}
|
||||
+ ${PCRE_INCDIR}
|
||||
res
|
||||
${CMAKE_SOURCE_DIR}/core/foundation/res
|
||||
${CMAKE_SOURCE_DIR}/core/clib/inc
|
||||
@@ -237,6 +243,11 @@
|
||||
${CMAKE_BINARY_DIR}/ginclude/TApplicationCommandLineOptionsHelp.h
|
||||
)
|
||||
|
||||
+if(PCRE2_FOUND)
|
||||
+ set_source_files_properties(src/TPRegexp.cxx
|
||||
+ PROPERTIES COMPILE_DEFINITIONS USE_PCRE2)
|
||||
+endif()
|
||||
+
|
||||
ROOT_INSTALL_HEADERS(${BASE_HEADER_DIRS})
|
||||
|
||||
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/man)
|
||||
diff -ur root-6.28.06.orig/core/CMakeLists.txt root-6.28.06/core/CMakeLists.txt
|
||||
--- root-6.28.06.orig/core/CMakeLists.txt 2023-08-28 13:26:43.000000000 +0200
|
||||
+++ root-6.28.06/core/CMakeLists.txt 2023-10-02 01:47:00.134174041 +0200
|
||||
@@ -261,9 +261,15 @@
|
||||
|
||||
target_include_directories(G__Core PRIVATE ${CMAKE_SOURCE_DIR}/core/clingutils/inc)
|
||||
|
||||
+if (PCRE2_FOUND)
|
||||
+ set (PCRE_TGT PCRE2::PCRE2)
|
||||
+else()
|
||||
+ set (PCRE_TGT PCRE::PCRE)
|
||||
+endif()
|
||||
+
|
||||
target_link_libraries(Core
|
||||
PRIVATE
|
||||
- PCRE::PCRE
|
||||
+ ${PCRE_TGT}
|
||||
${LIBLZMA_LIBRARIES}
|
||||
xxHash::xxHash
|
||||
LZ4::LZ4
|
||||
436
root-pcre2.patch
436
root-pcre2.patch
|
|
@ -1,436 +0,0 @@
|
|||
From f89fc640f9ca1b2cccf0dc496b0b7ea434b53fad Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Ellert <mattias.ellert@physics.uu.se>
|
||||
Date: Mon, 2 Oct 2023 09:25:13 +0200
|
||||
Subject: [PATCH] Support PCRE2
|
||||
|
||||
---
|
||||
.../pythonizations/test/import_load_libs.py | 1 +
|
||||
cmake/modules/FindPCRE2.cmake | 106 ++++++++++++++++++
|
||||
cmake/modules/SearchInstalledSoftware.cmake | 17 +--
|
||||
core/base/CMakeLists.txt | 9 +-
|
||||
core/base/src/TPRegexp.cxx | 99 +++++++++++++++-
|
||||
tutorials/legacy/regexp/regexp.C | 6 +-
|
||||
6 files changed, 223 insertions(+), 15 deletions(-)
|
||||
create mode 100644 cmake/modules/FindPCRE2.cmake
|
||||
|
||||
diff --git a/bindings/pyroot/pythonizations/test/import_load_libs.py b/bindings/pyroot/pythonizations/test/import_load_libs.py
|
||||
index 087db7da5c..179c76f6fd 100644
|
||||
--- a/bindings/pyroot/pythonizations/test/import_load_libs.py
|
||||
+++ b/bindings/pyroot/pythonizations/test/import_load_libs.py
|
||||
@@ -23,6 +23,7 @@ class ImportLoadLibs(unittest.TestCase):
|
||||
'libc',
|
||||
'libdl',
|
||||
'libpcre',
|
||||
+ 'libpcre2-8',
|
||||
# libCling and dependencies
|
||||
'libCling.*',
|
||||
'librt',
|
||||
diff --git a/cmake/modules/FindPCRE2.cmake b/cmake/modules/FindPCRE2.cmake
|
||||
new file mode 100644
|
||||
index 0000000000..2417453e8b
|
||||
--- /dev/null
|
||||
+++ b/cmake/modules/FindPCRE2.cmake
|
||||
@@ -0,0 +1,106 @@
|
||||
+# Copyright (C) 1995-2019, Rene Brun and Fons Rademakers.
|
||||
+# All rights reserved.
|
||||
+#
|
||||
+# For the licensing terms see $ROOTSYS/LICENSE.
|
||||
+# For the list of contributors see $ROOTSYS/README/CREDITS.
|
||||
+
|
||||
+#.rst:
|
||||
+# FindPCRE2
|
||||
+# --------
|
||||
+#
|
||||
+# Find PCRE2 library
|
||||
+#
|
||||
+# Imported Targets
|
||||
+# ^^^^^^^^^^^^^^^^
|
||||
+#
|
||||
+# This module defines :prop_tgt:`IMPORTED` target:
|
||||
+#
|
||||
+# ``PCRE2::PCRE2``
|
||||
+# The pcre2 library, if found.
|
||||
+#
|
||||
+# Result Variables
|
||||
+# ^^^^^^^^^^^^^^^^
|
||||
+# This module will set the following variables in your project:
|
||||
+#
|
||||
+# ``PCRE2_FOUND``
|
||||
+# True if PCRE2 has been found.
|
||||
+# ``PCRE2_INCLUDE_DIRS``
|
||||
+# Where to find pcre2.h
|
||||
+# ``PCRE2_LIBRARIES``
|
||||
+# The libraries to link against to use PCRE2.
|
||||
+# ``PCRE2_VERSION``
|
||||
+# The version of the PCRE2 found (e.g. 10.42)
|
||||
+#
|
||||
+# Obsolete variables
|
||||
+# ^^^^^^^^^^^^^^^^^^
|
||||
+#
|
||||
+# The following variables may also be set, for backwards compatibility:
|
||||
+#
|
||||
+# ``PCRE2_PCRE2_LIBRARY``
|
||||
+# where to find the PCRE2_PCRE2 library.
|
||||
+# ``PCRE2_INCLUDE_DIR``
|
||||
+# where to find the pcre2.h header (same as PCRE2_INCLUDE_DIRS)
|
||||
+#
|
||||
+
|
||||
+foreach(var PCRE2_FOUND PCRE2_INCLUDE_DIR PCRE2_PCRE2_LIBRARY PCRE2_LIBRARIES)
|
||||
+ unset(${var} CACHE)
|
||||
+endforeach()
|
||||
+
|
||||
+find_path(PCRE2_INCLUDE_DIR NAMES pcre2.h PATH_SUFFIXES include)
|
||||
+mark_as_advanced(PCRE2_INCLUDE_DIR)
|
||||
+
|
||||
+if (PCRE2_INCLUDE_DIR AND EXISTS "${PCRE2_INCLUDE_DIR}/pcre2.h")
|
||||
+ file(STRINGS "${PCRE2_INCLUDE_DIR}/pcre2.h" PCRE2_H REGEX "^#define PCRE2_(MAJOR|MINOR).*$")
|
||||
+ string(REGEX REPLACE "^.*PCRE2_MAJOR[ ]+([0-9]+).*$" "\\1" PCRE2_VERSION_MAJOR "${PCRE2_H}")
|
||||
+ string(REGEX REPLACE "^.*PCRE2_MINOR[ ]+([0-9]+).*$" "\\1" PCRE2_VERSION_MINOR "${PCRE2_H}")
|
||||
+ set(PCRE2_VERSION "${PCRE2_VERSION_MAJOR}.${PCRE2_VERSION_MINOR}")
|
||||
+endif()
|
||||
+
|
||||
+if(NOT PCRE2_PCRE2_LIBRARY)
|
||||
+ find_library(PCRE2_PCRE2_LIBRARY_RELEASE NAMES pcre2-8)
|
||||
+ find_library(PCRE2_PCRE2_LIBRARY_DEBUG NAMES pcre2-8${CMAKE_DEBUG_POSTFIX} pcre2-8d)
|
||||
+ include(SelectLibraryConfigurations)
|
||||
+ select_library_configurations(PCRE2_PCRE2)
|
||||
+endif()
|
||||
+
|
||||
+include(FindPackageHandleStandardArgs)
|
||||
+find_package_handle_standard_args(PCRE2
|
||||
+ REQUIRED_VARS
|
||||
+ PCRE2_INCLUDE_DIR
|
||||
+ PCRE2_PCRE2_LIBRARY
|
||||
+ VERSION_VAR
|
||||
+ PCRE2_VERSION
|
||||
+)
|
||||
+
|
||||
+if(PCRE2_FOUND)
|
||||
+ set(PCRE2_INCLUDE_DIRS "${PCRE2_INCLUDE_DIR}")
|
||||
+
|
||||
+ if (NOT PCRE2_LIBRARIES)
|
||||
+ set(PCRE2_LIBRARIES "${PCRE2_PCRE2_LIBRARY}")
|
||||
+ endif()
|
||||
+
|
||||
+ if(NOT TARGET PCRE2::PCRE2)
|
||||
+ add_library(PCRE2::PCRE2 UNKNOWN IMPORTED)
|
||||
+ set_target_properties(PCRE2::PCRE2 PROPERTIES
|
||||
+ INTERFACE_INCLUDE_DIRECTORIES "${PCRE2_INCLUDE_DIRS}")
|
||||
+
|
||||
+ if(PCRE2_PCRE2_LIBRARY_DEBUG)
|
||||
+ set_property(TARGET PCRE2::PCRE2 APPEND PROPERTY
|
||||
+ IMPORTED_CONFIGURATIONS DEBUG)
|
||||
+ set_target_properties(PCRE2::PCRE2 PROPERTIES
|
||||
+ IMPORTED_LOCATION_DEBUG "${PCRE2_PCRE2_LIBRARY_DEBUG}")
|
||||
+ endif()
|
||||
+
|
||||
+ if(PCRE2_PCRE2_LIBRARY_RELEASE)
|
||||
+ set_property(TARGET PCRE2::PCRE2 APPEND PROPERTY
|
||||
+ IMPORTED_CONFIGURATIONS RELEASE)
|
||||
+ set_target_properties(PCRE2::PCRE2 PROPERTIES
|
||||
+ IMPORTED_LOCATION_RELEASE "${PCRE2_PCRE2_LIBRARY_RELEASE}")
|
||||
+ endif()
|
||||
+
|
||||
+ if(NOT PCRE2_PCRE2_LIBRARY_DEBUG AND NOT PCRE2_PCRE2_LIBRARY_RELEASE)
|
||||
+ set_property(TARGET PCRE2::PCRE2 APPEND PROPERTY
|
||||
+ IMPORTED_LOCATION "${PCRE2_PCRE2_LIBRARY}")
|
||||
+ endif()
|
||||
+ endif()
|
||||
+endif()
|
||||
diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake
|
||||
index 464155fd50..252aa56737 100644
|
||||
--- a/cmake/modules/SearchInstalledSoftware.cmake
|
||||
+++ b/cmake/modules/SearchInstalledSoftware.cmake
|
||||
@@ -204,13 +204,16 @@ if(NOT builtin_pcre)
|
||||
foreach(suffix FOUND INCLUDE_DIR PCRE_LIBRARY)
|
||||
unset(PCRE_${suffix} CACHE)
|
||||
endforeach()
|
||||
- if(fail-on-missing)
|
||||
- find_package(PCRE REQUIRED)
|
||||
- else()
|
||||
- find_package(PCRE)
|
||||
- if(NOT PCRE_FOUND)
|
||||
- message(STATUS "PCRE not found. Switching on builtin_pcre option")
|
||||
- set(builtin_pcre ON CACHE BOOL "Enabled because PCRE not found (${builtin_pcre_description})" FORCE)
|
||||
+ find_package(PCRE2)
|
||||
+ if(NOT PCRE2_FOUND)
|
||||
+ if(fail-on-missing)
|
||||
+ find_package(PCRE REQUIRED)
|
||||
+ else()
|
||||
+ find_package(PCRE)
|
||||
+ if(NOT PCRE_FOUND)
|
||||
+ message(STATUS "PCRE not found. Switching on builtin_pcre option")
|
||||
+ set(builtin_pcre ON CACHE BOOL "Enabled because PCRE not found (${builtin_pcre_description})" FORCE)
|
||||
+ endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
diff --git a/core/base/src/TPRegexp.cxx b/core/base/src/TPRegexp.cxx
|
||||
index 949b8cc8e9..d70f3e5b8b 100644
|
||||
--- a/core/base/src/TPRegexp.cxx
|
||||
+++ b/core/base/src/TPRegexp.cxx
|
||||
@@ -25,19 +25,36 @@ found at : http://perldoc.perl.org/perlre.html
|
||||
#include "TObjString.h"
|
||||
#include "TError.h"
|
||||
|
||||
+#ifdef USE_PCRE2
|
||||
+#ifdef R__WIN32
|
||||
+#define PCRE2_STATIC
|
||||
+#endif
|
||||
+#define PCRE2_CODE_UNIT_WIDTH 8
|
||||
+#include <pcre2.h>
|
||||
+#define PCRE_CASELESS PCRE2_CASELESS
|
||||
+#define PCRE_MULTILINE PCRE2_MULTILINE
|
||||
+#define PCRE_DOTALL PCRE2_DOTALL
|
||||
+#define PCRE_EXTENDED PCRE2_EXTENDED
|
||||
+#define PCRE_ERROR_NOMATCH PCRE2_ERROR_NOMATCH
|
||||
+#else
|
||||
#ifdef R__WIN32
|
||||
#define PCRE_STATIC
|
||||
#endif
|
||||
#include <pcre.h>
|
||||
+#endif
|
||||
|
||||
#include <vector>
|
||||
#include <stdexcept>
|
||||
|
||||
struct PCREPriv_t {
|
||||
+#ifdef USE_PCRE2
|
||||
+ pcre2_code *fPCRE;
|
||||
+ PCREPriv_t() { fPCRE = nullptr; }
|
||||
+#else
|
||||
pcre *fPCRE;
|
||||
pcre_extra *fPCREExtra;
|
||||
-
|
||||
PCREPriv_t() { fPCRE = nullptr; fPCREExtra = nullptr; }
|
||||
+#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -79,10 +96,15 @@ TPRegexp::TPRegexp(const TPRegexp &p)
|
||||
|
||||
TPRegexp::~TPRegexp()
|
||||
{
|
||||
+#ifdef USE_PCRE2
|
||||
+ if (fPriv->fPCRE)
|
||||
+ pcre2_code_free(fPriv->fPCRE);
|
||||
+#else
|
||||
if (fPriv->fPCRE)
|
||||
pcre_free(fPriv->fPCRE);
|
||||
if (fPriv->fPCREExtra)
|
||||
pcre_free(fPriv->fPCREExtra);
|
||||
+#endif
|
||||
delete fPriv;
|
||||
}
|
||||
|
||||
@@ -93,12 +115,18 @@ TPRegexp &TPRegexp::operator=(const TPRegexp &p)
|
||||
{
|
||||
if (this != &p) {
|
||||
fPattern = p.fPattern;
|
||||
+#ifdef USE_PCRE2
|
||||
+ if (fPriv->fPCRE)
|
||||
+ pcre2_code_free(fPriv->fPCRE);
|
||||
+ fPriv->fPCRE = nullptr;
|
||||
+#else
|
||||
if (fPriv->fPCRE)
|
||||
pcre_free(fPriv->fPCRE);
|
||||
fPriv->fPCRE = nullptr;
|
||||
if (fPriv->fPCREExtra)
|
||||
pcre_free(fPriv->fPCREExtra);
|
||||
fPriv->fPCREExtra = nullptr;
|
||||
+#endif
|
||||
fPCREOpts = p.fPCREOpts;
|
||||
}
|
||||
return *this;
|
||||
@@ -197,31 +225,50 @@ TString TPRegexp::GetModifiers() const
|
||||
|
||||
void TPRegexp::Compile()
|
||||
{
|
||||
+#ifdef USE_PCRE2
|
||||
+ if (fPriv->fPCRE)
|
||||
+ pcre2_code_free(fPriv->fPCRE);
|
||||
+#else
|
||||
if (fPriv->fPCRE)
|
||||
pcre_free(fPriv->fPCRE);
|
||||
+#endif
|
||||
|
||||
if (fPCREOpts & kPCRE_DEBUG_MSGS)
|
||||
Info("Compile", "PREGEX compiling %s", fPattern.Data());
|
||||
|
||||
+#ifdef USE_PCRE2
|
||||
+ int errcode;
|
||||
+ PCRE2_SIZE patIndex;
|
||||
+ fPriv->fPCRE = pcre2_compile((PCRE2_SPTR)fPattern.Data(), fPattern.Length(),
|
||||
+ fPCREOpts & kPCRE_INTMASK,
|
||||
+ &errcode, &patIndex, nullptr);
|
||||
+#else
|
||||
const char *errstr;
|
||||
Int_t patIndex;
|
||||
fPriv->fPCRE = pcre_compile(fPattern.Data(), fPCREOpts & kPCRE_INTMASK,
|
||||
&errstr, &patIndex, nullptr);
|
||||
+#endif
|
||||
|
||||
if (!fPriv->fPCRE) {
|
||||
+#ifdef USE_PCRE2
|
||||
+ PCRE2_UCHAR errstr[256];
|
||||
+ pcre2_get_error_message(errcode, errstr, 256);
|
||||
+#endif
|
||||
if (fgThrowAtCompileError) {
|
||||
throw std::runtime_error
|
||||
(TString::Format("TPRegexp::Compile() compilation of TPRegexp(%s) failed at: %d because %s",
|
||||
- fPattern.Data(), patIndex, errstr).Data());
|
||||
+ fPattern.Data(), (int)patIndex, errstr).Data());
|
||||
} else {
|
||||
Error("Compile", "compilation of TPRegexp(%s) failed at: %d because %s",
|
||||
- fPattern.Data(), patIndex, errstr);
|
||||
+ fPattern.Data(), (int)patIndex, errstr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
+#ifndef USE_PCRE2
|
||||
if (fPriv->fPCREExtra || (fPCREOpts & kPCRE_OPTIMIZE))
|
||||
Optimize();
|
||||
+#endif
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -229,6 +276,7 @@ void TPRegexp::Compile()
|
||||
|
||||
void TPRegexp::Optimize()
|
||||
{
|
||||
+#ifndef USE_PCRE2
|
||||
if (fPriv->fPCREExtra)
|
||||
pcre_free(fPriv->fPCREExtra);
|
||||
|
||||
@@ -243,6 +291,7 @@ void TPRegexp::Optimize()
|
||||
Error("Optimize", "Optimization of TPRegexp(%s) failed: %s",
|
||||
fPattern.Data(), errstr);
|
||||
}
|
||||
+#endif
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -308,21 +357,43 @@ Int_t TPRegexp::MatchInternal(const TString &s, Int_t start,
|
||||
Int_t nMaxMatch, TArrayI *pos) const
|
||||
{
|
||||
Int_t *offVec = new Int_t[3*nMaxMatch];
|
||||
+
|
||||
+#ifdef USE_PCRE2
|
||||
+ pcre2_match_data *match_data;
|
||||
+ match_data = pcre2_match_data_create_from_pattern(fPriv->fPCRE, nullptr);
|
||||
+ Int_t nrMatch = pcre2_match(fPriv->fPCRE, (PCRE2_SPTR8)s.Data(),
|
||||
+ s.Length(), start, 0,
|
||||
+ match_data, nullptr);
|
||||
+#else
|
||||
// pcre_exec allows less options - see pcre_internal.h PUBLIC_EXEC_OPTIONS.
|
||||
Int_t nrMatch = pcre_exec(fPriv->fPCRE, fPriv->fPCREExtra, s.Data(),
|
||||
s.Length(), start, 0,
|
||||
offVec, 3*nMaxMatch);
|
||||
+#endif
|
||||
|
||||
if (nrMatch == PCRE_ERROR_NOMATCH)
|
||||
nrMatch = 0;
|
||||
else if (nrMatch <= 0) {
|
||||
Error("Match","pcre_exec error = %d", nrMatch);
|
||||
+#ifdef USE_PCRE2
|
||||
+ pcre2_match_data_free(match_data);
|
||||
+#endif
|
||||
delete [] offVec;
|
||||
return 0;
|
||||
}
|
||||
|
||||
- if (pos)
|
||||
+ if (pos) {
|
||||
+#ifdef USE_PCRE2
|
||||
+ PCRE2_SIZE *oVec = pcre2_get_ovector_pointer(match_data);
|
||||
+ for (int i = 0; i < 2 * nrMatch; ++i)
|
||||
+ offVec[i] = oVec[i];
|
||||
+#endif
|
||||
pos->Set(2*nrMatch, offVec);
|
||||
+ }
|
||||
+
|
||||
+#ifdef USE_PCRE2
|
||||
+ pcre2_match_data_free(match_data);
|
||||
+#endif
|
||||
delete [] offVec;
|
||||
|
||||
return nrMatch;
|
||||
@@ -404,13 +475,24 @@ Int_t TPRegexp::SubstituteInternal(TString &s, const TString &replacePattern,
|
||||
Int_t offset = start;
|
||||
Int_t last = 0;
|
||||
|
||||
+#ifdef USE_PCRE2
|
||||
+ pcre2_match_data *match_data;
|
||||
+ match_data = pcre2_match_data_create_from_pattern(fPriv->fPCRE, nullptr);
|
||||
+#endif
|
||||
+
|
||||
while (kTRUE) {
|
||||
|
||||
// find next matching subs
|
||||
// pcre_exec allows less options - see pcre_internal.h PUBLIC_EXEC_OPTIONS.
|
||||
+#ifdef USE_PCRE2
|
||||
+ Int_t nrMatch = pcre2_match(fPriv->fPCRE, (PCRE2_SPTR)s.Data(),
|
||||
+ s.Length(), offset, 0,
|
||||
+ match_data, nullptr);
|
||||
+#else
|
||||
Int_t nrMatch = pcre_exec(fPriv->fPCRE, fPriv->fPCREExtra, s.Data(),
|
||||
s.Length(), offset, 0,
|
||||
offVec, 3*nMaxMatch);
|
||||
+#endif
|
||||
|
||||
if (nrMatch == PCRE_ERROR_NOMATCH) {
|
||||
break;
|
||||
@@ -419,6 +501,12 @@ Int_t TPRegexp::SubstituteInternal(TString &s, const TString &replacePattern,
|
||||
break;
|
||||
}
|
||||
|
||||
+#ifdef USE_PCRE2
|
||||
+ PCRE2_SIZE *oVec = pcre2_get_ovector_pointer(match_data);
|
||||
+ for (int i = 0; i < 2 * nrMatch; ++i)
|
||||
+ offVec[i] = oVec[i];
|
||||
+#endif
|
||||
+
|
||||
// append anything previously unmatched, but not substituted
|
||||
if (last <= offVec[0]) {
|
||||
fin += s(last,offVec[0]-last);
|
||||
@@ -446,6 +534,9 @@ Int_t TPRegexp::SubstituteInternal(TString &s, const TString &replacePattern,
|
||||
}
|
||||
}
|
||||
|
||||
+#ifdef USE_PCRE2
|
||||
+ pcre2_match_data_free(match_data);
|
||||
+#endif
|
||||
delete [] offVec;
|
||||
|
||||
fin += s(last,s.Length()-last);
|
||||
diff --git a/tutorials/legacy/regexp/regexp.C b/tutorials/legacy/regexp/regexp.C
|
||||
index 995b823bce..f38ed6799e 100644
|
||||
--- a/tutorials/legacy/regexp/regexp.C
|
||||
+++ b/tutorials/legacy/regexp/regexp.C
|
||||
@@ -94,11 +94,11 @@ void regexp()
|
||||
// criteria:
|
||||
// 1) It should be of the form string1@string2 . The "^" and "$" ensure that we compare the complete
|
||||
// email string
|
||||
- // 2) ([\\w-\\.]+) :
|
||||
+ // 2) ([\\w\\-\\.]+) :
|
||||
// string1 is only allowed to be composed out of the alphanumeric characters, "-" and "." .
|
||||
// The "+" ensures that string1 can not be empty .
|
||||
// 3) string2 is matched against three different parts :
|
||||
- // a. ((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+)) :
|
||||
+ // a. ((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w\\-]+\\.)+)) :
|
||||
// This regular expression ensures that EITHER the string starts with "[" followed by three groups
|
||||
// of numbers, separated by "." , where each group has 1 to 3 numbers, OR alphanumeric strings,
|
||||
// possibly containing "-" characters, separated by "." .
|
||||
@@ -108,7 +108,7 @@ void regexp()
|
||||
// At most one "]" character .
|
||||
|
||||
TString s5("fons.rademakers@cern.ch");
|
||||
- TPRegexp r5("^([\\w-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
|
||||
+ TPRegexp r5("^([\\w\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
|
||||
cout << "Check if the email address \"" << s5 << "\" is valid: " << (r5.MatchB(s5) ? "TRUE" : "FALSE") << endl;
|
||||
|
||||
// Substitute Example with pattern modifier :
|
||||
--
|
||||
2.41.0
|
||||
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
From aae37d7eceeb25e4a09e8504275083e6830832d6 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 b0ba21e845..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,20);
|
||||
-
|
||||
+ a.check("DeltaR", s1, s2, s3, 50);
|
||||
|
||||
int n1, n2, n3;
|
||||
n1 = a.testAnalysis (v1, t, t1, "Analysis1 TLorentzVector " );
|
||||
--
|
||||
2.40.1
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,40 +0,0 @@
|
|||
From c3eb92abb450aee2e3a798218ca2d309524dab11 Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Ellert <mattias.ellert@physics.uu.se>
|
||||
Date: Sat, 14 Oct 2023 15:51:16 +0200
|
||||
Subject: [PATCH] src/RBDT.cxx is a source file of libTMVAUtils and should not
|
||||
also be a source file of libTMVA. Remove it. Adjust test using symbols
|
||||
defined in this source file to link to libTMVAUtils instead of libTMVA.
|
||||
|
||||
---
|
||||
tmva/tmva/CMakeLists.txt | 1 -
|
||||
tmva/tmva/test/CMakeLists.txt | 2 +-
|
||||
2 files changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tmva/tmva/CMakeLists.txt b/tmva/tmva/CMakeLists.txt
|
||||
index 84efce9d59..109f4c1021 100644
|
||||
--- a/tmva/tmva/CMakeLists.txt
|
||||
+++ b/tmva/tmva/CMakeLists.txt
|
||||
@@ -334,7 +334,6 @@ ROOT_STANDARD_LIBRARY_PACKAGE(TMVA
|
||||
src/PDEFoamVect.cxx
|
||||
src/PDF.cxx
|
||||
src/QuickMVAProbEstimator.cxx
|
||||
- src/RBDT.cxx
|
||||
src/Ranking.cxx
|
||||
src/Reader.cxx
|
||||
src/RegressionVariance.cxx
|
||||
diff --git a/tmva/tmva/test/CMakeLists.txt b/tmva/tmva/test/CMakeLists.txt
|
||||
index ebe1be187b..5dcf5175f2 100644
|
||||
--- a/tmva/tmva/test/CMakeLists.txt
|
||||
+++ b/tmva/tmva/test/CMakeLists.txt
|
||||
@@ -29,7 +29,7 @@ if(dataframe)
|
||||
# Tree inference system and user interface
|
||||
if(NOT MSVC OR ${LLVM_VERSION} VERSION_LESS 13.0.0 OR llvm13_broken_tests)
|
||||
ROOT_ADD_GTEST(branchlessForest branchlessForest.cxx LIBRARIES TMVA)
|
||||
- ROOT_ADD_GTEST(rbdt rbdt.cxx LIBRARIES ROOTVecOps TMVA)
|
||||
+ ROOT_ADD_GTEST(rbdt rbdt.cxx LIBRARIES ROOTVecOps TMVAUtils)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
--
|
||||
2.41.0
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
135
root-vecops-Adaptive-size-of-long-RVec-instances-in-RVec-.patch
Normal file
135
root-vecops-Adaptive-size-of-long-RVec-instances-in-RVec-.patch
Normal 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
|
||||
|
||||
5
sources
5
sources
|
|
@ -1,2 +1,3 @@
|
|||
SHA512 (root-6.28.08.tar.xz) = 868d770a05372677da84e4456023c1b2b575ff1eac8b6b841ed45dd1e0fd0c6c7aede533271b986404f2a55c91ea196ac2d8c81b3b4d1edfae159c0b665c415e
|
||||
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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue