o
    Ne-                     @   sp  d Z ddlm  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, ddl*mZ- ddl*mZ. ddl*mZ ddl*m/Z0 dd	l*mZ1 ddl*m2Z3 ddl*mZ4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddlGmIZI ddlJmKZK eKdd d! ZLeKd"d,d#d$ZMeKd%g d&d'd( ZNeKd)d*d+ ZOdS )-zcBuilt-in optimizer classes.

For more examples see the base class `tf.keras.optimizers.Optimizer`.
    N)backend)adadelta)adagrad)adam)adamax)ftrl)nadam	optimizer)rmsprop)sgd)	adafactor)adamw)	Optimizer)TFOptimizer)gradient_descent)optimizer_v2)Adadelta)Adagrad)Adam)Adamax)Ftrl)SGD)Nadam)RMSprop)learning_rate_schedule)deserialize_keras_objectserialize_keras_object)keras_exportzkeras.optimizers.serializec                 C   s   t | S )a]  Serialize the optimizer configuration to JSON compatible python dict.

    The configuration can be used for persistence and reconstruct the
    `Optimizer` instance again.

    >>> tf.keras.optimizers.serialize(tf.keras.optimizers.legacy.SGD())
    {'class_name': 'SGD', 'config': {'name': 'SGD', 'learning_rate': 0.01,
                                     'decay': 0.0, 'momentum': 0.0,
                                     'nesterov': False}}

    Args:
      optimizer: An `Optimizer` instance to serialize.

    Returns:
      Python dict which contains the configuration of the input optimizer.
    r   r	    r    ID:\Projects\ConvertPro\env\Lib\site-packages\keras/optimizers/__init__.py	serializeX   s   r"   zkeras.optimizers.deserializec                 K   s  ddl m} |dd}t| d dkr| d dd}tjj rJt	 rJ|sJt
jtjtjtjt
jtjtjtjtjtjtjtj|j|j|jd}n!tjtjtjtjt
jtjtjtjt jt!jt"jt#j|j|j|jd}| d	 $ |v r{| d	 $ | d	< t%| ||d
dS )aE  Inverse of the `serialize` function.

    Args:
        config: Optimizer configuration dictionary.
        custom_objects: Optional dictionary mapping names (strings) to custom
          objects (classes and functions) to be considered during
          deserialization.

    Returns:
        A Keras Optimizer instance.
    r   )loss_scale_optimizeruse_legacy_optimizerFconfigis_legacy_optimizerT)r   r   r   r   ZexperimentaladadeltaZexperimentaladagradZexperimentaladamZexperimentalsgdr   r   r   r   ZlossscaleoptimizerZlossscaleoptimizerv3Zlossscaleoptimizerv1
class_namer
   )Zmodule_objectscustom_objectsZprintable_module_name)&Zkeras.mixed_precisionr#   poplengettf__internal__tf2enabledZexecuting_eagerlyadadelta_experimentalr   adagrad_experimentalr   adam_experimentalr   adamax_experimentalr   sgd_experimentalr   nadam_experimentalr   rmsprop_experimentalr   ftrl_experimentalr   ZLossScaleOptimizerV3ZLossScaleOptimizeradadelta_v2
adagrad_v2adam_v2	adamax_v2nadam_v2
rmsprop_v2gradient_descent_v2r   lowerr   )r%   r(   kwargsr#   r$   Zall_classesr    r    r!   deserializem   sd   
rA   z9keras.__internal__.optimizers.convert_to_legacy_optimizer)v1c                 C   s   t | tjstd|  dt|  d| jj }|  }g d}|D ]}|	|d q#t | j
tjr8| j
|d< ||d}t|dd	S )
a  Convert experimental optimizer to legacy optimizer.

    This function takes in a `tf.keras.optimizers.experimental.Optimizer`
    instance and converts it to the corresponding
    `tf.keras.optimizers.legacy.Optimizer` instance.
    For example, `tf.keras.optimizers.experimental.Adam(...)` to
    `tf.keras.optimizers.legacy.Adam(...)`.

    Args:
        optimizer: An instance of `tf.keras.optimizers.experimental.Optimizer`.
    zr`convert_to_legacy_optimizer` should only be called on instances of `tf.keras.optimizers.Optimizer`, but received z	 of type .)Zweight_decayZuse_emaZema_momentumZema_overwrite_frequencyZjit_compiler&   NZlearning_rater'   r%   Tr$   )
isinstanceoptimizer_experimentalr   
ValueErrortype	__class____name__r?   Z
get_configr)   Z_learning_rater   ZLearningRateSchedulerA   )r
   Zoptimizer_namer%   Zkeys_to_removekeyZlegacy_optimizer_configr    r    r!   convert_to_legacy_optimizer   s*   
rM   zkeras.optimizers.getc                 K   s   | dd}t| ttjfr| S t| tjr"tjj	 r| S t
| S t| tjjjjr6t| }t| |S t| trAt| |dS t| trSt| i d}t||dS td|  )a  Retrieves a Keras Optimizer instance.

    Args:
        identifier: Optimizer identifier, one of
            - String: name of an optimizer
            - Dictionary: configuration dictionary.
            - Keras Optimizer instance (it will be returned unchanged).
            - TensorFlow Optimizer instance (it will be wrapped as a Keras
              Optimizer).

    Returns:
        A Keras Optimizer instance.

    Raises:
        ValueError: If `identifier` cannot be interpreted.
    r$   FrE   rD   z*Could not interpret optimizer identifier: )r)   rF   r   base_optimizer_v2ZOptimizerV2rG   r,   r-   r.   r/   rM   compatrB   trainr   r   Ztrack_tf_optimizerdictrA   strrH   )
identifierr@   r$   optr%   r    r    r!   r+      s4   


r+   )N)P__doc__Ztensorflow.compat.v2rO   v2r,   Zkerasr   Zkeras.optimizers.legacyr   Zadadelta_legacyr   Zadagrad_legacyr   Zadam_legacyr   Zadamax_legacyr   Zftrl_legacyr   Znadam_legacyr
   Zoptimizer_legacyr   Zrmsprop_legacyr   Z
sgd_legacyZ'keras.optimizers.optimizer_experimentalr0   r   r1   r2   r3   r   Zadamw_experimentalr7   r5   rG   r6   r4   Zkeras.optimizers.optimizer_v1r   r   Zkeras.optimizers.optimizer_v2r8   r9   r:   r;   r   r>   r<   r   rN   r=   Z&keras.optimizers.optimizer_v2.adadeltar   Z%keras.optimizers.optimizer_v2.adagradr   Z"keras.optimizers.optimizer_v2.adamr   Z$keras.optimizers.optimizer_v2.adamaxr   Z"keras.optimizers.optimizer_v2.ftrlr   Z.keras.optimizers.optimizer_v2.gradient_descentr   Z#keras.optimizers.optimizer_v2.nadamr   Z%keras.optimizers.optimizer_v2.rmspropr   Zkeras.optimizers.schedulesr   Z!keras.saving.legacy.serializationr   r   Z tensorflow.python.util.tf_exportr   r"   rA   rM   r+   r    r    r    r!   <module>   sp   
Q
,