def hint_check_function_used(ans, term): ''' ans = student answer term = search term to look for search for function used in ans don not worry about errors: those are caught by the caller ''' case_sensitive = True # parse expression math_interpreter = ParseAugmenter(ans, case_sensitive) math_interpreter.parse_algebra() found = term in math_interpreter.functions_used # for debugging # print 'for %s, found=%s, variables = %s' % (ans, found, math_interpreter.variables_used) return found
def latex_preview(math_expr, variables=(), functions=(), case_sensitive=False): """ Convert `math_expr` into latex, guaranteeing its parse-ability. Analagous to `evaluator`. """ # No need to go further if math_expr.strip() == "": return "" # Parse tree latex_interpreter = ParseAugmenter(math_expr, case_sensitive) latex_interpreter.parse_algebra() # Get our variables together. variables, functions = add_defaults(variables, functions, case_sensitive) # Create a recursion to evaluate the tree. if case_sensitive: casify = lambda x: x else: casify = lambda x: x.lower() # Lowercase for case insens. render_actions = { 'number': render_number, 'variable': variable_closure(variables, casify), 'function': function_closure(functions, casify), 'atom': render_atom, 'power': render_power, 'parallel': render_parallel, 'product': render_product, 'sum': render_sum } backslash = "\\" wrap_escaped_strings = lambda s: LatexRendered( s.replace(backslash, backslash * 2) ) output = latex_interpreter.reduce_tree( render_actions, terminal_converter=wrap_escaped_strings ) return output.latex