def sq(a, b, c): circ = Circuit(1) if c != 0: circ.Rz(c, 0) if b != 0: circ.Rx(b, 0) if a != 0: circ.Rz(a, 0) return circ
def U(s, n_qubits): c = Circuit(n_qubits) for i in range(len(s)): if s[i] == "X": c.H(i) elif s[i] == "Y": c.Rx(i, 0.5) elif s[i] == "Z": pass return c
def pauli_evolution(pauli: List[Tuple[int, str]], coeff: complex, circ: Circuit): """Appends the evolution circuit corresponding to a given Pauli tensor Args: pauli: coeff (complex): circ (Circuit): """ # set up the correct basis all_qbs = list(zip(*pauli))[0] for qb_idx, p in pauli: if p == 'X': circ.H(qb_idx) elif p == 'Y': # angles in half-turns circ.Rx(qb_idx, 0.5) # cnot cascade cx_qb_pairs = list(zip(sorted(all_qbs)[:-1], sorted(all_qbs)[1:])) for pair in cx_qb_pairs: circ.CX(pair[0], pair[1]) # rotation (convert angle from radians to half-turns) circ.Rz(all_qbs[-1], (2 * coeff.imag) / PI) # reverse cascade and revert basis cx_qb_pairs = list(zip(sorted(all_qbs)[:-1], sorted(all_qbs)[1:])) for pair in reversed(cx_qb_pairs): circ.CX(pair[0], pair[1]) all_qbs = list(zip(*pauli))[0] for qb_idx, p in pauli: if p == 'X': circ.H(qb_idx) elif p == 'Y': circ.Rx(qb_idx, -0.5)
def measurement_circuits(hamiltonian, n_qubits): all_circs = [] for pauli, _ in hamiltonian.terms.items(): if not pauli: continue # Ignore the constant term measure_circ = Circuit(n_qubits, n_qubits) for qb, p in pauli: if p == 'I': continue # Discard I qubits elif p == 'X': measure_circ.H(qb) elif p == 'Y': measure_circ.Rx(0.5, qb) measure_circ.Measure(qb, qb) all_circs.append(measure_circ) return all_circs
from pytket import Circuit from pytket.extensions.qiskit import AerBackend from itertools import combinations from qiskit.providers.aer.noise import NoiseModel, depolarizing_error # Quantum teleportation circuit: c = Circuit() alice = c.add_q_register("a", 2) bob = c.add_q_register("b", 1) data = c.add_c_register("d", 2) final = c.add_c_register("f", 1) # Start in an interesting state: c.Rx(0.3, alice[0]) # Set up a Bell state between Alice and Bob: c.H(alice[1]).CX(alice[1], bob[0]) # Measure Alice's qubits in the Bell basis: c.CX(alice[0], alice[1]).H(alice[0]) c.Measure(alice[0], data[0]) c.Measure(alice[1], data[1]) # Correct Bob's qubit: c.X(bob[0], condition_bits=[data[0], data[1]], condition_value=1) c.X(bob[0], condition_bits=[data[0], data[1]], condition_value=3)