The Preference Matrix (head-to-head) and the Condorcet check¶
One line: the Preference Matrix shows every candidate against every other, one pair at a time — how many voters prefer each, and how many rated them equal. It's how you check whether STAR's winner is also the Condorcet winner (the candidate who beats everyone head-to-head).
→ Hub: STAR Reporting · the full report: How the LH engine reports · the no-preference bucket: Runoff percentages · GLOSSARY.
Reading a cell — For – Equal Support – Against¶
Each cell reads in the direction of its row. For "Banana > Apple | 3 - 4 - 1": 3 voters prefer Banana (For), 4 rate the two equally (Equal Support), 1 prefers Apple (Against). The reverse cell mirrors it (Apple > Banana | 1 - 4 - 3). The diagonal is ---, and * marks the two finalists. The Equal Support count is the same idea as in the runoff — ballots that scored the pair the same.
Two candidates — the matrix is trivial¶
With only two candidates the matrix just restates the runoff, so the engine suppresses it automatically for two-candidate races. For reference, it looks like:
| * A | * B |
* A > | --- |2 - 2 - 1 |
* B > | 1 - 2 - 2 | --- |
A > B | 2 - 2 - 1: 2 prefer A, 2 Equal Support, 1 prefers B — the same 2 vs 1 that decides the runoff (Voters with a preference: 3 of 5 (2 Equal Support)). Nothing new, hence hidden by default. (→ Runoff percentages.)
Full N×N — every pair, and the Condorcet check¶
With three or more candidates the full grid earns its place — it shows match-ups the runoff never stages (the losers against each other):
| * Apple | * Banana | Cherry |
* Apple > | --- |1 - 4 - 3 |4 - 3 - 1 |
* Banana > | 3 - 4 - 1 | --- |5 - 3 - 0 |
Cherry > | 1 - 3 - 4 |0 - 3 - 5 | --- |
[Condorcet Winner]
Condorcet Winner: Banana — matches the STAR winner
Read down Banana's row: it beats Apple (3 vs 1) and Cherry (5 vs 0), so Banana wins every head-to-head — the Condorcet winner. Here it matches the STAR winner, which is the most uncontroversial outcome there is. When the score leader, the runoff winner, and the Condorcet winner are the same candidate, no reasonable method disagrees.
The options¶
These are engine defaults, not something you write into a case file — case files carry no options: block (dropped repo-wide 2026-08-09). To see more than the default render, read the case's _tabulated.txt mirror or add --full to the run. Details: LH reporting options.
show_matrix— print the matrix at all. Defaulttrue, auto-suppressed for two-candidate races (it would just echo the runoff) and for multi-winner (a "Top 2 Finalist" matrix is a single-winner idea). When a multi-winner report does render the grid — the_tabulatedmirror and--fullalways carry it, and a file can force it on screen — it prints as plain head-to-head data: retitled Preference Matrix, no*finalist markers, and a legend line saying the grid is informational only, not part of the multi-winner count.matrix_finalists_only—trueprints only the two finalists' row/column (a compact check that the runoff matches the pairwise result);falseprints the full N×N grid. The saved_tabulated.txtalways forces the full grid.show_condorcet—trueprints the[Condorcet Winner]line and whether it matches the STAR winner;falsehides it (the on-screen default, keeping the report lean). The_tabulated.txtcopy always includes it, and the--fullflag puts it on screen.
When the Condorcet winner and the STAR winner differ, that's the interesting case — see three notions of "winner".