Skip to content

Commit ec83d4e

Browse files
Recognize sparse explicit second-order AD
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
1 parent 4d25fac commit ec83d4e

3 files changed

Lines changed: 25 additions & 0 deletions

File tree

lib/OptimizationBase/src/cache.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ function OptimizationCache(
7474

7575
if !(
7676
prob.f.adtype isa DifferentiationInterface.SecondOrder ||
77+
prob.f.adtype isa AutoSparse{<:DifferentiationInterface.SecondOrder} ||
7778
prob.f.adtype isa AutoZygote
7879
) &&
7980
(

lib/OptimizationBase/test/core_tests.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ using Test
55
include("matrixvalued.jl")
66
include("solver_missing_error_messages.jl")
77
include("lag_h_sigma_zero_test.jl")
8+
include("second_order_warning_test.jl")
89
include("solve_internals_test.jl")
910
end
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using DifferentiationInterface: SecondOrder
2+
using ForwardDiff
3+
4+
struct ExactHessianOptimizer end
5+
6+
SciMLBase.requireshessian(::ExactHessianOptimizer) = true
7+
8+
@testset "explicit sparse second-order AD" begin
9+
objective(x, p) = sum(abs2, x)
10+
sparse_second_order = AutoSparse(
11+
SecondOrder(AutoForwardDiff(), AutoForwardDiff())
12+
)
13+
explicit_f = OptimizationFunction(objective, sparse_second_order)
14+
explicit_prob = OptimizationProblem(explicit_f, [1.0, 1.0])
15+
16+
@test_nowarn OptimizationCache(explicit_prob, ExactHessianOptimizer())
17+
18+
implicit_f = OptimizationFunction(objective, AutoSparse(AutoForwardDiff()))
19+
implicit_prob = OptimizationProblem(implicit_f, [1.0, 1.0])
20+
@test_logs (:warn, r"missing_second_order_ad") match_mode = :any OptimizationCache(
21+
implicit_prob, ExactHessianOptimizer()
22+
)
23+
end

0 commit comments

Comments
 (0)