Skip to content

Commit 7afdded

Browse files
Fix type instabilities
1 parent f8a73b7 commit 7afdded

File tree

3 files changed

+243
-117
lines changed

3 files changed

+243
-117
lines changed

src/time_evolution/mcsolve.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ end
2222

2323
function _normalize_state!(u, dims, normalize_states)
2424
getVal(normalize_states) && normalize!(u)
25-
return QuantumObject(u, type = Ket(), dims = dims)
25+
return QuantumObject(u, Ket(), dims)
2626
end
2727

2828
function _mcsolve_make_Heff_QobjEvo(H::QuantumObject, c_ops)

src/time_evolution/time_evolution.jl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,9 +255,11 @@ Return the trajectory-averaged result states (as density [`Operator`](@ref)) at
255255
average_states(sol::TimeEvolutionMultiTrajSol{<:Matrix{<:QuantumObject}}) = _average_traj_states(sol.states)
256256
average_states(sol::TimeEvolutionMultiTrajSol{<:Vector{<:QuantumObject}}) = sol.states # this case should already be averaged over all trajectories
257257

258-
_average_traj_states(states::Matrix{<:QuantumObject{Ket}}) = dropdims(mean(ket2dm, states, dims = 1), dims = 1)
258+
# TODO: Check if broadcasting division ./ size(states, 1) is type stable
259+
_average_traj_states(states::Matrix{<:QuantumObject{Ket}}) =
260+
map(x -> x / size(states, 1), dropdims(sum(ket2dm, states, dims = 1), dims = 1))
259261
_average_traj_states(states::Matrix{<:QuantumObject{ObjType}}) where {ObjType<:Union{Operator,OperatorKet}} =
260-
dropdims(mean(states, dims = 1), dims = 1)
262+
map(x -> x / size(states, 1), dropdims(sum(states, dims = 1), dims = 1))
261263

262264
@doc raw"""
263265
average_expect(sol::TimeEvolutionMultiTrajSol)
@@ -268,7 +270,8 @@ average_expect(sol::TimeEvolutionMultiTrajSol{TS,Array{T,3}}) where {TS,T<:Numbe
268270
average_expect(sol::TimeEvolutionMultiTrajSol{TS,Matrix{T}}) where {TS,T<:Number} = sol.expect # this case should already be averaged over all trajectories
269271
average_expect(::TimeEvolutionMultiTrajSol{TS,Nothing}) where {TS} = nothing
270272

271-
_average_traj_expect(expvals::Array{T,3}) where {T<:Number} = dropdims(mean(expvals, dims = 2), dims = 2)
273+
_average_traj_expect(expvals::Array{T,3}) where {T<:Number} =
274+
dropdims(sum(expvals, dims = 2), dims = 2) ./ size(expvals, 2)
272275

273276
# these are used in multi-trajectory solvers before returning solutions
274277
_store_multitraj_states(states::Matrix{<:QuantumObject}, keep_runs_results::Val{false}) = _average_traj_states(states)

0 commit comments

Comments
 (0)