rithm 14.7.1

Arbitrary precision arithmetic.
Documentation
[project]
name = "rithm"
description = "Arbitrary precision arithmetic."
authors = [{ name = "Azat Ibrakov", email = "azatibrakov@gmail.com" }]
readme = "README.md"
license = { file = "LICENSE" }
classifiers = [
    "License :: OSI Approved :: MIT License",
    "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 = [
    "typing-extensions>=4.15.0,<5.0"
]
dynamic = ["version"]

[project.optional-dependencies]
tests = [
    "hypothesis>=6.148.2,<7.0",
    "pytest>=9.0.1,<10.0",
]

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

[tool.bumpversion]
current_version = "14.7.1"
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" = "rithm/__init__.py" },
]

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

[tool.mypy]
strict = true

[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",
    # whitespace before ':'
    "E203",
]

[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]
"tests/*" = ["RUF018"]

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