Skip to content

Commit ccedc44

Browse files
authored
extended testing of pickling (#589)
1 parent 9902790 commit ccedc44

File tree

5 files changed

+29
-17
lines changed

5 files changed

+29
-17
lines changed

.github/workflows/wheels.yml

-8
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,9 @@ on:
44
push:
55
branches:
66
- beta-*
7-
paths-ignore:
8-
- 'doc/**'
9-
- '.ci/**'
10-
- '*.rst'
117
pull_request:
128
branches:
139
- master
14-
paths-ignore:
15-
- 'doc/**'
16-
- '.ci/**'
17-
- '*.rst'
1810
release:
1911
types: [published]
2012

doc/changelog.rst

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Changelog
1010

1111
New features
1212
~~~~~~~~~~~~
13+
- Minuit object is now pickle-able and copy-able
1314
- More efficient internal conversion between Python objects and ``std::vector<double>``
1415

1516
Bug-fixes
@@ -19,7 +20,7 @@ Bug-fixes
1920

2021
Other
2122
~~~~~
22-
- Unit tests are now included again in sdist package
23+
- Unit tests are included again in sdist package
2324
- ``Minuit.grad`` now returns ``numpy.ndarray`` instead of a ``list``
2425
- Fixes for ``conda`` builds on Windows platform with ``msvc``, by @henryiii
2526
- Updated and unified documentation on how to cite iminuit

src/iminuit/_minuit.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ def fcn_np(x):
486486
self._values = mutil.ValueView(self)
487487
self._errors = mutil.ErrorView(self)
488488
self._fixed = mutil.FixedView(self)
489-
self._limits = mutil.LimitView(self, 1)
489+
self._limits = mutil.LimitView(self)
490490

491491
self.precision = getattr(fcn, "precision", None)
492492

src/iminuit/util.py

+3
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ def _set(self, i, fix):
120120
class LimitView(BasicView):
121121
"""Array-like view of parameter limits."""
122122

123+
def __init__(self, minuit):
124+
super(LimitView, self).__init__(minuit, 1)
125+
123126
def _get(self, i):
124127
p = self._minuit._last_state[i]
125128
return (

tests/test_minuit.py

+23-7
Original file line numberDiff line numberDiff line change
@@ -1408,24 +1408,40 @@ def test_repr():
14081408
def test_pickle(grad):
14091409
import pickle
14101410

1411-
m = Minuit(func0, x=0, y=0, grad=grad)
1411+
m = Minuit(func0, x=1, y=1, grad=grad)
1412+
m.fixed[1] = True
1413+
m.limits[0] = 0, 10
14121414
m.migrad()
1413-
m.minos()
14141415

14151416
pkl = pickle.dumps(m)
14161417
m2 = pickle.loads(pkl)
14171418

1418-
assert m2.fmin == m.fmin
1419+
assert id(m2) != id(m)
1420+
# check correct linking of views
1421+
assert id(m2.values._minuit) == id(m2)
1422+
assert id(m2.errors._minuit) == id(m2)
1423+
assert id(m2.limits._minuit) == id(m2)
1424+
assert id(m2.fixed._minuit) == id(m2)
1425+
1426+
assert m2.init_params == m.init_params
14191427
assert m2.params == m.params
1420-
assert m2.merrors == m.merrors
1428+
assert m2.fmin == m.fmin
14211429
assert_equal(m2.covariance, m.covariance)
14221430

1431+
m.fixed = False
1432+
m2.fixed = False
1433+
m.migrad()
1434+
m.minos()
1435+
14231436
m2.migrad()
1424-
m2.hesse()
14251437
m2.minos()
14261438

1427-
assert m2.fmin.edm < m.fmin.edm
1428-
assert m2.fmin.nfcn > m.fmin.nfcn
1439+
assert m2.merrors == m.merrors
1440+
1441+
assert m2.fmin.fval == m.fmin.fval
1442+
assert m2.fmin.edm == m.fmin.edm
1443+
assert m2.fmin.nfcn == m.fmin.nfcn
1444+
assert m2.fmin.ngrad == m.fmin.ngrad
14291445

14301446

14311447
def test_minos_new_min():

0 commit comments

Comments
 (0)