Changeset 43


Ignore:
Timestamp:
May 11, 2009, 6:24:33 PM (11 years ago)
Author:
marchulsman
Message:

Changes to props inhertance code

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • container/container.py

    r42 r43  
    130130            data = tuple((self._props[:,i] for i in range(self._props.shape[1])))
    131131            self._propscon = srccon.PySrcCon(itypes_py._propfields,data,False)
    132         return self._propcon
     132        return self._propscon
    133133   
    134134    def _setProps(self,value):
  • container/itypes_py.py

    r42 r43  
    4141
    4242_fieldfields = numpy.array([('name',    0,  0,  createType(str),          None, NotNull), \
    43                             ('id',      10, 0,  createType("uint32"),     None, 0), \
    44                             ('props',   20, 0,  createType("uint32"),     None, 0),
    45                             ('type',    30, 0,  createType(object),       None, createType(object)), \
    46                             ('subfields',    40, 0,  createType(object),       None, None), \
    47                             ('defval',  50, 0,  createType(object),       None, None)],dtype="object").view(xnumpy.XArray)
     43                            ('id',      1, 0,  createType("uint32"),     None, 0), \
     44                            ('props',   2, 0,  createType("uint32"),     None, 0),
     45                            ('type',    3, 0,  createType(object),       None, createType(object)), \
     46                            ('subfields',    4, 0,  createType(object),       None, None), \
     47                            ('defval',  5, 0,  createType(object),       None, None)],dtype="object").view(xnumpy.XArray)
    4848_fieldfields.colnames = _fieldfields[:,0].copy() #copy to prevent recursion
    4949
     
    7070
    7171#property props
    72 P_ACTIVE = 1 << 19  #property is active
    73 
    74 _propfields = numpy.array([('name',     40, 0, createType(str),           None, ""),\
    75                            ('type',     50, 0, createType(object),        None, None),\
    76                            ('fields',   60, 0, createType("numpy(int32)"),None, numpy.empty((0,),dtype="int32")),\
    77                            ('nfields',  70, 0, createType("object"),      None, None),\
    78                            ('value',    80, 0, createType("object"),      None, None),\
    79                            ('props',   90, 0, createType("uint32"),       None, IH_NONE)],dtype=object).view(xnumpy.XArray)
     72P_ACTIVENR = 19
     73P_ACTIVE = 1 << P_ACTIVENR  #property is active
     74
     75_propfields = numpy.array([('name',     10, 0, createType(str),           None, ""),\
     76                           ('id',       11, 0, createType(object),        None, None),\
     77                           ('type',     12, 0, createType(object),        None, None),\
     78                           ('fields',   13, 0, createType("numpy(int32)"),None, numpy.empty((0,),dtype="int32")),\
     79                           ('nfields',  14, 0, createType("object"),      None, None),\
     80                           ('value',    15, 0, createType("object"),      None, None),\
     81                           ('props',    16, 0, createType("uint32"),       None, IH_NONE)],dtype=object).view(xnumpy.XArray)
    8082_propfields_names = _propfields[:,0]
    8183_propfields.colnames = _fieldfields.colnames
     
    8385
    8486
     87idgen = utility.seqgen(1000).next
    8588def createProps(pname,ptype,pfields=None,pvalue=None,pihtype=None):
    8689    rows = len(ptype)
     
    9194    if(pihtype is None):
    9295        pihtype = [_propfields[6].defval] * rows
     96    pidgen = [idgen() for i in range(rows)]
    9397
    9498    nfields = []
     
    97101    active = [True] * rows
    98102       
    99     p = xnumpy.dimarray(transpose((pname,ptype,pfields,nfields,pvalue,active,pihtype)),object,2,2)
     103    p = xnumpy.dimarray(transpose((pname,pidgen,ptype,pfields,nfields,pvalue,active,pihtype)),object,2,2)
    100104    p.colnames = _propfields_names
    101105    return p
    102106
    103 
    104 
    105 idgen = utility.seqgen(1000).next
     107empty_props = xnumpy.dimarray([],object)
     108empty_props.shape = (len(_propfields_names),0)
     109empty_props.colnames = _propfields_names
     110
     111
    106112def createFields(fname,ftype=None,fdefval=None):
    107113    rows = len(fname)
  • container/opcon.py

    r42 r43  
    88
    99class OpCon(container.Container):
    10    def deriveMultipleProps(self,sources,sidxs,fposs,nfields,rowchange=False,modfield=True):
     10
     11    def _noFieldProps(self,*sources):
     12        pr = []
     13        for source in sources:
     14            if(source._props.shape[1] > 0):
     15                p = source._props.copy()
     16                p.nfields = 0
     17                p.fields = _propfields[3].defval
     18
     19                ih = numpy.cast[bool](p.props & itypes_py.IH_ALWAYS)
     20                check = numpy.cast[bool](p.props & itypes_py.IH_CHECK)
     21                for pidx in utility.find(check):
     22                    ih[pidx] = p[pidx].type.check(self,p[pidx])
     23
     24                pr.append(p)
     25        self.__finishProps(*pr)
     26   
     27   
     28    def _selectProps(self,source):
     29        self.__finishProps(source._props)
     30   
     31   
     32    def __finishProps(self,*psources):
     33        if(len(psources) > 1):
     34            props = numpy.vstack(psources)
     35            props.colnames = itypes_py._propfields_names
     36
     37            #check for duplicate ids, while keeping ordering
     38            ids = set()
     39            remove = numpy.empty((len(props),),dtype=bool)
     40            for i,id in enumerate(props.id):
     41                if(id in ids):
     42                    remove[i] = True
     43                else:
     44                    ids.add(id)
     45            if(remove.any()):
     46                props = props[~remove]
     47        elif(len(psources) == 1):
     48            props = psources[0]
     49        else:
     50            props = itypes_py.empty_props
     51       
     52        if(props.shape[1] > 0):
     53            props.props = props.props & ~P_ACTIVE
     54            #check if props should be active
     55            for i,prop in enumerate(props):
     56                if(prop.props & itypes_py.AC_FIELDANY):
     57                    props[i].props |= ((sum(prop.fields >= 0) > 0) << P_ACTIVENR)
     58                elif(prop.props & itypes_py.AC_FIELDALL):
     59                    props[i].props = ((sum(prop.fields >= 0) == prop.nfields) << P_ACTIVENR)
     60                elif(prop.props & itypes_py.AC_CHECK):
     61                    props[i].props = ((prop.type.active_check(self,prop)) << P_ACTIVENR)
     62                else:
     63                    props[i].props = True
     64       
     65        self._props = props
     66        self._invar.update['_props'] = props
     67        if(self._set_props_class()):
     68            self._invar.vclass = self.__class__
     69
     70    def _copyProps(self,source):
     71        self._props = source._props
     72        self._invar.update['_props'] = source._props
     73        if(self._set_props_class()):
     74            self._invar.vclass = self.__class__
     75         
     76
     77    def deriveMultipleProps(self,sources,sidxs,fposs,nfields,rowchange=False,modfield=True):
    1178       return
    1279       propl = []
     
    135202                self._fields = itypes_py.binop_type(sleft._activefields,rtype,operator)
    136203                self._actidx = range(len(self._fields))
     204                self._noFieldProps(sleft)
    137205            else:
    138206                self._fields = itypes_py.binop_type(sleft._activefields,sright._activefields,operator)
    139207                self._actidx = range(len(self._fields))
    140 
    141             self._invar.update['_fields'] = self._fields
    142             self.deriveMultipleProps((sleft,sright),(None,None),(-1,-1),1,True)
     208                self._noFieldProps(sleft,sright)
     209            self._invar.update['_fields'] = self._fields
    143210
    144211        MultiOpCon.__init__(self, sleft, sright,operator)
     
    254321       
    255322        if(source._invar.register(self,ivkey)):
    256             self.deriveMultipleProps((source,),(None,),(0,),source.ncol,True)
     323            self._copyProps(source)
    257324
    258325class SelectCon(MultiOpCon):
     
    276343           self._invar.update['_actidx'] = self._actidx
    277344
    278            self.deriveMultipleProps((source,),(self._actidx,),(0,),len(self._actidx),True)
     345           self._selectProps(source)
    279346       
    280347        self._source = (source,col_constraint)
  • container/srccon.py

    r42 r43  
    6060        self._actidx = numpy.arange(len(fields)).view(xnumpy.XArray)
    6161        self._invar = container.Invar()
     62        self._props = itypes_py.empty_props
    6263
    6364        if(not data is None):
  • src/itypes.c

    r42 r43  
    123123
    124124    if(typelength == NULL)
    125         key = Py_BuildValue("kl",typecode,(long) subtype);
     125        if(subtype == NULL)
     126            key = PyInt_FromLong(typecode);
     127        else
     128            key = Py_BuildValue("kl",typecode,(long) subtype);
    126129    else
    127130        key = Py_BuildValue("kOl",typecode,typelength,(long) subtype);
Note: See TracChangeset for help on using the changeset viewer.