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)