Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 > Class Template Reference

A view of a univariate, also used to truncate univariates. More...

#include <univariate_coefficient_basis.hpp>

Public Types

using value_type = Fr
 

Public Member Functions

 UnivariateCoefficientBasis ()=default
 
 UnivariateCoefficientBasis (const UnivariateCoefficientBasis< Fr, domain_end, true > &other)
 
 ~UnivariateCoefficientBasis ()=default
 
 UnivariateCoefficientBasis (const UnivariateCoefficientBasis &other)=default
 
 UnivariateCoefficientBasis (UnivariateCoefficientBasis &&other) noexcept=default
 
UnivariateCoefficientBasisoperator= (const UnivariateCoefficientBasis &other)=default
 
UnivariateCoefficientBasisoperator= (UnivariateCoefficientBasis &&other) noexcept=default
 
template<size_t other_domain_end, bool other_has_a0_plus_a1 = true>
requires (domain_end > other_domain_end)
 UnivariateCoefficientBasis (const UnivariateCoefficientBasis< Fr, other_domain_end, other_has_a0_plus_a1 > &other)
 
size_t size ()
 
bool is_zero () const
 
bool is_zero () const
 
std::vector< uint8_t > to_buffer () const
 
bool operator== (const UnivariateCoefficientBasis &other) const =default
 
template<size_t other_domain_end, bool other_has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > & operator+= (const UnivariateCoefficientBasis< Fr, other_domain_end, other_has_a0_plus_a1 > &other)
 
template<size_t other_domain_end, bool other_has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > & operator-= (const UnivariateCoefficientBasis< Fr, other_domain_end, other_has_a0_plus_a1 > &other)
 
template<bool other_has_a0_plus_a1>
requires (LENGTH == 2)
UnivariateCoefficientBasis< Fr, 3, false > operator* (const UnivariateCoefficientBasis< Fr, domain_end, other_has_a0_plus_a1 > &other) const
 
template<size_t other_domain_end, bool other_has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > operator+ (const UnivariateCoefficientBasis< Fr, other_domain_end, other_has_a0_plus_a1 > &other) const
 
template<size_t other_domain_end, bool other_has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > operator- (const UnivariateCoefficientBasis< Fr, other_domain_end, other_has_a0_plus_a1 > &other) const
 
UnivariateCoefficientBasis< Fr, domain_end, false > operator- () const
 
UnivariateCoefficientBasis< Fr, 3, false > sqr () const
 
UnivariateCoefficientBasisoperator+= (const Fr &scalar)
 
UnivariateCoefficientBasisoperator-= (const Fr &scalar)
 
UnivariateCoefficientBasis< Fr, domain_end, false > & operator*= (const Fr &scalar)
 
UnivariateCoefficientBasis< Fr, domain_end, false > operator+ (const Fr &scalar) const
 
UnivariateCoefficientBasis< Fr, domain_end, false > operator- (const Fr &scalar) const
 
UnivariateCoefficientBasis< Fr, domain_end, false > operator* (const Fr &scalar) const
 
auto begin ()
 
auto begin () const
 
auto end ()
 
auto end () const
 

Static Public Member Functions

static UnivariateCoefficientBasis serialize_from_buffer (uint8_t const *buffer)
 
static UnivariateCoefficientBasis get_random ()
 
static UnivariateCoefficientBasis zero ()
 
static UnivariateCoefficientBasis random_element ()
 

Public Attributes

std::array< Fr, 3 > coefficients
 coefficients is a length-3 array with the following representation:
 

Static Public Attributes

static constexpr size_t LENGTH = domain_end
 

Friends

std::ostream & operator<< (std::ostream &os, const UnivariateCoefficientBasis &u)
 

Detailed Description

template<class Fr, size_t domain_end, bool has_a0_plus_a1>
class bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >

A view of a univariate, also used to truncate univariates.

For optimization purposes, it makes sense to define univariates with large lengths and then reuse only some of the data in those univariates. We do that by taking a view of those elements and then, as needed, using this to populate new containers.

A univariate polynomial represented by its values on {domain_start, domain_start + 1,..., domain_end - 1}. For memory efficiency purposes, we store the coefficients in an array starting from 0 and make the mapping to the right domain under the hood.

We represent a UnivariateCoefficientBasis as a polynomial P(X) = a0 + a1.X + a2.X^2

Template Parameters
has_a0_plus_a1This is true if we know the sum of the above coefficients a0 + a1 This is an optimisation to improve the performance of Karatsuba polynomial multiplication, which requires this term. When converting from a degree-1 Monomial in the Lagrange basis, into a UnivariateCoefficientBasis, we can get a0
  • a1 for free. i.e. for a Lagrange-basis poly, we have P(X) = v0.L0(X) + v1.L1(X) = v0.(1 - X) + v1.X = v0 + (v1 - v0).X From this we can see that a0 = v0, a1 = v1 - v0 and therefore (a0 + a1) = v1
Note
has_a0_plus_a1 should only be true in the case where LENGTH == 2 as this is the only case where we can acquire this term for free
After performing any arithmetic operation on UnivaraiteMonomial, the output will have has_a0_plus_a1 = false

Definition at line 39 of file univariate_coefficient_basis.hpp.

Member Typedef Documentation

◆ value_type

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
using bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::value_type = Fr

Definition at line 43 of file univariate_coefficient_basis.hpp.

Constructor & Destructor Documentation

◆ UnivariateCoefficientBasis() [1/5]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::UnivariateCoefficientBasis ( )
default

◆ UnivariateCoefficientBasis() [2/5]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::UnivariateCoefficientBasis ( const UnivariateCoefficientBasis< Fr, domain_end, true > &  other)
inline

Definition at line 56 of file univariate_coefficient_basis.hpp.

◆ ~UnivariateCoefficientBasis()

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::~UnivariateCoefficientBasis ( )
default

◆ UnivariateCoefficientBasis() [3/5]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::UnivariateCoefficientBasis ( const UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 > &  other)
default

◆ UnivariateCoefficientBasis() [4/5]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::UnivariateCoefficientBasis ( UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 > &&  other)
defaultnoexcept

◆ UnivariateCoefficientBasis() [5/5]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
template<size_t other_domain_end, bool other_has_a0_plus_a1 = true>
requires (domain_end > other_domain_end)
bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::UnivariateCoefficientBasis ( const UnivariateCoefficientBasis< Fr, other_domain_end, other_has_a0_plus_a1 > &  other)
inline

Definition at line 73 of file univariate_coefficient_basis.hpp.

Member Function Documentation

◆ begin() [1/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
auto bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::begin ( )
inline

Definition at line 331 of file univariate_coefficient_basis.hpp.

◆ begin() [2/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
auto bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::begin ( ) const
inline

Definition at line 332 of file univariate_coefficient_basis.hpp.

◆ end() [1/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
auto bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::end ( )
inline

Definition at line 334 of file univariate_coefficient_basis.hpp.

◆ end() [2/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
auto bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::end ( ) const
inline

Definition at line 335 of file univariate_coefficient_basis.hpp.

◆ get_random()

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
static UnivariateCoefficientBasis bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::get_random ( )
inlinestatic

Definition at line 112 of file univariate_coefficient_basis.hpp.

◆ is_zero() [1/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
bool bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::is_zero ( ) const
inline

Definition at line 86 of file univariate_coefficient_basis.hpp.

◆ is_zero() [2/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
bool bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::is_zero ( ) const
inline

Definition at line 93 of file univariate_coefficient_basis.hpp.

◆ operator*() [1/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator* ( const Fr scalar) const
inline

Definition at line 303 of file univariate_coefficient_basis.hpp.

◆ operator*() [2/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
template<bool other_has_a0_plus_a1>
requires (LENGTH == 2)
UnivariateCoefficientBasis< Fr, 3, false > bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator* ( const UnivariateCoefficientBasis< Fr, domain_end, other_has_a0_plus_a1 > &  other) const
inline

Definition at line 166 of file univariate_coefficient_basis.hpp.

◆ operator*=()

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > & bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator*= ( const Fr scalar)
inline

Definition at line 278 of file univariate_coefficient_basis.hpp.

◆ operator+() [1/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator+ ( const Fr scalar) const
inline

Definition at line 289 of file univariate_coefficient_basis.hpp.

◆ operator+() [2/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
template<size_t other_domain_end, bool other_has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator+ ( const UnivariateCoefficientBasis< Fr, other_domain_end, other_has_a0_plus_a1 > &  other) const
inline

Definition at line 199 of file univariate_coefficient_basis.hpp.

◆ operator+=() [1/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
UnivariateCoefficientBasis & bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator+= ( const Fr scalar)
inline

Definition at line 265 of file univariate_coefficient_basis.hpp.

◆ operator+=() [2/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
template<size_t other_domain_end, bool other_has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > & bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator+= ( const UnivariateCoefficientBasis< Fr, other_domain_end, other_has_a0_plus_a1 > &  other)
inline

Definition at line 136 of file univariate_coefficient_basis.hpp.

◆ operator-() [1/3]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator- ( ) const
inline

Definition at line 230 of file univariate_coefficient_basis.hpp.

◆ operator-() [2/3]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator- ( const Fr scalar) const
inline

Definition at line 296 of file univariate_coefficient_basis.hpp.

◆ operator-() [3/3]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
template<size_t other_domain_end, bool other_has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator- ( const UnivariateCoefficientBasis< Fr, other_domain_end, other_has_a0_plus_a1 > &  other) const
inline

Definition at line 215 of file univariate_coefficient_basis.hpp.

◆ operator-=() [1/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
UnivariateCoefficientBasis & bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator-= ( const Fr scalar)
inline

Definition at line 272 of file univariate_coefficient_basis.hpp.

◆ operator-=() [2/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
template<size_t other_domain_end, bool other_has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, domain_end, false > & bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator-= ( const UnivariateCoefficientBasis< Fr, other_domain_end, other_has_a0_plus_a1 > &  other)
inline

Definition at line 151 of file univariate_coefficient_basis.hpp.

◆ operator=() [1/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
UnivariateCoefficientBasis & bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator= ( const UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 > &  other)
default

◆ operator=() [2/2]

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
UnivariateCoefficientBasis & bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator= ( UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 > &&  other)
defaultnoexcept

◆ operator==()

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
bool bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::operator== ( const UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 > &  other) const
default

◆ random_element()

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
static UnivariateCoefficientBasis bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::random_element ( )
inlinestatic

Definition at line 130 of file univariate_coefficient_basis.hpp.

◆ serialize_from_buffer()

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
static UnivariateCoefficientBasis bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::serialize_from_buffer ( uint8_t const *  buffer)
inlinestatic

Definition at line 105 of file univariate_coefficient_basis.hpp.

◆ size()

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
size_t bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::size ( )
inline

Definition at line 83 of file univariate_coefficient_basis.hpp.

◆ sqr()

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
UnivariateCoefficientBasis< Fr, 3, false > bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::sqr ( ) const
inline

Definition at line 242 of file univariate_coefficient_basis.hpp.

◆ to_buffer()

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
std::vector< uint8_t > bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::to_buffer ( ) const
inline

Definition at line 100 of file univariate_coefficient_basis.hpp.

◆ zero()

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
static UnivariateCoefficientBasis bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::zero ( )
inlinestatic

Definition at line 121 of file univariate_coefficient_basis.hpp.

Friends And Related Symbol Documentation

◆ operator<<

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
std::ostream & operator<< ( std::ostream &  os,
const UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 > &  u 
)
friend

Definition at line 315 of file univariate_coefficient_basis.hpp.

Member Data Documentation

◆ coefficients

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
std::array<Fr, 3> bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::coefficients

coefficients is a length-3 array with the following representation:

This class represents a polynomial P(X) = a0 + a1.X + a2.X^2 We define coefficients[0] = a0 and coefficients[1] = a1 If LENGTH == 2 AND has_a0_plus_a1 = true then coefficients[2] = a0 + a1 If LENGTH == 3 then coefficients[3] = a2

Definition at line 52 of file univariate_coefficient_basis.hpp.

◆ LENGTH

template<class Fr , size_t domain_end, bool has_a0_plus_a1>
constexpr size_t bb::UnivariateCoefficientBasis< Fr, domain_end, has_a0_plus_a1 >::LENGTH = domain_end
staticconstexpr

Definition at line 41 of file univariate_coefficient_basis.hpp.


The documentation for this class was generated from the following file: