Skip to content

Commit 923ae3f

Browse files
committed
Fix: Move qubit ordering check to python
- Add more accurate estimate of num_edges.
1 parent feb4dbb commit 923ae3f

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

crates/circuit/src/dag_circuit.rs

+1-11
Original file line numberDiff line numberDiff line change
@@ -6422,11 +6422,6 @@ impl DAGCircuit {
64226422

64236423
// Pre-process the instructions
64246424
let qubit_set: Vec<Qubit> = if let Some(qubit_ordering) = &qubit_order {
6425-
if qubit_ordering.len() != num_qubits {
6426-
return Err(PyValueError::new_err(
6427-
"'qubit_order' does not contain exactly the same qubits as the circuit",
6428-
));
6429-
};
64306425
let mut qubits = vec![];
64316426
for qubit in qubit_ordering {
64326427
let bound = qubit.bind(py);
@@ -6447,11 +6442,6 @@ impl DAGCircuit {
64476442
(0..num_qubits as u32).map(Qubit).collect()
64486443
};
64496444
let clbit_set: Vec<Clbit> = if let Some(clbit_ordering) = &clbit_order {
6450-
if clbit_ordering.len() != num_clbits {
6451-
return Err(PyValueError::new_err(
6452-
"'clbit_order' does not contain exactly the same clbits as the circuit",
6453-
));
6454-
};
64556445
let mut clbits = vec![];
64566446
for clbit in clbit_ordering {
64576447
let bound = clbit.bind(py);
@@ -6509,7 +6499,7 @@ impl DAGCircuit {
65096499
num_clbits,
65106500
Some(num_ops),
65116501
Some(num_vars),
6512-
Some(num_edges),
6502+
Some(num_edges + (num_ops / 2) * num_vars),
65136503
)?;
65146504

65156505
// Assign other necessary data

qiskit/converters/circuit_to_dag.py

+14
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,20 @@ def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_ord
5757
circ.rz(0.5, q[1]).c_if(c, 2)
5858
dag = circuit_to_dag(circ)
5959
"""
60+
if qubit_order is None:
61+
qubits = circuit.qubits
62+
elif len(qubit_order) != circuit.num_qubits or set(qubit_order) != set(circuit.qubits):
63+
raise ValueError("'qubit_order' does not contain exactly the same qubits as the circuit")
64+
else:
65+
qubits = qubit_order
66+
67+
if clbit_order is None:
68+
clbits = circuit.clbits
69+
elif len(clbit_order) != circuit.num_clbits or set(clbit_order) != set(circuit.clbits):
70+
raise ValueError("'clbit_order' does not contain exactly the same clbits as the circuit")
71+
else:
72+
clbits = clbit_order
73+
6074
dagcircuit = core_circuit_to_dag(circuit, qubit_order, clbit_order)
6175

6276
dagcircuit.duration = circuit.duration

0 commit comments

Comments
 (0)