跳转至

ConsecutiveGateKAKDecomposition

QuICT.qcda.optimization.consecutive_gate_kak_decomposition.ConsecutiveGateKAKDecomposition

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