mirror of
https://github.com/circify/circ.git
synced 2026-05-14 03:00:33 -04:00
build: add r1cs flag to zxc example (#230)
the example requires this flag but the build system did not know that credits to Victor Miller for finding the issue
This commit is contained in:
@@ -99,7 +99,7 @@ required-features = ["smt", "zokc"]
|
||||
|
||||
[[example]]
|
||||
name = "zxc"
|
||||
required-features = ["smt", "zok"]
|
||||
required-features = ["smt", "zok", "r1cs"]
|
||||
|
||||
[[example]]
|
||||
name = "opa_bench"
|
||||
|
||||
@@ -29,7 +29,7 @@ pub enum ErrorKind {
|
||||
/// An error with an optional span
|
||||
pub struct Error<'ast> {
|
||||
/// The error
|
||||
pub kind: ErrorKind,
|
||||
pub kind: Box<ErrorKind>,
|
||||
/// The span
|
||||
pub span: Option<Span<'ast>>,
|
||||
}
|
||||
@@ -50,7 +50,7 @@ impl Display for Error<'_> {
|
||||
impl From<ErrorKind> for Error<'_> {
|
||||
fn from(error_kind: ErrorKind) -> Self {
|
||||
Error {
|
||||
kind: error_kind,
|
||||
kind: Box::new(error_kind),
|
||||
span: None,
|
||||
}
|
||||
}
|
||||
@@ -59,7 +59,7 @@ impl From<ErrorKind> for Error<'_> {
|
||||
impl From<crate::circify::CircError> for Error<'_> {
|
||||
fn from(circ: crate::circify::CircError) -> Self {
|
||||
Error {
|
||||
kind: ErrorKind::Circify(circ),
|
||||
kind: Box::new(ErrorKind::Circify(circ)),
|
||||
span: None,
|
||||
}
|
||||
}
|
||||
@@ -76,7 +76,7 @@ impl<'ast> Error<'ast> {
|
||||
/// New error, with span
|
||||
pub fn new(kind: ErrorKind, span: Span<'ast>) -> Self {
|
||||
Error {
|
||||
kind,
|
||||
kind: Box::new(kind),
|
||||
span: Some(span),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -270,10 +270,10 @@ impl T {
|
||||
}
|
||||
|
||||
pub fn pretty<W: std::io::Write>(&self, f: &mut W) -> Result<(), std::io::Error> {
|
||||
use std::io::{Error, ErrorKind};
|
||||
use std::io::Error;
|
||||
let val = match &self.term.op() {
|
||||
Op::Const(v) => Ok(v),
|
||||
_ => Err(Error::new(ErrorKind::Other, "not a const val")),
|
||||
_ => Err(Error::other("not a const val")),
|
||||
}?;
|
||||
match &**val {
|
||||
Value::Bool(b) => write!(f, "{b}"),
|
||||
@@ -289,10 +289,7 @@ impl T {
|
||||
let (n, fl) = if let Ty::Struct(n, fl) = &self.ty {
|
||||
Ok((n, fl))
|
||||
} else {
|
||||
Err(Error::new(
|
||||
ErrorKind::Other,
|
||||
"expected struct, got something else",
|
||||
))
|
||||
Err(Error::other("expected struct, got something else"))
|
||||
}?;
|
||||
write!(f, "{n} {{ ")?;
|
||||
fl.fields().zip(vs.iter()).try_for_each(|((n, ty), v)| {
|
||||
@@ -306,10 +303,7 @@ impl T {
|
||||
let inner_ty = if let Ty::Array(_, ty) = &self.ty {
|
||||
Ok(ty)
|
||||
} else {
|
||||
Err(Error::new(
|
||||
ErrorKind::Other,
|
||||
"expected array, got something else",
|
||||
))
|
||||
Err(Error::other("expected array, got something else"))
|
||||
}?;
|
||||
write!(f, "[")?;
|
||||
arr.key_sort
|
||||
@@ -1229,7 +1223,7 @@ impl Embeddable for ZSharp {
|
||||
let ps: Vec<Option<T>> = match precompute.map(|p| p.unwrap_array()) {
|
||||
Some(Ok(v)) => v.into_iter().map(Some).collect(),
|
||||
Some(Err(e)) => panic!("{}", e),
|
||||
None => std::iter::repeat(None).take(*n).collect(),
|
||||
None => std::iter::repeat_n(None, *n).collect(),
|
||||
};
|
||||
debug_assert_eq!(*n, ps.len());
|
||||
array(
|
||||
@@ -1243,7 +1237,7 @@ impl Embeddable for ZSharp {
|
||||
let ps: Vec<Option<T>> = match precompute.map(|p| p.unwrap_array()) {
|
||||
Some(Ok(v)) => v.into_iter().map(Some).collect(),
|
||||
Some(Err(e)) => panic!("{}", e),
|
||||
None => std::iter::repeat(None).take(*n).collect(),
|
||||
None => std::iter::repeat_n(None, *n).collect(),
|
||||
};
|
||||
debug_assert_eq!(*n, ps.len());
|
||||
array(ps.into_iter().enumerate().map(|(i, p)| {
|
||||
|
||||
@@ -252,10 +252,10 @@ impl T {
|
||||
}
|
||||
|
||||
pub fn pretty<W: std::io::Write>(&self, f: &mut W) -> Result<(), std::io::Error> {
|
||||
use std::io::{Error, ErrorKind};
|
||||
use std::io::Error;
|
||||
let val = match &self.term.op() {
|
||||
Op::Const(v) => Ok(v),
|
||||
_ => Err(Error::new(ErrorKind::Other, "not a const val")),
|
||||
_ => Err(Error::other("not a const val")),
|
||||
}?;
|
||||
match &**val {
|
||||
Value::Bool(b) => write!(f, "{b}"),
|
||||
@@ -285,19 +285,13 @@ impl T {
|
||||
})?;
|
||||
write!(f, ")")
|
||||
}
|
||||
_ => Err(Error::new(
|
||||
ErrorKind::Other,
|
||||
"expected struct or tuple, got something else",
|
||||
)),
|
||||
_ => Err(Error::other("expected struct or tuple, got something else")),
|
||||
},
|
||||
Value::Array(arr) => {
|
||||
let inner_ty = if let Ty::Array(_, ty) = &self.ty {
|
||||
Ok(ty)
|
||||
} else {
|
||||
Err(Error::new(
|
||||
ErrorKind::Other,
|
||||
"expected array, got something else",
|
||||
))
|
||||
Err(Error::other("expected array, got something else"))
|
||||
}?;
|
||||
write!(f, "[")?;
|
||||
arr.key_sort
|
||||
@@ -1246,7 +1240,7 @@ impl Embeddable for ZSharp {
|
||||
let ps: Vec<Option<T>> = match precompute.map(|p| p.unwrap_array()) {
|
||||
Some(Ok(v)) => v.into_iter().map(Some).collect(),
|
||||
Some(Err(e)) => panic!("{}", e),
|
||||
None => std::iter::repeat(None).take(*n).collect(),
|
||||
None => std::iter::repeat_n(None, *n).collect(),
|
||||
};
|
||||
debug_assert_eq!(*n, ps.len());
|
||||
array(
|
||||
@@ -1260,7 +1254,7 @@ impl Embeddable for ZSharp {
|
||||
let ps: Vec<Option<T>> = match precompute.map(|p| p.unwrap_array()) {
|
||||
Some(Ok(v)) => v.into_iter().map(Some).collect(),
|
||||
Some(Err(e)) => panic!("{}", e),
|
||||
None => std::iter::repeat(None).take(*n).collect(),
|
||||
None => std::iter::repeat_n(None, *n).collect(),
|
||||
};
|
||||
debug_assert_eq!(*n, ps.len());
|
||||
array(
|
||||
@@ -1304,7 +1298,7 @@ impl Embeddable for ZSharp {
|
||||
panic!("Precompute type doesn't match expected tuple type");
|
||||
}
|
||||
},
|
||||
None => std::iter::repeat(None).take(tys.len()).collect(),
|
||||
None => std::iter::repeat_n(None, tys.len()).collect(),
|
||||
};
|
||||
debug_assert_eq!(tys.len(), ps.len());
|
||||
T::new(
|
||||
|
||||
@@ -4,7 +4,7 @@ use super::*;
|
||||
|
||||
use circ_fields::{FieldT, FieldV};
|
||||
use rand::{distributions::Distribution, prelude::SliceRandom, Rng};
|
||||
use std::iter::repeat;
|
||||
use std::iter::repeat_n;
|
||||
|
||||
// A distribution of boolean terms with some size.
|
||||
// All subterms are booleans.
|
||||
@@ -210,9 +210,9 @@ impl FixedSizeDist {
|
||||
let s = Sort::BitVector(self.bv_width.unwrap());
|
||||
vec![s.clone(), s]
|
||||
}
|
||||
o if o.arity().is_none() && o != &Op::BvConcat => repeat(sort.clone())
|
||||
.take(rng.gen_range(1..self.size))
|
||||
.collect(),
|
||||
o if o.arity().is_none() && o != &Op::BvConcat => {
|
||||
repeat_n(sort.clone(), rng.gen_range(1..self.size)).collect()
|
||||
}
|
||||
// perhaps allow concat?
|
||||
Op::BvBinOp(_) => vec![sort.clone(), sort.clone()],
|
||||
Op::BvUnOp(_) => vec![sort.clone()],
|
||||
|
||||
@@ -6,7 +6,7 @@ use std::path::Path;
|
||||
|
||||
/// Given Path `path` and String denominator `lang`, return the filename of the path
|
||||
pub fn get_path(path: &Path, lang: &str, t: &str, create: bool) -> String {
|
||||
let filename = Path::new(&path.iter().last().unwrap())
|
||||
let filename = Path::new(path.iter().next_back().unwrap())
|
||||
.file_stem()
|
||||
.unwrap()
|
||||
.to_os_string()
|
||||
|
||||
@@ -291,7 +291,7 @@ impl ToMilp {
|
||||
Op::BvUext(extra_n) => {
|
||||
if self.bv_has_bits(&bv.cs()[0]) {
|
||||
let bits = self.get_bv_bits(&bv.cs()[0]);
|
||||
let ext_bits = std::iter::repeat(Expression::from(0)).take(*extra_n);
|
||||
let ext_bits = std::iter::repeat_n(Expression::from(0), *extra_n);
|
||||
self.set_bv_bits(bv, bits.into_iter().chain(ext_bits).collect());
|
||||
} else {
|
||||
let x = self.get_bv_uint(&bv.cs()[0]);
|
||||
@@ -300,9 +300,8 @@ impl ToMilp {
|
||||
}
|
||||
Op::BvSext(extra_n) => {
|
||||
let mut bits = self.get_bv_bits(&bv.cs()[0]).into_iter().rev();
|
||||
let ext_bits = std::iter::repeat(bits.next().expect("sign ext empty"))
|
||||
.take(extra_n + 1);
|
||||
|
||||
let ext_bits =
|
||||
std::iter::repeat_n(bits.next().expect("sign ext empty"), extra_n + 1);
|
||||
self.set_bv_bits(bv, bits.rev().chain(ext_bits).collect());
|
||||
}
|
||||
Op::BoolToBv => {
|
||||
|
||||
@@ -740,7 +740,7 @@ impl<'cfg> ToR1cs<'cfg> {
|
||||
Op::BvUext(extra_n) => {
|
||||
if self.bv_has_bits(&bv.cs()[0]) {
|
||||
let bits = self.get_bv_bits(&bv.cs()[0]);
|
||||
let ext_bits = std::iter::repeat(self.zero.clone()).take(*extra_n);
|
||||
let ext_bits = std::iter::repeat_n(self.zero.clone(), *extra_n);
|
||||
self.set_bv_bits(bv, bits.into_iter().chain(ext_bits).collect());
|
||||
} else {
|
||||
let x = self.get_bv_uint(&bv.cs()[0]);
|
||||
@@ -749,9 +749,8 @@ impl<'cfg> ToR1cs<'cfg> {
|
||||
}
|
||||
Op::BvSext(extra_n) => {
|
||||
let mut bits = self.get_bv_bits(&bv.cs()[0]).into_iter().rev();
|
||||
let ext_bits = std::iter::repeat(bits.next().expect("sign ext empty"))
|
||||
.take(extra_n + 1);
|
||||
|
||||
let ext_bits =
|
||||
std::iter::repeat_n(bits.next().expect("sign ext empty"), extra_n + 1);
|
||||
self.set_bv_bits(bv, bits.rev().chain(ext_bits).collect());
|
||||
}
|
||||
Op::PfToBv(nbits) => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// disable a clippy lint as pest_ast generates improper code
|
||||
#![allow(clippy::clone_on_copy)]
|
||||
#![allow(clippy::clone_on_copy, deprecated)]
|
||||
|
||||
use from_pest::FromPest;
|
||||
use pest::error::Error as PestError;
|
||||
|
||||
Reference in New Issue
Block a user