
    6bi                         S r SSKJs  Jr  SSKJr  SSKJr  SSK	J
r
  SSKJr  \
" 5       \" SSS	/ S
9 " S S\R                  5      5       5       r\R                   R                  S\R                   5      \l         g)z!Adagrad optimizer implementation.    N)initializers)	optimizer)register_keras_serializable)keras_exportz%keras.optimizers.experimental.Adagradzkeras.optimizers.Adagradz-keras.dtensor.experimental.optimizers.Adagrad)v1c                   f   ^  \ rS rSrSr            SU 4S jjrU 4S jrS rU 4S jrSr	U =r
$ )	Adagrad   a  Optimizer that implements the Adagrad algorithm.

Adagrad is an optimizer with parameter-specific learning rates,
which are adapted relative to how frequently a parameter gets
updated during training. The more updates a parameter receives,
the smaller the updates.

Args:
    learning_rate: Initial value for the learning rate:
        either a floating point value,
        or a `tf.keras.optimizers.schedules.LearningRateSchedule` instance.
        Defaults to 0.001. Note that `Adagrad` tends to benefit from higher
        initial learning rate values compared to other optimizers. To match
        the exact form in the original paper, use 1.0.
    initial_accumulator_value: Floating point value.
        Starting value for the accumulators (per-parameter momentum values).
        Must be non-negative.
    epsilon: Small floating point value used to maintain numerical
        stability.
    {{base_optimizer_keyword_args}}

Reference:
    - [Duchi et al., 2011](
        http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf).
c                 ~   > [         TU ]  " SUUUUUU	U
UUS.	UD6  U R                  U5      U l        X l        X0l        g )N)	weight_decayclipnorm	clipvalueglobal_clipnormuse_emaema_momentumema_overwrite_frequencyjit_compilename )super__init___build_learning_rate_learning_rateinitial_accumulator_valueepsilon)selflearning_rater   r   r   r   r   r   r   r   r   r   r   kwargs	__class__s                 Y/home/james-whalen/.local/lib/python3.13/site-packages/tf_keras/src/optimizers/adagrad.pyr   Adagrad.__init__=   s\      	 	
%+%$;#	
 	
 #77F)B&    c                 ^  > [         TU ]  U5        [        U S5      (       a  U R                  (       a  g SU l        / U l        [
        R                  " U R                  5      nU HF  nU R                  R                  U R                  USU" UR                  UR                  S9S95        MH     g )N_builtTaccumulator)shapedtype)initial_value)r   buildhasattrr$   _accumulatorsr   Constantr   appendadd_variable_from_referencer&   r'   )r   var_listinitializervarr   s       r    r)   Adagrad.build]   s    h4""t{{"++D,J,JKC%%00!"-CIISYY"O 1  r"   c                    [         R                  " U R                  UR                  5      nU R	                  U5      nU R
                  U R                  U      n[        U[         R                  5      (       a  UR                  [         R                  " UR                  UR                  -  UR                  5      5        [         R                  " XQR                  S9n[         R                  " X`R                  -   5      nUR                  [         R                  " U* UR                  -  U-  UR                  5      5        gUR                  X-  5        UR!                  X1-  [         R                  " XPR                  -   5      -  5        g)z=Update step given gradient and the associated model variable.)indicesN)tfcastr   r'   _var_keyr+   _index_dict
isinstanceIndexedSlicesscatter_addvaluesr4   gathersqrtr   
assign_add
assign_sub)r   gradvariablelrvar_keyr%   sparse_accumulatorsparse_denominators           r    update_stepAdagrad.update_stepm   s    WWT''8--)(()9)9')BCdB,,--##  t{{!:DLLI "$;!M!#);ll)J!K    C$++%(::DLL ""4;/	BGGK,,4N,O OPr"   c                    > [         TU ]  5       nUR                  U R                  U R                  5      U R
                  U R                  S.5        U$ )N)r   r   r   )r   
get_configupdate_serialize_hyperparameterr   r   r   )r   configr   s     r    rJ   Adagrad.get_config   sQ    #%!%!?!?''" .2-K-K<<	
 r"   )r+   r$   r   r   r   )gMbP?g?gHz>NNNNFgGz?NTr	   )__name__
__module____qualname____firstlineno____doc__r   r)   rG   rJ   __static_attributes____classcell__)r   s   @r    r	   r	      sI    8 "% $@ Q0 r"   r	   z{{base_optimizer_keyword_args}})rS   tensorflow.compat.v2compatv2r5   tf_keras.srcr   tf_keras.src.optimizersr   'tf_keras.src.saving.object_registrationr    tensorflow.python.util.tf_exportr   	Optimizerr	   replacebase_optimizer_keyword_argsr   r"   r    <module>r`      s    ( ! ! % - O : +3		oi!! o od //))%y'L'Lr"   