willow-ahrens / Finch.jl

Sparse tensors in Julia and more! Datastructure-driven array programing language.
http://willowahrens.io/Finch.jl/
MIT License
158 stars 15 forks source link

Strange Error "Error: I'm not sure how this happened" #313

Closed kylebd99 closed 10 months ago

kylebd99 commented 10 months ago

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.

edge_matrix = Fiber!(SparseList(SparseList(Element(0.0), 254156), 254156))
edge_values = fsprand((254156, 254156), .0001)
@finch (edge_matrix .= 0; for j=_, i=_; edge_matrix[i,j] = edge_values[i,j]; end)
output_matrix = Fiber!(SparseHash{1}(SparseHash{1}(Element(0.0), (254156,)), (254156,)))

@finch (for v_4=_, v_3=_, v_2=_, v_5=_; output_fiber[v_2,v_5] += edge_matrix[v_5, v_4]*edge_matrix[v_2, v_3]*edge_matrix[v_3, v_4]; end)

The first four lines are setup, and the last one should cause the error.

ERROR: I'm not sure how this has happened
Stacktrace:
   [1] error(s::String)
     @ Base ./error.jl:35
   [2] lower_access(ctx::Finch.LowerJulia, node::Finch.FinchNotation.FinchNode, tns::Finch.Unfurled)
     @ Finch ~/.julia/packages/Finch/KoId8/src/tensors/combinators/unfurled.jl:128
   [3] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:149
   [4] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
   [5] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
   [6] iterate
     @ ./generator.jl:47 [inlined]
   [7] _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
   [8] collect_similar
     @ ./array.jl:711 [inlined]
   [9] map(f::Finch.LowerJulia, A::SubArray{Finch.FinchNotation.FinchNode, 1, Vector{Finch.FinchNotation.FinchNode}, Tuple{UnitRange{Int64}}, true})
     @ Base ./abstractarray.jl:3261
  [10] 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 ---
  [18] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
  [19] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
  [20] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:188
  [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] open_scope(prgm::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:39
  [24] (::Finch.var"#637#639"{Finch.FinchNotation.FinchNode, Symbol})(ctx_2::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/lookups.jl:38
  [25] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
  [26] 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
  [27] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
  [28] 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
  [29] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
  [30] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.LookupStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/lookups.jl:26
  [31] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.LookupStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
  [32] lower_loop(ctx::Finch.LowerJulia, root::Finch.FinchNotation.FinchNode, ext::Finch.Extent)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:220
  [33] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:171
  [34] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
  [35] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
  [36] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.SimplifyStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/symbolic/simplify_program.jl:188
  [37] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.SimplifyStyle)
     @ 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.RunStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/runs.jl:39
  [40] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.RunStyle)
     @ 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] (::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
  [43] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
  [44] 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
  [45] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
  [46] 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
  [47] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
  [48] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.SpikeStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/spikes.jl:51
  [49] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.SpikeStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
  [50] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
  [51] (::Finch.var"#628#630")(ctx3::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:37
  [52] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
  [53] 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
  [54] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
  [55] 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
  [56] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
  [57] (::Finch.var"#627#629")(ctx2::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:36
  [58] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
  [59] 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
  [60] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
  [61] 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
  [62] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
  [63] lower
     @ ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:34 [inlined]
  [64] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.ThunkStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
  [65] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
  [66] (::Finch.var"#664#666")(ctx_2::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/switches.jl:64
  [67] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
  [68] 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
  [69] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
  [70] 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
  [71] contain
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:13 [inlined]
  [72] (::Finch.var"#nest#665"{Finch.LowerJulia})(cases::Array{Pair{Finch.FinchNotation.FinchNode, Finch.FinchNotation.FinchNode}, 30}, inner::Bool)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/switches.jl:63
  [73] (::Finch.var"#nest#665"{Finch.LowerJulia})(cases::Array{Pair{Finch.FinchNotation.FinchNode, Finch.FinchNotation.FinchNode}, 30})
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/switches.jl:62
  [74] lower(stmt::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.SwitchStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/switches.jl:70
  [75] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.SwitchStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
  [76] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
  [77] (::Finch.var"#749#756"{Finch.Extent, Finch.FinchNotation.FinchNode})(ctx_3::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/steppers.jl:110
  [78] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
  [79] 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
  [80] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
  [81] 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
  [82] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
  [83] (::Finch.var"#745#752"{Finch.FinchNotation.FinchNode, Symbol, Symbol})(ctx_2::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/steppers.jl:107
  [84] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
  [85] 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
  [86] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
  [87] 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
  [88] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
  [89] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, style::Finch.StepperStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/steppers.jl:97
  [90] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.StepperStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
  [91] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
  [92] (::Finch.var"#683#687"{Finch.FinchNotation.FinchNode, Finch.Extent})(ctx_4::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/phases.jl:74
  [93] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
  [94] 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
  [95] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
  [96] 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
  [97] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
  [98] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, style::Finch.SequencePhaseStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/phases.jl:71
  [99] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.SequencePhaseStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
 [100] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
 [101] (::Finch.var"#689#690"{Finch.FinchNotation.FinchNode, Finch.FinchNotation.FinchNode})(ctx_2::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/sequences.jl:41
 [102] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
 [103] 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
 [104] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
 [105] 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
 [106] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
 [107] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.SequenceStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/sequences.jl:40
 [108] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.SequenceStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
 [109] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
 [110] (::Finch.var"#628#630")(ctx3::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:37
 [111] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
 [112] 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
 [113] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
 [114] 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
 [115] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
 [116] (::Finch.var"#627#629")(ctx2::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:36
 [117] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
 [118] 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
 [119] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
 [120] 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
 [121] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
 [122] lower
     @ ~/.julia/packages/Finch/KoId8/src/looplets/thunks.jl:34 [inlined]
 [123] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.ThunkStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
 [124] lower_loop(ctx::Finch.LowerJulia, root::Finch.FinchNotation.FinchNode, ext::Finch.Extent)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:220
 [125] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:171
 [126] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
 [127] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
 [128] #132
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:125 [inlined]
 [129] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
 [130] 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
 [131] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
 [132] 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
 [133] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
 [134] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:124
 [135] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
 [136] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
 [137] #133
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:132 [inlined]
 [138] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
 [139] 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
 [140] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
 [141] 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
 [142] contain
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:13 [inlined]
 [143] lower(root::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia, #unused#::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:129
 [144] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode, style::Finch.DefaultStyle)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:34
 [145] (::Finch.LowerJulia)(root::Finch.FinchNotation.FinchNode)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:32
 [146] (::Finch.var"#322#326")(ctx_3::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/execute.jl:105
 [147] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
 [148] 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
 [149] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
 [150] 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
 [151] contain
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:13 [inlined]
 [152] (::Finch.var"#321#325")(ctx_2::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/execute.jl:104
 [153] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
 [154] 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
 [155] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
 [156] 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
 [157] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
 [158] lower_global(prgm::Finch.FinchNotation.FinchNode, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/execute.jl:94
 [159] (::Finch.var"#319#320"{Symbol, DataType})(ctx_2::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/execute.jl:82
 [160] #128
     @ ~/.julia/packages/Finch/KoId8/src/lower.jl:15 [inlined]
 [161] 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
 [162] contain(f::Function, ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:50
 [163] 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
 [164] contain(f::Function, ctx::Finch.LowerJulia)
     @ Finch ~/.julia/packages/Finch/KoId8/src/lower.jl:13
 [165] #execute_code#318
     @ ~/.julia/packages/Finch/KoId8/src/execute.jl:79 [inlined]
 [166] execute_code
     @ ~/.julia/packages/Finch/KoId8/src/execute.jl:78 [inlined]
 [167] (::Finch.var"#314#317"{DataType, DataType})(ctx::Finch.JuliaContext)
     @ Finch ~/.julia/packages/Finch/KoId8/src/execute.jl:63
 [168] contain(f::Finch.var"#314#317"{DataType, DataType}, ctx::Finch.JuliaContext, task::Nothing)
     @ Finch ~/.julia/packages/Finch/KoId8/src/environment.jl:56
 [169] contain
     @ ~/.julia/packages/Finch/KoId8/src/environment.jl:50 [inlined]
 [170] macro expansion
     @ ~/.julia/packages/Finch/KoId8/src/execute.jl:62 [inlined]
 [171] (::Finch.var"#313#316"{DataType, DataType})()
     @ Finch ~/.julia/packages/Finch/KoId8/src/util.jl:71
 [172] #s349#312
     @ ~/.julia/packages/Finch/KoId8/src/util.jl:80 [inlined]
 [173] var"#s349#312"(::Any, ex::Any, opts::Any)
     @ Finch ./none:0
 [174] (::Core.GeneratedFunctionStub)(::Any, ::Vararg{Any})
     @ Core ./boot.jl:602

Let me know if this is just a formatting/user issue!

kylebd99 commented 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?

willow-ahrens commented 10 months ago

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.