Explanation
The "why" of Enumlib. Conceptual scaffolding for the underlying math, the algorithms drawn from the Hart-Forcade-Nelson papers, and the dispatch logic that picks the right one for your problem. Read these for mental-model purposes; for "how do I run X" see the How-to guides, and for "what's the API of Y" see the Reference.
Start here
- Algorithm overview — bird's-eye view of the four enumeration algorithms and the Pólya counter.
- Glossary — compact term reference for the rest of these pages.
The four algorithms
- Exhaustive enumeration (HF 2008) — the original algorithm. Iterate every coloring; canonicalize each. The reference implementation; not
:auto's default. - Multinomial mixed-radix hash (HF 2012) — iterate only colorings at the target concentration. Includes the §A.1 site-mask variant (
:multinomial_restricted) for Regime C (heterogeneous sublattices). - Recursive stabilizer (Morgan-Hart 2017) — the tree. Doesn't need a bitmap;
:auto's default for almost everything.
Counting and the resource check
- Pólya counting — Burnside on coloring spaces, plus the Möbius-inversion correction for aperiodic orbits.
- Dispatch and the resource check — how
algorithm = :autopicks; how the enumeration resource check refuses oversized requests.
Policy
- Super-periodicity — why colorings periodic on a smaller supercell are dropped by default.
- Concentration and multiplicity — the type layer above HF 2012, plus the divisibility-skip semantics.