Exemplo n.º 1
0
 def purge_run(self, run):
   # Remove bad tasks
   purged = False
   chi2 = calculate_residuals(run)
   if 'bad_tasks' not in run:
     run['bad_tasks'] = []
   for task in run['tasks']:
     if task['worker_key'] in chi2['bad_users']:
       purged = True
       task['bad'] = True
       run['bad_tasks'].append(task)
       run['tasks'].remove(task)
   if purged:
     # Generate new tasks if needed
     run['results_stale'] = True
     results = self.get_results(run)
     played_games = results['wins'] + results['losses'] + results['draws']
     if played_games < run['args']['num_games']:
       run['tasks'] += self.generate_tasks(
           run['args']['num_games'] - played_games)
     run['finished'] = False
     if 'sprt' in run['args'] and 'state' in run['args']['sprt']:
       fishtest.stats.stat_util.update_SPRT(results, run['args']['sprt'])
       run['args']['sprt']['state'] = ''
     self.buffer(run, True)
   return purged
Exemplo n.º 2
0
 def purge_run(self, run):
     # Remove bad tasks
     purged = False
     chi2 = calculate_residuals(run)
     if "bad_tasks" not in run:
         run["bad_tasks"] = []
     for task in run["tasks"]:
         if task["worker_key"] in chi2["bad_users"]:
             purged = True
             task["bad"] = True
             run["bad_tasks"].append(task)
             run["tasks"].remove(task)
     if purged:
         # Generate new tasks if needed
         run["results_stale"] = True
         results = self.get_results(run)
         played_games = results["wins"] + results["losses"] + results["draws"]
         if played_games < run["args"]["num_games"]:
             run["tasks"] += self.generate_tasks(
                 run["args"]["num_games"] - played_games
             )
         run["finished"] = False
         if "sprt" in run["args"] and "state" in run["args"]["sprt"]:
             fishtest.stats.stat_util.update_SPRT(results, run["args"]["sprt"])
             run["args"]["sprt"]["state"] = ""
         self.buffer(run, True)
     return purged
Exemplo n.º 3
0
def tests_view(request):
    run = request.rundb.get_run(request.matchdict['id'])
    if run is None:
        raise exception_response(404)
    results = request.rundb.get_results(run)
    run['results_info'] = format_results(results, run)
    run_args = [('id', str(run['_id']), '')]

    for name in [
            'new_tag', 'new_signature', 'new_options', 'resolved_new',
            'base_tag', 'base_signature', 'base_options', 'resolved_base',
            'sprt', 'num_games', 'spsa', 'tc', 'threads', 'book', 'book_depth',
            'auto_purge', 'priority', 'itp', 'username', 'tests_repo', 'info'
    ]:

        if name not in run['args']:
            continue

        value = run['args'][name]
        url = ''

        if name == 'new_tag' and 'msg_new' in run['args']:
            value += '  (' + run['args']['msg_new'][:50] + ')'

        if name == 'base_tag' and 'msg_base' in run['args']:
            value += '  (' + run['args']['msg_base'][:50] + ')'

        if name == 'sprt' and value != '-':
            value = 'elo0: %.2f alpha: %.2f elo1: %.2f beta: %.2f state: %s (%s)' % \
                    (value['elo0'], value['alpha'], value['elo1'], value['beta'],
                     value.get('state', '-'), value.get('elo_model', 'BayesElo'))

        if name == 'spsa' and value != '-':
            iter_local = value['iter'] + 1  # assume at least one completed,
            # and avoid division by zero
            A = value['A']
            alpha = value['alpha']
            gamma = value['gamma']
            summary = 'Iter: %d, A: %d, alpha %0.3f, gamma %0.3f, clipping %s, rounding %s' \
                    % (iter_local, A, alpha, gamma,
                       value['clipping'] if 'clipping' in value else 'old',
                       value['rounding'] if 'rounding' in value else 'deterministic')
            params = value['params']
            value = [summary]
            for p in params:
                value.append([
                    p['name'], '{:.2f}'.format(p['theta']),
                    int(p['start']),
                    int(p['min']),
                    int(p['max']),
                    '{:.3f}'.format(p['c'] / (iter_local**gamma)),
                    '{:.3f}'.format(p['a'] / (A + iter_local)**alpha)
                ])
        if 'tests_repo' in run['args']:
            if name == 'new_tag':
                url = run['args']['tests_repo'] + '/commit/' + run['args'][
                    'resolved_new']
            elif name == 'base_tag':
                url = run['args']['tests_repo'] + '/commit/' + run['args'][
                    'resolved_base']
            elif name == 'tests_repo':
                url = value

        if name == 'spsa':
            run_args.append(('spsa', value, ''))
        else:
            try:
                strval = str(value)
            except:
                strval = value.encode('ascii', 'replace')
            strval = html.escape(strval)
            run_args.append((name, strval, url))

    active = 0
    cores = 0
    for task in run['tasks']:
        if task['active']:
            active += 1
            cores += task['worker_info']['concurrency']
        last_updated = task.get('last_updated', datetime.datetime.min)
        task['last_updated'] = last_updated

    if run['args'].get('sprt'):
        page_title = 'SPRT {} vs {}'.format(run['args']['new_tag'],
                                            run['args']['base_tag'])
    elif run['args'].get('spsa'):
        page_title = 'SPSA {}'.format(run['args']['new_tag'])
    else:
        page_title = '{} games - {} vs {}'.format(run['args']['num_games'],
                                                  run['args']['new_tag'],
                                                  run['args']['base_tag'])
    return {
        'run':
        run,
        'run_args':
        run_args,
        'page_title':
        page_title,
        'approver':
        has_permission('approve_run', request.context, request),
        'chi2':
        calculate_residuals(run),
        'totals':
        '(%s active worker%s with %s core%s)' %
        (active, ('s' if active != 1 else ''), cores,
         ('s' if cores != 1 else ''))
    }
Exemplo n.º 4
0
def tests_view(request):
    run = request.rundb.get_run(request.matchdict["id"])
    if run is None:
        raise exception_response(404)
    results = request.rundb.get_results(run)
    run["results_info"] = format_results(results, run)
    run_args = [("id", str(run["_id"]), "")]
    if run.get("rescheduled_from"):
        run_args.append(("rescheduled_from", run["rescheduled_from"], ""))

    for name in [
            "new_tag",
            "new_signature",
            "new_options",
            "resolved_new",
            "new_net",
            "base_tag",
            "base_signature",
            "base_options",
            "resolved_base",
            "base_net",
            "sprt",
            "num_games",
            "spsa",
            "tc",
            "threads",
            "book",
            "book_depth",
            "auto_purge",
            "priority",
            "itp",
            "username",
            "tests_repo",
            "info",
    ]:

        if name not in run["args"]:
            continue

        value = run["args"][name]
        url = ""

        if name == "new_tag" and "msg_new" in run["args"]:
            value += "  (" + run["args"]["msg_new"][:50] + ")"

        if name == "base_tag" and "msg_base" in run["args"]:
            value += "  (" + run["args"]["msg_base"][:50] + ")"

        if name == "sprt" and value != "-":
            value = "elo0: %.2f alpha: %.2f elo1: %.2f beta: %.2f state: %s (%s)" % (
                value["elo0"],
                value["alpha"],
                value["elo1"],
                value["beta"],
                value.get("state", "-"),
                value.get("elo_model", "BayesElo"),
            )

        if name == "spsa" and value != "-":
            iter_local = value["iter"] + 1  # assume at least one completed,
            # and avoid division by zero
            A = value["A"]
            alpha = value["alpha"]
            gamma = value["gamma"]
            summary = (
                "Iter: %d, A: %d, alpha %0.3f, gamma %0.3f, clipping %s, rounding %s"
                % (
                    iter_local,
                    A,
                    alpha,
                    gamma,
                    value["clipping"] if "clipping" in value else "old",
                    value["rounding"]
                    if "rounding" in value else "deterministic",
                ))
            params = value["params"]
            value = [summary]
            for p in params:
                value.append([
                    p["name"],
                    "{:.2f}".format(p["theta"]),
                    int(p["start"]),
                    int(p["min"]),
                    int(p["max"]),
                    "{:.3f}".format(p["c"] / (iter_local**gamma)),
                    "{:.3f}".format(p["a"] / (A + iter_local)**alpha),
                ])
        if "tests_repo" in run["args"]:
            if name == "new_tag":
                url = (run["args"]["tests_repo"] + "/commit/" +
                       run["args"]["resolved_new"])
            elif name == "base_tag":
                url = (run["args"]["tests_repo"] + "/commit/" +
                       run["args"]["resolved_base"])
            elif name == "tests_repo":
                url = value

        if name == "spsa":
            run_args.append(("spsa", value, ""))
        else:
            try:
                strval = str(value)
            except:
                strval = value.encode("ascii", "replace")
            if name not in ["new_tag", "base_tag"]:
                strval = html.escape(strval)
            run_args.append((name, strval, url))

    active = 0
    cores = 0
    for task in run["tasks"]:
        if task["active"]:
            active += 1
            cores += task["worker_info"]["concurrency"]
        last_updated = task.get("last_updated", datetime.datetime.min)
        task["last_updated"] = last_updated

    if run["args"].get("sprt"):
        page_title = "SPRT {} vs {}".format(run["args"]["new_tag"],
                                            run["args"]["base_tag"])
    elif run["args"].get("spsa"):
        page_title = "SPSA {}".format(run["args"]["new_tag"])
    else:
        page_title = "{} games - {} vs {}".format(run["args"]["num_games"],
                                                  run["args"]["new_tag"],
                                                  run["args"]["base_tag"])
    return {
        "run":
        run,
        "run_args":
        run_args,
        "page_title":
        page_title,
        "approver":
        has_permission("approve_run", request.context, request),
        "chi2":
        calculate_residuals(run),
        "totals":
        "(%s active worker%s with %s core%s)" %
        (active, ("s" if active != 1 else ""), cores,
         ("s" if cores != 1 else "")),
    }