-
Notifications
You must be signed in to change notification settings - Fork 4
/
gm-quantum-advantage.py
60 lines (44 loc) · 1.55 KB
/
gm-quantum-advantage.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
import strawberryfields as sf
from strawberryfields.ops import *
from strawberryfields.tdm import borealis_gbs, get_mode_indices
import xcc
import numpy as np
connection = xcc.Connection.load()
borealis = xcc.Device(target="borealis", connection=connection)
eng = sf.RemoteEngine("borealis")
device = eng.device
print(f'Borealis: {borealis.status}')
# Write the program you want to run in Borealis below
def gbs_tdm():
gate_args_list = borealis_gbs(device, modes=216, squeezing="high")
delays = [1, 6, 36]
n, N = get_mode_indices(delays)
from strawberryfields.ops import Sgate, Rgate, BSgate, MeasureFock
prog = sf.TDMProgram(N)
with prog.context(*gate_args_list) as (p, q):
Sgate(p[0]) | q[n[0]]
for i in range(len(delays)):
Rgate(p[2 * i + 1]) | q[n[i]]
BSgate(p[2 * i + 2], np.pi / 2) | (q[n[i + 1]], q[n[i]])
MeasureFock() | q[0]
return prog
if(borealis.status == "online"):
prog = gbs_tdm()
shots = 10_000
results = eng.run(prog, shots=shots, crop=True)
print(f'samples \n {results.samples}')
print(f'covariance matrix \n {np.cov(results.samples[:, 0, :].T)}')
else:
prog = gbs_tdm()
run_options = {
"shots": None,
"crop": True,
"space_unroll": True,
}
compile_options = {
"device": device,
"realistic_loss": True,
}
eng_sim = sf.Engine(backend="gaussian")
results_sim = eng_sim.run(prog, **run_options, compile_options=compile_options)
print(f'covariance matrix \n {results_sim.state.cov()}')