
    <Цiǌ              *       t   S SK JrJrJrJrJr  S SKrS SKJr  SSKJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SS/r " S S\5      rS	S
\ S\ S\ S\	 S\ S\ S3-   \l        S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\S\S\\ \4   S\\ \4   S\\ \4   S\ S\ S\S\S\4$S  jr!S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\S\S\\ \4   S\\ \4   S\\ \4   S\ S\ S\S\S\4$S! jr"S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\\   S\S\S\ S\ S\\ \4   S\ S\ S\S\S\S"S4&S# jr#\" \!S$9       S(S\\   S\\   S\\   S\\   S\\   S\\   S%\\   S\S\S&\\   S\\   S\\   S\S\S\ S\ S\\ \4   S\ S\ S\4(S' jj5       r$g))    )castListOptionalTupleUnionN)Tensor   )_capturable_doc_default_to_fused_or_foreach_device_dtype_check_for_fused_differentiable_doc_disable_dynamo_if_unsupported_foreach_doc
_fused_doc!_get_capturable_supported_devices_get_scalar_dtype
_get_value_maximize_doc_params_doc_stack_if_compiling_use_grad_for_differentiable_view_as_real
DeviceDictDeviceDtypeDict	OptimizerParamsTAdamadamc                      ^  \ rS rSr     SSSSSSS.S\S\\\4   S\\\\4   \\\4   4   S\S	\S
\	S\
\	   S\	S\	S\	S\
\	   4U 4S jjjjrU 4S jrS r\SS j5       rSrU =r$ )r   "   FN)foreachmaximize
capturabledifferentiablefusedparamslrbetasepsweight_decayamsgradr!   r"   r#   r$   r%   c                n  > [        U[        5      (       a8  U(       a  U	(       d  [        S5      eUR                  5       S:w  a  [        S5      eSU::  d  [        SU 35      eSU::  d  [        SU 35      eSUS   s=::  a  S:  d  O  [        S	US    35      eSUS   s=::  a  S:  d  O  [        S
US    35      eSU::  d  [        SU 35      e[        US   [        5      (       a  [        US   [        5      (       d;  [        US   [        5      (       a  [        US   [        5      (       d  [        S5      e[        US   [        5      (       a;  U	(       d  U(       a  [        S5      eUS   R                  5       S:w  a  [        S5      e[        US   [        5      (       a;  U	(       d  U(       a  [        S5      eUS   R                  5       S:w  a  [        S5      e[        UUUUUUUU	U
US9
n[        TU ]  X5        U(       a,  U
(       a  [        S5      eSU l	        U(       a  [        S5      eg g )NElr as a Tensor is not supported for capturable=False and foreach=Truer	   zTensor lr must be 1-element        zInvalid learning rate: zInvalid epsilon value: r         ?z#Invalid beta parameter at index 0: z#Invalid beta parameter at index 1: zInvalid weight_decay value: z0betas must be either both floats or both TensorszKbetas[0] as a Tensor is not supported for capturable=False and foreach=Truez!Tensor betas[0] must be 1-elementzKbetas[1] as a Tensor is not supported for capturable=False and foreach=Truez!Tensor betas[1] must be 1-element)
r'   r(   r)   r*   r+   r"   r!   r#   r$   r%   z)`fused` does not support `differentiable`Tz0`fused` and `foreach` cannot be `True` together.)

isinstancer   
ValueErrornumelfloatdictsuper__init__RuntimeError_step_supports_amp_scaling)selfr&   r'   r(   r)   r*   r+   r!   r"   r#   r$   r%   defaults	__class__s                O/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/optim/adam.pyr6   Adam.__init__#   s)    b&!!z [  xxzQ !>??by6rd;<<cz6se<==eAh$$B58*MNNeAh$$B58*MNNl";L>JKKa%((Za%-H-H58V,,E!Hf1M1MOPPeAh''' a  Qx~~1$ !DEEeAh''' a  Qx~~1$ !DEE%!)
 	*"#NOO.2D+
 "#UVV      c           	        > [         TU ]  U5        U R                   GH2  nUR                  SS5        UR                  SS5        UR                  SS 5        UR                  SS5        UR                  SS5        UR                  SS 5      nUS    H  nU R                  R                  U/ 5      n[        U5      S	:w  d  M0  [        R                  " US
   5      (       a  MP  [        US
   5      nUS   (       d
  US   (       a'  [        R                  " U[        US9UR                  S9O[        R                  " U[        5       S9US
'   M     GM5     g )Nr+   Fr"   r!   r#   r$   r%   r&   r   stepis_fuseddtypedevicerD   )r5   __setstate__param_groups
setdefaultstategetlentorch	is_tensorr3   tensorr   rE   )r9   rJ   groupr%   pp_statestep_valr;   s          r<   rG   Adam.__setstate__p   s   U#&&EY.Z/Y-\51-u5$$Wd3E8_**..B/w<1$U__WV_-M-M$WV_5H !.%. $"3U"C#$88 #\\(:K:MN FO	 % 'r>   c                    SnUS    GHK  n	U	R                   c  M  U[        R                  " U	5      -  nUR                  U	5        U	R                   R                  (       a  [        S5      eUR                  U	R                   5        U R                  U	   n
[        U
5      S:X  a  US   (       a  [        U	5        US   (       d
  US   (       a*  [        R                  " S[        US   S9U	R                  S	9O[        R                  " S
[        5       S9U
S'   [        R                  " U	[        R                  S9U
S'   [        R                  " U	[        R                  S9U
S'   US   (       a&  [        R                  " U	[        R                  S9U
S'   UR                  U
S   5        UR                  U
S   5        US   (       a  UR                  U
S   5        US   (       a  U
S   R                  (       a  [        S5      eUS   (       a3  [        R                   " US   5      (       a  US   (       d  [        S5      eUR                  U
S   5        GMN     U$ )NFr&   zJAdam does not support sparse gradients, please consider SparseAdam insteadr   r%   r#    rA   rC   r.   rF   r@   )memory_formatexp_avg
exp_avg_sqr+   max_exp_avg_sqr$   zB`requires_grad` is not supported for `step` in differentiable moder!   r'   r-   )gradrM   
is_complexappend	is_sparser7   rJ   rL   r   zerosr   rE   rO   
zeros_likepreserve_formatrequires_gradrN   )r9   rP   params_with_gradgradsexp_avgsexp_avg_sqsmax_exp_avg_sqsstate_stepshas_complexrQ   rJ   s              r<   _init_groupAdam._init_group   s    xAvv!u//22 ''*66##&d  QVV$

1u:?W~5a8 !.%. "3U7^"L#$88 #\\#5F5HI &M (-'7'7)>)>(E)$ +0*:*:)>)>+E,' Y'272B2BU-B-B3./ i 01""5#67##**51A+BC)*uV}/J/J&\  )$d44!,/&_  ""5=1{ !| r>   c                    U R                  5         SnUb%  [        R                  " 5          U" 5       nSSS5        U R                   H|  n/ n/ n/ n/ n/ n/ n	US   u  pU R	                  UUUUUUU	5      n[        UUUUUU	4US   UU
UUS   US   US   US   US   US	   US
   US   [        U SS5      [        U SS5      S.6  M~     U$ ! , (       d  f       N= f)zPerform a single optimization step.

Args:
    closure (Callable, optional): A closure that reevaluates the model
        and returns the loss.
Nr(   r+   r'   r*   r)   r"   r!   r#   r$   r%   
grad_scale	found_inf)r+   ri   beta1beta2r'   r*   r)   r"   r!   r#   r$   r%   rm   rn   ) _cuda_graph_capture_health_checkrM   enable_gradrH   rj   r   getattr)r9   closurelossrP   rc   rd   re   rf   rg   rh   ro   rp   ri   s                r<   r@   	Adam.step   s0    	--/""$y % &&E-/"$E%'H(*K,.O(*K >LE** K   i(';">2%Lz*i( .$%56Gn"4t<!$T:)' 'T [ %$s   C		
C)r8   )gMbP?)g?g+?g:0yE>r   FN)__name__
__module____qualname____firstlineno__r   r   r3   r   r   boolr   r6   rG   rj   r   r@   __static_attributes____classcell__)r;   s   @r<   r   r   "   s
    $(COKW #' $ $KWKW %- KW U5&=)5+??@	KW
 KW KW KW $KW KW KW KW ~KW KWZ.IV "8 "8r>   a  Implements Adam algorithm.

    .. math::
       \begin{aligned}
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{input}      : \gamma \text{ (lr)}, \beta_1, \beta_2
                \text{ (betas)},\theta_0 \text{ (params)},f(\theta) \text{ (objective)}          \\
            &\hspace{13mm}      \lambda \text{ (weight decay)},  \: \textit{amsgrad},
                \:\textit{maximize},  \: \epsilon \text{ (epsilon)}                              \\
            &\textbf{initialize} :  m_0 \leftarrow 0 \text{ ( first moment)},
                v_0\leftarrow 0 \text{ (second moment)},\: \widehat{v_0}^{max}\leftarrow 0\\[-1.ex]
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{for} \: t=1 \: \textbf{to} \: \ldots \: \textbf{do}                         \\

            &\hspace{5mm}\textbf{if} \: \textit{maximize}:                                       \\
            &\hspace{10mm}g_t           \leftarrow   -\nabla_{\theta} f_t (\theta_{t-1})         \\
            &\hspace{5mm}\textbf{else}                                                           \\
            &\hspace{10mm}g_t           \leftarrow   \nabla_{\theta} f_t (\theta_{t-1})          \\
            &\hspace{5mm}\textbf{if} \: \lambda \neq 0                                           \\
            &\hspace{10mm} g_t \leftarrow g_t + \lambda  \theta_{t-1}                            \\
            &\hspace{5mm}m_t           \leftarrow   \beta_1 m_{t-1} + (1 - \beta_1) g_t          \\
            &\hspace{5mm}v_t           \leftarrow   \beta_2 v_{t-1} + (1-\beta_2) g^2_t          \\
            &\hspace{5mm}\widehat{m_t} \leftarrow   m_t/\big(1-\beta_1^t \big)                   \\
            &\hspace{5mm}\widehat{v_t} \leftarrow   v_t/\big(1-\beta_2^t \big)                   \\
            &\hspace{5mm}\textbf{if} \: amsgrad                                                  \\
            &\hspace{10mm}\widehat{v_t}^{max} \leftarrow \mathrm{max}(\widehat{v_{t-1}}^{max},
                \widehat{v_t})                                                                   \\
            &\hspace{10mm}\theta_t \leftarrow \theta_{t-1} - \gamma \widehat{m_t}/
                \big(\sqrt{\widehat{v_t}^{max}} + \epsilon \big)                                 \\
            &\hspace{5mm}\textbf{else}                                                           \\
            &\hspace{10mm}\theta_t \leftarrow \theta_{t-1} - \gamma \widehat{m_t}/
                \big(\sqrt{\widehat{v_t}} + \epsilon \big)                                       \\
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
            &\bf{return} \:  \theta_t                                                     \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
       \end{aligned}

    For further details regarding the algorithm we refer to `Adam: A Method for Stochastic Optimization`_.
    z
    Args:
        a  
        lr (float, Tensor, optional): learning rate (default: 1e-3). A tensor LR
            is not yet supported for all our implementations. Please use a float
            LR if you are not also specifying fused=True or capturable=True.
        betas (Tuple[float, float], optional): coefficients used for computing
            running averages of gradient and its square (default: (0.9, 0.999))
        eps (float, optional): term added to the denominator to improve
            numerical stability (default: 1e-8)
        weight_decay (float, optional): weight decay (L2 penalty) (default: 0)
        amsgrad (bool, optional): whether to use the AMSGrad variant of this
            algorithm from the paper `On the Convergence of Adam and Beyond`_
            (default: False)
        z	
        a=  
    .. Note::
        A prototype implementation of Adam and AdamW for MPS supports `torch.float32` and `torch.float16`.
    .. _Adam\: A Method for Stochastic Optimization:
        https://arxiv.org/abs/1412.6980
    .. _On the Convergence of Adam and Beyond:
        https://openreview.net/forum?id=ryQu7f-RZ

    r&   rd   re   rf   rg   rh   rm   rn   r+   ri   ro   rp   r'   r*   r)   r"   r#   r$   c       
          	   Uc  Ub   e[         R                  R                  5       (       aE  [        U[        5      (       d   e[        U
[        5      (       d   e[        U[        5      (       d   e[        U
[
        5      (       a  U
R                  U
R                  4U
0nOS n[        U 5       GH  u  nnU(       d  UU   OUU   * nUU   nUU   nUU   n[         R                  R                  5       (       dd  U(       a]  [        5       nUR                  R                  UR                  R                  :X  a  UR                  R                  U;   d   SU S35       eUS-  nUS:w  a  UR                  UUS9n[         R                  " U5      (       a{  [         R                  " U5      n[         R                  " U5      n[         R                  " U5      nU(       a  [         R                  " UU   5      UU'   [         R                  " U5      nUR                  nUb0  UR                  nUU4nUU;  a  U
R!                  UUSS9UU'   UU   nOU
nUR#                  USU-
  5        UR%                  U5      R'                  UUR)                  5       SU-
  S9  U(       d  U(       a  UnSU
U-  -
  nSUU-  -
  n UU-  n!U!R+                  5       n"U R-                  5       n#U(       au  U(       a  UU   R/                  5       n$OUU   n$UU   R1                  [         R2                  " U$U5      5        UU   R-                  5       U#U"-  -  R5                  UU"-  5      n%O(UR-                  5       U#U"-  -  R5                  UU"-  5      n%UR7                  UU%5        O[9        U5      nSU
U-  -
  nSUU-  -
  n UU-  n!U S	-  n#U(       aB  [         R2                  " UU   UUU   S
9  UU   R-                  5       U#-  R5                  U5      n%O"UR-                  5       U#-  R5                  U5      n%UR7                  UU%U!* S9  U(       d  GM  [         R                  " U U   5      (       d  GM  [         R:                  " UU   5      UU'   GM     g )NIIf capturable=True, params and state_steps must be on supported devices: .r	   r   alphaT)rE   rD   non_blocking)value      ?)out)rM   jitis_scriptingr0   r3   r   rE   rD   	enumeratecompileris_compilingr   typeaddr\   view_as_realtolerp_mul_addcmul_conjnegsqrtclonecopy_maximumadd_addcdiv_r   view_as_complex)&r&   rd   re   rf   rg   rh   rm   rn   r+   ri   ro   rp   r'   r*   r)   r"   r#   r$   
beta1_dictiparamr[   rX   rY   step_tcapturable_supported_devicesrE   rD   keydevice_beta1r@   bias_correction1bias_correction2	step_sizestep_size_negbias_correction2_sqrtrZ   denoms&                                         r<   _single_tensor_adamr   T  sE   * )"333yy "e$$$$%''''%'''' %  27,,1Le0T

f%5'uQxeAhY1+ ^
Q ~~**,,+L+N(!!V]]%7%77LL%%)EE{ [[wZxxyz{F
 	!188E86DE""%%d+D((1G++J7J%*%7%78J%K"&&u-E!KKE 5/C*$"'((&TX("Y
31;CL L 	dA,-''diikU'KD 5$; 5$;--I%MMOM$4$9$9$;!!%4Q%7%=%=%?N%4Q%7N"((~z)RS $A&++-1F1VW$s]*+ 
 OO%)>)NO$s]*+  NN7E*f%D 5$; 5$;--I$4c$9!oa0*/RSBTU )+0025JJPPQTU#*-BBHHMNN7E)N< 7u''q	22!&!6!6q7I!JOAM &r>   c       
   	      |  ^, [        U 5      S:X  a  g [        U[        5      (       a  U(       d  [        S5      e[        U
[        5      (       a1  U(       d  [	        S5      eU
R                  5       S:w  a  [	        S5      e[        U[        5      (       a1  U(       d  [	        S5      eUR                  5       S:w  a  [	        S5      e[        R                  R                  5       (       d>  U(       a7  [        SS	9m,[        U,4S
 j[        X5       5       5      (       d   ST, S35       eUc  Ub   eU(       a   S5       e[        R                  " XX#XE/5      n[        U
[        5      (       a'  [        U
R                  5      S:w  a  U
R                  U
0OS nUR!                  5        GH  u  u  nnnnnnn[#        [$        [           U5      n[#        [$        [           U5      n[#        [$        [           U5      n[#        [$        [           U5      n[#        [$        [           U5      nUS   R                  n Ub  U U;  a  U
R'                  U SS9UU '   U(       a  UU    OU
n!U	(       a<  U(       a'  [#        [$        [           U5      n"[)        UUUUU"5        O[)        UUUU5        U(       a  [        R*                  " U5      n[        R                  R                  5       (       d>  US   R,                  (       a*  [        R.                  " U[        R0                  " SSS9SS9  O[        R.                  " US5        US:w  a4  U(       a  [        R.                  " UUUS9  O[        R2                  " UUUS9n[        R4                  " UUSU!-
  5        [        R6                  " UU5        [        U[        R                  5      (       a  [        R8                  " USU-
  5      n#Sn$OUn#SU-
  n$[        R:                  " UU#UU$5        AA#U(       Ga{  [        R<                  " U
U5      n%[        R<                  " UU5      n&[        R>                  " U%S5        [        R>                  " U&S5        [        R@                  " U&5        [        RB                  " U%U5        [        RD                  " U%5        [        RF                  " U&5        U%n'U&n(U(       aE  [#        [$        [           U5      n"[        RH                  " U"U5        [        RJ                  " U"5      n)O[        RJ                  " U5      n)[        RB                  " U)U(5        [        R.                  " U)U5        [        RB                  " U)U'5        [        RL                  " UUU)5        GM  U V*s/ s H  n*SU
[O        U*5      -  -
  PM     n%n*U V*s/ s H  n*SU[O        U*5      -  -
  PM     n&n*[Q        U% V+s/ s H  n+UU+-  S-  PM     sn+5      n'U& V+s/ s H  n+U+S-  PM
     n(n+U(       aE  [#        [$        [           U5      n"[        RH                  " U"U5        [        RJ                  " U"5      n)O[        RJ                  " U5      n)[        RB                  " U)U(5        [        R.                  " U)U5        [        RL                  " UUU)U'5        GM     g s  sn*f s  sn*f s  sn+f s  sn+f )Nr   r-   zHbeta1 as a Tensor is not supported for capturable=False and foreach=Truer	   zTensor beta1 must be 1-elementzHbeta2 as a Tensor is not supported for capturable=False and foreach=TruezTensor beta2 must be 1-elementF)supports_xlac              3      >#    U  HT  u  pUR                   R                  UR                   R                  :H  =(       a    UR                   R                  T;   v   MV     g 7frw   )rE   r   ).0rQ   r@   r   s      r<   	<genexpr>%_multi_tensor_adam.<locals>.<genexpr>  sN      
 4 HHMMT[[--- >!==>3s   AAr   r   z#_foreach ops don't support autogradcpuTrE   r   r/   )rE   r   r   ))rL   r0   r   r7   r1   r2   rM   r   r   r   allzipr   "_group_tensors_by_device_and_dtypestrrE   valuesr   r   r   r   _foreach_negis_cpu_foreach_add_rO   _foreach_add_foreach_lerp__foreach_mul__foreach_mul_foreach_addcmul__foreach_pow_foreach_sub__foreach_neg__foreach_div__foreach_reciprocal__foreach_sqrt__foreach_maximum__foreach_sqrt_foreach_addcdiv_r   r   )-r&   rd   re   rf   rg   rh   rm   rn   r+   ri   ro   rp   r'   r*   r)   r"   r#   r$   grouped_tensorsr   device_params_device_grads_device_exp_avgs_device_exp_avg_sqs_device_max_exp_avg_sqs_device_state_steps__device_paramsdevice_gradsdevice_exp_avgsdevice_exp_avg_sqsdevice_state_stepsrE   r   device_max_exp_avg_sqsscaled_device_gradsr   r   r   r   r   exp_avg_sq_sqrtr@   bcr   s-                                               @r<   _multi_tensor_adamr     s!   * 6{a"fjS
 	
 %  Z  ;;=A=>>%  Z  ;;=A=>> >>&&((Z'H(
$  
 v3
 
 
 	w WWsVttuv		w 
 )"333DDDBB	LO eV$$U\\):e)C 
u  ""$		 	T&\>:DL-8tF|-=>!$v,0CD!$v,0CDq!((!fJ&>!&d!KJv-7z&)U )-d6l<S)T&! #&* !<BT  --l;L ~~**,,1CA1F1M1M"ELLU$C3  2A61##L-|T$11 -|  	_lA<LM.6 eU\\**"'"4"4\1u9"ME".IE 3\5	

  $11%9KL$11%9KL 0!4 0!4 01  0"5&&'78  !12
 )I$4!)-d6l<S)T&''(>@RS #("5"56L"M"'"5"56H"I1FG5; ##M?OT ;M :L$EZ---:L    ;M :L$EZ---:L    ,FV,WFVb2g^FV,WXI7G$H7GRW7G!$H)-d6l<S)T&''(>@RS #("5"56L"M"'"5"56H"I1FG5##_ %p   -X$Hs   Z*'Z/Z4
*Z9returnc       
         8   U (       d  g U(       a  [        S5      eUb  UR                  U0O0 nUb  UR                  U0O0 n[        U[        5      (       a'  [	        UR                  5      S:w  a  UR                  U0OS n[
        R                  " XX#XE/5      nUR                  5        GHn  u  u  nnu  u  nnnnnnn[        [        [           U5      n[        [        [           U5      n[        [        [           U5      n [        [        [           U5      n![        [        [           U5      n"UR                  S:X  a  Uc  Ub   eSu  n#n$Ub   UR                  UUR                  USS95      n#Ub   UR                  UUR                  USS95      n$Ub  UU;  a  UR                  USS9UU'   UU   n[        R                  " U"S5        [        R                  " UUU U!UU"UUU
UUUUU#U$S	9  U$c  GMJ  [        R                   " U"U$/[#        U"5      -  5        GMq     g )
Nz9Adam with fused=True does not support differentiable=Truer   mps)NNT)r   r   r	   )	r+   r'   ro   rp   r*   r)   r"   rm   rn   )r7   rE   r0   r   r   r   r   itemsr   r   r   rI   r   rM   r   _fused_adam_r   rL   )%r&   rd   re   rf   rg   rh   rm   rn   r+   ri   ro   rp   r'   r*   r)   r"   r#   r$   grad_scale_dictfound_inf_dictlr_dictr   rE   r   r   r   r   r   r   r   r   r   r   r   r   device_grad_scaledevice_found_infs%                                        r<   _fused_adamr     sQ   * VWW ,6+A		J'r  *3)>		9%B  &b&11c"))n6MBSW   BB	LO 
			 
	 
	
"	T&\>:DL-8tF|-=>!$v,0CD!$v,0CD;;%$);;;.8++! / : :
f4@!  -88	V$?  6#8 ee6eEGFOB.2"%(&	
" '"%5$6=O9P$PS 
!r>   )single_tensor_fnr!   r%   c                   U	c5  Uc2  [        XSS9u  nnU(       a  [        U[        5      (       a	  U(       d  SnU	c  Sn	Uc  Sn[        R                  R                  5       (       d"  [        S U 5       5      (       d  [        S5      eU(       a.  [        R                  R                  5       (       a  [        S5      eU	(       a.  [        R                  R                  5       (       a  [        S5      eU	(       a*  [        R                  R                  5       (       d  [        nO7U(       a*  [        R                  R                  5       (       d  [        nO[        nU" U UUUUUUUUUUUUUUUU
US9  g)	zfFunctional API that performs Adam algorithm computation.

See :class:`~torch.optim.Adam` for details.
NF)	use_fusedc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frw   )r0   rM   r   )r   ts     r<   r   adam.<locals>.<genexpr>Y  s!      5-8
1ell##[s   ')zPAPI has changed, `state_steps` argument must contain a list of singleton tensorsz6torch.jit.script not supported with foreach optimizersz4torch.jit.script not supported with fused optimizers)r+   ri   ro   rp   r'   r*   r)   r"   r#   r$   rm   rn   )r   r0   r   rM   r   r   r   r7   r   r   r   r   r   )r&   rd   re   rf   rg   rh   r!   r#   r$   r%   rm   rn   ri   r+   ro   rp   r'   r*   r)   r"   r   funcs                         r<   r   r   )  sH   D }1e

7 z"f--jG} >>&&(( 5-85 2 2 ^
 	
 599))++STT''))QRRUYY++--	//11!"!%%r>   )NFFNNNF)%typingr   r   r   r   r   rM   r   	optimizerr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __all__r   __doc__r|   r3   r   r   r   r   rV   r>   r<   <module>r      s   6 5       . 6
i9 iZ&N		 	 
 		 		 		 		 %OA LNKLNK<NK 6lNK f	NK
 &\NK fNK  NK NK NK NK NK NK 	eVmNK NK  
!NK" #NK$ %NK& 'NKb`L`<` 6l` f	`
 &\` f`  ` ` ` ` ` ` 	eVm` `  
!`" #`$ %`& '`F^L^<^ 6l^ f	^
 &\^ f^  ^ ^ ^ ^ ^ ^ 	eVm^ ^  
!^" #^$ %^& '^( 
)^B  1DE #  #'"&ULU<U 6lU f	U
 &\U fU d^U U U D>U  U U U" #U$ %U& 'U( 	eVm)U* +U, 
-U. /U FUr>   