rene 0.2.0

Computational geometry.
Documentation
[project]
name = "rene"
description = "Computational geometry."
authors = [{ name = "Azat Ibrakov", email = "azatibrakov@gmail.com" }]
readme = "README.md"
license-files = ["LICENSE"]
classifiers = [
    "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 :: Python :: Implementation :: PyPy"
]
requires-python = ">=3.10"
dependencies = [
    "dendroid>=2.1.0,<3.0",
    "prioq>=0.7.0,<1.0",
    "rithm>=14.8.0,<15.0",
    "typing-extensions>=4.15.0,<5.0"
]
dynamic = ["version"]

[project.optional-dependencies]
docs = [
    "Sphinx>=7.2.6,<9.0",
    "sphinx-rtd-theme>=2.0.0,<3.0"
]
tests = [
    "hypothesis>=6.148.11,<7.0",
    "hypothesis-geometry>=9.0.0,<10.0",
    "pytest>=9.0.2,<10.0"
]

[build-system]
requires = [
    "setuptools-rust>=1.12.1,<2.0; platform_python_implementation=='CPython'",
    "setuptools",
    "wheel"
]
build-backend = "setuptools.build_meta"

[tool.bumpversion]
current_version = "0.2.0"
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
serialize = ["{major}.{minor}.{patch}"]
search = "{current_version}"
replace = "{new_version}"
regex = false
ignore_missing_version = false
ignore_missing_files = false
tag = true
sign_tags = false
tag_name = "v{new_version}"
tag_message = "Bump version: {current_version} → {new_version}"
allow_dirty = false
commit = true
message = "Bump version: {current_version} → {new_version}"
moveable_tags = []
commit_args = ""
setup_hooks = []
pre_commit_hooks = []
post_commit_hooks = []
files = [
    { "filename" = "Cargo.toml" },
    { "filename" = "docker-compose.cpython.yml" },
    { "filename" = "docker-compose.pypy.yml" },
    { "filename" = "rene/__init__.py" }
]

[tool.coverage.run]
source = ["rene"]

[tool.pytest.ini_options]
addopts = "--verbose -s --hypothesis-profile=default"

[tool.ruff]
line-length = 79

[tool.ruff.format]
docstring-code-format = true
quote-style = "single"
skip-magic-trailing-comma = true

[tool.ruff.lint]
preview = true
select = [
    # flake8-builtins
    "A",
    # flake8-annotations
    "ANN",
    # flake8-unused-arguments
    "ARG",
    # flake8-bugbear
    "B",
    # flake8-blind-except
    "BLE",
    # flake8-comprehensions
    "C4",
    # pycodestyle
    "E",
    # Pyflakes
    "F",
    # flake8-future-annotations
    "FA",
    # flake8-boolean-trap
    "FBT",
    # refurb
    "FURB",
    # isort
    "I",
    # flake8-implicit-str-concat
    "ISC",
    # pep8-naming
    "N",
    # Perflint
    "PERF",
    # flake8-pie
    "PIE",
    # flake8-pytest-style
    "PT",
    # flake8-quotes
    "Q",
    # flake8-return
    "RET",
    # flake8-raise
    "RSE",
    # Ruff-specific rules
    "RUF",
    # flake8-simplify
    "SIM",
    # flake8-self
    "SLF",
    # flake8-debugger
    "T10",
    # flake8-print
    "T20",
    # flake8-tidy-imports
    "TID",
    # pyupgrade
    "UP",
    # pycodestyle
    "W"
]
ignore = [
    # disallows `typing.Any` annotation
    "ANN401",
    # disallows `except Exception`
    "BLE001",
    # whitespace before ':'
    "E203",
    # disallows `try-except` within loop bodies
    "PERF203"
]

[tool.ruff.lint.flake8-quotes]
docstring-quotes = "double"
inline-quotes = "single"

[tool.ruff.lint.isort]
case-sensitive = true
combine-as-imports = true
order-by-type = false
relative-imports-order = "closest-to-furthest"
split-on-trailing-comma = false

[tool.ruff.lint.per-file-ignores]
"rene/*" = ["RUF067"]
"tests/*" = ["FBT001", "PT011", "RUF018"]

[tool.setuptools.dynamic]
version = { attr = "rene.__version__" }