On Mon, Aug 4, 2014 at 12:08 PM, Kevin Buzzard
<kevin.m.buzz...@gmail.com> wrote:
> 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 :-)

I discovered the programming language Python around then in order to
script running lots of Magma calculations on MECCAH (=mathematics
extreme computation cluster at Harvard).

By the way, there's another thread today on sage-support also about
@parallel, which you might want to read.

>
> 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>
>> 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.



-- 
William Stein
Professor of Mathematics
University of Washington
http://wstein.org
wst...@uw.edu

-- 
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.

Reply via email to