From 2fbef1bf71acb4db869a76e66d92720ee032df6a Mon Sep 17 00:00:00 2001 From: Silia Taider Date: Fri, 26 Jun 2026 14:01:05 +0200 Subject: [PATCH 1/3] [Python][CodeQL] Add explicit ownership check --- bindings/pyroot/pythonizations/test/roofit.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bindings/pyroot/pythonizations/test/roofit.py b/bindings/pyroot/pythonizations/test/roofit.py index 73477744d4fb6..7d83362ad83a5 100644 --- a/bindings/pyroot/pythonizations/test/roofit.py +++ b/bindings/pyroot/pythonizations/test/roofit.py @@ -31,9 +31,10 @@ def _test_len(self, collection_class): def _test_addowned(self, collection_class): coll = collection_class() - if True: - x = ROOT.RooRealVar("x", "x", -10, 10) - coll.addOwned(x) + x = ROOT.RooRealVar("x", "x", -10, 10) + self.assertTrue(x.__python_owns__) + coll.addOwned(x) + self.assertFalse(x.__python_owns__) self.assertTrue("x" in coll) def _test_iterator(self, collection_class): From 186f350d3bb3f134997e8c31b041c78048e2fc58 Mon Sep 17 00:00:00 2001 From: Silia Taider Date: Fri, 26 Jun 2026 14:10:29 +0200 Subject: [PATCH 2/3] [Python] Fix duplicate TestRooArgList class name --- bindings/pyroot/pythonizations/test/roofit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bindings/pyroot/pythonizations/test/roofit.py b/bindings/pyroot/pythonizations/test/roofit.py index 7d83362ad83a5..96a5213dc7749 100644 --- a/bindings/pyroot/pythonizations/test/roofit.py +++ b/bindings/pyroot/pythonizations/test/roofit.py @@ -343,7 +343,7 @@ def set_equal(set_1, set_2): return same -class TestRooArgList(unittest.TestCase): +class TestRooCmdArg(unittest.TestCase): """ Test for RooCmdArg pythonizations. """ From 1db090fd4e322af8596daf61ea8474f56c48df12 Mon Sep 17 00:00:00 2001 From: Silia Taider Date: Fri, 26 Jun 2026 14:20:10 +0200 Subject: [PATCH 3/3] [ruff] lint and format roofit.py --- bindings/pyroot/pythonizations/test/roofit.py | 34 ++++++++----------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/bindings/pyroot/pythonizations/test/roofit.py b/bindings/pyroot/pythonizations/test/roofit.py index 96a5213dc7749..14cb1a9aad275 100644 --- a/bindings/pyroot/pythonizations/test/roofit.py +++ b/bindings/pyroot/pythonizations/test/roofit.py @@ -41,9 +41,9 @@ def _test_iterator(self, collection_class): a = ROOT.RooRealVar("a", "", 0) b = ROOT.RooRealVar("b", "", 0) - l = collection_class(a, b) + coll = collection_class(a, b) - it = iter(l) + it = iter(coll) self.assertEqual(next(it).GetName(), "a") self.assertEqual(next(it).GetName(), "b") @@ -65,11 +65,11 @@ def _test_contains(self, collection_class): self.assertTrue(var0 in coll) self.assertTrue("var0" in coll) - self.assertTrue(not var1 in coll) - self.assertTrue(not "var1" in coll) + self.assertTrue(var1 not in coll) + self.assertTrue("var1" not in coll) self.assertTrue(var2 in coll) - self.assertTrue(not "var2" in coll) + self.assertTrue("var2" not in coll) # ensure consistency with RooAbsCollection::find variables = [var0, var1, var2] @@ -91,7 +91,6 @@ def _test_contains(self, collection_class): self.assertEqual(found_by_name == vptr, vname in coll) def _test_getitem(self, collection_class): - var0 = ROOT.RooRealVar("var0", "var0", 0) var1 = ROOT.RooRealVar("var1", "var1", 1) @@ -247,8 +246,8 @@ class RooAbsRealPlotOn(unittest.TestCase): def test_frame(self): # test that kwargs can be passed # and lead to correct result - r1 = self.gauss.plotOn(self.xframe, ROOT.RooFit.LineColor(ROOT.kRed)) - r2 = self.gauss.plotOn(self.xframe, LineColor=ROOT.kRed) + r1 = self.gauss.plotOn(self.xframe, ROOT.RooFit.LineColor(ROOT.kRed)) # noqa: F841 + r2 = self.gauss.plotOn(self.xframe, LineColor=ROOT.kRed) # noqa: F841 def test_wrong_kwargs(self): # test that AttributeError is raised @@ -260,15 +259,15 @@ def test_binning(self): # as doing the same plot with passed ROOT objects dtframe = self.x.frame(ROOT.RooFit.Range(-5, 5), ROOT.RooFit.Title("dt distribution with custom binning")) binning = ROOT.RooBinning(20, -5, 5) - r1 = self.data.plotOn(dtframe, ROOT.RooFit.Binning(binning)) - r2 = self.data.plotOn(dtframe, Binning=binning) + r1 = self.data.plotOn(dtframe, ROOT.RooFit.Binning(binning)) # noqa: F841 + r2 = self.data.plotOn(dtframe, Binning=binning) # noqa: F841 def test_data(self): # test that no error is causes if python style and cpp style # args are provided to plotOn and that results are identical frame = self.x.frame(ROOT.RooFit.Name("xframe"), ROOT.RooFit.Title("Red Curve"), ROOT.RooFit.Bins(20)) - res1_d1 = self.data.plotOn(frame, ROOT.RooFit.DataError(ROOT.RooAbsData.SumW2)) - res2_d1 = self.data.plotOn(frame, DataError=ROOT.RooAbsData.SumW2) + res1_d1 = self.data.plotOn(frame, ROOT.RooFit.DataError(ROOT.RooAbsData.SumW2)) # noqa: F841 + res2_d1 = self.data.plotOn(frame, DataError=ROOT.RooAbsData.SumW2) # noqa: F841 class TestRooArgList(unittest.TestCase): @@ -277,7 +276,6 @@ class TestRooArgList(unittest.TestCase): """ def test_conversion_from_python_collection(self): - # General check that the conversion from string or tuple works, using # constants to get compact test code. l1 = ROOT.RooArgList([1.0, 2.0, 3.0]) @@ -349,7 +347,6 @@ class TestRooCmdArg(unittest.TestCase): """ def test_constructor_eval(self): - set_1 = ROOT.RooArgSet(x, y) set_2 = ROOT.RooArgSet(y, z) @@ -372,7 +369,6 @@ def do_test(*args): class TestRooDataHistNumpy(unittest.TestCase): - @staticmethod def _make_root_histo(): # Create ROOT ROOT.TH1 filled with a Gaussian distribution @@ -479,7 +475,7 @@ def test_createHistogram_decls(self): gauss = ROOT.RooGaussian("gauss", "gaussian PDF", x, mean, sigma) data = gauss.generate(ROOT.RooArgSet(x), 10000) # ROOT.RooDataSet - h1d = data.createHistogram("myname", x) + data.createHistogram("myname", x) class TestRooDataSetNumpy(unittest.TestCase): @@ -658,7 +654,7 @@ def test_non_contiguous_arrays(self): data = {"obs_1": val_cart_product[:, 0], "obs_2": val_cart_product[:, 1]} # To make sure the array is really not C-contiguous - assert data["obs_1"].flags["C_CONTIGUOUS"] == False + assert not data["obs_1"].flags["C_CONTIGUOUS"] dataset = ROOT.RooDataSet.from_numpy(data, ROOT.RooArgSet(obs_1, obs_2)) @@ -715,7 +711,7 @@ def test_roodataset_link(self): def test_minimizer(self): """C++ object returned by RooFit::Minimizer should not be double deleted""" # ROOT-9516 - minimizer = ROOT.RooFit.Minimizer("Minuit2", "migrad") + minimizer = ROOT.RooFit.Minimizer("Minuit2", "migrad") # noqa: F841 class TestRooJSONFactoryWSTool(unittest.TestCase): @@ -724,7 +720,6 @@ class TestRooJSONFactoryWSTool(unittest.TestCase): """ def test_writedoc(self): - ROOT.RooJSONFactoryWSTool.writedoc("roojsonfactorywstool_test_writedoc.tex") @@ -761,7 +756,6 @@ class RooSimultaneous_test(unittest.TestCase): # Tests def test_construction_from_dict(self): - x = ROOT.RooRealVar("x", "x", -10, 10) # Define model for each sample