mirror of
https://github.com/powdr-labs/powdr.git
synced 2026-04-20 03:03:25 -04:00
Merge pull request #252 from chriseth/print_failing_identity
Print failing identity.
This commit is contained in:
@@ -66,7 +66,12 @@ where
|
||||
.iter()
|
||||
.filter_map(|(i, c)| (!c.is_zero()).then_some((*i, c)))
|
||||
}
|
||||
}
|
||||
|
||||
impl<'x, K> AffineExpression<K>
|
||||
where
|
||||
K: Copy + Ord + Display + 'x,
|
||||
{
|
||||
/// If the affine expression has only a single variable (with nonzero coefficient),
|
||||
/// returns the index of the variable and the assignment that evaluates the
|
||||
/// affine expression to zero.
|
||||
@@ -115,7 +120,7 @@ where
|
||||
// Try to solve directly.
|
||||
match self.solve() {
|
||||
Ok(value) if value.is_complete() => return Ok(value),
|
||||
Err(()) => return Err(ConstraintUnsatisfiable(String::new())),
|
||||
Err(()) => return Err(ConstraintUnsatisfiable(self.to_string())),
|
||||
Ok(value) => {
|
||||
// sanity check that we are not ignoring anything useful here
|
||||
assert!(value.constraints.is_empty());
|
||||
|
||||
@@ -181,7 +181,7 @@ impl fmt::Display for EvalError {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
EvalError::ConstraintUnsatisfiable(e) => {
|
||||
write!(f, "Linear constraint is not satisfiable: {e}",)
|
||||
write!(f, "Linear constraint is not satisfiable: {e} != 0",)
|
||||
}
|
||||
EvalError::Multiple(errors) => {
|
||||
for e in errors {
|
||||
|
||||
@@ -104,7 +104,14 @@ where
|
||||
kind => {
|
||||
unimplemented!("Identity of kind {kind:?} is not supported in the executor")
|
||||
}
|
||||
};
|
||||
}
|
||||
.map_err(|err| {
|
||||
format!(
|
||||
"No progress on {identity}:\n{}",
|
||||
indent(&format!("{err}"), " ")
|
||||
)
|
||||
.into()
|
||||
});
|
||||
|
||||
if result.is_err() {
|
||||
identity_failed = true;
|
||||
|
||||
@@ -406,13 +406,7 @@ impl BlockMachine {
|
||||
};
|
||||
evaluated.solve_with_bit_constraints(self).map_err(|e| {
|
||||
let formatted = evaluated.to_string();
|
||||
if let EvalError::ConstraintUnsatisfiable(_) = e {
|
||||
EvalError::ConstraintUnsatisfiable(format!(
|
||||
"Constraint is invalid ({formatted} != 0)."
|
||||
))
|
||||
} else {
|
||||
format!("Could not solve expression {formatted} = 0: {e}").into()
|
||||
}
|
||||
format!("Could not solve expression {formatted} = 0: {e}").into()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user