On Tuesday, January 8, 2019 at 6:21:39 AM UTC-8, Salvatore Stella wrote:
>
> Dear all, 
> sorry for disappearing on this. I am a little confused: if both parent and 
> element refer to the same cache how is it possible that clearing one does 
> not 
> clear the other? 
> S. 
>
>
If you have
D={1:1}
A=D
B=D

You have two references to the same dictionary. Executing

A.clear()

will lead to B pointing to an empty dictionary (the same one A is pointing 
to). If however you do

A={}

then A will be pointing to a fresh empty dict and B will still be pointing 
to the original dictionary, which is not empty.

Is that perhaps how you were trying to clear the cache?

As far as I can see, calling clear on the one reference of the cache also 
ensures that the other reference points to an empty cache.

--
Incidentally, I found an error in sage/misc/cachefunc.pyx:3286.

        try:
            P = inst.parent()
            return P.__dict__.setdefault(self._cache_name, default)
        except AttributeError:
            pass
        if not hasattr(P,'__cached_methods'):

If "P=inst.parent()" fails with an AttributeError then this gets silence 
and the "hasattr" fails due to P not having been assigned. I think the 
initialization of P should be moved out of the try block. It's the lookup 
of P.__dict__ that should be silenced, not the initialization of P.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to