@@ -44,6 +44,7 @@ function MOI.initialize(d::NLPEvaluator, requested_features::Vector{Symbol})
4444 want_hess_storage = (:HessVec in requested_features) || d. want_hess
4545 coloring_storage = Coloring. IndexedSet (N)
4646 max_expr_length = 0
47+ max_expr_with_sub_length = 0
4748 #
4849 main_expressions = [c. expression. nodes for (_, c) in d. data. constraints]
4950 if d. data. objective != = nothing
@@ -71,6 +72,8 @@ function MOI.initialize(d::NLPEvaluator, requested_features::Vector{Symbol})
7172 )
7273 d. subexpressions[k] = subex
7374 d. subexpression_linearity[k] = subex. linearity
75+ max_expr_with_sub_length =
76+ max (max_expr_with_sub_length, length (subex. nodes))
7477 if d. want_hess
7578 empty! (coloring_storage)
7679 _compute_gradient_sparsity! (coloring_storage, subex. nodes)
@@ -138,27 +141,22 @@ function MOI.initialize(d::NLPEvaluator, requested_features::Vector{Symbol})
138141 end
139142 # 10 is hardcoded upper bound to avoid excess memory allocation
140143 max_chunk = min (max_chunk, 10 )
144+ max_expr_with_sub_length = max (max_expr_with_sub_length, max_expr_length)
141145 if d. want_hess || want_hess_storage
142146 d. input_ϵ = zeros (max_chunk * N)
143147 d. output_ϵ = zeros (max_chunk * N)
144148 #
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)
149151 #
150152 len = max_chunk * length (d. subexpressions)
151153 d. subexpression_forward_values_ϵ = zeros (len)
152154 d. subexpression_reverse_values_ϵ = zeros (len)
153155 #
154156 for k in d. subexpression_order
155157 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 )
158158 resize! (d. subexpressions[k]. partials_storage_ϵ, len)
159159 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 )
162160 end
163161 d. max_chunk = max_chunk
164162 if d. want_hess
@@ -350,7 +348,7 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
350348 subexpr_forward_values_ϵ[i] = _forward_eval_ϵ (
351349 d,
352350 subexpr,
353- reinterpret (T, subexpr . forward_storage_ϵ ),
351+ reinterpret (T, d . storage_ϵ ),
354352 reinterpret (T, subexpr. partials_storage_ϵ),
355353 input_ϵ,
356354 subexpr_forward_values_ϵ,
@@ -361,13 +359,13 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
361359 subexpr_reverse_values_ϵ = reinterpret (T, d. subexpression_reverse_values_ϵ)
362360 fill! (subexpr_reverse_values_ϵ, zero (T))
363361 fill! (d. subexpression_reverse_values, 0.0 )
364- fill! (d. reverse_storage_ϵ , 0.0 )
362+ fill! (d. storage_ϵ , 0.0 )
365363 fill! (output_ϵ, zero (T))
366364 if d. objective != = nothing
367365 _forward_eval_ϵ (
368366 d,
369367 something (d. objective),
370- reinterpret (T, d. forward_storage_ϵ ),
368+ reinterpret (T, d. storage_ϵ ),
371369 reinterpret (T, d. partials_storage_ϵ),
372370 input_ϵ,
373371 subexpr_forward_values_ϵ,
@@ -376,7 +374,7 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
376374 _reverse_eval_ϵ (
377375 output_ϵ,
378376 something (d. objective),
379- reinterpret (T, d. reverse_storage_ϵ ),
377+ reinterpret (T, d. storage_ϵ ),
380378 reinterpret (T, d. partials_storage_ϵ),
381379 d. subexpression_reverse_values,
382380 subexpr_reverse_values_ϵ,
@@ -388,7 +386,7 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
388386 _forward_eval_ϵ (
389387 d,
390388 con,
391- reinterpret (T, d. forward_storage_ϵ ),
389+ reinterpret (T, d. storage_ϵ ),
392390 reinterpret (T, d. partials_storage_ϵ),
393391 input_ϵ,
394392 subexpr_forward_values_ϵ,
@@ -397,7 +395,7 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
397395 _reverse_eval_ϵ (
398396 output_ϵ,
399397 con,
400- reinterpret (T, d. reverse_storage_ϵ ),
398+ reinterpret (T, d. storage_ϵ ),
401399 reinterpret (T, d. partials_storage_ϵ),
402400 d. subexpression_reverse_values,
403401 subexpr_reverse_values_ϵ,
@@ -411,7 +409,7 @@ function MOI.eval_hessian_lagrangian_product(d::NLPEvaluator, h, x, v, σ, μ)
411409 _reverse_eval_ϵ (
412410 output_ϵ,
413411 subexpr,
414- reinterpret (T, subexpr . reverse_storage_ϵ ),
412+ reinterpret (T, d . storage_ϵ ),
415413 reinterpret (T, subexpr. partials_storage_ϵ),
416414 d. subexpression_reverse_values,
417415 subexpr_reverse_values_ϵ,
0 commit comments