TensorBackward.vjp: def of bendtorch-core@0.1.0.0 Import: import bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend as TensorBackward Lines 673-714 of bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend: https://jend.leeeet.dev/read.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&start_line=673&end_line=714 import Base import bendtorch-core@0.1.0.0/src/tensor/core.bend as Core # The vector-Jacobian product of one node with gradient g: the contribution # each operand receives, in operand order, already reduced to its shape. A # constant sends nothing, and Frozen{id, node} sends node's contributions # without the ones to id. def vjp(node: Node, saved: Saved, g: Core.Dynamic) -> Pass: match node: case Leaf{}: Pass{saved, g, Done{Nil{}}} case Add{+a, +b, +left, +right}: vjp_add(a, b, left, right, g) case Sub{+a, +b, +left, +right}: vjp_sub(a, b, left, right, g) case Mul{+a, +b, +left, +right}: vjp_mul(a, b, left, right, saved, g) case Sum{+a, +input}: vjp_sum(a, input, g) case SumDims{+a, +input, +kept}: vjp_sum_dims(a, input, kept, g) case Matmul{+a, +b, +left, +right}: vjp_matmul(a, b, left, right, saved, g) case MatmulNT{+a, +b, +left, +right}: vjp_matmul_nt(a, b, left, right, saved, g) case Relu{+a, +input}: vjp_relu(a, input, saved, g) case MseLoss{+a, +b, +left, +right}: vjp_mse(a, b, left, right, saved, g) case CrossEntropy{+a, +input}: vjp_cross_entropy(a, input, saved, g) case BatchedMatmul{+a, +b, +left, +right}: vjp_batched(a, b, left, right, saved, g) case Slice{+a, +input, +kept, +plan}: vjp_slice(a, input, kept, plan, g) case Gathered{+a, +input, +plan, +entries}: vjp_gather(a, input, plan, entries, g) case Constant{}: Pass{saved, g, Done{Nil{}}} case Frozen{+id, inner}: match inner: case MatmulNT{+a, +b, +left, +right}: nt_frozen(id, a, b, left, right, saved, g, Bool.and(Nat.is_eq(id, a), Bool.not(Nat.is_eq(id, b)))) case other: unsent(id, vjp(other, saved, g)) Uses (24): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool.and https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool.not https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.is_eq https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Result https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=Node https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=Pass https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=Saved https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=nt_frozen https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=unsent https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_add https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_batched https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_cross_entropy https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_gather https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_matmul https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_matmul_nt https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_mse https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_mul https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_relu https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_slice https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_sub https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_sum https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend&name=vjp_sum_dims https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/tensor/core.bend&name=Dynamic