def test_eval2(): e = Eval() assert e.eval("""\ def f(x): return x**2 f(3) """\ ) == "9" assert e.eval("""\ def f(x): return x**2 f(3) a = 5 """\ ) == "" assert e.eval("""\ def f(x): return x**2 if f(3) == 9: a = 1 else: a = 0 a """\ ) == "1" assert e.eval("""\ def f(x): return x**2 + 1 if f(3) == 9: a = 1 else: a = 0 a """\ ) == "0"
def test_eval2(): e = Eval() assert e.eval("""\ def f(x): return x**2 f(3) """\ ) == "9" assert e.eval("""\ def f(x): return x**2 f(3) a = 5 """\ ) == "" assert e.eval("""\ def f(x): return x**2 if f(3) == 9: a = 1 else: a = 0 a """\ ) == "1" assert e.eval("""\ def f(x): return x**2 + 1 if f(3) == 9: a = 1 else: a = 0 a """\ ) == "0"
def test_eval3(): e = Eval() assert e.eval("xxxx").startswith("Traceback") assert e.eval("""\ def f(x): return x**2 + 1 + y if f(3) == 9: a = 1 else: a = 0 a """\ ).startswith("Traceback")
def test_eval3(): e = Eval() assert e.eval("xxxx").startswith("Traceback") assert e.eval("""\ def f(x): return x**2 + 1 + y if f(3) == 9: a = 1 else: a = 0 a """\ ).startswith("Traceback")
def try_sympy(self, s): namespace = {} exec "from sympy.interactive import *" in {}, namespace a = Eval(namespace) # change to True to spare the user from exceptions: r = a.eval(s, use_none_for_exceptions=False) if r is not None: result = [ {"title": "Input", "input": s}, {"title": "SymPy", "input": s, "output": r}, ] code = """\ s = %s a = s.atoms(Symbol) if len(a) == 1: x = a.pop() result = %s else: result = None result """ line = "diff(%s, x)" % s r = a.eval(code % (s, line), use_none_for_exceptions=True) if r and r != "None": result.append( {"title": "Derivative", "input": line, "output": r}) line = "integrate(%s, x)" % s r = a.eval(code % (s, line), use_none_for_exceptions=True) if r and r != "None": result.append( {"title": "Indefinite integral", "input": line, "output": r}) line = "series(%s, x, 0, 10)" % s r = a.eval(code % (s, line), use_none_for_exceptions=True) if r and r != "None": result.append( {"title": "Series expansion around 0", "input": line, "output": r}) return result else: return None
def test_eval1(): e = Eval() assert e.eval("1+1") == "2" assert e.eval("1+1\n") == "2" assert e.eval("a=1+1") == "" assert e.eval("a=1+1\n") == "" assert e.eval("a=1+1\na") == "2" assert e.eval("a=1+1\na\n") == "2" assert e.eval("a=1+1\na=3") == "" assert e.eval("a=1+1\na=3\n") == ""
def test_eval1(): e = Eval() assert e.eval("1+1") == "2" assert e.eval("1+1\n") == "2" assert e.eval("a=1+1") == "" assert e.eval("a=1+1\n") == "" assert e.eval("a=1+1\na") == "2" assert e.eval("a=1+1\na\n") == "2" assert e.eval("a=1+1\na=3") == "" assert e.eval("a=1+1\na=3\n") == ""
def try_sympy(self, s): namespace = {} exec PREEXEC in {}, namespace a = Eval(namespace) # change to True to spare the user from exceptions: if not len(s): return try: evaluated = sympify(s, convert_xor=True, locals={ 'integrate': sympy.Integral, 'plot': lambda func: func }) input_repr = repr(evaluated) namespace['input_evaluated'] = evaluated except sympy_parser.TokenError: return [{ "title": "Input", "input": s }, { "title": "Error", "input": s, "error": "Invalid input" }] except Exception as e: return self.handle_error(s, e) if input_repr is not None: result = [ { "title": "Input", "input": s }, { "title": "SymPy", "input": s, "output": input_repr }, ] if isinstance(evaluated, sympy.Basic): variables = evaluated.atoms(Symbol) if len(variables) == 1: var = variables.pop() else: var = None else: var = None convert_input, cards = find_result_set(evaluated) namespace['input_evaluated'], var = convert_input(evaluated, var) # Come up with a solution to use all variables if more than 1 # is entered. if var != None: # See a better way to do this. input_repr = repr(namespace['input_evaluated']) line = "simplify(input_evaluated)" simplified = a.eval(line, use_none_for_exceptions=True) r = sympify(a.eval(line, use_none_for_exceptions=True)) if simplified != "None" and simplified != input_repr: result.append({ "title": "Simplification", "input": simplified, "output": mathjax_latex(r) }) for card in cards: try: r = card.eval(a, var) if r != "None": formatted_input = card.format_input( input_repr, var) result.append( dict(title=card.title, input=formatted_input, pre_output=latex( card.pre_output_function( input_repr, var)), output=card.format_output( r, mathjax_latex))) except SyntaxError: pass return result else: return None
def try_sympy(self, s): namespace = {} exec PREEXEC in {}, namespace a = Eval(namespace) # change to True to spare the user from exceptions: if not len(s): return try: evaluated = sympify(s, convert_xor=True, locals={ 'integrate': sympy.Integral, 'plot': lambda func: func }) input_repr = repr(evaluated) namespace['input_evaluated'] = evaluated except sympy_parser.TokenError: return [ {"title": "Input", "input": s}, {"title": "Error", "input": s, "error": "Invalid input"} ] except Exception as e: return self.handle_error(s, e) if input_repr is not None: result = [ {"title": "Input", "input": s}, {"title": "SymPy", "input": s, "output": input_repr}, ] if isinstance(evaluated, sympy.Basic): variables = evaluated.atoms(Symbol) if len(variables) == 1: var = variables.pop() else: var = None else: var = None convert_input, cards = find_result_set(evaluated) namespace['input_evaluated'], var = convert_input(evaluated, var) # Come up with a solution to use all variables if more than 1 # is entered. if var != None: # See a better way to do this. input_repr = repr(namespace['input_evaluated']) line = "simplify(input_evaluated)" simplified = a.eval(line, use_none_for_exceptions=True) r = sympify(a.eval(line, use_none_for_exceptions=True)) if simplified != "None" and simplified != input_repr: result.append( {"title": "Simplification", "input": simplified, "output": mathjax_latex(r)}) for card in cards: try: r = card.eval(a, var) if r != "None": formatted_input = card.format_input(input_repr, var) result.append(dict( title=card.title, input=formatted_input, pre_output=latex( card.pre_output_function(input_repr, var)), output=card.format_output(r, mathjax_latex) )) except SyntaxError: pass return result else: return None