o
    ·2úhT  ã                   @   sd   d dl Z d dlZd dlmZ d dlmZ e ¡ ae ¡ add„ Z	ddd„Z
ed	d
gƒddd„ƒZdS )é    N)Úbackend)Úkeras_exportc                 C   s   t t| |ƒ d S ©N)ÚsetattrÚGLOBAL_STATE_TRACKER)ÚnameÚvalue© r	   ú`/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/backend/common/global_state.pyÚset_global_attribute   s   r   Fc                 C   s2   t t| d ƒ}|d u r|d ur|}|rt| |ƒ |S r   )Úgetattrr   r   )r   ÚdefaultÚset_to_defaultÚattrr	   r	   r
   Úget_global_attribute   s   
r   zkeras.utils.clear_sessionzkeras.backend.clear_sessionTc                 C   sŠ   t  ¡ at  ¡ at ¡ dkr+ddlm} |jj 	¡  | 
¡ r*ddlm} | ¡  ¡  nt ¡ dkr;ddlm} | ¡  | rCt ¡  dS dS )a4  Resets all state generated by Keras.

    Keras manages a global state, which it uses to implement the Functional
    model-building API and to uniquify autogenerated layer names.

    If you are creating many models in a loop, this global state will consume
    an increasing amount of memory over time, and you may want to clear it.
    Calling `clear_session()` releases the global state: this helps avoid
    clutter from old models and layers, especially when memory is limited.

    Args:
        free_memory: Whether to call Python garbage collection.
            It's usually a good practice to call it to make sure
            memory used by deleted objects is immediately freed.
            However, it may take a few seconds to execute, so
            when using `clear_session()` in a short loop,
            you may want to skip it.

    Example 1: calling `clear_session()` when creating models in a loop

    ```python
    for _ in range(100):
      # Without `clear_session()`, each iteration of this loop will
      # slightly increase the size of the global state managed by Keras
      model = keras.Sequential([
          keras.layers.Dense(10) for _ in range(10)])

    for _ in range(100):
      # With `clear_session()` called at the beginning,
      # Keras starts with a blank state at each iteration
      # and memory consumption is constant over time.
      keras.backend.clear_session()
      model = keras.Sequential([
          keras.layers.Dense(10) for _ in range(10)])
    ```

    Example 2: resetting the layer name generation counter

    >>> layers = [keras.layers.Dense(10) for _ in range(10)]
    >>> new_layer = keras.layers.Dense(10)
    >>> print(new_layer.name)
    dense_10
    >>> keras.backend.clear_session()
    >>> new_layer = keras.layers.Dense(10)
    >>> print(new_layer.name)
    dense
    Ú
tensorflowr   )r   )ÚcontextÚtorchN)Ú	threadingÚlocalr   ÚGLOBAL_SETTINGS_TRACKERr   Úkeras.src.utils.module_utilsr   ÚcompatÚv1Úreset_default_graphÚexecuting_eagerlyÚtensorflow.python.eagerr   Úclear_kernel_cacheÚtorch._dynamoÚ_dynamoÚresetÚgcÚcollect)Úfree_memoryÚtfr   Údynamor	   r	   r
   Úclear_session   s   4€þr&   )NF)T)r!   r   Ú	keras.srcr   Úkeras.src.api_exportr   r   r   r   r   r   r&   r	   r	   r	   r
   Ú<module>   s    

	