[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "nlsa"
version = "0.3"
description = "Data-driven algorithms for dynamical systems"
readme = "README.md"
requires-python = ">=3.13"
license = { file = "LICENSE.txt" }
keywords = ["kernel methods", "dynamical systems", "scientific computing"]
authors = [
    { name = "Dimitris Giannakis", email = "dimitrios.giannakis@dartmouth.edu" },
]
maintainers = [
    { name = "Dimitris Giannakis", email = "dimitrios.giannakis@dartmouth.edu" },
]
classifiers = [
    "Development Status :: 4 - Beta",
    "Intended Audience :: Data Scientists, Scientific Programmers, Developers",
    "Topic :: Scientific Computing",
    "License :: OSI Approved :: BSD-3-Clause",
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
]

dependencies = [
    "diffrax",
    "ipympl",
    "ipywidgets",
    "h5py",
    "jax",
    "jaxopt",
    "jaxtyping",
    "jupyterlab",
    "matplotlib",
    "more-itertools",
    "nc_time_axis",
    "netCDF4",
    "numpy",
    "opt_einsum",
    "pandas",
    "qiskit",
    "scikit-learn",
    "scipy",
    "seaborn",
    "sympy",
    "tabulate",
    "tensorflow-probability",
    "typeguard",
    "xarray"
]

[project.optional-dependencies]
cuda = [
    "jax[cuda]==0.8.0"
]
cuda13 = [
    "jax[cuda13]==0.8.0"
]
xarray_complete = [
    "xarray[complete]"
]

dev = [
    "flake8",
    "h5py-stubs",
    "jupyterlab-vim",
    "mypy",
    "nb_mypy",
    "pandas-stubs",
    "pyright",
    "pytest",
    "rich",
    "ruff",
    "scipy-stubs"
]

[tool.pytest.ini_options]
testpaths = [
    "tests",
]
addopts = [
    "--cov=nlsa",
    "--ignore=past"
]

[project.urls]
"Homepage" = "https://dg227.github.io/NLSA"

[tool.mypy]
mypy_path = "src"
check_untyped_defs = true
disallow_any_generics = true
ignore_missing_imports = true
no_implicit_optional = true
show_error_codes = true
strict_equality = true
warn_redundant_casts = true
warn_return_any = true
warn_unreachable = true
warn_unused_configs = true
no_implicit_reexport = true
plugins = "numpy.typing.mypy_plugin"

[tool.pyright]
include = ["src"]
exclude = ["**/node_modules",
    "**/__pycache__"
]
typeCheckingMode = "strict"
reportUnusedVariable = "error"

[tool.ruff]
select = ["E", "F", "D", "N"]
line-length = 79

[tool.ruff.format]
docstring-code-format = true
