Skip to main content

PeriodicColumns

Struct PeriodicColumns 

Source
pub struct PeriodicColumns<'a, F> { /* private fields */ }
Expand description

Periodic columns screened against the rows they have to cover.

A column of length p holds the evaluations of one polynomial over a subgroup of order p.

  • Such a subgroup exists only when p is a power of two.
  • It tiles the rows only when p divides the height.
    height 8,  length 2   [0,1][0,1][0,1][0,1]       tiles
    height 8,  length 16  [0,1,...,7|8,...,15]       truncated
    height 12, length 8   [0,...,7][0,1,2,3|4,...]   partial repeat

Row lookups wrap with row mod p, so an ill-shaped column still yields a value on every row. Reading rows alone never reveals the mistake.

Evaluation is where it breaks. Every path divides the height by the length and takes a base-two logarithm of the quotient. Neither step means anything for a shape the rule rejects.

Holding this view is the evidence that the rule was applied.

Implementations§

Source§

impl<'a, F> PeriodicColumns<'a, F>

Source

pub fn new( columns: &'a [Vec<F>], height: usize, ) -> Result<Self, PeriodicColumnShapeError>

Screen the declared columns against the rows they have to cover.

§Errors
  • A length that is not a power of two, zero included.
  • A length that does not divide the height.
Source

pub const fn as_slice(&self) -> &'a [Vec<F>]

The screened columns, in declaration order.

Source

pub const fn height(&self) -> usize

Rows the columns were screened against.

Source

pub const fn len(&self) -> usize

How many columns are declared.

Source

pub const fn is_empty(&self) -> bool

True when the declaration is empty.

Source

pub fn max_period(&self) -> Option<usize>

Longest declared period, absent when the declaration is empty.

Every period divides the height, so the longest one divides it too. Padding every column up to it yields one rectangular table over a single subgroup.

Trait Implementations§

Source§

impl<F> Clone for PeriodicColumns<'_, F>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<F> Copy for PeriodicColumns<'_, F>

Source§

impl<'a, F: Debug> Debug for PeriodicColumns<'a, F>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a, F> Freeze for PeriodicColumns<'a, F>
where &'a [Vec<F>]: Freeze,

§

impl<'a, F> RefUnwindSafe for PeriodicColumns<'a, F>
where &'a [Vec<F>]: RefUnwindSafe,

§

impl<'a, F> Send for PeriodicColumns<'a, F>
where &'a [Vec<F>]: Send,

§

impl<'a, F> Sync for PeriodicColumns<'a, F>
where &'a [Vec<F>]: Sync,

§

impl<'a, F> Unpin for PeriodicColumns<'a, F>
where &'a [Vec<F>]: Unpin,

§

impl<'a, F> UnsafeUnpin for PeriodicColumns<'a, F>
where &'a [Vec<F>]: UnsafeUnpin,

§

impl<'a, F> UnwindSafe for PeriodicColumns<'a, F>
where &'a [Vec<F>]: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Dup for T
where T: Copy + Clone,

Source§

fn dup(&self) -> T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more