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.


Reply via email to