Tullio.jl
Tullio.jl copied to clipboard
Error with piping left in multiline @tullio begin ... end
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
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.