

def perform(self, node, inputs, outputs):
    (x, y) = inputs
    (out,) = outputs
    assert (_is_sparse(x) and _is_dense(y))
    if (len(y.shape) == 0):
        out_dtype = node.outputs[0].dtype
        if (x.dtype == out_dtype):
            z = x.copy()
        else:
            z = x.astype(out_dtype)
        out[0] = z
        out[0].data *= y
    elif (len(y.shape) == 1):
        raise NotImplementedError()
    elif (len(y.shape) == 2):
        (M, N) = x.shape
        assert (x.shape == y.shape)
        out_dtype = node.outputs[0].dtype
        if (x.format == 'csc'):
            indices = x.indices
            indptr = x.indptr
            if (x.dtype == out_dtype):
                z = x.copy()
            else:
                z = x.astype(out_dtype)
            z_data = z.data
            for j in xrange(0, N):
                for i_idx in xrange(indptr[j], indptr[(j + 1)]):
                    i = indices[i_idx]
                    z_data[i_idx] *= y[(i, j)]
            out[0] = z
        elif (x.format == 'csr'):
            indices = x.indices
            indptr = x.indptr
            if (x.dtype == out_dtype):
                z = x.copy()
            else:
                z = x.astype(out_dtype)
            z_data = z.data
            for i in xrange(0, M):
                for j_idx in xrange(indptr[i], indptr[(i + 1)]):
                    j = indices[j_idx]
                    z_data[j_idx] *= y[(i, j)]
            out[0] = z
        else:
            print('WARNING: crappy implementation of MulSD', x.format, file=sys.stderr)
            out[0] = type(x)((x.toarray() * y))

dataset/ETHPy150Open rizar/attention-lvcsr/libs/Theano/theano/sparse/basic.py MulSD.perform/original