use crate::circuit::HashMap;
use crate::states::{ProductState, SuperPosition};
use crate::{complex_re, Complex, COMPLEX_ZERO};
impl SuperPosition {
pub(crate) fn new_with_hash_amplitudes_unchecked(
hash_amplitudes: HashMap<ProductState, Complex<f64>>,
) -> SuperPosition {
let product_dim: usize = hash_amplitudes.keys().next().unwrap().num_qubits();
let mut amplitudes: Vec<Complex<f64>> = vec![COMPLEX_ZERO; 1 << product_dim];
Self::from_hash_to_array(hash_amplitudes, &mut amplitudes);
SuperPosition {
amplitudes,
product_dim,
}
}
pub(crate) fn new_with_register_unchecked<const N: usize>(
amplitudes: [Complex<f64>; N],
) -> SuperPosition {
SuperPosition {
amplitudes: amplitudes.to_vec(),
product_dim: N.trailing_zeros() as usize,
}
}
pub(crate) fn set_amplitudes_from_states_unchecked(
&mut self,
hash_amplitudes: HashMap<ProductState, Complex<f64>>,
) -> &mut SuperPosition {
for (key, val) in hash_amplitudes {
self.amplitudes[key.comp_basis()] = val;
}
self
}
pub(crate) fn new_unchecked(num_qubits: usize) -> SuperPosition {
let mut new_amps: Vec<Complex<f64>> = vec![COMPLEX_ZERO; 1 << num_qubits];
new_amps[0] = complex_re!(1f64);
SuperPosition {
amplitudes: new_amps,
product_dim: num_qubits,
}
}
}