Add clifford gates to collect_cliffords (#12750)

* add clifford gates to collect_cliffords

* replace hard coded clifford names by clifford_circuit names

* move import

* replace hard coded clifford names in random_clifford_circuit

* add release notes

* add permutation to collect_clifford gate list
This commit is contained in:
Shelly Garion 2024-07-11 17:10:27 +03:00 committed by GitHub
parent a306cb67c8
commit 41267ecf5d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 16 additions and 17 deletions

View File

@ -18,6 +18,7 @@ from qiskit.circuit import ClassicalRegister, QuantumCircuit, CircuitInstruction
from qiskit.circuit import Reset
from qiskit.circuit.library import standard_gates
from qiskit.circuit.exceptions import CircuitError
from qiskit.quantum_info.operators.symplectic.clifford_circuits import _BASIS_1Q, _BASIS_2Q
def random_circuit(
@ -312,8 +313,9 @@ def random_clifford_circuit(num_qubits, num_gates, gates="all", seed=None):
QuantumCircuit: constructed circuit
"""
gates_1q = ["i", "x", "y", "z", "h", "s", "sdg", "sx", "sxdg"]
gates_2q = ["cx", "cz", "cy", "swap", "iswap", "ecr", "dcx"]
gates_1q = list(set(_BASIS_1Q.keys()) - {"v", "w", "id", "iden", "sinv"})
gates_2q = list(_BASIS_2Q.keys())
if gates == "all":
if num_qubits == 1:
gates = gates_1q

View File

@ -22,6 +22,7 @@ from qiskit.transpiler.passes.optimization.collect_and_collapse import (
)
from qiskit.quantum_info.operators import Clifford
from qiskit.quantum_info.operators.symplectic.clifford_circuits import _BASIS_1Q, _BASIS_2Q
class CollectCliffords(CollectAndCollapse):
@ -69,21 +70,11 @@ class CollectCliffords(CollectAndCollapse):
)
clifford_gate_names = [
"x",
"y",
"z",
"h",
"s",
"sdg",
"cx",
"cy",
"cz",
"swap",
"clifford",
"linear_function",
"pauli",
]
clifford_gate_names = (
list(_BASIS_1Q.keys())
+ list(_BASIS_2Q.keys())
+ ["clifford", "linear_function", "pauli", "permutation"]
)
def _is_clifford_gate(node):

View File

@ -0,0 +1,6 @@
---
fixes:
- |
Add more Clifford gates to the :class:`.CollectCliffords()` transpiler pass.
In particular, we have added the gates :class:`ECRGate()`, :class:`DCXGate()`,
:class:`iSWAPGate()`, :class:`SXGate()` and :class:`SXdgGate()` to this transpiler pass.