
    4[gm
                         d Z ddlZddlZddlmZ ddlmZ g dZ e       dk(  Z G d de	      Z
d	 Zed
        Zed        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_stategc_stateassert_deallocatedPyPyc                       e Zd Zy)ReferenceErrorN)__name__
__module____qualname__     N/var/www/html/bid-api/venv/lib/python3.12/site-packages/scipy/_lib/_gcutils.pyr
   r
      s    r   r
   c                     t        j                         | k(  ry| rt        j                          yt        j                          y)z! Set status of garbage collector N)gc	isenabledenabledisable)states    r   r   r      s(    	||~
		


r   c              #   h   K   t        j                         }t        |        d t        |       yw)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)r   r   r   )r   
orig_states     r   r   r   &   s&       J	s   02c              /      K   t         rt        d      t        d      5   | |i |}t        j                  |      }| ~ |       t        d      	 ddd       y# 1 sw Y   yxY ww)a  Context 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RuntimeErrorr   weakrefrefr
   )funcargskwargsobjr   s        r   r   r   <   sf     H FGG	%D#F#kk#	5 !CDD  
s   A*5A	A*A'#A*)__doc__r   r   
contextlibr   platformr   __all__r   AssertionErrorr
   r   r   r   r   r   r   <module>r'      sg   
  	 % *
<  
!V
+	^ 	  * ,E ,Er   