Ok, thanks :)

On Fri, Jul 12, 2013 at 8:36 PM, Ondřej Čertík <[email protected]> wrote:
> Hi Cristóvão,
>
> Excellent. Let us know if you need help with submitting a PR.
>
> Ondrej
>
> On Fri, Jul 12, 2013 at 1:32 PM, Cristóvão Sousa <[email protected]> wrote:
>> Ok, I've added CSE of Add and Mul arguments (only commutative terms):
>> http://nbviewer.ipython.org/5986996
>>
>> It runs faster compared to current sympy.cse, even more if applying it to
>> large expressions.
>> However, it still lacks a lot of features, which I'll try to address using
>> sympy.cse unit tests.
>>
>>
>> On Wednesday, July 3, 2013 2:52:13 PM UTC+1, Cristóvão Sousa wrote:
>>>
>>> Forwarded from PyDy mailing list,
>>> https://groups.google.com/forum/#!topic/pydy/PjZ9SP8PYDA .
>>>
>>>
>>>
>>> Hi,
>>>
>>> I'm posting here because of one of GSoC 2013 ideas, "Efficient Code
>>> Generation".
>>>
>>> You stated that "Common subexpression elimination (cse) takes a long time
>>> (>1 hour) to run on systems of equations that are derived in a very short
>>> period of time (< 1 minute). This needs to be improved."
>>> [https://pydy.org/gsoc_2013_ideas#efficient_code_generation]
>>>
>>> Indeed, I've verified that myself on my work on SymPyBotics
>>> (https://github.com/cdsousa/sympybotics), a tool I'm developing to help me
>>> on my PhD studies.
>>> So, I've developed a kind of CSE, faster than SymPy CSE though less
>>> general and with some quirks.
>>> Such CSE functionality is implemented in SymCode package
>>> (https://github.com/cdsousa/symcode).
>>>
>>> Be aware that both SymPyBotics and SymCode are badly documented and
>>> probably reimplement some functionalities which could be taken from
>>> SymPy/PyDy (and I probably implement them in worse ways :)
>>>
>>> The cse core function is "fast_cse()" which can be found in
>>> symcode/subexprs.py
>>> (https://github.com/cdsousa/symcode/blob/master/symcode/subexprs.py.)
>>> (It uses Subexprs class, which can be used alone to store intermediate
>>> variables in recursive computations).
>>>
>>> I've profiled SymPy cse and noticed that the main time consumption is due
>>> to "count" and "subs" functions, so I tried a different approach.
>>> First, fast_cse function reversely parses the expression tree and recreate
>>> each unique operation with non-atom arguments substituted by temporary
>>> symbols (this is the "collect" phase).
>>> Each unique operation is stored on an "unique_op:tmp_symbol" dictionary.
>>> For example,
>>> a + b*c + cos(b*c)
>>> is transformed into
>>> t2
>>> while the dictionary holds
>>> a + t0 + t1 : t2
>>> cos(t0) : t1
>>> b * c : t0
>>> Additional, match of multiple argument Mul and Add operations is made, in
>>> a similar way to SymPy cse, although argument commutativity is always
>>> assumed.
>>> Then, in the "get" phase, the expression tree is recreated from the
>>> dictionary while temporary "used more than once" symbols are maintained.
>>> The example output will be
>>> ( [(t0, b*c)],  a + t0 + cos(t0) )
>>> This is much faster than SymPy CSE although output is generally different.
>>> Also, it still doesn't work with "iterable" arguments, and, as said,
>>> non-commutativity is not respected .
>>>
>>>
>>> I would love to have time to work on this, or to work on SymPy CSE
>>> optimization directly, but I'm currently in work overload.
>>> Nevertheless, I'm showing you this since some ideas can be useful.
>>>
>>> Best regards,
>>> Cristóvão Sousa
>>>
>> --
>> 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 a topic in the Google 
> Groups "sympy" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/sympy/mNsEVVLFVGU/unsubscribe.
> To unsubscribe from this group and all its topics, 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