Path: blob/main/scripts/belyi/format_plane_model.py
1127 views
from sage.all import PolynomialRing, NumberField, QQ, gcd, latex, factor12import re3RE_EXP = r"\^(\d+)"45def bracket_me(m):6return "^{%s}" % (m.group(0)).split("^")[1]78def fix_brackets(rec):9if rec.get('plane_model_latex'):10latex = rec['plane_model_latex']11latex = re.sub(RE_EXP, bracket_me,latex)12rec['plane_model_latex'] = latex13return rec1415def plane_map_constant(rec):16R = PolynomialRing(QQ, 'x')17K = NumberField(R(rec['base_field']), 'nu')18if rec.get('plane_constant'):19a = K(rec['plane_constant'])20rec['plane_map_constant'] = 1/a21return rec2223def plane_map_constant_factored(rec):24R = PolynomialRing(QQ, 'x')25K = NumberField(R(rec['base_field']), 'nu')26if rec.get('plane_constant'):27a = K(rec['plane_constant'])28a = 1/a29if a == 1:30rec['plane_map_constant_factored'] = ''31else:32d = a.denominator()33num = a*d34num_list = num.list()35n = gcd(num_list)36num_list = [el/n for el in num_list]37poly = K(num_list)38# now LaTeX everything39s = ''40if a in QQ:41s = '-' if a.sign()==-1 else '' # if a in QQ, keep track of sign42poly_lat = ''43else:44if ("+" in str(poly)) or ("-" in str(poly)):45poly_lat = "(%s)" % latex(poly)46else:47poly_lat = latex(poly)48if d == 1:49rec['plane_map_constant_factored'] = "%s" % (latex(factor(n))+poly_lat)50else:51rec['plane_map_constant_factored'] = r"%s\frac{%s}{%s}%s" % (s,latex(factor(n)), latex(factor(d)), poly_lat)52return rec5354def pretty_print_factor(f):55d = f.denominator()56if d == 1:57return (f.factor())58else:59n = f.numerator().factor()60return ('({})/({})'.format(n, d.factor()))616263