Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
AndrewVSutherland
GitHub Repository: AndrewVSutherland/lmfdb
Path: blob/main/scripts/belyi/format_plane_model.py
1127 views
1
from sage.all import PolynomialRing, NumberField, QQ, gcd, latex, factor
2
3
import re
4
RE_EXP = r"\^(\d+)"
5
6
def bracket_me(m):
7
return "^{%s}" % (m.group(0)).split("^")[1]
8
9
def fix_brackets(rec):
10
if rec.get('plane_model_latex'):
11
latex = rec['plane_model_latex']
12
latex = re.sub(RE_EXP, bracket_me,latex)
13
rec['plane_model_latex'] = latex
14
return rec
15
16
def plane_map_constant(rec):
17
R = PolynomialRing(QQ, 'x')
18
K = NumberField(R(rec['base_field']), 'nu')
19
if rec.get('plane_constant'):
20
a = K(rec['plane_constant'])
21
rec['plane_map_constant'] = 1/a
22
return rec
23
24
def plane_map_constant_factored(rec):
25
R = PolynomialRing(QQ, 'x')
26
K = NumberField(R(rec['base_field']), 'nu')
27
if rec.get('plane_constant'):
28
a = K(rec['plane_constant'])
29
a = 1/a
30
if a == 1:
31
rec['plane_map_constant_factored'] = ''
32
else:
33
d = a.denominator()
34
num = a*d
35
num_list = num.list()
36
n = gcd(num_list)
37
num_list = [el/n for el in num_list]
38
poly = K(num_list)
39
# now LaTeX everything
40
s = ''
41
if a in QQ:
42
s = '-' if a.sign()==-1 else '' # if a in QQ, keep track of sign
43
poly_lat = ''
44
else:
45
if ("+" in str(poly)) or ("-" in str(poly)):
46
poly_lat = "(%s)" % latex(poly)
47
else:
48
poly_lat = latex(poly)
49
if d == 1:
50
rec['plane_map_constant_factored'] = "%s" % (latex(factor(n))+poly_lat)
51
else:
52
rec['plane_map_constant_factored'] = r"%s\frac{%s}{%s}%s" % (s,latex(factor(n)), latex(factor(d)), poly_lat)
53
return rec
54
55
def pretty_print_factor(f):
56
d = f.denominator()
57
if d == 1:
58
return (f.factor())
59
else:
60
n = f.numerator().factor()
61
return ('({})/({})'.format(n, d.factor()))
62
63