[SciPy-dev] bug: indexing CSR matrix, 64bits

Robert Cimrman cimrman3@ntc.zcu...
Mon May 12 04:34:57 CDT 2008


Robert Cimrman wrote:
> Hi Nathan,
> 
> Nathan Bell wrote:
>> On Fri, May 9, 2008 at 4:46 AM, Robert Cimrman <cimrman3@ntc.zcu.cz> wrote:
>>> Hi,
>>>
>>> indexing by slices is broken on a 64 bit machine. On a 32 bit one, all
>>> is ok. Is something missing in the INSTANTIATE_ALL macro in sparsetools.i?
>>>
>> Robert, I can't reproduce your problem on my system (Ubuntu 8.04, Athlon 64):
>>
>> $uname -a
>> Linux droog 2.6.24-16-generic #1 SMP Thu Apr 10 12:47:45 UTC 2008
>> x86_64 GNU/Linux
> 
> $ uname -a Linux uk709n03-kme 2.6.22-gentoo-r8 #1 SMP Fri Sep 7 09:38:53 
> CEST 2007 x86_64 Intel(R) Xeon(R) CPU X5355 @ 2.66GHz GenuineIntel GNU/Linux
> 
>> Since your .indptr and .indices arrays are 32-bits, I doubt that the
>> problem is with INSTANTIATE_ALL.  Currently sparsetools does not
>> instantiate functions using 64-bit indices because it doubles the
>> compilation time and it's not likely that anyone will have sparse
>> matrices with dimensions >= 2**31 anytime soon.  OTOH I don't know
>> what else it could be so please try the following:
> 
> Yep. I do not need 64 bit indices. I have also installed swig 1.3.34 to 
> match your version.
> 
> However the problem persists and is really strange:
> 
> - I have created a small test script and it works
> 
> - in pdb, indexing with slices works too
> (Pdb) mtx[slice(2290, 2845, None),slice(2290, 2845, None)]
> <555x555 sparse matrix of type '<type 'numpy.float64'>'
>          with 3313 stored elements in Compressed Sparse Row format>
> 
> - but not with the 'ir', 'ic'
> (Pdb) ir
> slice(2290, 2845, None)
> (Pdb) mtx[ir,ic]
> *** NotImplementedError: Wrong number of arguments for overloaded 
> function 'get_csr_submatrix'.
>    Possible C/C++ prototypes are: ...
> 
> So thanks for your suggestions, but I fear the bug might not be in 
> scipy.sparse...

I tracked it in my code. Due to construction, the items of ir, ic slices 
(ir.start, ir.stop, ...) had 'numpy.int32' type. After retyping to 'int' 
everything works.

Nathan, do you think that ensuring correct slice data deserves a 
ticket/fix? I cannot implement it now, but it would be IMHO fairly easy 
to do.

cheers,
r.


More information about the Scipy-dev mailing list