[Numpy-discussion] Numarray - Numeric incompatibility
Todd Miller
jmiller at stsci.edu
Thu Sep 18 11:09:39 EDT 2003
On Thu, 2003-09-18 at 13:53, Tim Hochberg wrote:
>
> I'm just starting to move some of my code over to numarray and I was
> dismayed to find that basic operation between Numeric and numarray
> arrays fail.
>
> >>> import Numeric as np
> >>> import numarray as na
> >>> a = na.arange(5)
> >>> p = np.arange(5)
> >>> a + p
> ['vector', 'vector']
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> File "C:\Python23\Lib\site-packages\numarray\numarraycore.py", line
> 648, in __add__
> def __add__(self, operand): return ufunc.add(self, operand)
> File "C:\Python23\lib\site-packages\numarray\ufunc.py", line 818, in
> _cache_miss2
> key = (_digest(n1), _digest(n2), _digest(out), safethread.get_ident())
> KeyError: '_digest force cache miss'
>
> I suspect (hope!) that this is just a bug and not something inherent in
> numarray.
It's an interoperability issue. Please let us know if you find others.
> I dug around in unfunc.py a bit and it appears that the bug is
> shallow and can be fixed simply by replacing::
>
> if not (_sequence(n1) or _sequence(n2)):
> key = (_digest(n1), _digest(n2), _digest(out),
> safethread.get_ident())
> self._cache[ key ] = cached
>
> with::
>
> try:
> key = (_digest(n1), _digest(n2), _digest(out),
> safethread.get_ident())
> except KeyError:
> pass
> else:
> self._cache[ key ] = cached
>
> in _cache_miss2 and _cache_miss1. If this were done, _sequence could
> probably be deleted as well.
>
> I'm not very familiar with the numarray code yet, so it's quite possible
> I'm missing something, but I'm willing to do more digging to fix this if
> this turns out to not be sufficient.
>
I ran into the same problem trying to port MA to numarray, and came up
with an identical work around.
A fix like this will be part of numarray-0.8.
Todd
--
Todd Miller jmiller at stsci.edu
STSCI / ESS / SSB
More information about the NumPy-Discussion
mailing list