def f(N,k,l,r):
"""
INPUT:
N -- positive integer
k -- even integer >= 2
l -- positive integer
r -- positive integer >= l
OUTPUT:
(N,k,l,r) -- level, weight, bounds on prime range
(t0,t1) -- cputime to load data from file, time to do actual calculation
list -- compact_system_of_eigenvalues with precision 10000
"""
out_name = 'data/gamma0-aplist-%s-%s-%s-%s.sobj'%(N,k,l,r)
if os.path.exists(out_name):
print "%s -- already done"%out_name
return
name = 'data/gamma0-%s-%s.sobj'%(N,k)
if not os.path.exists(name):
print "%s -- not yet done"%name
return
print "Now working on N=%s, k=%s for primes in [%s, %s)"%(N,k,l,r)
t = cputime()
data = load(name)
t1 = cputime(t)
assert data[0][0] == N
assert data[0][1] == k
M = data[2]
t2 = cputime(t1)
v = M.compact_newform_eigenvalues(prime_range(l,r),'a')
t3 = cputime(t2)
# Now M is "better" so we save it.
data = list(data)
data[1] = tuple(list(data[1]) + [t3])
save(tuple(data), name, compress=True)
ans = ( (N, k, l, r), (t1, t3), v )
save(ans, out_name, compress=True)
ModularSymbols_clear_cache()
return ans[0], ans[1]