Skip to content

Commit 796d674

Browse files
committed
Revert "Update jac_lin_coord methods (#501)"
This reverts commit 3091fb0.
1 parent 1f3ce77 commit 796d674

File tree

5 files changed

+70
-94
lines changed

5 files changed

+70
-94
lines changed

docs/src/guidelines.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ The following functions should be defined:
6868
- `cons_nln!(nlp, x, c)`
6969
- `jac_lin_structure!(nlp, jrows, jcols)`
7070
- `jac_nln_structure!(nlp, jrows, jcols)`
71-
- `jac_lin_coord!(nlp, jvals)`
71+
- `jac_lin_coord!(nlp, x, jvals)`
7272
- `jac_nln_coord!(nlp, x, jvals)`
73-
- `jprod_lin!(nlp, v, Jv)`
73+
- `jprod_lin!(nlp, x, v, Jv)`
7474
- `jprod_nln!(nlp, x, v, Jv)`
75-
- `jtprod_lin!(nlp, v, Jtv)`
75+
- `jtprod_lin!(nlp, x, v, Jtv)`
7676
- `jtprod_nln!(nlp, x, v, Jtv)`
7777
- `hess_coord!(nlp, x, y, hvals; obj_weight=1)`
7878
- `hprod!(nlp, x, y, v, Hv; obj_weight=1)`

src/nlp/api.jl

Lines changed: 40 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using Base: @deprecate
2-
31
export obj, grad, grad!, objgrad, objgrad!, objcons, objcons!
42
export cons, cons!, cons_lin, cons_lin!, cons_nln, cons_nln!
53
export jth_con, jth_congrad, jth_congrad!, jth_sparse_congrad
@@ -268,10 +266,10 @@ function jac_coord!(nlp::AbstractNLPModel, x::AbstractVector, vals::AbstractVect
268266
increment!(nlp, :neval_jac)
269267
if nlp.meta.nlin > 0
270268
if nlp.meta.nnln == 0
271-
jac_lin_coord!(nlp, vals)
269+
jac_lin_coord!(nlp, x, vals)
272270
else
273271
lin_ind = 1:(nlp.meta.lin_nnzj)
274-
jac_lin_coord!(nlp, view(vals, lin_ind))
272+
jac_lin_coord!(nlp, x, view(vals, lin_ind))
275273
end
276274
end
277275
if nlp.meta.nnln > 0
@@ -309,43 +307,36 @@ function jac(nlp::AbstractNLPModel, x::AbstractVector)
309307
end
310308

311309
"""
312-
vals = jac_lin_coord!(nlp, vals)
310+
vals = jac_lin_coord!(nlp, x, vals)
313311
314-
Evaluate the linear constraints Jacobian in sparse coordinate format,
312+
Evaluate ``J(x)``, the linear constraints Jacobian at `x` in sparse coordinate format,
315313
overwriting `vals`.
316314
"""
317315
function jac_lin_coord! end
318316

319-
@deprecate jac_lin_coord!(nlp::AbstractNLPModel, x::AbstractVector, vals::AbstractVector) jac_lin_coord!(
320-
nlp,
321-
vals,
322-
)
323-
324317
"""
325-
vals = jac_lin_coord(nlp)
318+
vals = jac_lin_coord(nlp, x)
326319
327-
Evaluate the linear constraints Jacobian in sparse coordinate format.
320+
Evaluate ``J(x)``, the linear constraints Jacobian at `x` in sparse coordinate format.
328321
"""
329-
function jac_lin_coord(nlp::AbstractNLPModel{T, S}) where {T, S}
322+
function jac_lin_coord(nlp::AbstractNLPModel{T, S}, x::AbstractVector) where {T, S}
323+
@lencheck nlp.meta.nvar x
330324
vals = S(undef, nlp.meta.lin_nnzj)
331-
return jac_lin_coord!(nlp, vals)
325+
return jac_lin_coord!(nlp, x, vals)
332326
end
333327

334-
@deprecate jac_lin_coord(nlp::AbstractNLPModel, x::AbstractVector) jac_lin_coord(nlp)
335-
336328
"""
337-
Jx = jac_lin(nlp)
329+
Jx = jac_lin(nlp, x)
338330
339-
Evaluate the linear constraints Jacobian as a sparse matrix.
331+
Evaluate ``J(x)``, the linear constraints Jacobian at `x` as a sparse matrix.
340332
"""
341-
function jac_lin(nlp::AbstractNLPModel)
333+
function jac_lin(nlp::AbstractNLPModel, x::AbstractVector)
334+
@lencheck nlp.meta.nvar x
342335
rows, cols = jac_lin_structure(nlp)
343-
vals = jac_lin_coord(nlp)
336+
vals = jac_lin_coord(nlp, x)
344337
sparse(rows, cols, vals, nlp.meta.nlin, nlp.meta.nvar)
345338
end
346339

347-
@deprecate jac_lin(nlp::AbstractNLPModel, x::AbstractVector) jac_lin(nlp)
348-
349340
"""
350341
vals = jac_nln_coord!(nlp, x, vals)
351342
@@ -399,9 +390,9 @@ function jprod!(nlp::AbstractNLPModel, x::AbstractVector, v::AbstractVector, Jv:
399390
increment!(nlp, :neval_jprod)
400391
if nlp.meta.nlin > 0
401392
if nlp.meta.nnln == 0
402-
jprod_lin!(nlp, v, Jv)
393+
jprod_lin!(nlp, x, v, Jv)
403394
else
404-
jprod_lin!(nlp, v, view(Jv, nlp.meta.lin))
395+
jprod_lin!(nlp, x, v, view(Jv, nlp.meta.lin))
405396
end
406397
end
407398
if nlp.meta.nnln > 0
@@ -436,31 +427,23 @@ function jprod!(
436427
end
437428

438429
"""
439-
Jv = jprod_lin(nlp, v)
430+
Jv = jprod_lin(nlp, x, v)
440431
441432
Evaluate ``J(x)v``, the linear Jacobian-vector product at `x`.
442433
"""
443-
function jprod_lin(nlp::AbstractNLPModel{T, S}, v::AbstractVector) where {T, S}
444-
@lencheck nlp.meta.nvar v
434+
function jprod_lin(nlp::AbstractNLPModel{T, S}, x::AbstractVector, v::AbstractVector) where {T, S}
435+
@lencheck nlp.meta.nvar x v
445436
Jv = S(undef, nlp.meta.nlin)
446-
return jprod_lin!(nlp, v, Jv)
437+
return jprod_lin!(nlp, x, v, Jv)
447438
end
448439

449440
"""
450-
Jv = jprod_lin!(nlp, v, Jv)
441+
Jv = jprod_lin!(nlp, x, v, Jv)
451442
452443
Evaluate ``J(x)v``, the linear Jacobian-vector product at `x` in place.
453444
"""
454445
function jprod_lin! end
455446

456-
@deprecate jprod_lin(nlp::AbstractNLPModel, x::AbstractVector, v::AbstractVector) jprod_lin(nlp, v)
457-
@deprecate jprod_lin!(
458-
nlp::AbstractNLPModel,
459-
x::AbstractVector,
460-
v::AbstractVector,
461-
Jv::AbstractVector,
462-
) jprod_lin!(nlp, v, Jv)
463-
464447
"""
465448
Jv = jprod_lin!(nlp, rows, cols, vals, v, Jv)
466449
@@ -544,18 +527,18 @@ function jtprod!(nlp::AbstractNLPModel, x::AbstractVector, v::AbstractVector, Jt
544527
@lencheck nlp.meta.ncon v
545528
increment!(nlp, :neval_jtprod)
546529
if nlp.meta.nnln == 0
547-
(nlp.meta.nlin > 0) && jtprod_lin!(nlp, v, Jtv)
530+
(nlp.meta.nlin > 0) && jtprod_lin!(nlp, x, v, Jtv)
548531
elseif nlp.meta.nlin == 0
549532
(nlp.meta.nnln > 0) && jtprod_nln!(nlp, x, v, Jtv)
550533
elseif nlp.meta.nlin >= nlp.meta.nnln
551-
jtprod_lin!(nlp, view(v, nlp.meta.lin), Jtv)
534+
jtprod_lin!(nlp, x, view(v, nlp.meta.lin), Jtv)
552535
if nlp.meta.nnln > 0
553536
Jtv .+= jtprod_nln(nlp, x, view(v, nlp.meta.nln))
554537
end
555538
else
556539
jtprod_nln!(nlp, x, view(v, nlp.meta.nln), Jtv)
557540
if nlp.meta.nlin > 0
558-
Jtv .+= jtprod_lin(nlp, view(v, nlp.meta.lin))
541+
Jtv .+= jtprod_lin(nlp, x, view(v, nlp.meta.lin))
559542
end
560543
end
561544
return Jtv
@@ -583,34 +566,24 @@ function jtprod!(
583566
end
584567

585568
"""
586-
Jtv = jtprod_lin(nlp, v)
569+
Jtv = jtprod_lin(nlp, x, v)
587570
588571
Evaluate ``J(x)^Tv``, the linear transposed-Jacobian-vector product at `x`.
589572
"""
590-
function jtprod_lin(nlp::AbstractNLPModel{T, S}, v::AbstractVector) where {T, S}
573+
function jtprod_lin(nlp::AbstractNLPModel{T, S}, x::AbstractVector, v::AbstractVector) where {T, S}
574+
@lencheck nlp.meta.nvar x
591575
@lencheck nlp.meta.nlin v
592576
Jtv = S(undef, nlp.meta.nvar)
593-
return jtprod_lin!(nlp, v, Jtv)
577+
return jtprod_lin!(nlp, x, v, Jtv)
594578
end
595579

596580
"""
597-
Jtv = jtprod_lin!(nlp, v, Jtv)
581+
Jtv = jtprod_lin!(nlp, x, v, Jtv)
598582
599583
Evaluate ``J(x)^Tv``, the linear transposed-Jacobian-vector product at `x` in place.
600584
"""
601585
function jtprod_lin! end
602586

603-
@deprecate jtprod_lin(nlp::AbstractNLPModel, x::AbstractVector, v::AbstractVector) jtprod_lin(
604-
nlp,
605-
v,
606-
)
607-
@deprecate jtprod_lin!(
608-
nlp::AbstractNLPModel,
609-
x::AbstractVector,
610-
v::AbstractVector,
611-
Jtv::AbstractVector,
612-
) jtprod_lin!(nlp, v, Jtv)
613-
614587
"""
615588
Jtv = jtprod_lin!(nlp, rows, cols, vals, v, Jtv)
616589
@@ -763,37 +736,37 @@ function jac_op!(
763736
end
764737

765738
"""
766-
J = jac_lin_op(nlp)
739+
J = jac_lin_op(nlp, x)
767740
768-
Return the linear Jacobian as a linear operator.
741+
Return the linear Jacobian at `x` as a linear operator.
769742
The resulting object may be used as if it were a matrix, e.g., `J * v` or
770743
`J' * v`.
771744
"""
772-
function jac_lin_op(nlp::AbstractNLPModel{T, S}) where {T, S}
745+
function jac_lin_op(nlp::AbstractNLPModel{T, S}, x::AbstractVector) where {T, S}
746+
@lencheck nlp.meta.nvar x
773747
Jv = S(undef, nlp.meta.nlin)
774748
Jtv = S(undef, nlp.meta.nvar)
775-
return jac_lin_op!(nlp, Jv, Jtv)
749+
return jac_lin_op!(nlp, x, Jv, Jtv)
776750
end
777751

778-
@deprecate jac_lin_op(nlp::AbstractNLPModel, x::AbstractVector) jac_lin_op(nlp)
779-
780752
"""
781-
J = jac_lin_op!(nlp, Jv, Jtv)
753+
J = jac_lin_op!(nlp, x, Jv, Jtv)
782754
783-
Return the linear Jacobian as a linear operator.
755+
Return the linear Jacobian at `x` as a linear operator.
784756
The resulting object may be used as if it were a matrix, e.g., `J * v` or
785757
`J' * v`. The values `Jv` and `Jtv` are used as preallocated storage for the
786758
operations.
787759
"""
788760
function jac_lin_op!(
789761
nlp::AbstractNLPModel{T, S},
762+
x::AbstractVector{T},
790763
Jv::AbstractVector,
791764
Jtv::AbstractVector,
792765
) where {T, S}
766+
@lencheck nlp.meta.nvar x Jtv
793767
@lencheck nlp.meta.nlin Jv
794-
@lencheck nlp.meta.nvar Jtv
795768
prod! = @closure (res, v, α, β) -> begin # res = α * J * v + β * res
796-
jprod_lin!(nlp, v, Jv)
769+
jprod_lin!(nlp, x, v, Jv)
797770
if β == 0
798771
res .= α .* Jv
799772
else
@@ -802,7 +775,7 @@ function jac_lin_op!(
802775
return res
803776
end
804777
ctprod! = @closure (res, v, α, β) -> begin
805-
jtprod_lin!(nlp, v, Jtv)
778+
jtprod_lin!(nlp, x, v, Jtv)
806779
if β == 0
807780
res .= α .* Jtv
808781
else
@@ -813,13 +786,6 @@ function jac_lin_op!(
813786
return LinearOperator{T}(nlp.meta.nlin, nlp.meta.nvar, false, false, prod!, ctprod!, ctprod!)
814787
end
815788

816-
@deprecate jac_lin_op!(
817-
nlp::AbstractNLPModel,
818-
x::AbstractVector,
819-
Jv::AbstractVector,
820-
Jtv::AbstractVector,
821-
) jac_lin_op!(nlp, Jv, Jtv)
822-
823789
"""
824790
J = jac_lin_op!(nlp, rows, cols, vals, Jv, Jtv)
825791

test/nlp/api.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@
3030
@test cons_lin(nlp, x) == c(x)[1:1]
3131
@test jac(nlp, x) J(x)
3232
@test jac_nln(nlp, x) J(x)[2:2, :]
33-
@test jac_lin(nlp) J(x)[1:1, :]
33+
@test jac_lin(nlp, x) J(x)[1:1, :]
3434
@test jprod(nlp, x, v) J(x) * v
3535
@test jprod_nln(nlp, x, v) J(x)[2:2, :] * v
36-
@test jprod_lin(nlp, v) J(x)[1:1, :] * v
36+
@test jprod_lin(nlp, x, v) J(x)[1:1, :] * v
3737
@test jtprod(nlp, x, w) J(x)' * w
3838
@test jtprod_nln(nlp, x, w[2:2]) J(x)[2:2, :]' * w[2:2]
39-
@test jtprod_lin(nlp, w[1:1]) J(x)[1:1, :]' * w[1:1]
39+
@test jtprod_lin(nlp, x, w[1:1]) J(x)[1:1, :]' * w[1:1]
4040
@test hess(nlp, x, y) tril(H(x, y))
4141
@test hprod(nlp, x, y, v) H(x, y) * v
4242

@@ -56,12 +56,12 @@
5656
@test jprod!(nlp, jac_structure(nlp)..., jac_coord(nlp, x), v, Jv) J(x) * v
5757
@test jprod_nln!(nlp, jac_nln_structure(nlp)..., jac_nln_coord(nlp, x), v, Jv[2:2])
5858
J(x)[2:2, :] * v
59-
@test jprod_lin!(nlp, jac_lin_structure(nlp)..., jac_lin_coord(nlp), v, Jv[1:1])
59+
@test jprod_lin!(nlp, jac_lin_structure(nlp)..., jac_lin_coord(nlp, x), v, Jv[1:1])
6060
J(x)[1:1, :] * v
6161
@test jtprod!(nlp, jac_structure(nlp)..., jac_coord(nlp, x), w, Jtw) J(x)' * w
6262
@test jtprod_nln!(nlp, jac_nln_structure(nlp)..., jac_nln_coord(nlp, x), w[2:2], Jtw)
6363
J(x)[2:2, :]' * w[2:2]
64-
@test jtprod_lin!(nlp, jac_lin_structure(nlp)..., jac_lin_coord(nlp), w[1:1], Jtw)
64+
@test jtprod_lin!(nlp, jac_lin_structure(nlp)..., jac_lin_coord(nlp, x), w[1:1], Jtw)
6565
J(x)[1:1, :]' * w[1:1]
6666
Jop = jac_op!(nlp, x, Jv, Jtw)
6767
@test Jop * v J(x) * v
@@ -91,14 +91,14 @@
9191
@test mul!(w[2:2], Jop, v, 1.0, -1.0) res
9292
res = J(x)[2:2, :]' * w[2:2] - v
9393
@test mul!(v, Jop', w[2:2], 1.0, -1.0) res
94-
Jop = jac_lin_op!(nlp, Jv[1:1], Jtw)
94+
Jop = jac_lin_op!(nlp, x, Jv[1:1], Jtw)
9595
@test Jop * v J(x)[1:1, :] * v
9696
@test Jop' * w[1:1] Jtw
9797
res = J(x)[1:1, :] * v - w[1:1]
9898
@test mul!(w[1:1], Jop, v, 1.0, -1.0) res
9999
res = J(x)[1:1, :]' * w[1:1] - v
100100
@test mul!(v, Jop', w[1:1], 1.0, -1.0) res
101-
Jop = jac_lin_op!(nlp, jac_lin_structure(nlp)..., jac_lin_coord(nlp), Jv[1:1], Jtw)
101+
Jop = jac_lin_op!(nlp, jac_lin_structure(nlp)..., jac_lin_coord(nlp, x), Jv[1:1], Jtw)
102102
@test Jop * v J(x)[1:1, :] * v
103103
@test Jop' * w[1:1] Jtw
104104
res = J(x)[1:1, :] * v - w[1:1]

test/nlp/dummy-model.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ end
1919
@test_throws(MethodError, jth_congrad(model, [0.0], 1))
2020
@test_throws(MethodError, jth_sparse_congrad(model, [0.0], 1))
2121
@test_throws(MethodError, jth_congrad!(model, [0.0], 1, [2.0]))
22-
@test_throws(MethodError, jprod_lin!(model, [0.0], [2.0]))
23-
@test_throws(MethodError, jtprod_lin!(model, [0.0], [2.0]))
22+
@test_throws(MethodError, jprod_lin!(model, [0.0], [1.0], [2.0]))
23+
@test_throws(MethodError, jtprod_lin!(model, [0.0], [1.0], [2.0]))
2424
@test_throws(MethodError, jprod_nln!(model, [0.0], [1.0], [2.0]))
2525
@test_throws(MethodError, jtprod_nln!(model, [0.0], [1.0], [2.0]))
2626
@test_throws(MethodError, jth_hess_coord!(model, [0.0], 1))
2727
@test_throws(MethodError, jth_hprod!(model, [0.0], [1.0], 2, [3.0]))
2828
@test_throws(MethodError, ghjvprod!(model, [0.0], [1.0], [2.0], [3.0]))
2929
@assert isa(hess_op(model, [0.0]), LinearOperator)
3030
@assert isa(jac_op(model, [0.0]), LinearOperator)
31-
@assert isa(jac_lin_op(model), LinearOperator)
31+
@assert isa(jac_lin_op(model, [0.0]), LinearOperator)
3232
@assert isa(jac_nln_op(model, [0.0]), LinearOperator)
3333
end

test/nlp/simple-model.jl

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ function NLPModels.jac_nln_coord!(nlp::SimpleNLPModel, x::AbstractVector, vals::
139139
return vals
140140
end
141141

142-
function NLPModels.jac_lin_coord!(nlp::SimpleNLPModel, vals::AbstractVector)
143-
@lencheck 2 vals
142+
function NLPModels.jac_lin_coord!(nlp::SimpleNLPModel, x::AbstractVector, vals::AbstractVector)
143+
@lencheck 2 x vals
144144
increment!(nlp, :neval_jac_lin)
145145
vals .= [1, -2]
146146
return vals
@@ -159,11 +159,16 @@ function NLPModels.jprod_nln!(
159159
return Jv
160160
end
161161

162-
function NLPModels.jprod_lin!(nlp::SimpleNLPModel, v::AbstractVector, Jv::AbstractVector)
163-
@lencheck 2 v
162+
function NLPModels.jprod_lin!(
163+
nlp::SimpleNLPModel,
164+
x::AbstractVector,
165+
v::AbstractVector,
166+
Jv::AbstractVector,
167+
)
168+
@lencheck 2 x v
164169
@lencheck 1 Jv
165170
increment!(nlp, :neval_jprod_lin)
166-
Jv[1] = v[1] - 2 * v[2]
171+
Jv .= [v[1] - 2 * v[2]]
167172
return Jv
168173
end
169174

@@ -180,8 +185,13 @@ function NLPModels.jtprod_nln!(
180185
return Jtv
181186
end
182187

183-
function NLPModels.jtprod_lin!(nlp::SimpleNLPModel, v::AbstractVector, Jtv::AbstractVector)
184-
@lencheck 2 Jtv
188+
function NLPModels.jtprod_lin!(
189+
nlp::SimpleNLPModel,
190+
x::AbstractVector,
191+
v::AbstractVector,
192+
Jtv::AbstractVector,
193+
)
194+
@lencheck 2 x Jtv
185195
@lencheck 1 v
186196
increment!(nlp, :neval_jtprod_lin)
187197
Jtv .= [v[1]; -2 * v[1]]

0 commit comments

Comments
 (0)