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
def optimized_circuit(circuit: circuits.Circuit,
                      atol: float = 1e-8,
                      repeat: int = 10,
                      merge_interactions: bool = True) -> circuits.Circuit:
    circuit = circuits.Circuit(circuit)  # Make a copy
    for _ in range(repeat):
        start_len = len(circuit)
        start_cz_count = _cz_count(circuit)
        if merge_interactions:
            optimizers.MergeInteractions(
                allow_partial_czs=False,
                post_clean_up=_optimized_ops,
            ).optimize_circuit(circuit)
        circuit2 = pauli_string_optimized_circuit(circuit,
                                                  move_cliffords=False,
                                                  atol=atol)
        circuit3 = clifford_optimized_circuit(circuit2, atol=atol)
        if len(circuit3) == start_len and _cz_count(
                circuit3) == start_cz_count:
            return circuit3
        circuit = circuit3
    return circuit
Exemple #3
0
"""A combination of several optimizations targeting XmonDevice."""
from typing import Optional, Callable, cast

from cirq import circuits, devices, ops, optimizers
from cirq.google import (
    convert_to_xmon_gates,
    merge_rotations,
    xmon_device)

_TOLERANCE = 1e-5

_OPTIMIZERS = [
    convert_to_xmon_gates.ConvertToXmonGates(),

    optimizers.MergeInteractions(tolerance=_TOLERANCE,
                                 allow_partial_czs=False),
    convert_to_xmon_gates.ConvertToXmonGates(),
    merge_rotations.MergeRotations(tolerance=_TOLERANCE),
    optimizers.EjectPhasedPaulis(tolerance=_TOLERANCE),
    optimizers.EjectZ(tolerance=_TOLERANCE),
    optimizers.DropNegligible(tolerance=_TOLERANCE),
    merge_rotations.MergeRotations(tolerance=_TOLERANCE),
]

_OPTIMIZERS_PART_CZ = [
    convert_to_xmon_gates.ConvertToXmonGates(),

    optimizers.MergeInteractions(tolerance=_TOLERANCE,
                                 allow_partial_czs=True),
    convert_to_xmon_gates.ConvertToXmonGates(),
    merge_rotations.MergeRotations(tolerance=_TOLERANCE),