Skip to content

Commit 5ecc212

Browse files
committed
Fix instantiation of ParametrizedAmplitude w/o shape
1 parent 62bba74 commit 5ecc212

File tree

3 files changed

+47
-8
lines changed

3 files changed

+47
-8
lines changed

src/pulse_parametrizations.jl

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export SquareParametrization,
1010
using QuantumPropagators.Controls: discretize_on_midpoints
1111
using QuantumPropagators.Amplitudes: ControlAmplitude, ShapedAmplitude
1212

13-
import QuantumPropagators.Controls: evaluate
13+
import QuantumPropagators.Controls: evaluate, get_controls
1414
import QuantumControlBase: get_control_deriv
1515

1616

@@ -229,13 +229,13 @@ function ParametrizedAmplitude(
229229
return ParametrizedPulseAmplitude(control, parametrization)
230230
else
231231
try
232-
S_t = shape(0.0)
232+
ϵ_t = control(0.0)
233233
catch
234234
error(
235235
"A ParametrizedAmplitude control must either be a vector of values or a callable"
236236
)
237237
end
238-
return ParametrizedContinousAmplitude(control, parametrization)
238+
return ParametrizedContinuousAmplitude(control, parametrization)
239239
end
240240
else
241241
if (control isa Vector{Float64}) && (shape isa Vector{Float64})
@@ -319,15 +319,15 @@ struct ShapedParametrizedContinuousAmplitude <: ShapedParametrizedAmplitude
319319
end
320320

321321

322-
function evaluate(ampl::ParametrizedAmplitude, tlist, n; vals_dict)
323-
ϵ = evaluate(ampl.control, tlist, n; vals_dict)
322+
function evaluate(ampl::ParametrizedAmplitude, args...; kwargs...)
323+
ϵ = evaluate(ampl.control, args...; kwargs...)
324324
return ampl.parametrization.a_of_epsilon(ϵ)
325325
end
326326

327327

328-
function evaluate(ampl::ShapedParametrizedAmplitude, args...; vals_dict=IdDict())
329-
ϵ = evaluate(ampl.control, args...; vals_dict)
330-
S = evaluate(ampl.shape, args...; vals_dict)
328+
function evaluate(ampl::ShapedParametrizedAmplitude, args...; kwargs...)
329+
ϵ = evaluate(ampl.control, args...; kwargs...)
330+
S = evaluate(ampl.shape, args...; kwargs...)
331331
return S * ampl.parametrization.a_of_epsilon(ϵ)
332332
end
333333

@@ -337,6 +337,11 @@ function Base.Array(ampl::ShapedParametrizedPulseAmplitude)
337337
end
338338

339339

340+
function get_controls(ampl::ParametrizedAmplitude)
341+
return (ampl.control,)
342+
end
343+
344+
340345
function get_control_deriv(ampl::ParametrizedAmplitude, control)
341346
if control ampl.control
342347
return ParametrizationDerivative(control, ampl.parametrization.da_deps_derivative)

test/runtests.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ end
3535
include("test_optimize_or_load.jl")
3636
end
3737

38+
print("\n* Pulse Parametrizations (test_pulse_parametrizations.jl):")
39+
@time @safetestset "Pulse Parametrizations" begin
40+
include("test_pulse_parametrizations.jl")
41+
end
42+
3843
print("\n")
3944

4045
end;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Test
2+
using LinearAlgebra
3+
using QuantumControl: hamiltonian
4+
using QuantumControlTestUtils.RandomObjects: random_matrix
5+
using QuantumControl.PulseParametrizations: SquareParametrization, ParametrizedAmplitude
6+
using QuantumControl.Controls: get_controls, evaluate
7+
8+
9+
@testset "Instantiate ParametrizedAmplitude" begin
10+
11+
# See https://github.com/orgs/JuliaQuantumControl/discussions/42
12+
# https://github.com/JuliaQuantumControl/QuantumControl.jl/issues/43
13+
14+
N = 10
15+
16+
H0 = random_matrix(N; hermitian=true)
17+
H1 = random_matrix(N; hermitian=true)
18+
H2 = random_matrix(N; hermitian=true)
19+
20+
ϵ(t) = 0.5
21+
a = ParametrizedAmplitude(ϵ; parametrization=SquareParametrization())
22+
@test get_controls(a) == (ϵ,)
23+
24+
H = hamiltonian(H0, (H1, ϵ), (H2, a); check=false)
25+
@test get_controls(H) == (ϵ,)
26+
27+
@test norm(Array(evaluate(H, 0.0)) - (H0 + 0.5 * H1 + 0.5^2 * H2)) < 1e-12
28+
29+
end

0 commit comments

Comments
 (0)