def output_state(dx,dy,dz): I_f = np.array([[1, 0], [0, 1]]) I = np.array([[1, 0], [0, 1]]) X_f = np.array([[0, 1], [1, 0]]) X = np.array([[0, 1], [1, 0]]) for q in range(1): I_f = np.kron(I_f, I) X_f = np.kron(X_f, X) J = Operator(1 / np.sqrt(2) * (I_f + 1j * X_f)) J_dg = J.adjoint() circ = QuantumCircuit(2,2) circ.append(J, range(2)) for q in range(2): circ.append(RXGate(dx),[q]) circ.append(RYGate(dy),[q]) circ.append(RZGate(dz),[q]) circ.append(J_dg, range(2)) backend = Aer.get_backend('statevector_simulator') job = backend.run(circ) result = job.result() outputstate = result.get_statevector(circ, decimals=5) return outputstate
def crear_circuito(n, tipo): I_f = np.array([[1, 0], [0, 1]]) I = np.array([[1, 0], [0, 1]]) X_f = np.array([[0, 1], [1, 0]]) X = np.array([[0, 1], [1, 0]]) for q in range(n - 1): I_f = np.kron(I_f, I) X_f = np.kron(X_f, X) J = Operator(1 / np.sqrt(2) * (I_f + 1j * X_f)) J_dg = J.adjoint() circ = QuantumCircuit(n, n) circ.append(J, range(n)) if n == 1: dx = np.pi dy = 0 dz = 0 elif n == 2: # barrido dx = tipo[0] dy = tipo[1] dz = tipo[2] for q in range(n): circ.append(RXGate(dx), [q]) circ.append(RYGate(dy), [q]) circ.append(RZGate(dz), [q]) circ.append(J_dg, range(n)) circ.measure(range(n), range(n)) return circ
def _format_povms(povms: Sequence[any]) -> Tuple[Tuple[np.ndarray, ...], ...]: """Format sequence of basis POVMs""" formatted_povms = [] # Convert from operator/channel to POVM effects for povm in povms: if isinstance(povm, (list, tuple)): # POVM is already an effect formatted_povms.append(povm) continue # Convert POVM to operator of quantum channel try: chan = Operator(povm) except QiskitError: chan = SuperOp(povm) adjoint = chan.adjoint() dims = adjoint.input_dims() dim = np.prod(dims) effects = tuple(DensityMatrix.from_int(i, dims).evolve(adjoint) for i in range(dim)) formatted_povms.append(effects) # Format POVM effects to density matrix matrices return tuple(tuple(DensityMatrix(effect).data for effect in povm) for povm in formatted_povms)