def eval_card(self, card_name, expression, variable, parameters): card = get_card(card_name) if not card: raise KeyError _, arguments, evaluator, evaluated = self.eval_input(expression) variable = sympy.Symbol(variable) components, cards, evaluated, _ = self.get_cards(arguments, evaluator, evaluated) components['variable'] = variable evaluator.set(str(variable), variable) result = card.eval(evaluator, components, parameters) return { 'value': repr(result), 'output': card.format_output(result, mathjax_latex) }
def get_card_info(self, card_name, expression, variable): card = get_card(card_name) if not card: raise KeyError _, arguments, evaluator, evaluated = self.eval_input(expression) variable = sympy.Symbol(variable) components, cards, evaluated, _ = self.get_cards(arguments, evaluator, evaluated) components['variable'] = variable return { 'var': repr(variable), 'title': card.format_title(evaluated), 'input': card.format_input(repr(evaluated), components), 'pre_output': latex(card.pre_output_function(evaluated, variable)) }
def eval_card(self, card_name, expression, variable, parameters): card = get_card(card_name) if not card: raise KeyError _, arguments, evaluator, evaluated = self.eval_input(expression) variable = sympy.Symbol(variable) components, cards, evaluated, _ = self.get_cards( arguments, evaluator, evaluated) components['variable'] = variable evaluator.set(str(variable), variable) result = card.eval(evaluator, components, parameters) return { 'value': repr(result), 'output': card.format_output(result, mathjax_latex) }
def get_card_info(self, card_name, expression, variable): card = get_card(card_name) if not card: raise KeyError _, arguments, evaluator, evaluated = self.eval_input(expression) variable = sympy.Symbol(variable) components, cards, evaluated, _ = self.get_cards( arguments, evaluator, evaluated) components['variable'] = variable return { 'var': repr(variable), 'title': card.format_title(evaluated), 'input': card.format_input(repr(evaluated), components), 'pre_output': latex(card.pre_output_function(evaluated, variable)) }
def prepare_cards(self, parsed, arguments, evaluator, evaluated): components, cards, evaluated, is_function = self.get_cards(arguments, evaluator, evaluated) if is_function: latex_input = ''.join(['<script type="math/tex; mode=display">', latexify(parsed, evaluator), '</script>']) else: latex_input = mathjax_latex(evaluated) result = [] ambiguity = self.disambiguate(arguments) if ambiguity: result.append({ "ambiguity": ambiguity[0], "description": ambiguity[1] }) result.append({ "title": "SymPy", "input": removeSymPy(parsed), "output": latex_input }) if cards: if any(get_card(c).is_multivariate() for c in cards): result[-1].update({ "num_variables": len(components['variables']), "variables": map(repr, components['variables']), "variable": repr(components['variable']) }) # If no result cards were found, but the top-level call is to a # function, then add a special result card to show the result if not cards and not components['variable'] and is_function: result.append({ 'title': 'Result', 'input': removeSymPy(parsed), 'output': format_by_type(evaluated, arguments, mathjax_latex) }) else: var = components['variable'] # If the expression is something like 'lcm(2x, 3x)', display the # result of the function before the rest of the cards if is_function and not is_function_handled(arguments[0]): result.append( {"title": "Result", "input": "", "output": format_by_type(evaluated, arguments, mathjax_latex)}) line = "simplify(input_evaluated)" simplified = evaluator.eval(line, use_none_for_exceptions=True, repr_expression=False) if (simplified != None and simplified != evaluated and arguments.args and len(arguments.args) > 0 and simplified != arguments.args[0]): result.append( {"title": "Simplification", "input": repr(simplified), "output": mathjax_latex(simplified)}) elif arguments.function == 'simplify': result.append( {"title": "Simplification", "input": "", "output": mathjax_latex(evaluated)}) for card_name in cards: card = get_card(card_name) if not card: continue try: result.append({ 'card': card_name, 'var': repr(var), 'title': card.format_title(evaluated), 'input': card.format_input(repr(evaluated), components), 'pre_output': latex( card.pre_output_function(evaluated, var)), 'parameters': card.card_info.get('parameters', []) }) except (SyntaxError, ValueError) as e: pass if is_function: learn_more = find_learn_more_set(arguments[0]) if learn_more: result.append({ "title": "Learn More", "input": '', "output": learn_more }) return result
def prepare_cards(self, parsed, arguments, evaluator, evaluated): components, cards, evaluated, is_function = self.get_cards( arguments, evaluator, evaluated) if is_function: latex_input = ''.join([ '<script type="math/tex; mode=display">', latexify(parsed, evaluator), '</script>' ]) else: latex_input = mathjax_latex(evaluated) result = [] ambiguity = self.disambiguate(arguments) if ambiguity: result.append({ "ambiguity": ambiguity[0], "description": ambiguity[1] }) result.append({ "title": "SymPy", "input": removeSymPy(parsed), "output": latex_input }) if cards: if any(get_card(c).is_multivariate() for c in cards): result[-1].update({ "num_variables": len(components['variables']), "variables": map(repr, components['variables']), "variable": repr(components['variable']) }) # If no result cards were found, but the top-level call is to a # function, then add a special result card to show the result if not cards and not components['variable'] and is_function: result.append({ 'title': 'Result', 'input': removeSymPy(parsed), 'output': format_by_type(evaluated, arguments, mathjax_latex) }) else: var = components['variable'] # If the expression is something like 'lcm(2x, 3x)', display the # result of the function before the rest of the cards if is_function and not is_function_handled(arguments[0]): result.append({ "title": "Result", "input": "", "output": format_by_type(evaluated, arguments, mathjax_latex) }) line = "simplify(input_evaluated)" simplified = evaluator.eval(line, use_none_for_exceptions=True, repr_expression=False) if (simplified != None and simplified != evaluated and arguments.args and len(arguments.args) > 0 and simplified != arguments.args[0]): result.append({ "title": "Simplification", "input": repr(simplified), "output": mathjax_latex(simplified) }) elif arguments.function == 'simplify': result.append({ "title": "Simplification", "input": "", "output": mathjax_latex(evaluated) }) for card_name in cards: card = get_card(card_name) if not card: continue try: result.append({ 'card': card_name, 'var': repr(var), 'title': card.format_title(evaluated), 'input': card.format_input(repr(evaluated), components), 'pre_output': latex(card.pre_output_function(evaluated, var)), 'parameters': card.card_info.get('parameters', []) }) except (SyntaxError, ValueError) as e: pass if is_function: learn_more = find_learn_more_set(arguments[0]) if learn_more: result.append({ "title": "Learn More", "input": '', "output": learn_more }) return result