

def grad(self, inputs, gout):
    (x,) = inputs
    (gz,) = gout
    if (x.dtype not in continuous_dtypes):
        return [x.zeros_like(dtype=theano.config.floatX)]
    if self.structured:
        if (self.axis is None):
            r = (gz * theano.sparse.sp_ones_like(x))
        elif (self.axis == 0):
            r = col_scale(theano.sparse.sp_ones_like(x), o_format)
        elif (self.axis == 1):
            r = row_scale(theano.sparse.sp_ones_like(x), gz)
        else:
            raise ValueError('Illegal value for self.axis.')
    else:
        o_format = x.format
        x = dense_from_sparse(x)
        if _is_sparse_variable(gz):
            gz = dense_from_sparse(gz)
        if (self.axis is None):
            r = tensor.second(x, gz)
        else:
            ones = tensor.ones_like(x)
            if (self.axis == 0):
                r = (tensor.addbroadcast(gz.dimshuffle('x', 0), 0) * ones)
            elif (self.axis == 1):
                r = (tensor.addbroadcast(gz.dimshuffle(0, 'x'), 1) * ones)
            else:
                raise ValueError('Illegal value for self.axis.')
        r = SparseFromDense(o_format)(r)
    return [r]

dataset/ETHPy150Open rizar/attention-lvcsr/libs/Theano/theano/sparse/basic.py SpSum.grad/VarMisuse@115/134 `gz`->`o_format`