use hugr::extension::prelude;
use hugr::types::Type;
use hugr::CircuitUnit;
use hugr::Wire;
use super::LinearUnit;
pub fn filter_linear<N, P>(item: (CircuitUnit<N>, P, Type)) -> Option<(LinearUnit, P, Type)> {
match item {
(CircuitUnit::Linear(unit), port, typ) => Some((LinearUnit::new(unit), port, typ)),
_ => None,
}
}
pub fn filter_qubit<N, P>(item: (CircuitUnit<N>, P, Type)) -> Option<(LinearUnit, P, Type)> {
match item {
(CircuitUnit::Linear(unit), port, typ) if typ == prelude::qb_t() => {
Some((LinearUnit::new(unit), port, typ))
}
_ => None,
}
}
pub fn filter_non_linear<N, P>(item: (CircuitUnit<N>, P, Type)) -> Option<(Wire<N>, P, Type)> {
match item {
(CircuitUnit::Wire(wire), port, typ) => Some((wire, port, typ)),
_ => None,
}
}