summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/memmap.py12
-rw-r--r--numpy/core/numeric.py3
-rw-r--r--numpy/core/src/arrayobject.c21
-rw-r--r--numpy/lib/convertcode.py19
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)