Ticket #11596: trac-11596-copy-cache-data.patch

File trac-11596-copy-cache-data.patch, 2.4 KB (added by jason, 10 years ago)

Not tested; definitely needs work

  • sage/matrix/matrix2.pyx

    # HG changeset patch
    # User Jason Grout <jason.grout@drake.edu>
    # Date 1322960538 21600
    # Node ID 899f7a1b3497660e883badc6c832650eba5a269a
    # Parent  8300ef213ba4106c347bebbb2db56f0f89a041db
    [mq]: trac-11596-copy-cache-data.patch
    
    diff --git a/sage/matrix/matrix2.pyx b/sage/matrix/matrix2.pyx
    a b  
     1
    12
    23"""
    34Base class for matrices, part 2
     
    50405041            [2]
    50415042
    50425043        """
     5044        from copy import copy
    50435045        x = self.fetch('eigenvalues')
    5044         if not x is None:
     5046        if x is not None:
    50455047            if not extend:
    5046                 x1=Sequence([])
    5047                 for i in x:
    5048                     if i in self.base_ring():
    5049                         x1.append(i)
    5050                 x=x1
    5051             return x
     5048                return Sequence([i for i in x if i in self.base_ring()])
     5049            else:
     5050                return copy(x)
    50525051
    50535052        if not self.base_ring().is_exact():
    50545053            from warnings import warn
     
    50715070                        raise NotImplementedError, "eigenvalues() is not implemented for matrices with eigenvalues that are not in the fraction field of the base ring or in QQbar"
    50725071                    V.extend(alpha*e)
    50735072            i+=1
    5074         V = Sequence(V)
    5075         if extend:
    5076             self.cache('eigenvalues', V)
     5073        x = Sequence(V)
    50775074        if not extend:
    5078             V1=Sequence([])
    5079             for i in V:
    5080                 if i in self.base_ring():
    5081                     V1.append(i)
    5082             V=V1
    5083         return V
    5084 
    5085 
     5075            return Sequence([i for i in x if i in self.base_ring()])
     5076        else:
     5077            self.cache('eigenvalues', x)
     5078            return copy(x)
    50865079
    50875080    def eigenvectors_left(self,extend=True):
    50885081        r"""       
     
    51315124            ], 1)]
    51325125
    51335126        """
     5127        # never put into the cache!
     5128        from copy import deepcopy
    51345129        x = self.fetch('eigenvectors_left')
    5135         if not x is None:
    5136             return x
     5130        if x is not None:
     5131            return deepcopy(x)
    51375132
    51385133        if not self.base_ring().is_exact():
    51395134            from warnings import warn
     
    57405735        x = self.fetch('echelon_form')
    57415736        if x is not None:
    57425737            if not transformation:
    5743                 return x
     5738                return x # x is immutable
    57445739            y = self.fetch('echelon_transformation')
    57455740            if y:
    57465741                return (x, y)