Example #1
0
    def __mul__(self, other) -> 'PauliString':
        if not (isinstance(other, (PauliString, numbers.Number)) or
                gate_operation.op_gate_isinstance(other,
                                                  common_gates.IdentityGate)):
            return NotImplemented

        return PauliString(other,
                           qubit_pauli_map=self._qubit_pauli_map,
                           coefficient=self.coefficient)
Example #2
0
    def __rmul__(self, other) -> 'PauliString':
        if isinstance(other, numbers.Number):
            return PauliString(qubit_pauli_map=self._qubit_pauli_map,
                               coefficient=self._coefficient *
                               complex(cast(SupportsComplex, other)))

        if gate_operation.op_gate_isinstance(other, common_gates.IdentityGate):
            return self

        # Note: PauliString case handled by __mul__.
        return NotImplemented
Example #3
0
 def inline_times_pauli_string_like(self,
                                    contents: 'cirq.PAULI_STRING_LIKE'):
     if isinstance(contents, PauliString):
         # Note: cirq.X/Y/Z(qubit) are PauliString instances.
         self.inline_times_pauli_string(contents)
     elif gate_operation.op_gate_isinstance(contents,
                                            common_gates.IdentityGate):
         pass  # No effect.
     elif isinstance(contents, Mapping):
         self._inline_times_mapping(contents)
     elif isinstance(contents, Iterable) and not isinstance(contents, str):
         for item in contents:
             self.inline_times_pauli_string_like(
                 cast(PAULI_STRING_LIKE, item))
     elif isinstance(contents, numbers.Number):
         self.coef *= complex(cast(SupportsComplex, contents))
     else:
         raise TypeError(f"Not a `cirq.PAULI_STRING_LIKE`: "
                         f"{type(contents)}, {repr(contents)}")