diff options
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/memmap.py | 12 | ||||
-rw-r--r-- | numpy/core/numeric.py | 3 | ||||
-rw-r--r-- | numpy/core/src/arrayobject.c | 21 | ||||
-rw-r--r-- | numpy/lib/convertcode.py | 19 |
4 files changed, 39 insertions, 16 deletions
diff --git a/numpy/core/memmap.py b/numpy/core/memmap.py index 77d5ff552..f4dc0b463 100644 --- a/numpy/core/memmap.py +++ b/numpy/core/memmap.py @@ -4,6 +4,7 @@ import mmap from numeric import uint8, ndarray, dtype from numerictypes import nbytes +dtypedescr = dtype valid_filemodes = ["r", "c", "r+", "w+"] writeable_filemodes = ["r+","w+"] @@ -14,9 +15,8 @@ mode_equivalents = { "write":"w+" } -_globalvar = 0 - class memmap(ndarray): + __array_priority__ = -100.0 def __new__(subtype, name, dtype=uint8, mode='r+', offset=0, shape=None, fortran=0): global _globalvar @@ -35,7 +35,7 @@ class memmap(ndarray): fid.seek(0,2) flen = fid.tell() - descr = dtype(dtype) + descr = dtypedescr(dtype) _dbytes = descr.itemsize if shape is None: @@ -69,10 +69,8 @@ class memmap(ndarray): mm = mmap.mmap(fid.fileno(), bytes, access=acc) - _globalvar = 1 self = ndarray.__new__(subtype, shape, dtype=descr, buffer=mm, offset=offset, fortran=fortran) - _globalvar = 0 self._mmap = mm self._offset = offset self._mode = mode @@ -82,9 +80,9 @@ class memmap(ndarray): return self def __array_finalize__(self, obj): - self._mmap = None - if not _globalvar: + if not isinstance(obj, memmap): raise ValueError, "Cannot create a memmap array that way" + self._mmap = None def sync(self): self._mmap.flush() diff --git a/numpy/core/numeric.py b/numpy/core/numeric.py index 82f720c71..d4a23d2f1 100644 --- a/numpy/core/numeric.py +++ b/numpy/core/numeric.py @@ -1,6 +1,7 @@ __all__ = ['newaxis', 'ndarray', 'bigndarray', 'flatiter', 'ufunc', 'arange', 'array', 'zeros', 'empty', 'broadcast', 'dtype', - 'fromstring', 'fromfile', 'frombuffer','newbuffer','getbuffer', + 'fromstring', 'fromfile', 'frombuffer','newbuffer', + 'getbuffer', 'where', 'concatenate', 'fastCopyAndTranspose', 'lexsort', 'register_dtype', 'set_numeric_ops', 'can_cast', 'asarray', 'asanyarray', 'isfortran', 'zeros_like', 'empty_like', diff --git a/numpy/core/src/arrayobject.c b/numpy/core/src/arrayobject.c index 047bb9683..c4457fd19 100644 --- a/numpy/core/src/arrayobject.c +++ b/numpy/core/src/arrayobject.c @@ -8019,15 +8019,28 @@ arraydescr_protocol_typestr_get(PyArray_Descr *self) } static PyObject * -arraydescr_protocol_typename_get(PyArray_Descr *self) +arraydescr_typename_get(PyArray_Descr *self) { int len; PyTypeObject *typeobj = self->typeobj; + PyObject *res; /* Both are equivalents, but second is more resistent to changes */ /* len = strlen(typeobj->tp_name) - 8; */ - len = strchr(typeobj->tp_name, (int)'_')-(typeobj->tp_name); - return PyString_FromStringAndSize(typeobj->tp_name, len); + + if (PyTypeNum_ISUSERDEF(self->type_num)) { + res = PyString_FromString(typeobj->tp_name); + } + else { + len = strchr(typeobj->tp_name, (int)'_')-(typeobj->tp_name); + res = PyString_FromStringAndSize(typeobj->tp_name, len); + } + if (PyTypeNum_ISEXTENDED(self->type_num) && self->elsize != 0) { + PyObject *p; + p = PyString_FromFormat("%d", self->elsize * 8); + PyString_ConcatAndDel(&res, p); + } + return res; } static PyObject * @@ -8100,7 +8113,7 @@ static PyGetSetDef arraydescr_getsets[] = { NULL, "The array_protocol typestring."}, {"name", - (getter)arraydescr_protocol_typename_get, + (getter)arraydescr_typename_get, NULL, "The array_protocol typename."}, {"isbuiltin", diff --git a/numpy/lib/convertcode.py b/numpy/lib/convertcode.py index 3e0a679f0..0c5a0833b 100644 --- a/numpy/lib/convertcode.py +++ b/numpy/lib/convertcode.py @@ -126,19 +126,30 @@ def getandcopy(name): makenewfile(base+'.orig', filestr) return filestr -def fromfile(filename): +def convertfile(filename): + """Convert the filename given from using Numeric to using NumPy + + Copies the file to filename.orig and then over-writes the file + with the updated code + """ filestr = getandcopy(filename) filestr = fromstr(filestr) makenewfile(filename, filestr) def fromargs(args): filename = args[1] - fromfile(filename) + convertfile(filename) + +def convertall(direc=os.path.curdir): + """Convert all .py files to use NumPy (from Numeric) in the directory given -def convertall(direc=''): + For each file, a backup of <usesnumeric>.py is made as + <usesnumeric>.py.orig. A new file named <usesnumeric>.py + is then written with the updated code. + """ files = glob.glob(os.path.join(direc,'*.py')) for afile in files: - fromfile(afile) + convertfile(afile) if __name__ == '__main__': fromargs(sys.argv) |