'Gives the (sub/super)gradient of the atom w.r.t. each argument.
Matrix expressions are vectorized, so the gradient is a matrix.
Args:
values: A list of numeric values for the arguments.
Returns:
A list of SciPy CSC sparse matrices or None.'

def _grad(self, values):

    x = np.matrix(values[0])
    w_arr = np.array([float(w_i) for w_i in self.w])
    if np.any((x[(w_arr > 0)] <= 0)):
        return [None]
    else:
        D = ((w_arr / x.A.ravel(order='F')) * self.numeric(values))
        return [sp.csc_matrix(D).T]
