Ticket #10543: trac_10543-rational-echelon-form-immutable.patch

File trac_10543-rational-echelon-form-immutable.patch, 2.6 KB (added by rbeezer, 9 years ago)
  • sage/matrix/constructor.py

    # HG changeset patch
    # User Rob Beezer <beezer@ups.edu>
    # Date 1293941020 28800
    # Node ID 12bb535c9fec2313789ae49856892359abbdf467
    # Parent  1cb202e8a606dc2ab85489ff9df9cb4ea78c1aa1
    10543: make echelon form over QQ immutable
    
    diff -r 1cb202e8a606 -r 12bb535c9fec sage/matrix/constructor.py
    a b  
    19691969    return matrix
    19701970
    19711971def random_subspaces_matrix(parent, rank=None):
    1972     """
     1972    r"""
    19731973    Create a matrix of the designated size and rank whose right and
    19741974    left null spaces, column space, and row space have desirable
    19751975    properties that simplify the subspaces.
     
    20302030        [  0   0   0   0   0   0   0   0   1   0  -5   0  -3   2]
    20312031        [  0   0   0   0   0   0   0   0   0   1   1   0   1  -3]
    20322032        [  0   0   0   0   0   0   0   0   0   0   0   1  -1   1]
     2033        sage: B_expanded.set_immutable()
    20332034        sage: B_expanded.subdivide(B.nrows()-B.nullity(),B.ncols());B_expanded # random
    20342035        [  1   3   0   0   1   1   3  -2|  0   0  -3   0  -9  16]
    20352036        [  0   0   1   0   3  -2  -1  -3|  0   0   2   0  11 -27]
  • sage/matrix/matrix_rational_dense.pyx

    diff -r 1cb202e8a606 -r 12bb535c9fec sage/matrix/matrix_rational_dense.pyx
    a b  
    14231423
    14241424    def echelon_form(self, algorithm='default',
    14251425                     height_guess=None, proof=None, **kwds):
    1426         """
     1426        r"""
    14271427        INPUT:
    14281428       
    14291429        -  ``algorithm``
     
    14641464            [      0       1       0  -5/157]
    14651465            [      0       0       1 238/157]
    14661466            [      0       0       0       0]
     1467
     1468        The result is an immutable matrix, so a copy is necessary
     1469        if you want a result you can change somehow.  This exercises a
     1470        fix for Trac #10543.
     1471
     1472            sage: A = matrix(QQ, 2, range(6))
     1473            sage: E = A.echelon_form()
     1474            sage: E.is_mutable()
     1475            False
     1476            sage: F = copy(E)
     1477            sage: F[0,0] = 50
     1478            sage: F
     1479            [50  0 -1]
     1480            [ 0  1  2]
    14671481        """
    14681482        label = 'echelon_form'
    14691483        x = self.fetch(label)
     
    14851499            E = self._echelon_form_multimodular(height_guess, proof=proof)
    14861500        else:
    14871501            raise ValueError, "no algorithm '%s'"%algorithm
     1502        E.set_immutable()
    14881503        self.cache(label, E)
    14891504        self.cache('pivots', E.pivots())
    14901505        return E