@@ -44,6 +44,7 @@ function MOI.initialize(d::NLPEvaluator, requested_features::Vector{Symbol})
44
44
want_hess_storage = (:HessVec in requested_features) || d. want_hess
45
45
coloring_storage = Coloring. IndexedSet (N)
46
46
max_expr_length = 0
47
+ max_expr_with_sub_length = 0
47
48
#
48
49
main_expressions = [c. expression. nodes for (_, c) in d. data. constraints]
49
50
if d. data. objective != = nothing
@@ -71,6 +72,8 @@ function MOI.initialize(d::NLPEvaluator, requested_features::Vector{Symbol})
71
72
)
72
73
d. subexpressions[k] = subex
73
74
d. subexpression_linearity[k] = subex. linearity
75
+ max_expr_with_sub_length =
76
+ max (max_expr_with_sub_length, length (subex. nodes))
74
77
if d. want_hess
75
78
empty! (coloring_storage)
76
79
_compute_gradient_sparsity! (coloring_storage, subex. nodes)
@@ -138,27 +141,22 @@ function MOI.initialize(d::NLPEvaluator, requested_features::Vector{Symbol})
138
141
end
139
142
# 10 is hardcoded upper bound to avoid excess memory allocation
140
143
max_chunk = min (max_chunk, 10 )
144
+ max_expr_with_sub_length = max (max_expr_with_sub_length, max_expr_length)
141
145
if d. want_hess || want_hess_storage
142
146
d. input_ϵ = zeros (max_chunk * N)
143
147
d. output_ϵ = zeros (max_chunk * N)
144
148
#
145
- len = max_chunk * max_expr_length
146
- d. forward_storage_ϵ = zeros (len)
147
- d. partials_storage_ϵ = zeros (len)
148
- d. reverse_storage_ϵ = zeros (len)
149
+ d. partials_storage_ϵ = zeros (max_chunk * max_expr_length)
150
+ d. storage_ϵ = zeros (max_chunk * max_expr_with_sub_length)
149
151
#
150
152
len = max_chunk * length (d. subexpressions)
151
153
d. subexpression_forward_values_ϵ = zeros (len)
152
154
d. subexpression_reverse_values_ϵ = zeros (len)
153
155
#
154
156
for k in d. subexpression_order
155
157
len = max_chunk * length (d. subexpressions[k]. nodes)
156
- resize! (d. subexpressions[k]. forward_storage_ϵ, len)
157
- fill! (d. subexpressions[k]. forward_storage_ϵ, 0.0 )
158
158
resize! (d. subexpressions[k]. partials_storage_ϵ, len)
159
159
fill! (d. subexpressions[k]. partials_storage_ϵ, 0.0 )
160
- resize! (d. subexpressions[k]. reverse_storage_ϵ, len)
161
- fill! (d. subexpressions[k]. reverse_storage_ϵ, 0.0 )
162
160
end
163
161
d. max_chunk = max_chunk
164
162
if d. want_hess
@@ -350,7 +348,7 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
350
348
subexpr_forward_values_ϵ[i] = _forward_eval_ϵ (
351
349
d,
352
350
subexpr,
353
- reinterpret (T, subexpr . forward_storage_ϵ ),
351
+ reinterpret (T, d . storage_ϵ ),
354
352
reinterpret (T, subexpr. partials_storage_ϵ),
355
353
input_ϵ,
356
354
subexpr_forward_values_ϵ,
@@ -361,13 +359,13 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
361
359
subexpr_reverse_values_ϵ = reinterpret (T, d. subexpression_reverse_values_ϵ)
362
360
fill! (subexpr_reverse_values_ϵ, zero (T))
363
361
fill! (d. subexpression_reverse_values, 0.0 )
364
- fill! (d. reverse_storage_ϵ , 0.0 )
362
+ fill! (d. storage_ϵ , 0.0 )
365
363
fill! (output_ϵ, zero (T))
366
364
if d. objective != = nothing
367
365
_forward_eval_ϵ (
368
366
d,
369
367
something (d. objective),
370
- reinterpret (T, d. forward_storage_ϵ ),
368
+ reinterpret (T, d. storage_ϵ ),
371
369
reinterpret (T, d. partials_storage_ϵ),
372
370
input_ϵ,
373
371
subexpr_forward_values_ϵ,
@@ -376,7 +374,7 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
376
374
_reverse_eval_ϵ (
377
375
output_ϵ,
378
376
something (d. objective),
379
- reinterpret (T, d. reverse_storage_ϵ ),
377
+ reinterpret (T, d. storage_ϵ ),
380
378
reinterpret (T, d. partials_storage_ϵ),
381
379
d. subexpression_reverse_values,
382
380
subexpr_reverse_values_ϵ,
@@ -388,7 +386,7 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
388
386
_forward_eval_ϵ (
389
387
d,
390
388
con,
391
- reinterpret (T, d. forward_storage_ϵ ),
389
+ reinterpret (T, d. storage_ϵ ),
392
390
reinterpret (T, d. partials_storage_ϵ),
393
391
input_ϵ,
394
392
subexpr_forward_values_ϵ,
@@ -397,7 +395,7 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
397
395
_reverse_eval_ϵ (
398
396
output_ϵ,
399
397
con,
400
- reinterpret (T, d. reverse_storage_ϵ ),
398
+ reinterpret (T, d. storage_ϵ ),
401
399
reinterpret (T, d. partials_storage_ϵ),
402
400
d. subexpression_reverse_values,
403
401
subexpr_reverse_values_ϵ,
@@ -411,7 +409,7 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
411
409
_reverse_eval_ϵ (
412
410
output_ϵ,
413
411
subexpr,
414
- reinterpret (T, subexpr . reverse_storage_ϵ ),
412
+ reinterpret (T, d . storage_ϵ ),
415
413
reinterpret (T, subexpr. partials_storage_ϵ),
416
414
d. subexpression_reverse_values,
417
415
subexpr_reverse_values_ϵ,
0 commit comments