'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])
    eigen_val = LA.eigvals(X)
    if (np.min(eigen_val) > 0):
        D = np.linalg.inv(X).T
        return [sp.csc_matrix(D.A.ravel(order='F')).T]
    else:
        return [None]
