Yeah, it looks good. I've totally been needing this for some work I'm doing
too. The fact that mechanics expressions are a small subset of sympy
expressions is a good reason to optimize stuff like this.

In the docstring 3.) trig_funcs aren't the only type of functions. I think
you will need to assume that any function (standard sympy ones or custom
funcs) can be present in expressions. Just something to keep in mind.


Jason
moorepants.info
+01 530-601-9791


On Wed, Jul 2, 2014 at 11:55 PM, Aaron Meurer <asmeu...@gmail.com> wrote:

> I think it looks good. You can probably can probably do better by
> creating a generator comprehension rather than creating and indexing
> into a list (and it's also more pythonic).  crawl() is a pretty common
> pattern. I'm sure you could find an existing version in the SymPy code
> already.
>
> Also, at line 54, you don't need to assign to val. Just return
> sub_dict[expr].
>
> At line 56, I think what you really want is "if not expr.args". There
> are more types of expressions without args than just Symbol and
> Number.
>
> The important thing is to avoid walking the expression tree multiple
> times. Ideally, you would walk it only once. I think you are here.
>
> Aaron Meurer
>
> On Wed, Jul 2, 2014 at 9:10 PM, James Crist <crist...@umn.edu> wrote:
> > I wrote this up today. In physics.mechanics we often have to sub symbols
> for
> > values (or a smaller subset of symbols, i.e. the "operating point"). For
> the
> > huge expressions generated, `subs` is extremely slow. Also, it subs
> inside
> > derivatives, which is not ideal (we are currently using a hacky
> > work-around). It also seems to be overkill for what's needed. More
> details
> > are in the docstring of the attached gist.
> >
> > https://gist.github.com/jcrist/8ce1a79dfe0b42723550
> >
> > I'd like some serious code design review of this. Is what I'm doing
> (direct
> > naive replacement) bad? Is there a better way, that doesn't sacrifice
> speed?
> > Note that for expressions of this size, xreplace, replace, and subs all
> > perform equally poorly.
> >
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "PyDy" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to pydy+unsubscr...@googlegroups.com.
> > To post to this group, send email to p...@googlegroups.com.
> > Visit this group at http://groups.google.com/group/pydy.
> > For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google Groups
> "PyDy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to pydy+unsubscr...@googlegroups.com.
> To post to this group, send email to p...@googlegroups.com.
> Visit this group at http://groups.google.com/group/pydy.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAP7f1Ait5eoK7EjxQSGDtBECEeguzUTht64yA8jtFTRBZ0gT%2Bw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to