pub trait Hal {
type Field: Field<Elem = Self::Elem, ExtElem = Self::ExtElem>;
type Elem: Elem + RootsOfUnity;
type ExtElem: ExtElem<SubElem = Self::Elem>;
type Buffer<T: Clone + Debug + PartialEq>: Buffer<T>;
const CHECK_SIZE: usize = _;
Show 31 methods
// Required methods
fn has_unified_memory(&self) -> bool;
fn get_hash_suite(&self) -> &HashSuite<Self::Field>;
fn alloc_digest(
&self,
name: &'static str,
size: usize,
) -> Self::Buffer<Digest>;
fn alloc_elem(
&self,
name: &'static str,
size: usize,
) -> Self::Buffer<Self::Elem>;
fn alloc_extelem(
&self,
name: &'static str,
size: usize,
) -> Self::Buffer<Self::ExtElem>;
fn alloc_u32(&self, name: &'static str, size: usize) -> Self::Buffer<u32>;
fn copy_from_digest(
&self,
name: &'static str,
slice: &[Digest],
) -> Self::Buffer<Digest>;
fn copy_from_elem(
&self,
name: &'static str,
slice: &[Self::Elem],
) -> Self::Buffer<Self::Elem>;
fn copy_from_extelem(
&self,
name: &'static str,
slice: &[Self::ExtElem],
) -> Self::Buffer<Self::ExtElem>;
fn copy_from_u32(
&self,
name: &'static str,
slice: &[u32],
) -> Self::Buffer<u32>;
fn batch_expand_into_evaluate_ntt(
&self,
output: &Self::Buffer<Self::Elem>,
input: &Self::Buffer<Self::Elem>,
count: usize,
expand_bits: usize,
);
fn batch_interpolate_ntt(&self, io: &Self::Buffer<Self::Elem>, count: usize);
fn batch_bit_reverse(&self, io: &Self::Buffer<Self::Elem>, count: usize);
fn batch_evaluate_any(
&self,
coeffs: &Self::Buffer<Self::Elem>,
poly_count: usize,
which: &Self::Buffer<u32>,
xs: &Self::Buffer<Self::ExtElem>,
out: &Self::Buffer<Self::ExtElem>,
);
fn zk_shift(&self, io: &Self::Buffer<Self::Elem>, count: usize);
fn mix_poly_coeffs(
&self,
out: &Self::Buffer<Self::ExtElem>,
mix_start: &Self::ExtElem,
mix: &Self::ExtElem,
input: &Self::Buffer<Self::Elem>,
combos: &Self::Buffer<u32>,
input_size: usize,
count: usize,
);
fn eltwise_add_elem(
&self,
output: &Self::Buffer<Self::Elem>,
input1: &Self::Buffer<Self::Elem>,
input2: &Self::Buffer<Self::Elem>,
);
fn eltwise_sum_extelem(
&self,
output: &Self::Buffer<Self::Elem>,
input: &Self::Buffer<Self::ExtElem>,
);
fn eltwise_copy_elem(
&self,
output: &Self::Buffer<Self::Elem>,
input: &Self::Buffer<Self::Elem>,
);
fn eltwise_copy_elem_slice(
&self,
into: &Self::Buffer<Self::Elem>,
from: &[Self::Elem],
from_rows: usize,
from_cols: usize,
from_offset: usize,
from_stride: usize,
into_offset: usize,
into_stride: usize,
);
fn eltwise_zeroize_elem(&self, elems: &Self::Buffer<Self::Elem>);
fn fri_fold(
&self,
output: &Self::Buffer<Self::Elem>,
input: &Self::Buffer<Self::Elem>,
mix: &Self::ExtElem,
);
fn hash_rows(
&self,
output: &Self::Buffer<Digest>,
matrix: &Self::Buffer<Self::Elem>,
);
fn hash_fold(
&self,
io: &Self::Buffer<Digest>,
input_size: usize,
output_size: usize,
);
fn gather_sample(
&self,
dst: &Self::Buffer<Self::Elem>,
src: &Self::Buffer<Self::Elem>,
idx: usize,
size: usize,
stride: usize,
);
fn scatter(
&self,
into: &Self::Buffer<Self::Elem>,
index: &[u32],
offsets: &[u32],
values: &[Self::Elem],
);
fn prefix_products(&self, io: &Self::Buffer<Self::ExtElem>);
// Provided methods
fn alloc_elem_init(
&self,
name: &'static str,
size: usize,
value: Self::Elem,
) -> Self::Buffer<Self::Elem> { ... }
fn alloc_extelem_zeroed(
&self,
name: &'static str,
size: usize,
) -> Self::Buffer<Self::ExtElem> { ... }
fn combos_prepare(
&self,
combos: &Self::Buffer<Self::ExtElem>,
coeff_u: &[Self::ExtElem],
combo_count: usize,
cycles: usize,
reg_sizes: &[u32],
reg_combo_ids: &[u32],
mix: &Self::ExtElem,
) { ... }
fn combos_divide(
&self,
combos: &Self::Buffer<Self::ExtElem>,
chunks: Vec<(usize, Vec<Self::ExtElem>)>,
cycles: usize,
) { ... }
}
Available on crate feature
prove
only.Provided Associated Constants§
const CHECK_SIZE: usize = _
Required Associated Types§
type Field: Field<Elem = Self::Elem, ExtElem = Self::ExtElem>
type Elem: Elem + RootsOfUnity
type ExtElem: ExtElem<SubElem = Self::Elem>
type Buffer<T: Clone + Debug + PartialEq>: Buffer<T>
Required Methods§
fn has_unified_memory(&self) -> bool
fn get_hash_suite(&self) -> &HashSuite<Self::Field>
fn alloc_digest(&self, name: &'static str, size: usize) -> Self::Buffer<Digest>
fn alloc_elem( &self, name: &'static str, size: usize, ) -> Self::Buffer<Self::Elem>
fn alloc_extelem( &self, name: &'static str, size: usize, ) -> Self::Buffer<Self::ExtElem>
fn alloc_u32(&self, name: &'static str, size: usize) -> Self::Buffer<u32>
fn copy_from_digest( &self, name: &'static str, slice: &[Digest], ) -> Self::Buffer<Digest>
fn copy_from_elem( &self, name: &'static str, slice: &[Self::Elem], ) -> Self::Buffer<Self::Elem>
fn copy_from_extelem( &self, name: &'static str, slice: &[Self::ExtElem], ) -> Self::Buffer<Self::ExtElem>
fn copy_from_u32(&self, name: &'static str, slice: &[u32]) -> Self::Buffer<u32>
fn batch_expand_into_evaluate_ntt( &self, output: &Self::Buffer<Self::Elem>, input: &Self::Buffer<Self::Elem>, count: usize, expand_bits: usize, )
fn batch_interpolate_ntt(&self, io: &Self::Buffer<Self::Elem>, count: usize)
fn batch_bit_reverse(&self, io: &Self::Buffer<Self::Elem>, count: usize)
fn batch_evaluate_any( &self, coeffs: &Self::Buffer<Self::Elem>, poly_count: usize, which: &Self::Buffer<u32>, xs: &Self::Buffer<Self::ExtElem>, out: &Self::Buffer<Self::ExtElem>, )
fn zk_shift(&self, io: &Self::Buffer<Self::Elem>, count: usize)
fn mix_poly_coeffs( &self, out: &Self::Buffer<Self::ExtElem>, mix_start: &Self::ExtElem, mix: &Self::ExtElem, input: &Self::Buffer<Self::Elem>, combos: &Self::Buffer<u32>, input_size: usize, count: usize, )
fn eltwise_add_elem( &self, output: &Self::Buffer<Self::Elem>, input1: &Self::Buffer<Self::Elem>, input2: &Self::Buffer<Self::Elem>, )
fn eltwise_sum_extelem( &self, output: &Self::Buffer<Self::Elem>, input: &Self::Buffer<Self::ExtElem>, )
fn eltwise_copy_elem( &self, output: &Self::Buffer<Self::Elem>, input: &Self::Buffer<Self::Elem>, )
fn eltwise_copy_elem_slice( &self, into: &Self::Buffer<Self::Elem>, from: &[Self::Elem], from_rows: usize, from_cols: usize, from_offset: usize, from_stride: usize, into_offset: usize, into_stride: usize, )
fn eltwise_zeroize_elem(&self, elems: &Self::Buffer<Self::Elem>)
fn fri_fold( &self, output: &Self::Buffer<Self::Elem>, input: &Self::Buffer<Self::Elem>, mix: &Self::ExtElem, )
fn hash_rows( &self, output: &Self::Buffer<Digest>, matrix: &Self::Buffer<Self::Elem>, )
fn hash_fold( &self, io: &Self::Buffer<Digest>, input_size: usize, output_size: usize, )
fn gather_sample( &self, dst: &Self::Buffer<Self::Elem>, src: &Self::Buffer<Self::Elem>, idx: usize, size: usize, stride: usize, )
fn scatter( &self, into: &Self::Buffer<Self::Elem>, index: &[u32], offsets: &[u32], values: &[Self::Elem], )
fn prefix_products(&self, io: &Self::Buffer<Self::ExtElem>)
Provided Methods§
fn alloc_elem_init( &self, name: &'static str, size: usize, value: Self::Elem, ) -> Self::Buffer<Self::Elem>
fn alloc_extelem_zeroed( &self, name: &'static str, size: usize, ) -> Self::Buffer<Self::ExtElem>
fn combos_prepare( &self, combos: &Self::Buffer<Self::ExtElem>, coeff_u: &[Self::ExtElem], combo_count: usize, cycles: usize, reg_sizes: &[u32], reg_combo_ids: &[u32], mix: &Self::ExtElem, )
fn combos_divide( &self, combos: &Self::Buffer<Self::ExtElem>, chunks: Vec<(usize, Vec<Self::ExtElem>)>, cycles: usize, )
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.