* chore(deps): update pre-commit hooks updates: - [github.com/pre-commit/mirrors-clang-format: v22.1.5 → v22.1.8](https://github.com/pre-commit/mirrors-clang-format/compare/v22.1.5...v22.1.8) - [github.com/astral-sh/ruff-pre-commit: v0.15.20 → v0.16.1](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.20...v0.16.1) - [github.com/pre-commit/mirrors-mypy: v2.1.0 → v2.3.0](https://github.com/pre-commit/mirrors-mypy/compare/v2.1.0...v2.3.0) - [github.com/codespell-project/codespell: v2.4.2 → v2.4.3](https://github.com/codespell-project/codespell/compare/v2.4.2...v2.4.3) * style: pre-commit fixes * fix: adapt to the ruff 0.16 default rule set The hook update pulled in ruff 0.16, which expanded its default rules and autofixed `self: S -> S` to `-> Self`. That fix added a runtime `typing_extensions` import to setup_helpers.py, which must stay dependency-free; it broke every test job whose environment does not supply that package. The import is now guarded by TYPE_CHECKING. Also replace the `exec` in docs/conf.py with an importlib module load, parenthesize implicit string concatenations in list literals, mark unused unpacked variables with a leading underscore, and make noxfile.py executable to match its shebang. The remaining new rules are silenced per-file, with reasons: the chrono tests check naive local time on purpose, and the other rules conflict with how the tests are written. Assisted-by: ClaudeCode:claude-opus-5 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Henry Schreiner <henryfs@princeton.edu>