def check_split(conn, verbose): result, refobj = asst2.load_result('split') val = asst2.similarity(result, refobj, verbose) if val < 1.: if verbose: print("INFO: attempting to load resplit tables") try: result, refobj = asst2.load_result('resplit') num_partials = len(refobj) marks = (total - partial * num_partials) * val**2 for i, refelem in enumerate(refobj): try: table = result[i] except IndexError: print("ERROR: student does not have resplit[%d]" % i) continue val = asst2.similarity(table, refelem, verbose) marks += partial * val**2 conn.send(marks) return except KeyError: print("WARNING: could not load resplit table from student") conn.send(total * val**2)
def check_optimal(conn, verbose): result, refobj = asst2.load_result('optimal') val = asst2.similarity(result, refobj, verbose) if val >= cutoff: conn.send(math.sqrt(val)*total) else: conn.send(0)
def check_dealer(conn, verbose): result, refobj = asst2.load_result('dealer') mark = total for key in _DEALER_CODE: if mark <= 0: print("too many errors. exiting.") mark = 0 break if key not in result: print("missing table for {}".format(key)) mark -= 1 continue stu = result[key] ans = refobj[key] sk = tuple(stu.keys()) ak = tuple(ans.keys()) if sk != ak: print("key set mismatch for table {}: {} vs. {}".format( key, sk, ak)) mark -= 1 continue for pts in ak: if not asst2.isclose(stu[pts], ans[pts]): print("probability mismatch for table {}, score {}:" \ " {} vs. {}".format(key, pts, stu[pts], ans[pts])) mark -= 1 break conn.send(int(mark))
def check_dealer(conn, verbose): result, refobj = asst2.load_result('dealer') mark = total for key in _DEALER_CODE: if mark <= 0: print("too many errors. exiting.") mark = 0 break if key not in result: print("missing table for {}".format(key)) mark -= 1 continue stu = result[key] ans = refobj[key] sk = sorted(stu.keys()) ak = sorted(ans.keys()) pairs = zip(ak, sk) ski = list(map(int, sk)) if ski != ak: print("key set mismatch for table {}: {} vs. {}".format( key, ski, ak)) mark -= 1 continue for ap, sp in pairs: if not asst2.isclose(stu[sp], ans[ap]): print("probability mismatch for table {}, score {}:" \ " {} vs. {}".format(key, ap, stu[sp], ans[ap])) mark -= 1 break conn.send(int(mark))
def check_advantage(conn, verbose): result, refobj = asst2.load_result('advantage') diff = abs(refobj - result) if asst2.isclose(diff, 0): conn.send(total) return if diff < cutoff: if verbose: print("Almost correct player advantage.") mark = int(total * (cutoff - diff) / cutoff) else: if verbose: print("Incorrect player advantage.") mark = 0 conn.send(mark)
def check_hit(conn, verbose): result, refobj = asst2.load_result('hit') val = asst2.similarity(result, refobj, verbose) conn.send(total * val**2)
def check_strategy(conn, verbose): result, refobj = asst2.load_result('strategy') val = asst2.similarity(result, refobj, verbose) conn.send(total * val**2)