# [Numpy-tickets] [NumPy] #519: allclose fails with inf

NumPy numpy-tickets@scipy....
Sun May 13 21:29:23 CDT 2007

```#519: allclose fails with inf
------------------------+---------------------------------------------------
Reporter:  qwerty      |       Owner:  somebody
Type:  defect      |      Status:  new
Priority:  normal      |   Milestone:
Component:  numpy.core  |     Version:  1.0.1
Severity:  normal      |    Keywords:  allclose inf
------------------------+---------------------------------------------------
allclose(x,y, rtol, atol)

| x - y | < atol + rtol * | y |

This formula is good so long as x and y do not contain inf (-inf) at the
same index.  In such a case, the difference is not well-defined.  The
problem then, is that allclose fails and returns False when it should be
returning True.

{{{
>>> a = array([log(0)])
>>> b = array([log(0)])
>>> a == b
array([True], dtype=bool)
>>> allclose(a,b)
False
}}}

alltrue(a==b) will work if you have an array of inf...but this is
definitely undesirable when you comparing floats.  Somehow, it would be
nice if the following returned True instead of False.

{{{
>>> a = array([log(0), log(.5)])
>>> b = array([log(0), log(.5000000001)])
>>> allclose(a,b)
False
}}}

Eck. Here is an uninformed solution:

{{{
pruned_x = []
pruned_y = []
for xx, yy in zip(x,y):
if xx != yy:
pruned_x.append(xx)
pruned_y.append(yy)
return old_allclose(array(pruned_x), array(pruned_y))
}}}

This means we'd need an additional run through the values, but this
certainly makes results more predictable...and prevents the operator from
having to check for cases like these.

--
Ticket URL: <http://projects.scipy.org/scipy/numpy/ticket/519>
NumPy <http://projects.scipy.org/scipy/numpy>
The fundamental package needed for scientific computing with Python.
```