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.