ConsecutiveGateKAKDecomposition(based_2q_gates: Union[str, GateType] = None, threshold: int = 3, min_gate_num: int = 8)
Class for optimization the consecutive quantum gates, use KAK Decomposition.
Parameters:
-
thredshold
(int)
–
The threshold number to defined of 2-q gates to decomposition
-
based_gates
(list)
–
The target 2-qubit gate, should be one of [cx, rxx, ryy, rzz].
if is None, use cx.
Source code in QuICT/qcda/optimization/consecutive_gate_kak_decomposition.py
| def __init__(self, based_2q_gates: Union[str, GateType] = None, threshold: int = 3, min_gate_num: int = 8):
"""
Args:
thredshold (int): The threshold number to defined of 2-q gates to decomposition
based_gates (list): The target 2-qubit gate, should be one of [cx, rxx, ryy, rzz].
if is None, use cx.
"""
self.threshold = threshold
self.min_gate_num = min_gate_num
self.based_gates = self._valid_2q_gate(based_2q_gates)
# KAK Decomposition
self._disintegrator = CartanKAKDecomposition(target=self.based_gates)
self._matrix_generator = CircuitMatrix()
|
execute
execute(circuit: Union[Circuit, CompositeGate])
Decomposition all consecutive quantum gates with the same n-target qubits in circuit.
Args:
circuit (Circuit or CompositeGate): The target quantum circuit
Source code in QuICT/qcda/optimization/consecutive_gate_kak_decomposition.py
| def execute(self, circuit: Union[Circuit, CompositeGate]):
""" Decomposition all consecutive quantum gates with the same n-target qubits in circuit.
Args:
circuit (Circuit or CompositeGate): The target quantum circuit
"""
# Split into Blocks
circuit_blocks, block_qargs = self._circuit_chunking(circuit)
# Decomposition for each blocks
decomp_cir = Circuit(circuit.width()) if isinstance(circuit, Circuit) else CompositeGate()
for bid, cir_block in enumerate(circuit_blocks):
cgate = self._decomposition(cir_block, block_qargs[bid])
cgate | decomp_cir
decomp_cir.flatten()
return decomp_cir
|