Ticket #11181: trac_11181-review.patch

File trac_11181-review.patch, 10.0 KB (added by ncohen, 10 years ago)
  • sage/graphs/base/sparse_graph.pyx

    # HG changeset patch
    # User Nathann Cohen <nathann.cohen@gmail.com>
    # Date 1302946654 -7200
    # Node ID 45df855df2f78b8c5ca1ac36c8a3e94177666337
    # Parent  4a146163550960311a01148224ec3563f93ca8aa
    trac 11181 -- edge labels should be unique (reviewer's patch)
    
    diff -r 4a1461635509 -r 45df855df2f7 sage/graphs/base/sparse_graph.pyx
    a b  
    13861386
    13871387cdef int new_edge_label(object l, dict edge_labels):
    13881388    """
    1389     Finds a new int representing the arbitrary label l.
     1389    Returns a new unique int representing the arbitrary label l.
    13901390    """
    13911391    if l is None:
    13921392        return 0
     
    15911591                      self._cg, self._cg_rev, self._directed)
    15921592        cdef int v_int = check_vertex(v, self.vertex_ints, self.vertex_labels,
    15931593                      self._cg, self._cg_rev, self._directed)
    1594         for l_int in self.edge_labels:
    1595             if self.edge_labels[l_int] == l and self._cg.has_arc_label(u_int, v_int, l_int):
    1596                 break
     1594
     1595        if l is None:
     1596            if self._cg.has_arc_label(u_int, v_int, 0):
     1597                l_int = 0
     1598            else:
     1599                l_int = self._cg.arc_label(u_int, v_int)
    15971600        else:
    1598             if l is None:
    1599                 if self._cg.has_arc_label(u_int, v_int, 0):
    1600                     l_int = 0
    1601                 else: l_int = self._cg.arc_label(u_int, v_int)
    1602             else: return
     1601            for l_int in self.edge_labels:
     1602                if self.edge_labels[l_int] == l and self._cg.has_arc_label(u_int, v_int, l_int):
     1603                    break
     1604            else:
     1605                return
     1606
    16031607        if directed:
    16041608            self._cg.del_arc_label(u_int, v_int, l_int)
    16051609            self._cg_rev.del_arc_label(v_int, u_int, l_int)
     1610            if l_int:
     1611                self.edge_labels.pop(l_int)
    16061612        else:
    16071613            self._cg.del_arc_label(u_int, v_int, l_int)
    16081614            self._cg.del_arc_label(v_int, u_int, l_int)
     1615            if l_int:
     1616                self.edge_labels.pop(l_int)
    16091617
    16101618    def get_edge_label(self, object u, object v):
    16111619        """
     
    17001708        if labels:
    17011709            L = []
    17021710            for v_int in vertices:
     1711                v = vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg)
    17031712                for u_int in self._cg.out_neighbors(v_int):
    17041713                    if u_int >= v_int or u_int not in vertices:
    17051714                        for l_int in self._cg.all_arcs(v_int, u_int):
     
    17081717                            else:
    17091718                                l = self.edge_labels[l_int]
    17101719                            L.append(tuple(sorted(
    1711             (vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg),
     1720            (v,
    17121721             vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg)
    17131722            )))+(l,))
    17141723            return iter(L)
    17151724        else:
    1716             return iter([tuple(sorted(
    1717             (vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg),
     1725            L = []
     1726            for v_int in vertices:
     1727                v = vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg)
     1728                for u_int in self._cg.out_neighbors(v_int):
     1729                    if u_int >= v_int or u_int not in vertices:
     1730                        for l_int in self._cg.all_arcs(v_int, u_int):
     1731                            L.append(tuple(sorted(
     1732            (v,
    17181733             vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg)
    1719             )))
    1720                 for v_int in vertices
    1721                     for u_int in self._cg.out_neighbors(v_int)
    1722                         if u_int >= v_int or u_int not in vertices
    1723                             for l_int in self._cg.all_arcs(v_int, u_int)])
     1734            ))))
     1735            return iter(L)
    17241736
    17251737    def iterator_in_edges(self, object vertices, bint labels):
    17261738        """
     
    17501762            if labels:
    17511763                L = []
    17521764                for v_int in vertices:
     1765                    v = vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg)
    17531766                    for u_int in self._cg_rev.out_neighbors(v_int):
    17541767                        for l_int in self._cg.all_arcs(u_int, v_int):
    17551768                            if l_int == 0:
     
    17581771                                l = self.edge_labels[l_int]
    17591772                            L.append(
    17601773                (vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg),
    1761                  vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg),
     1774                 v,
    17621775                 l))
    17631776                return iter(L)
    17641777            else:
    1765                 return iter([
     1778                L = []
     1779                for v_int in vertices:
     1780                    v = vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg)
     1781                    for u_int in self._cg_rev.out_neighbors(v_int):
     1782                        for l_int in self._cg.all_arcs(u_int, v_int):
     1783                            L.append(
    17661784                (vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg),
    1767                  vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg))
    1768                     for v_int in vertices
    1769                         for u_int in self._cg_rev.out_neighbors(v_int)
    1770                             for l_int in self._cg.all_arcs(u_int, v_int)])
     1785                 v))
     1786                return iter(L)
    17711787        else:
    17721788            if labels:
    17731789                L = []
    17741790                for v_int in vertices:
     1791                    v = vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg)
    17751792                    for u_int in self._cg_rev.out_neighbors(v_int):
    17761793                        l_int = self._cg.arc_label(u_int, v_int)
    17771794                        if l_int == 0:
     
    17801797                            l = self.edge_labels[l_int]
    17811798                        L.append(
    17821799                (vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg),
    1783                  vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg),
     1800                 v,
    17841801                 l))
    17851802                return iter(L)
    17861803            else:
    1787                 return iter([
     1804                L = []
     1805                for v_int in vertices:
     1806                    v = vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg)
     1807                    for u_int in self._cg_rev.out_neighbors(v_int):
     1808                        L.append(
    17881809                (vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg),
    1789                  vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg))
    1790                     for v_int in vertices
    1791                         for u_int in self._cg_rev.out_neighbors(v_int)])
     1810                 v))
     1811                return iter(L)
    17921812
    17931813    def iterator_out_edges(self, object vertices, bint labels):
    17941814        """
     
    18181838            if labels:
    18191839                L = []
    18201840                for v_int in vertices:
     1841                    v = vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg)
    18211842                    for u_int in self._cg.out_neighbors(v_int):
    18221843                        for l_int in self._cg.all_arcs(v_int, u_int):
    18231844                            if l_int == 0:
     
    18251846                            else:
    18261847                                l = self.edge_labels[l_int]
    18271848                            L.append(
    1828                 (vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg),
     1849                (v,
    18291850                 vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg),
    18301851                 l))
    18311852                return iter(L)
    18321853            else:
    1833                 return iter([
    1834                 (vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg),
    1835                  vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg))
    1836                     for v_int in vertices
    1837                         for u_int in self._cg.out_neighbors(v_int)
    1838                             for l_int in self._cg.all_arcs(v_int, u_int)])
     1854                L = []
     1855                for v_int in vertices:
     1856                    v = vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg)
     1857                    for u_int in self._cg.out_neighbors(v_int):
     1858                        for l_int in self._cg.all_arcs(v_int, u_int):
     1859                            L.append(
     1860                (v,
     1861                 vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg)))
     1862                return iter(L)
    18391863        else:
    18401864            if labels:
    18411865                L = []
    18421866                for v_int in vertices:
     1867                    v = vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg)
    18431868                    for u_int in self._cg.out_neighbors(v_int):
    18441869                        l_int = self._cg.arc_label(v_int, u_int)
    18451870                        if l_int == 0:
     
    18471872                        else:
    18481873                            l = self.edge_labels[l_int]
    18491874                        L.append(
    1850                 (vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg),
     1875                (v,
    18511876                 vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg),
    18521877                 l))
    18531878                return iter(L)
    18541879            else:
    1855                 return iter([
    1856                 (vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg),
    1857                  vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg))
    1858                     for v_int in vertices
    1859                         for u_int in self._cg.out_neighbors(v_int)])
     1880                L = []
     1881                for v_int in vertices:
     1882                    v = vertex_label(v_int, self.vertex_ints, self.vertex_labels, self._cg)
     1883                    for u_int in self._cg.out_neighbors(v_int):
     1884                        L.append(
     1885                (v,
     1886                 vertex_label(u_int, self.vertex_ints, self.vertex_labels, self._cg)))
     1887                return iter(L)
    18601888
    18611889    def multiple_edges(self, new):
    18621890        """