mirror of
https://gitdl.cn/https://github.com/chakralinux/core.git
synced 2025-02-03 18:07:14 +08:00
89 lines
2.7 KiB
Python
89 lines
2.7 KiB
Python
#!/usr/bin/env python
|
|
|
|
import os
|
|
common_curves = os.path.join(os.getcwd(), 'src', 'common')
|
|
|
|
def install_cremona():
|
|
from sqlite3 import connect
|
|
|
|
if 'SAGE_SHARE' not in os.environ:
|
|
raise RuntimeError("SAGE_SHARE undefined, maybe run `sage -sh`?")
|
|
|
|
cremona_root = os.path.join(os.environ['SAGE_SHARE'], 'cremona')
|
|
if not os.path.exists(cremona_root):
|
|
os.makedirs(cremona_root)
|
|
|
|
target = os.path.join(cremona_root, 'cremona_mini.db')
|
|
|
|
if os.path.exists(target):
|
|
os.remove(target)
|
|
|
|
con = connect(target)
|
|
|
|
con.execute('CREATE TABLE t_class(rank INTEGER, class TEXT PRIMARY KEY,'
|
|
' conductor INTEGER)')
|
|
con.execute('CREATE TABLE t_curve(curve TEXT PRIMARY KEY, class TEXT, tors'
|
|
' INTEGER, eqn TEXT UNIQUE)')
|
|
con.execute('CREATE INDEX i_t_class_conductor ON t_class(conductor)')
|
|
con.execute('CREATE INDEX i_t_curve_class ON t_curve(class)')
|
|
|
|
class_data = []
|
|
curve_data = []
|
|
|
|
for line in open(os.path.join(common_curves, 'allcurves.00000-09999')):
|
|
N, iso, num, eqn, r, tors = line.split()
|
|
cls = N + iso
|
|
cur = cls + num
|
|
if num == "1":
|
|
class_data.append((N, cls, r))
|
|
curve_data.append((cur, cls, eqn, tors))
|
|
|
|
con.executemany('INSERT INTO t_class(conductor,class,rank) VALUES'
|
|
' (?,?,?)', class_data)
|
|
con.executemany('INSERT INTO t_curve(curve,class,eqn,tors) VALUES'
|
|
' (?,?,?,?)', curve_data)
|
|
|
|
con.commit()
|
|
|
|
def install_ellcurves():
|
|
import shutil, tempfile
|
|
|
|
if 'SAGE_SHARE' not in os.environ:
|
|
raise RuntimeError("SAGE_SHARE undefined, maybe run `sage -sh`?")
|
|
|
|
target = os.path.join(os.environ['SAGE_SHARE'], 'ellcurves')
|
|
if os.path.exists(target):
|
|
try:
|
|
shutil.rmtree(target)
|
|
except OSError:
|
|
os.remove(target)
|
|
|
|
shutil.move(os.path.join('src', 'ellcurves'), target)
|
|
rank = {}
|
|
for line in open(os.path.join(common_curves, 'allcurves.00000-09999')):
|
|
r = line.split()[4]
|
|
if r not in rank:
|
|
rank[r] = open(tempfile.mkstemp()[1], 'w')
|
|
rank[r].write(line)
|
|
|
|
for r, f in rank.items():
|
|
f.close()
|
|
endpath = os.path.join(target, 'rank' + r)
|
|
if os.path.exists(endpath):
|
|
old = tempfile.mkstemp()[1]
|
|
shutil.move(endpath, old)
|
|
shutil.move(f.name, endpath)
|
|
f = open(endpath, 'a')
|
|
tmp = open(old, 'r')
|
|
f.write(tmp.read())
|
|
tmp.close()
|
|
f.close()
|
|
os.remove(old)
|
|
else:
|
|
shutil.move(f.name, endpath)
|
|
os.chmod(endpath, 0o644)
|
|
|
|
if __name__ == '__main__':
|
|
install_cremona()
|
|
install_ellcurves()
|