Eunomia is the datatype law of the Atlas stack: the single source of truth for numeric and scalar datatype vocabulary. It owns the representations every other Atlas crate computes over — and nothing else.
It is the sibling of themis
(placement law — NUMA/tier/worker locality). Where themis supplies the law of
where data lives, Eunomia supplies the law of what data is. In myth, Eunomia
("good order") is Themis's daughter; here the datatype law sits one rung below
the placement law in the foundation.
- Scalar wrapper types —
F16,Bf16,F32,F64,I8/I16/I32, and sub-byteF4/F8/Bf4/Bf8— withbytemuck::Pod/Zeroableand exact layout guarantees. One native conversion kernel provides exact widening and round-to-nearest, ties-to-even narrowing across every reduced format. Complex<T>— the nativere + im·ivocabulary type replacing the third-partynum_complex::Complexacross the stack.- Packed sub-byte formats —
Packed4/PackedBf4/PackedF4storage, COW, rkyv archival, and SIMD-accelerated unpack. - Conversion lattices (
CastFrom/CastTo) and element traits (NumericElement/FloatElement). - Scalar field traits —
RealField/ComplexField(thenalgebrascalar field analogues), so generic numeric code runs overf32/f64andComplex.
It owns no computation kernels, allocation, scheduling, or backend code, and no vector/matrix/geometry types — those are linear algebra and live in leto (CPU) / hephaestus (GPU). The other layers belong to hermes (SIMD), mnemosyne (allocation), moirai (execution), and the domain crates.
| Crate | Role |
|---|---|
eunomia |
The datatype vocabulary: scalars, complex, packed formats, casts, element + scalar-field traits. #![no_std]-capable. |
eunomia datatype law (scalars, complex, packed, field traits) ← this repo
themis placement law (NUMA, tier, worker locality)
↑ consumed by
hermes SIMD execution over eunomia types
mnemosyne allocation
moirai execution
↑ consumed by
leto array substrate (cache-tiled over hermes/eunomia)
↑ consumed by
coeus / hephaestus / apollo / … domain
Dependency direction is strictly inward: eunomia depends on nothing Atlas-local.
Its core uses bytemuck and libm; rkyv, serde, and the NumPy/PyO3 0.29
element boundary are optional. The half crate is a dev-only differential
oracle for Eunomia's native reduced-precision conversion tests.
The core numeric vocabulary migrated from hermes-numeric (which declared
itself the numeric SSOT but was coupled to hermes's SIMD release cadence).
Eunomia promotes it to an independently versioned foundation repo so the stable
datatype vocabulary evolves separately from perf-volatile SIMD kernels. See
docs/adr/0001-eunomia-datatype-ssot.md.
Dual-licensed under MIT or Apache-2.0.