bend-tensors Releases (2): 0.0.0.2 0x39d8166231e68361eb37e8bef9287b8a indexed https://jend.leeeet.dev/files.txt?path=bend-tensors@0.0.0.2 0.0.0.1 0x92882293385d0b92a8d4a4a676bbf076 unindexed https://jend.leeeet.dev/files.txt?path=bend-tensors@0.0.0.1 Definitions (306, 1 to 100 shown): BendTensors.F32.max.of (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=F32.max.of) # Base's F32.max and F32.show take + parameters, which a template slot # does not accept; these take plain ones. def F32.max.of(a: F32, b: F32) -> F32: BendTensors.F32.show.of (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=F32.show.of) def F32.show.of(x: F32) -> String: BendTensors.Blk (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk) type Blk is Data: Blk{a00: F32, a01: F32, a02: F32, a03: F32, a10: F32, a11: F32, a12: F32, a13: F32, a20: F32, a21: F32, a22: F32, a23: F32, a30: F32, a31: F32, a32: F32, a33: F32} BendTensors.Vec4 (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4) type Vec4 is Data: Vec4{x0: F32, x1: F32, x2: F32, x3: F32} BendTensors.Vec4.full (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.full) def Vec4.full(+x: F32) -> Vec4: BendTensors.Vec4.zeros (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.zeros) def Vec4.zeros() -> Vec4: BendTensors.Vec4.arange (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.arange) # x, x + 1, x + 2, x + 3 def Vec4.arange(+x: F32) -> Vec4: BendTensors.Vec4.map (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.map) def Vec4.map(~f: F32 -> F32, v: Vec4) -> Vec4: BendTensors.Vec4.zip (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.zip) def Vec4.zip(~f: F32 -> F32 -> F32, a: Vec4, b: Vec4) -> Vec4: BendTensors.Vec4.add (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.add) def Vec4.add(a: Vec4, b: Vec4) -> Vec4: BendTensors.Vec4.sub (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.sub) def Vec4.sub(a: Vec4, b: Vec4) -> Vec4: BendTensors.Vec4.mul (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.mul) def Vec4.mul(a: Vec4, b: Vec4) -> Vec4: BendTensors.Vec4.scale (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.scale) def Vec4.scale(+k: F32, v: Vec4) -> Vec4: BendTensors.Vec4.sum (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.sum) # the sum, as (x0 + x1) + (x2 + x3): every reduction in this file # pairs its terms the same way, so laws can equate them def Vec4.sum(v: Vec4) -> F32: BendTensors.Vec4.dot (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.dot) def Vec4.dot(a: Vec4, b: Vec4) -> F32: BendTensors.Vec4.max (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.max) def Vec4.max(v: Vec4) -> F32: BendTensors.Vec4.min (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.min) def Vec4.min(v: Vec4) -> F32: BendTensors.Vec4.argmax.pick (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.argmax.pick) # the index (0-3) and value of the largest element; the first wins ties def Vec4.argmax.pick(c: Bool, +i: U32, +x: F32, +j: U32, +y: F32) -> U32 & F32: BendTensors.Vec4.argmax.two (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.argmax.two) def Vec4.argmax.two(ix: U32 & F32, jy: U32 & F32) -> U32 & F32: BendTensors.Vec4.argmax (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.argmax) def Vec4.argmax(v: Vec4) -> U32 & F32: BendTensors.Vec4.to_list (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.to_list) def Vec4.to_list(v: Vec4, acc: List<&2, F32>) -> List<&2, F32>: BendTensors.Vec4.from_list (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.from_list) # the first four of xs, padded with 0.0, and the rest def Vec4.from_list(xs: List<&2, F32>) -> Vec4: BendTensors.Vec4.show (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.show) def Vec4.show(v: Vec4) -> String: BendTensors.Blk.full (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.full) def Blk.full(+x: F32) -> Blk: BendTensors.Blk.zeros (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.zeros) def Blk.zeros() -> Blk: BendTensors.Blk.eye (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.eye) def Blk.eye() -> Blk: BendTensors.Blk.map (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.map) def Blk.map(~f: F32 -> F32, m: Blk) -> Blk: BendTensors.Blk.zip (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.zip) def Blk.zip(~f: F32 -> F32 -> F32, m: Blk, n: Blk) -> Blk: BendTensors.Blk.add (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.add) def Blk.add(m: Blk, n: Blk) -> Blk: BendTensors.Blk.sub (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.sub) def Blk.sub(m: Blk, n: Blk) -> Blk: BendTensors.Blk.mul (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.mul) def Blk.mul(m: Blk, n: Blk) -> Blk: BendTensors.Blk.scale (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.scale) def Blk.scale(+k: F32, m: Blk) -> Blk: BendTensors.Blk.transpose (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.transpose) def Blk.transpose(m: Blk) -> Blk: BendTensors.Blk.matmul (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.matmul) # m * n: 64 multiply-adds, each cell as (a0 b0 + a1 b1) + (a2 b2 + a3 b3) def Blk.matmul(m: Blk, n: Blk) -> Blk: BendTensors.Blk.matvec (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.matvec) # m * v: each row dotted with v def Blk.matvec(m: Blk, v: Vec4) -> Vec4: BendTensors.Blk.sum_rows (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.sum_rows) # row i's sum, as (a_i0 + a_i1) + (a_i2 + a_i3) def Blk.sum_rows(m: Blk) -> Vec4: BendTensors.Blk.sum (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.sum) # the sum of every cell, as the sum of the row sums def Blk.sum(m: Blk) -> F32: BendTensors.Blk.sum_cols (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.sum_cols) # column j's sum, as (a_0j + a_1j) + (a_2j + a_3j): the row sums of the transpose def Blk.sum_cols(m: Blk) -> Vec4: BendTensors.Blk.max_rows (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.max_rows) def Blk.max_rows(m: Blk) -> Vec4: BendTensors.Blk.add_row (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.add_row) # v added to every row def Blk.add_row(m: Blk, v: Vec4) -> Blk: BendTensors.Blk.sub_row (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.sub_row) # v subtracted from every row def Blk.sub_row(m: Blk, v: Vec4) -> Blk: BendTensors.Blk.sub_col (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.sub_col) # row i subtracted by v_i (the column vector v broadcast along rows) def Blk.sub_col(m: Blk, v: Vec4) -> Blk: BendTensors.Blk.scale_rows (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.scale_rows) # row i scaled by v_i def Blk.scale_rows(m: Blk, v: Vec4) -> Blk: BendTensors.Blk.to_list (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.to_list) # the 16 cells in row-major order, before acc def Blk.to_list(m: Blk, acc: List<&2, F32>) -> List<&2, F32>: BendTensors.Blk.from_vec4s (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.from_vec4s) # a block from its four rows def Blk.from_vec4s(v0: Vec4, v1: Vec4, v2: Vec4, v3: Vec4) -> Blk: BendTensors.Blk.from_rows (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.from_rows) # a block from four rows of four; a short row pads with 0.0 def Blk.from_rows(r0: List<&2, F32>, r1: List<&2, F32>, r2: List<&2, F32>, r3: List<&2, F32>) -> Blk: BendTensors.Blk.row (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.row) def Blk.row(m: Blk, i: Nat) -> Vec4: BendTensors.Vec4.mask (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.mask) # elements at index >= k set to 0.0 def Vec4.mask(k: Nat, v: Vec4) -> Vec4: BendTensors.Vec4.max_upto (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.max_upto) # the largest of the first k elements def Vec4.max_upto(k: Nat, v: Vec4) -> F32: BendTensors.Vec4.min_upto (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.min_upto) # the smallest of the first k elements def Vec4.min_upto(k: Nat, v: Vec4) -> F32: BendTensors.Vec4.argmax_upto (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Vec4.argmax_upto) # the index and value of the largest of the first k elements def Vec4.argmax_upto(k: Nat, v: Vec4) -> U32 & F32: BendTensors.Blk.mask_rows (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.mask_rows) # rows at index >= k set to 0.0 def Blk.mask_rows(k: Nat, m: Blk) -> Blk: BendTensors.Blk.mask_cols (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.mask_cols) # columns at index >= k set to 0.0 def Blk.mask_cols(k: Nat, m: Blk) -> Blk: BendTensors.Blk.mask (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.mask) # rows at index >= ki and columns at index >= kj set to 0.0 def Blk.mask(ki: Nat, kj: Nat, m: Blk) -> Blk: BendTensors.Blk.max_rows_upto (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=Blk.max_rows_upto) # each row's largest among its first k columns def Blk.max_rows_upto(k: Nat, m: Blk) -> Vec4: BendTensors.VecT (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT) law VecT: for n: Nat Data BendTensors.VecT.Leaf (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.Leaf) type VecT.Leaf is Data: VecL{v: Vec4} BendTensors.VecT.Node (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.Node) type VecT.Node<-p: Nat> is Data: VecN{l: VecT(p), r: VecT(p)} BendTensors.VecT.size (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.size) # the element count of a VecT(n): 4 * 2^n def VecT.size(+n: Nat) -> Nat: BendTensors.VecT.full (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.full) def VecT.full(+n: Nat, +x: F32) -> VecT(n): BendTensors.VecT.zeros (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.zeros) def VecT.zeros(+n: Nat) -> VecT(n): BendTensors.VecT.ones (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.ones) def VecT.ones(+n: Nat) -> VecT(n): BendTensors.VecT.arange.from (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.arange.from) # x, x + 1, x + 2, .. def VecT.arange.from(+n: Nat, +x: F32) -> VecT(n): BendTensors.VecT.arange (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.arange) # 0, 1, 2, .. def VecT.arange(+n: Nat) -> VecT(n): BendTensors.VecT.map (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.map) def VecT.map(~f: F32 -> F32, +n: Nat, v: VecT(n)) -> VecT(n): BendTensors.VecT.zip (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.zip) def VecT.zip(~f: F32 -> F32 -> F32, +n: Nat, a: VecT(n), b: VecT(n)) -> VecT(n): BendTensors.VecT.add (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.add) def VecT.add(+n: Nat, a: VecT(n), b: VecT(n)) -> VecT(n): BendTensors.VecT.sub (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.sub) def VecT.sub(+n: Nat, a: VecT(n), b: VecT(n)) -> VecT(n): BendTensors.VecT.mul (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.mul) # elementwise product def VecT.mul(+n: Nat, a: VecT(n), b: VecT(n)) -> VecT(n): BendTensors.VecT.exp (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.exp) def VecT.exp(+n: Nat, v: VecT(n)) -> VecT(n): BendTensors.VecT.scale (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.scale) def VecT.scale(+n: Nat, +k: F32, v: VecT(n)) -> VecT(n): BendTensors.VecT.shift (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.shift) # k added to every element def VecT.shift(+n: Nat, +k: F32, v: VecT(n)) -> VecT(n): BendTensors.VecT.sum (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.sum) # the sum, left half plus right half def VecT.sum(+n: Nat, v: VecT(n)) -> F32: BendTensors.VecT.dot (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.dot) def VecT.dot(+n: Nat, a: VecT(n), b: VecT(n)) -> F32: BendTensors.VecT.max (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.max) def VecT.max(+n: Nat, v: VecT(n)) -> F32: BendTensors.VecT.min (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.min) def VecT.min(+n: Nat, v: VecT(n)) -> F32: BendTensors.VecT.argmax.two (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.argmax.two) # the two halves' winners, the right one's index offset by the half's size def VecT.argmax.two(+off: U32, ix: U32 & F32, jy: U32 & F32) -> U32 & F32: BendTensors.VecT.argmax (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.argmax) # the index and value of the largest element; the first wins ties def VecT.argmax(+n: Nat, v: VecT(n)) -> U32 & F32: BendTensors.VecT.to_list.go (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.to_list.go) # the elements in order, before acc # the tree is read borrowed (+v, matched in place), never consumed: a # reader that consumes a shared tree makes the compiler copy it, and # bend 2.0.16 miscompiles that copy when the depth is a literal (the # bias of a model: memory faults in the loop; issues/shared_vec_loop_*) def VecT.to_list.go(+n: Nat, +v: VecT(n), acc: List<&2, F32>) -> List<&2, F32>: BendTensors.VecT.to_list (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.to_list) def VecT.to_list(+n: Nat, +v: VecT(n)) -> List<&2, F32>: BendTensors.VecT.from_list (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.from_list) # the first 4 * 2^n elements of xs, padded with 0.0 def VecT.from_list(+n: Nat, +xs: List<&2, F32>) -> VecT(n): BendTensors.VecT.softmax.fin (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.softmax.fin) def VecT.softmax.fin(+n: Nat, +e: VecT(n)) -> VecT(n): BendTensors.VecT.softmax (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.softmax) # exp(v - max v) / sum def VecT.softmax(+n: Nat, +v: VecT(n)) -> VecT(n): BendTensors.VecT.show (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=VecT.show) def VecT.show(+n: Nat, v: VecT(n)) -> String: BendTensors.MatT (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT) law MatT: for r: Nat for c: Nat Data BendTensors.MatT.Leaf (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.Leaf) type MatT.Leaf is Data: MatB{b: Blk} BendTensors.MatT.Rows (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.Rows) type MatT.Rows<-p: Nat, -c: Nat> is Data: MatR{top: MatT(p, c), bot: MatT(p, c)} BendTensors.MatT.Cols (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.Cols) type MatT.Cols<-r: Nat, -q: Nat> is Data: MatC{left: MatT(r, q), right: MatT(r, q)} BendTensors.MatT.Quad (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.Quad) type MatT.Quad<-p: Nat, -q: Nat> is Data: MatQ{tl: MatT(p, q), tr: MatT(p, q), bl: MatT(p, q), br: MatT(p, q)} BendTensors.MatT.full (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.full) def MatT.full(+r: Nat, +c: Nat, +x: F32) -> MatT(r, c): BendTensors.MatT.zeros (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.zeros) def MatT.zeros(+r: Nat, +c: Nat) -> MatT(r, c): BendTensors.MatT.ones (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.ones) def MatT.ones(+r: Nat, +c: Nat) -> MatT(r, c): BendTensors.MatT.eye (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.eye) # the identity of MatT(n, n) def MatT.eye(+n: Nat) -> MatT(n, n): BendTensors.MatT.map (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.map) def MatT.map(~f: F32 -> F32, +r: Nat, +c: Nat, m: MatT(r, c)) -> MatT(r, c): BendTensors.MatT.zip (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.zip) def MatT.zip(~f: F32 -> F32 -> F32, +r: Nat, +c: Nat, m: MatT(r, c), n: MatT(r, c)) -> MatT(r, c): BendTensors.MatT.add (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.add) def MatT.add(+r: Nat, +c: Nat, m: MatT(r, c), n: MatT(r, c)) -> MatT(r, c): BendTensors.MatT.sub (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.sub) def MatT.sub(+r: Nat, +c: Nat, m: MatT(r, c), n: MatT(r, c)) -> MatT(r, c): BendTensors.MatT.mul (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.mul) # elementwise (Hadamard) product; the matrix product is MatT.matmul def MatT.mul(+r: Nat, +c: Nat, m: MatT(r, c), n: MatT(r, c)) -> MatT(r, c): BendTensors.MatT.exp (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.exp) def MatT.exp(+r: Nat, +c: Nat, m: MatT(r, c)) -> MatT(r, c): BendTensors.MatT.scale (https://jend.leeeet.dev/definition.txt?path=bend-tensors@0.0.0.2/bend_tensors.bend&name=MatT.scale) def MatT.scale(+r: Nat, +c: Nat, +k: F32, m: MatT(r, c)) -> MatT(r, c): More: https://jend.leeeet.dev/packages/bend-tensors.txt?definitions_offset=100