def expand(self): weights = self.parameters[0] with qml.tape.QuantumTape() as tape: for i, pauli_word in enumerate( _all_pauli_words_but_identity(len(self.wires))): PauliRot(weights[i], pauli_word, wires=self.wires) return tape
def expand(self): hamiltonian = self.parameters[0] time = self.parameters[1] n = self.parameters[2] pauli = {"Identity": "I", "PauliX": "X", "PauliY": "Y", "PauliZ": "Z"} theta = [] pauli_words = [] wires = [] for i, term in enumerate(hamiltonian.ops): word = "" try: if isinstance(term.name, str): word = pauli[term.name] if isinstance(term.name, list): word = "".join(pauli[j] for j in term.name) except KeyError as error: raise ValueError( "hamiltonian must be written in terms of Pauli matrices, got {}".format(error) ) from error # skips terms composed solely of identities if word.count("I") != len(word): theta.append((2 * time * hamiltonian.coeffs[i]) / n) pauli_words.append(word) wires.append(term.wires) with qml.tape.QuantumTape() as tape: for i in range(n): for j, term in enumerate(pauli_words): PauliRot(theta[j], term, wires=wires[j]) return tape