The storage order for the A_2 and C_2 3-tensors should be reversed. This shoudl be done in conjunction with SciML/DifferenceEquations.jl#54
Instead of a 3-tensor, the natural datastructure is a vector of matrices, which will make the calculation of likelihoods/etc. and simulatino much more convenient. Basically we want to have the transformation of the current structure from C_2 to C_2_new and then get rid of the old C_2.
C_2_new = [C_2[i, :, :] for i in 1:size(C_2, 1)]
To do this,
fill!(c.C_2, zero(eltype(c.C_2))) # reset as we need to use `+=`
for i in 1:n_z
for j in 1:n_y
c.C_2[i, :, :] += 0.5 * c.Q[i, j] * c.g_xx[j, :, :]
end
end
becomes something like
fill!.(c.C_2, Ref(zero(eltype(c.C_2[1]))) # reset as we need to use `+=`
for i in 1:n_z
for j in 1:n_y
c.C_2[i]+= 0.5 * c.Q[i, j] * c.g_xx[j, :, :]
end
end
After this is done, SciML/DifferenceEquations.jl#54 can then be sync'd up - which might be required for the full unit tests to pass.
The storage order for the
A_2andC_23-tensors should be reversed. This shoudl be done in conjunction with SciML/DifferenceEquations.jl#54Instead of a 3-tensor, the natural datastructure is a vector of matrices, which will make the calculation of likelihoods/etc. and simulatino much more convenient. Basically we want to have the transformation of the current structure from
C_2toC_2_newand then get rid of the oldC_2.To do this,
C_2in https://github.com/HighDimensionalEconLab/DifferentiableStateSpaceModels.jl/blob/v0.4.19/src/types.jl#L223 to beC_2::Union{Nothing,Vector{Array{Float64,2}}}or something like that.C_2_p, A_2, andA_2_pwhere the_pbecome vectors of vectors of matrices.C_2and change to use the new datstrcuture. For example, inhttps://github.com/HighDimensionalEconLab/DifferentiableStateSpaceModels.jl/blob/v0.4.19/src/generate_perturbation.jl#L365-L370becomes something like
C_2, C_2_p, A_2, A_2_petc.A_2andC_2in https://github.com/HighDimensionalEconLab/DifferentiableStateSpaceModels.jl/blob/main/src/types.jl#L454-L496 need to change to theVector{<:AbstractMatrix}or something like that. instead, which should then work with the constructorAfter this is done, SciML/DifferenceEquations.jl#54 can then be sync'd up - which might be required for the full unit tests to pass.