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
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
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
## ## 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()
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
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) """
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)
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
""" 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)
# 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')
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
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
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
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