core/sage-data-elliptic_curves/spkg-install
2015-04-13 07:59:57 +00:00

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()