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

A univariate polynomial represented by its values on {0, 1,..., domain_end - 1}. More...

#include <univariate.hpp>

Public Types

using View = UnivariateView< Fr, domain_end >
 
using CoefficientAccumulator = UnivariateCoefficientBasis< Fr, MONOMIAL_LENGTH, true >
 
using value_type = Fr
 

Public Member Functions

 Univariate ()=default
 
 Univariate (const std::array< Fr, LENGTH > &evaluations)
 
 ~Univariate ()=default
 
 Univariate (const Univariate &other)=default
 
 Univariate (Univariate &&other) noexcept=default
 
Univariateoperator= (const Univariate &other)=default
 
Univariateoperator= (Univariate &&other) noexcept=default
 
 operator UnivariateCoefficientBasis< Fr, 2, true > () const
 
template<bool has_a0_plus_a1>
 Univariate (const UnivariateCoefficientBasis< Fr, 2, has_a0_plus_a1 > &monomial)
 
template<bool has_a0_plus_a1>
 Univariate (const UnivariateCoefficientBasis< Fr, 3, has_a0_plus_a1 > &monomial)
 
 Univariate (const Fr &value)
 
 Univariate (const UnivariateView< Fr, domain_end > &in)
 
Frvalue_at (size_t i)
 
const Frvalue_at (size_t i) const
 
size_t size ()
 
bool is_zero () const
 
std::vector< uint8_t > to_buffer () const
 
bool operator== (const Univariate &other) const =default
 
Univariateoperator+= (const Univariate &other)
 
Univariateoperator-= (const Univariate &other)
 
Univariateoperator*= (const Univariate &other)
 
Univariateself_sqr ()
 
Univariate operator+ (const Univariate &other) const
 
Univariate operator- (const Univariate &other) const
 
Univariate operator- () const
 
Univariate operator* (const Univariate &other) const
 
Univariate sqr () const
 
Univariateoperator+= (const Fr &scalar)
 
Univariateoperator-= (const Fr &scalar)
 
Univariateoperator*= (const Fr &scalar)
 
Univariate operator+ (const Fr &scalar) const
 
Univariate operator- (const Fr &scalar) const
 
Univariate operator* (const Fr &scalar) const
 
Univariateoperator+= (const UnivariateView< Fr, domain_end > &view)
 
Univariateoperator-= (const UnivariateView< Fr, domain_end > &view)
 
Univariateoperator*= (const UnivariateView< Fr, domain_end > &view)
 
Univariate operator+ (const UnivariateView< Fr, domain_end > &view) const
 
Univariate operator- (const UnivariateView< Fr, domain_end > &view) const
 
Univariate operator* (const UnivariateView< Fr, domain_end > &view) const
 
template<size_t EXTENDED_DOMAIN_END>
requires (domain_end == 2)
 operator Univariate< Fr, EXTENDED_DOMAIN_END > ()
 
template<size_t EXTENDED_DOMAIN_END>
Univariate< Fr, EXTENDED_DOMAIN_END > extend_to () const
 Given a univariate f represented by {f(0), ..., f(domain_end - 1)}, compute the evaluations {f(domain_end),..., f(extended_domain_end -1)} and return the Univariate represented by {f(0),..., f(extended_domain_end -1)}.
 
template<size_t INITIAL_LENGTH>
void self_extend_from ()
 Compute the evaluations of the polynomial from the INITIAL_LENGTH up to the total LENGTH. Currently only supports INITIAL_LENGTH = 2.
 
Fr evaluate (const Fr &u) const
 Evaluate a univariate at a point u not known at compile time and assumed not to be in the domain (else we divide by zero).
 
auto begin ()
 
auto begin () const
 
auto end ()
 
auto end () const
 

Static Public Member Functions

static Univariate serialize_from_buffer (uint8_t const *buffer)
 
static Univariate get_random ()
 
static Univariate zero ()
 

Public Attributes

std::array< Fr, LENGTHevaluations
 

Static Public Attributes

static constexpr size_t LENGTH = domain_end
 
static constexpr size_t MONOMIAL_LENGTH = LENGTH > 1 ? 2 : 1
 

Friends

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

Detailed Description

template<class Fr, size_t domain_end>
class bb::Univariate< Fr, domain_end >

A univariate polynomial represented by its values on {0, 1,..., domain_end - 1}.

Definition at line 32 of file univariate.hpp.

Member Typedef Documentation

◆ CoefficientAccumulator

template<class Fr , size_t domain_end>
using bb::Univariate< Fr, domain_end >::CoefficientAccumulator = UnivariateCoefficientBasis<Fr, MONOMIAL_LENGTH, true>

Definition at line 37 of file univariate.hpp.

◆ value_type

template<class Fr , size_t domain_end>
using bb::Univariate< Fr, domain_end >::value_type = Fr

Definition at line 39 of file univariate.hpp.

◆ View

template<class Fr , size_t domain_end>
using bb::Univariate< Fr, domain_end >::View = UnivariateView<Fr, domain_end>

Definition at line 35 of file univariate.hpp.

Constructor & Destructor Documentation

◆ Univariate() [1/8]

template<class Fr , size_t domain_end>
bb::Univariate< Fr, domain_end >::Univariate ( )
default

◆ Univariate() [2/8]

template<class Fr , size_t domain_end>
bb::Univariate< Fr, domain_end >::Univariate ( const std::array< Fr, LENGTH > &  evaluations)
inlineexplicit

Definition at line 46 of file univariate.hpp.

◆ ~Univariate()

template<class Fr , size_t domain_end>
bb::Univariate< Fr, domain_end >::~Univariate ( )
default

◆ Univariate() [3/8]

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

◆ Univariate() [4/8]

template<class Fr , size_t domain_end>
bb::Univariate< Fr, domain_end >::Univariate ( Univariate< Fr, domain_end > &&  other)
defaultnoexcept

◆ Univariate() [5/8]

template<class Fr , size_t domain_end>
template<bool has_a0_plus_a1>
bb::Univariate< Fr, domain_end >::Univariate ( const UnivariateCoefficientBasis< Fr, 2, has_a0_plus_a1 > &  monomial)
inline

Definition at line 68 of file univariate.hpp.

◆ Univariate() [6/8]

template<class Fr , size_t domain_end>
template<bool has_a0_plus_a1>
bb::Univariate< Fr, domain_end >::Univariate ( const UnivariateCoefficientBasis< Fr, 3, has_a0_plus_a1 > &  monomial)
inline

Definition at line 81 of file univariate.hpp.

◆ Univariate() [7/8]

template<class Fr , size_t domain_end>
bb::Univariate< Fr, domain_end >::Univariate ( const Fr value)
inlineexplicit

Definition at line 99 of file univariate.hpp.

◆ Univariate() [8/8]

template<class Fr , size_t domain_end>
bb::Univariate< Fr, domain_end >::Univariate ( const UnivariateView< Fr, domain_end > &  in)
inlineexplicit

Definition at line 107 of file univariate.hpp.

Member Function Documentation

◆ begin() [1/2]

template<class Fr , size_t domain_end>
auto bb::Univariate< Fr, domain_end >::begin ( )
inline

Definition at line 534 of file univariate.hpp.

◆ begin() [2/2]

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

Definition at line 535 of file univariate.hpp.

◆ end() [1/2]

template<class Fr , size_t domain_end>
auto bb::Univariate< Fr, domain_end >::end ( )
inline

Definition at line 537 of file univariate.hpp.

◆ end() [2/2]

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

Definition at line 538 of file univariate.hpp.

◆ evaluate()

template<class Fr , size_t domain_end>
Fr bb::Univariate< Fr, domain_end >::evaluate ( const Fr u) const
inline

Evaluate a univariate at a point u not known at compile time and assumed not to be in the domain (else we divide by zero).

Parameters
f
Returns
Fr

Definition at line 503 of file univariate.hpp.

◆ extend_to()

template<class Fr , size_t domain_end>
template<size_t EXTENDED_DOMAIN_END>
Univariate< Fr, EXTENDED_DOMAIN_END > bb::Univariate< Fr, domain_end >::extend_to ( ) const
inline

Given a univariate f represented by {f(0), ..., f(domain_end - 1)}, compute the evaluations {f(domain_end),..., f(extended_domain_end -1)} and return the Univariate represented by {f(0),..., f(extended_domain_end -1)}.

Write v_i = f(x_i) on the domain {x_0, ..., x_{domain_end-1}}. To efficiently compute the needed values of f, we use the barycentric formula

  • f(x) = B(x) Σ_{i=0}^{domain_end-1} v_i / (d_i*(x-x_i)) where
  • B(x) = Π_{i=0}^{domain_end-1} (x-x_i)
  • d_i = Π_{j ∈ {0, ..., domain_end-1}, j≠i} (x_i-x_j) for i ∈ {0, ..., domain_end-1}

When the domain size is two, extending f = v0(1-X) + v1X to a new value involves just one addition and a subtraction: setting Δ = v1-v0, the values of f(X) are f(0)=v0, f(1)= v0 + Δ, v2 = f(1) + Δ, v3 = f(2) + Δ...

Definition at line 352 of file univariate.hpp.

◆ get_random()

template<class Fr , size_t domain_end>
static Univariate bb::Univariate< Fr, domain_end >::get_random ( )
inlinestatic

Definition at line 143 of file univariate.hpp.

◆ is_zero()

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

Definition at line 120 of file univariate.hpp.

◆ operator Univariate< Fr, EXTENDED_DOMAIN_END >()

template<class Fr , size_t domain_end>
template<size_t EXTENDED_DOMAIN_END>
requires (domain_end == 2)
bb::Univariate< Fr, domain_end >::operator Univariate< Fr, EXTENDED_DOMAIN_END > ( )
inlineexplicit

Definition at line 329 of file univariate.hpp.

◆ operator UnivariateCoefficientBasis< Fr, 2, true >()

template<class Fr , size_t domain_end>
bb::Univariate< Fr, domain_end >::operator UnivariateCoefficientBasis< Fr, 2, true > ( ) const
inlineexplicit

Definition at line 55 of file univariate.hpp.

◆ operator*() [1/3]

template<class Fr , size_t domain_end>
Univariate bb::Univariate< Fr, domain_end >::operator* ( const Fr scalar) const
inline

Definition at line 259 of file univariate.hpp.

◆ operator*() [2/3]

template<class Fr , size_t domain_end>
Univariate bb::Univariate< Fr, domain_end >::operator* ( const Univariate< Fr, domain_end > &  other) const
inline

Definition at line 207 of file univariate.hpp.

◆ operator*() [3/3]

template<class Fr , size_t domain_end>
Univariate bb::Univariate< Fr, domain_end >::operator* ( const UnivariateView< Fr, domain_end > &  view) const
inline

Definition at line 305 of file univariate.hpp.

◆ operator*=() [1/3]

template<class Fr , size_t domain_end>
Univariate & bb::Univariate< Fr, domain_end >::operator*= ( const Fr scalar)
inline

Definition at line 237 of file univariate.hpp.

◆ operator*=() [2/3]

template<class Fr , size_t domain_end>
Univariate & bb::Univariate< Fr, domain_end >::operator*= ( const Univariate< Fr, domain_end > &  other)
inline

Definition at line 171 of file univariate.hpp.

◆ operator*=() [3/3]

template<class Fr , size_t domain_end>
Univariate & bb::Univariate< Fr, domain_end >::operator*= ( const UnivariateView< Fr, domain_end > &  view)
inline

Definition at line 283 of file univariate.hpp.

◆ operator+() [1/3]

template<class Fr , size_t domain_end>
Univariate bb::Univariate< Fr, domain_end >::operator+ ( const Fr scalar) const
inline

Definition at line 245 of file univariate.hpp.

◆ operator+() [2/3]

template<class Fr , size_t domain_end>
Univariate bb::Univariate< Fr, domain_end >::operator+ ( const Univariate< Fr, domain_end > &  other) const
inline

Definition at line 185 of file univariate.hpp.

◆ operator+() [3/3]

template<class Fr , size_t domain_end>
Univariate bb::Univariate< Fr, domain_end >::operator+ ( const UnivariateView< Fr, domain_end > &  view) const
inline

Definition at line 291 of file univariate.hpp.

◆ operator+=() [1/3]

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

Definition at line 222 of file univariate.hpp.

◆ operator+=() [2/3]

template<class Fr , size_t domain_end>
Univariate & bb::Univariate< Fr, domain_end >::operator+= ( const Univariate< Fr, domain_end > &  other)
inline

Definition at line 157 of file univariate.hpp.

◆ operator+=() [3/3]

template<class Fr , size_t domain_end>
Univariate & bb::Univariate< Fr, domain_end >::operator+= ( const UnivariateView< Fr, domain_end > &  view)
inline

Definition at line 267 of file univariate.hpp.

◆ operator-() [1/4]

template<class Fr , size_t domain_end>
Univariate bb::Univariate< Fr, domain_end >::operator- ( ) const
inline

Definition at line 198 of file univariate.hpp.

◆ operator-() [2/4]

template<class Fr , size_t domain_end>
Univariate bb::Univariate< Fr, domain_end >::operator- ( const Fr scalar) const
inline

Definition at line 252 of file univariate.hpp.

◆ operator-() [3/4]

template<class Fr , size_t domain_end>
Univariate bb::Univariate< Fr, domain_end >::operator- ( const Univariate< Fr, domain_end > &  other) const
inline

Definition at line 192 of file univariate.hpp.

◆ operator-() [4/4]

template<class Fr , size_t domain_end>
Univariate bb::Univariate< Fr, domain_end >::operator- ( const UnivariateView< Fr, domain_end > &  view) const
inline

Definition at line 298 of file univariate.hpp.

◆ operator-=() [1/3]

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

Definition at line 230 of file univariate.hpp.

◆ operator-=() [2/3]

template<class Fr , size_t domain_end>
Univariate & bb::Univariate< Fr, domain_end >::operator-= ( const Univariate< Fr, domain_end > &  other)
inline

Definition at line 164 of file univariate.hpp.

◆ operator-=() [3/3]

template<class Fr , size_t domain_end>
Univariate & bb::Univariate< Fr, domain_end >::operator-= ( const UnivariateView< Fr, domain_end > &  view)
inline

Definition at line 275 of file univariate.hpp.

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ operator==()

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

◆ self_extend_from()

template<class Fr , size_t domain_end>
template<size_t INITIAL_LENGTH>
void bb::Univariate< Fr, domain_end >::self_extend_from ( )
inline

Compute the evaluations of the polynomial from the INITIAL_LENGTH up to the total LENGTH. Currently only supports INITIAL_LENGTH = 2.

Template Parameters
INITIAL_LENGTH

Definition at line 483 of file univariate.hpp.

◆ self_sqr()

template<class Fr , size_t domain_end>
Univariate & bb::Univariate< Fr, domain_end >::self_sqr ( )
inline

Definition at line 178 of file univariate.hpp.

◆ serialize_from_buffer()

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

Definition at line 136 of file univariate.hpp.

◆ size()

template<class Fr , size_t domain_end>
size_t bb::Univariate< Fr, domain_end >::size ( )
inline

Definition at line 117 of file univariate.hpp.

◆ sqr()

template<class Fr , size_t domain_end>
Univariate bb::Univariate< Fr, domain_end >::sqr ( ) const
inline

Definition at line 214 of file univariate.hpp.

◆ to_buffer()

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

Definition at line 131 of file univariate.hpp.

◆ value_at() [1/2]

template<class Fr , size_t domain_end>
Fr & bb::Univariate< Fr, domain_end >::value_at ( size_t  i)
inline

Definition at line 115 of file univariate.hpp.

◆ value_at() [2/2]

template<class Fr , size_t domain_end>
const Fr & bb::Univariate< Fr, domain_end >::value_at ( size_t  i) const
inline

Definition at line 116 of file univariate.hpp.

◆ zero()

template<class Fr , size_t domain_end>
static Univariate bb::Univariate< Fr, domain_end >::zero ( )
inlinestatic

Definition at line 152 of file univariate.hpp.

Friends And Related Symbol Documentation

◆ operator<<

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

Definition at line 313 of file univariate.hpp.

Member Data Documentation

◆ evaluations

template<class Fr , size_t domain_end>
std::array<Fr, LENGTH> bb::Univariate< Fr, domain_end >::evaluations

Definition at line 42 of file univariate.hpp.

◆ LENGTH

template<class Fr , size_t domain_end>
constexpr size_t bb::Univariate< Fr, domain_end >::LENGTH = domain_end
staticconstexpr

Definition at line 34 of file univariate.hpp.

◆ MONOMIAL_LENGTH

template<class Fr , size_t domain_end>
constexpr size_t bb::Univariate< Fr, domain_end >::MONOMIAL_LENGTH = LENGTH > 1 ? 2 : 1
staticconstexpr

Definition at line 36 of file univariate.hpp.


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