use crate::decision_variable::VariableID;
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
pub enum SubstitutionError {
#[error("Recursive assignment detected: variable {var_id} cannot be assigned to a function that depends on itself")]
RecursiveAssignment { var_id: VariableID },
#[error("Cyclic assignment detected: circular dependency found in variable assignments")]
CyclicAssignmentDetected,
#[error("Cannot substitute indicator variable {indicator_variable:?} of indicator constraint {constraint_id:?}")]
IndicatorVariableSubstitution {
indicator_variable: VariableID,
constraint_id: crate::indicator_constraint::IndicatorConstraintID,
},
#[error("Cannot substitute variable {variable:?} of one-hot constraint {constraint_id:?}")]
OneHotVariableSubstitution {
variable: VariableID,
constraint_id: crate::one_hot_constraint::OneHotConstraintID,
},
#[error("Cannot substitute variable {variable:?} of SOS1 constraint {constraint_id:?}")]
Sos1VariableSubstitution {
variable: VariableID,
constraint_id: crate::sos1_constraint::Sos1ConstraintID,
},
}