Skip to content

Commit 1f88ad1

Browse files
committed
Fix type instability
1 parent 3b3bf9b commit 1f88ad1

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

src/highlevel/coloring.jl

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,29 @@ end
3232

3333
# Approximate Jacobian Sparsity Detection
3434
## Right now we hardcode it to use `ForwardDiff`
35-
function (alg::ApproximateJacobianSparsity)(ad::AbstractSparseADType, f, x; kwargs...)
35+
function (alg::ApproximateJacobianSparsity)(ad::AbstractSparseADType, f, x; fx = nothing,
36+
kwargs...)
3637
@unpack ntrials, rng = alg
38+
fx = fx === nothing ? f(x) : fx
39+
J = fill!(similar(fx, length(fx), length(x)), 0)
3740
cfg = ForwardDiff.JacobianConfig(f, x)
38-
J = sum(1:ntrials) do _
39-
local x_ = similar(x)
40-
rand!(rng, x_)
41-
abs.(ForwardDiff.jacobian(f, x_, cfg))
41+
for _ in 1:ntrials
42+
x_ = similar(x)
43+
randn!(rng, x_)
44+
J .+= abs.(ForwardDiff.jacobian(f, x_, cfg))
4245
end
4346
return (JacPrototypeSparsityDetection(; jac_prototype = sparse(J), alg.alg))(ad, f, x;
44-
kwargs...)
47+
fx, kwargs...)
4548
end
4649

4750
function (alg::ApproximateJacobianSparsity)(ad::AbstractSparseADType, f!, fx, x; kwargs...)
4851
@unpack ntrials, rng = alg
4952
cfg = ForwardDiff.JacobianConfig(f!, fx, x)
50-
J = sum(1:ntrials) do _
51-
local x_ = similar(x)
52-
rand!(rng, x_)
53-
abs.(ForwardDiff.jacobian(f!, fx, x_, cfg))
53+
J = fill!(similar(fx, length(fx), length(x)), 0)
54+
for _ in 1:ntrials
55+
x_ = similar(x)
56+
randn!(rng, x_)
57+
J .+= abs.(ForwardDiff.jacobian(f!, fx, x_, cfg))
5458
end
5559
return (JacPrototypeSparsityDetection(; jac_prototype = sparse(J), alg.alg))(ad, f!, fx,
5660
x; kwargs...)

0 commit comments

Comments
 (0)