def _get_sycamore_optimizers(
    tolerance: float, tabulation: Optional[GateTabulation]
) -> List[Callable[['cirq.Circuit'], None]]:
    return [
        ConvertToSycamoreGates(tabulation=tabulation).optimize_circuit,
        lambda c: optimizers.merge_single_qubit_gates_into_phxz(c, tolerance),
        *_get_common_cleanup_optimizers(tolerance=tolerance),
    ]
def _get_sqrt_iswap_optimizers(
    tolerance: float, tabulation: Optional[GateTabulation]
) -> List[Callable[['cirq.Circuit'], None]]:
    if tabulation is not None:
        # coverage: ignore
        raise ValueError("Gate tabulation not supported for sqrt_iswap")
    return [
        ConvertToSqrtIswapGates().optimize_circuit,
        lambda c: optimizers.merge_single_qubit_gates_into_phxz(c, tolerance),
        *_get_common_cleanup_optimizers(tolerance=tolerance),
    ]
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),
    ]