def setUp(self): self.sc1 = SimplicialComplex(simplices=[(1, 2), (2, 3), (1, 2, 3)]) self.sc2 = AlphaComplex(ring, 0.05) self.ring1d = SimplicialComplex(simplices=ring1d_sc) self.cylinder = SimplicialComplex(simplices=cylinder_sc) self.torus = SimplicialComplex(simplices=torus_sc) self.twosphere = SimplicialComplex(simplices=twosphere_c)
def betti(complex): betti = [] # find max dimension sim_com = SimplicialComplex(simplices=complex) for i in range(3): betti.append(sim_com.betti_number(i)) return (betti)
def _parse_result(graph, data_array=[]): if len(data_array) > 0: col_names = data_array.columns data_array = np.array(data_array) data = {"nodes": [], "links": [], "betti": []} # nodes node_keys = graph['nodes'].keys() name2id = {} i = 1 nodes_detail = {} for key in node_keys: name2id[key] = i cluster = graph['nodes'][key] nodes_detail[i] = cluster if len(data_array) > 0: cluster_data = data_array[cluster] cluster_avg = np.mean(cluster_data, axis=0) cluster_avg_dict = {} for j in range(len(col_names)): cluster_avg_dict[col_names[j]] = cluster_avg[j] data['nodes'].append({ "id": str(i), "size": len(graph['nodes'][key]), "avgs": cluster_avg_dict, "vertices": cluster }) else: data['nodes'].append({ "id": str(i), "size": len(graph['nodes'][key]), "vertices": cluster }) i += 1 with open(APP_STATIC + "/uploads/nodes_detail.json", "w") as f: json.dump(nodes_detail, f) # links links = set() for link_from in graph['links'].keys(): for link_to in graph['links'][link_from]: from_id = name2id[link_from] to_id = name2id[link_to] left_id = min(from_id, to_id) right_id = max(from_id, to_id) links.add((left_id, right_id)) for link in links: data['links'].append({"source": link[0], "target": link[1]}) betti0 = int( SimplicialComplex(simplices=graph['simplices']).betti_number(0)) betti1 = int( SimplicialComplex(simplices=graph['simplices']).betti_number(1)) betti2 = int( SimplicialComplex(simplices=graph['simplices']).betti_number(2)) data['betti'].append(betti0) data['betti'].append(betti1) data['betti'].append(betti2) return data
class test_simcomplex(unittest.TestCase): def setUp(self): self.sc1 = SimplicialComplex(simplices=[(1, 2), (2, 3), (1, 2, 3)]) self.sc2 = AlphaComplex(ring, 0.05) self.ring1d = SimplicialComplex(simplices=ring1d_sc) self.cylinder = SimplicialComplex(simplices=cylinder_sc) self.torus = SimplicialComplex(simplices=torus_sc) self.twosphere = SimplicialComplex(simplices=twosphere_c) def tearDown(self): pass def test_ring1d(self): self.assertEqual(self.ring1d.betti_number(0), 1) self.assertEqual(self.ring1d.betti_number(1), 1) self.assertEqual(self.ring1d.betti_number(2), 0) def test_cylinder(self): self.assertEqual(self.cylinder.betti_number(0), 1) self.assertEqual(self.cylinder.betti_number(1), 0) self.assertEqual(self.cylinder.betti_number(2), 1) def test_torus(self): self.assertEqual(self.torus.betti_number(0), 1) self.assertEqual(self.torus.betti_number(1), 2) self.assertEqual(self.torus.betti_number(2), 1) def test_twosphere(self): self.assertEqual(self.twosphere.betti_number(0), 1) self.assertEqual(self.twosphere.betti_number(1), 0) self.assertEqual(self.twosphere.betti_number(2), 1) def test_sc1(self): self.assertEqual(self.sc1.betti_number(0), 1) self.assertEqual(self.sc1.betti_number(1), 0) def test_sc2(self): self.assertEqual(self.sc2.betti_number(0), 1) self.assertEqual(self.sc2.betti_number(1), 1) self.assertEqual(self.sc2.betti_number(2), 0)
def test_betti(): C = [(1, 2, 3), (3, 4), (4, 2)] torus_sc = [(1, 2, 4), (4, 2, 5), (2, 3, 5), (3, 5, 6), (5, 6, 1), (1, 6, 2), (6, 7, 2), (7, 3, 2), (1, 3, 4), (3, 4, 6), (4, 6, 7), (4, 5, 7), (5, 7, 1), (7, 3, 1)] torus_c = SimplicialComplex(simplices=torus_sc) t1 = timeit.default_timer() print(betti_numbers('complexes/1.0/circle.txt', 0)) t2 = timeit.default_timer() print('cas circle:', t2 - t1) print(betti_numbers('complexes/1.0/line.txt', 0)) t3 = timeit.default_timer() print('cas line', t3 - t2) print(betti_numbers('complexes/1.0/sphere.txt', 0)) t4 = timeit.default_timer() print('cas sphere', t4 - t3) print(betti_numbers('complexes/1.0/torus.txt', 0)) t5 = timeit.default_timer() print('cas torus:', t5 - t4) print(betti_numbers('complexes/1.0/plane.txt', 0)) t6 = timeit.default_timer() print('cas plane:', t6 - t5)
# connect neurons ############################################################## nest.CopyModel("static_synapse", "inhibitory", {"weight": (-1) * g}) nest.CopyModel("static_synapse", "excitatory", {"weight": g}) num_synapse = 0 for i in range(N): for j in range(N): if (M[i][j] == "1"): # nest.Connect(neurons[i],neurons[j], syn_spec="inhibitory") nest.Connect(neurons[i], neurons[j], syn_spec="excitatory") num_synapse += 1 # print("connecting neuron " + str(i) + " to " + str(j)) # measure original homology of network ######################################### simps = mogulist_from_simplist(matrix_name) SC = SimplicialComplex(simplices=simps) bettis = [ SC.betti_number(0), SC.betti_number(1), SC.betti_number(2), SC.betti_number(3), SC.betti_number(4), SC.betti_number(5), SC.betti_number(6) ] print(bettis) proceed = raw_input("proceed? ") if (proceed != "y"): print(asdasd)
# -*- coding: utf-8 -*- # -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.# #* File Name : topological_data_analysis.py # #* Purpose : # #* Creation Date : 28-12-2019 # #* Last Modified : Saturday 28 December 2019 01:00:22 PM IST # #* Created By : #_._._._._._._._._._._._._._._._._._._._._.# import numpy as np from mogutda import SimplicialComplex torus_sc = [(1,2,4), (4,2,5), (2,3,5), (3,5,6), (5,6,1), (1,6,2), (6,7,2), (7,3,2), (1,3,4), (3,4,6), (4,6,7), (4,5,7), (5,7,1), (7,3,1)] torus_c = SimplicialComplex(simplices=torus_sc) print(torus_c.betti_number(0)) # print 1 print(torus_c.betti_number(1)) # print 2 print(torus_c.betti_number(2)) # print 1
import numpy as np from mogutda import SimplicialComplex e1 = [[255, 255], [255, 0]] sc1 = SimplicialComplex(e1) print(sc1.betti_number(0))