#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Dec 16 08:48:59 2021

@author: pjoulaud
"""

import doctest

G1 = {'a':['b', 'c'], 'b':['a', 'd', 'e'], 'c':['a', 'd'], 'd':['b', 'c', 'e'], 'e':['b', 'd', 'g', 'g'], 'f':['e', 'g'], 'g':[], 'h':['g']}

M1 =   [[0,1,1,1,0,0],
        [1,0,0,1,0,0], 
        [1,0,0,1,1,0], 
        [1,1,1,0,1,1], 
        [0,0,1,1,0,1], 
        [0,0,0,1,1,0]]

L1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

def dico_to_matrix(un_graphe:dict)->list:
    """Transforme un graphe modélisé sous forme d' un dictionnaire
    en un graphe modélisé sous forme de liste de listes (ou matrice)
    @params :
    - un_graphe : de type dict
    @returns :
    - de type list de list
    >>> G1 = {'a':['b', 'c'], 'b':['a', 'd', 'e'], 'c':['a', 'd'], 'd':['b', 'c', 'e'], 'e':['b', 'd', 'g', 'g'], 'f':['e', 'g'], 'g':[], 'h':['g']}
    >>> dico_to_matrix(G1)
    [[0, 1, 1, 0, 0, 0, 0, 0], [1, 0, 0, 1, 1, 0, 0, 0], [1, 0, 0, 1, 0, 0, 0, 0], [0, 1, 1, 0, 1, 0, 0, 0], [0, 1, 0, 1, 0, 0, 1, 0], [0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0]]
    """
    # A COMPLETER
    liste_sommets=['a','b','c','d','e','f','g','h']
    n=len(liste_sommets)
    matrice=[[0]*n for i in range(n)]
    for i in range(n):
        for j in range(n):
            if liste_sommets[j] in un_graphe[liste_sommets[i]]:
                matrice[i][j]=1
    return matrice

def dico_to_matrix2(un_graphe:dict)->list:
    """Transforme un graphe modélisé sous forme d' un dictionnaire
    en un graphe modélisé sous forme de liste de listes (ou matrice)
    Attention, les labels de sommets sont précisés sur la 1ère ligne
    et la 1ère colonne
    @params :
    - un_graphe : de type dict
    @returns :
    - de type list de list
    >>> G1 = {'a':['b', 'c'], 'b':['a', 'd', 'e'], 'c':['a', 'd'], 'd':['b', 'c', 'e'], 'e':['b', 'd', 'g', 'g'], 'f':['e', 'g'], 'g':[], 'h':['g']}
    >>> dico_to_matrix2(G1)
    [[None, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], ['a', 0, 1, 1, 0, 0, 0, 0, 0], ['b', 1, 0, 0, 1, 1, 0, 0, 0], ['c', 1, 0, 0, 1, 0, 0, 0, 0], ['d', 0, 1, 1, 0, 1, 0, 0, 0], ['e', 0, 1, 0, 1, 0, 0, 1, 0], ['f', 0, 0, 0, 0, 1, 0, 1, 0], ['g', 0, 0, 0, 0, 0, 0, 0, 0], ['h', 0, 0, 0, 0, 0, 0, 1, 0]]
    """
    # A COMPLETER
    pass

def matrix_to_dico(matrice:list, sommets:list)->dict:
    """Transforme un graphe modélisé sous forme de liste de listes (ou matrice)
    en un graphe modélisé sous forme d' un dictionnaire
    @params :
    - une_matrice2 : de type list de list
    @returns :
    - de type dict
    >>> M1 = [[0,1,1,1,0,0], [1,0,0,1,0,0], [1,0,0,1,1,0], [1,1,1,0,1,1], [0,0,1,1,0,1], [0,0,0,1,1,0]]
    >>> L1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    >>> matrix_to_dico(M1, L1)
    {'a': ['b', 'c', 'd'], 'b': ['a', 'd'], 'c': ['a', 'd', 'e'], 'd': ['a', 'b', 'c', 'e', 'f'], 'e': ['c', 'd', 'f'], 'f': ['d', 'e'], 'g': []}
    """
    # A COMPLETER
    pass

doctest.testmod()
# print("la matrice d' adjacence est : ", dico_to_matrix(G1))
# print("la matrice d' adjacence est : ", dico_to_matrix2(G1))
# print("le dictionnaire d' adjacence est : ", matrix_to_dico(M1, L1))
