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), ]
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
"""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),