Ticket #10543: trac_10543-reviewer.patch

File trac_10543-reviewer.patch, 2.9 KB (added by tomc, 9 years ago)
  • sage/matrix/constructor.py

    # HG changeset patch
    # User Tom Coates <tomc@imperial.ac.uk>
    # Date 1296684119 0
    # Node ID 87f29aa90f57d1fb4cd1cb290aede9d2eabf00fe
    # Parent  f24ce048fa66831e9e99df553e2be055c7081bbe
    trac 10543: reviewer patch
    
    diff -r f24ce048fa66 -r 87f29aa90f57 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
     2034    Check that we fixed Trac #10543 (echelon forms should be immutable):
     2035
     2036        sage: B_expanded.is_immutable()
     2037        True
     2038
     2039    We want to modify B_expanded, so replace it with a copy:
     2040   
     2041        sage: B_expanded = copy(B_expanded)
    20332042        sage: B_expanded.subdivide(B.nrows()-B.nullity(),B.ncols());B_expanded # random
    20342043        [  1   3   0   0   1   1   3  -2|  0   0  -3   0  -9  16]
    20352044        [  0   0   1   0   3  -2  -1  -3|  0   0   2   0  11 -27]
  • sage/matrix/matrix_rational_dense.pyx

    diff -r f24ce048fa66 -r 87f29aa90f57 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``
     
    14451445           proof=True.
    14461446       
    14471447       
    1448         OUTPUT: self is no in reduced row echelon form.
     1448        OUTPUT: the reduced row echelon form of self.
    14491449       
    14501450        EXAMPLES::
    14511451       
     
    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 if you want to modify the result then you need to
     1469        make a copy.  This checks that Trac #10543 is fixed.
     1470
     1471            sage: A = matrix(QQ, 2, range(6))
     1472            sage: E = A.echelon_form()
     1473            sage: E.is_mutable()
     1474            False
     1475            sage: F = copy(E)
     1476            sage: F[0,0] = 50
     1477            sage: F
     1478            [50  0 -1]
     1479            [ 0  1  2]
    14671480        """
    14681481        label = 'echelon_form'
    14691482        x = self.fetch(label)
     
    14851498            E = self._echelon_form_multimodular(height_guess, proof=proof)
    14861499        else:
    14871500            raise ValueError, "no algorithm '%s'"%algorithm
     1501        E.set_immutable()
    14881502        self.cache(label, E)
    14891503        self.cache('pivots', E.pivots())
    14901504        return E