def scalar
bendtorch-core@0.1.0.0 · src/tensor/elementwise.bend:85
import bendtorch-core@0.1.0.0/src/tensor/elementwise.bend as Elementwise
import Base
85def scalar(operation: Operation, left: F32, right: F32) -> F32:
86 match operation:
87 case Add{}:
88 F32.add(left, right)
89 case Sub{}:
90 F32.sub(left, right)
91 case Mul{}:
92 F32.mul(left, right)
93 case KeepLeft{}:
94 left
95 case NegateLeft{}:
96 F32.neg(left)
97 case ReluLeft{}:
98 relu(left)
99 case ReluBackward{}:
100 relu_backward(left, right)
101 case Divide{}:
102 F32.div(left, right)
103 case ExpLeft{}:
104 F32.exp(left)
105 case LogLeft{}:
106 F32.log(left)
107 case Matches{}:
108 zero_if(Bool.not(U32.is_eq(bits(left), bits(right))), 1.0)
109 case PickNegated{}:
110 zero_if(Bool.not(is_one(right)), F32.neg(left))
111 case MseGrad{+scale}:
112 F32.mul(F32.mul(scale, right), left)
113 case OneHotGrad{+count}:
114 zero_if(Bool.not(is_one(right)), target_gradient(left, count))
115 case SoftmaxGrad{+count, +single}:
116 F32.neg(F32.mul(F32.exp(right), row_sum(single, target_gradient(left, count))))
117 case Descend{lr}:
118 F32.sub(left, F32.mul(lr, right))