The fact that you have to declare every single variable makes it a non-starter for me. In Mathematica, I have written calculations that involve dozens of variables. In sympy that will be very annoying.
You can start a REPL with `isympy -I`, which is an IPython REPL but with some preprocessing magic that wraps any unknown variable into a sympy symbol and any integer into a sympy integer, which makes it closer to Mathematica: In [1]: 22/7*foobar Out[1]: 22⋅fo̅o ────── 7
In [1]: (foo + 1) ** 7
Out[1]:
7
(foo + 1)
In [2]: expand(_)
Out[2]:
7 6 5 4 3 2
foo + 7⋅foo + 21⋅foo + 35⋅foo + 35⋅foo + 21⋅foo + 7⋅foo + 1
In [3]: diff(_)
Out[3]:
6 5 4 3 2
7⋅foo + 42⋅foo + 105⋅foo + 140⋅foo + 105⋅foo + 42⋅foo + 7
In [4]: expand((cats+dogs)**5)
Out[4]:
5 4 3 2 2 3 4 5
cats + 5⋅cats ⋅dogs + 10⋅cats ⋅dogs + 10⋅cats ⋅dogs + 5⋅cats⋅dogs + dogs
In [5]: hip + hip + hooray
Out[5]: 2⋅hip + hooray