Changeset 734
- Timestamp:
- 08/27/10 14:51:16 (1 year ago)
- Files:
-
- PythonPackages/FuncDesigner/FuncDesigner/ooFun.py (modified) (10 diffs)
- PythonPackages/FuncDesigner/FuncDesigner/ooVar.py (modified) (1 diff)
- PythonPackages/FuncDesigner/FuncDesigner/overloads.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
PythonPackages/FuncDesigner/FuncDesigner/ooFun.py
r733 r734 49 49 #usedIn = set() 50 50 is_oovar = False 51 is_linear = False52 51 isConstraint = False 53 52 #isDifferentiable = True … … 95 94 96 95 # 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) 98 97 self.size = r 99 98 … … 196 195 r._D = lambda *args, **kwargs: self._D(*args, **kwargs) 197 196 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 = True201 197 return r 202 198 … … 205 201 # overload "-a" 206 202 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))) 208 204 r._getFuncCalcEngine = lambda *args, **kwargs: -self._getFuncCalcEngine(*args, **kwargs) 209 205 r.getOrder = self.getOrder … … 253 249 r.d = raise_except 254 250 255 r.is_linear = self.is_linear and not isinstance(other, oofun)256 251 # r.discrete = self.discrete and (?) 257 252 #r.isCostly = True … … 298 293 r._D = lambda *args, **kwargs: dict([(key, other*value) for key, value in self._D(*args, **kwargs).items()]) 299 294 r.d = raise_except 300 r.is_linear = self.is_linear and not isinstance(other, oofun)301 295 #r.isCostly = True 302 296 return r … … 374 368 # TODO: check me! 375 369 # what about a[a.size/2:]? 376 if self.is_linear and not isinstance(ind, oofun):377 r.is_linear = True378 370 379 371 # TODO: edit me! … … 405 397 return r 406 398 r = oofun(f, self, d = d, getOrder = self.getOrder) 407 if self.is_linear: 408 r.is_linear = True 399 409 400 return r 410 401 … … 418 409 if type(x) == ndarray and x.ndim > 1: raise FuncDesignerException('sum(x) is not implemented yet for arrays with ndim > 1') 419 410 return ones_like(x) 420 r.d , r.is_linear = d, self.is_linear411 r.d = d 421 412 return r 422 413 … … 1118 1109 elif hasattr(arg, 'copy'): 1119 1110 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) 1121 1112 elif isscalar(arg): 1122 1113 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) 1124 1115 else: 1125 1116 #return oofun(lambda *args, **kwargs: arg(*args, **kwargs), input=None, discrete=True) PythonPackages/FuncDesigner/FuncDesigner/ooVar.py
r724 r734 10 10 #fixed = False 11 11 #initialized = False 12 is_linear = True13 12 _unnamedVarNumber = 1#static variable for oovar class 14 13 PythonPackages/FuncDesigner/FuncDesigner/overloads.py
r731 r734 95 95 if not isinstance(inp1, oofun) and not isinstance(inp2, oofun): return np.dot(inp1, inp2) 96 96 97 if not isinstance(inp1, oofun):98 is_linear = inp2.is_linear99 else:100 is_linear = inp1.is_linear and not isinstance(inp2, oofun)101 102 97 def aux_d(x, y): 103 98 if y.size == 1: … … 112 107 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))) 113 108 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_linear115 109 r.isCostly = True 116 110 return r … … 130 124 131 125 if condIterableOfOOFuns: 132 is_linear = True133 126 d, INP, r0 = [], [], 0.0 134 127 j = -1 … … 140 133 j += 1 141 134 INP.append(elem) 142 if not elem.is_linear: is_linear = False143 135 144 136 # TODO: check for fixed inputs … … 150 142 #!!!!!!!!!!!!!!!!!! TODO: check INP for complex cases (not list of oovars) 151 143 152 r = oofun(f, INP , is_linear=is_linear)144 r = oofun(f, INP) 153 145 154 146 def getOrder(*args, **kwargs):
