o
    ?e                     @   s   d 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 ZdddZdd ZdS )zcBuilt-in optimizer classes.

For more examples see the base class `tf.keras.optimizers.Optimizer`.
    )backend)	Optimizer)TFOptimizer)adadelta)adagrad)adam)adamax)ftrl)gradient_descent)nadam)optimizer_v2)rmsprop)deserialize_keras_objectserialize_keras_object	optimizerc                 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.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   c/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/tensorflow/python/keras/optimizers.py	serialize&   s   r   Nc                 C   sj   ddl m} tjtjtjtj	t
jtjtjtj|j|jd
}| d  |v r-| d  | d< t| ||ddS )a-  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)
r   r   r   r   r   r   Zsgdr	   ZlossscaleoptimizerZlossscaleoptimizerv1
class_namer   )Zmodule_objectscustom_objectsZprintable_module_name)Z'tensorflow.python.keras.mixed_precisionr   adadelta_v2ZAdadelta
adagrad_v2ZAdagradadam_v2ZAdam	adamax_v2ZAdamaxnadam_v2ZNadam
rmsprop_v2ZRMSpropgradient_descent_v2ZSGDr	   ZFtrlZLossScaleOptimizerlowerr   )configr   r   Zall_classesr   r   r   deserialize:   s(   r"   c                 C   sv   t | ttjfr
| S t | tjrt| }t| |S t | tr$t	| S t | t
r4t
| i d}t	|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   r!   z,Could not interpret optimizer identifier: {})
isinstancer   r   ZOptimizerV2tf_optimizer_moduler   r   Ztrack_tf_optimizerdictr"   str
ValueErrorformat)
identifieroptr!   r   r   r   getb   s   


r+   )N) __doc__Ztensorflow.python.kerasr   Z$tensorflow.python.keras.optimizer_v1r   r   Z$tensorflow.python.keras.optimizer_v2r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   Z+tensorflow.python.keras.utils.generic_utilsr   r   Ztensorflow.python.trainingr   r$   r   r"   r+   r   r   r   r   <module>   s&   
(