[Numpy-discussion] .transpose() of memmap array fails to close()

Glen W. Mabey Glen.Mabey at swri.org
Fri Aug 10 12:20:16 EDT 2007


Hello,

I posted this a while back and didn't get any replies.  I'm running in
to this issue again from a different aspect, and today I've been trying
to figure out which method of ndarray needs to be overloaded for memmap
so that the the ._mmap attribute gets handled appropriately.

But, I have not been able to figure out what methods of ndarray are
getting used in code such as this:

>>> import numpy
>>> amemmap = numpy.memmap( '/tmp/afile', dtype=numpy.float32,
>>> shape=(4,5), mode='w+' )
>>> b = amemmap[2:3]
>>> b
>>> Exception exceptions.AttributeError: "'memmap' object has no attribute '_mmap'" in <bound method memmap.__del__ of memmap([ 0.,  0.,  0.,  0.,  0.], dtype=float32)> ignored memmap([[ 0.,  0.,  0.,  0.,  0.]], dtype=float32)


Furthermore, can anyone enlighten me as to why an AttributeError
exception would be ignored?

Am I using numpy.memmap instances appropriately?

Thank you,
Glen Mabey




On Thu, Jun 07, 2007 at 04:46:20PM -0500, Glen W. Mabey wrote:
> Hello,
> 
> When assigning a variable that is the transpose() of a memmap array, the
> ._mmap member doesn't get copied, I guess:
> 
> In [1]:import numpy
> 
> In [2]:amemmap = numpy.memmap( '/tmp/afile', dtype=numpy.float32, shape=(4,5), mode='w+' )
> 
> In [3]:bmemmap = amemmap.transpose()
> 
> In [4]:bmemmap.close()
> ---------------------------------------------------------------------------
> <type 'exceptions.AttributeError'>        Traceback (most recent call last)
> 
> /home/gmabey/src/R9619_dev_acqlibweb/Projects/R9619_NChannelDetection/NED/<ipython console> in <module>()
> 
> /usr/local/stow/numpy-20070605_svn-py2.5/lib/python2.5/site-packages/numpy/core/memmap.py
> in close(self)
>      86 
>      87     def close(self):
> ---> 88         self._mmap.close()
>      89 
>      90     def __del__(self):
> 
> <type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'close'
> > /usr/local/stow/numpy-20070605_svn-py2.5/lib/python2.5/site-packages/numpy/core/memmap.py(88)close()
>      87     def close(self):
> ---> 88         self._mmap.close()
>      89 
> 
> 
> 
> 
> This is an issue when the data is accessed in an order that is different
> from how it is stored on disk, as:
> 
> bmemmap = numpy.memmap( '/tmp/afile', dtype=numpy.float32, shape=(4,5), mode='w+' ).transpose()
> 
> So the object that was originally produced not accessible.  I imagine
> there is some better way to indicate order of dimensions, but
> regardless, doing
> 
> In [4]:bmemmap._mmap = amemmap._mmap
> 
> is a hack workaround.
> 
> Best regards,
> Glen Mabey
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion at scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion



More information about the NumPy-Discussion mailing list