From 76b265a3f5d0a1c1011cd80eb450c17c695d71d1 Mon Sep 17 00:00:00 2001 From: Michael Goerz Date: Wed, 8 Apr 2026 08:29:24 -0400 Subject: [PATCH] Add simplified constructor for `GradgenOperator` --- src/gradgen_operator.jl | 12 +++++++++++- test/test_gradgen.jl | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/gradgen_operator.jl b/src/gradgen_operator.jl index 896ac9b..8c4a4be 100644 --- a/src/gradgen_operator.jl +++ b/src/gradgen_operator.jl @@ -12,6 +12,8 @@ import QuantumControl.QuantumPropagators.Interfaces: using QuantumPropagators.Controls: evaluate G::GradgenOperator = evaluate(gradgen::GradGenerator; vals_dict) + +G = GradgenOperator(G.G, G.control_deriv_ops) ``` is the result of plugging in specific values for all controls in a @@ -26,6 +28,14 @@ struct GradgenOperator{num_controls,GT,CGT} end +function GradgenOperator(G, control_deriv_ops) + num_controls = length(control_deriv_ops) + GT = typeof(G) + CGT = eltype(control_deriv_ops) + return GradgenOperator{num_controls,GT,CGT}(G, control_deriv_ops) +end + + function get_controls(O1::GradgenOperator) return Tuple([]) end @@ -34,7 +44,7 @@ end function random_state(H::GradgenOperator; rng = GLOBAL_RNG, _...) state = random_state(H.G; rng) num_controls = length(H.control_deriv_ops) - grad_states = [random_state(H.G; rng) for i ∈ eachindex(H.control_deriv_ops)] + grad_states = [random_state(H.G; rng) for _ in eachindex(H.control_deriv_ops)] return GradVector{num_controls,typeof(state)}(state, grad_states) end diff --git a/test/test_gradgen.jl b/test/test_gradgen.jl index f498bdb..230dd4d 100644 --- a/test/test_gradgen.jl +++ b/test/test_gradgen.jl @@ -32,6 +32,9 @@ using QuantumPropagators.Controls: evaluate G̃ = evaluate(G̃_of_t; vals_dict) Ĥ = evaluate(Ĥ_of_t; vals_dict) + G̃2 = GradgenOperator(G̃.G, G̃.control_deriv_ops) + @test G̃2 == G̃ + Û_Ψ = exp(-𝕚 * Ĥ * dt) * Ψ num_controls = length(Ĥ_of_t) - 1