def _get_xmon_optimizers_part_cz(
    tolerance: float, tabulation: Optional[GateTabulation]
) -> List[Callable[['cirq.Circuit'], None]]:
    if tabulation is not None:
        # coverage: ignore
        raise ValueError("Gate tabulation not supported for xmon")
    return [
        convert_to_xmon_gates.ConvertToXmonGates().optimize_circuit,
        optimizers.MergeInteractions(tolerance=tolerance,
                                     allow_partial_czs=True).optimize_circuit,
        lambda c: optimizers.merge_single_qubit_gates_into_phxz(c, tolerance),
        *_get_common_cleanup_optimizers(tolerance=tolerance),
    ]
Exemple #2
0
from cirq import circuits, devices, optimizers
from cirq.google.optimizers import convert_to_xmon_gates

if TYPE_CHECKING:
    import cirq

_TOLERANCE = 1e-5


def _merge_rots(c: 'cirq.Circuit'):
    return optimizers.merge_single_qubit_gates_into_phased_x_z(c, _TOLERANCE)


_OPTIMIZERS: List[Callable[['cirq.Circuit'], None]] = [
    convert_to_xmon_gates.ConvertToXmonGates().optimize_circuit,
    optimizers.MergeInteractions(tolerance=_TOLERANCE,
                                 allow_partial_czs=False).optimize_circuit,
    _merge_rots,
    optimizers.EjectPhasedPaulis(tolerance=_TOLERANCE).optimize_circuit,
    optimizers.EjectZ(tolerance=_TOLERANCE).optimize_circuit,
    optimizers.DropNegligible(tolerance=_TOLERANCE).optimize_circuit,
]

_OPTIMIZERS_PART_CZ: List[Callable[['cirq.Circuit'], None]] = [
    convert_to_xmon_gates.ConvertToXmonGates().optimize_circuit,
    optimizers.MergeInteractions(tolerance=_TOLERANCE,
                                 allow_partial_czs=True).optimize_circuit,
    _merge_rots,
    optimizers.EjectPhasedPaulis(tolerance=_TOLERANCE).optimize_circuit,
    optimizers.EjectZ(tolerance=_TOLERANCE).optimize_circuit,
Exemple #3
0
 def decompose_operation(self,
                         operation: 'cirq.Operation') -> 'cirq.OP_TREE':
     return convert_to_xmon_gates.ConvertToXmonGates().convert(operation)