use thiserror::Error;
use crate::types::{Clause, Lit};
pub mod am1;
pub mod atomics;
pub mod card;
pub mod pb;
pub trait CollectClauses {
fn n_clauses(&self) -> usize;
fn extend_clauses<T>(&mut self, cl_iter: T) -> Result<(), crate::OutOfMemory>
where
T: IntoIterator<Item = Clause>;
fn add_clause(&mut self, cl: Clause) -> Result<(), crate::OutOfMemory> {
self.extend_clauses([cl])
}
}
#[derive(Error, Debug, PartialEq, Eq)]
pub enum Error {
#[error("not encoded to enforce bound")]
NotEncoded,
#[error("encoding is unsat")]
Unsat,
}
pub trait EncodeStats {
fn n_clauses(&self) -> usize;
fn n_vars(&self) -> u32;
}
#[path = "encodings/nodedb.rs"]
mod nodedbimpl;
#[cfg_attr(feature = "internals", visibility::make(pub))]
#[cfg_attr(docsrs, doc(cfg(feature = "internals")))]
mod nodedb {
pub use super::nodedbimpl::{NodeById, NodeCon, NodeId, NodeLike};
}
pub trait IterInputs {
type Iter<'a>: Iterator<Item = Lit>
where
Self: 'a;
fn iter(&self) -> Self::Iter<'_>;
}
pub trait IterWeightedInputs {
type Iter<'a>: Iterator<Item = (Lit, usize)>
where
Self: 'a;
fn iter(&self) -> Self::Iter<'_>;
}