Skip to content

[v636][TMVA] Re-enable many tutorials for which we lost test coverage (PyMVA, SOFIE, RBatchGenerator) #19129

New issue

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

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

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 23, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 22 additions & 11 deletions tutorials/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -311,13 +311,11 @@ else()
list(APPEND tmva_veto machine_learning/envelope/classification.C)
endif()
#these depends on external packages
if (machine_learning-pymva)
ROOT_FIND_PYTHON_MODULE(torch QUIET)
ROOT_FIND_PYTHON_MODULE(keras QUIET)
ROOT_FIND_PYTHON_MODULE(sonnet QUIET)
ROOT_FIND_PYTHON_MODULE(graph_nets QUIET)
ROOT_FIND_PYTHON_MODULE(sklearn QUIET)
endif()
ROOT_FIND_PYTHON_MODULE(torch QUIET)
ROOT_FIND_PYTHON_MODULE(keras QUIET)
ROOT_FIND_PYTHON_MODULE(sonnet QUIET)
ROOT_FIND_PYTHON_MODULE(graph_nets QUIET)
ROOT_FIND_PYTHON_MODULE(sklearn QUIET)
if (NOT BLAS_FOUND)
list(APPEND tmva_veto machine_learning/TMVA_SOFIE_GNN_Application.C)
list(APPEND tmva_veto machine_learning/TMVA_SOFIE_RDataFrame.C)
Expand All @@ -332,14 +330,12 @@ else()
list(APPEND tmva_veto machine_learning/TMVA_SOFIE_Models.py)
list(APPEND tmva_veto machine_learning/TMVA_SOFIE_Inference.py)
list(APPEND tmva_veto machine_learning/TMVA_SOFIE_RSofieReader.C)
list(APPEND tmva_veto machine_learning/RBatchGenerator_TensorFlow.py)
endif()
if (NOT ROOT_SKLEARN_FOUND)
list(APPEND tmva_veto machine_learning/TMVA_SOFIE_Models.py roofit/roofit/rf617_simulation_based_inference_multidimensional.py)
endif()
if (NOT ROOT_TORCH_FOUND)
list(APPEND tmva_veto machine_learning/TMVA_SOFIE_PyTorch.C)
list(APPEND tmva_veto machine_learning/RBatchGenerator_PyTorch.py)
endif()
#veto this tutorial since it is added directly
list(APPEND tmva_veto machine_learning/TMVA_SOFIE_GNN_Parser.py)
Expand Down Expand Up @@ -931,10 +927,25 @@ if(ROOT_pyroot_FOUND)
analysis/dataframe/df035_RDFFromPandas.py
roofit/roofit/rf409_NumPyPandasToRooFit.py)
file(GLOB requires_keras RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} machine_learning/keras/*.py)
file(GLOB requires_torch RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} machine_learning/pytorch/*.py)
file(GLOB requires_torch RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
machine_learning/pytorch/*.py
machine_learning/RBatchGenerator_PyTorch.py
)
file(GLOB requires_xgboost RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} machine_learning/tmva10*.py)
file(GLOB requires_sklearn RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} roofit/roofit/rf617*.py)
set(fixtureLists requires_numpy requires_numba requires_pandas requires_keras requires_xgboost requires_torch requires_sklearn)
file(GLOB requires_tensorflow RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
machine_learning/RBatchGenerator_TensorFlow.py
)
set(fixtureLists
requires_keras
requires_numba
requires_numpy
requires_pandas
requires_sklearn
requires_tensorflow
requires_torch
requires_xgboost
)

# Now set up all the tests
foreach(t ${pytutorials})
Expand Down
2 changes: 1 addition & 1 deletion tutorials/machine_learning/TMVA_SOFIE_Models.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,20 @@
### \macro_output
### \author Lorenzo Moneta

import ROOT
from os.path import exists

Check failure on line 17 in tutorials/machine_learning/TMVA_SOFIE_Models.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (F401)

tutorials/machine_learning/TMVA_SOFIE_Models.py:17:21: F401 `os.path.exists` imported but unused

Check failure on line 17 in tutorials/machine_learning/TMVA_SOFIE_Models.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (I001)

tutorials/machine_learning/TMVA_SOFIE_Models.py:16:1: I001 Import block is un-sorted or un-formatted

ROOT.TMVA.PyMethodBase.PyInitialize()


## generate and train Keras models with different architectures

import numpy as np

Check failure on line 24 in tutorials/machine_learning/TMVA_SOFIE_Models.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E402)

tutorials/machine_learning/TMVA_SOFIE_Models.py:24:1: E402 Module level import not at top of file
from tensorflow.keras.models import Sequential

Check failure on line 25 in tutorials/machine_learning/TMVA_SOFIE_Models.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E402)

tutorials/machine_learning/TMVA_SOFIE_Models.py:25:1: E402 Module level import not at top of file
from tensorflow.keras.layers import Dense

Check failure on line 26 in tutorials/machine_learning/TMVA_SOFIE_Models.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E402)

tutorials/machine_learning/TMVA_SOFIE_Models.py:26:1: E402 Module level import not at top of file
from tensorflow.keras.optimizers import Adam

Check failure on line 27 in tutorials/machine_learning/TMVA_SOFIE_Models.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E402)

tutorials/machine_learning/TMVA_SOFIE_Models.py:27:1: E402 Module level import not at top of file

from sklearn.model_selection import train_test_split

Check failure on line 29 in tutorials/machine_learning/TMVA_SOFIE_Models.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E402)

tutorials/machine_learning/TMVA_SOFIE_Models.py:29:1: E402 Module level import not at top of file

Check failure on line 29 in tutorials/machine_learning/TMVA_SOFIE_Models.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (I001)

tutorials/machine_learning/TMVA_SOFIE_Models.py:24:1: I001 Import block is un-sorted or un-formatted

def CreateModel(nlayers = 4, nunits = 64):
model = Sequential()
Expand All @@ -41,7 +41,7 @@

def PrepareData() :
#get the input data
inputFile = str(ROOT.gROOT.GetTutorialDir()) + "machine_learning/data/Higgs_data.root"
inputFile = str(ROOT.gROOT.GetTutorialDir()) + "/machine_learning/data/Higgs_data.root"

df1 = ROOT.RDataFrame("sig_tree", inputFile)
sigData = df1.AsNumpy(columns=['m_jj', 'm_jjj', 'm_lv', 'm_jlv', 'm_bb', 'm_wbb', 'm_wwbb'])
Expand Down Expand Up @@ -103,7 +103,7 @@

generatedHeaderFile = "Higgs_Model.hxx"
#need to remove existing header file since we are appending on same one
import os

Check failure on line 106 in tutorials/machine_learning/TMVA_SOFIE_Models.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (I001)

tutorials/machine_learning/TMVA_SOFIE_Models.py:106:1: I001 Import block is un-sorted or un-formatted

Check failure on line 106 in tutorials/machine_learning/TMVA_SOFIE_Models.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E402)

tutorials/machine_learning/TMVA_SOFIE_Models.py:106:1: E402 Module level import not at top of file
if (os.path.exists(generatedHeaderFile)):
weightFile = "Higgs_Model.root"
print("removing existing files", generatedHeaderFile,weightFile)
Expand Down
2 changes: 1 addition & 1 deletion tutorials/machine_learning/TMVA_SOFIE_RDataFrame.C
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ using namespace TMVA::Experimental;
void TMVA_SOFIE_RDataFrame(int nthreads = 2){

std::string inputFileName = "Higgs_data.root";
std::string inputFile = gROOT->GetTutorialDir() + "/machine_learning/data/" + inputFileName;
std::string inputFile = std::string{gROOT->GetTutorialDir()} + "/machine_learning/data/" + inputFileName;

ROOT::EnableImplicitMT(nthreads);

Expand Down
2 changes: 1 addition & 1 deletion tutorials/machine_learning/TMVA_SOFIE_RDataFrame.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
ROOT.gInterpreter.Declare('auto sofie_functor = TMVA::Experimental::SofieFunctor<7,TMVA_SOFIE_'+modelName+'::Session>(0,"Higgs_trained_model_generated.dat");')

# run inference over input data
inputFile = str(ROOT.gROOT.GetTutorialDir()) + "machine_learning/data/Higgs_data.root"
inputFile = str(ROOT.gROOT.GetTutorialDir()) + "/machine_learning/data/Higgs_data.root"
df1 = ROOT.RDataFrame("sig_tree", inputFile)
h1 = df1.Define("DNN_Value", "sofie_functor(rdfslot_,m_jj, m_jjj, m_lv, m_jlv, m_bb, m_wbb, m_wwbb)").Histo1D(("h_sig", "", 100, 0, 1),"DNN_Value")

Expand Down
2 changes: 1 addition & 1 deletion tutorials/machine_learning/TMVA_SOFIE_RDataFrame_JIT.C
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ void TMVA_SOFIE_RDataFrame_JIT(std::string modelFile = "Higgs_trained_model.h5")
CompileModelForRDF(modelHeaderFile,7);

std::string inputFileName = "Higgs_data.root";
std::string inputFile = gROOT->GetTutorialDir() + "/machine_learning/data/" + inputFileName;
std::string inputFile = std::string{gROOT->GetTutorialDir()} + "/machine_learning/data/" + inputFileName;

ROOT::RDataFrame df1("sig_tree", inputFile);
auto h1 = df1.Define("DNN_Value", "sofie_functor(rdfslot_,m_jj, m_jjj, m_lv, m_jlv, m_bb, m_wbb, m_wwbb)")
Expand Down
2 changes: 1 addition & 1 deletion tutorials/machine_learning/TMVA_SOFIE_RSofieReader.C
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ void TMVA_SOFIE_RSofieReader(){
// predict model now on a input file using RDataFrame

std::string inputFileName = "Higgs_data.root";
std::string inputFile = gROOT->GetTutorialDir() + "/machine_learning/data/" + inputFileName;
std::string inputFile = std::string{gROOT->GetTutorialDir()} + "/machine_learning/data/" + inputFileName;


ROOT::RDataFrame df1("sig_tree", inputFile);
Expand Down
Loading