Ticket #9567: 14602.patch

File 14602.patch, 16.1 KB (added by bedwards, 11 years ago)
  • sage/graphs/generic_graph.py

    # HG changeset patch
    # User Ben Edwards <bedwards@cs.unm.edu>
    # Date 1280160661 21600
    # Node ID 666a3309898bb1e20d28089c62a8dc8b79aa2141
    # Parent  426be7b253ad9c3137e733aba26165a3de5b832f
    This is a set of patches to make sage work with the networkx-1.1 API. This includes the removal of the argument 'with_labels' to several function calls. This is because networkx as a default now returns keyed dictionairies as opposed to lists. The sage API was also changed to return similarly because it seems like a more intuitive way to report the results of function calls.
    
    diff -r 426be7b253ad -r 666a3309898b sage/graphs/generic_graph.py
    a b  
    84788478   
    84798479    def cluster_triangles(self, nbunch=None, with_labels=False):
    84808480        r"""
    8481         Returns the number of triangles for nbunch of vertices as an
    8482         ordered list.
     8481        Returns the number of triangles for nbunch of vertices as a
     8482        dictionairy keyed by vertex.
    84838483       
    84848484        The clustering coefficient of a graph is the fraction of possible
    84858485        triangles that are triangles, `c_i = triangles_i /
     
    84948494        -  ``nbunch`` - The vertices to inspect. If
    84958495           nbunch=None, returns data for all vertices in the graph
    84968496       
    8497         -  ``with_labels`` - (boolean) default False
    8498            returns list as above True returns dict keyed by vertex labels.
    8499        
    85008497       
    85018498        REFERENCE:
    85028499
     
    85068503       
    85078504        EXAMPLES::
    85088505       
     8506            sage: (graphs.FruchtGraph()).cluster_triangles().values()
     8507            [1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0]
    85098508            sage: (graphs.FruchtGraph()).cluster_triangles()
    8510             [1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0]
    8511             sage: (graphs.FruchtGraph()).cluster_triangles(with_labels=True)
    85128509            {0: 1, 1: 1, 2: 0, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 0, 9: 1, 10: 1, 11: 0}
    85138510            sage: (graphs.FruchtGraph()).cluster_triangles(nbunch=[0,1,2])
    8514             [1, 1, 0]
     8511            {0: 1, 1: 1, 2: 0}
    85158512        """
    85168513        import networkx
    8517         return networkx.triangles(self.networkx_graph(copy=False), nbunch, with_labels)
     8514        return networkx.triangles(self.networkx_graph(copy=False), nbunch)
    85188515       
    85198516    def clustering_average(self):
    85208517        r"""
     
    85438540       
    85448541    def clustering_coeff(self, nbunch=None, with_labels=False, weights=False):
    85458542        r"""
    8546         Returns the clustering coefficient for each vertex in nbunch as an
    8547         ordered list.
     8543        Returns the clustering coefficient for each vertex in nbunch as a
     8544        dictionairy keyed by vertex.
    85488545       
    85498546        The clustering coefficient of a graph is the fraction of possible
    85508547        triangles that are triangles, `c_i = triangles_i /
     
    85588555        -  ``nbunch`` - the vertices to inspect (default
    85598556           None returns data on all vertices in graph)
    85608557       
    8561         -  ``with_labels`` - (boolean) default False
    8562            returns list as above True returns dict keyed by vertex labels.
    8563        
    85648558        -  ``weights`` - default is False. If both
    85658559           with_labels and weights are True, then returns a clustering
    85668560           coefficient dict and a dict of weights based on degree. Weights are
     
    85768570       
    85778571        EXAMPLES::
    85788572       
     8573            sage: (graphs.FruchtGraph()).clustering_coeff().values()
     8574            [0.33333333333333331, 0.33333333333333331, 0.0, 0.33333333333333331, 0.33333333333333331, 0.33333333333333331, 0.33333333333333331, 0.33333333333333331, 0.0, 0.33333333333333331, 0.33333333333333331, 0.0]
    85798575            sage: (graphs.FruchtGraph()).clustering_coeff()
    8580             [0.33333333333333331, 0.33333333333333331, 0.0, 0.33333333333333331, 0.33333333333333331, 0.33333333333333331, 0.33333333333333331, 0.33333333333333331, 0.0, 0.33333333333333331, 0.33333333333333331, 0.0]
    8581             sage: (graphs.FruchtGraph()).clustering_coeff(with_labels=True)
    85828576            {0: 0.33333333333333331, 1: 0.33333333333333331, 2: 0.0, 3: 0.33333333333333331, 4: 0.33333333333333331, 5: 0.33333333333333331, 6: 0.33333333333333331, 7: 0.33333333333333331, 8: 0.0, 9: 0.33333333333333331, 10: 0.33333333333333331, 11: 0.0}
    8583             sage: (graphs.FruchtGraph()).clustering_coeff(with_labels=True,weights=True)
     8577            sage: (graphs.FruchtGraph()).clustering_coeff(weights=True)
    85848578            ({0: 0.33333333333333331, 1: 0.33333333333333331, 2: 0.0, 3: 0.33333333333333331, 4: 0.33333333333333331, 5: 0.33333333333333331, 6: 0.33333333333333331, 7: 0.33333333333333331, 8: 0.0, 9: 0.33333333333333331, 10: 0.33333333333333331, 11: 0.0}, {0: 0.083333333333333329, 1: 0.083333333333333329, 2: 0.083333333333333329, 3: 0.083333333333333329, 4: 0.083333333333333329, 5: 0.083333333333333329, 6: 0.083333333333333329, 7: 0.083333333333333329, 8: 0.083333333333333329, 9: 0.083333333333333329, 10: 0.083333333333333329, 11: 0.083333333333333329})
    85858579            sage: (graphs.FruchtGraph()).clustering_coeff(nbunch=[0,1,2])
    8586             [0.33333333333333331, 0.33333333333333331, 0.0]
    8587             sage: (graphs.FruchtGraph()).clustering_coeff(nbunch=[0,1,2],with_labels=True,weights=True)
     8580            {0: 0.33333333333333331, 1: 0.33333333333333331, 2: 0.0}
     8581            sage: (graphs.FruchtGraph()).clustering_coeff(nbunch=[0,1,2],weights=True)
    85888582            ({0: 0.33333333333333331, 1: 0.33333333333333331, 2: 0.0}, {0: 0.33333333333333331, 1: 0.33333333333333331, 2: 0.33333333333333331})
    85898583        """
    85908584        import networkx
    8591         return networkx.clustering(self.networkx_graph(copy=False), nbunch, with_labels, weights)
     8585        return networkx.clustering(self.networkx_graph(copy=False), nbunch, weights)
    85928586       
    85938587    def cluster_transitivity(self):
    85948588        r"""
  • sage/graphs/graph.py

    diff -r 426be7b253ad -r 666a3309898b sage/graphs/graph.py
    a b  
    24092409            sage: (graphs.ChvatalGraph()).centrality_betweenness()
    24102410            {0: 0.069696969696969688, 1: 0.069696969696969688, 2: 0.060606060606060601, 3: 0.060606060606060601, 4: 0.069696969696969688, 5: 0.069696969696969688, 6: 0.060606060606060601, 7: 0.060606060606060601, 8: 0.060606060606060601, 9: 0.060606060606060601, 10: 0.060606060606060601, 11: 0.060606060606060601}
    24112411            sage: (graphs.ChvatalGraph()).centrality_betweenness(normalized=False)
    2412             {0: 7.6666666666666661, 1: 7.6666666666666661, 2: 6.6666666666666661, 3: 6.6666666666666661, 4: 7.6666666666666661, 5: 7.6666666666666661, 6: 6.6666666666666661, 7: 6.6666666666666661, 8: 6.6666666666666661, 9: 6.6666666666666661, 10: 6.6666666666666661, 11: 6.6666666666666661}
     2412            {0: 3.833333333333333, 1: 3.833333333333333, 2: 3.333333333333333, 3: 3.333333333333333, 4: 3.833333333333333, 5: 3.833333333333333, 6: 3.333333333333333, 7: 3.333333333333333, 8: 3.333333333333333, 9: 3.333333333333333, 10: 3.333333333333333, 11: 3.333333333333333}
    24132413            sage: D = DiGraph({0:[1,2,3], 1:[2], 3:[0,1]})
    24142414            sage: D.show(figsize=[2,2])
    24152415            sage: D = D.to_undirected()
     
    24472447            sage: D.show(figsize=[2,2])
    24482448            sage: D.centrality_degree()
    24492449            {0: 1.0, 1: 1.0, 2: 0.66666666666666663, 3: 0.66666666666666663}
    2450             sage: D.centrality_degree(v=1)
     2450            sage: D.centrality_degree(1)
    24512451            1.0
    24522452        """
    24532453        import networkx
    2454         return networkx.degree_centrality(self.networkx_graph(copy=False), v)
     2454        if v==None:
     2455            return networkx.degree_centrality(self.networkx_graph(copy=False))
     2456        else:
     2457            return networkx.degree_centrality(self.networkx_graph(copy=False))[v]
    24552458           
    24562459    def centrality_closeness(self, v=None):
    24572460        r"""
     
    27482751        else:
    27492752            raise NotImplementedError("Only 'networkx' and 'cliquer' are supported.")
    27502753
    2751     def cliques_number_of(self, vertices=None, cliques=None, with_labels=False):
     2754    def cliques_number_of(self, vertices=None, cliques=None):
    27522755        """
    2753         Returns a list of the number of maximal cliques containing each
    2754         vertex. (Returns a single value if only one input vertex).
     2756        Returns a dictionairy of the number of maximal cliques containing each
     2757        vertex, keyed by vertex. (Returns a single value if
     2758        only one input vertex).
    27552759       
    27562760        .. NOTE::
    27572761       
     
    27632767        -  ``vertices`` - the vertices to inspect (default is
    27642768           entire graph)
    27652769       
    2766         -  ``with_labels`` - (boolean) default False returns
    2767            list as above True returns a dictionary keyed by vertex labels
    2768        
    27692770        -  ``cliques`` - list of cliques (if already
    27702771           computed)
    27712772       
     
    27742775       
    27752776            sage: C = Graph('DJ{')
    27762777            sage: C.cliques_number_of()
    2777             [1, 1, 1, 1, 2]
     2778            {0: 1, 1: 1, 2: 1, 3: 1, 4: 2}
    27782779            sage: E = C.cliques_maximal()
    27792780            sage: E
    27802781            [[4, 0], [4, 1, 2, 3]]
    27812782            sage: C.cliques_number_of(cliques=E)
    2782             [1, 1, 1, 1, 2]
     2783            {0: 1, 1: 1, 2: 1, 3: 1, 4: 2}
    27832784            sage: F = graphs.Grid2dGraph(2,3)
    2784             sage: X = F.cliques_number_of(with_labels=True)
     2785            sage: X = F.cliques_number_of()
    27852786            sage: for v in sorted(X.iterkeys()):
    27862787            ...    print v, X[v]
    27872788            (0, 0) 2
     
    27912792            (1, 1) 3
    27922793            (1, 2) 2
    27932794            sage: F.cliques_number_of(vertices=[(0, 1), (1, 2)])
    2794             [3, 2]
     2795            {(0, 1): 3, (1, 2): 2}
    27952796            sage: G = Graph({0:[1,2,3], 1:[2], 3:[0,1]})
    27962797            sage: G.show(figsize=[2,2])
    27972798            sage: G.cliques_number_of()
    2798             [2, 2, 1, 1]
     2799            {0: 2, 1: 2, 2: 1, 3: 1}
    27992800        """
    28002801        import networkx
    2801         return networkx.number_of_cliques(self.networkx_graph(copy=False), vertices, cliques, with_labels)
     2802        return networkx.number_of_cliques(self.networkx_graph(copy=False), vertices, cliques)
    28022803
    28032804    def cliques_get_max_clique_graph(self, name=''):
    28042805        """
     
    28762877        return max_clique(self.complement())
    28772878
    28782879    def cliques_vertex_clique_number(self, algorithm="cliquer", vertices=None,
    2879                                      with_labels=False, cliques=None):
    2880         r"""
    2881         Returns a list of sizes of the largest maximal cliques containing
    2882         each vertex. (Returns a single value if only one input vertex).
     2880                                     cliques=None):
     2881        """
     2882        Returns a dictionary of sizes of the largest maximal cliques containing
     2883        each vertex, keyed by vertex. (Returns a single value if only one
     2884        input vertex).
    28832885       
    28842886        .. NOTE::
    28852887       
     
    28982900        -  ``vertices`` - the vertices to inspect (default is entire graph).
    28992901           Ignored unless ``algorithm=='networkx'``.
    29002902       
    2901         -  ``with_labels`` - (boolean) default False returns list as above
    2902            True returns a dictionary keyed by vertex labels. Ignored unless
    2903            ``algorithm=='networkx'``.
    2904        
    29052903        -  ``cliques`` - list of cliques (if already computed).  Ignored unless
    29062904           ``algorithm=='networkx'``.
    29072905       
     
    29092907       
    29102908            sage: C = Graph('DJ{')
    29112909            sage: C.cliques_vertex_clique_number()
    2912             [2, 4, 4, 4, 4]
     2910            {0: 2, 1: 4, 2: 4, 3: 4, 4: 4}
    29132911            sage: E = C.cliques_maximal()
    29142912            sage: E
    29152913            [[4, 0], [4, 1, 2, 3]]
    29162914            sage: C.cliques_vertex_clique_number(cliques=E,algorithm="networkx")
    2917             [2, 4, 4, 4, 4]
     2915            {0: 2, 1: 4, 2: 4, 3: 4, 4: 4}
    29182916            sage: F = graphs.Grid2dGraph(2,3)
    2919             sage: X = F.cliques_vertex_clique_number(with_labels=True,algorithm="networkx")
     2917            sage: X = F.cliques_vertex_clique_number(algorithm="networkx")
    29202918            sage: for v in sorted(X.iterkeys()):
    29212919            ...    print v, X[v]
    29222920            (0, 0) 2
     
    29262924            (1, 1) 2
    29272925            (1, 2) 2
    29282926            sage: F.cliques_vertex_clique_number(vertices=[(0, 1), (1, 2)])
    2929             [2, 2]
     2927            {(0, 1): 2, (1, 2): 2}
    29302928            sage: G = Graph({0:[1,2,3], 1:[2], 3:[0,1]})
    29312929            sage: G.show(figsize=[2,2])
    29322930            sage: G.cliques_vertex_clique_number()
    2933             [3, 3, 3, 3]
     2931            {0: 3, 1: 3, 2: 3, 3: 3}
    29342932
    29352933        """
    29362934
     
    29382936            from sage.graphs.cliquer import clique_number
    29392937            if vertices==None:
    29402938                vertices=self
    2941             value=[]
     2939            value={}
    29422940            for v in vertices:
    2943                 value.append(1+clique_number(self.subgraph(self.neighbors(v))))
     2941                value[v] = 1+clique_number(self.subgraph(self.neighbors(v)))
    29442942                self.subgraph(self.neighbors(v)).plot()
    29452943            return value
    29462944        elif algorithm=="networkx":
    29472945            import networkx
    2948             return networkx.node_clique_number(self.networkx_graph(copy=False), vertices, with_labels, cliques)
     2946            return networkx.node_clique_number(self.networkx_graph(copy=False),vertices, cliques)
    29492947        else:
    29502948            raise NotImplementedError("Only 'networkx' and 'cliquer' are supported.")
    29512949
    2952     def cliques_containing_vertex(self, vertices=None, cliques=None, with_labels=False):
     2950    def cliques_containing_vertex(self, vertices=None, cliques=None):
    29532951        """
    2954         Returns the cliques containing each vertex, represented as a list
    2955         of lists. (Returns a single list if only one input vertex).
     2952        Returns the cliques containing each vertex, represented as a dictionairy
     2953        of lists of lists, keyed by vertex. (Returns a single list if only one
     2954        input vertex).
    29562955       
    29572956        .. NOTE::
    29582957       
     
    29642963        -  ``vertices`` - the vertices to inspect (default is
    29652964           entire graph)
    29662965       
    2967         -  ``with_labels`` - (boolean) default False returns
    2968            list as above True returns a dictionary keyed by vertex labels
    2969        
    29702966        -  ``cliques`` - list of cliques (if already
    29712967           computed)
    29722968       
     
    29742970       
    29752971            sage: C = Graph('DJ{')
    29762972            sage: C.cliques_containing_vertex()
    2977             [[[4, 0]], [[4, 1, 2, 3]], [[4, 1, 2, 3]], [[4, 1, 2, 3]], [[4, 0], [4, 1, 2, 3]]]
     2973            {0: [[4, 0]], 1: [[4, 1, 2, 3]], 2: [[4, 1, 2, 3]], 3: [[4, 1, 2, 3]], 4: [[4, 0], [4, 1, 2, 3]]}
    29782974            sage: E = C.cliques_maximal()
    29792975            sage: E
    29802976            [[4, 0], [4, 1, 2, 3]]
    29812977            sage: C.cliques_containing_vertex(cliques=E)
    2982             [[[4, 0]], [[4, 1, 2, 3]], [[4, 1, 2, 3]], [[4, 1, 2, 3]], [[4, 0], [4, 1, 2, 3]]]
     2978            {0: [[4, 0]], 1: [[4, 1, 2, 3]], 2: [[4, 1, 2, 3]], 3: [[4, 1, 2, 3]], 4: [[4, 0], [4, 1, 2, 3]]}
    29832979            sage: F = graphs.Grid2dGraph(2,3)
    2984             sage: X = F.cliques_containing_vertex(with_labels=True)
     2980            sage: X = F.cliques_containing_vertex()
    29852981            sage: for v in sorted(X.iterkeys()):
    29862982            ...    print v, X[v]
    29872983            (0, 0) [[(0, 1), (0, 0)], [(1, 0), (0, 0)]]
     
    29912987            (1, 1) [[(0, 1), (1, 1)], [(1, 2), (1, 1)], [(1, 0), (1, 1)]]
    29922988            (1, 2) [[(1, 2), (0, 2)], [(1, 2), (1, 1)]]
    29932989            sage: F.cliques_containing_vertex(vertices=[(0, 1), (1, 2)])
    2994             [[[(0, 1), (0, 0)], [(0, 1), (0, 2)], [(0, 1), (1, 1)]], [[(1, 2), (0, 2)], [(1, 2), (1, 1)]]]
     2990            {(0, 1): [[(0, 1), (0, 0)], [(0, 1), (0, 2)], [(0, 1), (1, 1)]], (1, 2): [[(1, 2), (0, 2)], [(1, 2), (1, 1)]]}
    29952991            sage: G = Graph({0:[1,2,3], 1:[2], 3:[0,1]})
    29962992            sage: G.show(figsize=[2,2])
    29972993            sage: G.cliques_containing_vertex()
    2998             [[[0, 1, 2], [0, 1, 3]], [[0, 1, 2], [0, 1, 3]], [[0, 1, 2]], [[0, 1, 3]]]
     2994            {0: [[0, 1, 2], [0, 1, 3]], 1: [[0, 1, 2], [0, 1, 3]], 2: [[0, 1, 2]], 3: [[0, 1, 3]]}
    29992995
    30002996        """
    30012997        import networkx
    3002         return networkx.cliques_containing_node(self.networkx_graph(copy=False), vertices, cliques, with_labels)
     2998        return networkx.cliques_containing_node(self.networkx_graph(copy=False),vertices, cliques)
    30032999
    30043000    def clique_complex(self):
    30053001        """