Note: When this ticket is closed, make sure to also close ticket #9809.
From sage-devel:
[mvngu@sage mvngu]$ sage
----------------------------------------------------------------------
| Sage Version 4.3.3, Release Date: 2010-02-21 |
| Type notebook() for the GUI, and license() for information. |
----------------------------------------------------------------------
sage: G = Graph({1:[1]}); G
Looped graph on 1 vertex
sage: sum(G.degree())
1
sage: G.size()
0
sage: G = Graph({1:[1]}, loops=True); G
Looped graph on 1 vertex
sage: sum(G.degree())
1
sage: G.size()
0
sage: G = Graph({1:[1]}, loops=True, multiedges=True); G
Looped multi-graph on 1 vertex
sage: sum(G.degree())
1
sage: G.size()
0
The size of G is 1 because there is one edge, i.e. the single
self-loop. As shown by the above session, Sage reports the size of G
as 0. I believe this is a bug.
See also the discussion at this other sage-devel thread. This also happens in the C graph backends for sparse and dense graphs:
[mvngu@sage ~]$ sage
----------------------------------------------------------------------
| Sage Version 4.3.5, Release Date: 2010-03-28 |
| Type notebook() for the GUI, and license() for information. |
----------------------------------------------------------------------
sage: from sage.graphs.base.sparse_graph import SparseGraphBackend
sage: S = SparseGraphBackend(7)
sage: S.loops(True)
sage: S.add_edge(1, 1, None, directed=False)
sage: S.has_edge(1, 1, None)
True
sage: list(S.iterator_edges(range(7), None))
[(1, 1)]
sage: S.degree(1, directed=False)
1
sage:
sage: reset()
sage:
sage:
sage: from sage.graphs.base.dense_graph import DenseGraphBackend
sage: D = DenseGraphBackend(78)
sage: D = DenseGraphBackend(7)
sage: D.loops(True)
sage: D.add_edge(1, 1, None, directed=False)
sage: D.has_edge(1, 1, None)
True
sage: list(D.iterator_edges(range(7), None))
[(1, 1)]
sage: D.degree(1, directed=False)
1
Notice that degree()
reports the degree of a self-loop as one, when in fact it should be 2. That's because both SparseGraphBackend
and DenseGraphBackend
inherit the same degree()
function from CGraphBackend
. I think the implementation of degree()
in CGraphBackend
needs to take into account the existence of self-loops.
apply after previous patch