
    ~Wh                      <   d Z ddlZddlZddlmZ i Zi Z ej                    Z eddd           G d d                      Z	 ed	d
          d             Z
 edd          dd            Z edd          d             Z edd          dd            Ze	ZdS )z#Python utilities required by Keras.    N)keras_exportz keras.saving.custom_object_scopezkeras.utils.custom_object_scopezkeras.utils.CustomObjectScopec                   $    e Zd ZdZd Zd Zd ZdS )CustomObjectScopea  Exposes custom classes/functions to Keras deserialization internals.

    Under a scope `with custom_object_scope(objects_dict)`, Keras methods such
    as `tf.keras.models.load_model` or `tf.keras.models.model_from_config`
    will be able to deserialize any custom object referenced by a
    saved config (e.g. a custom layer or metric).

    Example:

    Consider a custom regularizer `my_regularizer`:

    ```python
    layer = Dense(3, kernel_regularizer=my_regularizer)
    # Config contains a reference to `my_regularizer`
    config = layer.get_config()
    ...
    # Later:
    with custom_object_scope({'my_regularizer': my_regularizer}):
      layer = Dense.from_config(config)
    ```

    Args:
        *args: Dictionary or dictionaries of `{name: object}` pairs.
    c                 "    || _         d | _        d S N)custom_objectsbackup)selfargss     f/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/keras/saving/object_registration.py__init__zCustomObjectScope.__init__<   s    "    c                     t           j                                        | _        | j        D ]!}t           j                            |           "| S r   )_THREAD_LOCAL_CUSTOM_OBJECTS__dict__copyr	   r   update)r
   objectss     r   	__enter__zCustomObjectScope.__enter__@   sK    2;@@BB* 	B 	BG(188AAAAr   c                     t           j                                         t           j                            | j                   d S r   )r   r   clearr   r	   )r
   r   kwargss      r   __exit__zCustomObjectScope.__exit__F   s6    $-33555$-44T[AAAAAr   N)__name__
__module____qualname____doc__r   r   r    r   r   r   r      sP         2    B B B B Br   r   zkeras.saving.get_custom_objectszkeras.utils.get_custom_objectsc                      t           S )a  Retrieves a live reference to the global dictionary of custom objects.

    Custom objects set using using `custom_object_scope` are not added to the
    global dictionary of custom objects, and will not appear in the returned
    dictionary.

    Example:

    ```python
    get_custom_objects().clear()
    get_custom_objects()['MyObject'] = MyObject
    ```

    Returns:
        Global dictionary mapping registered class names to classes.
    )_GLOBAL_CUSTOM_OBJECTSr   r   r   get_custom_objectsr!   K   s
    ( "!r   z(keras.saving.register_keras_serializablez'keras.utils.register_keras_serializableCustomc                       fd}|S )a  Registers an object with the Keras serialization framework.

    This decorator injects the decorated class or function into the Keras custom
    object dictionary, so that it can be serialized and deserialized without
    needing an entry in the user-provided custom object dict. It also injects a
    function that Keras will call to get the object's serializable string key.

    Note that to be serialized and deserialized, classes must implement the
    `get_config()` method. Functions do not have this requirement.

    The object will be registered under the key 'package>name' where `name`,
    defaults to the object name if not passed.

    Example:

    ```python
    # Note that `'my_package'` is used as the `package` argument here, and since
    # the `name` argument is not provided, `'MyDense'` is used as the `name`.
    @keras.saving.register_keras_serializable('my_package')
    class MyDense(keras.layers.Dense):
      pass

    assert keras.saving.get_registered_object('my_package>MyDense') == MyDense
    assert keras.saving.get_registered_name(MyDense) == 'my_package>MyDense'
    ```

    Args:
      package: The package that this class belongs to. This is used for the
        `key` (which is `"package>name"`) to idenfify the class. Note that this
        is the first argument passed into the decorator.
      name: The name to serialize this class under in this package. If not
        provided or `None`, the class' name will be used (note that this is the
        case when the decorator is used with only one argument, which becomes
        the `package`).

    Returns:
      A decorator that registers the decorated class with the passed names.
    c                 \   n| j         }dz   |z   }t          j        |           rt          | d          st	          d          |t
          v rt	          | dt
          |                    | t          v rt	          |  dt          |                     | t
          |<   |t          | <   | S )z9Registers a class with the Keras serialization framework.N>
get_configzACannot register a class that does not have a get_config() method.z  has already been registered to )r   inspectisclasshasattr
ValueErrorr    _GLOBAL_CUSTOM_NAMES)arg
class_nameregistered_namenamepackages      r   	decoratorz.register_keras_serializable.<locals>.decorator   s    !-TT3<
!C-*4?3 	\(B(B 	'  
 444" = =)/:= =  
 &&& / /',/ /   36/$3S!
r   r   )r0   r/   r1   s   `` r   register_keras_serializabler2   b   s+    X     6 r   z keras.saving.get_registered_namezkeras.utils.get_registered_namec                 <    | t           v rt           |          S | j        S )a  Returns the name registered to an object within the Keras framework.

    This function is part of the Keras serialization and deserialization
    framework. It maps objects to the string names associated with those objects
    for serialization/deserialization.

    Args:
      obj: The object to look up.

    Returns:
      The name associated with the object, or the default Python name if the
        object is not registered.
    )r+   r   )objs    r   get_registered_namer5      s#    " """#C((|r   z"keras.saving.get_registered_objectz!keras.utils.get_registered_objectc                     | t           j        v rt           j        |          S | t          v rt          |          S |r| |v r||          S |r| |v r||          S dS )a  Returns the class associated with `name` if it is registered with Keras.

    This function is part of the Keras serialization and deserialization
    framework. It maps strings to the objects associated with them for
    serialization/deserialization.

    Example:

    ```python
    def from_config(cls, config, custom_objects=None):
      if 'my_custom_object_name' in config:
        config['hidden_cls'] = tf.keras.saving.get_registered_object(
            config['my_custom_object_name'], custom_objects=custom_objects)
    ```

    Args:
      name: The name to look up.
      custom_objects: A dictionary of custom objects to look the name up in.
        Generally, custom_objects is provided by the user.
      module_objects: A dictionary of custom objects to look the name up in.
        Generally, module_objects is provided by midlevel library implementers.

    Returns:
      An instantiable class associated with `name`, or `None` if no such class
        exists.
    N)r   r   r    )r/   r   module_objectss      r   get_registered_objectr8      sw    < +444+4T::	'	'	'%d++	 $DN22d##	 $DN22d##4r   )r"   N)NN)r   r'   	threading tensorflow.python.util.tf_exportr   r    r+   localr   r   r!   r2   r5   r8   custom_object_scoper   r   r   <module>r=      s   * )      : 9 9 9 9 9  .y00  &%# 
&B &B &B &B &B &B &B 
&BR %'G " " "( .- C C C	 CL &(I   ( (*M # # # #N (   r   