SciPy describes itself as a collection of “fundamental algorithms for scientific computing in Python.” It extends NumPy with the numerical methods that working scientists and engineers reach for: optimization, integration, interpolation, eigenvalue problems, solvers for algebraic and differential equations, signal processing, and statistics. Where NumPy supplies the array and the basic operations on it, SciPy supplies the higher-level algorithms that operate on those arrays.
A defining engineering choice is that SciPy does not reimplement numerical mathematics from scratch in pure Python. Instead, as the project puts it, it “wraps highly-optimized implementations written in low-level languages like Fortran, C, and C++,” exposing them through a clean high-level Python interface. Many of its routines are thin, well-tested bindings around decades-old, battle-hardened libraries such as LAPACK and ODEPACK, which is why SciPy can be both convenient and numerically serious.
SciPy was first released in 2001, assembled by Travis Oliphant, Pearu Peterson, and Eric Jones from a set of scientific modules that had grown up around the early Python numerical community. Its arrival, alongside the array packages that NumPy would later unify, is generally taken as the founding of the “scientific Python” movement; the conference series and the broader ecosystem both took the SciPy name from this library.
The maturing of the project was marked by the 2020 paper “SciPy 1.0: Fundamental Algorithms for Scientific Computing in Python” by Pauli Virtanen and the SciPy 1.0 Contributors, published in Nature Methods (volume 17, pages 261 to 272), which the project lists as its official citation. The 1.0 release signaled that the API had stabilized after nearly two decades of development and that SciPy could be relied on as durable infrastructure rather than a moving target.
Distributed under a liberal BSD license and developed in the open on GitHub, SciPy sits one layer above NumPy in the stack: applications and domain libraries lean on SciPy for the heavy numerical algorithms, while SciPy in turn leans on NumPy’s ndarray as its common data type. That layering, raw arrays at the bottom, reusable scientific algorithms above, is a large part of why the Python scientific stack composes so cleanly.