-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcode
More file actions
148 lines (97 loc) · 3.18 KB
/
Copy pathcode
File metadata and controls
148 lines (97 loc) · 3.18 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# step 1 : Mapping Quantum Circuit
# Circuit Library
# Standard Gates
from qiskit import QuantumCircuit,QuantumRegister
from qiskit.circuit.library import HGate, MCXGate
from IPython.display import display
import matplotlib.pyplot as plt
qc = QuantumCircuit(4)
qc.append(HGate(),[0])
qc.append(MCXGate(3),[0,1,2,3])
display(qc.draw('mpl'))
qc = QuantumCircuit(4)
qc.h(0)
qc.mcx([0,1,2],3)
display(qc.draw('mpl'))
from qiskit.circuit.library import get_standard_gate_name_mapping
get_name_map = get_standard_gate_name_mapping()
print(type(get_name_map['cx']))
# Higher PreBuilt Circuits
1. N_local Circuit
from qiskit.circuit.library import n_local
two_local = n_local(3,'rx','cz')
display(two_local.draw('mpl'))
print(two_local.parameters)
bound_circuit = two_local.assign_parameters({p:0 for p in two_local.parameters})
display(bound_circuit.decompose().draw('mpl'))
2. Data Encoding Circuit
(Angle encoding)
from qiskit.circuit.library import zz_feature_map
features = [0.2,0.4,0.8]
feature_map = zz_feature_map(feature_dimension=len(features))
encoded = feature_map.assign_parameters(features)
display(encoded.draw('mpl'))
#3. Time Evolution Circuit
from qiskit.circuit.library import PauliEvolutionGate
from qiskit.circuit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
state = QuantumCircuit(3)
state.h(1)
hamaltonian = SparsePauliOp(['ZZI','IZZ'])
evolution = PauliEvolutionGate(hamaltonian,time=1)
state.compose(evolution, inplace=True)
display(state.draw('mpl'))
Gates in universal U form
qc = QuantumCircuit(2)
qc.x(0)
qc.h(0)
display(qc.draw('mpl'))
display(qc.data[0].operation.definition.draw('mpl'))
display(qc.data[1].operation.definition.draw('mpl'))
# composing two circuits
qc_a = QuantumCircuit(4)
qc_a.x(0)
qc_b = QuantumCircuit(2,name='qc_b')
qc_b.y(0)
qc_b.z(1)
combined = qc_a.compose(qc_b,qubits=[1,3]) #composing qubits (0,1) of qc_a, to qubits (1,3) of qc_b, respectively
display(combined.draw('mpl'))
inst = qc_b.to_instruction()
qc_a.append(inst,[1,3])
display(qc_a.draw('mpl'))
# Circuits as gates in circuits
gate = qc_b.to_gate().control()
qc_a.append(gate,[0,1,3])
display(qc_a.draw('mpl'))
# Decomposing circuit
# to see whats going on inside without changing the circuit
display(qc_a.decompose().draw('mpl'))
# Measuring Circuit
qc= QuantumCircuit(5,5)
qc.x([0,1,4])
qc.measure(range(5),range(5)) # Measure all qubit in coresponding clbits
display(qc.draw('mpl'))
qc= QuantumCircuit(5,5)
qc.x([0,1,4])
qc.measure(1,0) #Measure qubit 1 into classical bit 0
display(qc.draw('mpl'))
qc= QuantumCircuit(5,5)
qc.x([0,1,4])
qc.measure_all()
display(qc.draw('mpl'))
qc= QuantumCircuit(5,5)
qc.x([0,1,4])
qc.measure_active() #Measure qubits that are not idle but active
display(qc.draw('mpl'))
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeBrisbane
backend = FakeBrisbane()
pass_manager = generate_preset_pass_manager(optimization_level=3,backend=backend)
q = QuantumRegister(2,name='q')
qc = QuantumCircuit(2)
a,b = q
qc.h(a)
qc.cx(a,b)
qc.cx(b,a)
transpiled = pass_manager.run(qc)
display(transpiled.draw('mpl',idle_wires=False))