[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "qmat"
version = "0.1.19"
description = "Generation of Q-coefficients for Spectral Deferred Corrections (and other time-integration methods ...)"
dependencies = [
    "numpy",
    "scipy",
]
requires-python = ">=3.9"
maintainers = [
    {name = "Thibaut Lunet", email = "thibaut.lunet@tuhh.de"},
    {name = "Thomas Saupe (né Baumann)", email = "t.baumann@fz-juelich.de"},
]
readme = "README.md"
license = {file = "LICENSE"}
classifiers = [
    "Development Status :: 4 - Beta",

    "Topic :: Scientific/Engineering :: Mathematics",

    "License :: OSI Approved :: BSD License",

    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
]

[project.optional-dependencies]
docs = [
    "setuptools >= 18.0",
    "sphinx",
    "sphinx-autoapi",
    "nbsphinx",
    "pygments >= 2.4.1",
    "sphinx_rtd_theme >= 1.0.0",
    "sphinx-gallery < 0.11.0",
    "sphinxcontrib-video",
    "myst-parser",
    "sphinx-favicon"
]
test = [
    "flake8",
    "pytest<9",
    "pytest-notebook",
    "pytest-timeout",
    "coverage[toml]",
    "notebook",
    "matplotlib",
    "jupyter",
    "nbconvert",
]

[project.urls]
Homepage = "https://github.com/Parallel-in-Time/qmat"
Documentation = "https://qmat.readthedocs.io/"
Tracker = "https://github.com/Parallel-in-Time/qmat/issues"

[project.scripts]
qmat-stability = "qmat.scripts.stability:main"

[tool.pytest.ini_options]
nb_diff_ignore = [
    "/metadata/",
    "/cells/*/outputs/*/data/image/png"]
pythonpath = [
    "."
]

[tool.coverage.run]
relative_files = true
concurrency = ['multiprocessing']
source = ['qmat']
omit = [
    '*/qmat/playgrounds/*'
]

[tool.coverage.report]
skip_empty = true
# Regexes for lines to exclude from consideration
exclude_lines = [
    # Enable the standard pragma
    'pragma: no cover',

    # Don't complain if tests don't hit defensive assertion code:
    'raise',
    'except',

    # Ignore footer of scripts
    'if __name__ == "__main__":',
    ]
