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

[project]
name = "pianoplayer"
version = "3.0.2"
description = "Automatic piano fingering generator. Finds and shows in 3D the best fingering combination to play a score."
readme = "README.md"
requires-python = ">=3.9"
license = { text = "MIT" }
authors = [{ name = "Marco Musy", email = "marco.musy@gmail.com" }]
keywords = ["piano", "fingering", "musicxml"]
classifiers = [
  "Intended Audience :: Science/Research",
  "Intended Audience :: Education",
  "Programming Language :: Python :: 3",
  "License :: OSI Approved :: MIT License",
  "Topic :: Scientific/Engineering :: Visualization",
  "Topic :: Scientific/Engineering :: Information Analysis",
]
dependencies = ["rich>=13.0.0"]

[project.optional-dependencies]
visual = ["vedo>=2026.6.1"]
midi = ["pretty_midi>=0.2.9"]
sound = ["pygame>=2.6.0"]
build = ["pyinstaller>=6.0.0"]
web = ["fastapi>=0.115.0", "uvicorn>=0.30.0", "python-multipart>=0.0.9"]
all = [
  "vedo>=2026.6.1",
  "pretty_midi>=0.2.9",
  "pygame>=2.6.0",
  "pyinstaller>=6.0.0",
  "fastapi>=0.115.0",
  "uvicorn>=0.30.0",
  "python-multipart>=0.0.9",
]

[project.urls]
Homepage = "https://github.com/marcomusy/pianoplayer"
Repository = "https://github.com/marcomusy/pianoplayer"

[project.scripts]
pianoplayer = "pianoplayer.cli:main"

[tool.setuptools]
include-package-data = true

[tool.setuptools.packages.find]
include = ["pianoplayer*", "webapi*"]

[tool.setuptools.package-data]
webapi = ["*.html", "images/*"]

[tool.pytest.ini_options]
addopts = "-q"
testpaths = ["tests"]

[tool.ruff]
line-length = 100
target-version = "py39"

[tool.ruff.lint]
select = ["E", "F", "W", "I"]
ignore = ["E701"]
