Skip to content

Commit 4f77440

Browse files
authored
fix of minos with var keyword and fixed parameters (#459)
1 parent 8901bed commit 4f77440

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/iminuit/_libiminuit.pyx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,9 +1023,11 @@ cdef class Minuit:
10231023
deref(self.cfmin), self.strategy
10241024
)
10251025

1026-
for vname in self.parameters:
1026+
1027+
vnames = self.parameters if var is None else [var]
1028+
for vname in vnames:
10271029
if self.fixed[vname]:
1028-
if var is not None: #specifying vname but it's fixed
1030+
if var is not None and var == vname:
10291031
warn('Specified variable name for minos is fixed',
10301032
mutil.IMinuitWarning)
10311033
return None

src/iminuit/tests/test_iminuit.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,17 @@ def test_minos_all(grad, sigma):
493493
m.merrors[-3]
494494

495495

496+
def test_minos_all_some_fix():
497+
m = Minuit(func0, fix_x=True, pedantic=False)
498+
m.migrad()
499+
m.minos()
500+
assert "x" not in m.merrors
501+
me = m.merrors["y"]
502+
assert me.name == "y"
503+
assert me.lower == pytest.approx(-1)
504+
assert me.upper == pytest.approx(1)
505+
506+
496507
@pytest.mark.parametrize("grad", (None, func0_grad))
497508
def test_minos_single(grad):
498509
m = Minuit(func0, grad=func0_grad, pedantic=False)
@@ -502,6 +513,16 @@ def test_minos_single(grad):
502513
assert m.ncalls < 15
503514

504515

516+
def test_minos_single_fixed():
517+
m = Minuit(func0, fix_x=True, pedantic=False)
518+
m.migrad()
519+
m.minos("y")
520+
me = m.merrors["y"]
521+
assert me.name == "y"
522+
assert me.lower == pytest.approx(-1)
523+
assert me.upper == pytest.approx(1)
524+
525+
505526
def test_minos_single_fixed_raising():
506527
m = Minuit(func0, pedantic=False, fix_x=True)
507528
m.migrad()

0 commit comments

Comments
 (0)