Struct AlmostExactBaseConversion

Source
pub struct AlmostExactBaseConversion<A = Global>
where A: Allocator + Clone,
{ /* private fields */ }
Expand description

Stores values for an almost exact conversion between RNS bases. A complete conversion refers to the function

  Z/QZ -> Z/Q'Z, x -> [lift(x)]

In our case, the output of the function is allowed to have an error of { -Q, 0, Q }, unless the shortest lift of the input is bounded by Q/4, in which case the result is always correct.

§Implementation

Implementation is changed to approximating the lifted value using lower precision integers, which can be used to determine the overflow when computing

  lift(x) = sum_q lift(x * q/Q mod q) * Q/q

modulo some q'.

Implementations§

Source§

impl<A> AlmostExactBaseConversion<A>
where A: Allocator + Clone,

Source

pub fn new_with(in_rings: Vec<Zn>, out_rings: Vec<Zn>, allocator: A) -> Self

Creates a new AlmostExactBaseConversion from q to q'. The moduli belonging to q' are expected to be sorted.

Trait Implementations§

Source§

impl<A> RNSOperation for AlmostExactBaseConversion<A>
where A: Allocator + Clone,

Source§

fn apply<V1, V2>( &self, input: Submatrix<'_, V1, El<Self::Ring>>, output: SubmatrixMut<'_, V2, El<Self::Ring>>, )
where V1: AsPointerToSlice<El<Self::Ring>>, V2: AsPointerToSlice<El<Self::Ring>>,

Performs the (almost) exact RNS base conversion

  Z/QZ -> Z/Q'Z, x -> smallest_lift(x) + kQ mod Q''

where k in { -1, 0, 1 }.

Furthermore, if the shortest lift of the input is bounded by Q/4, then the result is guaranteed to be exact.

Source§

type Ring = RingValue<ZnBase>

Source§

type RingType = ZnBase

Source§

fn input_rings<'a>(&'a self) -> &'a [Zn]

Source§

fn output_rings<'a>(&'a self) -> &'a [Zn]

Auto Trait Implementations§

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> 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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