Skip to content

Latest commit

 

History

History
2640 lines (1919 loc) · 62.1 KB

File metadata and controls

2640 lines (1919 loc) · 62.1 KB

Homotopy type of small graphs

import argparse
import random
import re
import math
import matplotlib.pyplot as plt
import mogutda
import networkx as nx
from pycliques.simplicial import clique_complex, nerve_of_sets
from pycliques.dominated import completely_pared_graph as p
from pycliques.dominated import (
    has_dominated_vertex,
    complete_s_collapse,
    complete_s_collapse_edges
    )
from pycliques.cliques import clique_graph as kfrom pycliques.cliques import clique_graph as k
from pycliques.cliques import Clique
from pycliques.helly import is_clique_helly
from pycliques.lists import list_graphs
from pycliques.surfaces import open_neighborhood

from homsmall import *

def plot_neighborhoods(g):
    n = g.order()
    for i in range(n):
        rows = int(math.sqrt(n))
        columns = math.ceil(n/rows)
        plt.subplot(rows, columns, i+1)
        plt.title(i)
        nx.draw(open_neighborhood(g, i), node_size=200, with_labels='True')
    plt.show()

#+RESULTS[504e152d7b74288cbb2350cb9467bcad79fb003c]:

Test

from pycliques.simplicial import SimplicialComplex

s_c = SimplicialComplex([1,2,3,4,5,6], facet_set=[{1,3,4,6}, {1,2,4}, {2,4,5}, {3, 6}, {5, 6}])
homotopy_type_s_c(s_c)

#+RESULTS[c7b4607cda64ddb876b4b4efc30107c78cfc739b]:

'\\(S^{1}\\)'
suspend_string_with_s1s("\\(S^{1}\\vee S^{2}\\)", 2)

#+RESULTS[6141dcc69fd51c4df6b309bdf8b97d19ae0cc9c1]:

\(\vee_{2}S^{1}\vee S^{2}\)

10 vertices

file 15

graphs = nx.read_graph6("./data/graph10c015.g6")
len(graphs)

#+RESULTS[546eb37daa0b42ac2696b281d51dbc11a31a7bd3]:

100000
g = graphs[75299]
nx.draw(g, with_labels=True)

#+RESULTS[bf838a9617d4d5e4c17ea62a60be34d55b25c575]: ./.ob-jupyter/1e07a0272621eb5a7d46cce627ca4e872572a6ce.png

homotopy_type(g)

#+RESULTS[0a65031658d1b0a0ed4adf3237d00928c254e21c]:

\(\vee_{5}S^{1}\vee S^{2}\)
betti_numbers(nx.convert_node_labels_to_integers(g))

#+RESULTS[d72c9d11be723936ab591f972af1104a7dbbe304]:

[0, 5, 1]
h_type_using_star_cluster(g)

#+RESULTS[9666f24ed3bc3cb45703dbcf0394d7800867b4c8]:

False
h_type_by_special_neigh(g)

#+RESULTS[da82a8298c9583f11882248f10c133f02e86cb9c]:

False
graph = g
neighs = [(i, open_neighborhood(graph, i)) for i in graph.nodes()]
filt = [v for (v, nei) in neighs if is_disjoint_union_of_two_completes(nei)]
filt2 = [v for v in filt if nx.is_connected(graph.subgraph(set(graph.nodes()-{v})))]
filt2

#+RESULTS[8668091b812f4fea342b524d0a01a3dea36fab80]:

03
v = filt2[0]
h = graph.subgraph(set(graph.nodes())-{v})
h_type = homotopy_type(nx.convert_node_labels_to_integers(h))
h_type

#+RESULTS[f6415402789e78333a96309d7184a2954d598803]:

\(\vee_{3}S^{1}\vee S^{0}\vee S^{2}\)
nx.draw(h, with_labels=True)

#+RESULTS[9bc0ff8288ae7daa2abd0cdf6ee1469f4a44a3e0]: ./.ob-jupyter/7c5d738845245e2ad5b20225cf3ebb26b258f43c.png

betti_numbers(nx.convert_node_labels_to_integers(h))

#+RESULTS[16031949c7d82a5d16ec441e77f1923e1cdd30d3]:

021
homotopy_type(h)

#+RESULTS[29fe9fe1f949efd0d2a664d08528a50c55e174d9]:

\(\vee_{3}S^{1}\vee S^{0}\vee S^{2}\)
nx.draw(nx.complement(h))

#+RESULTS[cb38b21b18dad5c5a37e30d591aa0622597a19f1]: ./.ob-jupyter/ecb2cb5a85565d580d88c81ea916b3bca494e68f.png

h_type_using_star_cluster(h)

#+RESULTS[76008ebb38de474519ff9bca95c8280fc5928078]:

False
h_type_by_special_neigh(h)

#+RESULTS[4979ab9a7bd617753eb65e38e68840bb2f688935]:

\(\vee_{3}S^{1}\vee S^{0}\vee S^{2}\)
graph = h
neighs = [(i, open_neighborhood(graph, i)) for i in graph.nodes()]
filt = [v for (v, nei) in neighs if is_disjoint_union_of_two_completes(nei)]
filt2 = [v for v in filt if nx.is_connected(graph.subgraph(set(graph.nodes()-{v})))]
filt2

#+RESULTS[4a05f858d00b826b97365488589ff99942f79b57]:

[3, 6]
v = filt2[0]
h2 = graph.subgraph(set(graph.nodes())-{v})
h_type = homotopy_type(nx.convert_node_labels_to_integers(h2))
h_type
nx.draw(h2, with_labels=True)

#+RESULTS[5fefafb0a2db8053bd9ac986ea2b43f394b74f60]: ./.ob-jupyter/3beb4f89341b6e98455d17bf56ed77f7fb0f43a1.png

nx.draw(nx.complement(g), with_labels=True)

#+RESULTS[dac7ea45379cb9e5d94906e8ae5b91fdc695b488]: ./.ob-jupyter/fe0f4105fe994740d717f64d77f45929891547e4.png

kg = k(g)
kg.order()

#+RESULTS[59755e62105ba8e6b8505f94d21109ffd85c24ba]:

20
nx.draw(nx.complement(kg), with_labels=True)

#+RESULTS[e2e989d14cf8f110ee33a8a52036b6f910f71f10]: ./.ob-jupyter/5e442432005b07fdad7cb02c23fa58dcf3e3d102.png

%time homotopy_type(kg)

#+RESULTS[c040a406e02f5a4f791f5a3cf20cdb5e3ad246c6]:

CPU times: user 45.6 ms, sys: 414 µs, total: 46 ms
Wall time: 44.9 ms
\(S^{2}\vee \vee_{2}S^{3}\)
betti_numbers(nx.convert_node_labels_to_integers(kg))

#+RESULTS[a1726846ab78a7166ec8e225d9374c322c6026c3]:

[0, 0, 1, 2]
graph=kg
graph = nx.convert_node_labels_to_integers(graph)
c_graph = nx.complement(graph)
verts = [i for i in c_graph.nodes() if open_neighborhood(c_graph, i).size() == 0]
verts

#+RESULTS[6543c0f2292a2b3c513998c2d68e7ef8960119e5]:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
vertex=0
IG = clique_complex(graph)
ST = star(IG, vertex)
SC = star_cluster(IG, c_graph[vertex])
ST, SC

#+RESULTS[cdfde9bf52ede565cd0c3766d6234724e5afa2e7]:

'(Simplicial complex with vertex_set (0  1  2  3  4  5  6  7  8  9  10  11  12  13) and facets ((0  1  4  5  11)  (0  1  2  3  10)  (0  2  3  7  13)  (0  1  10  11)  (0  2  3  10  12  13)  (0  1  2  3  4  5  6  7  8  9)  (0  2  3  6  12)  (0  10  11  12  13)). 
 Simplicial complex with vertex_set (1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19) and facets ((8  19  5  14)  (17  3  6  7  8  9)  (16  2  10  12  13)  (19  5  11  14  15)  (16  2  12  6)  (17  3  12  6)  (18  4  6  7  8  9)  (10  11  12  13  14  15  16  17  18  19)  (17  3  10  12  13)  (9  19  5  15)  (1  4  5  8  14)  (16  17  18  19  7  13)  (19  5  6  7  8  9)  (16  2  6  7  8  9)  (18  4  11  14  15)  (1  4  5  9  15)  (16  17  18  19  8  14)  (8  18  4  14)  (16  2  13  7)  (1  10  11  14  15)  (6  7  8  9  16  17  18  19)  (16  17  18  19  6  12)  (16  17  18  19  9  15)  (9  18  4  15)  (17  3  13  7)  (1  4  5  11  14  15)).)
int_c = intersection_complex(ST, SC)
int_c

#+RESULTS[f1f0510225ccfd0764ac48080bd667f8aace410e]:

Simplicial complex with vertex_set {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13} and facets {{10, 11, 12, 13}, {2, 13, 7}, {2, 10, 12, 13}, {8, 1, 4, 5}, {1, 4, 5, 9}, {10, 3, 12, 13}, {3, 12, 6}, {1, 11, 4, 5}, {3, 6, 7, 8, 9}, {2, 12, 6}, {1, 10, 11}, {4, 6, 7, 8, 9}, {5, 6, 7, 8, 9}, {2, 6, 7, 8, 9}, {3, 13, 7}}.
csc = collapse(int_c)
csc

#+RESULTS[dd822ebb04f25f10c4ce061b62362bfddad241ee]:

Simplicial complex with vertex_set {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13} and facets {{2, 13, 7}, {8, 1, 5}, {9, 4, 6}, {3, 12, 13}, {8, 1, 4}, {9, 4, 5}, {3, 13, 7}, {10, 12, 13}, {2, 12, 6}, {11, 4}, {8, 9, 6}, {11, 13}, {2, 6, 7}, {8, 4, 6}, {2, 10, 12}, {1, 4, 5}, {3, 6, 7}, {8, 9, 5}, {3, 12, 6}, {2, 10, 13}}.
special_vertex_in_s_c(csc)

#+RESULTS[6ae13e145ed25025971182030b30e8227d2d3dad]:

11
s_c = csc
vertex = 11
s_c2 = s_c.deletion(vertex)
h_type = homotopy_type_s_c(s_c2)
s_neigh = len(s_c.link(11).vertex_set)
h_type, s_neigh

#+RESULTS[695a1bcaa9ee8d00ab9b9131a38eaa229f0f9d33]:

('\\(\\vee_{2}S^{2}\\)', 2)
homotopy_type_s_c(csc)

#+RESULTS[c5d601cedec923c22244ef96602f93d0d3fc256e]:

\(S^{1}\vee \vee_{2}S^{2}\)
csc2 = csc.deletion(11)
csc2

#+RESULTS[e5b1b796e8a58796e6b1f86828fbd2b45899c73e]:

Simplicial complex with vertex_set {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13} and facets {{2, 13, 7}, {8, 9, 6}, {8, 1, 5}, {2, 6, 7}, {9, 4, 6}, {3, 12, 13}, {10, 12, 13}, {8, 9, 5}, {3, 12, 6}, {2, 10, 13}, {2, 12, 6}, {8, 4, 6}, {2, 10, 12}, {1, 4, 5}, {8, 1, 4}, {3, 6, 7}, {9, 4, 5}, {3, 13, 7}}.
is_vertex_decomposable(csc2)

#+RESULTS[978d5a388faa9961ed7d7b66189d4b37e226a8f8]:

False
csc2.dong_matching(order_function=_shuff)

#+RESULTS[38c5b5b25b06d55c5245665253514a2ff3bd7585]:

{{2, 10, 12}, {9, 4, 5}}
is_vertex_decomposable(csc)

#+RESULTS[c2e0eaee9580a80bd52ebb98847acc1a339794ac]:

False
csc.is_clique_complex()

#+RESULTS[2f9774427da278b00f323bedbb2a593451ce6959]:

False
def _shuff(lista):
    return random.sample(list(lista), len(lista))

csc.dong_matching(order_function=_shuff)

#+RESULTS[9ecbb04ea3c324fb3804719e482ae6d801e2793c]:

{{8, 9, 6}, {10, 12, 13}, {11, 13}}
betti_numbers_c(csc)

#+RESULTS[ee4037d4f65fb31beb9a5c1c562d899123df3c1d]:

[0, 1, 2]

file 16

graphs = nx.read_graph6("./data/graph10c016.g6")
len(graphs)

#+RESULTS[046fb76b6c91ca89e71eab45b54a0f7a6e054f78]:

100000

65424

g = graphs[65424]
nx.draw(g, with_labels=True)

#+RESULTS[7b1f642e67623ed939b269e4f788fe48bb0d6ece]: ./.ob-jupyter/b91a6bd5bddd681576334bf7ab4a8e4e62664fa8.png

homotopy_type(g)

#+RESULTS[0a65031658d1b0a0ed4adf3237d00928c254e21c]:

\(\vee_{8}S^{2}\)
nx.draw(nx.complement(g), with_labels=True)

#+RESULTS[dac7ea45379cb9e5d94906e8ae5b91fdc695b488]: ./.ob-jupyter/8a6b4cf7164a1949bb476cc7b2bbcf0f956daded.png

c_v = find_special_cutpoint(g)
c_v
kg = k(g)
kg.order()

#+RESULTS[754a3660756ecbe6438f4931bf8d4ec945f79778]:

30
%time homotopy_type(kg)
nx.draw(nx.complement(kg))

#+RESULTS[470f322eec84af19d6222d75f97f716fea377d82]: ./.ob-jupyter/c55cbb4bfa9e0d1e56f032d09101d04fdf583a3d.png

h_type_by_special_neigh(kg)

#+RESULTS[00fb8862b3e6559e2fba69866ba0d0dacafae2cc]:

False
h_type_using_star_cluster(kg)

#+RESULTS[12c9449c65728141c6f781e6b24de3cf1404c79b]:

\(\vee_{52}S^{3}\)
h_graph = g.subgraph(set(g.nodes())-{1})
kh = k(h_graph)
nx.draw(kh, with_labels=True)

#+RESULTS[325f36810743b4ef7707871af1faee9920f2eabb]: ./.ob-jupyter/5e696e4cd7dd49f40d0f04418fe7b56a4988a5bf.png

homotopy_type(kh)
graph = kh
neighs = [(i, open_neighborhood(graph, i)) for i in graph.nodes()]
filt = [v for (v, nei) in neighs if is_disjoint_union_of_two_completes(nei)]
filt

#+RESULTS[521d754155f212e59d766c6319de8d8b1b010c77]:

[{8, 0}, {8, 2}, {8, 4}, {9, 4}, {0, 6}, {3, 6}, {0, 5, 7}]
u = Clique({0,8})
nx.draw(open_neighborhood(kh, u), with_labels=True)

#+RESULTS[d996ce5be6c616f677db37342d2a53d3b53bb223]: ./.ob-jupyter/b2b983841678948b4785b0159abe8ce8feb7c937.png

h2_graph = kh.subgraph(set(kh.nodes())-{u})
nx.draw(h2_graph, with_labels=True)

graph = h2_graph
neighs = [(i, open_neighborhood(graph, i)) for i in graph.nodes()]
filt = [v for (v, nei) in neighs if is_disjoint_union_of_two_completes(nei)]
filt

#+RESULTS[87516e6e3648e73be1d93b3fe92ff481c6e0307b]:

[{8, 2}, {8, 4}, {9, 4}, {0, 6}, {3, 6}, {0, 5, 7}]
h3_graph = h2_graph.subgraph(set(h2_graph.nodes())-{Clique({8,2})})
nx.draw(h3_graph, with_labels=True)

#+RESULTS[b2225d4b30fc89dd9e10610d55455068c688f509]: ./.ob-jupyter/51c8aa93e6823904151fba045160c28fa26b55f4.png

homotopy_type(h3_graph)
graph = h3_graph
neighs = [(i, open_neighborhood(graph, i)) for i in graph.nodes()]
filt = [v for (v, nei) in neighs if is_disjoint_union_of_two_completes(nei)]
filt

#+RESULTS[ba0fb0472e819f745bc112e4ad199192afdc6941]:

[{9, 4}, {0, 6}, {3, 6}, {0, 5, 7}]
read_betti_numbers([])

#+RESULTS[d8661ff22f52f9d57de1e50dc9b19f3636a8c4b2]:

Contractible
import mogutda
a=mogutda�[0m�[0;34m.�[0m�[0mSimplicialComplex�[0m�[0;34m(�[0m�[0msimplices�[0m�[0;34m=�[0m�[0m[])�[0m�[0;34m�[0m�[0;34m�[0m�[0m

#+RESULTS[ef76ade66dba9a4068d43683aac748ef4f6667bb]:

�[0;36m  File �[0;32m"<ipython-input-35-6aae8895981f>"�[0;36m, line �[0;32m2�[0m
�[0;31m    a=mogutda�[0m�[0;34m.�[0m�[0mSimplicialComplex�[0m�[0;34m(�[0m�[0msimplices�[0m�[0;34m=�[0m�[0m[])�[0m�[0;34m�[0m�[0;34m�[0m�[0m�[0m
�[0m             ^�[0m
�[0;31mSyntaxError�[0m�[0;31m:�[0m invalid syntax

41365

g = graphs[41365]
nx.draw(g, with_labels=True)

#+RESULTS[7de4a73e73da4ead6e75ff6ab3fe8ec5172e9610]: ./.ob-jupyter/92934e191bc465498faf39006297626705fd9df4.png

homotopy_type(g)

#+RESULTS[0a65031658d1b0a0ed4adf3237d00928c254e21c]:

\(\vee_{2}S^{1}\vee \vee_{2}S^{2}\)
kg = p(k(g))
kg.order()

#+RESULTS[77f867acb9b7426eb13c0ac87a7435acaa671ec3]:

18
betti_numbers(nx.convert_node_labels_to_integers(kg))

#+RESULTS[a1726846ab78a7166ec8e225d9374c322c6026c3]:

[0, 2, 0, 4]
c_v = find_special_cutpoint(g)
c_v

#+RESULTS[24c2d7d850014e31f9d7ca5b2c692f5dc5bc85ec]:

2
h_graph = g.subgraph(set(g.nodes())-{2})
kh = k(h_graph)
nx.draw(kh, with_labels=True)

#+RESULTS[f8f934337464729db2bbe040c8cbabfa57d7e987]: ./.ob-jupyter/0f0f5d443f7095a7524a0e69408e7418171fb165.png

graph = kh
neighs = [(i, open_neighborhood(graph, i)) for i in graph.nodes()]
filt = [v for (v, nei) in neighs if is_disjoint_union_of_two_completes(nei)]
filt

#+RESULTS[1c333d02cb5f4160999d7e525a48af2249087cea]:

[{0, 5}, {1, 5}]
h_type_by_special_neigh(kh)

#+RESULTS[c8bee3eb674935693937ec6c7532056381cba15e]:

\(S^{1}\vee \vee_{4}S^{3}\)
homotopy_type(kh)

#+RESULTS[521d754155f212e59d766c6319de8d8b1b010c77]:

\(S^{1}\vee \vee_{4}S^{3}\)
u = Clique({1,5})
nx.draw(open_neighborhood(kh, u), with_labels=True)

#+RESULTS[876b5d3b9083835dac2061923d5f97e8765dda32]: ./.ob-jupyter/ce8ea82973373692db0041b7ec10e2dba604233e.png

is_disjoint_union_of_two_completes(open_neighborhood(kh,u))

#+RESULTS[7f32d6ad26df662b69aaa4454e74a3479a9d9643]:

False
homotopy_type(kh)
h_type_by_special_neigh(kh)
h2_graph = kh.subgraph(set(kh.nodes())-{u})
nx.draw(h2_graph, with_labels=True)
%time homotopy_type(h2_graph)
h_type_as_join_complement(kh)

#+RESULTS[21561281749cef2e2fdf0dd427553c1d2197a8c1]:

False
nx.draw(nx.complement(kh), with_labels=True)

#+RESULTS[d4983db439c31e201bf3d28762a2e4fcbcbe5269]: ./.ob-jupyter/a827e9174de0684c59ec7c24a335d60c50f7cd4a.png

h_type_using_star_cluster(kh)

#+RESULTS[70930637f383572927f9c6768ba6859ca2f9ff2e]:

False
h_type_by_special_neigh(kh)

#+RESULTS[c8bee3eb674935693937ec6c7532056381cba15e]:

False

41377

g = graphs[41377]
nx.draw(g, with_labels=True)
homotopy_type(g)

#+RESULTS[0a65031658d1b0a0ed4adf3237d00928c254e21c]:

\(\vee_{2}S^{1}\vee \vee_{3}S^{2}\)
kg = p(k(g))
kg.order()
betti_numbers(nx.convert_node_labels_to_integers(kg))
homotopy_type(kg)
c_v = find_special_cutpoint(g)
c_v
h_graph = g.subgraph(set(g.nodes())-{2})
kh = k(h_graph)
nx.draw(kh, with_labels=True)

#+RESULTS[f8f934337464729db2bbe040c8cbabfa57d7e987]: ./.ob-jupyter/56f337b1967e541bbc8919cb07ce49d6de840f47.png

h_type_by_special_neigh(kh)

#+RESULTS[c8bee3eb674935693937ec6c7532056381cba15e]:

\(S^{1}\vee \vee_{9}S^{3}\)
u = Clique({1,5})
nx.draw(open_neighborhood(kh, u), with_labels=True)

#+RESULTS[ca5d9f7cb8dc4335a82e6d964885caacddedb3b4]: ./.ob-jupyter/2a00657ec6745a8b578a14c8cb78167fdf9995f1.png

h2_graph = kh.subgraph(set(kh.nodes())-{u})
nx.draw(h2_graph, with_labels=True)

#+RESULTS[b39777b6557dfe4e1e96de21cfb3f105b7e13328]: ./.ob-jupyter/ae5c3e62e6a3ec4fac1e36f7d9bc78c2fcd14251.png

%time homotopy_type(h2_graph)

#+RESULTS[edbe8985a6f591376e308ae1329b1dfc0765eb54]:

CPU times: user 42.8 ms, sys: 1.2 ms, total: 44 ms
Wall time: 42.8 ms
\(\vee_{9}S^{3}\)

41849

g = graphs[41849]
nx.draw(g, with_labels=True)

#+RESULTS[114c0130d1799715370a5ba666c51ac7db5945bb]: ./.ob-jupyter/6baa52782575d675584ec82b483e57d5a77fd25c.png

homotopy_type(g)
kg = p(k(g))
kg.order()
betti_numbers(nx.convert_node_labels_to_integers(kg))
c_v = find_special_cutpoint(g)
c_v
h_graph = g.subgraph(set(g.nodes())-{2})
kh = k(h_graph)
nx.draw(kh, with_labels=True)
u = Clique({0,5})
nx.draw(open_neighborhood(kh, u), with_labels=True)

#+RESULTS[247dba5f577c31a121a13b09f333c72e3e683776]: ./.ob-jupyter/002ec7644d70f0ae633bde42b811394dcac67f26.png

h2_graph = kh.subgraph(set(kh.nodes())-{u})
nx.draw(h2_graph, with_labels=True)
%time homotopy_type(h2_graph)

49151

g = graphs[49151]
nx.draw(g, with_labels=True)

#+RESULTS[ea9a05ee4da9383582111ca901061ab4679868a0]: ./.ob-jupyter/485e4fbafd5b829534bc92fcd611d6b92263513b.png

homotopy_type(g)
kg = p(k(g))
kg.order()

#+RESULTS[77f867acb9b7426eb13c0ac87a7435acaa671ec3]:

20
betti_numbers(nx.convert_node_labels_to_integers(kg))

#+RESULTS[a1726846ab78a7166ec8e225d9374c322c6026c3]:

[0, 2, 0, 7]
c_v = find_special_cutpoint(g)
c_v
h_graph = g.subgraph(set(g.nodes())-{3})
kh = k(h_graph)
nx.draw(kh, with_labels=True)

#+RESULTS[05a3ccf8359f7db8d093128b9d7972eb444ae21d]: ./.ob-jupyter/af480538955d261ca9096c05d49876c64ba95a1d.png

homotopy_type(kh)

#+RESULTS[521d754155f212e59d766c6319de8d8b1b010c77]:

\(S^{1}\vee \vee_{7}S^{3}\)
u = Clique({4,9})
nx.draw(open_neighborhood(kh, u), with_labels=True)

#+RESULTS[00371e6158d8ea50bd27f01bf714950dfd3951bd]: ./.ob-jupyter/23df514ca7fdaaf0d076f23a3d4b08956a6b16ab.png

h2_graph = kh.subgraph(set(kh.nodes())-{u})
nx.draw(h2_graph, with_labels=True)
%time homotopy_type(h2_graph)

#+RESULTS[edbe8985a6f591376e308ae1329b1dfc0765eb54]:

CPU times: user 46.3 ms, sys: 1.66 ms, total: 47.9 ms
Wall time: 46.7 ms
\(\vee_{9}S^{3}\)

file 35

graphs = nx.read_graph6("./data/graph10c035.g6")
len(graphs)

#+RESULTS[f7e4b70a6afee285c68b37799a88d28b91ddafc0]:

100000

82636

g = graphs[82636]
nx.draw(g, with_labels=True)

#+RESULTS[8c5876fb2bd28ece850123d6ef1da730507fd1a7]: ./.ob-jupyter/8e75cf52de14104e5a4f6811c26f9874e82a94cb.png

homotopy_type(g)
kg = k(g)
kg.order()
homotopy_type(kg)

#+RESULTS[fbf2f7611a53e0e90798d306174f418b8531b3e5]:

\(\vee_{5}S^{1}\)
is_clique_helly(g)

#+RESULTS[25b59f4fd4275efb7ff1f1ec2c69970b8208da7e]:

True

file 55

graphs = nx.read_graph6("./data/graph10c055.g6")
len(graphs)

#+RESULTS[edb186c4eabe11e1f58844a4469f85f52950883d]:

100000

72330

g = graphs[72330]
nx.draw(g, with_labels=True)

#+RESULTS[e72df4edfa21b46a6ab928aeea05f4762cdce169]: ./.ob-jupyter/9b0e6f4b2859911c6abaae843b71188843f6cb76.png

homotopy_type(g)
nx.draw(nx.complement(g), with_labels=True)
kg = k(g)
kg.order()

#+RESULTS[59755e62105ba8e6b8505f94d21109ffd85c24ba]:

20
homotopy_type(kg)

#+RESULTS[fbf2f7611a53e0e90798d306174f418b8531b3e5]:

\(S^{1}\vee S^{2}\vee \vee_{2}S^{3}\)
betti_numbers(nx.convert_node_labels_to_integers(kg))

#+RESULTS[a1726846ab78a7166ec8e225d9374c322c6026c3]:

[0, 1, 1, 2]
c_v = find_special_cutpoint(g)
c_v
h_graph = g.subgraph(set(g.nodes())-{4})
kh = k(h_graph)
nx.draw(kh, with_labels=True)

#+RESULTS[70337cca21e6712f81f58f4264369dcba88157f5]: ./.ob-jupyter/946da2f3336b0b42bc45262aac07309dc4410295.png

h_type_by_special_neigh(kh)
betti_numbers(nx.convert_node_labels_to_integers(kh))

#+RESULTS[61b3999f0ae5711d79ca68d0a8e273d86e789fa4]:

[0, 0, 1, 2]
nx.draw(nx.complement(kh), with_labels=True)

#+RESULTS[d4983db439c31e201bf3d28762a2e4fcbcbe5269]: ./.ob-jupyter/2bfef8eb09603e0555555a163e8f9a0bc3b3f6d2.png

graph=kh
graph = nx.convert_node_labels_to_integers(graph)
c_graph = nx.complement(graph)
verts = [i for i in c_graph.nodes() if open_neighborhood(c_graph, i).size() == 0]
verts

#+RESULTS[a4738238725b540172f856c4ef826f1c88324cd3]:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
vertex=0
IG = clique_complex(graph)
ST = star(IG, vertex)
SC = star_cluster(IG, c_graph[vertex])
ST, SC
int_c = intersection_complex(ST, SC)
int_c
csc = collapse(int_c)
csc
%time is_vertex_decomposable(csc)

#+RESULTS[b84eba05557e3a724a3d80c738f2bf53e2c72f1c]:

CPU times: user 820 ms, sys: 0 ns, total: 820 ms
Wall time: 818 ms
False
betti_numbers_c(csc)

#+RESULTS[ee4037d4f65fb31beb9a5c1c562d899123df3c1d]:

[0, 1, 2]
csc2 = csc.deletion(11)
csc2
is_vertex_decomposable(csc2)
csc2.dong_matching()

#+RESULTS[5a4b0c3d236b7952ba5cba5d513de5fa64c45888]:

{{8, 6, 7}, {9, 10, 12}}

72516

g = graphs[72516]
nx.draw(g, with_labels=True)
homotopy_type(g)

#+RESULTS[0a65031658d1b0a0ed4adf3237d00928c254e21c]:

\(\vee_{4}S^{2}\)
nx.draw(nx.complement(g), with_labels=True)

file 65

graphs = nx.read_graph6("./data/graph10c065.g6")
len(graphs)

#+RESULTS[e33780d824681eaf8318bfdc5a9b028a9bd4b977]:

100000
g = graphs[85534]
nx.draw(g, with_labels=True)
homotopy_type(g)

#+RESULTS[0a65031658d1b0a0ed4adf3237d00928c254e21c]:

\(\vee_{3}S^{2}\)
nx.draw(nx.complement(g), with_labels=True)
kg = k(g)
kg.order()
%time homotopy_type(kg)

#+RESULTS[f1dadd0ddfb692dd1fb30b5c00423eba6e177baf]:

CPU times: user 3min 50s, sys: 12.7 ms, total: 3min 50s
Wall time: 3min 50s
\(S^{2}\vee \vee_{2}S^{3}\)
c_v = find_special_cutpoint(g)
c_v
nx.draw(nx.complement(kg), with_labels=True)

#+RESULTS[e2e989d14cf8f110ee33a8a52036b6f910f71f10]: ./.ob-jupyter/f40fa56635216e9c5bc253c64a7c22ef48f73a10.png

graph = kg
graph = nx.convert_node_labels_to_integers(graph)
c_graph = nx.complement(graph)
verts = [i for i in c_graph.nodes() if open_neighborhood(c_graph, i).size() == 0]
verts

#+RESULTS[b1813d3ca52e93bf6fd1477d7e900a1fd5867203]:

[6, 19]
vertex = verts[0]
IG = clique_complex(graph)
ST = star(IG, vertex)
SC = star_cluster(IG, c_graph[vertex])
int_c = intersection_complex(ST, SC)
csc = collapse(int_c)
csc

#+RESULTS[97f86fd2577bfb1d192e30a1d45ca10375913cb7]:

Simplicial complex with vertex_set {0, 1, 2, 3, 4, 5, 7, 8, 11, 12, 16, 17, 18, 19} and facets {{8, 2, 11}, {0, 17, 4}, {16, 11}, {0, 17, 5}, {8, 1, 2}, {1, 2, 3}, {2, 3, 7}, {1, 18, 4}, {8, 11, 12}, {11, 12, 7}, {0, 1, 4}, {17, 18, 4}, {8, 3, 12}, {19, 4}, {8, 1, 3}, {17, 18, 5}, {1, 18, 5}, {16, 19}, {3, 12, 7}, {0, 1, 5}, {2, 11, 7}}.
csc2 = csc.deletion(19)
csc2.dong_matching()

#+RESULTS[528a6511520c44a6868dddc96f4415fc0c2e3876]:

{{17, 18, 5}, {8, 11, 12}}

file 66

graphs = nx.read_graph6("./data/graph10c066.g6")
len(graphs)

#+RESULTS[76d537c8cfea619e648bd1c0ce45c60cc2af6517]:

100000

399

g = graphs[399]
nx.draw(g, with_labels=True)

#+RESULTS[37ce8f7a5a6b00e949a7a375dd3da6ebca03c934]: ./.ob-jupyter/312be18eec1637931538dbab8c1ba60b4e3c7104.png

homotopy_type(g)

#+RESULTS[0a65031658d1b0a0ed4adf3237d00928c254e21c]:

\(\vee_{3}S^{2}\)
kg = k(g)
kg.order(), kg.size()
pkg = p(kg)
pkg.order()

#+RESULTS[dcac00d60f7289f5fbaf68de70876427a1732889]:

20
nx.draw(nx.complement(g), with_labels=True)
graph = kg
graph = nx.convert_node_labels_to_integers(graph)
c_graph = nx.complement(graph)
verts = [i for i in c_graph.nodes() if open_neighborhood(c_graph, i).size() == 0]
verts
ckg = nx.convert_node_labels_to_integers(kg)
ckg = simplify_ht(ckg)
ckg.order(), ckg.size()
graph = ckg
graph = nx.convert_node_labels_to_integers(graph)
c_graph = nx.complement(graph)
verts = [i for i in c_graph.nodes() if open_neighborhood(c_graph, i).size() == 0]
verts

#+RESULTS[c8c6a0eda89cba81d362b5cadbab1bf338e54fae]:

[]
nx.draw(ckg)

#+RESULTS[bb450c62797435e966a00375aa7041d2bbcfa6ff]: ./.ob-jupyter/7ff9d9c53b3231a64094742d4a9d25bc67b62978.png

h_type_by_special_edges(kg)

#+RESULTS[e784e0b574945ef52532cdfc67ad30d378af372f]:

False
nx.draw(nx.complement(ckg))

#+RESULTS[b212c3a4ff89ab1ad1c5877a0a813a07603f565b]: ./.ob-jupyter/d19d3935d81095dc4a857bb2096c1da9731759fa.png

h_type_by_special_neigh(kg)

#+RESULTS[00fb8862b3e6559e2fba69866ba0d0dacafae2cc]:

False
h_type_by_special_neigh(ckg)

#+RESULTS[b01403a6f89ed897c31677a788f4afd6b22dd8d1]:

False
clique_complex(ckg).dong_matching()

#+RESULTS[7872d9fdf3083e58f8c5af4a6e162341421db55a]:

16171819
16181213
81315
16171914
16171811
is_vertex_decomposable(clique_complex(ckg))

#+RESULTS[ca4d14e1e91a13e5f2d5919bf3ae79b6d7e8d5f2]:

True
betti_numbers(ckg)

#+RESULTS[71850be91e56462762c64db3e0dee04891590581]:

0014

27381

g = graphs[27381]
nx.draw(g, with_labels=True)

#+RESULTS[324f283630eda193461afcd4f9f088862005fd88]: ./.ob-jupyter/a3a53d817dbdcb994c49d8d09a9b490e779336c0.png

plot_neighborhoods(g)

#+RESULTS[243ffa5633f36445681fa803d39a9bec9dbbe20d]: ./.ob-jupyter/a5727c41e5a28da36e3e05edca352ca98c8f8db2.png

nx.draw(nx.complement(g), with_labels=True)

#+RESULTS[dac7ea45379cb9e5d94906e8ae5b91fdc695b488]: ./.ob-jupyter/8d96b3e9d2ed8287fffb4ad626d4db48ade6280f.png

homotopy_type(g)
kg = k(g)
kg.order(), kg.size()

#+RESULTS[6b5d363ef99d596b2eb54409586f787e392b1c2a]:

(21, 142)
nx.draw(kg, with_labels=True)

#+RESULTS[6e26723d9a6fb88c3c21e0ed06083e108594e11a]: ./.ob-jupyter/c1d60bfd2f8cf5cc1e1c2e8050e11c009e8c6fff.png

graph = kg
graph = nx.convert_node_labels_to_integers(graph)
c_graph = nx.complement(graph)
verts = [i for i in c_graph.nodes() if open_neighborhood(c_graph, i).size() == 0]
verts
h_type_using_star_cluster(kg)

#+RESULTS[12c9449c65728141c6f781e6b24de3cf1404c79b]:

\(S^{2}\vee \vee_{2}S^{3}\)
homotopy_type(kg)
ckg = nx.convert_node_labels_to_integers(kg)
ckg = simplify_ht(ckg)
ckg.order(), ckg.size()

#+RESULTS[5a1911e0998e998bb6f2060ae6b855b2a27cfae8]:

(17, 58)
nx.draw(ckg, with_labels=True)

#+RESULTS[c911913d8c5e512f8c50308fdf534b10a01a4b46]: ./.ob-jupyter/7e0af8874c84694bee92e7c9cc0a47cf0a02d1ab.png

h_type_by_cutpoints(ckg)

#+RESULTS[0ca15b6e2686985da438d1b69864a417e00d41e3]:

\(S^{2}\vee S^{3}\)
find_cutpoints(ckg)

#+RESULTS[c4c26a5938a0c36e5aabf5d678a1c8e2e24e0bea]:

5
vertex = 5
graph = ckg
c_graph = graph.copy()
c_graph.remove_node(vertex)
comps = [c.union({vertex}) for c in nx.connected_components(c_graph)]
comps

#+RESULTS[f6f81d1f8046a7a517a8aaabd43882bf566f2a61]:

[{0, 1, 4, 5, 12, 13, 16, 17}, {5, 6, 7, 11, 14, 15, 18}]
nx.draw(ckg, with_labels=True)

#+RESULTS[c911913d8c5e512f8c50308fdf534b10a01a4b46]: ./.ob-jupyter/fdd1d94906a1963e00be25b7e09e419b16c6dc70.png

nx.draw(nx.complement(kg), with_labels=True)
c_v = find_special_cutpoint(g)
c_v
graph = kg
graph = nx.convert_node_labels_to_integers(graph)
c_graph = nx.complement(graph)
verts = [i for i in c_graph.nodes() if open_neighborhood(c_graph, i).size() == 0]
verts
h_type_using_star_cluster(kg)

#+RESULTS[12c9449c65728141c6f781e6b24de3cf1404c79b]:

\(S^{2}\vee S^{3}\)
h_type_by_special_neigh(kg)

#+RESULTS[00fb8862b3e6559e2fba69866ba0d0dacafae2cc]:

False
betti_numbers(nx.convert_node_labels_to_integers(kg))

#+RESULTS[a1726846ab78a7166ec8e225d9374c322c6026c3]:

[0, 1, 0, 2]
plot_neighborhoods(nx.convert_node_labels_to_integers(kg))

#+RESULTS[d8015d41c502990d614a67f19e60a361daa0de34]: ./.ob-jupyter/58f61e64abfaeb573081e4e779fc0e9ee87189f9.png

kg.order(), kg.size()

#+RESULTS[13e30c4e91fe1289132d1811993158267f59294f]:

(18, 101)
ckg = nx.convert_node_labels_to_integers(kg)
ckg = simplify_ht(ckg)
ckg.order(), ckg.size()

#+RESULTS[5a1911e0998e998bb6f2060ae6b855b2a27cfae8]:

(18, 60)
plot_neighborhoods(nx.convert_node_labels_to_integers(ckg))

#+RESULTS[bf9a6cf863135c8f6c0cc5c7a9502210b8c67241]: ./.ob-jupyter/5394d5b22a0ff8bfeec1738ca7a847414786fb50.png

h_type_using_star_cluster(ckg)

#+RESULTS[d4ddca658c347c9173216d66679f2e72a04c39ea]:

False
graph = ckg
graph = nx.convert_node_labels_to_integers(graph)
c_graph = nx.complement(graph)
verts = [i for i in c_graph.nodes() if open_neighborhood(c_graph, i).size() == 0]
verts

#+RESULTS[c8c6a0eda89cba81d362b5cadbab1bf338e54fae]:

[]
h_type_by_special_neigh(ckg)

#+RESULTS[b01403a6f89ed897c31677a788f4afd6b22dd8d1]:

False
nx.draw(open_neighborhood(ckg, 15), with_labels=True)

#+RESULTS[987da8d2145fd6c99c27a357e0368eba7e27135b]: ./.ob-jupyter/a36188b90adb7536935b0be1e11fa65524e20a7f.png

cs = collapse(clique_complex(ckg))
cs
cs.is_clique_complex()

#+RESULTS[14cf65f0a20cabeaa2cc6aac59fb3d105ce2c735]:

True
nx.is_isomorphic(cs.one_skeleton_graph(), ckg)

#+RESULTS[8dea93180d5e64ac928ff4190877b9e000e3fe43]:

True
nx.draw(ckg, with_labels=True)

#+RESULTS[c911913d8c5e512f8c50308fdf534b10a01a4b46]: ./.ob-jupyter/c2c262946f8609bdd8ac9a2fd2f46ce308965ee0.png

h_type_by_special_edges(ckg)

#+RESULTS[06675e1443ee3a3ebbb3d0c2c809d9b93e984a19]:

\(S^{1}\vee \vee_{2}S^{3}\)
[f for f in clique_complex(ckg).facet_set if len(f)==2]

#+RESULTS[7dc6088be2d4a86f8874e8971955b16816966a45]:

[{16, 17}, {13, 15}]
find_special_edges(ckg)

#+RESULTS[291f568263b38c7e90ea83483624d338c45cc126]:

[(13, 15), (16, 17)]
cckg = ckg.copy()
cckg.remove_edges_from([(13, 15), (16, 17)])
ckg.size(), cckg.size()

#+RESULTS[13afd6a96d6970d8fb1339d9d3f5f0231b595576]:

6058
[cckg.subgraph(c) for c in nx.connected_components(cckg)]

#+RESULTS[31404cc8384d01f18ab51192f057ec0108ab92b7]:

[<networkx.classes.graph.Graph at 0x7f8f4878ed90>,
 <networkx.classes.graph.Graph at 0x7f8f41c19ee0>]
[{x} for x in ckg.nodes() if x not in {13,15,16,17}]

#+RESULTS[54c50ff0bbe561f746bd557b2e38ade189c87e73]:

[{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {14}]
partition = [{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {14}]+[{16, 17}, {13, 15}]
ckgq = nx.quotient_graph(ckg, partition, relabel=True)
nx.draw(ckgq, with_labels=True)

#+RESULTS[f97239c6dc749358930ebe28c3f0d55c7a184d81]: ./.ob-jupyter/0896abf3224699ee6653a073cd5dc632de6b0123.png

homotopy_type(ckgq)
cskg = collapse(clique_complex(kg))
cskg.is_clique_complex()

#+RESULTS[a1c3b81a4d1ebbb26e1bc1997fe833f6c98cfd25]:

False
[f for f in cskg.facet_set if len(f)==2]

#+RESULTS[8075a9d673ade061aea0fa94efdcf1ff200dac61]:

[{{2, 5, 7}, {0, 4, 7}}, {{2, 5, 7}, {9, 3, 5}}]
homotopy_type(ckg)

#+RESULTS[469096a8f96d9a744cf894a2ca26df77d71ca87a]:

\(S^{2}\vee \vee_{4}S^{3}\)
nx.draw(nx.complement(ckg), with_labels=True)

#+RESULTS[e4201da8efe32ae30c03157741bf4a6c602637a6]: ./.ob-jupyter/f4b407313fc2fe79155200534caef6959d9c39c0.png

28002

g = graphs[28002]
nx.draw(g, with_labels=True)

#+RESULTS[6ffa63970d42ed9bafd209664f26977588bc38a1]: ./.ob-jupyter/573458adbe94694ab04705590a14907216beb054.png

plot_neighborhoods(g)

#+RESULTS[243ffa5633f36445681fa803d39a9bec9dbbe20d]: ./.ob-jupyter/4a6da00625b84a7748c2d79725460458352b693c.png

kg = k(g)
kg.order(), kg.size()

#+RESULTS[6b5d363ef99d596b2eb54409586f787e392b1c2a]:

(23, 169)
kg = p(kg)
kg.order(), kg.size()

#+RESULTS[29423a14fb712e2122d5f94a72255f2792500836]:

23169
ckg = nx.convert_node_labels_to_integers(kg)
ckg = simplify_ht(ckg)
ckg.order(), ckg.size()
nx.draw(nx.complement(g), with_labels=True)

#+RESULTS[dac7ea45379cb9e5d94906e8ae5b91fdc695b488]: ./.ob-jupyter/f384052e8ed59bca372ed2528a71ad0fa7296251.png

homotopy_type(g)
nx.draw(kg, with_labels=True)

#+RESULTS[6e26723d9a6fb88c3c21e0ed06083e108594e11a]: ./.ob-jupyter/5c021ece664b3e8e3b296173691f4c69f285f991.png

nx.draw(ckg, with_labels=True)

#+RESULTS[c911913d8c5e512f8c50308fdf534b10a01a4b46]: ./.ob-jupyter/390d1f7a852abea3a02873359e3e91fb9bbe4de4.png

plot_neighborhoods(ckg)

#+RESULTS[9df4019ef47d047156d11366e8f427095fbd12e2]:

�[0;31m�[0m
�[0;31mKeyError�[0mTraceback (most recent call last)
�[0;32m<ipython-input-23-652907fca1d3>�[0m in �[0;36m<module>�[0;34m�[0m
�[0;32m----> 1�[0;31m �[0mplot_neighborhoods�[0m�[0;34m(�[0m�[0mckg�[0m�[0;34m)�[0m�[0;34m�[0m�[0;34m�[0m�[0m
�[0m
�[0;32m<ipython-input-2-f037bb5bfcab>�[0m in �[0;36mplot_neighborhoods�[0;34m(g)�[0m
�[1;32m     28�[0m         �[0mplt�[0m�[0;34m.�[0m�[0msubplot�[0m�[0;34m(�[0m�[0mrows�[0m�[0;34m,�[0m �[0mcolumns�[0m�[0;34m,�[0m �[0mi�[0m�[0;34m+�[0m�[0;36m1�[0m�[0;34m)�[0m�[0;34m�[0m�[0;34m�[0m�[0m
�[1;32m     29�[0m         �[0mplt�[0m�[0;34m.�[0m�[0mtitle�[0m�[0;34m(�[0m�[0mi�[0m�[0;34m)�[0m�[0;34m�[0m�[0;34m�[0m�[0m
�[0;32m---> 30�[0;31m         �[0mnx�[0m�[0;34m.�[0m�[0mdraw�[0m�[0;34m(�[0m�[0mopen_neighborhood�[0m�[0;34m(�[0m�[0mg�[0m�[0;34m,�[0m �[0mi�[0m�[0;34m)�[0m�[0;34m,�[0m �[0mnode_size�[0m�[0;34m=�[0m�[0;36m200�[0m�[0;34m,�[0m �[0mwith_labels�[0m�[0;34m=�[0m�[0;34m'True'�[0m�[0;34m)�[0m�[0;34m�[0m�[0;34m�[0m�[0m
�[0m�[1;32m     31�[0m     �[0mplt�[0m�[0;34m.�[0m�[0mshow�[0m�[0;34m(�[0m�[0;34m)�[0m�[0;34m�[0m�[0;34m�[0m�[0m

�[0;32m~/Python/pycliques-dev/pycliques/src/pycliques/surfaces.py�[0m in �[0;36mopen_neighborhood�[0;34m(graph, v)�[0m
�[1;32m     21�[0m �[0;32mdef�[0m �[0mopen_neighborhood�[0m�[0;34m(�[0m�[0mgraph�[0m�[0;34m,�[0m �[0mv�[0m�[0;34m)�[0m�[0;34m:�[0m�[0;34m�[0m�[0;34m�[0m�[0m
�[1;32m     22�[0m     �[0;34m"""Return a copy(), otherwise the subgraph is frozen."""�[0m�[0;34m�[0m�[0;34m�[0m�[0m
�[0;32m---> 23�[0;31m     �[0;32mreturn�[0m �[0mgraph�[0m�[0;34m.�[0m�[0msubgraph�[0m�[0;34m(�[0m�[0mgraph�[0m�[0;34m[�[0m�[0mv�[0m�[0;34m]�[0m�[0;34m)�[0m�[0;34m.�[0m�[0mcopy�[0m�[0;34m(�[0m�[0;34m)�[0m�[0;34m�[0m�[0;34m�[0m�[0m
�[0m�[1;32m     24�[0m �[0;34m�[0m�[0m
�[1;32m     25�[0m �[0;34m�[0m�[0m

�[0;32m~/Python/pycliques-dev/lib/python3.9/site-packages/networkx/classes/graph.py�[0m in �[0;36m__getitem__�[0;34m(self, n)�[0m
�[1;32m    511�[0m         �[0mAtlasView�[0m�[0;34m(�[0m�[0;34m{�[0m�[0;36m1�[0m�[0;34m:�[0m �[0;34m{�[0m�[0;34m}�[0m�[0;34m}�[0m�[0;34m)�[0m�[0;34m�[0m�[0;34m�[0m�[0m
�[1;32m    512�[0m         """
�[0;32m--> 513�[0;31m         �[0;32mreturn�[0m �[0mself�[0m�[0;34m.�[0m�[0madj�[0m�[0;34m[�[0m�[0mn�[0m�[0;34m]�[0m�[0;34m�[0m�[0;34m�[0m�[0m
�[0m�[1;32m    514�[0m �[0;34m�[0m�[0m
�[1;32m    515�[0m     �[0;32mdef�[0m �[0madd_node�[0m�[0;34m(�[0m�[0mself�[0m�[0;34m,�[0m �[0mnode_for_adding�[0m�[0;34m,�[0m �[0;34m**�[0m�[0mattr�[0m�[0;34m)�[0m�[0;34m:�[0m�[0;34m�[0m�[0;34m�[0m�[0m

�[0;32m~/Python/pycliques-dev/lib/python3.9/site-packages/networkx/classes/coreviews.py�[0m in �[0;36m__getitem__�[0;34m(self, name)�[0m
�[1;32m     79�[0m �[0;34m�[0m�[0m
�[1;32m     80�[0m     �[0;32mdef�[0m �[0m__getitem__�[0m�[0;34m(�[0m�[0mself�[0m�[0;34m,�[0m �[0mname�[0m�[0;34m)�[0m�[0;34m:�[0m�[0;34m�[0m�[0;34m�[0m�[0m
�[0;32m---> 81�[0;31m         �[0;32mreturn�[0m �[0mAtlasView�[0m�[0;34m(�[0m�[0mself�[0m�[0;34m.�[0m�[0m_atlas�[0m�[0;34m[�[0m�[0mname�[0m�[0;34m]�[0m�[0;34m)�[0m�[0;34m�[0m�[0;34m�[0m�[0m
�[0m�[1;32m     82�[0m �[0;34m�[0m�[0m
�[1;32m     83�[0m     �[0;32mdef�[0m �[0mcopy�[0m�[0;34m(�[0m�[0mself�[0m�[0;34m)�[0m�[0;34m:�[0m�[0;34m�[0m�[0;34m�[0m�[0m

�[0;31mKeyError�[0m: 6

./.ob-jupyter/30a690d7d1646552be4909f42f38a5f098559b64.png

c_v = find_special_cutpoint(g)
c_v
graph = kg
graph = nx.convert_node_labels_to_integers(graph)
c_graph = nx.complement(graph)
verts = [i for i in c_graph.nodes() if open_neighborhood(c_graph, i).size() == 0]
verts
h_type_using_star_cluster(kg)
graph = ckg
graph = nx.convert_node_labels_to_integers(graph)
c_graph = nx.complement(graph)
verts = [i for i in c_graph.nodes() if open_neighborhood(c_graph, i).size() == 0]
verts

#+RESULTS[c8c6a0eda89cba81d362b5cadbab1bf338e54fae]:

[]

9 vertices

list9 = list_graphs(9)
len(list9)

#+RESULTS[5fcb20c913b13f6a4ccf07bdc6cfd06d773f581d]:

261080
g = list9[249562]
nx.draw(g, with_labels=True)

#+RESULTS[6d901e94c46f1c3c64bf02d14fe1d9895007c9d8]: ./.ob-jupyter/5eb0afe4243a351b67fb924124125ed004498517.png

nx.draw(g.subgraph(set(g.nodes())-{5}))

#+RESULTS[2bc4e7e8038cc51b07b5fc445cfa400b11e9013b]: ./.ob-jupyter/316dbd10ccff089710f7db269f1ffcd12da8fdb8.png

homotopy_type(g)

#+RESULTS[0a65031658d1b0a0ed4adf3237d00928c254e21c]:

\(S^{1}\)
kg = p(k(g))
homotopy_type(kg), kg.order()

#+RESULTS[075292cec2b78ad443b0b7c282cb1130c6136186]:

\(S1\)14
k2g = p(k(kg))
homotopy_type(k2g), k2g.order(), is_clique_helly(k2g)

#+RESULTS[d2490139a40c4720cad420c9c4689e7cbd3dfc83]:

\(S1\)8False
nx.draw(k2g)

#+RESULTS[937bef7f9f4460c9f004dc3f36fe7c9b168b4146]: ./.ob-jupyter/acdcc09ab05ea96897e9a282e4e9a1c11942151e.png

k3g = p(k(k2g))
homotopy_type(k3g), k3g.order(), is_clique_helly(k3g)

#+RESULTS[a51f2c803c85cfc51898b171df50e7ae67a29071]:

\(S1\)9False
k4g = p(k(k3g))
homotopy_type(k4g), k4g.order(), is_clique_helly(k4g)

#+RESULTS[c75ae1e2b13737a5d598340d8c91903d703d343d]:

\(S1\)4True
c_v = find_special_cutpoint(g)
c_v

#+RESULTS[24c2d7d850014e31f9d7ca5b2c692f5dc5bc85ec]:

2
h_type_clique_graph_cutpoint(g, 2)

#+RESULTS[23e4cb3ebb784e10881ff61fe2a7d20146f8911f]:

\(\vee_{2}S^{1}\vee S^{3}\)
betti_numbers(nx.convert_node_labels_to_integers(kg))

#+RESULTS[a1726846ab78a7166ec8e225d9374c322c6026c3]:

[0, 1, 0, 1]
h_graph = g.subgraph(set(g.nodes())-{2})
kh = k(h_graph)
k_h_type = homotopy_type(kh)
k_h_type

#+RESULTS[ac47b07def517291e505b48a7a57797ac8ae5843]:

Contractible
betti_numbers(nx.convert_node_labels_to_integers(kh))

#+RESULTS[61b3999f0ae5711d79ca68d0a8e273d86e789fa4]:

[]
h_type_as_join_complement(nx.convert_node_labels_to_integers(kh))

#+RESULTS[ae9dcf45ad337a6a8ad81a055168520e557f5f16]:

Contractible
nx.draw(kh, with_labels=True)

#+RESULTS[c66c52dc1ed2fad241175524dc1374ac4dad7d41]: ./.ob-jupyter/744380f961ef88e9521bd95c26e922aee3a48980.png

nx.draw(nx.complement(kh), with_labels=True)

#+RESULTS[d4983db439c31e201bf3d28762a2e4fcbcbe5269]: ./.ob-jupyter/f857c30af1a1dfd2611ccbacf3f3136469c5d0b8.png

h_type_using_star_cluster(kg)

#+RESULTS[12c9449c65728141c6f781e6b24de3cf1404c79b]:

False
h_type_by_special_neigh(kh)

#+RESULTS[c8bee3eb674935693937ec6c7532056381cba15e]:

\(\vee_{3}S^{1}\)
nx.draw(kh, with_labels=True)

#+RESULTS[c66c52dc1ed2fad241175524dc1374ac4dad7d41]: ./.ob-jupyter/a069736fc7f226da5157e506daaee8275ffa2d24.png

graph = kh
neighs = [(i, open_neighborhood(graph, i)) for i in graph.nodes()]
twok2 = nx.disjoint_union(nx.complete_graph(2), nx.complete_graph(2))
filt = [v for (v, nei) in neighs if nx.is_isomorphic(nei, twok2)]
filt

#+RESULTS[9526e0823409b91d986dc77976a2f589227fcab9]:

[{1, 6}, {3, 6}, {3, 7}]
v = filt[0]
h = graph.subgraph(set(graph.nodes())-{v})
h_type = homotopy_type(nx.convert_node_labels_to_integers(h))
h_type

#+RESULTS[b64294d988d42382c6a374c55a36ca073fd3e014]:

\(\vee_{2}S^{1}\)
betti_numbers(nx.convert_node_labels_to_integers(kh))

#+RESULTS[61b3999f0ae5711d79ca68d0a8e273d86e789fa4]:

[0, 3]

108411

g = list9[108411]
nx.draw(g, with_labels=True)

#+RESULTS[18d382bc4cf1edd5aa2a32aa68320fdec4eee8c7]: ./.ob-jupyter/2c45deade4fe72434b47121b26e112f8ecd78753.png

homotopy_type(g)

#+RESULTS[0a65031658d1b0a0ed4adf3237d00928c254e21c]:

\(\vee_{3}S^{2}\)
kg = p(k(g))
kg.order(), kg.size(), max_degree(kg)

#+RESULTS[57955a49b6ee4ebea68a4c6ccf3c79f6c1cbdd32]:

1811313
nx.draw(kg, with_labels=True)

#+RESULTS[6e26723d9a6fb88c3c21e0ed06083e108594e11a]: ./.ob-jupyter/af33fe5b799060e823a5ad0500213d9fda2651bc.png

kg = nx.convert_node_labels_to_integers(kg)
htkg = simplify_ht(kg)
htkg.order(), htkg.size()

#+RESULTS[405081e8ac86a6d3e3f147f4715a9f6f9c74a8b1]:

1756
betti_numbers(htkg)

#+RESULTS[54e8bfdf798dda4ac874ac5f53debac35856dd03]:

[0, 0, 1, 2]
ckg = collapse(clique_complex(kg))

#+RESULTS[0d89893ea531b8c2ad15a88a3fbf69648727f95e]:

is_vertex_decomposable(ckg)

#+RESULTS[4b598375fba5a9784878928a1e2360e1d99701a3]:

False

9 vertices

list9 = list_graphs(9)
len(list9)

#+RESULTS[5fcb20c913b13f6a4ccf07bdc6cfd06d773f581d]:

261080
g = list9[7459]
nx.draw(g, with_labels=True)

#+RESULTS[e4f7fa529ccd3da77116d6b5f9b5d8b32a5ee45b]: ./.ob-jupyter/9b5aa82cc9822c4cdbcb2cb76df3b9e1344708a5.png

kg = p(k(g))
kg.order()

#+RESULTS[77f867acb9b7426eb13c0ac87a7435acaa671ec3]:

13
kg = nx.convert_node_labels_to_integers(kg)
homotopy_type(kg)

#+RESULTS[38082e24b891549a88276b5ee49eaaa6b299c259]:

\(\vee_{6}S^{1}\)
homotopy_type(g)

#+RESULTS[0a65031658d1b0a0ed4adf3237d00928c254e21c]:

\(\vee_{6}S^{1}\)
c_v = find_special_cutpoint(g)
c_v

#+RESULTS[24c2d7d850014e31f9d7ca5b2c692f5dc5bc85ec]:

1
pg = p(g)
pg.order()

#+RESULTS[f20ada2e11f697c41c2a828788aeab057af58a84]:

9
h_type_clique_graph_cutpoint(g, 1)
h_graph = g.subgraph(set(g.nodes())-{1})
kh = k(h_graph)
k_h_type = homotopy_type(kh)
nx.draw(kh, with_labels=True)

#+RESULTS[c66c52dc1ed2fad241175524dc1374ac4dad7d41]: ./.ob-jupyter/40582c32d1e56ca14f423430a094324b1a049a0e.png

h_type_as_join_complement(kh)

#+RESULTS[21561281749cef2e2fdf0dd427553c1d2197a8c1]:

False
h_type_using_star_cluster(kh)

#+RESULTS[70930637f383572927f9c6768ba6859ca2f9ff2e]:

False
h_type_by_special_neigh(kh)
graph = kh
neighs = [(i, open_neighborhood(graph, i)) for i in graph.nodes()]
twok2 = nx.disjoint_union(nx.complete_graph(2), nx.complete_graph(2))
filt = [v for (v, nei) in neighs if nx.is_isomorphic(nei, twok2)]
filt

#+RESULTS[9526e0823409b91d986dc77976a2f589227fcab9]:

[{2, 6}, {2, 7}]
v = filt[0]
sssh = graph.subgraph(set(graph.nodes())-{v})
h_type = homotopy_type(sssh)
nx.draw(sssh, with_labels=True)

#+RESULTS[aaea6a0e68f5015d91f9ad4eb66135d46e4a0146]: ./.ob-jupyter/27d16b369b5d2cebe501d58f81587016ecffe31d.png

simplify_ht(sssh)
sssh2 = nx.convert_node_labels_to_integers(sssh)
sssh2

#+RESULTS[0cc048c5882ceeed634d90f0355fa5b7a3d2182a]:

<networkx.classes.graph.Graph at 0x7f5d9ef7b8b0>
kh = nx.convert_node_labels_to_integers(simplify_ht(k(h_graph)))
h_type_by_special_neigh(kh)

#+RESULTS[7eff5ed4fbc7f01018b2eae26cff8aede4917234]:

False
kg = nx.convert_node_labels_to_integers(kg)

neighs = [(i, open_neighborhood(kg, i)) for i in kg.nodes()]
twok2 = nx.disjoint_union(nx.complete_graph(2), nx.complete_graph(2))
filt = [v for (v, nei) in neighs if nx.is_isomorphic(nei, twok2)]
filt

#+RESULTS[6a42c34782934efc116ec6942dbd4759b3e648f1]:

[{0, 4}]
h_type_by_special_neigh(kg)

#+RESULTS[474e4b17b8bc7d460a354b7f0b629dec9991b0f5]:

'\\(S^{1}\\vee \\vee_{4}S^{3}\\)'
kg = nx.convert_node_labels_to_integers(kg)
c_graph = nx.complement(kg)
verts = [i for i in c_graph.nodes() if open_neighborhood(c_graph, i).size() == 0]
vertex=verts[0]
vertex
IG = clique_complex(kg)
ST = star(IG, vertex)
SC = star_cluster(IG, c_graph[vertex])
ST, SC
int_c = intersection_complex(ST, SC)
# int_c
csc=collapse(int_c)
# csc
# is_vertex_decomposable(csc)
h_type_using_star_cluster(kg)

#+RESULTS[8e939360396fc0663174744be3f773cfe386ef1b]:

'\\(S^{2}\\vee \\vee_{2}S^{3}\\)'
nx.draw(nx.complement(g))

#+RESULTS[02415e765b1122b92970a6cb9d8c4401d94c4620]: ./.ob-jupyter/7ebc84efb5ff78609d1d8498c4a0e575dd7b676a.png

%time h_type_as_suspension(g)

#+RESULTS[be617beacdfedb29f6b9da189ad2a8b2095f7109]:

CPU times: user 1.11 ms, sys: 0 ns, total: 1.11 ms
Wall time: 1.12 ms
\(\vee_{2}S^{3}\)
%time homotopy_type(g)

#+RESULTS[fceb4189bcd4d03c2518884d2dfb1473f5e66e15]:

CPU times: user 4.46 ms, sys: 55 µs, total: 4.51 ms
Wall time: 4.24 ms
\(\vee_{2}S^{3}\)
cadena = _h_type_clique_graph_cutpoint(g, 1)
cadena

#+RESULTS[738c0982157bc007f36e5cea279358cf323d0a95]:

\(\vee_{2}S^{1}\vee S^{2}\)
kg = k(g)
homotopy_type(g), homotopy_type(kg)

#+RESULTS[4aadb372ceee352aae4282c4279f3d4381f3885d]:

\(∨2S1∨ S2\)\(∨2S1∨ S2\)
kg = nx.convert_node_labels_to_integers(kg)
betti_numbers(g), betti_numbers(kg)

#+RESULTS[f973f29bc7434f6137d43a332f6a4a5712de80a1]:

([0, 2, 1], [0, 2, 1])
k2g = k(kg, 20)
k2g.order()

#+RESULTS[fbe8476bbe0cae7f0020d61846cc3222291bbeab]:

19
k2g = nx.convert_node_labels_to_integers(k2g)
betti_numbers(k2g)

#+RESULTS[d7d42f92aedd7bbcc745b235fe7409c016b441b2]:

[0, 2, 0, 1]
import re
pat = r"{(\d+)}"
m = re.sub(pat, r"{\1}", cadena)
m

#+RESULTS[d5a626e2b6a79c3e5b5802e753a173d15fd8e44b]:

\(S^{1}\vee \vee_{3}S^{1}\)
pat = r"\_\{\d+\}S\^\{1\}"
m = re.search(pat, cadena)
m.group(), m.span()

#+RESULTS[77cd1ecfd76d82e0c43687caa8be78ac86386448]:

('_{3}S^{1}', (16, 25))
pat = r"\_\{(\d+)\}S\^\{1\}"
m = re.search(pat, cadena)
m.group(), m.span(), m.group(1), m.span(1)

#+RESULTS[ec50a62e0bc24b23a920bc8e7c0f8af1c6615951]:

('_{3}S^{1}', (16, 25), '3', (18, 19))
cadena[18]
newcadena = cadena[:18]+str(int(cadena[18])+1)+cadena[19:]
newcadena

#+RESULTS[fcfc54654c0fb95d04ad19e1b8a6368464a0dada]:

\(S^{1}\vee \vee_{4}S^{1}\)
cadena[18]
newcadena = cadena[:18]+str(int(cadena[18])+1)+cadena[19:]
newcadena
inds = m.span(1)
cadena[inds[0]: inds[1]]

#+RESULTS[c92790e19bbdeb9f5ef1e670a14df572d62592e1]:

'3'
cadena2 = "\(S^{1}\vee \vee_{30}S^{1}\)"
pat = r"\_\{(\d+)\}S\^\{1\}"
m = re.search(pat, cadena2)
m.group(), m.span(), m.group(1), m.span(1)

#+RESULTS[efe15090529b7ccbfad9b5a183db2ba0cacd455e]:

('_{30}S^{1}', (14, 24), '30', (16, 18))
inds = m.span(1)
cadena2[inds[0]: inds[1]]

#+RESULTS[297445c3e0d02c0c0fb3dee438c923198381467a]:

'30'
g = list9[239843]
nx.draw(g, with_labels=True)

#+RESULTS[9157ca66c1e9f4e2bf517bc12ef853fe086b0c31]: ./.ob-jupyter/9d38d599179f3ceea7cb766e3698ab064b2f7703.png

kg = p(k(g))
kg.order(), kg.size(), max_degree(kg)

#+RESULTS[57955a49b6ee4ebea68a4c6ccf3c79f6c1cbdd32]:

1811113
ckg = collapse(clique_complex(kg))

#+RESULTS[129f17f95c4298c72def41cf05d7d76b4b385a15]:

is_vertex_decomposable(ckg)
g = list9[22146]
nx.draw(g, with_labels=True)

#+RESULTS[37bd35a28940856dcdad7638e8e4c3da311a563f]: ./.ob-jupyter/6e434abe294f9fc26bc306da7b01390943ac5b2b.png

_find_special_cutpoint(g)

#+RESULTS[86cd7bed40ae3e2a7434260f743dd37df5ecbba1]:

4
h = g.subgraph(set(g.nodes())-{4})
nx.draw(h, with_labels=True)

#+RESULTS[ee3e2d2bc7189d356616f2ef17f5c3f13f55c069]: ./.ob-jupyter/c64e1f639db27abd0cb4209a271fc6f5b1ad9317.png

homotopy_type(h)

#+RESULTS[29fe9fe1f949efd0d2a664d08528a50c55e174d9]:

\(\vee_{3}S^{2}\)
kh = k(h)
nx.draw(kh, with_labels=True)

#+RESULTS[29cf14ac016877cfff7b226b8bdef6c3445a24ba]: ./.ob-jupyter/e0225f87137cc71d178ab2f29a12098f7733402a.png

From thesis of Andrés Carnero

See Thesis of Andrés Carnero

import networkx as nx
g = nx.tensor_product(nx.cycle_graph(7), nx.complete_graph(3))
cg = nx.complement(g)
nx.draw(cg, with_labels=True)

#+RESULTS[31094c5b6f4b3728864e3c5d5c62ee3758c540fd]: ./.ob-jupyter/7e644bf591e74bcc5cd22469e185f8b872112027.png

homotopy_type(cg)

#+RESULTS[badda7e2aa6c69094586ac638c3f071b41f4bccc]:

\(\vee_{14}S^{3}\)