Skip to content

Commit 2d1b8ef

Browse files
feat: Use iminuit v1.5.X API (#1202)
* Require iminuit compatible with v1.5.3 in 'minuit' extra * Adopt iminuit v1.5.3+ API - ncalls -> ncalls_total - ngrads -> ngrads_total * Remove mocking of iminuit.Minuit().from_array_func from tests - c.f. scikit-hep/iminuit#464
1 parent 755fca9 commit 2d1b8ef

File tree

3 files changed

+4
-18
lines changed

3 files changed

+4
-18
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
'torch': ['torch~=1.2'],
1010
'jax': ['jax~=0.2.4', 'jaxlib~=0.1.56'],
1111
'xmlio': ['uproot3~=3.14'], # Future proof against uproot4 API changes
12-
'minuit': ['iminuit~=1.4.3'], # v1.5.0 breaks pyhf for 32b TensorFlow and PyTorch
12+
'minuit': ['iminuit~=1.5.3'],
1313
}
1414
extras_require['backends'] = sorted(
1515
set(

src/pyhf/optimize/opt_minuit.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def _minimize(
113113
minimizer.tol = tolerance
114114
minimizer.migrad(ncall=maxiter)
115115
# Following lines below come from:
116-
# https://github.com/scikit-hep/iminuit/blob/22f6ed7146c1d1f3274309656d8c04461dde5ba3/src/iminuit/_minimize.py#L106-L125
116+
# https://github.com/scikit-hep/iminuit/blob/64acac11cfa2fb91ccbd02d1b3c51f8a9e2cc484/src/iminuit/_minimize.py#L102-L121
117117
message = "Optimization terminated successfully."
118118
if not minimizer.valid:
119119
message = "Optimization failed."
@@ -141,7 +141,7 @@ def _minimize(
141141
fun=minimizer.fval,
142142
hess_inv=hess_inv,
143143
message=message,
144-
nfev=minimizer.ncalls,
145-
njev=minimizer.ngrads,
144+
nfev=minimizer.ncalls_total,
145+
njev=minimizer.ngrads_total,
146146
minuit=minimizer,
147147
)

tests/test_optim.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -420,20 +420,6 @@ def test_minuit_failed_optimization(
420420
monkeypatch, mocker, has_reached_call_limit, is_above_max_edm
421421
):
422422
class BadMinuit(iminuit.Minuit):
423-
@classmethod
424-
def from_array_func(cls, *args, **kwargs):
425-
"""
426-
from_array_func won't need mocker in a newer version of iminuit
427-
428-
See scikit-hep/iminuit#464 for more details
429-
"""
430-
self = super().from_array_func(*args, **kwargs)
431-
mock = mocker.MagicMock(wraps=self)
432-
mock.valid = False
433-
mock.fmin.has_reached_call_limit = has_reached_call_limit
434-
mock.fmin.is_above_max_edm = is_above_max_edm
435-
return mock
436-
437423
@property
438424
def valid(self):
439425
return False

0 commit comments

Comments
 (0)