Based on Chris's previous examples, it looks like you can just create
a numbered_symbols generator from the start and pass that in each
time. Because it is a generator, it will keep track of the symbols
count as long as you use the same object.

Aaron Meurer

On Thu, Apr 19, 2012 at 2:49 AM, vweber <valerywe...@hotmail.com> wrote:
> Here is what I am trying to do, with the hack for the symbols
>
> sym = 'r'+sym
> cse( ..., symbols=symbols(sym+'1:1000') )
>
> so is there a way to replace that with something like this
>
> cse( ..., symbols=symbols(previous_last_symbol+1) )
> previous_last_symbol = current_last_symbol
>
>
>>>>>
>
> def opt_eqs(eqs, max_iter=None, opt_all=None):
>    if max_iter == None: max_iter = 10
>    if opt_all == None: opt_all = True
>    eqs_opt = eqs
>    sub_opt = []
>    sym = ''
>    for i in range(max_iter):
>        sym = 'r'+sym
>        a1,b1 = cse( eqs_opt, symbols=symbols(sym+'1:1000') )
>        sub_new = sub_opt + a1
>        if opt_all:
>         eqs_new = [ Eq( eq[0], eq[1] ) for eq in a1 ] + b1
>         cnt_new = count_ops(eqs_new,visual=False)
>         cnt_opt = count_ops(eqs_opt,visual=False)
>        else:
>         eqs_new = b1
>         cnt_new = count_ops(eqs_new,visual=False) +
> count_ops(sub_new,visual=False)
>         cnt_opt = count_ops(eqs_opt,visual=False) +
> count_ops(sub_opt,visual=False)
>        print cnt_new, cnt_opt
>        if cnt_new >= cnt_opt:
>            break
>        else:
>            sub_opt = sub_new
>            eqs_opt = eqs_new
>    if opt_all:
>        return eqs_opt
>    else:
>        return [ Eq( eq[0], eq[1] ) for eq in sub_opt ] + eqs_opt
>
>
>
>
>
>
>
> On Apr 18, 6:42 pm, Chris Smith <smi...@gmail.com> wrote:
>> On Wed, Apr 18, 2012 at 2:28 PM, vweber <valerywe...@hotmail.com> wrote:
>> > Dear All
>>
>> > When calling recursively cse, is it possible to tell cse what was the
>> > previous last symbols+1, eg
>>
>> It shouldn't need to be called recursively. But can you give an
>> example (using my cse branch)? Otherwise, if you are just adding new
>> expressions and you want the cse of them using replacements already
>> identified then you can apply the substitutions before running cse on
>> them. But don't forget to use a new set of symbols or else there will
>> be clashes since the default symbols (x0, x1,...) will be used again.
>>
>> >>> cse(cos(x+1)+sin(x+1))
>>
>> ([(x0, x + 1)], [sin(x0) + cos(x0)])>>> r,e=_
>> >>> newe=[tan(x+1), x + 1 + y, sin(y + x+1)/(y+x+1)]
>> >>> revr = [(v, k) for k, v in reversed(r)]
>> >>> syms = numbered_symbols('y')
>> >>> cse([ei.subs(revr) for ei in newe], syms)
>>
>> ([(y0, x0 + y)], [tan(x0), y0, sin(y0)/y0])
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sympy" group.
> To post to this group, send email to sympy@googlegroups.com.
> To unsubscribe from this group, send email to 
> sympy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sympy?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to sympy@googlegroups.com.
To unsubscribe from this group, send email to 
sympy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to