def boundary_comp_dist(samples,size,radius,edge_conn=2): dist = [] for i in range(samples): print(i) K = map_to_link(random_map(size,edge_conn)) c = choice(K.crossings) dist.append(num_boundary_components(K,c,radius)) return Counter(dist)
def nhd_size_dist(num_samples,link_size,radius): nhds = [] for i in range(num_samples): print(i) link = map_to_link(random_map(link_size,2)) c = link.crossings[0] T1, T2 = tangle_neighborhood(link,c,radius) nhds.append((len(T1.crossings),T1.n)) return Counter(nhds)
def unrooted_isosig_dist(num_samples,size,radius,edge_conn=2): nhds = [] for i in range(num_samples): print(i) link = map_to_link(random_map(size,edge_conn)) c = choice(link.crossings) T1, T2 = tangle_neighborhood(link,c,radius) nhds.append(T1.min_isosig()) return Counter(nhds)
def isosig_dist_with_gluings(num_samples,size,radius,edge_conn=2): nhds = [] for i in range(num_samples): print(i) link = map_to_link(random_map(size,edge_conn)) c = choice(link.crossings) root = choice(c.crossing_strands()) T1, T2, gluings = tangle_neighborhood(link,c,radius,hull=True) root = crossing_strand_from_name(T1,cslabel(root)) nhds.append(T1.min_isosig_with_gluings(gluings,root)) return Counter(nhds)
def neighborhood_distribution_different_links(num_samples,size,radius): nhd_classes = [] nhds = [] for i in range(num_samples): print(i) link = map_to_link(random_map(size,2)) c = link.crossings[0] T1, T2 = tangle_neighborhood(link,c,radius) nhds.append(T1) i = 0 for nhd in nhds: print(i) i += 1 already_found = False for nhd_class in nhd_classes: if nhd.is_isotopic(nhd_class[0]): nhd_class[1] += 1 already_found = True break if not already_found: nhd_classes.append([nhd,1]) return nhd_classes
def random_link_shadow(size, edge_conn=2): PD = map_to_link(random_map(size, edge_conn_param=edge_conn)).PD_code() return RibbonGraph(PD=PD)
def random_rooted_link(size, edge_conn=2): K = map_to_link(random_map(size, edge_conn)) root = choice(K.crossing_strands()) return K, root
if new_dist: nhds.append([double_volumes,1,T1]) return nhds """ Asks if two sorted lists of floats are near each other """ def close_float_sets(L1, L2, tolerance): if len(L1) != len(L2): return False for i in range(len(L1)): if abs(L1[i]-L2[i])>tolerance: return False return True K = map_to_link(random_map(100,2)) Kc = K.copy() c = Kc.crossings[0] v = Kc.exterior().volume() G = K.dual_graph() cycle = max(cycle_basis(G),key=len) T1, T2, gluings = tangle_neighborhood(Kc,c,1) print(gluings) """ v1 = T1.circular_sum(T1,0).exterior().volume() v2 = T2.circular_sum(T2,0).exterior().volume() avg_vol = v1/2+v2/2 tsums = T1.all_circular_sums(T2) vols = map(lambda x: x.exterior().volume(), tsums) print(v,avg_vol)
def random_alternating_knot(n): while True: L = map_to_link(random_map(n, edge_conn_param=4)) if len(L.link_components) == 1: break return L.alternating()