# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
"""
Liste des sommets et des arêtes
Fonctions de pile et de file
Fonction d'affichage et de calcul de place en mémoire
"""

from sys import getsizeof
import matplotlib.pyplot as plt
import networkx as nx
import graphviz as gv
from time import time

## Affectations des sommets et arêtes
sommets = ['Dr Nozman', 'Doc Seven', 'FabienOlicard', 'DirtyBiology',
    'ScienceEtonnante', 'e-penser [archives]', 'Nota Bene', "C'est pas sorcier",
    'Max Bird', 'Axolot', 'Mickaël Launay', "C'est une autre histoire",
    'Jamy - Epicurieux', 'Balade Mentale', 'Les Revues du Monde', 'AstronoGeek',
    'Tu mourras moins bête - ARTE']

aretes = [
    ['Dr Nozman', 'Doc Seven'], ['Dr Nozman', 'Max Bird'],
    ['Dr Nozman', 'Mickaël Launay'], ['Doc Seven', 'FabienOlicard'],
    ['DirtyBiology', 'Axolot'], ['Nota Bene', 'Axolot'],
    ['Nota Bene', "C'est une autre histoire"],
    ["C'est pas sorcier", 'Max Bird'],
    ["C'est pas sorcier", 'Jamy - Epicurieux'], ['Max Bird', 'Doc Seven'],
    ['Max Bird', 'FabienOlicard'], ['Max Bird', 'Jamy - Epicurieux'],
    ['Max Bird', 'Balade Mentale'], ['Axolot', 'ScienceEtonnante'],
    ['Axolot', 'Nota Bene'], ['Axolot', 'Mickaël Launay'],
    ['Axolot', 'Balade Mentale'], ['Mickaël Launay', 'Axolot'],
    ["C'est une autre histoire", 'FabienOlicard'],
    ["C'est une autre histoire", 'ScienceEtonnante'],
    ["C'est une autre histoire", 'e-penser [archives]'],
    ["C'est une autre histoire", 'Nota Bene'],
    ["C'est une autre histoire", 'Axolot'],
    ["C'est une autre histoire", 'Mickaël Launay'],
    ["C'est une autre histoire", 'Balade Mentale'],
    ["C'est une autre histoire", 'Les Revues du Monde'],
    ['Jamy - Epicurieux', "C'est pas sorcier"],
    ['Balade Mentale', "C'est une autre histoire"],
    ['Balade Mentale', 'AstronoGeek']]

##  fonctions de graphes
def tracer_d(d):
    G = gv.Graph(strict=True)
    for s,aretes in d.items():
        G.node(s)
        for a in aretes:
            G.edge(s,a)
    G.render(view=True,format='png')

def tracer_m(M,s):
    G = gv.Graph(strict=True)
    for sommet in s:
        G.node(sommet)
    n = len(M)
    for i in range(n):
        for j in range(i,n):
            if M[i,j]==1 :
                G.edge(s[i],s[j])
    G.render(view=True,format='png')  
    
def mem_d(d):
    s=getsizeof(d)
    s_cle=0
    s_val=0
    for cle,valeurs in d.items():
        s_cle = getsizeof(cle)+s_cle
        for valeur in valeurs:
            s_val = getsizeof(valeur)+s_val
    return s+s_cle+s_val

def mem_m(M):
    s= getsizeof(M)
    s_val=0
    for i in range (len(M)):
        for j in range(len(M[0])):
            s_val += getsizeof(M[i,j])

    return s+s_val

##  fonctions de piles
def creer_pile():
    return []

def depiler(p):
    if not est_vide(p):
        return p.pop()

def empiler(p,v):
    p.append(v)
    
def taille(p):
    return len(p)

def est_vide(p):
    return len(p)==0

def sommet_p(p):
   if not est_vide(p):
       return p[-1]
   
##  fonctions de files
def creer_file():
    return []

def defiler(f):
    if not est_vide(f):
        return f.pop(0)

def enfiler(f,v):
    f.append(v)
    
def sommet_f(f):
   if not est_vide(f):
       return f[0]


