Example #1
0
 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
Example #2
0
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)
Example #4
0
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)