@@ -651,6 +651,7 @@ function get_nonlinobj_op(mpc::NonLinMPC, optim::JuMP.GenericModel{JNT}) where J
651651 if ! isnothing (hess)
652652 ∇²J_prep = prepare_hessian (J!, hess, Z̃_J, J_cache... ; strict)
653653 ∇²J = init_diffmat (JNT, hess, ∇²J_prep, nZ̃, nZ̃)
654+ ∇²J_structure = lowertriangle_indices (init_diffstructure (∇²J))
654655 end
655656 update_objective! = if ! isnothing (hess)
656657 function (J, ∇J, ∇²J, Z̃_J, Z̃_arg)
@@ -715,7 +716,8 @@ function get_nonlinobj_op(mpc::NonLinMPC, optim::JuMP.GenericModel{JNT}) where J
715716 else # multivariate syntax (see JuMP.@operator doc):
716717 function (∇²J_arg:: AbstractMatrix{T} , Z̃_arg:: Vararg{T, N} ) where {N, T<: Real }
717718 update_objective! (J, ∇J, ∇²J, Z̃_J, Z̃_arg)
718- return fill_lowertriangle! (∇²J_arg, ∇²J)
719+ # println(typeof(∇²J_arg))
720+ return fill_diffstructure! (∇²J_arg, ∇²J, ∇²J_structure)
719721 end
720722 end
721723 if ! isnothing (hess)
@@ -807,13 +809,13 @@ function get_nonlincon_oracle(mpc::NonLinMPC, ::JuMP.GenericModel{JNT}) where JN
807809 end
808810 function ∇gi_func! (∇gi_arg, Z̃_arg)
809811 update_con! (gi, ∇gi, Z̃_∇gi, Z̃_arg)
810- return diffmat2vec ! (∇gi_arg, ∇gi, ∇gi_structure)
812+ return fill_diffstructure ! (∇gi_arg, ∇gi, ∇gi_structure)
811813 end
812814 function ∇²gi_func! (∇²ℓ_arg, Z̃_arg, λ_arg)
813815 Z̃_∇gi .= Z̃_arg
814816 λi .= λ_arg
815817 hessian! (ℓ_gi, ∇²ℓ_gi, ∇²gi_prep, hess, Z̃_∇gi, Constant (λi), ∇²gi_cache... )
816- return diffmat2vec ! (∇²ℓ_arg, ∇²ℓ_gi, ∇²gi_structure)
818+ return fill_diffstructure ! (∇²ℓ_arg, ∇²ℓ_gi, ∇²gi_structure)
817819 end
818820 gi_min = fill (- myInf, ngi)
819821 gi_max = zeros (JNT, ngi)
@@ -870,13 +872,13 @@ function get_nonlincon_oracle(mpc::NonLinMPC, ::JuMP.GenericModel{JNT}) where JN
870872 end
871873 function ∇geq_func! (∇geq_arg, Z̃_arg)
872874 update_con_eq! (geq, ∇geq, Z̃_∇geq, Z̃_arg)
873- return diffmat2vec ! (∇geq_arg, ∇geq, ∇geq_structure)
875+ return fill_diffstructure ! (∇geq_arg, ∇geq, ∇geq_structure)
874876 end
875877 function ∇²geq_func! (∇²ℓ_arg, Z̃_arg, λ_arg)
876878 Z̃_∇geq .= Z̃_arg
877879 λeq .= λ_arg
878880 hessian! (ℓ_geq, ∇²ℓ_geq, ∇²geq_prep, hess, Z̃_∇geq, Constant (λeq), ∇²geq_cache... )
879- return diffmat2vec ! (∇²ℓ_arg, ∇²ℓ_geq, ∇²geq_structure)
881+ return fill_diffstructure ! (∇²ℓ_arg, ∇²ℓ_geq, ∇²geq_structure)
880882 end
881883 geq_min = geq_max = zeros (JNT, neq)
882884 geq_oracle = MOI. VectorNonlinearOracle (;
0 commit comments