in clutrr/relations/builder.py [0:0]
def compose_rel(self, edge_1, edge_2, rel_type='family', verbose=False):
"""
Given an edge pair, add the edges into a single edge following the rules
in the dictionary
:param edge_1: (x,z)
:param edge_2: (z,y)
:param rel_type:
:return: (x,y)
"""
# dont allow self edges
if edge_1[0] == edge_1[1]:
return None
if edge_2[0] == edge_2[1]:
return None
if edge_1[1] == edge_2[0] and edge_1[0] != edge_2[1]:
n_edge = (edge_1[0], edge_2[1])
if n_edge not in self.anc.family and \
(edge_1 in self.anc.family and
self.anc.family[edge_1][rel_type] in self.comp_rules[rel_type]):
if edge_2 in self.anc.family and \
self.anc.family[edge_2][rel_type] in self.comp_rules[rel_type][self.anc.family[edge_1][rel_type]]:
n_rel = self.comp_rules[rel_type][self.anc.family[edge_1][rel_type]][self.anc.family[edge_2][rel_type]]
if n_edge not in self.anc.family:
self.anc.family[n_edge] = {}
self.anc.family[n_edge][rel_type] = n_rel
if verbose:
print(edge_1, edge_2, n_rel)
return n_edge
return None