Skip to content

Commit a7c6312

Browse files
author
HM-Yuuu
authored
Format .jl files
1 parent 38c09a7 commit a7c6312

32 files changed

+3110
-2267
lines changed

docs/make.jl

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@ DocMeta.setdocmeta!(
1919
# render(io, mime, anchor.object, page, doc)
2020
# end
2121

22-
function render(io::IO, mime::MIME"text/plain", node::Documenter.Documents.DocsNode, page, doc)
22+
function render(
23+
io::IO,
24+
mime::MIME"text/plain",
25+
node::Documenter.Documents.DocsNode,
26+
page,
27+
doc,
28+
)
2329
# Docstring header based on the name of the binding and it's category.
2430
anchor = "## "
2531
header = "**`$(node.object.binding)`** — *$(Documenter.Utilities.doccat(node.object))*."
@@ -30,10 +36,10 @@ end
3036

3137
makedocs(;
3238
format = Markdown(),
33-
root = ".",
34-
source = "docs/src",
35-
build = "docs/build",
36-
clean = true,
39+
root = ".",
40+
source = "docs/src",
41+
build = "docs/build",
42+
clean = true,
3743
doctest = true,
3844
modules = [QuanEstimation],
3945
authors = "Hauiming Yu <[email protected]> and contributors",

src/IO.jl

Lines changed: 13 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -56,38 +56,14 @@ const IO_ini = Dict(
5656
:multi_para,
5757
) => "non-controlled value of HCRB is %f\ninitial value of HCRB is %f\n",
5858
#### state optimization ####
59-
(
60-
:Sopt,
61-
:QFIM,
62-
:single_para,
63-
) => "initial value of QFI is %f\n",
64-
(
65-
:Sopt,
66-
:QFIM,
67-
:multi_para,
68-
) => "initial value of tr(WF^{-1}) is %f\n",
69-
(
70-
:Sopt,
71-
:CFIM,
72-
:single_para,
73-
) => "initial value of CFI is %f\n",
74-
(
75-
:Sopt,
76-
:CFIM,
77-
:multi_para,
78-
) => "initial value of tr(WI^{-1}) is %f\n",
79-
(
80-
:Sopt,
81-
:HCRB,
82-
:multi_para,
83-
) => "initial value of HCRB is %f\n",
59+
(:Sopt, :QFIM, :single_para) => "initial value of QFI is %f\n",
60+
(:Sopt, :QFIM, :multi_para) => "initial value of tr(WF^{-1}) is %f\n",
61+
(:Sopt, :CFIM, :single_para) => "initial value of CFI is %f\n",
62+
(:Sopt, :CFIM, :multi_para) => "initial value of tr(WI^{-1}) is %f\n",
63+
(:Sopt, :HCRB, :multi_para) => "initial value of HCRB is %f\n",
8464

8565
#### projective measurement optimization ####
86-
(
87-
:Mopt,
88-
:CFIM,
89-
:single_para,
90-
) => "initial value of CFI is %f\nQFI is %f\n",
66+
(:Mopt, :CFIM, :single_para) => "initial value of CFI is %f\nQFI is %f\n",
9167
(
9268
:Mopt,
9369
:CFIM,
@@ -133,39 +109,14 @@ const IO_ini = Dict(
133109
:multi_para,
134110
) => "non-controlled value of HCRB is %f\ninitial value of HCRB is %f\n",
135111
#### state and measurement optimization ####
136-
(
137-
:SMopt,
138-
:CFIM,
139-
:single_para,
140-
) => "initial value of CFI is %f\n",
141-
(
142-
:SMopt,
143-
:CFIM,
144-
:multi_para,
145-
) => "initial value of tr(WI^{-1}) is %f\n",
112+
(:SMopt, :CFIM, :single_para) => "initial value of CFI is %f\n",
113+
(:SMopt, :CFIM, :multi_para) => "initial value of tr(WI^{-1}) is %f\n",
146114
#### control and measurement optimization ####
147-
(
148-
:CMopt,
149-
:CFIM,
150-
:single_para,
151-
) => "initial value of CFI is %f\n",
152-
(
153-
:CMopt,
154-
:CFIM,
155-
:multi_para,
156-
) => "initial value of tr(WI^{-1}) is %f\n",
115+
(:CMopt, :CFIM, :single_para) => "initial value of CFI is %f\n",
116+
(:CMopt, :CFIM, :multi_para) => "initial value of tr(WI^{-1}) is %f\n",
157117
#### state, control and measurement optimization ####
158-
(
159-
:SCMopt,
160-
:CFIM,
161-
:single_para,
162-
) => "initial value of CFI is %f\n",
163-
(
164-
:SCMopt,
165-
:CFIM,
166-
:multi_para,
167-
) => "initial value of tr(WI^{-1}) is %f\n",
168-
118+
(:SCMopt, :CFIM, :single_para) => "initial value of CFI is %f\n",
119+
(:SCMopt, :CFIM, :multi_para) => "initial value of tr(WI^{-1}) is %f\n",
169120
)
170121

171122
const IO_current = Dict(
@@ -193,10 +144,7 @@ const IO_final = Dict(
193144
## io info
194145
function show(system::QuanEstSystem)
195146
(; optim, algorithm, obj) = system
196-
println(
197-
(optim isa ControlOpt ? IO_obj[obj_type(obj)] : "") *
198-
IO_opt[opt_target(optim)],
199-
)
147+
println((optim isa ControlOpt ? IO_obj[obj_type(obj)] : "") * IO_opt[opt_target(optim)])
200148
println(IO_para[para_type(obj)])
201149
println(IO_alg[alg_type(algorithm)])
202150
end

src/algorithm/AD.jl

Lines changed: 57 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,26 @@ end
3333

3434
function update_ctrl!(alg::autoGRAPE_Adam, obj, dynamics, δ)
3535
(; epsilon, beta1, beta2) = alg
36-
for ci in 1:length(δ)
36+
for ci = 1:length(δ)
3737
mt, vt = 0.0, 0.0
38-
for ti in 1:length(δ[1])
39-
dynamics.data.ctrl[ci][ti], mt, vt = Adam(δ[ci][ti], ti,
40-
dynamics.data.ctrl[ci][ti], mt, vt, epsilon, beta1, beta2, obj.eps)
38+
for ti = 1:length(δ[1])
39+
dynamics.data.ctrl[ci][ti], mt, vt = Adam(
40+
δ[ci][ti],
41+
ti,
42+
dynamics.data.ctrl[ci][ti],
43+
mt,
44+
vt,
45+
epsilon,
46+
beta1,
47+
beta2,
48+
obj.eps,
49+
)
4150
end
4251
end
4352
end
4453

4554
function update_ctrl!(alg::autoGRAPE, obj, dynamics, δ)
46-
dynamics.data.ctrl += alg.epsilon*δ
55+
dynamics.data.ctrl += alg.epsilon * δ
4756
end
4857

4958
#### state optimization ####
@@ -58,10 +67,10 @@ function update!(opt::StateOpt, alg::AbstractAD, obj, dynamics, output)
5867
set_buffer!(output, transpose(dynamics.data.ψ0))
5968
set_io!(output, f_ini)
6069
show(opt, output, obj)
61-
for ei in 1:(max_episode-1)
70+
for ei = 1:(max_episode-1)
6271
δ = gradient(() -> objective(obj, dynamics)[2], Flux.Params([dynamics.data.ψ0]))
6372
update_state!(alg, obj, dynamics, δ[dynamics.data.ψ0])
64-
dynamics.data.ψ0 = dynamics.data.ψ0/norm(dynamics.data.ψ0)
73+
dynamics.data.ψ0 = dynamics.data.ψ0 / norm(dynamics.data.ψ0)
6574
f_out, f_now = objective(obj, dynamics)
6675
set_f!(output, f_out)
6776
set_buffer!(output, transpose(dynamics.data.ψ0))
@@ -74,13 +83,14 @@ end
7483
function update_state!(alg::AD_Adam, obj, dynamics, δ)
7584
(; epsilon, beta1, beta2) = alg
7685
mt, vt = 0.0, 0.0
77-
for ti in 1:length(δ)
78-
dynamics.data.ψ0[ti], mt, vt = Adam(δ[ti], ti, dynamics.data.ψ0[ti], mt, vt, epsilon, beta1, beta2, obj.eps)
86+
for ti = 1:length(δ)
87+
dynamics.data.ψ0[ti], mt, vt =
88+
Adam(δ[ti], ti, dynamics.data.ψ0[ti], mt, vt, epsilon, beta1, beta2, obj.eps)
7989
end
8090
end
8191

8292
function update_state!(alg::AD, obj, dynamics, δ)
83-
dynamics.data.ψ0 += alg.epsilon*δ
93+
dynamics.data.ψ0 += alg.epsilon * δ
8494
end
8595

8696
#### find the optimal linear combination of a given set of POVM ####
@@ -94,7 +104,7 @@ function update!(opt::Mopt_LinearComb, alg::AbstractAD, obj, dynamics, output)
94104
basis_num = length(POVM_basis)
95105

96106
bound_LC_coeff!(opt.B)
97-
M = [sum([opt.B[i][j]*POVM_basis[j] for j in 1:basis_num]) for i in 1:M_num]
107+
M = [sum([opt.B[i][j] * POVM_basis[j] for j = 1:basis_num]) for i = 1:M_num]
98108
obj_QFIM = QFIM_obj(obj)
99109
f_opt, f_comp = objective(obj_QFIM, dynamics)
100110
obj_POVM = set_M(obj, POVM_basis)
@@ -105,11 +115,11 @@ function update!(opt::Mopt_LinearComb, alg::AbstractAD, obj, dynamics, output)
105115
set_buffer!(output, M)
106116
set_io!(output, f_ini, f_povm, f_opt)
107117
show(opt, output, obj)
108-
for ei in 1:(max_episode-1)
118+
for ei = 1:(max_episode-1)
109119
δ = gradient(() -> objective(opt, obj, dynamics)[2], Flux.Params([opt.B]))
110120
update_M!(opt, alg, obj, δ[opt.B])
111121
bound_LC_coeff!(opt.B)
112-
M = [sum([opt.B[i][j]*POVM_basis[j] for j in 1:basis_num]) for i in 1:M_num]
122+
M = [sum([opt.B[i][j] * POVM_basis[j] for j = 1:basis_num]) for i = 1:M_num]
113123
obj_copy = set_M(obj, M)
114124
f_out, f_now = objective(obj_copy, dynamics)
115125
set_f!(output, f_out)
@@ -122,16 +132,17 @@ end
122132

123133
function update_M!(opt::Mopt_LinearComb, alg::AD_Adam, obj, δ)
124134
(; epsilon, beta1, beta2) = alg
125-
for ci in 1:length(δ)
135+
for ci = 1:length(δ)
126136
mt, vt = 0.0, 0.0
127-
for ti in 1:length(δ[1])
128-
opt.B[ci][ti], mt, vt = Adam(δ[ci][ti], ti, opt.B[ci][ti], mt, vt, epsilon, beta1, beta2, obj.eps)
137+
for ti = 1:length(δ[1])
138+
opt.B[ci][ti], mt, vt =
139+
Adam(δ[ci][ti], ti, opt.B[ci][ti], mt, vt, epsilon, beta1, beta2, obj.eps)
129140
end
130141
end
131142
end
132143

133144
function update_M!(opt::Mopt_LinearComb, alg::AD, obj, δ)
134-
opt.B += alg.epsilon*δ
145+
opt.B += alg.epsilon * δ
135146
end
136147

137148
#### find the optimal rotated measurement of a given set of POVM ####
@@ -146,17 +157,17 @@ function update!(opt::Mopt_Rotation, alg::AbstractAD, obj, dynamics, output)
146157
M_num = length(POVM_basis)
147158
suN = suN_generator(dim)
148159
opt.Lambda = Matrix{ComplexF64}[]
149-
append!(opt.Lambda, [Matrix{ComplexF64}(I,dim,dim)])
150-
append!(opt.Lambda, [suN[i] for i in 1:length(suN)])
160+
append!(opt.Lambda, [Matrix{ComplexF64}(I, dim, dim)])
161+
append!(opt.Lambda, [suN[i] for i = 1:length(suN)])
151162

152163
# if ismissing(Lambda)
153164
# opt.Lambda = Matrix{ComplexF64}[]
154165
# append!(opt.Lambda, [Matrix{ComplexF64}(I,dim,dim)])
155166
# append!(opt.Lambda, [suN[i] for i in 1:length(suN)])
156167
# end
157-
168+
158169
U = rotation_matrix(opt.s, opt.Lambda)
159-
M = [U*POVM_basis[i]*U' for i in 1:M_num]
170+
M = [U * POVM_basis[i] * U' for i = 1:M_num]
160171
obj_QFIM = QFIM_obj(obj)
161172
f_opt, f_comp = objective(obj_QFIM, dynamics)
162173
obj_POVM = set_M(obj, POVM_basis)
@@ -167,12 +178,12 @@ function update!(opt::Mopt_Rotation, alg::AbstractAD, obj, dynamics, output)
167178
set_buffer!(output, M)
168179
set_io!(output, f_ini, f_povm, f_opt)
169180
show(opt, output, obj)
170-
for ei in 1:(max_episode-1)
181+
for ei = 1:(max_episode-1)
171182
δ = gradient(() -> objective(opt, obj, dynamics)[2], Flux.Params([opt.s]))
172183
update_M!(opt, alg, obj, δ[opt.s])
173184
bound_rot_coeff!(opt.s)
174185
U = rotation_matrix(opt.s, opt.Lambda)
175-
M = [U*POVM_basis[i]*U' for i in 1:M_num]
186+
M = [U * POVM_basis[i] * U' for i = 1:M_num]
176187
obj_copy = set_M(obj, M)
177188
f_out, f_now = objective(obj_copy, dynamics)
178189
set_f!(output, f_out)
@@ -186,13 +197,14 @@ end
186197
function update_M!(opt::Mopt_Rotation, alg::AD_Adam, obj, δ)
187198
(; epsilon, beta1, beta2) = alg
188199
mt, vt = 0.0, 0.0
189-
for ti in 1:length(δ)
190-
opt.s[ti], mt, vt = Adam(δ[ti], ti, opt.s[ti], mt, vt, epsilon, beta1, beta2, obj.eps)
200+
for ti = 1:length(δ)
201+
opt.s[ti], mt, vt =
202+
Adam(δ[ti], ti, opt.s[ti], mt, vt, epsilon, beta1, beta2, obj.eps)
191203
end
192204
end
193205

194206
function update_M!(opt::Mopt_Rotation, alg::AD, obj, δ)
195-
opt.s += alg.epsilon*δ
207+
opt.s += alg.epsilon * δ
196208
end
197209

198210
#### state abd control optimization ####
@@ -215,11 +227,14 @@ function update!(opt::StateControlOpt, alg::AbstractAD, obj, dynamics, output)
215227
show(opt, output, obj)
216228

217229
for ei = 1:(max_episode-1)
218-
δ = gradient(() -> objective(obj, dynamics)[2], Flux.Params([dynamics.data.ψ0, dynamics.data.ctrl]))
230+
δ = gradient(
231+
() -> objective(obj, dynamics)[2],
232+
Flux.Params([dynamics.data.ψ0, dynamics.data.ctrl]),
233+
)
219234
update_state!(alg, obj, dynamics, δ[dynamics.data.ψ0])
220235
update_ctrl!(alg, obj, dynamics, δ[dynamics.data.ctrl])
221236
bound!(dynamics.data.ctrl, opt.ctrl_bound)
222-
dynamics.data.ψ0 = dynamics.data.ψ0/norm(dynamics.data.ψ0)
237+
dynamics.data.ψ0 = dynamics.data.ψ0 / norm(dynamics.data.ψ0)
223238
f_out, f_now = objective(obj, dynamics)
224239

225240
set_f!(output, f_out)
@@ -232,15 +247,24 @@ end
232247

233248
function update_ctrl!(alg::AD_Adam, obj, dynamics, δ)
234249
(; epsilon, beta1, beta2) = alg
235-
for ci in 1:length(δ)
250+
for ci = 1:length(δ)
236251
mt, vt = 0.0, 0.0
237-
for ti in 1:length(δ[1])
238-
dynamics.data.ctrl[ci][ti], mt, vt = Adam(δ[ci][ti], ti,
239-
dynamics.data.ctrl[ci][ti], mt, vt, epsilon, beta1, beta2, obj.eps)
252+
for ti = 1:length(δ[1])
253+
dynamics.data.ctrl[ci][ti], mt, vt = Adam(
254+
δ[ci][ti],
255+
ti,
256+
dynamics.data.ctrl[ci][ti],
257+
mt,
258+
vt,
259+
epsilon,
260+
beta1,
261+
beta2,
262+
obj.eps,
263+
)
240264
end
241265
end
242266
end
243267

244268
function update_ctrl!(alg::AD, obj, dynamics, δ)
245-
dynamics.data.ctrl += alg.epsilon*δ
269+
dynamics.data.ctrl += alg.epsilon * δ
246270
end

0 commit comments

Comments
 (0)