[Numpy-svn] r3021 - in trunk/numpy: . lib
numpy-svn at scipy.org
numpy-svn at scipy.org
Mon Aug 14 17:30:56 EDT 2006
Author: oliphant
Date: 2006-08-14 16:30:52 -0500 (Mon, 14 Aug 2006)
New Revision: 3021
Added:
trunk/numpy/ctypeslib.py
Modified:
trunk/numpy/lib/utils.py
Log:
Move ctypes-related functions out of top-level
Added: trunk/numpy/ctypeslib.py
===================================================================
--- trunk/numpy/ctypeslib.py 2006-08-14 21:10:27 UTC (rev 3020)
+++ trunk/numpy/ctypeslib.py 2006-08-14 21:30:52 UTC (rev 3021)
@@ -0,0 +1,108 @@
+__all__ = ['ctypes_load_library', 'ndpointer']
+
+
+# Adapted from Albert Strasheim
+def ctypes_load_library(libname, loader_path):
+ if '.' not in libname:
+ if sys.platform == 'win32':
+ libname = '%s.dll' % libname
+ elif sys.platform == 'darwin':
+ libname = '%s.dylib' % libname
+ else:
+ libname = '%s.so' % libname
+ loader_path = os.path.abspath(loader_path)
+ if not os.path.isdir(loader_path):
+ libdir = os.path.dirname(loader_path)
+ else:
+ libdir = loader_path
+ import ctypes
+ libpath = os.path.join(libdir, libname)
+ return ctypes.cdll[libpath]
+
+def _num_fromflags(flaglist):
+ num = 0
+ for val in flaglist:
+ num += _flagdict[val]
+ return num
+
+def _flags_fromnum(num):
+ res = []
+ for key, value in _flagdict.items():
+ if (num & value):
+ res.append(key)
+ return res
+
+class _ndptr(object):
+ def from_param(cls, obj):
+ if not isinstance(obj, ndarray):
+ raise TypeError, "argument must be an ndarray"
+ if cls._dtype_ is not None \
+ and obj.dtype != cls._dtype_:
+ raise TypeError, "array must have data type %s" % cls._dtype_
+ if cls._ndim_ is not None \
+ and obj.ndim != cls._ndim_:
+ raise TypeError, "array must have %d dimension(s)" % cls._ndim_
+ if cls._shape_ is not None \
+ and obj.shape != cls._shape_:
+ raise TypeError, "array must have shape %s" % str(cls._shape_)
+ if cls._flags_ is not None \
+ and ((obj.flags.num & cls._flags_) != cls._flags_):
+ raise TypeError, "array must have flags %s" % \
+ _flags_fromnum(cls._flags_)
+ return obj.ctypes
+ from_param = classmethod(from_param)
+
+
+# Factory for an array-checking class with from_param defined for
+# use with ctypes argtypes mechanism
+_pointer_type_cache = {}
+def ndpointer(dtype=None, ndim=None, shape=None, flags=None):
+ if dtype is not None:
+ dtype = _dtype(dtype)
+ num = None
+ if flags is not None:
+ if isinstance(flags, str):
+ flags = flags.split(',')
+ elif isinstance(flags, (int, integer)):
+ num = flags
+ flags = _flags_fromnum(num)
+ elif isinstance(flags, flagsobj):
+ num = flags.num
+ flags = _flags_fromnum(num)
+ if num is None:
+ try:
+ flags = [x.strip().upper() for x in flags]
+ except:
+ raise TypeError, "invalid flags specification"
+ num = _num_fromflags(flags)
+ try:
+ return _pointer_type_cache[(dtype, ndim, shape, num)]
+ except KeyError:
+ pass
+ if dtype is None:
+ name = 'any'
+ elif dtype.names:
+ name = str(id(dtype))
+ else:
+ name = dtype.str
+ if ndim is not None:
+ name += "_%dd" % ndim
+ if shape is not None:
+ try:
+ strshape = [str(x) for x in shape]
+ except TypeError:
+ strshape = [str(shape)]
+ shape = (shape,)
+ shape = tuple(shape)
+ name += "_"+"x".join(strshape)
+ if flags is not None:
+ name += "_"+"_".join(flags)
+ else:
+ flags = []
+ klass = type("ndpointer_%s"%name, (_ndptr,),
+ {"_dtype_": dtype,
+ "_shape_" : shape,
+ "_ndim_" : ndim,
+ "_flags_" : num})
+ _pointer_type_cache[dtype] = klass
+ return klass
Modified: trunk/numpy/lib/utils.py
===================================================================
--- trunk/numpy/lib/utils.py 2006-08-14 21:10:27 UTC (rev 3020)
+++ trunk/numpy/lib/utils.py 2006-08-14 21:30:52 UTC (rev 3021)
@@ -7,8 +7,7 @@
__all__ = ['issubclass_', 'get_numpy_include', 'issubsctype',
'issubdtype', 'deprecate', 'get_numarray_include',
- 'get_include', 'ctypes_load_library', 'ndpointer',
- 'info', 'source', 'who']
+ 'get_include', 'info', 'source', 'who']
def issubclass_(arg1, arg2):
try:
@@ -58,112 +57,6 @@
return include_dirs + get_numpy_include_dirs()
-# Adapted from Albert Strasheim
-def ctypes_load_library(libname, loader_path):
- if '.' not in libname:
- if sys.platform == 'win32':
- libname = '%s.dll' % libname
- elif sys.platform == 'darwin':
- libname = '%s.dylib' % libname
- else:
- libname = '%s.so' % libname
- loader_path = os.path.abspath(loader_path)
- if not os.path.isdir(loader_path):
- libdir = os.path.dirname(loader_path)
- else:
- libdir = loader_path
- import ctypes
- libpath = os.path.join(libdir, libname)
- return ctypes.cdll[libpath]
-
-def _num_fromflags(flaglist):
- num = 0
- for val in flaglist:
- num += _flagdict[val]
- return num
-
-def _flags_fromnum(num):
- res = []
- for key, value in _flagdict.items():
- if (num & value):
- res.append(key)
- return res
-
-class _ndptr(object):
- def from_param(cls, obj):
- if not isinstance(obj, ndarray):
- raise TypeError, "argument must be an ndarray"
- if cls._dtype_ is not None \
- and obj.dtype != cls._dtype_:
- raise TypeError, "array must have data type %s" % cls._dtype_
- if cls._ndim_ is not None \
- and obj.ndim != cls._ndim_:
- raise TypeError, "array must have %d dimension(s)" % cls._ndim_
- if cls._shape_ is not None \
- and obj.shape != cls._shape_:
- raise TypeError, "array must have shape %s" % str(cls._shape_)
- if cls._flags_ is not None \
- and ((obj.flags.num & cls._flags_) != cls._flags_):
- raise TypeError, "array must have flags %s" % \
- _flags_fromnum(cls._flags_)
- return obj.ctypes
- from_param = classmethod(from_param)
-
-# Factory for an array-checking class with from_param defined for
-# use with ctypes argtypes mechanism
-_pointer_type_cache = {}
-def ndpointer(dtype=None, ndim=None, shape=None, flags=None):
- if dtype is not None:
- dtype = _dtype(dtype)
- num = None
- if flags is not None:
- if isinstance(flags, str):
- flags = flags.split(',')
- elif isinstance(flags, (int, integer)):
- num = flags
- flags = _flags_fromnum(num)
- elif isinstance(flags, flagsobj):
- num = flags.num
- flags = _flags_fromnum(num)
- if num is None:
- try:
- flags = [x.strip().upper() for x in flags]
- except:
- raise TypeError, "invalid flags specification"
- num = _num_fromflags(flags)
- try:
- return _pointer_type_cache[(dtype, ndim, shape, num)]
- except KeyError:
- pass
- if dtype is None:
- name = 'any'
- elif dtype.names:
- name = str(id(dtype))
- else:
- name = dtype.str
- if ndim is not None:
- name += "_%dd" % ndim
- if shape is not None:
- try:
- strshape = [str(x) for x in shape]
- except TypeError:
- strshape = [str(shape)]
- shape = (shape,)
- shape = tuple(shape)
- name += "_"+"x".join(strshape)
- if flags is not None:
- name += "_"+"_".join(flags)
- else:
- flags = []
- klass = type("ndpointer_%s"%name, (_ndptr,),
- {"_dtype_": dtype,
- "_shape_" : shape,
- "_ndim_" : ndim,
- "_flags_" : num})
- _pointer_type_cache[dtype] = klass
- return klass
-
-
if sys.version_info < (2, 4):
# Can't set __name__ in 2.3
import new
More information about the Numpy-svn
mailing list