Пример #1
0
 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 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
Пример #3
0
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