Merge pull request #3615 from marcelotrevisani/bug-3593-pytest-approx
Bug fix #3593 - approx repr in a 0-d numpy array
This commit is contained in:
commit
8133d1955e
1
AUTHORS
1
AUTHORS
|
@ -126,6 +126,7 @@ Maik Figura
|
||||||
Mandeep Bhutani
|
Mandeep Bhutani
|
||||||
Manuel Krebber
|
Manuel Krebber
|
||||||
Marc Schlaich
|
Marc Schlaich
|
||||||
|
Marcelo Duarte Trevisani
|
||||||
Marcin Bachry
|
Marcin Bachry
|
||||||
Mark Abramowitz
|
Mark Abramowitz
|
||||||
Markus Unterwaditzer
|
Markus Unterwaditzer
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
If the user pass as a expected value a numpy array created like
|
||||||
|
numpy.array(5); it will creates an array with one element without shape,
|
||||||
|
when used with approx it will raise an error for the `repr`
|
||||||
|
'TypeError: iteration over a 0-d array'. With this PR pytest will iterate
|
||||||
|
properly in the numpy array even with 0 dimension.
|
|
@ -86,9 +86,11 @@ class ApproxNumpy(ApproxBase):
|
||||||
# shape of the array...
|
# shape of the array...
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
return "approx({!r})".format(
|
list_scalars = []
|
||||||
list(self._approx_scalar(x) for x in np.asarray(self.expected))
|
for x in np.ndindex(self.expected.shape):
|
||||||
)
|
list_scalars.append(self._approx_scalar(np.asscalar(self.expected[x])))
|
||||||
|
|
||||||
|
return "approx({!r})".format(list_scalars)
|
||||||
|
|
||||||
if sys.version_info[0] == 2:
|
if sys.version_info[0] == 2:
|
||||||
__cmp__ = _cmp_raises_type_error
|
__cmp__ = _cmp_raises_type_error
|
||||||
|
|
|
@ -27,8 +27,11 @@ class MyDocTestRunner(doctest.DocTestRunner):
|
||||||
|
|
||||||
class TestApprox(object):
|
class TestApprox(object):
|
||||||
|
|
||||||
def test_repr_string(self):
|
@pytest.fixture
|
||||||
plus_minus = u"\u00b1" if sys.version_info[0] > 2 else u"+-"
|
def plus_minus(self):
|
||||||
|
return u"\u00b1" if sys.version_info[0] > 2 else u"+-"
|
||||||
|
|
||||||
|
def test_repr_string(self, plus_minus):
|
||||||
tol1, tol2, infr = "1.0e-06", "2.0e-06", "inf"
|
tol1, tol2, infr = "1.0e-06", "2.0e-06", "inf"
|
||||||
assert repr(approx(1.0)) == "1.0 {pm} {tol1}".format(pm=plus_minus, tol1=tol1)
|
assert repr(approx(1.0)) == "1.0 {pm} {tol1}".format(pm=plus_minus, tol1=tol1)
|
||||||
assert (
|
assert (
|
||||||
|
@ -61,6 +64,18 @@ class TestApprox(object):
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_repr_0d_array(self, plus_minus):
|
||||||
|
np = pytest.importorskip("numpy")
|
||||||
|
np_array = np.array(5.)
|
||||||
|
assert approx(np_array) == 5.0
|
||||||
|
string_expected = "approx([5.0 {} 5.0e-06])".format(plus_minus)
|
||||||
|
|
||||||
|
assert repr(approx(np_array)) == string_expected
|
||||||
|
|
||||||
|
np_array = np.array([5.])
|
||||||
|
assert approx(np_array) == 5.0
|
||||||
|
assert repr(approx(np_array)) == string_expected
|
||||||
|
|
||||||
def test_operator_overloading(self):
|
def test_operator_overloading(self):
|
||||||
assert 1 == approx(1, rel=1e-6, abs=1e-12)
|
assert 1 == approx(1, rel=1e-6, abs=1e-12)
|
||||||
assert not (1 != approx(1, rel=1e-6, abs=1e-12))
|
assert not (1 != approx(1, rel=1e-6, abs=1e-12))
|
||||||
|
|
Loading…
Reference in New Issue