-
Notifications
You must be signed in to change notification settings - Fork 289
Expand file tree
/
Copy pathibm.py
More file actions
executable file
·63 lines (51 loc) · 1.96 KB
/
ibm.py
File metadata and controls
executable file
·63 lines (51 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import matplotlib.pyplot as plt
import getpass
from projectq import MainEngine
from projectq.backends import IBMBackend
from projectq.libs.hist import histogram
from projectq.ops import Measure, Entangle, All
import projectq.setups.ibm
def run_entangle(eng, num_qubits=5):
"""
Runs an entangling operation on the provided compiler engine.
Args:
eng (MainEngine): Main compiler engine to use.
num_qubits (int): Number of qubits to entangle.
Returns:
measurement (list<int>): List of measurement outcomes.
"""
# allocate the quantum register to entangle
qureg = eng.allocate_qureg(num_qubits)
# entangle the qureg
Entangle | qureg
# measure; should be all-0 or all-1
All(Measure) | qureg
# run the circuit
eng.flush()
# access the probabilities via the back-end:
# results = eng.backend.get_probabilities(qureg)
# for state in results:
# print("Measured {} with p = {}.".format(state, results[state]))
# or plot them directly:
histogram(eng.backend, qureg)
plt.show()
# return one (random) measurement outcome.
return [int(q) for q in qureg]
if __name__ == "__main__":
#devices commonly available :
# ibmq_16_melbourne (15 qubit)
# ibmq_essex (5 qubit)
# ibmq_qasm_simulator (32 qubits)
device = None # replace by the IBM device name you want to use
token = None # replace by the token given by IBMQ
if token is None:
token = getpass.getpass(prompt='IBM Q token > ')
if device is None:
token = getpass.getpass(prompt='IBM device > ')
# create main compiler engine for the IBM back-end
eng = MainEngine(IBMBackend(use_hardware=True, token=token, num_runs=1024,
verbose=False, device=device),
engine_list=projectq.setups.ibm.get_engine_list(
token=token, device=device))
# run the circuit and print the result
print(run_entangle(eng))