Determinant
        Compute the determinant given a lower triangular matrix
    Inputs: 
        L :
            lower triangular matrix
    Outputs: 
        det_L : 
            determinant of L

def det(L):
    """
    Determinant
        Compute the determinant given a lower triangular matrix
    Inputs: 
        L :
            lower triangular matrix
    Outputs: 
        det_L : 
            determinant of L
    """
    size_L = L.shape
    if np.size(L) == 1:
        return np.array(L)
    else:    
        try: 
            assert np.all(np.tril(L)==L)
        except AssertionError:
            print 'Error: Input is not a lower triangular matrix.'
            return 0
        try:
            assert size_L[0] == size_L[1]
        except AssertionError:
            print 'Error: Not a square matrix.'
            return 0
        det_L = 1.
        for i in xrange(size_L[1]):
            det_L = det_L*L[i,i]
        return det_L