Skip to content

Commit e56c8e2

Browse files
committed
chore: simplify
1 parent b1a658f commit e56c8e2

File tree

11 files changed

+22
-160
lines changed

11 files changed

+22
-160
lines changed

crates/compiler/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ p3-poseidon2-air.workspace = true
3131
lookup.workspace = true
3232
sumcheck.workspace = true
3333
vm.workspace = true
34+
thiserror.workspace = true
3435

3536
[dev-dependencies]
3637
hashsig.workspace = true

crates/compiler/src/parser.rs

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::collections::BTreeMap;
33
use p3_field::PrimeCharacteristicRing;
44
use pest::{Parser, iterators::Pair};
55
use pest_derive::Parser;
6+
use thiserror::Error;
67
use utils::ToUsize;
78
use vm::F;
89

@@ -18,29 +19,15 @@ use crate::{
1819
#[grammar = "grammar.pest"]
1920
pub struct LangParser;
2021

21-
#[derive(Debug)]
22+
#[derive(Debug, Error)]
2223
pub(crate) enum ParseError {
23-
PestError(pest::error::Error<Rule>),
24-
SemanticError(String),
25-
}
26-
27-
impl From<pest::error::Error<Rule>> for ParseError {
28-
fn from(error: pest::error::Error<Rule>) -> Self {
29-
Self::PestError(error)
30-
}
31-
}
24+
#[error(transparent)]
25+
PestError(#[from] pest::error::Error<Rule>),
3226

33-
impl std::fmt::Display for ParseError {
34-
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35-
match self {
36-
Self::PestError(e) => write!(f, "Parse error: {e}"),
37-
Self::SemanticError(e) => write!(f, "Semantic error: {e}"),
38-
}
39-
}
27+
#[error("Semantic error: {0}")]
28+
SemanticError(String),
4029
}
4130

42-
impl std::error::Error for ParseError {}
43-
4431
pub(crate) fn parse_program(input: &str) -> Result<Program, ParseError> {
4532
let input = remove_comments(input);
4633
let mut pairs = LangParser::parse(Rule::program, &input)?;

crates/pcs/src/combinatorics.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ impl TreeOfVariablesInner {
5454

5555
impl TreeOfVariables {
5656
pub fn compute_optimal(vars_per_polynomial: Vec<usize>) -> Self {
57-
let n = vars_per_polynomial.len();
58-
assert!(n > 0);
57+
assert!(!vars_per_polynomial.is_empty());
5958

6059
let root = Self::compute_greedy(&vars_per_polynomial);
6160

crates/utils/src/constraints_checker.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ impl<'a, EF: ExtensionField<PF<EF>> + ExtensionField<IF>, IF: ExtensionField<PF<
4949

5050
#[inline]
5151
fn assert_zero<I: Into<Self::Expr>>(&mut self, x: I) {
52-
let x: IF = x.into();
52+
let x = x.into();
5353
if !x.is_zero() {
5454
self.errors.push(self.constraint_index);
5555
}

crates/utils/src/constraints_folder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ where
4949

5050
#[inline]
5151
fn assert_zero<I: Into<Self::Expr>>(&mut self, x: I) {
52-
let x: NF = x.into();
52+
let x = x.into();
5353
let alpha_power = self.alpha_powers[self.constraint_index];
5454
self.accumulator += alpha_power * x;
5555
self.constraint_index += 1;

crates/utils/src/misc.rs

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
use std::ops::Range;
2-
3-
use p3_field::{BasedVectorSpace, ExtensionField, Field};
1+
use p3_field::{ExtensionField, Field};
42
use rayon::prelude::*;
53

64
use crate::PF;
@@ -15,31 +13,6 @@ pub fn transmute_slice<Before, After>(slice: &[Before]) -> &[After] {
1513
unsafe { std::slice::from_raw_parts(slice.as_ptr().cast::<After>(), new_len) }
1614
}
1715

18-
#[must_use]
19-
pub const fn shift_range(range: Range<usize>, shift: usize) -> Range<usize> {
20-
Range {
21-
start: range.start + shift,
22-
end: range.end + shift,
23-
}
24-
}
25-
26-
#[must_use]
27-
pub const fn diff_to_next_power_of_two(n: usize) -> usize {
28-
n.next_power_of_two() - n
29-
}
30-
31-
pub fn left_mut<A>(slice: &mut [A]) -> &mut [A] {
32-
assert!(slice.len().is_multiple_of(2));
33-
let mid = slice.len() / 2;
34-
&mut slice[..mid]
35-
}
36-
37-
pub fn right_mut<A>(slice: &mut [A]) -> &mut [A] {
38-
assert!(slice.len().is_multiple_of(2));
39-
let mid = slice.len() / 2;
40-
&mut slice[mid..]
41-
}
42-
4316
pub fn left_ref<A>(slice: &[A]) -> &[A] {
4417
assert!(slice.len().is_multiple_of(2));
4518
let mid = slice.len() / 2;
@@ -71,9 +44,9 @@ pub fn field_slice_as_base<F: Field, EF: ExtensionField<F>>(slice: &[EF]) -> Opt
7144
}
7245

7346
pub fn dot_product_with_base<EF: ExtensionField<PF<EF>>>(slice: &[EF]) -> EF {
74-
assert_eq!(slice.len(), <EF as BasedVectorSpace<PF<EF>>>::DIMENSION);
47+
assert_eq!(slice.len(), EF::DIMENSION);
7548
(0..EF::DIMENSION)
76-
.map(|i| slice[i] * <EF as BasedVectorSpace<PF<EF>>>::ith_basis_element(i).unwrap())
49+
.map(|i| slice[i] * EF::ith_basis_element(i).unwrap())
7750
.sum::<EF>()
7851
}
7952

crates/utils/src/multilinear.rs

Lines changed: 1 addition & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,12 @@
11
use std::borrow::Borrow;
22

3-
use p3_field::{BasedVectorSpace, ExtensionField, Field, PackedValue, dot_product};
3+
use p3_field::{ExtensionField, Field, dot_product};
44
use rayon::prelude::*;
55
use tracing::instrument;
66
use whir_p3::poly::evals::EvaluationsList;
77

88
use crate::{EFPacking, PF};
99

10-
pub fn fold_multilinear_in_small_field<F: Field, EF: ExtensionField<F>, D>(
11-
m: &[D],
12-
scalars: &[F],
13-
) -> Vec<EF> {
14-
// TODO ...
15-
assert!(scalars.len().is_power_of_two() && scalars.len() <= m.len());
16-
let new_size = m.len() / scalars.len();
17-
18-
let dim = <EF as BasedVectorSpace<F>>::DIMENSION;
19-
20-
let m_transmuted: &[F] =
21-
unsafe { std::slice::from_raw_parts(m.as_ptr().cast::<F>(), m.len() * dim) };
22-
let res_transmuted = {
23-
let new_size = m.len() * dim / scalars.len();
24-
25-
if new_size < F::Packing::WIDTH {
26-
(0..new_size)
27-
.into_par_iter()
28-
.map(|i| {
29-
scalars
30-
.iter()
31-
.enumerate()
32-
.map(|(j, s)| *s * m_transmuted[i + j * new_size])
33-
.sum()
34-
})
35-
.collect()
36-
} else {
37-
let inners = (0..scalars.len())
38-
.map(|i| &m_transmuted[i * new_size..(i + 1) * new_size])
39-
.collect::<Vec<_>>();
40-
let inners_packed = inners
41-
.iter()
42-
.map(|&inner| F::Packing::pack_slice(inner))
43-
.collect::<Vec<_>>();
44-
45-
let packed_res = (0..new_size / F::Packing::WIDTH)
46-
.into_par_iter()
47-
.map(|i| {
48-
scalars
49-
.iter()
50-
.enumerate()
51-
.map(|(j, s)| inners_packed[j][i] * *s)
52-
.sum::<F::Packing>()
53-
})
54-
.collect::<Vec<_>>();
55-
56-
let mut unpacked: Vec<F> = unsafe { std::mem::transmute(packed_res) };
57-
unsafe {
58-
unpacked.set_len(new_size);
59-
}
60-
61-
unpacked
62-
}
63-
};
64-
let res: Vec<EF> = unsafe {
65-
let mut res: Vec<EF> = std::mem::transmute(res_transmuted);
66-
res.set_len(new_size);
67-
res
68-
};
69-
70-
res
71-
}
72-
7310
pub fn fold_multilinear_in_large_field<F: Field, EF: ExtensionField<F>>(
7411
m: &[F],
7512
scalars: &[EF],
@@ -145,40 +82,6 @@ pub fn batch_fold_multilinear_in_large_field_packed<EF: ExtensionField<PF<EF>>>(
14582
.collect()
14683
}
14784

148-
pub fn batch_fold_multilinear_in_small_field<F: Field, EF: ExtensionField<F>>(
149-
polys: &[&[EF]],
150-
scalars: &[F],
151-
) -> Vec<Vec<EF>> {
152-
polys
153-
.par_iter()
154-
.map(|poly| fold_multilinear_in_small_field(poly, scalars))
155-
.collect()
156-
}
157-
158-
pub fn batch_fold_multilinear_in_small_field_packed<EF: ExtensionField<PF<EF>>>(
159-
polys: &[&[EFPacking<EF>]],
160-
scalars: &[PF<EF>],
161-
) -> Vec<Vec<EF>> {
162-
polys
163-
.par_iter()
164-
.map(|poly| fold_multilinear_in_small_field(poly, scalars))
165-
.collect()
166-
}
167-
168-
// pub fn packed_multilinear<F: Field>(pols: &[Vec<F>]) -> Vec<F> {
169-
// let n_vars = pols[0].num_variables();
170-
// assert!(pols.iter().all(|p| p.num_variables() == n_vars));
171-
// let packed_len = (pols.len() << n_vars).next_power_of_two();
172-
// let mut dst = F::zero_vec(packed_len);
173-
// let mut offset = 0;
174-
// // TODO parallelize
175-
// for pol in pols {
176-
// dst[offset..offset + pol.num_evals()].copy_from_slice(pol);
177-
// offset += pol.num_evals();
178-
// }
179-
// dst
180-
// }
181-
18285
#[instrument(name = "add_multilinears", skip_all)]
18386
pub fn add_multilinears<F: Field>(pol1: &[F], pol2: &[F]) -> Vec<F> {
18487
assert_eq!(pol1.len(), pol2.len());

crates/utils/src/packed_constraints_folder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ impl<'a, EF: ExtensionField<PF<EF>>> AirBuilder for ConstraintFolderPackedBase<'
4646
#[inline]
4747
fn assert_zero<I: Into<Self::Expr>>(&mut self, x: I) {
4848
let alpha_power = self.alpha_powers[self.constraint_index];
49-
let x: PFPacking<EF> = x.into();
49+
let x = x.into();
5050
self.accumulator += Into::<EFPacking<EF>>::into(alpha_power) * x;
5151
self.constraint_index += 1;
5252
}
@@ -102,7 +102,7 @@ impl<'a, EF: ExtensionField<PF<EF>>> AirBuilder for ConstraintFolderPackedExtens
102102
#[inline]
103103
fn assert_zero<I: Into<Self::Expr>>(&mut self, x: I) {
104104
let alpha_power = self.alpha_powers[self.constraint_index];
105-
let x: EFPacking<EF> = x.into();
105+
let x = x.into();
106106
self.accumulator += x * alpha_power;
107107
self.constraint_index += 1;
108108
}

crates/utils/src/wrappers.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ pub fn pack_extension<EF: ExtensionField<PF<EF>>>(slice: &[EF]) -> Vec<EFPacking
6565
slice
6666
.par_chunks_exact(packing_width::<EF>())
6767
.map(EFPacking::<EF>::from_ext_slice)
68-
.collect::<Vec<_>>()
68+
.collect()
6969
}
7070

7171
pub fn unpack_extension<EF: ExtensionField<PF<EF>>>(vec: &[EFPacking<EF>]) -> Vec<EF> {

crates/vm/src/bytecode/hint.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ impl Hint {
107107
let values = content
108108
.iter()
109109
.map(|m| Ok(m.read_value(memory, fp)?.to_string()))
110-
.collect::<Result<Vec<_>, RunnerError>>()?;
110+
.collect::<Result<Vec<_>, _>>()?;
111111

112112
// Logs for performance analysis:
113113
if values.first().is_some_and(|s| s == "123456789") {

0 commit comments

Comments
 (0)