Ooh I'm _really_ glad I asked now. Many thanks William. The first time I wanted such a loop, I was beta testing your magma modular symbols code in 2000 or so :-)
Kevin On Monday, 4 August 2014 15:01:05 UTC+1, William wrote: > > On Mon, Aug 4, 2014 at 5:11 AM, Kevin Buzzard <kevin.m...@gmail.com > <javascript:>> wrote: > > TL;DR: I am going to write a bash loop which loops through 1<=N<=10000 > and > > feeds the number N into a function in a sage session, one session per N. > Has > > anyone written a robust way of doing this already? > > Yes, I implemented a robust way to do this long ago. Use the @fork > decorator, and do *NOT* try to mutate a global variable in the > function you're calling -- this makes no sense because it happens in a > subprocess. > > @fork > def g(N): > f=ModularSymbols(N,2,1).cuspidal_subspace().hecke_ > operator(3).matrix().change_ring(GF(5)).charpoly('t') > print N,f; sys.stdout.flush() > return f > > N=Integer(1) > R.<t>=PolynomialRing(GF(5)) > charpolys=[] > while N<=10000: > charpolys.append(g(N)) > N += 1 > print get_memory_usage(), charpolys # for testing > > > If you want to do several in parallel, you can easily do that too as > follows. This will both completely eliminate memory leak issues, and > use all processors on your computer. > > @parallel > def g(N): > f=ModularSymbols(N,2,1).cuspidal_subspace().hecke_ > operator(3).matrix().change_ring(GF(5)).charpoly('t') > print N,f; sys.stdout.flush() > return f > > R.<t>=PolynomialRing(GF(5)) > charpolys={} > for x in g([1..10000]): > N = x[0][0][0] > charpolys[N] = x[1] > save(charpolys, 'charpolys.sobj') # saves all so far to a single > file -- load later with load('charpolys.sobj') > > > The save above will save the charpolys dict to disk each time you get > back another charpoly. > > Welcome to the modern world (though everything above just uses a few > Python functions from the late 1990s -- pickle and fork). Compared to > Magma, Sage is much, much better at this sort of stuff... > > -- William -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at http://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.