[Numpy-discussion] Is this a bug in repr ?

Mark Sienkiewicz sienkiew at stsci.edu
Tue Mar 15 12:20:52 EDT 2011


The usual expectation is that (when possible) repr() returns a value 
that you can eval() to get the original data back.  But,

 >>> from numpy import *
 >>> a = array( [  16.50698631688883822 ] )
 >>> b = eval(repr(a))
 >>> a-b
array([ -3.11116111e-09])
 >>> import numpy.testing
 >>> numpy.testing.assert_array_almost_equal(a,b,decimal=15)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/stsci/pyssgdev/2.7/numpy/testing/utils.py", line 775, in 
assert_array_almost_equal
    header=('Arrays are not almost equal to %d decimals' % decimal))
  File "/usr/stsci/pyssgdev/2.7/numpy/testing/utils.py", line 618, in 
assert_array_compare
    raise AssertionError(msg)
AssertionError:
Arrays are not almost equal to 15 decimals

(mismatch 100.0%)
 x: array([ 16.50698632])
 y: array([ 16.50698632])
 >>>

I noticed this because a bunch of tests failed exactly this way.  Of 
course, the problem is that assert_array_almost_equal does not print 
with the precision that it compared, which in turn happens because it 
just uses repr() to convert the array.

I would expect that repr would print the values at least to the 
resolution that they are stored, so I think this is a bug.

This happens with the current trunk of numpy in python 2.7 on Red Hat 
Enterprise linux in 32 and 64 bits, and on Macintosh Leopard in 32 
bits.  I did not try any other configuration.

Mark




More information about the NumPy-Discussion mailing list