On Thursday, August 8, 2013, Matthew Rocklin 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! >
If you figure out how to do something that's under-documented, please document it. Our code generation needs a lot more documentation, especially high-level narrative documentation. Aaron Meurer > -- > 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 sympy+unsubscr...@googlegroups.com <javascript:_e({}, 'cvml', > 'sympy%2bunsubscr...@googlegroups.com');>. > To post to this group, send email to sympy@googlegroups.com<javascript:_e({}, > 'cvml', 'sympy@googlegroups.com');> > . > Visit this group at http://groups.google.com/group/sympy. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- 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 sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at http://groups.google.com/group/sympy. For more options, visit https://groups.google.com/groups/opt_out.