def aadd_grad(z, left, right): d[left] = tangent.unbroadcast(d[z], left) d[right] = tangent.unbroadcast(d[z], right)
def aunreduce(y, x, shape, axis, keepdims): d[x] = tangent.unbroadcast(d[y], x)
def sub(z, x, y): d[x] = tangent.unbroadcast(d[z], x) d[y] = -tangent.unbroadcast(d[z], y)
def add(z, x, y): d[x] = tangent.unbroadcast(d[z], x) d[y] = tangent.unbroadcast(d[z], y)
def mult(z, x, y): d[x] = tangent.unbroadcast(d[z] * y, x) d[y] = tangent.unbroadcast(d[z] * x, y)
def tunbroadcast(z, x, y): d[z] = tangent.unbroadcast(d[x], d[y])