Exemplo n.º 1
0
def make_circuit(n: int, f) -> QuantumCircuit:
    # circuit begin
    input_qubit = QuantumRegister(n, "qc")
    classical = ClassicalRegister(n, "qm")
    prog = QuantumCircuit(input_qubit, classical)
    prog.h(input_qubit[0])  # number=3
    prog.h(input_qubit[1])  # number=4
    prog.h(input_qubit[2])  # number=5
    prog.h(input_qubit[3])  # number=6
    prog.h(input_qubit[4])  # number=21
    prog.h(input_qubit[0])  # number=43
    prog.cz(input_qubit[4], input_qubit[0])  # number=44
    prog.h(input_qubit[0])  # number=45
    prog.h(input_qubit[0])  # number=56
    prog.cz(input_qubit[4], input_qubit[0])  # number=57
    prog.h(input_qubit[0])  # number=58
    prog.z(input_qubit[4])  # number=47
    prog.cx(input_qubit[4], input_qubit[0])  # number=48
    prog.h(input_qubit[0])  # number=37
    prog.cz(input_qubit[4], input_qubit[0])  # number=38
    prog.h(input_qubit[0])  # number=39

    Zf = build_oracle(n, f)

    repeat = floor(sqrt(2**n) * pi / 4)
    for i in range(repeat):
        prog.append(Zf.to_gate(), [input_qubit[i] for i in range(n)])
        prog.h(input_qubit[0])  # number=1
        prog.rx(-1.0430087609918113, input_qubit[4])  # number=36
        prog.h(input_qubit[1])  # number=2
        prog.h(input_qubit[2])  # number=7
        prog.h(input_qubit[3])  # number=8

        prog.cx(input_qubit[1], input_qubit[0])  # number=40
        prog.h(input_qubit[0])  # number=59
        prog.cz(input_qubit[1], input_qubit[0])  # number=60
        prog.h(input_qubit[0])  # number=61
        prog.x(input_qubit[0])  # number=53
        prog.cx(input_qubit[1], input_qubit[0])  # number=54
        prog.h(input_qubit[0])  # number=49
        prog.cz(input_qubit[1], input_qubit[0])  # number=50
        prog.h(input_qubit[0])  # number=51
        prog.x(input_qubit[1])  # number=10
        prog.rx(-0.06597344572538572, input_qubit[3])  # number=27
        prog.cx(input_qubit[0], input_qubit[2])  # number=22
        prog.x(input_qubit[2])  # number=23
        prog.h(input_qubit[2])  # number=28
        prog.cz(input_qubit[0], input_qubit[2])  # number=29
        prog.h(input_qubit[2])  # number=30
        prog.x(input_qubit[3])  # number=12

        if n >= 2:
            prog.mcu1(pi, input_qubit[1:], input_qubit[0])

        prog.x(input_qubit[0])  # number=13
        prog.x(input_qubit[1])  # number=14
        prog.x(input_qubit[2])  # number=15
        prog.x(input_qubit[3])  # number=16
        prog.h(input_qubit[4])  # number=35

        prog.h(input_qubit[0])  # number=17
        prog.rx(2.4912829742967055, input_qubit[2])  # number=26
        prog.h(input_qubit[1])  # number=18
        prog.h(input_qubit[2])  # number=19
        prog.h(input_qubit[2])  # number=55
        prog.h(input_qubit[2])  # number=25
        prog.h(input_qubit[3])  # number=20

    # circuit end

    for i in range(n):
        prog.measure(input_qubit[i], classical[i])

    return prog
Exemplo n.º 2
0
def make_circuit(n: int, f) -> QuantumCircuit:
    # circuit begin
    input_qubit = QuantumRegister(n, "qc")
    classical = ClassicalRegister(n, "qm")
    prog = QuantumCircuit(input_qubit, classical)
    prog.h(input_qubit[0])  # number=3
    prog.h(input_qubit[1])  # number=4
    prog.h(input_qubit[2])  # number=5
    prog.h(input_qubit[3])  # number=6
    prog.h(input_qubit[4])  # number=21
    prog.cx(input_qubit[0], input_qubit[2])  # number=38
    prog.x(input_qubit[2])  # number=39
    prog.cx(input_qubit[0], input_qubit[2])  # number=40

    Zf = build_oracle(n, f)

    repeat = floor(sqrt(2**n) * pi / 4)
    for i in range(1):
        prog.append(Zf.to_gate(), [input_qubit[i] for i in range(n)])
        prog.h(input_qubit[0])  # number=1
        prog.h(input_qubit[1])  # number=2
        prog.h(input_qubit[2])  # number=7
        prog.h(input_qubit[3])  # number=8
        prog.y(input_qubit[3])  # number=25

        prog.x(input_qubit[0])  # number=9
        prog.h(input_qubit[1])  # number=32
        prog.cz(input_qubit[0], input_qubit[1])  # number=33
        prog.h(input_qubit[1])  # number=34
        prog.cx(input_qubit[0], input_qubit[1])  # number=35
        prog.x(input_qubit[1])  # number=36
        prog.cx(input_qubit[0], input_qubit[1])  # number=37
        prog.cx(input_qubit[0], input_qubit[1])  # number=30
        prog.cx(input_qubit[0], input_qubit[2])  # number=22
        prog.x(input_qubit[2])  # number=23
        prog.y(input_qubit[3])  # number=27
        prog.cx(input_qubit[0], input_qubit[2])  # number=24
        prog.x(input_qubit[3])  # number=12
        prog.cx(input_qubit[1], input_qubit[2])  # number=31

        if n >= 2:
            prog.mcu1(pi, input_qubit[1:], input_qubit[0])

        prog.x(input_qubit[0])  # number=13
        prog.x(input_qubit[1])  # number=14
        prog.x(input_qubit[2])  # number=15
        prog.x(input_qubit[3])  # number=16

        prog.h(input_qubit[0])  # number=17
        prog.h(input_qubit[1])  # number=18
        prog.h(input_qubit[2])  # number=19
        prog.h(input_qubit[3])  # number=20

        prog.h(input_qubit[0])
        prog.h(input_qubit[1])
        prog.h(input_qubit[2])
        prog.h(input_qubit[3])

    # circuit end

    return prog
Exemplo n.º 3
0
def make_circuit(n:int,f) -> QuantumCircuit:
    # circuit begin
    input_qubit = QuantumRegister(n,"qc")
    classical = ClassicalRegister(n, "qm")
    prog = QuantumCircuit(input_qubit, classical)
    prog.h(input_qubit[0]) # number=3
    prog.h(input_qubit[1]) # number=4
    prog.h(input_qubit[0]) # number=57
    prog.cz(input_qubit[4],input_qubit[0]) # number=58
    prog.h(input_qubit[0]) # number=59
    prog.cx(input_qubit[4],input_qubit[0]) # number=63
    prog.z(input_qubit[4]) # number=64
    prog.cx(input_qubit[4],input_qubit[0]) # number=65
    prog.cx(input_qubit[4],input_qubit[0]) # number=56
    prog.h(input_qubit[2]) # number=50
    prog.cz(input_qubit[4],input_qubit[2]) # number=51
    prog.h(input_qubit[2]) # number=52
    prog.h(input_qubit[2]) # number=5
    prog.h(input_qubit[3]) # number=6
    prog.h(input_qubit[4])  # number=21

    Zf = build_oracle(n, f)

    repeat = floor(sqrt(2 ** n) * pi / 4)
    for i in range(repeat):
        prog.append(Zf.to_gate(), [input_qubit[i] for i in range(n)])
        prog.h(input_qubit[0])  # number=1
        prog.h(input_qubit[1])  # number=2
        prog.h(input_qubit[2])  # number=7
        prog.h(input_qubit[3])  # number=8


        prog.h(input_qubit[0])  # number=28
        prog.cx(input_qubit[3],input_qubit[0]) # number=60
        prog.z(input_qubit[3]) # number=61
        prog.cx(input_qubit[3],input_qubit[0]) # number=62
        prog.cz(input_qubit[1],input_qubit[0])  # number=29
        prog.h(input_qubit[0])  # number=30
        prog.h(input_qubit[0])  # number=43
        prog.cz(input_qubit[1],input_qubit[0])  # number=44
        prog.h(input_qubit[0])  # number=45
        prog.cx(input_qubit[1],input_qubit[0])  # number=35
        prog.cx(input_qubit[1],input_qubit[0])  # number=38
        prog.x(input_qubit[0])  # number=39
        prog.cx(input_qubit[1],input_qubit[0])  # number=40
        prog.cx(input_qubit[1],input_qubit[0])  # number=37
        prog.h(input_qubit[0])  # number=46
        prog.cz(input_qubit[1],input_qubit[0])  # number=47
        prog.h(input_qubit[0])  # number=48
        prog.cx(input_qubit[1],input_qubit[0])  # number=27
        prog.x(input_qubit[1])  # number=10
        prog.x(input_qubit[2])  # number=11
        prog.x(input_qubit[3])  # number=12

        if n>=2:
            prog.mcu1(pi,input_qubit[1:],input_qubit[0])

        prog.x(input_qubit[0])  # number=13
        prog.cx(input_qubit[0],input_qubit[1])  # number=22
        prog.y(input_qubit[2]) # number=41
        prog.x(input_qubit[1])  # number=23
        prog.cx(input_qubit[0],input_qubit[1])  # number=24
        prog.rx(1.0398671683382215,input_qubit[2]) # number=31
        prog.x(input_qubit[2])  # number=15
        prog.x(input_qubit[3])  # number=16


        prog.h(input_qubit[0])  # number=17
        prog.h(input_qubit[1])  # number=18
        prog.h(input_qubit[2])  # number=19
        prog.h(input_qubit[3])  # number=20


    # circuit end



    return prog
Exemplo n.º 4
0
##
## A complete notebook of all Chapter 4 samples (including this one) can be found at
##  https://github.com/oreilly-qc/oreilly-qc.github.io/tree/master/samples/Qiskit

from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, execute, Aer, IBMQ, BasicAer
import math
## Uncomment the next line to see diagrams when running in a notebook
#%matplotlib inline

## Example 4-1: Basic Teleportation

# Set up the program
alice = QuantumRegister(1, name='alice')
ep = QuantumRegister(1, name='ep')
bob = QuantumRegister(1, name='bob')
alice_c = ClassicalRegister(1, name='alicec')
ep_c = ClassicalRegister(1, name='epc')
bob_c = ClassicalRegister(1, name='bobc')
qc = QuantumCircuit(alice, ep, bob, alice_c, ep_c, bob_c)

# entangle
qc.h(ep)
qc.cx(ep, bob)
qc.barrier()

# prep payload
qc.reset(alice)
qc.h(alice)
qc.rz(math.radians(45), alice)
qc.h(alice)
qc.barrier()
Exemplo n.º 5
0
def build_circuit(n: int, f: Callable[[str], str]) -> QuantumCircuit:
    # implement the Bernstein-Vazirani circuit
    zero = np.binary_repr(0, n)
    b = f(zero)

    # initial n + 1 bits
    input_qubit = QuantumRegister(n + 1, "qc")
    classicals = ClassicalRegister(n, "qm")
    prog = QuantumCircuit(input_qubit, classicals)

    # inverse last one (can be omitted if using O_f^\pm)
    prog.x(input_qubit[n])
    # circuit begin
    prog.h(input_qubit[1])  # number=1
    prog.h(input_qubit[2])  # number=38
    prog.cz(input_qubit[0], input_qubit[2])  # number=39
    prog.h(input_qubit[2])  # number=40
    prog.h(input_qubit[2])  # number=59
    prog.cz(input_qubit[0], input_qubit[2])  # number=60
    prog.h(input_qubit[2])  # number=61
    prog.h(input_qubit[2])  # number=42
    prog.cz(input_qubit[0], input_qubit[2])  # number=43
    prog.h(input_qubit[2])  # number=44
    prog.h(input_qubit[2])  # number=48
    prog.cz(input_qubit[0], input_qubit[2])  # number=49
    prog.h(input_qubit[2])  # number=50
    prog.h(input_qubit[2])  # number=71
    prog.cz(input_qubit[0], input_qubit[2])  # number=72
    prog.h(input_qubit[2])  # number=73
    prog.x(input_qubit[2])  # number=55
    prog.h(input_qubit[2])  # number=67
    prog.cz(input_qubit[0], input_qubit[2])  # number=68
    prog.h(input_qubit[2])  # number=69
    prog.h(input_qubit[2])  # number=64
    prog.cz(input_qubit[0], input_qubit[2])  # number=65
    prog.h(input_qubit[2])  # number=66
    prog.h(input_qubit[2])  # number=75
    prog.cz(input_qubit[0], input_qubit[2])  # number=76
    prog.h(input_qubit[2])  # number=77
    prog.h(input_qubit[2])  # number=51
    prog.cz(input_qubit[0], input_qubit[2])  # number=52
    prog.h(input_qubit[2])  # number=53
    prog.h(input_qubit[2])  # number=25
    prog.cz(input_qubit[0], input_qubit[2])  # number=26
    prog.h(input_qubit[2])  # number=27
    prog.h(input_qubit[1])  # number=7
    prog.cz(input_qubit[2], input_qubit[1])  # number=8
    prog.rx(0.17592918860102857, input_qubit[2])  # number=34
    prog.rx(-0.3989822670059037, input_qubit[1])  # number=30
    prog.h(input_qubit[1])  # number=9
    prog.h(input_qubit[1])  # number=18
    prog.rx(2.3310617489636263, input_qubit[2])  # number=58
    prog.x(input_qubit[2])  # number=74
    prog.cz(input_qubit[2], input_qubit[1])  # number=19
    prog.h(input_qubit[1])  # number=20
    prog.x(input_qubit[1])  # number=62
    prog.y(input_qubit[1])  # number=14
    prog.h(input_qubit[1])  # number=22
    prog.cz(input_qubit[2], input_qubit[1])  # number=23
    prog.rx(-0.9173450548482197, input_qubit[1])  # number=57
    prog.cx(input_qubit[2], input_qubit[1])  # number=63
    prog.h(input_qubit[1])  # number=24
    prog.z(input_qubit[2])  # number=3
    prog.cx(input_qubit[2], input_qubit[1])  # number=70
    prog.z(input_qubit[1])  # number=41
    prog.x(input_qubit[1])  # number=17
    prog.y(input_qubit[2])  # number=5
    prog.x(input_qubit[2])  # number=21

    # apply H to get superposition
    for i in range(n):
        prog.h(input_qubit[i])
    prog.h(input_qubit[n])
    prog.barrier()

    # apply oracle O_f
    oracle = build_oracle(n, f)
    prog.append(oracle.to_gate(),
                [input_qubit[i] for i in range(n)] + [input_qubit[n]])

    # apply H back (QFT on Z_2^n)
    for i in range(n):
        prog.h(input_qubit[i])
    prog.barrier()

    # measure

    return prog
from qiskit import ClassicalRegister,QuantumRegister,QuantumCircuit,Aer
from qiskit import IBMQ
IBMQ.load_account()
S_simulator=Aer.backends(name='statevector_simulator')[0]
M_simulator=Aer.backends(name='qasm_simulator')[0]

q1=QuantumRegister(2,name='q1')
c1=ClassicalRegister(2,name='c1')
qc1=QuantumCircuit(q1,c1,name='qc1')

q2=QuantumRegister(2,name='q2')
c2=ClassicalRegister(2,name='c2')
qc2=QuantumCircuit(q2,c2,name='qc2')

qc1.h(q1[0])
qc1.iden(q1[1])
qc2.h(q2[0])
qc2.iden(q2[1])

qc3=qc1+qc2

print(qc3.qasm()[36:len(qc3.qasm())])

qc2+=qc1

print(qc2.qasm()[36:len(qc2.qasm())])
def unitary_gate_circuits_deterministic(final_measure=True):
    """Unitary gate test circuits with deterministic count output."""

    circuits = []

    qr = QuantumRegister(2, 'qr')
    if final_measure:
        cr = ClassicalRegister(2, 'cr')
        regs = (qr, cr)
    else:
        regs = (qr, )
    y_mat = np.array([[0, -1j], [1j, 0]], dtype=complex)
    cx_mat = np.array([[1, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [0, 1, 0, 0]],
                      dtype=complex)

    # CX01, |00> state
    circuit = QuantumCircuit(*regs)
    circuit.unitary(cx_mat, [0, 1])
    if final_measure:
        circuit.barrier(qr)
        circuit.measure(qr, cr)
    circuits.append(circuit)

    # CX10, |00> state
    circuit = QuantumCircuit(*regs)
    circuit.unitary(cx_mat, [1, 0])
    if final_measure:
        circuit.barrier(qr)
        circuit.measure(qr, cr)
    circuits.append(circuit)

    # CX01.(Y^I), |10> state
    circuit = QuantumCircuit(*regs)
    circuit.unitary(y_mat, [1])
    circuit.unitary(cx_mat, [0, 1])
    if final_measure:
        circuit.barrier(qr)
        circuit.measure(qr, cr)
    circuits.append(circuit)

    # CX10.(I^Y), |01> state
    circuit = QuantumCircuit(*regs)
    circuit.unitary(y_mat, [0])
    circuit.unitary(cx_mat, [1, 0])
    if final_measure:
        circuit.barrier(qr)
        circuit.measure(qr, cr)
    circuits.append(circuit)

    # CX01.(I^Y), |11> state
    circuit = QuantumCircuit(*regs)
    circuit.unitary(y_mat, [0])
    circuit.unitary(cx_mat, [0, 1])
    if final_measure:
        circuit.barrier(qr)
        circuit.measure(qr, cr)
    circuits.append(circuit)

    # CX10.(Y^I), |11> state
    circuit = QuantumCircuit(*regs)
    circuit.unitary(y_mat, [1])
    circuit.unitary(cx_mat, [1, 0])
    if final_measure:
        circuit.barrier(qr)
        circuit.measure(qr, cr)
    circuits.append(circuit)

    return circuits
Exemplo n.º 8
0
def make_circuit(n: int, f) -> QuantumCircuit:
    # circuit begin
    input_qubit = QuantumRegister(n, "qc")
    classical = ClassicalRegister(n, "qm")
    prog = QuantumCircuit(input_qubit, classical)
    prog.h(input_qubit[0])  # number=3
    prog.h(input_qubit[1])  # number=4
    prog.h(input_qubit[1])  # number=26
    prog.cz(input_qubit[4], input_qubit[1])  # number=27
    prog.h(input_qubit[1])  # number=28
    prog.h(input_qubit[2])  # number=5
    prog.h(input_qubit[3])  # number=6
    prog.h(input_qubit[4])  # number=21
    prog.h(input_qubit[1])  # number=34
    prog.cz(input_qubit[4], input_qubit[1])  # number=35
    prog.z(input_qubit[4])  # number=46
    prog.rx(0.8011061266653969, input_qubit[2])  # number=37
    prog.h(input_qubit[1])  # number=36

    Zf = build_oracle(n, f)

    repeat = floor(sqrt(2**n) * pi / 4)
    for i in range(repeat):
        prog.append(Zf.to_gate(), [input_qubit[i] for i in range(n)])
        prog.h(input_qubit[0])  # number=1
        prog.h(input_qubit[1])  # number=2
        prog.h(input_qubit[2])  # number=7
        prog.h(input_qubit[3])  # number=8

        prog.h(input_qubit[0])  # number=48
        prog.cz(input_qubit[1], input_qubit[0])  # number=49
        prog.h(input_qubit[0])  # number=50
        prog.x(input_qubit[0])  # number=39
        prog.cx(input_qubit[1], input_qubit[0])  # number=40
        prog.cx(input_qubit[0], input_qubit[1])  # number=42
        prog.x(input_qubit[1])  # number=43
        prog.cx(input_qubit[0], input_qubit[1])  # number=44
        prog.x(input_qubit[2])  # number=11
        prog.y(input_qubit[1])  # number=45
        prog.x(input_qubit[3])  # number=12
        prog.h(input_qubit[2])  # number=41

        if n >= 2:
            prog.mcu1(pi, input_qubit[1:], input_qubit[0])

        prog.cx(input_qubit[1], input_qubit[0])  # number=22
        prog.x(input_qubit[4])  # number=47
        prog.x(input_qubit[0])  # number=23
        prog.cx(input_qubit[1], input_qubit[0])  # number=24
        prog.cx(input_qubit[0], input_qubit[1])  # number=30
        prog.x(input_qubit[1])  # number=31
        prog.cx(input_qubit[0], input_qubit[1])  # number=32
        prog.x(input_qubit[2])  # number=15
        prog.h(input_qubit[4])  # number=29
        prog.x(input_qubit[3])  # number=16

        prog.h(input_qubit[0])  # number=17
        prog.h(input_qubit[1])  # number=18
        prog.h(input_qubit[2])  # number=19
        prog.h(input_qubit[3])  # number=20

    # circuit end

    for i in range(n):
        prog.measure(input_qubit[i], classical[i])

    return prog
"""
########### CREATING THE CIRCUIT ##########
"""

print("\nCreating the circuit ...")

# Numbers of qubits that will be used in the circuit
numbers_of_qubits = 2


# Create a Quantum Register with n qubits.
q = QuantumRegister(numbers_of_qubits)
    
# Create a Classical Register with n bits.
c = ClassicalRegister(numbers_of_qubits)
    
# Create a Quantum Circuit
qc = QuantumCircuit(q, c)
      
# Add a H gate on qubit 0, putting this qubit in superposition.
qc.h(q[0])
# Add a CX (CNOT) gate on control qubit 0 and target qubit 1, putting
# the qubits in a Bell state.
qc.cx(q[0], q[1])
# Add a Measure gate to see the state.
qc.measure(q, c)



""" 
Exemplo n.º 10
0
    def test_mapping_correction(self):
        """Test mapping works in previous failed case.
        """
        backend = FakeRueschlikon()
        qr = QuantumRegister(name='qr', size=11)
        cr = ClassicalRegister(name='qc', size=11)
        circuit = QuantumCircuit(qr, cr)
        circuit.u3(1.564784764685993, -1.2378965763410095, 2.9746763177861713,
                   qr[3])
        circuit.u3(1.2269835563676523, 1.1932982847014162, -1.5597357740824318,
                   qr[5])
        circuit.cx(qr[5], qr[3])
        circuit.u1(0.856768317675967, qr[3])
        circuit.u3(-3.3911273825190915, 0.0, 0.0, qr[5])
        circuit.cx(qr[3], qr[5])
        circuit.u3(2.159209321625547, 0.0, 0.0, qr[5])
        circuit.cx(qr[5], qr[3])
        circuit.u3(0.30949966910232335, 1.1706201763833217, 1.738408691990081,
                   qr[3])
        circuit.u3(1.9630571407274755, -0.6818742967975088, 1.8336534616728195,
                   qr[5])
        circuit.u3(1.330181833806101, 0.6003162754946363, -3.181264980452862,
                   qr[7])
        circuit.u3(0.4885914820775024, 3.133297443244865, -2.794457469189904,
                   qr[8])
        circuit.cx(qr[8], qr[7])
        circuit.u1(2.2196187596178616, qr[7])
        circuit.u3(-3.152367609631023, 0.0, 0.0, qr[8])
        circuit.cx(qr[7], qr[8])
        circuit.u3(1.2646005789809263, 0.0, 0.0, qr[8])
        circuit.cx(qr[8], qr[7])
        circuit.u3(0.7517780502091939, 1.2828514296564781, 1.6781179605443775,
                   qr[7])
        circuit.u3(0.9267400575390405, 2.0526277839695153, 2.034202361069533,
                   qr[8])
        circuit.u3(2.550304293455634, 3.8250017126569698, -2.1351609599720054,
                   qr[1])
        circuit.u3(0.9566260876600556, -1.1147561503064538, 2.0571590492298797,
                   qr[4])
        circuit.cx(qr[4], qr[1])
        circuit.u1(2.1899329069137394, qr[1])
        circuit.u3(-1.8371715243173294, 0.0, 0.0, qr[4])
        circuit.cx(qr[1], qr[4])
        circuit.u3(0.4717053496327104, 0.0, 0.0, qr[4])
        circuit.cx(qr[4], qr[1])
        circuit.u3(2.3167620677708145, -1.2337330260253256,
                   -0.5671322899563955, qr[1])
        circuit.u3(1.0468499525240678, 0.8680750644809365, -1.4083720073192485,
                   qr[4])
        circuit.u3(2.4204244021892807, -2.211701932616922, 3.8297006565735883,
                   qr[10])
        circuit.u3(0.36660280497727255, 3.273119149343493, -1.8003362351299388,
                   qr[6])
        circuit.cx(qr[6], qr[10])
        circuit.u1(1.067395863586385, qr[10])
        circuit.u3(-0.7044917541291232, 0.0, 0.0, qr[6])
        circuit.cx(qr[10], qr[6])
        circuit.u3(2.1830003849921527, 0.0, 0.0, qr[6])
        circuit.cx(qr[6], qr[10])
        circuit.u3(2.1538343756723917, 2.2653381826084606, -3.550087952059485,
                   qr[10])
        circuit.u3(1.307627685019188, -0.44686656993522567,
                   -2.3238098554327418, qr[6])
        circuit.u3(2.2046797998462906, 0.9732961754855436, 1.8527865921467421,
                   qr[9])
        circuit.u3(2.1665254613904126, -1.281337664694577, -1.2424905413631209,
                   qr[0])
        circuit.cx(qr[0], qr[9])
        circuit.u1(2.6209599970201007, qr[9])
        circuit.u3(0.04680566321901303, 0.0, 0.0, qr[0])
        circuit.cx(qr[9], qr[0])
        circuit.u3(1.7728411151289603, 0.0, 0.0, qr[0])
        circuit.cx(qr[0], qr[9])
        circuit.u3(2.4866395967434443, 0.48684511243566697,
                   -3.0069186877854728, qr[9])
        circuit.u3(1.7369112924273789, -4.239660866163805, 1.0623389015296005,
                   qr[0])
        circuit.barrier(qr)
        circuit.measure(qr, cr)

        circuits = transpile(circuit, backend)

        self.assertIsInstance(circuits, QuantumCircuit)
Exemplo n.º 11
0
def make_circuit(n: int, f) -> QuantumCircuit:
    # circuit begin
    input_qubit = QuantumRegister(n, "qc")
    classical = ClassicalRegister(n, "qm")
    prog = QuantumCircuit(input_qubit, classical)
    prog.h(input_qubit[0])  # number=3
    prog.h(input_qubit[1])  # number=4
    prog.h(input_qubit[2])  # number=5
    prog.h(input_qubit[3])  # number=6
    prog.h(input_qubit[4])  # number=21
    prog.h(input_qubit[0])  # number=44
    prog.cz(input_qubit[3], input_qubit[0])  # number=45
    prog.h(input_qubit[0])  # number=46
    prog.cx(input_qubit[3], input_qubit[0])  # number=48
    prog.cx(input_qubit[3], input_qubit[0])  # number=51
    prog.z(input_qubit[3])  # number=52
    prog.cx(input_qubit[3], input_qubit[0])  # number=53
    prog.cx(input_qubit[3], input_qubit[0])  # number=50
    prog.cx(input_qubit[3], input_qubit[0])  # number=34
    prog.rx(0.11938052083641225, input_qubit[1])  # number=36
    prog.cx(input_qubit[1], input_qubit[2])  # number=47

    Zf = build_oracle(n, f)

    repeat = floor(sqrt(2**n) * pi / 4)
    for i in range(repeat):
        prog.append(Zf.to_gate(), [input_qubit[i] for i in range(n)])
        prog.h(input_qubit[0])  # number=1
        prog.rx(1.4765485471872026, input_qubit[2])  # number=35
        prog.h(input_qubit[1])  # number=2
        prog.h(input_qubit[2])  # number=7
        prog.h(input_qubit[3])  # number=8

        prog.cx(input_qubit[1], input_qubit[0])  # number=41
        prog.x(input_qubit[0])  # number=42
        prog.cx(input_qubit[1], input_qubit[0])  # number=43
        prog.x(input_qubit[4])  # number=30
        prog.x(input_qubit[1])  # number=10
        prog.x(input_qubit[2])  # number=11
        prog.rx(0.45238934211692994, input_qubit[3])  # number=38
        prog.y(input_qubit[1])  # number=39
        prog.rx(-2.5258404934861938, input_qubit[1])  # number=25
        prog.h(input_qubit[3])  # number=29
        prog.cx(input_qubit[0], input_qubit[3])  # number=22
        prog.x(input_qubit[3])  # number=23
        prog.cx(input_qubit[0], input_qubit[3])  # number=24

        if n >= 2:
            prog.mcu1(pi, input_qubit[1:], input_qubit[0])

        prog.x(input_qubit[0])  # number=13
        prog.rx(-0.0722566310325653, input_qubit[4])  # number=37
        prog.x(input_qubit[1])  # number=14
        prog.cx(input_qubit[0], input_qubit[2])  # number=26
        prog.x(input_qubit[2])  # number=27
        prog.h(input_qubit[4])  # number=40
        prog.cx(input_qubit[0], input_qubit[2])  # number=28
        prog.x(input_qubit[3])  # number=16

        prog.h(input_qubit[0])  # number=17
        prog.h(input_qubit[1])  # number=18
        prog.h(input_qubit[2])  # number=19
        prog.h(input_qubit[3])  # number=20

    # circuit end

    for i in range(n):
        prog.measure(input_qubit[i], classical[i])

    return prog
Exemplo n.º 12
0
    """ Get n value used in Shor's algorithm, to know how many qubits are used """
    n = math.ceil(math.log(N, 2))

    print('Total number of qubits used: {0}\n'.format(4 * n + 2))

    """ Create quantum and classical registers """

    """auxilliary quantum register used in addition and multiplication"""
    aux = QuantumRegister(n + 2)
    """quantum register where the sequential QFT is performed"""
    up_reg = QuantumRegister(2 * n)
    """quantum register where the multiplications are made"""
    down_reg = QuantumRegister(n)
    """classical register where the measured values of the QFT are stored"""
    up_classic = ClassicalRegister(2 * n)

    """ Create Quantum Circuit """
    circuit = QuantumCircuit(down_reg, up_reg, aux, up_classic)

    """ Initialize down register to 1 and create maximal superposition in top register """
    circuit.h(up_reg)
    circuit.x(down_reg[0])

    """ Apply the multiplication gates as showed in the report in order to create the exponentiation """
    for i in range(0, 2 * n):
        cMULTmodN(circuit, up_reg[i], down_reg, aux, int(pow(a, pow(2, i))), N, n)

    """ Apply inverse QFT """
    create_inverse_QFT(circuit, up_reg, 2 * n, 1)
Exemplo n.º 13
0
# my_first_score.py
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.wrapper import execute


# Define the Quantum and Classical Registers
q = QuantumRegister(2)
c = ClassicalRegister(2)

# Build the circuit
my_first_score = QuantumCircuit(q, c)
# Pauli operations 
my_first_score.x(q[0])
my_first_score.y(q[1])
my_first_score.z(q[0])
my_first_score.barrier(q)
# Clifford operations
my_first_score.h(q)
my_first_score.s(q[0])
my_first_score.s(q[1]).inverse()
my_first_score.cx(q[0],q[1])
my_first_score.barrier(q)
# non-Clifford operations
my_first_score.t(q[0])
my_first_score.t(q[1]).inverse()
my_first_score.barrier(q)
# measurement operations
my_first_score.measure(q, c)
 
# Execute the circuit
result = execute(my_first_score, backend_name = 'local_qasm_simulator')
Exemplo n.º 14
0
def make_circuit(n:int,f) -> QuantumCircuit:
    # circuit begin
    input_qubit = QuantumRegister(n,"qc")
    classical = ClassicalRegister(n, "qm")
    prog = QuantumCircuit(input_qubit, classical)
    prog.h(input_qubit[0]) # number=3
    prog.rx(-1.3603096190043806,input_qubit[2]) # number=28
    prog.h(input_qubit[1]) # number=4
    prog.h(input_qubit[2]) # number=5
    prog.h(input_qubit[3]) # number=6
    prog.h(input_qubit[4])  # number=21

    Zf = build_oracle(n, f)

    repeat = floor(sqrt(2 ** n) * pi / 4)
    for i in range(repeat):
        prog.append(Zf.to_gate(), [input_qubit[i] for i in range(n)])
        prog.h(input_qubit[0])  # number=1
        prog.h(input_qubit[1])  # number=2
        prog.h(input_qubit[2])  # number=7
        prog.h(input_qubit[3])  # number=8
        prog.h(input_qubit[3]) # number=34
        prog.cz(input_qubit[4],input_qubit[3]) # number=35
        prog.h(input_qubit[3]) # number=36


        prog.h(input_qubit[0])  # number=38
        prog.cz(input_qubit[1],input_qubit[0])  # number=39
        prog.h(input_qubit[0])  # number=40
        prog.x(input_qubit[0])  # number=32
        prog.cx(input_qubit[1],input_qubit[0])  # number=33
        prog.cx(input_qubit[0],input_qubit[1])  # number=24
        prog.x(input_qubit[1])  # number=25
        prog.x(input_qubit[1]) # number=41
        prog.cx(input_qubit[0],input_qubit[1])  # number=26
        prog.x(input_qubit[2])  # number=11
        prog.cx(input_qubit[2],input_qubit[3]) # number=30
        prog.x(input_qubit[3])  # number=12
        prog.h(input_qubit[2]) # number=42

        if n>=2:
            prog.mcu1(pi,input_qubit[1:],input_qubit[0])

        prog.x(input_qubit[0])  # number=13
        prog.x(input_qubit[1])  # number=14
        prog.x(input_qubit[2])  # number=15
        prog.x(input_qubit[4]) # number=46
        prog.x(input_qubit[3])  # number=16


        prog.h(input_qubit[0])  # number=17
        prog.h(input_qubit[1])  # number=18
        prog.cx(input_qubit[0],input_qubit[2]) # number=43
        prog.x(input_qubit[2]) # number=44
        prog.h(input_qubit[2]) # number=47
        prog.cz(input_qubit[0],input_qubit[2]) # number=48
        prog.h(input_qubit[2]) # number=49
        prog.rx(-1.9697785938008003,input_qubit[1]) # number=37
        prog.h(input_qubit[2])  # number=19
        prog.h(input_qubit[3])  # number=20


    prog.x(input_qubit[1]) # number=22
    prog.x(input_qubit[1]) # number=23
    # circuit end



    return prog
Exemplo n.º 15
0
from qiskit import ClassicalRegister, QuantumRegister
from qiskit import QuantumCircuit, execute
from qiskit.tools.visualization import plot_histogram, circuit_drawer


qr = QuantumRegister(16)
cr = ClassicalRegister(16)
qc = QuantumCircuit(qr,cr)

qc.x(qr[0])
qc.x(qr[3])
qc.x(qr[5])

qc.h(qr[9])
qc.cx(qr[9], qr[8])
qc.x(qr[11])
qc.x(qr[12])
qc.x(qr[13])

for j in range(16):
    qc.measure(qr[j],cr[j])
print("Done\n")

#Sign onto IBM UE

from qiskit import register, available_backends, get_backend
#import Qconfig and set APIToken and API url
try:
    import sys 
    sys.path.append("../") #go to parent directory
    import Qconfig
Exemplo n.º 16
0
def make_circuit(n: int, f) -> QuantumCircuit:
    # circuit begin
    input_qubit = QuantumRegister(n, "qc")
    classical = ClassicalRegister(n, "qm")
    prog = QuantumCircuit(input_qubit, classical)
    prog.h(input_qubit[0])  # number=3
    prog.h(input_qubit[1])  # number=4
    prog.h(input_qubit[2])  # number=5
    prog.h(input_qubit[3])  # number=6
    prog.h(input_qubit[0])  # number=38
    prog.cz(input_qubit[1], input_qubit[0])  # number=39
    prog.h(input_qubit[0])  # number=40
    prog.h(input_qubit[0])  # number=51
    prog.cz(input_qubit[1], input_qubit[0])  # number=52
    prog.h(input_qubit[0])  # number=53
    prog.h(input_qubit[0])  # number=61
    prog.cz(input_qubit[1], input_qubit[0])  # number=62
    prog.h(input_qubit[0])  # number=63
    prog.z(input_qubit[1])  # number=55
    prog.cx(input_qubit[1], input_qubit[0])  # number=56
    prog.h(input_qubit[0])  # number=57
    prog.cz(input_qubit[1], input_qubit[0])  # number=58
    prog.h(input_qubit[0])  # number=59
    prog.h(input_qubit[0])  # number=32
    prog.cz(input_qubit[1], input_qubit[0])  # number=33
    prog.h(input_qubit[0])  # number=34
    prog.h(input_qubit[4])  # number=21

    Zf = build_oracle(n, f)

    repeat = floor(sqrt(2**n) * pi / 4)
    for i in range(repeat):
        prog.append(Zf.to_gate(), [input_qubit[i] for i in range(n)])
        prog.h(input_qubit[0])  # number=1
        prog.h(input_qubit[1])  # number=2
        prog.h(input_qubit[2])  # number=7
        prog.h(input_qubit[3])  # number=8
        prog.cx(input_qubit[3], input_qubit[0])  # number=41
        prog.z(input_qubit[3])  # number=42
        prog.cx(input_qubit[3], input_qubit[0])  # number=43
        prog.cx(input_qubit[1], input_qubit[3])  # number=44
        prog.cx(input_qubit[3], input_qubit[2])  # number=45
        prog.cx(input_qubit[4], input_qubit[2])  # number=60

        prog.x(input_qubit[0])  # number=9
        prog.x(input_qubit[1])  # number=10
        prog.x(input_qubit[2])  # number=11
        prog.cx(input_qubit[0], input_qubit[3])  # number=35
        prog.x(input_qubit[3])  # number=36
        prog.cx(input_qubit[0], input_qubit[3])  # number=37

        if n >= 2:
            prog.mcu1(pi, input_qubit[1:], input_qubit[0])

        prog.cx(input_qubit[1], input_qubit[0])  # number=24
        prog.x(input_qubit[0])  # number=25
        prog.cx(input_qubit[1], input_qubit[0])  # number=26
        prog.x(input_qubit[1])  # number=14
        prog.x(input_qubit[2])  # number=15
        prog.x(input_qubit[3])  # number=16
        prog.x(input_qubit[3])  # number=46
        prog.y(input_qubit[1])  # number=47

        prog.h(input_qubit[0])  # number=17
        prog.h(input_qubit[1])  # number=18
        prog.h(input_qubit[2])  # number=19
        prog.h(input_qubit[3])  # number=20

    prog.x(input_qubit[1])  # number=22
    prog.x(input_qubit[1])  # number=23
    # circuit end

    for i in range(n):
        prog.measure(input_qubit[i], classical[i])

    return prog
Exemplo n.º 17
0
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, execute, Aer
from math import acos, pi
# after Hadamard operators
u = [(63/64)**0.5,(1/64)**0.5]

def angle_between_two_states(u1,u2):
    dot_product = u1[0]*u2[0]+u1[1]*u2[1]
    return acos(dot_product)

theta = angle_between_two_states(u,[1,0])

all_visited_quantum_states =[]


qreg3 = QuantumRegister(1) # quantum register with 1 qubit
creg3 = ClassicalRegister(1) # classical register with 1 bit
mycircuit3 = QuantumCircuit(qreg3,creg3) # quantum circuit with quantum and classical registers


# set the qubit to |u> by rotating it by theta
mycircuit3.ry(2*theta,qreg3[0])

# read and store the current quantum state
current_state = execute(mycircuit3,Aer.get_backend('statevector_simulator')).result().get_statevector(mycircuit3)
[x,y] = [current_state[0].real,current_state[1].real]
all_visited_quantum_states.append([x,y,'u'])


# three iterations
for i in range(3): # 4,5,6,7,8,9,10
    # the first reflection