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)
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
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)}")