Skip to content

Commit 9358c02

Browse files
committed
Use NLPModels.@lencheck in cons and residual functions to validate input lengths (#188)
1 parent f880092 commit 9358c02

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

src/moi_nlp_model.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,16 @@ end
107107

108108
function NLPModels.cons_lin!(nlp::MathOptNLPModel, x::AbstractVector, c::AbstractVector)
109109
increment!(nlp, :neval_cons_lin)
110+
NLPModels.@lencheck nlp.meta.nvar x
111+
NLPModels.@lencheck nlp.meta.nlin c
110112
coo_prod!(nlp.lincon.jacobian.rows, nlp.lincon.jacobian.cols, nlp.lincon.jacobian.vals, x, c)
111113
return c
112114
end
113115

114116
function NLPModels.cons_nln!(nlp::MathOptNLPModel, x::AbstractVector, c::AbstractVector)
115117
increment!(nlp, :neval_cons_nln)
118+
NLPModels.@lencheck nlp.meta.nvar x
119+
NLPModels.@lencheck nlp.meta.nnln c
116120
if nlp.quadcon.nquad > 0
117121
for i = 1:(nlp.quadcon.nquad)
118122
qcon = nlp.quadcon.constraints[i]
@@ -127,6 +131,8 @@ end
127131

128132
function NLPModels.cons!(nlp::MathOptNLPModel, x::AbstractVector, c::AbstractVector)
129133
increment!(nlp, :neval_cons)
134+
NLPModels.@lencheck nlp.meta.nvar x
135+
NLPModels.@lencheck nlp.meta.ncon c
130136
if nlp.meta.nlin > 0
131137
coo_prod!(nlp.lincon.jacobian.rows, nlp.lincon.jacobian.cols, nlp.lincon.jacobian.vals, x, c)
132138
end

src/moi_nls_model.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ end
8686

8787
function NLPModels.residual!(nls::MathOptNLSModel, x::AbstractVector, Fx::AbstractVector)
8888
increment!(nls, :neval_residual)
89+
NLPModels.@lencheck nls.meta.nvar x
90+
NLPModels.@lencheck nls.nls_meta.nequ Fx
8991
if nls.nls_meta.nlin > 0
9092
coo_prod!(
9193
nls.linequ.jacobian.rows,
@@ -253,12 +255,16 @@ end
253255

254256
function NLPModels.cons_lin!(nls::MathOptNLSModel, x::AbstractVector, c::AbstractVector)
255257
increment!(nls, :neval_cons_lin)
258+
NLPModels.@lencheck nls.meta.nvar x
259+
NLPModels.@lencheck nls.nls_meta.nlin c
256260
coo_prod!(nls.lincon.jacobian.rows, nls.lincon.jacobian.cols, nls.lincon.jacobian.vals, x, c)
257261
return c
258262
end
259263

260264
function NLPModels.cons_nln!(nls::MathOptNLSModel, x::AbstractVector, c::AbstractVector)
261265
increment!(nls, :neval_cons_nln)
266+
NLPModels.@lencheck nls.meta.nvar x
267+
NLPModels.@lencheck nls.meta.nnln c
262268
if nls.quadcon.nquad > 0
263269
for i = 1:(nls.quadcon.nquad)
264270
qcon = nls.quadcon.constraints[i]
@@ -273,6 +279,8 @@ end
273279

274280
function NLPModels.cons!(nls::MathOptNLSModel, x::AbstractVector, c::AbstractVector)
275281
increment!(nls, :neval_cons)
282+
NLPModels.@lencheck nls.meta.nvar x
283+
NLPModels.@lencheck nls.meta.ncon c
276284
if nls.meta.nlin > 0
277285
coo_prod!(nls.lincon.jacobian.rows, nls.lincon.jacobian.cols, nls.lincon.jacobian.vals, x, c)
278286
end

test/lencheck.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using Test
2+
using NLPModelsJuMP
3+
4+
@testset "lencheck macro" begin
5+
x = [1,2,3]
6+
NLPModels.@lencheck 3 x
7+
y = [1,2]
8+
@test_throws ArgumentError NLPModels.@lencheck 3 y
9+
end

0 commit comments

Comments
 (0)