def from_single_map( pauli_map_to: Optional[Dict[Pauli, Tuple[Pauli, bool]]] = None, *, x_to: Optional[Tuple[Pauli, bool]] = None, y_to: Optional[Tuple[Pauli, bool]] = None, z_to: Optional[Tuple[Pauli, bool]] = None) -> 'SingleQubitCliffordGate': """Returns a SingleQubitCliffordGate for the specified transform with a 90 or 180 degree rotation. The arguments are exclusive, only one may be specified. Args: pauli_map_to: A dictionary with a single key value pair describing the transform. x_to: The transform from cirq.X y_to: The transform from cirq.Y z_to: The transform from cirq.Z """ rotation_map = SingleQubitCliffordGate._validate_map_input( 1, pauli_map_to, x_to=x_to, y_to=y_to, z_to=z_to) (trans_from, (trans_to, flip)), = tuple(rotation_map.items()) if trans_from == trans_to: trans_from2 = Pauli.by_relative_index(trans_to, 1) # 1 or 2 work trans_to2 = Pauli.by_relative_index(trans_from, 1) flip2 = False else: trans_from2 = trans_to trans_to2 = trans_from flip2 = not flip rotation_map[trans_from2] = PauliTransform(trans_to2, flip2) return SingleQubitCliffordGate.from_double_map( cast(Dict[Pauli, Tuple[Pauli, bool]], rotation_map))
def from_pauli(pauli: Pauli, sqrt: bool = False) -> 'SingleQubitCliffordGate': prev_pauli = Pauli.by_relative_index(pauli, -1) next_pauli = Pauli.by_relative_index(pauli, 1) if sqrt: rotation_map = { prev_pauli: (next_pauli, True), pauli: (pauli, False), next_pauli: (prev_pauli, False), } else: rotation_map = { prev_pauli: (prev_pauli, True), pauli: (pauli, False), next_pauli: (next_pauli, True), } return SingleQubitCliffordGate.from_clifford_tableau(_to_clifford_tableau(rotation_map))
def from_pauli(pauli: Pauli, sqrt: bool = False) -> 'SingleQubitCliffordGate': prev_pauli = Pauli.by_relative_index(pauli, -1) next_pauli = Pauli.by_relative_index(pauli, 1) if sqrt: rotation_map = {prev_pauli: PauliTransform(next_pauli, True), pauli: PauliTransform(pauli, False), next_pauli: PauliTransform(prev_pauli, False)} else: rotation_map = {prev_pauli: PauliTransform(prev_pauli, True), pauli: PauliTransform(pauli, False), next_pauli: PauliTransform(next_pauli, True)} inverse_map = {to: PauliTransform(frm, flip) for frm, (to, flip) in rotation_map.items()} return SingleQubitCliffordGate(_rotation_map=rotation_map, _inverse_map=inverse_map)