evalica 0.4.1

Evalica, your favourite evaluation toolkit.
Documentation
[build-system]
requires = ["maturin>=1.6,<2.0"]
build-backend = "maturin"

[project]
name = "evalica"
version = "0.4.1"
license = "Apache-2.0"
description = "Evalica, your favourite evaluation toolkit."
keywords = [
    "Bradley-Terry",
    "Elo",
    "PageRank",
    "eigenvector",
    "evaluation",
    "leaderboard",
    "pairwise comparisons",
    "ranking",
    "rating",
    "statistics",
]
requires-python = ">=3.8,<4.0"
dependencies = ["numpy>=1.16.0", "pandas", "scipy"]
classifiers = [
    "Development Status :: 4 - Beta",
    "Intended Audience :: Developers",
    "Intended Audience :: Science/Research",
    "License :: OSI Approved :: Apache Software License",
    "Operating System :: OS Independent",
    "Programming Language :: Python",
    "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",
    "Programming Language :: Python :: 3.14",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Rust",
    "Topic :: Scientific/Engineering :: Artificial Intelligence",
    "Topic :: Scientific/Engineering :: Information Analysis",
    "Topic :: Scientific/Engineering :: Mathematics",
    "Topic :: Software Development :: Libraries",
    "Typing :: Typed",
]

[project.optional-dependencies]
dev = [
    "abi3audit",
    "hypothesis[numpy]",
    "ipywidgets",
    "mypy",
    "nbqa",
    "notebook",
    "pandas-stubs",
    "plotly",
    "pytest",
    "pytest-codspeed",
    "pytest-cov",
    "ruff",
    "twine",
    "ty",
]
docs = [
    "mkdocs",
    "mkdocs-material",
    "mkdocs-jupyter",
    "mkdocstrings-python",
    "plotly",
]
gradio = [
    "gradio",
    "huggingface-hub >=0.33.5,<1.0 ; python_version < '3.10'",
    "plotly",
]

[project.readme]
file = "README.md"
content-type = "text/markdown"

[project.scripts]
evalica = "evalica.__main__:main"

[project.urls]
Homepage = "https://github.com/dustalov/evalica"
Changelog = "https://github.com/dustalov/evalica/releases"
Issues = "https://github.com/dustalov/evalica/issues"
Documentation = "https://evalica.readthedocs.io/"
Download = "https://pypi.org/project/evalica/#files"
Repository = "https://github.com/dustalov/evalica"

[tool.coverage.run]
source = ["python/evalica"]
omit = ["python/evalica/__main__.py", "python/evalica/gradio/*.py"]

[tool.coverage.report]
exclude_also = [
    "if TYPE_CHECKING:",
    "pytest.skip",
]
fail_under = 100

[tool.maturin]
features = ["python"]
python-source = "python"
module-name = "evalica._brzo"

[tool.mypy]
ignore_missing_imports = true
strict = true
exclude = [
    "coling2025",
]

[tool.pytest.ini_options]
filterwarnings = [
    "error::RuntimeWarning",
    "ignore:The Rust extension could not be imported",
]

[tool.ruff]
line-length = 120
target-version = "py38"
exclude = [
    "coling2025",
]

[tool.ruff.lint]
select = ["ALL"]
ignore = [
    "D203",    # one-blank-line-before-class
    "D212",    # multi-line-summary-first-line
    "D406",    # new-line-after-section-name
    "D407",    # dashed-underline-after-section
    "ERA001",  # commented-out-code
    "FIX002",  # line-contains-todo
    "PLR0913", # too-many-arguments
    "PYI021",  # docstring-in-stub
    "S101",    # assert
    "TD002",   # missing-todo-author
    "TD003",   # missing-todo-link
]

[tool.ruff.lint.per-file-ignores]
"scripts/*.py" = [
    "EM102",   # f-string-in-exception
    "RET504",  # unnecessary-assign
    "T201",    # print
    "TRY003",  # raise-vanilla-args
]
"!__init__.py" = [
    "D", # pydocstyle
]
"*.ipynb" = [
    "B018",   # useless-expression
    "RUF001", # ambiguous-unicode-character-string
]
"test_*.py" = [
    "PLR2004", # magic-value-comparison
]