def __pow__(self, exponent: int) -> 'LinearCombinationOfGates': if not isinstance(exponent, int): return NotImplemented if exponent < 0: return NotImplemented if self.num_qubits() != 1: return NotImplemented pauli_basis = { identity.I, pauli_gates.X, pauli_gates.Y, pauli_gates.Z, } if not set(self.keys()).issubset(pauli_basis): return NotImplemented ai = self[identity.I] ax = self[pauli_gates.X] ay = self[pauli_gates.Y] az = self[pauli_gates.Z] bi, bx, by, bz = operator_spaces.pow_pauli_combination( ai, ax, ay, az, exponent) return LinearCombinationOfGates({ identity.I: bi, pauli_gates.X: bx, pauli_gates.Y: by, pauli_gates.Z: bz })
def __pow__(self, exponent: int) -> 'LinearCombinationOfOperations': if not isinstance(exponent, int): return NotImplemented if exponent < 0: return NotImplemented if len(self.qubits) != 1: return NotImplemented qubit = self.qubits[0] i = identity.I(qubit) x = pauli_gates.X(qubit) y = pauli_gates.Y(qubit) z = pauli_gates.Z(qubit) pauli_basis = {i, x, y, z} if not set(self.keys()).issubset(pauli_basis): return NotImplemented ai, ax, ay, az = self[i], self[x], self[y], self[z] bi, bx, by, bz = operator_spaces.pow_pauli_combination(ai, ax, ay, az, exponent) return LinearCombinationOfOperations({i: bi, x: bx, y: by, z: bz})