pub struct PeriodicLdeTable<F> { /* private fields */ }Expand description
Compact storage for periodic column values on the LDE domain.
Instead of materializing the full LDE-sized table, stores only extended_height rows
(where extended_height = max_period × blowup) and uses modular indexing to access values.
All periodic columns are padded to the maximum period before extrapolation, creating a rectangular matrix for cache-friendly row-wise access.
§Invariants
- All periods must be powers of 2 (see module-level documentation)
- Height is always
max_period × blowup(both powers of 2, so height is power of 2)
Implementations§
Source§impl<F: Clone + Send + Sync> PeriodicLdeTable<F>
impl<F: Clone + Send + Sync> PeriodicLdeTable<F>
Sourcepub const fn new(values: RowMajorMatrix<F>) -> Self
pub const fn new(values: RowMajorMatrix<F>) -> Self
Create a new periodic LDE table from extrapolated values.
The matrix should have height = max_period × blowup and width = num_periodic_columns.
Sourcepub const fn packed_group_period(&self, pack_width: usize) -> usize
pub const fn packed_group_period(&self, pack_width: usize) -> usize
Number of distinct packed row groups when the LDE domain is read in groups of
pack_width consecutive indices, group g starting at g * pack_width.
get reduces indices modulo height, and the group starts
g * pack_width mod height repeat with period height / gcd(height, pack_width).
Group g therefore reads the same values as group g % packed_group_period(pack_width).
pack_width need not be a power of two or divide height. Returns 0 for an
empty table.
Trait Implementations§
Source§impl<F: Clone> Clone for PeriodicLdeTable<F>
impl<F: Clone> Clone for PeriodicLdeTable<F>
Auto Trait Implementations§
impl<F> Freeze for PeriodicLdeTable<F>where
DenseMatrix<F>: Freeze,
impl<F> RefUnwindSafe for PeriodicLdeTable<F>where
DenseMatrix<F>: RefUnwindSafe,
impl<F> Send for PeriodicLdeTable<F>where
DenseMatrix<F>: Send,
impl<F> Sync for PeriodicLdeTable<F>where
DenseMatrix<F>: Sync,
impl<F> Unpin for PeriodicLdeTable<F>where
DenseMatrix<F>: Unpin,
impl<F> UnsafeUnpin for PeriodicLdeTable<F>where
DenseMatrix<F>: UnsafeUnpin,
impl<F> UnwindSafe for PeriodicLdeTable<F>where
DenseMatrix<F>: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more