26 lines
1.0 KiB
Plaintext
26 lines
1.0 KiB
Plaintext
# User defined generic function that operates on unknown shaped arguments.
|
|
def multiply_transpose(a, b) {
|
|
return transpose(a) * transpose(b);
|
|
}
|
|
|
|
def main() {
|
|
# Define a variable `a` with shape <2, 3>, initialized with the literal value.
|
|
var a = [[1, 2, 3], [4, 5, 6]];
|
|
var b<2, 3> = [1, 2, 3, 4, 5, 6];
|
|
|
|
# This call will specialize `multiply_transpose` with <2, 3> for both
|
|
# arguments and deduce a return type of <3, 2> in initialization of `c`.
|
|
var c = multiply_transpose(a, b);
|
|
|
|
# A second call to `multiply_transpose` with <2, 3> for both arguments will
|
|
# reuse the previously specialized and inferred version and return <3, 2>.
|
|
var d = multiply_transpose(b, a);
|
|
|
|
# A new call with <3, 2> (instead of <2, 3>) for both dimensions will
|
|
# trigger another specialization of `multiply_transpose`.
|
|
var e = multiply_transpose(c, d);
|
|
|
|
# Finally, calling into `multiply_transpose` with incompatible shapes
|
|
# (<2, 3> and <3, 2>) will trigger a shape inference error.
|
|
var f = multiply_transpose(a, c);
|
|
} |