Changeset 734

Show
Ignore:
Timestamp:
08/27/10 14:51:16 (1 year ago)
Author:
dmitrey
Message:

FD: final get rid of is_linear, using getOrder instead

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • PythonPackages/FuncDesigner/FuncDesigner/ooFun.py

    r733 r734  
    4949    #usedIn =  set() 
    5050    is_oovar = False 
    51     is_linear = False 
    5251    isConstraint = False 
    5352    #isDifferentiable = True 
     
    9594         
    9695        # to prevent creating of several oofuns binded to same oofun.size 
    97         r = oofun(lambda x: asarray(x).size, self, is_linear=True, discrete = True, getOrder = lambda *args, **kwargs: 0) 
     96        r = oofun(lambda x: asarray(x).size, self, discrete = True, getOrder = lambda *args, **kwargs: 0) 
    9897        self.size = r  
    9998 
     
    196195                r._D = lambda *args,  **kwargs: self._D(*args,  **kwargs)  
    197196                 
    198 # TODO: create linear field with operators +, -, *(non-oofunc), /(non-oofunc) 
    199         if self.is_linear and (not isinstance(other, oofun) or other.is_linear):  
    200             r.is_linear = True 
    201197        return r 
    202198     
     
    205201    # overload "-a" 
    206202    def __neg__(self):  
    207         r = oofun(lambda a: -a, self, d = lambda a: -Eye(Len(a)), is_linear = self.is_linear
     203        r = oofun(lambda a: -a, self, d = lambda a: -Eye(Len(a))
    208204        r._getFuncCalcEngine = lambda *args,  **kwargs: -self._getFuncCalcEngine(*args,  **kwargs) 
    209205        r.getOrder = self.getOrder 
     
    253249                r.d = raise_except 
    254250             
    255         r.is_linear = self.is_linear and not isinstance(other, oofun) 
    256251        # r.discrete = self.discrete and (?) 
    257252        #r.isCostly = True 
     
    298293                r._D = lambda *args, **kwargs: dict([(key, other*value) for key, value in self._D(*args, **kwargs).items()]) 
    299294                r.d = raise_except 
    300         r.is_linear = self.is_linear and not isinstance(other, oofun) 
    301295        #r.isCostly = True 
    302296        return r 
     
    374368        # TODO: check me! 
    375369        # what about a[a.size/2:]? 
    376         if self.is_linear and not isinstance(ind,  oofun): 
    377             r.is_linear = True 
    378370             
    379371        # TODO: edit me! 
     
    405397            return r 
    406398        r = oofun(f, self, d = d, getOrder = self.getOrder) 
    407         if self.is_linear: 
    408             r.is_linear = True 
     399 
    409400        return r 
    410401    
     
    418409            if type(x) == ndarray and x.ndim > 1: raise FuncDesignerException('sum(x) is not implemented yet for arrays with ndim > 1') 
    419410            return ones_like(x)  
    420         r.d, r.is_linear = d, self.is_linear 
     411        r.d = d 
    421412        return r 
    422413     
     
    11181109    elif hasattr(arg, 'copy'): 
    11191110        tmp = arg.copy() 
    1120         return oofun(lambda *args: tmp, input = None, is_linear=True, discrete=True)#, isConstraint = True) 
     1111        return oofun(lambda *args, **kwargs: tmp, input = None, getOrder = lambda *args,  **kwargs: 0, discrete=True)#, isConstraint = True) 
    11211112    elif isscalar(arg): 
    11221113        tmp = array(arg, 'float') 
    1123         return oofun(lambda *args: tmp, input = None, is_linear=True, discrete=True)#, isConstraint = True) 
     1114        return oofun(lambda *args, **kwargs: tmp, input = None, getOrder = lambda *args,  **kwargs: 0, discrete=True)#, isConstraint = True) 
    11241115    else: 
    11251116        #return oofun(lambda *args, **kwargs: arg(*args,  **kwargs), input=None, discrete=True) 
  • PythonPackages/FuncDesigner/FuncDesigner/ooVar.py

    r724 r734  
    1010    #fixed = False 
    1111    #initialized = False 
    12     is_linear = True 
    1312    _unnamedVarNumber = 1#static variable for oovar class 
    1413 
  • PythonPackages/FuncDesigner/FuncDesigner/overloads.py

    r731 r734  
    9595    if not isinstance(inp1, oofun) and not isinstance(inp2, oofun): return np.dot(inp1, inp2) 
    9696     
    97     if not isinstance(inp1, oofun):  
    98         is_linear = inp2.is_linear 
    99     else: 
    100         is_linear = inp1.is_linear and not isinstance(inp2, oofun) 
    101      
    10297    def aux_d(x, y): 
    10398        if y.size == 1:  
     
    112107    r = oofun(lambda x, y: x * y if x.size == 1 or y.size == 1 else np.dot(x, y), [inp1, inp2], d=(lambda x, y: aux_d(x, y), lambda x, y: aux_d(y, x))) 
    113108    r.getOrder = lambda *args, **kwargs: (x.getOrder(*args, **kwargs) if isinstance(x, oofun) else 0) + (y.getOrder(*args, **kwargs) if isinstance(y, oofun) else 0) 
    114     r.is_linear = is_linear 
    115109    r.isCostly = True 
    116110    return r 
     
    130124 
    131125    if condIterableOfOOFuns: 
    132         is_linear = True 
    133126        d, INP, r0 = [], [], 0.0 
    134127        j = -1 
     
    140133            j += 1 
    141134            INP.append(elem) 
    142             if not elem.is_linear: is_linear = False 
    143135 
    144136        # TODO:  check for fixed inputs 
     
    150142        #!!!!!!!!!!!!!!!!!! TODO: check INP for complex cases (not list of oovars) 
    151143         
    152         r = oofun(f, INP, is_linear=is_linear)  
     144        r = oofun(f, INP)  
    153145         
    154146        def getOrder(*args, **kwargs):