@@ -64,18 +64,24 @@ function CTModels.import_ocp_solution(
6464 X = stack (blob[" state" ]; dims= 1 )
6565 if X isa Vector # if X is a Vector, convert it to a Matrix
6666 X = Matrix {Float64} (reduce (hcat, X)' )
67+ else
68+ X = Matrix {Float64} (X)
6769 end
6870
6971 # get control
7072 U = stack (blob[" control" ]; dims= 1 )
7173 if U isa Vector # if U is a Vector, convert it to a Matrix
7274 U = Matrix {Float64} (reduce (hcat, U)' )
75+ else
76+ U = Matrix {Float64} (U)
7377 end
7478
7579 # get costate
7680 P = stack (blob[" costate" ]; dims= 1 )
7781 if P isa Vector # if P is a Vector, convert it to a Matrix
7882 P = Matrix {Float64} (reduce (hcat, P)' )
83+ else
84+ P = Matrix {Float64} (P)
7985 end
8086
8187 # get dual path constraints: convert to matrix
@@ -86,6 +92,8 @@ function CTModels.import_ocp_solution(
8692 end
8793 if path_constraints_dual isa Vector # if path_constraints_dual is a Vector, convert it to a Matrix
8894 path_constraints_dual = Matrix {Float64} (reduce (hcat, path_constraints_dual)' )
95+ elseif ! isnothing (path_constraints_dual)
96+ path_constraints_dual = Matrix {Float64} (path_constraints_dual)
8997 end
9098
9199 # get state constraints (and dual): convert to matrix
@@ -98,6 +106,8 @@ function CTModels.import_ocp_solution(
98106 state_constraints_lb_dual = Matrix {Float64} (
99107 reduce (hcat, state_constraints_lb_dual)'
100108 )
109+ elseif ! isnothing (state_constraints_lb_dual)
110+ state_constraints_lb_dual = Matrix {Float64} (state_constraints_lb_dual)
101111 end
102112 state_constraints_ub_dual = if isnothing (blob[" state_constraints_ub_dual" ])
103113 nothing
@@ -108,6 +118,8 @@ function CTModels.import_ocp_solution(
108118 state_constraints_ub_dual = Matrix {Float64} (
109119 reduce (hcat, state_constraints_ub_dual)'
110120 )
121+ elseif ! isnothing (state_constraints_ub_dual)
122+ state_constraints_ub_dual = Matrix {Float64} (state_constraints_ub_dual)
111123 end
112124
113125 # get control constraints (and dual): convert to matrix
@@ -120,6 +132,8 @@ function CTModels.import_ocp_solution(
120132 control_constraints_lb_dual = Matrix {Float64} (
121133 reduce (hcat, control_constraints_lb_dual)'
122134 )
135+ elseif ! isnothing (control_constraints_lb_dual)
136+ control_constraints_lb_dual = Matrix {Float64} (control_constraints_lb_dual)
123137 end
124138 control_constraints_ub_dual = if isnothing (blob[" control_constraints_ub_dual" ])
125139 nothing
@@ -130,14 +144,25 @@ function CTModels.import_ocp_solution(
130144 control_constraints_ub_dual = Matrix {Float64} (
131145 reduce (hcat, control_constraints_ub_dual)'
132146 )
147+ elseif ! isnothing (control_constraints_ub_dual)
148+ control_constraints_ub_dual = Matrix {Float64} (control_constraints_ub_dual)
133149 end
134150
135151 # get dual of boundary constraints: no conversion needed
136152 boundary_constraints_dual = blob[" boundary_constraints_dual" ]
153+ if ! isnothing (boundary_constraints_dual)
154+ boundary_constraints_dual = Vector {Float64} (boundary_constraints_dual)
155+ end
137156
138157 # get variable constraints dual: no conversion needed
139158 variable_constraints_lb_dual = blob[" variable_constraints_lb_dual" ]
159+ if ! isnothing (variable_constraints_lb_dual)
160+ variable_constraints_lb_dual = Vector {Float64} (blob[" variable_constraints_lb_dual" ])
161+ end
140162 variable_constraints_ub_dual = blob[" variable_constraints_ub_dual" ]
163+ if ! isnothing (variable_constraints_ub_dual)
164+ variable_constraints_ub_dual = Vector {Float64} (blob[" variable_constraints_ub_dual" ])
165+ end
141166
142167 # NB. convert vect{vect} to matrix
143168 return CTModels. build_solution (
0 commit comments