1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//! Codecs: the *decode* half of decode-accumulate-encode (ยง6).
//!
//! A weight tier is a codec `d : Code -> Alphabet(B)`. The codec is not an
//! argument of the arithmetic, which is why the same result survives a change
//! of tier, a change of reduction schedule, and a change of substrate. That is
//! `CL-MM01`, cited from upstream and reproduced here as a `some-true` claim;
//! `CK-02` and `CK-05` are the evidence that these types realize it.
//!
//! Every tier in this crate is an *instantiation* of one trait, not a special
//! case. [`Codec::MAX_BLOCK`] unifies the scalar and block cases exactly as the
//! upstream `scalar_eq_block` does: a scalar codec is the block codec of its
//! singletons, so no identity and no kernel is written twice.
//!
//! Every table is **borrowed**, never owned: a codebook lives in the caller's
//! `static`, in flash, or in a `&'static` produced by `include_bytes!`. On an
//! embedded target the E8 table is 2048 bytes of read-only memory and the codec
//! is a pointer (R7, C1).
pub use ;
pub use ;
pub use CodedMatrix;
pub use ;
pub use ;