Ë
    [^(hQJ ã            %       óš  — U d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlZd dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z% d d	l&m'Z'm(Z( d d
l)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2  G d„ d«      Z3 G d„ de«      Z4 G d„ d«      Z5 G d„ d«      Z6 G d„ de,«      Z7d„ Z8d¶d„Z9d„ Z:d¶d„Z;d„ Z<d¶d„Z=d„ Z>d¶d„Z?d„ Z@d¶d „ZAd!„ ZBd¶d"„ZCd#„ ZDd¶d$„ZEd%„ ZFd¶d&„ZGd'„ ZHd¶d(„ZId)„ ZJd·d*„ZKd+„ ZLd¶d,„ZMd-„ ZNd¶d.„ZOd/„ ZPd¶d0„ZQd1„ ZRd¶d2„ZSd3„ ZTd4e
eUej¬                  f   d5eUfd6„ZW	 d¸d5eXe3   fd8„ZY e6ee9e:d9d: e* e.d;«      d<d=«       e* e.d>«      d<d?«       e* e(ej´                   e'd@dA¬B«      i«      dCdD«       e* e.dE«      d<dF«      f¬G«       e6ee;e<dHdHdI e* ej¶                  dJ«      dCdDdKdL„ ¬M«       e* e.dJ«      d<dNdK¬O«       e* e.dJ«      d<dPdK¬O«       e* e.dJ«      d<dQ«       e* e.dJ«      d<dR«       e* e.dJ«      d<dSdK¬O«       e* e.dJ«      d<dT«       e* e.dJ«      d<dUdK¬O«       e* e.dJ«      d<dVdK¬O«       e* e.dJ«      d<dW«       e* e.dJ«      d<dXdK¬O«       e* e.dY«      d<d=«       e* e.dJ«      d<dZdK¬O«       e* e.dJ«      d<d[dK¬O«       e* ej¶                  dJ«      dCdDd\¬O«       e* e.dJ«      d<dNd\¬O«       e* e.dJ«      d<dPd\¬O«       e* e.dJ«      d<dSd\¬O«       e* e.dJ«      d<dUd\¬O«       e* e.dJ«      d<dVd\¬O«       e* e.dJ«      d<dXd\¬O«       e* e.dJ«      d<dZd\¬O«       e* e.dJ«      d<d[d\¬O«      f¬]«       e6ee=e>d^d_d`d:dad d dbœdc„ dd„ gf e* e(ej¸                   e'dede¬f«      ejº                   e'dede¬f«      i«      d<dg«      f e*e-d<dhdi„ dj¬k«       e* e.d;«      d<d=«       e* e.d>«      d<d?«       e* e.dE«      d<dF«      f¬l«
       e6ee?dm„ gdn„ gdo„ dp„ gdq„ dr„ gds„ gdt„ gdu„ dv„ gfe@d^d:d_dw e* e(ej¼                   e'dxdy¬f«      i«      d<dgdz„ ¬{«       e* e(ej¸                   e'dede¬f«      ejº                   e'dede¬f«      i«      d<dg«       e* e(ej´                   e'd|d}¬f«      i«      d~d«      f e*e-d<dhd€„ dj¬k«       e* e.d�«      d<d=«       e* e.d>«      d<d?«       e* e.dE«      d<dF«      f¬‚«
       e6eeAeBd9d: e*e-d<dhdƒ„ dj¬k«       e* e.d;«      d<d=«       e* e.d>«      d<d?«       e* ej¶                  d„«      d<dQ«       e* e.dE«      d<dF«      f¬G«       e6eeCeDd^d_dwd: e* e(ej¼                   e'dxdy¬f«      i«      d<dgd…„ ¬{«       e* e(ej¸                   e'dede¬f«      ejº                   e'dede¬f«      i«      d<dg«       e* e(ej´                   e'd|d}¬f«      i«      d~d«      f e*e-d<dhd†„ dj¬k«       e* e.d�«      d<d=«       e* e.d>«      d<d?«       e* e.dE«      d<dF«      f¬‡«	       e6eeEeFd9d: e* e.d�«      d<d=«       e* e.d>«      d<d?«       e* e(ej´                   e'dˆd‰¬f«      i«      d<d[«       e* e.dE«      d<dF«       e* ej¶                  dŠ«      d<d[«      f¬G«       e6eeGeHd7d:dIdI e*e-d<dNdj¬O«       e* e(ej¾                   e'd‹dA¬B«      i«      d<d?«       e* ej¶                  dŒ«      d<dU«       e* ej¶                  dŒ«      d<dV«       e* ej¶                  d�«      d<dŽ«       e* ej¶                  dŒ«      d<d�«       e*ejÀ                  dCdDd�„ ¬{«      f¬‘«       e6eeIeJd9d: e*e-d<dhd’„ dj¬k«       e* e.d�«      d<d=«       e* e.d>«      d<d?«       e* e.d“«      d<dS«       e* e.dE«      d<dF«      f¬G«       e6eeKeLd9d: e* e.d�«      d<d=«       e* e.d>«      d<d?«       e* e(ej¼                   e'd”d•¬f«      i«      d<dR«       e* e.dE«      d<dF«      f¬G«       e6eeMeNd9d: e*e-d<dhd–„ dj¬k«       e* e.d;«      d<d=«       e* e.d>«      d<d?«       e* e(ej´                   e'd—d˜¬f«      i«      d<dTe0¬{«       e* e.dE«      d<dF«      f¬G«       e6eeOePd9d: e*e-d<dhd™„ dj¬k«       e* e.d;«      d<d=«       e* e.d>«      d<d?«       e* e.dE«      d<dF«      f¬G«       e6eeQdš„ gd›„ gdœ„ d�„ gdž„ dŸ„ d „ gd¡„ gd¢„ gd£„ d¤„ gfeRd^d_d:d¥dId dId d¦œd§„ gfdw e* e.d�«      d<d=«       e* e.d>«      d<d?«       e* e(ej´                   e'd—d¨¬f«      i«      d<dTe0¬{«       e* e.dE«      d<dF«      f¬©«
       e6eeSeTd7d:dªd«ig fdI e*e-d<dj¬O«       e* e/d¬¬­«      «       e* e.d®«      d<dU«       e* e.d®«      d<d¯«       e* ej¶                  d°«      d<dN«       e* e.d®«      d<dS«       e* e.d®«      d<dh«       e* e.d®«      d<dŽ«       e* e.d®«      d<d�«       e* e.d®«      d<d±«       e* e.d®«      d<dP«      f¬²«      gZaeXe6   ebd³<    G d´„ dµ«      Zcy)¹é    N)Údeepcopy)ÚEnum)ÚAnyÚUnion)ÚTensor)Ú	Parameter)ÚAdadeltaÚ	AdafactorÚAdagradÚAdamÚAdamaxÚAdamWÚASGDÚLBFGSÚNAdamÚ	OptimizerÚRAdamÚRMSpropÚRpropÚSGDÚ
SparseAdam)Ú
ConstantLRÚExponentialLRÚLinearLRÚPolynomialLRÚReduceLROnPlateauÚStepLR)ÚtolÚtoleranceOverride)ÚDecorateInfo)Ú_TestParametrizerÚ	skipIfMPSÚskipIfTorchDynamoÚ	skipIfXpuÚTEST_WITH_TORCHDYNAMO)Ú&_get_foreach_kernels_supported_devicesc            
       ót   — e Zd ZdZg d¢Z	 d	deee   ee   e	e
e
f   ee	ee
f      f   de	ee
f   defd„Zd„ Zy)
ÚOptimizerInputz@Contains args / kwargs to be passed to an optimizer constructor.©ÚparamsÚkwargsÚdescr*   r+   r,   c                 ó.   — || _         || _        || _        y ©Nr)   )Úselfr*   r+   r,   s       úg/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/testing/_internal/common_optimizers.pyÚ__init__zOptimizerInput.__init__8   s   € ð ˆŒØˆŒØˆ�	ó    c                 óT   — d| j                   › d| j                  › d| j                  › �S )Nzparams=z	, kwargs=z, desc=r)   ©r/   s    r0   Ú__repr__zOptimizerInput.__repr__E   s'   € Ø˜Ÿ™˜ Y¨t¯{©{¨m¸7À4Ç9Á9À+ÐNÐNr2   N)Ú )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   Úlistr   r   Údictr   Ústrr1   r5   © r2   r0   r(   r(   3   sl   „ ÙJâ,€Ið ñàØ�‰O˜T &™\¨4°°S°©>¸4ÀÀSÈ#ÀXÁÑ;OÐOñ
ðð
 �S˜#�X‘ðð óóOr2   r(   c                   ó   — e Zd ZdZdZdZy)ÚOptimizerErrorEnumz;Enumerates when an error is raised when testing optimizers.r   é   N)r7   r8   r9   r:   ÚCONSTRUCTION_ERRORÚ
STEP_ERRORr?   r2   r0   rA   rA   I   s   „ ÙEàÐØ�Jr2   rA   c                   ó<   — e Zd ZdZg d¢Zej                  eddœd„Zy)ÚErrorOptimizerInputz–
    An OptimizerInput that will cause the optimizer to throw an error when constructed.
    Includes the type and string of the resulting error.
    ©Úoptimizer_error_inputÚerror_onÚ
error_typeÚerror_regexr6   )rI   rJ   rK   c                ó<   — || _         || _        || _        || _        y r.   rG   )r/   rH   rI   rJ   rK   s        r0   r1   zErrorOptimizerInput.__init__X   s"   € ð &;ˆÔ"Ø ˆŒØ$ˆŒØ&ˆÕr2   N)	r7   r8   r9   r:   r;   rA   rC   ÚRuntimeErrorr1   r?   r2   r0   rF   rF   P   s%   „ ñò
 S€Ið $×6Ñ6ØØõ'r2   rF   c                   ó¨   — e Zd ZdZd„ d„ gfdddddi g fdddddd	d	dd
œdedeedf   deedf   dedededededededeedf   fd„Zd„ Z	e
d„ «       Zy	)ÚOptimizerInfoz,Optimizer information to be used in testing.c                 ó   — t        | dd¬«      S ©NçÍÌÌÌÌÌì?é
   ©ÚgammaÚ	step_size©r   ©Úopts    r0   ú<lambda>zOptimizerInfo.<lambda>x   ó   € œF 3¨c¸RÔ@€ r2   c                 ó   — t        | «      S r.   ©r   rX   s    r0   rZ   zOptimizerInfo.<lambda>y   ó   € Ô-¨cÓ2€ r2   ©ÚforeachÚdifferentiable)r`   ra   ÚmaximizeÚ
capturableFTr?   N)Úscheduler_inputsÚsupported_implsÚnot_og_supported_flagsÚsupports_sparseÚhas_capturable_argÚonly_supports_sparse_gradsÚmetadata_for_sparseÚsupports_complexÚstep_requires_closureÚsupports_param_groupsÚsupports_multiple_devicesÚskipsÚ
decoratorsÚoptim_error_inputs_funcÚsupports_fused_onÚ	optim_clsre   .rf   rg   rh   ri   rk   rl   rm   rn   rr   c                óþ   — || _         || _        || _        || _        || _        || _        || _        |	| _        || _        |
| _	        || _
        || _        || _        g |r|ng ¢|r|ng ¢­| _        || _        || _        y r.   )rs   Úoptim_inputs_funcrd   re   rf   rg   rh   rj   ri   rk   rl   rm   rn   rp   rq   rr   )r/   rs   ru   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   s                     r0   r1   zOptimizerInfo.__init__i   sŸ   € ðj #ˆŒØ!2ˆÔØ 0ˆÔØ.ˆÔØ&<ˆÔ#Ø.ˆÔØ"4ˆÔØ#6ˆÔ Ø*DˆÔ'Ø 0ˆÔØ%:ˆÔ"Ø%:ˆÔ"Ø)BˆÔ&ð
Ù&‰j¨Bð
á‰e "ñ
ˆŒð (?ˆÔ$Ø!2ˆÕr2   c                 óÒ   — g }| j                   D ]U  }t        |t        «      r2|j                  |||||«      sŒ)|j	                  |j                   «       ŒE|j                  |«       ŒW |S r.   )rp   Ú
isinstancer    Ú	is_activeÚextendÚappend)r/   Ú
test_classÚ	test_nameÚdeviceÚdtypeÚparam_kwargsÚresultÚ	decorators           r0   Úget_decoratorszOptimizerInfo.get_decorators²   sd   € ØˆØŸ™ò 	)ˆIÜ˜)¤\Ô2Ø×&Ñ&Ø 	¨6°5¸,õð —M‘M )×"6Ñ"6Õ7à—‘˜iÕ(ð	)ð ˆr2   c                 ó.   — | j                   j                  S r.   )rs   r7   r4   s    r0   ÚnamezOptimizerInfo.name¾   s   € à�~‰~×&Ñ&Ð&r2   )r7   r8   r9   r:   r   Útupler>   Úboolr1   r‚   Úpropertyr„   r?   r2   r0   rO   rO   f   s  „ Ù6ñ" AÙ2ðð
ð ,Ið3
ð !&à#(à+0ð   ˜Hà!%à&+à&*à*.ØØØ $Ø-/ògG3àðG3ð* ˜s C˜x™ð+G3ð0 !& c¨3 h¡ð1G3ð> ð?G3ðB !ðCG3ðF %)ðGG3ðR ðSG3ðV  $ðWG3ðZ  $ð[G3ð^ $(ð_G3ðf !  c ™?ógG3òR
ð ñ'ó ñ'r2   rO   c                   ó   — e Zd ZdZdd„Zd„ Zy)ÚoptimszGDecorator for specifying a list of optimizers over which to run a test.Nc                 ód   — t        |«      | _        |�|| _        y t        j                  g| _        y r.   )r<   Úoptim_info_listÚtorchÚfloat32Údtypes)r/   Úoptim_info_iterablerŽ   s      r0   r1   zoptims.__init__Æ   s*   € Ü#Ð$7Ó8ˆÔð
 !'Ð 2�fˆ�¼¿¹¸ˆ�r2   c           	   #   óÚ  ‡K  — |€t        d«      ‚t        j                  | j                  | j                  «      D ]}  \  }}|j
                  }||dœ}	 t        j                  ‰«      ˆfd„«       }t        j                  |j                  |j                  ‰j                  |j                  |«      }	||||	f–— Œ y # t        $ r#}
t        d|› d|j
                  › d�«       |
‚d }
~
ww xY w­w)Nz§The @optims decorator is only intended to be used in a device-specific context; use it with instantiate_device_type_tests() instead of instantiate_parametrized_tests())Ú
optim_infor~   c                  ó   •—  ‰| i |¤ŽS r.   r?   )Úargsr+   Útests     €r0   Útest_wrapperz.optims._parametrize_test.<locals>.test_wrapperà   s   ø€ á Ð0¨Ñ0Ð0r2   zFailed to instantiate z for module ú!)rM   Ú	itertoolsÚproductr‹   rŽ   r„   Ú	functoolsÚwrapsÚpartialr‚   r7   Údevice_typeÚ	ExceptionÚprint)r/   r”   Úgeneric_clsÚ
device_clsr‘   r~   r|   r   r•   Údecorator_fnÚexs    `         r0   Ú_parametrize_testzoptims._parametrize_testÎ   s  øè ø€ ØÐÜð3óð ô "+×!2Ñ!2°4×3GÑ3GÈÏÉÓ!Uò 	ÑˆJ˜ð #Ÿ™ˆIð +5¸uÑEˆLðä—‘ Ó&ó1ó 'ð1ô  )×0Ñ0Ø×-Ñ-Ø×(Ñ(Ø—M‘MØ×*Ñ*Øó �ð $ Y°¸lÐKÓKñ-	øô. ò äØ,¨Y¨K°|ÀJÇOÁOÐCTÐTUÐVôð �ûðüs+   ƒAC+ÁA&B<Â9C+Â<	C(ÃC#Ã#C(Ã(C+r.   )r7   r8   r9   r:   r1   r£   r?   r2   r0   r‰   r‰   Ã   s   „ ÙQóHó$r2   r‰   c                 ót  — t        | «      dk(  �r(t        t        j                  d| |¬«      «      }t        t        j                  d| |¬«      «      }t	        t        |i d¬«      t        d¬«      t	        t        ||gi d¬«      t        d	¬«      t	        t        d
|id
|igi d¬«      t        d¬«      t	        t        d t        t        j                  ddg«      ¬«      d¬«      t        d¬«      t	        t        d|f|gi d¬«      t        d¬«      t	        t        |gddœd
d|fgigi d¬«      t        d¬«      gS g S )NÚcpurB   ©r}   r~   zinvalid param typer)   zPparams argument given to the optimizer should be an iterable of Tensors or dicts©rJ   rK   z.a param group cannot have duplicate parametersz/.*a parameter group with duplicate parameters.*r*   z@duplicate parameters should not occur across param groups eitherz7some parameters appear in more than one parameter groupçü©ñÒMbP?)ÚlrzTensor lr must be 1-elementÚweightz1all optimizer params should be with/without nameszOall optimizer params should be with/without names. Some param names are missingç{®Gáz„?)r*   r©   z8all optimizer param groups should be with/without names.zkall optimizer param groups should be with/without names. cannot add param group with names to the optimizer)Ú_get_device_typer   rŒ   ÚrandnrF   r(   Ú	TypeErrorÚUserWarningÚ
ValueErrorr=   Útensor)r}   r~   Úsample_paramÚsample_param2s       r0   Úget_error_inputs_for_all_optimsr´   ö   sq  € Ü˜Ó 5Ó(Ü ¤§¡¨Q°vÀUÔ!KÓLˆÜ!¤%§+¡+¨a¸ÀeÔ"LÓMˆäÜØ'ØØ-ôô
 %Ønôô  ÜØ(¨,Ð7ØØIôô
 'ØMôô  ÜØ% |Ð4°xÀÐ6NÐOØØ[ôô
 &ØUôô  ÜØÜ¤5§<¡<°¸°Ó#?Ô@Ø6ôô
 &Ø9ôô  ÜØ% |Ð4°mÐDØØLôô
 &Ømôô  Üà$0 >¸Ñ>Ø! X¨}Ð$=Ð#>Ð?ðð ØSôô &ðEôð];
ð ;	
ðz ˆ	r2   c                 ól  — t        d ddid¬«      t        d dddœd¬«      t        d t        j                  d«      ddœd	¬«      g}t        d i d
¬«      t        d ddid¬«      t        d ddid¬«      t        d ddid¬«      t        d dddœd¬«      t        d dddœd¬«      gt        | «      dk(  r|z   S g z   S )Nrc   Tr)   çš™™™™™¹?©Úweight_decayrc   zcapturable with weight decayr¨   ©r©   rc   úTensor lr with capturableÚdefaultr©   r«   únon-default lrr¸   únonzero weight_decayrb   ©r¸   rb   úmaximize, weight_decaygffffffî?rR   )Úrhor¸   rÀ   Úcuda©r(   rŒ   r±   r¬   ©r}   r~   Úcuda_supported_configss      r0   Úoptim_inputs_func_adadeltarÅ   T  sû   € ä˜d¨L¸$Ð+?ÀlÔSÜØØ$'°tÑ<Ø/ô	
ô
 	ØÜŸ,™, uÓ-¸TÑBØ,ô	
ðÐô 	˜d¨2°IÔ>Ü˜d¨D°$¨<Ð>NÔOÜØ °Ð 5Ð<Rô	
ô 	˜d¨J¸Ð+=ÀJÔOÜØØ$'°TÑ:Ø)ô	
ô
 	Ø¨¸cÑ BÈô	
ðô $4°FÓ#;¸vÒ#EÐ	ñOð Oð LNñOð Or2   c           
      ó”   — t        | |«      }t        | «      dk(  r-|t        t        d t	        dd¬«      d¬«      t
        d¬«      gz  }|S )	Nr¥   r«   gš™™™™™ñ?)r©   rÀ   zrho should be between 0 and 1r)   zInvalid rho value: 1.1r§   ©r´   r¬   rF   r(   r=   r°   ©r}   r~   Úerror_inputss      r0   Ú optim_error_inputs_func_adadeltarÊ   u  sZ   € Ü2°6¸5ÓA€LÜ˜Ó 5Ò(ØÜÜØÜ 4¨SÔ1Ø8ôô
 &Ø4ôð

ñ 
	
ˆð Ðr2   c           	      óœ   — t        d i d¬«      t        d dddœd¬«      t        d dddœd	¬«      t        d d
did¬«      t        d ddid¬«      gS )Nr»   r)   r¶   r«   )r¸   r©   r½   Tr¾   rb   Úbeta2_decayç      ð¿znon-default beta2_decayÚdç      ø?z non-default clipping threshold d)r(   r¦   s     r0   Úoptim_inputs_func_adafactorrÐ   †  su   € ä˜d¨2°IÔ>ÜØØ$'¨tÑ4Ø'ô	
ô
 	ØØ$'°TÑ:Øô	
ô
 	ØØ! 4Ð(Ø*ô	
ô
 	ØØ˜�:Ø3ô	
ð#ð r2   c                 ó  — t        | |«      }t        | «      dk(  rðt        j                  dd| t        j                  ¬«      }t        j
                  |«      |_        |t        t        d t        d¬«      d¬«      t        d¬	«      t        t        d t        d
¬«      d¬«      t        d¬	«      t        t        d t        d¬«      d¬«      t        d¬	«      t        t        |gt        «       d¬«      t        dt        j                  ¬«      gz  }|S )Nr¥   é   é   r¦   )g ÂëþKH´¹r¨   )Úepszepsilon1 should be >= 0r)   r§   ç        )rÎ   z	invalid dz#Clipping threshold d should be >= 1çš™™™™™é?)rÌ   zinvalid beta2_decayzbeta2_decay should be <= 0z#does not support complex parametersz-Adafactor does not support complex parameters)rJ   rK   rI   )r´   r¬   rŒ   ÚrandÚ	complex64Ú	rand_likeÚgradrF   r(   r=   r°   rM   rA   rD   )r}   r~   rÉ   Úcomplex_params       r0   Ú!optim_error_inputs_func_adafactorrÜ      s  € Ü2°6¸5ÓA€LÜ˜Ó 5Ò(ÜŸ
™
 1 a°¼e¿o¹oÔNˆÜ"Ÿ_™_¨]Ó;ˆÔØÜÜØÜ NÔ3Ø2ôô
 &Ø5ôô  ÜØÜ #œ;Ø$ôô
 &ØAôô  ÜØÜ¨CÔ0Ø.ôô
 &Ø8ôô  ÜØ)˜?Ü›6Ø>ôô
 (ØKÜ+×6Ñ6ô	ð9&
ñ &	
ˆðN Ðr2   c                 ó  — t        d i d¬«      t        d ddid¬«      t        d dddœd¬«      t        d d	did
¬«      t        d dddœd¬«      t        d ddddœd¬«      t        d d	t        j                  d«      id¬«      gS )Nr»   r)   r¸   r¶   r½   Tr¾   rb   r©   r¼   )Úinitial_accumulator_valuer¸   rÞ   ç      à?)r©   Úlr_decayr¸   rà   r¨   ú	Tensor lr©r(   rŒ   r±   r¦   s     r0   Úoptim_inputs_func_adagradrã   Ï  s©   € ä˜d¨2°IÔ>ÜØ °Ð 5Ð<Rô	
ô 	ØØ$'°TÑ:Øô	
ô
 	˜d¨D°#¨;Ð=MÔNÜØØ14ÀcÑJØ,ô	
ô
 	ØØ¨3ÀÑDØô	
ô
 	ØØœ%Ÿ,™, uÓ-Ð.Øô	
ð+ð r2   c           
      ó”   — t        | |«      }t        | «      dk(  r-|t        t        d t	        dd¬«      d¬«      t
        d¬«      gz  }|S )	Nr¥   r«   ç      à¿)r©   rà   zlr_decay must be bigger than 0r)   zInvalid lr_decay value: -0.5r§   rÇ   rÈ   s      r0   Úoptim_error_inputs_func_adagradræ   í  sZ   € Ü2°6¸5ÓA€LÜ˜Ó 5Ò(ØÜÜØÜ 4°$Ô7Ø9ôô
 &Ø:ôð

ñ 
	
ˆð Ðr2   c                 óH  — t        d ddid¬«      t        d ddddœd¬«      t        d t        j                  d«      dddœd	¬«      t        d t        j                  d«      t        j                  d
«      t        j                  d«      fdddœd¬«      t        d t        j                  d«      t        j                  d
«      t        j                  d«      fdddœd¬«      g}t        d dt        j                  d«      id¬«      g}t        d i d¬«      t        d ddid¬«      t        d ddid¬«      t        d dddœd¬«      t        d dddœd¬«      gt        | «      dk(  r|ng z   t        | «      dk(  r|ng z   }|t        j                  fv r|D ]  }	 d|j
                  d<   Œ |S )Nrc   Tr)   r¶   )r¸   Úamsgradrc   zcapturable, amsgradr¨   )r©   rè   rc   z%Tensor lr with capturable and amsgradrR   ç®Gáz®ï?)r©   Úbetasrè   rc   z4Tensor lr, Tensor betas, with capturable and amsgradFz(Tensor lr, Tensor betas, with capturabler©   r«   rá   r»   r¼   r¸   r½   r¾   rb   )r¸   rè   rè   rÁ   ÚmpsrÔ   )r(   rŒ   r±   r¬   Úfloat16r+   )r}   r~   rÄ   Úmps_supported_configsÚtotalÚinputs         r0   Úoptim_inputs_func_adamrð      sã  € ä˜d¨L¸$Ð+?ÀlÔSÜØØ$'°DÈÑMØ&ô	
ô
 	ØÜŸ,™, uÓ-¸$ÈdÑSØ8ô	
ô
 	Øä—l‘l 5Ó)ÜŸ,™, sÓ+¬U¯\©\¸$Ó-?Ð@ØØ"ñ	ð Hô		
ô 	Øä—l‘l 5Ó)ÜŸ,™, sÓ+¬U¯\©\¸$Ó-?Ð@Ø Ø"ñ	ð <ô		
ð- ÐôD 	Ø ¤u§|¡|°DÓ'9Ð :Àô	
ðÐô  $¨r¸	ÔBÜ $°°d¨|ÐBRÔSÜØ ^°SÐ$9Ð@Vôô ØØ(+¸Ñ>Øôô
 ØØ(+¸Ñ=Øôð	
ô" &6°fÓ%=ÀÒ%GÑ!ÈRñ#	Qô$ %5°VÓ$<ÀÒ$EÑ È2ñ%	Oð 
ð* ”—‘Ð Ñ Øò 
	&ˆEðð #&ˆE�L‰L˜Òð
	&ð €Lr2   c                 óÌ  — t        | |«      }t        | «      dk(  �r[|t        t        d t	        dd¬«      d¬«      t
        d¬«      t        t        d t	        dd	¬
«      d¬«      t
        d¬«      t        t        d t	        t        j                  d«      d¬«      d¬«      t
        d¬«      t        t        d t	        ddt        j                  d«      f¬«      d¬«      t
        d¬«      t        t        d t	        dt        j                  d«      df¬«      d¬«      t
        d¬«      t        t        d t	        dt        j                  d«      t        j                  d«      fd¬«      d¬«      t
        d¬«      gz  }t        | «      dk(  r_t        j                  d| |¬«      }|t        t        |gdddœd¬«      t        d¬«      t        t        |gdddœd¬«      t        d¬«      gz  }|S )Nr¥   r«   ©ç      ð?rÕ   ©r©   rê   úbeta1 should be between 0 and 1r)   ú&Invalid beta parameter at index 0: 1.0r§   éÿÿÿÿ©r©   r¸   úweight_decay should > 0úInvalid weight_decay value: -1r¨   T)r©   r`   z7lr as Tensor doesn't work with foreach & not capturablezElr as a Tensor is not supported for capturable=False and foreach=TruerR   ré   z0betas must be either both floats or both Tensors)r©   rê   r`   zMbetas\[0\] as a Tensor is not supported for capturable=False and foreach=TruerÁ   r?   r¦   )r`   Úfusedz/`fused` and `foreach` cannot be `True` together)rû   ra   z)`fused` does not support `differentiable`)
r´   r¬   rF   r(   r=   r°   rŒ   r±   ÚemptyrM   )r}   r~   rÉ   Úsample_tensors       r0   Úoptim_error_inputs_func_adamrþ   L  sö  € Ü2°6¸5ÓA€LÜ˜Ó 5Ó(ØÜÜØÜ 4¨zÔ:Ø:ôô
 &ØDôô  ÜØÜ 4°bÔ9Ø2ôô
 &Ø<ôô  ÜØÜ¤5§<¡<°Ó#6ÀÔEØRôô
 &Øcôô  ÜØÜ 4°´U·\±\À$Ó5GÐ/HÔIØKôô
 &ØNôô  ÜØÜ 4´·±¸SÓ0AÀ4Ð/HÔIØKôô
 &ØNôô  ÜØÜØÜ$Ÿ|™|¨CÓ0´%·,±,¸tÓ2DÐEØ $ôð
 jôô &Ølôð];
ñ ;	
ˆôx ˜Ó 6Ò)ÜŸ™ B¨v¸UÔCˆØÜÜØ)˜?Ø'+°dÑ;ØJôô
 (ØMôô  ÜØ)˜?Ø%)¸TÑBØDôô
 (ØGôð
ñ 	
ˆð( Ðr2   c                 ó–  — t        d ddid¬«      t        d ddddœd¬«      t        d ddddœd¬«      t        d dd	ddœd
¬«      t        d t        j                  d«      dd	ddœd¬«      g}t        d i d¬«      t        d ddid¬«      t        d ddid¬«      t        d ddid¬«      t        d dddœd¬«      gt        | «      dk(  r|z   S g z   S )Nrc   Tr)   rR   ©r¸   rb   rc   z"capturable, maximize, weight_decayr   úcapturable, maximizeFúcapturable, weight_decayr¨   ©r©   r¸   rb   rc   z#capturable, weight_decay, tensor LRr»   r©   r¶   r¼   r¸   r½   rb   r¾   r¿   rÁ   rÂ   rÃ   s      r0   Úoptim_inputs_func_adamaxr  ¤  s-  € ä˜d¨L¸$Ð+?ÀlÔSÜØØ$'°TÈÑNØ5ô	
ô
 	ØØ$%°4ÀtÑLØ'ô	
ô
 	ØØ$'°UÈ$ÑOØ+ô	
ô
 	Øä—l‘l 5Ó)Ø #Ø!Ø"ñ	ð 7ô		
ð#Ðô< 	˜d¨2°IÔ>Ü˜d¨D°#¨;Ð=MÔNÜØ °Ð 5Ð<Rô	
ô 	ØØ Ð%Øô	
ô
 	ØØ$'°TÑ:Ø)ô	
ðô  $4°FÓ#;¸vÒ#EÐ	ñ!Oð Oð  LNñ!Oð Or2   c           
      ó”   — t        | |«      }t        | «      dk(  r-|t        t        d t	        dd¬«      d¬«      t
        d¬«      gz  }|S )	Nr¥   r«   )rÕ   ró   rô   zbeta2 should be between 0 and 1r)   z&Invalid beta parameter at index 1: 1.0r§   rÇ   rÈ   s      r0   Úoptim_error_inputs_func_adamaxr  Õ  sZ   € Ü2°6¸5ÓA€LÜ˜Ó 5Ò(ØÜÜØÜ 4¨zÔ:Ø:ôô
 &ØDôð

ñ 
	
ˆð Ðr2   c                 ó   — t        | |«      S r.   )rð   r¦   s     r0   Úoptim_inputs_func_adamwr  æ  s   € Ü! &¨%Ó0Ð0r2   c                 ó   — t        | |«      S r.   )rþ   r¦   s     r0   Úoptim_error_inputs_func_adamwr
  ê  s   € Ü'¨°Ó6Ð6r2   c                 óÎ  — t        d ddid¬«      t        d dddœd¬«      t        d dddœd¬«      t        d dddd	œd
¬«      t        d t        j                  d«      ddddœd¬«      g}t        d i d¬«      t        d ddid¬«      t        d ddid¬«      t        d ddid¬«      t        d ddid¬«      t        d ddid¬«      t        d dddœd¬«      gt        | «      dk(  r|z   S g z   S )Nrc   Tr)   )rb   rc   zmaximize, capturabler¶   r·   úweight_decay, capturabler   z"maximize, weight_decay, capturabler¨   r  z-maximize, weight_decay, capturable, tensor LRr»   Úlambdznon-default lambdr©   g{®Gáz”?r¼   Út0éd   rb   r¸   r½   r¾   zmaximize, nonzero weight_decayrÁ   rÂ   rÃ   s      r0   Úoptim_inputs_func_asgdr  î  sD  € ä˜d¨L¸$Ð+?ÀlÔSÜØØ $°DÑ9Ø'ô	
ô
 	ØØ$'°tÑ<Ø+ô	
ô
 	ØØ$'°TÈÑNØ5ô	
ô
 	Øä—l‘l 5Ó)Ø #Ø Ø"ñ	ð Aô		
ð#Ðô: 	˜d¨2°IÔ>Ü˜d¨G°S¨>Ð@SÔTÜ˜d¨D°$¨<Ð>NÔOÜ˜d¨D°#¨;¸TÔBÜ˜d¨J¸Ð+=ÀJÔOÜØ °Ð 5Ð<Rô	
ô 	ØØ$'°TÑ:Ø1ô	
ðô $4°FÓ#;¸vÒ#EÐ	ñOð Oð LNñOð Or2   c           
      ó”   — t        | |«      }t        | «      dk(  r-|t        t        d t	        dd¬«      d¬«      t
        d¬«      gz  }|S )	Nr¥   r«   rå   rø   rù   r)   z Invalid weight_decay value: -0.5r§   rÇ   rÈ   s      r0   Úoptim_error_inputs_func_asgdr    sZ   € Ü2°6¸5ÓA€LÜ˜Ó 5Ò(ØÜÜØÜ 4°dÔ;Ø2ôô
 &Ø>ôð

ñ 
	
ˆð Ðr2   c           	      ó¾   — t        d i d¬«      t        d ddid¬«      t        d dt        j                  d«      id¬«      t        d dd	id¬«      t        d d
did¬«      gS )Nr»   r)   r©   r«   r¼   r¨   rá   Útolerance_gradç�íµ ÷Æ°>Úline_search_fnÚstrong_wolferâ   r¦   s     r0   Úoptim_inputs_func_lbfgsr  -  sv   € ä˜d¨2°IÔ>Ü˜d¨D°$¨<Ð>NÔOÜØ ¤u§|¡|°EÓ':Ð ;À+ô	
ô 	ØÐ!1°4Ð 8Ð?Oô	
ô 	ØØ$ nÐ5Øô	
ðð r2   c                 ó   — t        | |«      }|S r.   )r´   rÈ   s      r0   Úoptim_error_inputs_func_lbfgsr  ?  s   € Ü2°6¸5ÓA€LØÐr2   c                 óº  — t        d ddid¬«      t        d ddddœd¬«      t        d dddddœd	¬«      t        d t        j                  d
«      dddddœd	¬«      g}t        d i d¬«      t        d dd
id¬«      t        d ddid¬«      t        d ddid¬«      t        d dddœd¬«      t        d ddddœd¬«      t        d dddœd¬«      gt        | «      dk(  r|z   S g z   S )Nrc   Tr)   rR   gú~j¼t“x?)r¸   Úmomentum_decayrc   r  )r¸   r  Údecoupled_weight_decayrc   z"decoupled_weight_decay, capturabler¨   )r©   r¸   r  r  rc   r»   r©   r¼   r  znon-zero momentum_decayr¸   r¶   )r¸   r  zweight_decay, momentum_decay)r¸   r  r  r  r¾   rb   rÁ   rÂ   rÃ   s      r0   Úoptim_inputs_func_nadamr  D  s`  € ä˜d¨L¸$Ð+?ÀlÔSÜØØ$'¸4ÈtÑTØ+ô	
ô
 	Øà #Ø"&Ø*.Ø"ñ	ð 6ô		
ô 	Øä—l‘l 5Ó)Ø #Ø"&Ø*.Ø"ñð 6ô
	
ð#Ðô< 	˜d¨2°IÔ>Ü˜d¨D°$¨<Ð>NÔOÜØØ$ dÐ+Ø*ô	
ô
 	Øà ðð  ô	
ô 	ØØ$'¸4Ñ@Ø/ô	
ô
 	Øà #Ø"&Ø*.ñð
 *ô	
ô 	ØØ$'°TÑ:Øô	
ð;"ôD $4°FÓ#;¸vÒ#EÐ	ñE"Oð "OðD LNñE"Oð "Or2   c                 óä   — t        | |«      }t        | «      dk(  rU|t        t        d t	        dd¬«      d¬«      t
        d¬«      t        t        d t	        dd	¬
«      d¬«      t
        d¬«      gz  }|S )Nr¥   r«   rò   rô   rõ   r)   rö   r§   gš™™™™™É¿)r©   r  zmomentum_decay should > 0z"Invalid momentum_decay value: -0.2rÇ   rÈ   s      r0   Úoptim_error_inputs_func_nadamr   ‡  s„   € Ü2°6¸5ÓA€LÜ˜Ó 5Ò(ØÜÜØÜ 4¨zÔ:Ø:ôô
 &ØDôô  ÜØÜ 4¸Ô=Ø4ôô
 &Ø@ôð
ñ 	
ˆð( Ðr2   c                 ó’  — t        d ddid¬«      t        d dddœd¬«      t        d ddddœd¬«      t        d t        j                  d	«      dddd
œd¬«      g}t        d i d¬«      t        d ddid¬«      t        d ddid¬«      t        d ddid¬«      t        d dddœd¬«      t        d dddœd¬«      gt        | «      dk(  r|z   S g z   S )Nrc   Tr)   r¶   )rc   r¸   r  )rc   r¸   r  z0capturable, weight_decay, decoupled_weight_decayr¨   )r©   rc   r¸   r  z;capturable, weight_decay, decoupled_weight_decay, tensor LRr»   r©   gü©ñÒMb`?r¼   rÔ   r  znon-default epsr¸   r½   )r¸   r  r  r¾   rb   rÁ   rÂ   rÃ   s      r0   Úoptim_inputs_func_radamr"  ¢  s/  € ä˜d¨L¸$Ð+?ÀlÔSÜØà"Ø #ñð ,ô	
ô 	Øà"Ø #Ø*.ñð
 Dô	
ô 	Øä—l‘l 5Ó)Ø"Ø #Ø*.ñ	ð Oô		
ð'Ðô> 	˜d¨2°IÔ>Ü˜d¨D°$¨<Ð>NÔOÜ˜d¨E°4¨=Ð?PÔQÜØ °Ð 5Ð<Rô	
ô 	ØØ$'À4ÑHØ)ô	
ô
 	ØØ$'°TÑ:Øô	
ðô" $4°FÓ#;¸vÒ#EÐ	ñ#Oð Oð" LNñ#Oð Or2   c                 óä   — t        | |«      }t        | «      dk(  rU|t        t        d t	        dd¬«      d¬«      t
        d¬«      t        t        d t	        dd	¬
«      d¬«      t
        d¬«      gz  }|S )Nr¥   r«   rò   rô   rõ   r)   rö   r§   r÷   rø   rù   rú   rÇ   rÈ   s      r0   Úoptim_error_inputs_func_radamr$  Õ  s„   € Ü2°6¸5ÓA€LÜ˜Ó 5Ò(ØÜÜØÜ 4¨zÔ:Ø:ôô
 &ØDôô  ÜØÜ 4°bÔ9Ø2ôô
 &Ø<ôð
ñ 	
ˆð( Ðr2   c                 ó´  — t        d ddid¬«      t        d ddddœd¬«      t        d t        j                  d«      ddœd	¬«      g}t        d i d
¬«      t        d ddid¬«      t        d ddid¬«      t        d ddid¬«      t        d dddœd¬«      t        d dddœd¬«      t        d ddddœd¬«      t        d dddddœd¬«      gt        | «      dk(  r|z   S g z   S )Nrc   Tr)   r¶   r   r  r¨   r¹   rº   r»   r©   r¼   r¸   r½   rb   )r¸   Úcenteredr&  )rb   r¸   r¿   )r¸   r&  Úmomentumr'  )r¸   r&  r'  rb   z-maximize, centered, weight_decay, w/ momentumrÁ   rÂ   rÃ   s      r0   Úoptim_inputs_func_rmspropr(  ï  sQ  € ä˜d¨L¸$Ð+?ÀlÔSÜØØ$'°TÈÑNØ'ô	
ô
 	ØÜŸ,™, uÓ-¸TÑBØ,ô	
ðÐô 	˜d¨2°IÔ>Ü˜d¨D°$¨<Ð>NÔOÜØ °Ð 5Ð<Rô	
ô 	Øà˜Dðð ô	
ô 	ØØ$'°TÑ:Øô	
ô
 	Øà Ø #ñð *ô	
ô 	ØØ$'°TÀsÑKØô	
ô
 	Øà #Ø ØØ ñ	ð Aô		
ð?)ôR $4°FÓ#;¸vÒ#EÐ	ñS)Oð )OðR LNñS)Oð )Or2   c           
      ó”   — t        | |«      }t        | «      dk(  r-|t        t        d t	        dd¬«      d¬«      t
        d¬«      gz  }|S )	Nr¥   r«   rÍ   ©r©   r'  ú"momentum should be between 0 and 1r)   zInvalid momentum value: -1.0r§   rÇ   rÈ   s      r0   Úoptim_error_inputs_func_rmspropr,  *  óZ   € Ü2°6¸5ÓA€LÜ˜Ó 5Ò(ØÜÜØÜ 4°$Ô7Ø=ôô
 &Ø:ôð

ñ 
	
ˆð Ðr2   c           	      ó*  — t        d ddid¬«      t        d t        j                  d«      ddœd¬«      g}t        d i d¬«      t        d dd	id
¬«      t        d ddid¬«      t        d ddid¬«      t        d ddid¬«      gt        | «      dk(  r|z   S g z   S )Nrc   Tr)   r¨   r¹   rº   r»   r©   g-Cëâ6*?r¼   Úetas)rß   rÏ   znon-default etasÚ
step_sizes)g�íµ ÷ÆÀ>r  znon-default step_sizesrb   rÁ   rÂ   rÃ   s      r0   Úoptim_inputs_func_rpropr1  ;  sÏ   € ä˜d¨L¸$Ð+?ÀlÔSÜØÜŸ,™, uÓ-¸TÑBØ,ô	
ðÐô 	˜d¨2°IÔ>Ü˜d¨D°$¨<Ð>NÔOÜØ ¨Ð 4Ð;Mô	
ô 	ØØ  +Ð.Ø)ô	
ô
 	˜d¨J¸Ð+=ÀJÔOðô $4°FÓ#;¸vÒ#EÐ	ñOð Oð LNñOð Or2   c           
      ó”   — t        | |«      }t        | «      dk(  r-|t        t        d t	        dd¬«      d¬«      t
        d¬«      gz  }|S )	Nr¥   r«   )ró   rß   )r©   r/  z0 < eta1 < 1 < eta2r)   zInvalid eta values: 1.0, 0.5r§   rÇ   rÈ   s      r0   Úoptim_error_inputs_func_rpropr3  T  sZ   € Ü2°6¸5ÓA€LÜ˜Ó 5Ò(ØÜÜØÜ 4¨jÔ9Ø.ôô
 &Ø:ôð

ñ 
	
ˆð Ðr2   c                 ó@  — t        d i d¬«      t        d ddid¬«      t        d dt        j                  d«      id¬«      t        d dd	id
¬«      t        d ddid¬«      t        d dddœd¬«      t        d dd	dœd¬«      t        d dddœd¬«      t        d ddddœd¬«      g	S )Nr»   r)   r©   r«   r¼   r¨   z	tensor lrr¸   rß   znon-zero weight_decayr'  rR   r¶   Tr¾   rb   )r'  Ú	dampeningr5  )r'  r¸   zweight_decay w/ momentum)r'  Únesterovr¸   r6  râ   r¦   s     r0   Úoptim_inputs_func_sgdr7  e  sÐ   € ä˜d¨2°IÔ>Ü˜d¨D°$¨<Ð>NÔOÜØ ¤u§|¡|°EÓ':Ð ;À+ô	
ô 	Ø °Ð 5Ð<Sô	
ô 	˜d¨J¸Ð+<À:ÔNÜØØ$'°TÑ:Øô	
ô
 	ØØ #°#Ñ6Øô	
ô
 	ØØ #°SÑ9Ø+ô	
ô
 	ØØ #°ÀsÑKØô	
ð3ð r2   c           
      ó”   — t        | |«      }t        | «      dk(  r-|t        t        d t	        dd¬«      d¬«      t
        d¬«      gz  }|S )	Nr¥   r«   rå   r*  r+  r)   zInvalid momentum value: -0.5r§   rÇ   rÈ   s      r0   Úoptim_error_inputs_func_sgdr9  ‡  r-  r2   c           	      ó    — t        d i d¬«      t        d ddid¬«      t        d dt        j                  d«      id¬«      t        d dd	id¬«      gS )
Nr»   r)   r©   r«   r¼   r¨   rá   rb   Trâ   r¦   s     r0   Úoptim_inputs_func_sparseadamr;  ˜  s^   € ä˜d¨2°IÔ>ÜØ  t Ð3Cô	
ô 	Ø ¤u§|¡|°EÓ':Ð ;À+ô	
ô 	˜d¨J¸Ð+=ÀJÔOð	ð 	r2   c                 ó,  — t        | |«      }t        | «      dk(  rù|t        t        d t	        dd¬«      d¬«      t
        d¬«      t        t        t        j                  d	t        j                  | |¬
«      gi d¬«      t
        d¬«      t        t        dt        j                  d	t        j                  | |¬
«      gigi d¬«      t
        d¬«      t        t        t        j                  dd	| t        j                  ¬«      gi d¬«      t
        d¬«      gz  }|S )Nr¥   r«   rò   rô   rõ   r)   rö   r§   rÓ   )Úlayoutr}   r~   zdense params requiredz+SparseAdam requires dense parameter tensorsr*   z%dense params required in param_groupsrÒ   r¦   zcomplex not supportedz.SparseAdam does not support complex parameters)r´   r¬   rF   r(   r=   r°   rŒ   ÚzerosÚ
sparse_coor×   rØ   rÈ   s      r0   Ú"optim_error_inputs_func_sparseadamr@  ¥  s+  € Ü2°6¸5ÓA€Lä˜Ó 5Ò(ØÜÜØÜ 4¨zÔ:Ø:ôô
 &ØDôô  ÜäŸ™Ø¤e×&6Ñ&6¸vÈUôðð
 Ø0ôô &ØIôô  Üð %Ü %§¡Ø$%Ü+0×+;Ñ+;Ø+1Ø*/ô	!"ð'ð	ðð Ø@ôô  &ØIô%ô(  ÜÜ!ŸJ™J q¨!°FÄ%Ç/Á/ÔRÐSØØ0ôô
 &ØLôðW4
ñ 4	
ˆðj Ðr2   r}   Úreturnc                 ó¬   — t        | t        j                  «      rt        | j                  «      } t        | t        «      sJ ‚| j                  d«      d   S )Nú:r   )rw   rŒ   r}   r>   ÚtypeÚsplit)r}   s    r0   r¬   r¬   á  sB   € ä�&œ%Ÿ,™,Ô'Ü�V—[‘[Ó!ˆÜ�fœcÔ"Ð"Ð"Ø�<‰<˜Ó˜QÑÐr2   r?   c                 ó  ‡ ‡‡— t        d„ ‰D «       «      sJ d«       ‚‰j                  ‰ «      }t        ˆ ˆˆfd„‰j                  D «       «      }g }|D ]­  }t	        |j
                  «      }t        |«      dk7  r4|D ]  }	d||	<   Œ	 |j                  t        d||j                  ¬«      «       n|j                  |«       |D ]>  }	t	        |«      }
d|
|	<   |j                  t        d|
|j                  › d	|	› �¬«      «       Œ@ Œ¯ |S )
a~  
    Return a list of all configs for a given optimizer as a list of OptimizerInputs,
    including configs that have supported global cliquey kwargs (foreach, fused,
    differentiable) based on optim_info.supported_impls.

    The configs (optim_inputs) returned by optim_info.optim_inputs_func(...)
    intentionally do NOT include global cliquey kwargs to give flexibility to tests.
    For example, testing correctness between toggling foreach on and off is now
    trivial. That said, we sometimes want to test for all possible configs on an
    optimizer including all supported flags, so this helper returns all optim inputs.
    c              3   ó$   K  — | ]  }|d v –— Œ
 y­w))r`   rû   ra   Nr?   )Ú.0Úxs     r0   ú	<genexpr>zD_get_optim_inputs_including_global_cliquey_kwargs.<locals>.<genexpr>÷  s   è ø€ ò Ø89ˆÐ3Ô3ñùs   ‚z?skip must be a subset of ['foreach', 'fused', 'differentiable']c              3   ó–   •K  — | ]@  }|‰vr:t        ‰«      ‰j                  v s|d k7  rt        ‰«      t        «       v s|dk7  r|–— ŒB y­w)rû   r`   N)r¬   rr   r&   )rH  rI  r}   r‘   Úskips     €€€r0   rJ  zD_get_optim_inputs_including_global_cliquey_kwargs.<locals>.<genexpr>ý  sQ   øè ø€ ò 	àØ�D‰=Ü˜fÓ%¨×)EÑ)EÑEÈÈgÊä˜VÓ$Ô(NÓ(PÑPØ�IŠ~ô 	
ñ	ùs   ƒAA	r   FNr)   Tz & )
Úallru   r…   re   r   r+   Úlenrz   r(   r,   )r}   r~   r‘   rL  Úoptim_inputsre   Úall_optim_inputsÚoptim_inputÚbase_kwargsÚflagÚ
new_kwargss   ` ``       r0   Ú1_get_optim_inputs_including_global_cliquey_kwargsrU  é  s8  ú€ ô ñ Ø=Aôô ð IàHóIð ð ×/Ñ/°Ó7€Läõ 	à×+Ñ+ô	ó 	€Oð ÐØ#ò ˆä˜{×1Ñ1Ó2ˆÜˆÓ 1Ò$Ø'ò *�Ø$)�˜DÒ!ð*à×#Ñ#Ü d°;À[×EUÑEUÔVõð ×#Ñ# KÔ0ð $ò 	ˆDÜ! +Ó.ˆJØ#ˆJ�tÑØ×#Ñ#ÜØ¨
¸K×<LÑ<LÐ;MÈSÐQUÐPVÐ9Wôõñ	ðð, Ðr2   r_   TzSee #116028ÚTestOptimRenewedÚ)test_set_default_dtype_works_with_foreachzPAccessing grad.real errors, see https://github.com/pytorch/pytorch/issues/117184Útest_complex_2dg/n£¼B?g-Cëâ6
?)ÚrtolÚatolÚCompiledOptimizerParityTestsÚtest_correctnessz3This test uses mocks, which dynamo does not supportÚ test_defaults_changed_to_foreach)ru   rq   re   rh   ro   )r`   Fz&See #133268 regarding dtype being NonerÁ   c                 ó&   — | j                  dd«      S )NÚuse_closureF)Úget©r+   s    r0   rZ   rZ   _  s   € ¨¯©°MÀ5Ó)I€ r2   )rœ   Ú	active_ifÚtest_can_load_older_state_dict)rœ   Ú%test_deepcopy_copies_all_public_attrsÚtest_foreach_large_tensorÚtest_foreach_matches_forloopÚtest_load_nontensor_stepÚtest_mixed_device_dtypeÚtest_param_groups_lrÚtest_param_groups_weight_decayÚtest_peak_memory_foreachÚ)test_save_load_equality_with_weights_onlyz(See #116028 regarding copy not supportedÚtest_state_dict_deterministicÚ test_step_is_noop_for_zero_gradsÚxpu)ru   rq   re   rf   rk   ro   )r`   ra   rû   )r`   ra   rû   rb   rc   )r¥   r¶   )r©   r¸   rà   c                 ó   — t        | dd¬«      S )NçwJëÿï?iô  rT   rW   rX   s    r0   rZ   rZ   ó  s   € œF 3¨hÀ#ÔF€ r2   c                 ó   — t        | d¬«      S )Ng-Cëâ6?)Ú	thresholdr]   rX   s    r0   rZ   rZ   ô  s   € Ô-¨c¸TÔB€ r2   g{®Gázt?)rZ  rY  Útest_fused_matches_forloopÚ!test_forloop_goes_right_directionc                 ó   — | d    S ©NÚ
contiguousr?   ra  s    r0   rZ   rZ     ó   € ¨V°LÑ-AÐ)A€ r2   rë   )rb  rœ   )	ru   rq   re   rf   rr   rg   rj   rp   ro   c                 ó   — t        | d¬«      S ©NrR   ©rU   ©r   rX   s    r0   rZ   rZ   )  s   € œ s°#Ô6€ r2   c                 ó   — t        | dd¬«      S )Nçš™™™™™Ù?é   )Ústart_factorÚtotal_iters©r   rX   s    r0   rZ   rZ   *  s   € œ #°CÀQÔG€ r2   c                 ó   — t        | dd¬«      S ©Nr  r€  )Úfactorr‚  ©r   rX   s    r0   rZ   rZ   ,  s   € œJ s°3ÀAÔF€ r2   c                 ó   — t        | d¬«      S r{  r}  rX   s    r0   rZ   rZ   -  ó   € œM¨#°SÔ9€ r2   c                 ó   — t        | d¬«      S r{  r}  rX   s    r0   rZ   rZ   0  r‰  r2   c                 ó   — t        | «      S r.   r]   rX   s    r0   rZ   rZ   1  r^   r2   c                 ó   — t        | dd¬«      S r…  r‡  rX   s    r0   rZ   rZ   3  ó   € œ C°ÀÔC€ r2   c                 ó   — t        | dd¬«      S ©NrR   r€  )Úpowerr‚  ©r   rX   s    r0   rZ   rZ   4  ó   € œ c°À!ÔD€ r2   c                 ó   — t        | dd¬«      S rQ   rW   rX   s    r0   rZ   rZ   6  r[   r2   c                 ó   — t        | «      S r.   r]   rX   s    r0   rZ   rZ   7  r^   r2   )r¥   rÁ   rë   g1Eîð2ž>g‚¸aÊvtÂ>c                 ó>   — t         xr | d   t        j                  k(  S ©Nr~   ©r%   rŒ   Úfloat64ra  s    r0   rZ   rZ   K  ó   € Ô)>ò *5Ø˜7‘O¤u§}¡}Ñ4ð r2   )rb  giUMuÿ>gkN¹uÏµ>ÚTestCudaOptimsÚ+test_grad_scaling_autocast_fused_optimizersc                 ó   — | d    S rw  r?   ra  s    r0   rZ   rZ   n  ry  r2   zTErrors w/ Global state changed, see https://github.com/pytorch/pytorch/issues/116028)	ru   rd   rq   re   rh   rf   rr   rp   ro   c                 ó   — | d    S rw  r?   ra  s    r0   rZ   rZ   “  ry  r2   z2Uses too much memory, even for H100, surprisingly.c                 ó>   — t         xr | d   t        j                  k(  S r–  r—  ra  s    r0   rZ   rZ   Ä  r™  r2   c                 ó   — | d    S rw  r?   ra  s    r0   rZ   rZ   ê  ry  r2   )ru   rq   re   rf   rr   rh   rp   ro   giUMuï>gñhãˆµøä>z7ASGD internally changes the weights even with zero gradgÖÿ9Ì—?zDoes not support param groupsz!LBFGS doesn't support multideviceÚ*test_forloop_goes_right_direction_multigpuÚ6test_param_group_with_lrscheduler_goes_right_directionc                 ó6   — t         j                  dk(  xr | d   S )NÚdarwinr_  )ÚsysÚplatformra  s    r0   rZ   rZ   g  s   € ¬¯©¸Ñ)Aò **Ø˜=Ñ)ð r2   )ru   rq   re   rl   rm   rn   ro   c                 ó   — | d    S rw  r?   ra  s    r0   rZ   rZ   w  ry  r2   z8Errors, https://github.com/pytorch/pytorch/issues/117150gvƒôõ!„>gÐÀw$‡}>c                 ó   — | d    S rw  r?   ra  s    r0   rZ   rZ   Ë  ry  r2   gü©ñÒMb@?r«   c                 ó   — | d    S rw  r?   ra  s    r0   rZ   rZ   ø  ry  r2   c                 ó   — t        | dd¬«      S rQ   rW   rX   s    r0   rZ   rZ     s   € œ ¨3¸"Ô=€ r2   c                 ó    — t        | ddd¬«      S )Nr  rÖ   r€  ©r�  Ú
end_factorr‚  rƒ  rX   s    r0   rZ   rZ     ó   € œHØ c°cÀqô€ r2   c                 ó   — t        | dd¬«      S rQ   rW   rX   s    r0   rZ   rZ     r[   r2   c                 ó    — t        | ddd¬«      S )Nr  g333333ã?r€  r«  rƒ  rX   s    r0   rZ   rZ     r­  r2   c                 ó   — t        | dd¬«      S )Nré   rS   rT   rW   rX   s    r0   rZ   rZ   !  s   € œF 3¨d¸bÔA€ r2   c                 ó   — t        | d¬«      S )Nré   r|  r}  rX   s    r0   rZ   rZ   "  s   € œM¨#°TÔ:€ r2   c                 ó   — t        | «      S r.   r]   rX   s    r0   rZ   rZ   #  r^   r2   c                 ó   — t        | dd¬«      S r…  r‡  rX   s    r0   rZ   rZ   %  r�  r2   c                 ó   — t        | dd¬«      S r�  r‘  rX   s    r0   rZ   rZ   &  r’  r2   c                 ó   — t        | dd¬«      S rQ   rW   rX   s    r0   rZ   rZ   (  r[   r2   c                 ó   — t        | «      S r.   r]   rX   s    r0   rZ   rZ   )  r^   r2   ga2U0*©s?)r©   rb   r'  r6  r¸   c                 ó   — t        | dd¬«      S )Nrq  i,  rT   rW   rX   s    r0   rZ   rZ   >  s   € œ ¨7¸cÔB€ r2   gyé&1¬|?)	ru   rd   rq   re   rf   rg   rj   rr   ro   r©   g{®Gáz¤?z0SparseAdam is not yet supported on the XPU stack)Úmsgz,cannot call to_sparse on p.grad, see #117184Útest_tensor_lrz8SparseAdam does not support dense gradients, see #116507Ú test_state_dict_with_cuda_params)ru   rq   re   ri   rj   rk   ro   Úoptim_dbc                   ó*   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zy)ÚTensorTrackera0  
    A utility to track tensor clones in a list, with the expectation of popping them later (in
    order) to make fair comparisons between two multi-step computation. The intended use case is
    usually when comparing two supposed equal computations, such as an optimizer step that each
    individually consists of multiple steps, where numerical deviation could multiply.

    The goal is to be able to compare and align numbers at every milestone so as to minimize
    numerical discrepancies, and so when the test fails, it is likely a real problem.
    Nc                 ó(   — |€i }|| _         g | _        y r.   )Úassert_eq_kwargsÚtensors)r/   r¿  s     r0   r1   zTensorTracker.__init__·  s   € ØÐ#Ø!ÐØ 0ˆÔØˆ�r2   c                 ór   — | j                   j                  |j                  «       j                  «       «       y)z@
        Add a detach().clone()'d version of the tensor
        N)rÀ  rz   ÚdetachÚclone)r/   r±   s     r0   ÚaddzTensorTracker.add½  s%   € ð 	�‰×Ñ˜FŸM™M›O×1Ñ1Ó3Õ4r2   c                 óŽ  — |j                  t        | j                  «      dd«       | j                  j                  d«      }|j	                  t        |t        «      dt        |«      ›�«        |j                  ||fi | j                  ¤Ž t        j                  «       5  |j                  |«       ddd«       y# 1 sw Y   yxY w)zç
        Pop the first element in the tensor tracker, assert equality between the popped tensor and
        the input tensor, and then set the input tensor to have the same values as the popped tensor
        (with copy_).
        r   zno tensors to popz
type(ref)=N)ÚassertGreaterrN  rÀ  ÚpopÚ
assertTruerw   r   rD  ÚassertEqualr¿  rŒ   Úno_gradÚcopy_)r/   Útensor_to_setÚtestcaseÚrefs       r0   Úpop_check_setzTensorTracker.pop_check_setÄ  sž   € ð 	×Ñœs 4§<¡<Ó0°!Ð5HÔIØ�l‰l×Ñ˜qÓ!ˆà×ÑœJ s¬FÓ3¸
¼¸S»	°|°_ÔEØˆ×Ñ˜]¨CÑI°4×3HÑ3HÒIä�]‰]‹_ñ 	%Ø×Ñ Ô$÷	%÷ 	%ñ 	%ús   Â B;Â;Cc                 ó2   — t        | j                  «      dk(  S )Nr   )rN  rÀ  r4   s    r0   Ú
all_poppedzTensorTracker.all_poppedÓ  s   € Ü�4—<‘<Ó  AÑ%Ð%r2   r.   )r7   r8   r9   r:   r1   rÄ  rÏ  rÑ  r?   r2   r0   r½  r½  ¬  s   „ ñóò5ò%ó&r2   r½  r.   )NN)r?   )dr™   r—   r¤  ÚunittestÚcopyr   Úenumr   Útypingr   r   rŒ   r   Útorch.nnr   Útorch.optimr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Útorch.optim.lr_schedulerr   r   r   r   r   r   Ú*torch.testing._internal.common_device_typer   r   Ú2torch.testing._internal.common_methods_invocationsr    Ú$torch.testing._internal.common_utilsr!   r"   r#   r$   r%   Útorch.utils._foreach_utilsr&   r(   rA   rF   rO   r‰   r´   rÅ   rÊ   rÐ   rÜ   rã   ræ   rð   rþ   r  r  r  r
  r  r  r  r  r  r   r"  r$  r(  r,  r1  r3  r7  r9  r;  r@  r>   r}   r¬   r<   rU  r�   rL  Úbfloat16rì   r˜  rØ   ÚexpectedFailurer»  Ú__annotations__r½  r?   r2   r0   ú<module>rà     s  ðô Û Û 
Û Ý Ý ß ã Ý Ý ÷÷ ÷ ÷ ñ ÷"÷ ÷ NÝ K÷õ õ N÷Oñ Oô,˜ô ÷'ñ '÷,Z'ñ Z'ôz/Ðô /òfAó|OòBó"ò4,ó^ò<ó&IòXUóp.Oòbó"1ò7ó+Oò\ó"ò$ó
@OòFó60Oòfó48Oòvó"Oò2ó"òDó"
ò9ðx ˜U 3¨¯©Ð#4Ñ5ð  ¸#ó  ð %'ñ6à	ˆ.Ñó6ñv ØØ4Ø @Ø5ØáÙ! -Ó0Ø"Ø;óñ
 Ù!Øfóð #Ø!óñ Ù!àŸ™¡sØ!'Ø!%ô(ðóð /Ø"óñ Ù!ØIóð #Ø2óð?&
ô-ñ\ ØØ5Ø AØ$Ø+ØáØ�—‘ÐFÓGØ.Ø"Ø"ÙIôñ Ù!Ð"JÓKØ"Ø0Ø"ô	ñ Ù!Ð"JÓKØ"Ø7Ø"ô	ñ Ù!Ð"JÓKØ"Ø+óñ
 Ù!Ð"JÓKØ"Ø.óñ
 Ù!Ð"JÓKØ"Ø*Ø"ô	ñ Ù!Ð"JÓKØ"Ø)óñ
 Ù!Ð"JÓKØ"Ø&Ø"ô	ñ Ù!Ð"JÓKØ"Ø0Ø"ô	ñ Ù!Ð"JÓKØ"Ø*óñ
 Ù!Ð"JÓKØ"Ø;Ø"ô	ñ Ù!Ð"LÓMØ"Ø;óñ
 Ù!Ð"JÓKØ"Ø/Ø"ô	ñ Ù!Ð"JÓKØ"Ø2Ø"ô	ñ Ø�—‘ÐFÓGØ.Ø"Ø!ô	ñ Ù!Ð"JÓKØ"Ø0Ø!ô	ñ Ù!Ð"JÓKØ"Ø7Ø!ô	ñ Ù!Ð"JÓKØ"Ø*Ø!ô	ñ Ù!Ð"JÓKØ"Ø&Ø!ô	ñ Ù!Ð"JÓKØ"Ø0Ø!ô	ñ Ù!Ð"JÓKØ"Ø;Ø!ô	ñ Ù!Ð"JÓKØ"Ø/Ø!ô	ñ Ù!Ð"JÓKØ"Ø2Ø!ô	ðCG
ôOñ` ØØ3Ø ?Ø>ð 
ð #Øà¨°qÑ9áFÙBðð
ñ ñ "àŸ™©°¸DÔ(AØŸ™¡s°¸4Ô'@ðóð #Ø,óð
ñ$ ØØ"Ø3ÙAØ!ôñ Ù! -Ó0Ø"Ø;óñ
 Ù!Øfóð #Ø!óñ Ù!ØIóð #Ø2óð)
ôMBñF ØØ0á6Ð7ÙGÐHáFÙ9ðñ
 :Ù2ðñ DÐDÙDÐEá@Ù2ðð
ð$ !=Ø>Øð 
ð 1ñ Ù! 5§=¡=±#¸6ÈÔ2OÐ"PÓQØ"Ø,ñ5ô	ñ ñ "àŸ™©°¸DÔ(AØŸ™¡s°¸4Ô'@ðóð #Ø,óñ ñ "àŸ™¡s°¸7Ô'Cðóð
 !Ø=ó
ð1#
ñJ ØØ"Ø3ÙAØ!ôñ Ù!Øjóð #Ø;óñ Ù!Øfóð #Ø!óñ Ù!ØIóð #Ø2óð-
ôIbñF ØØ2Ø >Ø5ØáØØ"Ø3ÙAØ!ôñ Ù! -Ó0Ø"Ø;óñ
 Ù!Øfóð #Ø!óñ Ø�—‘ÐRÓSØ"Ø+óñ
 Ù!ØIóð #Ø2óð3 
ô'ñP ØØ1Ø =Ø>ð 
ð 1Øñ Ù! 5§=¡=±#¸6ÈÔ2OÐ"PÓQØ"Ø,ñ5ô	ñ Ù!ð Ÿ™©°¸DÔ(AØŸ™¡s°¸4Ô'@ðó
ð #Ø,óñ" Ù!àŸ™¡sØ!%Ø!(ô(ðóð !Ø=óð5&
ñP ØØ"Ø3ÙAØ!ôñ Ù!Øjóð #Ø;óñ Ù!Øfóð #Ø!óñ Ù!ØIóð #Ø2óð-
ôkSñh ØØ0Ø <Ø5ØáÙ!Øjóð #Ø;óñ Ù!Øfóð #Ø!óñ Ù!àŸ™¡s°¸TÔ'Bðóð
 #Ø2óñ Ù!ØIóð #Ø2óñ Ø�—‘ØMóð #Ø2óð?&
ô-ñ\ ØØ1Ø =ØØ"Ø#Ø"'ñ ØØ"Ø0Ø!ô	ñ Ù!àŸ™©Ø!'Ø!%ô*ðóð #Ø!óñ Ø�—‘Ð=Ó>Ø"Ø&óñ
 Ø�—‘Ð=Ó>Ø"Ø0óñ
 Ø�—‘ÐAÓBØ"Ø<óñ
 Ø�—‘Ð=Ó>Ø"ØHóñ Ø×(Ñ(Ø.Ø"ñ*ô	ðS0
ô9ñt ØØ1Ø =Ø5ØáØØ"Ø3ÙAØ!ôñ Ù!Øjóð #Ø;óñ Ù!Øfóð #Ø!óñ Ù!ØNóð #Ø*óñ Ù!ØIóð #Ø2óð;$
ô+ñX ØØ1Ø =Ø5ØáÙ!Øjóð #Ø;óñ Ù!Øfóð #Ø!óñ Ù!ð Ÿ™¡s°¸VÔ'Dðóð #Ø.ó	ñ Ù!ØIóð #Ø2óð3 
ô'ñP ØØ3Ø ?Ø5ØáØØ"Ø3ÙAØ!ôñ Ù! -Ó0Ø"Ø;óñ
 Ù!Øfóð #Ø!óñ Ù!àŸ™¡s°¸DÔ'Aðóð
 #Ø)Ø/ô	ñ Ù!ØIóð #Ø2óð=%
ô,ñZ ØØ1Ø =Ø5ØáØØ"Ø3ÙAØ!ôñ Ù! -Ó0Ø"Ø;óñ
 Ù!Øfóð #Ø!óñ Ù!ØIóð #Ø2óð)
ô"ñF ØØ/á=Ð>ñðñ Añðñ BÙ:Ù2ðñ
 DÐDÙDÐEá@Ù2ðð)
ð2 !<Ø>ð 
ð ð Ø!ØØ!Ø !ññ CÐCð	
ð
ñ Ù!Øjóð #Ø;óñ Ù!Øfóð #Ø!óñ Ù!àŸ™¡s°¸EÔ'Bðóð
 #Ø)Ø/ô	ñ Ù!ØIóð #Ø2óð3 
ôkVñn ØØ6Ø BØØ#'Ø" D˜\¨2Ð.ØáØØ"Ø!ôñ
 ÙÐPÔQóñ Ù!Ð"PÓQØ"Ø&óñ
 Ù!Ð"PÓQØ"Ø óñ
 Ø�—‘ØNóð #Ø0óñ Ù!Ð"PÓQØ"Ø*óñ
 Ù!Ð"PÓQØ"Ø3óñ
 Ù!Ð"PÓQØ"Ø<óñ
 Ù!Ð"PÓQØ"ØHóñ
 Ù!Ð"PÓQØ"Ø2óñ
 Ù!Ð"PÓQØ"Ø7óðg8
ôAðIF!€ˆ$ˆ}Ñ
ó F÷R(&ò (&r2   