def precompute_expansions()

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])