mirror of
https://github.com/powdr-labs/powdr.git
synced 2026-01-08 04:53:59 -05:00
Remove JournalingConstraintSystem. (#3305)
The file was not referenced anywhere.
This commit is contained in:
@@ -1,117 +0,0 @@
|
|||||||
use crate::{
|
|
||||||
constraint_system::{AlgebraicConstraint, BusInteraction, ConstraintSystem},
|
|
||||||
grouped_expression::GroupedExpression,
|
|
||||||
indexed_constraint_system::IndexedConstraintSystem,
|
|
||||||
runtime_constant::{RuntimeConstant, Substitutable},
|
|
||||||
};
|
|
||||||
use std::{fmt::Display, hash::Hash};
|
|
||||||
|
|
||||||
/// A wrapper around `ConstraintSystem` that keeps track of changes.
|
|
||||||
pub struct JournalingConstraintSystem<T, V> {
|
|
||||||
system: IndexedConstraintSystem<T, V>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: RuntimeConstant, V: Clone + Eq, C: Into<IndexedConstraintSystem<T, V>>> From<C>
|
|
||||||
for JournalingConstraintSystem<T, V>
|
|
||||||
{
|
|
||||||
fn from(system: C) -> Self {
|
|
||||||
Self {
|
|
||||||
system: system.into(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: RuntimeConstant, V: Hash + Clone + Eq> JournalingConstraintSystem<T, V> {
|
|
||||||
/// Returns the underlying `ConstraintSystem`.
|
|
||||||
pub fn system(&self) -> &ConstraintSystem<T, V> {
|
|
||||||
self.system.system()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn indexed_system(&self) -> &IndexedConstraintSystem<T, V> {
|
|
||||||
&self.system
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns an iterator over the algebraic constraints.
|
|
||||||
pub fn algebraic_constraints(
|
|
||||||
&self,
|
|
||||||
) -> impl Iterator<Item = &AlgebraicConstraint<GroupedExpression<T, V>>> {
|
|
||||||
self.system.algebraic_constraints().iter()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns an iterator over the bus interactions.
|
|
||||||
pub fn bus_interactions(
|
|
||||||
&self,
|
|
||||||
) -> impl Iterator<Item = &BusInteraction<GroupedExpression<T, V>>> {
|
|
||||||
self.system.bus_interactions().iter()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn expressions(&self) -> impl Iterator<Item = &GroupedExpression<T, V>> {
|
|
||||||
self.system.expressions()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: RuntimeConstant + Substitutable<V>, V: Ord + Clone + Eq + Hash + Display>
|
|
||||||
JournalingConstraintSystem<T, V>
|
|
||||||
{
|
|
||||||
/// Applies multiple substitutions to the constraint system in an efficient manner.
|
|
||||||
pub fn apply_substitutions(
|
|
||||||
&mut self,
|
|
||||||
substitutions: impl IntoIterator<Item = (V, GroupedExpression<T, V>)>,
|
|
||||||
) {
|
|
||||||
// We do not track substitutions yet, but we could.
|
|
||||||
for (variable, substitution) in substitutions {
|
|
||||||
self.substitute_by_unknown(&variable, &substitution);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn substitute_by_unknown(&mut self, variable: &V, substitution: &GroupedExpression<T, V>) {
|
|
||||||
// We do not track substitutions yet, but we could.
|
|
||||||
self.system.substitute_by_unknown(variable, substitution);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: RuntimeConstant, V: Clone + Eq + Hash> JournalingConstraintSystem<T, V> {
|
|
||||||
/// Adds new algebraic constraints to the system.
|
|
||||||
pub fn add_algebraic_constraints(
|
|
||||||
&mut self,
|
|
||||||
constraints: impl IntoIterator<Item = AlgebraicConstraint<GroupedExpression<T, V>>>,
|
|
||||||
) {
|
|
||||||
self.system.add_algebraic_constraints(constraints);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Adds new bus interactions to the system.
|
|
||||||
pub fn add_bus_interactions(
|
|
||||||
&mut self,
|
|
||||||
bus_interactions: impl IntoIterator<Item = BusInteraction<GroupedExpression<T, V>>>,
|
|
||||||
) {
|
|
||||||
self.system.add_bus_interactions(bus_interactions);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: RuntimeConstant, V: Clone + Eq> JournalingConstraintSystem<T, V> {
|
|
||||||
/// Removes all algebraic constraints that do not fulfill the predicate.
|
|
||||||
pub fn retain_algebraic_constraints(
|
|
||||||
&mut self,
|
|
||||||
f: impl FnMut(&AlgebraicConstraint<GroupedExpression<T, V>>) -> bool,
|
|
||||||
) {
|
|
||||||
// We do not track removal of constraints yet, but we could.
|
|
||||||
self.system.retain_algebraic_constraints(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Removes all bus interactions that do not fulfill the predicate.
|
|
||||||
pub fn retain_bus_interactions(
|
|
||||||
&mut self,
|
|
||||||
f: impl FnMut(&BusInteraction<GroupedExpression<T, V>>) -> bool,
|
|
||||||
) {
|
|
||||||
// TODO track
|
|
||||||
self.system.retain_bus_interactions(f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: RuntimeConstant + Display, V: Clone + Ord + Display + Hash> Display
|
|
||||||
for JournalingConstraintSystem<T, V>
|
|
||||||
{
|
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
||||||
write!(f, "{}", self.system)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user