blob: 911cc953f6322507896092bd9da646b2d7fc7e99 [file]
# CodeRabbit configuration for Eigen.
# Schema: https://docs.coderabbit.ai/reference/configuration
#
# Eigen is a header-only C++14 template library, GitLab-hosted, with a strict
# ABI policy and several major downstream consumers (notably TensorFlow). The
# settings below favor signal over volume: chill profile, minimal noise on
# auto-generated docs and vendored Fortran, and explicit guidance for the
# template-heavy core.
language: en-US
tone_instructions: >-
Eigen, header-only C++14. Focus: correctness, numerical accuracy (SOTA;
flag regressions, defer few-ULP tradeoffs to humans), ABI, performance,
template metaprogramming pitfalls, missing tests. Skip style
nits and C++17+.
early_access: false
enable_free_tier: true
reviews:
profile: chill
request_changes_workflow: false
high_level_summary: true
# Post the high-level summary in the walkthrough comment, NOT in the MR
# description. Eigen maintainers want the description left alone.
high_level_summary_in_walkthrough: true
poem: false
review_status: true
collapse_walkthrough: true
changed_files_summary: true
enable_prompt_for_ai_agents: true
# Trim down the noise in the auto-posted comment: drop sections that don't
# carry weight on a numerics-heavy template library.
sequence_diagrams: false
estimate_code_review_effort: false
assess_linked_issues: false
related_issues: false
related_prs: false
suggested_labels: false
suggested_reviewers: false
in_progress_fortune: false
auto_review:
enabled: true
drafts: false
# Eigen MRs often see many WIP pushes; reviewing every push burns the
# per-developer hourly rate limit on the free/OSS tier. Review the first
# diff only; further reviews can be requested with `@coderabbitai review`.
auto_incremental_review: false
base_branches:
- master
path_filters:
- "!doc/snippets/**"
- "!doc/examples/**"
- "!lapack/*.f"
- "!blas/testing/**"
- "!**/*.png"
- "!**/*.bin"
- "!**/*.svg"
- "!**/*.pdf"
path_instructions:
- path: "Eigen/src/**"
instructions: |
Eigen is a header-only C++14 template library with a strict ABI policy.
- **Numerical accuracy is a top priority.** Eigen targets accuracy
comparable to established numerical libraries such as LAPACK. Flag
any change that may degrade accuracy, condition handling, stability
under near-singular / ill-conditioned inputs, or behavior near
subnormals, infinities, NaNs, or extreme exponents. In general,
do not trade accuracy for speed.
- **Acceptable accuracy tradeoff:** a faster algorithm whose
worst-case error is bounded to a few ULPs by a principled
analysis may be acceptable. In such cases, surface the tradeoff
and the bound clearly so a human reviewer can judge; do not
auto-approve or auto-reject these.
- **Numerical changes require numerical tests.** Any new numerical
algorithm, kernel, or accuracy-sensitive change MUST come with
tests that exercise its accuracy claims (random ill-conditioned
inputs, edge values, comparisons against a reference). If such
tests are missing, request them.
- Treat the public API surface as frozen: do not propose renames or
signature changes for non-internal types.
- Performance and inlining matter; flag possible regressions in hot
paths (products, packet kernels, evaluators, decompositions).
- Watch for accidental allocations in templates that should be
allocation-free.
- C++14 is the minimum; do not suggest C++17+ features. (A migration
to C++17 is planned on a separate branch; until it lands on master,
new code must compile under C++14.)
- Do not propose reordering internal includes; Eigen relies on a
specific include order.
- path: "test/**"
instructions: |
Tests use the EIGEN_REPEAT-N harness and shard each .cpp into many
ctest targets. Do not suggest restructuring the harness or
deduplicating shards. Numerical-tolerance comparisons are deliberate;
do not push for exact equality. Tests may be long and procedural.
- path: "unsupported/Eigen/**"
instructions: |
Treat unsupported modules as more permissive than core Eigen, but
keep the public API stable for known downstream consumers (the Tensor
module is used by TensorFlow).
- path: "blas/**"
instructions: |
These are Reference BLAS API wrappers around Eigen. Match the BLAS
standard exactly; do not suggest deviating from netlib semantics.
- path: "lapack/**"
instructions: |
The .f sources are vendored netlib LAPACK reference; do not review
them. The C++ wrappers should faithfully implement the LAPACK
contract.
- path: "ci/**"
instructions: |
GitLab CI configuration. Be conservative -- do not suggest
restructuring the existing job graph or changing runner tags without
strong reason.
- path: "benchmarks/**"
instructions: |
Microbenchmarks built against Google Benchmark. Clarity matters less
than realistic measurement; flag only correctness or measurement
methodology issues, not style.
chat:
auto_reply: true