in clutrr/relations/builder.py [0:0]
def expand(self, edge, tp='family'):
"""
Given an edge, break the edge into two compositional edges from the given
family graph. Eg, if input is (x,y), break the edge into (x,z) and (z,y)
following the rules
:param edge: Edge to break
:param ignore_edges: Edges to ignore while breaking an edge. Used to ignore loops
:param k: if k == 0, stop recursing
:return:
"""
relation = self.anc.family[edge][tp]
if relation not in self.comp_rules_inv[tp]:
return None
rules = list(self.comp_rules_inv[tp][relation])
while len(rules) > 0:
rule = random.choice(rules)
rules.remove(rule)
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]:
return [e1, e2]
return None