Skip to content

Instantly share code, notes, and snippets.

@j-fu
Created June 23, 2021 13:50
Show Gist options
  • Save j-fu/022cd00e1525269c9b6dbf256833c5c3 to your computer and use it in GitHub Desktop.
Save j-fu/022cd00e1525269c9b6dbf256833c5c3 to your computer and use it in GitHub Desktop.
ERROR: LoadError: type DataType has no field mutable
Stacktrace:
[1] getproperty
@ ./Base.jl:37 [inlined]
[2] _metametaexpr(#unused#::Type{Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}}, #unused#::Type{Tuple{typeof(*), Float64}}, metaexprs::Vector{Any})
@ Cassette ~/.julia/packages/Cassette/FwMN0/src/tagging.jl:272
[3] #s10#22
@ ~/.julia/packages/Cassette/FwMN0/src/tagging.jl:488 [inlined]
[4] var"#s10#22"(C::Any, T::Any, ::Any, context::Any, #unused#::Any, args::Any)
@ Cassette ./none:0
[5] (::Core.GeneratedFunctionStub)(::Any, ::Vararg{Any})
@ Core ./boot.jl:580
[6] macro expansion
@ ~/.julia/packages/Cassette/FwMN0/src/tagging.jl:525 [inlined]
[7] tagged_new_tuple(::Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}, ::typeof(*), ::Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Float64, SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta, Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}})
@ Cassette ~/.julia/packages/Cassette/FwMN0/src/tagging.jl:522
[8] overdub(::Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}, ::typeof(tuple), ::Function, ::Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Float64, SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta, Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}})
@ SparsityDetection ~/.julia/packages/Cassette/FwMN0/src/context.jl:287
[9] *(::Float64, ::Float64, ::Float64)
@ ./operators.jl:655 [inlined]
[10] recurse
@ ./operators.jl:655 [inlined]
[11] recurse(::Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}, ::typeof(*), ::Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Float64, SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta, Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}}, ::Float64, ::Float64)
@ Cassette ~/.julia/packages/Cassette/FwMN0/src/overdub.jl:0
[12] overdub(::Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}, ::Function, ::Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Float64, SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta, Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}}, ::Float64, ::Float64)
@ SparsityDetection ~/.julia/packages/SparsityDetection/E7o7R/src/propagate_tags.jl:45
[13] recurse
@ ~/Wias/work/julia/test/forwarddiff/mwe.jl:7 [inlined]
[14] recurse(::Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}, ::typeof(ffd), ::Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Vector{Float64}, Union{SparsityDetection.JacInput, SparsityDetection.JacOutput, SparsityDetection.ProvinanceSet}, Vector{Cassette.Meta{SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta}}, Cassette.Context{nametype(JacobianSparsityContext), Sparsity, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Cassette.var"##PassType#274", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}}, ::Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Vector{Float64}, Union{SparsityDetection.JacInput, SparsityDetection.JacOutput, SparsityDetection.ProvinanceSet}, Vector{Cassette.Meta{SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta}}, Cassette.Context{nametype(JacobianSparsityContext), Sparsity, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Cassette.var"##PassType#274", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}})
@ Cassette ~/.julia/packages/Cassette/FwMN0/src/overdub.jl:0
[15] overdub(::Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}, ::Function, ::Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Vector{Float64}, Union{SparsityDetection.JacInput, SparsityDetection.JacOutput, SparsityDetection.ProvinanceSet}, Vector{Cassette.Meta{SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta}}, Cassette.Context{nametype(JacobianSparsityContext), Sparsity, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Cassette.var"##PassType#274", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}}, ::Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Vector{Float64}, Union{SparsityDetection.JacInput, SparsityDetection.JacOutput, SparsityDetection.ProvinanceSet}, Vector{Cassette.Meta{SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta}}, Cassette.Context{nametype(JacobianSparsityContext), Sparsity, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Cassette.var"##PassType#274", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}})
@ SparsityDetection ~/.julia/packages/SparsityDetection/E7o7R/src/propagate_tags.jl:45
[16] overdub
@ ~/.julia/packages/Cassette/FwMN0/src/context.jl:266 [inlined]
[17] (::SparsityDetection.var"
@ ~/.julia/packages/SparsityDetection/E7o7R/src/controlflow.jl:148 [inlined]
[18] recurse
@ ~/.julia/packages/SparsityDetection/E7o7R/src/controlflow.jl:148 [inlined]
[19] recurse(overdub_context#272::Cassette.Context{nametype(JacobianSparsityContext), Tuple{Sparsity, SparsityDetection.Path}, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, SparsityDetection.var"##PassType#272", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}, overdub_arguments#273::SparsityDetection.var"#2#3"{typeof(ffd), Tuple{Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Vector{Float64}, Union{SparsityDetection.JacInput, SparsityDetection.JacOutput, SparsityDetection.ProvinanceSet}, Vector{Cassette.Meta{SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta}}, Cassette.Context{nametype(JacobianSparsityContext), Sparsity, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Cassette.var"##PassType#274", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}}, Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Vector{Float64}, Union{SparsityDetection.JacInput, SparsityDetection.JacOutput, SparsityDetection.ProvinanceSet}, Vector{Cassette.Meta{SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta}}, Cassette.Context{nametype(JacobianSparsityContext), Sparsity, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Cassette.var"##PassType#274", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}}}})
@ Cassette ~/.julia/packages/Cassette/FwMN0/src/overdub.jl:0
[20] abstract_run(::SparsityDetection.var"#22#24", ::Cassette.Context{nametype(JacobianSparsityContext), Sparsity, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Cassette.var"##PassType#274", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}, ::Function, ::Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Vector{Float64}, Union{SparsityDetection.JacInput, SparsityDetection.JacOutput, SparsityDetection.ProvinanceSet}, Vector{Cassette.Meta{SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta}}, Cassette.Context{nametype(JacobianSparsityContext), Sparsity, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Cassette.var"##PassType#274", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}}, ::Vararg{Cassette.Tagged{Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Vector{Float64}, Union{SparsityDetection.JacInput, SparsityDetection.JacOutput, SparsityDetection.ProvinanceSet}, Vector{Cassette.Meta{SparsityDetection.ProvinanceSet, Cassette.NoMetaMeta}}, Cassette.Context{nametype(JacobianSparsityContext), Sparsity, Cassette.Tag{nametype(JacobianSparsityContext), 0x000000006afb7332, Nothing}, Cassette.var"##PassType#274", IdDict{Module, Dict{Symbol, Cassette.BindingMeta}}, Cassette.DisableHooks}}}; verbose::Bool)
@ SparsityDetection ~/.julia/packages/SparsityDetection/E7o7R/src/controlflow.jl:148
[21] jacobian_sparsity(::Function, ::Vector{Float64}, ::Vector{Float64}; sparsity::Sparsity, verbose::Bool, raw::Bool)
@ SparsityDetection ~/.julia/packages/SparsityDetection/E7o7R/src/jacobian.jl:135
[22] jacobian_sparsity
@ ~/.julia/packages/SparsityDetection/E7o7R/src/jacobian.jl:130 [inlined]
[23] macro expansion
@ ~/Wias/work/julia/test/forwarddiff/mwe.jl:27 [inlined]
[24] macro expansion
@ ./timing.jl:287 [inlined]
[25] runtest(n::Int64)
@ Main ~/Wias/work/julia/test/forwarddiff/mwe.jl:26
[26] top-level scope
@ ~/Wias/work/julia/test/forwarddiff/mwe.jl:34
in expression starting at /home/fuhrmann/Wias/work/julia/test/forwarddiff/mwe.jl:34
using SparseDiffTools, SparsityDetection
using SparseArrays
function ffd(y,x)
n=length(x)
h=1/(n-1)
y[1]=(x[1]^2-1)*0.5*h
for i=2:n-1
y[i]=(x[i]^2-1.0)*h
end
y[end]=(x[end]^2-1)*0.5*h
for i=1:n-1
dx=(x[i+1]^2-x[i]^2)/h
y[i+1]+=dx
y[i]-=dx
end
end
function runtest(n)
jac = spzeros(n, n);
X=ones(n)
input = rand(n)
output = similar(input)
t_col=@elapsed begin
sparsity_pattern = jacobian_sparsity(ffd,output,input)
jac = Float64.(sparse(sparsity_pattern))
colors = matrix_colors(jac)
forwarddiff_color_jacobian!(jac, ffd, X, colorvec = colors)
end
end
runtest(10)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment