[build-system]
requires = [
    "hatchling>=1.8.0",
    "hatch-vcs",
]
build-backend = "hatchling.build"

[project]
requires-python = ">=3.8"
name = "finam"
description = "FINAM is not a model."
authors = [{name = "FINAM Developers", email = "finam@ufz.de"}]
readme = "README.md"
license = "LGPL-3.0"
dynamic = ["version"]
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Intended Audience :: Developers",
    "Intended Audience :: End Users/Desktop",
    "Intended Audience :: Science/Research",
    "Intended Audience :: Education",
    "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
    "Natural Language :: English",
    "Operating System :: Unix",
    "Operating System :: Microsoft",
    "Operating System :: MacOS",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: 3.8",
    "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",
    "Topic :: Scientific/Engineering",
    "Topic :: Software Development",
    "Topic :: Utilities",
]
dependencies = [
    "numpy>=1.17.0",
    "scipy>=1.9.0",
    "pyevtk>=1.6.0",
    "pint >=0.20, !=0.24.0",
    "packaging",
    "pyproj>=3.4",
    "pandas>=1.3",
    "opensimplex>=0.4",
]

[project.urls]
Homepage = "https://FINAM.pages.ufz.de/"
Documentation = "https://FINAM.pages.ufz.de/finam/"
Source = "https://git.ufz.de/FINAM/finam"
Tracker = "https://git.ufz.de/FINAM/finam/-/issues"
Changelog = "https://git.ufz.de/FINAM/finam/-/blob/main/CHANGELOG.md"

[project.optional-dependencies]
doc = [
    "sphinx>=6",
    "pydata-sphinx-theme==0.13",
    "numpydoc>=1.1",
    "sphinx-design>=0.4",
    "myst-parser>=1.0",
    "sphinxcontrib-mermaid>=0.7",
    "ablog>=0.10",
    "docutils>=0.18", # mdinclude with myst
    "matplotlib>=3",
]
test = [
    "pygal==3.0.0",
    "pytest-cov>=3",
    "pytest-benchmark[histogram]>=4.0",
]

[tool.hatch.version]
source = "vcs"
fallback_version = "0.0.0.dev0"

[tool.hatch.version.raw-options]
local_scheme = "no-local-version"

[tool.hatch.build.hooks.vcs]
version-file = "src/finam/_version.py"
template = "__version__ = '{version}'"

[tool.hatch.build.targets.sdist]
include = [
  "/src",
  "/tests",
]

[tool.hatch.build.targets.wheel]
packages = ["src/finam"]

[tool.black]
exclude = "_version.py"
target-version = [
    "py38",
    "py39",
    "py310",
    "py311",
    "py312",
    "py313",
]

[tool.isort]
profile = "black"
multi_line_output = 3

[tool.coverage]
    [tool.coverage.run]
    source = ["finam"]
    omit = [
        "*docs*",
        "*examples*",
        "*tests*",
        "*/src/finam/tools/wurlitzer.py",
    ]

    [tool.coverage.report]
    exclude_lines = [
        "pragma: no cover",
        "def __repr__",
        "def __str__",
    ]

[tool.pylint]
    [tool.pylint.master]
    extension-pkg-whitelist = [
        "numpy",
        "scipy",
        "mpi4py",
    ]
    ignore = [
        "_version.py",
        "wurlitzer.py",
    ]

    [tool.pylint.message_control]
    max-line-length = 120
    disable = [
        "C0103", # ignore invalid-names like "x", "y"
        "C0415", # ignore defered imports
        "R0801", # ignore code duplications
    ]

    [tool.pylint.reports]
    output-format = "colorized"

    [tool.pylint.design]
    max-args = 15
    max-locals = 20
    max-attributes = 15
    max-parents = 10
    min-public-methods = 0
    max-public-methods = 25
    max-positional-arguments = 15
    max-returns = 10