def test_setattr(): sym = Symbol() sym.foo = 5 expr = "symbol.foo = 5" p_expr = ast.parse(expr, mode='exec') c_expr = compile(ast.fix_missing_locations(p_expr), '', 'exec') c_sym = compile_sym(sym) assert ast.dump(p_expr) == ast.dump(ast.Module([sym_getattr(sym_getattr(sym, "prior")[0], "ast")]))
def __neg__(self): if len(self.expr) == 2 and self.expr[0] in ('+', '-'): if self.expr[0] == '+': self.expr = tuple(['-', Symbol(('-', self.expr[1]))]) elif self.expr[0] == '-': self.expr = tuple(['+', Symbol(('-', self.expr[1]))]) elif len(self.expr) == 3 and self.expr[0] in ('+', '-'): if self.expr[0] == '+': self.expr = tuple( ['-', Symbol(('-', self.expr[1]), self.expr[2])]) elif self.expr[0] == '-': self.expr = tuple( ['+', Symbol(('-', self.expr[1]), self.expr[2])]) return self
def __rpow__(self, obj): if len(self.expr) in (2, 3) and self.expr[0] in ('+', '-', '*', '/', '**'): self.setBracket() if isinstance(obj, Symbol) and len( obj.expr) in (2, 3) and obj.expr[0] in ('+', '-', '*', '/', '**'): obj.setBracket() return Symbol(('**', obj, self))
def __rdiv__(self, obj): if isinstance(obj, Symbol) and self.expr == obj.expr: return 1.0 if isinstance(obj, (float, int)) and self.expr == obj: return 1.0 if len(self.expr) in (2, 3) and self.expr[0] in ('+', '-', '*', '/'): self.setBracket() if isinstance(obj, Symbol) and len( obj.expr) in (2, 3) and obj.expr[0] in ('+', '-'): obj.setBracket() return Symbol(('/', obj, self))
def __rmul__(self, obj): if isinstance(obj, (float, int)) and obj == 1.0: return self if isinstance(obj, (float, int)) and obj == 0.0: return 0.0 if len(self.expr) in (2, 3) and self.expr[0] in ('+', '-'): self.setBracket() if isinstance(obj, Symbol) and len( obj.expr) in (2, 3) and obj.expr[0] in ('+', '-'): obj.setBracket() return Symbol(('*', obj, self))
def _convert_symbolserver_match(self, instruction_addr, symbolserver_match, obj): """Symbolizes a frame with system symbols only.""" if symbolserver_match is None: return [] symbol = symbolserver_match['symbol'] if symbol[:1] == '_': symbol = symbol[1:] return [ self._process_frame(Symbol( sym_addr=parse_addr(symbolserver_match['addr']), instr_addr=parse_addr(instruction_addr), line=None, symbol=symbol, ), obj, package=symbolserver_match['object_name']) ]
def test(expr, i): from symbolic import Symbol x = Symbol('x') y = Symbol('y') z = Symbol('z') try: f1 = eval(expr) x1 = random() y1 = random() z1 = random() x, y, z = x1, y1, z1 res1 = eval(str(f1)) except: res1 = None from sympy import Symbol x = Symbol('x') y = Symbol('y') z = Symbol('z') try: f2 = eval(expr) x, y, z = x1, y1, z1 res2 = eval(str(f2)) except: res2 = None if res1 <> res2 and res1 <> None and res2 <> None and res2 <> 0 and abs( res1 - res2) > 1e-6 * abs(res2): print expr print f1 print res1 print f2 print res2 raise Exception()
def __rsub__(self, obj): if len(self.expr) in (2, 3) and self.expr[0] in ('+', '-'): self.setBracket() return Symbol(('-', obj, self))
def __sub__(self, obj): if isinstance(obj, Symbol) and len( obj.expr) in (2, 3) and obj.expr[0] in ('+', '-'): obj.setBracket() return Symbol(('-', self, obj))
def __radd__(self, obj): return Symbol(('+', obj, self))
def log(obj): if isinstance(obj, Symbol): return Symbol('log({a})'.format(a=obj)) return math.atan(obj)
def __add__(self, obj): if isinstance(obj, Symbol) and self.expr == obj.expr: return Symbol(('*', 2.0, self)) return Symbol(('+', self, obj))
def exp(obj): if isinstance(obj, Symbol): return Symbol('exp({a})'.format(a=obj)) return math.exp(obj)
def tan(obj): if isinstance(obj, Symbol): return Symbol('tan({a})'.format(a=obj)) return math.tan(obj)
def cos(obj): if isinstance(obj, Symbol): return Symbol('cos({a})'.format(a=obj)) return math.cos(obj)
def sqrt(obj): if isinstance(obj, Symbol): return Symbol('sqrt({a})'.format(a=obj)) return math.sqrt(obj)