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