def compose_rel()

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