General remarks
Before giving several (biased) answers to the question
As a developer I'd like to ask if there any other significant advantages to Mathematica -
are there any areas where Mathematica is still vastly superior to the Python stack other than in computer algebra?
I would like to mention my Python background.
17 years ago I programmed in Python a little, now I do not. But many of the people I work with do.
I often support them with analysis, interfaces, and algorithms written in R and Mathematica.
I am fairly biased toward Mathematica. In principle, I like Python for its language design consistency,
but I would rather program in R (which has all the characteristics of a design by a committee) than in Python.
Functional programming (Mathematica is better)
From what I have read about Functional Programming (FP) in Python the OP statement
Python already has much of the same functional constructs
should be interpreted as "Python provides functional programming lite support."
What Python's author is saying
In this post, “The fate of reduce() in Python 3000” Guido van Rossum discusses his difficulties understanding code that has reduce
(Fold
) and how he generally finds functional programming redundant within Python.
This, I would say, means that if you decide to use functional programming in Python you are not going to be supported by the language design much. (And probably you are going against Python's design fundamentals.)
What others are saying
Here is a very relevant quote from a recent interview with Larry Wall (the creator of Perl):
Some Pythonistas claim that Python is a good functional programming language, mostly on the strength of list comprehensions, but in my estimation Python has only half-hearted FP support; it really doesn't provide the benefits of lexical scoping, closures, laziness, or higher-order programming that I'd expect in a strong FP contender, nor does it encourage you to think that way.
(See "The Slashdot Interview With Larry Wall".)
And a more general programming statement from the same interview:
If Python's object model matches how you want to do things, it's fine for that. If it's not, Python doesn't really provide a coherent meta-object model underneath, just a lot of hooks, which might or might not give you the flexibility you need.
Here is a somewhat old (2009) discussion on Stack Overflow: "Why isn't Python very good for functional programming?";
but also see this newer (2012) presentation "Functional Programming with Python".
Pattern matching
From what I read Python does not have pattern matching of function signatures as Mathematica does.
Of course Python has method / signature overloading capabilities, but that is not as powerful.
Numerical computations (Mathematica is better)
Sparse arrays
Python's scipy has support of sparse matrices, but not higher dimension sparse arrays.
(Probably not very important numerics-wise, but really usefull sometimes in programming.)
Numerical integration
I consider Mathematica's NIntegrate
to be much better than the integration algorithms in scipy. The algorithms in scipy
do not have proper multi-dimensional integration rules and strategies.
See this related discussion:
"Numerical integration — Mathematica vs Python (w/ Scipy) performance".
Numerical solutions of ODEs and PDEs
From what I see in scipy page ODEs and PDEs solving in Mathematica is much more sophisticated.
NDSolve
is more powerful, and provides a plug-in framework. The ODE algorithms in scipy seem to be based on old ODE software designs.
For example, the methodology of feedback control theory applications to ODEs is a fundamental part of NDSolve
's OOP design.
Special functions
Mathematica has extensive coverage of special functions. I really doubt that Python has such an extensive coverage too. Again, I have only looked at scipy. (An impressive list, by the way.)
Numerics with little symbolics
Often enough some algorithms are really hard without symbolics, and the symbolical part of these algorithms is really small.
How easy it is with Python to program
-- this noisy time series peak detection algorithm, and
-- this integer optimization problem?
Integrate[Sqrt[x + Sqrt[x]], x]
? $\endgroup$