L im dZddlZddlZddlmZddlmZgdZedk(ZGdde Z d Z ed Z ed Z y) a5 Module for testing automatic garbage collection of objects .. autosummary:: :toctree: generated/ set_gc_state - enable or disable garbage collection gc_state - context manager for given state of garbage collector assert_deallocated - context manager to check for circular references on object N)contextmanager)python_implementation) set_gc_stategc_stateassert_deallocatedPyPyc eZdZy)ReferenceErrorN)__name__ __module__ __qualname__Y/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/_lib/_gcutils.pyr r srr ctj|k(ry|rtjytjy)z! Set status of garbage collector N)gc isenabledenabledisable)states rrrs( ||~   rc#hKtj}t|dt|yw)a@ Context manager to set state of garbage collector to `state` Parameters ---------- state : bool True for gc enabled, False for disabled Examples -------- >>> with gc_state(False): ... assert not gc.isenabled() >>> with gc_state(True): ... assert gc.isenabled() N)rrr)r orig_states rrr&s& J s02c/Ktr tdtd5||i|}tj|}|~| t d dddy#1swYyxYww)aContext manager to check that object is deallocated This is useful for checking that an object can be freed directly by reference counting, without requiring gc to break reference cycles. GC is disabled inside the context manager. This check is not available on PyPy. Parameters ---------- func : callable Callable to create object to check \*args : sequence positional arguments to `func` in order to create object to check \*\*kwargs : dict keyword arguments to `func` in order to create object to check Examples -------- >>> class C: pass >>> with assert_deallocated(C) as c: ... # do something ... del c >>> class C: ... def __init__(self): ... self._circular = self # Make circular reference >>> with assert_deallocated(C) as c: #doctest: +IGNORE_EXCEPTION_DETAIL ... # do something ... del c Traceback (most recent call last): ... ReferenceError: Remaining reference(s) to object z)assert_deallocated is unavailable on PyPyFNz Remaining reference(s) to object)IS_PYPY RuntimeErrorrweakrefrefr )funcargskwargsobjrs rrr<suHFGG %ED#F#kk#  5  !CD D  EEEsA*5A A*A'#A*)__doc__rr contextlibrplatformr__all__rAssertionErrorr rrrrrrr'sg  %* < !V + ^ *,E,Er