#12135: Multiple loops handling in c_graph
----------------------------+-----------------------------------------------
   Reporter:  brunellus     |          Owner:  jason, ncohen, rlm
       Type:  defect        |         Status:  needs_review      
   Priority:  major         |      Milestone:  sage-5.0          
  Component:  graph theory  |       Keywords:                    
Work_issues:                |       Upstream:  N/A               
   Reviewer:                |         Author:                    
     Merged:                |   Dependencies:                    
----------------------------+-----------------------------------------------
Changes (by brunellus):

  * status:  new => needs_review


Old description:

> Sage handles multiple loops on one vertex inconsistently.
>
> {{{
> sage:g=Graph({0:[0,0]}, loops=True, multiedges=True,
> implementation="c_graph")
> sage:g.edges()
> [(0, 0, None), (0, 0, None)]
> sage:g.delete_edge(0,0)
> sage:g.edges()
> []
> }}}
>
> Compare with
>
> {{{
> sage:g=Graph({0:[0,0]}, loops=True, multiedges=True,
> implementation="networkx")
> sage:g.edges()
> [(0, 0, None), (0, 0, None)]
> sage:g.delete_edge(0,0)
> sage:g.edges()
> [(0, 0, None)]
> }}}
>
> and
>
> {{{
> sage:g=Graph({0:[1,1]}, loops=True, multiedges=True,
> implementation="c_graph")
> sage:g.edges()
> [(0, 1, None), (0, 1, None)]
> sage:g.delete_edge(0,1)
> sage:g.edges()
> [(0, 1, None)]
> }}}
>
> Another c_graph backend functions work in this spirit: for example
> add_edges won't add any new loops to the vertex where some already exist.
> Well, that is not precise. Look:
>
> {{{
> sage:g=Graph({0: [0]}, loops=True, multiedges=True,
> implementation="c_graph")
> sage:g.add_edges([(0,0), (0,0)])
> sage:g.edges()
> [(0, 0, None)]
> sage:h=Graph({0: [0,0]}, loops=True, multiedges=True,
> implementation="c_graph")
> sage:h.add_edges([(0,0), (0,0)])
> sage:h.edges()
> [(0, 0, None), (0, 0, None), (0, 0, None), (0, 0, None)]
> }}}
>
> I guess that multiple loops can be handy to have, for example when you
> want to preserve edges in repeated contractions. It is also consistent
> with the meaning of the two options "allow loops" and "allow multiple
> edges" -- it would be weird if "allow multiple edges" stopped work in the
> previously allowed case of (v,v) edge.
>
> But I'm not very experienced mathematician, so I can't decide what
> behavior is right. I just see that the current state is... bizzare... :-)

New description:

 Sage handles multiple loops on one vertex inconsistently.

 {{{
 sage:g=Graph({0:[0,0]}, loops=True, multiedges=True,
 implementation="c_graph")
 sage:g.edges()
 [(0, 0, None), (0, 0, None)]
 sage:g.delete_edge(0,0)
 sage:g.edges()
 []
 }}}

 Compare with

 {{{
 sage:g=Graph({0:[0,0]}, loops=True, multiedges=True,
 implementation="networkx")
 sage:g.edges()
 [(0, 0, None), (0, 0, None)]
 sage:g.delete_edge(0,0)
 sage:g.edges()
 [(0, 0, None)]
 }}}

 and

 {{{
 sage:g=Graph({0:[1,1]}, loops=True, multiedges=True,
 implementation="c_graph")
 sage:g.edges()
 [(0, 1, None), (0, 1, None)]
 sage:g.delete_edge(0,1)
 sage:g.edges()
 [(0, 1, None)]
 }}}

--

Comment:

 OK, this was rather easy.

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/12135#comment:2>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to