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

array arguments in @cast indexing

Open visva89 opened this issue 1 year ago • 1 comments

Here is a short example (Julia 1.9.2)

bsz = (8, 8);

#this doesnt work:
@cast b[(b1,b2), t, h,w] := img[(b1, h), (b2, w), t] (b1 in 1:bsz[1], b2 in 1:bsz[2]);

#this works:
bsz1 = bsz[1];
bsz2 = bsz[2];
@cast b[(b1,b2), t, h,w] := img[(b1, h), (b2, w), t] (b1 in 1:bsz1, b2 in 1:bsz2);

Is it expected behavior? Just learning Julia, couldn't find why this doesn't work in docs or other issues.

visva89 avatar Jul 31 '23 18:07 visva89

That's a bug of some sort.

In an expression like @reduce a[i] := sum(j) b[i,j], and in one like @cast c[i] := d[i] (i in 1:3), the macro gets two expressions. It is, apparently, using the absence of any indexing in the second to distinguish them. Which goes wrong in your example. It should infer this some other way, and leave 1:bsz[1] alone.

(The error is slightly confusing, it talks about "how do I reduce over..." and comes from reduceparse. This is because @cast accepts things that like @cast _[i,j] := softmax(j) m[i,j], the syntax of @reduce without dropping dims.)

mcabbott avatar Jul 31 '23 18:07 mcabbott