Skip to content

Introduce a de-parser to return Finch expressions to their readable macro input form #2087

Introduce a de-parser to return Finch expressions to their readable macro input form

Introduce a de-parser to return Finch expressions to their readable macro input form #2087

Triggered via pull request November 8, 2024 22:03
Status Failure
Total duration 43m 39s
Artifacts

CI.yml

on: pull_request
Matrix: test
Fit to window
Zoom out
Zoom in

Annotations

7 errors, 6 warnings, and 2 notices
Documentation: docs/src/reference/internals/virtualization.md#L65
doctest failure in src/reference/internals/virtualization.md:65-76 ```jldoctest example1 julia> using Finch: @finch_program_instance julia> prgm = Finch.@finch_program_instance (C .= 0; for i=_; C[i] = A[i] * B[i] end; return C) Finch program instance: begin tag(C, Tensor(SparseList(Element(0)))) .= 0 for i = Dimensionless() tag(C, Tensor(SparseList(Element(0))))[tag(i, i)] <<initwrite>>= tag(*, *)(tag(A, Tensor(SparseList(Element(0))))[tag(i, i)], tag(B, Tensor(Dense(Element(0))))[tag(i, i)]) end return (tag(C, Tensor(SparseList(Element(0))))) end ``` Subexpression: prgm = Finch.@finch_program_instance (C .= 0; for i=_; C[i] = A[i] * B[i] end; return C) Evaluated output: Finch program instancequote C .= 0 for i = _ C[i] << initwrite >>= A[i] * B[i] end return C end Expected output: Finch program instance: begin tag(C, Tensor(SparseList(Element(0)))) .= 0 for i = Dimensionless() tag(C, Tensor(SparseList(Element(0))))[tag(i, i)] <<initwrite>>= tag(*, *)(tag(A, Tensor(SparseList(Element(0))))[tag(i, i)], tag(B, Tensor(Dense(Element(0))))[tag(i, i)]) end return (tag(C, Tensor(SparseList(Element(0))))) end diff = Warning: Diff output requires color. Finch program instance: begin tag(C, Tensor(SparseList(Element(0)))) instancequote C .= 0 0 for i = Dimensionless() tag(C, Tensor(SparseList(Element(0))))[tag(i, i)] <<initwrite>>= tag(*, *)(tag(A, Tensor(SparseList(Element(0))))[tag(i, i)], tag(B, Tensor(Dense(Element(0))))[tag(i, i)]) end _ C[i] << initwrite >>= A[i] * B[i] end return (tag(C, Tensor(SparseList(Element(0))))) C end
Documentation: docs/src/reference/internals/virtualization.md#L140
doctest failure in src/reference/internals/virtualization.md:140-235 ```jldoctest example2; setup = :(using Finch) julia> A = Tensor(SparseList(Element(0)), [0, 2, 0, 0, 3]); julia> B = Tensor(Dense(Element(0)), [11, 12, 13, 14, 15]); julia> s = Scalar(0); julia> typeof(A) Tensor{SparseListLevel{Int64, Vector{Int64}, Vector{Int64}, ElementLevel{0, Int64, Int64, Vector{Int64}}}} julia> typeof(B) Tensor{DenseLevel{Int64, ElementLevel{0, Int64, Int64, Vector{Int64}}}} julia> inst = Finch.@finch_program_instance begin for i = _ s[] += A[i] end end Finch program instance: for i = Dimensionless() tag(s, Scalar{0, Int64})[] <<tag(+, +)>>= tag(A, Tensor(SparseList(Element(0))))[tag(i, i)] end julia> typeof(inst) Finch.FinchNotation.LoopInstance{Finch.FinchNotation.IndexInstance{:i}, Finch.FinchNotation.Dimensionless, Finch.FinchNotation.AssignInstance{Finch.FinchNotation.AccessInstance{Finch.FinchNotation.TagInstance{Finch.FinchNotation.VariableInstance{:s}, Scalar{0, Int64}}, Finch.FinchNotation.LiteralInstance{Finch.FinchNotation.Updater()}, Tuple{}}, Finch.FinchNotation.TagInstance{Finch.FinchNotation.VariableInstance{:+}, Finch.FinchNotation.LiteralInstance{+}}, Finch.FinchNotation.AccessInstance{Finch.FinchNotation.TagInstance{Finch.FinchNotation.VariableInstance{:A}, Tensor{SparseListLevel{Int64, Vector{Int64}, Vector{Int64}, ElementLevel{0, Int64, Int64, Vector{Int64}}}}}, Finch.FinchNotation.LiteralInstance{Finch.FinchNotation.Reader()}, Tuple{Finch.FinchNotation.TagInstance{Finch.FinchNotation.VariableInstance{:i}, Finch.FinchNotation.IndexInstance{:i}}}}}} julia> Finch.virtualize(Finch.JuliaContext(), :inst, typeof(inst)) Finch program: for i = virtual(Finch.FinchNotation.Dimensionless) tag(s, virtual(Finch.VirtualScalar))[] <<tag(+, +)>>= tag(A, virtual(Finch.VirtualFiber{Finch.VirtualSparseListLevel}))[tag(i, i)] end julia> @finch_code begin for i = _ s[] += A[i] end end quote s = (ex.bodies[1]).body.lhs.tns.bind s_val = s.val A_lvl = (ex.bodies[1]).body.rhs.tns.bind.lvl A_lvl_ptr = A_lvl.ptr A_lvl_idx = A_lvl.idx A_lvl_val = A_lvl.lvl.val A_lvl_q = A_lvl_ptr[1] A_lvl_q_stop = A_lvl_ptr[1 + 1] if A_lvl_q < A_lvl_q_stop A_lvl_i1 = A_lvl_idx[A_lvl_q_stop - 1] else A_lvl_i1 = 0 end phase_stop = min(A_lvl_i1, A_lvl.shape) if phase_stop >= 1 if A_lvl_idx[A_lvl_q] < 1 A_lvl_q = Finch.scansearch(A_lvl_idx, 1, A_lvl_q, A_lvl_q_stop - 1) end while true A_lvl_i = A_lvl_idx[A_lvl_q] if A_lvl_i < phase_stop A_lvl_2_val = A_lvl_val[A_lvl_q] s_val = A_lvl_2_val + s_val A_lvl_q += 1 else phase_stop_3 = min(phase_stop, A_lvl_i) if A_lvl_i == phase_stop_3 A_lvl_2_val = A_lvl_val[A_lvl_q] s_val += A_lvl_2_val A_lvl_q += 1 end break end end end result = () s.val = s_val result end julia> @finch_code begin for i = _ s[] += B[i] end end quote s = (ex.bodies[1]).body.lhs.tns.bind s_val = s.val B_lvl = (ex.bodies[1]).body.rhs.tns.bind.lvl B_lvl_val = B_lvl.lvl.val for i_3 = 1:B_lvl.shape B_lvl_q = (1 - 1) * B_lvl.shape + i_3 B_lvl_2_val = B_lvl_val[B_lvl_q] s_val = B_lvl_2_val + s_val end result = () s.val = s_val result end ``` Subexpression: inst = Finch.@finch_program_instance begin for i = _ s[] += A[i] end end Evaluated output: Finch program instance:(for i = _ s[] << (+) >>= A[i] end) Expected output: Finch program instance: for i = Dimensionless() tag(s, Scalar{0, Int64})[] <<tag(+, +)>>= tag(A, Tensor(SparseList(Element(0))))[tag(i, i)] end diff = Warning: Diff output requires color. Finch program instance: for instance:(for i = Dimensionless(
Documentation
Process completed with exit code 1.
Julia 1.10.6 - ubuntu-latest - x64 - pull_request
Process completed with exit code 1.
Julia 1 - ubuntu-latest - x64 - pull_request
Process completed with exit code 1.
Julia 1.10.6 - windows-latest - x86 - pull_request
Process completed with exit code 1.
Julia 1 - windows-latest - x86 - pull_request
Process completed with exit code 1.
Documentation
The following actions use a deprecated Node.js version and will be forced to run on node20: actions/checkout@v3, julia-actions/setup-julia@v1. For more info: https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/
Python tests
The following actions use a deprecated Node.js version and will be forced to run on node20: julia-actions/setup-julia@v1. For more info: https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/
Julia 1.10.6 - ubuntu-latest - x64 - pull_request
The following actions use a deprecated Node.js version and will be forced to run on node20: actions/checkout@v3, julia-actions/setup-julia@v1, actions/cache@v3. For more info: https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/
Julia 1 - ubuntu-latest - x64 - pull_request
The following actions use a deprecated Node.js version and will be forced to run on node20: actions/checkout@v3, julia-actions/setup-julia@v1, actions/cache@v3. For more info: https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/
Julia 1.10.6 - windows-latest - x86 - pull_request
The following actions use a deprecated Node.js version and will be forced to run on node20: actions/checkout@v3, julia-actions/setup-julia@v1, actions/cache@v3. For more info: https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/
Julia 1 - windows-latest - x86 - pull_request
The following actions use a deprecated Node.js version and will be forced to run on node20: actions/checkout@v3, julia-actions/setup-julia@v1, actions/cache@v3. For more info: https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/
[julia-buildpkg] Caching of the julia depot was not detected
Consider using `julia-actions/cache` to speed up runs https://github.com/julia-actions/cache. To ignore, set input `ignore-no-cache: true`
[julia-buildpkg] Caching of the julia depot was not detected
Consider using `julia-actions/cache` to speed up runs https://github.com/julia-actions/cache. To ignore, set input `ignore-no-cache: true`