def closePseudoTelomere(data, index): module, history = data PT = random.choice(list(module.pseudotelomeres)) twin = module[PT].twin edge1 = Edge(PT, twin, module[PT].segment[index], index) module.removeEdgeFlow(edge1) edge2 = Edge(twin, module[twin].partner, -edge1.value, -1) module.removeEdgeFlow(edge2) module, edges = extractPseudoTelomereCycle(module, [edge1, edge2]) history.absorbEvent(Event(Cycle(edges))) return module, history
def extractPseudoTelomereCycle(module, edges): firstNode = edges[0].start lastNode = edges[-1].finish if firstNode == lastNode: return module, edges else: nextNode = module[lastNode].twin edge1 = Edge(lastNode, nextNode, edges[0].value, 0) module.removeEdgeFlow(edge1) followingNode = module[nextNode].partner edge2 = Edge(nextNode, followingNode, -edges[0].value, -1) module.removeEdgeFlow(edge2) return extractPseudoTelomereCycle(module, edges + [edge1, edge2])