[GiNaC-devel] Add method ex::symbols for obtaining all symbols appearing in an expression

Alexei Sheplyakov alexei.sheplyakov at gmail.com
Mon Aug 13 08:55:05 CEST 2012


Hello,

On Mon, Aug 13, 2012 at 01:19:22AM +0200, Timo Kluck wrote:

> One of those methods is variables(), which returns a list of symbols
> appearing in the expression. It does so by recursively walking down
> the expression tree. At one point, that was a bottle neck in my
> algorithm, and I realized that it would be very easy to cache those
> variables at construction time from the subexpressions.
> 
> I think the natural place to implement such a thing would be in GiNaC
> itself, so that everyone (not only sage users) may benefit.

I don't think it's a good idea. This adds quite a non-negligible overhead
to every eval() and expression construction, even if the actual calculation
does not need the variables() (symbols(), or whatever it is).

Besides I don't think caching really helps. Consider the following code:

symbol x, y;
ex e = x + y;
ex g = x - y;
ex e_plus_g = e + g;

One would expect e_plus_g.symbols() to return just x, that means symbols()
needs to scan the whole e_plus_g expression (to find out that it doesn't
contain y), which makes the cache kind of useless.

Best regards,
	Alexei



More information about the GiNaC-devel mailing list