-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathnoise-test-dm.py
86 lines (75 loc) · 3.5 KB
/
noise-test-dm.py
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
#!/usr/bin/env python
import qsim
import qsim.noisemodel as nmdl
# print the list of canned kraus channels
noise_channels = list(nmdl.noise_channel_list().keys())
noise_channels.sort()
print(noise_channels)
print()
# test 01 - without any noise model
print('test 01 - without any noise model')
q = qsim.DMQSimulator(3,qtrace=True, verbose=True)
q.qgate(qsim.X(),[0])
q.qgate(qsim.C(),[0,1])
q.qgate(qsim.X(),[2])
q.qgate(qsim.H(),[2])
# test 02 - direct call to qnoise
print('test 02 - direct call to qnoise')
q = qsim.DMQSimulator(3,qtrace=True, verbose=True)
q.qgate(qsim.X(),[0])
q.qnoise(noise_chan=nmdl.qNoiseChannelSequence(nmdl.bit_flip(probability=0.1)), qbit_list=[0,1,2], qtrace=True)
q.qgate(qsim.C(),[0,1])
q.qgate(qsim.X(),[2])
q.qgate(qsim.H(),[2])
# test 03 - adding noise applied to a gate invokation
print('test 03 - adding noise applied to a gate invokation')
q = qsim.DMQSimulator(3,qtrace=True, verbose=True)
q.qgate(qsim.X(),[0])
q.qnoise(noise_chan=nmdl.qNoiseChannelSequence(nmdl.bit_flip(probability=0.1)), qbit_list=[0,1,2], qtrace=True)
q.qgate(qsim.C(),[0,1])
q.qgate(qsim.X(),[2], noise_chan=nmdl.qNoiseChannelSequence(nmdl.phase_flip(probability=0.1)))
q.qgate(qsim.H(),[2])
# test 04 - adding noise applied to all gates
print('test 04 - adding noise at init, applied to specifc qubits, all gates')
noise_model = {
'noise_chan_init': nmdl.qNoiseChannelSequence(nmdl.phase_flip(probability=0.2)),
'noise_chan_allgates': nmdl.qNoiseChannelSequence(nmdl.depolarizing(probability=0.1)),
'noise_chan_qubits': nmdl.qNoiseChannelApplierSequense(nmdl.qNoiseChannelSequence(nmdl.bit_flip(probability=0.3)),[1]),
}
q = qsim.DMQSimulator(3, noise_profile=noise_model, qtrace=True, verbose=True)
q.qgate(qsim.X(),[0])
q.qnoise(noise_chan=nmdl.qNoiseChannelSequence(nmdl.bit_flip(probability=0.1)), qbit_list=[0,1,2], qtrace=True)
q.qgate(qsim.C(),[0,1])
q.qgate(qsim.X(),[2], noise_chan=nmdl.qNoiseChannelSequence(nmdl.phase_flip(probability=0.1)))
q.qgate(qsim.H(),[2])
# test 05 - a blanket test for all noise operators applied to all gates, using their default arguments
for nchanid in noise_channels:
if nmdl.noise_channel_lookup(nchanid)().nqubits != 1:
# print(f'skipped {nchanid}')
continue
print(f'test 05 - Blanket test - {nchanid}')
krfn = nmdl.noise_channel_lookup(nchanid)
noise_model = {
'noise_chan_allgates': nmdl.qNoiseChannelSequence(krfn()),
'noise_chan_init': None
}
q = qsim.DMQSimulator(3, noise_profile=noise_model, qtrace=True, verbose=True)
q.qgate(qsim.X(),[0])
q.qnoise(noise_chan=nmdl.qNoiseChannelSequence(nmdl.bit_flip(probability=0.1)), qbit_list=[0,1,2], qtrace=True)
q.qgate(qsim.C(),[0,1])
q.qgate(qsim.X(),[2], noise_chan=nmdl.qNoiseChannelSequence(nmdl.phase_flip(probability=0.1)))
q.qgate(qsim.H(),[2])
# test 06 - 2-qubit noise op - two_qubit_dephasing
print('test 06 - adding noise at init, applied to specifc qubits, all gates')
q = qsim.DMQSimulator(3, noise_profile=None, qtrace=True, verbose=True)
q.qgate(qsim.H(),[0])
q.qgate(qsim.C(),[0,1], noise_chan=nmdl.two_qubit_dephasing(probability=0.1))
# test 07 - 2-qubit noise op - two_qubit_depolarizing
print('test 07 - adding noise at init, applied to specifc qubits, all gates')
q = qsim.DMQSimulator(3, noise_profile=None, qtrace=True, verbose=True)
q.qgate(qsim.H(),[0])
q.qgate(qsim.C(),[0,1], noise_chan=nmdl.two_qubit_depolarizing(probability=0.1))
# test0x - list noise channel/operator signatures
noise_chans_list = nmdl.noise_channel_list()
for nchanid in noise_chans_list.keys():
print(f'{nchanid:30s} {noise_chans_list[nchanid]}')