#14535: Mutability of Graphs
------------------------------------+---------------------------------------
       Reporter:  SimonKing         |         Owner:  jason, ncohen, rlm
           Type:  enhancement       |        Status:  needs_info        
       Priority:  major             |     Milestone:  sage-5.10         
      Component:  graph theory      |    Resolution:                    
       Keywords:  mutability graph  |   Work issues:                    
Report Upstream:  N/A               |     Reviewers:                    
        Authors:  Simon King        |     Merged in:                    
   Dependencies:  #14524            |      Stopgaps:                    
------------------------------------+---------------------------------------

Comment (by SimonKing):

 Hi!

 Replying to [comment:2 ncohen]:
 > Hello !
 >
 > * Could you show that there is no slowdown in the graph functions
 because of that please ?

 There certainly is a slowdown in all methods that are protected in this
 way. And I do not use the decorator in cdef classes, in an attempt to
 prevent a regression.

 Does it make sense to time methods like add_vertex separately? In my
 applications, one would build a graph, and then it will never again be
 changed. But I am sure you have better use cases than I. Do you have
 examples in which add/delete_vertex/edge will typically be called zillions
 of times?

 > * Besides, why do you need decorators in the Python classes if you
 forbid modifications directly in the backend ?

 I do not forbid to change the graphs in the backend. Or at least, I did
 not intend to modify the backends. If I did, then it was by mistake. If G
 is an immutable graph, then `G._backend.add_vertex(...)` should not
 complain.

 The reason is, again, that I don't want a slow-down in the "private"
 methods. If one has an immutable graph used as key in a dictionary, and
 then decides to work around the "protected" methods `add_vertex`,
 `add_edge` etc by changing the graph G via G._backend, then this is a
 conscious decision for which the user takes full responsibility.

 So, protection of the user will be restricted to the "official" methods
 G.add_vertex etc.

 > * You create 4 functions in a class that already has a LOT of them. We
 have several functions that work like that already :
 > {{{
 > sage: g.mutable()
 > Tells you if it is mutable
 > sage: g.mutable(True)
 > Sets it to be mutable
 > }}}

 I did not find any support for mutability in graphs, except for the hack
 that makes `hash` work.

 > * There is a lot of things that graphs store and which are not vertices,
 nor edges. For example the vertices' layout, or its name... You can see
 the list of these awful things in `GenericGraph.__eq__`. If you just want
 to take edges and vertices in consideration could you say it explicitely
 in the documentation of the `*_mutable` methods ?

 Not good. Yes, I should have looked up `GenericGraph.__eq__` and take into
 account all data used there.

 > And.. Well.. Could you add me in Cc when you write things like that ?

 Actually, when I created the ticket, I first looked at a preview, and saw
 that you are among the (default) owners of this ticket. Hence, I concluded
 that there is no need in adding you in Cc, because you already were on the
 list of recipients. Sorry if I misinterpreted the meaning of the list of
 "owners".

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/14535#comment:4>
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 unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to