1686
Comment:

← Revision 3 as of 20081114 13:42:07 ⇥
1686
converted to 1.6 markup

No differences found! 
Things to improve:
 pattern matching
 subexpression substitution
 unifying and especially simplify the way to check the type of an
 expression. Now you need to do this ugly switch:
def _is(e, what):
 import operator if what == "Mul":
return isinstance(e, sage.calculus.calculus.SymbolicArithmetic) and \
 e._operator == operator.mul
return isinstance(e, sage.calculus.calculus.SymbolicArithmetic) and \
 e._operator == operator.add
return isinstance(e, sage.calculus.calculus.SymbolicArithmetic) and \
 e._operator == operator.pow
return isinstance(e, sage.calculus.calculus.SymbolicArithmetic) and \
 e._operator == operator.div
return isinstance(e, sage.calculus.calculus.SymbolicComposition) and \
 bool(e._operands[0] == sage.all.log)
return isinstance(e, sage.calculus.calculus.SymbolicComposition) and \
 bool(e._operands[0] == sage.all.exp)
return isinstance(e, sage.calculus.calculus.SymbolicComposition)
 return isinstance(e, sage.rings.rational.Rational)
return isinstance(e, sage.rings.real_mpfr.RealNumber)
 raise "Sorry, unknown 'class': %s" % what
Those are just things I discovered when trying to port the limits from SymPy to SAGE. Then there are other things, for example:
 working with unknown functions, expanding them in series, etc.
(there is some trac ticket for that already)