Hey Matt et al.,
Between the responses (and code updates) from Fred, Jason and yourself, all 
of my present questions have been answered. Now I just need to get more 
familiar with Theano. I was quick to assume that I would understand all of 
the printer code, but at least now it is all beginning to make sense. Thank 
you all for all of your help.

I'm not sure I fully understand this piece.  Is it possible to define your 
interpolation scheme with lower-level operators such as with Piecewise and 
polynomials?  What is your interpolation scheme? 

In most cases, the interpolated functions that we have are pre-computed 
convolutions of an arbitrary energy distribution function (analytic) and 
cross section (experimental/simulation data defined). In principle we could 
try and do some type of a polynomial fit, but our focus has been continuity 
of the ODE system and system Jacobian, so we have been using splrep and 
splrev from scipy.interpolate (also to avoid oscillations around the 
infection points of each reaction rate). Once we are integrating the ODE 
system, the source data for the interpolations is non-changing, so perhaps 
our choice of python splines is not very efficient. My mention of 
interpolating the piecewise functions was with regards to forcing 
continuity of the piecewise derivative at a transition point.
I am completely humbled by the amount of information provided in this 
topic, thank you again.
Cheers,
Guy

On Friday, August 9, 2013 1:48:09 PM UTC-4, Matthew wrote:
>
> Hi Guy,  
>
> Thanks again for raising these issues.  This is the status as I see it
>
> Presently I am trying to use the mapping between Theano and SymPy 
>> (sympy.printing.theanocode theano_function) to make my callable functions 
>> and take advantage of the optimization routines. I have two major problems 
>> and a few questions:
>>
>> 1st major problem: Though piecewise functions exist in SymPy 
>> (sympy.functions.elementary.piecewise) there is no counterpart in Theano. 
>> Looking at the source of the inspiration for theanocode (
>> https://github.com/nouiz/theano_sympy/    graph_translation.py) I see 
>> that some of the SymPy equivalents were defined as lambda functions. Is 
>> there an equivalent way to add Theano conditional expressions wrapped into 
>> a function to add to the mapping dictionary in theanocode.py?
>>
>
> This is in https://github.com/sympy/sympy/pull/2366 and should hopefully 
> soon be merged.
>  
>
>> 2nd major problem: Similar to the problem above in that I am not sure 
>> that the Theano counterpart is; some of the terms that I use are 
>> interpolated functions (with one ODE variable as input) that we have 
>> wrapped symbolically while providing a numerical implementation (so that 
>> symbolic derivatives can be made, resulting in their own interpolations). 
>> Is it possible to recreate the interpolation function as a Theano operation 
>> for use within the system of ODEs? 
>>
>
> I'm not sure I fully understand this piece.  Is it possible to define your 
> interpolation scheme with lower-level operators such as with Piecewise and 
> polynomials?  What is your interpolation scheme? 
>
> Remain questions:
>> I presently have to flatten my input to theano_function to a list of 
>> expressions and then wrap to return to a form (Jacobian is a matrix not a 
>> vector); is it possible to have a matrix of different expressions as an 
>> input to theano_function with a vector output?
>>
>
> Jason answered this I think.  In the dev version theano_function should be 
> able to take SymPy matrices as inputs.  See the description of this PR for 
> an example https://github.com/sympy/sympy/pull/2013
>
> I know that a huge amount of Theano speed up is due to parallelization of 
>> matrix operations (which I do not have), should I be focusing on SymPy 
>> Autowrap/Ufuncify or my own code generation instead of trying to get Theano 
>> to play nicely?
>>
>
> I find your engagement of the SymPy-Theano connection valuable and am 
> happy to support it.  I think you'll find autowrap/ufuncify possibly more 
> mature but less well supported.
>  
>
>> Stupid questions:
>> Does sympy.printing.theanocode.theano_function automatically optimize the 
>> compiled graph?
>>
>
> Answered: yes
>  
>
>> Minor comment:
>> Perhaps unnecessary for most uses of the theano_function, but I needed to 
>> modify function inputs so as to be able to use the keyword argument 
>> 'on_unused_input=ignore' as opposed to 'raise' so that I did not need to 
>> have all symbols in all equations. This may be avoided by having the unused 
>> symbols somehow (I don't know how) included in each expression.
>>
>
> Answered: In PR https://github.com/sympy/sympy/pull/2358
>
> > With regards to using an externally defined theano graph or op (theano 
> wrapped sympy implementation), how would one  pass them to theano_function? 
> It feels as though it would be analogous to the autowrap helpers argument, 
> or would this be an issue of merging graphs before calling theano.function? 
> If I can understand this step, I feel as though both of my problems would 
> be solvable (a wrapping of a piecewise along with a wrapping of an 
> interpolated function)
>
> Answered: use theano_code
>
> > With the example above of having an implemented function in some 
> expression in sympy, assuming one can write the c-code equivalent, how 
> would one link the c-code to the codegen process as opposed to having 
> codegen generate it?
>
> I don't think we can do this.  If you have C implementations of operations 
> within SymPy that aren't yet supported we'd love help with this.  See 
> https://github.com/sympy/sympy/pull/2369
>
> In general let us know how you're doing with this project and what is 
> keeping you from making progress.
>
> -Matt
>

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


Reply via email to