Dear Bruce, dear graph fans,

On Sat, May 15, 2010 at 02:46:14PM -0700, Bruce wrote:
> I am continuing a discussion in a new post.

> The issue is that if we take a class such as graphs the instances
> are mutable.  It would be useful to have a version which was
> immutable and therefore hashable.  For example, we could then use
> CombinatorialFreeModule to construct formal linear combinations.

> Nicolas has pointed out that:
> In any cases, with Sage 4.4.1, you can actually cheat around this, and
> pretend that your graph is immutable:
> 
>     sage: G = DiGraph(4)
>     sage: hash(G)
>     ------------------------------------------------------------
>     Traceback (most recent call last):
>     ...
>     TypeError: graphs are mutable, and thus not hashable
> 
>     sage: G._immutable = True
>     sage: hash(G)
>     -236023159
> 
> This is *dangerous*, so use with all due care. But maybe this can be
> sufficient as a workaround for you until a proper mutability
> management is implemented for graphs.
>
> Is the right way to deal with this (and other similar problems) to
> have a new class frozengraph
> but the types that the data is built up from is changed so that lists,
> sequences, etc. are converted
> to tuples and dictionaries are converted first to sets and then
> frozensets?

See what's done e.g. with matrices:

    sage: m = matrix([[1,2],[1,2]])
    sage: m.set_immutable?

as well as the mutability section in:

    http://www.sagemath.org/doc/developer/coding_in_python.html

(Florent: you may want to throw in this discussion a link to the
"clone" feature)

In any cases, this is a fairly technical issue (not in itself, but
because it involves a large body of code), so the details of the
design should be left to the people in charge of the graph
library. Hence, the best way is to open a ticket (please ask for help
for that if needed). I am also forwarding this discussion to sage-devel.

Best,
                                Nicolas
--
Nicolas M. ThiƩry "Isil" <nthi...@users.sf.net>
http://Nicolas.Thiery.name/

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to