Trajectories

A trajectory bundles a quantum system, a control pulse, and a goal into the central object that problem templates consume.

Overview

Every trajectory type defines:

  • The state$x_k$ and its dynamics $x_{k+1} = \exp(\Delta t_k\, G(\boldsymbol{u}_k))\, x_k$
  • The initial condition$x_1 = x_{\text{init}}$
  • The goal$x_{\text{goal}}$ and associated fidelity metric

Trajectory Types

TypeDynamicsState $x_k$Fidelity $F$$\dim(x_k)$
UnitaryTrajectory$\dot{U} = -iH\,U$$\tilde{U} \in \mathbb{R}^{2d^2}$$\lvert\operatorname{tr}(U_g^\dagger U)\rvert^2 / d^2$$2d^2$
KetTrajectory$\dot{\psi} = -iH\,\psi$$\tilde{\psi} \in \mathbb{R}^{2d}$$\lvert\langle\psi_g\mid\psi\rangle\rvert^2$$2d$
DensityTrajectory$\dot{\rho} = \mathcal{G}\,\text{vec}(\rho)$$\tilde{\rho} \in \mathbb{R}^{d^2}$ (compact)$\operatorname{tr}(\rho_g\,\rho)$$d^2$
MultiKetTrajectory$\dot{\psi}_j = -iH\,\psi_j$multiple $\tilde{\psi}_j$coherent (see below)$2d \times n_{\text{states}}$
SamplingTrajectoryper-system dynamicsper-system statesaverage fidelityvaries

The isomorphic state $x_k$ is always a real vector; see Isomorphisms for the conversions.

UnitaryTrajectory

For synthesizing quantum gates. The propagator satisfies $\dot{U} = G(\boldsymbol{u})\,U$ with $U(0) = I$.

Construction

using Piccolo

# Define system
H_drift = PAULIS[:Z]
H_drives = [PAULIS[:X], PAULIS[:Y]]
sys = QuantumSystem(H_drift, H_drives, [1.0, 1.0])

# Create pulse
T, N = 10.0, 100
times = collect(range(0, T, length = N))
pulse = ZeroOrderPulse(0.1 * randn(2, N), times)

# Create trajectory with goal
U_goal = GATES[:X]
qtraj = UnitaryTrajectory(sys, pulse, U_goal)
UnitaryTrajectory{ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, SciMLBase.ODESolution{ComplexF64, 3, Vector{Matrix{ComplexF64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Matrix{ComplexF64}}}, Nothing, SciMLBase.ODEProblem{Matrix{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqLinear.MagnusAdapt4, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Matrix{ComplexF64}}, Vector{Float64}, Vector{Vector{Matrix{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, Nothing}, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}, Matrix{ComplexF64}}(QuantumSystem: levels = 2, n_drives = 2, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}(DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}([0.12768722339484556 -0.023729634755217173 … 0.02562944982009882 -0.25687911757466714; -0.1298551306796811 -0.11162382915184617 … -0.013965470674590284 0.010029285317644335], [0.0, 0.10101010101010101, 0.20202020202020202, 0.30303030303030304, 0.40404040404040403, 0.5050505050505051, 0.6060606060606061, 0.7070707070707071, 0.8080808080808081, 0.9090909090909091  …  9.090909090909092, 9.191919191919192, 9.292929292929292, 9.393939393939394, 9.494949494949495, 9.595959595959595, 9.696969696969697, 9.797979797979798, 9.8989898989899, 10.0], Union{}[], nothing, :left, DataInterpolations.ExtrapolationType.None, DataInterpolations.ExtrapolationType.None, FindFirstFunctions.Guesser{Vector{Float64}}([0.0, 0.10101010101010101, 0.20202020202020202, 0.30303030303030304, 0.40404040404040403, 0.5050505050505051, 0.6060606060606061, 0.7070707070707071, 0.8080808080808081, 0.9090909090909091  …  9.090909090909092, 9.191919191919192, 9.292929292929292, 9.393939393939394, 9.494949494949495, 9.595959595959595, 9.696969696969697, 9.797979797979798, 9.8989898989899, 10.0], Base.RefValue{Int64}(100), true), false, true), 10.0, 2, :u, [0.0, 0.0], [0.0, 0.0]), ComplexF64[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 1.0 + 0.0im], ComplexF64[0.0 + 0.0im 1.0 + 0.0im; 1.0 + 0.0im 0.0 + 0.0im], SciMLBase.ODESolution{ComplexF64, 3, Vector{Matrix{ComplexF64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Matrix{ComplexF64}}}, Nothing, SciMLBase.ODEProblem{Matrix{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqLinear.MagnusAdapt4, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Matrix{ComplexF64}}, Vector{Float64}, Vector{Vector{Matrix{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, Nothing}, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}(Matrix{ComplexF64}[[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 1.0 + 0.0im], [0.994838614195209 - 0.09982789453385549im 0.012963164290171234 - 0.01274674667038149im; -0.01296316429017123 - 0.01274674667038149im 0.9948386141952092 + 0.09982789453385554im], [0.9797217237176439 - 0.1988112023106443im 0.02249253715951924 - 0.010655312461531358im; -0.022492537159519238 - 0.010655312461531358im 0.9797217237176441 + 0.19881120231064436im], [0.9544178829189425 - 0.295938976768667im 0.03874913691691661 - 0.0022652112115070355im; -0.038749136916916595 - 0.002265211211507038im 0.9544178829189427 + 0.29593897676866704im], [0.919440893944407 - 0.3895627101647657im 0.05321421481693987 - 0.006130638890870673im; -0.05321421481693985 - 0.006130638890870673im 0.919440893944407 + 0.38956271016476574im], [0.8759101245590754 - 0.47948828680414085im 0.052702933111849794 - 0.009738447203936317im; -0.05270293311184974 - 0.00973844720393631im 0.8759101245590749 + 0.4794882868041408im], [0.8226355761999439 - 0.5646839863275012im 0.06610509365708242 - 0.005728956978092022im; -0.06610509365708236 - 0.005728956978092001im 0.8226355761999431 + 0.5646839863275009im], [0.7624262522714966 - 0.6446588139426283im 0.055583678317705394 - 0.005628335277654074im; -0.05558367831770533 - 0.0056283352776540395im 0.7624262522714957 + 0.6446588139426278im], [0.6946819178826279 - 0.7177927501157801im 0.0452737977908495 - 0.011869460043818543im; -0.04527379779084943 - 0.0118694600438185im 0.6946819178826269 + 0.7177927501157798im], [0.6199386588787392 - 0.783596813800533im 0.03555094056061948 - 0.01970338180458789im; -0.03555094056061937 - 0.019703381804587833im 0.6199386588787381 + 0.7835968138005324im]  …  [-0.9410451948970024 - 0.3184759462232508im -0.11353480573429717 + 0.010810213936806964im; 0.11353480573429724 + 0.010810213936807067im -0.9410451948970007 + 0.31847594622324976im], [-0.9687366948229356 - 0.2233174213405056im -0.10560672958261283 + 0.022929546359295377im; 0.1056067295826129 + 0.02292954635929549im -0.9687366948229339 + 0.2233174213405047im], [-0.9856454630494506 - 0.12419858237734561im -0.11167081487544696 + 0.02464472378750537im; 0.11167081487544704 + 0.02464472378750548im -0.9856454630494488 + 0.12419858237734488im], [-0.9936608214973128 - 0.02436829671536459im -0.10628762962713628 + 0.027336746784123903im; 0.10628762962713643 + 0.027336746784124028im -0.9936608214973115 + 0.02436829671536405im], [-0.9896746779462434 + 0.07488441510036561im -0.11486483980211357 + 0.04174236198787289im; 0.11486483980211375 + 0.041742361987873074im -0.9896746779462422 - 0.07488441510036603im], [-0.9783611730064354 + 0.17198877010440136im -0.09782205536211204 + 0.06049895533143282im; 0.09782205536211218 + 0.06049895533143304im -0.978361173006434 - 0.17198877010440167im], [-0.9584299310796375 + 0.27013675744224813im -0.0763027491754736 + 0.05114772680727354im; 0.07630274917547371 + 0.051147726807273725im -0.9584299310796359 - 0.27013675744224835im], [-0.9279109140005077 + 0.3629534403582356im -0.050768797566937474 + 0.06832762987612016im; 0.05076879756693751 + 0.06832762987612034im -0.9279109140005061 - 0.3629534403582357im], [-0.8881149036599798 + 0.45354655016481477im -0.03095897477315611 + 0.06774205939911349im; 0.030958974773156088 + 0.06774205939911361im -0.8881149036599776 - 0.4535465501648142im], [-0.8381799464973397 + 0.5399577651325275im -0.0264298991448399 + 0.07212107593494863im; 0.02642989914483987 + 0.07212107593494874im -0.8381799464973374 - 0.5399577651325266im]], nothing, nothing, [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9  …  9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10.0], Vector{Matrix{ComplexF64}}[[[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 1.0 + 0.0im]]], nothing, SciMLBase.ODEProblem{Matrix{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}(SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}(MatrixOperator(2 × 2), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(Dict{Symbol, Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(:U => CartesianIndices((2, 2)), :U_2_2 => CartesianIndex(2, 2), :U_1_1 => CartesianIndex(1, 1), :U_2_1 => CartesianIndex(2, 1), :U_1_2 => CartesianIndex(1, 2)), :t, Dict{Symbol, Float64}()), nothing, nothing), ComplexF64[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 1.0 + 0.0im], (0.0, 10.0), SciMLBase.NullParameters(), Base.Pairs(:tstops => [0.0, 0.1, 0.10101010101010101, 0.2, 0.20202020202020202, 0.3, 0.30303030303030304, 0.4, 0.40404040404040403, 0.5  …  9.5, 9.595959595959595, 9.6, 9.696969696969697, 9.7, 9.797979797979798, 9.8, 9.8989898989899, 9.9, 10.0]), SciMLBase.StandardODEProblem()), OrdinaryDiffEqLinear.MagnusAdapt4(), OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Matrix{ComplexF64}}, Vector{Float64}, Vector{Vector{Matrix{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, Nothing}, Nothing}(SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}(MatrixOperator(2 × 2), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(Dict{Symbol, Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(:U => CartesianIndices((2, 2)), :U_2_2 => CartesianIndex(2, 2), :U_1_1 => CartesianIndex(1, 1), :U_2_1 => CartesianIndex(2, 1), :U_1_2 => CartesianIndex(1, 2)), :t, Dict{Symbol, Float64}()), nothing, nothing), Matrix{ComplexF64}[[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 1.0 + 0.0im], [0.994838614195209 - 0.09982789453385549im 0.012963164290171234 - 0.01274674667038149im; -0.01296316429017123 - 0.01274674667038149im 0.9948386141952092 + 0.09982789453385554im], [0.9797217237176439 - 0.1988112023106443im 0.02249253715951924 - 0.010655312461531358im; -0.022492537159519238 - 0.010655312461531358im 0.9797217237176441 + 0.19881120231064436im], [0.9544178829189425 - 0.295938976768667im 0.03874913691691661 - 0.0022652112115070355im; -0.038749136916916595 - 0.002265211211507038im 0.9544178829189427 + 0.29593897676866704im], [0.919440893944407 - 0.3895627101647657im 0.05321421481693987 - 0.006130638890870673im; -0.05321421481693985 - 0.006130638890870673im 0.919440893944407 + 0.38956271016476574im], [0.8759101245590754 - 0.47948828680414085im 0.052702933111849794 - 0.009738447203936317im; -0.05270293311184974 - 0.00973844720393631im 0.8759101245590749 + 0.4794882868041408im], [0.8226355761999439 - 0.5646839863275012im 0.06610509365708242 - 0.005728956978092022im; -0.06610509365708236 - 0.005728956978092001im 0.8226355761999431 + 0.5646839863275009im], [0.7624262522714966 - 0.6446588139426283im 0.055583678317705394 - 0.005628335277654074im; -0.05558367831770533 - 0.0056283352776540395im 0.7624262522714957 + 0.6446588139426278im], [0.6946819178826279 - 0.7177927501157801im 0.0452737977908495 - 0.011869460043818543im; -0.04527379779084943 - 0.0118694600438185im 0.6946819178826269 + 0.7177927501157798im], [0.6199386588787392 - 0.783596813800533im 0.03555094056061948 - 0.01970338180458789im; -0.03555094056061937 - 0.019703381804587833im 0.6199386588787381 + 0.7835968138005324im]  …  [-0.9410451948970024 - 0.3184759462232508im -0.11353480573429717 + 0.010810213936806964im; 0.11353480573429724 + 0.010810213936807067im -0.9410451948970007 + 0.31847594622324976im], [-0.9687366948229356 - 0.2233174213405056im -0.10560672958261283 + 0.022929546359295377im; 0.1056067295826129 + 0.02292954635929549im -0.9687366948229339 + 0.2233174213405047im], [-0.9856454630494506 - 0.12419858237734561im -0.11167081487544696 + 0.02464472378750537im; 0.11167081487544704 + 0.02464472378750548im -0.9856454630494488 + 0.12419858237734488im], [-0.9936608214973128 - 0.02436829671536459im -0.10628762962713628 + 0.027336746784123903im; 0.10628762962713643 + 0.027336746784124028im -0.9936608214973115 + 0.02436829671536405im], [-0.9896746779462434 + 0.07488441510036561im -0.11486483980211357 + 0.04174236198787289im; 0.11486483980211375 + 0.041742361987873074im -0.9896746779462422 - 0.07488441510036603im], [-0.9783611730064354 + 0.17198877010440136im -0.09782205536211204 + 0.06049895533143282im; 0.09782205536211218 + 0.06049895533143304im -0.978361173006434 - 0.17198877010440167im], [-0.9584299310796375 + 0.27013675744224813im -0.0763027491754736 + 0.05114772680727354im; 0.07630274917547371 + 0.051147726807273725im -0.9584299310796359 - 0.27013675744224835im], [-0.9279109140005077 + 0.3629534403582356im -0.050768797566937474 + 0.06832762987612016im; 0.05076879756693751 + 0.06832762987612034im -0.9279109140005061 - 0.3629534403582357im], [-0.8881149036599798 + 0.45354655016481477im -0.03095897477315611 + 0.06774205939911349im; 0.030958974773156088 + 0.06774205939911361im -0.8881149036599776 - 0.4535465501648142im], [-0.8381799464973397 + 0.5399577651325275im -0.0264298991448399 + 0.07212107593494863im; 0.02642989914483987 + 0.07212107593494874im -0.8381799464973374 - 0.5399577651325266im]], [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9  …  9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10.0], Vector{Matrix{ComplexF64}}[[[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 1.0 + 0.0im]]], nothing, false, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, Nothing}(ComplexF64[-0.8381799464973397 + 0.5399577651325275im -0.0264298991448399 + 0.07212107593494863im; 0.02642989914483987 + 0.07212107593494874im -0.8381799464973374 - 0.5399577651325266im], ComplexF64[-0.8383683954448609 + 0.5396639746472893im -0.026456270496348216 + 0.07211999541418342im; 0.026456270496348185 + 0.07211999541418353im -0.8383683954448585 - 0.5396639746472884im], ComplexF64[-0.8383683954448609 + 0.5396639746472893im -0.026456270496348216 + 0.07211999541418342im; 0.026456270496348185 + 0.07211999541418353im -0.8383683954448585 - 0.5396639746472884im], ComplexF64[2.0e-8 + 0.0im 1.0e-8 + 0.0im; 1.0e-8 + 0.0im 2.0e-8 + 0.0im], ComplexF64[0.5418818447205587 + 0.8386975254687561im 0.04658049541515717 + 0.04040652980608944im; -0.04658049541515723 + 0.040406529806089456im 0.5418818447205578 - 0.8386975254687538im], ComplexF64[0.0 + 0.0im 0.0 + 0.0im 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im 0.0 + 0.0im 0.0 + 0.0im], ComplexF64[0.5211662937883821 + 0.8442459128192865im 0.21923129600073107 - 0.18346563539418614im; -0.21923129600073143 - 0.18346563539418675im 0.5211662937883812 - 0.8442459128192842im], ComplexF64[0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im], ComplexF64[-0.004032980595032904 - 0.018617269659638808im 0.42480812901040016 + 0.32725104120879084im; -0.42480812901040016 + 0.3272510399200151im -0.004032975035705663 + 0.018617275218966077im], nothing), nothing, false), false, 0, SciMLBase.DEStats(2154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1326, 825, 0.0), nothing, SciMLBase.ReturnCode.Success, nothing, nothing, nothing))

Solve and Analyze

qcp = SmoothPulseProblem(qtraj, N; Q = 100.0)
solve!(qcp; max_iter = 50)
fidelity(qcp)
0.9997914029235936

Extracting the Pulse

optimized_pulse = get_pulse(qcp.qtraj)
duration(optimized_pulse)
14.262180172049334

KetTrajectory

For state preparation: find controls that map $|\psi_{\text{init}}\rangle \to |\psi_{\text{goal}}\rangle$ (up to global phase). The fidelity is $F = |\langle\psi_{\text{goal}}|\psi(T)\rangle|^2$.

Construction

# Initial and goal states
ψ_init = ComplexF64[1, 0]  # |0⟩
ψ_goal = ComplexF64[0, 1]  # |1⟩

qtraj_ket = KetTrajectory(sys, pulse, ψ_init, ψ_goal)
KetTrajectory{ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, SciMLBase.ODESolution{ComplexF64, 2, Vector{Vector{ComplexF64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, SciMLBase.ODEProblem{Vector{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqLinear.MagnusAdapt4, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Vector{ComplexF64}}, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}}(QuantumSystem: levels = 2, n_drives = 2, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}(DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}([0.12768722339484556 -0.023729634755217173 … 0.02562944982009882 -0.25687911757466714; -0.1298551306796811 -0.11162382915184617 … -0.013965470674590284 0.010029285317644335], [0.0, 0.10101010101010101, 0.20202020202020202, 0.30303030303030304, 0.40404040404040403, 0.5050505050505051, 0.6060606060606061, 0.7070707070707071, 0.8080808080808081, 0.9090909090909091  …  9.090909090909092, 9.191919191919192, 9.292929292929292, 9.393939393939394, 9.494949494949495, 9.595959595959595, 9.696969696969697, 9.797979797979798, 9.8989898989899, 10.0], Union{}[], nothing, :left, DataInterpolations.ExtrapolationType.None, DataInterpolations.ExtrapolationType.None, FindFirstFunctions.Guesser{Vector{Float64}}([0.0, 0.10101010101010101, 0.20202020202020202, 0.30303030303030304, 0.40404040404040403, 0.5050505050505051, 0.6060606060606061, 0.7070707070707071, 0.8080808080808081, 0.9090909090909091  …  9.090909090909092, 9.191919191919192, 9.292929292929292, 9.393939393939394, 9.494949494949495, 9.595959595959595, 9.696969696969697, 9.797979797979798, 9.8989898989899, 10.0], Base.RefValue{Int64}(100), true), false, true), 10.0, 2, :u, [0.0, 0.0], [0.0, 0.0]), ComplexF64[1.0 + 0.0im, 0.0 + 0.0im], ComplexF64[0.0 + 0.0im, 1.0 + 0.0im], SciMLBase.ODESolution{ComplexF64, 2, Vector{Vector{ComplexF64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, SciMLBase.ODEProblem{Vector{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqLinear.MagnusAdapt4, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Vector{ComplexF64}}, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}(Vector{ComplexF64}[[1.0 + 0.0im, 0.0 + 0.0im], [0.994838614195209 - 0.09982789453385549im, -0.01296316429017123 - 0.01274674667038149im], [0.9797217237176439 - 0.1988112023106443im, -0.022492537159519238 - 0.010655312461531358im], [0.9544178829189425 - 0.295938976768667im, -0.038749136916916595 - 0.002265211211507038im], [0.919440893944407 - 0.3895627101647657im, -0.05321421481693985 - 0.006130638890870673im], [0.8759101245590754 - 0.47948828680414085im, -0.05270293311184974 - 0.00973844720393631im], [0.8226355761999439 - 0.5646839863275012im, -0.06610509365708236 - 0.005728956978092001im], [0.7624262522714966 - 0.6446588139426283im, -0.05558367831770533 - 0.0056283352776540395im], [0.6946819178826279 - 0.7177927501157801im, -0.04527379779084943 - 0.0118694600438185im], [0.6199386588787392 - 0.783596813800533im, -0.03555094056061937 - 0.019703381804587833im]  …  [-0.9410451948970019 - 0.31847594622325115im, 0.11353480573429721 + 0.01081021393680712im], [-0.9687366948229351 - 0.22331742134050597im, 0.10560672958261287 + 0.02292954635929554im], [-0.9856454630494501 - 0.124198582377346im, 0.111670814875447 + 0.024644723787505537im], [-0.9936608214973125 - 0.02436829671536503im, 0.1062876296271364 + 0.02733674678412408im], [-0.9896746779462431 + 0.07488441510036514im, 0.11486483980211369 + 0.04174236198787312im], [-0.9783611730064352 + 0.17198877010440083im, 0.09782205536211212 + 0.060498955331433076im], [-0.9584299310796373 + 0.2701367574422476im, 0.07630274917547365 + 0.05114772680727375im], [-0.9279109140005076 + 0.36295344035823507im, 0.05076879756693745 + 0.06832762987612036im], [-0.8881149036599797 + 0.4535465501648142im, 0.03095897477315604 + 0.06774205939911361im], [-0.8381799464973396 + 0.5399577651325269im, 0.026429899144839824 + 0.07212107593494874im]], nothing, nothing, [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9  …  9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10.0], Vector{Vector{ComplexF64}}[[[1.0 + 0.0im, 0.0 + 0.0im]]], nothing, SciMLBase.ODEProblem{Vector{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}(SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}(MatrixOperator(2 × 2), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(Dict{Symbol, Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(:ψ_2 => 2, :ψ_1 => 1, :ψ => 1:2), :t, Dict{Symbol, Float64}()), nothing, nothing), ComplexF64[1.0 + 0.0im, 0.0 + 0.0im], (0.0, 10.0), SciMLBase.NullParameters(), Base.Pairs(:tstops => [0.0, 0.1, 0.10101010101010101, 0.2, 0.20202020202020202, 0.3, 0.30303030303030304, 0.4, 0.40404040404040403, 0.5  …  9.5, 9.595959595959595, 9.6, 9.696969696969697, 9.7, 9.797979797979798, 9.8, 9.8989898989899, 9.9, 10.0]), SciMLBase.StandardODEProblem()), OrdinaryDiffEqLinear.MagnusAdapt4(), OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Vector{ComplexF64}}, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}, Nothing}(SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}(MatrixOperator(2 × 2), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(Dict{Symbol, Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(:ψ_2 => 2, :ψ_1 => 1, :ψ => 1:2), :t, Dict{Symbol, Float64}()), nothing, nothing), Vector{ComplexF64}[[1.0 + 0.0im, 0.0 + 0.0im], [0.994838614195209 - 0.09982789453385549im, -0.01296316429017123 - 0.01274674667038149im], [0.9797217237176439 - 0.1988112023106443im, -0.022492537159519238 - 0.010655312461531358im], [0.9544178829189425 - 0.295938976768667im, -0.038749136916916595 - 0.002265211211507038im], [0.919440893944407 - 0.3895627101647657im, -0.05321421481693985 - 0.006130638890870673im], [0.8759101245590754 - 0.47948828680414085im, -0.05270293311184974 - 0.00973844720393631im], [0.8226355761999439 - 0.5646839863275012im, -0.06610509365708236 - 0.005728956978092001im], [0.7624262522714966 - 0.6446588139426283im, -0.05558367831770533 - 0.0056283352776540395im], [0.6946819178826279 - 0.7177927501157801im, -0.04527379779084943 - 0.0118694600438185im], [0.6199386588787392 - 0.783596813800533im, -0.03555094056061937 - 0.019703381804587833im]  …  [-0.9410451948970019 - 0.31847594622325115im, 0.11353480573429721 + 0.01081021393680712im], [-0.9687366948229351 - 0.22331742134050597im, 0.10560672958261287 + 0.02292954635929554im], [-0.9856454630494501 - 0.124198582377346im, 0.111670814875447 + 0.024644723787505537im], [-0.9936608214973125 - 0.02436829671536503im, 0.1062876296271364 + 0.02733674678412408im], [-0.9896746779462431 + 0.07488441510036514im, 0.11486483980211369 + 0.04174236198787312im], [-0.9783611730064352 + 0.17198877010440083im, 0.09782205536211212 + 0.060498955331433076im], [-0.9584299310796373 + 0.2701367574422476im, 0.07630274917547365 + 0.05114772680727375im], [-0.9279109140005076 + 0.36295344035823507im, 0.05076879756693745 + 0.06832762987612036im], [-0.8881149036599797 + 0.4535465501648142im, 0.03095897477315604 + 0.06774205939911361im], [-0.8381799464973396 + 0.5399577651325269im, 0.026429899144839824 + 0.07212107593494874im]], [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9  …  9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10.0], Vector{Vector{ComplexF64}}[[[1.0 + 0.0im, 0.0 + 0.0im]]], nothing, false, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}(ComplexF64[-0.8381799464973396 + 0.5399577651325269im, 0.026429899144839824 + 0.07212107593494874im], ComplexF64[-0.8383683954448607 + 0.5396639746472888im, 0.02645627049634814 + 0.07211999541418353im], ComplexF64[-0.8383683954448607 + 0.5396639746472888im, 0.02645627049634814 + 0.07211999541418353im], ComplexF64[2.0e-8 + 0.0im, 1.0e-8 + 0.0im], ComplexF64[0.5418818447205581 + 0.838697525468756im, -0.04658049541515724 + 0.040406529806089414im], ComplexF64[0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im], ComplexF64[0.5211662937883815 + 0.8442459128192864im, -0.2192312960007313 - 0.18346563539418678im], ComplexF64[0.0 + 0.0im, 0.0 + 0.0im], ComplexF64[-0.004032980595032905 - 0.01861726965963881im, -0.42480812901040016 + 0.3272510399200151im], nothing), nothing, false), false, 0, SciMLBase.DEStats(2154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1326, 825, 0.0), nothing, SciMLBase.ReturnCode.Success, nothing, nothing, nothing))

Solve

qcp_ket = SmoothPulseProblem(qtraj_ket, N; Q = 100.0)
solve!(qcp_ket; max_iter = 50)
fidelity(qcp_ket)
0.9999980412691527

MultiKetTrajectory

For gates defined by multiple state mappings with coherent phases. The fidelity enforces phase alignment across all state pairs:

\[F = \left| \frac{1}{n} \sum_{j=1}^{n} \langle \psi_{\text{goal},j} | \psi_j(T) \rangle \right|^2\]

This is strictly harder than per-state fidelity because relative phases must be correct for the mapping to represent a valid gate.

Construction

# Define state pairs: X gate maps |0⟩ → |1⟩ and |1⟩ → |0⟩
ψ0 = ComplexF64[1, 0]
ψ1 = ComplexF64[0, 1]

initial_states = [ψ0, ψ1]
goal_states = [ψ1, ψ0]

qtraj_multi = MultiKetTrajectory(sys, pulse, initial_states, goal_states)
MultiKetTrajectory{ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, SciMLBase.EnsembleSolution{ComplexF64, 3, Vector{SciMLBase.ODESolution{ComplexF64, 2, Vector{Vector{ComplexF64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, SciMLBase.ODEProblem{Vector{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqLinear.MagnusAdapt4, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Vector{ComplexF64}}, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}}}}(QuantumSystem: levels = 2, n_drives = 2, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}(DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}([0.12768722339484556 -0.023729634755217173 … 0.02562944982009882 -0.25687911757466714; -0.1298551306796811 -0.11162382915184617 … -0.013965470674590284 0.010029285317644335], [0.0, 0.10101010101010101, 0.20202020202020202, 0.30303030303030304, 0.40404040404040403, 0.5050505050505051, 0.6060606060606061, 0.7070707070707071, 0.8080808080808081, 0.9090909090909091  …  9.090909090909092, 9.191919191919192, 9.292929292929292, 9.393939393939394, 9.494949494949495, 9.595959595959595, 9.696969696969697, 9.797979797979798, 9.8989898989899, 10.0], Union{}[], nothing, :left, DataInterpolations.ExtrapolationType.None, DataInterpolations.ExtrapolationType.None, FindFirstFunctions.Guesser{Vector{Float64}}([0.0, 0.10101010101010101, 0.20202020202020202, 0.30303030303030304, 0.40404040404040403, 0.5050505050505051, 0.6060606060606061, 0.7070707070707071, 0.8080808080808081, 0.9090909090909091  …  9.090909090909092, 9.191919191919192, 9.292929292929292, 9.393939393939394, 9.494949494949495, 9.595959595959595, 9.696969696969697, 9.797979797979798, 9.8989898989899, 10.0], Base.RefValue{Int64}(100), true), false, true), 10.0, 2, :u, [0.0, 0.0], [0.0, 0.0]), Vector{ComplexF64}[[1.0 + 0.0im, 0.0 + 0.0im], [0.0 + 0.0im, 1.0 + 0.0im]], Vector{ComplexF64}[[0.0 + 0.0im, 1.0 + 0.0im], [1.0 + 0.0im, 0.0 + 0.0im]], [0.5, 0.5], SciMLBase.EnsembleSolution{ComplexF64, 3, Vector{SciMLBase.ODESolution{ComplexF64, 2, Vector{Vector{ComplexF64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, SciMLBase.ODEProblem{Vector{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqLinear.MagnusAdapt4, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Vector{ComplexF64}}, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}}}(SciMLBase.ODESolution{ComplexF64, 2, Vector{Vector{ComplexF64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, SciMLBase.ODEProblem{Vector{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqLinear.MagnusAdapt4, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Vector{ComplexF64}}, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}[SciMLBase.ODESolution{ComplexF64, 2, Vector{Vector{ComplexF64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, SciMLBase.ODEProblem{Vector{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqLinear.MagnusAdapt4, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Vector{ComplexF64}}, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}(Vector{ComplexF64}[[1.0 + 0.0im, 0.0 + 0.0im], [0.994838614195209 - 0.09982789453385549im, -0.01296316429017123 - 0.01274674667038149im], [0.9797217237176439 - 0.1988112023106443im, -0.022492537159519238 - 0.010655312461531358im], [0.9544178829189425 - 0.295938976768667im, -0.038749136916916595 - 0.002265211211507038im], [0.919440893944407 - 0.3895627101647657im, -0.05321421481693985 - 0.006130638890870673im], [0.8759101245590754 - 0.47948828680414085im, -0.05270293311184974 - 0.00973844720393631im], [0.8226355761999439 - 0.5646839863275012im, -0.06610509365708236 - 0.005728956978092001im], [0.7624262522714966 - 0.6446588139426283im, -0.05558367831770533 - 0.0056283352776540395im], [0.6946819178826279 - 0.7177927501157801im, -0.04527379779084943 - 0.0118694600438185im], [0.6199386588787392 - 0.783596813800533im, -0.03555094056061937 - 0.019703381804587833im]  …  [-0.9410451948970019 - 0.31847594622325115im, 0.11353480573429721 + 0.01081021393680712im], [-0.9687366948229351 - 0.22331742134050597im, 0.10560672958261287 + 0.02292954635929554im], [-0.9856454630494501 - 0.124198582377346im, 0.111670814875447 + 0.024644723787505537im], [-0.9936608214973125 - 0.02436829671536503im, 0.1062876296271364 + 0.02733674678412408im], [-0.9896746779462431 + 0.07488441510036514im, 0.11486483980211369 + 0.04174236198787312im], [-0.9783611730064352 + 0.17198877010440083im, 0.09782205536211212 + 0.060498955331433076im], [-0.9584299310796373 + 0.2701367574422476im, 0.07630274917547365 + 0.05114772680727375im], [-0.9279109140005076 + 0.36295344035823507im, 0.05076879756693745 + 0.06832762987612036im], [-0.8881149036599797 + 0.4535465501648142im, 0.03095897477315604 + 0.06774205939911361im], [-0.8381799464973396 + 0.5399577651325269im, 0.026429899144839824 + 0.07212107593494874im]], nothing, nothing, [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9  …  9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10.0], Vector{Vector{ComplexF64}}[[[1.0 + 0.0im, 0.0 + 0.0im]]], nothing, SciMLBase.ODEProblem{Vector{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}(SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}(MatrixOperator(2 × 2), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(Dict{Symbol, Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(:ψ_2 => 2, :ψ_1 => 1, :ψ => 1:2), :t, Dict{Symbol, Float64}()), nothing, nothing), ComplexF64[1.0 + 0.0im, 0.0 + 0.0im], (0.0, 10.0), SciMLBase.NullParameters(), Base.Pairs(:tstops => [0.0, 0.1, 0.10101010101010101, 0.2, 0.20202020202020202, 0.3, 0.30303030303030304, 0.4, 0.40404040404040403, 0.5  …  9.5, 9.595959595959595, 9.6, 9.696969696969697, 9.7, 9.797979797979798, 9.8, 9.8989898989899, 9.9, 10.0]), SciMLBase.StandardODEProblem()), OrdinaryDiffEqLinear.MagnusAdapt4(), OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Vector{ComplexF64}}, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}, Nothing}(SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}(MatrixOperator(2 × 2), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(Dict{Symbol, Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(:ψ_2 => 2, :ψ_1 => 1, :ψ => 1:2), :t, Dict{Symbol, Float64}()), nothing, nothing), Vector{ComplexF64}[[1.0 + 0.0im, 0.0 + 0.0im], [0.994838614195209 - 0.09982789453385549im, -0.01296316429017123 - 0.01274674667038149im], [0.9797217237176439 - 0.1988112023106443im, -0.022492537159519238 - 0.010655312461531358im], [0.9544178829189425 - 0.295938976768667im, -0.038749136916916595 - 0.002265211211507038im], [0.919440893944407 - 0.3895627101647657im, -0.05321421481693985 - 0.006130638890870673im], [0.8759101245590754 - 0.47948828680414085im, -0.05270293311184974 - 0.00973844720393631im], [0.8226355761999439 - 0.5646839863275012im, -0.06610509365708236 - 0.005728956978092001im], [0.7624262522714966 - 0.6446588139426283im, -0.05558367831770533 - 0.0056283352776540395im], [0.6946819178826279 - 0.7177927501157801im, -0.04527379779084943 - 0.0118694600438185im], [0.6199386588787392 - 0.783596813800533im, -0.03555094056061937 - 0.019703381804587833im]  …  [-0.9410451948970019 - 0.31847594622325115im, 0.11353480573429721 + 0.01081021393680712im], [-0.9687366948229351 - 0.22331742134050597im, 0.10560672958261287 + 0.02292954635929554im], [-0.9856454630494501 - 0.124198582377346im, 0.111670814875447 + 0.024644723787505537im], [-0.9936608214973125 - 0.02436829671536503im, 0.1062876296271364 + 0.02733674678412408im], [-0.9896746779462431 + 0.07488441510036514im, 0.11486483980211369 + 0.04174236198787312im], [-0.9783611730064352 + 0.17198877010440083im, 0.09782205536211212 + 0.060498955331433076im], [-0.9584299310796373 + 0.2701367574422476im, 0.07630274917547365 + 0.05114772680727375im], [-0.9279109140005076 + 0.36295344035823507im, 0.05076879756693745 + 0.06832762987612036im], [-0.8881149036599797 + 0.4535465501648142im, 0.03095897477315604 + 0.06774205939911361im], [-0.8381799464973396 + 0.5399577651325269im, 0.026429899144839824 + 0.07212107593494874im]], [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9  …  9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10.0], Vector{Vector{ComplexF64}}[[[1.0 + 0.0im, 0.0 + 0.0im]]], nothing, false, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}(ComplexF64[-0.8381799464973396 + 0.5399577651325269im, 0.026429899144839824 + 0.07212107593494874im], ComplexF64[-0.8383683954448607 + 0.5396639746472888im, 0.02645627049634814 + 0.07211999541418353im], ComplexF64[-0.8383683954448607 + 0.5396639746472888im, 0.02645627049634814 + 0.07211999541418353im], ComplexF64[2.0e-8 + 0.0im, 1.0e-8 + 0.0im], ComplexF64[0.5418818447205581 + 0.838697525468756im, -0.04658049541515724 + 0.040406529806089414im], ComplexF64[0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im], ComplexF64[0.5211662937883815 + 0.8442459128192864im, -0.2192312960007313 - 0.18346563539418678im], ComplexF64[0.0 + 0.0im, 0.0 + 0.0im], ComplexF64[-0.004032980595032905 - 0.01861726965963881im, -0.42480812901040016 + 0.3272510399200151im], nothing), nothing, false), false, 0, SciMLBase.DEStats(2154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1326, 825, 0.0), nothing, SciMLBase.ReturnCode.Success, nothing, nothing, nothing), SciMLBase.ODESolution{ComplexF64, 2, Vector{Vector{ComplexF64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, SciMLBase.ODEProblem{Vector{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqLinear.MagnusAdapt4, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Vector{ComplexF64}}, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}(Vector{ComplexF64}[[0.0 + 0.0im, 1.0 + 0.0im], [0.012963164290171234 - 0.01274674667038149im, 0.9948386141952092 + 0.09982789453385554im], [0.02249253715951924 - 0.010655312461531358im, 0.9797217237176441 + 0.19881120231064436im], [0.03874913691691661 - 0.0022652112115070355im, 0.9544178829189427 + 0.29593897676866704im], [0.05321421481693987 - 0.006130638890870673im, 0.919440893944407 + 0.38956271016476574im], [0.052702933111849794 - 0.009738447203936317im, 0.8759101245590749 + 0.4794882868041408im], [0.06610509365708242 - 0.005728956978092022im, 0.8226355761999431 + 0.5646839863275009im], [0.055583678317705394 - 0.005628335277654074im, 0.7624262522714957 + 0.6446588139426278im], [0.0452737977908495 - 0.011869460043818543im, 0.6946819178826269 + 0.7177927501157798im], [0.03555094056061948 - 0.01970338180458789im, 0.6199386588787381 + 0.7835968138005324im]  …  [-0.11353480573429717 + 0.010810213936806964im, -0.9410451948970007 + 0.31847594622324976im], [-0.10560672958261283 + 0.022929546359295377im, -0.9687366948229339 + 0.2233174213405047im], [-0.11167081487544696 + 0.02464472378750537im, -0.9856454630494488 + 0.12419858237734488im], [-0.10628762962713628 + 0.027336746784123903im, -0.9936608214973115 + 0.02436829671536405im], [-0.11486483980211357 + 0.04174236198787289im, -0.9896746779462422 - 0.07488441510036603im], [-0.09782205536211204 + 0.06049895533143282im, -0.978361173006434 - 0.17198877010440167im], [-0.0763027491754736 + 0.05114772680727354im, -0.9584299310796359 - 0.27013675744224835im], [-0.050768797566937474 + 0.06832762987612016im, -0.9279109140005061 - 0.3629534403582357im], [-0.03095897477315611 + 0.06774205939911349im, -0.8881149036599776 - 0.4535465501648142im], [-0.0264298991448399 + 0.07212107593494863im, -0.8381799464973374 - 0.5399577651325266im]], nothing, nothing, [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9  …  9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10.0], Vector{Vector{ComplexF64}}[[[0.0 + 0.0im, 1.0 + 0.0im]]], nothing, SciMLBase.ODEProblem{Vector{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}(SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}(MatrixOperator(2 × 2), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(Dict{Symbol, Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(:ψ_2 => 2, :ψ_1 => 1, :ψ => 1:2), :t, Dict{Symbol, Float64}()), nothing, nothing), ComplexF64[0.0 + 0.0im, 1.0 + 0.0im], (0.0, 10.0), SciMLBase.NullParameters(), Base.Pairs(:tstops => [0.0, 0.1, 0.10101010101010101, 0.2, 0.20202020202020202, 0.3, 0.30303030303030304, 0.4, 0.40404040404040403, 0.5  …  9.5, 9.595959595959595, 9.6, 9.696969696969697, 9.7, 9.797979797979798, 9.8, 9.8989898989899, 9.9, 10.0]), SciMLBase.StandardODEProblem()), OrdinaryDiffEqLinear.MagnusAdapt4(), OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Vector{ComplexF64}}, Vector{Float64}, Vector{Vector{Vector{ComplexF64}}}, Nothing, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}, Nothing}(SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, SciMLOperators.MatrixOperator{ComplexF64, Matrix{ComplexF64}, SciMLOperators.FilterKwargs{Nothing, Val{()}}, SciMLOperators.FilterKwargs{Piccolo.Quantum.Rollouts.var"#update!#_construct_operator##2"{QuantumSystem{Piccolo.Quantum.QuantumSystems.var"#32#33"{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Int64}, Piccolo.Quantum.QuantumSystems.var"#34#35"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, Int64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}}, Val{()}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}(MatrixOperator(2 × 2), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(Dict{Symbol, Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(:ψ_2 => 2, :ψ_1 => 1, :ψ => 1:2), :t, Dict{Symbol, Float64}()), nothing, nothing), Vector{ComplexF64}[[0.0 + 0.0im, 1.0 + 0.0im], [0.012963164290171234 - 0.01274674667038149im, 0.9948386141952092 + 0.09982789453385554im], [0.02249253715951924 - 0.010655312461531358im, 0.9797217237176441 + 0.19881120231064436im], [0.03874913691691661 - 0.0022652112115070355im, 0.9544178829189427 + 0.29593897676866704im], [0.05321421481693987 - 0.006130638890870673im, 0.919440893944407 + 0.38956271016476574im], [0.052702933111849794 - 0.009738447203936317im, 0.8759101245590749 + 0.4794882868041408im], [0.06610509365708242 - 0.005728956978092022im, 0.8226355761999431 + 0.5646839863275009im], [0.055583678317705394 - 0.005628335277654074im, 0.7624262522714957 + 0.6446588139426278im], [0.0452737977908495 - 0.011869460043818543im, 0.6946819178826269 + 0.7177927501157798im], [0.03555094056061948 - 0.01970338180458789im, 0.6199386588787381 + 0.7835968138005324im]  …  [-0.11353480573429717 + 0.010810213936806964im, -0.9410451948970007 + 0.31847594622324976im], [-0.10560672958261283 + 0.022929546359295377im, -0.9687366948229339 + 0.2233174213405047im], [-0.11167081487544696 + 0.02464472378750537im, -0.9856454630494488 + 0.12419858237734488im], [-0.10628762962713628 + 0.027336746784123903im, -0.9936608214973115 + 0.02436829671536405im], [-0.11486483980211357 + 0.04174236198787289im, -0.9896746779462422 - 0.07488441510036603im], [-0.09782205536211204 + 0.06049895533143282im, -0.978361173006434 - 0.17198877010440167im], [-0.0763027491754736 + 0.05114772680727354im, -0.9584299310796359 - 0.27013675744224835im], [-0.050768797566937474 + 0.06832762987612016im, -0.9279109140005061 - 0.3629534403582357im], [-0.03095897477315611 + 0.06774205939911349im, -0.8881149036599776 - 0.4535465501648142im], [-0.0264298991448399 + 0.07212107593494863im, -0.8381799464973374 - 0.5399577651325266im]], [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9  …  9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10.0], Vector{Vector{ComplexF64}}[[[0.0 + 0.0im, 1.0 + 0.0im]]], nothing, false, OrdinaryDiffEqLinear.MagnusAdapt4Cache{Vector{ComplexF64}, Vector{ComplexF64}, Matrix{ComplexF64}, Vector{ComplexF64}, Nothing}(ComplexF64[-0.0264298991448399 + 0.07212107593494863im, -0.8381799464973374 - 0.5399577651325266im], ComplexF64[-0.026456270496348216 + 0.07211999541418342im, -0.8383683954448585 - 0.5396639746472884im], ComplexF64[-0.026456270496348216 + 0.07211999541418342im, -0.8383683954448585 - 0.5396639746472884im], ComplexF64[1.0e-8 + 0.0im, 2.0e-8 + 0.0im], ComplexF64[0.04658049541515717 + 0.04040652980608944im, 0.5418818447205578 - 0.8386975254687538im], ComplexF64[0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im], ComplexF64[0.21923129600073107 - 0.18346563539418614im, 0.5211662937883812 - 0.8442459128192842im], ComplexF64[0.0 + 0.0im, 0.0 + 0.0im], ComplexF64[0.42480812901040016 + 0.32725104120879084im, -0.004032975035705663 + 0.018617275218966077im], nothing), nothing, false), false, 0, SciMLBase.DEStats(2154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1326, 825, 0.0), nothing, SciMLBase.ReturnCode.Success, nothing, nothing, nothing)], 0.938484164, true, SciMLBase.DEStats(4308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2652, 1650, 0.0)))

Solve

qcp_multi = SmoothPulseProblem(qtraj_multi, N; Q = 100.0)
solve!(qcp_multi; max_iter = 50)
fidelity(qcp_multi)
0.9999654089528758

DensityTrajectory

For open quantum systems governed by the Lindblad master equation. The state $\rho(t)$ evolves as $\dot{\vec\rho} = \mathcal{G}(\boldsymbol{u})\,\vec\rho$ where $\mathcal{G}$ is the Lindbladian superoperator (see Systems).

Internally the state is stored in the compact isomorphism: a real vector of dimension $d^2$ (not $2d^2$) that exploits Hermiticity. The Lindbladian generators are also compacted via $\mathcal{G}_c = P\,\mathcal{G}\,L$ (size $d^2 \times d^2$ instead of $2d^2 \times 2d^2$), giving roughly a 4× speedup in integration. See Isomorphisms for details.

Construction

# Open system with a weak dissipation operator
L = ComplexF64[0.1 0.0; 0.0 0.0]
open_sys = OpenQuantumSystem(
    PAULIS[:Z],
    [PAULIS[:X], PAULIS[:Y]],
    [1.0, 1.0];
    dissipation_operators = [L],
)

# Initial and goal density matrices
ρ_init = ComplexF64[1.0 0.0; 0.0 0.0]  # |0⟩⟨0|
ρ_goal = ComplexF64[0.0 0.0; 0.0 1.0]  # |1⟩⟨1|

T_density, N_density = 10.0, 50
times_density = collect(range(0, T_density, length = N_density))
pulse_density = ZeroOrderPulse(0.1 * randn(2, N_density), times_density)
qtraj_density = DensityTrajectory(open_sys, pulse_density, ρ_init, ρ_goal)
DensityTrajectory{ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, SciMLBase.ODESolution{ComplexF64, 3, Vector{Matrix{ComplexF64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Matrix{ComplexF64}}}, Nothing, SciMLBase.ODEProblem{Matrix{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, Piccolo.Quantum.Rollouts.var"#rhs!#_construct_rhs##5"{OpenQuantumSystem{Piccolo.Quantum.QuantumSystems.var"#76#77"{Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Piccolo.Quantum.QuantumSystems.var"#78#79"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, Matrix{ComplexF64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqTsit5.Tsit5{typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, Piccolo.Quantum.Rollouts.var"#rhs!#_construct_rhs##5"{OpenQuantumSystem{Piccolo.Quantum.QuantumSystems.var"#76#77"{Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Piccolo.Quantum.QuantumSystems.var"#78#79"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, Matrix{ComplexF64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Matrix{ComplexF64}}, Vector{Float64}, Vector{Vector{Matrix{ComplexF64}}}, Nothing, OrdinaryDiffEqTsit5.Tsit5Cache{Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}}(OpenQuantumSystem: levels = 2, n_drives = 2, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}(DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}([-0.12745664785368127 0.08247654387514347 … 0.012883527797415292 -0.0445545868067773; -0.03464097472475488 0.0443697088389127 … 0.18449236475085115 0.11994849821767571], [0.0, 0.20408163265306123, 0.40816326530612246, 0.6122448979591837, 0.8163265306122449, 1.0204081632653061, 1.2244897959183674, 1.4285714285714286, 1.6326530612244898, 1.836734693877551  …  8.16326530612245, 8.36734693877551, 8.571428571428571, 8.775510204081632, 8.979591836734693, 9.183673469387756, 9.387755102040817, 9.591836734693878, 9.795918367346939, 10.0], Union{}[], nothing, :left, DataInterpolations.ExtrapolationType.None, DataInterpolations.ExtrapolationType.None, FindFirstFunctions.Guesser{Vector{Float64}}([0.0, 0.20408163265306123, 0.40816326530612246, 0.6122448979591837, 0.8163265306122449, 1.0204081632653061, 1.2244897959183674, 1.4285714285714286, 1.6326530612244898, 1.836734693877551  …  8.16326530612245, 8.36734693877551, 8.571428571428571, 8.775510204081632, 8.979591836734693, 9.183673469387756, 9.387755102040817, 9.591836734693878, 9.795918367346939, 10.0], Base.RefValue{Int64}(50), true), false, false), 10.0, 2, :u, [0.0, 0.0], [0.0, 0.0]), ComplexF64[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im], ComplexF64[0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 1.0 + 0.0im], SciMLBase.ODESolution{ComplexF64, 3, Vector{Matrix{ComplexF64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Matrix{ComplexF64}}}, Nothing, SciMLBase.ODEProblem{Matrix{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, Piccolo.Quantum.Rollouts.var"#rhs!#_construct_rhs##5"{OpenQuantumSystem{Piccolo.Quantum.QuantumSystems.var"#76#77"{Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Piccolo.Quantum.QuantumSystems.var"#78#79"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, Matrix{ComplexF64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqTsit5.Tsit5{typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, Piccolo.Quantum.Rollouts.var"#rhs!#_construct_rhs##5"{OpenQuantumSystem{Piccolo.Quantum.QuantumSystems.var"#76#77"{Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Piccolo.Quantum.QuantumSystems.var"#78#79"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, Matrix{ComplexF64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Matrix{ComplexF64}}, Vector{Float64}, Vector{Vector{Matrix{ComplexF64}}}, Nothing, OrdinaryDiffEqTsit5.Tsit5Cache{Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}(Matrix{ComplexF64}[[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im], [0.9998261678022755 - 1.2246167600927259e-17im -0.0047096178468539205 - 0.012311111857091517im; -0.00470961784685392 + 0.01231111185709152im 0.00017383219772448147 - 8.356417729069404e-21im], [0.999311834362642 - 1.457726513692228e-17im -0.011764554643287907 - 0.023427044678384048im; -0.011764554643287907 + 0.02342704467838405im 0.0006881656373579344 - 3.055388735655902e-21im], [0.9996818869878632 - 4.618574609678203e-18im -0.011435738471965742 - 0.013647875950196746im; -0.011435738471965743 + 0.013647875950196753im 0.0003181130121367742 + 1.2548773442706071e-20im], [0.9999121466475641 + 4.760675983209444e-18im -0.008686155708970853 - 0.0033525341089276042im; -0.008686155708970855 + 0.003352534108927614im 8.7853352435948e-5 + 6.005570357905504e-20im], [0.9999543875270541 + 2.4463284498255558e-17im -0.005468981434264973 - 0.003805737912401073im; -0.005468981434264976 + 0.003805737912401081im 4.5612472946013214e-5 + 1.026348812274478e-19im], [0.9999586425043723 + 2.396770559100414e-18im -0.0026309067253714826 - 0.005759997032482947im; -0.002630906725371487 + 0.005759997032482957im 4.1357495627884996e-5 + 1.584802172536853e-19im], [0.9998971283725957 + 6.687968667933347e-18im 0.00467316423101787 - 0.008927918195498435im; 0.0046731642310178685 + 0.008927918195498446im 0.00010287162740438979 + 2.442169840482331e-19im], [0.9996713110760203 + 7.863255069894536e-18im 0.011869449086074894 - 0.013644837802008005im; 0.011869449086074887 + 0.013644837802008015im 0.00032868892397982185 + 3.5877259334991907e-19im], [0.9999618671991789 - 3.1322137341582523e-19im 0.0023979378753702374 - 0.005537164454049768im; 0.00239793787537023 + 0.005537164454049779im 3.813280082104387e-5 + 2.0674894661394764e-19im]  …  [0.953270025306811 + 1.2640033392798497e-16im 0.17061216074604704 - 0.1136292360974825im; 0.170612160746047 + 0.11362923609748225im 0.04672997469318831 + 3.110248525620571e-17im], [0.9574797544977873 + 1.237905916684205e-16im 0.1387605750802812 - 0.13744762680378822im; 0.1387605750802812 + 0.13744762680378797im 0.04252024550221183 + 3.3372935781973504e-17im], [0.9570827133150529 + 1.2346192498480579e-16im 0.10575817041849644 - 0.16518594401947323im; 0.10575817041849649 + 0.16518594401947295im 0.042917286684946265 + 3.3775857313985203e-17im], [0.9558406852517684 + 1.2781623010468107e-16im 0.06959257658584377 - 0.18634144418043772im; 0.06959257658584388 + 0.18634144418043747im 0.044159314748230635 + 3.375889807365365e-17im], [0.9512518331977121 + 1.3559980115919766e-16im 0.041390351687218226 - 0.20487545802228285im; 0.041390351687218385 + 0.2048754580222826im 0.04874816680228691 + 2.9640053299869486e-17im], [0.9475436331026529 + 1.263645330596963e-16im 0.010737738190031583 - 0.21646982512936994im; 0.010737738190031787 + 0.21646982512936971im 0.052456366897346035 + 2.4697930783739077e-17im], [0.9492476514971103 + 1.2848589927096206e-16im -0.012203237278118256 - 0.21272318672981164im; -0.012203237278118013 + 0.21272318672981147im 0.05075234850288852 + 2.169622544370335e-17im], [0.9518515457048371 + 1.4636954459833198e-16im -0.03397779626486159 - 0.2045848607939408im; -0.033977796264861325 + 0.2045848607939407im 0.04814845429516148 + 2.0212885359754754e-17im], [0.9540550690657096 + 1.5213412303910734e-16im -0.057196551811353274 - 0.19416428692078397im; -0.05719655181135301 + 0.19416428692078389im 0.04594493093428892 + 1.9163300257163938e-17im], [0.9570367839497331 + 1.580424113519498e-16im -0.07777589216135242 - 0.17934843516947332im; -0.07777589216135214 + 0.17934843516947332im 0.042963216050265464 + 1.9190026220337362e-17im]], nothing, nothing, [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9  …  9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10.0], Vector{Matrix{ComplexF64}}[[[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im]]], nothing, SciMLBase.ODEProblem{Matrix{ComplexF64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, Piccolo.Quantum.Rollouts.var"#rhs!#_construct_rhs##5"{OpenQuantumSystem{Piccolo.Quantum.QuantumSystems.var"#76#77"{Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Piccolo.Quantum.QuantumSystems.var"#78#79"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, Matrix{ComplexF64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Base.Pairs{Symbol, Vector{Float64}, Nothing, @NamedTuple{tstops::Vector{Float64}}}, SciMLBase.StandardODEProblem}(SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, Piccolo.Quantum.Rollouts.var"#rhs!#_construct_rhs##5"{OpenQuantumSystem{Piccolo.Quantum.QuantumSystems.var"#76#77"{Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Piccolo.Quantum.QuantumSystems.var"#78#79"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, Matrix{ComplexF64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}(Piccolo.Quantum.Rollouts.var"#rhs!#_construct_rhs##5"{OpenQuantumSystem{Piccolo.Quantum.QuantumSystems.var"#76#77"{Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Piccolo.Quantum.QuantumSystems.var"#78#79"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, Matrix{ComplexF64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}}(OpenQuantumSystem: levels = 2, n_drives = 2, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}(DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}([-0.12745664785368127 0.08247654387514347 … 0.012883527797415292 -0.0445545868067773; -0.03464097472475488 0.0443697088389127 … 0.18449236475085115 0.11994849821767571], [0.0, 0.20408163265306123, 0.40816326530612246, 0.6122448979591837, 0.8163265306122449, 1.0204081632653061, 1.2244897959183674, 1.4285714285714286, 1.6326530612244898, 1.836734693877551  …  8.16326530612245, 8.36734693877551, 8.571428571428571, 8.775510204081632, 8.979591836734693, 9.183673469387756, 9.387755102040817, 9.591836734693878, 9.795918367346939, 10.0], Union{}[], nothing, :left, DataInterpolations.ExtrapolationType.None, DataInterpolations.ExtrapolationType.None, FindFirstFunctions.Guesser{Vector{Float64}}([0.0, 0.20408163265306123, 0.40816326530612246, 0.6122448979591837, 0.8163265306122449, 1.0204081632653061, 1.2244897959183674, 1.4285714285714286, 1.6326530612244898, 1.836734693877551  …  8.16326530612245, 8.36734693877551, 8.571428571428571, 8.775510204081632, 8.979591836734693, 9.183673469387756, 9.387755102040817, 9.591836734693878, 9.795918367346939, 10.0], Base.RefValue{Int64}(50), true), false, false), 10.0, 2, :u, [0.0, 0.0], [0.0, 0.0]), ComplexF64[0.09570367839497332 + 1.580424113519498e-17im -0.007777589216135242 - 0.017934843516947335im; 0.0 + 0.0im 0.0 + 0.0im], SparseArrays.SparseMatrixCSC{ComplexF64, Int64}[sparse([1], [1], ComplexF64[0.010000000000000002 + 0.0im], 2, 2)], SparseArrays.SparseMatrixCSC{ComplexF64, Int64}[sparse([1], [1], ComplexF64[0.1 + 0.0im], 2, 2)]), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(Dict{Symbol, Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(:ρ_1_2 => CartesianIndex(1, 2), :ρ_2_2 => CartesianIndex(2, 2), :ρ => CartesianIndices((2, 2)), :ρ_1_1 => CartesianIndex(1, 1), :ρ_2_1 => CartesianIndex(2, 1)), :t, Dict{Symbol, Float64}()), nothing, nothing), ComplexF64[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im], (0.0, 10.0), SciMLBase.NullParameters(), Base.Pairs(:tstops => [0.0, 0.1, 0.2, 0.20408163265306123, 0.3, 0.4, 0.40816326530612246, 0.5, 0.6, 0.6122448979591837  …  9.387755102040817, 9.4, 9.5, 9.591836734693878, 9.6, 9.7, 9.795918367346939, 9.8, 9.9, 10.0]), SciMLBase.StandardODEProblem()), OrdinaryDiffEqTsit5.Tsit5{typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}(OrdinaryDiffEqCore.trivial_limiter!, OrdinaryDiffEqCore.trivial_limiter!, static(false)), OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, Piccolo.Quantum.Rollouts.var"#rhs!#_construct_rhs##5"{OpenQuantumSystem{Piccolo.Quantum.QuantumSystems.var"#76#77"{Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Piccolo.Quantum.QuantumSystems.var"#78#79"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, Matrix{ComplexF64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}, Vector{Matrix{ComplexF64}}, Vector{Float64}, Vector{Vector{Matrix{ComplexF64}}}, Nothing, OrdinaryDiffEqTsit5.Tsit5Cache{Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}, Nothing}(SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, Piccolo.Quantum.Rollouts.var"#rhs!#_construct_rhs##5"{OpenQuantumSystem{Piccolo.Quantum.QuantumSystems.var"#76#77"{Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Piccolo.Quantum.QuantumSystems.var"#78#79"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, Matrix{ComplexF64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}, Nothing, Nothing}(Piccolo.Quantum.Rollouts.var"#rhs!#_construct_rhs##5"{OpenQuantumSystem{Piccolo.Quantum.QuantumSystems.var"#76#77"{Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Piccolo.Quantum.QuantumSystems.var"#78#79"{Vector{SparseArrays.SparseMatrixCSC{Float64, Int64}}, SparseArrays.SparseMatrixCSC{Float64, Int64}}, @NamedTuple{}}, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}, Matrix{ComplexF64}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}, Vector{SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}}(OpenQuantumSystem: levels = 2, n_drives = 2, ZeroOrderPulse{DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}}(DataInterpolations.ConstantInterpolation{Matrix{Float64}, Vector{Float64}, Vector{Union{}}, Float64}([-0.12745664785368127 0.08247654387514347 … 0.012883527797415292 -0.0445545868067773; -0.03464097472475488 0.0443697088389127 … 0.18449236475085115 0.11994849821767571], [0.0, 0.20408163265306123, 0.40816326530612246, 0.6122448979591837, 0.8163265306122449, 1.0204081632653061, 1.2244897959183674, 1.4285714285714286, 1.6326530612244898, 1.836734693877551  …  8.16326530612245, 8.36734693877551, 8.571428571428571, 8.775510204081632, 8.979591836734693, 9.183673469387756, 9.387755102040817, 9.591836734693878, 9.795918367346939, 10.0], Union{}[], nothing, :left, DataInterpolations.ExtrapolationType.None, DataInterpolations.ExtrapolationType.None, FindFirstFunctions.Guesser{Vector{Float64}}([0.0, 0.20408163265306123, 0.40816326530612246, 0.6122448979591837, 0.8163265306122449, 1.0204081632653061, 1.2244897959183674, 1.4285714285714286, 1.6326530612244898, 1.836734693877551  …  8.16326530612245, 8.36734693877551, 8.571428571428571, 8.775510204081632, 8.979591836734693, 9.183673469387756, 9.387755102040817, 9.591836734693878, 9.795918367346939, 10.0], Base.RefValue{Int64}(50), true), false, false), 10.0, 2, :u, [0.0, 0.0], [0.0, 0.0]), ComplexF64[0.09570367839497332 + 1.580424113519498e-17im -0.007777589216135242 - 0.017934843516947335im; 0.0 + 0.0im 0.0 + 0.0im], SparseArrays.SparseMatrixCSC{ComplexF64, Int64}[sparse([1], [1], ComplexF64[0.010000000000000002 + 0.0im], 2, 2)], SparseArrays.SparseMatrixCSC{ComplexF64, Int64}[sparse([1], [1], ComplexF64[0.1 + 0.0im], 2, 2)]), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, Piccolo.Quantum.Rollouts.PiccoloRolloutSystem{Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(Dict{Symbol, Union{Int64, AbstractVector{Int64}, CartesianIndex, CartesianIndices}}(:ρ_1_2 => CartesianIndex(1, 2), :ρ_2_2 => CartesianIndex(2, 2), :ρ => CartesianIndices((2, 2)), :ρ_1_1 => CartesianIndex(1, 1), :ρ_2_1 => CartesianIndex(2, 1)), :t, Dict{Symbol, Float64}()), nothing, nothing), Matrix{ComplexF64}[[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im], [0.9998261678022755 - 1.2246167600927259e-17im -0.0047096178468539205 - 0.012311111857091517im; -0.00470961784685392 + 0.01231111185709152im 0.00017383219772448147 - 8.356417729069404e-21im], [0.999311834362642 - 1.457726513692228e-17im -0.011764554643287907 - 0.023427044678384048im; -0.011764554643287907 + 0.02342704467838405im 0.0006881656373579344 - 3.055388735655902e-21im], [0.9996818869878632 - 4.618574609678203e-18im -0.011435738471965742 - 0.013647875950196746im; -0.011435738471965743 + 0.013647875950196753im 0.0003181130121367742 + 1.2548773442706071e-20im], [0.9999121466475641 + 4.760675983209444e-18im -0.008686155708970853 - 0.0033525341089276042im; -0.008686155708970855 + 0.003352534108927614im 8.7853352435948e-5 + 6.005570357905504e-20im], [0.9999543875270541 + 2.4463284498255558e-17im -0.005468981434264973 - 0.003805737912401073im; -0.005468981434264976 + 0.003805737912401081im 4.5612472946013214e-5 + 1.026348812274478e-19im], [0.9999586425043723 + 2.396770559100414e-18im -0.0026309067253714826 - 0.005759997032482947im; -0.002630906725371487 + 0.005759997032482957im 4.1357495627884996e-5 + 1.584802172536853e-19im], [0.9998971283725957 + 6.687968667933347e-18im 0.00467316423101787 - 0.008927918195498435im; 0.0046731642310178685 + 0.008927918195498446im 0.00010287162740438979 + 2.442169840482331e-19im], [0.9996713110760203 + 7.863255069894536e-18im 0.011869449086074894 - 0.013644837802008005im; 0.011869449086074887 + 0.013644837802008015im 0.00032868892397982185 + 3.5877259334991907e-19im], [0.9999618671991789 - 3.1322137341582523e-19im 0.0023979378753702374 - 0.005537164454049768im; 0.00239793787537023 + 0.005537164454049779im 3.813280082104387e-5 + 2.0674894661394764e-19im]  …  [0.953270025306811 + 1.2640033392798497e-16im 0.17061216074604704 - 0.1136292360974825im; 0.170612160746047 + 0.11362923609748225im 0.04672997469318831 + 3.110248525620571e-17im], [0.9574797544977873 + 1.237905916684205e-16im 0.1387605750802812 - 0.13744762680378822im; 0.1387605750802812 + 0.13744762680378797im 0.04252024550221183 + 3.3372935781973504e-17im], [0.9570827133150529 + 1.2346192498480579e-16im 0.10575817041849644 - 0.16518594401947323im; 0.10575817041849649 + 0.16518594401947295im 0.042917286684946265 + 3.3775857313985203e-17im], [0.9558406852517684 + 1.2781623010468107e-16im 0.06959257658584377 - 0.18634144418043772im; 0.06959257658584388 + 0.18634144418043747im 0.044159314748230635 + 3.375889807365365e-17im], [0.9512518331977121 + 1.3559980115919766e-16im 0.041390351687218226 - 0.20487545802228285im; 0.041390351687218385 + 0.2048754580222826im 0.04874816680228691 + 2.9640053299869486e-17im], [0.9475436331026529 + 1.263645330596963e-16im 0.010737738190031583 - 0.21646982512936994im; 0.010737738190031787 + 0.21646982512936971im 0.052456366897346035 + 2.4697930783739077e-17im], [0.9492476514971103 + 1.2848589927096206e-16im -0.012203237278118256 - 0.21272318672981164im; -0.012203237278118013 + 0.21272318672981147im 0.05075234850288852 + 2.169622544370335e-17im], [0.9518515457048371 + 1.4636954459833198e-16im -0.03397779626486159 - 0.2045848607939408im; -0.033977796264861325 + 0.2045848607939407im 0.04814845429516148 + 2.0212885359754754e-17im], [0.9540550690657096 + 1.5213412303910734e-16im -0.057196551811353274 - 0.19416428692078397im; -0.05719655181135301 + 0.19416428692078389im 0.04594493093428892 + 1.9163300257163938e-17im], [0.9570367839497331 + 1.580424113519498e-16im -0.07777589216135242 - 0.17934843516947332im; -0.07777589216135214 + 0.17934843516947332im 0.042963216050265464 + 1.9190026220337362e-17im]], [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9  …  9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10.0], Vector{Matrix{ComplexF64}}[[[1.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im]]], nothing, false, OrdinaryDiffEqTsit5.Tsit5Cache{Matrix{ComplexF64}, Matrix{ComplexF64}, Matrix{ComplexF64}, typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}(ComplexF64[0.9570367839497331 + 1.580424113519498e-16im -0.07777589216135242 - 0.17934843516947332im; -0.07777589216135214 + 0.17934843516947332im 0.042963216050265464 + 1.9190026220337362e-17im], ComplexF64[0.9570367901892478 + 1.5804238387233955e-16im -0.07777583837944205 - 0.17934844276747486im; -0.07777583837944177 + 0.17934844276747486im 0.042963209810750774 + 1.919003358998157e-17im], ComplexF64[0.03331937798184231 + 4.85722573273506e-17im -0.1896684099427464 + 0.16822491135441078im; -0.1896684099427464 - 0.16822491135441017im -0.033319377981842306 + 6.938893903907228e-18im], ComplexF64[0.03331937972119263 - 1.925929944387236e-34im -0.18966840067790292 + 0.16822492140511983im; -0.18966840067790292 - 0.16822492140511922im -0.03331937972119263 + 6.938893903907228e-18im], ComplexF64[0.03331938151455985 - 1.3877787807814457e-17im -0.18966839112533018 + 0.1682249317679617im; -0.18966839112533018 - 0.1682249317679611im -0.03331938151455984 + 0.0im], ComplexF64[0.03331938770491713 + 4.163336342344337e-17im -0.18966835815168728 + 0.168224967538491im; -0.18966835815168728 - 0.1682249675384904im -0.03331938770491714 + 6.938893903907228e-18im], ComplexF64[0.03331938856946624 - 6.938893903907228e-18im -0.18966835354656705 + 0.16822497253422516im; -0.18966835354656705 - 0.16822497253422455im -0.03331938856946625 + 6.938893903907228e-18im], ComplexF64[0.0026766084530605305 + 3.816391647148975e-17im -0.24866619627837125 + 0.11572231008484785im; -0.24866619627837125 - 0.11572231008484725im -0.0026766084530605323 - 1.3877787807814457e-17im], ComplexF64[0.0026766120777522665 + 2.0816681711721688e-17im -0.2486662391481261 + 0.11572235636979475im; -0.24866623914812613 - 0.11572235636979415im -0.0026766120777522665 - 1.3877787807814457e-17im], ComplexF64[2.233519406996207e-9 - 4.513626268591954e-24im 4.300289465987595e-9 + 3.8268629698497624e-9im; 4.300289465987595e-9 - 3.826862969849762e-9im -2.2335194069962074e-9 + 1.5083066795679235e-24im], ComplexF64[0.9570367956723058 + 1.5804241163140684e-16im -0.07777586959138634 - 0.17934841508427596im; -0.07777586959138606 + 0.17934841508427596im 0.042963204327692774 + 1.9190025414924136e-17im], ComplexF64[0.11412761467709673 - 2.3063573925738416e-16im 0.3597104325276457 + 0.3201092728748553im; 0.35971043252764573 - 0.32010927287485524im -0.21415131163058804 + 1.4461743773475812e-16im], OrdinaryDiffEqCore.trivial_limiter!, OrdinaryDiffEqCore.trivial_limiter!, static(false)), nothing, false), false, 0, SciMLBase.DEStats(16665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1746, 1031, 0.0), nothing, SciMLBase.ReturnCode.Success, nothing, nothing, nothing))

Solve and Analyze

The fidelity for density matrices is $F = \operatorname{tr}(\rho_{\text{goal}}\,\rho(T))$.

qcp_density = SmoothPulseProblem(qtraj_density, N_density; Q = 100.0, R = 1e-2)
solve!(qcp_density; max_iter = 150)
fidelity(qcp_density)
0.9948951115506884

SamplingTrajectory

For robust optimization over parameter variations. Created internally by SamplingProblem, this trajectory type stores multiple system variants sharing a single control pulse. The objective averages fidelity across all samples:

\[\bar{\ell} = \frac{1}{S}\sum_{s=1}^{S} \ell\!\bigl(x_N^{(s)},\, x_{\text{goal}}\bigr)\]

systems = [sys_nominal, sys_high, sys_low]
qcp_robust = SamplingProblem(qcp_base, systems)

Common Operations

Named Trajectory Integration

After solving, the NamedTrajectory stores the NLP decision vector at each of the $N$ knot points:

traj = get_trajectory(qcp)

# Controls at timestep k
u_1 = traj[1][:u]
u_1

# All timesteps
Δts = get_timesteps(traj)
length(Δts)
100

Internal Representation

States in the trajectory are real isomorphic vectors. Convert back to complex form with:

U = iso_vec_to_operator(traj[:Ũ⃗][:, end])     # unitary
ψ = iso_to_ket(traj[:ψ̃][:, end])               # ket
ρ = compact_iso_to_density(traj[:ρ⃗̃][:, end])   # density matrix

See Isomorphisms for details.

Best Practices

1. Match Pulse Type to Problem

# For SmoothPulseProblem
pulse = ZeroOrderPulse(controls, times)
qtraj = UnitaryTrajectory(sys, pulse, U_goal)
qcp = SmoothPulseProblem(qtraj, N)  # ✓

# For SplinePulseProblem
pulse = CubicSplinePulse(controls, tangents, times)
qtraj = UnitaryTrajectory(sys, pulse, U_goal)
qcp = SplinePulseProblem(qtraj)  # ✓

2. Initialize with Reasonable Controls

# Scale by drive bounds
max_amp = 0.1 * 1.0
initial_controls = max_amp * randn(2, N)
extrema(initial_controls)
(-0.2395431618222182, 0.27394604262581573)

See Also


This page was generated using Literate.jl.