in clutrr/relations/builder.py [0:0]
def precompute_expansions(self, edge_list, tp='family'):
"""
Given a list of edges, precompute the one level expansions on all of them
Given (x,y) -> get (x,z), (z,y) s.t. it follows our set of rules
Store the expansions as a list : (x,y) : [[(x,a),(a,y)], [(x,b),(b,y)] ... ]
:param edge_list:
:return:
"""
for edge in edge_list:
relation = self.anc.family[edge][tp]
if relation not in self.comp_rules_inv[tp]:
continue
rules = list(self.comp_rules_inv[tp][relation])
for rule in rules:
for node in self.anc.family_data.keys():
e1 = (edge[0], node)
e2 = (node, edge[1])
if e1 in self.anc.family and self.anc.family[e1][tp] == rule[0] \
and e2 in self.anc.family and self.anc.family[e2][tp] == rule[1]:
new_edge_pair = [e1, e2]
if edge not in self.expansions:
self.expansions[edge] = []
self.expansions[edge].append(new_edge_pair)
self.expansions[edge] = it.cycle(self.expansions[edge])