def test_permutation_associee():
    compte = 0
    for i in range(1,20) :
        permut = permutation.permutation_aleatoire(i)
        mat = permutation.matrice_permutation(permut)
        if (permutation.permutation_associee(mat) != permut):
            compte += 1
            print "Erreur lors du test de permutation_associee(", mat, ") \n"
    return compte
def test_permutation_associee():
    compte = 0
    for i in range(1, 20):
        permut = permutation.permutation_aleatoire(i)
        mat = permutation.matrice_permutation(permut)
        if (permutation.permutation_associee(mat) != permut):
            compte += 1
            print "Erreur lors du test de permutation_associee(", mat, ") \n"
    return compte
def determinant_plu(m):
    """m : une matrice carree
    sortie : le determinant de m"""
    
    P, L, U = decomposition.decomposition_plu(m)
    #multiplication des diagonales
    det = reduce(operator.mul, [L[i][i] for i in range(len(L))])
    det *= reduce(operator.mul, [U[i][i] for i in range(len(U))])
    #calcul du nombre de permutation necessaires pour retrouver la matrice identite
    perm = permutation.permutation_associee(P)
    alpha = 0
    i = 0
    while (perm != range(len(P))):
        if perm[i] != i:
            perm[perm.index(i)] = perm[i]
            perm[i] = i
            alpha += 1
        i += 1
    if alpha % 2 != 0 :
        det *= -1
    return det