예제 #1
0
def _colspec_cols(colspec, parse_cache):
    try:
        return parse_cache[colspec]
    except KeyError:
        try:
            cols = query.parse_colspec(colspec).cols
        except query.ParseError as e:
            log.warning("error parsing %r: %s", colspec, e)
            cols = []
        parse_cache[colspec] = cols
        return cols
예제 #2
0
def _init_objective(batch):
    negate, colspec = _objective_colspec(batch)
    try:
        cols = query.parse_colspec(colspec).cols
    except query.ParseError as e:
        raise batch_util.BatchError("cannot parse objective %r: %s" % (colspec, e))
    else:
        if len(cols) > 1:
            raise batch_util.BatchError(
                "invalid objective %r: only one column may " "be specified" % colspec
            )
        return negate, cols[0]
예제 #3
0
def _ipy_objective(minimize, maximize):
    colspec, negate = _ipy_objective_colspec(minimize, maximize)
    try:
        cols = qparse.parse_colspec(colspec).cols
    except qparse.ParseError as e:
        raise ValueError("cannot parse objective %r: %s" % (colspec, e))
    else:
        if len(cols) > 1:
            raise ValueError("invalid objective %r: only one column may "
                             "be specified" % colspec)
        scalar = cols[0]
        prefix, tag = scalar.split_key()
        return (prefix, tag, scalar.qualifier), negate
예제 #4
0
def _run_compare_metrics(run):
    compare_specs = run_util.latest_compare(run)
    if not compare_specs:
        return None
    metrics = set()
    for spec in compare_specs:
        try:
            select = query.parse_colspec(spec)
        except query.ParseError:
            pass
        else:
            metrics.update([col.key for col in select.cols if _is_last_scalar(col)])
    return metrics
예제 #5
0
def _run_scalar_args_for_select(scalar_spec):
    from guild import query

    try:
        cols = query.parse_colspec(scalar_spec).cols
    except query.ParseError as e:
        cli.error("invalid scalar '%s': %s" % (scalar_spec, e))
    else:
        assert cols, scalar_spec
        if len(cols) > 1:
            cli.error("invalid scalar '%s': multiple scalars not supported" %
                      scalar_spec)
        col = cols[0]
        # 'header', 'key', 'named_as', 'qualifier', 'split_key', 'step'
        if col.named_as:
            log.warning("ignoring 'as %s' in scalar", col.named_as)
        prefix, tag = col.split_key()
        return prefix, tag, col.qualifier, col.step
예제 #6
0
def _objective_y_info(batch_run):
    objective = batch_run.get("objective") or DEFAULT_OBJECTIVE
    if objective[0] == "-":
        objective = objective[1:]
        y_negate = -1
    else:
        y_negate = 1
    try:
        colspec = qparse.parse_colspec(objective)
    except qparse.ParseError as e:
        raise InvalidObjective("invalid objective %r: %s" % (objective, e))
    else:
        if len(colspec.cols) > 1:
            raise InvalidObjective("invalid objective %r: too many columns" %
                                   objective)
        col = colspec.cols[0]
        prefix, key = col.split_key()
        y_scalar_col = (prefix, key, col.qualifier)
        return y_scalar_col, y_negate