[project]
name = "hNMF"
version = "0.3.0"
description = "Hierarchical NMF"
readme = "README.md"
requires-python = ">=3.12"
license = { text = "MIT" }
authors = [
    { name = "Eric Stasney", email = "estasney@users.noreply.github.com" }
]
classifiers = [
    "License :: OSI Approved :: MIT License",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3.12",
]
dependencies = [
    "networkx>=2.3",
    "numpy>=1.24.4",
    "rich>=14.2.0",
    "scikit-learn>=1.3.2",
    "scipy>=1.10.1",
]

[project.urls]
Homepage = "https://github.com/estasney/hNMF"

[dependency-groups]
dev = [
    "beautifulsoup4>=4.14.3",
    "mkdocs>=1.6.1",
    "mkdocs-material>=9.7.1",
    "mkdocstrings[python]>=1.0.1",
    "numpydoc>=1.7.0",
    "pre-commit>=3.5.0",
    "pytest>=8.3.5",
    "ruff>=0.14.13",
    "sphinx>=7.1.2",
    "sphinx-rtd-theme>=3.1.0",
    "ty>=0.0.12",
]


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

[tool.uv]
package = true

[tool.ruff]
target-version = "py312"


[tool.ruff.lint]
select = ["E4", "E7", "E9", "F", "I001", "UP", "ANN", "B", "C", "I", "LOG", "RSE", "RET", "SLOT", "SIM", "TC", "INT", "ARG",
    "PTH", "ERA", "PL", "TRY", "FLY", "RUF", "FA"]
ignore = ["ANN002", "ANN003", "ANN401", "ANN204", "ANN201", "ANN202", "ARG002", "TRY003", "C901", "PLR0915", "PLR0912", "PLR0911", "PLR0913", "PLR2004", "RET503", "PLC0415", "RET504", "D", "UP040"]


[tool.ruff.lint.flake8-annotations]
ignore-fully-untyped = true
suppress-dummy-args = true


[tool.ruff.lint.flake8-type-checking]
runtime-evaluated-base-classes = ["pydantic.BaseModel", "llm.models.base.Model"]

[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401", "I001"]
"tests/**" = ["ANN", "ERA", "ARG"]
