edges = set([(1,2), (2,3), (2,4), (2,5), (4,5), (4,6), (5,6), (4,7)])

def get_vecinos(nodo):
    vecinos = set() #Se crea un conjunto vacio para vecinos
    for f,t in edges:
        if f == nodo:
            vecinos.add(t)
        if t == nodo:
            vecinos.add(f)
    return vecinos

vecinos = get_vecinos(2)
N = len(vecinos)
posibles_links_entre_vecinos = N*(N-1)/2
posibles_links_entre_vecinos

nodos = set()
for f,t in edges:
    nodos.add(f)
    nodos.add(t)
    
nodos

vecinos
(1,2) in edges

#Numero de enlaces reales entre los vecinos
def get_links_vecinos(vecinos):
    enlaces_vecinos = 0
    for v in vecinos:
        for i in vecinos:
            if (v,i) in edges:
                enlaces_vecinos = enlaces_vecinos+1
    return enlaces_vecinos
       

# obtener coeficiente de clustering
def get_clustering_coeficient(nodo):
    numero_vecinos = get_vecinos(nodo)
    enlaces_entre_vecinos = get_links_vecinos(numero_vecinos)
    if len(numero_vecinos) == 1:
        ci = 0
    else:
        ci = (2*enlaces_entre_vecinos)/(len(numero_vecinos)*(len(numero_vecinos)-1))
    return ci
get_clustering_coeficient(2)

# Obtener coeficiente de clustering para todos los nodos
for j in nodos:
    coeficiente = get_clustering_coeficient(j)
    print("para el nodo: "+ str(j) + " El coeficiente de clustering es: " + str(coeficiente))

"""
Explanation: Ejercicios Weak Ties & Random Networks
Ejercicios básicos de redes
Ejercicio Clustering Coeficient
Calcule el coeficiente de clustering para cada nodo y en la red (sin dirección)
End of explanation
"""


import matplotlib
%matplotlib inline
import networkx as nx
#edges = set([('a','b'), ('a','c'), ('a','d'), ('a','e'), ('a','f'), ('c','f'), ('b','h'), ('f','j'), ('f','g'), ('j','g'), ('g','k'), ('g','h'), ('k','h')])

G = nx.Graph()
G.add_weighted_edges_from([('a','b',0.3),('a','c',1),('a','d',0.9),('a','e',1),('a','f',0.4),('c','f',0.2),('c','f',0.2),('b','h',0.2),('f','j',0.8),('f','g',0.9),('j','g',0.6),('g','k',0.4),('g','h',0.2),('k','h',1)])
nx.draw_networkx(G)

G.size(weight='weight')

"""
Explanation: Ejercicio Weigthed Netwroks
Cree una red no direccionada con los siguientes pesos.
(a, b) = 0.3
(a, c) = 1.0
(a, d) = 0.9
(a, e) = 1.0
(a, f) = 0.4
(c, f) = 0.2
(b, h) = 0.2
(f, j) = 0.8
(f, g) = 0.9
(j, g) = 0.6
(g, k) = 0.4
(g, h) = 0.2
(k, h) = 1.0
End of explanation
"""


A = nx.adjacency_matrix(G)
print(A.todense())

"""
Explanation: Imprima la matriz de adyasencia
End of explanation
"""


