adrhill / SparseConnectivityTracer.jl

Fast operator-overloading Jacobian & Hessian sparsity detection.
MIT License
26 stars 2 forks source link

Hessian tests fail with DI #26

Closed gdalle closed 4 months ago

gdalle commented 4 months ago

This should work:

using DifferentiationInterface, DifferentiationInterfaceTest
import ForwardDiff, SparseConnectivityTracer

coloring_algorithm = DifferentiationInterface.GreedyColoringAlgorithm()
sparsity_detector = SparseConnectivityTracer.TracerSparsityDetector()

backend = AutoSparse(AutoForwardDiff(); sparsity_detector, coloring_algorithm)

test_differentiation(backend, sparse_scenarios(); sparsity=true, logging=true)

It works when you use Symbolics instead:

import Symbolics
sparsity_detector = DifferentiationInterface.SymbolicsSparsityDetector()
gdalle commented 4 months ago

MWE:

import ADTypes, SparseConnectivityTracer, Symbolics

sd1 = SparseConnectivityTracer.TracerSparsityDetector()
sd2 = DifferentiationInterface.SymbolicsSparsityDetector()

sumdiffcube(x) = sum(diff(x) .^ 3)
ADTypes.hessian_sparsity(sumdiffcube, rand(10), sd1)  # wrong, single diagonal
ADTypes.hessian_sparsity(sumdiffcube, rand(10), sd2)  # right, tridiagonal