[Numpy-discussion] Is this a bug, and if so, who's?

Travis Oliphant oliphant@enthought....
Thu Apr 22 10:09:06 CDT 2010


On Apr 21, 2010, at 10:47 AM, Ken Basye wrote:

> Folks,
>   Apologies for asking here, but I ran across this problem yesterday
> and probably need to file a bug.  The problem is I don't know if  
> this is
> a Numpy bug, a Python bug, or both.  Here's an illustration, platform
> information follows.

It's a bug in your implementation of class A.

The __float__ method is supposed to return a Python float.    In A,  
you are just returning the 'y' field which is initialized to whatever  
you passed in (which in the last example is an np.float64.   An  
np.float64 is a subclass of Python's float, but it is not Python's  
float.

So, the explicit conversion is proper.


-Travis


>   TIA,
>       Ken
>
>
> #############################################
> import collections
> import numpy as np
>
> class A (collections.namedtuple('ANT', ('x', 'y'))):
>    def __float__(self):
>        return self.y
>
> # Same as A, but explicitly convert y to a float in __float__()  -  
> this
> works around the assert fail
> class B (collections.namedtuple('BNT', ('x', 'y'))):
>    def __float__(self):
>        return float(self.y)
>
> a0 = A(1.0, 2.0)
> f0 = np.float64(a0)
> print f0
>
> a1 = A(float(1.0), float(2.0))
> f1 = np.float64(a1)
> print f1
>
> b1 = B(np.float64(1.0), np.float64(2.0))
> f2 = np.float64(b1)
> print f2
>
> a2 = A(np.float64(1.0), np.float64(2.0))
> # On some platforms, the next line will trigger an
> assert:
>
> # python: Objects/floatobject.c:1674: float_subtype_new: Assertion
> `((((PyObject*)(tmp))->ob_type) == &PyFloat_Type)' failed.
> f3 = np.float64(a2)
> print f3
> #############################################
>
> Platform info:
>
> Python 2.6.5 (r265:79063, Apr 14 2010, 13:32:56)
> [GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
>
>>>> numpy.__version__
> '1.3.0'
>
> ~--$ uname -srvmpio
> Linux 2.6.18-164.el5 #1 SMP Thu Sep 3 03:28:30 EDT 2009 x86_64 x86_64
> x86_64 GNU/Linux
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

--
Travis Oliphant
Enthought Inc.
1-512-536-1057
http://www.enthought.com
oliphant@enthought.com







More information about the NumPy-Discussion mailing list