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

File trac_10543-rational-echelon-form-immutable-v2.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 e0508988c62107b320c20f6e528e4098352a500d
    # Parent  7a0c59df8c8ea69685d8593b510ba443bcb88060
    10543: make echelon form over QQ immutable
    
    diff -r 7a0c59df8c8e -r e0508988c621 sage/matrix/constructor.py
    a b  
    25232523    return matrix
    25242524
    25252525def random_subspaces_matrix(parent, rank=None):
    2526     """
     2526    r"""
    25272527    Create a matrix of the designated size and rank whose right and
    25282528    left null spaces, column space, and row space have desirable
    25292529    properties that simplify the subspaces.
     
    25842584        [  0   0   0   0   0   0   0   0   1   0  -5   0  -3   2]
    25852585        [  0   0   0   0   0   0   0   0   0   1   1   0   1  -3]
    25862586        [  0   0   0   0   0   0   0   0   0   0   0   1  -1   1]
     2587        sage: B_expanded.set_immutable()
    25872588        sage: B_expanded.subdivide(B.nrows()-B.nullity(),B.ncols());B_expanded # random
    25882589        [  1   3   0   0   1   1   3  -2|  0   0  -3   0  -9  16]
    25892590        [  0   0   1   0   3  -2  -1  -3|  0   0   2   0  11 -27]
  • sage/matrix/matrix_rational_dense.pyx

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