def find_matches(answer, attempt): logger.debug('find_matches recieved answer=' + str(answer) + ' attempt=' + str(attempt)) attempt_parsed = parse_webwork(attempt) logger.debug('calling eval_parsed on on' + str(attempt_parsed)) attempt_tree = eval_parsed(attempt_parsed) logger.debug('calling flatten on' + str(attempt_tree)) attempt_list = flatten(attempt_tree, 't') logger.debug('attempt list:\n' + str(attempt_list)) answer_parsed = parse_webwork(answer) logger.debug('calling eval_parsed on on' + str(answer_parsed)) answer_tree = eval_parsed(answer_parsed) logger.debug('calling flatten on' + str(answer_tree)) answer_list = flatten(answer_tree, 'c') logger.debug('answer list\n' + str(answer_list)) combined_list = sorted(answer_list + attempt_list, key=lambda x: x[0]) logger.debug('combined list\n' + str(combined_list)) Hits = find_Hits(combined_list) logger.debug('Hits:\n' + str(Hits)) final_matches = find_dominating_hits(Hits, answer, attempt) return final_matches
def answer_for_student(df, user_id, answer_tree): ''' Evaluates an answer parse tree for a specific user ''' user_vars = vars_for_student(df, user_id) etree = eval_parsed(answer_tree, user_vars) return etree
def answer_for_student(self, user_id): user_vars = self.vars_for_student(user_id) key = frozenset(user_vars.iteritems()) answer = self.answer_exps.get(key) if answer: return answer else: etree = eval_parsed(self.answer_ptree, user_vars) self.answer_exps[key] = etree return etree
def parse_eval(string): """ Given an expression, return it's parse tree and it's evaluation tree """ expr = parse_webwork(string) if expr: try: etree = eval_parsed(expr) return expr, etree except: return (None, None) else: return (None, None)
def parsed(string): expr = parse_webwork(string) if expr: try: etree = eval_parsed(expr) nums = Collect_numbers(etree) return etree, nums except: return (None, None) else: return (None, None)