Yeah, in the PR Aaron pointed out there is some code profiling I pastebin'd
in the comments.
I haven't gotten around to implementing the expand functionality yet - I
still had some questions for you Aaron. When you sugessted we promote
_expand_hint() to a user-level function, what did you mean by that (other
than removing the leading _)? Would there be any other changes to that
method?

Also, is there any problem with putting @cacheit before many of the
Derviative methods, including __new__()? I did so, and it made the
linearization code run in 40% of the original time, and the tests seem to
still pass... Is there a reason cacheing isn't used more frequently?

-Gilbert


On Tue, Aug 6, 2013 at 8:59 PM, Aaron Meurer <[email protected]> wrote:

> I suggested an idea of how to make diff, and in fact a very large
> class of functions, including expand(), much faster at
> https://github.com/sympy/sympy/pull/2182#issuecomment-19654806.
> Basically, you can play around with using cse() or caching internal
> operations, since functions like diff() are pure in the functional
> programming sense (the same input always produces the same output with
> no side-effects), so the implementation can choose to compute
> different sub-operations only once. We can also be smarter than any
> functional language would ever be by using mathematical facts that we
> know as well.
>
> Aaron Meurer
>
> On Tue, Aug 6, 2013 at 9:09 PM, Dale Lukas Peterson
> <[email protected]> wrote:
> >> https://gist.github.com/certik/6170161
> >>
> >> It has over 80,000 operations. Now, what exact operation are we doing
> with this?
> >> I've been trying to understand the code of KM.linearize(), but it's
> >> not clear to me.
> >
> > linearize() was our initial implementation of the work we began in
> > 2011 during Gilbert's GSoC and has since been refined (the derivation,
> > that is) in a paper we just submitted our first batch of revisions to
> > the Journal of Multibody System Dynamics [0]. This method (and the
> > whole class, really), needs an overhaul of it's implementation.
> > Gilbert and I have talked about doing it but haven't, yet. Since the
> > expressions tend to be quite long, I think we might need to be think
> > carefully if we are accidentally creating expensive copies of things,
> > there is a good article on this on the Theano website [1]. This might
> > not be the problem at all, it is just something I read recently that
> > seemed relevant.  I haven't done any profiling myself.
> >
> >> I assume you need to take a derivative with respect to "t"? What else?
> >
> > Actually not 't'. If I recall correctly, we are taking derivatives
> > with respect to 1) coordinates, 2) coordinate time derivatives, 3)
> > generalized speeds, 4) generalized speed time derivatives.
> >
> >> Are we multiplying this with some other expression of similar size?
> >> I would like to create a real life benchmark out of this, of your real
> >> expression + an operation that needs to be done and is slow. So that I
> >> can try for example Mathematica or some other CAS to get an idea about
> >> how fast one can get. As such, I want just some simple calculus
> >> operation, like second derivative or something else that is
> >> representative.
> >
> > There are some Matrix products that occur, and their might be a
> > dubious use of inv() or solve() that is causing problems. Beside those
> > two, the only other thing that I can think might be the bottleneck is
> > .subs(), I don't think we use much else in linearize().
> >
> > [0] -- https://github.com/hazelnusse/SympyMechanicsPaper
> > [1] --
> http://deeplearning.net/software/theano/tutorial/python-memory-management.html#python-memory-management
> >
> >>
> >> Thanks a lot,
> >> Ondrej
> >>
> >
> >> P.S. I recently revived a C++ core (https://github.com/certik/csympy),
> >> and I want to benchmark it on something real life, as opposed to
> >> artificial benchmarks.
> >
> > Another piece of code you can try is:
> >
> https://github.com/hazelnusse/bicycle.model/blob/master/derivation/derivation.py
> >
> > If you do use it in the benchmark, ignore anything after line 555,
> > that would be testing some of my own wrapping of sympy's ccode
> > functionality. The resulting generated C++ file (class implementation
> > file) is:
> >
> >
> https://github.com/hazelnusse/bicycle.model/blob/master/src/bicycle_generated.cc
> >
> > which, as you can see, is a big mess, and that is with the equations
> > "modularized" in to sub-pieces, and using the cse() functionality to
> > simplify the output. If you try to compute expressions with everything
> > together, it gets worse than that, and there are serious bottlenecks
> > in cse().  If you run the script as is, you'll see those show up after
> > line 555.
> >
> > Thanks for looking into this! I'm much more comfortable with C++ than
> > I was 4 years ago, so maybe I can help out with csympy somehow.
> >
> > Luke
> >
> >
> >
> >
> >
> >
> >>
> >> --
> >> 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.
> >>
> >>
> >
> >
> >
> > --
> > "People call me a perfectionist, but I'm not. I'm a rightist. I do
> > something until it's right, and then I move on to the next thing."
> > -- James Cameron
> >
> > --
> > 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.
> >
> >
>
> --
> 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.
>
>
>

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