'Return the matrix inverse using Cholesky or LDL (default)
decomposition as selected with the ``method`` keyword: \'CH\' or \'LDL\',
respectively.
Examples
>>> from sympy import SparseMatrix, Matrix
>>> A = SparseMatrix([
... [ 2, -1,  0],
... [-1,  2, -1],
... [ 0,  0,  2]])
>>> A.inv(\'CH\')
Matrix([
[2/3, 1/3, 1/6],
[1/3, 2/3, 1/3],
[  0,   0, 1/2]])
>>> A.inv(method=\'LDL\') # use of \'method=\' is optional
Matrix([
[2/3, 1/3, 1/6],
[1/3, 2/3, 1/3],
[  0,   0, 1/2]])
>>> A * _
Matrix([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])'

def _eval_inverse(self, **kwargs):

    sym = self.is_symmetric()
    M = self.as_mutable()
    I = M.eye(M.rows)
    if (not sym):
        t = M.T
        r1 = M[0, :]
        M = (t * M)
        I = (t * I)
    method = kwargs.get('method', 'LDL')
    if (method in 'LDL'):
        solve = M._LDL_solve
    elif (method == 'CH'):
        solve = M._cholesky_solve
    else:
        raise NotImplementedError(('Method    may    be    "CH"    or    "LDL",    not    %s.' % method))
    rv = M.hstack(*[solve(I[:, i]) for i in range(I.cols)])
    if (not sym):
        scale = (r1 * rv[:, 0])[(0, 0)]
        rv /= scale
    return self._new(rv)
