Closed
Description
I don't know since when this has been broken:
julia> using TestEnv; TestEnv.activate()
"/tmp/jl_cThCwu/Project.toml"
julia> using KernelFunctions, Zygote
julia> build_kernel(θ) = PeriodicKernel(; r = [θ.r])
build_kernel (generic function with 1 method)
julia> θ = (r = 1., )
(r = 1.0,)
julia> testfun(θ) = sum(kernelmatrix(build_kernel(θ), rand(10)))
testfun (generic function with 1 method)
julia> Zygote.gradient(testfun, θ)
ERROR: Mutating arrays is not supported -- called setindex!(Matrix{Float64}, ...)
This error occurs when you ask Zygote to differentiate operations that change
the elements of arrays in place (e.g. setting values with x .= ...)
Possible fixes:
- avoid mutating operations (preferred)
- or read the documentation and solutions for this error
https://fluxml.ai/Zygote.jl/latest/limitations
Stacktrace:
[1] error(s::String)
@ Base ./error.jl:35
[2] _throw_mutation_error(f::Function, args::Matrix{Float64})
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/lib/array.jl:88
[3] (::Zygote.var"#555#556"{Matrix{Float64}})(#unused#::Nothing)
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/lib/array.jl:100
[4] (::Zygote.var"#2659#back#557"{Zygote.var"#555#556"{Matrix{Float64}}})(Δ::Nothing)
@ Zygote ~/.julia/packages/ZygoteRules/OgCVT/src/adjoint.jl:71
[5] Pullback
@ ~/.julia/packages/Distances/yhVAl/src/generic.jl:219 [inlined]
[6] (::Zygote.Pullback{Tuple{typeof(Distances._pairwise!), KernelFunctions.Sinus{Float64}, Matrix{Float64}, Matrix{Float64}}, Any})(Δ::Matrix{Float64})
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/compiler/interface2.jl:0
[7] Pullback
@ ~/.julia/packages/Distances/yhVAl/src/generic.jl:287 [inlined]
[8] (::Zygote.Pullback{Tuple{Distances.var"##pairwise!#2", Int64, typeof(StatsAPI.pairwise!), KernelFunctions.Sinus{Float64}, Matrix{Float64}, Matrix{Float64}}, Any})(Δ::Matrix{Float64})
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/compiler/interface2.jl:0
[9] Pullback
@ ~/.julia/packages/Distances/yhVAl/src/generic.jl:275 [inlined]
[10] (::Zygote.Pullback{Tuple{typeof(Core.kwcall), NamedTuple{(:dims,), Tuple{Int64}}, typeof(StatsAPI.pairwise!), KernelFunctions.Sinus{Float64}, Matrix{Float64}, Matrix{Float64}}, Any})(Δ::Matrix{Float64})
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/compiler/interface2.jl:0
[11] Pullback
@ ~/.julia/packages/Distances/yhVAl/src/generic.jl:330 [inlined]
[12] (::Zygote.Pullback{Tuple{Distances.var"##pairwise#4", Int64, typeof(StatsAPI.pairwise), KernelFunctions.Sinus{Float64}, Matrix{Float64}}, Any})(Δ::Matrix{Float64})
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/compiler/interface2.jl:0
[13] Pullback
@ ~/.julia/packages/Distances/yhVAl/src/generic.jl:324 [inlined]
[14] (::Zygote.Pullback{Tuple{typeof(Core.kwcall), NamedTuple{(:dims,), Tuple{Int64}}, typeof(StatsAPI.pairwise), KernelFunctions.Sinus{Float64}, Matrix{Float64}}, Any})(Δ::Matrix{Float64})
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/compiler/interface2.jl:0
[15] Pullback
@ ~/.julia/dev/KernelFunctions.jl/src/distances/pairwise.jl:16 [inlined]
[16] (::Zygote.Pullback{Tuple{typeof(KernelFunctions.pairwise), KernelFunctions.Sinus{Float64}, Vector{Float64}}, Tuple{Zygote.Pullback{Tuple{Type{NamedTuple{(:dims,)}}, Tuple{Int64}}, Tuple{Zygote.Pullback{Tuple{Type{NamedTuple{(:dims,), Tuple{Int64}}}, Tuple{Int64}}, Tuple{Zygote.var"#2224#back#315"{Zygote.Jnew{NamedTuple{(:dims,), Tuple{Int64}}, Nothing, true}}}}}}, Zygote.Pullback{Tuple{typeof(Core.kwcall), NamedTuple{(:dims,), Tuple{Int64}}, typeof(StatsAPI.pairwise), KernelFunctions.Sinus{Float64}, Matrix{Float64}}, Any}, Zygote.var"#2017#back#204"{typeof(identity)}, Zygote.var"#2799#back#625"{Zygote.var"#619#623"{Vector{Float64}, Tuple{Colon, Int64}}}}})(Δ::Matrix{Float64})
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/compiler/interface2.jl:0
[17] Pullback
@ ~/.julia/dev/KernelFunctions.jl/src/matrix/kernelmatrix.jl:150 [inlined]
[18] (::Zygote.Pullback{Tuple{typeof(kernelmatrix), PeriodicKernel{Float64}, Vector{Float64}}, Tuple{Zygote.var"#2881#back#688"{Zygote.var"#map_back#682"{KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, 1, Tuple{Matrix{Float64}}, Tuple{Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}}, Matrix{Tuple{Float64, Zygote.Pullback{Tuple{KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, Float64}, Tuple{Zygote.var"#2184#back#303"{Zygote.var"#back#302"{:κ, Zygote.Context{false}, KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, PeriodicKernel{Float64}}}, Zygote.Pullback{Tuple{typeof(KernelFunctions.kappa), PeriodicKernel{Float64}, Float64}, Tuple{Zygote.ZBack{ChainRules.var"#exp_pullback#1324"{Float64, ChainRulesCore.ProjectTo{Float64, NamedTuple{(), Tuple{}}}}}, Zygote.ZBack{ChainRules.var"#times_pullback2#1350"{Float64, Float64}}}}}}}}}}, Zygote.var"#2214#back#313"{Zygote.Jnew{KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(KernelFunctions.metric), PeriodicKernel{Float64}}, Tuple{Zygote.var"#2184#back#303"{Zygote.var"#back#302"{:r, Zygote.Context{false}, PeriodicKernel{Float64}, Vector{Float64}}}, Zygote.Pullback{Tuple{Type{KernelFunctions.Sinus}, Vector{Float64}}, Tuple{Zygote.Pullback{Tuple{Type{KernelFunctions.Sinus{Float64}}, Vector{Float64}}, Tuple{Zygote.ZBack{ChainRules.var"#fieldtype_pullback#421"}, Zygote.var"#2214#back#313"{Zygote.Jnew{KernelFunctions.Sinus{Float64}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(convert), Type{Vector{Float64}}, Vector{Float64}}, Any}}}}}}}, Zygote.Pullback{Tuple{typeof(KernelFunctions.pairwise), KernelFunctions.Sinus{Float64}, Vector{Float64}}, Tuple{Zygote.Pullback{Tuple{Type{NamedTuple{(:dims,)}}, Tuple{Int64}}, Tuple{Zygote.Pullback{Tuple{Type{NamedTuple{(:dims,), Tuple{Int64}}}, Tuple{Int64}}, Tuple{Zygote.var"#2224#back#315"{Zygote.Jnew{NamedTuple{(:dims,), Tuple{Int64}}, Nothing, true}}}}}}, Zygote.Pullback{Tuple{typeof(Core.kwcall), NamedTuple{(:dims,), Tuple{Int64}}, typeof(StatsAPI.pairwise), KernelFunctions.Sinus{Float64}, Matrix{Float64}}, Any}, Zygote.var"#2017#back#204"{typeof(identity)}, Zygote.var"#2799#back#625"{Zygote.var"#619#623"{Vector{Float64}, Tuple{Colon, Int64}}}}}}})(Δ::FillArrays.Fill{Float64, 2, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}})
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/compiler/interface2.jl:0
[19] Pullback
@ ./REPL[5]:1 [inlined]
[20] (::Zygote.Pullback{Tuple{typeof(testfun), NamedTuple{(:r,), Tuple{Float64}}}, Tuple{Zygote.var"#3027#back#782"{Zygote.var"#776#780"{Matrix{Float64}}}, Zygote.Pullback{Tuple{typeof(build_kernel), NamedTuple{(:r,), Tuple{Float64}}}, Tuple{Zygote.ZBack{ChainRules.var"#vect_pullback#1373"{1, Tuple{ChainRulesCore.ProjectTo{Float64, NamedTuple{(), Tuple{}}}}}}, Zygote.Pullback{Tuple{typeof(Core.kwcall), NamedTuple{(:r,), Tuple{Vector{Float64}}}, Type{PeriodicKernel}}, Any}, Zygote.var"#2017#back#204"{typeof(identity)}, Zygote.Pullback{Tuple{Type{NamedTuple{(:r,)}}, Tuple{Vector{Float64}}}, Tuple{Zygote.Pullback{Tuple{Type{NamedTuple{(:r,), Tuple{Vector{Float64}}}}, Tuple{Vector{Float64}}}, Tuple{Zygote.var"#2224#back#315"{Zygote.Jnew{NamedTuple{(:r,), Tuple{Vector{Float64}}}, Nothing, true}}}}}}, Zygote.var"#2184#back#303"{Zygote.var"#back#302"{:r, Zygote.Context{false}, NamedTuple{(:r,), Tuple{Float64}}, Float64}}}}, Zygote.Pullback{Tuple{typeof(kernelmatrix), PeriodicKernel{Float64}, Vector{Float64}}, Tuple{Zygote.var"#2881#back#688"{Zygote.var"#map_back#682"{KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, 1, Tuple{Matrix{Float64}}, Tuple{Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}}, Matrix{Tuple{Float64, Zygote.Pullback{Tuple{KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, Float64}, Tuple{Zygote.var"#2184#back#303"{Zygote.var"#back#302"{:κ, Zygote.Context{false}, KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, PeriodicKernel{Float64}}}, Zygote.Pullback{Tuple{typeof(KernelFunctions.kappa), PeriodicKernel{Float64}, Float64}, Tuple{Zygote.ZBack{ChainRules.var"#exp_pullback#1324"{Float64, ChainRulesCore.ProjectTo{Float64, NamedTuple{(), Tuple{}}}}}, Zygote.ZBack{ChainRules.var"#times_pullback2#1350"{Float64, Float64}}}}}}}}}}, Zygote.var"#2214#back#313"{Zygote.Jnew{KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(KernelFunctions.metric), PeriodicKernel{Float64}}, Tuple{Zygote.var"#2184#back#303"{Zygote.var"#back#302"{:r, Zygote.Context{false}, PeriodicKernel{Float64}, Vector{Float64}}}, Zygote.Pullback{Tuple{Type{KernelFunctions.Sinus}, Vector{Float64}}, Tuple{Zygote.Pullback{Tuple{Type{KernelFunctions.Sinus{Float64}}, Vector{Float64}}, Tuple{Zygote.ZBack{ChainRules.var"#fieldtype_pullback#421"}, Zygote.var"#2214#back#313"{Zygote.Jnew{KernelFunctions.Sinus{Float64}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(convert), Type{Vector{Float64}}, Vector{Float64}}, Any}}}}}}}, Zygote.Pullback{Tuple{typeof(KernelFunctions.pairwise), KernelFunctions.Sinus{Float64}, Vector{Float64}}, Tuple{Zygote.Pullback{Tuple{Type{NamedTuple{(:dims,)}}, Tuple{Int64}}, Tuple{Zygote.Pullback{Tuple{Type{NamedTuple{(:dims,), Tuple{Int64}}}, Tuple{Int64}}, Tuple{Zygote.var"#2224#back#315"{Zygote.Jnew{NamedTuple{(:dims,), Tuple{Int64}}, Nothing, true}}}}}}, Zygote.Pullback{Tuple{typeof(Core.kwcall), NamedTuple{(:dims,), Tuple{Int64}}, typeof(StatsAPI.pairwise), KernelFunctions.Sinus{Float64}, Matrix{Float64}}, Any}, Zygote.var"#2017#back#204"{typeof(identity)}, Zygote.var"#2799#back#625"{Zygote.var"#619#623"{Vector{Float64}, Tuple{Colon, Int64}}}}}}}, Zygote.ZBack{ChainRules.var"#rand_pullback#2182"{Tuple{Int64}}}}})(Δ::Float64)
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/compiler/interface2.jl:0
[21] (::Zygote.var"#75#76"{Zygote.Pullback{Tuple{typeof(testfun), NamedTuple{(:r,), Tuple{Float64}}}, Tuple{Zygote.var"#3027#back#782"{Zygote.var"#776#780"{Matrix{Float64}}}, Zygote.Pullback{Tuple{typeof(build_kernel), NamedTuple{(:r,), Tuple{Float64}}}, Tuple{Zygote.ZBack{ChainRules.var"#vect_pullback#1373"{1, Tuple{ChainRulesCore.ProjectTo{Float64, NamedTuple{(), Tuple{}}}}}}, Zygote.Pullback{Tuple{typeof(Core.kwcall), NamedTuple{(:r,), Tuple{Vector{Float64}}}, Type{PeriodicKernel}}, Any}, Zygote.var"#2017#back#204"{typeof(identity)}, Zygote.Pullback{Tuple{Type{NamedTuple{(:r,)}}, Tuple{Vector{Float64}}}, Tuple{Zygote.Pullback{Tuple{Type{NamedTuple{(:r,), Tuple{Vector{Float64}}}}, Tuple{Vector{Float64}}}, Tuple{Zygote.var"#2224#back#315"{Zygote.Jnew{NamedTuple{(:r,), Tuple{Vector{Float64}}}, Nothing, true}}}}}}, Zygote.var"#2184#back#303"{Zygote.var"#back#302"{:r, Zygote.Context{false}, NamedTuple{(:r,), Tuple{Float64}}, Float64}}}}, Zygote.Pullback{Tuple{typeof(kernelmatrix), PeriodicKernel{Float64}, Vector{Float64}}, Tuple{Zygote.var"#2881#back#688"{Zygote.var"#map_back#682"{KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, 1, Tuple{Matrix{Float64}}, Tuple{Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}}, Matrix{Tuple{Float64, Zygote.Pullback{Tuple{KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, Float64}, Tuple{Zygote.var"#2184#back#303"{Zygote.var"#back#302"{:κ, Zygote.Context{false}, KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, PeriodicKernel{Float64}}}, Zygote.Pullback{Tuple{typeof(KernelFunctions.kappa), PeriodicKernel{Float64}, Float64}, Tuple{Zygote.ZBack{ChainRules.var"#exp_pullback#1324"{Float64, ChainRulesCore.ProjectTo{Float64, NamedTuple{(), Tuple{}}}}}, Zygote.ZBack{ChainRules.var"#times_pullback2#1350"{Float64, Float64}}}}}}}}}}, Zygote.var"#2214#back#313"{Zygote.Jnew{KernelFunctions.var"#68#69"{PeriodicKernel{Float64}}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(KernelFunctions.metric), PeriodicKernel{Float64}}, Tuple{Zygote.var"#2184#back#303"{Zygote.var"#back#302"{:r, Zygote.Context{false}, PeriodicKernel{Float64}, Vector{Float64}}}, Zygote.Pullback{Tuple{Type{KernelFunctions.Sinus}, Vector{Float64}}, Tuple{Zygote.Pullback{Tuple{Type{KernelFunctions.Sinus{Float64}}, Vector{Float64}}, Tuple{Zygote.ZBack{ChainRules.var"#fieldtype_pullback#421"}, Zygote.var"#2214#back#313"{Zygote.Jnew{KernelFunctions.Sinus{Float64}, Nothing, false}}, Zygote.Pullback{Tuple{typeof(convert), Type{Vector{Float64}}, Vector{Float64}}, Any}}}}}}}, Zygote.Pullback{Tuple{typeof(KernelFunctions.pairwise), KernelFunctions.Sinus{Float64}, Vector{Float64}}, Tuple{Zygote.Pullback{Tuple{Type{NamedTuple{(:dims,)}}, Tuple{Int64}}, Tuple{Zygote.Pullback{Tuple{Type{NamedTuple{(:dims,), Tuple{Int64}}}, Tuple{Int64}}, Tuple{Zygote.var"#2224#back#315"{Zygote.Jnew{NamedTuple{(:dims,), Tuple{Int64}}, Nothing, true}}}}}}, Zygote.Pullback{Tuple{typeof(Core.kwcall), NamedTuple{(:dims,), Tuple{Int64}}, typeof(StatsAPI.pairwise), KernelFunctions.Sinus{Float64}, Matrix{Float64}}, Any}, Zygote.var"#2017#back#204"{typeof(identity)}, Zygote.var"#2799#back#625"{Zygote.var"#619#623"{Vector{Float64}, Tuple{Colon, Int64}}}}}}}, Zygote.ZBack{ChainRules.var"#rand_pullback#2182"{Tuple{Int64}}}}}})(Δ::Float64)
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/compiler/interface.jl:45
[22] gradient(f::Function, args::NamedTuple{(:r,), Tuple{Float64}})
@ Zygote ~/.julia/packages/Zygote/XJ8pP/src/compiler/interface.jl:97
[23] top-level scope
@ REPL[6]:1
Metadata
Metadata
Assignees
Labels
No labels