[SciPy-Dev] Circular reference in interp1d causing memory errors

Matthew Brett matthew.brett at gmail.com
Sat May 18 20:00:06 EDT 2013


Hi,

On Sat, May 18, 2013 at 1:22 PM, Matthew Brett <matthew.brett at gmail.com> wrote:
> Hi,
>
> On Sat, May 18, 2013 at 2:23 AM, Robert Kern <robert.kern at gmail.com> wrote:
>> On Sat, May 18, 2013 at 8:11 AM, Matthew Brett <matthew.brett at gmail.com> wrote:
>>
>>> Is this the right analysis?  Is this the right patch?
>>
>> Sounds about right. The patch needs a comment explaining why, though,
>> because the current code is a common pattern.
>
> Yes - maybe it's easier to make that clear by using unbound references
> rather than doing it the crude way as in the previous patch.

Following on from Josef's and Robert's posts, I wrote a
`check_refs_for` context manger that does this:

    >>> class C(object): pass
    >>> with check_refs_for(C) as c:
    ...     # do something
    ...     del c

    >>> class C(object):
    ...     def __init__(self):
    ...         self._circular = self # Make circular reference
    >>> with check_refs_for(C) as c:
    ...     # do something
    ...     del c
    Traceback (most recent call last):
        ...
    ReferenceError: Remaining reference(s) to object

I was thinking of proposing it for scipy.misc in order to test my
interpolate.py patch, but I wonder if it belongs in numpy.testing.
What do y'all think?

Cheers,

Matthew



More information about the SciPy-Dev mailing list