def has_shared_memory(self): """Check that created array shares data with input array. """ if self.obj is self.arr: return True if not isinstance(self.obj, ndarray): return False obj_attr = wrap.array_attrs(self.obj) return obj_attr[0] == self.arr_attr[0]
def has_shared_memory(self): """Check that created array shares data with input array. """ if self.obj is self.arr: return True if not isinstance(self.obj,ndarray): return False obj_attr = wrap.array_attrs(self.obj) return obj_attr[0]==self.arr_attr[0]
def __init__(self, typ, dims, intent, obj): self.type = typ self.dims = dims self.intent = intent self.obj_copy = copy.deepcopy(obj) self.obj = obj # arr.dtypechar may be different from typ.dtypechar self.arr = wrap.call(typ.type_num, dims, intent.flags, obj) self.arr_attr = wrap.array_attrs(self.arr) if len(dims) > 1: if self.intent.is_intent('c'): assert intent.flags & wrap.F2PY_INTENT_C assert not self.arr.flags[ 'FORTRAN'], ` self.arr.flags, obj.flags ` assert self.arr.flags['CONTIGUOUS'] assert not self.arr_attr[6] & wrap.FORTRAN else: assert not intent.flags & wrap.F2PY_INTENT_C assert self.arr.flags['FORTRAN'] assert not self.arr.flags['CONTIGUOUS'] assert self.arr_attr[6] & wrap.FORTRAN if obj is None: self.pyarr = None self.pyarr_attr = None return if intent.is_intent('cache'): assert isinstance(obj, ndarray), ` type(obj) ` self.pyarr = array(obj).reshape(*dims) else: self.pyarr = array(array(obj, dtype=typ.dtypechar).reshape(*dims), fortran=not self.intent.is_intent('c')) assert self.pyarr.dtype.char==typ.dtypechar,\ `self.pyarr.dtype.char,typ.dtypechar` assert self.pyarr.flags['OWNDATA'] self.pyarr_attr = wrap.array_attrs(self.pyarr) if len(dims) > 1: if self.intent.is_intent('c'): assert not self.pyarr.flags['FORTRAN'] assert self.pyarr.flags['CONTIGUOUS'] assert not self.pyarr_attr[6] & wrap.FORTRAN else: assert self.pyarr.flags['FORTRAN'] assert not self.pyarr.flags['CONTIGUOUS'] assert self.pyarr_attr[6] & wrap.FORTRAN assert self.arr_attr[1] == self.pyarr_attr[1] # nd assert self.arr_attr[2] == self.pyarr_attr[2] # dimensions if self.arr_attr[1] <= 1: assert self.arr_attr[3]==self.pyarr_attr[3],\ `self.arr_attr[3],self.pyarr_attr[3],self.arr.tostring(),self.pyarr.tostring()` # strides assert self.arr_attr[5][-2:]==self.pyarr_attr[5][-2:],\ `self.arr_attr[5],self.pyarr_attr[5]` # descr assert self.arr_attr[6]==self.pyarr_attr[6],\ `self.arr_attr[6],self.pyarr_attr[6],flags2names(0*self.arr_attr[6]-self.pyarr_attr[6]),flags2names(self.arr_attr[6]),intent` # flags if intent.is_intent('cache'): assert self.arr_attr[5][3]>=self.type.elsize,\ `self.arr_attr[5][3],self.type.elsize` else: assert self.arr_attr[5][3]==self.type.elsize,\ `self.arr_attr[5][3],self.type.elsize` assert self.arr_equal(self.pyarr, self.arr) if isinstance(self.obj, ndarray): if typ.elsize == Type(obj.dtype).elsize: if not intent.is_intent('copy') and self.arr_attr[1] <= 1: assert self.has_shared_memory()
def flags_info(arr): flags = wrap.array_attrs(arr)[6] return flags2names(flags)
def __init__(self,typ,dims,intent,obj): self.type = typ self.dims = dims self.intent = intent self.obj_copy = copy.deepcopy(obj) self.obj = obj # arr.dtypechar may be different from typ.dtypechar self.arr = wrap.call(typ.type_num,dims,intent.flags,obj) self.arr_attr = wrap.array_attrs(self.arr) if len(dims)>1: if self.intent.is_intent('c'): assert intent.flags & wrap.F2PY_INTENT_C assert not self.arr.flags['FORTRAN'],`self.arr.flags,obj.flags` assert self.arr.flags['CONTIGUOUS'] assert not self.arr_attr[6] & wrap.FORTRAN else: assert not intent.flags & wrap.F2PY_INTENT_C assert self.arr.flags['FORTRAN'] assert not self.arr.flags['CONTIGUOUS'] assert self.arr_attr[6] & wrap.FORTRAN if obj is None: self.pyarr = None self.pyarr_attr = None return if intent.is_intent('cache'): assert isinstance(obj,ndarray),`type(obj)` self.pyarr = array(obj).reshape(*dims) else: self.pyarr = array(array(obj, dtype = typ.dtypechar).reshape(*dims), fortran=not self.intent.is_intent('c')) assert self.pyarr.dtype.char==typ.dtypechar,\ `self.pyarr.dtype.char,typ.dtypechar` assert self.pyarr.flags['OWNDATA'] self.pyarr_attr = wrap.array_attrs(self.pyarr) if len(dims)>1: if self.intent.is_intent('c'): assert not self.pyarr.flags['FORTRAN'] assert self.pyarr.flags['CONTIGUOUS'] assert not self.pyarr_attr[6] & wrap.FORTRAN else: assert self.pyarr.flags['FORTRAN'] assert not self.pyarr.flags['CONTIGUOUS'] assert self.pyarr_attr[6] & wrap.FORTRAN assert self.arr_attr[1]==self.pyarr_attr[1] # nd assert self.arr_attr[2]==self.pyarr_attr[2] # dimensions if self.arr_attr[1]<=1: assert self.arr_attr[3]==self.pyarr_attr[3],\ `self.arr_attr[3],self.pyarr_attr[3],self.arr.tostring(),self.pyarr.tostring()` # strides assert self.arr_attr[5][-2:]==self.pyarr_attr[5][-2:],\ `self.arr_attr[5],self.pyarr_attr[5]` # descr assert self.arr_attr[6]==self.pyarr_attr[6],\ `self.arr_attr[6],self.pyarr_attr[6],flags2names(0*self.arr_attr[6]-self.pyarr_attr[6]),flags2names(self.arr_attr[6]),intent` # flags if intent.is_intent('cache'): assert self.arr_attr[5][3]>=self.type.elsize,\ `self.arr_attr[5][3],self.type.elsize` else: assert self.arr_attr[5][3]==self.type.elsize,\ `self.arr_attr[5][3],self.type.elsize` assert self.arr_equal(self.pyarr,self.arr) if isinstance(self.obj,ndarray): if typ.elsize==Type(obj.dtype).elsize: if not intent.is_intent('copy') and self.arr_attr[1]<=1: assert self.has_shared_memory()