
    ij1                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d ZddZ G d d      Zd	 Z G d
 d      Z e
d      d        Zy)    N)backend)keras_export)global_statec                      t        j                  dd      rydt        j                  v rddlm}  | j                          S y)Nin_tf_graph_scopeFT
tensorflowr   )r   )r   get_global_attributesysmoduleskeras.src.utils.module_utilsr   executing_eagerly)tfs    r/var/www/html/emotional.easysim.app/public_html/venv/lib/python3.12/site-packages/keras/src/utils/backend_utils.pyin_tf_graphr      s:    (()<eDs{{"A'')))    c                 v    t        j                         dk7  r!t               st        j                  | |      } | S )Nr   )dtype)backend_moduler   r   convert_to_tensor)outputsr   s     r   convert_tf_tensorr      s.    </ 227%HNr   c                       e Zd Zd Zd Zd Zy)TFGraphScopec                 :    t        j                  dd      | _        y )Nr   F)r   r	   _original_valueselfs    r   __init__zTFGraphScope.__init__   s    +@@ 
r   c                 0    t        j                  dd       y )Nr   T)r   set_global_attributer   s    r   	__enter__zTFGraphScope.__enter__$   s    ))*=tDr   c                 D    t        j                  d| j                         y )Nr   )r   r    r   )r   argskwargss      r   __exit__zTFGraphScope.__exit__'   s    ))!5!5	
r   N)__name__
__module____qualname__r   r!   r%    r   r   r   r      s    

E
r   r   c                  V   dt         j                  vryt        j                         } | rt        j
                  j                  dddd      | j                  j                  v s8t        j
                  j                  dddd      | j                  j                  v ry| j                  } | ry)NgrainF_srcpythondatasetdata_loaderT)
r
   r   inspectcurrentframeospathjoinf_codeco_filenamef_back)current_frames    r   in_grain_data_pipeliner9   -   s    ckk! ((*M
GGLL&(I>##//0ww||GVX}E##//0 %,,  r   c                   :    e Zd ZdZddZd Zd Zed        Zd Z	y)	DynamicBackendaF  A class that can be used to switch from one backend to another.

    Example:

    ```python
    backend = DynamicBackend("tensorflow")
    y = backend.square(tf.constant(...))
    backend.set_backend("jax")
    y = backend.square(jax.numpy.array(...))
    ```

    Args:
        backend: Initial backend to use (string).
    Nc                 >    |xs t        j                         | _        y Nr   r   _backendr   r   s     r   r   zDynamicBackend.__init__Q   s    ;>#9#9#;r   c                 6    |dvrt        d|       || _        y )N)r   jaxtorchnumpyopenvinozaAvailable backends are ('tensorflow', 'jax', 'torch', 'numpy' and 'openvino'). Received: backend=)
ValueErrorr?   r@   s     r   set_backendzDynamicBackend.set_backendT   s1    MM>>EYH   r   c                 6    t        j                         | _        y r=   r>   r   s    r   resetzDynamicBackend.reset\   s    &..0r   c                     | j                   S r=   )r?   r   s    r   namezDynamicBackend.name_   s    }}r   c                    | j                   dk(  r!t        j                  d      }t        ||      S | j                   dk(  r!t        j                  d      }t        ||      S | j                   dk(  r!t        j                  d      }t        ||      S | j                   dk(  r2t	        j
                         dk(  rt        t        |      S t        d      | j                   d	k(  r!t        j                  d
      }t        ||      S y )Nr   zkeras.src.backend.tensorflowrB   zkeras.src.backend.jaxrC   zkeras.src.backend.torchrD   zoCurrently, we cannot dynamically import the numpy backend because it would disrupt the namespace of the import.rE   zkeras.src.backend.openvino)r?   	importlibimport_modulegetattrr   r   NotImplementedError)r   rK   modules      r   __getattr__zDynamicBackend.__getattr__c   s    ==L(,,-KLF64((==E!,,-DEF64((==G#,,-FGF64((==G#%%'72~t44)L  ==J&,,-IJF64(( 'r   r=   )
r&   r'   r(   __doc__r   rG   rI   propertyrK   rR   r)   r   r   r;   r;   A   s/    < 1  )r   r;   zkeras.config.set_backendc                    | t         j                  d<   t        j                  j	                         D cg c]  }|j                  d      s| }}|D ]  }t        j                  |=  ddl}t        j                  t                     }|j                         D ]  \  }}|j                  |j                  k(  s t        |      j                  d      s;t        |      }||j                  d      dz   d }|d|j                  d       }t        j                  |      t               |<    t        j                   dd	
       yc c}w )u  Reload the backend (and the Keras package).

    Example:

    >>> import os
    >>> os.environ["KERAS_BACKEND"] = "tensorflow"
    >>>
    >>> import keras
    >>> from keras import ops
    >>> type(ops.ones(()))
    <class 'tensorflow.python.framework.ops.EagerTensor'>
    >>>
    >>> keras.config.set_backend("jax")
    UserWarning: Using `keras.config.set_backend` is dangerous...
    >>> del keras, ops
    >>>
    >>> import keras
    >>> from keras import ops
    >>> type(ops.ones(()))
    <class 'jaxlib.xla_extension.ArrayImpl'>

    ⚠️ WARNING ⚠️: Using this function is dangerous and should be done
    carefully. Changing the backend will **NOT** convert
    the type of any already-instantiated objects.
    Thus, any layers / tensors / etc. already created will no
    longer be usable without errors. It is strongly recommended **not**
    to keep around **any** Keras-originated objects instances created
    before calling `set_backend()`.

    This includes any function or class instance that uses any Keras
    functionality. All such code needs to be re-executed after calling
    `set_backend()` and re-importing all imported `keras` modules.
    KERAS_BACKENDkerasr   Nz<module 'keras.'   a  Using `keras.config.set_backend` is dangerous and should be done carefully. Already-instantiated objects will not be converted. Thus, any layers / tensors / etc. already created will no longer be usable without errors. It is strongly recommended not to keep around any Keras-originated objects instances created before calling `set_backend()`. This includes any function or class instance that uses any Keras functionality. All such code needs to be re-executed after calling `set_backend()` and re-importing all imported `keras` modules.   )
stacklevel)r2   environr
   r   keys
startswithrW   copyglobalsitems	__class__strfindrM   rN   warningswarn)r   keyloaded_modulesrW   globsvaluemodule_names          r   rG   rG   z   s*   F #*BJJ {{'')S^^G-DN   KK  IIgi Ekkm F
U??eoo-5z$$%67!%j)+*:*:3*?!*C*EF)*AK,<,<S,AB!*!8!8!E	#F MM	 %s   EEr=   )r_   rM   r0   r2   r
   re   	keras.srcr   r   keras.src.api_exportr   keras.src.backend.commonr   r   r   r   r9   r;   rG   r)   r   r   <module>ro      s`       	 
  / - 1
 
(6) 6)r ()A *Ar   