Skip to content

Commit

Permalink
Test: Fix circuit_construction test.
Browse files Browse the repository at this point in the history
- Remove unnecessary mutable reference in `find_bit()`.
  • Loading branch information
raynelfss committed Feb 4, 2025
1 parent ebd2848 commit a336f5c
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 25 deletions.
2 changes: 1 addition & 1 deletion crates/circuit/src/bit_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ where
{
/// Finds the native bit index of the given Python bit.
#[inline]
pub fn py_find_bit(&mut self, bit: &Bound<PyAny>) -> PyResult<Option<T>> {
pub fn py_find_bit(&self, bit: &Bound<PyAny>) -> PyResult<Option<T>> {
self.indices
.try_read()
.map(|op| op.get(&BitAsKey::new(bit)).copied())
Expand Down
32 changes: 11 additions & 21 deletions crates/circuit/src/circuit_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1932,31 +1932,27 @@ mod pytest {
quantum_circuit.call_method1("_from_circuit_data", (circuit_data,))?;

let converted_qregs = converted_circuit.getattr("qregs")?;
println!("{}", converted_qregs);
assert!(converted_qregs.is_instance(&PyList::type_object(py))?);
assert!(
converted_qregs.downcast::<PyList>()?.len() == 0,
"The quantum registers list returned a non-empty value"
);

let converted_qubits = converted_circuit.getattr("qubits")?;
println!("{:?}", converted_qubits);
assert!(converted_qubits.is_instance(&PyList::type_object(py))?);
assert!(
converted_qubits.downcast::<PyList>()?.len() == (num_qubits as usize),
"The qubits has the wrong length"
);

let converted_qregs = converted_circuit.getattr("qregs")?;
println!("{}", converted_qregs);
assert!(converted_qregs.is_instance(&PyList::type_object(py))?);
assert!(
converted_qregs.downcast::<PyList>()?.len() == 0,
"The classical registers list returned a non-empty value"
);

let converted_clbits = converted_circuit.getattr("clbits")?;
println!("{:?}", converted_clbits);
assert!(converted_clbits.is_instance(&PyList::type_object(py))?);
assert!(
converted_clbits.downcast::<PyList>()?.len() == (num_clbits as usize),
Expand All @@ -1978,48 +1974,42 @@ mod pytest {
let result = Python::with_gil(|py| -> PyResult<bool> {
let quantum_circuit = QUANTUM_CIRCUIT.get_bound(py).clone();

let converted_circuit =
quantum_circuit.call_method1("_from_circuit_data", (circuit_data,))?;
let expected_circuit = quantum_circuit.call1((num_qubits, num_clbits))?;
let converted_circuit = quantum_circuit.call_method1(
"_from_circuit_data",
(circuit_data.clone().into_pyobject(py)?,),
)?;
let expected_circuit = quantum_circuit.call((num_qubits, num_clbits), None)?;

let converted_qregs = converted_circuit.getattr("qregs")?;
let expected_qregs = expected_circuit.getattr("qregs")?;

println!("{:?} vs {:?}", converted_qregs, expected_qregs);

assert!(converted_qregs.eq(expected_qregs)?);

let converted_cregs = converted_circuit.getattr("cregs")?;
let expected_cregs = expected_circuit.getattr("cregs")?;

println!("{:?} vs {:?}", converted_cregs, expected_cregs);

assert!(converted_cregs.eq(expected_cregs)?);

let converted_qubits = converted_circuit.getattr("qubits")?;
let expected_qubits = expected_circuit.getattr("qubits")?;
println!("{:?} vs {:?}", converted_qubits, expected_qubits);
assert!(converted_qubits.eq(&expected_qubits)?);

let converted_clbits = converted_circuit.getattr("clbits")?;
let expected_clbits = expected_circuit.getattr("clbits")?;
println!("{:?} vs {:?}", converted_clbits, expected_clbits);
assert!(converted_clbits.eq(&expected_clbits)?);

let converted_global_phase = converted_circuit.getattr("global_phase")?;
let expected_global_phase = expected_circuit.getattr("global_phase")?;
println!(
"{:?} vs {:?}",
converted_global_phase, expected_global_phase
);

assert!(converted_global_phase.eq(&expected_global_phase)?);

// TODO: Figure out why this fails
// converted_circuit.eq(&expected_circuit)
println!("{:?}", expected_circuit.eq(&converted_circuit));

// Return true due to being unable to extract `CircuitData` from python
// due to conflics between cargo and python binaries.
Ok(true)
})
.is_ok_and(|res| res);
assert!(result);
});
assert!(result.is_ok_and(|result| result))
}
}
6 changes: 3 additions & 3 deletions crates/circuit/src/dag_circuit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6624,7 +6624,7 @@ impl DAGCircuit {
clbit_order: Option<Vec<Bound<PyAny>>>,
) -> PyResult<DAGCircuit> {
// Extract necessary attributes
let mut qc_data = qc.data;
let qc_data = qc.data;
let num_qubits = qc_data.num_qubits();
let num_clbits = qc_data.num_clbits();
let num_ops = qc_data.__len__();
Expand Down Expand Up @@ -6668,7 +6668,7 @@ impl DAGCircuit {
&qubit
)));
}
let qubit_index = qc_data.qubits_mut().py_find_bit(&qubit)?.unwrap();
let qubit_index = qc_data.qubits().py_find_bit(&qubit)?.unwrap();
ordered_vec[qubit_index.index()] = new_dag.add_qubit_unchecked(py, &qubit)?;
Ok(())
})?;
Expand Down Expand Up @@ -6701,7 +6701,7 @@ impl DAGCircuit {
&clbit
)));
};
let clbit_index = qc_data.clbits_mut().py_find_bit(&clbit)?.unwrap();
let clbit_index = qc_data.clbits().py_find_bit(&clbit)?.unwrap();
ordered_vec[clbit_index.index()] = new_dag.add_clbit_unchecked(py, &clbit)?;
Ok(())
})?;
Expand Down

0 comments on commit a336f5c

Please sign in to comment.