Ticket #4639: 4639-coerce-leak.patch

File 4639-coerce-leak.patch, 1.7 KB (added by robertwb, 16 months ago)

this fixes the leak in coerce, not in exponentiation

  • sage/categories/homset.py

    # HG changeset patch
    # User Robert Bradshaw <robertwb@math.washington.edu>
    # Date 1228256529 28800
    # Node ID 271b85456f9c56cbc95f7e007cc440a165411b62
    # Parent  186599acb5d1acdaf337981a72df97855262bb2e
    [mq]: 4639-coerce-leak
    
    diff -r 186599acb5d1 -r 271b85456f9c sage/categories/homset.py
    a b  
    6060    key = (X,Y,cat) 
    6161    if _cache.has_key(key): 
    6262        H = _cache[key]() 
    63         if H: return H 
     63        if H and H._domain is X and H._codomain is Y: 
     64            return H 
    6465 
    6566    if cat is None or (cat is X.category() and cat is Y.category()): 
    6667        try: 
     
    149150        else: 
    150151            H = Homset(X, Y, cat) 
    151152             
    152     ##_cache[key] = weakref.ref(H) 
     153    _cache[key] = weakref.ref(H) 
    153154    _cache[(X, Y, cat)] = weakref.ref(H) 
    154155     
    155156    return H 
  • sage/rings/finite_field_morphism.py

    diff -r 186599acb5d1 -r 271b85456f9c sage/rings/finite_field_morphism.py
    a b  
    33from sage.rings.integer import Integer 
    44from sage.structure.sequence import Sequence 
    55 
    6 class FiniteFieldHomset(RingHomset_generic): 
     6import weakref 
     7 
     8_cache = {} 
     9def FiniteFieldHomset(R, S): 
     10    """ 
     11    TESTS: 
     12        sage: F = GF(13) 
     13        sage: Hom(F,F) is Hom(F,F) 
     14        True 
     15    """ 
     16    key = R,S 
     17    if _cache.has_key(key): 
     18        H = _cache[key]() 
     19        if H: 
     20            return H 
     21    H = FiniteFieldHomset_class(R,S) 
     22    _cache[key] = weakref.ref(H) 
     23    return H 
     24 
     25class FiniteFieldHomset_class(RingHomset_generic): 
    726    """ 
    827    Set of homomorphisms with domain a given finite field. 
    928    """