On Fri, Oct 23, 2015 at 6:04 AM, William Stein <[email protected]> wrote:
> On Fri, Oct 23, 2015 at 5:04 AM, Nathann Cohen <[email protected]> 
> wrote:
>> Hello everybody,
>>
>> When calling .row() on an immutable matrix, one gets mutable vectors.
>> I can easily avoid it for the code I am writing, but do you think we
>> should do something about it?
>
> m.row() returns a new (copy) of the row of the matrix, so making that
> immutable would be inconsistent with how copy works for matrices.
>
> sage: m = matrix.ones(10)
> sage: m.set_immutable()
> sage: copy(m).is_immutable()
> False
>
> The set_immutable method on matrices solves exactly *one* problem,
> which is it makes it possible to create matrices and then efficiently
> cache them without having to worry about some other code breaking
> them.  For example, it would be very bad indeed if the matrix T below
> were mutable (like it was for a few years of Sage...):
>
> sage: M = ModularSymbols(11)
> sage: T2 = M.hecke_matrix(2); T2
> sage: T2.is_immutable()
> True
>
> There are a **TON** of interesting programming problems that the idea
> of "immutable data structures" can solve.  Designing and implementing
> immutable data structure that actually solve these problems is
> interesting and highly nontrivial.  It's not done in Sage to much
> extent.
>
> A good example in the Javascript world of a systematic library for
> immutable data structures, which really solves some interesting
> problems is
>
>    https://facebook.github.io/immutable-js/
>
> It provides immutable versions of all standard Javascript data
> structures, but very efficiently builds them on top of mutable data
> structures, minimizing wasted space.   It would be interesting to have
> something similar in Sage, at least for matrices/vectors, but don't
> think that we do now.  What's in Sage is really trivial by comparison.
>    For starters, we might create a new immutable vector type in Sage
> that is a reference to a row in an immutable matrix, etc., etc.  It's
> a lot of work to design and implement something like this.

Work that I *really* wish somebody would get interested in doing!  I
think it could be extremely useful for Sage.

William

>
> At least you can do "v = m.row(0); v.set_immutable()".
>
>  -- William
>
>
>>
>>     sage: m = matrix.ones(10)
>>     sage: m.set_immutable()
>>     sage: hash(m.row(0))
>>     ...
>>     TypeError: mutable vectors are unhashable
>>
>> Nathann
>>
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "sage-devel" 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-devel.
>> For more options, visit https://groups.google.com/d/optout.
>
>
>
> --
> William (http://wstein.org)



-- 
William (http://wstein.org)

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" 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-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to