o
    i e2                     @   sB  d Z ddlZddl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/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl5m7Z7 ddl8m9Z9 ddl:m;Z< ddl=m>Z> dd l=m?Z? dd!l@mAZA eAd"d2d$d%ZBd&d' ZCeAd(d3d)d*ZDeAd+g d,d-d. ZEeAd/d0d1 ZFdS )4zcBuilt-in optimizer classes.

For more examples see the base class `tf.keras.optimizers.Optimizer`.
    N)logging)backend)adadelta)	adafactor)adagrad)adam)adamax)adamw)ftrl)lion)nadam)	optimizer)rmsprop)sgd)gradient_descent)optimizer_v2)Adadelta)Adagrad)Adam)Adamax)Ftrl)SGD)Nadam)RMSprop)	Optimizer)TFOptimizer)learning_rate_schedule)serialization)deserialize_keras_object)serialize_keras_object)keras_exportzkeras.optimizers.serializeFc                 C   sN   	 | du rdS t | tjttjfstdt|  d |r#t	| 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())
    {'module': 'keras.optimizers.legacy', 'class_name': 'SGD', 'config': {'name': 'SGD', 'learning_rate': 0.01, 'decay': 0.0, 'momentum': 0.0, 'nesterov': False}, 'registered_name': None}NzThe `keras.optimizers.serialize()` API should only be used for objects of type `keras.optimizers.Optimizer`. Found an instance of type z+, which may lead to improper serialization.)

isinstancebase_optimizerr   base_optimizer_legacyOptimizerV2warningswarntypelegacy_serializationr   )r   use_legacy_format r*   L/var/www/myenv/lib/python3.10/site-packages/keras/src/optimizers/__init__.py	serializeJ   s$   	
r,   c                   C   s   t  dkot  dkS )NDarwinarm)platformsystem	processorr*   r*   r*   r+   
is_arm_maco   s   r2   zkeras.optimizers.deserializec                 K   s4  ddl m} |dd}|rtd| t| d dkr%| d dd}tjj	 rVt
 rVt sV|sVt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
< |rt'j(| ||ddS t(| ||ddS )aI  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Invalid keyword arguments: configis_legacy_optimizerT)r   r   r   r   experimentaladadeltaexperimentaladagradexperimentaladamexperimentalsgdr   r   r   r
   lossscaleoptimizerlossscaleoptimizerv3lossscaleoptimizerv1
class_namer   )module_objectscustom_objectsprintable_module_name))keras.src.mixed_precisionr4   pop	TypeErrorlengettf__internal__tf2enabledexecuting_eagerlyr2   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   LossScaleOptimizerV3LossScaleOptimizeradadelta_legacyadagrad_legacyadam_legacyadamax_legacynadam_legacyrmsprop_legacygradient_descent_legacyftrl_legacylowerr(   r   )r7   rB   r)   kwargsr4   r5   all_classesr*   r*   r+   deserializes   sz   
	r[   z9keras.__internal__.optimizers.convert_to_legacy_optimizer)v1c                 C   s   ddl m} t| tjstd|  dt|  d| jj	 }| 
 }g d}|D ]}||d q)t| |jrEt| j|d< |d	krEd
}t| drVt| jtjrV| j|d< ||d}t|ddS )a|  Convert experimental optimizer to legacy optimizer.

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

    Args:
        optimizer: An instance of `keras.optimizers.Optimizer`.
    r   r3   zr`convert_to_legacy_optimizer` should only be called on instances of `tf.keras.optimizers.Optimizer`, but received z	 of type .)weight_decayuse_emaema_momentumema_overwrite_frequencyjit_compiler8   Ninner_optimizerr>   r=   _learning_ratelearning_rater@   r7   Tr5   )rD   r4   r!   r"   r   
ValueErrorr'   	__class____name__rX   
get_configrE   rN   convert_to_legacy_optimizerrc   hasattrrd   r   LearningRateScheduler[   )r   r4   optimizer_namer7   keys_to_removekeylegacy_optimizer_configr*   r*   r+   rl      s8   
rl   zkeras.optimizers.getc                 K   s   | dd}|rt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r?t| }t| |S t| trOd| v}t| ||dS t| trat| 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.
    r5   Fr6   module)r5   r)   rf   rg   z*Could not interpret optimizer identifier: )rE   rF   r!   r   r#   r$   r"   rI   rJ   rK   rL   rl   compatr\   trainr   r   track_tf_optimizerdictr[   strrH   rh   )
identifierrY   r5   optr)   r7   r*   r*   r+   rH     sD   


rH   )F)NF)G__doc__r/   r%   tensorflow.compat.v2rt   v2rI   abslr   	keras.srcr   keras.src.optimizersr   r   r   r   r   r	   r
   r   r   r   r"   r   r   keras.src.optimizers.legacyrP   rQ   rR   rS   rW   r   rV   rT   r   r#   rU   $keras.src.optimizers.legacy.adadeltar   #keras.src.optimizers.legacy.adagradr    keras.src.optimizers.legacy.adamr   "keras.src.optimizers.legacy.adamaxr    keras.src.optimizers.legacy.ftrlr   ,keras.src.optimizers.legacy.gradient_descentr   !keras.src.optimizers.legacy.nadamr   #keras.src.optimizers.legacy.rmspropr   !keras.src.optimizers.optimizer_v1r   r   keras.src.optimizers.schedulesr   keras.src.saving.legacyr   r(   "keras.src.saving.serialization_libr   r    tensorflow.python.util.tf_exportr    r,   r2   r[   rl   rH   r*   r*   r*   r+   <module>   sj   $_
;