PR for Theano-Piecewise https://github.com/sympy/sympy/pull/2366
On Thu, Aug 8, 2013 at 3:54 PM, Matthew Rocklin <[email protected]> wrote: > > It should be simple to translate SymPy.Piecewise to a recursive >>> Theano.switch (after translating SymPy.LT to theano.lt, etc.) I'll get >>> on this soon. Does this sound reasonable to you Fred? >>> >> >> It sound reasonable and is the first thing I suggest to try. >> > > Working on this now. > > > SymPy C Codegen and Theano >>> >>> @Fred, how hard would it be to leverage SymPy's C codegen in Theano? >>> This might be a lot cleaner than wrapping raw SymPy operations and might >>> substantially extend Theano's support of scalar expressions. Do you have a >>> performant Bessel function op? I'll bet SymPy could be made to do this >>> quite well. >>> >>> @Aaron / @Ondrej, if you're reading this thread could you point us to >>> the best place to start looking at C codegen in SymPy? Alternatively can >>> you point to an active community member who would be able to do so? >>> >>> >> @Matt, you already did a new Theano op with C code. I think it is the >> only "easy" way to wrap other people c code in Theano. If the person >> already know this C code AND a little of Python AND NumPy C-API, it isn't >> very hard to a new Theano op with C code. Otherwise, doing the first such >> op ask to learn a few think and could ask a few days. You already did this, >> so you have a good idea of the work it need. >> >> Now the questions is how is done the SymPy code gen? Is just just string >> template that is filled with dtype and other stuff? If we can just call one >> SymPy function with the information of what we want and it return a string >> with the C code it could be relatively easy. The only questions is about >> how to handle the variable name to pass the information around. At worst, >> we wrap the sympy c code in a c function, then make a small wrapper c code >> that take the Theano c variable name and call this function. So not very >> hard as Theano provide what is needed. >> > > It looks like codegen is the relevant high-level api call > > In [1]: from sympy.utilities.codegen import > > In [2]: expr = sin(x)**2 > > In [3]: [(c_name, c_code), (h_name, c_header)] = codegen(("f", expr), 'C', > 'test', header=False) > > In [4]: print c_code > #include "test.h" > #include <math.h> > > double f(double x) { > > return pow(sin(x), 2); > > } > > The work I did rarely dealt with making and using functions. I'll go over > past work and see what I can do. Expect some calls for help though! > -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. For more options, visit https://groups.google.com/groups/opt_out.
