'Helper function of function lower_triangular_solve.
Without the error checks.
To be used privately.'

def _lower_triangular_solve(self, rhs):

    X = zeros(self.rows, rhs.cols)
    for j in range(rhs.cols):
        for i in range(self.rows):
            if (self[(i, i)] == 0):
                raise TypeError('Matrix    must    be    non-singular.')
            X[(i, j)] = ((rhs[(i, j)] - sum(((self[(i, k)] * X[(k, j)]) for k in range(i)))) / self[(i, i)])
    return self._new(X)
