Tullio.jl icon indicating copy to clipboard operation
Tullio.jl copied to clipboard

Error with piping left in multiline @tullio begin ... end

Open Emmanuel-R8 opened this issue 3 years ago • 1 comments

MWE:

A = rand(4, 4, 5, 5)
B = rand(4, 4)

@tullio C[k, l] := A[i, j, k, l] * B[i, j]               # OK
@tullio C[k, l] := A[i, j, k, l] * B[i, j] |> sqrt       # OK
@tullio C[k, l] := sqrt <| A[i, j, k, l] * B[i, j]       # OK

@tullio C[k, l] := begin
    A[i, j, k, l] * B[i, j]
end                                    # OK

@tullio C[k, l] := begin
    A[i, j, k, l] * B[i, j] |> sqrt
end                                   # OK

@tullio C[k, l] := begin
    sqrt <| A[i, j, k, l] * B[i, j]
end                                   # KO

Emmanuel-R8 avatar Mar 09 '22 09:03 Emmanuel-R8

Be warned that these do different things:

julia> @tullio C[k, l] := A[i, j, k, l] * B[i, j] |> sqrt; C[3,4]  # sqrt outside the sum
2.0930036101114573

julia> @tullio C[k, l] := begin
           A[i, j, k, l] * B[i, j] |> sqrt
       end; C[3,4]
6.945564259296232

julia> @tullio C[k, l] := sqrt(A[i, j, k, l] * B[i, j]); C[3,4]  # sqrt is inside the sum
6.945564259296232

julia> Base.:|>
|> (generic function with 1 method)

julia> <|
ERROR: UndefVarError: <| not defined

So the |> symbol within the begin end isn't being processed by the macro at all, it's just calling Base.:|>. And since there is no <|, that gives an error.

mcabbott avatar Mar 10 '22 00:03 mcabbott