Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
9 changes: 8 additions & 1 deletion qiskit/qpy/binary_io/circuits.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,14 @@ def _read_instruction(file_obj, circuit, registers, custom_operations, version,
if gate_name in {"IfElseOp", "WhileLoopOp"}:
gate = gate_class(condition_tuple, *params)
elif version >= 5 and issubclass(gate_class, ControlledGate):
if gate_name in {"MCPhaseGate", "MCU1Gate"}:
if gate_name in {
"MCPhaseGate",
"MCU1Gate",
"MCXGrayCode",
"MCXGate",
"MCXRecursive",
"MCXVChain",
}:
gate = gate_class(*params, instruction.num_ctrl_qubits)
else:
gate = gate_class(*params)
Expand Down
7 changes: 7 additions & 0 deletions releasenotes/notes/fix-qpy-mcxgray-421cf8f673f24238.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
fixes:
- |
Fixed a bug in QPY (:mod:`qiskit.qpy`) where circuits containing gates of class
:class:`.MCXGate`, :class:`.MCXGrayCode`, and :class:`MCXRecursive`, and
:class:`.MCXVChain` would fail to serialize.
See `#9390 <https://github.com/Qiskit/qiskit-terra/issues/9390>`__.
23 changes: 21 additions & 2 deletions test/python/circuit/test_circuit_load_from_qpy.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,18 @@
from qiskit.circuit.quantumregister import Qubit
from qiskit.circuit.random import random_circuit
from qiskit.circuit.gate import Gate
from qiskit.circuit.library import XGate, QFT, QAOAAnsatz, PauliEvolutionGate, DCXGate, MCU1Gate
from qiskit.circuit.library import (
XGate,
QFT,
QAOAAnsatz,
PauliEvolutionGate,
DCXGate,
MCU1Gate,
MCXGate,
MCXGrayCode,
MCXRecursive,
MCXVChain,
)
from qiskit.circuit.instruction import Instruction
from qiskit.circuit.parameter import Parameter
from qiskit.circuit.parametervector import ParameterVector
Expand Down Expand Up @@ -1043,9 +1054,17 @@ def test_open_controlled_gate(self):

def test_standard_control_gates(self):
"""Test standard library controlled gates."""
qc = QuantumCircuit(3)
qc = QuantumCircuit(6)
Comment thread
mtreinish marked this conversation as resolved.
mcu1_gate = MCU1Gate(np.pi, 2)
mcx_gate = MCXGate(5)
mcx_gray_gate = MCXGrayCode(5)
mcx_recursive_gate = MCXRecursive(5)
mcx_vchain_gate = MCXVChain(5)
qc.append(mcu1_gate, [0, 2, 1])
qc.append(mcx_gate, list(range(0, 6)))
qc.append(mcx_gray_gate, list(range(0, 6)))
qc.append(mcx_recursive_gate, list(range(0, 6)))
Comment thread
mtreinish marked this conversation as resolved.
Outdated
qc.append(mcx_vchain_gate, list(range(0, 6)))
Comment thread
ElePT marked this conversation as resolved.
Outdated
Comment thread
mtreinish marked this conversation as resolved.
Outdated
qc.mcp(np.pi, [0, 2], 1)
qc.mct([0, 2], 1)
qc.mcx([0, 2], 1)
Expand Down