table.py

1.7 kB · python · 56 lines

1import os2import csv3import json4from .bang import bang56# MRLYTABLE78FIELDS = [9    "name", "i", "dimension", "genus", "degree", "anf",10    "level_set_S", "axis_pins", "canonical", "class_rep", "orbit_size", "parity_rule",11]1213def rows(dimension):14    u = bang(dimension)15    out = []16    for d in u.all():17        m = d.metadata()18        m["class_rep"] = f"mrly_{d.class_rep:0{len(str(u.total - 1))}d}"19        out.append(m)20    return out2122def write_json(dimension, directory):23    data = rows(dimension)24    path = os.path.join(directory, f"mrlytable_{dimension}d.json")25    with open(path, "w") as fh:26        json.dump(data, fh, indent=2)27    return path2829def write_csv(dimension, directory):30    data = rows(dimension)31    path = os.path.join(directory, f"mrlytable_{dimension}d.csv")32    with open(path, "w", newline="") as fh:33        writer = csv.writer(fh)34        writer.writerow(FIELDS)35        for m in data:36            writer.writerow([37                m["name"], m["i"], m["dimension"], m["genus"], m["degree"], m["anf"],38                "" if m["level_set_S"] is None else " ".join(map(str, m["level_set_S"])),39                "" if m["axis_pins"] is None else " ".join(map(str, m["axis_pins"])),40                int(bool(m["canonical"])), m["class_rep"], m["orbit_size"],41                ";".join("".join(map(str, c)) for c in m["parity_rule"]),42            ])43    return path4445def generate(directory):46    os.makedirs(directory, exist_ok=True)47    written = []48    for dimension in (1, 2, 3):49        written.append(write_json(dimension, directory))50        written.append(write_csv(dimension, directory))51    return written5253if __name__ == "__main__":54    here = os.path.join(os.path.dirname(__file__), "data")55    for p in generate(here):56        print("wrote", p)