[project] name = "firedrake" # .. # TODO RELEASE version = "2026.4.3.dev0" description = "An automated system for the portable solution of partial differential equations using the finite element method" readme = "README.rst" license = "LGPL-3.0-or-later" maintainers = [ {name = "Pablo D. Brubeck"}, {name = "David A. Ham", email = "david.ham@imperial.ac.uk"}, {name = "Josh Hope-Collins"}, {name = "Connor J. Ward", email = "c.ward20@imperial.ac.uk"}, ] requires-python = ">=3.10" dependencies = [ "cachetools", "decorator<=4.4.2", "mpi4py>3; python_version >= '3.13'", "mpi4py; python_version < '3.13'", # FEniCS may make new minor releases of UFL without warning so we pin each Firedrake # release to a specific UFL minor version (e.g. 2025.3.x) "fenics-ufl>=2025.3,<2025.4", "firedrake-fiat>=2026.4", "h5py>3.12.1", "immutabledict", "libsupermesh>=2026.1", "loopy>2024.1", "numpy", "packaging", "petsc4py==3.25.5", "petsctools>=2026.0", "pkgconfig", "progress", "pyadjoint-ad>=2026.4.0", "pycparser", "pytools[siphash]", "requests", "rtree>=1.2", "scipy", "sympy", "islpy<2026.2", "islpy>=2025.1.5; sys_platform == 'darwin'", ] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Science/Research", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Operating System :: Unix", ] [project.urls] Homepage = "https://firedrakeproject.org" Repository = "https://github.com/firedrakeproject/firedrake" Issues = "https://github.com/firedrakeproject/firedrake/issues/new/choose" [project.scripts] firedrake-clean = "firedrake.scripts.firedrake_clean:main" firedrake-preprocess-bibtex = "firedrake.scripts.firedrake_preprocess_bibtex:main" pyop2-clean = "pyop2.compilation:clear_compiler_disk_cache" [project.optional-dependencies] check = [ "mpi-pytest>=2026.0", "pytest", ] docs = [ "bibtexparser>=2", "ipykernel", # kernel for executing the tutorial notebooks "ipympl", # %matplotlib widget backend used by the tutorial notebooks "jupytext", # convert the .py tutorial notebooks to .ipynb "matplotlib", # needed to resolve API "nbsphinx", # execute and render the tutorial notebooks "numpydoc", "pylit", "sphinx", "sphinx-autobuild", "sphinx-reredirects", "sphinxcontrib-bibtex", "sphinxcontrib-jquery", "sphinxcontrib-svg2pdfconverter", "sphinxcontrib-youtube", "sphinx-copybutton", "vtk", # needed to resolve API ] jax = [ "jax", ] netgen = [ "ngsPETSc>=0.2.0", ] slepc = [ "slepc4py==3.25.0", ] torch = [ # requires passing '--extra-index-url' to work "torch", ] vtk = [ "vtk", ] # Dependencies needed to run the full test suite ci = [ "ipympl", # needed for notebook testing "jax", "jupytext", # convert the .py tutorial notebooks to .ipynb for testing "matplotlib", "mpi-pytest>=2026.0", "nbval", "networkx", "ngsPETSc>=0.2.0", "pdf2image", "pygraphviz", "pylit", "pytest", "pytest-order", "pytest-split", # needed for firedrake-run-split-tests "pytest-timeout", "pytest-xdist", "slepc4py==3.25.0", "torch", # requires passing '--extra-index-url' to work "vtk", ] docker = [ # Used in firedrake-vanilla container "ipympl", # needed for notebook testing "jupytext", # convert the .py tutorial notebooks to .ipynb for testing "matplotlib", "mpi-pytest>=2026.0", "nbval", "networkx", "pdf2image", "pygraphviz", "pylit", "pytest", "pytest-order", "pytest-split", # needed for firedrake-run-split-tests "pytest-timeout", "pytest-xdist", "slepc4py==3.25.0", "vtk", ] [build-system] requires = [ "Cython>=3.0", "libsupermesh>=2026.1", "mpi4py>3; python_version >= '3.13'", "mpi4py; python_version < '3.13'", "numpy", "petsc4py==3.25.5", "petsctools", "pkgconfig", "pybind11", "rtree>=1.2", "setuptools>=77.0.3", ] build-backend = "setuptools.build_meta" # TODO: Convert firedrake-zenodo to a proper entrypoint script. [tool.setuptools] script-files = [ "firedrake/scripts/firedrake-zenodo", "scripts/firedrake-check", "scripts/firedrake-run-split-tests", "pyop2/scripts/spydump", ] [tool.setuptools.package-data] # Unless specified these files will not be installed along with the # rest of the package firedrake = [ "cython/*.pxi", "cython/*.pyx", "evaluate.h", "locate.c", "icons/*.png", "_check/**", ] pyop2 = [ "*.h", "*.pxd", "*.pyx", "codegen/c/*.c", ]