Library / SDK
scipy/scipy avatar
scipy/scipy

SciPy: The Standard Library for Scientific Computing in Python

SciPy library main repository. NumPy and SciPy are easy to use, but powerful enough to be depended upon by some of the world's leading scientists and engineers.

15,040 stars5,970 forksPythonBSD-3-Clause

At a glance

What is it?
SciPy is an open-source Python library built on NumPy that provides numerical routines for optimization, integration, linear algebra, signal processing, statistics, and ODE solving. It has been a foundational tool in scientific, engineering, and research computing for over two decades.
Who is it for?
SciPy is the practical first choice for any Python numerical workflow that needs more than NumPy arrays alone. Researchers, engineers, and data scientists who need curve fitting, root finding, differential equation solvers, or Fourier transforms will find production-quality implementations in the scipy submodules.
Can I use it commercially?
Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 25, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What SciPy Does and Who Uses It

SciPy, pronounced 'Sigh Pie' according to the README, is an open-source library for mathematics, science, and engineering built on top of NumPy. The README states that it provides many user-friendly and efficient numerical routines, including routines for numerical integration and optimization, and that it is powerful enough to be depended upon by some of the world's leading scientists and engineers.

The library is structured around submodules, each dedicated to a domain. The README lists statistics, optimization, integration, linear algebra, Fourier transforms, signal and image processing, and ODE solvers as the core areas covered. Each submodule is imported separately, so a project that only uses scipy.optimize does not pull in the signal processing or image processing code unnecessarily.

SciPy is published under the BSD-3-Clause license, which allows use in commercial and proprietary products without requiring source disclosure. The current maintainer group is SciPy Developers, reachable through the [email protected] address listed in the pyproject.toml. The latest release is v1.18.1, published on 2026-08-21.

The Relationship Between SciPy and NumPy

SciPy is built to work with NumPy arrays and has NumPy as a required dependency. The pyproject.toml specifies numpy>=2.0.0 as a build requirement. The two libraries are designed as complements: NumPy provides the foundational array types, broadcasting semantics, and low-level operations, while SciPy adds higher-level algorithms that operate on those arrays.

The README notes that together, NumPy and SciPy run on all popular operating systems, are quick to install, and are free of charge. This combination covers a large fraction of numerical computing tasks that would otherwise require commercial software such as MATLAB or Mathematica.

A practical consequence is that updating either library can require attention to compatibility. The pyproject.toml in maintenance branches carries notes about upper version bounds for NumPy and other dependencies, with instructions for package maintainers to keep those bounds conservative in release branches. The README links to the scipy developer documentation for the versioning policy.

Installing SciPy

The README does not provide the installation command directly; instead it directs users to the installation guide at scipy.org/install/ for system-specific instructions. The PyPI package name is scipy, as confirmed by the pyproject.toml project name field. The conda-forge channel also distributes SciPy, as shown by the Conda downloads badge in the README header.

Building SciPy from source is a more involved process than most Python packages. The pyproject.toml lists a C/Fortran build pipeline with several required build tools: meson-python>=0.15.0, Cython>=3.2.0 for generating C extensions from Cython sources, pybind11>=2.13.2 for C++ bindings, and pythran>=0.18.1 for transpiling NumPy-annotated Python to C++. A numpy>=2.0.0 is also required at build time.

This build complexity means that pre-built binary wheels from PyPI or conda-forge are strongly preferred over source builds for most users. The README and pyproject.toml provide the details needed by distribution packagers and developers working on SciPy itself.

Core Submodules: Optimize, Integrate, and Signal

The scipy.optimize submodule provides algorithms for function minimization, curve fitting, root finding, and linear programming. The RELATED SEARCHES for this project include scipy.optimize.minimize, scipy.optimize.curve_fit, and scipy.find_peaks, which reflects how commonly these specific functions are used in practice. scipy.optimize.minimize accepts a cost function, an initial guess, and a method identifier; scipy.optimize.curve_fit fits a user-defined model function to data.

The scipy.integrate submodule handles numerical integration of functions and ordinary differential equations. It includes quad for single-variable definite integrals and odeint or solve_ivp for initial-value ODE problems. The scipy.signal submodule covers digital filter design, spectral analysis via periodograms and Welch methods, peak finding with scipy.signal.find_peaks, and convolution.

The scipy.stats submodule contains probability distributions and statistical tests. It provides continuous and discrete distribution objects with methods for probability density, cumulative distribution, sampling, and fitting. Hypothesis tests for common scenarios, such as t-tests, chi-squared tests, and Kolmogorov-Smirnov tests, are also part of this submodule.

Linear Algebra, Fourier Transforms, and Sparse Matrices

scipy.linalg wraps LAPACK and BLAS routines for matrix decompositions, solvers, and matrix functions. It overlaps with numpy.linalg in coverage but provides additional routines for Cholesky decomposition, LU decomposition, Schur decomposition, and solving banded or triangular systems. For some operations scipy.linalg is preferable to numpy.linalg because it provides finer control over the underlying LAPACK call.

The scipy.fft submodule implements fast Fourier transforms for 1-D, 2-D, and N-D inputs, including discrete sine and cosine transforms. It supports both real and complex inputs and provides planning capabilities to improve performance on repeated transforms of the same shape.

SciPy also includes sparse matrix representations in scipy.sparse, which the README does not list explicitly in its module summary but which is present in the repository under the scipy/ directory. Sparse matrices reduce memory usage for problems with many zero-valued entries, common in finite element methods and graph algorithms.

Limitations: Scope, Build Complexity, and Alternatives

SciPy is not a general machine learning library. It provides statistical models and optimization routines, but it does not include gradient-based neural network training, automatic differentiation, or GPU acceleration. For those tasks, PyTorch or JAX are better fits.

The C and Fortran extensions make SciPy heavier to install from source than pure-Python packages. In environments where binary wheels are not available, such as some embedded Linux targets or less common architectures, the build requirements become a significant constraint.

SciPy's sparse matrix interface predates more recent alternatives like PyData/Sparse, which offers N-dimensional sparse arrays with a more consistent API. For problems that specifically need N-dimensional sparse arrays, PyData/Sparse may be worth evaluating.

The project maintains a contributor guide and an AI policy (the README links to both) and accepts contributions through GitHub pull requests. Issues labeled as good first issue are available for new contributors.

Maintenance and Versioning

SciPy uses a structured release process with maintenance branches that carry upper version bounds on dependencies. The pyproject.toml comment block explains the rationale: maintenance branches pin upper bounds to prevent future backwards-incompatible releases of dependencies from breaking a released SciPy version. Release branches add these pins only when a known compatibility problem exists, while distributions may ignore pins added purely for preventive reasons.

The latest stable release is v1.18.1, published on 2026-08-21. The development branch in the repository carries version 2.0.0.dev0, visible in the pyproject.toml. The last push to the repository was on 2026-09-25, confirming ongoing development.

SciPy is fiscally sponsored by NumFOCUS, as shown in the README badge. The project's security policy directs vulnerability reports through Tidelift, with full details in the scipy developer documentation.

Editorial conclusion

SciPy is the practical first choice for any Python numerical workflow that needs more than NumPy arrays alone. Researchers, engineers, and data scientists who need curve fitting, root finding, differential equation solvers, or Fourier transforms will find production-quality implementations in the scipy submodules. The main constraint to check before adopting it is Python version compatibility: the latest release (v1.18.1, published 2026-08-21) sets its own Python and NumPy lower bounds, documented in the pyproject.toml and on the scipy.org install page.

Frequently asked questions

What is SciPy in Python used for?

SciPy provides numerical algorithms for optimization, integration, linear algebra, Fourier transforms, signal and image processing, statistics, and ODE solving. It is used by scientists, engineers, and data analysts who need numerical routines beyond what NumPy offers.

How do I install SciPy in Python?

The README directs users to scipy.org/install/ for the full installation instructions. The package is distributed via PyPI under the name scipy and is also available on conda-forge. Binary wheels for most platforms avoid the need to compile the C and Fortran extensions from source.

Is SciPy still relevant?

Yes. The latest release is v1.18.1, published on 2026-08-21, and the repository received a push on 2026-09-25. SciPy remains the standard library for numerical scientific computing in Python and is a dependency for many widely-used data science packages.

How is SciPy pronounced?

The README states that SciPy is pronounced 'Sigh Pie'.

How do I use scipy.optimize.minimize?

scipy.optimize.minimize takes a cost function, an initial guess, and an optional method argument that selects the optimization algorithm. The full parameter reference and examples are in the scipy.optimize documentation at docs.scipy.org.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
For maintainers

Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/scipy-scipy.svg)](https://hysenlabs.com/projects/scipy-scipy)
Community notes

Community notes