commute_phases#
Module: iqm.qrisp_iqm.passes
- iqm.qrisp_iqm.passes.commute_phases(preserve_unitary: bool = False) Callable[[QuantumCircuit], QuantumCircuit]#
Create a pass that optimizes U3 gates by commuting phase information past SWAP gates.
This pass tracks and accumulates phases on each qubit, allowing single-qubit rotations to be optimized by combining phase information across SWAP operations. It modifies U3 gates to absorb accumulated phases and can optionally preserve the overall unitary by adding final phase gates.
- Parameters:
preserve_unitary (bool, optional) – If True, adds final U3 gates to preserve overall unitary. Default is False.
- Returns:
Callable[[QuantumCircuit], QuantumCircuit] – A pass function that transforms the circuit.
Algorithm
———
- Tracks accumulated phase for each qubit
- For U3 gates (incorporates accumulated phase into lambda parameter)
- Skips two-qubit gates if either qubit hasn’t been initialized
- Optionally adds final phase gates if preserve_unitary=True
- Return type:
Callable[[QuantumCircuit], QuantumCircuit]
Example
>>> from qrisp import QuantumCircuit, PassManager >>> from iqm.qrisp_iqm import commute_phases >>> qc = QuantumCircuit(2); qc.h(0); qc.cx(0, 1); qc.measure(qc.qubits) >>> pm = PassManager() >>> pm += commute_phases(preserve_unitary=True) >>> transpiled_qc = pm.run(qc)