Skip to content

Commit

Permalink
Move VariablySizedColumns to executor crate
Browse files Browse the repository at this point in the history
  • Loading branch information
georgwiese committed Jul 10, 2024
1 parent 78eac24 commit b90a386
Show file tree
Hide file tree
Showing 18 changed files with 98 additions and 79 deletions.
7 changes: 5 additions & 2 deletions backend/src/composite/mod.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
use std::{collections::BTreeMap, io, marker::PhantomData, path::PathBuf, sync::Arc};

use powdr_ast::analyzed::Analyzed;
use powdr_executor::witgen::WitgenCallback;
use powdr_number::{get_only_size_cloned, DegreeType, FieldElement, VariablySizedColumn};
use powdr_executor::{
constant_evaluator::{get_only_size_cloned, VariablySizedColumn},
witgen::WitgenCallback,
};
use powdr_number::{DegreeType, FieldElement};
use serde::{Deserialize, Serialize};
use split::select_machine_columns;

Expand Down
7 changes: 5 additions & 2 deletions backend/src/estark/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,11 @@ use std::{
use crate::{Backend, BackendFactory, BackendOptions, Error, Proof};
use powdr_ast::analyzed::Analyzed;

use powdr_executor::witgen::WitgenCallback;
use powdr_number::{get_only_size_cloned, DegreeType, FieldElement, VariablySizedColumn};
use powdr_executor::{
constant_evaluator::{get_only_size_cloned, VariablySizedColumn},
witgen::WitgenCallback,
};
use powdr_number::{DegreeType, FieldElement};
use serde::Serialize;
use starky::types::{StarkStruct, Step, PIL};

Expand Down
7 changes: 5 additions & 2 deletions backend/src/estark/polygon_wrapper.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
use std::{fs, path::PathBuf, sync::Arc};

use powdr_ast::analyzed::Analyzed;
use powdr_executor::witgen::WitgenCallback;
use powdr_number::{get_only_size_cloned, FieldElement, VariablySizedColumn};
use powdr_executor::{
constant_evaluator::{get_only_size_cloned, VariablySizedColumn},
witgen::WitgenCallback,
};
use powdr_number::FieldElement;

use crate::{Backend, BackendFactory, BackendOptions, Error, Proof};

Expand Down
7 changes: 4 additions & 3 deletions backend/src/estark/starky_wrapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ use std::time::Instant;

use crate::{Backend, BackendFactory, BackendOptions, Error};
use powdr_ast::analyzed::Analyzed;
use powdr_executor::witgen::WitgenCallback;
use powdr_number::{
get_only_size_cloned, FieldElement, GoldilocksField, LargeInt, VariablySizedColumn,
use powdr_executor::{
constant_evaluator::{get_only_size_cloned, VariablySizedColumn},
witgen::WitgenCallback,
};
use powdr_number::{FieldElement, GoldilocksField, LargeInt};

use starky::{
merklehash::MerkleTreeGL,
Expand Down
3 changes: 2 additions & 1 deletion backend/src/halo2/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ use std::sync::Arc;

use crate::{Backend, BackendFactory, BackendOptions, Error, Proof};
use powdr_ast::analyzed::Analyzed;
use powdr_executor::constant_evaluator::{get_only_size_cloned, VariablySizedColumn};
use powdr_executor::witgen::WitgenCallback;
use powdr_number::{get_only_size_cloned, DegreeType, FieldElement, VariablySizedColumn};
use powdr_number::{DegreeType, FieldElement};
use prover::{generate_setup, Halo2Prover};

use serde::de::{self, Deserializer};
Expand Down
4 changes: 2 additions & 2 deletions backend/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ mod plonky3;
mod composite;

use powdr_ast::analyzed::Analyzed;
use powdr_executor::witgen::WitgenCallback;
use powdr_number::{DegreeType, FieldElement, VariablySizedColumn};
use powdr_executor::{constant_evaluator::VariablySizedColumn, witgen::WitgenCallback};
use powdr_number::{DegreeType, FieldElement};
use std::{io, path::PathBuf, sync::Arc};
use strum::{Display, EnumString, EnumVariantNames};

Expand Down
7 changes: 4 additions & 3 deletions backend/src/plonky3/mod.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
use std::{io, path::PathBuf, sync::Arc};

use powdr_ast::analyzed::Analyzed;
use powdr_executor::witgen::WitgenCallback;
use powdr_number::{
get_only_size_cloned, FieldElement, GoldilocksField, LargeInt, VariablySizedColumn,
use powdr_executor::{
constant_evaluator::{get_only_size_cloned, VariablySizedColumn},
witgen::WitgenCallback,
};
use powdr_number::{FieldElement, GoldilocksField, LargeInt};
use powdr_plonky3::Plonky3Prover;

use crate::{Backend, BackendFactory, BackendOptions, Error, Proof};
Expand Down
1 change: 1 addition & 0 deletions executor/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ bit-vec = "0.6.3"
num-traits = "0.2.15"
lazy_static = "1.4.0"
indicatif = "0.17.7"
serde = { version = "1.0", default-features = false, features = ["alloc", "derive", "rc"] }

[dev-dependencies]
test-log = "0.2.12"
Expand Down
48 changes: 48 additions & 0 deletions executor/src/constant_evaluator/data_structures.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;

#[derive(Serialize, Deserialize)]
pub struct VariablySizedColumn<F> {
column_by_size: BTreeMap<usize, Vec<F>>,
}

#[derive(Debug)]
pub struct HasMultipleSizesError;

impl<F> VariablySizedColumn<F> {
/// Create a view where each column has a single size. Fails if any column has multiple sizes.
pub fn get_only_size(&self) -> Result<&Vec<F>, HasMultipleSizesError> {
if self.column_by_size.len() != 1 {
return Err(HasMultipleSizesError);
}
Ok(self.column_by_size.values().next().unwrap())
}
}

pub fn get_only_size<F>(
column: &[(String, VariablySizedColumn<F>)],
) -> Result<Vec<(String, &Vec<F>)>, HasMultipleSizesError> {
column
.iter()
.map(|(name, column)| Ok((name.clone(), column.get_only_size()?)))
.collect()
}

pub fn get_only_size_cloned<F: Clone>(
column: &[(String, VariablySizedColumn<F>)],
) -> Result<Vec<(String, Vec<F>)>, HasMultipleSizesError> {
get_only_size(column).map(|column| {
column
.into_iter()
.map(|(name, column)| (name, column.clone()))
.collect()
})
}

impl<F> From<Vec<F>> for VariablySizedColumn<F> {
fn from(column: Vec<F>) -> Self {
VariablySizedColumn {
column_by_size: [(column.len(), column)].into_iter().collect(),
}
}
}
8 changes: 6 additions & 2 deletions executor/src/constant_evaluator/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use std::{
sync::{Arc, RwLock},
};

pub use data_structures::{get_only_size, get_only_size_cloned, VariablySizedColumn};
use itertools::Itertools;
use powdr_ast::{
analyzed::{Analyzed, FunctionValueDefinition, Symbol, TypedExpression},
Expand All @@ -11,10 +12,12 @@ use powdr_ast::{
IndexAccess,
},
};
use powdr_number::{BigInt, BigUint, DegreeType, FieldElement, VariablySizedColumn};
use powdr_number::{BigInt, BigUint, DegreeType, FieldElement};
use powdr_pil_analyzer::evaluator::{self, Definitions, SymbolLookup, Value};
use rayon::prelude::{IntoParallelIterator, ParallelIterator};

mod data_structures;

/// Generates the fixed column values for all fixed columns that are defined
/// (and not just declared).
/// @returns the names (in source order) and the values for the columns.
Expand Down Expand Up @@ -169,7 +172,8 @@ impl<'a, T: FieldElement> SymbolLookup<'a, T> for CachedSymbols<'a, T> {

#[cfg(test)]
mod test {
use powdr_number::{get_only_size, GoldilocksField};
use data_structures::get_only_size;
use powdr_number::GoldilocksField;
use powdr_pil_analyzer::analyze_string;
use pretty_assertions::assert_eq;
use test_log::test;
Expand Down
4 changes: 2 additions & 2 deletions executor/src/witgen/block_processor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,11 @@ mod tests {
use std::collections::BTreeMap;

use powdr_ast::analyzed::{PolyID, PolynomialType};
use powdr_number::{get_only_size, FieldElement, GoldilocksField};
use powdr_number::{FieldElement, GoldilocksField};
use powdr_pil_analyzer::analyze_string;

use crate::{
constant_evaluator::generate,
constant_evaluator::{generate, get_only_size},
witgen::{
data_structures::finalizable_data::FinalizableData,
identity_processor::Machines,
Expand Down
4 changes: 3 additions & 1 deletion executor/src/witgen/global_constraints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -361,10 +361,12 @@ mod test {
use std::collections::BTreeMap;

use powdr_ast::analyzed::{PolyID, PolynomialType};
use powdr_number::{get_only_size, GoldilocksField};
use powdr_number::GoldilocksField;
use pretty_assertions::assert_eq;
use test_log::test;

use crate::constant_evaluator::get_only_size;

use super::*;

#[test]
Expand Down
4 changes: 3 additions & 1 deletion executor/src/witgen/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ use powdr_ast::analyzed::{
};
use powdr_ast::parsed::visitor::ExpressionVisitable;
use powdr_ast::parsed::{FunctionKind, LambdaExpression};
use powdr_number::{get_only_size, DegreeType, FieldElement, VariablySizedColumn};
use powdr_number::{DegreeType, FieldElement};

use crate::constant_evaluator::{get_only_size, VariablySizedColumn};

use self::data_structures::column_map::{FixedColumnMap, WitnessColumnMap};
pub use self::eval_result::{
Expand Down
50 changes: 0 additions & 50 deletions number/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,6 @@ mod bn254;
mod goldilocks;
mod serialize;
mod traits;

use std::collections::BTreeMap;

use serde::{Deserialize, Serialize};
pub use serialize::{
buffered_write_file, read_polys_csv_file, write_polys_csv_file, CsvRenderMode, ReadWrite,
};
Expand All @@ -33,52 +29,6 @@ pub fn log2_exact(n: BigUint) -> Option<usize> {
.filter(|zeros| n == (BigUint::from(1u32) << zeros))
}

#[derive(Serialize, Deserialize)]
pub struct VariablySizedColumn<F> {
column_by_size: BTreeMap<usize, Vec<F>>,
}

#[derive(Debug)]
pub struct HasMultipleSizesError;

impl<F> VariablySizedColumn<F> {
/// Create a view where each column has a single size. Fails if any column has multiple sizes.
pub fn get_only_size(&self) -> Result<&Vec<F>, HasMultipleSizesError> {
if self.column_by_size.len() != 1 {
return Err(HasMultipleSizesError);
}
Ok(self.column_by_size.values().next().unwrap())
}
}

pub fn get_only_size<F>(
column: &[(String, VariablySizedColumn<F>)],
) -> Result<Vec<(String, &Vec<F>)>, HasMultipleSizesError> {
column
.iter()
.map(|(name, column)| Ok((name.clone(), column.get_only_size()?)))
.collect()
}

pub fn get_only_size_cloned<F: Clone>(
column: &[(String, VariablySizedColumn<F>)],
) -> Result<Vec<(String, Vec<F>)>, HasMultipleSizesError> {
get_only_size(column).map(|column| {
column
.into_iter()
.map(|(name, column)| (name, column.clone()))
.collect()
})
}

impl<F> From<Vec<F>> for VariablySizedColumn<F> {
fn from(column: Vec<F>) -> Self {
VariablySizedColumn {
column_by_size: [(column.len(), column)].into_iter().collect(),
}
}
}

#[cfg(test)]
mod test {
use super::*;
Expand Down
7 changes: 2 additions & 5 deletions pipeline/src/pipeline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,13 @@ use powdr_ast::{
};
use powdr_backend::{BackendOptions, BackendType, Proof};
use powdr_executor::{
constant_evaluator,
constant_evaluator::{self, get_only_size_cloned, VariablySizedColumn},
witgen::{
chain_callbacks, extract_publics, unused_query_callback, QueryCallback, WitgenCallback,
WitnessGenerator,
},
};
use powdr_number::{
get_only_size_cloned, write_polys_csv_file, CsvRenderMode, FieldElement, ReadWrite,
VariablySizedColumn,
};
use powdr_number::{write_polys_csv_file, CsvRenderMode, FieldElement, ReadWrite};
use powdr_schemas::SerializedAnalyzed;

use crate::{
Expand Down
3 changes: 2 additions & 1 deletion pipeline/src/util.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use powdr_ast::analyzed::{Analyzed, FunctionValueDefinition, Symbol};
use powdr_number::{ReadWrite, VariablySizedColumn};
use powdr_executor::constant_evaluator::VariablySizedColumn;
use powdr_number::ReadWrite;
use serde::{de::DeserializeOwned, Serialize};
use std::{fs::File, io::BufReader, marker::PhantomData, path::Path};

Expand Down
3 changes: 2 additions & 1 deletion pipeline/tests/asm.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use powdr_backend::BackendType;
use powdr_number::{get_only_size, Bn254Field, FieldElement, GoldilocksField};
use powdr_executor::constant_evaluator::get_only_size;
use powdr_number::{Bn254Field, FieldElement, GoldilocksField};
use powdr_pipeline::{
test_util::{gen_estark_proof, resolve_test_file, test_halo2, verify_test_file},
util::{FixedPolySet, PolySet, WitnessPolySet},
Expand Down
3 changes: 2 additions & 1 deletion plonky3/src/stark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,8 @@ impl<T: FieldElement> Plonky3Prover<T> {
mod tests {
use std::sync::Arc;

use powdr_number::{get_only_size_cloned, GoldilocksField};
use powdr_executor::constant_evaluator::get_only_size_cloned;
use powdr_number::GoldilocksField;
use powdr_pipeline::Pipeline;
use test_log::test;

Expand Down

0 comments on commit b90a386

Please sign in to comment.