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 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()