Converts any circuit into two circuits where (circuit_left+circuit_right)
    is equivalent to the given circuit.

    Args:
        circuit: Any Circuit that cirq.google.optimized_for_xmon() supports.
            All gates should either provide a decomposition or have a known one
            or two qubit unitary matrix.

    Returns:
        (circuit_left, circuit_right)

        circuit_left contains only PauliStringPhasor operations.

        circuit_right is a Clifford circuit which contains only
        SingleQubitCliffordGate and PauliInteractionGate gates.
        It also contains MeasurementGates if the
        given circuit contains measurements.

def convert_and_separate_circuit(circuit: circuits.Circuit,
                                 leave_cliffords: bool = True,
                                 atol: float = 1e-8,
                                 ) -> Tuple[circuits.Circuit, circuits.Circuit]:
    """Converts any circuit into two circuits where (circuit_left+circuit_right)
    is equivalent to the given circuit.

    Args:
        circuit: Any Circuit that cirq.google.optimized_for_xmon() supports.
            All gates should either provide a decomposition or have a known one
            or two qubit unitary matrix.

    Returns:
        (circuit_left, circuit_right)

        circuit_left contains only PauliStringPhasor operations.

        circuit_right is a Clifford circuit which contains only
        SingleQubitCliffordGate and PauliInteractionGate gates.
        It also contains MeasurementGates if the
        given circuit contains measurements.
    """
    circuit = converted_gate_set(circuit,
                                 no_clifford_gates=not leave_cliffords,
                                 atol=atol)
    return pauli_string_half(circuit), regular_half(circuit)