[C++-sig] bug in numarray (using take with character arrays) possibly affecting boost.python
Faheem Mitha
faheem at email.unc.edu
Thu Apr 15 22:55:16 CEST 2004
See
http://sourceforge.net
/tracker/index.php?func=detail&aid=935882&group_id=1369&atid=450446
For convenience the bug report is reproduced below.
The following wrapper to boost.python gives the same behaviour
described in the bug report, so I'm guessing that if boost.python used
the numarray implementation of `take' the bug will be there too.
In neither the numarray version or the boost.python version of take
does this bug show up for arrays of numerical values.
****************************************************************
Boost.Python wrapper to take (in <boost/python/numeric.hpp>).
****************************************************************
// Version of take obtained by calling Boost.Python take.
numeric::array mytake(numeric::array& y, const tuple& ind, int i)
{
return extract<numeric::array>(y.take<tuple>(ind,i));
}
****************************************************************
Faheem.
*************************************************************************
Bug report.
*************************************************************************
In [22]: import numarray.strings as str
In [23]: import numarray
In [24]: s = str.array(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i'],shape=(3,3))
In [25]: numarray.take(s,(1,2),axis=1)
---------------------------------------------------------------------------
ValueError Traceback (most recent call
last)
/home/faheem/wc/corrmodel/boost/<console>
/usr/lib/python2.3/site-packages/numarray/ufunc.py in take(array,
indices, axis, outarr, clipmode)
1779 raise ValueError("indices must be a sequence")
1780 work = _gen.swapaxes(array, 0, axis)
-> 1781 work = work._take((indices,), outarr=outarr,
clipmode=clipmode)
1782 return _gen.swapaxes(work, 0, axis)
1783 else:
/usr/lib/python2.3/site-packages/numarray/generic.py in _take(self,
indices, **keywds)
795 def _take(self, indices, **keywds):
796 indices = list(indices)
--> 797 impliedShape, N = _takeShape(self, indices)
798 result = self._clone(shape=impliedShape)
799 indices = self._fix_pt_indices(indices)
/usr/lib/python2.3/site-packages/numarray/generic.py in
_takeShape(scattered, indexArrays)
133 nShape = scattered._shape[-leftOver:]
134 if scattered.isbyteswapped() or not
scattered.iscontiguous():
--> 135 raise ValueError("Invalid destination array:
partial indices require contiguous non-byteswapped destination")
136 else:
137 N = scattered._itemsize
ValueError: Invalid destination array: partial indices require
contiguous non-byteswapped destination
More information about the Cplusplus-sig
mailing list