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)