def Uprime(self, display_matrix=False): #state_search is the state we are searching for #we will focus on the second term #Note that state search must be in decimal if self.search >= 2**self.dim: raise TypeError( "Search State parameter is outside of state space values") elif self.search < 0: raise TypeError( "Search State parameter is outside of state space values") else: #focusings on the second term of Uprime coin = self.c num_dir = int(2**coin) state = self.dim num_state = int(2**state) search_array = np.zeros((num_state, num_state)) search_array[self.search][self.search] = 1 search = Operator(search_array) s_c = np.zeros((2**(coin), 2**(coin))) for i in range(num_dir): for j in range(num_dir): s_c[i][j] = num_dir**-1 coin_ = Operator(s_c) search_op = coin_.tensor(search) S_ = self.S() term2 = search_op.compose(S_) U_ = self.U() Uprime = U_ - (2 * term2) if display_matrix: print("Matrix for U':") print(np.real(Uprime.data)) return Uprime
#por medio del atributo data asi se puede dibujar en latex final1 = Statevector.from_instruction(qc) final2 = Statevector.from_instruction(qc2) final3 = final1.tensor(final2) array_to_latex(final3.data, pretext="\\text{Statevector Solution 1= }") # In[10]: #Segundo, se utiliza la clase Operator que permite convertir varios objetos en Operators #entre ellos un circuito, por lo tanto se convierten los dos en Operator y luego #se realiza la multiplicacion tensorial mediante el metodo tensor el cual da como resultado otro #operator que es ademas una compuerta unitaria lo que permite adicionarla a un circuito y pintar este #luego se pinta el statevector de este circuito y se comprueba que es el mismo resultado del metodo anterior A = Operator(qc) B = Operator(qc2) finalal = A.tensor(B) #Del operator se saca el numero de qubits que contiene q3 = QuantumRegister(finalal.num_qubits) #cr = ClassicalRegister(finalal.num_qubits) qc3 = QuantumCircuit(q3) qc3.append(finalal, q3) #qc3.measure(q3, cr) # In[11]: #Dibujo del circuito resultante qc3.draw(output='mpl') # In[12]: #Statevector resultante
def parse_pauli_spec(spec): op = Operator(Pauli(label=spec[0])) for i in range(1, 4): op = op.tensor(Pauli(label=spec[i])) return op