use super::*;
pub fn controlled_x_demo(controls: usize, superposition: bool) -> Result<AlgorithmCircuit> {
width(controls, 1, 15)?;
let mut a = AlgorithmCircuit::new(controls + 1, vec![])?;
for w in 0..controls {
a.gate(
vec![w],
if superposition {
Unitary::h()
} else {
Unitary::x()
},
format!("Prepare control q{w}"),
)?;
}
a.push(
Operation::ControlledX {
controls: (0..controls).map(|w| (w, 1)).collect(),
target: controls,
},
format!("{}-controlled X", controls),
)?;
Ok(a)
}