"""Solution for quant_practice.py."""


def ceiling(bandwidth_gbs, weights_gb):
    return bandwidth_gbs / weights_gb


def weights_gb(params_billion, bits, group=64):
    if bits == 16:
        return params_billion * 2
    return params_billion * (bits + 32 / group) / 8


def compare(gold, ref, new):
    out = {"ref_right": 0, "new_right": 0, "same": 0.0, "changed": 0, "r2w": 0, "w2r": 0, "w2w": 0}
    for g, r, n in zip(gold, ref, new):
        out["ref_right"] += r == g
        out["new_right"] += n == g
        if n == r:
            continue
        out["changed"] += 1
        if r == g:
            out["r2w"] += 1
        elif n == g:
            out["w2r"] += 1
        else:
            out["w2w"] += 1
    out["same"] = 1 - out["changed"] / len(gold)
    return out


def recall(answers, expected):
    return sum(a.strip().strip(".").lower() == e.lower() for a, e in zip(answers, expected))
