
    ij                        d dl mZ  e       dk(  rd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl mZ d dl mZ d dl mZ d dl m Z  d dl m!Z! d dl m"Z" d dl m#Z#  e       dk(  rd dl$ d dl%mZ& nn e       d k(  rd dl' d dl(mZ& nX e       dk(  rd dl) d dl*mZ& dZ+n@ e       d!k(  rd dl, d dl-mZ& dZ+n( e       d"k(  rd dl. d dl/mZ& dZ+n e0d# e               ed$       G d% d&e&             Ze1Z2 ed'       G d( d)e2             Z1 ed*      d+        Z3y),    )backendtorchN)keras_export)result_type)KerasTensor)any_symbolic_tensors)is_keras_tensor)get_keras_mask)set_keras_mask)StatelessScope)get_stateless_scope)in_stateless_scope)SymbolicScope)in_symbolic_scope)AutocastScope)Variable)get_autocast_scope)is_float_dtype)is_int_dtype)standardize_dtype)standardize_shape)epsilon)floatx)image_data_format)set_epsilon)
set_floatx)set_image_data_format)standardize_data_format
tensorflow)*jaxnumpyopenvinozUnable to import backend : zkeras.Variablec                       e Zd Zy)r   N__name__
__module____qualname__     o/var/www/html/emotional.easysim.app/public_html/venv/lib/python3.12/site-packages/keras/src/backend/__init__.pyr   r   >       r*   r   zkeras.name_scopec                       e Zd Zy)
name_scopeNr%   r)   r*   r+   r.   r.   F   r,   r*   r.   zkeras.devicec                     t        |       S )ai  Context manager for backend-agnostic device placement.

    Use this context manager to control on which device operations are performed
    and tensors are allocated. This works across all backends (TensorFlow, JAX,
    PyTorch). This is useful for memory management, data preprocessing, and
    multi-device setups.

    Args:
        device_name: String specifying the device in format
            `"device_type:device_index"`. For example: `"cpu:0"`, `"gpu:0"`,
            `"gpu:1"`. For the PyTorch backend, `"gpu"` is automatically
            converted to `"cuda"`.

    Example:

    Basic usage with CPU and GPU:

    ```python
    # Allocate tensors on CPU
    with keras.device("cpu:0"):
        cpu_tensor = keras.ops.ones((2, 2))

    # Allocate tensors on GPU (if available)
    with keras.device("gpu:0"):
        gpu_tensor = keras.ops.ones((2, 2))
    ```

    Practical example with CPU preprocessing and GPU training:

    ```python
    # Create dummy data and model
    x_raw = np.random.rand(128, 784)
    y_train = np.random.randint(0, 10, size=(128,))
    model = keras.Sequential([
        keras.Input(shape=(784,)),
        keras.layers.Dense(10)
    ])
    model.compile(
        optimizer="adam",
        loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True)
    )

    # Preprocess data on CPU
    with keras.device("cpu:0"):
        x_processed = keras.ops.cast(x_raw, "float32")

    # Train on GPU (if available)
    with keras.device("gpu:0"):
        model.fit(x_processed, y_train, epochs=2)
    ```

    Use cases:

    - **Memory management**: Keep large tensors on CPU to save GPU memory
    - **Data preprocessing**: Process data on CPU before training on GPU
    - **GPU / TPU setups**: Control what runs on GPU / TPU vs CPU
    - **Multi-device setups**: Control which device receives which tensors

    Device naming conventions:

    - `"cpu:0"` - First CPU
    - `"gpu:0"` - First GPU (works across all backends)
    - `"gpu:1"` - Second GPU

    Note: For distributed training across multiple devices, see the
    [distributed training guides](https://keras.io/guides/distributed_training/).
    )device_scope)device_names    r+   devicer2   K   s    J $$r*   )4keras.src.backend.configr   r   keras.src.api_exportr   keras.src.backend.common.dtypesr   %keras.src.backend.common.keras_tensorr   r   r	    keras.src.backend.common.maskingr
   r   (keras.src.backend.common.stateless_scoper   r   r   'keras.src.backend.common.symbolic_scoper   r   "keras.src.backend.common.variablesr   r   r   r   r   r   r   r   r   r   r   r   r   r   keras.src.backend.tensorflow!keras.src.backend.tensorflow.coreBackendVariablekeras.src.backend.jaxkeras.src.backend.jax.corekeras.src.backend.torchkeras.src.backend.torch.coredistribution_libkeras.src.backend.numpykeras.src.backend.numpy.corekeras.src.backend.openvinokeras.src.backend.openvino.core
ValueErrorr.   backend_name_scoper2   r)   r*   r+   <module>rI      sD   ,
9  - 7 = F A ; ; C H G A E < 7 A = ; @ @ , + 6 0 / : < 9.MY%'FY')HY')HY*,K
279+>
?? 	 	  	     !	# 	 "	 nD% D%r*   