Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions qiskit/circuit/quantumcircuit.py
Original file line number Diff line number Diff line change
Expand Up @@ -2280,9 +2280,15 @@ def replace_var(
dest.append(other, qargs=qubits, cargs=clbits, copy=copy)
return None if inplace else dest

if other.num_qubits > dest.num_qubits or other.num_clbits > dest.num_clbits:
if other.num_qubits > dest.num_qubits:
Comment thread
TSS99 marked this conversation as resolved.
raise CircuitError(
"Trying to compose with another QuantumCircuit which has more 'in' edges."
f"Cannot compose a circuit with {other.num_qubits} qubit(s) "
Comment thread
Cryoris marked this conversation as resolved.
Outdated
f"into a circuit with {dest.num_qubits} qubit(s)."
)
if other.num_clbits > dest.num_clbits:
raise CircuitError(
f"Cannot compose a circuit with {other.num_clbits} classical bit(s) "
f"into a circuit with {dest.num_clbits} classical bit(s)."
)

# Maps bits in 'other' to bits in 'dest'.
Expand Down
25 changes: 25 additions & 0 deletions test/python/circuit/test_compose.py
Original file line number Diff line number Diff line change
Expand Up @@ -972,6 +972,31 @@ def test_rejects_duplicate_bits(self):
with self.assertRaisesRegex(CircuitError, "Duplicate clbits"):
base.compose(attempt, [0, 1], [1, 1])

def test_rejects_rhs_with_too_many_qubits(self):
"""Test that compose rejects a circuit with too many qubits."""
base = QuantumCircuit(1)
attempt = QuantumCircuit(2)

with self.assertRaisesRegex(
CircuitError,
r"Cannot compose a circuit with 2 qubit\(s\) into a circuit with 1 qubit\(s\)\.",
):
base.compose(attempt)

def test_rejects_rhs_with_too_many_clbits(self):
"""Test that compose rejects a circuit with too many classical bits."""
base = QuantumCircuit(1, 1)
attempt = QuantumCircuit(1, 2)

with self.assertRaisesRegex(
CircuitError,
(
r"Cannot compose a circuit with 2 classical bit\(s\) "
r"into a circuit with 1 classical bit\(s\)\."
),
):
base.compose(attempt)

def test_cannot_mix_inputs_and_captures(self):
"""The rules about mixing `input` and `capture` vars should still apply."""
a = expr.Var.new("a", types.Bool())
Expand Down