Closed kylebd99 closed 10 months ago
As a follow up, I've got another error that I'm unsure about.
a_matrix = [1 0; 0 1]
a_fiber = Fiber!(SparseList(SparseList(Element(0.0), 2), 2))
copyto!(a_fiber, a_matrix)
b_matrix = [0 1; 1 0]
b_fiber = Fiber!(SparseList(SparseList(Element(0.0), 2), 2))
copyto!(b_fiber, b_matrix)
output_tensor = Fiber!(SparseHash{1}(SparseHash{1}(Element(0.0), (2,)), (2,)))
@finch (output_tensor .=0; for j=_,i=_,k=_; output_tensor[i,k] += a_fiber[i,j] * b_fiber[k,j]; end)
This version of matrix multiplication causes the following error:
ERROR: don't know how to lower Finch.Furlable(Finch.var"#806#814"{Finch.FinchNotation.Reader, Vector{typeof(Finch.FinchNotation.defaultread)}, Symbol, Symbol, Symbol, Symbol, DataType, DataType, Finch.FinchNotation.FinchNode, Finch.VirtualSparseListLevel}(Finch.FinchNotation.Reader(), typeof(Finch.FinchNotation.defaultread)[], :b_fiber_lvl_2_i1, :b_fiber_lvl_2_q_stop, :b_fiber_lvl_2_q, :b_fiber_lvl_2_i, Int64, Int64, value(b_fiber_lvl_q, Int64), Finch.VirtualSparseListLevel(Finch.VirtualElementLevel(:b_fiber_lvl_3, 0.0, Float64, Int64, :b_fiber_lvl_2_val), :b_fiber_lvl_2, Int64, :b_fiber_lvl_ptr_2, :b_fiber_lvl_idx_2, value(b_fiber_lvl_2.shape, Int64), :b_fiber_lvl_2_qos_fill, :b_fiber_lvl_2_qos_stop, :b_fiber_lvl_2_prev_pos)))
Stacktrace:
[1] error(s::String)
@ Base ./error.jl:35
[2] lower
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:76 [inlined]
[3] AbstractCompiler
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:34 [inlined]
[4] AbstractCompiler
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:32 [inlined]
[5] lower_access(ctx::Finch.LowerJulia, node::Finch.FinchNotation.FinchNode, tns::Finch.Furlable)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:202
[6] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:149
[7] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[8] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[9] iterate
@ ./generator.jl:47 [inlined]
[10] _collect(c::SubArray{Finch.FinchNotation.FinchNode, 1, Vector{Finch.FinchNotation.FinchNode}, Tuple{UnitRange{Int64}}, true}, itr::Base.Generator{SubArray{Finch.FinchNotation.FinchNode, 1, Vector{Finch.FinchNotation.FinchNode}, Tuple{UnitRange{Int64}}, true}, Finch.LowerJulia}, #unused#::Base.EltypeUnknown, isz::Base.HasShape{1})
@ Base ./array.jl:802
[11] collect_similar
@ ./array.jl:711 [inlined]
[12] map
@ ./abstractarray.jl:3261 [inlined]
[13] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:164
--- the last 7 lines are repeated 1 more time ---
[21] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[22] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[23] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:188
[24] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[25] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[26] open_scope(prgm::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:39
[27] (::Finch.var"#637#639"{Finch.FinchNotation.FinchNode, Symbol})(ctx_2::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/lookups.jl:38
[28] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[29] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#637#639"{Finch.FinchNotation.FinchNode, Symbol}, Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[30] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[31] contain(f::Finch.var"#637#639"{Finch.FinchNotation.FinchNode, Symbol}, ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[32] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[33] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.LookupStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/lookups.jl:26
[34] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.LookupStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[35] lower_loop(ctx::Finch.LowerJulia, root::Finch.FinchNotation.FinchNode, ext::Finch.Extent)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:220
[36] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:171
[37] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[38] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[39] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.SimplifyStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/symbolic/simplify_program.jl:188
[40] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.SimplifyStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[41] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[42] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.RunStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/runs.jl:39
[43] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.RunStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[44] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[45] (::Finch.var"#652#656"{Finch.FinchNotation.FinchNode, Finch.FinchNotation.FinchNode, Finch.Extent})(ctx_2::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/spikes.jl:52
[46] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[47] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#652#656"{Finch.FinchNotation.FinchNode, Finch.FinchNotation.FinchNode, Finch.Extent}, Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[48] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[49] contain(f::Finch.var"#652#656"{Finch.FinchNotation.FinchNode, Finch.FinchNotation.FinchNode, Finch.Extent}, ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[50] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[51] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.SpikeStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/spikes.jl:51
[52] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.SpikeStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[53] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[54] (::Finch.var"#628#630")(ctx3::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:37
[55] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[56] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#628#630", Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[57] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[58] contain(f::Finch.var"#628#630", ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[59] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[60] (::Finch.var"#627#629")(ctx2::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:36
[61] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[62] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#627#629", Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[63] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[64] contain(f::Finch.var"#627#629", ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[65] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[66] lower
@ ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:34 [inlined]
[67] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.ThunkStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[68] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[69] (::Finch.var"#664#666")(ctx_2::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/switches.jl:64
[70] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[71] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#664#666", Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[72] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[73] contain(f::Finch.var"#664#666", ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[74] contain
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:13 [inlined]
[75] (::Finch.var"#nest#665"{Finch.LowerJulia})(cases::Array{Pair{Finch.FinchNotation.FinchNode, Finch.FinchNotation.FinchNode}, 24}, inner::Bool)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/switches.jl:63
[76] (::Finch.var"#nest#665"{Finch.LowerJulia})(cases::Array{Pair{Finch.FinchNotation.FinchNode, Finch.FinchNotation.FinchNode}, 24})
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/switches.jl:62
[77] lower(stmt::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.SwitchStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/switches.jl:70
[78] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.SwitchStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[79] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[80] (::Finch.var"#749#756"{Finch.Extent, Finch.FinchNotation.FinchNode})(ctx_3::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/steppers.jl:110
[81] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[82] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#749#756"{Finch.Extent, Finch.FinchNotation.FinchNode}, Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[83] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[84] contain(f::Finch.var"#749#756"{Finch.Extent, Finch.FinchNotation.FinchNode}, ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[85] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[86] (::Finch.var"#745#752"{Finch.FinchNotation.FinchNode, Symbol, Symbol})(ctx_2::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/steppers.jl:107
[87] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[88] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#745#752"{Finch.FinchNotation.FinchNode, Symbol, Symbol}, Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[89] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[90] contain(f::Finch.var"#745#752"{Finch.FinchNotation.FinchNode, Symbol, Symbol}, ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[91] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[92] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, style::Finch.StepperStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/steppers.jl:97
[93] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.StepperStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[94] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[95] (::Finch.var"#683#687"{Finch.FinchNotation.FinchNode, Finch.Extent})(ctx_4::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/phases.jl:74
[96] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[97] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#683#687"{Finch.FinchNotation.FinchNode, Finch.Extent}, Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[98] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[99] contain(f::Finch.var"#683#687"{Finch.FinchNotation.FinchNode, Finch.Extent}, ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[100] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[101] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, style::Finch.SequencePhaseStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/phases.jl:71
[102] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.SequencePhaseStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[103] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[104] (::Finch.var"#689#690"{Finch.FinchNotation.FinchNode, Finch.FinchNotation.FinchNode})(ctx_2::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/sequences.jl:41
[105] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[106] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#689#690"{Finch.FinchNotation.FinchNode, Finch.FinchNotation.FinchNode}, Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[107] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[108] contain(f::Finch.var"#689#690"{Finch.FinchNotation.FinchNode, Finch.FinchNotation.FinchNode}, ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[109] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[110] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.SequenceStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/sequences.jl:40
[111] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.SequenceStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[112] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[113] (::Finch.var"#628#630")(ctx3::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:37
[114] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[115] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#628#630", Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[116] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[117] contain(f::Finch.var"#628#630", ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[118] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[119] (::Finch.var"#627#629")(ctx2::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:36
[120] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[121] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#627#629", Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[122] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[123] contain(f::Finch.var"#627#629", ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[124] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[125] lower
@ ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:34 [inlined]
[126] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.ThunkStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[127] lower_loop(ctx::Finch.LowerJulia, root::Finch.FinchNotation.FinchNode, ext::Finch.Extent)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:220
[128] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:171
[129] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[130] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[131] #132
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:125 [inlined]
[132] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[133] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#132#138"{Finch.FinchNotation.FinchNode}, Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[134] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[135] contain(f::Finch.var"#132#138"{Finch.FinchNotation.FinchNode}, ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[136] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[137] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:124
[138] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[139] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[140] #133
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:132 [inlined]
[141] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[142] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#133#139"{Finch.FinchNotation.FinchNode}, Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[143] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[144] contain(f::Finch.var"#133#139"{Finch.FinchNotation.FinchNode}, ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[145] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[146] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:129
[147] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
[148] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
[149] (::Finch.var"#322#326")(ctx_3::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/execute.jl:105
[150] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[151] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#322#326", Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[152] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[153] contain(f::Finch.var"#322#326", ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[154] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[155] (::Finch.var"#321#325")(ctx_2::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/execute.jl:104
[156] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[157] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#321#325", Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[158] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[159] contain(f::Finch.var"#321#325", ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[160] contain(f::Function, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
[161] lower_global(prgm::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/execute.jl:94
[162] (::Finch.var"#319#320"{Symbol, DataType})(ctx_2::Finch.LowerJulia)
@ Finch ~/.julia/packages/Finch/KoId8/src/execute.jl:82
[163] #128
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
[164] contain(f::Finch.var"#128#129"{Dict{Any, Any}, Finch.var"#319#320"{Symbol, DataType}, Finch.LowerJulia}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[165] contain(f::Function, ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
[166] contain(f::Finch.var"#319#320"{Symbol, DataType}, ctx::Finch.LowerJulia; bindings::Dict{Any, Any}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:14
[167] contain
@ ~/.julia/packages/Finch/KoId8/src/lower.jl:13 [inlined]
[168] #execute_code#318
@ ~/.julia/packages/Finch/KoId8/src/execute.jl:79 [inlined]
[169] execute_code
@ ~/.julia/packages/Finch/KoId8/src/execute.jl:78 [inlined]
[170] (::Finch.var"#314#317"{DataType, DataType})(ctx::Finch.JuliaContext)
@ Finch ~/.julia/packages/Finch/KoId8/src/execute.jl:63
[171] contain(f::Finch.var"#314#317"{DataType, DataType}, ctx::Finch.JuliaContext, task::Nothing)
@ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
[172] contain
@ ~/.julia/packages/Finch/KoId8/src/environment.jl:50 [inlined]
[173] macro expansion
@ ~/.julia/packages/Finch/KoId8/src/execute.jl:62 [inlined]
[174] (::Finch.var"#313#316"{DataType, DataType})()
@ Finch ~/.julia/packages/Finch/KoId8/src/util.jl:71
[175] #s349#312
@ ~/.julia/packages/Finch/KoId8/src/util.jl:80 [inlined]
[176] var"#s349#312"(::Any, ex::Any, opts::Any)
@ Finch ./none:0
[177] (::Core.GeneratedFunctionStub)(::Any, ::Vararg{Any})
@ Core ./boot.jl:602
However, if we flip the loop order to match the output better, it compiles fine:
@finch (output_tensor .=0; for j=_,k=_,i=_; output_tensor[i,k] += a_fiber[i,j] * b_fiber[k,j]; end)
Are there restrictions on the loop ordering for sparse hash trie fibers or should this be viewed as a bug?
No, we should be able to access the output out of order. I think I made some changes to unfurling that didn't have test coverage, so we can add these to the test suite and fix them.
I'm using Finch for counting sub-graphs where the edge_matrix is the adjacency matrix, and as part of this I produced the following kernel.
The first four lines are setup, and the last one should cause the error.
Let me know if this is just a formatting/user issue!