Skip to content
Closed
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 40 additions & 7 deletions src/nlp/api.jl
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,9 @@ Return the structure of the linear constraints Jacobian in sparse coordinate for
"""
function jac_lin_structure! end

@deprecate jac_lin_structure!(nlp::AbstractNLPModel, x::AbstractVector, rows::AbstractVector, cols::AbstractVector) jac_lin_structure!(nlp, rows, cols)
@deprecate jac_lin_structure(nlp::AbstractNLPModel, x::AbstractVector) jac_lin_structure(nlp)

"""
(rows,cols) = jac_nln_structure(nlp)

Expand Down Expand Up @@ -268,10 +271,18 @@ function jac_coord!(nlp::AbstractNLPModel, x::AbstractVector, vals::AbstractVect
increment!(nlp, :neval_jac)
if nlp.meta.nlin > 0
if nlp.meta.nnln == 0
jac_lin_coord!(nlp, vals)
if hasmethod(jac_lin_coord!, Tuple{typeof(nlp), AbstractVector, typeof(vals)})
jac_lin_coord!(nlp, x, vals)
else
jac_lin_coord!(nlp, vals)
end
else
lin_ind = 1:(nlp.meta.lin_nnzj)
jac_lin_coord!(nlp, view(vals, lin_ind))
if hasmethod(jac_lin_coord!, Tuple{typeof(nlp), AbstractVector, AbstractVector})
jac_lin_coord!(nlp, x, view(vals, lin_ind))
else
jac_lin_coord!(nlp, view(vals, lin_ind))
end
end
end
if nlp.meta.nnln > 0
Expand Down Expand Up @@ -328,7 +339,11 @@ Evaluate the linear constraints Jacobian in sparse coordinate format.
"""
function jac_lin_coord(nlp::AbstractNLPModel{T, S}) where {T, S}
vals = S(undef, nlp.meta.lin_nnzj)
return jac_lin_coord!(nlp, vals)
if hasmethod(jac_lin_coord!, Tuple{typeof(nlp), AbstractVector, typeof(vals)}) && !isempty(nlp.meta.x0)
return jac_lin_coord!(nlp, nlp.meta.x0, vals)
else
return jac_lin_coord!(nlp, vals)
end
end

@deprecate jac_lin_coord(nlp::AbstractNLPModel, x::AbstractVector) jac_lin_coord(nlp)
Expand Down Expand Up @@ -399,9 +414,17 @@ function jprod!(nlp::AbstractNLPModel, x::AbstractVector, v::AbstractVector, Jv:
increment!(nlp, :neval_jprod)
if nlp.meta.nlin > 0
if nlp.meta.nnln == 0
jprod_lin!(nlp, v, Jv)
if hasmethod(jprod_lin!, Tuple{typeof(nlp), AbstractVector, AbstractVector, typeof(Jv)})
jprod_lin!(nlp, x, v, Jv)
else
jprod_lin!(nlp, v, Jv)
end
else
jprod_lin!(nlp, v, view(Jv, nlp.meta.lin))
if hasmethod(jprod_lin!, Tuple{typeof(nlp), AbstractVector, AbstractVector, AbstractVector})
jprod_lin!(nlp, x, v, view(Jv, nlp.meta.lin))
else
jprod_lin!(nlp, v, view(Jv, nlp.meta.lin))
end
end
end
if nlp.meta.nnln > 0
Expand Down Expand Up @@ -544,11 +567,21 @@ function jtprod!(nlp::AbstractNLPModel, x::AbstractVector, v::AbstractVector, Jt
@lencheck nlp.meta.ncon v
increment!(nlp, :neval_jtprod)
if nlp.meta.nnln == 0
(nlp.meta.nlin > 0) && jtprod_lin!(nlp, v, Jtv)
if nlp.meta.nlin > 0
if hasmethod(jtprod_lin!, Tuple{typeof(nlp), AbstractVector, AbstractVector, typeof(Jtv)})
jtprod_lin!(nlp, x, v, Jtv)
else
jtprod_lin!(nlp, v, Jtv)
end
end
elseif nlp.meta.nlin == 0
(nlp.meta.nnln > 0) && jtprod_nln!(nlp, x, v, Jtv)
elseif nlp.meta.nlin >= nlp.meta.nnln
jtprod_lin!(nlp, view(v, nlp.meta.lin), Jtv)
if hasmethod(jtprod_lin!, Tuple{typeof(nlp), AbstractVector, AbstractVector, typeof(Jtv)})
jtprod_lin!(nlp, x, view(v, nlp.meta.lin), Jtv)
else
jtprod_lin!(nlp, view(v, nlp.meta.lin), Jtv)
end
if nlp.meta.nnln > 0
Jtv .+= jtprod_nln(nlp, x, view(v, nlp.meta.nln))
end
Expand Down
Loading