+
    $Lj                         ^ RI t ^ RIt^RIHtHt ^RIHtHtHtH	t	 ]	! 4       '       d   ^ RI
Hu Ht ^ RIHt R t ! R R]P$                  P&                  4      tR R ltR# )	    N)AcceleratorStateGradientState)DistributedType
honor_typeis_lomo_availableis_torch_xla_availablec                   a \        V \        \        34      '       d   \        V V3R  lV  4       4      # \        V \        4      '       d?   \        V 4      ! V P                  4        UUu/ uF  w  r#V\        VS4      bK  	  upp4      # \        V \        P                  4      '       d   V P                  S4      # V # u uppi )c              3   <   <"   T F  p\        VS4      x  K  	  R # 5iN)move_to_device).0tdevices   & @/app/.local/lib/python3.14/site-packages/accelerate/optimizer.py	<genexpr>!move_to_device.<locals>.<genexpr>   s     !KU.F";";Us   )
isinstancelisttupler   dicttypeitemsr   torchTensorto)stater   kvs   &f  r   r   r      s    %$''%!KU!KLL	E4	 	 E{U[[]S]TQA~a88]STT	E5<<	(	(xxL Ts   (B;
c                     a  ] tR t^&t o RtRR lt]R 4       t]P                  R 4       t]R 4       t	]	P                  R 4       t	]R 4       t
]
P                  R	 4       t
R
 tR tR tRR ltR tR tRR ltR t]R 4       tR tR tRtV tR# )AcceleratedOptimizera~  
Internal wrapper around a torch optimizer.

Conditionally will perform `step` and `zero_grad` if gradients should be synchronized when performing gradient
accumulation.

Args:
    optimizer (`torch.optim.optimizer.Optimizer`):
        The optimizer to wrap.
    device_placement (`bool`, *optional*, defaults to `True`):
        Whether or not the optimizer should handle device placement. If so, it will place the state dictionary of
        `optimizer` on the right device.
    scaler (`torch.amp.GradScaler` or `torch.cuda.amp.GradScaler`, *optional*):
        The scaler to use in the step function if training with mixed precision.
Nc                   Wn         W0n        \        4       V n        \	        4       V n        W n        R V n        V P                  eG   R V n        V P                   P                  V n
        \        W P                   P                  4      V n        V'       d   V P                   P                  4       pV P                  P                  \        P                   8X  d,   \"        P$                  ! W@P                  P&                  4       M\)        W@P                  P&                  4      pV P                   P+                  V4       R# R# )FN)	optimizerscalerr   accelerator_stater   gradient_statedevice_placement_is_overflow_accelerate_step_calledstep_optimizer_original_step_methodpatch_optimizer_step_optimizer_patched_step_method
state_dictdistributed_typer   XLAxmsend_cpu_data_to_devicer   r   load_state_dict)selfr"   r&   r#   r-   s   &&&& r   __init__AcceleratedOptimizer.__init__7   s    "!1!3+o 0!;;"+0D(37>>3F3FD02Ft^^M`M`2aD/ 224J%%66/:M:MM**:7M7M7T7TU+J8N8N8U8UV
NN**:6     c                .    V P                   P                  # r   r"   r   r3   s   &r   r   AcceleratedOptimizer.stateM   s    ~~###r6   c                &    WP                   n        R # r   r8   r3   r   s   &&r   r   r:   Q   s    $r6   c                .    V P                   P                  # r   r"   param_groupsr9   s   &r   r?   !AcceleratedOptimizer.param_groupsU   s    ~~***r6   c                &    WP                   n        R # r   r>   )r3   r?   s   &&r   r?   r@   Y   s    &2#r6   c                .    V P                   P                  # r   r"   defaultsr9   s   &r   rD   AcceleratedOptimizer.defaults]   s    ~~&&&r6   c                &    WP                   n        R # r   rC   )r3   rD   s   &&r   rD   rE   a   s    "*r6   c                <    V P                   P                  V4       R # r   )r"   add_param_group)r3   param_groups   &&r   rH   $AcceleratedOptimizer.add_param_groupe   s    &&{3r6   c                   V P                   P                  \        P                  8X  d=   V P                  '       d+   \
        P                  ! WP                   P                  4       V P                  P                  V4       R # r   )
r$   r.   r   r/   r&   r0   r1   r   r"   r2   )r3   r-   s   &&r   r2   $AcceleratedOptimizer.load_state_dicth   sS    !!22o6I6IIdNcNcNc&&z3I3I3P3PQ&&z2r6   c                6    V P                   P                  4       # r   )r"   r-   r9   s   &r   r-   AcceleratedOptimizer.state_dictm   s    ~~((**r6   c                Z   V P                   P                  '       d   R \        P                  ! V P                  P
                  4      P                  9   pV'       d%   Vf   RpV P                  P                  VR7       R# Ve   \        R4      hV P                  P                  4        R# R# )set_to_noneNT)rP   zJ`set_to_none` for Optimizer.zero_grad` is not supported by this optimizer.)r%   sync_gradientsinspect	signaturer"   	zero_grad
parameters
ValueError)r3   rP   
accept_args   && r   rT   AcceleratedOptimizer.zero_gradp   s    ---&'*;*;DNN<T<T*U*`*``J&"&K(([(A*$%qrr((* .r6   c                   \        V P                  R4      '       dB   \        V P                  P                  4      '       d   V P                  P                  4        R# \        V P                  R4      '       d   \        V P                  P                  R4      '       dX   \        V P                  P                  P                  4      '       d'   V P                  P                  P                  4        R# R# R# R# )zP
Sets the optimizer to "train" mode. Useful for optimizers like `schedule_free`
trainr"   N)hasattrr"   callablerZ   r9   s   &r   rZ   AcceleratedOptimizer.train|   s     4>>7++9M9M0N0NNN  "DNNK0000'::117788 NN$$**, 9 ; 1r6   c                    \        V P                  R4      '       dD   \        V P                  P                  4      '       d   V P                  P                  4        R# R# R# )zO
Sets the optimizer to "eval" mode. Useful for optimizers like `schedule_free`
evalN)r[   r"   r\   r_   r9   s   &r   r_   AcceleratedOptimizer.eval   sB     4>>6**x8K8K/L/LNN! 0M*r6   c                (   \        4       '       d	   ^ RIHpHp V P                  P
                  '       g   V P                  P                  \        P                  8X  de   \        P                  ! V P                  4      p\        P                  ! RVR\        P                  ! 4       ,          R7       RV P                  n        \        4       '       d!   \!        V P                  XX34      '       d   R# V P                  P"                  '       d   V P$                  e   V P&                  V P                  n        V P$                  P)                  V P                  V4       V P$                  P+                  4        V P,                  '       g	   RV n        MRV n        V P0                  V P                  n        RV n        MV P                  P)                  V4       V P                  P                  \        P                  8X  d   RV P                  n        R# R# )r   )AdaLomoLomosumg      ?)scaleTNF)r   
lomo_optimrb   rc   r%   is_xla_gradients_syncedr$   r.   r   r/   r0   _fetch_gradientsr"   
all_reducexr
world_sizer   rQ   r#   r,   r)   updater(   r'   r*   )r3   closurerb   rc   	gradientss   &&   r   r)   AcceleratedOptimizer.step   sf   0 ##;;;&&77?;N;NN++DNN;IMM%#2GH:>D7$..4/::---{{&&*&I&I#  9""$333(,D%(-D%&*&J&J#/4,##G,!!22o6I6II:?D7 Jr6   c                    V P                   P                   F-  pVR ,           Uu. uF  q1P                  W34      NK  	  upVR &   K/  	  R# u upi )paramsN)r"   r?   get)r3   parameters_maprI   ps   &&  r   _switch_parameters'AcceleratedOptimizer._switch_parameters   sC    >>66KGRS[G\$]G\!%7%7%=G\$]K! 7$]s   A
c                    V P                   # )z.Whether or not the optimizer step was skipped.)r'   r9   s   &r   step_was_skipped%AcceleratedOptimizer.step_was_skipped   s        r6   c                    . ROpV P                   P                  4        UUu/ uF  w  r#W!9  g   K  W#bK  	  upp# u uppi )r(   )r(   r*   r,   )__dict__r   )r3   _ignored_keysr   r   s   &   r   __getstate__!AcceleratedOptimizer.__getstate__   s=    

 "&!4!4!6Q!6!:P!6QQQs   
;;c                    V P                   P                  V4       V P                  eI   RV n        V P                  P
                  V n        \        W P                  P
                  4      V n        R # R # )NF)	r{   rl   r#   r(   r"   r)   r*   r+   r,   r<   s   &&r   __setstate__!AcceleratedOptimizer.__setstate__   sT    U#;;"+0D(37>>3F3FD02Ft^^M`M`2aD/ #r6   )	r(   r'   r*   r,   r$   r&   r%   r"   r#   )TNr   )__name__
__module____qualname____firstlineno____doc__r4   propertyr   setterr?   rD   rH   r2   r-   rT   rZ   r_   r)   ru   rx   r}   r   __static_attributes____classdictcell__)__classdict__s   @r   r    r    &   s      7, $ $ \\% % + + 3 3 ' ' __+ +43
+
+-"$@L^ ! !Rb br6   r    c                $    V ^8  d   QhR\         /# )   accelerated_optimizer)r    )formats   "r   __annotate__r      s      0D r6   c                    a a V V3R  lpV# )c                  "   < R Sn         S! V / VB # )T)r(   )argskwargsr   methods   *,r   patched_step*patch_optimizer_step.<locals>.patched_step   s    8<5t&v&&r6    )r   r   r   s   ff r   r+   r+      s    ' r6   )rR   r   r   r   r   utilsr   r   r   r   torch_xla.core.xla_modelcore	xla_modelr0   torch_xla.runtimeruntimerj   r   optim	Optimizerr    r+   r   r6   r   <module>r      sO      2 Y Y ))"gb5;;00 gbTr6   