[project]
name = "khive-crystal"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = ["graphviz>=0.20.3", "plotly>=5.24.1", "pydantic>=2.9.2"]

[dependency-groups]
dev = [
    "mypy>=1.13.0",
    "pdoc3>=0.11.1",
    "poethepoet>=0.29.0",
    "pytest>=8.3.3",
    "ruff>=0.7.2",
]

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

[tool.ruff]
line-length = 120
extend-include = ["*.ipynb"]
exclude = ["*.md"]

[tool.ruff.lint]
select = [
    "E",  # pycodestyle errors
    "W",  # pycodestyle warnings
    "F",  # pyflakes
    "I",  # isort
    "B",  # flake8-bugbear
    "C4", # flake8-comprehensions
    "UP", # pyupgrade
    "N",  # pep8-naming
    "UP", # pyupgrade
]
ignore = [
    "E501", # line too long, handled by black
    "N803",
    "N806",
    "N802",
    "N815",
    "E731",
]

[tool.ruff.format]
docstring-code-format = true
docstring-code-line-length = 20

[tool.ruff.lint.pydocstyle]
convention = "google"

[tool.mypy]
ignore_missing_imports = true
strict = true

[tool.poe.tasks.lint]
shell = "uv run ruff check --fix . && uv run mypy ."

[tool.poe.tasks.test]
shell = "uv run pytest ."

[tool.poe.tasks.check]
shell = "uv run poe lint && uv run poe test"
