def expand()

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