Compare commits
3 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
daf8bdab01 | ||
|
|
5b433dea92 | ||
|
|
7add16520d |
27 changed files with 1516 additions and 844 deletions
72
root-Fixes-for-garbage-collection-in-Python-3.11.patch
Normal file
72
root-Fixes-for-garbage-collection-in-Python-3.11.patch
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
From e77bcb0fdd0bc622213c33ad7094d28737fe51e7 Mon Sep 17 00:00:00 2001
|
||||
From: Enric Tejedor Saavedra <enric.tejedor.saavedra@cern.ch>
|
||||
Date: Wed, 28 Sep 2022 14:20:46 +0200
|
||||
Subject: [PATCH] [PyROOT] Fixes for garbage collection in Python 3.11
|
||||
|
||||
According to the list of changes in Python 3.11:
|
||||
|
||||
https://docs.python.org/3.11/whatsnew/3.11.html
|
||||
|
||||
types defined with the Py_TPFLAGS_HAVE_GC flag set but with no
|
||||
traverse function (PyTypeObject.tp_traverse) will cause an error.
|
||||
|
||||
The above is true for a few types that are defined in cppyy.
|
||||
This commit removes the aforementioned flag from those type
|
||||
definitions with no traverse function. It also sets the right
|
||||
flags for the nonified object type; this fixes the teardown GC
|
||||
crashes observed when the internal memory management of ROOT
|
||||
was involved (e.g. the garbage collection of a tree that belongs
|
||||
to a file).
|
||||
---
|
||||
.../pyroot/cppyy/CPyCppyy/src/CPPInstance.cxx | 1 -
|
||||
.../cppyy/CPyCppyy/src/CustomPyTypes.cxx | 3 +--
|
||||
.../cppyy/CPyCppyy/src/MemoryRegulator.cxx | 3 ++-
|
||||
4 files changed, 3 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPPInstance.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/CPPInstance.cxx
|
||||
index 73fb8099b5dd..f2eea396af1b 100644
|
||||
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CPPInstance.cxx
|
||||
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPPInstance.cxx
|
||||
@@ -764,7 +764,6 @@ PyTypeObject CPPInstance_Type = {
|
||||
0, // tp_as_buffer
|
||||
Py_TPFLAGS_DEFAULT |
|
||||
Py_TPFLAGS_BASETYPE |
|
||||
- Py_TPFLAGS_HAVE_GC |
|
||||
Py_TPFLAGS_CHECKTYPES, // tp_flags
|
||||
(char*)"cppyy object proxy (internal)", // tp_doc
|
||||
0, // tp_traverse
|
||||
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CustomPyTypes.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/CustomPyTypes.cxx
|
||||
index 97ce06daa717..ed41b1637c67 100644
|
||||
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CustomPyTypes.cxx
|
||||
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CustomPyTypes.cxx
|
||||
@@ -78,8 +78,7 @@ PyTypeObject TypedefPointerToClass_Type = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
(ternaryfunc)tpc_call, // tp_call
|
||||
0, 0, 0, 0,
|
||||
- Py_TPFLAGS_DEFAULT |
|
||||
- Py_TPFLAGS_HAVE_GC, // tp_flags
|
||||
+ Py_TPFLAGS_DEFAULT, // tp_flags
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
#if PY_VERSION_HEX >= 0x02030000
|
||||
, 0 // tp_del
|
||||
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/MemoryRegulator.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/MemoryRegulator.cxx
|
||||
index f9e92f9c8c1b..510d65f88a8d 100644
|
||||
--- a/bindings/pyroot/cppyy/CPyCppyy/src/MemoryRegulator.cxx
|
||||
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/MemoryRegulator.cxx
|
||||
@@ -45,7 +45,7 @@ struct InitCPyCppyy_NoneType_t {
|
||||
((PyVarObject&)CPyCppyy_NoneType).ob_size = 0;
|
||||
|
||||
CPyCppyy_NoneType.tp_name = const_cast<char*>("CPyCppyy_NoneType");
|
||||
- CPyCppyy_NoneType.tp_flags = Py_TPFLAGS_HAVE_RICHCOMPARE | Py_TPFLAGS_HAVE_GC;
|
||||
+ CPyCppyy_NoneType.tp_flags = Py_TPFLAGS_HAVE_RICHCOMPARE;
|
||||
|
||||
CPyCppyy_NoneType.tp_traverse = (traverseproc)0;
|
||||
CPyCppyy_NoneType.tp_clear = (inquiry)0;
|
||||
@@ -135,6 +135,7 @@ bool CPyCppyy::MemoryRegulator::RecursiveRemove(
|
||||
CPyCppyy_NoneType.tp_traverse = Py_TYPE(pyobj)->tp_traverse;
|
||||
CPyCppyy_NoneType.tp_clear = Py_TYPE(pyobj)->tp_clear;
|
||||
CPyCppyy_NoneType.tp_free = Py_TYPE(pyobj)->tp_free;
|
||||
+ CPyCppyy_NoneType.tp_flags = Py_TYPE(pyobj)->tp_flags;
|
||||
} else if (CPyCppyy_NoneType.tp_traverse != Py_TYPE(pyobj)->tp_traverse) {
|
||||
// TODO: SystemError?
|
||||
std::cerr << "in CPyCppyy::MemoryRegulater, unexpected object of type: "
|
||||
30
root-Guard-gInterpreterMutex-in-TClingClassInfo-IsEnum.patch
Normal file
30
root-Guard-gInterpreterMutex-in-TClingClassInfo-IsEnum.patch
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
From 25fcf69c0662b09fbd9dc1c0446b7679ae020ed5 Mon Sep 17 00:00:00 2001
|
||||
From: Vincenzo Eduardo Padulano <v.e.padulano@gmail.com>
|
||||
Date: Sat, 8 Oct 2022 03:12:06 +0200
|
||||
Subject: [PATCH] [core] Guard gInterpreterMutex in TClingClassInfo::IsEnum
|
||||
|
||||
Fixes https://github.com/root-project/root/issues/11515
|
||||
|
||||
This method leads to contention in some specific scenarios (see linked
|
||||
issue).
|
||||
|
||||
Co-authored-by: Philippe Canal <pcanal@fnal.gov>
|
||||
---
|
||||
core/metacling/src/TClingClassInfo.cxx | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/core/metacling/src/TClingClassInfo.cxx b/core/metacling/src/TClingClassInfo.cxx
|
||||
index c0c061dfca..ce6e82d388 100644
|
||||
--- a/core/metacling/src/TClingClassInfo.cxx
|
||||
+++ b/core/metacling/src/TClingClassInfo.cxx
|
||||
@@ -815,6 +815,7 @@ bool TClingClassInfo::IsBase(const char *name) const
|
||||
|
||||
bool TClingClassInfo::IsEnum(cling::Interpreter *interp, const char *name)
|
||||
{
|
||||
+ R__LOCKGUARD(gInterpreterMutex);
|
||||
// Note: This is a static member function.
|
||||
TClingClassInfo info(interp, name);
|
||||
if (info.IsValid() && (info.Property() & kIsEnum)) {
|
||||
--
|
||||
2.37.3
|
||||
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From a12f3b736a9c69e0d69e7f483e50e7cdf59d9fd2 Mon Sep 17 00:00:00 2001
|
||||
From: Enric Tejedor Saavedra <enric.tejedor.saavedra@cern.ch>
|
||||
Date: Fri, 10 Jun 2022 16:42:49 +0200
|
||||
Subject: [PATCH] [PyROOT] Prevent cast error when calling PyTuple_SET_ITEM in
|
||||
3.11
|
||||
|
||||
PyTuple_SET_ITEM ends up calling _PyObject_CAST(nullptr) which
|
||||
causes "error: invalid cast from type 'std::nullptr_t' to type
|
||||
'const PyObject*' {aka 'const _object*'}
|
||||
---
|
||||
bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx
|
||||
index 685ad3dc60..2189348594 100644
|
||||
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx
|
||||
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx
|
||||
@@ -580,7 +580,7 @@ PyObject* CPyCppyy::CPPMethod::ProcessKeywords(PyObject* self, PyObject* args, P
|
||||
// set all values to zero to be able to check them later (this also guarantees normal
|
||||
// cleanup by the tuple deallocation)
|
||||
for (Py_ssize_t i = 0; i < nArgs+nKeys; ++i)
|
||||
- PyTuple_SET_ITEM(newArgs, i, nullptr);
|
||||
+ PyTuple_SET_ITEM(newArgs, i, static_cast<PyObject*>(nullptr));
|
||||
|
||||
// next, insert the keyword values
|
||||
PyObject *key, *value;
|
||||
--
|
||||
2.36.1
|
||||
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
From c4175cb2fa0daf07ef03f460f2026c8bbc34b6a5 Mon Sep 17 00:00:00 2001
|
||||
From: Enric Tejedor Saavedra <enric.tejedor.saavedra@cern.ch>
|
||||
Date: Fri, 4 Mar 2022 11:32:29 +0100
|
||||
Subject: [PATCH] [PyROOT] Py_TYPE is changed to an inline static function in
|
||||
Py3.11
|
||||
|
||||
As mentioned in the Python docs:
|
||||
https://docs.python.org/3.11/whatsnew/3.11.html
|
||||
|
||||
Already available upstream in:
|
||||
https://github.com/wlav/CPyCppyy/commit/a8f41df0618f40ecc9a2a0b5a51fd12ddf2e6673
|
||||
---
|
||||
bindings/pyroot/cppyy/CPyCppyy/src/CPPConstructor.cxx | 2 +-
|
||||
bindings/pyroot/cppyy/CPyCppyy/src/CPyCppyy.h | 7 +++++++
|
||||
2 files changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPPConstructor.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/CPPConstructor.cxx
|
||||
index 0c564aff83..60b91d0b96 100644
|
||||
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CPPConstructor.cxx
|
||||
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPPConstructor.cxx
|
||||
@@ -122,7 +122,7 @@ PyObject* CPyCppyy::CPPConstructor::Call(
|
||||
if (pyclass) {
|
||||
self->SetSmart((PyObject*)Py_TYPE(self));
|
||||
Py_DECREF((PyObject*)Py_TYPE(self));
|
||||
- Py_TYPE(self) = (PyTypeObject*)pyclass;
|
||||
+ Py_SET_TYPE(self, (PyTypeObject*)pyclass);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPyCppyy.h b/bindings/pyroot/cppyy/CPyCppyy/src/CPyCppyy.h
|
||||
index 375ea1cb95..11221cd7ef 100644
|
||||
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CPyCppyy.h
|
||||
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPyCppyy.h
|
||||
@@ -304,6 +304,13 @@ inline Py_ssize_t PyNumber_AsSsize_t(PyObject* obj, PyObject*) {
|
||||
#define CPyCppyy_PyCFunction_Call PyCFunction_Call
|
||||
#endif
|
||||
|
||||
+// Py_TYPE is changed to an inline static function in 3.11
|
||||
+#if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_TYPE)
|
||||
+static inline
|
||||
+void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) { ob->ob_type = type; }
|
||||
+#define Py_SET_TYPE(ob, type) _Py_SET_TYPE((PyObject*)(ob), type)
|
||||
+#endif
|
||||
+
|
||||
// C++ version of the cppyy API
|
||||
#include "Cppyy.h"
|
||||
|
||||
--
|
||||
2.37.3
|
||||
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
From 484deb056dacf768aba4954073b41105c431bffc Mon Sep 17 00:00:00 2001
|
||||
From: Enric Tejedor Saavedra <enric.tejedor.saavedra@cern.ch>
|
||||
Date: Thu, 9 Jun 2022 12:24:07 +0200
|
||||
Subject: [PATCH] [PyROOT] code.h must not be included directly in 3.11
|
||||
|
||||
It has been moved to Include/cpython, and it is included by Python.h.
|
||||
|
||||
See:
|
||||
https://docs.python.org/3.11/whatsnew/3.11.html
|
||||
---
|
||||
bindings/pyroot/cppyy/CPyCppyy/src/CPPOverload.cxx | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPPOverload.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/CPPOverload.cxx
|
||||
index 59997e390d..28bbd635c2 100644
|
||||
--- a/bindings/pyroot/cppyy/CPyCppyy/src/CPPOverload.cxx
|
||||
+++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPPOverload.cxx
|
||||
@@ -1,10 +1,10 @@
|
||||
// Bindings
|
||||
#include "CPyCppyy.h"
|
||||
#include "structmember.h" // from Python
|
||||
-#if PY_VERSION_HEX >= 0x02050000
|
||||
-#include "code.h" // from Python
|
||||
-#else
|
||||
+#if PY_VERSION_HEX < 0x02050000
|
||||
#include "compile.h" // from Python
|
||||
+#elif PY_VERSION_HEX < 0x030b0000
|
||||
+#include "code.h" // from Python
|
||||
#endif
|
||||
#ifndef CO_NOFREE
|
||||
// python2.2 does not have CO_NOFREE defined
|
||||
--
|
||||
2.36.1
|
||||
|
||||
37
root-avoid-deleting-TFormulas-twice.patch
Normal file
37
root-avoid-deleting-TFormulas-twice.patch
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
From c7dd58f3bc012690bab16763b1d73a4b7106ced9 Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Ellert <mattias.ellert@physics.uu.se>
|
||||
Date: Tue, 29 Mar 2022 15:40:35 +0200
|
||||
Subject: [PATCH] Avoid deleting TFormulas twice
|
||||
|
||||
Example failure:
|
||||
|
||||
562/1224 Test #541: tutorial-gl-gltf3 ...................................................***Failed Error regular expression found in output. Regex=[Error in <] 1.36 sec
|
||||
Processing /builddir/build/BUILD/root-6.26.00/tutorials/gl/gltf3.C...
|
||||
Error in <TList::Delete>: A list is accessing an object (0x7fffd1c959a0) already deleted (list name = Functions)
|
||||
Error in <TList::Delete>: A list is accessing an object (0x7fffd1c95750) already deleted (list name = Functions)
|
||||
|
||||
The commit also changes the filename used in
|
||||
tutorials/hist/fillrandom.py to be different form the one used in
|
||||
tutorials/hist/fillrandom.C (and tutorials/pyroot/fillrandom.py)
|
||||
---
|
||||
tutorials/gl/gltf3.C | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tutorials/gl/gltf3.C b/tutorials/gl/gltf3.C
|
||||
index 3697e69b7a..4089f0d2b7 100644
|
||||
--- a/tutorials/gl/gltf3.C
|
||||
+++ b/tutorials/gl/gltf3.C
|
||||
@@ -27,8 +27,8 @@ void gltf3()
|
||||
TPad *tf3Pad = new TPad("box", "box", 0.04, 0.04, 0.96, 0.8);
|
||||
tf3Pad->Draw();
|
||||
|
||||
- TFormula f1 = TFormula("f1", "x*x + y*y + z*z + 2*y - 1");
|
||||
- TFormula f2 = TFormula("f2", "x*x + y*y + z*z - 2*y - 1");
|
||||
+ TFormula *f1 = new TFormula("f1", "x*x + y*y + z*z + 2*y - 1");
|
||||
+ TFormula *f2 = new TFormula("f2", "x*x + y*y + z*z - 2*y - 1");
|
||||
|
||||
// Klein bottle with cut top&bottom parts
|
||||
// The Klein bottle is a closed non-orientable surface that has no
|
||||
--
|
||||
2.35.1
|
||||
|
||||
31
root-core-base-test.patch
Normal file
31
root-core-base-test.patch
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
From 12d52a60629e1639ced23a1919bd85628d9135ea Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Ellert <mattias.ellert@physics.uu.se>
|
||||
Date: Sun, 3 Apr 2022 23:23:00 +0200
|
||||
Subject: [PATCH] Fix library link order
|
||||
|
||||
Fixes undefined references when linking CoreBaseTests
|
||||
|
||||
../../../lib/libCling.so.6.26.00: undefined reference to `TMemFile::TMemFile(char const*, TMemFile::ZeroCopyView_t const&)'
|
||||
../../../lib/libCling.so.6.26.00: undefined reference to `TFile::TFile(char const*, char const*, char const*, int)'
|
||||
../../../lib/libCling.so.6.26.00: undefined reference to `TFile::~TFile()'
|
||||
../../../lib/libCling.so.6.26.00: undefined reference to `TStreamerInfo::TStreamerInfo()'
|
||||
../../../lib/libCling.so.6.26.00: undefined reference to `TMemFile::~TMemFile()'
|
||||
---
|
||||
core/base/test/CMakeLists.txt | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/core/base/test/CMakeLists.txt b/core/base/test/CMakeLists.txt
|
||||
index 4b08cb0390..9b52e83405 100644
|
||||
--- a/core/base/test/CMakeLists.txt
|
||||
+++ b/core/base/test/CMakeLists.txt
|
||||
@@ -22,6 +22,6 @@ ROOT_ADD_GTEST(CoreBaseTests
|
||||
TQObjectTests.cxx
|
||||
TExceptionHandlerTests.cxx
|
||||
TStringTest.cxx
|
||||
- LIBRARIES Core RIO ${extralibs})
|
||||
+ LIBRARIES ${extralibs} RIO Core)
|
||||
|
||||
ROOT_ADD_GTEST(CoreErrorTests TErrorTests.cxx LIBRARIES Core)
|
||||
--
|
||||
2.35.1
|
||||
|
||||
48
root-different-filename.patch
Normal file
48
root-different-filename.patch
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
From a486081a8065154308b23381c3a77f3fdb73de97 Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Ellert <mattias.ellert@physics.uu.se>
|
||||
Date: Wed, 16 Nov 2022 20:44:48 +0100
|
||||
Subject: [PATCH] Use different filename in loopdir.C and loopdir11.C to avoid
|
||||
race condition
|
||||
|
||||
Start 672: tutorial-io-loopdir
|
||||
690/1156 Test #666: tutorial-io-double32 ................................................ Passed 2.42 sec
|
||||
Start 673: tutorial-io-loopdir11
|
||||
691/1156 Test #673: tutorial-io-loopdir11 ............................................... Passed 0.76 sec
|
||||
Start 674: tutorial-io-mergeSelective
|
||||
692/1156 Test #672: tutorial-io-loopdir .................................................***Failed Error regular expression found in output. Regex=[Error in <] 1.23 sec
|
||||
Processing /builddir/build/BUILD/root-6.26.10/tutorials/io/loopdir.C...
|
||||
Info in <TCanvas::Print>: ps file hsimple.ps has been created
|
||||
Info in <TCanvas::Print>: Current canvas added to ps file hsimple.ps
|
||||
Info in <TCanvas::Print>: Current canvas added to ps file hsimple.ps
|
||||
Info in <TCanvas::Print>: Current canvas added to ps file hsimple.ps
|
||||
Info in <TCanvas::Print>: ps file hsimple.ps has been closed
|
||||
Error in <TPostScript::Text>: Cannot open temporary file: hsimple.ps_tmp_2089748
|
||||
---
|
||||
tutorials/io/loopdir11.C | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/tutorials/io/loopdir11.C b/tutorials/io/loopdir11.C
|
||||
index b5f9f4719c..bf8c33b442 100644
|
||||
--- a/tutorials/io/loopdir11.C
|
||||
+++ b/tutorials/io/loopdir11.C
|
||||
@@ -12,14 +12,14 @@
|
||||
void loopdir11() {
|
||||
TFile *f1 = TFile::Open("hsimple.root");
|
||||
TCanvas c1;
|
||||
- c1.Print("hsimple.ps[");
|
||||
+ c1.Print("hsimple11.ps[");
|
||||
for(auto k : *f1->GetListOfKeys()) {
|
||||
TKey *key = static_cast<TKey*>(k);
|
||||
TClass *cl = gROOT->GetClass(key->GetClassName());
|
||||
if (!cl->InheritsFrom("TH1")) continue;
|
||||
TH1 *h = key->ReadObject<TH1>();
|
||||
h->Draw();
|
||||
- c1.Print("hsimple.ps");
|
||||
+ c1.Print("hsimple11.ps");
|
||||
}
|
||||
- c1.Print("hsimple.ps]");
|
||||
+ c1.Print("hsimple11.ps]");
|
||||
}
|
||||
--
|
||||
2.38.1
|
||||
|
||||
44
root-do-not-remove-Wp-before-D-and-U.patch
Normal file
44
root-do-not-remove-Wp-before-D-and-U.patch
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
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,21 +0,0 @@
|
|||
diff -ur root-6.20.02.orig/documentation/doxygen/filter.cxx root-6.20.02/documentation/doxygen/filter.cxx
|
||||
--- root-6.20.02.orig/documentation/doxygen/filter.cxx 2020-03-15 16:21:25.000000000 +0100
|
||||
+++ root-6.20.02/documentation/doxygen/filter.cxx 2020-03-15 20:05:59.047270429 +0100
|
||||
@@ -378,16 +378,7 @@
|
||||
|
||||
// notebook found
|
||||
if (gLineString.find("\\notebook") != string::npos) {
|
||||
- ExecuteCommand(StringFormat("%s converttonotebook.py %s %s/notebooks/",
|
||||
- gPythonExec.c_str(),
|
||||
- gFileName.c_str(), gOutDir.c_str()));
|
||||
- if (gPython){
|
||||
- gLineString = "## ";
|
||||
- }
|
||||
- else{
|
||||
- gLineString = "/// ";
|
||||
- }
|
||||
- gLineString += StringFormat( "\\htmlonly <a href=\"https://nbviewer.jupyter.org/url/root.cern/doc/master/notebooks/%s.nbconvert.ipynb\" target=\"_blank\"><img src= notebook.gif alt=\"View in nbviewer\" style=\"height:1em\" ></a> <a href=\"https://cern.ch/swanserver/cgi-bin/go?projurl=https://root.cern/doc/master/notebooks/%s.nbconvert.ipynb\" target=\"_blank\"><img src=\"https://swanserver.web.cern.ch/swanserver/images/badge_swan_white_150.png\" alt=\"Open in SWAN\" style=\"height:1em\" ></a> \\endhtmlonly \n", gMacroName.c_str() , gMacroName.c_str());
|
||||
+ gLineString = "";
|
||||
}
|
||||
|
||||
// \macro_output found
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
diff -ur root-6.24.06.orig/tutorials/multicore/mp201_parallelHistoFill.C root-6.24.06/tutorials/multicore/mp201_parallelHistoFill.C
|
||||
--- root-6.24.06.orig/tutorials/multicore/mp201_parallelHistoFill.C 2021-09-01 10:08:19.000000000 +0200
|
||||
+++ root-6.24.06/tutorials/multicore/mp201_parallelHistoFill.C 2021-11-05 18:09:46.916687882 +0100
|
||||
@@ -5,7 +5,6 @@
|
||||
/// This tutorial shows how a histogram can be filled in parallel
|
||||
/// with a multiprocess approach.
|
||||
///
|
||||
-/// \macro_image
|
||||
/// \macro_code
|
||||
///
|
||||
/// \date January 2016
|
||||
diff -ur root-6.24.06.orig/tutorials/multicore/mt201_parallelHistoFill.C root-6.24.06/tutorials/multicore/mt201_parallelHistoFill.C
|
||||
--- root-6.24.06.orig/tutorials/multicore/mt201_parallelHistoFill.C 2021-09-01 10:08:19.000000000 +0200
|
||||
+++ root-6.24.06/tutorials/multicore/mt201_parallelHistoFill.C 2021-12-06 18:19:08.498933048 +0100
|
||||
@@ -10,7 +10,6 @@
|
||||
/// method. This method is not thread safe: in presence of ROOT histograms, the
|
||||
/// system will not crash but the result is not uniquely defined.
|
||||
///
|
||||
-/// \macro_image
|
||||
/// \macro_code
|
||||
///
|
||||
/// \date January 2016
|
||||
diff -ur root-6.24.06.orig/tutorials/multicore/mt304_fillHistos.C root-6.24.06/tutorials/multicore/mt304_fillHistos.C
|
||||
--- root-6.24.06.orig/tutorials/multicore/mt304_fillHistos.C 2021-09-01 10:08:19.000000000 +0200
|
||||
+++ root-6.24.06/tutorials/multicore/mt304_fillHistos.C 2021-12-06 19:54:20.634373797 +0100
|
||||
@@ -5,7 +5,6 @@
|
||||
/// Illustrates use of power-of-two autobin algorithm
|
||||
///
|
||||
/// \macro_code
|
||||
-/// \macro_image
|
||||
///
|
||||
/// \date November 2017
|
||||
/// \author Gerardo Ganis
|
||||
diff -ur root-6.24.06.orig/tutorials/multicore/mtbb201_parallelHistoFill.C root-6.24.06/tutorials/multicore/mtbb201_parallelHistoFill.C
|
||||
--- root-6.24.06.orig/tutorials/multicore/mtbb201_parallelHistoFill.C 2021-09-01 10:08:19.000000000 +0200
|
||||
+++ root-6.24.06/tutorials/multicore/mtbb201_parallelHistoFill.C 2021-12-06 19:54:22.174377227 +0100
|
||||
@@ -5,7 +5,6 @@
|
||||
/// This tutorial shows how a histogram can be filled in parallel
|
||||
/// with a multiprocess approach.
|
||||
///
|
||||
-/// \macro_image
|
||||
/// \macro_code
|
||||
///
|
||||
/// \date January 2016
|
||||
|
|
@ -1,275 +0,0 @@
|
|||
diff -ur root-6.24.02.orig/tutorials/dataframe/df002_dataModel.C root-6.24.02/tutorials/dataframe/df002_dataModel.C
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df002_dataModel.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df002_dataModel.C 2021-08-11 03:55:11.021149115 +0200
|
||||
@@ -7,7 +7,6 @@
|
||||
/// complex than flat ntuples with RDataFrame
|
||||
///
|
||||
/// \macro_code
|
||||
-/// \macro_image
|
||||
///
|
||||
/// \date December 2016
|
||||
/// \author Danilo Piparo (CERN)
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df002_dataModel.py root-6.24.02/tutorials/dataframe/df002_dataModel.py
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df002_dataModel.py 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df002_dataModel.py 2021-08-11 03:55:11.084149272 +0200
|
||||
@@ -7,7 +7,6 @@
|
||||
## complex than flat ntuples with RDataFrame
|
||||
##
|
||||
## \macro_code
|
||||
-## \macro_image
|
||||
##
|
||||
## \date May 2017
|
||||
## \author Danilo Piparo (CERN)
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df003_profiles.C root-6.24.02/tutorials/dataframe/df003_profiles.C
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df003_profiles.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df003_profiles.C 2021-08-11 03:55:11.148149432 +0200
|
||||
@@ -7,7 +7,6 @@
|
||||
/// RDataFrame. See the documentation of TProfile and TProfile2D to better
|
||||
/// understand the analogy of this code with the example one.
|
||||
///
|
||||
-/// \macro_image
|
||||
/// \macro_code
|
||||
///
|
||||
/// \date February 2017
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df003_profiles.py root-6.24.02/tutorials/dataframe/df003_profiles.py
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df003_profiles.py 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df003_profiles.py 2021-08-11 03:55:11.211149590 +0200
|
||||
@@ -8,7 +8,6 @@
|
||||
## understand the analogy of this code with the example one.
|
||||
##
|
||||
## \macro_code
|
||||
-## \macro_image
|
||||
##
|
||||
## \date February 2017
|
||||
## \author Danilo Piparo (CERN)
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df005_fillAnyObject.C root-6.24.02/tutorials/dataframe/df005_fillAnyObject.C
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df005_fillAnyObject.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df005_fillAnyObject.C 2021-08-11 03:55:11.275149750 +0200
|
||||
@@ -7,7 +7,6 @@
|
||||
/// `Fill` method.
|
||||
///
|
||||
/// \macro_code
|
||||
-/// \macro_image
|
||||
///
|
||||
/// \date March 2017
|
||||
/// \author Danilo Piparo (CERN)
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df007_snapshot.C root-6.24.02/tutorials/dataframe/df007_snapshot.C
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df007_snapshot.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df007_snapshot.C 2021-08-11 03:55:11.338149907 +0200
|
||||
@@ -5,7 +5,6 @@
|
||||
///
|
||||
/// This tutorial shows how to write out datasets in ROOT format using the RDataFrame
|
||||
///
|
||||
-/// \macro_image
|
||||
/// \macro_code
|
||||
///
|
||||
/// \date April 2017
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df007_snapshot.py root-6.24.02/tutorials/dataframe/df007_snapshot.py
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df007_snapshot.py 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df007_snapshot.py 2021-08-11 03:55:11.402150067 +0200
|
||||
@@ -5,7 +5,6 @@
|
||||
##
|
||||
## This tutorial shows how to write out datasets in ROOT format using the RDataFrame
|
||||
##
|
||||
-## \macro_image
|
||||
## \macro_code
|
||||
##
|
||||
## \date April 2017
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.C root-6.24.02/tutorials/dataframe/df014_CSVDataSource.C
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df014_CSVDataSource.C 2021-08-11 03:55:11.465150225 +0200
|
||||
@@ -14,7 +14,6 @@
|
||||
/// DOI: [10.7483/OPENDATA.CMS.CB8H.MFFA](http://opendata.cern.ch/record/700).
|
||||
///
|
||||
/// \macro_code
|
||||
-/// \macro_image
|
||||
///
|
||||
/// \date October 2017
|
||||
/// \author Enric Tejedor (CERN)
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.py root-6.24.02/tutorials/dataframe/df014_CSVDataSource.py
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df014_CSVDataSource.py 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df014_CSVDataSource.py 2021-08-11 03:55:11.529150385 +0200
|
||||
@@ -14,7 +14,6 @@
|
||||
## DOI: [10.7483/OPENDATA.CMS.CB8H.MFFA](http://opendata.cern.ch/record/700).
|
||||
##
|
||||
## \macro_code
|
||||
-## \macro_image
|
||||
##
|
||||
## \date October 2017
|
||||
## \author Enric Tejedor (CERN)
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df015_LazyDataSource.C root-6.24.02/tutorials/dataframe/df015_LazyDataSource.C
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df015_LazyDataSource.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df015_LazyDataSource.C 2021-08-11 03:55:11.593150545 +0200
|
||||
@@ -14,7 +14,6 @@
|
||||
/// From the ROOT website: https://root.cern.ch/files/tutorials/tdf014_CsvDataSource_MuRun2010B.csv
|
||||
///
|
||||
/// \macro_code
|
||||
-/// \macro_image
|
||||
///
|
||||
/// \date February 2018
|
||||
/// \author Danilo Piparo (CERN)
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df016_vecOps.C root-6.24.02/tutorials/dataframe/df016_vecOps.C
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df016_vecOps.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df016_vecOps.C 2021-08-11 03:55:11.656150702 +0200
|
||||
@@ -7,7 +7,6 @@
|
||||
/// stored in datasets, a situation very common in HEP data analysis.
|
||||
///
|
||||
/// \macro_code
|
||||
-/// \macro_image
|
||||
///
|
||||
/// \date February 2018
|
||||
/// \author Danilo Piparo (CERN)
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df016_vecOps.py root-6.24.02/tutorials/dataframe/df016_vecOps.py
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df016_vecOps.py 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df016_vecOps.py 2021-08-11 03:55:11.720150862 +0200
|
||||
@@ -6,7 +6,6 @@
|
||||
## This tutorial shows the potential of the VecOps approach for treating collections
|
||||
## stored in datasets, a situation very common in HEP data analysis.
|
||||
##
|
||||
-## \macro_image
|
||||
## \macro_code
|
||||
##
|
||||
## \date February 2018
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.C root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.C
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.C 2021-08-11 03:55:11.783151020 +0200
|
||||
@@ -11,7 +11,6 @@
|
||||
/// greater than 100.
|
||||
///
|
||||
/// \macro_code
|
||||
-/// \macro_image
|
||||
///
|
||||
/// \date March 2018
|
||||
/// \authors Danilo Piparo (CERN), Andre Vieira Silva
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.py root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.py
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df017_vecOpsHEP.py 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df017_vecOpsHEP.py 2021-08-11 03:55:11.846151177 +0200
|
||||
@@ -7,7 +7,6 @@
|
||||
## model typically adopted in HEP for analysis.
|
||||
##
|
||||
## \macro_code
|
||||
-## \macro_image
|
||||
##
|
||||
## \date March 2018
|
||||
## \authors Danilo Piparo (CERN), Andre Vieira Silva
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df019_Cache.C root-6.24.02/tutorials/dataframe/df019_Cache.C
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df019_Cache.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df019_Cache.C 2021-08-11 03:55:11.910151337 +0200
|
||||
@@ -18,7 +18,6 @@
|
||||
/// only when the event loop is triggered on it.
|
||||
///
|
||||
/// \macro_code
|
||||
-/// \macro_image
|
||||
///
|
||||
/// \date June 2018
|
||||
/// \author Danilo Piparo (CERN)
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df019_Cache.py root-6.24.02/tutorials/dataframe/df019_Cache.py
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df019_Cache.py 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df019_Cache.py 2021-08-11 03:55:11.973151495 +0200
|
||||
@@ -18,7 +18,6 @@
|
||||
## only when the event loop is triggered on it.
|
||||
##
|
||||
## \macro_code
|
||||
-## \macro_image
|
||||
##
|
||||
## \date June 2018
|
||||
## \author Danilo Piparo (CERN)
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.C root-6.24.02/tutorials/dataframe/df021_createTGraph.C
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df021_createTGraph.C 2021-08-11 03:55:12.037151655 +0200
|
||||
@@ -4,7 +4,6 @@
|
||||
/// Fill a TGraph using RDataFrame.
|
||||
///
|
||||
/// \macro_code
|
||||
-/// \macro_image
|
||||
///
|
||||
/// \date July 2018
|
||||
/// \authors Enrico Guiraud, Danilo Piparo (CERN), Massimo Tumolo (Politecnico di Torino)
|
||||
diff -ur root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.py root-6.24.02/tutorials/dataframe/df021_createTGraph.py
|
||||
--- root-6.24.02.orig/tutorials/dataframe/df021_createTGraph.py 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/dataframe/df021_createTGraph.py 2021-08-11 03:55:12.100151813 +0200
|
||||
@@ -4,7 +4,6 @@
|
||||
## Fill a TGraph using RDataFrame.
|
||||
##
|
||||
## \macro_code
|
||||
-## \macro_image
|
||||
##
|
||||
## \date July 2018
|
||||
## \authors Enrico Guiraud, Danilo Piparo (CERN), Massimo Tumolo (Politecnico di Torino)
|
||||
diff -ur root-6.24.02.orig/tutorials/tmva/tmva003_RReader.C root-6.24.02/tutorials/tmva/tmva003_RReader.C
|
||||
--- root-6.24.02.orig/tutorials/tmva/tmva003_RReader.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/tmva/tmva003_RReader.C 2021-08-11 04:16:33.833359421 +0200
|
||||
@@ -5,7 +5,6 @@
|
||||
/// TMVA XML files.
|
||||
///
|
||||
/// \macro_code
|
||||
-/// \macro_output
|
||||
///
|
||||
/// \date July 2019
|
||||
/// \author Stefan Wunsch
|
||||
diff -ur root-6.24.02.orig/tutorials/tmva/tmva103_Application.C root-6.24.02/tutorials/tmva/tmva103_Application.C
|
||||
--- root-6.24.02.orig/tutorials/tmva/tmva103_Application.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/tmva/tmva103_Application.C 2021-08-11 21:56:49.387390340 +0200
|
||||
@@ -6,7 +6,6 @@
|
||||
/// event-by-event inference, batch inference and pipelines with RDataFrame.
|
||||
///
|
||||
/// \macro_code
|
||||
-/// \macro_output
|
||||
///
|
||||
/// \date December 2018
|
||||
/// \author Stefan Wunsch
|
||||
diff -ur root-6.24.02.orig/tutorials/tmva/TMVA_CNN_Classification.C root-6.24.02/tutorials/tmva/TMVA_CNN_Classification.C
|
||||
--- root-6.24.02.orig/tutorials/tmva/TMVA_CNN_Classification.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/tmva/TMVA_CNN_Classification.C 2021-08-10 15:21:03.306171069 +0200
|
||||
@@ -6,7 +6,6 @@
|
||||
/// This is an example of using a CNN in TMVA. We do classification using a toy image data set
|
||||
/// that is generated when running the example macro
|
||||
///
|
||||
-/// \macro_image
|
||||
/// \macro_output
|
||||
/// \macro_code
|
||||
///
|
||||
diff -ur root-6.24.02.orig/tutorials/tmva/TMVA_Higgs_Classification.C root-6.24.02/tutorials/tmva/TMVA_Higgs_Classification.C
|
||||
--- root-6.24.02.orig/tutorials/tmva/TMVA_Higgs_Classification.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/tmva/TMVA_Higgs_Classification.C 2021-08-10 15:21:33.974251559 +0200
|
||||
@@ -7,7 +7,6 @@
|
||||
/// used in this paper: Baldi, P., P. Sadowski, and D. Whiteson. “Searching for Exotic Particles in High-energy Physics
|
||||
/// with Deep Learning.” Nature Communications 5 (July 2, 2014).
|
||||
///
|
||||
-/// \macro_image
|
||||
/// \macro_output
|
||||
/// \macro_code
|
||||
///
|
||||
diff -ur root-6.24.02.orig/tutorials/tmva/TMVA_RNN_Classification.C root-6.24.02/tutorials/tmva/TMVA_RNN_Classification.C
|
||||
--- root-6.24.02.orig/tutorials/tmva/TMVA_RNN_Classification.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/tmva/TMVA_RNN_Classification.C 2021-08-10 15:21:15.657203486 +0200
|
||||
@@ -6,7 +6,6 @@
|
||||
/// This is an example of using a RNN in TMVA. We do classification using a toy time dependent data set
|
||||
/// that is generated when running this example macro
|
||||
///
|
||||
-/// \macro_image
|
||||
/// \macro_output
|
||||
/// \macro_code
|
||||
///
|
||||
diff -ur root-6.24.02.orig/tutorials/v7/line.cxx root-6.24.02/tutorials/v7/line.cxx
|
||||
--- root-6.24.02.orig/tutorials/v7/line.cxx 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/v7/line.cxx 2021-08-16 14:25:32.528867781 +0200
|
||||
@@ -6,7 +6,6 @@
|
||||
/// "normal" coordinates' system and changing the line color linearly from black
|
||||
/// to red.
|
||||
///
|
||||
-/// \macro_image (line.png)
|
||||
/// \macro_code
|
||||
///
|
||||
/// \date 2018-03-18
|
||||
diff -ur root-6.24.02.orig/tutorials/v7/ntuple/ntpl005_introspection.C root-6.24.02/tutorials/v7/ntuple/ntpl005_introspection.C
|
||||
--- root-6.24.02.orig/tutorials/v7/ntuple/ntpl005_introspection.C 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/tutorials/v7/ntuple/ntpl005_introspection.C 2021-08-10 15:22:06.504336763 +0200
|
||||
@@ -4,7 +4,6 @@
|
||||
/// Write and read an RNTuple from a user-defined class. Adapted from tv3.C
|
||||
/// Illustrates various RNTuple introspection methods.
|
||||
///
|
||||
-/// \macro_image
|
||||
/// \macro_code
|
||||
///
|
||||
/// \date April 2020
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
From 5b8e969ca045aa238c685009e0aa48d74cbdbf22 Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Ellert <mattias.ellert@physics.uu.se>
|
||||
Date: Fri, 13 Mar 2020 17:09:03 +0100
|
||||
Subject: [PATCH 1/2] Fix ppc64le compilation with gcc 10
|
||||
|
||||
Reapply fix lost in the LLVM 9 upgrade. This fix is in LLVM 10.
|
||||
|
||||
Backported from llvm upstream
|
||||
https://reviews.llvm.org/D74129
|
||||
---
|
||||
interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp b/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp
|
||||
index c8ed42d266..16bb00d2e9 100644
|
||||
--- a/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp
|
||||
+++ b/interpreter/llvm/src/tools/clang/lib/Lex/Lexer.cpp
|
||||
@@ -2546,7 +2546,7 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr,
|
||||
'/', '/', '/', '/', '/', '/', '/', '/'
|
||||
};
|
||||
while (CurPtr+16 <= BufferEnd &&
|
||||
- !vec_any_eq(*(const vector unsigned char*)CurPtr, Slashes))
|
||||
+ !vec_any_eq(*(const __vector unsigned char*)CurPtr, Slashes))
|
||||
CurPtr += 16;
|
||||
#else
|
||||
// Scan for '/' quickly. Many block comments are very large.
|
||||
--
|
||||
2.30.2
|
||||
|
||||
245
root-get-rid-of-lsb_release.patch
Normal file
245
root-get-rid-of-lsb_release.patch
Normal file
|
|
@ -0,0 +1,245 @@
|
|||
From 2dde3d060aa21ff9d4a0612b991bd300b7704bdc Mon Sep 17 00:00:00 2001
|
||||
From: Axel Naumann <Axel.Naumann@cern.ch>
|
||||
Date: Fri, 22 Jul 2022 15:54:03 +0200
|
||||
Subject: [PATCH] [cmake,test] Get rid of `lsb_release`:
|
||||
|
||||
It is available less and less often, and we do not actually
|
||||
benefit a lot from printing the distro (stress) or we can get
|
||||
the same info from /etc/os-release (cmake).
|
||||
---
|
||||
cmake/modules/RootCPack.cmake | 11 +++++++++--
|
||||
math/mathcore/test/stressGoFTest.cxx | 4 ----
|
||||
test/bench.cxx | 4 ----
|
||||
test/stress.cxx | 4 ----
|
||||
test/stressFit.cxx | 4 ----
|
||||
test/stressGUI.cxx | 4 ----
|
||||
test/stressGeometry.cxx | 4 ----
|
||||
test/stressGraphics.cxx | 4 ----
|
||||
test/stressHepix.cxx | 4 ----
|
||||
test/stressHistFactory.cxx | 4 ----
|
||||
test/stressLinear.cxx | 4 ----
|
||||
test/stressRooFit.cxx | 4 ----
|
||||
test/stressRooStats.cxx | 4 ----
|
||||
test/stressTMVA.cxx | 4 ----
|
||||
14 files changed, 9 insertions(+), 54 deletions(-)
|
||||
|
||||
diff --git a/cmake/modules/RootCPack.cmake b/cmake/modules/RootCPack.cmake
|
||||
index a960eb81fd..807eac6ef2 100644
|
||||
--- a/cmake/modules/RootCPack.cmake
|
||||
+++ b/cmake/modules/RootCPack.cmake
|
||||
@@ -107,8 +107,15 @@ elseif(WIN32)
|
||||
set(OS_NAME_VERSION win32)
|
||||
endif()
|
||||
else()
|
||||
- execute_process(COMMAND lsb_release -is OUTPUT_VARIABLE osid OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
- execute_process(COMMAND lsb_release -rs OUTPUT_VARIABLE osvers OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
+ if(EXISTS "/etc/os-release")
|
||||
+ file(STRINGS /etc/os-release osid REGEX "^NAME=")
|
||||
+ string(REGEX REPLACE "NAME=\"(.*)\"" "\\1" osid "${osid}")
|
||||
+ file(STRINGS /etc/os-release osvers REGEX "^VERSION_ID=")
|
||||
+ string(REGEX REPLACE "NAME=\"(.*)\"" "\\1" osvers "${osvers}")
|
||||
+ else()
|
||||
+ execute_process(COMMAND lsb_release -is OUTPUT_VARIABLE osid OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
+ execute_process(COMMAND lsb_release -rs OUTPUT_VARIABLE osvers OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
+ endif()
|
||||
if(osid MATCHES Ubuntu)
|
||||
string(REGEX REPLACE "([0-9]+)[.].*" "\\1" osvers "${osvers}")
|
||||
set(OS_NAME_VERSION Linux-ubuntu${osvers}-${arch})
|
||||
diff --git a/math/mathcore/test/stressGoFTest.cxx b/math/mathcore/test/stressGoFTest.cxx
|
||||
index a78ca99c90..5aa1b4ef70 100644
|
||||
--- a/math/mathcore/test/stressGoFTest.cxx
|
||||
+++ b/math/mathcore/test/stressGoFTest.cxx
|
||||
@@ -56,10 +56,6 @@ struct GoFTStress {
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
sp.Resize(60);
|
||||
printf("* SYS: %s\n",sp.Data());
|
||||
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- printf("* SYS: %s\n",sp.Data());
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/bench.cxx b/test/bench.cxx
|
||||
index 82bc537e05..e89024e9d9 100644
|
||||
--- a/test/bench.cxx
|
||||
+++ b/test/bench.cxx
|
||||
@@ -295,10 +295,6 @@ int main(int argc, char **argv)
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
sp.Resize(60);
|
||||
printf("* SYS: %s\n",sp.Data());
|
||||
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- printf("* SYS: %s\n",sp.Data());
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/stress.cxx b/test/stress.cxx
|
||||
index d3087fdd56..29dba1625d 100644
|
||||
--- a/test/stress.cxx
|
||||
+++ b/test/stress.cxx
|
||||
@@ -200,10 +200,6 @@ void stress(Int_t nevent, Int_t style = 1,
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
sp.Resize(60);
|
||||
printf("* SYS: %s\n",sp.Data());
|
||||
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- printf("* SYS: %s\n",sp.Data());
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/stressFit.cxx b/test/stressFit.cxx
|
||||
index 667142eff9..80bbd0200f 100644
|
||||
--- a/test/stressFit.cxx
|
||||
+++ b/test/stressFit.cxx
|
||||
@@ -646,10 +646,6 @@ Int_t stressFit(const char *type, const char *algo, Int_t N)
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
sp.Resize(60);
|
||||
printf("* SYS: %s\n",sp.Data());
|
||||
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- printf("* SYS: %s\n",sp.Data());
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/stressGUI.cxx b/test/stressGUI.cxx
|
||||
index 1a92df5341..9daae5f5fe 100644
|
||||
--- a/test/stressGUI.cxx
|
||||
+++ b/test/stressGUI.cxx
|
||||
@@ -307,10 +307,6 @@ void stressGUI()
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
sp.Resize(60);
|
||||
printf("* SYS: %s\n",sp.Data());
|
||||
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- printf("* SYS: %s\n",sp.Data());
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/stressGeometry.cxx b/test/stressGeometry.cxx
|
||||
index 5e81f5f2ca..2dc366cbf8 100644
|
||||
--- a/test/stressGeometry.cxx
|
||||
+++ b/test/stressGeometry.cxx
|
||||
@@ -295,10 +295,6 @@ void stressGeometry(const char *exp="*", Bool_t generate_ref=kFALSE, Bool_t vecg
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
sp.Resize(60);
|
||||
printf("* SYS: %s\n",sp.Data());
|
||||
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- printf("* SYS: %s\n",sp.Data());
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/stressGraphics.cxx b/test/stressGraphics.cxx
|
||||
index 5fe958774d..8b6aa9af9a 100644
|
||||
--- a/test/stressGraphics.cxx
|
||||
+++ b/test/stressGraphics.cxx
|
||||
@@ -419,10 +419,6 @@ void stressGraphics(Int_t verbose = 0)
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
sp.Resize(60);
|
||||
printf("* SYS: %s\n",sp.Data());
|
||||
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- printf("* SYS: %s\n",sp.Data());
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/stressHepix.cxx b/test/stressHepix.cxx
|
||||
index d8d2a65a64..01dfc67a54 100644
|
||||
--- a/test/stressHepix.cxx
|
||||
+++ b/test/stressHepix.cxx
|
||||
@@ -143,10 +143,6 @@ int main(int argc, char **argv)
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
sp.Resize(60);
|
||||
printf("* SYS: %s\n",sp.Data());
|
||||
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- printf("* SYS: %s\n",sp.Data());
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/stressHistFactory.cxx b/test/stressHistFactory.cxx
|
||||
index b84fa70f86..ec6deac031 100644
|
||||
--- a/test/stressHistFactory.cxx
|
||||
+++ b/test/stressHistFactory.cxx
|
||||
@@ -139,10 +139,6 @@ Int_t stressHistFactory(const char* refFile, Bool_t writeRef, Int_t verbose, Boo
|
||||
if (UNIX) {
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
cout << "* SYS: " << sp << endl;
|
||||
- if (strstr(gSystem->GetBuildNode(), "Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- cout << "* SYS: " << sp << endl;
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(), "Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/stressLinear.cxx b/test/stressLinear.cxx
|
||||
index ce2e1af23d..e34ddf85a2 100644
|
||||
--- a/test/stressLinear.cxx
|
||||
+++ b/test/stressLinear.cxx
|
||||
@@ -296,10 +296,6 @@ void stressLinear(Int_t maxSizeReq,Int_t verbose)
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
sp.Resize(60);
|
||||
printf("* SYS: %s\n",sp.Data());
|
||||
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- printf("* SYS: %s\n",sp.Data());
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/stressRooFit.cxx b/test/stressRooFit.cxx
|
||||
index 18e214ec0c..4f7c5a3d83 100644
|
||||
--- a/test/stressRooFit.cxx
|
||||
+++ b/test/stressRooFit.cxx
|
||||
@@ -197,10 +197,6 @@ Int_t stressRooFit(const char* refFile, Bool_t writeRef, Int_t doVerbose, Int_t
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
sp.Resize(60);
|
||||
printf("* SYS: %s\n",sp.Data());
|
||||
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- printf("* SYS: %s\n",sp.Data());
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/stressRooStats.cxx b/test/stressRooStats.cxx
|
||||
index 35598b5919..adb3dc4cd8 100644
|
||||
--- a/test/stressRooStats.cxx
|
||||
+++ b/test/stressRooStats.cxx
|
||||
@@ -232,10 +232,6 @@ Int_t stressRooStats(const char* refFile, Bool_t writeRef, Int_t verbose, Bool_t
|
||||
if (UNIX) {
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
cout << "* SYS: " << sp << endl;
|
||||
- if (strstr(gSystem->GetBuildNode(), "Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- cout << "* SYS: " << sp << endl;
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(), "Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
diff --git a/test/stressTMVA.cxx b/test/stressTMVA.cxx
|
||||
index f7638a73f6..22e3feaf65 100644
|
||||
--- a/test/stressTMVA.cxx
|
||||
+++ b/test/stressTMVA.cxx
|
||||
@@ -3193,10 +3193,6 @@ int main(int argc, char **argv)
|
||||
TString sp = gSystem->GetFromPipe("uname -a");
|
||||
sp.Resize(60);
|
||||
printf("* SYS: %s\n",sp.Data());
|
||||
- if (strstr(gSystem->GetBuildNode(),"Linux")) {
|
||||
- sp = gSystem->GetFromPipe("lsb_release -d -s");
|
||||
- printf("* SYS: %s\n",sp.Data());
|
||||
- }
|
||||
if (strstr(gSystem->GetBuildNode(),"Darwin")) {
|
||||
sp = gSystem->GetFromPipe("sw_vers -productVersion");
|
||||
sp += " Mac OS X ";
|
||||
--
|
||||
2.37.1
|
||||
|
||||
6
root-get-src.sh
Executable file
6
root-get-src.sh
Executable file
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/sh
|
||||
VERSION=$1
|
||||
wget -N https://root.cern/download/root_v${VERSION}.source.tar.gz
|
||||
tar -z -x -f root_v${VERSION}.source.tar.gz
|
||||
find root-${VERSION}/fonts -type f -a '!' -name 'STIX*' -exec rm {} ';'
|
||||
tar -J -c --group root --owner root -f root-${VERSION}.tar.xz root-${VERSION}
|
||||
42
root-longlong.patch
Normal file
42
root-longlong.patch
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
From 2aa02353663674a338c92fa4e72a0c0e529c410e Mon Sep 17 00:00:00 2001
|
||||
From: Enrico Guiraud <enrico.guiraud@cern.ch>
|
||||
Date: Fri, 8 Apr 2022 17:52:18 +0200
|
||||
Subject: [PATCH] [DF] Fix long int + Snapshot test on 32 bit platforms
|
||||
|
||||
Co-authored-by: Mattias Ellert <mattias.ellert@physics.uu.se>
|
||||
---
|
||||
tree/dataframe/test/dataframe_snapshot.cxx | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tree/dataframe/test/dataframe_snapshot.cxx b/tree/dataframe/test/dataframe_snapshot.cxx
|
||||
index f41848e96a..ddbacaba0f 100644
|
||||
--- a/tree/dataframe/test/dataframe_snapshot.cxx
|
||||
+++ b/tree/dataframe/test/dataframe_snapshot.cxx
|
||||
@@ -495,11 +495,14 @@ void ReadWriteCarray(const char *outFileNameBase)
|
||||
t.Branch("vb", vb, "vb[size]/O");
|
||||
t.Branch("vl", vl, "vl[size]/G");
|
||||
|
||||
+ // use 2**33 as a larger-than-int value on 64 bits, otherwise just something larger than short (2**30)
|
||||
+ static constexpr long int longintTestValue = sizeof(long int) == 8 ? 8589934592 : 1073741824;
|
||||
+
|
||||
// Size 1
|
||||
size = 1;
|
||||
v[0] = 12;
|
||||
vb[0] = true;
|
||||
- vl[0] = 8589934592; // 2**33
|
||||
+ vl[0] = longintTestValue;
|
||||
t.Fill();
|
||||
|
||||
// Size 0 (see ROOT-9860)
|
||||
@@ -546,7 +549,7 @@ void ReadWriteCarray(const char *outFileNameBase)
|
||||
EXPECT_EQ(rvb.GetSize(), 1u);
|
||||
EXPECT_TRUE(rvb[0]);
|
||||
EXPECT_EQ(rvl.GetSize(), 1u);
|
||||
- EXPECT_EQ(rvl[0], 8589934592);
|
||||
+ EXPECT_EQ(rvl[0], longintTestValue);
|
||||
|
||||
// Size 0
|
||||
EXPECT_TRUE(r.Next());
|
||||
--
|
||||
2.35.1
|
||||
|
||||
17
root-make-DistRDF-optional.patch
Normal file
17
root-make-DistRDF-optional.patch
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
--- root-6.24.08/bindings/pyroot/pythonizations/python/ROOT/_facade.py.orig 2022-09-29 15:03:06.000000000 +0200
|
||||
+++ root-6.24.08/bindings/pyroot/pythonizations/python/ROOT/_facade.py 2023-03-19 09:40:08.823564686 +0100
|
||||
@@ -290,8 +290,12 @@
|
||||
from libROOTPythonizations import MakeNumpyDataFrame
|
||||
ns.MakeNumpyDataFrame = MakeNumpyDataFrame
|
||||
|
||||
- # Inject Experimental.Distributed package into namespace RDF
|
||||
- ns.Experimental = _create_rdf_experimental_distributed_module(ns)
|
||||
+ try:
|
||||
+ # Inject Experimental.Distributed package into namespace RDF if available
|
||||
+ ns.Experimental = _create_rdf_experimental_distributed_module(ns)
|
||||
+ except ImportError:
|
||||
+ pass
|
||||
+
|
||||
except:
|
||||
raise Exception('Failed to pythonize the namespace RDF')
|
||||
del type(self).RDF
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
From 774ab9358d852e2c004564183de4a60eaaa5ac98 Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Ellert <mattias.ellert@physics.uu.se>
|
||||
Date: Fri, 23 Apr 2021 21:40:14 +0200
|
||||
Subject: [PATCH 2/2] Actually request the use of the large code model for
|
||||
ppc64/ppc64le
|
||||
|
||||
Instead of erroring out with an assert.
|
||||
---
|
||||
interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp b/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp
|
||||
index 46771aa8c0..93a48f31f3 100644
|
||||
--- a/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp
|
||||
+++ b/interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp
|
||||
@@ -73,14 +73,14 @@ CreateHostTargetMachine(const clang::CompilerInstance& CI) {
|
||||
JTMB->getOptions().EmulatedTLS = false;
|
||||
#endif // _WIN32
|
||||
|
||||
- std::unique_ptr<TargetMachine> TM = cantFail(JTMB->createTargetMachine());
|
||||
-
|
||||
#if defined(__powerpc64__) || defined(__PPC64__)
|
||||
// We have to use large code model for PowerPC64 because TOC and text sections
|
||||
// can be more than 2GB apart.
|
||||
- assert(TM->getCodeModel() >= CodeModel::Large);
|
||||
+ JTMB->setCodeModel(CodeModel::Large);
|
||||
#endif
|
||||
|
||||
+ std::unique_ptr<TargetMachine> TM = cantFail(JTMB->createTargetMachine());
|
||||
+
|
||||
// Forcefully disable GlobalISel, it might be enabled on AArch64 without
|
||||
// optimizations. In tests on an Apple M1 after the upgrade to LLVM 9, this
|
||||
// new instruction selection framework emits branches / calls that expect all
|
||||
--
|
||||
2.30.2
|
||||
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
From 55ae047b70e927de5c84cfa5ad42905cbd58d499 Mon Sep 17 00:00:00 2001
|
||||
From: Vassil Vassilev <v.g.vassilev@gmail.com>
|
||||
Date: Sat, 4 Dec 2021 00:06:19 +0000
|
||||
Subject: [PATCH] [llvm] Restore the ppc64le support that we lost in llvm8.
|
||||
|
||||
This patch is backported from https://reviews.llvm.org/D94183
|
||||
|
||||
For more discussion see https://github.com/numba/numba/issues/4026
|
||||
|
||||
Fixes root-project/root#8072 and root-project/root#9297
|
||||
---
|
||||
.../src/lib/Target/PowerPC/PPCISelLowering.cpp | 17 +++++++++--------
|
||||
1 file changed, 9 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp b/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp
|
||||
index 24d50074860d..a922b40aa902 100644
|
||||
--- a/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp
|
||||
+++ b/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp
|
||||
@@ -4463,7 +4463,15 @@ callsShareTOCBase(const Function *Caller, SDValue Callee,
|
||||
if (!G)
|
||||
return false;
|
||||
|
||||
- const GlobalValue *GV = G->getGlobal();
|
||||
+ const GlobalValue *GV = G->getGlobal();
|
||||
+
|
||||
+ // If the GV is not a strong definition then we need to assume it can be
|
||||
+ // replaced by another function at link time. The function that replaces
|
||||
+ // it may not share the same TOC as the caller since the callee may be
|
||||
+ // replaced by a PC Relative version of the same function.
|
||||
+ if (!GV->isStrongDefinitionForLinker())
|
||||
+ return false;
|
||||
+
|
||||
// The medium and large code models are expected to provide a sufficiently
|
||||
// large TOC to provide all data addressing needs of a module with a
|
||||
// single TOC. Since each module will be addressed with a single TOC then we
|
||||
@@ -4472,13 +4480,6 @@ callsShareTOCBase(const Function *Caller, SDValue Callee,
|
||||
CodeModel::Large == TM.getCodeModel())
|
||||
return TM.shouldAssumeDSOLocal(*Caller->getParent(), GV);
|
||||
|
||||
- // Otherwise we need to ensure callee and caller are in the same section,
|
||||
- // since the linker may allocate multiple TOCs, and we don't know which
|
||||
- // sections will belong to the same TOC base.
|
||||
-
|
||||
- if (!GV->isStrongDefinitionForLinker())
|
||||
- return false;
|
||||
-
|
||||
// Any explicitly-specified sections and section prefixes must also match.
|
||||
// Also, if we're using -ffunction-sections, then each function is always in
|
||||
// a different section (the same is true for COMDAT functions).
|
||||
63
root-protect-against-empty-COMPILE_DEFINITIONS.patch
Normal file
63
root-protect-against-empty-COMPILE_DEFINITIONS.patch
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
From 08ab7e03061e551647d707637957252d121f9c39 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Rembser <jonas.rembser@cern.ch>
|
||||
Date: Tue, 21 Sep 2021 15:15:17 +0200
|
||||
Subject: [PATCH] [cmake] Protect against empty `COMPILE_DEFINITIONS` in
|
||||
rootcint command
|
||||
|
||||
In the `rootcint` command defined in `RootMacros.cmake`, the
|
||||
`COMPILE_DEFINITIONS` from the target are forwarded as compiler flags.
|
||||
|
||||
The `COMPILE_DEFINITIONS` are stored in the `module_defs` variable with
|
||||
a generator expression:
|
||||
|
||||
```
|
||||
set(module_defs $<TARGET_PROPERTY:${ARG_MODULE},COMPILE_DEFINITIONS>)
|
||||
```
|
||||
|
||||
Then, the definitions are added to the rootcint command with this
|
||||
expression:
|
||||
|
||||
```
|
||||
"$<$<BOOL:${module_defs}>:-D$<JOIN:${module_defs},;-D>>"
|
||||
```
|
||||
|
||||
This code was almost copied exactly from the CMake documentation
|
||||
example:
|
||||
|
||||
https://cmake.org/cmake/help/latest/manual/cmake-generator-expressions.7.html
|
||||
|
||||
In particular, the `BOOL` check makes sure that the if the target
|
||||
property is empty, we will not get a bare `-D` with nothing after it,
|
||||
corrupting the rootcint command.
|
||||
|
||||
However, there is no protextion against the case where the
|
||||
`COMPILE_DEFINITIONS` target property is not empty, but its elements are
|
||||
empty strings! This happened to me in my recent build.
|
||||
|
||||
Instead of trying to figure out where the empty strings are added to the
|
||||
`COMPILE_DEFINITIONS`, it is better to also protect against empty target
|
||||
property elements in the CMake generator expressions, which is
|
||||
implemented in this commit.
|
||||
---
|
||||
cmake/modules/RootMacros.cmake | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/cmake/modules/RootMacros.cmake b/cmake/modules/RootMacros.cmake
|
||||
index c52c23d29a..c62ffc2152 100644
|
||||
--- a/cmake/modules/RootMacros.cmake
|
||||
+++ b/cmake/modules/RootMacros.cmake
|
||||
@@ -628,7 +628,10 @@ function(ROOT_GENERATE_DICTIONARY dictionary)
|
||||
else()
|
||||
set(module_incs $<TARGET_PROPERTY:${ARG_MODULE},INCLUDE_DIRECTORIES>)
|
||||
endif()
|
||||
- set(module_defs $<TARGET_PROPERTY:${ARG_MODULE},COMPILE_DEFINITIONS>)
|
||||
+ # The COMPILE_DEFINITIONS list might contain empty elements. These are
|
||||
+ # removed with the FILTER generator expression, excluding elements that
|
||||
+ # match the ^$ regexp (only matches empty strings).
|
||||
+ set(module_defs "$<FILTER:$<TARGET_PROPERTY:${ARG_MODULE},COMPILE_DEFINITIONS>,EXCLUDE,^$>")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
--
|
||||
2.37.2
|
||||
|
||||
48
root-test-timeout.patch
Normal file
48
root-test-timeout.patch
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
From bfa7b7e59c3bcee4d6a5501c800b49334af326e5 Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Ellert <mattias.ellert@physics.uu.se>
|
||||
Date: Sun, 3 Jul 2022 08:18:57 +0200
|
||||
Subject: [PATCH] Increase test timeout
|
||||
|
||||
---
|
||||
tmva/tmva/test/DNN/CMakeLists.txt | 2 +-
|
||||
tutorials/CMakeLists.txt | 4 ++--
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/tmva/tmva/test/DNN/CMakeLists.txt b/tmva/tmva/test/DNN/CMakeLists.txt
|
||||
index a9233682f6..653540e9e3 100644
|
||||
--- a/tmva/tmva/test/DNN/CMakeLists.txt
|
||||
+++ b/tmva/tmva/test/DNN/CMakeLists.txt
|
||||
@@ -144,7 +144,7 @@ ROOT_ADD_TEST(TMVA-DNN-MethodDL-SGD-Optimization-Cpu COMMAND testMethodDLSGDOpti
|
||||
|
||||
# DNN - MethodDL Adam Optimization CPU
|
||||
ROOT_EXECUTABLE(testMethodDLAdamOptimizationCpu TestMethodDLAdamOptimizationCpu.cxx LIBRARIES ${Libraries})
|
||||
-ROOT_ADD_TEST(TMVA-DNN-MethodDL-Adam-Optimization-Cpu COMMAND testMethodDLAdamOptimizationCpu)
|
||||
+ROOT_ADD_TEST(TMVA-DNN-MethodDL-Adam-Optimization-Cpu COMMAND testMethodDLAdamOptimizationCpu TIMEOUT 1800)
|
||||
|
||||
# DNN - MethodDL Adagrad Optimization CPU
|
||||
ROOT_EXECUTABLE(testMethodDLAdagradOptimizationCpu TestMethodDLAdagradOptimizationCpu.cxx LIBRARIES ${Libraries})
|
||||
diff --git a/tutorials/CMakeLists.txt b/tutorials/CMakeLists.txt
|
||||
index 520d682d2d..a846e7552f 100644
|
||||
--- a/tutorials/CMakeLists.txt
|
||||
+++ b/tutorials/CMakeLists.txt
|
||||
@@ -479,7 +479,7 @@ foreach(t ${tutorials})
|
||||
|
||||
# These tests on ARM64 need much more than 20 minutes - increase the timeout
|
||||
if(ROOT_ARCHITECTURE MATCHES arm64 OR ROOT_ARCHITECTURE MATCHES ppc64)
|
||||
- set(thisTestTimeout 2400) # 40m
|
||||
+ set(thisTestTimeout 3000) # 50m
|
||||
else()
|
||||
set(thisTestTimeout 1200) # 20m
|
||||
endif()
|
||||
@@ -513,7 +513,7 @@ foreach(t ${mpi_tutorials})
|
||||
|
||||
# These tests on ARM64 need much more than 20 minutes - increase the timeout
|
||||
if(ROOT_ARCHITECTURE MATCHES arm64 OR ROOT_ARCHITECTURE MATCHES ppc64)
|
||||
- set(thisTestTimeout 2400) # 40m
|
||||
+ set(thisTestTimeout 3000) # 50m
|
||||
else()
|
||||
set(thisTestTimeout 1200) # 20m
|
||||
endif()
|
||||
--
|
||||
2.36.1
|
||||
|
||||
48
root-threadsh1-avoid-heap-use-after-free.patch
Normal file
48
root-threadsh1-avoid-heap-use-after-free.patch
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
From 493c4210168fa475aa4130c12e8fdff3b7d85c09 Mon Sep 17 00:00:00 2001
|
||||
From: Philippe Canal <pcanal@fnal.gov>
|
||||
Date: Mon, 7 Mar 2022 13:32:37 -0600
|
||||
Subject: [PATCH] threadsh1: Avoid heap-use-after-free.
|
||||
|
||||
Previously, the Canvas `Close` signal which triggers a call to the local function `close` which
|
||||
was unconditionally call `Kill` on its associated thread would call it on an already deleted
|
||||
object if the `TThread` was deleted before the `TCanvas`.
|
||||
|
||||
This fix #10015 (detected by using ASAN).
|
||||
---
|
||||
tutorials/legacy/thread/threadsh1.C | 13 +++++++------
|
||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/tutorials/legacy/thread/threadsh1.C b/tutorials/legacy/thread/threadsh1.C
|
||||
index b819f5d020..d6abc67e36 100644
|
||||
--- a/tutorials/legacy/thread/threadsh1.C
|
||||
+++ b/tutorials/legacy/thread/threadsh1.C
|
||||
@@ -67,7 +67,8 @@ void *joiner(void *)
|
||||
void closed(Int_t id)
|
||||
{
|
||||
// kill the thread matching the canvas being closed
|
||||
- t[id]->Kill();
|
||||
+ if (t[id])
|
||||
+ t[id]->Kill();
|
||||
// and set the canvas pointer to 0
|
||||
c[id] = 0;
|
||||
}
|
||||
@@ -142,11 +143,11 @@ void threadsh1()
|
||||
t[4]->Join();
|
||||
TThread::Ps();
|
||||
|
||||
- delete t[0];
|
||||
- delete t[1];
|
||||
- delete t[2];
|
||||
- delete t[3];
|
||||
- delete t[4];
|
||||
+ delete t[0]; t[0] = nullptr; // Prevents after deletion access.
|
||||
+ delete t[1]; t[1] = nullptr;
|
||||
+ delete t[2]; t[2] = nullptr;
|
||||
+ delete t[3]; t[3] = nullptr;
|
||||
+ delete t[4]; t[4] = nullptr;
|
||||
|
||||
delete rng[0];
|
||||
delete rng[1];
|
||||
--
|
||||
2.35.1
|
||||
|
||||
223
root-tmva-threads.patch
Normal file
223
root-tmva-threads.patch
Normal file
|
|
@ -0,0 +1,223 @@
|
|||
diff --git a/tutorials/tmva/TMVA_CNN_Classification.C b/tutorials/tmva/TMVA_CNN_Classification.C
|
||||
index 838581a925..db5af784d4 100644
|
||||
--- a/tutorials/tmva/TMVA_CNN_Classification.C
|
||||
+++ b/tutorials/tmva/TMVA_CNN_Classification.C
|
||||
@@ -23,7 +23,7 @@
|
||||
/// we create a signal and background 2D histograms from 2d gaussians
|
||||
/// with a location (means in X and Y) different for each event
|
||||
/// The difference between signal and background is in the gaussian width.
|
||||
-/// The width for the bakground gaussian is slightly larger than the signal width by few % values
|
||||
+/// The width for the background gaussian is slightly larger than the signal width by few % values
|
||||
///
|
||||
///
|
||||
void MakeImagesTree(int n, int nh, int nw)
|
||||
@@ -48,7 +48,7 @@ void MakeImagesTree(int n, int nh, int nw)
|
||||
auto f1 = new TF2("f1", "xygaus");
|
||||
auto f2 = new TF2("f2", "xygaus");
|
||||
TTree sgn("sig_tree", "signal_tree");
|
||||
- TTree bkg("bkg_tree", "bakground_tree");
|
||||
+ TTree bkg("bkg_tree", "background_tree");
|
||||
|
||||
TFile f(fileOutName, "RECREATE");
|
||||
|
||||
@@ -107,7 +107,16 @@ void MakeImagesTree(int n, int nh, int nw)
|
||||
f.Close();
|
||||
}
|
||||
|
||||
-void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
|
||||
+/// @brief Run the TMVA CNN Classification example
|
||||
+/// @param nevts : number of signal/background events. Use by default a low value (1000)
|
||||
+/// but increase to at least 5000 to get a good result
|
||||
+/// @param opt : vector of bool with method used (default all on if available). The order is:
|
||||
+/// - TMVA CNN
|
||||
+/// - Keras CNN
|
||||
+/// - TMVA DNN
|
||||
+/// - TMVA BDT
|
||||
+/// - PyTorch CNN
|
||||
+void TMVA_CNN_Classification(int nevts = 1000, std::vector<bool> opt = {1, 1, 1, 1, 1})
|
||||
{
|
||||
|
||||
bool useTMVACNN = (opt.size() > 0) ? opt[0] : false;
|
||||
@@ -125,17 +134,17 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
|
||||
|
||||
bool writeOutputFile = true;
|
||||
|
||||
- int num_threads = 0; // use default threads
|
||||
+ int num_threads = 4; // use max 4 threads
|
||||
+ // switch off MT in OpenBLAS to avoid conflict with tbb
|
||||
+ gSystem->Setenv("OMP_NUM_THREADS", "1");
|
||||
|
||||
TMVA::Tools::Instance();
|
||||
|
||||
// do enable MT running
|
||||
if (num_threads >= 0) {
|
||||
ROOT::EnableImplicitMT(num_threads);
|
||||
- if (num_threads > 0) gSystem->Setenv("OMP_NUM_THREADS", TString::Format("%d",num_threads));
|
||||
}
|
||||
- else
|
||||
- gSystem->Setenv("OMP_NUM_THREADS", "1");
|
||||
+
|
||||
|
||||
std::cout << "Running with nthreads = " << ROOT::GetThreadPoolSize() << std::endl;
|
||||
|
||||
@@ -145,6 +154,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
|
||||
TMVA::PyMethodBase::PyInitialize();
|
||||
#else
|
||||
useKerasCNN = false;
|
||||
+ usePyTorchCNN = false;
|
||||
#endif
|
||||
|
||||
TFile *outputFile = nullptr;
|
||||
@@ -160,7 +170,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
|
||||
The factory is the major TMVA object you have to interact with. Here is the list of parameters you need to pass
|
||||
|
||||
- The first argument is the base of the name of all the output
|
||||
- weightfiles in the directory weight/ that will be created with the
|
||||
+ weight files in the directory weight/ that will be created with the
|
||||
method parameters
|
||||
|
||||
- The second argument is the output file for the training results
|
||||
@@ -207,7 +217,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
|
||||
|
||||
// if file does not exists create it
|
||||
if (!fileExist) {
|
||||
- MakeImagesTree(5000, 16, 16);
|
||||
+ MakeImagesTree(nevts, 16, 16);
|
||||
}
|
||||
|
||||
// TString inputFileName = "tmva_class_example.root";
|
||||
@@ -288,7 +298,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
|
||||
// Boosted Decision Trees
|
||||
if (useTMVABDT) {
|
||||
factory.BookMethod(loader, TMVA::Types::kBDT, "BDT",
|
||||
- "!V:NTrees=400:MinNodeSize=2.5%:MaxDepth=2:BoostType=AdaBoost:AdaBoostBeta=0.5:"
|
||||
+ "!V:NTrees=200:MinNodeSize=2.5%:MaxDepth=2:BoostType=AdaBoost:AdaBoostBeta=0.5:"
|
||||
"UseBaggedBoost:BaggedSampleFraction=0.5:SeparationType=GiniIndex:nCuts=20");
|
||||
}
|
||||
/**
|
||||
@@ -354,7 +364,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
|
||||
- note in this case we are using a filer 3x3 and padding=1 and stride=1 so we get the output dimension of the
|
||||
conv layer equal to the input
|
||||
|
||||
- - note we use after the first convolutional layer a batch normalization layer. This seems to help significatly the
|
||||
+ - note we use after the first convolutional layer a batch normalization layer. This seems to help significantly the
|
||||
convergence
|
||||
|
||||
- For the MaxPool layer:
|
||||
@@ -419,7 +429,7 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
|
||||
|
||||
Info("TMVA_CNN_Classification", "Building convolutional keras model");
|
||||
// create python script which can be executed
|
||||
- // crceate 2 conv2d layer + maxpool + dense
|
||||
+ // create 2 conv2d layer + maxpool + dense
|
||||
TMacro m;
|
||||
m.AddLine("import tensorflow");
|
||||
m.AddLine("from tensorflow.keras.models import Sequential");
|
||||
@@ -439,13 +449,13 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
|
||||
m.AddLine("model.add(Flatten())");
|
||||
m.AddLine("model.add(Dense(256, activation = 'relu')) ");
|
||||
m.AddLine("model.add(Dense(2, activation = 'sigmoid')) ");
|
||||
- m.AddLine("model.compile(loss = 'binary_crossentropy', optimizer = Adam(lr = 0.001), metrics = ['accuracy'])");
|
||||
+ m.AddLine("model.compile(loss = 'binary_crossentropy', optimizer = Adam(learning_rate = 0.001), weighted_metrics = ['accuracy'])");
|
||||
m.AddLine("model.save('model_cnn.h5')");
|
||||
m.AddLine("model.summary()");
|
||||
|
||||
m.SaveSource("make_cnn_model.py");
|
||||
// execute
|
||||
- gSystem->Exec("python make_cnn_model.py");
|
||||
+ gSystem->Exec("python3 make_cnn_model.py");
|
||||
|
||||
if (gSystem->AccessPathName("model_cnn.h5")) {
|
||||
Warning("TMVA_CNN_Classification", "Error creating Keras model file - skip using Keras");
|
||||
@@ -465,10 +477,9 @@ void TMVA_CNN_Classification(std::vector<bool> opt = {1, 1, 1, 1, 1})
|
||||
Info("TMVA_CNN_Classification", "Using Convolutional PyTorch Model");
|
||||
TString pyTorchFileName = gROOT->GetTutorialDir() + TString("/tmva/PyTorch_Generate_CNN_Model.py");
|
||||
// check that pytorch can be imported and file defining the model and used later when booking the method is existing
|
||||
- if (gSystem->Exec("python -c 'import torch'") || gSystem->AccessPathName(pyTorchFileName) ) {
|
||||
+ if (gSystem->Exec("python3 -c 'import torch'") || gSystem->AccessPathName(pyTorchFileName)) {
|
||||
Warning("TMVA_CNN_Classification", "PyTorch is not installed or model building file is not existing - skip using PyTorch");
|
||||
- }
|
||||
- else {
|
||||
+ } else {
|
||||
// book PyTorch method only if PyTorch model could be created
|
||||
Info("TMVA_CNN_Classification", "Booking PyTorch CNN model");
|
||||
TString methodOpt = "H:!V:VarTransform=None:FilenameModel=PyTorchModelCNN.pt:"
|
||||
diff --git a/tutorials/tmva/TMVA_RNN_Classification.C b/tutorials/tmva/TMVA_RNN_Classification.C
|
||||
index 5bfec52196..d4bb7a4e4a 100644
|
||||
--- a/tutorials/tmva/TMVA_RNN_Classification.C
|
||||
+++ b/tutorials/tmva/TMVA_RNN_Classification.C
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
/// Helper function to generate the time data set
|
||||
/// make some time data but not of fixed length.
|
||||
-/// use a poisson with mu = 5 and troncated at 10
|
||||
+/// use a poisson with mu = 5 and truncated at 10
|
||||
///
|
||||
void MakeTimeData(int n, int ntime, int ndim )
|
||||
{
|
||||
@@ -136,13 +136,14 @@ void MakeTimeData(int n, int ntime, int ndim )
|
||||
}
|
||||
}
|
||||
/// macro for performing a classification using a Recurrent Neural Network
|
||||
+/// @param nevts = 2000 Number of events used. (increase for better classification results)
|
||||
/// @param use_type
|
||||
/// use_type = 0 use Simple RNN network
|
||||
/// use_type = 1 use LSTM network
|
||||
/// use_type = 2 use GRU
|
||||
/// use_type = 3 build 3 different networks with RNN, LSTM and GRU
|
||||
|
||||
-void TMVA_RNN_Classification(int use_type = 1)
|
||||
+void TMVA_RNN_Classification(int nevts = 2000, int use_type = 1)
|
||||
{
|
||||
|
||||
const int ninput = 30;
|
||||
@@ -150,7 +151,7 @@ void TMVA_RNN_Classification(int use_type = 1)
|
||||
const int batchSize = 100;
|
||||
const int maxepochs = 20;
|
||||
|
||||
- int nTotEvts = 10000; // total events to be generated for signal or background
|
||||
+ int nTotEvts = nevts; // total events to be generated for signal or background
|
||||
|
||||
bool useKeras = true;
|
||||
|
||||
@@ -190,14 +191,14 @@ void TMVA_RNN_Classification(int use_type = 1)
|
||||
useKeras = false;
|
||||
#endif
|
||||
|
||||
- int num_threads = 0; // use by default all threads
|
||||
+ 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);
|
||||
- if (num_threads > 0) gSystem->Setenv("OMP_NUM_THREADS", TString::Format("%d",num_threads));
|
||||
}
|
||||
- else
|
||||
- gSystem->Setenv("OMP_NUM_THREADS", "1");
|
||||
|
||||
TMVA::Config::Instance();
|
||||
|
||||
@@ -424,17 +425,17 @@ the option string
|
||||
m.AddLine("model.add(Dense(64, activation = 'tanh')) ");
|
||||
m.AddLine("model.add(Dense(2, activation = 'sigmoid')) ");
|
||||
m.AddLine(
|
||||
- "model.compile(loss = 'binary_crossentropy', optimizer = Adam(lr = 0.001), metrics = ['accuracy'])");
|
||||
+ "model.compile(loss = 'binary_crossentropy', optimizer = Adam(learning_rate = 0.001), weighted_metrics = ['accuracy'])");
|
||||
m.AddLine(TString::Format("modelName = '%s'", modelName.Data()));
|
||||
m.AddLine("model.save(modelName)");
|
||||
m.AddLine("model.summary()");
|
||||
|
||||
m.SaveSource("make_rnn_model.py");
|
||||
- // execute
|
||||
- gSystem->Exec("python make_rnn_model.py");
|
||||
+ // execute python script to make the model
|
||||
+ gSystem->Exec("python3 make_rnn_model.py");
|
||||
|
||||
if (gSystem->AccessPathName(modelName)) {
|
||||
- Warning("TMVA_RNN_Classification", "Error creating Keras recurrennt model file - Skip using Keras");
|
||||
+ Warning("TMVA_RNN_Classification", "Error creating Keras recurrent model file - Skip using Keras");
|
||||
useKeras = false;
|
||||
} else {
|
||||
// book PyKeras method only if Keras model could be created
|
||||
|
|
@ -1,111 +1,186 @@
|
|||
diff -ur root-6.24.02.orig/cmake/modules/SearchInstalledSoftware.cmake root-6.24.02/cmake/modules/SearchInstalledSoftware.cmake
|
||||
--- root-6.24.02.orig/cmake/modules/SearchInstalledSoftware.cmake 2021-06-28 11:17:14.000000000 +0200
|
||||
+++ root-6.24.02/cmake/modules/SearchInstalledSoftware.cmake 2021-08-11 10:56:26.680731609 +0200
|
||||
@@ -1699,102 +1699,17 @@
|
||||
From 29884ae01fde27204d92f554da4e92227a2ed1e6 Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Ellert <mattias.ellert@physics.uu.se>
|
||||
Date: Sat, 26 Mar 2022 10:22:07 +0100
|
||||
Subject: [PATCH 1/2] Implement builtin_gtest option
|
||||
|
||||
By setting the option to OFF the system gtest and gmock are used.
|
||||
This allows doing tests without network available, e.g. during a
|
||||
package build for Fedora/EPEL.
|
||||
---
|
||||
cmake/modules/FindGTest.cmake | 81 +++++++++++++++++++++
|
||||
cmake/modules/RootBuildOptions.cmake | 2 +
|
||||
cmake/modules/RootMacros.cmake | 2 +-
|
||||
cmake/modules/SearchInstalledSoftware.cmake | 44 ++++++++---
|
||||
4 files changed, 118 insertions(+), 11 deletions(-)
|
||||
create mode 100644 cmake/modules/FindGTest.cmake
|
||||
|
||||
diff --git a/cmake/modules/FindGTest.cmake b/cmake/modules/FindGTest.cmake
|
||||
new file mode 100644
|
||||
index 0000000000..438ec501c2
|
||||
--- /dev/null
|
||||
+++ b/cmake/modules/FindGTest.cmake
|
||||
@@ -0,0 +1,81 @@
|
||||
+# Find the gtest and gmock includes and library.
|
||||
+#
|
||||
+# This module defines
|
||||
+# GTEST_LIBRARIES
|
||||
+# GTEST_MAIN_LIBRARIES
|
||||
+# GTEST_INCLUDE_DIRS
|
||||
+# GMOCK_LIBRARIES
|
||||
+# GMOCK_MAIN_LIBRARIES
|
||||
+# GMOCK_INCLUDE_DIRS
|
||||
+#
|
||||
+# GTEST_FOUND true if all libraries present
|
||||
+
|
||||
+find_package(Threads QUIET)
|
||||
+
|
||||
+find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h)
|
||||
+find_library(GTEST_LIBRARIES NAMES gtest)
|
||||
+find_library(GTEST_MAIN_LIBRARIES NAMES gtest_main)
|
||||
+
|
||||
+find_path(GMOCK_INCLUDE_DIRS NAMES gmock/gmock.h)
|
||||
+find_library(GMOCK_LIBRARIES NAMES gmock)
|
||||
+find_library(GMOCK_MAIN_LIBRARIES NAMES gmock_main)
|
||||
+
|
||||
+# Special for EPEL 7's gmock
|
||||
+if(NOT GMOCK_LIBRARIES)
|
||||
+ find_path(GMOCK_SRC_DIR NAMES gmock-all.cc PATHS /usr/src/gmock)
|
||||
+endif()
|
||||
+
|
||||
+if(NOT GMOCK_MAIN_LIBRARIES)
|
||||
+ find_path(GMOCK_MAIN_SRC_DIR NAMES gmock_main.cc PATHS /usr/src/gmock)
|
||||
+endif()
|
||||
+
|
||||
+if (GTEST_INCLUDE_DIRS AND
|
||||
+ GTEST_LIBRARIES AND
|
||||
+ GTEST_MAIN_LIBRARIES AND
|
||||
+ GMOCK_INCLUDE_DIRS AND
|
||||
+ (GMOCK_LIBRARIES OR GMOCK_SRC_DIR) AND
|
||||
+ (GMOCK_MAIN_LIBRARIES OR GMOCK_MAIN_SRC_DIR))
|
||||
+
|
||||
+ add_library(gtest UNKNOWN IMPORTED)
|
||||
+ set_target_properties(gtest PROPERTIES
|
||||
+ IMPORTED_LOCATION ${GTEST_LIBRARIES}
|
||||
+ INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIRS})
|
||||
+ target_link_libraries(gtest INTERFACE Threads::Threads)
|
||||
+
|
||||
+ add_library(gtest_main UNKNOWN IMPORTED)
|
||||
+ set_target_properties(gtest_main PROPERTIES
|
||||
+ IMPORTED_LOCATION ${GTEST_MAIN_LIBRARIES})
|
||||
+ target_link_libraries(gtest_main INTERFACE gtest Threads::Threads)
|
||||
+
|
||||
+ if(GMOCK_LIBRARIES)
|
||||
+ add_library(gmock UNKNOWN IMPORTED)
|
||||
+ set_target_properties(gmock PROPERTIES
|
||||
+ IMPORTED_LOCATION ${GMOCK_LIBRARIES}
|
||||
+ INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIRS})
|
||||
+ else()
|
||||
+ add_library(gmock STATIC ${GMOCK_SRC_DIR}/gmock-all.cc)
|
||||
+ target_include_directories(gmock PUBLIC ${GMOCK_INCLUDE_DIRS})
|
||||
+ set(GMOCK_LIBRARIES gmock)
|
||||
+ endif()
|
||||
+ target_link_libraries(gmock INTERFACE gtest Threads::Threads)
|
||||
+
|
||||
+ if(GMOCK_MAIN_LIBRARIES)
|
||||
+ add_library(gmock_main UNKNOWN IMPORTED)
|
||||
+ set_target_properties(gmock_main PROPERTIES
|
||||
+ IMPORTED_LOCATION ${GMOCK_MAIN_LIBRARIES})
|
||||
+ else()
|
||||
+ add_library(gmock_main STATIC ${GMOCK_MAIN_SRC_DIR}/gmock_main.cc)
|
||||
+ set(GMOCK_MAIN_LIBRARIES gmock_main)
|
||||
+ endif()
|
||||
+ target_link_libraries(gmock_main INTERFACE gmock Threads::Threads)
|
||||
+
|
||||
+endif()
|
||||
+
|
||||
+include(FindPackageHandleStandardArgs)
|
||||
+find_package_handle_standard_args(GTest DEFAULT_MSG
|
||||
+ GTEST_LIBRARIES
|
||||
+ GTEST_MAIN_LIBRARIES
|
||||
+ GTEST_INCLUDE_DIRS
|
||||
+ GMOCK_LIBRARIES
|
||||
+ GMOCK_MAIN_LIBRARIES
|
||||
+ GMOCK_INCLUDE_DIRS)
|
||||
diff --git a/cmake/modules/RootBuildOptions.cmake b/cmake/modules/RootBuildOptions.cmake
|
||||
index 7886c5f3e9..01108a18c9 100644
|
||||
--- a/cmake/modules/RootBuildOptions.cmake
|
||||
+++ b/cmake/modules/RootBuildOptions.cmake
|
||||
@@ -94,6 +94,7 @@ ROOT_BUILD_OPTION(builtin_ftgl OFF "Build bundled copy of FTGL")
|
||||
ROOT_BUILD_OPTION(builtin_gl2ps OFF "Build bundled copy of gl2ps")
|
||||
ROOT_BUILD_OPTION(builtin_glew OFF "Build bundled copy of GLEW")
|
||||
ROOT_BUILD_OPTION(builtin_gsl OFF "Build GSL internally (requires network)")
|
||||
+ROOT_BUILD_OPTION(builtin_gtest OFF "Build googletest internally (requires network)")
|
||||
ROOT_BUILD_OPTION(builtin_llvm ON "Build bundled copy of LLVM")
|
||||
ROOT_BUILD_OPTION(builtin_lz4 OFF "Build bundled copy of lz4")
|
||||
ROOT_BUILD_OPTION(builtin_lzma OFF "Build bundled copy of lzma")
|
||||
@@ -293,6 +294,7 @@ if(builtin_all)
|
||||
set(builtin_gl2ps_defvalue ON)
|
||||
set(builtin_glew_defvalue ON)
|
||||
set(builtin_gsl_defvalue ON)
|
||||
+ set(builtin_gtest_defvalue ON)
|
||||
set(builtin_llvm_defvalue ON)
|
||||
set(builtin_lz4_defvalue ON)
|
||||
set(builtin_lzma_defvalue ON)
|
||||
diff --git a/cmake/modules/RootMacros.cmake b/cmake/modules/RootMacros.cmake
|
||||
index cb75c0b1da..38fd5d6baf 100644
|
||||
--- a/cmake/modules/RootMacros.cmake
|
||||
+++ b/cmake/modules/RootMacros.cmake
|
||||
@@ -1671,7 +1671,7 @@ function(ROOT_ADD_TEST test)
|
||||
|
||||
#---Download googletest--------------------------------------------------------------
|
||||
if (testing)
|
||||
- # FIXME: Remove our version of gtest in roottest. We can reuse this one.
|
||||
- # Add googletest
|
||||
- # http://stackoverflow.com/questions/9689183/cmake-googletest
|
||||
+ # Workaround for missing libraries in Fedora's gmock packaging < 1.8.0
|
||||
+ if(EXISTS ${CMAKE_SOURCE_DIR}/googlemock)
|
||||
+ set(_G_LIBRARY_PATH ${CMAKE_SOURCE_DIR}/googlemock)
|
||||
set_property(TEST ${test} APPEND PROPERTY ENVIRONMENT ROOT_HIST=0)
|
||||
|
||||
- set(_gtest_byproduct_binary_dir
|
||||
- ${CMAKE_CURRENT_BINARY_DIR}/googletest-prefix/src/googletest-build)
|
||||
- set(_gtest_byproducts
|
||||
- ${_gtest_byproduct_binary_dir}/lib/libgtest.a
|
||||
- ${_gtest_byproduct_binary_dir}/lib/libgtest_main.a
|
||||
- ${_gtest_byproduct_binary_dir}/lib/libgmock.a
|
||||
- ${_gtest_byproduct_binary_dir}/lib/libgmock_main.a
|
||||
- )
|
||||
-
|
||||
- if(MSVC)
|
||||
- set(EXTRA_GTEST_OPTS
|
||||
- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=${_gtest_byproduct_binary_dir}/lib/
|
||||
- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL:PATH=${_gtest_byproduct_binary_dir}/lib/
|
||||
- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${_gtest_byproduct_binary_dir}/lib/
|
||||
- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO:PATH=${_gtest_byproduct_binary_dir}/lib/
|
||||
- -Dgtest_force_shared_crt=ON
|
||||
- BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release)
|
||||
- endif()
|
||||
- if(APPLE)
|
||||
- set(EXTRA_GTEST_OPTS
|
||||
- -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT})
|
||||
- endif()
|
||||
-
|
||||
- ExternalProject_Add(
|
||||
- googletest
|
||||
- GIT_REPOSITORY https://github.com/google/googletest.git
|
||||
- GIT_SHALLOW 1
|
||||
- GIT_TAG release-1.10.0
|
||||
- UPDATE_COMMAND ""
|
||||
- # TIMEOUT 10
|
||||
- # # Force separate output paths for debug and release builds to allow easy
|
||||
- # # identification of correct lib in subsequent TARGET_LINK_LIBRARIES commands
|
||||
- # CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
|
||||
- # -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
|
||||
- # -Dgtest_force_shared_crt=ON
|
||||
- CMAKE_ARGS -G ${CMAKE_GENERATOR}
|
||||
- -DCMAKE_BUILD_TYPE=Release
|
||||
- -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||
- -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
|
||||
- -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
||||
- -DCMAKE_CXX_FLAGS=${ROOT_EXTERNAL_CXX_FLAGS}
|
||||
- -DCMAKE_AR=${CMAKE_AR}
|
||||
- -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
|
||||
- ${EXTRA_GTEST_OPTS}
|
||||
- # Disable install step
|
||||
- INSTALL_COMMAND ""
|
||||
- BUILD_BYPRODUCTS ${_gtest_byproducts}
|
||||
- # Wrap download, configure and build steps in a script to log output
|
||||
- LOG_DOWNLOAD ON
|
||||
- LOG_CONFIGURE ON
|
||||
- LOG_BUILD ON
|
||||
- TIMEOUT 600
|
||||
- )
|
||||
-
|
||||
- # Specify include dirs for gtest and gmock
|
||||
- ExternalProject_Get_Property(googletest source_dir)
|
||||
- set(GTEST_INCLUDE_DIR ${source_dir}/googletest/include)
|
||||
- set(GMOCK_INCLUDE_DIR ${source_dir}/googlemock/include)
|
||||
- # Create the directories. Prevents bug https://gitlab.kitware.com/cmake/cmake/issues/15052
|
||||
- file(MAKE_DIRECTORY ${GTEST_INCLUDE_DIR} ${GMOCK_INCLUDE_DIR})
|
||||
-
|
||||
- # Libraries
|
||||
- ExternalProject_Get_Property(googletest binary_dir)
|
||||
- set(_G_LIBRARY_PATH ${binary_dir}/lib/)
|
||||
-
|
||||
- # Use gmock_main instead of gtest_main because it initializes gtest as well.
|
||||
- # Note: The libraries are listed in reverse order of their dependancies.
|
||||
- foreach(lib gtest gtest_main gmock gmock_main)
|
||||
+ foreach(lib gmock gmock_main)
|
||||
add_library(${lib} IMPORTED STATIC GLOBAL)
|
||||
- set_target_properties(${lib} PROPERTIES
|
||||
- IMPORTED_LOCATION "${_G_LIBRARY_PATH}${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
- INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}"
|
||||
- )
|
||||
- add_dependencies(${lib} googletest)
|
||||
- if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND
|
||||
- ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL 9)
|
||||
- target_compile_options(${lib} INTERFACE -Wno-deprecated-copy)
|
||||
- endif()
|
||||
endforeach()
|
||||
- # Once we require at least cmake 3.11, target_include_directories will work for imported targets
|
||||
- # Because of https://gitlab.kitware.com/cmake/cmake/-/merge_requests/1264
|
||||
- # We need this workaround:
|
||||
- SET_PROPERTY(TARGET gtest APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR})
|
||||
- SET_PROPERTY(TARGET gmock APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIR})
|
||||
- #target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIR})
|
||||
- #target_include_directories(gmock INTERFACE ${GMOCK_INCLUDE_DIR})
|
||||
-
|
||||
- set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
- set_property(TARGET gtest_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
set_property(TARGET gmock PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
set_property(TARGET gmock_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
|
||||
+ endif()
|
||||
- #- Handle TIMOUT and DEPENDS arguments
|
||||
+ #- Handle TIMEOUT and DEPENDS arguments
|
||||
if(ARG_TIMEOUT)
|
||||
set_property(TEST ${test} PROPERTY TIMEOUT ${ARG_TIMEOUT})
|
||||
endif()
|
||||
diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake
|
||||
index fe40898d12..b6a3cc4c76 100644
|
||||
--- a/cmake/modules/SearchInstalledSoftware.cmake
|
||||
+++ b/cmake/modules/SearchInstalledSoftware.cmake
|
||||
@@ -1942,8 +1933,41 @@ if (roofit_multiprocess)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
#------------------------------------------------------------------------------------
|
||||
-#---Download googletest--------------------------------------------------------------
|
||||
+#---Check for googletest---------------------------------------------------------------
|
||||
if (testing)
|
||||
+ if (NOT builtin_gtest)
|
||||
+ if(fail-on-missing)
|
||||
+ find_package(GTest REQUIRED)
|
||||
+ else()
|
||||
+ find_package(GTest)
|
||||
+ if(NOT GTEST_FOUND)
|
||||
+ if(NO_CONNECTION)
|
||||
+ if(fail-on-missing)
|
||||
+ message(FATAL_ERROR "No internet connection and GTest was not found. Please check your connection, or either disable the 'testing' option or the 'fail-on-missing' to automatically disable options requiring internet access")
|
||||
+ else()
|
||||
+ message(STATUS "GTest not found, and no internet connection. Disabing the 'testing' option.")
|
||||
+ set(testing OFF CACHE BOOL "Disabled because testing requested and GTest not found (${builtin_gtest_description}) and there is no internet connection" FORCE)
|
||||
+ endif()
|
||||
+ else()
|
||||
+ message(STATUS "GTest not found, switching ON 'builtin_gtest' option.")
|
||||
+ set(builtin_gtest ON CACHE BOOL "Enabled because testing requested and GTest not found (${builtin_gtest_description})" FORCE)
|
||||
+ endif()
|
||||
+ endif()
|
||||
+ endif()
|
||||
+ else()
|
||||
+ if(NO_CONNECTION)
|
||||
+ if(fail-on-missing)
|
||||
+ message(FATAL_ERROR "No internet connection. Please check your connection, or either disable the 'testing' option or the 'builtin_gtest' option or the 'fail-on-missing' option to automatically disable options requiring internet access")
|
||||
+ else()
|
||||
+ message(STATUS "No internet connection, disabling the 'testing' and 'builtin_gtest' options")
|
||||
+ set(testing OFF CACHE BOOL "Disabled because there is no internet connection" FORCE)
|
||||
+ set(builtin_gtest OFF CACHE BOOL "Disabled because there is no internet connection" FORCE)
|
||||
+ endif()
|
||||
+ endif()
|
||||
+ endif()
|
||||
+endif()
|
||||
+
|
||||
+if (builtin_gtest)
|
||||
# FIXME: Remove our version of gtest in roottest. We can reuse this one.
|
||||
# Add googletest
|
||||
# http://stackoverflow.com/questions/9689183/cmake-googletest
|
||||
--
|
||||
2.35.1
|
||||
|
||||
|
|
|
|||
25
root-use-unique-filenames-in-fillrandom-tutorials.patch
Normal file
25
root-use-unique-filenames-in-fillrandom-tutorials.patch
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
From b781f954ac80cc227777992dcb4fbe1837c7e351 Mon Sep 17 00:00:00 2001
|
||||
From: Mattias Ellert <mattias.ellert@physics.uu.se>
|
||||
Date: Tue, 29 Mar 2022 15:44:17 +0200
|
||||
Subject: [PATCH] Use unique filenames in fillrandom.py and fillrandom.C
|
||||
|
||||
---
|
||||
tutorials/hist/fillrandom.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tutorials/hist/fillrandom.py b/tutorials/hist/fillrandom.py
|
||||
index d5eb3f6f38..4b1a94a37e 100644
|
||||
--- a/tutorials/hist/fillrandom.py
|
||||
+++ b/tutorials/hist/fillrandom.py
|
||||
@@ -41,7 +41,7 @@ h1f.FillRandom("sqroot",10000)
|
||||
h1f.Draw()
|
||||
c1.Update()
|
||||
|
||||
-f = ROOT.TFile("fillrandom.root","RECREATE")
|
||||
+f = ROOT.TFile("fillrandom-py.root","RECREATE")
|
||||
form1.Write()
|
||||
sqroot.Write()
|
||||
h1f.Write()
|
||||
--
|
||||
2.35.1
|
||||
|
||||
2
sources
2
sources
|
|
@ -1,2 +1,2 @@
|
|||
SHA512 (root-6.24.06.tar.xz) = fe316283503dae60acb26d2ae3e838e6f9c01e1f89ff9973aa2b666a30c00f99f5e0df02b54e3744cd14a45a49ca2fc7d1f19fbac6b69071b9c9e0c98f2e0645
|
||||
SHA512 (root-6.24.08.tar.xz) = 88d289bf360557b9e8e006975d108d12aa9b08003d2ddccd4cb40290cc6a09d6c41daa4525432a8914f0573fe436b616a60f31d28637f20b85a1bf3d8e9aa415
|
||||
SHA512 (root-testfiles.tar.xz) = 945aef1a0cf5af672d4ab84b0ac00b76118e93008ff72447658ee82d9e955a1540af3ff7126e701418872f1d91b92ee96d4985840a519036c42732023a13f00f
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue