Ë
    [^(hA“ ã                   ó€3  — U d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlm Z m!Z! ddlm"Z"m#Z# ddlm$Z$ ddl%m&Z& ddl'm(Z( ddlm)Z)m*Z* dd	l+m,Z,m-Z- dd
lm.Z. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6 ddlm7Z7m8Z8 ddl9m:Z: ddl;Z;ddl<Z=ddl>Z>ddl?Z?ddl@Z?ddlAZ?ddlBZ?ddlCZ?ddlDZ?ddl?mEZE ddlFmGZGmHZH ddlImJZJ ddlKmLZL ddlMmNZN ddlOmPZPmQZQmRZRmSZSmTZT ddlUmVZVmWZW ddlXmYZY ddlZm[Z[m\Z\m]Z]m^Z^m_Z_ ddlZm`Z` ddlambZb ddlcmdZd ddlemfc mgZh ddlimjZj 	 ddlkZkdZldZnd„ Zo G d „ d!«      Zp ejâ                  er«      Zse?jè                  jë                  «        d"Zvej"                  d#k(  rd$Zvepjï                  d%d&dd'„ ¬(«      Zxeyezd%<   epjï                  d)d*d+„ d¬,«      Z{eyezd)<   ejø                  jû                  d-«      duZ~eyezd.<    ee?�j                   d/«      xr e?�j                   �j                  Z‚epjï                  d0d1e‚d¬2«      Zƒeyezd0<   epjï                  d3d4d¬5«      Z„eyezd3<   epjï                  d6d7d¬5«      Z…eyezd6<   epjï                  d8d9eƒ d¬2«      Z†eyezd8<   ep�j                  d:d;ddd<„ ¬=«      Zˆe4e‰   ezd:<   d>ZŠd?Z‹i aŒi a�d@„ ZŽ e�j                  dAdB«      r eŽ e�j                  dAdB«      «      a� e�j                  dCdB«      r eŽ e�j                  dCdB«      «      aŒdDdEdFdGe?�j                   �j#                  «       fZ’dHZ“dZ”g dI¢Z• e–dJ„ e•D «       «      Z—dK„ Z˜dLe4e3   fdM„Z™e& G dN„ dO«      «       ZšdLe4eš   fdP„Z›�dÓdQ„Zœ G dR„ dS«      Z� G dT„ dU«      ZždV„ ZŸdW„ Z  G dX„ dY«      Z¡ G dZ„ d[ež«      Z¢ G d\„ d]ež«      Z£ G d^„ d_ež«      Z¤ G d`„ dae(«      Z¥db„ Z¦e#dc„ «       Z§e#dd„ «       Z¨e#de„ «       Z©e?�j                   �jT                  �jV                  Z¬e?�j                   �jZ                  �jV                  Z®df„ Z¯dg„ Z°dh„ Z±e°e?�j                   �jT                  _«        e±e?�j                   �jZ                  _«        di„ Z²dj e³e>dkdB«      v Z´ e�jj                  e´ d¬l«      Z¶e¶�jo                  dmdndo¬p«       e¶�jo                  dqe‰dr¬s«       e¶�jo                  dtdn¬u«       e¶�jo                  dvdwe¸¬x«       e¶�jo                  dye‰dz¬s«       e¶�jo                  d{d|dn¬u«       e¶�jo                  d}dn¬u«       e¶�jo                  d~de¸ e²«       exr e²«       nd¬€«       e¶�jo                  d�dn¬u«       e¶�jo                  d‚e¸dB¬s«       e¶�jo                  dƒe‰dz¬s«       e¶�jo                  d„e¸de‹¬…«       e¶�jo                  d†e¸deŠ¬…«       e¶�jo                  d‡dn¬u«       e¶�jo                  dˆe¸dz¬‰«       e¶�jo                  dŠe�jr                  d¬‹«       dŒ„ Zºd�e�jv                  v sdŽe�jv                  v rC e�jx                  eºe�jv                  f¬�«      Z½e½�j}                  «        e½�j                  «        e¶�j�                  «       \  ZÁZÂeÁ�j†                  d�k(  re¥�jˆ                  ZÅnCeÁ�j†                  d‘k(  re¥�jŒ                  ZÅn%eÁ�j†                  d’k(  re¥�jŽ                  ZÅn e¦«       ZÅeÁ�j�                  ZÉeÁ�j”                  ZËeÁ�j˜                  ZÍeÁ�jœ                  ZÏeÁ�j                   ZÑeÁ�j¤                  ZÓeÁ�j¨                  ZÕeÁ�j¬                  Z×eÁ�j°                  ZÙeÁj.                  ZÚeÁ�j¶                  ZÜeÁ�jº                  ZÞeÁ�j¾                  ZàeÁ�jÂ                  Zâ e³e;d“d«      seÁ�jÆ                  e;_ä        e�jv                  d   geÂz   Zå e?�jÌ                  eà«        e¸ e. e�jÎ                  «       «      «      Zè e¸ e. e�jÎ                  «       «      �jÒ                  «      Zê e¸e�jÖ                  �j                   e. e�jÎ                  «       «      �jÒ                  d”«      «      Zì�dÔd•„Zí�dÕd–„Zî	 	 	 	 	 	 	 �dÖdLeïe‰eyf   fd—„Zðd˜„ Zñd™„ Zòdš„ Zód›„ Zôdœ„ Zõd�„ Zöeådfdž„Z÷dŸe¸fd „Zød¡eùe¸   dLeùe¸   fd¢„Zúeåfd£„Zûej"                  d¤k(  Züej"                  d#k(  Zýej"                  d¥k(  Zþ e�jþ                  «       d¦k(  �Z  e�jþ                  «       d§v �Z e�jþ                  «       d¨v �Z e�jþ                  «       d©k(  �Zdª„ �Z �e«       �Zeýr
e#d«„ «       �Zn	e#d¬„ «       �Zeýre#�dÔd­„«       �Zne#�dÔd®„«       �Zd¯„ �Z e�j                  «       d°k(  �Z
 edd±«      �Z edd²«      �Z edd³«      �Ze?jè                  �j                  �j                  «       �Ze?jè                  �j"                  �j                  «       xr' e?�j$                  �j"                  �j'                  «       �Ze?jè                  �j*                  �j                  «       �Z �ed´�j                   e�j0                  «       d   �j3                  d´«      ddµ «      xs d¶«      �Ze?�j6                  �j                  «       �Z ee?d·«      re?�j:                  �j                  «       rdnd�Ze?�j>                  �j                  «       �Z  e³e?e?�j                   �j#                  «       d«      �Z! �e«       �Z"e?�j                   �j#                  «       �Z# edd¸«      �Z$ edd¹«      �Z% eddº«      �Z& edd»«      xr �e �Z' edd¼«      �Z( edd½«      �Z)d¾e¸fd¿„�Z*dD �e* e�j                  dÀdB«      «      v �Z+ e�jX                  �e& dÁ«      �Z-d�Z.eyezdÂ<   epjï                  dÃdÄ¬Å«      �Z/eyezdÃ<   epjï                  dÆdÇ¬Å«      �Z0eyezdÆ<   epjï                  dÈdÉ¬Å«      �Z1eyezdÈ<   epjï                  dÊdË¬Å«      �Z2eyezdÊ<   epjï                  dÌdÍ¬Å«      �Z3eyezdÌ<    e�j                  dÎdÏ«      dÐk(  �Z4epjï                  dÑdÒ¬Å«      �Z5eyezdÑ<   epjï                  dÓdÔ¬Å«      �Z6eyezdÓ<   epjï                  dÕdÖ¬Å«      �Z7eyezdÕ<   epjï                  d×dØ¬Å«      �Z8eyezd×<   �e xr �e8 xry e?�jr                  �j>                  xs_ e?�jr                  �jt                  xrE  �ed´�j                  e?�jr                  �jt                  �j3                  d´«      ddµ «      «      dÙk\  �Z;�e xrN e?�jr                  �j>                  xr4  e‰e?�jr                  �j>                  �j3                  d´«      d   «      dÚk\  �Z<dÛ„ �Z=epjï                  dÜdÝ ejR                  �e=dÞ¬ß«      ¬à«      �Z>eyezdÜ<   �e r�dáejø                  v rs e‰ e�j                  dádâ«      «      �Z?e?�j>                  �j�                  «       dz   dãz  �ZAe?�j>                  �j…                   �eC�eA�e?däz  z
  �eAz  �e?z  dµ«      «        e�jˆ                  e?�j>                  �j                  «       då«      �ZEdæ„ �ZF G dç„ dèe?�jŽ                  �j�                  «      �ZIepjï                  dédê¬Å«      �ZJeyezdé<   epjï                  dëdì¬Å«      �ZKeyezdë<   epjï                  dídîdï„ ¬ð«      �ZLeyezdí<   �eLr…dd�lMZ?dñe?�jœ                  �jž                  �_P        de?�jœ                  �jž                  �_Q        de?�jœ                  �jž                  �_R        �eJr#dd�lSZ?de?�j¨                  �jž                  �_U        dò„ �ZVdó„ �ZWdô„ �ZXdõ„ �ZYdö„ �ZZ�d×d÷„�Z[dø�eJfdù„�Z\�dØdú„�Z]�dÔdû„�Z^�dÙdü„�Z_�dÚdý„�Z`�dÛdþ„�Za	 �dÔdÿe4e3�d e2f      dLe3�d e2f   f�d„�Zb e�j                  �d«      dÐk(  �Zc�ecr)de?�jÈ                  �jÊ                  �jÌ                  �_g        �d„ �Zhepjï                  �d�d¬Å«      �Zieyez�d<   e=�jÔ                  e?jò                  e=�jÖ                  e?�jÖ                  e=�jØ                  e?�jØ                  e=�jÚ                  e?�jÚ                  e=�jÜ                  e?�jÜ                  e=�jÞ                  e?�jÞ                  e=�jà                  e?�jà                  e=�jâ                  e?�jâ                  e=�jä                  e?�jä                  e=�jæ                  e?�jæ                  e=�jè                  e?�jè                  e=�jê                  e?�jê                  e=�jì                  e?�jì                  e=�jî                  e?�jî                  i�Zx�d„ �Zy�d„ �Zzeýre?�j                  �exe=�jö                  <   �ex�jù                  «       D � �ci c]  \  } }|| “Œ
 c}} �Z}�e}�jý                  e?�jþ                  e=�jè                  e?�j                   e=�jì                  i«       �de?�jœ                  �jž                  �j                  f�d	„�Z‚�dÔ�d
�dœ�d„�Zƒ�deïe¸�d f   f�d„�Z„�d„ �Z…�deïe¸�d f   f�d„�Z†�d„ �Z‡�dÔ�d�dœ�d„�Zˆ�d„ �Z‰�d„ �ZŠ�d„ �Z‹�dÔ�d„�ZŒ�d„ �Z��dÔ�d�dœ�d„�ZŽ�d„ �Z��d„ �Z� G �d„ �d«      �Z‘ G �d„ �d «      �Z’ G �d!„ �d"«      �Z“ G �d#„ �d$«      �Z”�d%„ �Z•�dÔ�d&„�Z– G �d'„ �d(ež«      �Z—�d)„ �Z˜�d*„ �Z™�d+„ �Zš�d,„ �Z›�d-„ �Zœ�d.„ �Z��d/„ �Zž�d0„ �ZŸ�d1„ �Z �d2„ �Z¡�d3„ �Z¢�d4„ �Z£�d5„ �Z¤�dÔ�d6„�Z¥�d7„ �Z¦�d8„ �Z§ejF                  �d9„ «       �Z¨ejF                  �d:„ «       �Z©�d;„ �Zª�d<„ �Z«�dÜ�d=„�Z¬ G �d>„ �d?«      �Z­ G �d@„ �dA«      �Z®e#�dB„ «       �Z¯e#�dC„ «       �Z°	 dd�l±�Z±�dD„ �Z²�e±�jd                  �jg                  �dE �e²d�e±�jh                  �jj                  gd�dF�e±�jl                  �jn                  �¬G«      «       �e±�jd                  �jg                  �dH �e²�e±�jh                  �jj                  gd�dI�e±�jl                  �jn                  �¬J«      «       �e±�jd                  �jg                  �dK �e²�e±�jh                  �jj                  gd�dL�e±�jl                  �jp                  �¬J«      «       �e±�jd                  �js                  exr�dEn e�j                  �dM�dH«      «       �dOe¸dLe¸f�dP„�Z¼�dQe�jz                  f�dR„�Z¾ G �dS„ �dTe[«      �Z¿ G �dU„ �dVe]«      �ZÀ G �dW„ �dXe_«      �ZÁ G �dY„ �dZe_«      �ZÂ G �d[„ �d\e^«      �ZÃ G �d]„ �d^�eÃ«      �ZÄ G �d_„ �d`�eÃ«      �ZÅ G �da„ �db�eÃ«      �ZÆ G �dc„ �dd�eÃ«      �ZÇ G �de„ �dfe�j�                  �j’                  «      �ZÊe#�dgeyf�dh„«       �ZË G �di„ �dj«      �ZÌ G �dk„ �dle;�jz                  «      �Z½ G �dm„ �dn�e½«      �ZÍ�dØ�do„�ZÎ�dp„ �ZÏ�dq�ZÐ�dr�ZÑd�eÐf�ds„�ZÒ�dÝ�dt„�ZÓe?�j¨                  dDf�du„�ZÕ�dv�dw�dxœ�dy„�ZÖ�dz„ �Z×�d{„ �ZØ�d|„ �ZÙ�d}„ �ZÚ�d~„ �ZÛe?�j¨                  dD�dœ�d€„�ZÜ�d�„ �ZÝ�d‚„ �ZÞ�dƒ„ �Zßd�d„œ�d…„�Zà�d†„ �Zá�d‡„ �Zâ�dˆe‰�d‰e‰�dŠe‰dLe?jŠ                  f�d‹„�Zã�dÞ�d�„�Zä�dÞ�dŽ„�Zå�d�„ �Zæ�d�„ �Zçd�aè�d‘„ �Zé�d’„ �Zê�d“„ �Zë G �d”„ �d•e
�jØ                  «      �Zí�d–�Zîepjï                  �d—�d˜¬Å«      �Zïeyez�d—<    e�jX                  �eï�d™«      �Zð�dš„ �Zñ�dÔ�d›„�Zò�dœ„ �Zóe#�d�e¸dLe8d   f�dž„«       �Zôe?�j.                  �dŸe?�j¨                  �dŸe?�jê                  �dŒe?�jþ                  �d i�Zö�d¡„ �Z÷�d¢„ �ZøejF                  �d£„ «       �Zù�d¤e¸dLe.f�d¥„�Zú�d¦„ �Zû�d§„ �Zü�d¨„ �Zý�d©eùe‰   �dªe?�jü                  �d«e?�jþ                  f�d¬„�Z �d­„ �Z�d®„ �Z�d¯„ �Z�d°„ �Ze?�jþ                  �d±e?�jê                  �d²e?�jè                  �d³e?�jæ                  �d´e?�j                   �dµe?�jì                  �d¶e?�jî                  �d·e?�jÞ                  �d¸e?�jà                  �d¹e?�jâ                  �dºe?�jä                  �d»e?jò                  �d¼e?�jÖ                  �d½i�Ze�j                  dL�ef�d¾„«       �Z e5�d¿«      �Z�dÀe�jz                  �dÁe7�e   dL�ef�dÂ„�Z	�dÃ„ �Z
e#�dÄ„ «       �Z�dÅ„ �Z�dÆ„ �Z G �dÇ„ �dÈ�e½«      �Z�dÉ„ �Z G �dÊ„ �dË�e½«      �Z�e G �dÌ„ �dÍ«      «       �Zdddd�dÎœ�dÏ„�Ze#dze?jŠ                  f�dÐ„«       �Z�dÑ„ �Z�dÒ„ �Zy# em$ r dZlY �Œ(w xY wc c}} w # em$ r  e�jt                  �dN�e»«       Y �Œ«w xY w(ß  a=  Importing this file must **not** initialize CUDA context. test_distributed
relies on this assumption to properly run. This means that when this is imported
no CUDA calls shall be made, including torch.cuda.device_count(), etc.

torch.testing._internal.common_cuda.py can freely initialize CUDA context when imported.
é    N)ÚMappingÚSequence)ÚclosingÚcontextmanager)Údeepcopy)Ú	dataclass)ÚEnum)ÚpartialÚwraps)ÚproductÚchain)ÚPath)Úmean)ÚAnyÚCallableÚOptionalÚTypeVarÚUnion)ÚIterableÚIterator)Ú	MagicMock)ÚTensor)Ú
ScriptDictÚ
ScriptList)Ú_as_posix_path)Úget_writable_path)Úopen_source_signpost)Ú
ModuleDictÚ
ModuleListÚParameterDictÚParameterListÚ
Sequential©Úregister_custom_op_symbolicÚunregister_custom_op_symbolic)Úmake_tensor)ÚBooleanPairÚNonePairÚ
NumberPairÚPairÚTensorLikePair)Únot_close_error_metas)Úget_all_dtypes)Ú_check_module_exists)Úcpp_extensionTF)Úgfx942c                  óT   — t        j                  j                  j                  | i |¤ŽS ©N)ÚtorchÚtestingÚ_utilsÚfreeze_rng_state©ÚargsÚkwargss     úb/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/testing/_internal/common_utils.pyr6   r6   l   s"   € Ü�=‰=×Ñ×0Ñ0°$ÐA¸&ÑAÐAó    c                   ón   — e Zd ZU i Zeed<   edddd„ d„ fd„«       Zedddd„ fd	„«       Zed
e	fd„«       Z
y)ÚTestEnvironmentÚrepro_env_varsNFTc                 ó   — |r| dk7  S | dk(  S )NÚ0Ú1© )Úenv_var_valÚdefaults     r:   ú<lambda>zTestEnvironment.<lambda>–   s   € Ù$+ˆ[˜CÑð Ø2=ÀÑ2Dð r;   c                   ó   — y©NFrB   rB   r;   r:   rE   zTestEnvironment.<lambda>˜   s   � r;   c                 óì   — |}d }|�t        j                  |«      } |||«      } |«       }|xs |}|r|�||k7  r|s|t        j                  |<   | t	        «       vsJ d| › d�«       ‚|t	        «       | <   |S )Nzduplicate definition of flag 'ú'©ÚosÚgetenvr=   r>   Úglobals)	ÚnameÚenv_varrD   Úinclude_in_reproÚ
enabled_fnÚimplied_by_fnÚenabledrC   Úimplieds	            r:   Údef_flagzTestEnvironment.def_flag�   s’   € ð ˆØˆØÐÜŸ)™) GÓ,ˆKÙ  ¨gÓ6ˆGÙ“/ˆØÒ$˜WˆÙ Ð!4¸7ÀgÒ;MÑW^Ø6AŒO×*Ñ*¨7Ñ3ð œ7›9Ñ$ÐNÐ(FÀtÀfÈAÐ&NÓNÐ$Ø!Œ‹	�$‰Øˆr;   c                 ó   — | S r2   rB   )Úmaybe_val_strs    r:   rE   zTestEnvironment.<lambda>À   s   €  }€ r;   c                 óÄ   — |€|nt        j                  |«      } ||«      }|r||k7  r|t        j                  |<   | t	        «       vsJ d| › d�«       ‚|t	        «       | <   |S )Nz!duplicate definition of setting 'rI   rJ   )rN   rO   rD   rP   Úparse_fnÚvalues         r:   Údef_settingzTestEnvironment.def_settingº   sl   € ð #˜?‘´·	±	¸'Ó0BˆÙ˜“ˆÙ ¨'Ò!1Ø6;ŒO×*Ñ*¨7Ñ3ð œ7›9Ñ$ÐQÐ(IÈ$ÈÈqÐ&QÓQÐ$ØŒ‹	�$‰Øˆr;   Úreturnc            	      ó˜   — dj                  t        j                  j                  «       D � �cg c]  \  } }| › d|› �‘Œ c}} «      S c c}} w )Nú ú=)Újoinr=   r>   Úitems)rO   rZ   s     r:   Úrepro_env_var_prefixz$TestEnvironment.repro_env_var_prefixÐ   sQ   € à�x‰xÜ/>×/MÑ/M×/SÑ/SÓ/U÷WÙ+˜W eð $˜9 A e WÒ-ó Wó Xð 	Xùó Ws   ­A
)Ú__name__Ú
__module__Ú__qualname__r>   ÚdictÚ__annotations__ÚstaticmethodrU   r[   Ústrrb   rB   r;   r:   r=   r=   t   sw   … ð €N�DÓð0 ð ØØñGá#òó ððR ð ØØÙ4òó ðð* ðX #ò Xó ñXr;   r=   zfile://Úwin32zfile:///ÚIS_CIÚCIc                 ó   — t        | «      S r2   )Úbool)Úenv_var_valueÚ_s     r:   rE   rE   æ   s   € ¬¨]Ó(;€ r;   )rO   rP   rQ   ÚIS_SANDCASTLEÚ
SANDCASTLEc                  ó2   — t        j                  d«      dk(  S )NÚTW_JOB_USERÚ
sandcastle)rK   rL   rB   r;   r:   rE   rE   ë   s   € œ"Ÿ)™) MÓ2°lÑB€ r;   )rO   rR   rP   ÚINSIDE_RE_WORKERÚIN_RE_WORKERÚIS_FBSOURCEÚ	IS_FBCODEÚPYTORCH_TEST_FBCODE)rO   rD   rP   ÚIS_REMOTE_GPUÚPYTORCH_TEST_REMOTE_GPU)rO   rP   ÚDISABLE_RUNNING_SCRIPT_CHKÚ"PYTORCH_DISABLE_RUNNING_SCRIPT_CHKÚPRINT_REPRO_ON_FAILUREÚPYTORCH_PRINT_REPRO_ON_FAILUREÚOPINFO_SAMPLE_INPUT_INDEXÚ!PYTORCH_OPINFO_SAMPLE_INPUT_INDEXc                 ó    — | €d S t        | «      S r2   ©Úint)Úvals    r:   rE   rE     s   €   ˜€ ´#°c³(€ r;   )rO   rD   rP   rY   z.pytorch-disabled-tests.jsonzslow_tests.jsonc                 óÜ   — t         j                  j                  | «      r*t        | «      5 }t	        j
                  |«      cd d d «       S t        j                  d| «       i S # 1 sw Y   Œ!xY w)Nz7Attempted to load json file '%s' but it does not exist.)rK   ÚpathÚisfileÚopenÚjsonÚloadÚlogÚwarning)ÚfilenameÚfps     r:   Úmaybe_load_jsonr‘     sT   € Ü	‡w�w‡~�~�hÔÜ�(‹^ð 	!˜rÜ—9‘9˜R“=÷	!ñ 	!ä‡K�KÐIÈ8ÔTØ€I÷	!ð 	!ús   «A"Á"A+ÚSLOW_TESTS_FILEÚ ÚDISABLED_TESTS_FILEÚcpuÚcudaÚxpuÚmeta)r•   r–   r—   )ÚorinÚconcordÚgalenÚxavierÚnanoÚjetsonÚtegraÚthorc              #   óH   K  — | ]  }|t        j                   «       v –— Œ y ­wr2   )Úplatform)Ú.0rN   s     r:   ú	<genexpr>r¤   4  s   è ø€ ÒD°�œ×)Ñ)Ó+Ô+ÑDùs   ‚ "c                 óB   ‡ — t        j                  ‰ «      ˆ fd„«       }|S )Nc                  ó†   •— t         r2t        j                  «        t        j                  j                  «         ‰| i |¤Ž y r2   )Ú	IS_JETSONÚgcÚcollectr3   r–   Úempty_cache©r8   r9   Úfns     €r:   ÚwrapperzgcIfJetson.<locals>.wrapper8  s,   ø€ åÜ�J‰JŒLÜ�J‰J×"Ñ"Ô$Ù
ˆDÐ�FÓr;   ©Ú	functoolsr   ©r¬   r­   s   ` r:   Ú
gcIfJetsonr±   6  s%   ø€ ä‡_�_�RÓóó ðð
 €Nr;   r\   c                  ó`  — 	 t        j                  «       } | D ]„  }|j                  }d|j                  vrŒ|j                  d   }t	        |t
        j                  «      sŒH|j                  «       }|j                  d«      d   }t        ||«      j                  }|c S  	 y # t        $ r Y y w xY w)NÚselfú.é   )ÚinspectÚstackÚframeÚf_localsÚ
isinstanceÚunittestÚTestCaseÚidÚsplitÚgetattrÚ__func__Ú	Exception)r·   Ú
frame_infor¸   Úself_valÚtest_idÚ	test_nameÚtest_fns          r:   Úextract_test_fnrÇ   B  sª   € ðÜ—‘“ˆØò 		ˆJØ×$Ñ$ˆEØ˜UŸ^™^Ñ+ØØ—~‘~ fÑ-ˆHÜ˜(¤H×$5Ñ$5Õ6Ø"Ÿ+™+›-�Ø#ŸM™M¨#Ó.¨qÑ1�	Ü! (¨IÓ6×?Ñ?�Ø’ñ		ð øô ò ØØðús   ‚AB! Á =B! ÂB! Â!	B-Â,B-c                   ó,   — e Zd ZU eed<   eed<   eed<   y)ÚTrackedInputÚindexr†   Ú	type_descN)rc   rd   re   r…   rg   r   ri   rB   r;   r:   rÉ   rÉ   T  s   … àƒJØ	ƒHØ„Nr;   rÉ   c                  ó6   — t        «       } | €y t        | dd «      S ©NÚtracked_input)rÇ   r¿   ©rÆ   s    r:   Úget_tracked_inputrÐ   \  s!   € ÜÓ€GØ€ØÜ�7˜O¨TÓ2Ð2r;   c                  óF   — t        «       } | €y t        | d«      sy d | _        y rÍ   )rÇ   ÚhasattrrÎ   rÏ   s    r:   Úclear_tracked_inputrÓ   b  s'   € ÜÓ€GØ€ØÜ�7˜OÔ,ØØ €GÕr;   c                   ó4   — e Zd Z	 	 	 	 dd„Zd„ Zd„ Zdefd„Zy)ÚTrackedInputIterNc                 óØ   — t        |«      | _        || _        || _        | j                  €d„ | _        || _        | j                  €d„ | _        t        «       | _        || _        || _        y )Nc                 ó   — | S r2   rB   )ÚxÚis     r:   rE   z+TrackedInputIter.__init__.<locals>.<lambda>€  s   € ¨a€ r;   c                 ó   — | S r2   rB   ©rØ   s    r:   rE   z+TrackedInputIter.__init__.<locals>.<lambda>„  s   € ¨A€ r;   )	Ú	enumerateÚ
child_iterÚinput_type_descÚitem_callbackÚtrack_callbackrÇ   rÆ   Úset_seedÚrestrict_to_index)r³   rÝ   rÞ   rß   rà   rá   râ   s          r:   Ú__init__zTrackedInputIter.__init__m  sm   € ô $ JÓ/ˆŒà.ˆÔð +ˆÔØ×ÑÐ%Ù!/ˆDÔà,ˆÔØ×ÑÐ&Ù"-ˆDÔÜ&Ó(ˆŒà ˆŒð "3ˆÕr;   c                 ó   — | S r2   rB   ©r³   s    r:   Ú__iter__zTrackedInputIter.__iter__Œ  ó   € Øˆr;   c                 ó
  — 	 | j                   rz| j                  �]t        j                  t	        j
                  | j                  j                  j                  d«      «      j                  «       d d d«      nt        }t        |«       t        | j                  «      \  }}| j                  �|| j                  k(  rnŒ»| j                  t        || j!                  |«      | j"                  ¬«      «       | j%                  ||«      S )Núutf-8é   Úlittle)rÊ   r†   rË   )rá   rÆ   r…   Ú
from_bytesÚhashlibÚsha256re   ÚencodeÚdigestÚSEEDÚset_rng_seedÚnextrÝ   râ   Ú_set_tracked_inputrÉ   rà   rÞ   rß   )r³   ÚseedÚ	input_idxÚ	input_vals       r:   Ú__next__zTrackedInputIter.__next__�  sì   € ØØ�}Š}ð
 —|‘|Ð/ô —N‘N¤7§>¡>ØŸ™×1Ñ1×8Ñ8¸ÓAó$CßCIÁ6Ã8ÈBÈQð$PØQYô[ä59ð ô
 ˜TÔ"ô $(¨¯©Ó#8Ñ ˆI�yØ×&Ñ&Ð.°IÀ×AWÑAWÒ4WØð ð 	×ÑÜØ T×%8Ñ%8¸Ó%CÈt×OcÑOcôô	
ð
 ×!Ñ! )¨YÓ7Ð7r;   rÎ   c                 ón   — | j                   €y t        | j                   d«      sy || j                   _        y rÍ   )rÆ   rÒ   rÎ   )r³   rÎ   s     r:   rô   z#TrackedInputIter._set_tracked_input¦  s,   € Ø�<‰<ÐØÜ�t—|‘| _Ô5ØØ%2ˆ�‰Õ"r;   )NNTN)rc   rd   re   rã   ræ   rø   rÉ   rô   rB   r;   r:   rÕ   rÕ   l  s+   „ ð
 ØØØó3ò>ò8ð.3°ô 3r;   rÕ   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú_TestParametrizera�  
    Decorator class for parametrizing a test function, yielding a set of new tests spawned
    from the original generic test, each specialized for a specific set of test inputs. For
    example, parametrizing a test across the set of ops will result in a test function per op.

    The decision of how to parametrize / what to parametrize over is intended to be implemented
    by each derived class.

    In the details, the decorator adds a 'parametrize_fn' property to the test function. This function
    is intended to be called later by one of:
      * Device-specific test instantiation via instantiate_device_type_tests(). Note that for this
        case there is no need to explicitly parametrize over device type, as that is handled separately.
      * Device-agnostic parametrized test instantiation via instantiate_parametrized_tests().

    If the decorator is applied to a test function that already has a 'parametrize_fn' property, a new
    composite 'parametrize_fn' will be created that generates tests with the product of the parameters
    generated by the old and new parametrize_fns. This allows for convenient composability of decorators.
    c                 ó   — t         ‚)a’  
        Parametrizes the given test function across whatever dimension is specified by the derived class.
        Tests can be parametrized over any arbitrary dimension or combination of dimensions, such as all
        ops, all modules, or all ops + their associated dtypes.

        Args:
            test (fn): Test function to parametrize over
            generic_cls (class): Generic test class object containing tests (e.g. TestFoo)
            device_cls (class): Device-specialized test class object (e.g. TestFooCPU); set to None
                if the tests are not part of a device-specific set

        Returns:
            Generator object returning 4-tuples of:
                test (fn): Parametrized test function; must support a device arg and args for any params
                test_name (str): Parametrized suffix for the test (e.g. opname_int64); will be appended to
                    the base name of the test
                param_kwargs (dict): Param kwargs to pass to the test (e.g. {'op': 'add', 'dtype': torch.int64})
                decorator_fn (callable): Callable[[Dict], List] for list of decorators to apply given param_kwargs
        )ÚNotImplementedError)r³   ÚtestÚgeneric_clsÚ
device_clss       r:   Ú_parametrize_testz#_TestParametrizer._parametrize_testÀ  s
   € ô( "Ð!r;   c                 ó–   — t        |d«      r+|j                  }| j                  }t        ||«      |_        |S | j                  |_        |S )NÚparametrize_fn)rÒ   r  r  Úcompose_parametrize_fns)r³   r¬   Úold_parametrize_fnÚnew_parametrize_fns       r:   Ú__call__z_TestParametrizer.__call__Ö  sR   € Ü�2Ð'Ô(à!#×!2Ñ!2ÐØ!%×!7Ñ!7ÐÜ 7Ð8JÐL^Ó _ˆBÔð ˆ	ð !%× 6Ñ 6ˆBÔØˆ	r;   N)rc   rd   re   Ú__doc__r  r  rB   r;   r:   rû   rû   ­  s   „ ñò$"ó,r;   rû   c                 ó   — | |fd„}|S )a¼  
    Returns a parametrize_fn that parametrizes over the product of the parameters handled
    by the given parametrize_fns. Each given parametrize_fn should each have the signature
    f(test, generic_cls, device_cls).

    The test names will be a combination of the names produced by the parametrize_fns in
    "<new_name>_<old_name>" order. This order is done to match intuition for constructed names
    when composing multiple decorators; the names will be built in top to bottom order when stacking
    parametrization decorators.

    Args:
        old_parametrize_fn (callable) - First parametrize_fn to compose.
        new_parametrize_fn (callable) - Second parametrize_fn to compose.
    c              3   ó~  K  — t         || ||«      «      }|D ]¡  \  }}}}	 ||||«      D ]�  \  }
}}}t        |j                  «       «      j                  |j                  «       «      }|rt	        d| j
                  › d|› �«      ‚i |¥|¥}dj                  ||dk7  r|dk7  rdnd|«      }|	|fd„}|
|||f–— Œ� Œ£ y ­w)NzkParametrization over the same parameter by multiple parametrization decorators is not supported. For test "z8", the following parameters are handled multiple times: z{}{}{}r“   rp   c                 óH   — t         || «      «      t         || «      «      z   S r2   )Úlist)Úparam_kwargsÚ
old_dec_fnÚ
new_dec_fns      r:   Úmerged_decorator_fnzJcompose_parametrize_fns.<locals>.composite_fn.<locals>.merged_decorator_fn  s!   € Ü¡
¨<Ó 8Ó9¼DÁÈLÓAYÓ<ZÑZÐZr;   )r  ÚsetÚkeysÚintersectionÚRuntimeErrorrc   Úformat)rþ   rÿ   r   r  r  Ú	old_testsÚold_testÚold_test_nameÚold_param_kwargsr  Únew_testÚnew_test_nameÚnew_param_kwargsr  Úredundant_paramsÚfull_param_kwargsÚmerged_test_namer  s                     r:   Úcomposite_fnz-compose_parametrize_fns.<locals>.composite_fnñ  s   è ø€ ô Ñ+¨D°+¸zÓJÓKˆ	ØGPò 	[ÑCˆX�}Ð&6¸
á& x°¸jÓIò[ÑG�˜=Ð*:¸Jä#&Ð'7×'<Ñ'<Ó'>Ó#?×#LÑ#LÐM]×MbÑMbÓMdÓ#eÐ Ù#Ü&ð (QØQU×Q^ÑQ^ÐP_ð `FØFVÐEWð(Yó Zð Zð %MÐ'7Ð$LÐ;KÐ$LÐ!Ø#+§?¡?°=Ø:GÈ2Ò:MÐR_ÐceÒRe±3ÐkmØ3@ó$BÐ ð BLÐXbó [ð  Ð!1Ð3DÐFYÐZÓZñ[ñ	[ùs   ‚B;B=rB   )r  r  r   s      r:   r  r  á  s   € ð" );Ø(:ó[ð, Ðr;   c                 ó.  ‡ — t        t        ‰ «      «      D ]|  }t        ‰ |«      }t        |d«      sŒt	        ‰ |«       ˆ fd„}|j                  |‰ d¬«      D ]9  \  }}}}|j                  › d|› �} ||«      D ]
  }	 |	|«      }Œ  |‰ |||¬«       Œ; Œ~ ‰ S )ai  
    Instantiates tests that have been decorated with a parametrize_fn. This is generally performed by a
    decorator subclass of _TestParametrizer. The generic test will be replaced on the test class by
    parametrized tests with specialized names. This should be used instead of
    instantiate_device_type_tests() if the test class contains device-agnostic tests.

    You can also use it as a class decorator. E.g.

    ```
    @instantiate_parametrized_tests
    class TestFoo(TestCase):
        ...
    ```

    Args:
        generic_cls (class): Generic test class object containing tests (e.g. TestFoo)
    r  c                 óx   •‡— t        ‰«      |fˆfd„	«       }t        ‰|«      r
J d|› �«       ‚t        ‰||«       y )Nc                 ó   •—  ‰| fi |¤Ž y r2   rB   )r³   r  rþ   s     €r:   Úinstantiated_testzZinstantiate_parametrized_tests.<locals>.instantiate_test_helper.<locals>.instantiated_test&  s   ø€ á�TÑ*˜\Ó*r;   zRedefinition of test )r   rÒ   Úsetattr)ÚclsrN   rþ   r  r$  rÿ   s     `  €r:   Úinstantiate_test_helperz?instantiate_parametrized_tests.<locals>.instantiate_test_helper%  sH   ù€ Ü�4‹[Ø5Aô +ó ð+ô ˜{¨DÔ1ÐQÐ5JÈ4È&Ð3QÓQÐ1Ü�K Ð'8Õ9r;   N)rÿ   r   rp   )r&  rN   rþ   r  )ÚtupleÚdirr¿   rÒ   Údelattrr  rc   )
rÿ   Ú	attr_nameÚ
class_attrr'  rþ   Útest_suffixr  Údecorator_fnÚ	full_nameÚ	decorators
   `         r:   Úinstantiate_parametrized_testsr1  
  sÐ   ø€ ô$ œ3˜{Ó+Ó,ò kˆ	Ü˜[¨)Ó4ˆ
Ü�zÐ#3Ô4Øô 	�˜YÔ'ô	:ð @J×?XÑ?XØ¨Àð @Yó @Fò 	kÑ;ˆT�; ¨làŸ=™=˜/¨¨;¨-Ð8ˆIñ *¨,Ó7ò '�	Ù  “‘ð'ñ $¨¸)È$Ð]iÖjñ	kð#kð4 Ðr;   c                   ó    — e Zd ZdZg d¢Zdd„Zy)ÚsubtestaÖ  
    Explicit subtest case for use with test parametrization.
    Allows for explicit naming of individual subtest cases as well as applying
    decorators to the parametrized test.

    Args:
        arg_values (iterable): Iterable of arg values (e.g. range(10)) or
            tuples of arg values (e.g. [(1, 2), (3, 4)]).
        name (str): Optional name to use for the test.
        decorators (iterable): Iterable of decorators to apply to the generated test.
    ©Ú
arg_valuesrN   Ú
decoratorsNc                 óB   — || _         || _        |r|| _        y g | _        y r2   r4  )r³   r5  rN   r6  s       r:   rã   zsubtest.__init__G  s   € Ø$ˆŒØˆŒ	Ù(2˜*ˆ�¸ˆ�r;   ©NN)rc   rd   re   r  Ú	__slots__rã   rB   r;   r:   r3  r3  9  s   „ ñ
ò 5€Iô;r;   r3  c                   ó2   — e Zd ZdZdd„Zd„ Zd„ Zdd„Zd„ Zy)	Úparametrizeax
  
    Decorator for applying generic test parametrizations.

    The interface for this decorator is modeled after `@pytest.mark.parametrize`.
    Basic usage between this decorator and pytest's is identical. The first argument
    should be a string containing comma-separated names of parameters for the test, and
    the second argument should be an iterable returning values or tuples of values for
    the case of multiple parameters.

    Beyond this basic usage, the decorator provides some additional functionality that
    pytest does not.

    1. Parametrized tests end up as generated test functions on unittest test classes.
    Since this differs from how pytest works, this decorator takes on the additional
    responsibility of naming these test functions. The default test names consists of
    the test's base name followed by each parameter name + value (e.g. "test_bar_x_1_y_foo"),
    but custom names can be defined using `name_fn` or the `subtest` structure (see below).

    2. The decorator specially handles parameter values of type `subtest`, which allows for
    more fine-grained control over both test naming and test execution. In particular, it can
    be used to tag subtests with explicit test names or apply arbitrary decorators (see examples
    below).

    Examples::

        @parametrize("x", range(5))
        def test_foo(self, x):
            ...

        @parametrize("x,y", [(1, 'foo'), (2, 'bar'), (3, 'baz')])
        def test_bar(self, x, y):
            ...

        @parametrize("x,y", [(1, 'foo'), (2, 'bar'), (3, 'baz')],
                     name_fn=lambda x, y: '{}_{}'.format(x, y))
        def test_bar_custom_names(self, x, y):
            ...

        @parametrize("x, y", [subtest((1, 2), name='double'),
                              subtest((1, 3), name='triple', decorators=[unittest.expectedFailure]),
                              subtest((1, 4), name='quadruple')])
        def test_baz(self, x, y):
            ...

    To actually instantiate the parametrized tests, one of instantiate_parametrized_tests() or
    instantiate_device_type_tests() should be called. The former is intended for test classes
    that contain device-agnostic tests, while the latter should be used for test classes that
    contain device-specific tests. Both support arbitrary parametrizations using the decorator.

    Args:
        arg_str (str): String of arg names separate by commas (e.g. "x,y").
        arg_values (iterable): Iterable of arg values (e.g. range(10)) or
            tuples of arg values (e.g. [(1, 2), (3, 4)]).
        name_fn (Callable): Optional function that takes in parameters and returns subtest name.
    Nc                 óš   — |j                  d«      D �cg c]  }|dk7  sŒ	|j                  «       ‘Œ c}| _        || _        || _        y c c}w )Nú,r“   )r¾   ÚstripÚ	arg_namesr5  Úname_fn)r³   Úarg_strr5  r@  Úss        r:   rã   zparametrize.__init__…  s>   € Ø8?¿¹ÀcÓ8JÖ$V°1ÈaÐSUËg Q§W¡W¥YÒ$VˆŒØ$ˆŒØˆ�ùò %Ws
   ”
AŸAc                 ó^  — t        |t        j                  «      rt        |«      S t        |t        j                  «      rt        |«      S t        |«      j                  dv r|j                  S t        |t        t        t
        f«      r |› dt        |«      j                  dd«      › �S |› |› �S )zd Returns a string representation for the given arg that is suitable for use in test function names. >   ÚOpInfoÚ
ModuleInforp   r´   )rº   r3   ÚdtypeÚ
dtype_nameÚdeviceri   Útyperc   Úformatted_namer…   ÚfloatÚreplace)r³   ÚidxrN   rZ   s       r:   Ú_formatted_str_reprzparametrize._formatted_str_reprŠ  s”   € ä�eœUŸ[™[Ô)Ü˜eÓ$Ð$Ü˜œuŸ|™|Ô,Ü�u“:Ðä�%‹[×!Ñ!Ð%=Ñ=Ø×'Ñ'Ð'Ü˜¤¤U¬CÐ0Ô1Ø�V˜1œS ›Z×/Ñ/°°SÓ9Ð:Ð;Ð;à�V˜C˜5�>Ð!r;   c                 ó    — dj                  t        | j                  |«      D ��cg c]  \  }}| j                  |||«      ‘Œ c}}«      S c c}}w )Nrp   )r`   Úzipr?  rN  )r³   rM  ÚvaluesÚaÚvs        r:   Ú_default_subtest_namez!parametrize._default_subtest_name˜  s>   € Ø�x‰xÌÈTÏ^É^Ð]cÓId×eÁÀÀA˜×1Ñ1°#°q¸!Õ<ÓeÓfÐfùÓes   ¥A

c                 óp   — |r|}|S | j                   r | j                   |Ž }|S | j                  ||«      }|S r2   )r@  rT  )r³   rM  rQ  Úexplicit_nameÚsubtest_names        r:   Ú_get_subtest_namezparametrize._get_subtest_name›  sM   € ÙØ(ˆLð
 Ðð	 �\Š\Ø'˜4Ÿ<™<¨Ð0ˆLð Ðð  ×5Ñ5°c¸6ÓBˆLØÐr;   c           
   #   óø  ‡K  — t        | j                  «      dk(  rd}‰|i d„ f–— y t        «       x}}t        | j                  «      D �]  \  }}d }g }	t        |t        «      r<|}
|
j                  }|
j                  }t        ‰«      ˆfd„«       }|
j                  }	|}n‰}t        | j                  «      dkD  rt        |«      n|g}t        |«      t        | j                  «      k7  r;t        dt        |«      › dt        | j                  «      › d‰j                  › d	�«      ‚t        t        | j                  |«      «      }| j                  |||¬
«      }|	fd„}||||f–— �Œ ||u rt!        ‰› d�«      ‚y ­w)Nr   r“   c                 ó   — g S r2   rB   ©rp   s    r:   rE   z/parametrize._parametrize_test.<locals>.<lambda>¨  s   € °"€ r;   c                  ó   •—  ‰| i |¤ŽS r2   rB   ©r8   r9   rþ   s     €r:   Útest_wrapperz3parametrize._parametrize_test.<locals>.test_wrapper·  s   ø€ á# TÐ4¨VÑ4Ð4r;   é   z+Expected # values == # arg names, but got: z values and z names for test "ú")rV  c                 ó   — |S r2   rB   )rp   r6  s     r:   r.  z3parametrize._parametrize_test.<locals>.decorator_fnÉ  s   € Ø%Ð%r;   zf: An empty arg_values was passed to @parametrize. Note that this may result from reuse of a generator.)Úlenr?  ÚobjectrÜ   r5  rº   r3  rN   r   r6  r  r  rc   rf   rP  rX  Ú
ValueError)r³   rþ   rÿ   r   rÅ   rQ  Úcheck_exhausted_iteratorrM  Ú
maybe_namer6  Úsubr^  Úgen_testr  r.  s    `             r:   r  zparametrize._parametrize_test¤  s£  øè ø€ Üˆt�~‰~Ó !Ò#àˆIØ˜ B©Ð5Ó5ô
 17³Ð8ˆFÐ-Ü(¨¯©Ó9ó H‘��VØ!�
à(*�
Ü˜f¤gÔ.Ø �CØ Ÿ^™^�FØ!$§¡�Jä˜4“[ó5ó !ð5ð "%§¡�JØ+‘Hà#�Hä),¨T¯^©^Ó)<¸qÒ)@œ˜fœÀvÀh�Ü�v“;¤# d§n¡nÓ"5Ò5Ü&Ð)TÔUXÐY_ÓU`ÐTað b5Ü58¸¿¹Ó5HÐ4IÐIZÐ[_×[hÑ[hÐZiÐijð(ló mð mô  $¤C¨¯©¸Ó$?Ó@�à ×2Ñ2°3¸ÈjÐ2ÓY�	à/9ó &ð   ¨L¸,ÐGÔGð=Hð@ Ð1Ñ1Ü  D 6ð *Xð "Xó Yð Yð 2ùs   ƒE7E:r2   )	rc   rd   re   r  rã   rN  rT  rX  r  rB   r;   r:   r;  r;  M  s#   „ ñ6ónò
"ògóó,Yr;   r;  c                   ó   — e Zd ZdZd„ Zd„ Zy)Úreparametrizea¹  
    Decorator for adjusting the way an existing parametrizer operates. This class runs
    the given adapter_fn on each parametrization produced by the given parametrizer,
    allowing for on-the-fly parametrization more flexible than the default,
    product-based composition that occurs when stacking parametrization decorators.

    If the adapter_fn returns None for a given test parametrization, that parametrization
    will be excluded. Otherwise, it's expected that the adapter_fn returns an iterable of
    modified parametrizations, with tweaked test names and parameter kwargs.

    Examples::

        def include_is_even_arg(test_name, param_kwargs):
            x = param_kwargs["x"]
            is_even = x % 2 == 0
            new_param_kwargs = dict(param_kwargs)
            new_param_kwargs["is_even"] = is_even
            is_even_suffix = "_even" if is_even else "_odd"
            new_test_name = f"{test_name}{is_even_suffix}"
            yield (new_test_name, new_param_kwargs)

        ...

        @reparametrize(parametrize("x", range(5)), include_is_even_arg)
        def test_foo(self, x, is_even):
            ...

        def exclude_odds(test_name, param_kwargs):
            x = param_kwargs["x"]
            is_even = x % 2 == 0
            yield None if not is_even else (test_name, param_kwargs)

        ...

        @reparametrize(parametrize("x", range(5)), exclude_odds)
        def test_bar(self, x):
            ...

    c                 ó    — || _         || _        y r2   )ÚparametrizerÚ
adapter_fn)r³   rl  rm  s      r:   rã   zreparametrize.__init__û  s   € Ø(ˆÔØ$ˆ�r;   c              #   ó²   K  — | j                   j                  |||«      D ]3  \  }}}}| j                  ||«      }|€Œ|D ]  }	|	€Œ|	\  }
}||
||f–— Œ Œ5 y ­wr2   )rl  r  rm  )r³   rþ   rÿ   r   rh  rÅ   r  r.  ÚadaptedÚadapted_itemr  r  s               r:   r  zreparametrize._parametrize_testÿ  s}   è ø€ à×!Ñ!×3Ñ3°D¸+ÀzÓRò	XÑ=ˆX�y ,°à—o‘o i°Ó>ˆGØÑ"Ø$+ò X�LØ#Ñ/Ø:FÑ7˜Ð'7Ø'¨Ð8HÈ,ÐWÓWñXñ		Xùs   ‚:A½AÁAN©rc   rd   re   r  rã   r  rB   r;   r:   rj  rj  Ó  s   „ ñ&òN%óXr;   rj  c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú
decorateIfa[  
    Decorator for applying parameter-specific conditional decoration.
    Composes with other test parametrizers (e.g. @modules, @ops, @parametrize, etc.).

    Examples::

        @decorateIf(unittest.skip, lambda params: params["x"] == 2)
        @parametrize("x", range(5))
        def test_foo(self, x):
            ...

        @parametrize("x,y", [(1, 'foo'), (2, 'bar'), (3, 'baz')])
        @decorateIf(
            unittest.expectedFailure,
            lambda params: params["x"] == 3 and params["y"] == "baz"
        )
        def test_bar(self, x, y):
            ...

        @decorateIf(
            unittest.expectedFailure,
            lambda params: params["op"].name == "add" and params["dtype"] == torch.float16
        )
        @ops(op_db)
        def test_op_foo(self, device, dtype, op):
            ...

        @decorateIf(
            unittest.skip,
            lambda params: params["module_info"].module_cls is torch.nn.Linear and                 params["device"] == "cpu"
        )
        @modules(module_db)
        def test_module_foo(self, device, dtype, module_info):
            ...

    Args:
        decorator: Test decorator to apply if the predicate is satisfied.
        predicate_fn (Callable): Function taking in a dict of params and returning a boolean
            indicating whether the decorator should be applied or not.
    c                 ó    — || _         || _        y r2   )r0  Úpredicate_fn)r³   r0  ru  s      r:   rã   zdecorateIf.__init__4  s   € Ø"ˆŒØ(ˆÕr;   c              #   ó|   ‡K  — | j                   | j                  fd„}t        ‰«      ˆfd„«       }d}||i |f–— y ­w)Nc                 ó   —  || «      r|gS g S r2   rB   )Úparamsr0  ru  s      r:   r.  z2decorateIf._parametrize_test.<locals>.decorator_fn;  s   € Ù˜FÔ#Ø!�{Ð"à�	r;   c                  ó   •—  ‰| i |¤ŽS r2   rB   r]  s     €r:   r^  z2decorateIf._parametrize_test.<locals>.test_wrapperA  s   ø€ á˜Ð( Ñ(Ð(r;   r“   )r0  ru  r   )r³   rþ   rÿ   r   r.  r^  rÅ   s    `     r:   r  zdecorateIf._parametrize_test8  sK   øè ø€ ð ,0¯>©>È×HYÑHYó 	ô 
ˆt‹ó	)ó 
ð	)ð ˆ	Ø˜Y¨¨LÐ9Ó9ùs   ƒ9<Nrq  rB   r;   r:   rs  rs  
  s   „ ñ(òR)ó:r;   rs  c                   ó   — e Zd ZdZdZdZy)ÚProfilingModer_  rµ   é   N)rc   rd   re   ÚLEGACYÚSIMPLEÚ	PROFILINGrB   r;   r:   r{  r{  I  s   „ Ø€FØ€FØ�Ir;   r{  c                  ób  — t         j                  j                  d«      } t         j                  j                  d«      }t         j                  j                  | «       t         j                  j                  |«       | r"|rt        j
                  S t        j                  S t        j                  S ©NT)r3   Ú_CÚ_jit_set_profiling_executorÚ_get_graph_executor_optimizer{  r  r~  r}  ©Úold_prof_exec_stateÚold_prof_mode_states     r:   Ú cppProfilingFlagsToProfilingModerˆ  N  s|   € ÜŸ(™(×>Ñ>¸tÓDÐÜŸ(™(×?Ñ?ÀÓEÐÜ	‡H�H×(Ñ(Ð)<Ô=Ü	‡H�H×)Ñ)Ð*=Ô>áÙÜ ×*Ñ*Ð*ä ×'Ñ'Ð'ä×#Ñ#Ð#r;   c               #   ó*  K  — d} d}t         t        j                  k(  r>t        j                  j                  d«      } t        j                  j                  d«      }	 d –— t         t        j                  k(  r?t        j                  j                  | «       t        j                  j                  |«       y y # t         t        j                  k(  r?t        j                  j                  | «       t        j                  j                  |«       w w xY w­w)NFT)ÚGRAPH_EXECUTORr{  r  r3   r‚  rƒ  r„  r…  s     r:   Ú)enable_profiling_mode_for_profiling_testsr‹  \  sÅ   è ø€ àÐØÐÜœ×0Ñ0Ò0Ü#Ÿh™h×BÑBÀ4ÓHÐÜ#Ÿh™h×CÑCÀDÓIÐðGÛäœ]×4Ñ4Ò4Ü�H‰H×0Ñ0Ð1DÔEÜ�H‰H×1Ñ1Ð2EÕFð 5øŒ>œ]×4Ñ4Ò4Ü�H‰H×0Ñ0Ð1DÔEÜ�H‰H×1Ñ1Ð2EÕFð 5üs    ‚ADÁB8 Á!ADÂ8ADÄDc               #   ó”  K  — t         j                  j                  d«      } t         j                  j                  d«      }	 d –— t         j                  j                  | «       t         j                  j                  |«       y # t         j                  j                  | «       t         j                  j                  |«       w xY w­wr�  )r3   r‚  rƒ  r„  r…  s     r:   Úenable_profiling_moder�  j  sˆ   è ø€ äŸ(™(×>Ñ>¸tÓDÐÜŸ(™(×?Ñ?ÀÓEÐðCÛä�‰×,Ñ,Ð-@ÔAÜ�‰×-Ñ-Ð.AÕBøô 	�‰×,Ñ,Ð-@ÔAÜ�‰×-Ñ-Ð.AÕBüs   ‚?CÁB Á?CÂA CÃCc              #   óÚ   K  — t         j                  j                  | «      }	 d –— t         j                  j                  |«       y # t         j                  j                  |«       w xY w­wr2   )r3   r‚  Ú_jit_set_num_profiled_runs)Únum_runsÚold_num_runss     r:   Únum_profiled_runsr’  t  sF   è ø€ ä—8‘8×6Ñ6°xÓ@€Lð:Ûä�‰×+Ñ+¨LÕ9øŒ�‰×+Ñ+¨LÕ9üs   ‚ A+£A § A+Á!A(Á(A+c                 ó®   — d|v r>|d= t         t        j                  k(  r$t        «       5   | |i |¤Ž  | |i |¤Žcd d d «       S  | |i |¤ŽS # 1 sw Y   ŒxY w)NÚprofile_and_replay)rŠ  r{  r  r‹  )Úcallabler8   r9   s      r:   Úprof_callabler–    sm   € Ø˜vÑ%ØÐ'Ð(Üœ]×4Ñ4Ò4Ü:Ó<ñ 1Ù˜$Ð) &Ò)Ù Ð0¨Ñ0÷1ñ 1ñ �TÐ$˜VÑ$Ð$÷	1ð 1ús   ©AÁAc                  ó(   — t        t        g| ¢­i |¤ŽS r2   )r–  Ú	func_callr7   s     r:   Úprof_func_callr™  ‰  ó   € ÜœÐ4 TÒ4¨VÑ4Ð4r;   c                  ó(   — t        t        g| ¢­i |¤ŽS r2   )r–  Ú	meth_callr7   s     r:   Úprof_meth_callr�  Œ  rš  r;   c                  óŒ   — t         j                  j                  d«      } | �| nd}t         j                  j	                  d|«      S )NÚTEST_REPORT_SOURCE_OVERRIDEúpython-unittestztest-reports)rK   ÚenvironÚgetrˆ   r`   )ÚoverrideÚtest_sources     r:   Ú_get_test_report_pathr¥  ’  s9   € ô �z‰z�~‰~Ð;Ó<€HØ&Ð2‘(Ð8I€KÜ�7‰7�<‰<˜¨Ó4Ð4r;   zrun_test.pyÚ__file__)Úadd_helpÚallow_abbrevz--subprocessÚ
store_truez(whether to run each test in a subprocess)ÚactionÚhelpz--seediÒ  )rI  rD   z--accept)rª  z--jit-executorz--jit_executor)rI  z--repeatr_  z--test-bailoutsz--test_bailoutsú--use-pytestú
--save-xmlú?)ÚnargsrI  ÚconstrD   z--discover-testsz--log-suffixz--run-parallelú--import-slow-tests)rI  r¯  r°  ú--import-disabled-testsú--rerun-disabled-testsú--pytest-single-test)rI  r¯  ú--showlocals)rª  rD   c                 ó0   — t        j                  | ¬«       y )N©Úargv)r»   Úmainr·  s    r:   Úrun_unittest_helprº  ±  s   € Ü‡M�M�tÖr;   z-hz--help)Útargetr8   ÚlegacyÚ	profilingÚsimpleÚACCEPTÚ	functorchc                 ó.  — 	 | j                  |¬«      | j                  «        S # t        $ r: | j                  d¬«      }|�|cY | j                  «        S | j                  «        ‚ t        j                  $ rv | j                  t        j                  «       d }	 | j                  d¬«      }n# t        j                  $ r Y nw xY w|�|cY | j                  «        S | j                  «        ‚  | j                  «        ‚ xY w# | j                  «        w xY w)N©Útimeouté   )ÚwaitÚKeyboardInterruptÚkillÚ
subprocessÚTimeoutExpiredÚsend_signalÚsignalÚSIGINT)ÚprÃ  Úexit_statuss      r:   Úwait_for_processrÏ  Ý  s÷   € ðØ�v‰v˜gˆvÓ&ð< 	
�‰�øô; ò ð —f‘f Q�fÓ'ˆØÐ"ØÑð0 	
�‰�ð- �F‰FŒHØÜ×$Ñ$ò à	�‰”f—m‘mÔ$Øˆð	ØŸ&™&¨˜&Ó+‰Køô ×(Ñ(ò 	Ùð	úàÐ"ØÑð 	
�‰�ð �F‰FŒHØðØ	�‰ŒØûð 	
�‰�úsR   ‚$ ¤C?ÁD ÁAC?ÂB-Â,C?Â-CÃ C?ÃCÃC?Ã
D Ã#C?Ã?D ÄDc                 óø   — t         j                  j                  «        t         j                  j                  «        t	        | t
        «      rJ d«       ‚t        j                  | d||||¬«      }t        ||¬«      S )Nz4Command to shell should be a list or tuple of tokensT)Úuniversal_newlinesÚcwdÚenvÚstdoutÚstderrrÂ  )	ÚsysrÔ  ÚflushrÕ  rº   ri   rÈ  ÚPopenrÏ  )ÚcommandrÒ  rÓ  rÔ  rÕ  rÃ  rÍ  s          r:   ÚshellrÚ  ÿ  sc   € Ü‡J�J×ÑÔÜ‡J�J×ÑÔô ˜'¤3Ô'Ð_Ð)_Ó_Ð'Ü×Ñ˜°T¸sÈÐTZÐciÔj€AÜ˜A wÔ/Ð/r;   c           
      óX  — |dk\  s
J d|› �«       ‚	 t        | |||||¬«      }|dk(  s|dk(  r||fS t        d|› d|› d�|d¬«       t	        | ||||||dz
  d¬«      S # t        j                  $ r; |dk(  rt        d	|d
z  › d�|d¬«       d|fcY S t        d	|d
z  › d|› d�|d¬«       Y Œcw xY w)Nr   z9Expecting non negative number for number of retries, got )rÒ  rÓ  rÔ  rÕ  rÃ  zGot exit code z, retrying (retries left=ú)T)Úfiler×  zCommand took >é<   zmin, returning 124é|   zmin, retrying (retries left=r_  )rÒ  rÓ  rÔ  rÕ  rÃ  ÚretriesÚ	was_rerun)rÚ  ÚprintrÈ  rÉ  Úretry_shell)	rÙ  rÒ  rÓ  rÔ  rÕ  rÃ  rà  rá  Ú	exit_codes	            r:   rã  rã    s  € ð 	�1ŠðMà	BÀ7À)ÐLóMØð
ÜØ˜ #¨f¸VÈWô
ˆ	ð ˜Š>˜W¨š\Ø˜iÐ'Ð'ÜØ˜Y˜KÐ'@ÀÀ	ÈÐKØØõ	
ô$ ØØØØØØØ˜!‘Øô	ð 	øô ×$Ñ$ò 
Ø�aŠ<ÜØ  ¨B¡ Ð/AÐBØØõð
 ˜	�>Ò!ÜØ˜W¨™]˜OÐ+GÈÀyÐPQÐRØØ÷	
ð
ús   ‘A °A Á1B)ÂB)Â(B)c                 óœ   — t        | t        j                  «      r| gS g }| D ]'  }t        |«       |j	                  t        |«      «       Œ) |S r2   )rº   r»   r¼   râ  ÚextendÚdiscover_test_cases_recursively)Úsuite_or_caseÚrcÚelements      r:   rç  rç  @  sN   € Ü�-¤×!2Ñ!2Ô3ØˆÐØ	€BØ ò <ˆÜˆgŒØ
�	‰	Ô1°'Ó:Õ;ð<ð €Ir;   c                 óŠ   — | D �cg c]3  }dj                  |j                  «       j                  d«      dd  «      ‘Œ5 c}S c c}w )Nr´   éþÿÿÿ)r`   r½   r¾   )Ú
test_casesÚcases     r:   Úget_test_namesrï  I  s5   € Ø<FÖG°DˆC�H‰H�T—W‘W“Y—_‘_ SÓ)¨"¨#Ð.Õ/ÒGÐGùÒGs   …8A c                  óž   — t        j                  «       j                  t        «      } t	        | «      }t        |«      D ]  }t        |«       Œ y r2   )r»   Ú
TestLoaderÚloadTestsFromModuleÚ__main__rç  rï  râ  )Úsuiterí  rN   s      r:   Ú_print_test_namesrõ  L  s@   € Ü×ÑÓ!×5Ñ5´hÓ?€EÜ0°Ó7€JÜ˜zÓ*ò ˆÜˆd�ñr;   c                 óJ   — t        |«      D �cg c]
  }| |d |…   ‘Œ c}S c c}w r2   ©Úrange)ÚlstÚnchunksrÙ   s      r:   Ú
chunk_listrû  R  s$   € Ü%*¨7£^Ö4 ˆC��
�7�
‹OÒ4Ð4ùÒ4s   Ž c                 ó²   — | j                  t        «      r| t        t        «      dz   d  } t        j                  dd| «      }t        j                  dd|«      S )Nr_  z.py$r“   ú/r´   )Ú
startswithÚCI_TEST_PREFIXrb  Úrerg  )r�   Ústrip_pys     r:   Úsanitize_test_filenamer  V  sL   € à×Ñœ>Ô*ØœC¤Ó/°!Ñ3Ð4Ð5ˆÜ�v‰v�g˜r 8Ó,€HÜ�6‰6�#�t˜XÓ&Ð&r;   c                 óº  — d}| D ]Ó  }|}t        |t        j                  «      rXt        |j                  «      dkD  r|j                  d   nd }|�+t        |t        j                  «      r|xr t        |«      c S |}|€Œz|j                  «       j                  dd«      d   j                  d«      d   }t        |t        «      rŒÀd}t        |› d|› �«       d}ŒÕ |S )NTr   r´   r_  z`This test class should extend from torch.testing._internal.common_utils.TestCase but it doesn't.z - failed. F)
rº   r»   Ú	TestSuiterb  Ú_testsÚlint_test_case_extensionr½   r¾   r¼   râ  )rô  ÚsucceedÚtest_case_or_suiteÚ	test_caseÚ
first_testÚ
test_classÚerrs          r:   r  r  ]  sâ   € Ø€GØ#ò  ÐØ&ˆ	ÜÐ(¬(×*<Ñ*<Ô=Ü9<Ð=O×=VÑ=VÓ9WÐZ[Ò9[Ð+×2Ñ2°1Ò5ÐaeˆJØÐ%¬*°ZÄ×ASÑASÔ*TØÒOÔ#;Ð<NÓ#OÒOØ"ˆIàÑ Ø"Ÿ™›×-Ñ-¨c°1Ó5°aÑ8×>Ñ>¸sÓCÀAÑFˆJÜ˜i¬Õ2Øx�Ü˜˜ K°¨uÐ5Ô6Ø‘ð ð €Nr;   c                 ó’  — t        | d   «      }t        t        z   }t        j                  j                  ||«      }|rr|j                  dd«      }t        j                  |d¬«       t        j                  j                  ||› dt        j                  d«      j                  «       › d�«      }|S t        j                  |d¬«       |S )	Nr   r   zpython-pytestT)Úexist_okú-é   z.xml)
r  ÚTEST_SAVE_XMLÚ
LOG_SUFFIXrK   rˆ   r`   rL  ÚmakedirsÚurandomÚhex)r¸  ÚpytestÚtest_filenameÚtest_report_paths       r:   Úget_report_pathr  p  s©   € Ü*¨4°©7Ó3€MÜ$¤zÑ1ÐÜ—w‘w—|‘|Ð$4°mÓDÐÙØ+×3Ñ3Ð4EÀÓWÐÜ
�‰Ð$¨tÕ4ÜŸ7™7Ÿ<™<Ð(8¸]¸OÈ1ÌRÏZÉZÐXYË]×M^ÑM^ÓM`ÐLaÐaeÐ:fÓgÐØÐÜ‡K�KÐ ¨4Õ0ØÐr;   Úxml_filec                 ó¦  — dd l mc m} |j                  | «      }|j	                  d«      D ]’  }|j
                  j                  d«      }|€Œ!t        j                  d|«      }|€Œ:|j                  d«      }|j                  d«      j                  dd«      }|j                  d|«       |j                  d|› d�«       Œ” |j                  | «       y )	Nr   ÚtestcaseÚ	classnamez.^(test\.)?(?P<file>.*)\.(?P<classname>[^\.]*)$rÝ  r´   rý  ú.py)Úxml.etree.ElementTreeÚetreeÚElementTreeÚparseÚiterÚattribr¢  r   ÚsearchÚgrouprL  r  Úwrite)r  ÚETÚtreer  Úfull_classnameÚregex_resultr  rÝ  s           r:   Úsanitize_pytest_xmlr,  }  sÅ   € ÷ 'Ð&Ø�8‰8�HÓ€DØ—I‘I˜jÓ)ò +ˆØ!Ÿ™×,Ñ,¨[Ó9ˆØÐ!Øä—y‘yÐ!RÐTbÓcˆØÐØØ ×&Ñ& {Ó3ˆ	Ø×!Ñ! &Ó)×1Ñ1°#°sÓ;ˆØ�‰�[ )Ô,Ø�‰�V ˜v S˜\Õ*ð+ð 	‡J�JˆxÕr;   r¸  c                 óª   —  G d„ d«      } |«       }dd l } |j                  | D �cg c]
  }|dk7  sŒ	|‘Œ c}g d¢z   |g¬«       |j                  S c c}w )Nc                   ó   — e Zd Zdd„Zd„ Zy)ú2get_pytest_test_cases.<locals>.TestCollectorPluginNc                 ó   — g | _         y r2   )Útestsrå   s    r:   rã   z;get_pytest_test_cases.<locals>.TestCollectorPlugin.__init__“  s	   € Ø$&ˆD�Jr;   c                 ó¢   — |j                   D ]@  }| j                  j                  |j                  j	                  |j
                  «      «       ŒB y r2   )ra   r1  ÚappendÚconfigÚcwd_relative_nodeidÚnodeid)r³   ÚsessionÚitems      r:   Úpytest_collection_finishzKget_pytest_test_cases.<locals>.TestCollectorPlugin.pytest_collection_finish–  s<   € ØŸ™ò S�Ø—
‘
×!Ñ! '§.¡.×"DÑ"DÀTÇ[Á[Ó"QÕRñSr;   ©r\   N)rc   rd   re   rã   r9  rB   r;   r:   ÚTestCollectorPluginr/  ’  s   „ ó	'ó	Sr;   r;  r   z-vv)z--collect-onlyz-qqú--use-main-module)Úplugins)r  r¹  r1  )r¸  r;  Útest_collector_pluginr  Úargs        r:   Úget_pytest_test_casesr@  ‘  s]   € ÷Sñ Sñ 0Ó1ÐÛØ€F‡K�KØÖ-�  u£ŠÒ-Ò0^Ñ^Ø&Ð'õð !×&Ñ&Ð&ùò 	.s
   ¦
A±Ac                 óÌ  — t         r„t        j                  j                  t         «      rEt	        t         «      5 }t        j                  |«      at         t        j                  d<   d d d «       nt        j                  dt         › �«       t        r„t        j                  j                  t        «      rEt	        t        «      5 }t        j                  |«      at        t        j                  d<   d d d «       nt        j                  dt        › �«       t        rt        «        y t        j                   «       j#                  t$        «      }t'        |«      st)        j*                  d«       t,        r| d   gt.        rg d¢ndg¢| dd  ¢} t0        �rìg }t        r|j3                  d	«       t         r|j3                  d
«       t.        r|j3                  d«       t4        r|j3                  d«       t6        r|dt8        j:                  gz  }t.        rt=        | «      n9t?        |«      D �cg c]%  }|jA                  «       jC                  dd«      d   ‘Œ' c}}g }|D �]  }t(        jD                  g| d   gz   |z   | dd  z   t.        rdgng z   |gz   }djG                  |«      }	t4        rd nd}
tI        ||
t4        rdnd¬«      \  }}|dk7  rvd|v rPt        j                  jK                  dd«      }t        j                  jK                  dd«      }d|› d|› �}|dz   |	z   }	tM        d|› d|	› �«       |j3                  |«       tO        |«      dk(  rŒóJ djQ                  tO        |«      djG                  |«      «      «       ‚ y tR        dkD  r¨t?        |«      }tU        tW        |«      tR        «      }g }tY        tR        «      D ]L  }t(        jD                  g| z   d|dz   › �gz   ||   z   }|j3                  t[        j\                  |d¬«      «       ŒN d }|D ]  }|t_        |«      dk7  z  }Œ |rJ d!«       ‚y t.        r«| d"gz   }d}t6        r.ta        d¬#«      }tM        d$|› �«       |j3                  d%|› �«       tb        rtb        |dd  z   }dd l2}d&t        j                  d'<    |jf                  |¬(«      }t6        rti        |«       t)        j*                  |d)k(  rd«       y |«       y t6        �gdd l5}dd*l6m7}  G d+„ d,|«      }ta        «       }d-| v xs d.| v }|rtM        d$|› �«       t        jf                  | |jq                  ||rd/nd|¬0«      ¬1«       y tr        dkD  rZtY        tr        «      D ]G  }t        jf                  d | ¬2«      jt                  jw                  «       rŒ3t)        j*                  d3«       ŒI y t        jf                  | ¬4«       y # 1 sw Y   �ŒFxY w# 1 sw Y   �ŒÉxY wc c}w )5Nr’   z'slow test file provided but not found: r”   z+disabled test file provided but not found: r_  r   )rµ  z	--tb=longz--color=yesz--localsr²  r±  r¬  r³  r­  r´   r´  r^   i„  )rÃ  rà  ÚTestDistBackendWithSpawnÚBACKENDr“   Ú
WORLD_SIZEzBACKEND=z WORLD_SIZE=z#Test exited with non-zero exitcode z. Command to reproduce: z{} unit test(s) failed:
	{}z
	z--log-suffix=-shard-T)rÑ  FzSome test shards have failedr<  )r  zTest results will be stored in z--junit-xml-reruns=rA   ÚNO_COLOR)r8   rÄ  )Ú_XMLTestResultc                   ó8   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zdˆ fd„Zˆ xZS )ú'run_tests.<locals>.XMLTestResultVerboseaZ  
            Adding verbosity to test outputs:
            by default test summary prints 'skip',
            but we want to also print the skip reason.
            GH issue: https://github.com/pytorch/pytorch/issues/69014

            This works with unittest_xml_reporting<=3.2.0,>=2.0.0
            (3.2.0 is latest at the moment)
            c                 ó$   •— t        ‰| �  |i |¤Ž y r2   )Úsuperrã   )r³   r8   r9   Ú	__class__s      €r:   rã   z0run_tests.<locals>.XMLTestResultVerbose.__init__#  s   ø€ Ü‘Ñ  $Ð1¨&Ó1r;   c                 óÆ   •— t         ‰| �  ||«       | j                  j                  D ]7  }t	        |j
                  t        «      sŒ|j
                  dk(  sŒ.d|› �|_        Œ9 y )NÚskipzskip: )rJ  ÚaddSkipÚcallbackÚ__closure__rº   Úcell_contentsri   )r³   rþ   ÚreasonÚcrK  s       €r:   rN  z/run_tests.<locals>.XMLTestResultVerbose.addSkip&  sS   ø€ Ü‘‘  fÔ-ØŸ™×2Ñ2ò <�AÜ! !§/¡/´3Õ7¸A¿O¹OÈvÓ<Uð -3°6°(Ð*;˜�ñ	<r;   c                 óZ   •— t         ‰| �  «        | j                  d| j                  «       y )NÚXPASS)rJ  ÚprintErrorsÚprintErrorListÚunexpectedSuccesses)r³   rK  s    €r:   rV  z3run_tests.<locals>.XMLTestResultVerbose.printErrors.  s$   ø€ Ü‘Ñ#Ô%Ø×#Ñ# G¨T×-EÑ-EÕFr;   r:  )rc   rd   re   r  rã   rN  rV  Ú__classcell__©rK  s   @r:   ÚXMLTestResultVerboserH    s   ø„ ñô2ô<÷Gñ Gr;   r[  z	--verbosez-vrµ   )ÚoutputÚ	verbosityÚresultclass)r¸  Ú
testRunner)Úexitr¸  éÿÿÿÿr·  )<r’   rK   rˆ   ÚexistsrŠ   r‹   rŒ   Úslow_tests_dictr¡  ÚwarningsÚwarnr”   Údisabled_tests_dictÚTEST_DISCOVERrõ  r»   rñ  rò  ró  r  rÖ  r`  Ú
SHOWLOCALSÚ
USE_PYTESTÚTEST_IN_SUBPROCESSr3  ÚRERUN_DISABLED_TESTSr  r8   Úsave_xmlr@  rç  r½   r¾   Ú
executabler`   rã  r¢  râ  rb  r  ÚRUN_PARALLELrû  rï  rø  rÈ  rØ  rÏ  r  ÚPYTEST_SINGLE_TESTr  r¹  r,  Ú	xmlrunnerÚxmlrunner.resultrF  ÚXMLTestRunnerÚREPEAT_COUNTÚresultÚwasSuccessful)r¸  r�   rô  Ú
other_argsrî  rí  Úfailed_testsÚtest_case_full_nameÚcmdÚ
string_cmdrÃ  Úexitcoderp   ÚbackendÚ
world_sizeÚ
env_prefixÚtest_batchesÚ	processesrÙ   rÙ  ÚfailedrÍ  Úpytest_argsr  r  rä  rp  rF  r[  Úverboses                                 r:   Ú	run_testsr„  £  s�  € åÜ�7‰7�>‰>œ/Ô*Ü”oÓ&ð @¨"ä"&§)¡)¨B£-�ä0?”—
‘
Ð,Ñ-÷	@ð @ô �M‰MÐCÄOÐCTÐUÔVÝÜ�7‰7�>‰>Ô-Ô.ÜÔ)Ó*ð H¨bä&*§i¡i°£mÐ#Ü4G”—
‘
Ð0Ñ1÷Hð Hô
 �M‰MÐGÔH[ÐG\Ð]Ô^åÜÔØô ×ÑÓ!×5Ñ5´hÓ?€EÜ# EÔ*Ü�‰�Œåà�‰Gð
å>HÓ:ÈzÈlð
ð �!�"ˆXð
ˆö Øˆ
ÝØ×ÑÐ7Ô8ÝØ×ÑÐ3Ô4ÝØ×Ñ˜nÔ-ÝØ×ÑÐ6Ô7ÝØ˜<¬¯©Ð7Ñ7ˆJõ ,6Ô! $Ô'Ü4SÐTYÓ4ZÖ[¨DˆT�W‰W‹Y�_‰_˜S !Ó$ QÓ'Ò[ð 	ð
 ˆà#-ó 	>Ðô —‘Ð  D¨¡G 9Ñ,¨zÑ9¸DÀÀ¸HÑDÝ-7Ð(Ñ)¸RñAà$Ð%ñ&ð ð
 Ÿ™ #›ˆJå2‘d¸ˆGä% c°7ÕI]ÁAÐcdÔe‰KˆH�aà˜1Š}à-Ð1DÑDÜ Ÿj™jŸn™n¨Y¸Ó;�GÜ!#§¡§¡°¸bÓ!A�JØ#+¨G¨9°LÀÀÐ!M�JØ!+¨cÑ!1°JÑ!>�JäÐ;¸H¸:ÐE]Ð^hÐ]iÐjÔkØ×#Ñ#Ð$7Ô8ä�|Ó$¨Ó)ð >Ð+J×+QÑ+QÜ�LÓ! 6§;¡;¨|Ó#<ó,>ó >Ð)ñ1	>ô6 
˜Ò	Ü4°UÓ;ˆ
Ü!¤.°Ó"<¼lÓKˆØˆ	Ü”|Ó$ò 	QˆAÜ—~‘~Ð&¨Ñ-Ð3GÈÈAÉÀwÐ1OÐ0PÑPÐS_Ð`aÑSbÑbˆGØ×ÑœZ×-Ñ-¨gÈ$ÔOÕPð	Qð ˆØò 	/ˆAØÔ& qÓ)¨QÑ.Ñ.‰Fð	/áÐ9Ð9Ó9ˆz�6Ý	ØÐ1Ð2Ñ2ˆØÐÝÜ.°dÔ;ÐÜÐ3Ð4DÐ3EÐFÔGØ×ÑÐ!4Ð5EÐ4FÐGÔHÝÜ,¨{¸1¸2¨Ñ>ˆKãØ!$Œ�
‰
�:ÑØ�F—K‘K [Ô1ˆ	ÝÜÐ 0Ô1ô 	�‰�i 1’n�Õ4¨)Õ4Ü	Ð	"ãÝ3ô	G >ô 	Gô0 +Ó,ÐØ Ð%Ò5¨°¨ˆÙÜÐ3Ð4DÐ3EÐFÔGÜ�‰˜4¨I×,CÑ,CØ#Ù"‘a¨Ø,ð -Dó -.ö 	/ô 
˜Ò	Ü”|Ó$ò 	ˆAÜ—=‘= e°$Ô7×>Ñ>×LÑLÕNÜ—‘˜•ñ	ô 	�‰˜4Ö ÷o@ñ @ú÷Hñ HüòL \s   ¹-WÃ-WÈ)*W!×W×WÚlinuxÚdarwinÚppc64le)Úx86_64Úi386)Úarm64Úaarch64Ús390xc                  óœ   — t         j                  dk7  ryt        dd¬«      5 } | j                  «       }d d d «       d|v S # 1 sw Y   dv S xY w)Nr…  Fz/proc/cpuinfoÚascii)ÚencodingÚvnni)rÖ  r¢   rŠ   Úread)ÚfÚliness     r:   Úis_avx512_vnni_supportedr”  H  sL   € Ü
‡|�|�wÒØÜ	ˆo¨Ô	0ð °AØ—‘“ˆ÷à�Uˆ?Ð÷à�Uˆ?Ðús	   ¢?¿Ac               /   ó0  K  — d|v r|d   durt        d«      ‚d|d<   t        j                  | i |¤Ž}	 |j                  «        |j                  –— t        j                  |j                  «       y # t        j                  |j                  «       w xY w­w)NÚdeleteFzAonly TemporaryFileName with delete=False is supported on Windows.)ÚUserWarningÚtempfileÚNamedTemporaryFileÚcloserN   rK   Úunlink©r8   r9   r’  s      r:   ÚTemporaryFileNamer�  R  s   è ø€ ð
 �vÑØ�hÑ uÑ,Ü!Ð"eÓfÐfà$ˆF�8ÑÜ×'Ñ'¨Ð8°Ñ8ˆð	Ø�G‰GŒIØ—&‘&ŠLä�I‰I�a—f‘fÕøŒB�I‰I�a—f‘fÕüs   ‚1B´A2 Á BÁ2!BÂBc               /   ó|   K  — t        j                  | i |¤Ž5 }|j                  –— d d d «       y # 1 sw Y   y xY w­wr2   )r˜  r™  rN   rœ  s      r:   r�  r�  c  s8   è ø€ ä×(Ñ(¨$Ð9°&Ñ9ð 	¸QØ—&‘&ŠL÷	÷ 	ñ 	üs   ‚<˜0§	<°9µ<c              #   ó    K  — 	 t        j                  | ¬«      }|–— t        j                  |«       y # t        j                  «       w xY w­w©N)Úsuffix)r˜  ÚmkdtempÚshutilÚrmtree)r¡  Údir_names     r:   ÚTemporaryDirectoryNamer¦  i  s8   è ø€ ð	$Ü×'Ñ'¨vÔ6ˆHØŠNä�M‰M˜(Õ#øŒF�M‰M˜(Õ#üs   ‚A„4 žA´AÁAc              #   ój   K  — t        j                  | ¬«      5 }|–— d d d «       y # 1 sw Y   y xY w­wr   )r˜  ÚTemporaryDirectory)r¡  Úds     r:   r¦  r¦  s  s/   è ø€ ä×(Ñ(°Ô7ð 	¸1ØŠG÷	÷ 	ñ 	üs   ‚3™'ž	3§0¬3c                  ó�   — t         j                  j                  «       } t        t         | d «      }t        |dd «      x}xr  |«       S )NÚis_available)r3   r‚  Ú_get_privateuse1_backend_namer¿   )Úprivateuse1_backend_nameÚprivateuse1_backend_moduler«  s      r:   Ú is_privateuse1_backend_availabler¯  y  sD   € Ü$Ÿx™x×EÑEÓGÐÜ!(¬Ð0HÈ$Ó!OÐÜ#Ð$>ÀÐPTÓUÐUˆLÒiÑ[gÓ[iÐir;   ré   ÚnumpyÚfairseqÚscipyr´   rµ   ra  ÚhpuÚnumbaÚtransformersÚdillÚlibrosaÚ
opt_einsumÚz3rØ   c                 óD   — t        | «      dk7  r| j                  d«      S g S )Nr   r=  )rb  r¾   rÛ   s    r:   Úsplit_if_not_emptyr»  ˜  s   € Ü˜q›6 Qš;ˆ1�7‰7�3‹<Ð.¨BÐ.r;   Ú!PYTORCH_TESTING_DEVICE_EXCEPT_FORzno dillÚNO_MULTIPROCESSING_SPAWNÚTEST_WITH_ASANÚPYTORCH_TEST_WITH_ASAN)rO   ÚTEST_WITH_DEV_DBG_ASANÚPYTORCH_TEST_WITH_DEV_DBG_ASANÚTEST_WITH_TSANÚPYTORCH_TEST_WITH_TSANÚTEST_WITH_UBSANÚPYTORCH_TEST_WITH_UBSANÚTEST_WITH_ROCMÚPYTORCH_TEST_WITH_ROCMÚPYTORCH_MIOPEN_SUGGEST_NHWCr@   rA   ÚTEST_WITH_SLOWÚPYTORCH_TEST_WITH_SLOWÚTEST_SKIP_FASTÚPYTORCH_TEST_SKIP_FASTÚTEST_WITH_CROSSREFÚPYTORCH_TEST_WITH_CROSSREFÚTEST_SKIP_CUDAGRAPHÚPYTORCH_TEST_SKIP_CUDAGRAPHg333333@é   c                 ó®   — | €yd| v r| j                  d«      n| g} t        | D �cg c]  }|j                  d«      ‘Œ c}«      }||v r	||   dk(  ryyc c}w )NFr=  ú:ÚTrueT)r¾   rf   )Úallocator_configrp   ÚoptionÚvarÚmappings        r:   Úallocator_option_enabled_fnrÙ  ß  sh   € ØÐØØ69Ð=MÑ6MÐ'×-Ñ-¨cÔ2ÐTdÐSeÐÜÐ.>Ö? s�C—I‘I˜c•NÒ?Ó@€Gà�Ñ˜W V™_°Ò6Øàùò @s   ¥AÚEXPANDABLE_SEGMENTSÚPYTORCH_CUDA_ALLOC_CONFÚexpandable_segments)rÖ  )rO   rQ   ÚNUM_PARALLEL_PROCSÚ2i   @g333333ë?zRequires CUDAc                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  óL   •— t         rt        j                  d«      ‚ ‰| i |¤Ž y )Nz$test doesn't currently with crossref)rÍ  r»   ÚSkipTestr«   s     €r:   r­   zskipIfCrossRef.<locals>.wrapperù  s%   ø€ åÜ×#Ñ#Ð$JÓKÐKá�Ð˜Ór;   ©r   r°   s   ` r:   ÚskipIfCrossRefrã  ø  ó    ø€ Ü
ˆ2ƒYó ó ð ð
 €Nr;   c                   ó   — e Zd Zdd„Zy)ÚCrossRefModeNc                 ó"   — |xs i } ||i |¤Ž}|S r2   rB   )r³   ÚfuncÚtypesr8   r9   Úrs         r:   Ú__torch_function__zCrossRefMode.__torch_function__  s   € Ø’˜2ˆÙ�$Ð!˜&Ñ!ˆØˆr;   )rB   N)rc   rd   re   rë  rB   r;   r:   ræ  ræ    s   „ ôr;   ræ  ÚTEST_WITH_TORCHINDUCTORÚPYTORCH_TEST_WITH_INDUCTORÚTEST_WITH_AOT_EAGERÚPYTORCH_TEST_WITH_AOT_EAGERÚTEST_WITH_TORCHDYNAMOÚPYTORCH_TEST_WITH_DYNAMOc                  ó   — t         xs t        S r2   )rì  rî  rB   r;   r:   rE   rE     s   € Ô1ÒHÔ5H€ r;   )rO   rR   é@   c                 óª   — t         r1t        j                  d   dk(  r t        j                  d«      | «      S t         r| S t        j
                  | «      S )Nr   rÞ  z'skipping numpy 2.0+ dynamo-wrapped test)rð  ÚnpÚ__version__r»   rM  ÚexpectedFailure©rè  s    r:   ÚxpassIfTorchDynamo_nprù  %  sD   € å¤§¡°Ñ!2°cÒ!9ØGŒx�}‰}ÐFÓGÈÓMÐMÝ(ˆ4ÐL¬h×.FÑ.FÀtÓ.LÐLr;   c                 ó<   — t         rt        j                  | «      S | S r2   )ÚTEST_ACLr»   r÷  rø  s    r:   Ú
xfailIfACLrü  ,  ó   € Ý-5Œ8×#Ñ# DÓ)Ð?¸4Ð?r;   c                 ó<   — t         rt        j                  | «      S | S r2   )rð  r»   r÷  rø  s    r:   ÚxfailIfTorchDynamorÿ  0  s   € Ý-BŒ8×#Ñ# DÓ)ÐLÈÐLr;   c                 óV   — t         j                  dk\  rt        j                  | «      S | S )N)r|  rÑ  )rÖ  Úversion_infor»   r÷  rø  s    r:   ÚxfailIfPy312Plusr  4  s%   € Ü-0×-=Ñ-=ÀÒ-HŒ8×#Ñ# DÓ)ÐRÈdÐRr;   c                 óT   — t         r!t        st        st        j                  | «      S | S r2   )ÚIS_LINUXrÆ  ry   r»   r÷  rø  s    r:   ÚxfailIfLinuxr  8  s    € Ý-5½nÕU^Œ8×#Ñ# DÓ)ÐhÐdhÐhr;   c                 ó@   ‡ — t        ‰ t        «      sJ d«       ‚ˆ fd„}|S )zQ
    Usage:
    @skipIfTorchDynamo(msg)
    def test_blah(self):
        ...
    z*Are you using skipIfTorchDynamo correctly?c                 ó¢   •‡ — t        ‰ t        «      st        ‰ «      ˆ ˆfd„«       }|S t        ‰ t        «      sJ ‚t        rd‰ _        ‰‰ _        ‰ S )Nc                  óL   •— t         rt        j                  ‰«      ‚ ‰| i |¤Ž y r2   )rð  r»   rá  ©r8   r9   r¬   Úmsgs     €€r:   r­   z5skipIfTorchDynamo.<locals>.decorator.<locals>.wrapperG  s$   ø€ å(Ü"×+Ñ+¨CÓ0Ð0á˜Ð' Ó'r;   T)rº   rI  r   rð  Ú__unittest_skip__Ú__unittest_skip_why__©r¬   r­   r
  s   ` €r:   r0  z$skipIfTorchDynamo.<locals>.decoratorE  sR   ù€ Ü˜"œdÔ#Ü�2‹Yô(ó ð(ð
 ˆNä˜"œdÔ#Ð#Ð#Ý Ø#'ˆBÔ Ø'*ˆBÔ$àˆ	r;   )rº   ri   ©r
  r0  s   ` r:   ÚskipIfTorchDynamor  <  s(   ø€ ô �cœ3ÔÐMÐ!MÓMÐôð" Ðr;   z.test doesn't currently work with torchinductorc                 ó   ‡ ‡— ˆˆ fd„}|S )Nc                 óœ   •‡ — t        ‰ t        «      st        ‰ «      ˆˆ ˆfd„«       }|S t        ‰ t        «      sJ ‚‰rd‰ _        ‰‰ _        ‰ S )Nc                  óD   •— ‰rt        j                  ‰«      ‚ ‰| i |¤Ž y r2   ©r»   rá  ©r8   r9   Ú	conditionr¬   r
  s     €€€r:   r­   z7skipIfTorchInductor.<locals>.decorator.<locals>.wrapper\  ó$   ø€ áÜ"×+Ñ+¨CÓ0Ð0á˜Ð' Ó'r;   T©rº   rI  r   r  r  ©r¬   r­   r  r
  s   ` €€r:   r0  z&skipIfTorchInductor.<locals>.decoratorZ  sR   ù€ Ü˜"œdÔ#Ü�2‹Yõ(ó ð(ð
 ˆNä˜"œdÔ#Ð#Ð#ÙØ#'ˆBÔ Ø'*ˆBÔ$àˆ	r;   rB   ©r
  r  r0  s   `` r:   ÚskipIfTorchInductorr  X  s   ù€ õð" Ðr;   c                 ó   ‡ — ˆ fd„}|S )z@
    Decorator for running tests serially.  Requires pytest
    c                 óV   •— t         r!‰rt        j                  j                  | «      S | S r2   )Ú
has_pytestr  ÚmarkÚserial©r¬   r  s    €r:   r0  zserialTest.<locals>.decoratorq  s"   ø€ Ý™)Ü—;‘;×%Ñ% bÓ)Ð)Øˆ	r;   rB   )r  r0  s   ` r:   Ú
serialTestr!  m  s   ø€ ôð Ðr;   c                 ó    — d„ }| €|S  || «      S )Nc                 ó   — d| _         | S rG   )Údynamo_strict©r&  s    r:   r0  z)unMarkDynamoStrictTest.<locals>.decoratorx  s   € Ø!ˆÔØˆ
r;   rB   )r&  r0  s     r:   ÚunMarkDynamoStrictTestr&  w  s   € òð €{ØÐá˜‹~Ðr;   c                 ó&   ‡— ˆfd„}| €|S  || «      S )zÝ
    Marks the test as 'strict'. In strict mode, we reset before and after the
    test, and run without suppress errors.

    Args:
    - nopython: if we should run torch._dynamo.optimize with nopython={True/False}.
    c                 ó~   •‡— t        j                  | «      rd| _        ‰| _        | S | Št	        ‰«      ˆfd„«       }|S )NTc                  óø   •— t         j                  j                  «        t        j                  j                  dd«      5   ‰| i |¤Ž d d d «       t         j                  j                  «        y # 1 sw Y   Œ(xY w)Nú$torch._dynamo.config.suppress_errorsF)r3   Ú_dynamoÚresetr»   ÚmockÚpatchr«   s     €r:   r­   z8markDynamoStrictTest.<locals>.decorator.<locals>.wrapper’  sZ   ø€ ä�M‰M×ÑÔ!Ü—‘×$Ñ$Ð%KÈUÓSñ $Ù�DÐ#˜FÒ#÷$ä�M‰M×ÑÕ!÷$ð $ús   Á 	A0Á0A9)r¶   Úisclassr$  Údynamo_strict_nopythonr   )Úcls_or_funcr­   r¬   Únopythons     @€r:   r0  z'markDynamoStrictTest.<locals>.decoratorŠ  sG   ù€ Ü�?‰?˜;Ô'Ø(,ˆKÔ%Ø19ˆKÔ.ØÐàˆä	ˆr‹ó	"ó 
ð	"ð
 ˆr;   rB   )r1  r2  r0  s    ` r:   ÚmarkDynamoStrictTestr3  ‚  s!   ø€ ôð  ÐØÐá˜Ó%Ð%r;   c                 ó4   — t        | t        xr t        ¬«      S )N)r
  r  )r  rÆ  rì  ©r
  s    r:   ÚskipRocmIfTorchInductorr6     s   € Ü 3´.Ò2\ÔE\Ô]Ð]r;   c                 ó   ‡ — ˆ fd„}|S )Nc                 óÄ   •‡ — t        ‰ t        «      st        ‰ «      ˆ ˆfd„«       }|S t        ‰ t        «      sJ ‚t        t        j
                  k(  rd‰ _        ‰‰ _        ‰ S )Nc                  ón   •— t         t        j                  k(  rt        j                  ‰«      ‚ ‰| i |¤Ž y r2   )rŠ  r{  r}  r»   rá  r	  s     €€r:   r­   z;skipIfLegacyJitExecutor.<locals>.decorator.<locals>.wrapper¦  s/   ø€ ä!¤]×%9Ñ%9Ò9Ü"×+Ñ+¨CÓ0Ð0á˜Ð' Ó'r;   T)rº   rI  r   rŠ  r{  r}  r  r  r  s   ` €r:   r0  z*skipIfLegacyJitExecutor.<locals>.decorator¤  s]   ù€ Ü˜"œdÔ#Ü�2‹Yô(ó ð(ð
 ˆNä˜"œdÔ#Ð#Ð#Üœ]×1Ñ1Ò1Ø#'ˆBÔ Ø'*ˆBÔ$àˆ	r;   rB   r  s   ` r:   ÚskipIfLegacyJitExecutorr:  £  s   ø€ ôð$ Ðr;   r¬   .c                 óº   ‡ ‡‡‡‡— ddl mŠmŠmŠ ‰ €d„ S dt        dt
        dt        f   ddfˆˆˆfd	„Št        j                  ‰ «      dt        ddfˆ ˆfd
„«       }|S )zˆ
    Decorator function to create a dynamo test case. A function annotate with
    this decorator takes as input a unittest object.
    r   )ÚCompileCounterr,  Úoptimize_assertNc                 ó   — t        | «      S r2   )Úmake_dynamo_test©r¬   s    r:   rE   z"make_dynamo_test.<locals>.<lambda>Â  s   € Ô*¨2Ó.€ r;   r³   r¬   .r\   c                 ó~   •‡ ‡‡— dˆˆˆ fd„} ‰«       } |«         ‰«          ‰|«      |«      } |«         ‰«        y )Nc                  ó   •—  ‰ ‰fi ‰¤Ž y r2   rB   )r¬   r9   r³   s   €€€r:   Údummyz6make_dynamo_test.<locals>.standard_test.<locals>.dummyÉ  s   ø€ ÙˆtÑ�vÓr;   r:  rB   )	r³   r¬   r9   rC  ÚactualÚopt_fnr<  r=  r,  s	   ```   €€€r:   Ústandard_testz'make_dynamo_test.<locals>.standard_testÄ  s7   û€ ÷
	ñ  Ó!ˆáŒÙŒØ(‘ Ó(¨Ó/ˆÙŒÙ�r;   c                 ó   •—  ‰| ‰|¬«      S )N)r¬   r9   rB   )r³   r9   r¬   rF  s     €€r:   rÆ   z!make_dynamo_test.<locals>.test_fnÔ  s   ø€ áØØØô
ð 	
r;   )Útorch._dynamo.testingr<  r,  r=  r   r   r¯   r   )r¬   rÆ   r<  r=  r,  rF  s   ` @@@@r:   r?  r?  ¹  sq   ü€ ÷ MÑLØ	€zÙ.Ð.ðÜðä�Sœ#�XÑðð 
÷	ô  ‡_�_�RÓð
”cð 
¨õ 
ó ð
ð €Nr;   ÚPYTORCH_TEST_WITH_TVc                 óB   ‡ — t        j                  ‰ «      ˆ fd„«       }|S )Nc                  ó®   •— t         j                  j                  j                  r)dt         j                  j
                  j                  _         ‰| i |¤ŽS rG   )r3   r+  r4  Údynamic_shapesÚfxÚexperimentalÚ_configÚtranslation_validationr«   s     €r:   r­   zAdisable_translation_validation_if_dynamic_shapes.<locals>.wrapperé  s>   ø€ ä�=‰=×Ñ×.Ò.àCHŒE�H‰H×!Ñ!×)Ñ)Ô@Ù�4Ð"˜6Ñ"Ð"r;   r®   r°   s   ` r:   Ú0disable_translation_validation_if_dynamic_shapesrQ  è  s%   ø€ Ü‡_�_�RÓó#ó ð#ð
 €Nr;   ÚTEST_CUDA_MEM_LEAK_CHECKÚ PYTORCH_TEST_CUDA_MEM_LEAK_CHECKc                 óZ   — 	 t         |    S # t        $ r t         | j                     cY S w xY wr2   )Únumpy_to_torch_dtype_dictÚKeyErrorrI  ©Únp_dtypes    r:   Únumpy_to_torch_dtyperY    s0   € ð8Ü(¨Ñ2Ð2øÜò 8Ü(¨¯©Ñ7Ò7ð8ús   ‚ ‹*©*c                 ó:   — 	 t        | «       y# t        $ r Y yw xY w©NTF)rY  rV  rW  s    r:   Úhas_corresponding_torch_dtyper\    s$   € ðÜ˜XÔ&ØøÜò Ùðúó   ‚ Ž	™z3test doesn't currently work with nn module inliningc                 ó   ‡ ‡— ˆˆ fd„}|S )Nc                 óœ   •‡ — t        ‰ t        «      st        ‰ «      ˆˆ ˆfd„«       }|S t        ‰ t        «      sJ ‚‰rd‰ _        ‰‰ _        ‰ S )Nc                  óD   •— ‰rt        j                  ‰«      ‚ ‰| i |¤Ž y r2   r  r  s     €€€r:   r­   z9skipIfNNModuleInlined.<locals>.decorator.<locals>.wrapper8  r  r;   Tr  r  s   ` €€r:   r0  z(skipIfNNModuleInlined.<locals>.decorator5  sR   ù€ Ü˜"œdÔ#ä�2‹Yõ(ó ð(ð ˆNä˜"œdÔ#Ð#Ð#ÙØ#'ˆBÔ Ø'*ˆBÔ$àˆ	r;   rB   r  s   `` r:   ÚskipIfNNModuleInlinedra  1  s   ù€ õð& Ðr;   z-test doesn't currently work on the ROCm stackr5  c                ó&   ‡— ˆfd„}| r || «      S |S )Nc                 ó>   •‡ ‡— d‰› �Št        ‰ «      ˆ ˆfd„«       }|S )NzskipIfRocm: c                  óJ   •— t         rt        j                  ‰«      ‚ ‰| i |¤ŽS r2   ©rÆ  r»   rá  ©r8   r9   r¬   rR  s     €€r:   r­   z+skipIfRocm.<locals>.dec_fn.<locals>.wrapperN  s'   ø€ åÜ×'Ñ'¨Ó/Ð/á˜4Ð* 6Ñ*Ð*r;   râ  ©r¬   r­   rR  r
  s   ` @€r:   Údec_fnzskipIfRocm.<locals>.dec_fnK  s,   ú€ Ø ˜uÐ%ˆä	ˆr‹ô	+ó 
ð	+ð
 ˆr;   rB   ©rè  r
  rh  s    ` r:   Ú
skipIfRocmrj  J  ó   ø€ ô	ñ Ù�d‹|ÐØ€Mr;   Úarchc                 ó   ‡ — ˆ fd„}|S )Nc                 ó2   •‡ — t        ‰ «      ˆˆ fd„«       }|S )Nc                 óÚ   •— t         rYt        j                  j                  d«      }|j                  j                  d«      d   ‰v rd‰› �}t        j                  |«      ‚ ‰| g|¢­i |¤ŽS )Nr   rÓ  zskipIfRocm: test skipped on ©rÆ  r3   r–   Úget_device_propertiesÚgcnArchNamer¾   r»   rá  ©r³   r8   r9   ÚproprR  rl  r¬   s        €€r:   Úwrap_fnz/skipIfRocmArch.<locals>.dec_fn.<locals>.wrap_fn[  sj   ø€ åÜ—z‘z×7Ñ7¸Ó:�Ø×#Ñ#×)Ñ)¨#Ó.¨qÑ1°TÑ9Ø;¸D¸6ÐB�FÜ"×+Ñ+¨FÓ3Ð3Ù�dÐ,˜TÒ, VÑ,Ð,r;   râ  ©r¬   ru  rl  s   ` €r:   rh  zskipIfRocmArch.<locals>.dec_fnZ  ó    ù€ Ü	ˆr‹ô	-ó 
ð	-ð ˆr;   rB   ©rl  rh  s   ` r:   ÚskipIfRocmArchry  Y  ó   ø€ ô	ð €Mr;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  óL   •— t         r	 ‰| i |¤Ž y t        j                  d«      ‚)Nz+test currently only works on the ROCm stackre  r«   s     €r:   r­   zrunOnRocm.<locals>.wrapperg  s%   ø€ åÙ�Ð˜Óä×#Ñ#Ð$QÓRÐRr;   râ  r°   s   ` r:   Ú	runOnRocmr}  f  s"   ø€ Ü
ˆ2ƒYóSó ðSð
 €Nr;   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó2   •‡ — t        ‰ «      ˆˆ fd„«       }|S )Nc                 óÚ   •— t         rYt        j                  j                  d«      }|j                  j                  d«      d   ‰vrd‰› �}t        j                  |«      ‚ ‰| g|¢­i |¤ŽS )Nr   rÓ  zskipIfRocm: test only runs on rp  rs  s        €€r:   ru  z.runOnRocmArch.<locals>.dec_fn.<locals>.wrap_fnq  sj   ø€ åÜ—z‘z×7Ñ7¸Ó:�Ø×#Ñ#×)Ñ)¨#Ó.¨qÑ1¸Ñ=Ø=¸d¸VÐD�FÜ"×+Ñ+¨FÓ3Ð3Ù�dÐ,˜TÒ, VÑ,Ð,r;   râ  rv  s   ` €r:   rh  zrunOnRocmArch.<locals>.dec_fnp  rw  r;   rB   rx  s   ` r:   ÚrunOnRocmArchr�  o  rz  r;   c                 ó<   — t         rt        j                  | «      S | S r2   )ÚIS_S390Xr»   r÷  rø  s    r:   ÚxfailIfS390Xr„  |  rý  r;   z,test doesn't currently work on the XPU stackc                ó&   ‡— ˆfd„}| r || «      S |S )Nc                 ó>   •‡ ‡— d‰› �Št        ‰ «      ˆ ˆfd„«       }|S )NzskipIfXpu: c                  óJ   •— t         rt        j                  ‰«      ‚ ‰| i |¤ŽS r2   ©ÚTEST_XPUr»   rá  rf  s     €€r:   r­   z*skipIfXpu.<locals>.dec_fn.<locals>.wrapperƒ  s'   ø€ åÜ×'Ñ'¨Ó/Ð/á˜4Ð* 6Ñ*Ð*r;   râ  rg  s   ` @€r:   rh  zskipIfXpu.<locals>.dec_fn€  s,   ú€ Ø˜s˜eÐ$ˆä	ˆr‹ô	+ó 
ð	+ð
 ˆr;   rB   ri  s    ` r:   Ú	skipIfXpurŠ    rk  r;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  óL   •— t         rt        j                  d«      ‚ ‰| i |¤Ž y )Nz$test doesn't currently work with MPS)ÚTEST_MPSr»   rá  r«   s     €r:   r­   zskipIfMPS.<locals>.wrapper�  ó%   ø€ åÜ×#Ñ#Ð$JÓKÐKá�Ð˜Ór;   râ  r°   s   ` r:   Ú	skipIfMPSr�  Ž  rä  r;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  óp   •— t         r't        t        «      dk(  rt        j                  d«      ‚ ‰| i |¤Ž y )Né   z Test crashes MPSGraph on MacOS13)r�  r…   ÚMACOS_VERSIONr»   rá  r«   s     €r:   r­   z#skipIfMPSOnMacOS13.<locals>.wrapper™  s1   ø€ åœœMÓ*¨bÒ0Ü×#Ñ#Ð$FÓGÐGá�Ð˜Ór;   râ  r°   s   ` r:   ÚskipIfMPSOnMacOS13r”  ˜  rä  r;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  óL   •— t         rt        j                  d«      ‚ ‰| i |¤Ž y )Nz$test doesn't currently work with HPU)ÚTEST_HPUr»   rá  r«   s     €r:   r­   zskipIfHpu.<locals>.wrapper£  rŽ  r;   râ  r°   s   ` r:   Ú	skipIfHpur˜  ¢  rä  r;   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó2   •‡ — t        ‰ «      ˆ ˆfd„«       }|S )Nc                 ó8  •— t         rˆt        t        j                  j                  «      }|j                  d«      d   }t        d„ |j                  d«      D «       «      }|�‰�|t        ‰«      k  rd|› d‰› d�}t        j                  |«      ‚ ‰| g|¢­i |¤ŽS )Nr  r   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr2   r„   ©r£   rØ   s     r:   r¤   zMskipIfRocmVersionLessThan.<locals>.dec_fn.<locals>.wrap_fn.<locals>.<genexpr>³  s   è ø€ Ò*S°a¬3¨q¯6Ñ*Sùó   ‚r´   zROCm z is available but z	 required)	rÆ  ri   r3   ÚversionÚhipr¾   r(  r»   rá  )r³   r8   r9   Úrocm_versionÚrocm_version_tuplerR  r¬   rŸ  s         €€r:   ru  z:skipIfRocmVersionLessThan.<locals>.dec_fn.<locals>.wrap_fn®  s¢   ø€ åÜ"¤5§=¡=×#4Ñ#4Ó5�Ø+×1Ñ1°#Ó6°qÑ9�Ü%*Ñ*S¸<×;MÑ;MÈcÓ;RÔ*SÓ%SÐ"Ø%Ð-°°ÐDVÔY^Ð_fÓYgÒDgØ$Ð%7Ð$8Ð8JÈ7È)ÐS\Ð]�FÜ"×+Ñ+¨FÓ3Ð3Ù�dÐ,˜TÒ, VÑ,Ð,r;   râ  )r¬   ru  rŸ  s   ` €r:   rh  z)skipIfRocmVersionLessThan.<locals>.dec_fn­  s    ù€ Ü	ˆr‹ô	-ó 
ð	-ð ˆr;   rB   )rŸ  rh  s   ` r:   ÚskipIfRocmVersionLessThanr£  ¬  s   ø€ ôð €Mr;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  óL   •— t         st        j                  d«      ‚ ‰| i |¤Ž y )Nz:test doesn't currently work without MIOpen NHWC activation)ÚTEST_WITH_MIOPEN_SUGGEST_NHWCr»   rá  r«   s     €r:   r­   z+skipIfNotMiopenSuggestNHWC.<locals>.wrapper¼  s%   ø€ å,Ü×#Ñ#Ð$`ÓaÐaá�Ð˜Ór;   râ  r°   s   ` r:   ÚskipIfNotMiopenSuggestNHWCr§  »  rä  r;   z0test doesn't currently work on the Windows stackc                ó&   ‡— ˆfd„}| r || «      S |S )Nc                 ó>   •‡ ‡— d‰› �Št        ‰ «      ˆ ˆfd„«       }|S )NzskipIfWindows: c                  óJ   •— t         rt        j                  ‰«      ‚ ‰| i |¤ŽS r2   )Ú
IS_WINDOWSr»   rá  rf  s     €€r:   r­   z.skipIfWindows.<locals>.dec_fn.<locals>.wrapperÈ  s'   ø€ åÜ×'Ñ'¨Ó/Ð/á˜4Ð* 6Ñ*Ð*r;   râ  rg  s   ` @€r:   rh  zskipIfWindows.<locals>.dec_fnÅ  s,   ú€ Ø" 3 %Ð(ˆä	ˆr‹ô	+ó 
ð	+ð
 ˆr;   rB   ri  s    ` r:   ÚskipIfWindowsr¬  Ä  rk  r;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  ó  •— t         j                  j                  j                  «       }	  ‰| i |¤Ž t         j                  j                  j                  |«       y # t         j                  j                  j                  |«       w xY wr2   )r3   Úbackendsr–   Úpreferred_linalg_library©r8   r9   Ú_preferred_backendr¬   s      €r:   Ú_fnz.setLinalgBackendsToDefaultFinally.<locals>._fnÖ  sb   ø€ ä"Ÿ^™^×0Ñ0×IÑIÓKÐð	MÙ�Ð˜Òä�N‰N×Ñ×8Ñ8Ð9KÕLøŒE�N‰N×Ñ×8Ñ8Ð9KÕLúó   «A Á+Brâ  ©r¬   r³  s   ` r:   Ú!setLinalgBackendsToDefaultFinallyr¶  Õ  s"   ø€ Ü
ˆ2ƒYóMó ðMð €Jr;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  ó  •— t         j                  j                  j                  «       }	  ‰| i |¤Ž t         j                  j                  j                  |«       y # t         j                  j                  j                  |«       w xY wr2   )r3   r¯  r–   Úpreferred_blas_libraryr±  s      €r:   r³  z,setBlasBackendsToDefaultFinally.<locals>._fnã  sb   ø€ ä"Ÿ^™^×0Ñ0×GÑGÓIÐð	KÙ�Ð˜Òä�N‰N×Ñ×6Ñ6Ð7IÕJøŒE�N‰N×Ñ×6Ñ6Ð7IÕJúr´  râ  rµ  s   ` r:   ÚsetBlasBackendsToDefaultFinallyrº  â  s"   ø€ Ü
ˆ2ƒYóKó ðKð €Jr;   c                   ó<   — e Zd Zdddœd„Zed„ «       Zd„ Zd„ Zd„ Zy	)
ÚDeterministicGuardFT©Ú	warn_onlyÚfill_uninitialized_memoryc                ó.   — || _         || _        || _        y r2   )Údeterministicr¾  r¿  )r³   rÁ  r¾  r¿  s       r:   rã   zDeterministicGuard.__init__ð  s   € Ø*ˆÔØ"ˆŒØ)BˆÕ&r;   c                 ó¤   —  | t        j                  «       t        j                  «       t         j                  j                  j
                  ¬«      S )Nr½  )r3   Ú$are_deterministic_algorithms_enabledÚ-is_deterministic_algorithms_warn_only_enabledÚutilsrÁ  r¿  r%  s    r:   Ú_current_statez!DeterministicGuard._current_stateõ  s:   € áÜ×6Ñ6Ó8Ü×IÑIÓKÜ&+§k¡k×&?Ñ&?×&YÑ&Yô
ð 	
r;   c                 ó¬   — t        j                  | j                  | j                  ¬«       | j                  t         j
                  j                  _        y )N©r¾  )r3   Úuse_deterministic_algorithmsrÁ  r¾  r¿  rÅ  rå   s    r:   Ú_updatezDeterministicGuard._updateý  s4   € Ü×*Ñ*¨4×+=Ñ+=ÈÏÉÕXØ>B×>\Ñ>\Œ�‰×!Ñ!Õ;r;   c                 óN   — | j                  «       | _        | j                  «        y r2   )rÆ  Ú_restorerÊ  rå   s    r:   Ú	__enter__zDeterministicGuard.__enter__  s   € Ø×+Ñ+Ó-ˆŒØ�‰�r;   c                 ó8   — | j                   j                  «        y r2   )rÌ  rÊ  ©r³   Úexception_typeÚexception_valueÚ	tracebacks       r:   Ú__exit__zDeterministicGuard.__exit__  s   € Ø�‰×ÑÕr;   N)	rc   rd   re   rã   ÚclassmethodrÆ  rÊ  rÍ  rÓ  rB   r;   r:   r¼  r¼  ï  s2   „ Ø38ÐTXô Cð
 ñ
ó ð
ò]òó r;   r¼  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚAlwaysWarnTypedStorageRemovalc                 ó6   — t        |t        «      sJ ‚|| _        y r2   )rº   rn   Úalways_warn)r³   rØ  s     r:   rã   z&AlwaysWarnTypedStorageRemoval.__init__	  s   € Ü˜+¤tÔ,Ð,Ð,Ø&ˆÕr;   c                 óœ   — t         j                  j                  «       | _        t         j                  j	                  | j
                  «       y r2   )r3   ÚstorageÚ&_get_always_warn_typed_storage_removalÚalways_warn_restoreÚ&_set_always_warn_typed_storage_removalrØ  rå   s    r:   rÍ  z'AlwaysWarnTypedStorageRemoval.__enter__  s/   € Ü#(§=¡=×#WÑ#WÓ#YˆÔ Ü�‰×<Ñ<¸T×=MÑ=MÕNr;   c                 óV   — t         j                  j                  | j                  «       y r2   )r3   rÚ  rÝ  rÜ  rÏ  s       r:   rÓ  z&AlwaysWarnTypedStorageRemoval.__exit__  s   € Ü�‰×<Ñ<¸T×=UÑ=UÕVr;   N©rc   rd   re   rã   rÍ  rÓ  rB   r;   r:   rÖ  rÖ    s   „ ò'òOóWr;   rÖ  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚCudaSyncGuardc                 ó   — || _         y r2   )Úmode)r³   Úsync_debug_modes     r:   rã   zCudaSyncGuard.__init__  s	   € Ø#ˆ�	r;   c                 óœ   — t         j                  j                  «       | _        t         j                  j	                  | j
                  «       y r2   )r3   r–   Úget_sync_debug_modeÚdebug_mode_restoreÚset_sync_debug_moderã  rå   s    r:   rÍ  zCudaSyncGuard.__enter__  s-   € Ü"'§*¡*×"@Ñ"@Ó"BˆÔÜ�
‰
×&Ñ& t§y¡yÕ1r;   c                 óV   — t         j                  j                  | j                  «       y r2   )r3   r–   rè  rç  rÏ  s       r:   rÓ  zCudaSyncGuard.__exit__   s   € Ü�
‰
×&Ñ& t×'>Ñ'>Õ?r;   Nrß  rB   r;   r:   rá  rá    s   „ ò$ò2ó@r;   rá  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚSwapTensorsGuardc                 ó   — || _         y r2   )Úuse_swap_tensors)r³   rí  s     r:   rã   zSwapTensorsGuard.__init__&  s
   € Ø 0ˆÕr;   c                 ó¶   — t         j                  j                  «       | _        | j                  �*t         j                  j                  | j                  «       y y r2   )r3   Ú
__future__Ú$get_swap_module_params_on_conversionÚswap_tensors_restorerí  Ú$set_swap_module_params_on_conversionrå   s    r:   rÍ  zSwapTensorsGuard.__enter__)  sD   € Ü$)×$4Ñ$4×$YÑ$YÓ$[ˆÔ!Ø× Ñ Ð,Ü×Ñ×AÑAÀ$×BWÑBWÕXð -r;   c                 óV   — t         j                  j                  | j                  «       y r2   )r3   rï  rò  rñ  rÏ  s       r:   rÓ  zSwapTensorsGuard.__exit__.  s   € Ü×Ñ×=Ñ=¸d×>WÑ>WÕXr;   Nrß  rB   r;   r:   rë  rë  %  s   „ ò1òYó
Yr;   rë  c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  óî   •— t        t        j                  «       t        j                  «       ¬«      5   G d„ d«      } |«       5   ‰| i |¤Ž d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrÈ  c                   ó   — e Zd ZdZd„ Zd„ Zy)úHwrapDeterministicFlagAPITest.<locals>.wrapper.<locals>.CuBLASConfigGuardÚCUBLAS_WORKSPACE_CONFIGc                 óš   — t         j                  j                  | j                  «      | _        dt         j                  | j                  <   y )Nz:4096:8©rK   r¡  r¢  Úcublas_var_nameÚcublas_config_restorerå   s    r:   rÍ  zRwrapDeterministicFlagAPITest.<locals>.wrapper.<locals>.CuBLASConfigGuard.__enter__W  s1   € Ü13·±·±À×@TÑ@TÓ1U�DÔ.Ø7@”B—J‘J˜t×3Ñ3Ò4r;   c                 óú   — t         j                  j                  | j                  «      }| j                  €|�t         j                  | j                  = y y | j                  t         j                  | j                  <   y r2   rú  )r³   rÐ  rÑ  rÒ  Úcur_cublas_configs        r:   rÓ  zQwrapDeterministicFlagAPITest.<locals>.wrapper.<locals>.CuBLASConfigGuard.__exit__[  sa   € Ü(*¯
©
¯©°t×7KÑ7KÓ(LÐ%Ø×1Ñ1Ð9Ø,Ð8Ü "§
¡
¨4×+?Ñ+?Ñ @ð 9ð <@×;UÑ;UœŸ
™
 4×#7Ñ#7Ò8r;   N)rc   rd   re   rû  rÍ  rÓ  rB   r;   r:   ÚCuBLASConfigGuardr÷  T  s   „ Ø";�òAóVr;   rÿ  )r¼  r3   rÃ  rÄ  )r8   r9   rÿ  r¬   s      €r:   r­   z-wrapDeterministicFlagAPITest.<locals>.wrapperO  st   ø€ äÜ×:Ñ:Ó<Ü×MÑMÓOôQñ 	$÷Vñ Vñ #Ó$ñ $Ù�DÐ#˜FÒ#÷$÷#	$ð 	$÷"$ð $ú÷#	$ð 	$ús#   ³A+Á	AÁA+ÁA(	Á$A+Á+A4râ  r°   s   ` r:   ÚwrapDeterministicFlagAPITestr   N  s    ø€ Ü
ˆ2ƒYó$ó ð$ð( €Nr;   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó2   •‡ — t        ‰ «      ˆ ˆfd„«       }|S )Nc                  óV   •— t        ‰«      5   ‰| i |¤Ž d d d «       y # 1 sw Y   y xY wr2   )rë  )r8   r9   r¬   Úswaps     €€r:   r­   z4wrapSwapTensorsTest.<locals>.dec_fn.<locals>.wrapperm  s-   ø€ ä! $Ó'ñ $Ù�DÐ#˜FÒ#÷$÷ $ñ $ús   �	Ÿ(râ  )r¬   r­   r  s   ` €r:   rh  z#wrapSwapTensorsTest.<locals>.dec_fnl  s    ù€ Ü	ˆr‹ô	$ó 
ð	$ð ˆr;   rB   )r  rh  s   ` r:   ÚwrapSwapTensorsTestr  k  s   ø€ ôð €Mr;   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r  c                 ó0   •— t         ‰| �  «        || _        y r2   )rJ  rã   Úswap_values)r³   r  rK  s     €r:   rã   zswap.__init__v  s   ø€ Ü‰ÑÔØ&ˆÕr;   c              #   ód   K  — | j                   D ]  } t        |«      |«      d|› �i d„ f–— Œ y ­w)NÚswap_c                 ó   — g S r2   rB   r[  s    r:   rE   z(swap._parametrize_test.<locals>.<lambda>|  s   € ÐQS€ r;   )r  r  )r³   rþ   rÿ   r   r  s        r:   r  zswap._parametrize_testz  s?   è ø€ Ø×$Ñ$ò 	TˆDØ+Ô% dÓ+¨DÓ1°U¸4¸&°>À2Á|ÐSÓSñ	Tùs   ‚.0)rc   rd   re   rã   r  rY  rZ  s   @r:   r  r  u  s   ø„ ô'öTr;   r  c                 óº   ‡ ‡— t         Š‰r+	 t        j                  t        j                  ddg«      «       t        ‰ «      ˆ ˆfd„«       }|S # t
        $ r dŠY Œ#w xY w)Nrµ   Fc                  óD   •— ‰st        j                  d«      ‚ ‰| i |¤Ž y )Nz*PyTorch was compiled without numpy supportr  )r8   r9   r¬   Únumpy_supports     €€r:   r­   z+skipIfCompiledWithoutNumpy.<locals>.wrapperŠ  s%   ø€ áÜ×#Ñ#Ð$PÓQÐQá�Ð˜Ór;   )Ú
TEST_NUMPYr3   Ú
from_numpyrõ  Úarrayr  r   )r¬   r­   r  s   ` @r:   ÚskipIfCompiledWithoutNumpyr  ~  sd   ù€ ô €MÙð	"ô ×ÑœRŸX™X q¨! fÓ-Ô.ô ˆ2ƒYô ó ð ð
 €Nøô ò 	"Ø!ŠMð	"ús   Œ*A ÁAÁAc                 ó   ‡ ‡— ˆˆ fd„}|S )Nc                 ó   •—  ‰| ‰«      S r2   rB   )r³   rH  r¬   s    €€r:   Úrun_test_functionz)_test_function.<locals>.run_test_function“  s   ø€ Ù�$˜ÓÐr;   rB   )r¬   rH  r  s   `` r:   Ú_test_functionr  ’  s   ù€ õ àÐr;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  óˆ   •— t         j                  j                  j                  st	        j
                  d«      ‚ ‰| i |¤Ž y )NzIXNNPACK must be enabled for these tests. Please build with USE_XNNPACK=1.)r3   r¯  ÚxnnpackrS   r»   rá  r«   s     €r:   r­   z skipIfNoXNNPACK.<locals>.wrapper˜  s5   ø€ ä�~‰~×%Ñ%×-Ò-Ü×#Ñ#Ð$oÓpÐpá�Ð˜Ór;   râ  r°   s   ` r:   ÚskipIfNoXNNPACKr  —  rä  r;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  ót   •— t         j                  j                  st        j                  d«      ‚ ‰| i |¤Ž y )NzPyTorch compiled without Lapack)r3   r‚  Ú
has_lapackr»   rá  r«   s     €r:   r­   zskipIfNoLapack.<locals>.wrapper¡  s/   ø€ ä�x‰x×"Ò"Ü×#Ñ#Ð$EÓFÐFá�Ð˜Ór;   râ  r°   s   ` r:   ÚskipIfNoLapackr     rä  r;   c                 ó,   — t        j                  d«      S )aH  Wraps the decorator to hide the import of the `core`.

    Args:
        op_name: Check if this op is registered in `core._REGISTERED_OPERATORS`.
        message: message to fail with.

    Usage:
        @skipIfNotRegistered('MyOp', 'MyOp is not linked!')
            This will check if 'MyOp' is in the caffe2.python.core
    z"Pytorch is compiled without Caffe2)r»   rM  )Úop_nameÚmessages     r:   ÚskipIfNotRegisteredr"  ©  s   € ô �=‰=Ð=Ó>Ð>r;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  óL   •— t         st        j                  d«      ‚ ‰| i |¤Ž y )Nz'test require SciPy, but SciPy not found)Ú
TEST_SCIPYr»   rá  r«   s     €r:   r­   zskipIfNoSciPy.<locals>.wrapper·  s%   ø€ åÜ×#Ñ#Ð$MÓNÐNá�Ð˜Ór;   râ  r°   s   ` r:   ÚskipIfNoSciPyr&  ¶  rä  r;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  ób   •— dt         j                  v rt        j                  d«      ‚ ‰| i |¤ŽS )NÚPYTEST_CURRENT_TESTzdoes not work under pytest)rK   r¡  r»   rá  r«   s     €r:   Úwrappedzskip_if_pytest.<locals>.wrappedÀ  s1   ø€ à ¤B§J¡JÑ.Ü×#Ñ#Ð$@ÓAÐAÙ�4Ð"˜6Ñ"Ð"r;   râ  )r¬   r*  s   ` r:   Úskip_if_pytestr+  ¿  s    ø€ Ü
ˆ2ƒYó#ó ð#ð
 €Nr;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  óL   •— t         st        j                  d«      ‚ ‰| i |¤Ž y )Nz)test required PyTorched compiled with XPUrˆ  r«   s     €r:   r­   zskipIfNoXPU.<locals>.wrapperÉ  s%   ø€ åÜ×#Ñ#Ð$OÓPÐPá�Ð˜Ór;   râ  r°   s   ` r:   ÚskipIfNoXPUr.  È  rä  r;   c                 óL   ‡ — t        ‰ «      ˆ fd„«       }d|j                  d<   |S )Nc                  óL   •— t         st        j                  d«      ‚ ‰| i |¤Ž y )Nú<test is slow; run with PYTORCH_TEST_WITH_SLOW to enable test)rÉ  r»   rá  r«   s     €r:   r­   zslowTest.<locals>.wrapperÒ  s%   ø€ åÜ×#Ñ#Ð$bÓcÐcá�Ð˜Ór;   TÚ	slow_test)r   Ú__dict__r°   s   ` r:   ÚslowTestr4  Ñ  s0   ø€ Ü
ˆ2ƒYó ó ð ð
 %)€G×Ñ�[Ñ!Ø€Nr;   c                 ó   — | rt         S d„ S )Nc                 ó   — | S r2   rB   r@  s    r:   rE   zslowTestIf.<locals>.<lambda>Ý  s   € °€ r;   )r4  )r  s    r:   Ú
slowTestIfr7  Ü  s   € Ù Œ8Ð3¡mÐ3r;   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó2   •— t        | dd«      r‰ | _        | S )NÚ_do_cuda_memory_leak_checkT)r¿   r:  r   s    €r:   Údecz&skipCUDAMemoryLeakCheckIf.<locals>.decá  s   ø€ Ü�2Ð3°TÔ:Ø09¨MˆBÔ)Øˆ	r;   rB   ©r  r;  s   ` r:   ÚskipCUDAMemoryLeakCheckIfr=  à  ó   ø€ ôð €Jr;   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó2   •— t        | dd«      r‰ | _        | S )NÚ_do_cuda_non_default_streamT)r¿   rA  r   s    €r:   r;  z'skipCUDANonDefaultStreamIf.<locals>.decè  s   ø€ Ü�2Ð4°dÔ;Ø1:¨]ˆBÔ*Øˆ	r;   rB   r<  s   ` r:   ÚskipCUDANonDefaultStreamIfrB  ç  r>  r;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  ó’   •— t        j                  «       5  t        j                  d«        ‰| i |¤Ž d d d «       y # 1 sw Y   y xY w)NÚignore)rd  Úcatch_warningsÚsimplefilterr«   s     €r:   r­   z"suppress_warnings.<locals>.wrapperï  s?   ø€ ä×$Ñ$Ó&ñ 	 Ü×!Ñ! (Ô+Ù�Ð˜Ò÷	 ÷ 	 ñ 	 ús	   –=½Arâ  r°   s   ` r:   Úsuppress_warningsrH  î  s    ø€ Ü
ˆ2ƒYó ó ð ð €Nr;   c                 ó¨  ‡— ‰€i Št        | t        j                  «      rx| j                  sJ ‚‰j	                  | j
                  | j
                  «      }t        j                  «       5  | j                  |dd¬«      }| j                  |_        d d d «       |S t        j                  | «      r<| j                  «       j                  | j                  «       «      j                  | «      S t        | t        «      r| D �cg c]  }t        |‰«      ‘Œ c}S t        | t         «      rt!        ˆfd„| D «       «      S t#        | «      S # 1 sw Y   S xY wc c}w )Nr–   T)rF  rH  Úcopyc              3   ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr2   )Úto_gpu)r£   ÚoÚtype_maps     €r:   r¤   zto_gpu.<locals>.<genexpr>	  s   øè ø€ Ò6¨Q”V˜A˜x×(Ñ6ùs   ƒ)rº   r3   r   Úis_leafr¢  rF  Úno_gradÚtoÚrequires_gradÚ
is_storageÚnewÚresize_ÚsizeÚcopy_r  rL  r(  r   )ÚobjrN  ÚtÚresrM  s    `   r:   rL  rL  ÷  s
  ø€ ØÐØˆÜ�#”u—|‘|Ô$Ø�{Š{Ðˆ{Ø�L‰L˜Ÿ™ C§I¡IÓ.ˆÜ�]‰]‹_ñ 	2Ø—&‘&˜q¨°d�&Ó;ˆCØ #× 1Ñ 1ˆCÔ÷	2ð ˆ
Ü	×	Ñ	˜#Ô	Ø�w‰w‹y× Ñ  §¡£Ó,×2Ñ2°3Ó7Ð7Ü	�CœÔ	Ø-0Ö1¨”�q˜(Õ#Ò1Ð1Ü	�CœÔ	ÜÓ6°#Ô6Ó6Ð6ä˜‹}Ð÷	2ð ˆ
üò 2s   Á(&EÃ=EÅEc                 ó@   — t        j                  | «      j                  S r2   )r¶   Úgetfullargspecr8   rø  s    r:   Úget_function_arglistr]  	  s   € Ü×!Ñ! $Ó'×,Ñ,Ð,r;   c                 ó¤   — t        j                  | «       t        j                  | «       t        r t
        j                  j                  | «       y y r2   )r3   Úmanual_seedÚrandomrõ   r  rõ  )rõ   s    r:   rò   rò   	  s4   € Ü	×Ñ�dÔÜ
‡K�K�ÔÝÜ
�	‰	�‰�tÕð r;   c              #   óÆ   K  — t        j                  «       }t        j                  | «       	 d –— t        j                  |«       y # t        j                  |«       w xY w­wr2   )r3   Úget_default_dtypeÚset_default_dtype)rF  Úsaved_dtypes     r:   rc  rc  	  sF   è ø€ ä×)Ñ)Ó+€KÜ	×Ñ˜EÔ"ð-Ûä×Ñ Õ,øŒ×Ñ Õ,üó   ‚*A!­A ±A!ÁAÁA!c              #   óä   K  — t        j                  g «      j                  «       }t        j                  | «       	 d –— t        j                  |«       y # t        j                  |«       w xY w­wr2   )r3   ÚtensorrI  Úset_default_tensor_type)Útensor_typeÚsaved_tensor_types     r:   rh  rh  	  sR   è ø€ äŸ™ RÓ(×-Ñ-Ó/ÐÜ	×!Ñ! +Ô.ð9Ûä×%Ñ%Ð&7Õ8øŒ×%Ñ%Ð&7Õ8üs   ‚9A0¼A Á A0ÁA-Á-A0c                 óÒ   — | j                  «       dk(  rt        d«      S | j                  «       dk(  rt        | j                  d«      «      S t        d„ | j                  «       D «       Ž S )Nr   r_  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr2   r÷  )r£   rB  s     r:   r¤   ziter_indices.<locals>.<genexpr>-	  s   è ø€ Ò5 !”U˜1—XÑ5ùrž  )Údimrø  rV  r   )rg  s    r:   Úiter_indicesrn  (	  sQ   € Ø‡z�zƒ|�qÒÜ�Q‹xˆØ‡z�zƒ|�qÒÜ�V—[‘[ “^Ó$Ð$ÜÑ5 v§{¡{£}Ô5Ð6Ð6r;   c                 ó:   — 	 t        | «       y# t        $ r Y yw xY wr[  )r#  Ú	TypeError)rX  s    r:   Úis_iterablerq  0	  s#   € ðÜˆSŒ	ØøÜò Ùðúr]  c                 óÔ   — t        | t        j                  «      ry	 t        | «      dk(  r|S t	        | «      D ]  }t        |t        j                  «      rŒ y 	 y# t
        $ r Y yw xY w)z” Returns True if iterable is an iterable of tensors and False o.w.

        If the iterable is empty, the return value is :attr:`include_empty`
    Fr   T)rº   r3   r   rb  r#  rp  )ÚiterableÚinclude_emptyrY  s      r:   Úis_iterable_of_tensorsru  8	  si   € ô �(œEŸL™LÔ)Øð	Üˆx‹=˜AÒØ Ð ä�h“ò 	ˆAÜ˜a¤§¡Õ.Ùñ	ð øô ò Ùðús"   �A ­(A ÁA ÁA Á	A'Á&A'c                   ó   — e Zd Zd„ Zd„ Zy)ÚCudaNonDefaultStreamc                 óN  — t         j                  j                  «       }g | _        t	        t         j                  j                  «       «      D ]·  }| j                  j                  t         j                  j                  |«      «       t         j                  j                  |¬«      }| j                  d   j                  «        t         j                  j                  |j                  |j                  |j                  ¬«       Œ¹ t         j                  j                  |«       y )N©rH  ra  ©Ú	stream_idÚdevice_indexÚdevice_type)r3   r–   Úcurrent_deviceÚbeforeStreamsrø  Údevice_countr3  Úcurrent_streamÚStreamÚsynchronizer‚  Ú_cuda_setStreamr{  r|  r}  Ú_cuda_setDevice)r³   ÚbeforeDevicer©  ÚdeviceStreams       r:   rÍ  zCudaNonDefaultStream.__enter__P	  sØ   € ô —z‘z×0Ñ0Ó2ˆØˆÔÜ”u—z‘z×.Ñ.Ó0Ó1ò 	KˆAØ×Ñ×%Ñ%¤e§j¡j×&?Ñ&?ÀÓ&BÔCÜ Ÿ:™:×,Ñ,°AÐ,Ó6ˆLØ×Ñ˜rÑ"×.Ñ.Ô0Ü�H‰H×$Ñ$¨|×/EÑ/EØ2>×2KÑ2KØ1=×1IÑ1Ið %õ Kð		Kô 	�‰× Ñ  Õ.r;   c                 ó¤  — t         j                  j                  «       }t        t         j                  j	                  «       «      D ]i  }t         j
                  j                  | j                  |   j                  | j                  |   j                  | j                  |   j                  ¬«       Œk t         j
                  j                  |«       y )Nrz  )r3   r–   r~  rø  r€  r‚  r„  r  r{  r|  r}  r…  )r³   Ú	exec_typeÚ
exec_valuerÒ  r†  r©  s         r:   rÓ  zCudaNonDefaultStream.__exit___	  s    € ô —z‘z×0Ñ0Ó2ˆÜ”u—z‘z×.Ñ.Ó0Ó1ò 	TˆAÜ�H‰H×$Ñ$¨t×/AÑ/AÀ!Ñ/D×/NÑ/NØ26×2DÑ2DÀQÑ2G×2TÑ2TØ15×1CÑ1CÀAÑ1F×1RÑ1Rð %õ Tð	Tô 	�‰× Ñ  Õ.r;   N©rc   rd   re   rÍ  rÓ  rB   r;   r:   rw  rw  O	  s   „ ò/ó/r;   rw  c                   ó    — e Zd Zdd„Zd„ Zd„ Zy)ÚCudaMemoryLeakCheckNc                 ó^   — |€|j                  «       n|| _        || _        ddlm}  |«        y )Nr   )Úinitialize_cuda_context_rng)r½   rN   r  Ú#torch.testing._internal.common_cudar�  )r³   r  rN   r�  s       r:   rã   zCudaMemoryLeakCheck.__init__j	  s(   € Ø%) \�H—K‘K”M°tˆŒ	Ø ˆŒõ 	TÙ#Õ%r;   c                 ó|  — g | _         g | _        t        j                  j	                  «       }t        |«      D ]x  }t        j                  j                  |«      }|dkD  sŒ(t        j                  «        t        j                  j                  «        t        j                  j                  «         n t        |«      D ]|  }| j                   j                  t        j                  j                  |«      «       t        j                  j                  |«      \  }}||z
  }| j                  j                  |«       Œ~ y ©Nr   )Úcaching_allocator_beforesÚdriver_beforesr3   r–   r€  rø  Úmemory_allocatedr¨   r©   r‚  Ú_cuda_clearCublasWorkspacesrª   r3  Úmem_get_info)r³   Únum_devicesrÙ   Úcaching_allocator_mem_allocatedÚ
bytes_freeÚbytes_totalÚdriver_mem_allocateds          r:   rÍ  zCudaMemoryLeakCheck.__enter__x	  s÷   € Ø)+ˆÔ&Ø ˆÔô —j‘j×-Ñ-Ó/ˆÜ�{Ó#ò 	ˆAÜ.3¯j©j×.IÑ.IÈ!Ó.LÐ+ð /°Ó2Ü—
‘
”Ü—‘×4Ñ4Ô6Ü—
‘
×&Ñ&Ô(Ùð	ô �{Ó#ò 	=ˆAØ×*Ñ*×1Ñ1´%·*±*×2MÑ2MÈaÓ2PÔQÜ&+§j¡j×&=Ñ&=¸aÓ&@Ñ#ˆJ˜Ø#.°Ñ#;Ð Ø×Ñ×&Ñ&Ð';Õ<ñ		=r;   c                 óô  — |�y d}t         j                  j                  «       }t        |«      D ]U  }t         j                  j                  «        t         j                  j                  |«      }|| j                  |   kD  sŒSd} n |sy t        j                  «        t         j                  j                  «        t        |«      D �].  }d}t        d«      D ]}  }t         j                  j                  |«      }t         j                  j                  |«      \  }	}
|
|	z
  }d}d}|| j                  |   kD  rd}|| j                  |   kD  rd}|rŒx|rŒ{d} n |sŒ”rQsOd| j                  › d| j                  |   › d› d|› d| j                  |   › d	› d
�}t        j                  |«       Œç|sŒêsŒíd| j                  › d| j                  |   › d› d|› d| j                  |   › d	› d
�}t!        |«      ‚ y )NFTr|  zOCUDA caching allocator reports a memory leak not verified by the driver API in z)! Caching allocator allocated memory was z and is now reported as z on device z#. CUDA driver allocated memory was z and is now r´   z$CUDA driver API confirmed a leak in )r3   r–   r€  rø  r‚  r–  r•  r“  r¨   r©   rª   r—  r”  rN   rd  re  r  )r³   r‰  rŠ  rÒ  Údiscrepancy_detectedr˜  rÙ   r™  rp   rš  r›  rœ  Úcaching_allocator_discrepancyÚdriver_discrepancyr
  s                  r:   rÓ  zCudaMemoryLeakCheck.__exit__�	  sS  € àÐ Øð
  %ÐÜ—j‘j×-Ñ-Ó/ˆÜ�{Ó#ò 	ˆAä�H‰H×0Ñ0Ô2Ü.3¯j©j×.IÑ.IÈ!Ó.LÐ+à.°×1OÑ1OÐPQÑ1RÓRØ'+Ð$Ùð	ñ $Øô 	�
‰
ŒÜ�
‰
×ÑÔ ä�{Ó#ó 1	(ˆAà#'Ð ô ˜1“Xò �Ü27·*±*×2MÑ2MÈaÓ2PÐ/Ü*/¯*©*×*AÑ*AÀ!Ó*DÑ'�
˜KØ'2°ZÑ'?Ð$à05Ð-Ø%*Ð"à2°T×5SÑ5SÐTUÑ5VÒVØ48Ð1à'¨$×*=Ñ*=¸aÑ*@Ò@Ø)-Ð&â5Ò9Kà+0Ð(Ùð#ñ& (Øá,Ñ5Gð8Ø8<¿	¹	°{ð CAØAE×A_ÑA_Ð`aÑAbÐ@cð d1Ø1PÐ0Qð R$Ø$% 3ð ';Ø;?×;NÑ;NÈqÑ;QÐ:RÐR^Ð_sÐ^tÐtuðw�ô —‘˜cÕ"Ú.Ò3Eð >¸d¿i¹i¸[ð IAØAE×A_ÑA_Ð`aÑAbÐ@cð d1Ø1PÐ0Qð R$Ø$% 3ð ';Ø;?×;NÑ;NÈqÑ;QÐ:RÐR^Ð_sÐ^tÐtuð	w�ô # 3Ó'Ð'ñc1	(r;   r2   rß  rB   r;   r:   r�  r�  i	  s   „ ó&ò=ó.S(r;   r�  c              #   ób   K  — 	 d –— y # | $ r}t        j                  d|› �«      |‚d }~ww xY w­w)Nznot implemented: r  )Úexc_typeÚes     r:   Úskip_exception_typer¤  ä	  s;   è ø€ ð@ÜøØò @Ü×ÑÐ"3°A°3Ð 7Ó8¸aÐ?ûð@üs   ‚/„	 ˆ/‰,Ž'§,¬/c              #   óî  K  — 	 d –— y # t         j                  $ r ‚ t        $ rÍ}d}t        |dd «      }|�d|j                  › �}dj                  t        d |g| ¢­«      «      }t        ddt        j                  ddj                  t        d |g| ¢­«      «      i«      ¬«       d	|› d
�}t        |j                  «      dk\  r*|j                  d   › d|› �g|j                  dd  ¢­|_        ‚ d }~ww xY w­w)Nr“   Ú_tracked_inputz"PYTORCH_OPINFO_SAMPLE_INPUT_INDEX=r^   Útest_reprosÚtest_failureÚrepro)Ú	subsystemrN   Ú
parameterszE
To execute this test, run the following from the base repo dir:
    zL

This message can be suppressed by setting PYTORCH_PRINT_REPRO_ON_FAILURE=0r_  r   ú
)r»   rá  rÁ   r¿   rÊ   r`   Úfilterr   r‹   Údumpsrb  r8   )Úrepro_partsr£  Úsample_isolation_prefixrÎ   Ú	repro_strÚ	repro_msgs         r:   Úprint_repro_on_failurer³  ë	  s  è ø€ ð!ÜøÜ×Ñò ØÜò à"$ÐÜ Ð#3°TÓ:ˆØÐ$Ø(JÈ=×K^ÑK^ÐJ_Ð&`Ð#à—H‘HœV DÐ+BÐ*QÀ[Ñ*QÓRÓSˆ	äØ#ØÜ—z‘zà˜SŸX™X¤f¨TÐ4KÐ3ZÈkÑ3ZÓ&[Ó\ðóõ	
ðà€Kð KðNˆ	ô ˆq�v‰v‹;˜!ÒØŸ™ ™˜ 2 i [Ð1Ð?°A·F±F¸1¸2°JÑ?ˆAŒFØûð;üs%   ‚C5„	 ˆC5‰C2¥CC-Ã-C2Ã2C5c                  ó�   — d|v r.t         j                  j                  dk\  r|j                  d«       t        j                  | i |¤ŽS )NÚmin_satisfying_examples)r|  é8   r   )Ú
hypothesisrŸ  Ú__version_info__ÚpopÚsettingsr7   s     r:   rº  rº  
  sA   € Ø$¨Ñ.´:×3EÑ3E×3VÑ3VÐZdÒ3dØ�J‰JÐ0Ô1Ü×"Ñ" DÐ3¨FÑ3Ð3r;   Ú
pytorch_cié2   )ÚderandomizeÚsuppress_health_checkÚdatabaseÚmax_examplesr]  Údevé
   )r¾  r¿  rÀ  r]  Údebugiè  ÚPYTORCH_HYPOTHESIS_PROFILEzEFail to import hypothesis in common_utils, tests are not derandomizedrÅ   c                 ó€  — ddl m}  |«       D �cg c]  }|j                  ‘Œ }}t        «       D �cg c]  }t	        |«      t        d«      d  ‘Œ }}| j                  d«      }t        |«      dkD  rD|d   |v r=t        |«      dkD  r|d   |v rdj                  |dd «      S dj                  |dd «      S | S c c}w c c}w )Nr   )Úget_device_type_test_basesztorch.rp   ra  r_  rì  )Ú*torch.testing._internal.common_device_typerÆ  r}  r-   ri   rb  r¾   r`   )rÅ   rÆ  rØ   Údevice_suffixesÚdtÚdtype_suffixesÚtest_name_chunkss          r:   Ú remove_device_and_dtype_suffixesrÌ  <
  sÆ   € åUÙ.HÓ.JÖK¨�q—}“}ÐK€OÐKÜ8FÓ8HÖI°"”c˜"“gœc (›m˜nÒ-ÐI€NÐIà —‘ sÓ+ÐÜ
ÐÓ˜qÒ Ð%5°bÑ%9¸^Ñ%KÜÐÓ  1Ò$Ð)9¸"Ñ)=ÀÑ)PØ—8‘8Ð,¨Q¨rÐ2Ó3Ð3Ø�x‰xÐ(¨¨2Ð.Ó/Ð/ØÐùò LùÚIs
   �B6±B;rþ   c                 óD  ‡ ‡	‡
‡‡— t        ‰ j                  «      j                  d«      d   j                  d«      d   Š	t        ‰ j                  «      Šdt         fˆ	ˆˆ fd„Š
t        ˆ
fd„t        j                  «       D «       «      r>dt        ‰ ‰ j                  «      j                  d	<   t        st        j                  d
«      ‚t        �sqd}d}t        j                  «       D �]  \  }\  }} ‰
|«      sŒt         t         t"        t"        t$        t&        t(        t*        t,        t,        t.        t        dœŠt1        t3        ˆfd„|«      «      }t5        |«      dkD  rddj7                  |«      }dj7                  ‰j                  «       «      }t9        d|› d�d|› d|› d�dd|› �«       t1        t3        ˆfd„|«      «      }|g k(  st        ˆfd„|D «       «      sŒöd}d|› d|g k(  rdnd› ddj7                  |«      › d�} n |rt:        st        j                  |«      ‚|st:        rd}t        j                  |«      ‚t<        r]t?        ‰ ‰ j                  «      rFt        ‰ ‰ j                  «      j                  jA                  d	d«      st        j                  d «      ‚y y y )!NrI   r_  r´   ra  r»  c                 óÆ   •— | j                  «       }t        |«      dk  ry|d   }|d   dd j                  d«      d   }‰j                  |«      xr |‰j                  ‰fv S )Nrµ   Fr   r_  ra  r´   )r¾   rb  rþ  Ú_testMethodName)r»  Útarget_test_partsÚtarget_testnameÚtarget_classnamer  Úsanitized_testnamerþ   s       €€€r:   Úmatches_testz%check_if_enable.<locals>.matches_testN
  sv   ø€ Ø"ŸL™L›NÐÜÐ Ó! AÒ%àØ+¨AÑ.ˆØ,¨QÑ/°°"Ð5×;Ñ;¸CÓ@ÀÑDÐð ×#Ñ#Ð$4Ó5Òy¸?Èt×OcÑOcÐewÐNxÐ;xÐyr;   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr2   rB   )r£   rØ   rÔ  s     €r:   r¤   z"check_if_enable.<locals>.<genexpr>Z
  s   øè ø€ Ò
;˜q‰<˜�?Ñ
;ùó   ƒTr2  r1  Fr“   )ÚmacÚmacosÚwinÚwindowsr…  Úrocmr—   ÚasanÚdynamoÚdynamo_wrappedÚinductorÚslowc                 ó   •— | ‰vS r2   rB   ©rÍ  Úplatform_to_conditionals    €r:   rE   z!check_if_enable.<locals>.<lambda>t
  s   ø€ ¸!ÐCZÐ:Z€ r;   r   ú, zTest z# is disabled for some unrecognized zplatforms: [z]. Please edit issue z to fix the platforms zLassigned to this flaky test, changing "Platforms: ..." to a comma separated zDsubset of the following (or leave it blank to match all platforms): c                 ó   •— | ‰v S r2   rB   râ  s    €r:   rE   z!check_if_enable.<locals>.<lambda>
  s   ø€ °aÐ;RÐ6R€ r;   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr2   rB   )r£   r¢   rã  s     €r:   r¤   z"check_if_enable.<locals>.<genexpr>�
  s   øè ø€ Ò)fÐPXÐ*AÀ(Õ*KÑ)fùs   ƒz7Test is disabled because an issue exists disabling it: ú for Úallzplatform(s) z¨. If you're seeing this on your local machine and would like to enable this test, please make sure CI is not set and you are not using the flag --import-disabled-tests.zcTest is enabled but --rerun-disabled-tests verification mode is set, so only disabled tests are runz8test is fast; we disabled it with PYTORCH_TEST_SKIP_FAST)!ri   rK  r¾   rÌ  rÏ  Úanyrc  r  r¿   r3  rÉ  r»   rá  rq   rf  ra   ÚIS_MACOSr«  r  rÆ  r‰  r¾  rð  rì  r  r­  rb  r`   râ  rk  rË  rÒ   r¢  )rþ   Úshould_skipÚskip_msgÚdisabled_testÚ	issue_urlÚ	platformsÚinvalid_platformsÚinvalid_plats_strÚvalid_platsr  rÔ  rã  rÓ  s   `        @@@@r:   Úcheck_if_enableró  J
  sƒ  ü€ Ü�D—N‘NÓ#×)Ñ)¨#Ó.¨qÑ1×7Ñ7¸Ó<¸RÑ@€IÜ9¸$×:NÑ:NÓOÐð
zœS÷ 
zô Ó
;¤O×$8Ñ$8Ó$:Ô
;Ô;ØDHŒ��d×*Ñ*Ó+×4Ñ4°[ÑAÝÜ×#Ñ#Ð$bÓcÐcæØˆØˆä5H×5NÑ5NÓ5Pó $	Ñ1ˆMÑ1˜I yÙ˜MÕ*ä#Ü%Ü%Ü)Ü%Ü*Ü#Ü*Ü3Ü&;Ü 7Ü*ñ1Ð'ô %)¬Ó0ZÐ\eÓ)fÓ$gÐ!ÜÐ(Ó)¨AÒ-Ø(,¯	©	Ð2CÓ(DÐ%Ø"&§)¡)Ð,C×,HÑ,HÓ,JÓ"K�Kä˜E - Ð0SÐTØ(Ð):Ð(;Ð;PÐQZÐP[Ð[qÐrØhØ`ÐalÐ`mÐnôpô !%¤VÓ,RÐT]Ó%^Ó _�Ià ’?¤cÓ)fÐ\eÔ)fÕ&fØ"&�KØ!XÐYbÐXcØ¨°bª¡¸bÐAÀÈdÏiÉiÐXaÓNbÐMcð dqð q�Hñ ðI$	ñL Õ3ä×#Ñ# HÓ-Ð-áÕ3ð*ˆHä×#Ñ# HÓ-Ð-åÜ�4˜×-Ñ-Ô.´w¸tÀT×EYÑEYÓ7Z×7cÑ7c×7gÑ7gÐhsÐuzÔ7{Ü×#Ñ#Ð$^Ó_Ð_ð 8|Ð.ð r;   c                   óN   ‡ — e Zd ZdZ edd«      j
                  Zd„ Zˆ fd„Zˆ xZ	S )ÚRelaxedBooleanPairz¯Pair for boolean-like inputs.

    In contrast to the builtin :class:`BooleanPair`, this class also supports one input being a number or a single
    element tensor-like.
    r   c                ót  — t         j                  t        j                  f}g | j                  ¢| j
                  ¢|¢­}t        || j                  «      rt        ||«      s2t        || j                  «      rt        ||«      s| j                  «        ||fD �cg c]  }| j                  ||¬«      ‘Œ c}S c c}w ©N©r½   )	r3   r   rõ  ÚndarrayÚ_supported_typesÚ_supported_number_typesrº   Ú_inputs_not_supportedÚ_to_bool©r³   rD  Úexpectedr½   Útensor_or_array_typesÚother_supported_typesÚinputs          r:   Ú_process_inputsz"RelaxedBooleanPair._process_inputs¨
  sŸ   € ô 49·<±<ÄÇÁÐ2LÐØ o $×"7Ñ"7Ð o¸$×:VÑ:VÐ oÐYnÑ oÐä˜ × 5Ñ 5Ô6¼:ÀhÐPeÔ;fÜ˜8 T×%:Ñ%:Ô;Ä
È6ÐShÔ@ià×&Ñ&Ô(à:@À(Ð9KÖL°�—‘˜e¨�Õ+ÒLÐLùÒLs   ÂB5c                ó  •— t        |t        j                  «      rt        |j	                  «       «      S t        |«      | j                  v rt        |«      S t        |t        j                  t        j                  f«      rpt        |t        j                  «      r|j                  «       n|j                  }|dkD  r| j                  t        d|› d�|¬«       t        |j	                  «       «      S t        ‰| �=  ||¬«      S )Nr_  zHOnly single element tensor-likes can be compared against a boolean. Got ú elements instead.rø  )rº   rõ  Únumberrn   r8  rI  rû  r3   r   rù  ÚnumelrV  Ú_failrd  rJ  rý  )r³   Ú	bool_liker½   r  rK  s       €r:   rý  zRelaxedBooleanPair._to_boolµ
  sÑ   ø€ Ü�i¤§¡Ô+Ü˜	Ÿ™Ó(Ó)Ð)Ü�)‹_ × <Ñ <Ñ<Ü˜	“?Ð"Ü˜	¤E§L¡L´"·*±*Ð#=Ô>Ü)3°I¼u¿|¹|Ô)L�I—O‘OÔ%ÐR[×R`ÑR`ˆEØ�qŠyØ—
‘
ÜðØ ˜'Ð!3ð5àð	 ô ô ˜	Ÿ™Ó(Ó)Ð)ä‘7Ñ# I°"Ð#Ó5Ð5r;   )
rc   rd   re   r  r)   rú  rû  r  rý  rY  rZ  s   @r:   rõ  rõ   
  s-   ø„ ññ
 )¨¨AÓ.×?Ñ?ÐòM÷6ð 6r;   rõ  c                   óŒ   ‡ — e Zd ZdZeej                  eej                  e	ej                  iZddddœ	 dˆ fd„Zd„ Zˆ fd„Zˆ xZS )	ÚRelaxedNumberPaira#  Pair for number-like inputs.

    In contrast to the builtin :class:`NumberPair`, this class also supports one input being a single element
    tensor-like or a :class:`enum.Enum`. (D)Type checks are disabled, meaning comparing 1 to 1.0 succeeds even when
    ``check_dtype=True`` is passed.

    In addition, this class uses looser default tolerances for :class:`float` and :class:`complex` inputs. Also
    supports overriding the absolute and relative tolerance through the ``@precisionOverride`` and
    ``@toleranceOverride`` decorators.
    ç        N)Úrtol_overrideÚatol_overrideÚcheck_dtypec                ó˜   •— t        ‰| �  ||fddi|¤Ž t        | j                  |«      | _        t        | j                  |«      | _        y )Nr  F©rJ  rã   ÚmaxÚrtolÚatol)r³   rD  rÿ  r  r  r  Úother_parametersrK  s          €r:   rã   zRelaxedNumberPair.__init__Ú
  sC   ø€ ô 	‰Ñ˜ ÑQ°uÐQÐ@PÒQÜ˜Ÿ	™	 =Ó1ˆŒ	Ü˜Ÿ	™	 =Ó1ˆ�	r;   c                ó\  — t         j                  t        j                  f}g | j                  ¢|¢­}t        || j                  «      rt        ||«      s2t        || j                  «      rt        ||«      s| j                  «        ||fD �cg c]  }| j                  ||¬«      ‘Œ c}S c c}w r÷  )r3   r   rõ  rù  rú  rº   rü  Ú
_to_numberrþ  s          r:   r  z!RelaxedNumberPair._process_inputsá
  s”   € ô 49·<±<ÄÇÁÐ2LÐØ P $×"7Ñ"7Ð PÐ:OÑ PÐä˜F D×$9Ñ$9Ô:¼zÈ(ÐTiÔ?jÜ˜x¨×)>Ñ)>Ô?ÄJÈvÐWlÔDmà×&Ñ&Ô(à<BÀHÐ;MÖN°%�—‘ ¨"�Õ-ÒNÐNùÒNs   ÂB)c                ó¸  •— t        |t        j                  t        j                  f«      r„t        |t        j                  «      r|j                  «       n|j                  }|dkD  r| j                  t        d|› d�|¬«       |j                  «       }t        |t        «      rt        |«      }|S t        |t        «      rt        |«      S t        ‰| �9  ||¬«      S )Nr_  zGOnly single element tensor-likes can be compared against a number. Got r  rø  )rº   r3   r   rõ  rù  r  rV  r  rd  r8  rn   r…   r	   rJ  r  )r³   Únumber_liker½   r  r  rK  s        €r:   r  zRelaxedNumberPair._to_numberî
  sÀ   ø€ Ü�k¤E§L¡L´"·*±*Ð#=Ô>Ü+5°kÄ5Ç<Á<Ô+P�K×%Ñ%Ô'ÐVa×VfÑVfˆEØ�qŠyØ—
‘
ÜðØ ˜'Ð!3ð5àð	 ô ð !×%Ñ%Ó'ˆFÜ˜&¤$Ô'Ü˜V›�àˆMÜ˜¤TÔ*Ü�{Ó#Ð#ä‘7Ñ% k°bÐ%Ó9Ð9r;   r:  )rc   rd   re   r  r…   r3   Úint64rK  Úfloat32ÚcomplexÚ	complex64Ú_TYPE_TO_DTYPErã   r  r  rY  rZ  s   @r:   r  r  É
  sS   ø„ ñ	ð 	ˆU�[‰[Øˆu�}‰}Ø�—‘ð€Nð 69ÈÐY]ñ2à	õ2òO÷:ð :r;   r  c                   ó0   ‡ — e Zd ZdZdddœˆ fd„
Zd„ Zˆ xZS )ÚTensorOrArrayPairaƒ  Pair for tensor-like inputs.

    On the one hand this class is stricter than the builtin :class:`TensorLikePair` since it only allows instances of
    :class:`torch.Tensor` and :class:`numpy.ndarray` rather than allowing any tensor-like than can be converted into a
    tensor. On the other hand this class is looser since it converts all inputs into tensors with no regard of their
    relationship, e.g. comparing a :class:`torch.Tensor` to :class:`numpy.ndarray` is fine.

    In addition, this class supports overriding the absolute and relative tolerance through the ``@precisionOverride``
    and ``@toleranceOverride`` decorators.
    r  ©r  r  c                ó”   •— t        ‰| �  ||fi |¤Ž t        | j                  |«      | _        t        | j                  |«      | _        y r2   r  ©r³   rD  rÿ  r  r  r  rK  s         €r:   rã   zTensorOrArrayPair.__init__  s<   ø€ Ü‰Ñ˜ Ñ>Ð-=Ò>Ü˜Ÿ	™	 =Ó1ˆŒ	Ü˜Ÿ	™	 =Ó1ˆ�	r;   c                óÈ   ‡ — ‰ j                  ||t        j                  t        j                  f¬«       ˆ fd„||fD «       \  }}||fD ]  }‰ j                  ||¬«       Œ ||fS )Nr%  c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr2   )Ú
_to_tensor)r£   r  r³   s     €r:   r¤   z4TensorOrArrayPair._process_inputs.<locals>.<genexpr>  s   øè ø€ ÒS°u˜DŸO™O¨E×2ÑSùs   ƒrø  )Ú_check_inputs_isinstancer3   r   rõ  rù  Ú_check_supported)r³   rD  rÿ  r½   Úallow_subclassesrg  s   `     r:   r  z!TensorOrArrayPair._process_inputs  sk   ø€ Ø×%Ñ% f¨h¼U¿\¹\Ì2Ï:É:Ð<VÐ%ÔWãSÀÈÐ@RÔSÑˆ�Ø˜xÐ(ò 	1ˆFØ×!Ñ! &¨RÐ!Õ0ð	1à�xÐÐr;   )rc   rd   re   r  rã   r  rY  rZ  s   @r:   r   r     s   ø„ ñ	ð ;>ÈSö 2ö
 r;   r   c                   ó0   ‡ — e Zd ZdZdddœˆ fd„
Zd„ Zˆ xZS )ÚTypedStoragePairz4Pair for :class:`torch.storage.TypedStorage` inputs.r  r!  c                óì   •— | j                  ||t        j                  j                  ¬«       t	        ‰| �  ||fi |¤Ž t        | j                  |«      | _        t        | j                  |«      | _        y ©Nr%  )	r'  r3   rÚ  ÚTypedStoragerJ  rã   r  r  r  r#  s         €r:   rã   zTypedStoragePair.__init__  s[   ø€ Ø×%Ñ% f¨h¼E¿M¹M×<VÑ<VÐ%ÔWÜ‰Ñ˜ Ñ>Ð-=Ò>Ü˜Ÿ	™	 =Ó1ˆŒ	Ü˜Ÿ	™	 =Ó1ˆ�	r;   c                 óÎ  — t        j                  |j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  ij                  |j                  |j                  «      |j                  ¬«      S )N©rF  rH  )r3   rg  Ú_untyped_storageÚquint8Úuint8Úquint4x2Úquint2x4Úqint32Úint32Úqint8Úint8r¢  rF  rH  )r³   Útyped_storages     r:   r&  zTypedStoragePair._to_tensor$  s…   € Ü�|‰|Ø×*Ñ*ä—‘œeŸk™kÜ—‘¤§¡Ü—‘¤§¡Ü—‘œeŸk™kÜ—‘œUŸZ™Zð÷ ‰c�-×%Ñ% }×':Ñ':Ó;Ø ×'Ñ'ô

ð 
	
r;   )rc   rd   re   r  rã   r&  rY  rZ  s   @r:   r+  r+    s   ø„ Ù>Ø:=ÈSö 2ö
r;   r+  c                   ó\   ‡ — e Zd ZU dZeeeedf   f   ed<   dZe	e
   ed<   ˆ fd„Zd„ Zˆ xZS )ÚUnittestPairav  Fallback ABC pair that handles non-numeric inputs.

    To avoid recreating the mismatch messages of :meth:`unittest.TestCase.assertEqual`, this pair simply wraps it in
    order to use it with the :class:`Pair` "framework" from :func:`are_equal`.

    Define the :attr:`UnittestPair.CLS` in a subclass to indicate which class(es) of the inputs the pair should support.
    .ÚCLSNÚ	TYPE_NAMEc                 ód   •— | j                  ||| j                  ¬«       t        ‰| �  ||fi |¤Ž y r-  )r'  r=  rJ  rã   )r³   rD  rÿ  r  rK  s       €r:   rã   zUnittestPair.__init__=  s1   ø€ Ø×%Ñ% f¨h¸D¿H¹HÐ%ÔEÜ‰Ñ˜ Ñ>Ð-=Ó>r;   c                 ó´  — t        j                  «       }	 |j                  | j                  | j                  «      S # |j
                  $ r}t        |«      }Y d }~nd }~ww xY w| j                  xs? t        | j                  t        «      r| j                  n| j                  d   j                  }| j                  t        |j                  «       › d|› �«       y )Nr   z comparison failed: )r»   r¼   ÚassertEqualrD  rÿ  ÚfailureExceptionri   r>  rº   r=  rI  rc   r  ÚAssertionErrorÚtitle)r³   r	  Úerrorr
  Ú	type_names        r:   ÚcomparezUnittestPair.compareA  s§   € Ü×%Ñ%Ó'ˆ	ð	Ø×(Ñ(¨¯©°d·m±mÓDÐDøØ×)Ñ)ò 	Ü�e“*�Cûð	úð —N‘NÒh´:¸d¿h¹hÌÔ3M t§x¢xÐSW×S[ÑS[Ð\]ÑS^×&hÑ&hˆ	Ø�
‰
”> i§o¡oÓ&7Ð%8Ð8LÈSÈEÐ#RÕSs   –%< ¼A ÁAÁA )rc   rd   re   r  r   rI  r(  rg   r>  r   ri   rã   rG  rY  rZ  s   @r:   r<  r<  2  s<   ø… ñð 
ˆt�U˜4 ˜9Ñ%Ð%Ñ	&Ó&Ø#€Iˆx˜‰}Ó#ô?ö	Tr;   r<  c                   ó   — e Zd ZeefZdZy)Ú
StringPairÚstringN)rc   rd   re   ri   Úbytesr=  r>  rB   r;   r:   rI  rI  M  s   „ Ø�ˆ,€CØ�Ir;   rI  c                   ó   — e Zd ZeZy)ÚSetPairN)rc   rd   re   r  r=  rB   r;   r:   rM  rM  R  s   „ Ø
�Cr;   rM  c                   ó   — e Zd ZeZy)ÚTypePairN)rc   rd   re   rI  r=  rB   r;   r:   rO  rO  V  s   „ Ø
�Cr;   rO  c                   ó   — e Zd ZeZy)Ú
ObjectPairN)rc   rd   re   rc  r=  rB   r;   r:   rQ  rQ  Z  s   „ Ø
�Cr;   rQ  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú,AssertRaisesContextIgnoreNotImplementedErrorc                 ó†   •— |�.t        |t        «      r| j                  j                  d|› �«       t        ‰| �  |||«      S )Nznot_implemented: )Ú
issubclassrý   r	  ÚskipTestrJ  rÓ  )r³   r¢  Ú	exc_valueÚtbrK  s       €r:   rÓ  z5AssertRaisesContextIgnoreNotImplementedError.__exit__g  sA   ø€ ØÐ¤J¨xÔ9LÔ$MØ�N‰N×#Ñ#Ð&7¸	°{Ð$CÔDÜ‰wÑ ¨)°RÓ8Ð8r;   )rc   rd   re   rÓ  rY  rZ  s   @r:   rS  rS  f  s   ø„ ÷9ð 9r;   rS  Únew_valc              #   óÆ   K  — t        j                  «       }t        j                  | «       	 d –— t        j                  |«       y # t        j                  |«       w xY w­wr2   )r3   Úis_warn_always_enabledÚset_warn_always)rY  Úold_vals     r:   Úset_warn_always_contextr^  m  sF   è ø€ ä×*Ñ*Ó,€GÜ	×Ñ˜'Ô"ð'Ûä×Ñ˜gÕ&øŒ×Ñ˜gÕ&üre  c                   ó   — e Zd ZdZy)ÚNoTestFN)rc   rd   re   Ú__test__rB   r;   r:   r`  r`  w  s   „ à�Hr;   r`  c            
       ó”  ‡ — e Zd ZU dZeed<   dZeed<   dZeed<   e	j                  ZdZd„ Zedefd	„«       Zej                   d
eddfd„«       Zedefd„«       Zej                   d
eddfd„«       ZdZdZdZdOˆ fd„	ZdPd„Zd„ Zd„ Zd„ Zd„ ZdQˆ fd„	Zddddœd„ZdRˆ fd„	ZdRˆ fd„	Zd„ Zd„ Z d„ Z!d„ Z"dPˆ fd„	Z#dPd„Z$d „ Z%d!„ Z&e'dd"œd#„«       Z(d$dd%œd&„Z)dd'œd(„Z*dd'œd)„Z+dd'œd*„Z,dd'œd+„Z-d,„ Z.	 	 	 	 	 	 	 	 	 	 	 	 	 dSd-„Z/d.„ Z0d/„ Z1	 dRd0„Z2dTd1„Z3dTd2„Z4	 dPddddddddd3œd4e5e6e7e8e7ge7f   f      d5e5e   d6e5e   fd7„Z9dPddd8œd4e5e7   d5e5e   d6e5e   ddfd9„Z:dTd:„Z;d;e<d<e=e<   ddfd=„Z>ˆ fd>„Z?ˆ fd?„Z@d@„ ZAdA„ ZBdUdB„ZCeDdUdC„«       ZEdPdD„ZFdPdE„ZGdVdF„ZHdUdG„ZIdWdH„ZJe'dPdI„«       ZKe'dJ„ «       ZL	 dPdKeMjœ                  dLe7dMe5e7   ddfdN„ZOˆ xZPS )Xr¼   r   Ú
_precisionÚ_rel_tolFÚ_default_dtype_check_enabledNc                 ó*  — t         j                  j                  «       r 	 t         j                  j                  «        yy# t        $ rI}t        dt        j                  ¬«       t        t        |«      t        j                  ¬«       Y d }~yd }~ww xY w)NzDTEST SUITE EARLY TERMINATION due to torch.cuda.synchronize() failure©rÝ  TF)	r3   r–   Úis_initializedrƒ  r  râ  rÖ  rÕ  ri   )r³   Úrtes     r:   Ú_should_stop_test_suitez TestCase._should_stop_test_suite�  sh   € Ü�:‰:×$Ñ$Ô&ðÜ—
‘
×&Ñ&Ô(ð
 àøô  ò ÜÐ\Ôcf×cmÑcmÕnÜ”c˜#“h¤S§Z¡ZÕ0Üûðús    A  Á 	BÁ	?BÂBr\   c                 ó   — | j                   S r2   ©rc  rå   s    r:   Ú	precisionzTestCase.precision�  s   € à�‰Ðr;   Úprecc                 ó   — || _         y r2   rl  ©r³   rn  s     r:   rm  zTestCase.precision¡  s	   € àˆ�r;   c                 ó   — | j                   S r2   ©rd  rå   s    r:   Úrel_tolzTestCase.rel_tol¥  s   € à�}‰}Ðr;   c                 ó   — || _         y r2   rr  rp  s     r:   rs  zTestCase.rel_tol©  s	   € àˆ�r;   c                 óx  •— |dk7  r|}t         ‰| �  |«       t        | |d «      }|��]t        rN| xj                  t        |dd«      z  c_        | j                  r"t
        s| j                  || j                  «       | xj                  t        |dd«      z  c_        | j                  r"t
        s| j                  || j                  «       | j                  r| j                  |d„ «       t        r•	 d„ }t        j                  j                  t!        j"                  t%        | «      «      «      } ||«      }t%        | «      j&                  }d|› d|› d	|› �}t(        j+                  «       }	|	|g}
| j                  ||
fd
„«       y y y # t,        $ r*}t.        j1                  dt3        |«      ¬«       Y d }~y d }~ww xY w)NÚrunTestr:  TrA  c                  ó    — t        t        «      S r2   )r¤  rý   rB   r;   r:   rE   z#TestCase.__init__.<locals>.<lambda>Ê  s   € Ô;NÔObÓ;c€ r;   c                 ó2  — t        | «      j                  }t        |«      D ]S  \  }}|dk(  sŒ|dkD  rt        j                  j
                  |d | Ž nd}t        j                  j                  | |¬«      c S  t        j                  j                  | «      d   S )Nrþ   r   r“   )Ústartr_  )r   ÚpartsrÜ   rK   rˆ   r`   Úrelpathr¾   )Úabs_test_pathrz  rÙ   ÚpartÚbase_dirs        r:   Ú_get_rel_test_pathz-TestCase.__init__.<locals>._get_rel_test_pathÎ  s‡   € ô !% ]Ó 3× 9Ñ 9˜Ü'0°Ó'7ò V™G˜A˜tØ# v›~ØGHÈ1Âu¬2¯7©7¯<©<¸¸rÀ¸Ñ+CÐRT Ü')§w¡w§¡°}ÈH Ó'UÒ UðVô  "Ÿw™wŸ}™}¨]Ó;¸AÑ>Ð>r;   zpython r^   r´   c                 ó   — t        | «      S r2   )r³  )r¯  s    r:   rE   z#TestCase.__init__.<locals>.<lambda>æ  s   € Ô8NÈ{Ó8[€ r;   zcould not print repro string)Úextra)rJ  rã   r¿   rR  r:  r«  Úwrap_with_cuda_policyÚassertLeaksNoCudaTensorsrA  ÚenforceNonDefaultStreamÚ_ignore_not_implemented_errorÚwrap_with_policyr   rK   rˆ   Úabspathr¶   ÚgetfilerI  rc   r=   rb   rÁ   r�   Úinfori   )r³   Úmethod_nameÚ
methodNameÚtest_methodr  r|  r  Ú
class_nameÚtest_run_cmdÚenv_var_prefixr¯  r£  rK  s               €r:   rã   zTestCase.__init__´  s“  ø€ ð ˜Ò"Ø$ˆKÜ‰Ñ˜Ô%ä˜d K°Ó6ˆØÑ"å'Ø×/Ò/´7¸;ÐHdÐfjÓ3kÑkÕ/à×2Ò2½:Ø×.Ñ.¨{¸D×<YÑ<YÔZð ×,Ò,´¸ÐEbÐdhÓ0iÑiÕ,Ø×/Ò/½
Ø×*Ñ*¨;¸×8TÑ8TÔUà×1Ò1Ø×%Ñ% kÑ3cÔdå%ðKò?ô  %'§G¡G§O¡O´G·O±OÄDÈÃJÓ4OÓ$P�MÙ$6°}Ó$E�MÜ!% d£×!4Ñ!4�JØ%,¨]¨O¸1¸Z¸LÈÈ+ÈÐ#W�LÜ%4×%IÑ%IÓ%K�NØ#1°<Ð"@�KØ×)Ñ)Ø#Ø+6Ò[õ]ð1 &ð! #øôV !ò Kä—H‘HÐ;Ä3ÀqÃ6�H×JÑJûðKús   Ã0BF Æ	F9Æ F4Æ4F9c                 óB   — |€| j                  «       n|}t        | |«      S r2   )r½   r�  )r³   rN   s     r:   rƒ  z!TestCase.assertLeaksNoCudaTensorsë  s    € Ø ˜Lˆt�w‰wŒy¨dˆÜ" 4¨Ó.Ð.r;   c                 ó   — t        «       S r2   )rw  rå   s    r:   r„  z TestCase.enforceNonDefaultStreamï  s   € Ü#Ó%Ð%r;   c                 ón   — t        j                  dt         j                  «      }|j                  d|«      S )NaF  
            \x1B  # ESC
            (?:   # 7-bit C1 Fe (except CSI)
                [@-Z\\-_]
            |     # or [ for CSI, followed by a control sequence
                \[
                [0-?]*  # Parameter bytes
                [ -/]*  # Intermediate bytes
                [@-~]   # Final byte
            )
        r“   )r   ÚcompileÚVERBOSErg  )r³   r  Úansi_escapes      r:   Ú_remove_ansi_escapezTestCase._remove_ansi_escapeò  s1   € ä—j‘jð 
"ô �Z‰Zó
ˆð �‰˜r 5Ó)Ð)r;   c                 ó®   — |j                  d«      }|D �cg c]$  }|j                  «       j                  d«      rŒ#|‘Œ& }}dj                  |«      S c c}w )Nr¬  ú#)r¾   r>  rþ  r`   ©r³   Úinput_stringr“  ÚlineÚfiltered_liness        r:   Úremove_comment_lineszTestCase.remove_comment_lines  sN   € Ø×"Ñ" 4Ó(ˆØ+0ÖU 4¸¿
¹
»×8OÑ8OÐPSÕ8Tš$ÐUˆÐUØ�y‰y˜Ó(Ð(ùò Vs
   –$A»Ac                 ó–   — |j                  d«      }|D �cg c]  }|j                  «       dk(  rŒ|‘Œ }}dj                  |«      S c c}w )Nr¬  r“   )r¾   r>  r`   r™  s        r:   Úremove_empty_lineszTestCase.remove_empty_lines  sG   € Ø×"Ñ" 4Ó(ˆØ+0ÖK 4¸¿
¹
»ÈÓ8Jš$ÐKˆÐKØ�y‰y˜Ó(Ð(ùò Ls
   –A¯Ac                 óp  •— t        |t        «      r|n
t        |«      }| j                  |«      }| j                  |«      }|r"| j                  |«      }| j                  |«      }|r"| j	                  |«      }| j	                  |«      }t
        ‰| �  t        |t        «      r|n
t        |«      ||dz   «      S ©Nr_  )rº   ri   r–  r�  rŸ  rJ  ÚassertExpectedInline)r³   rD  ÚexpectrM  Úignore_commentsÚignore_empty_linesrK  s         €r:   r¢  zTestCase.assertExpectedInline  s«   ø€ Ü% f¬cÔ2‘¼¸F»ˆØ×)Ñ)¨&Ó1ˆØ×)Ñ)¨&Ó1ˆÙØ×.Ñ.¨vÓ6ˆFØ×.Ñ.¨vÓ6ˆFáØ×,Ñ,¨VÓ4ˆFØ×,Ñ,¨VÓ4ˆFä‰wÑ+´jÀÌÔ6M©FÔSVÐW]ÓS^Ð`fÐhlÐopÑhpÓqÐqr;   T)rM  Úsuppress_suffixÚ
post_mungec                óÀ   — 	  |«        | j                  d¬«       y # |$ r<}t        |||dz   ¬«      }|r ||«      }| j                  |||dz   ¬«       Y d }~y d }~ww xY w)Nr_  )r¦  rM  )rM  úDid not raise when expected tor5  )Ú	munge_excr¢  Úfail)	r³   r¢  r•  r£  rM  r¦  r§  r£  Úmungeds	            r:   ÚassertExpectedInlineMungedz#TestCase.assertExpectedInlineMunged  sq   € ð		ÙŒJð 	�	‰	Ð6ˆ	Õ7øð ò 	Ü˜q°/ÈÈqÉÔQˆFÙÙ# FÓ+�Ø×%Ñ%Ø˜ T¨A¡Xð &ô ô ûð	ús   ‚ œA¡2AÁAc                 óR   •— |€t        j                  d«      }t        ‰| �  ||«      S ©Nr3   )ÚloggingÚ	getLoggerrJ  Ú
assertLogs©r³   ÚloggerÚlevelrK  s      €r:   r²  zTestCase.assertLogs*  s*   ø€ Øˆ>Ü×&Ñ& wÓ/ˆFÜ‰wÑ! &¨%Ó0Ð0r;   c                 óR   •— |€t        j                  d«      }t        ‰| �  ||«      S r¯  )r°  r±  rJ  ÚassertNoLogsr³  s      €r:   r·  zTestCase.assertNoLogs/  s*   ø€ Øˆ>Ü×&Ñ& wÓ/ˆFÜ‰wÑ# F¨EÓ2Ð2r;   c                 ó¶   — t        | |«      }ddlm} | j                  «       j	                  «       }|r'd|v sd|v rt        | || j                  ||«      «       y y y )Nr   )Ú	TEST_CUDAÚgpur–   )r¿   r�  r¹  r½   Úlowerr%  Úwrap_method_with_policy)r³   rŠ  ÚpolicyrŒ  r¹  Úfullnames         r:   r‚  zTestCase.wrap_with_cuda_policy4  sY   € Ü˜d KÓ0ˆõ 	BØ—7‘7“9—?‘?Ó$ˆÙ˜% 8Ñ+¨v¸Ñ/AÜ�D˜+ t×'CÑ'CÀKÐQWÓ'XÕYð 0Bˆ9r;   c                 óV   — t        | |«      }t        | || j                  ||«      «       y r2   )r¿   r%  r¼  )r³   rŠ  r½  rŒ  s       r:   r†  zTestCase.wrap_with_policy@  s'   € Ü˜d KÓ0ˆÜ��k 4×#?Ñ#?ÀÈVÓ#TÕUr;   c                 óZ   ‡‡— t        ‰«      ˆˆfd„«       }t        j                  || «      S )Nc                 óN   •—  ‰«       5   ‰|i |¤Ž d d d «       y # 1 sw Y   y xY wr2   rB   )r³   r8   r9   Úmethodr½  s      €€r:   r­   z1TestCase.wrap_method_with_policy.<locals>.wrapperN  s*   ø€ á“ñ (Ù˜Ð' Ò'÷(÷ (ñ (ús   ‰	›$)r   ré  Ú
MethodType)r³   rÂ  r½  r­   s    `` r:   r¼  z TestCase.wrap_method_with_policyG  s0   ù€ ô 
ˆv‹ô	(ó 
ð	(ô ×Ñ ¨Ó.Ð.r;   c                 ó:   — | j                  || j                  «      S r2   )r¼  rƒ  )r³   rÂ  s     r:   Úwrap_with_cuda_memory_checkz$TestCase.wrap_with_cuda_memory_checkT  s   € Ø×+Ñ+¨F°D×4QÑ4QÓRÐRr;   c           
      ó 	  •‡ — t        |t        j                  «      }t        ‰‰ �  }|j
                  }t        xs t        xs t        }d}d}d}|r­	 t        j                  t        |«      «      }	t        j                  j                  |	«      }
t        j                   d|
«      }|�-|j#                  d«      }t        rddlm} ||v}d}|dk(  rd}nd}dt        j,                  v rt        j,                  d   dk(  rd}d}|rJt/        ‰ ‰ j0                  «      }t3        |d	«      r|j4                  }nt3        |d	«      r|j4                  }n|}t/        |d
d«      xr |}|s|rt6        j8                  j;                  «        t6        j<                  j?                  d«       |r| }n$t6        j8                  j@                  jB                  }|r*t6        jD                  j@                  jG                  d¬«      ntI        jJ                  «       }t        jL                  jG                  d|«      5  |5  t        r&t7        j8                  jO                  d«      |«      }�nkt        st        �r^t        r%t7        j8                  jO                  d«      |«      }n&t7        j8                  jO                  d|¬«      |«      }‰ jP                  jR                  › d‰ j0                  › �}ˆ fd„}t        r	d}ddlm*} nd}ddlm+} ||v rTt/        ‰ ‰ j0                  «      }t        j                  jY                  ||«      }t[        ‰ ‰ j0                   |||«      «       ˆ fd„}t        r	d}ddlm.} nd}ddlm/} ||v rTt/        ‰ ‰ j0                  «      }t        j                  jY                  ||«      }t[        ‰ ‰ j0                   |||«      «        ||¬«       d d d «       d d d «       |s|rt6        j8                  j;                  «        |r¡‰ ja                  «       r�|jc                  «       rote        «       }tf        �.ddl4m5}  |||«      }|jl                  |_7        d |_8        d!|_9        |jt                  jw                  |d"f«       |jc                  «       du sJ ‚|jy                  «        y y y # t(        t*        f$ r Y �Œàw xY w# 1 sw Y   ŒíxY w# 1 sw Y   ŒñxY w)#NFz.*/test/(.*).pyr_  )ÚFIXME_inductor_non_strictTÚtest_opsÚSTRICT_DEFAULTrA   r$  r0  rD   )Úsize_assertsr*  Úaot_eager_decomp_partitionrß  Úeager_noexcept)r2  r´   c                 ó6   •‡ ‡— t        ‰ «      ˆ ˆˆfd„«       }|S )Nc                  ó‚   •— 	  ‰| i |¤Ž t        d‰› d�«      ‚# t         $ r}‰j                  |«       Y d }~Œ.d }~ww xY w)Nz#Unexpected success, please remove `ú`)ÚBaseExceptionrV  r  )r8   r9   r£  r’  Ú	file_namer³   s      €€€r:   r­   z=TestCase._run_custom.<locals>.expect_failure.<locals>.wrapper®  sP   ø€ ð-Ù˜tÐ. vÒ.ô +Ð-PÐQZÐP[Ð[\Ð+]Ó^Ð^øô  -ò -Ø ŸM™M¨!×,Ñ,ûð-ús   ƒ š	>£9¹>râ  ©r’  rÑ  r­   r³   s   `` €r:   Úexpect_failurez,TestCase._run_custom.<locals>.expect_failure­  s"   ú€ Ü˜1“Xõ_ó ð_ð #�Nr;   ztest/inductor_expected_failures)Úinductor_expected_failuresztest/dynamo_expected_failures)Údynamo_expected_failuresc                 ó6   •‡ ‡— t        ‰ «      ˆ ˆˆfd„«       }|S )Nc                  óú   •— 	  ‰| i |¤Ž t        ‰‰j                  «      }t        |dd«      r‰j                  d«       y ‰j                  d‰› d�«       y # t         $ r}‰j                  |«       Y d }~Œjd }~ww xY w)NÚ__unittest_expecting_failure__Fzunexpected successz'This test passed, maybe we can remove `rÏ  )rÐ  rV  r¿   rÏ  )r8   r9   r£  rÂ  r’  rÑ  r³   s       €€€r:   r­   z=TestCase._run_custom.<locals>.ignore_failure.<locals>.wrapperÄ  s}   ø€ ð-Ù˜tÐ. vÒ.ô ")¨¨t×/CÑ/CÓ!D˜Ü" 6Ð+KÈUÔSØ ŸM™MÐ*>Õ?à ŸM™MÐ,SÐT]ÐS^Ð^_Ð*`Õaøô  -ò -Ø ŸM™M¨!×,Ñ,ûð-ús   ƒA Á	A:ÁA5Á5A:râ  rÒ  s   `` €r:   Úignore_failurez,TestCase._run_custom.<locals>.ignore_failureÃ  s"   ú€ Ü˜1“Xõ	bó ð	bð #�Nr;   ztest/inductor_skips)Úinductor_skipsztest/dynamo_skips)Údynamo_skips©rt  r   )Ú	_TestInfor  ÚTestSuiteEarlyFailurez%TestSuite execution was aborted early)=rº   r»   Ú
TestResultrJ  ÚrunÚ__self__rð  rî  rì  r¶   rˆ  rI  rK   rˆ   r‡  r   Úmatchr&  Údynamo_test_failuresrÇ  ÚOSErrorrp  r¡  r¿   rÏ  rÒ   r$  r3   r+  r,  ÚcompilerÚ
set_stancer4  Úsuppress_errorsÚ	_inductorr.  Ú
contextlibÚnullcontextr-  ÚoptimizerK  rc   rÔ  rÕ  r`   r%  rÚ  rÛ  rj  ru  r¼   r  rq  rÝ  ÚERRORr\  Úelapsed_timeÚtest_descriptionÚfailuresr3  Ústop)r³   rt  Úusing_unittestÚ	super_runÚtest_clsÚcompiledÚstrict_defaultÚshould_reset_dynamoÚshould_disable_size_assertsrˆ   Ú	full_pathrâ  r�   rÇ  Ústrict_moderŒ  r2  rç  Úmaybe_disable_size_assertsÚkeyrÓ  ÚsubdirÚexpected_failuresrÂ  rÑ  rÙ  Úskipsrî  rÝ  rK  s   `                            €r:   Ú_run_customzTestCase._run_customW  s%  ù€ Ü# F¬H×,?Ñ,?Ó@ˆä‘G‘Kˆ	Ø×%Ñ%ˆô )ÒZÔ,?ÒZÔCZˆàˆØ#Ðð ',Ð#ÙðÜ—‘¤t¨H£~Ó6�ÜŸG™GŸO™O¨DÓ1�	ÜŸ™Ð!3°YÓ?�ØÐ$Ø$Ÿ{™{¨1›~�HÝ.ÝSØ)1Ð9RÐ)R˜Ø.2Ð+à# zÒ1Ø:>Ñ7à)-˜ð  ¤2§:¡:Ñ-Ü—:‘:Ð.Ñ/°3Ò6Ø%)�NàˆÙÜ! $¨×(<Ñ(<Ó=ˆKÜ�{ OÔ4Ø)×7Ñ7‘Ü˜ ?Ô3Ø&×4Ñ4‘à,�Ü˜8Ð%=¸uÓEÒRÈ(ˆáÑ-Ü�M‰M×ÑÔ!ä�‰×!Ñ! )Ô,ñ
 Ø"-˜o‰Oä#Ÿm™m×2Ñ2×BÑBˆOñ +ô �O‰O×"Ñ"×(Ñ(°eÐ(Ô<ä×'Ñ'Ó)ð 	#ô �]‰]× Ñ Ð!GÈÓYñ =	%Ð[uñ =	%Ý"Ü!ŸM™M×2Ñ2Ð3OÓPÐQZÓ[’	Ý&Ö*AÝ*Ü %§¡× 6Ñ 6°zÓ BÀ9Ó M‘Iô !&§¡× 6Ñ 6Ð7GÐRZÐ 6Ó [Ð\eÓ f�IàŸ™×0Ñ0Ð1°°4×3GÑ3GÐ2HÐI�ô#õ +Ø>�FÞeà<�FÝcàÐ+Ñ+Ü$ T¨4×+?Ñ+?Ó@�FÜ "§¡§¡¨V°SÓ 9�IÜ˜D $×"6Ñ"6¹ÀvÈyÓ8YÔZô#õ +Ø2�FÞMà0�FÝKà˜%‘<Ü$ T¨4×+?Ñ+?Ó@�FÜ "§¡§¡¨V°SÓ 9�IÜ˜D $×"6Ñ"6¹ÀvÈyÓ8YÔZá˜VÕ$÷{=	%÷ =	%ñ~ Ñ-Ü�M‰M×ÑÔ!ñ ˜d×:Ñ:Ô<Ø×#Ñ#Ô%Ü“z�Ü Ð,õ ;Ù$ V¨TÓ2�DØ"+§/¡/�D”KØ(+�DÔ%Ø,C�DÔ)ð —‘×&Ñ&¨Ð.UÐ'VÔWØ×+Ñ+Ó-°Ñ6Ð6Ð6Ø�K‰K�Mð =ˆ>øôO œYÐ'ò Úðú÷H=	%ð =	%ú÷ =	%ð =	%ús8   ÁBR" È(SÈ+F!R8ÏSÒ"R5Ò4R5Ò8S	Ò=SÓSc                 ó¸   — t        j                  «       5 }t        r|j                  t	        «       «       | j                  |¬«       d d d «       y # 1 sw Y   y xY w)NrÜ  )ré  Ú	ExitStackrÍ  Úenter_contextræ  rÿ  )r³   rt  r·   s      r:   rà  zTestCase.runõ  sN   € Ü×!Ñ!Ó#ð 	 uÝ!Ø×#Ñ#¤L£NÔ3Ø×ÑØð ô ÷	÷ 	ñ 	ús   •2AÁAc                 óz  — t        | «       t        t        «       t        j                  j
                  j                  «       | _        t        j                  j
                  j                  «        | j                  r't        j                  «       t        j                  k(  sJ ‚t        j                  «       | _        y r2   )ró  rò   rñ   r3   ÚsparseÚcheck_sparse_tensor_invariantsÚ
is_enabledÚ_check_invariantsÚenablere  rb  rK  Úis_grad_enabledÚ_prev_grad_staterå   s    r:   ÚsetUpzTestCase.setUpý  s~   € Ü˜ÔÜ”TÔô "'§¡×!LÑ!L×!WÑ!WÓ!YˆÔô 	�‰×3Ñ3×:Ñ:Ô<à×,Ò,Ü×*Ñ*Ó,´·±Ò;Ð;Ð;ô !&× 5Ñ 5Ó 7ˆÕr;   c                 ó”  — t        | d«      r]| j                  r)t        j                  j                  j                  «        n(t        j                  j                  j                  «        | j                  r't        j                  «       t        j                  k(  sJ ‚t        | d«      r t        j                  | j                  «       y y )Nr  r
  )rÒ   r  r3   r  r  r  Údisablere  rb  rK  Úset_grad_enabledr
  rå   s    r:   ÚtearDownzTestCase.tearDown  sŽ   € ô �4Ð,Ô-à×%Ò%Ü—‘×;Ñ;×BÑBÕDä—‘×;Ñ;×CÑCÔEà×,Ò,Ü×*Ñ*Ó,´·±Ò;Ð;Ð;ô �4Ð+Ô,Ü×"Ñ" 4×#8Ñ#8Õ9ð -r;   )r`  c          	      ó²  ‡ ‡— d|cxk  r‰ ‰z  k  sn J |‰ ‰f«       ‚ˆˆ fd„}t        j                  ‰ dz   |t        j                  d«      ¬«      }dx}}	 |||	«      }
|
r|t        |
‰«      k\  rp|}‰ dz
  } |||	«      }||z
  dkD  r;||z   dz  } |||	«      }|dk(  s||‰z  z
  t        |‰«      k  r||}}n|}||z
  dkD  rŒ;||}
}|sJ ‚|| d j	                  ‰«       |
r™||‰z  z
  t        |
‰ |z
  «      k\  r�|	}‰dz
  } |||«      }||z
  dkD  rG||z   dz  } |||«      }|dk(  s!||‰z  z
  |‰ |z
  z  z
  t        |‰ |z
  «      k  r||}}n|}||z
  dkD  rŒG||}
}	|	sJ ‚|d‰ |z
  dz    j	                  |	«       |
rét        ||‰z  z
  |	‰ |z
  z  z
  ‰|	z
  ‰|	z
  dz   z  dz  «      \  }}d|‰|	z
  dz   z  z   }t        j                  d|z  «      }||dz   z  d|z  kD  r|dz  }|||dz   z  dz  z
  }|dkD  r|	dkD  rJ ‚t        j                  |dz
  ||j                  ¬«      ‰|	z
  dz   z  |d| ||||z   dz   xxx t        j                  |dz   ||j                  ¬«      z  ccc nd}||‰z  z
  |	‰ |z
  z  z
  }||xx   |z  cc<   |r,t        j                  ‰ |j                  ¬«      }|dd |   |dd |}|j                  d¬	«       |j                  |¬«      S )
a°  Return crow_indices of a CSR tensor with size (n_rows, n_cols) and
        the number of specified elements nnz.

        If random is True, the column counts of rows are in random
        order. Otherwise, the column counts of rows are defined by the
        used sampling method.

        Sampling method
        ---------------

        The used sampling method was introduced in
        https://pearu.github.io/csr_sampling.html, and here we give
        only an overall description of the method.

        Notice that crow_indices can be defined as cumsum(counts)
        where counts is a sequence of non-negative integers satisfying
        the following conditions:

          len(counts) == n_rows + 1
          counts.max() <= n_cols

        while counts[i + 1] is interpreted as the number of specified
        elements in the i-th row.

        The used sampling method aims at increasing the diversity of
        CSR samples, that is, a CSR sample should contain (i) rows
        that are all filled, (ii) rows with no elements at all, and
        (iii) rows that are partially filled. At the same time and for
        the given total number of specified elements (nnz), there
        should be minimal preference to rows with a given number of
        elements.  To achieve this, the sampling method is built-up on
        using a sawteeth model for counts. In the simplest case, we
        would have

          counts = arange(n_rows + 1) % (n_cols + 1)

        that has equal number of all possible column counts per row.
        This formula can be used only for specific input values of
        n_rows, n_cols, and nnz. To generalize this model to any
        combinations of inputs, the counts model above is extended
        with an incomplete sawtooth, and the right and lower
        rectangular parts that will guarantee that

          counts.sum() == nnz

        for any combination of n_rows, n_cols, and nnz. Basically,
        we'll find a maximal window in (n_rows + 1, n_cols + 1)-grid
        that is able to hold a sequence of sawteeth and so-called
        final correction, while the external part of the window is
        filled with counts to meet the nnz constraint exactly.
        r   c                 ó|   •— ‰|z
  ‰|z
  dz   z  dz  }‰| z
  ‰|z
  dz   z  }|‰| z
  ‰|z
  dz   z  z  ||dz
  z  dz  z   S )Nr_  rµ   rB   )ÚnÚmÚMÚKÚn_colsÚn_rowss       €€r:   Úsawteethz-TestCase._make_crow_indices.<locals>.sawteeth]  sd   ø€ ð
 ˜!‘ ¨¡
¨Q¡Ñ/°1Ñ4ˆAØ˜!‘ ¨¡
¨Q¡Ñ/ˆAØ˜ !™¨°!©°a©Ñ8Ñ9¸AÀÀQÁ¹KÈ1Ñ<LÑLÐLr;   r_  r•   r0  rµ   Nry  )rm  )r3   ÚzerosrH  r  Úfill_ÚdivmodÚmathÚisqrtÚarangeÚrandpermÚcumsum_rQ  )r  r  ÚnnzrH  rF  r`  r  Úcountsr  r  ÚNÚn_leftÚn_rightÚN_rightÚn_middleÚN_middleÚm_leftÚm_rightÚm_middleÚqrê  rÍ  ÚkÚcorrÚpermÚcrow_indicess   ``                        r:   Ú_make_crow_indiceszTestCase._make_crow_indices%  sŸ  ù€ ðl �CÔ*˜6 F™?Ô*ÐA¨S°&¸&Ð,AÓAÐ*õ	Mô —‘˜V a™Z¨u¼U¿\¹\È%Ó=PÔQˆàˆ	ˆˆAÙ�Q˜‹NˆÙ�œ˜A˜v›Ò&ð ˆFØ˜q‘jˆGÙ˜w¨Ó*ˆGØ˜FÑ" QÒ&Ø" WÑ,°Ñ2�Ù# H¨aÓ0�Ø˜q’= C¨(°VÑ*;Ñ$;¼cÀ(ÈFÓ>SÒ$SØ'/°˜W‘Gà%�Fð ˜FÑ" QÓ&ð ˜GˆqˆAáˆH�1Ø�A�2�3ˆK×Ñ˜fÔ%á��q˜6‘zÑ!¤S¨¨F°Q©JÓ%7Ò7ð ˆFØ˜q‘jˆGÙ˜q 'Ó*ˆGØ˜FÑ" QÒ&Ø" WÑ,°Ñ2�Ù# A xÓ0�Ø˜q’= C¨!¨f©*Ñ$4°xÀ6ÈAÁ:Ñ7NÑ$NÔQTÐU]Ð_eÐhiÑ_iÓQjÒ$jØ'/°˜W‘Gà%�Fð ˜FÑ" QÓ&ð ˜GˆqˆAáˆH�1Ø�1�V˜a‘Z !‘^Ð$×*Ñ*¨1Ô-áä˜#  F¡
Ñ*¨Q°&¸1±*Ñ-=Ñ=Ø! A™:¨&°1©*°q©.Ñ9¸QÑ>ó@‰DˆAˆqà�A˜ !™ a™Ñ(Ñ(ˆAÜ—
‘
˜1˜q™5Ó!ˆAØ�A˜‘E‰{˜Q ™UÒ"Ø�Q‘�Ø�q˜A ™E‘{ aÑ'Ñ'ˆDØ˜Qš Q¨¢UÐ,Ð,äŸ,™, q¨1¡u°EÀ&Ç-Á-ÔPÐTZÐ]^ÑT^ÐabÑTbÑcˆF�1�QˆKà�1�Q˜‘U˜Q‘YÓ¤5§<¡<°°A±¸UÈ6Ï=É=Ô#YÑYÔð ˆAØ˜˜V™Ñ# a¨6°A©:Ñ&6Ñ6ˆDð 	ˆq‹	�TÑ‹	áô —>‘> &°·±Ô?ˆDØ  ˜ DÑ)ˆF�1�2ˆJð ˆØ×Ñ ÐÔ#Ø�‰ fˆÓ-Ð-r;   rB   )Ú	blocksizeÚ
dense_dimsc          	      óR  ‡ ‡‡‡‡‡‡— ddl m}	 ddlm}
 d}t	        ˆfd„t        t        ‰«      «      D «       «      s|dk(  sJ d«       ‚t        ‰«      |k\  sJ ‚‰rQt        ‰«      dk(  s	J ‰‰f«       ‚‰d|z
     ‰d   z  dk(  s	J ‰‰f«       ‚‰d|z
     ‰d	   z  dk(  s	J ‰‰f«       ‚‰\  }}nd	x}}t        ‰«      Š‰t        ‰«      |z
  d  Šˆˆˆˆˆˆ fd
„}‰d d|z
   } |
|	|d	«      }|t        j                  t        j                  hv r‰d|z
     |z  ‰d|z
     |z  }}n‰d|z
     |z  ‰d|z
     |z  }}|||z  z  }t        |«      D �cg c]  } ||||«      ‘Œ }}t        t        t        |Ž «      } t        j                  t        |«      «      j                   g |¢|‘‰¢‰¢­Ž } t        j                  t        |«      «      j                   g |¢d‘­Ž } t        j                  t        |«      «      j                   g |¢d‘­Ž }t        j"                  |||‰‰|‰¬«      S c c}w )Nr   )Úmul)Úreducerµ   c              3   ó.   •K  — | ]  }‰|   d kD  –— Œ y­w©r   NrB   ©r£   r©  rV  s     €r:   r¤   z5TestCase.genSparseCompressedTensor.<locals>.<genexpr>·  s   øè ø€ Ò9 1�4˜‘7˜Q•;Ñ9ùrÖ  úinvalid argumentsrì  ra  r_  c                 óª  •— ‰j                  | ||‰‰¬«      }t        j                  |‰‰¬«      }t        | «      D ]M  }||dz      ||   z
  }t        j                  t        j
                  |‰‰¬«      d | «      \  |||   ||dz       }ŒO ‰t        j                  k7  rdnd}‰t        j                  k7  rdnd}	t        |f‰z   ‰z   ‰‰||	¬«      }
|
||fS )N©rH  rF  r0  r_  ra  r   rµ   ©rH  rF  ÚlowÚhigh)r1  r3   r  rø  Úsortr  r3  r&   )Ún_compressed_dimsÚn_plain_dimsr!  Úcompressed_indicesÚplain_indicesrÙ   Úcountrp   r>  r?  rQ  r2  Ú
dense_sizerH  rF  Úindex_dtyper³   s              €€€€€€r:   Úrandom_sparse_compressedzDTestCase.genSparseCompressedTensor.<locals>.random_sparse_compressedÄ  s  ø€ Ø!%×!8Ñ!8Ð9JÈLÐZ]ÐflÐtÐ!8ó  "AÐÜ!ŸK™K¨°;ÀvÔNˆMÜÐ,Ó-ò \�Ø*¨1¨q©5Ñ1Ð4FÀqÑ4IÑI�ÜTY×T^ÑT^Ü—N‘N <°{È6ÔRÐSYÐTYÐZóU\ÑQ�Ð0°Ñ3Ð4FÀqÈ1ÁuÑ4MÐNÑPQð\ð ¤§¡Ò,‘"°!ˆCØ¤§¡Ò,‘1°!ˆDÜ  # ¨)Ñ!3°jÑ!@ÈÐW\ÐbeÐlpÔqˆFØÐ-¨}Ð<Ð<r;   )rV  rF  ÚlayoutrH  )Úoperatorr5  r¯   r6  rè  rø  rb  r(  r3   Ú
sparse_csrÚ
sparse_bsrÚmapr  rP  r·   ró   ÚreshapeÚsparse_compressed_tensor)r³   rV  r!  rI  rH  rF  rG  r2  r3  r5  r6  Ú
sparse_dimÚ
blocksize0Ú
blocksize1rH  Úbatch_shapeÚn_batchrA  rB  Úblocknnzrp   Úsparse_tensorsÚsparse_tensors_itrQ  rC  rD  rF  s   ``  ````                  @r:   ÚgenSparseCompressedTensorz"TestCase.genSparseCompressedTensor³  s‡  þ€ Ý Ý$Øˆ
ÜÓ9¬¬c°$«iÓ(8Ô9Ô9¸SÀAºXÐZÐGZÓZÐEÜ�4‹y˜JÒ&Ð&Ð&ÙÜ�y“> QÒ&Ð9¨¨yÐ(9Ó9Ð&Ø˜˜Z™Ñ(¨9°Q©<Ñ7¸1Ò<ÐO¸tÀYÐ>OÓOÐ<Ø˜˜Z™Ñ(¨9°Q©<Ñ7¸1Ò<ÐO¸tÀYÐ>OÓOÐ<Ø%.Ñ"ˆJ™
à&'Ð'ˆJ˜ä�T‹{ˆØœ3˜t›9 zÑ1Ð3Ð4ˆ
÷
	=ñ 
	=ð Ð+˜B ™OÐ,ˆÙ˜˜k¨1Ó-ˆà”e×&Ñ&¬×(8Ñ(8Ð9Ñ9Ø.2°2¸
±?Ñ.CÀzÑ.QÐSWÐXZÐ]gÑXgÑShÐlvÑSv˜|Ñà.2°2¸
±?Ñ.CÀzÑ.QÐSWÐXZÐ]gÑXgÑShÐlvÑSv˜|ÐØ˜:¨
Ñ2Ñ3ˆÜglÐmtÓguÖvÐbcÑ2Ð3DÀlÐT\Õ]ÐvˆÐvÜ¤¤c¨>Ð&:Ó;Ðà=”—‘œTÐ"3Ó4Ó5×=Ñ=Ðn¸{ÐnÈHÐnÐW`ÐnÐcmÒnˆØIœUŸ[™[¬Ð.?Ó)@ÓA×IÑIÐ[È;Ð[ÐXZÒ[ÐØDœŸ™¤DÐ):Ó$;Ó<×DÑDÐVÀkÐVÐSUÒVˆÜ×-Ñ-Ð.@À-Ø.4¸4ÀuÐU[Ðdjôlð 	lùò ws   ÅH$)r3  c          
      óP   — | j                  ||t        j                  |||d|¬«      S )NrB   ©rI  rH  rF  rG  r2  r3  )rX  r3   rK  ©r³   rV  r!  rH  rF  rG  r3  s          r:   ÚgenSparseCSRTensorzTestCase.genSparseCSRTensorá  s6   € Ø×-Ñ-¨d°CÄ×@PÑ@PÐY_Ø49À{Ð^`Ðmwð .ó yð 	yr;   c          
      óP   — | j                  ||t        j                  |||dd¬«      S )NrB   r   rZ  )rX  r3   Ú
sparse_cscr[  s          r:   ÚgenSparseCSCTensorzTestCase.genSparseCSCTensorå  s6   € Ø×-Ñ-¨d°CÄ×@PÑ@PÐY_Ø49À{Ð^`Ðmnð .ó pð 	pr;   c          
      óp   — t        |«      dk(  sJ ‚| j                  ||t        j                  |||||¬«      S ©Nrµ   rZ  )rb  rX  r3   rL  ©r³   rV  r2  r!  rH  rF  rG  r3  s           r:   ÚgenSparseBSRTensorzTestCase.genSparseBSRTensoré  óH   € Ü�9‹~ Ò"Ð"Ð"Ø×-Ñ-¨d°CÄ×@PÑ@PÐY_Ø49À{Ð^gÐt~ð .ó @ð 	@r;   c          
      óp   — t        |«      dk(  sJ ‚| j                  ||t        j                  |||||¬«      S ra  )rb  rX  r3   Ú
sparse_bscrb  s           r:   ÚgenSparseBSCTensorzTestCase.genSparseBSCTensorî  rd  r;   c                 ó\  ‡— t        ˆfd„t        |«      D «       «      s|dk(  sJ d«       ‚|gt        ‰|d  «      z   }t        |||dd¬«      }t	        j
                  |||¬«      }	|	j                  t	        j                  ‰d | «      j                  d«      j                  |	«      «       |	j                  t        j                  «      }	|r9|	d d …d |dz  …d	f   }
|	d d …d |dz   dz  …d	f   }t	        j                  |
|gd«      }	t	        j                  |	|t	        j                  ‰«      ||¬
«      }|s|j                  «       }n-|j                  «       j!                  «       j#                  d«      }||j%                  «       j!                  «       |j'                  «       j!                  «       fS )Nc              3   ó.   •K  — | ]  }‰|   d kD  –— Œ y­wr8  rB   r9  s     €r:   r¤   z+TestCase.genSparseTensor.<locals>.<genexpr>ö  s   øè ø€ Ò: 1�4˜‘7˜Q•;Ñ:ùrÖ  r   r:  ra  r_  r=  ry  rµ   .r0  F)rè  rø  r  r&   r3   ÚrandÚmul_rg  Ú	unsqueezerQ  ÚlongÚcatÚsparse_coo_tensorÚSizeÚcoalesceÚdetachÚcloneÚ_coalesced_Ú_indicesÚ_values)r³   rV  rP  r!  Úis_uncoalescedrH  rF  Úv_sizerS  rÙ   Úi1Úi2rØ   s    `           r:   ÚgenSparseTensorzTestCase.genSparseTensoró  su  ø€ ô Ó:¬¨jÓ(9Ô:Ô:¸cÀQºhÐ[ÐH[Ó[ÐFà�œ˜d : ;Ð/Ó0Ñ0ˆÜ˜ v°UÀÈÔKˆÜ�J‰J�z 3¨vÔ6ˆØ	�‰Œu�|‰|˜D  *Ð-Ó.×8Ñ8¸Ó;×>Ñ>¸qÓAÔBØ�D‰D”—‘ÓˆÙØ’1�k˜˜q™�k 3Ð&Ñ'ˆBØ’1Ð'˜˜q™ Q™Ð'¨Ð,Ñ-ˆBÜ—	‘	˜2˜r˜( AÓ&ˆAÜ×#Ñ# A q¬%¯*©*°TÓ*:À%ÐPVÔWˆáØ—
‘
“‰Að —‘“
× Ñ Ó"×.Ñ.¨uÓ5ˆAØ�!—*‘*“,×$Ñ$Ó&¨¯	©	«×(9Ñ(9Ó(;Ð;Ð;r;   c              #   óØ  ‡ ‡'‡(‡)‡*‡+K  — |€t         j                  }|t         j                  t         j                  t         j                  t         j
                  hv }|�r‰ j                  ||||||||	|
||d¬«      D ]æ  \  }}|rt        d„ |D «       «      }|t         j                  u rdt        |«      dk(  sJ ‚|j                  dd«      }|€J ‚|r%|d   j                  |«      j                  «       –— Œy|d   j                  |«      –— Œ�|t         j                  u rt        j                  |i |¤Ž–— Œº|r*|j                  |¬«       t        j                   |i |¤Ž–— ŒæJ ‚ yd	„ Š)d
„ Š*ˆ)ˆ*fd„Š+ˆ(ˆ+fd„Š(ˆ'fd„Š'|€{g d¢g d¢gddgg d¢fg d¢g d¢gg d¢g d¢gg d¢g d¢ggg d¢g d¢gg d¢g d¢gg d¢g d¢gggddgddgfg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d ¢gdgdd!gfdd"gd#d$ggddgddgggd%g|rdgng fg}d4ˆ fd'„	}|D �]˜  \  }}}|s|D �cg c]  }|rŒ|‘Œ	 }}|r|sŒ!t        j"                  |t         j                  ¬(«      }|s|j$                  d"kD  rŒX|D �];  } ‰(||«      |   }|D �]&  }|dd& D �cg c]  }|j'                  ||¬)«      ‘Œ }} ‰'|d&   |«      j'                  ||¬)«      }t)        |||j*                  |z   ¬*«      }|�|j                  |¬+«       g |¢|‘­|j-                  «       f–— |
rq|j$                  d"kD  rbd,D ]]  \  }}|D �cg c]  } ||||¬-«      ‘Œ } }g | ¢|‘­|j-                  «       f–— |sŒ: ||d&d¬-«      }!g | ¢|!‘­|j-                  «       f–— Œ_ |s�Œ ||d&d¬-«      }!g |¢|!‘­|j-                  «       f–— �Œ) �Œ> �Œ› |	�rºd.d/g|rg d0¢ndgfd1g d2¢dgfd3d/gdgffD �]š  \  }"}}|D �]�  }|D �]„  }|t         j                  k(  rd}t        j.                  |"|z   ||¬)«      }�n|t         j                  k(  rAt        j.                  t        |"«      d||¬)«      f}t        j.                  dg|¢­||¬)«      }�nË|t         j                  k(  r\t        j"                  dg|"d   dz   z  ||¬)«      }#t        j.                  d||¬)«      }$|#|$f}t        j.                  dg|¢­||¬)«      }�n\|t         j                  k(  r[t        j"                  dg|"d   dz   z  ||¬)«      }%t        j.                  d||¬)«      }&|%|&f}t        j.                  dg|¢­||¬)«      }nî|t         j                  k(  rct        j"                  dg|"d   |d   z  dz   z  ||¬)«      }#t        j.                  d||¬)«      }$|#|$f}t        j.                  dg|¢|¢­||¬)«      }nx|t         j
                  k(  rct        j"                  dg|"d   |d   z  dz   z  ||¬)«      }%t        j.                  d||¬)«      }&|%|&f}t        j.                  dg|¢|¢­||¬)«      }nJ ‚t)        |||"|z   ¬*«      }|�|j                  |¬+«       g |¢|‘­|f–— �Œ‡ �Œ� �Œ� yyc c}w c c}w c c}w ­w)5aþ  Generator of simple inputs for tensor constructors of the given layout.

        The generated tensor inputs have the following properties:

        - tensor shapes are minimal but not trivial
        - tensor values are sorted sequences for COO and CSR formats, e.g. [1, 2, 3, 4]
        - the generated tensors represent the same mathematical tensor for all layouts
        - the generated tensors include regular, zero-sized, and optionally, batched or/and hybrid tensors.
        - the generated tensors include contiguous or non-contiguous tensors both in indices and values

        If output_tensor is True, yield tensors with the given
        layout. Otherwise, yield inputs to the corresponding tensor
        constructors:

          - sparse compressed input is defined as
            (compressed_indices, plain_indices, values), dict(size=expected_size_from_shape_inference, device=device, dtype=dtype,
                                                              pin_memory=pin_memory)

          - sparse COO input is defined as
            (indices, values), dict(size=expected_size_from_shape_inference, device=device, dtype=dtype, pin_memory=pin_memory)

          - strided input is defined as
            (values,), dict(device=device, dtype=dtype)
        NF)rH  rF  rG  Ú
pin_memoryÚenable_batchÚenable_hybridÚenable_zero_sizedÚenable_non_contiguous_indicesÚenable_non_contiguous_valuesÚenable_batch_variable_nseÚoutput_tensorc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr2   ©r}  )r£   rR  s     r:   r¤   z2TestCase.generate_simple_inputs.<locals>.<genexpr>D  s   è ø€ Ò >°A §¡§Ñ >ùs   ‚r_  rV  r   )rI  c                 ó¨  — | j                   }|d   |d   z  dk(  s	J ||f«       ‚|d   |d   z  dk(  s	J ||f«       ‚| j                  d|d   |d   |d   z  |d   «      j                  dd«      j                  d«      j                  d«      }t	        j
                  d|j                  «       dz   «      j                  |j                   «      }|dk7  |z  S )Nr   r_  ra  éýÿÿÿrì  )ÚshaperN  Ú	transposeré  r3   r  r  )Úpatternr2  ÚbasesizeÚblockpatternÚ	block_idss        r:   Úget_blockpatternz9TestCase.generate_simple_inputs.<locals>.get_blockpatternV  sê   € Ø—}‘}ˆHØ˜A‘; ¨1¡Ñ-°Ò2ÐI°X¸yÐ4IÓIÐ2Ø˜A‘; ¨1¡Ñ-°Ò2ÐI°X¸yÐ4IÓIÐ2Ø"Ÿ?™?¨2Ø+4°Q©<Ø+3°A©;¸)ÀA¹,Ñ+FØ+4°Q©<ó9÷ :C¹À2ÀrÓ9JÏ3É3ÈrË7×SVÑSVÐWYÓSZð ô Ÿ™ Q¨×(:Ñ(:Ó(<¸qÑ(@ÓA×IÑIÈ,×J\ÑJ\Ó]ˆIØ  AÑ%¨Ñ2Ð2r;   c                 ó  — | j                   }t        |«      dk(  sJ |«       ‚t        j                  | dk7  «      }t        j                  |«      }t        j
                  |d   dz   t        j                  ¬«      }t        j                  |d   j                  |d   ¬«      d«      |dd  |d   }t        j
                  |t        j                  ¬«      }t        j                  ddt        |d   «      z   t        j                  ¬«      }|||<   t        j                  | j                  dd«      dk7  «      }t        j                  |«      }	t        j
                  |d   dz   t        j                  ¬«      }
t        j                  |	d   j                  |d   ¬«      d«      |
dd  |	d   }|j                  dd«      |   }t        j                  ||ft        j                  |||ft        j                  |
||ft        j                  |fiS )Nrµ   r   r_  ©rF  )Ú	minlength)r‰  rb  r3   Úwherer·   r  r  ÚcumsumÚbincountr  rŠ  Ú
sparse_coorK  r^  Ústrided)r‹  rŒ  ÚindicesÚcoo_indicesr0  Úcol_indicesÚstrided_valuesrQ  Ú	indices_TÚcoo_indices_TÚccol_indicesÚrow_indicesÚ
csc_valuess                r:   Úget_sparse_dataz8TestCase.generate_simple_inputs.<locals>.get_sparse_dataa  sÂ  € Ø—}‘}ˆHÜ�x“= AÒ%Ð/ xÓ/Ð%ô —k‘k '¨Q¡,Ó/ˆGÜŸ+™+ gÓ.ˆKÜ Ÿ;™; x°¡{°Q¡¼e¿k¹kÔJˆLÜ$Ÿ|™|¨K¸©N×,CÑ,CÈhÐWXÉkÐ,CÓ,ZÐ\]Ó^ˆL˜˜ÐØ% a™.ˆKÜ"Ÿ[™[¨¼¿¹ÔEˆNô
 —\‘\ ! Q¬¨W°Q©Z«Ñ%8ÄÇÁÔLˆFØ&,ˆN˜7Ñ#äŸ™ G×$5Ñ$5°a¸Ó$;¸qÑ$@ÓAˆIÜ!ŸK™K¨	Ó2ˆMÜ Ÿ;™; x°¡{°Q¡¼e¿k¹kÔJˆLÜ$Ÿ|™|¨M¸!Ñ,<×,EÑ,EÐPXÐYZÑP[Ð,EÓ,\Ð^_Ó`ˆL˜˜ÐØ'¨Ñ*ˆKØ'×1Ñ1°!°QÓ7¸	ÑBˆJä×$Ñ$ {°FÐ&;Ü×$Ñ$ |°[À&Ð&IÜ×$Ñ$ |°[À*Ð&MÜ—M‘M NÐ#4ð6ð 6r;   c                 ó<  •—  ‰| «      } ‰| |«      } ‰|«      }|t         j                     d   }|t         j                     d   }t        j                  |j	                  dd«      D ��cg c].  \  }}|||d   z  |dz   |d   z  …||d   z  |dz   |d   z  …f   ‘Œ0 c}}«      }	|	|t         j
                     d   dz
     }
t         j                  g |t         j                     d d ¢|	‘­t         j                  g |t         j
                     d d ¢|
‘­i|¥S c c}}w )Nr   r_  rµ   )	r3   r—  r–  r·   rŠ  r^  rL  rK  rf  )r‹  r2  Únonblock_datar�  Ú
block_datar›  Úblock_indicesÚbiÚbjÚ
bsr_valuesÚ
bsc_valuesr�  r¡  s              €€r:   Úget_sparse_data_with_blockzCTestCase.generate_simple_inputs.<locals>.get_sparse_data_with_block…  sY  ø€ Ù+¨GÓ4ˆMÙ+¨G°YÓ?ˆLÙ(¨Ó6ˆJà*¬5¯=©=Ñ9¸!Ñ<ˆNØ&¤u×'7Ñ'7Ñ8¸Ñ;ˆMÜŸ™à4A×4KÑ4KÈAÈqÓ4Q÷&Sá*0¨"¨bð '5°R¸)ÀA¹,Ñ5FÈÈQÉÐR[Ð\]ÑR^ÑG^Ð5^Ø57¸)ÀA¹,Ñ5FÈÈQÉÐR[Ð\]ÑR^ÑG^Ð5^ð6_ó '`ó &Só TˆJð $ J¬u×/?Ñ/?Ñ$@ÀÑ$CÀaÑ$GÑHˆJä×$Ñ$Ð&U¨
´5×3CÑ3CÑ(DÀRÀaÐ(HÐ&UÈ*Ñ&UÜ×$Ñ$Ð&U¨
´5×3CÑ3CÑ(DÀRÀaÐ(HÐ&UÈ*Ñ&Uð%à#ð%ð %ùó&Ss   Á+3D
c                 ó‚  •‡
— | j                   }t        |«      dk  r	 ‰| |«      S i }t        | «      D �]ˆ  \  }} ‰||«      j                  «       D �]g  \  }Š
|j	                  |«      }|t
        j                  u r¸t        j                  t        j                  dt        ‰
d   «      f|t
        j                  ¬«      ‰
d   f«      }|€|‰
d   fx}||<   Œ…|d   j                  t        j                  |d   |fd«      «       |d   j                  t        j                  |d   ‰
d   f«      «       Œâ|€-t        ˆ
fd„t        t        ‰
«      «      D «       «      x}||<   �Œt        t        ‰
«      «      D ]@  }	||	   j                  t        j                  ||	   ‰
|	   j                  d«      f«      «       ŒB �Œj �Œ‹ |S )Nrµ   r_  r‘  r   c              3   óF   •K  — | ]  }‰|   j                  d «      –— Œ y­wr8  )rl  )r£   Újr©  s     €r:   r¤   zQTestCase.generate_simple_inputs.<locals>.get_batch_sparse_data.<locals>.<genexpr>¯  s   øè ø€ Ò?iÐVWÀÀ!ÁÇÁÈq×@QÑ?iùs   ƒ!)r‰  rb  rÜ   ra   r¢  r3   r–  rn  Úfullr  Úset_r(  rø  rl  )r‹  r2  rV  Ú
batch_datarÙ   r8  rI  r»  Úext_coo_indices1r­  r©  Úget_batch_sparse_datarª  s             @€€r:   r²  z>TestCase.generate_simple_inputs.<locals>.get_batch_sparse_data™  sª  ù€ Ø—=‘=ˆDÜ�4‹y˜AŠ~Ù1°'¸9ÓEÐEð ˆJÜ$ WÓ-ó Z‘��4Ù!6°t¸YÓ!G×!MÑ!MÓ!Oó Z‘I�F˜AØ'Ÿ^™^¨FÓ3�FØ¤×!1Ñ!1Ñ1ô ,1¯9©9´e·j±jÀ!ÄSÈÈ1ÉÃYÀÐQRÔZ_×ZeÑZeÔ6fÐhiÐjkÑhlÐ5mÓ+nÐ(Ø!˜>Ø;KÈQÈqÉTÐ:RÐR˜F Z°Ò%7à" 1™IŸN™N¬5¯9©9°f¸Q±iÐAQÐ5RÐTUÓ+VÔWØ" 1™IŸN™N¬5¯9©9°f¸Q±iÀÀ1ÁÐ5FÓ+GÕHà!˜>Ü:?Ó?iÔ[`ÔadÐefÓagÓ[hÔ?iÓ:iÐi˜F Z°Ó%7ä%*¬3¨q«6£]ò Z Ø & q¡	§¡¬u¯y©y¸&À¹)ÀQÀqÁTÇ^Á^ÐTUÓEVÐ9WÓ/XÕ YòZò!ZðZð& Ðr;   c           	      ó  •— |s| S t        | t        «      s9| j                  dkD  r*t        j                  | D �cg c]  } ‰||«      ‘Œ c}«      S | dk(  r%t        j
                  |t        j                  ¬«      S t        j                  |d   t        j                  ¬«      }t        |dd «      D ]>  \  }}t        j                  |t        j                  ¬«      d|dz   z  z  }|d   |d   z   }Œ@ |j                  | «       |S c c}w )aq  Generates a tensor of shape densesize with values equal to

              base + i_1 * 10^0 + ... + i_d * 10^{d - 1}

            at indices i_1, ..., i_d (with 0 <= i_j < densesize[j] for any 1 <= j <=
            len(densesize))

            This mapping produces unique values as long as
            densesize[i] < 10 for all i in range(len(densesize)).
            r   r‘  r_  NrÂ  ).N)N.)
rº   r…   Úndimr3   r·   r  r  r  rÜ   Úadd_)ÚbaseÚ	densesizeÚbrê  rÙ   r©  ÚyÚgenerate_valuess          €r:   rº  z8TestCase.generate_simple_inputs.<locals>.generate_valuesµ  sß   ø€ ñ Ø�Ü˜d¤CÔ(¨T¯Y©Y¸ª]Ü—{‘{È4Ö#PÀa¡O°A°yÕ$AÒ#PÓQÐQØ�qŠyÜ—{‘{ 9´E·K±KÔ@Ð@Ü—‘˜Y q™\´·±Ô=ˆAÜ! )¨A¨B -Ó0ò 0‘��1Ü—L‘L ¬%¯+©+Ô6¸"ÀÀQÁ¹-ÑH�Ø�i‘L 1 Y¡<Ñ/‘ð0ð �F‰F�4ŒLØˆHùò $Qs   ¸D)r_  rµ   r   )r_  r   r|  ©rµ   r_  )r_  r|  )rB   ©rµ   ©rê   rÄ  )r_  rµ   r|  )r_  r   r   )r   rµ   r   ©rµ   r|  rB   r¼  )r   r_  r   rµ   r   rµ   )r   r_  r   r   rµ   r   )r|  r|  r|  r   r   r   )r   r   r   r   r   r   )r   rÄ  r   é   r¿  r¿  )rÄ  r   rÄ  r¿  r¿  r¿  )r   r   r   r   r  r  )é   rÀ  rÀ  r   r  r  r½  rµ   r|  rê   )r_  r_  ra  c                 ó@  •— ‰j                  | j                  «       «       |dk  r|| j                  z   }|dk\  r|| j                  k  sJ ‚t        d|dz   «      }t	        j
                  g | j                  d | ¢| j                  |   |z  ‘| j                  |dz   d  ¢­| j                  | j                  ¬«      }g t        d «      f|z  ¢t        |d |«      ‘­}||   j                  | «      }‰j                  |j                  «       «       ‰j                  | |«       |S )Nr   rµ   r_  r0  )Ú
assertTrueÚis_contiguousr´  r  r3   r  r‰  rF  rH  ÚslicerW  ÚassertFalserA  )rY  rm  ÚoffsetÚstepÚtmpÚ
dim_slicesrê  r³   s          €r:   Únon_contiguous_copyz<TestCase.generate_simple_inputs.<locals>.non_contiguous_copy  s  ø€ ð �O‰O˜AŸO™OÓ-Ô.Ø�QŠwØ˜AŸF™F‘l�Ø˜!’8  a§f¡f¢Ð,Ð,Ü�q˜& 1™*Ó%ˆDÜ—+‘+ÐW §¡¨¨ ÐW¨q¯w©w°s©|¸dÑ/BÐWÀQÇWÁWÈSÐSTÉWÈXÐEVÑWÐ_`×_fÑ_fÐop×owÑowÔxˆCØMœU 4›[˜N¨SÑ0ÐM´5¸ÀÀtÓ3LÑMˆJØ�J‘×%Ñ% aÓ(ˆAØ×Ñ˜QŸ_™_Ó.Ô/Ø×Ñ˜Q Ô"ØˆHr;   r‘  r<  )rH  rF  rV  r†  >   ©r   r_  ©rì  r   )rm  rÆ  )rµ   r   ©r_  rµ   )rB   r¼  r¾  )r   rµ   )rÍ  r»  )r|  rµ   )r   r   )ra  r   )r3   r  rK  r^  rL  rf  Úgenerate_simple_inputsr(  r—  rb  r¹  rN  r}  r–  ro  ÚupdaterO  rg  r´  rQ  rf   r‰  rJ  Úempty),r³   rI  rH  rF  rG  r}  Úmembers_pin_memoryr~  r  r€  r�  r‚  rƒ  r„  ÚpatternsÚis_compressed_sparse_layoutr8   r9   rV  rÊ  r‹  Ú
blocksizesÚ
densesizesrB  r2  Údatar·  rR  r˜  rQ  rm  rÆ  Úindices_copyÚvalues_copyrŒ  r0  rš  rž  rŸ  rº  r²  r�  r¡  rª  s,   `                                      @@@@@r:   rÎ  zTestCase.generate_simple_inputs  sn  ýè ø€ ðL ÐÜŸ+™+ˆKà&,´×1AÑ1AÄ5×CSÑCSÔUZ×UeÑUeÔgl×gwÑgwÐ0xÐ&xÐ#âØ $× ;Ñ ;¸FÈ6ÐY^ÐlwØGQØIUÐerØN_ØZwØYuØVoØJOð !<ó !Qò ‘��fñ &Ü Ñ >¸Ô >Ó>�DØœUŸ]™]Ñ*Ü˜t›9¨š>Ð)˜>Ø!Ÿ:™: f¨dÓ3�DØÐ+Ð+Ð+Ù!Ø" 1™gŸo™o¨dÓ3×>Ñ>Ó@Ó@à" 1™gŸo™o¨dÓ3Ó3Øœu×/Ñ/Ñ/Ü×1Ñ1°4ÐB¸6ÑBÓBÙ0Ø—M‘M¨�MÔ0Ü×8Ñ8¸$ÐIÀ&ÑIÓIà˜1ð1ð2 ò		3ò"	6õH	%õ(	ô8	ð2 Ðò4 ÚðØ% vÐ.Ò0BðDò ÚðâÚðâÚðð	 ò ÚðâÚðâÚðð	 ð!ð $*¨6Ð"2°R¸°Jð@ò %Ú$Ú$Ú$Ú$Ú$Ú$Ú$ð&ð )/ x°"°f°ð?ð �q�6Ø�q�6ðà�q�6Ø�q�6ððð %˜XÑ0I¨©ÈrðTð9UˆHõB	ð  08ó 	EÑ+ˆG�Z Ù Ø)3Ö= Aº1šaÐ=�
Ð=Ù¡:ØÜ—l‘l 7´%·+±+Ô>ˆGÙ G§L¡L°1Ò$4ØØ'ó E�	Ù,¨W°iÓ@ÀÑH�Ø!+ó E�IØOSÐTWÐUWÈyÖYÈ!˜qŸt™t¨6¸˜tÕEÐY�GÐYÙ,¨T°"©X°yÓA×DÑDÈFÐZ_ÐDÓ`�FÜ!¨°uÀ7Ç=Á=ÐS\ÑC\Ô]�FØ!Ð-ØŸ™°˜Ô<à,˜GÐ, VÑ,¨f¯k©k«mÐ;Ò;Ù4¸¿¹ÈÒ9Ià->ò R™M˜S &ØdkÖ+lÐ_`Ñ,?ÀÀsÐSYÖ,ZÐ+l˜LÐ+lØ"9 LÐ"9°&Ñ"9¸6¿;¹;»=Ð"HÒHâ;Ù.AÀ&ÈbÐYZÔ.[ Ø&B¨Ð&B°kÑ&BÀFÇKÁKÃMÐ&QÓ QðRó 4Ù&9¸&ÀbÐQRÔ&S˜Ø5 Ð5¨Ñ5°v·{±{³}ÐDÔDò)EòEð	EòB à˜f˜X¹]Ó'9ÐQSÐPTÐUØÒ5¸°tÐ<Ø˜f˜X¨ tÐ,ð5ó &9Ñ0�˜* jð
 ",ó !9�IØ%/ó  9˜	Ø!¤U§]¡]Ò2Ø&(˜GÜ%*§[¡[°(¸YÑ2FÐPVÐ^cÔ%dšFØ#¤u×'7Ñ'7Ò7Ü',§{¡{´3°x³=À!ÈFÐZeÔ'fÐ&h˜GÜ%*§[¡[°!°°i±ÈÐW\Ô%]šFØ#¤u×'7Ñ'7Ò7Ü+0¯<©<¸¸¸xÈ¹{ÈQ¹Ñ8OÐX^ÐfqÔ+r˜LÜ*/¯+©+°aÀÈkÔ*Z˜KØ'3°[Ð&A˜GÜ%*§[¡[°!°°i±ÈÐW\Ô%]šFØ#¤u×'7Ñ'7Ò7Ü+0¯<©<¸¸¸xÈ¹{ÈQ¹Ñ8OÐX^ÐfqÔ+r˜LÜ*/¯+©+°aÀÈkÔ*Z˜KØ'3°[Ð&A˜GÜ%*§[¡[°!°°i±ÈÐW\Ô%]™FØ#¤u×'7Ñ'7Ò7Ü+0¯<©<¸¸¸xÈ¹{ÈiÐXYÉlÑ?ZÐ]^Ñ?^Ñ8_Ðhnð  wBô  ,C˜LÜ*/¯+©+°aÀÈkÔ*Z˜KØ'3°[Ð&A˜GÜ%*§[¡[°!Ð1L°iÐ1LÀ)Ñ1LÐU[ÐchÔ%i™FØ#¤u×'7Ñ'7Ò7Ü+0¯<©<¸¸¸xÈ¹{ÈiÐXYÉlÑ?ZÐ]^Ñ?^Ñ8_Ðhnð  wBô  ,C˜LÜ*/¯+©+°aÀÈkÔ*Z˜KØ'3°[Ð&A˜GÜ%*§[¡[°!Ð1L°iÐ1LÀ)Ñ1LÐU[ÐchÔ%i™Fà$ 1Ü!%¨V¸5ÀxÐR[ÑG[Ô!\˜Ø%Ð1Ø"ŸM™M°Z˜MÔ@Ø0 Ð0¨Ñ0°&Ð8Ô8òA 9ò!9ñ&9ð ùò? >ùò Zùò ,mùs?   ˆHY*ÈYÈYÈAY*É8Y 
ÊBY*ÌY%Ì(Y*Í(Y*Í0K:Y*c                 ó|   — |j                   t        j                  k(  r|j                  «       }|j	                  «       S r2   )rI  r3   r–  rq  Úto_dense)r³   rY  s     r:   ÚsafeToDensezTestCase.safeToDensea  s+   € à�8‰8”u×'Ñ'Ò'Ø—
‘
“ˆAØ�z‰z‹|Ðr;   c                 ó  — |j                  «       }|j                  |j                  |j                  }}}|j                  |j                  |j                  }}
}	 ||	g|
¢­i |¤Ž} ||g|¢­i |¤Ž} | j                  ||fddi|¤Ž y )NÚexact_deviceF)r°  r  r8   r9   rA  )r³   Útorch_fnÚref_fnÚsample_inputr9   Únumpy_sampleÚn_inpÚn_argsÚn_kwargsÚt_inpÚt_argsÚt_kwargsrD  rÿ  s                 r:   Úcompare_with_referencezTestCase.compare_with_referencei  s’   € Ø#×)Ñ)Ó+ˆØ".×"4Ñ"4°l×6GÑ6GÈ×I\ÑI\�xˆvˆØ".×"4Ñ"4°l×6GÑ6GÈ×I\ÑI\�xˆvˆá˜%Ð5 &Ò5¨HÑ5ˆÙ˜%Ð5 &Ò5¨HÑ5ˆàˆ×Ñ˜ ÑH¸ÐHÀÓHr;   c                 óø  — t         sJ ‚t        |t        j                  «      re|�J ‚|�J ‚|j	                  «       j                  «       }|j                  t        j                  u r|j                  «       }|j                  «       }|}	nlt        j                  t        «      }
t        j                  |
t        j                  <   t        j                  ||
|   ¬«      }t        j                  |||¬«      }	 ||«      } ||	«      j                  «       }t        |t        j                   «      r‰	 t        j"                  |«      }|	j                  t        j                  u rW|j                  t        j                  u r;|j                  t        j                  u r|j'                  t        j                  «      } | j(                  ||fi |¤Ž y # t$        $ r& t        j"                  |j                  «       «      }Y Œ¶w xY w)Nr‘  r<  )r  rº   r3   r   rr  r•   rF  Úbfloat16rK  r°  rJ  Útorch_to_numpy_dtype_dictrõ  r  r  rg  rù  r  rÁ   rQ  rA  )r³   rÞ  Únp_fnÚtensor_likerH  rF  r9   Út_cpurR  rY  r©  Ú	np_resultÚtorch_results                r:   Úcompare_with_numpyzTestCase.compare_with_numpyx  s~  € åÐˆzä�k¤5§<¡<Ô0Ø�>Ð!�>Ø�=Ð �=Ø×&Ñ&Ó(×,Ñ,Ó.ˆEØ�{‰{œeŸn™nÑ,ØŸ™›�Ø—‘“ˆAØ‰Aä—	‘	Ô3Ó4ˆAÜ "§
¡
ˆAŒe�n‰nÑÜ—‘˜¨A¨e©HÔ5ˆAÜ—‘˜[°¸uÔEˆAá˜!“Hˆ	Ù “{—‘Ó(ˆô �i¤§¡Ô,ð?Ü!×,Ñ,¨YÓ7�	ð
 �w‰wœ%Ÿ.™.Ñ(¨\×-?Ñ-?Ä5Ç>Á>Ñ-QÐV_×VeÑVeÔin×itÑitÑVtØ+Ÿ™¬u¯{©{Ó;�àˆ×Ñ˜ LÑ;°FÓ;øô ò ?ô "×,Ñ,¨Y¯^©^Ó-=Ó>’	ð?ús   Ä-G
 Ç
,G9Ç8G9c                 ó*   —  | j                   |ddi|¤ŽS )NÚexact_dtypeF)rA  )r³   r8   r9   s      r:   ÚassertEqualIgnoreTypezTestCase.assertEqualIgnoreTypeš  s!   € ð  ˆt×Ñ ÐC°5ÐC¸FÑCÐCr;   c                 ó
  — t        |t        «      st        j                  |«      |z  }t        |t        j                  «      s+t        j                  |«      t        j
                  |«      z  } | j                  ||g|¢­i |¤ŽS )zHTests if tensor x equals to y, if y to be broadcast to x.shape.
        )rº   r   r3   Ú	ones_liker   rg  rA  )r³   rØ   r¹  r8   r9   s        r:   ÚassertEqualBroadcastingz TestCase.assertEqualBroadcastingŸ  si   € ô ˜!œXÔ&ä—‘ Ó" QÑ&ˆAÜ˜!œUŸ\™\Ô*ä—‘ Ó"¤U§\¡\°!£_Ñ4ˆAØˆt×Ñ  1Ð6 tÒ6¨vÑ6Ð6r;   )r  r  Ú	equal_nanró  rÝ  Úexact_layoutÚexact_strideÚexact_is_coalescedr
  r  r  c                ó  ‡— d}t        d„ ||fD «       «      rd„ } ||«      } ||«      }n­t        |t        j                  «      r=t        |t        «      r-t        j
                  ||j                  |j                  ¬«      }nVt        |t        «      rFt        |t        j                  «      r,t        j
                  ||j                  |j                  ¬«      }t        |t        j                  «      r9|j                  r-|j                  t        j                  k(  r|j                  «       }t        |t        j                  «      r9|j                  r-|j                  t        j                  k(  r|j                  «       }t        ||t        t        t        t         t"        t$        t&        t(        t*        f	t        t,        t.        t0        t2        t        j4                  j6                  j8                  j:                  ft<        t>        t@        tB        f|| jD                  || jF                  ||||	|
|¬«      }|rJ|g}|jI                  «       d   jK                  t        ‰tL        «      r| jN                  r	ˆfd„«      ‚‰«      ‚y )NTc              3   ó€   K  — | ]6  }t        |t        j                  «      xr t        |j                  «       –— Œ8 y ­wr2   )rº   rõ  rù  r\  rF  )r£   r  s     r:   r¤   z'TestCase.assertEqual.<locals>.<genexpr>Á  s8   è ø€ ò 
ØafŒJ�uœbŸj™jÓ)Ò\Ô2OÐPU×P[ÑP[Ó2\Ð.\Ó\ñ
ùs   ‚<>c                 óŒ   — t        | t        j                  t        j                  f«      r| j                  «       S t        | «      S r2   )rº   r3   r   rõ  rù  Útolistr  ©r  s    r:   Úto_listz%TestCase.assertEqual.<locals>.to_listÄ  s0   € Ü)3°E¼E¿L¹LÌ"Ï*É*Ð;UÔ)V�u—|‘|“~ÐgÔ\`ÐafÓ\gÐgr;   r0  )Ú
pair_typesÚsequence_typesÚmapping_typesr  r  r  r  rø  Úcheck_devicer  Úcheck_layoutÚcheck_strideÚcheck_is_coalescedr   c                 ó   •— | › d‰› �S )Nr¬  rB   )Úgenerated_msgr
  s    €r:   rE   z&TestCase.assertEqual.<locals>.<lambda>  s   ø€ ¨-¨¸¸3¸%Ð'@€ r;   )(ré  rº   r3   r   r   Ú	as_tensorrF  rH  Ú	is_nestedrI  r—  Úunbindr,   r(   rõ  r  r   r+  rI  rM  rO  rQ  r"   r   r!   r   rÅ  rÖ  ÚdatasetÚSubsetr   r   r    r   rs  rm  r¹  Úto_errorri   ÚlongMessage)r³   rØ   r¹  r
  r  r  rø  ró  rÝ  rù  rú  rû  Ú__tracebackhide__r  Úerror_metass      `           r:   rA  zTestCase.assertEqualª  sö  ø€ ð" !Ðô ñ 
ØklÐnoÐjpô
ô 
òhñ ˜“
ˆAÙ˜“
‰Aô ˜œ5Ÿ<™<Ô(¬Z¸¼8Ô-DÜ—‘ ¨¯©¸¿¹ÔB‰AÜ˜œ8Ô$¬°A´u·|±|Ô)DÜ—‘ ¨¯©¸¿¹ÔBˆAô �aœŸ™Ô&¨1¯;ª;¸1¿8¹8ÄuÇ}Á}Ò;TØ—‘“
ˆAÜ�aœŸ™Ô&¨1¯;ª;¸1¿8¹8ÄuÇ}Á}Ò;TØ—‘“
ˆAä+ØØäÜ"Ü!Ü!Ü ÜÜÜÜð
ô ÜÜÜÜÜ—‘× Ñ ×(Ñ(×/Ñ/ðô #¤J´¼zÐJØØŸ,™,ØØŸ.™.ØØ%Ø#Ø%Ø%Ø1ôA!
ˆñF à&˜-ˆKà—/‘/Ó# AÑ&×/Ñ/ô FPÐPSÔUXÔEYÐ^b×^nÒ^nÓ@ó	ð ð uxó	ð ð	 r;   ©r  r  c                óŒ   — | j                  t        |¬«      5   | j                  |||f||dœ|¤Ž d d d «       y # 1 sw Y   y xY w)Nr5  r  )ÚassertRaisesrC  rA  )r³   rØ   r¹  r
  r  r  r9   s          r:   ÚassertNotEqualzTestCase.assertNotEqual  sN   € à×Ñœ~°3ÐÓ7ñ 	HØˆD×Ñ˜Q  3ÐG¨T¸ÑGÀÒG÷	H÷ 	Hñ 	Hús	   ˜:ºAc                 óè   — | j                  |j                  |j                  «       | j                  |j                  |j                  «       | j                  |j                  |j                  «       y r2   )rA  rH  rF  Ú	is_sparse)r³   rØ   r¹  s      r:   ÚassertEqualTypeStringzTestCase.assertEqualTypeString
  sJ   € à×Ñ˜Ÿ™ 1§8¡8Ô,Ø×Ñ˜Ÿ™ !§'¡'Ô*Ø×Ñ˜Ÿ™ a§k¡kÕ2r;   rX  rs  c                 óX   — |D ]  }t        |«      t        |«      k(  sŒ y  t        d«      ‚)Nzobject not found in iterable)r½   rC  )r³   rX  rs  Úelems       r:   ÚassertObjectInzTestCase.assertObjectIn  s2   € Øò 	ˆDÜ�#‹wœ"˜T›(Ó"Ùð	ô Ð;Ó<Ð<r;   c                 ó”   •— | j                   r"t        || «      }	 |j                  d||«      d }S t        ‰| �  |g|¢­i |¤ŽS # d }w xY w)Nr  )r…  rS  ÚhandlerJ  r  )r³   Úexpected_exceptionr8   r9   ÚcontextrK  s        €r:   r  zTestCase.assertRaises  s]   ø€ Ø×-Ò-ä<Ð=OÐQUÓVð ðØ—~‘~ n°d¸FÓCð ‘ä‘7Ñ'Ð(:ÐL¸TÒLÀVÑLÐLøð ‘ús   ›A ÁAc                 óâ   •— t        | d«      r#| j                  t        vr| j                  dk7  rd}| j                  r t	        || |«      }|j                  d||«      S t        ‰| �  ||g|¢­i |¤ŽS )Nr}  Úmpsr“   ÚassertRaisesRegex)rÒ   r}  ÚNATIVE_DEVICESr…  rS  r  rJ  r$  )r³   r   Úexpected_regexr8   r9   r!  rK  s         €r:   r$  zTestCase.assertRaisesRegex&  s}   ø€ ô �4˜Ô'¨D×,<Ñ,<ÄNÑ,RÐW[×WgÑWgÐkpÒWpàˆNà×-Ò-ÜBØ" D¨.ó:ˆGà—>‘>Ð"5°t¸VÓDÐDä‘7Ñ,Ð-?ÀÐaÐRVÒaÐZ`ÑaÐar;   c                 óh  ‡— d Šˆfd„}t        j                  «       }t        j                  «        	 t        j                  j                  d|«      5   ||i |¤Ž d d d «       |rt        j                  «        	 | j                  ‰«       y # 1 sw Y   Œ2xY w# |rt        j                  «        w w xY w)Nc                 ó
   •— | Šy r2   rB   )Ú
unraisableÚraiseds    €r:   Úrecord_unraisablez6TestCase.assertNoUnraisable.<locals>.record_unraisable@  s   ø€ à‰Fr;   zsys.unraisablehook)r¨   Ú	isenabledr  r»   r-  r.  r  ÚassertIsNone)r³   r•  r8   r9   r+  Úprevr*  s         @r:   ÚassertNoUnraisablezTestCase.assertNoUnraisable=  s�   ø€ Øˆô	 ô �|‰|‹~ˆÜ
�
‰
Œð	Ü—‘×$Ñ$Ð%9Ð;LÓMñ *Ù˜$Ð) &Ò)÷*ñ Ü—	‘	•à×Ñ˜&Õ!÷*ð *ûñ Ü—	‘	•ð ús#   ² B Á	BÁB ÂBÂB ÂB1c                 ó°   — d }d|v r|d   }|d= 	  ||i |¤Ž | j                  d¬«       y # |$ r%}| j                  t        |«      |«       Y d }~y d }~ww xY w)NÚsubnamer©  r5  )ÚassertExpectedri   r«  )r³   r¢  r•  r8   r9   r1  r£  s          r:   ÚassertExpectedRaiseszTestCase.assertExpectedRaisesT  sm   € ØˆØ˜ÑØ˜YÑ'ˆGØ�yÐ!ð	Ù�dÐ%˜fÒ%ð
 	�	‰	Ð6ˆ	Õ7øð	 ò 	Ø×Ñ¤ A£¨Ô0Üûð	ús   �+ «A°AÁAc                 ó  — t        j                  d¬«      5 }t        j                  d«       t        d«      5   |«        ddd«       | j	                  t        |«      dk(  |«       ddd«       y# 1 sw Y   Œ0xY w# 1 sw Y   yxY w)zD
        Test if :attr:`callable` does not raise a warning.
        T©ÚrecordÚalwaysNr   )rd  rF  rG  r^  rÂ  rb  )r³   r•  r
  Úwss       r:   ÚassertNotWarnzTestCase.assertNotWarna  st   € ô ×$Ñ$¨DÔ1ð 	/°RÜ×!Ñ! (Ô+Ü(¨Ó.ñ Ù”
÷à�O‰OœC ›G q™L¨#Ô.÷		/ð 	/÷ð ú÷	/ð 	/ús"   —!A;¸A/Á &A;Á/A8	Á4A;Á;Bc              #   óB  ‡‡K  — t        j                  |«      Št        j                  d¬«      5 }t        j                  d«       t        d«      5  d–— ddd«       t        |«      dk(  r| j                  d«       | j                  t        ˆfd„|D «       «      «       | j                  t        ˆfd„|D «       «      ‰› d	|D �cg c]&  }t        |j                  «      ‰u sŒ|j                  ‘Œ( c}› �«       ddd«       y# 1 sw Y   Œ­xY wc c}w # 1 sw Y   yxY w­w)
zýContext manager for code that *must always* warn

        This filters expected warnings from the test and fails if
        the expected warning is not caught. It uses set_warn_always() to force
        TORCH_WARN_ONCE to behave like TORCH_WARN
        Tr5  r7  Nr   zno warning caughtc              3   óL   •K  — | ]  }t        |j                  «      ‰u –— Œ y ­wr2   )rI  r!  )r£   ÚwÚcategorys     €r:   r¤   z0TestCase.assertWarnsOnceRegex.<locals>.<genexpr>z  s   øè ø€ ÒHÀ¤ Q§Y¡Y£°8Ô ;ÑHùs   ƒ!$c              3   óp   •K  — | ]-  }t        j                  ‰t        |j                  «      «      –— Œ/ y ­wr2   )r   râ  ri   r!  )r£   r<  r‹  s     €r:   r¤   z0TestCase.assertWarnsOnceRegex.<locals>.<genexpr>|  s$   øè ø€ ÒB¸!”B—H‘H˜W¤c¨!¯)©)£n×5ÑBùs   ƒ36rä  )r   r“  rd  rF  rG  r^  rb  r«  rÂ  ré  rI  r!  )r³   r=  Úregexr8  r<  r‹  s    `   @r:   ÚassertWarnsOnceRegexzTestCase.assertWarnsOnceRegexk  sï   ùè ø€ ô —*‘*˜UÓ#ˆÜ×$Ñ$¨DÔ1ð 		X°RÜ×!Ñ! (Ô+Ü(¨Ó.ñ Û÷ä�2‹w˜!Š|Ø—	‘	Ð-Ô.Ø�O‰OœCÓHÀRÔHÓHÔIØ�O‰OÜÓB¸rÔBÓBØ�)˜2°"ÖT¨Q¼¸Q¿Y¹Y»È8Ò8S˜qŸy›yÒTÐUÐVôX÷		Xð 		X÷ð üò U÷		Xð 		XüsG   „,D°!DÁDÁA/DÃDÃ"DÃ0	DÃ9	DÄD	ÄDÄDÄDc                 óˆ  ‡‡
‡‡— t        ‰t        «      st        d«      ‚d„ }| j                  j                  } || j                  «       |dz   «      Št        j                  j                  t        j                  |   j                  «      }t        j                  j                  t        j                  j                  |«      d‰«      Š
dŠ|r‰
d|z   z  Š
d|› d�Š‰
d	z  Š
d
}ˆ
ˆˆˆfd„}	 t        ‰
«      5 }|j                  «       }d
d
d
«       t.        r.t1        j2                  dd|«      }t1        j2                  dd‰«      Š|j5                  ddt6        j8                  j:                  › d�«      }t&        j(                  r|‰k7  r |d«      S y
t=        | d«      r| j?                  |‰«       y
| jA                  ‰|«       y
# 1 sw Y   Œ»xY w# t         $ ri}	|	j"                  t"        j$                  k7  r‚ t&        j(                  r |d«      cY d
}	~	S t+        d‰› ‰› d‰› dt,        j                  › d‰› d�
«      d
‚d
}	~	ww xY w)a¬  
        Test that a string matches the recorded contents of a file
        derived from the name of this test and subname.  This file
        is placed in the 'expect' directory in the same directory
        as the test script. You can automatically update the recorded test
        output using --accept.

        If you call this multiple times in a single function, you must
        give a unique subname each time.
        zassertExpected is strings onlyc                 óD   — | j                  |«      r| t        |«      d  S | S r2   )rþ  rb  )ÚtextÚprefixs     r:   Úremove_prefixz.TestCase.assertExpected.<locals>.remove_prefix�  s$   € Ø�‰˜vÔ&ØœC ›K˜LÐ)Ð)ØˆKr;   r´   r£  r“   r  z (rÜ  z.expectNc           	      óÄ   •— t        d| › d‰› ‰› d‰› �«       t        ‰d«      5 }t        j                  dd‰«      }|j	                  |«       d d d «       y # 1 sw Y   y xY w)Nz
Accepting rç  ú:

r<  z(producer_version): "[0-9.]*"z\1: "CURRENT_VERSION")râ  rŠ   r   rg  r'  )Úupdate_typer’  Ús_tagÚexpected_fileÚ	munged_idrB  Úsubname_outputs      €€€€r:   Úaccept_outputz.TestCase.assertExpected.<locals>.accept_output¤  sg   ø€ Ü�J˜{˜m¨5°°¸NÐ;KÈ5ÐQRÐPSÐTÔUÜ�m SÓ)ð ¨QäŸ™Ð?Ø7¸ó<�à—‘˜”÷	÷ ñ ús   ¤)AÁAr\  zI got this output for rG  zC

No expect file exists; to accept the current output, run:
python r^   z	 --acceptzCppOp\[(.+?)\]zCppOp[]z#producer_version: "CURRENT_VERSION"zproducer_version: "r`  zupdated outputÚassertMultiLineEqual)!rº   ri   rp  rK  rd   r½   rK   rˆ   ÚrealpathrÖ  Úmodulesr¦  r`   ÚdirnamerŠ   r‘  rä  ÚerrnoÚENOENTÚ
expecttestr¿  r  ró  r«  r   rg  rL  r3   ÚonnxÚproducer_versionrÒ   rN  rA  )r³   rB  r1  rE  Ú	module_idÚ	test_filerÿ  rM  r’  r£  rJ  rK  rL  s    `        @@@r:   r2  zTestCase.assertExpected  s$  û€ ô ˜!œSÔ!ÜÐ<Ó=Ð=ò	ð —N‘N×-Ñ-ˆ	Ù! $§'¡'£)¨Y¸©_Ó=ˆ	Ü—G‘G×$Ñ$¤S§[¡[°Ñ%;×%DÑ%DÓEˆ	ÜŸ™Ÿ™¤R§W¡W§_¡_°YÓ%?Ø%-Ø%.ó0ˆð ˆÙØ˜S 7™]Ñ*ˆMØ! ' ¨!˜_ˆNØ˜Ñ"ˆØˆ÷	ð	TÜ�mÓ$ð $¨ØŸ6™6›8�÷$õ Ü—v‘vÐ/°¸HÓEˆHÜ—‘Ð(¨)°QÓ7ˆAð ×#Ñ#Ø1Ø!¤%§*¡*×"=Ñ"=Ð!>¸aÐ@ó
ˆô ×ÒØ˜1Š}Ù$Ð%5Ó6Ð6ð ô �tÐ3Ô4ð ×)Ñ)¨(°AÕ6à× Ñ   HÕ-÷A$ð $ûäò 		TØ�w‰wœ%Ÿ,™,Ò&ØÜ×"Ò"Ù$ XÓ.Õ.ä"Ø.¨y¨k¸.Ð9IÈÈqÈcð R ä (× 1Ñ 1Ð2°!°I°;¸iðIóJð PTðTûð		Tús<   Ã-G Ã8GÄ	G ÇGÇG Ç	IÇ5H<ÈIÈ)H<È<Ic                 óV   — t        j                  dd|«      }| j                  ||«       y )Nz__torch__[^ ]+r“   )r   rg  r2  )r³   rB  r1  s      r:   ÚassertExpectedStripMangledz#TestCase.assertExpectedStripMangledÏ  s%   € Ü�F‰FÐ$ b¨!Ó,ˆØ×Ñ˜A˜wÕ'r;   c                 óâ   — |�|�t        d«      ‚||k\  ry||z
  }|�||k  ry|› d|› d|› d�}n|€d}t        ||«      dk(  ry|› d|› d|› d�}| j                  ||«      }| j                  |«      ‚)	zåAssert that ``first`` is greater than or almost equal to ``second``.

        The equality of ``first`` and ``second`` is determined in a similar way to
        the ``assertAlmostEqual`` function of the standard library.
        Nz specify delta or places not bothz not greater than or equal to z within z deltarÀ  r   z places)rp  ÚroundÚ_formatMessagerB  )r³   ÚfirstÚsecondÚplacesr
  ÚdeltaÚdiffÚstandardMsgs           r:   ÚassertGreaterAlmostEqualz!TestCase.assertGreaterAlmostEqualÓ  sµ   € ð Ð Ð!3ÜÐ>Ó?Ð?à�FŠ?Øà˜‰~ˆØÐØ�uŠ}Øà"˜GÐ#AÀ&ÀÈÐRWÐQXÐX^Ð_‰Kàˆ~Ø�ä�T˜6Ó" aÒ'Øà"˜GÐ#AÀ&ÀÈÐRXÐQYÐY`ÐaˆKà×!Ñ! # {Ó3ˆØ×#Ñ# CÓ(Ð(r;   c                 óÜ  — |j                   j                  D �cg c]"  }|j                  dk(  r|j                  dk(  r|‘Œ$ }}| j	                  |«       |D ]T  }|j
                  D �ci c]'  }|j                  |j                  j                  «       “Œ) }}|j                  d«      |k(  sŒT n | j                  d   |«       | j                  |j                  dd«      |«       y c c}w c c}w )NÚATenzorg.pytorch.atenrJ  Úoverload_namer“   )ÚgraphÚnodeÚop_typeÚdomainrÂ  Ú	attributerN   rB  Údecoder¢  rA  )	r³   Ú
onnx_modelrJ  rg  rÍ  Úall_aten_nodesÚopÚattrÚattrss	            r:   ÚassertAtenOpzTestCase.assertAtenOpñ  sÜ   € Ø%/×%5Ñ%5×%:Ñ%:ö U ØŸY™Y¨&Ò0°Q·X±XÐASÒ5Sò ð Uˆð Uà�‰˜Ô'à ò 	ˆBØ<>¿L¹LÖI°D�T—Y‘Y §¡§¡£Ñ/ÐIˆEÐIØ�y‰y˜Ó$¨Ó0Ùð	ð
 	×Ñ˜˜zÑ*¨HÔ5Ø×Ñ˜Ÿ™ ?°BÓ7¸ÕGùòUùò
 Js   ™'C$Á&,C)c                 ó   — d|z   dz   }t        d«      5  |r)| j                  t        |d¬«      5   |«        ddd«       n	  |«        ddd«       t        dd¬
«      5  |r'| j                  t        |«      5   |«        ddd«       n„t        j                  d¬«      5 }t        j                  d«        |«        |D ]C  }t        |t        «      sŒ| j                  t        j                  |t        |«      «      du «       ŒE 	 ddd«       ddd«       y# 1 sw Y   ŒÕxY w# t        $ r3}dt        |«      v r | j	                  dt        |«      z   d	z   «       ‚ d}~ww xY w# 1 sw Y   �ŒxY w# 1 sw Y   ŒjxY w# 1 sw Y   ŒvxY w# 1 sw Y   yxY w)aæ  Checks that an operation produces a nondeterministic alert when
        expected while `torch.use_deterministic_algorithms(True)` is set.

        Args:
          fn (callable): Function to check for a nondeterministic alert

          caller_name (str): Name of the operation that produces the
              nondeterministic alert. This name is expected to appear at the
              beginning of the error/warning message.

          should_alert (bool, optional): If True, then the check will only pass
              if calling `fn` produces a nondeterministic error/warning with the
              expected message. If False, then the check will only pass if
              calling `fn` does not produce an error. Default: `True`.
        ú^z: does not have a deterministic implementation, but you setTz9expected a non-deterministic error, but it was not raisedr5  Nz,does not have a deterministic implementationzEdid not expect non-deterministic error message, but got one anyway: "r`  rÈ  r5  r7  )r¼  r$  r  ri   r«  ÚassertWarnsRegexr—  rd  rF  rG  rº   rÂ  r   r%  )r³   r¬   Úcaller_nameÚshould_alertÚalert_messager£  r<  rŽ   s           r:   Úcheck_nondeterministic_alertz%TestCase.check_nondeterministic_alertþ  s¤  € ð" ˜kÑ)Ð,hÑhˆô   Ó%ñ 	ÙØ×+Ñ+Ü$Ø%ØWð ,ó Yñ ñ ”D÷	ð ðÙ”D÷	ô,   °Ô5ñ 	\ÙØ×*Ñ*Ü#Ø%ó'ñ ñ ”D÷ð ô
 ×,Ñ,°DÔ9ð \¸QÜ×)Ñ)¨(Ô3Ù”DØ#$ò \˜Ü% g¬{Õ;Ø ŸO™O¬B¯I©I°mÄSÈÃ\Ó,RÐVZÐ,ZÕ[ñ\÷\÷	\ð 	\÷)ð ûô $ò ØEÌÈQËÑOØŸ	™	ð6Ü8;¸A»ñ?ØADñEôFð ûðú÷	ñ 	ú÷0ð ú÷
\ð \ú÷	\ð 	\ús�   ”E¯D·	EÁD ÁFÁ6E,Á>FÂ2E8Ã2E8ÄFÄD	ÄEÄ 	EÄ).EÅEÅEÅE)Å,E5	Å1FÅ8F	Å=FÆFc                 ó®   — dd l } |j                  t        j                  d| g|j                  |j                  |¬«      }|j                  «       \  }}||fS )Nr   ú-c)rÔ  rÕ  rÓ  )rÈ  rØ  rÖ  rm  ÚPIPEÚcommunicate)ÚcoderÓ  rÈ  ÚpopenrÔ  rÕ  s         r:   Úrun_process_no_exceptionz!TestCase.run_process_no_exception7  sV   € ãà �
× Ñ Ü�^‰^˜T 4Ð(Ø—?‘?Ø—?‘?Øô	ˆð
 !×,Ñ,Ó.Ñˆ�Ø˜ÐÐr;   c                 óæ   — t         j                  j                  «       }d|d<   |j                  dd «       |j                  dd «       t        j                  | |¬«      \  }}|j                  d«      S )NrA   ÚPYTORCH_API_USAGE_STDERRrl   ÚTEST_SHOWLOCALS)rÓ  rŽ  )rK   r¡  rJ  r¹  r¼   r�  rm  )r  rÓ  Ú_stdoutrÕ  s       r:   ÚrunWithPytorchAPIUsageStderrz%TestCase.runWithPytorchAPIUsageStderrD  sd   € ä�j‰j�o‰oÓˆØ*-ˆÐ&Ñ'ð 	�‰��dÔØ�‰Ð! 4Ô(Ü"×;Ñ;¸DÀcÐ;ÓJ‰ˆ�Ø�}‰}˜WÓ%Ð%r;   rÝ  Úimport_stringÚexpected_failure_messagec           	      ó0  — d|› d|› d�}|r)| j                  t        t        j                  |«      «      nt	        j
                  «       }|5  	 t        j                  t        j                  d|gt        j                  j                  t        j                  j                  t        «      «      t        j                  ¬«       	 ddd«       y# t        j                   $ r*}t        |j"                  j%                  d«      «      d‚d}~ww xY w# 1 sw Y   yxY w)aâ  
        Attempts weights_only `torch.load` in a subprocess. This is used to test that
        weights_only `torch.load` works as expected without global imports.

        Args:
            file (pathlib.Path): The path to the checkpoint to load.
            import_string (str): import string to add to the script
            exected_failure_message (str, optional): The expected failure message if the
                checkpoint fails to load. If None, the test will pass
        zimport torch;ztorch.load(r'z', weights_only=True)r|  )rÒ  rÕ  ré   N)r$  r  r   Úescaperé  rê  rÈ  Úcheck_outputrÖ  rm  rK   rˆ   rQ  rO  r¦  ÚSTDOUTÚCalledProcessErrorr\  rm  )r³   rÝ  r‡  rˆ  ÚscriptÚcmr£  s          r:   Ú_attempt_load_from_subprocessz&TestCase._attempt_load_from_subprocessO  sï   € ð  !  ¨}¸T¸FÐBWÐXˆñ (ð ×"Ñ"¤<´·±Ð;SÓ1TÔUÜ-7×-CÑ-CÓ-Eð 	ð ñ 
	Gð	GÜ×'Ñ'Ü—^‘^ T¨6Ð2ô Ÿ™Ÿ™¬¯©×(8Ñ(8¼Ó(BÓCÜ%×,Ñ,ö÷
	Gð 
	Gøô ×0Ñ0ò GÜ" 1§8¡8§?¡?°7Ó#;Ó<À$ÐFûðGú÷
	Gð 
	Gús+   ÁDÁA5CÃD	Ã%DÄD	Ä	DÄD)rv  rv  r2   )r   FFr8  )NNNNNTTTTTFTNr:  )r“   )NNN©T)Qrc   rd   re   rc  rK  rg   rd  re  rn   rÖ  ÚmaxsizeÚ_diffThresholdÚmaxDiffrj  Úpropertyrm  Úsetterrs  r:  rA  r…  rã   rƒ  r„  r–  r�  rŸ  r¢  r­  r²  r·  r‚  r†  r¼  rÅ  rÿ  rà  r  r  rh   r1  rX  r\  r_  rc  rg  r{  rÎ  rÛ  rè  rñ  rô  r÷  r   r   ri   r   rA  r  r  r   r   r  r  r$  r/  r3  r9  r   r@  r2  rZ  rd  rs  rz  r�  r†  Úpathlibr   r�  rY  rZ  s   @r:   r¼   r¼   |  s}  ø… ð €J�ÓØ€HˆeÓð */Ð  $Ó.ð —[‘[€NØ€Gòð ð˜5ò ó ðð ×Ñð˜eð ¨ò ó ðð ð˜ò ó ðð ‡^�^ð˜Eð  dò ó ðð "'ÐØ"'Ðð %*Ð!õ5Kón/ò&ò*ò)ò
)õrð  34ÀTÐVZô8õ1õ
3ò

ZòVò/òSõ[ó|ò8ò,:ð$ à48óK.ó ðK.ðZ egÐstô ,lð\ WXô yð WXô pð bcô @ð
 bcô @ò
<ð: '+Ø%)Ø+/Ø*.Ø26Ø,0Ø-1Ø15Ø=AØ<@Ø9>Ø-1Ø(,óP9òd
òIð  /3ó <óDDó
	7ð ?Cð	Yð %)Ø$(ØØàØØØ$òYð ˜%  X¨s¨e°S¨jÑ%9Ð 9Ñ:Ñ;ð	Yð ˜5‘/ðYð ˜5‘/óYðvHØ/3ÈTòH¨°©ð HØ% e™_ðHØ;CÀE¹?ðHØ`dóHó
3ð= #ð =°¸#±ð =À4ó =ô
Môbò."ò.8ó/ð òXó ðXó&N.ó`(ó)ó<Hó6\ðr ò	 ó ð	 ð ñ&ó ð&ð 37ñ	Gà�l‰lðGð ðGð #+¨3¡-ð	Gð
 
÷Gr;   r¼   c                   ó   — e Zd Zy)ÚTestCaseBaseN©rc   rd   re   rB   r;   r:   r™  r™  q  s   „ ð
 	r;   r™  c                 óÔ  — ddl m} ddlm}m} t
        j                  j                   || «      d   «      }t        t
        j                  j                  t
        j                  j                  t        «      d«      «      }t
        j                  j                  ||«      }t
        j                  j                  |«      r|S 	 |j                  | d¬«      j                  «       }t        ||rdnd	«      5 }	|	j!                  |«       d d d «       |S # 1 sw Y   |S xY w# |j"                  $ r;}
d
| › d�}t%        j&                  |t(        «       t+        j,                  |«      |
‚d }
~
ww xY w)Nr   )Úurlsplit)ÚrequestrE  rµ   rÖ  é   rÂ  Úwbr<  zcould not download test file 'rI   )Úurllib.parserœ  Úurllibr�  rE  rK   rˆ   Úbasenamer   r`   rQ  r¦  rb  Úurlopenr‘  rŠ   r'  ÚURLErrorrd  re  ÚRuntimeWarningr»   rá  )ÚurlÚbinaryrœ  r�  rE  r�   Údata_dirrˆ   rÖ  r’  r£  r
  s               r:   Údownload_filer©  y  s  € Ý%ß%ä�w‰w×Ñ¡¨£¨aÑ 0Ó1€HÜ ¤§¡§¡¬b¯g©g¯o©o¼hÓ.GÈÓ!PÓQ€HÜ�7‰7�<‰<˜ (Ó+€Dä	‡w�w‡~�~�dÔØˆð,Ø�‰˜s¨BˆÓ/×4Ñ4Ó6ˆÜ�$¡™¨CÓ0ð 	°AØ�G‰G�DŒM÷	àˆ÷	àˆûØ�>‰>ò ,Ø.¨s¨e°1Ð5ˆÜ�‰�cœ>Ô*Ü×Ñ Ó$¨!Ð+ûð,ús6   Ã1D Ã4DÄ	D ÄDÄD ÄD ÄE'Ä,6E"Å"E'c                  óN  — t        t        j                  t        j                  t        j                  «      «      5 } | j	                  t        j
                  t        j                  d«       | j                  d«       | j                  «       \  }}|cddd«       S # 1 sw Y   yxY w)a�  
    Finds an available port and returns that port number.

    NOTE: If this function is being used to allocate a port to Store (or
    indirectly via init_process_group or init_rpc), it should be used
    in conjuction with the `retry_on_connect_failures` decorator as there is a potential
    race condition where the allocated port may become unavailable before it can be used
    r_  )Ú	localhostr   N)	r   ÚsocketÚAF_INETÚSOCK_STREAMÚ
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRÚbindÚgetsockname)Úsockrp   Úports      r:   Úfind_free_portr¶  �  sv   € ô 
”—‘œvŸ~™~¬v×/AÑ/AÓBÓ	Cð ÀtØ�‰œ×)Ñ)¬6×+>Ñ+>ÀÔBØ�	‰	Ð"Ô#Ø×"Ñ"Ó$‰ˆˆ4Ø÷	÷ ò ús   ¼ABÂB$zAddress already in usezconnect() timed out.c                 óX   ‡ ‡— ‰ €t        t        ‰¬«      S t        ‰ «      ˆˆ fd„«       }|S )zuReruns a test if the test returns a RuntimeError and the exception
    contains one of the strings in connect_errors.)Úconnect_errorsc            	      ó  •‡— d}|}	 	  ‰| i |¤ŽS # t         $ rkŠt        ˆfd„‰D «       «      rQ|dz  }|dk(  rt        d|› dt        ‰«      › �«      ‰‚t        j                  t        j
                  «       «       Y d Š‹Œx‚ d Š‹ww xY w)NrÂ  c              3   ó8   •K  — | ]  }|t        ‰«      v –— Œ y ­wr2   )ri   )r£   Úconnect_errorrE  s     €r:   r¤   z=retry_on_connect_failures.<locals>.wrapper.<locals>.<genexpr>¯  s   øè ø€ ÒW°}�}¬¨E«
Ô2ÑWùs   ƒr_  r   zFailing after z retries with error: )r  ré  ri   ÚtimeÚsleepr`  )r8   r9   Ú	n_retriesÚtries_remainingrE  r¸  rè  s       @€€r:   r­   z*retry_on_connect_failures.<locals>.wrapper§  s‘   ù€ àˆ	Ø#ˆØð	Ù˜TÐ, VÑ,Ð,øÜò ÜÓWÈÔWÔWØ# qÑ(�OØ&¨!Ò+Ü*¨^¸I¸;ÐF[Ô\_Ð`eÓ\fÐ[gÐ+hÓiÐotÐtÜ—J‘JœvŸ}™}›Ô/ÜØûðús   ‰ ‘	BšA B Á?B Â B)r
   Úretry_on_connect_failuresr   )rè  r¸  r­   s   `` r:   rÀ  rÀ     s5   ù€ ð €|ÜÔ0ÀÔPÐPä
ˆ4ƒ[ôó ðð €Nr;   c                 ó   ‡ ‡‡‡— ˆ ˆˆˆfd„}|S )Nc                 ó8   •‡ — t        ‰ «      ˆˆˆ ˆˆfd„«       }|S )Nc            	      ó4  •— ‰
‰}}|dkD  r		  ‰| i |¤ŽS 	  ‰| i |¤ŽS # ‰$ r8}|› d|d›d�}t        |«       t        j                  |«       |dz  }Y d }~nd }~ww xY w|dkD  rŒXŒP# ‰$ r.}t        j                  d‰
› dt        |«      › �«      ‰	r|‚|‚d }~ww xY w)Nr_  z, Retrying in r©  z seconds...zSkipping after z consecutive )râ  r¼  r½  r»   rá  ri   )r8   r9   ÚmtriesÚmdelayr£  r
  ÚExceptionToCheckÚdelayr’  Úskip_after_retriesÚtriess         €€€€€r:   Úf_retryz*retry.<locals>.deco_retry.<locals>.f_retry¼  sÌ   ø€ à" E�FˆFØ˜1’*ð Ù˜dÐ- fÑ-Ð-ð|Ù˜$Ð) &Ñ)Ð)øð (ò  Ø˜C˜~¨f°Q¨Z°{ÐC�CÜ˜#”JÜ—J‘J˜vÔ&Ø˜a‘K•Fûð	 úð ˜1“*ùð $ò |Ü×'Ñ'¨/¸%¸ÀÌcÐRSËfÈXÐ(VÓWÑbtÐ]^Ð{Ðz{Ð{ûð|ús+   Œ •A$ �A¢.AÁAÁ$BÁ))BÂBrâ  )r’  rÊ  rÆ  rÇ  rÈ  rÉ  s   ` €€€€r:   Ú
deco_retryzretry.<locals>.deco_retry»  s"   ù€ Ü	ˆq‹÷	|ó 
ð	|ð ˆr;   rB   )rÆ  rÉ  rÇ  rÈ  rË  s   ```` r:   ÚretryrÌ  º  s   û€ ÷ð" Ðr;   c                 ó*  — || k  sJ ‚t        j                  | | ||¬«      }t         j                  j                  |d¬«      \  }}}t	        | «      D ]  }||k\  rd||<   Œ||   dk(  sŒd||<   Œ ||j                  |«      j                  d«      z  |z  S )Nr0  F©Úfull_matricesr   r_  rì  )r3   ÚrandnÚlinalgÚsvdrø  rQ  rl  )	ÚlÚrankrF  rH  ÚAÚurB  ÚvhrÙ   s	            r:   Úrandom_square_matrix_of_rankrØ  Ó  s�   € Ø�1Š9Ðˆ9Ü�‰�A�q ¨fÔ5€AÜ�|‰|×Ñ °ÐÓ7�H€A€qˆ"Ü�1‹Xò ˆØ�Š9ØˆAˆaŠDØˆq‰T�Q‹YØˆAˆaŠDð	ð
 �—‘�U“×%Ñ% bÓ)Ñ)¨RÑ/Ð/r;   ç      ð?gü©ñÒMbP?)r   Úsigmac                 ó–  — t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  i}t        j
                  || |¬«      }|j                  d«      }|j                  d«      }t         j                  j                  |d¬«      \  }	}
}t        j                  |dd t        ||«      fz   ||    |dœŽ|z  |z   j                  dd¬«      j                  j                  | «      }|	|j                  d«      z  |z  S )	zõ
    Returns a random rectangular matrix (batch of matrices)
    with singular values sampled from a Gaussian with
    mean `mean` and standard deviation `sigma`.
    The smaller the `sigma`, the better conditioned
    the output matrix is.
    r0  rì  ra  FrÎ  NT)Ú
descending)r3   rK  ÚdoubleÚcfloatÚcdoublerj  rV  rÑ  rÒ  rÐ  Úminr@  rQ  rQ  rl  )rF  rH  r   rÚ  r‰  Úprimitive_dtyperØ   r  r  rÖ  rp   r×  rB  s                r:   Úrandom_well_conditioned_matrixrâ  Þ  sø   € ô 	�‰”U—[‘[Ü�‰”e—l‘lÜ�‰”e—k‘kÜ�‰”u—|‘|ð	€Oô 	�
‰
�5 ¨fÔ5€AØ	�‰ˆr‹
€AØ	�‰ˆr‹
€AÜ�|‰|×Ñ °ÐÓ7�H€A€qˆ"Ü	�‰�u˜S˜b�z¤S¨¨A£Y LÑ0¸ÈÑ9OÐX^Ò	_ÐbgÑ	gÐjnÑ	nß	‰ˆb˜TˆÓ	"§6¡6¯"©"¨U«)ð à�—‘˜B“Ñ 2Ñ%Ð%r;   c                 ó”  — | j                  «       s| S | j                  j                  s| j                  j                  rt        j
                  }n"| j                  t        j                  k(  rd}nd}| j                  | j                  dz   «      }||d<   | j                  «       |d<   |d   }|j                  | j                  «       |S )NTrÑ  r¼  ).r   ).r_  )rÃ  rF  Úis_floating_pointÚ
is_complexr  Únanr3   rn   Ú	new_emptyr‰  rr  Úrequires_grad_rR  )rY  rZ   rt  s      r:   Únoncontiguous_likeré  ø  s�   € à�?‰?ÔØˆð 	‡w�w× Ò  A§G¡G×$6Ò$6Ü—‘‰Ø	
�‰”E—J‘JÒ	Ø‰àˆà�[‰[˜Ÿ™ 4™Ó(€FØ€Fˆ6�NØ—X‘X“Z€Fˆ6�NØ�F‰^€FØ
×Ñ˜!Ÿ/™/Ô*Ø€Mr;   c                 óÜ   — |j                  dt        j                  «      }|j                  dd«      }t        j                  || | fz   ||dœŽ}||j                  z   j                  d«      }|S ©NrF  rH  r•   r0  rµ   )r¢  r3   rÝ  rÐ  ÚmTÚdiv_©rÓ  Úbatchesr9   rF  rH  rÕ  s         r:   Úrandom_symmetric_matrixrð    ó\   € Ø�J‰J�w¤§¡Ó-€EØ�Z‰Z˜ %Ó(€FÜ�‰�g  A Ñ&¨u¸VÒD€AØ	
ˆQ�T‰T‰�‰˜Ó€AØ€Hr;   c                 óx   — |d   |d   k(  sJ ‚t        || |¬«      }||j                  z   j                  d«      }|S )Nra  rì  r<  rµ   )r&   rì  rí  )rH  rF  r‰  rY  s       r:   Úmake_symmetric_matricesró    sA   € Ø�‰9˜˜b™	Ò!Ð!Ð!Ü�E &°Ô6€AØ	
ˆQ�T‰T‰�‰˜Ó€AØ€Hr;   c                 óÜ   — |j                  dt        j                  «      }|j                  dd«      }t        j                  || | fz   ||dœŽ}||j                  z   j                  d«      }|S rë  )r¢  r3   rÝ  rÐ  ÚmHrí  rî  s         r:   Úrandom_hermitian_matrixrö    rñ  r;   c                 óº   — |j                  dt        j                  «      }|j                  dd«      }t        j                  || | fz   ||dœŽ}||j                  z  S )a[  
    Returns a batch of random symmetric positive-semi-definite matrices.
    The shape of the result is batch_dims + (matrix_size, matrix_size)
    The following example creates a tensor of size 2 x 4 x 3 x 3
    >>> # xdoctest: +SKIP("undefined variables")
    >>> matrices = random_symmetric_psd_matrix(3, 2, 4, dtype=dtype, device=device)
    rF  rH  r•   r0  )r¢  r3   rÝ  rÐ  rì  rî  s         r:   Úrandom_symmetric_psd_matrixrø  $  sP   € ð �J‰J�w¤§¡Ó-€EØ�Z‰Z˜ %Ó(€FÜ�‰�g  A Ñ&¨u¸VÒD€AØˆq�t‰t‰8€Or;   r0  c                óV   — t        j                  || | fz   ||dœŽ}||j                  z  S )a[  
    Returns a batch of random Hermitian positive-semi-definite matrices.
    The shape of the result is batch_dims + (matrix_size, matrix_size)
    The following example creates a tensor of size 2 x 4 x 3 x 3
    >>> # xdoctest: +SKIP("undefined variables")
    >>> matrices = random_hermitian_psd_matrix(3, 2, 4, dtype=dtype, device=device)
    r0  )r3   rÐ  rõ  ©Úmatrix_sizerF  rH  Ú
batch_dimsrÕ  s        r:   Úrandom_hermitian_psd_matrixrý  2  s.   € ô 	�‰�j K°Ð#=Ñ=ÀeÐTZÒ[€AØˆq�t‰t‰8€Or;   c                 ó  — |j                  dt        j                  «      }|j                  dd«      }t        j                  || | fz   ||dœŽ}t        j                  ||j
                  «      t        j                  | ||¬«      dz  z   S )NrF  rH  r•   r0  çñhãˆµøä>)r¢  r3   rÝ  rÐ  Úmatmulrì  Úeye)rû  rü  r9   rF  rH  rÕ  s         r:   Úrandom_symmetric_pd_matrixr  ?  sx   € Ø�J‰J�w¤§¡Ó-€EØ�Z‰Z˜ %Ó(€FÜ�‰�j K°Ð#=Ñ=Ø¨ò	0€Aä�<‰<˜˜1Ÿ4™4Ó Ü
�)‰)�K u°VÔ
<¸tÑ
CñDð Dr;   c                 ó˜   — |d   |d   k(  sJ ‚t        || |¬«      }t        j                  |d   | |¬«      dz  }||j                  z  |z   S )Nra  rì  r<  rÿ  )r&   r3   r  rì  )rH  rF  r‰  rY  rÙ   s        r:   Úmake_symmetric_pd_matricesr  J  sS   € Ø�‰9˜˜b™	Ò!Ð!Ð!Ü�E &°Ô6€AÜ�	‰	�%˜‘) F°%Ô8¸4Ñ?€AØˆq�t‰t‰8�a‰<Ðr;   c                óˆ   — t        j                  || | fz   ||dœŽ}||j                  z  t        j                  | ||¬«      z   S )aU  
    Returns a batch of random Hermitian positive-definite matrices.
    The shape of the result is batch_dims + (matrix_size, matrix_size)
    The following example creates a tensor of size 2 x 4 x 3 x 3
    >>> # xdoctest: +SKIP("undefined variables")
    >>> matrices = random_hermitian_pd_matrix(3, 2, 4, dtype=dtype, device=device)
    r0  )r3   rÐ  rõ  r  rú  s        r:   Úrandom_hermitian_pd_matrixr  P  sC   € ô 	�‰�j K°Ð#=Ñ=Ø¨ò	0€Aàˆq�t‰t‰8”e—i‘i °5ÀÔHÑHÐHr;   )rR  c                 óL  — t        j                  «       5  t        || |¬«      }t         j                  j	                  |d¬«      \  }}}|j
                  j                  r|j                  j
                  n|j
                  }t        |d   |d   «      }	t        j                  d|	dz   || ¬«      }
|
dd d…xx   d	z  cc<   |
j                  «       j                  d
«       ||
j                  |j
                  «      z  |z  }d d d «       j                  |«       |S # 1 sw Y   ŒxY w)Nr<  FrÎ  ra  rì  rµ   r0  r_  g      ð¿rÙ  )r3   rP  r&   rÑ  rÒ  rF  rå  Úrealrà  r  Úreciprocal_rµ  rQ  rè  )rH  rF  rR  r‰  rY  rÖ  rp   r×  Ú
real_dtyper-  rB  rØ   s               r:   Ú4make_fullrank_matrices_with_distinct_singular_valuesr  ^  sõ   € Ü	�‰‹ñ %Ü˜ f°EÔ:ˆÜ—<‘<×#Ñ# A°UÐ#Ó;‰ˆˆ1ˆbØ%&§W¡W×%7Ò%7�Q—V‘V—\’\¸Q¿W¹Wˆ
Ü��b‘	˜5 ™9Ó%ˆô �L‰L˜˜A ™E¨¸FÔCˆà	ˆ!ˆ$ˆQˆ$‹�3‰‹ð 	
�‰‹×Ñ˜RÔ ð �—‘�a—g‘g“Ñ "Ñ$ˆ÷!%ð" ×Ñ�]Ô#Ø€H÷%%ð %ús   •C*DÄD#c                 ót  — |j                  dt        j                  «      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|r3t        j                  j                  st        j
                  | |||¬«      S t        j                  || |fz   ||¬«      }|j                  «       dk(  r|S t        j                  j                  |d¬	«      \  }	}
}t        | |«      }t        j                  d
|d
z   z  d
|||¬«      }|rd||d
z
  <   |dkD  rd|d<   |	|j                  d«      z  |z  S )zÆReturn rectangular matrix or batches of rectangular matrices.

    Parameters:
      dtype - the data type
      device - the device kind
      singular - when True, the output will be singular
    rF  rH  r•   ÚsilentFÚsingularr0  r   rÎ  r_  rµ   rì  )r¢  r3   rÝ  r‚  r  ÚonesrÐ  r  rÑ  rÒ  rà  Úlinspacerl  )ÚrowsÚcolumnsrü  r9   rF  rH  r  r  rÕ  rÖ  rp   r×  r-  rB  s                 r:   Úrandom_matrixr  s  s  € ð �J‰J�w¤§¡Ó-€EØ�Z‰Z˜ %Ó(€FØ�Z‰Z˜ %Ó(€FØ�z‰z˜* eÓ,€HÙ”e—h‘h×)Ò)Ü�z‰z˜$ ¨u¸VÔDÐDä�‰�J $¨ Ñ0¸ÀfÔM€AØ‡w�wƒy�A‚~ØˆÜ�|‰|×Ñ °ÐÓ7�H€A€qˆ"ÜˆD�'Ó€AÜ�‰�q˜A ™E‘{ A q°¸fÔE€AÙàˆˆ!ˆa‰%‰ØˆqŠ5ð ˆAˆa‰DØ�—‘˜B“Ñ 2Ñ%Ð%r;   c                 ód   — t        || g|¢­i |¤Ž}t        | |g|¢­i |¤Ž}|j                  |«      S )zVReturn rectangular matrix or batches of rectangular matrices with
    given rank.
    )r  r   )rÔ  r  r  rü  r9   ÚBÚCs          r:   Úrandom_lowrank_matrixr  ’  s>   € ô 	�d˜DÐ8 :Ò8°Ñ8€AÜ�d˜GÐ; jÒ;°FÑ;€AØ�8‰8�A‹;Ðr;   r  ÚcolsÚnum_indicesc                 ó  ‡— g }t        j                  || z  «      }t        t        |«      «      }t        | «      D ]1  Š|j	                  ˆfd„t        j                  ||¬«      D «       «       Œ3 t        j                  |d| «      S )z\Generate indices for a row x cols matrix, preferring at least one index per row if possible.c              3   ó&   •K  — | ]  }‰|f–— Œ
 y ­wr2   rB   )r£   rS  rê  s     €r:   r¤   z4_generate_indices_prefer_all_rows.<locals>.<genexpr>£  s   øè ø€ ÒP !˜˜1”vÑPùs   ƒ)r-  N)	r  Úceilr  rø  ræ  r`  Úchoicesr3   rg  )r  r  r  r˜  Ú	n_per_rowrš  rê  s         @r:   Ú!_generate_indices_prefer_all_rowsr  ›  ss   ø€ à€GÜ—	‘	˜+¨Ñ,Ó-€IÜ”u˜T“{Ó#€Kä�4‹[ò Qˆà�‰ÓP¤v§~¡~°kÀYÔ'OÔPÕPðQô �<‰<˜  Ð-Ó.Ð.r;   ç{®Gáz„?c                 ó  — |j                  dt        j                  «      }|j                  dd«      }t        t	        | |«      t        | |z  |z  «      «      }t        | ||«      }t        j                  |||¬«      }|t        j                  |D �	�
cg c]  \  }	}
t        |	|
z
  «      dz   ‘Œ c}
}	||¬«      j                  «       z  }t        j                  |j                  «       || |f|¬«      }|j                  «       S c c}
}	w )a4  Return rectangular random sparse matrix within given density.

    The density of the result approaches to given density as the size
    of the matrix is increased and a relatively small value of density
    is specified but higher than min(rows, columns)/(rows * columns)
    for non-singular matrices.
    rF  rH  r•   r0  rµ   ry  )r¢  r3   rÝ  r  rà  r…   r  rÐ  rg  rK  Úexpro  rY  rq  )r  r  Údensityr9   rF  rH  Únonzero_elementsr˜  rQ  rÙ   r­  rÕ  s               r:   Úrandom_sparse_matrixr%  ¨  sß   € ð �J‰J�w¤§¡Ó-€EØ�Z‰Z˜ %Ó(€Fäœ3˜t WÓ-¬s°4¸'±>ÀGÑ3KÓ/LÓMÐÜ/°°gÐ?OÓP€GÜ�[‰[Ð)°¸vÔF€Fð Œe�l‰l¸×A±°°AœU 1 q¡5›\¨1™_Ò,ÓAÈÐW]Ô^×bÑbÓdÑd€FÜ×Ñ §	¡	£¨V°d¸G°_ÈVÔT€AØ�:‰:‹<Ðùó Bs   ÂDc           	      óœ  — ddl }|j                  dt        «       d   «      }|j                  d|j                  «      }|j                  dd«      }t	        | «      D �ci c]  }||ft        |dz   «      | z  “Œ }}dd	„}	|| z  | z  }
t        |«      |
k  r«t        j                  d| dz
  «      }t        j                  d| dz
  «      }||k7  ret        j                  dd
|j                  z  «      } |j                  |«      } |j                  |«      } |	|| ||||d¬«        |	|| ||||d¬«       t        |«      |
k  rŒ«g g g }}}t        |j                  «       «      D ];  \  \  }}}|j                  |«       |j                  |«       |j                  |«       Œ=  |j                   ||g«      } |j"                  ||| | f||¬«      S c c}w )a§  Return random sparse positive-definite matrix with given density.

    The eigenvalues of the matrix are defined as::
      arange(1, matrix_size+1)/matrix_size

    Algorithm:
      A = diag(arange(1, matrix_size+1)/matrix_size)
      while <A density is smaller than required>:
          <choose random i, j in range(matrix_size), theta in [0, 2*pi]>
          R = <rotation matrix (i,j,theta)>
          A = R^T A R
    r   Nr3   rF  rH  r•   r_  Tc                 ó(  — t        |«      D ]„  }|r	||f||f}	}n||f||f}	}| j                  |d«      | j                  |	d«      }}
||
z  ||z  z   | |
z  ||z  z   }}
|
r|
| |<   n| j                  |d «       |r|| |	<   Œs| j                  |	d «       Œ† y r’  )rø  r¢  r¹  )rÖ  r#  rÙ   r­  ÚcsÚsnÚleftr-  ÚikÚjkÚaikÚajks               r:   Úmultiplyz)random_sparse_pd_matrix.<locals>.multiplyÒ  s°   € Ü�q“ò 	#ˆAÙØ˜Q˜ ! Q �B‘à˜Q˜ ! Q �B�Ø—x‘x  A“¨¯©°°Q«�ˆCØ˜C‘x " s¡(Ñ*¨R¨C°#©I¸¸S¹Ñ,@�ˆCÙØ��R’à—‘˜˜TÔ"ÙØ��R’à—‘˜˜TÕ"ñ	#r;   rµ   )r*  Fr0  r‘  )r  r¢  rM   rÝ  rø  rK  rb  r`  ÚrandintÚuniformÚpiÚcosÚsinÚsortedra   r3  rg  ro  )rû  r#  r9   r  r3   rF  rH  rÙ   rÖ  r/  Ú
target_nnzr­  Úthetar(  r)  ÚicoordsÚjcoordsrQ  rS  Úindices_tensors                       r:   Úrandom_sparse_pd_matrixr;  ½  sË  € ó Ø�J‰J�w¤£	¨'Ñ 2Ó3€EØ�J‰J�w §¡Ó-€EØ�Z‰Z˜ %Ó(€Fä˜;Ó'ö)Øð �ˆF”E˜!˜a™%“L ;Ñ.Ñ.ð )€Dð )ó#ð" ˜;Ñ&¨Ñ4€JÜ
ˆd‹)�jÒ
 Ü�N‰N˜1˜k¨A™oÓ.ˆÜ�N‰N˜1˜k¨A™oÓ.ˆØ�Š6Ü—N‘N 1 a¨$¯'©'¡kÓ2ˆEØ�—‘˜%“ˆBØ�—‘˜%“ˆBÙ�T˜;¨¨1¨b°"¸4Õ@Ù�T˜;¨¨1¨b°"¸5ÕAô ˆd‹)�jÓ
 ð  " 2 r�fˆW€GÜ˜DŸJ™J›LÓ)ò ‰	‰ˆˆA�Ø�‰�qÔØ�‰�qÔØ�‰�aÕðð "�U—\‘\ 7¨GÐ"4Ó5€NØ"ˆ5×"Ñ" >°6¸KÈÐ;UÐ]bÐkqÔrÐrùòK)s   ÁG	c                 ó  — |D ]ƒ  }|t         j                  k7  sŒt        j                  d|||¬«      }| j                  ||j                  «       | j                  ||j
                  «       | j                  ||j                  «       Œ… y )Nr¾  )rF  rI  rH  )r3   Úfloat16r  ÚassertIsrF  rI  rA  rH  )r³   ÚdtypesrI  rH  rF  Úouts         r:   Údo_test_dtypesrA  ö  si   € Øò 1ˆØ”E—M‘MÓ!Ü—+‘+˜f¨E¸&ÈÔPˆCØ�M‰M˜% §¡Ô+Ø�M‰M˜& #§*¡*Ô-Ø×Ñ˜V S§Z¡ZÕ0ñ1r;   c                 ó†  ‡ ‡— t        j                  ddg«      Šˆ ˆfd„}d„ }t        j                  «       } |t        j                  ‰«      |t         j                  dd d«        |t        j
                  ‰d«      |t         j                  dd d«       |D �](  }|j                  dhD �]  } ||«      }	t        j                  ‰||||¬«      }
 ||
|||d |«       |
j                  «       } |t        j                  ‰||||¬	«      |||d |«        ||
j                  ‰«      |||d d«        ||
j                  ‰|	|d¬
«      |	||d d«        |t        j                  |
«      |||d d«        |t        j                  |
|	||d¬«      |	||d d«       |t         j                  usŒü|t         j                  k7  s�Œd}t        j
                  ‰|||||¬«      }
 ||
|||||«        ||
j                  ‰|dz   «      ||||dz   d«       |
j                  «       } |t        j
                  ‰|dz   ||||¬	«      ||||dz   |«        ||
j                  ‰|dz   |	|d¬
«      |	|||dz   d«        |t        j                  |
|dz   «      ||||dz   d«        |t        j                  |
|dz   |	||d¬«      |	|||dz   d«       �Œ �Œ+ y )Nrµ   r|  c                 ó¤  •— ‰j                  ‰| j                  «       ‰j                  || j                  «       ‰j                  || j                  «       ‰j                  | j
                  |«       | j                  r|�‰j                  || j                  «       |�3| j                  ‰«      j                  |«      }‰j                  | |«       y y r2   )
rA  r‰  r>  rF  rI  rR  Úis_cudarH  rT  r  )	rg  rF  rI  rH  rZ   rR  Úfillr³   r‰  s	          €€r:   Úcheck_valuez'do_test_empty_full.<locals>.check_value  s¥   ø€ Ø×Ñ˜ §¡Ô-Ø�‰�e˜VŸ\™\Ô*Ø�‰�f˜fŸm™mÔ,Ø×Ñ˜×-Ñ-¨}Ô=Ø�>Š>˜fÐ0Ø×Ñ˜V V§]¡]Ô3ØÐØ—:‘:˜eÓ$×*Ñ*¨5Ó1ˆDØ×Ñ˜V TÕ*ð r;   c                 óÐ   — dj                  t        | «      j                  d«      dd «      }|st        j                  S  t        j                  |«      t        «      j                  S )Nr´   r_  ra  )r`   ri   r¾   r3   r  rJ  Ú
attrgetter)rF  Úmodules     r:   Úget_int64_dtypez+do_test_empty_full.<locals>.get_int64_dtype  sQ   € Ø—‘œ#˜e›*×*Ñ*¨3Ó/°°"Ð5Ó6ˆÙÜ—;‘;ÐØ*Œx×"Ñ" 6Ó*¬5Ó1×7Ñ7Ð7r;   ra  Fg      À)rF  rH  rI  rR  )r@  rH  rI  rR  )rF  rH  rR  )rF  rI  rH  rR  r_  rê   rÄ  )r3   rp  rb  rÐ  r—  r®  rä  rT  rç  Ú
empty_liker=  r–  Únew_fullÚ	full_like)r³   r?  rI  rH  rF  rJ  Údefault_dtyperF  ÚrgÚint64_dtyperS  r@  Úfvr‰  s   `            @r:   Údo_test_empty_fullrR  ÿ  sÍ  ù€ Ü�J‰J˜˜1�vÓ€Eõ	+ò8ô ×+Ñ+Ó-€MÙ”—‘˜EÓ" M´5·=±=À"ÀdÈEÔRÙ”—
‘
˜5 #Ó&¨´u·}±}ÀbÈ$ÐPUÔVØó HˆØ×*Ñ*¨EÐ2ó 	HˆBÙ)¨%Ó0ˆKÜ—‘˜E¨°vÀfÐ\^Ô_ˆAÙ˜˜5 &¨&°$¸Ô;Ø—%‘%“'ˆCÙœŸ™ E¨s¸6È&Ð`bÔcØ˜v v¨t°Rô9á˜Ÿ™ EÓ*¨E°6¸6À4ÈÔOÙ˜Ÿ™ E°ÀVÐ[`˜ÓaØ# V¨V°T¸5ôBáœ×(Ñ(¨Ó+¨U°F¸FÀDÈ%ÔPÙœ×(Ñ(¨°+ÀfÐU[ÐkpÔqØ# V¨V°T¸5ôBð œEŸM™MÒ)¨f¼×8HÑ8HÔ.HØ�Ü—J‘J˜u b°¸fÈVÐceÔf�Ù˜A˜u f¨f°b¸"Ô=Ù˜AŸJ™J u¨b°1©fÓ5°u¸fÀfÈbÐSTÉfÐV[Ô\Ø—e‘e“g�ÙœEŸJ™J u¨b°1©f¸#ÀfÐU[ÐkmÔnØ! 6¨6°2¸±6¸2ô?á˜AŸJ™J u¨b°1©f¸KÐPVÐfk˜JÓlØ'¨°¸¸a¹ÀôHáœEŸO™O¨A¨r°A©vÓ6¸¸vÀvÈrÐTUÉvÐW\Ô]ÙœEŸO™O¨A¨r°A©vØ2=ÀfÐU[Ðkpôrà'¨°¸¸a¹ÀöHò3	HñHr;   c                  óæ   — 	 t         j                  j                  t         j                  j                  t        j
                  d   «      «      } | j                  d«      r| ay y # t        $ r Y y w xY w)Nr   r  )	rK   rˆ   r‡  rO  rÖ  r¸  ÚendswithÚrunning_script_pathrÁ   )Úrunning_files    r:   Úset_running_script_pathrW  6  s[   € ðÜ—w‘w—‘¤r§w¡w×'7Ñ'7¼¿¹À¹Ó'DÓEˆØ× Ñ  Ô'Ø".Ñð (øäò Ùðús   ‚A A$ Á$	A0Á/A0c                 ó  — t         €y t        j                  j                  t        j                  j	                  t        j                  | j                  «      «      «      }|t         k(  s#J d| j                  «       › dt         › d|› d�«       ‚y )NzClass of loaded TestCase "z(" is not defined in the running script "z", but in "zE". Did you accidentally import a unittest.TestCase from another file?)	rU  rK   rˆ   r‡  rO  r¶   rˆ  rK  r½   )r	  Útest_case_class_files     r:   Ú$check_test_defined_in_running_scriptrZ  ?  s‡   € ÜÐ"ØÜŸ7™7Ÿ?™?¬2¯7©7×+;Ñ+;¼G¿O¹OÈI×L_ÑL_Ó<`Ó+aÓbÐØÔ#6Ò6ð EÐ:TÐU^×UaÑUaÓUcÐTdð e1Ü1DÐ0EÀ[ÐQeÐPfð gEð9Eó EÑ6r;   c                 ó¼   — t        «        t        j                  «       }|D ]8  }t        s|D ]  }t	        |«       Œ |j
                  sŒ(|j                  |«       Œ: |S r2   )rW  r»   r  r}   rZ  r  ÚaddTest)Úloaderr1  r‹  Ú
test_suiteÚ
test_grouprþ   s         r:   Ú
load_testsr`  G  s^   € ÜÔÜ×#Ñ#Ó%€JØò +ˆ
Ý)Ø"ò ;�Ü4°TÕ:ð;à×ÓØ×Ñ˜zÕ*ð+ð Ðr;   c                   ó   — e Zd Zd„ Zd„ Zy)ÚBytesIOContextc                 ó   — | S r2   rB   rå   s    r:   rÍ  zBytesIOContext.__enter__T  rç   r;   c                  ó   — y r2   rB   )r³   r8   s     r:   rÓ  zBytesIOContext.__exit__W  s   € Ør;   Nr‹  rB   r;   r:   rb  rb  S  s   „ òór;   rb  gê-�™—q=ÚTEST_WITH_SLOW_GRADCHECKÚ PYTORCH_TEST_WITH_SLOW_GRADCHECKzETests that don't use gradcheck don't need to run on slow_gradcheck CIc                 óÊ   — dddœ}t         rd|d<   |j                  «       D ]   \  }}|j                  |d «      }|�|n|||<   Œ" t        j                  j
                  | |fi |¤ŽS ©NT)Úcheck_batched_gradÚ	fast_modeFrj  )re  ra   r¢  r3   ÚautogradÚ	gradcheck)r¬   Úinputsr9   Údefault_valuesrû  rZ   r-  s          r:   rl  rl  l  sy   € ð #Øñ€Nõ
  Ø&+ˆ�{Ñ#à$×*Ñ*Ó,ò 4‰
ˆˆUà�J‰J�s˜DÓ!ˆØ˜=‘a¨eˆˆsŠð4ô
 �>‰>×#Ñ# B¨Ñ9°&Ñ9Ð9r;   c                 óÌ   — dddœ}t         rd|d<   |j                  «       D ]   \  }}|j                  |d «      }|�|n|||<   Œ" t        j                  j
                  | ||fi |¤ŽS rh  )re  ra   r¢  r3   rk  Úgradgradcheck)r¬   rm  Úgrad_outputsr9   rn  rû  rZ   r-  s           r:   rp  rp  ‚  s{   € ð #Øñ€Nõ
  Ø&+ˆ�{Ñ#à$×*Ñ*Ó,ò 4‰
ˆˆUà�J‰J�s˜DÓ!ˆØ˜=‘a¨eˆˆsŠð4ô
 �>‰>×'Ñ'¨¨F°LÑKÀFÑKÐKr;   c                 ót   — | j                  t        ||fi |¤Ž«       | j                  t        ||fi |¤Ž«       y r2   )rÂ  rl  rp  )r	  Úapply_fnrm  r9   s       r:   Ú_assertGradAndGradgradChecksrt  —  s8   € ð ×Ñœ 8¨VÑ>°vÑ>Ô?Ø×Ñœ x°ÑB¸6ÑBÕCr;   rˆ   c              #   óÆ   K  — t        j                  «       }	 t        j                  | «       d –— t        j                  |«       y # t        j                  |«       w xY w­wr2   )rK   ÚgetcwdÚchdir)rˆ   Úold_cwds     r:   Úset_cwdry  ž  s<   è ø€ ä�i‰i‹k€GðÜ
�‰�ŒÛä
�‰�ÕøŒ�‰�Õüs   ‚A!˜A ±A!ÁAÁA!rÿ  gš™™™™™¹?c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                 óF   •—  ‰| g|¢­i |¤ddi¤Ž  ‰| g|¢­i |¤ddi¤Ž y )NÚ	coalescedTFrB   )r³   r8   r9   r’  s      €r:   r*  zcoalescedonoff.<locals>.wrapped´  s1   ø€ á	ˆ$Ð0�Ò0˜Ñ0¨4Ó0Ù	ˆ$Ð1�Ò1˜Ñ1¨5Ô1r;   râ  )r’  r*  s   ` r:   Úcoalescedonoffr}  ³  s    ø€ Ü
ˆ1ƒXó2ó ð2ð €Nr;   c                 ó
  — | j                  «       }d| j                  | j                  «       dz
  dd…   z   }t        j                  || j
                  ¬«      j                  d«      j                  d«      }| j                  «       dkD  r&|j                  d«       ||z  j                  d«      }n||z  }t        j                  ||j                  «       d   «      }|xr$ t        j                  ||j                  «       «      }|S )N)r_  r_  r   ra  ry  )ru  r‰  rP  r3   rg  rH  ÚcumprodÚflipÚ
unsqueeze_ÚsumÚallcloser@  Úunique)rB  r˜  Úhash_coeffsÚhash_indicesrZ  s        r:   Úis_coalesced_indicesr‡  »  sÜ   € Ø�j‰j‹l€GØ˜Ÿ™ §¡£°!Ñ!3°A°bÐ!8Ñ9Ñ9€KÜ—<‘< °A·H±HÔ=×EÑEÀbÓI×NÑNÈrÓR€LØ‡|�|ƒ~˜ÒØ×Ñ Ô#Ø ,Ñ.×3Ñ3°AÓ6‰à Ñ-ˆô �.‰.˜ |×'8Ñ'8Ó':¸1Ñ'=Ó
>€Cð Ò
E”%—.‘. ¨|×/BÑ/BÓ/DÓE€Cà€Jr;   c               #   óÊ   K  — t        j                  «       r.	 t        j                  «        d –— t        j                  «        y d –— y # t        j                  «        w xY w­wr2   )r¨   r,  r  r  rB   r;   r:   Ú
disable_gcr‰  Î  s8   è ø€ ä	‡|�|„~ð	Ü�J‰JŒLÛä�I‰I�Käøô �I‰I�Küs   ‚A#˜A
 °A#Á
A Á A#Úlib_namec                 ó   — t        t        j                  «      j                  «       j                  }|dz  | z  }t
        j                  j                  |«      r|S t        t        «      j                  «       j                  d   }|dz  dz  | z  S )NÚlibrµ   Úbuild)	r   r3   r¦  ÚresolveÚparentrK   rˆ   rb  Úparents)rŠ  Ú
torch_rootrˆ   s      r:   Úfind_library_locationr’  Ú  sw   € ô ”e—n‘nÓ%×-Ñ-Ó/×6Ñ6€JØ˜Ñ Ñ(€DÜ	‡w�w‡~�~�dÔØˆÜ”h“×'Ñ'Ó)×1Ñ1°!Ñ4€JØ˜Ñ %Ñ'¨(Ñ2Ð2r;   c                 ó   ‡ — ˆ fd„}|S )zº
    Similar to unittest.skip, however in the sandcastle environment it just
    "passes" the test instead to avoid creating tasks complaining about tests
    skipping continuously.
    c                 ó^   •‡ — t         sd‰ _        ‰‰ _        ‰ S t        ‰ «      ˆ ˆfd„«       }|S )NTc                  ó\   •— t        d‰j                  › d‰› �t        j                  ¬«       y ©Nz	Skipping z% on sandcastle for following reason: rg  ©râ  rc   rÖ  rÕ  ©r8   r9   rè  rR  s     €€r:   r­   z?skip_but_pass_in_sandcastle.<locals>.decorator.<locals>.wrapperð  s+   ø€ ä�I˜dŸm™m˜_Ð,QÐRXÐQYÐZÔad×akÑakÕlØr;   )rq   r  r  r   )rè  r­   rR  s   ` €r:   r0  z.skip_but_pass_in_sandcastle.<locals>.decoratorê  s8   ù€ ÝØ%)ˆDÔ"Ø)/ˆDÔ&ØˆKä	ˆt‹ô	ó 
ð	ð ˆr;   rB   )rR  r0  s   ` r:   Úskip_but_pass_in_sandcastler™  ä  s   ø€ ô
ð Ðr;   c                 óT   ‡ ‡— t        «       Št        ‰ «      ˆ ˆfd„«       }‰|_        |S )z}
    Returns a function that calls the real implementation of a method
    in addition to passing args to a mock object.
    c                 ó,   •—  ‰|i |¤Ž  ‰| g|¢­i |¤ŽS r2   rB   )r³   r8   r9   rÂ  r-  s      €€r:   r­   zmock_wrapper.<locals>.wrapperÿ  s%   ø€ áˆdÐ�fÒÙ�dÐ,˜TÒ, VÑ,Ð,r;   )r   r   r-  )rÂ  r­   r-  s   ` @r:   Úmock_wrapperrœ  ø  s0   ù€ ô
 ‹;€Dä
ˆ6ƒ]ô-ó ð-ð €G„LØ€Nr;   c           
      óÊ   — t        | D �cg c]  }t        |t        «      sŒ|‘Œ c}|j                  «       D �cg c]  }t        |t        «      sŒ|‘Œ c}z   «      S c c}w c c}w )zC Returns a set of all Tensor objects in the given args and kwargs. )r  rº   r   rQ  )r8   r9   r?  rS  s       r:   Úget_tensors_fromrž    sP   € ä˜tÖ?˜¤z°#´vÕ'>’Ò?Ø!Ÿ=™=›?ÖD�a¬j¸¼FÕ.C’ÒDñEó Fð FùÒ?ùÚDs   ŠA A¸A 
ÁA 
Ú	byte_listrF  rH  c                 ó,  — t         j                  t        j                  t         j                  t        j
                  t         j                  t        j                  t         j                  t        j                  t         j                  t        j                  t         j                  t        j                  t         j                  t        j                  t         j                   t        j"                  t         j$                  t        j&                  t         j(                  t        j*                  t         j,                  t        j*                  t         j.                  t        j0                  t         j2                  t        j0                  i}||   }t        j4                  |«      }d„ }|j6                  r†t9        | «      |dz  k(  sJ ‚ || «       |j;                  t        j<                  |z  | d | Ž «      j>                  }|j;                  t        j<                  |z  | |d  Ž «      j>                  }|d|z  z   }	nFt9        | «      |k(  sJ ‚ || «       |j;                  t        j<                  |z  | Ž «      j>                  }	t        j@                  |	||¬«      S )Nc                 ó2   — | D ]  }d|cxk  rdk  rŒJ ‚ J ‚ y )Nr   éÿ   rB   )rŸ  Úbytes     r:   Úcheck_bytesz$bytes_to_scalar.<locals>.check_bytes   s*   € Øò 	$ˆDØ˜Ô# Ó#Ð#Ñ#Ð#Ð#ñ	$r;   rµ   y              ð?r<  )!r3   r9  ÚctypesÚc_int8r3  Úc_uint8Úuint16Úc_uint16Úuint32Úc_uint32Úuint64Úc_uint64Úint16Úc_int16r7  Úc_int32r  Úc_int64rn   Úc_boolr  Úc_floatr  Úfloat64Úc_doubleÚ
complex128Úsizeofrå  rb  Úfrom_bufferÚc_byterZ   rg  )
rŸ  rF  rH  Údtype_to_ctypeÚctypeÚ	num_bytesr¤  r  ÚimagrZ  s
             r:   Úbytes_to_scalarr¾    sÈ  € ä�
‰
”F—M‘MÜ�‰”V—^‘^Ü�‰”f—o‘oÜ�‰”f—o‘oÜ�‰”f—o‘oÜ�‰”V—^‘^Ü�‰”V—^‘^Ü�‰”V—^‘^Ü�
‰
”F—M‘MÜ�‰”v—~‘~Ü�‰œŸ™Ü�‰”v—‘Ü×Ñœ&Ÿ/™/ð.€Nð ˜5Ñ!€EÜ—‘˜eÓ$€Iò$ð ×ÒÜ�9‹~ )¨a¡-Ò0Ð0Ð0Ù�IÔØ× Ñ ¤&§-¡-°)Ñ";Ø�z˜	Ð"ð"$ó %ß%*¡Uð 	à× Ñ ¤&§-¡-°)Ñ";Ø�y�zÐ"ð"$ó %ß%*¡Uð 	à�R˜$‘YÑ‰ä�9‹~ Ò*Ð*Ð*Ù�IÔØ×Ñ¤§¡°Ñ!:Øð!ó ß™ð 	ô �<‰<˜ F°%Ô8Ð8r;   c                 óì   — t        j                  | j                  | j                  | j                  | j
                  | j                  ¬«      }t        j                  || «      }| j                  |_	        |S )zBBased on http://stackoverflow.com/a/6528148/190597 (Glenn Maynard))rN   ÚargdefsÚclosure)
ré  ÚFunctionTypeÚ__code__Ú__globals__rc   Ú__defaults__rP  r¯   Úupdate_wrapperÚ__kwdefaults__)r’  Úgs     r:   Ú	copy_funcrÉ  5  sY   € ä×Ñ˜1Ÿ:™: q§}¡}¸1¿:¹:Ø#$§>¡>Ø#$§=¡=ô	2€Aô 	× Ñ   AÓ&€AØ×'Ñ'€AÔØ€Hr;   c                 ó   ‡ — ˆ fd„}|S )zó
    Given a list of test names which are defined by a superclass of the
    class this decorates, mark them as expected failure.  This is useful
    if you are doing poor man's parameterized tests by subclassing a generic
    test class.
    c                 ó|   •— ‰D ]5  }t        | |t        j                  t        t	        | |«      «      «      «       Œ7 | S r2   )r%  r»   r÷  rÉ  r¿   )r&  rY  r1  s     €r:   Údecoz#xfail_inherited_tests.<locals>.decoF  s?   ø€ Øò 	RˆAô �C˜œH×4Ñ4´Y¼wÀsÈA»Ó5OÓPÕQð	Rð ˆ
r;   rB   )r1  rÌ  s   ` r:   Úxfail_inherited_testsrÍ  ?  s   ø€ ôð €Kr;   c                 ó   ‡ ‡— ˆ ˆfd„}|S )z¼
    Similar to unittest.skipIf, however in the sandcastle environment it just
    "passes" the test instead to avoid creating tasks complaining about tests
    skipping continuously.
    c                 ób   •‡ — ‰r*t         rt        ‰ «      ˆ ˆfd„«       }|S d‰ _        ‰‰ _        ‰ S )Nc                  ó\   •— t        d‰j                  › d‰› �t        j                  ¬«       y r–  r—  r˜  s     €€r:   r­   zBskip_but_pass_in_sandcastle_if.<locals>.decorator.<locals>.wrapperX  s(   ø€ ä˜I d§m¡m _Ð4YÐZ`ÐYaÐbÔil×isÑisÖtr;   T)rq   r   r  r  )rè  r­   r  rR  s   ` €€r:   r0  z1skip_but_pass_in_sandcastle_if.<locals>.decoratorU  s;   ù€ ÙÝÜ�t“ôuó ðuà�à)-�Ô&Ø-3�Ô*àˆr;   rB   )r  rR  r0  s   `` r:   Úskip_but_pass_in_sandcastle_ifrÑ  O  s   ù€ õð Ðr;   c                 ó<   — t        | «      j                  d«      d   S )zC Returns the pretty name of the dtype (e.g. torch.int64 -> int64). r´   r_  )ri   r¾   r‘  s    r:   rG  rG  d  s   € äˆu‹:×Ñ˜CÓ  Ñ#Ð#r;   Úbf16Úf64Úf32Úf16Úc32Úc64Úc128Úi8Úi16Úi32Úi64Úb8Úu8c                  ó–   — dt         fd„} d}t        |«      D �cg c]	  } | «       ‘Œ }}t        |«      }t        |d|dz
   «      S c c}w )zZMeasure and return approximate number of cycles per millisecond for torch.cuda._sleep
    r\   c                  óL  — t         j                  j                  d¬«      } t         j                  j                  d¬«      }| j                  «        t         j                  j	                  d«       |j                  «        |j                  «        d| j                  |«      z  }|S )NT)Úenable_timingi@B )r3   r–   ÚEventr6  Ú_sleeprƒ  rí  )ry  ÚendÚcycles_per_mss      r:   Úmeasurez"get_cycles_per_ms.<locals>.measure  sy   € Ü—
‘
× Ñ ¨tÐ Ó4ˆÜ�j‰j×Ñ¨TÐÓ2ˆØ�‰ŒÜ�
‰
×Ñ˜'Ô"Ø�
‰
ŒØ�‰ÔØ %×"4Ñ"4°SÓ"9Ñ9ˆØÐr;   rÂ  rµ   )rK  rø  r5  r   )rç  Únumrp   Úvalss       r:   Úget_cycles_per_msrê  z  sR   € ð
”Uó ð$ €CÜ$ S›zÖ*˜!‰G�IÐ*€DÐ*Ü�$‹<€DÜ��Q˜˜q™Ð!Ó"Ð"ùò +s   šAÚTr³   Úsamplesc                 óz   — 	 t        t        |«      «      S # t        $ r}t        j                  d«      |‚d}~ww xY w)z˜
    Returns the first sample from an iterable of samples, like those returned by OpInfo.
    The test will be skipped if no samples are available.
    z%Skipped! Need at least 1 sample inputN)ró   r#  ÚStopIterationr»   rá  )r³   rì  r£  s      r:   Úfirst_samplerï  š  s=   € ð
PÜ”D˜“MÓ"Ð"øÜò PÜ×ÑÐ GÓHÈaÐOûðPús   ‚ –	:Ÿ5µ:c                 ó¶   — t        | t        j                  «      rt        j                  | «      S t        | t        «      rt        t        t        | «      «      S | S r2   )rº   r3   r   rs  r   r(  rM  Úclone_input_helperr   s    r:   rñ  rñ  ¦  sA   € Ü�%œŸ™Ô&Ü�{‰{˜5Ó!Ð!ä�%œÔ"Ü”SÔ+¨UÓ3Ó4Ð4à€Lr;   c              #   ój   K  — 	 t        | ||«       d–— t        | |«       y# t        | |«       w xY w­w)zBContext manager/decorator to test ONNX export with custom operatorNr#   )ÚopnameÚsymbolic_fnÚopset_versions      r:   Ú	custom_oprö  ¯  s/   è ø€ ð=Ü# F¨K¸ÔGÛä% f¨mÕ<øÔ% f¨mÕ<üs   ‚3„" •3¢0°3c                 óè  —  | |Ž }t        j                  |«      D ]J  }t        |t        j                  «      sŒ|j
                  sŒ+|j                  «       j                  d¬«       ŒL t        j                  |«      D �cg c])  }t        |t        j                  «      sŒ|j                  ‘Œ+ }}t        j                  |«      D ]$  }t        |t        j                  «      sŒd |_        Œ& ||fS c c}w )NT)Úretain_graph)	ÚpytreeÚtree_leavesrº   r3   r   rR  r‚  ÚbackwardÚgrad)r¬   Ú
graph_inpsÚinpsÚoutsr@  ÚinpÚgradss          r:   Úouts_and_gradsr	  ¹  sÄ   € Ùˆzˆ?€DÜ×!Ñ! $Ó'ò 2ˆÜ�cœ5Ÿ<™<Õ(¨S×->Ó->Ø�G‰G‹I×Ñ¨DÐÕ1ð2ô "(×!3Ñ!3°DÓ!9Ö[˜#¼ZÈÌUÏ\É\Õ=ZˆS�X‹XÐ[€EÐ[Ü×!Ñ! $Ó'ò ˆÜ�cœ5Ÿ<™<Õ(ØˆC�Hðð �ˆ;Ðùò	 \s   Á?C/ÂC/c                 óŒ   — t        |||«      \  }}t        |||«      \  }}| j                  ||«       | j                  ||«       y r2   )r	  rA  )rþ   Úm1Úm2rþ  Úr1Úg1Úr2Úg2s           r:   Úcompare_equal_outs_and_gradsr
	  Ä  sF   € Ü˜B  dÓ+�F€BˆÜ˜B  dÓ+�F€BˆØ×Ñ�R˜ÔØ×Ñ�R˜Õr;   c                   ó@   — e Zd ZdZd„ Zdddddœd„Zdddddœd„Zd„ Zy)	ÚTestGradientsTc                 ó.   ‡— t        ‰«      ˆfd„«       }|S )Nc                 ó8   •—  ‰| j                  «       g|¢­i |¤ŽS r2   )rs  )rY  r8   r9   Úinplace_variants      €r:   r³  z,TestGradients._get_safe_inplace.<locals>._fnÐ  s   ø€ á" 1§7¡7£9Ð>¨tÒ>°vÑ>Ð>r;   râ  )r³   r	  r³  s    ` r:   Ú_get_safe_inplacezTestGradients._get_safe_inplaceÏ  s!   ø€ Ü	ˆÓ	ó	?ó 
 ð	?ð ˆ
r;   FN©Úcheck_forward_adÚcheck_backward_adri  Úcheck_batched_forward_gradc                óü  ‡‡‡‡— |dv sJ ‚‰€| j                  d«       ‰j                  |t        j                  |«      j                  «      s*| j                  d‰j
                  › dt        |«      › �«       ˆfd„}
‰j                  xr |j                  }‰j                  ||d|t        ¬«      }|D �]Ç  Š‰j                  r	 |
‰«      rŒd }t        ‰j                  «      r:t        ‰j                  ‰j                  ‰j                   j#                  «       «      }nCt%        t        ‰j                  f‰j                  ‰j                   j#                  «       «      «      }t%        d„ |D «       «      }|D ]  }| j'                  |j(                  d	«       Œ  d
„ Šˆˆˆˆfd„}|dk(  rH|€‰j*                  }| j-                  t/        |||d‰j0                  ‰j2                  ||d|	¬«
      «       �Œ:|dv rw| j5                  |d¬«       dD ]]  }|‰j6                  d‰j0                  ‰j2                  dœ}|dk(  rd|d<   d|d<   d|d<   d|d<   | j-                  t9        ||fi |¤Ž«       Œ_ �Œµ| j-                  dd¬«       �ŒÊ y )N)rl  Úbwgrad_bwgradÚfwgrad_bwgradz!Skipped! Variant not implemented.z	Skipped! z does not support dtype c                 óx   •— t        | d«      r| j                  ‰j                  «       u S | ‰j                  «       u S )NÚ__wrapped__)rÒ   r	  Úget_inplace)Úvariantrp  s    €r:   Ú
is_inplacez/TestGradients._check_helper.<locals>.is_inplaceß  s7   ø€ Ü�w Ô.Ø×*Ñ*¨b¯n©nÓ.>Ð>Ð>Ø˜bŸn™nÓ.Ð.Ð.r;   T)rR  Úinclude_conjugated_inputsÚsmall_inputs_onlyc              3   óp   K  — | ].  }t        |t        j                  «      sŒ|j                  sŒ+|–— Œ0 y ­wr2   )rº   r3   r   rR  r�  s     r:   r¤   z.TestGradients._check_helper.<locals>.<genexpr>ø  s&   è ø€ Ò"l¨¼:ÀaÌÏÉÕ;VÐ[\×[jÓ[j¤1Ñ"lùs   ‚6¢6¯6zÅA sampled input has a gradient before running autograd. This usually means that (at least) one input tensor is reused across different SampleInputs. Please create a new tensor for each SampleInput.c                 ó<  — t        |«      r^g }|D ]S  }t        |t        j                  «      r&|j                  r|j                  | |   «       |dz   }ŒC|j                  |«       ŒU ||fS t        |t        j                  «      r|j                  r
| |   |dz   fS ||fS r¡  )ru  rº   r3   r   rR  r3  )rm  r 	  rö   Útensor_listrØ   s        r:   Ú_input_recomposition_helperz@TestGradients._check_helper.<locals>._input_recomposition_helper  s�   € Ü)¨#Ô.Ø"$�KØ ò 2˜Ü% a¬¯©Ô6¸1¿?º?Ø'×.Ñ.¨v°iÑ/@ÔAØ(1°A©™Ià'×.Ñ.¨qÕ1ð2ð '¨	Ð1Ð1Ü ¤U§\¡\Ô2°s×7HÒ7HØ! )Ñ,¨i¸!©mÐ;Ð;à 	˜>Ð)r;   c                  ó�  •— g }d} ‰	| ‰j                   |«      \  }}|j                  |«       ‰j                  D ]   } ‰	| ||«      \  }}|j                  |«       Œ" i }‰j                  j	                  «       D ]  \  }} ‰	| ||«      \  }}|||<   Œ  ‰
j
                  ‰g|¢­i |¤Ž}‰j                  �‰j                  |«      S |S r’  )r  r3  r8   r9   ra   Úgradcheck_wrapperÚoutput_process_fn_grad)rm  Úpositional_argsrö   r 	  rØ   r9   r-  rS  r\  r"	  rp  Úsampler	  s            €€€€r:   r¬   z'TestGradients._check_helper.<locals>.fn  sç   ø€ à"$�Ø�	Ù!<¸VÀVÇ\Á\ÐS\Ó!]‘��YØ×&Ñ& sÔ+àŸ™ò 0�AÙ%@ÀÈÈIÓ%V‘N�C˜Ø#×*Ñ*¨3Õ/ð0ð
 �Ø"ŸM™M×/Ñ/Ó1ò $‘D�A�qÙ%@ÀÈÈIÓ%V‘N�C˜Ø #�F˜1’Ið$ð .˜×-Ñ-¨gÐR¸ÒRÈ6ÑR�Ø×0Ñ0Ð<Ø!×8Ñ8¸Ó@Ð@Ø�r;   rl  )ri  Úcheck_grad_dtypesÚ
nondet_tolrj  r	  r	  Úcheck_undefined_gradr	  )r	  r	  z-Cannot run forward AD check for gradgradcheckr5  )FT)Úgen_non_contig_grad_outputsri  r(	  r)	  rj  r	  Úcheck_fwd_over_revFÚcheck_rev_over_revri  r*	  zUnknown check requested!)rV  Úsupports_dtyper3   rH  rI  rN   ri   Útest_conjugated_samplesrå  Úsample_inputsre  Úbroadcasts_inputru  r  r   r8   r9   rQ  r(  r-  rü  ri  rÂ  rl  Úgradcheck_nondet_tolÚgradcheck_fast_moderÅ  Úcheck_batched_gradgradrp  )r³   rH  rF  rp  r	  Úcheckr	  r	  ri  r	  r	  r	  rì  Úall_argsÚgradcheck_argsrY  r¬   r+	  r9   r"	  r'	  s      ``              @@r:   Ú_check_helperzTestGradients._check_helperÖ  sŠ  û€ àÐGÑGÐGÐGàˆ?Ø�M‰MÐ=Ô>Ø× Ñ  ¬¯©°VÓ(<×(AÑ(AÔBØ�M‰M˜I b§g¡g YÐ.FÄsÈ5ÃzÀlÐSÔTô	/ð
 %'×$>Ñ$>Ò$SÀ5×CSÑCSÐ!à×"Ñ" 6¨5ÀÐ`yÜ5Mð #ó Oˆð ó ]	GˆFØ×&Ò&©:°gÔ+>Øð ˆHÜ% f§l¡lÔ3Ü  §¡¨v¯{©{¸F¿M¹M×<PÑ<PÓ<RÓS‘ä ¤¨¯© ¸¿¹ÀVÇ]Á]×EYÑEYÓE[Ó!\Ó]�Ü"Ñ"l¨hÔ"lÓlˆNð $ò V�Ø×!Ñ! !§&¡&ð#UõVðVò*÷ð, ˜Ò#Ø%Ð-Ø)+×)>Ñ)>Ð&Ø—‘¤	¨"¨nØ=OØ<@Ø57×5LÑ5LØ46×4JÑ4JØ;KØ<MØ?CØE_ô!aö bð Ð<Ñ<Ø× Ñ Ð!1Ð7fÐ ÔgØ3@ò QÐ/à7RØ.0×.GÑ.GØ-1Ø&(×&=Ñ&=Ø%'×%;Ñ%;ñ�Fð  Ò/Ø7;˜Ð3Ñ4Ø7<˜Ð3Ñ4Ø7<˜Ð3Ñ4Ø9>˜Ð5Ñ6à—O‘O¤M°"°nÑ$OÈÑ$OÕPòQð  —‘ Ð+E�ÖFñ{]	Gr;   c                ó6   — | j                  ||||d||||¬«	      S )Nrl  r	  )r8	  )	r³   rH  rF  rp  r	  r	  r	  ri  r	  s	            r:   Ú_grad_test_helperzTestGradients._grad_test_helperH  s2   € à×!Ñ! &¨%°°W¸kÐ\lØ4EÐZlØ=Wð "ó Yð 	Yr;   c                 óÜ   — ||j                  t        j                  |«      j                  «      vr| j	                  d«       |j
                  s|j                  s| j	                  d«       y y y )Nz4Skipped! Op doesn't support autograd for this dtype.z Skipped! autograd not supported.)Úsupported_backward_dtypesr3   rH  rI  rV  Úsupports_autogradÚsupports_forward_ad)r³   rp  rH  rF  s       r:   Ú_skip_helperzTestGradients._skip_helperN  sX   € Ø˜×4Ñ4´U·\±\À&Ó5I×5NÑ5NÓOÑOØ�M‰MÐPÔQØ×#Ò#¨B×,BÒ,BØ�M‰MÐ<Õ=ð -CÐ#r;   )rc   rd   re   ró  r	  r8	  r:	  r?	  rB   r;   r:   r	  r	  Ê  s=   „ Ø€Kòð TYÐlpØ)-È%ôpGðd QVÐimØ-1ÈeôYó>r;   r	  c                 óf   ‡— d„ }|| _         dD ]   Šd‰› d�}ˆfd„}t        | | ||«      «       Œ" | S )Nc                 ó    — || _         d | _        y r2   )Ú_cbÚ_value)r³   Úcbs     r:   Ú	lazy_initz"make_lazy_class.<locals>.lazy_initV  s   € ØˆŒØˆ�r;   )Úaddrg  r5  ÚtruedivÚfloordivÚmodr  ÚpowÚlshiftÚrshiftÚandÚorÚxorÚnegÚposÚabsÚinvertÚeqÚneÚltÚleÚgtÚgern   r…   rÊ   Ú__c                 ó    •‡ ‡— ‰dvŠˆ ˆfd„}|S )N)rn   r…   c                 óØ   •— | j                   �| j                  «       | _        d | _         ‰s t        | j                  ‰«      |i |¤ŽS  t        t        ‰«      | j                  g|¢­i |¤ŽS r2   )rB	  rC	  r¿   rJ  )r³   r8   r9   rN   Úuse_operators      €€r:   r*  z7make_lazy_class.<locals>.inner_wrapper.<locals>.wrappedf  sc   ø€ Ø—8‘8Ð'Ø"&§(¡(£*�D”KØ#�D”HÙ#Ø5œ7 4§;¡;°Ó5°tÐF¸vÑFÐFà2œ7¤8¨TÓ2°4·;±;ÐPÀÒPÈÑPÐPr;   rB   )rN   r*  r]	  r¢  s   ` @€r:   Úinner_wrapperz&make_lazy_class.<locals>.inner_wrapperc  s   ú€ Ø#¨?Ð:ˆLõQð ˆNr;   )rã   r%  )r&  rE	  rN   r^	  r¢  s       @r:   Úmake_lazy_classr_	  T  sQ   ø€ òð €C„Lðò 0ˆð
 �H�:˜RÐ ˆô	ô 	��T™=¨Ó.Õ/ð)0ð, €Jr;   c                   ó<   — e Zd Zd„ Zd„ Zej                  d„ «       Zy)ÚNestedTensorTestCasec                 ó~   — d„ }| j                  t        j                  ||«      t        j                  ||«      «       y )Nc                 ó¬   — t        | t        j                  «      r9| j                  r-| j                  t        j
                  k(  r| j                  «       S | S r2   )rº   r3   r   r  rI  Újaggedr  rÛ   s    r:   Ú_unbind_njtszHNestedTensorTestCase.assertEqualIgnoringNestedInts.<locals>._unbind_njtsz  s6   € Ü˜!œUŸ\™\Ô*¨q¯{ª{¸q¿x¹xÌ5Ï<É<Ò?WØ—x‘x“zÐ!à�r;   )rA  rù  Útree_map)r³   rR  r¸  re	  s       r:   ÚassertEqualIgnoringNestedIntsz2NestedTensorTestCase.assertEqualIgnoringNestedIntsw  s0   € ò	ð 	×ÑœŸ™¨°qÓ9¼6¿?¹?È<ÐYZÓ;[Õ\r;   c                 óª   — | j                  ||«       d„ }t        j                  ||«      }t        j                  ||«      }| j                  ||«       y )Nc                 ój   — t        | t        j                  «      r| j                  r| j                  S d S r2   )rº   r3   r   r  r‰  rÛ   s    r:   Ú_get_njt_shapeszGNestedTensorTestCase.assertEqualNoncontigAware.<locals>._get_njt_shapes‡  s0   € ô ˜a¤§¡Ô.°1·;²;ð —‘ðð ðr;   )rg	  rù  rf	  rA  )r³   rR  r¸  rj	  Úa_shapesÚb_shapess         r:   ÚassertEqualNoncontigAwarez.NestedTensorTestCase.assertEqualNoncontigAware‚  sK   € ð 	×*Ñ*¨1¨aÔ0ò	ô —?‘? ?°AÓ6ˆÜ—?‘? ?°AÓ6ˆØ×Ñ˜ 8Õ,r;   c              #   óì   K  — t         j                  j                  j                  }|j                  j                  «       }|j                  }	 d–— ||_        ||_        y# ||_        ||_        w xY w­w)z>Context manager to branch and restore the nested tensor state.N)r3   ÚnestedÚ	_internalÚnested_tensorÚ_tensor_symint_registryrJ  Ú_tensor_id_counter)r³   Únested_tensor_moduleÚoriginal_tensor_symint_registryÚoriginal_tensor_id_counters       r:   Úbranch_nested_statez(NestedTensorTestCase.branch_nested_state’  sp   è ø€ ô  %Ÿ|™|×5Ñ5×CÑCÐØ*>×*VÑ*V×*[Ñ*[Ó*]Ð'Ø%9×%LÑ%LÐ"ð	[Ûà6PÐ Ô3Ø;ZÐ Õ8øð 7QÐ Ô3Ø;ZÐ Õ8üs   ‚AA4ÁA! ÁA4Á!A1Á1A4N)rc   rd   re   rg	  rm	  ré  r   rw	  rB   r;   r:   ra	  ra	  v  s)   „ ò	]ò-ð  ×Ññ	[ó ñ	[r;   ra	  c                   ó   — e Zd Zy)ÚLazyValNrš  rB   r;   r:   ry	  ry	  Ÿ  s   „ àr;   ry	  )r¦  Úsuppress_prefixrÝ  rM  c          	      óà  ‡— ‰€$t        j                  «       d|z      j                  Št        ‰«      Št        t	        | «      «      }ˆfd„}t        j                  d||«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  ‰t        t        j                  j                  ‰«      «      |«      }t        j                  t        t        j                  j                  t        j                  j                  t        j                  «      d«      «      d|«      }|rut        j                  d	d|t
        j                  ¬
«      }t        j                  dd|t
        j                  ¬
«      }t        j                  dd|t
        j                  ¬
«      }|rt        j                  dd|«      }t        j                  dd|t
        j                  ¬
«      }|S )Nr_  c                 óz   •— | j                  d«      ‰k7  ry| j                  d«      dk(  ry| j                  d«      S )Nr_  r“   rµ   z<module>r   )r&  )r  rÝ  s    €r:   Ú
repl_framezmunge_exc.<locals>.repl_frame¬  s9   ø€ Ø�7‰7�1‹:˜ÒØð �7‰7�1‹:˜Ò#Øà�w‰w�q‹zÐr;   z>  File "([^"]+)", line \d+, in (.+)\n(    .+\n( +[~^]+ *\n)?)+zline \d+zline Nz.py:\d+z.py:Nr“   z\n*Set TORCH_LOGS.+)Úflagsz$\n*You can suppress this exception.+z\n*Set TORCHDYNAMO_VERBOSE=1.+zCannot export model.+\n\nz +$)r¶   r·   r�   r   ri   r   rg  rK   rˆ   r¢  r`   rQ  r3   r¦  ÚDOTALLÚ	MULTILINE)r£  r¦  rz	  rÝ  rM  rB  r}	  s      `   r:   rª  rª  ¤  sZ  ø€ Ø€|Ü�}‰}‹˜q 4™xÑ(×1Ñ1ˆä˜$Ó€DÜ”s˜1“vÓ€Aôô 	�‰ÐPÐR\Ð^_Ó`€AÜ
�‰ˆ{˜H aÓ(€AÜ
�‰ˆz˜7 AÓ&€AÜ
�‰ˆt”^¤B§G¡G×$4Ñ$4°TÓ$:Ó;¸QÓ?€AÜ
�‰Œ~œbŸg™gŸl™l¬2¯7©7¯?©?¼5¿>¹>Ó+JÈBÓOÓPÐRTÐVWÓX€AÙÜ�F‰FÐ)¨2¨q¼¿	¹	ÔBˆÜ�F‰FÐ:¸BÀÌÏÉÔSˆÜ�F‰FÐ4°b¸!Ä2Ç9Á9ÔMˆÙÜ�F‰FÐ/°°QÓ7ˆÜ
�‰ˆv�r˜1¤B§L¡LÔ1€AØ€Hr;   c              #   ó„  ‡K  — ˆfd„}	 t        j                  «        t        j                  t         j                  «       g }|–— t        j                  «        |j	                  t        |t         j                  «      «       t        |«      }|dkD  rXt        j                  |› d�«       	 ddl
}t        j                  d| › d‰› d�«       |d|  D ]  }|j                  |gd¬	«       Œ 	 t        j                  d«       y# t        $ r t        j                  d
«       Y Œ6w xY w# t        j                  d«       w xY w­w)aÅ  Wrap around operations you want to ensure are not leaking tensor memory.

    This code intentionally ignores other reference cycles, which can be benign and which we have plenty
    of in pytorch code.  It focuses on any reference cycles that directly or indirectly result holding a Tensor alive,
    since this is likely a more serious leak than typical python refcycles.

    limit specifies how many tensors to dump debug graphs for (default=1)
    c                 ó   •— t        | ‰«      S r2   )rº   )rX  Úmatched_types    €r:   Ú	match_objz'check_leaked_tensors.<locals>.match_objÏ  s   ø€ Ü˜#˜|Ó,Ð,r;   r   zH tensors were found in the garbage. Did you introduce a reference cycle?NzDumping first z objgraphs of leaked zs rendered to pngrÂ  )Ú	max_depthz6`pip install objgraph` to enable memory leak debugging)r¨   r©   Ú	set_debugÚDEBUG_SAVEALLræ  r­  Úgarbagerb  rd  re  ÚobjgraphÚshow_backrefsÚImportError)Úlimitrƒ	  r„	  Úgarbage_objsÚnum_garbage_objsr‰	  rÈ  s    `     r:   Úcheck_leaked_tensorsr�	  Å  s  øè ø€ ô-ðÜ
�
‰
ŒÜ
�‰”R×%Ñ%Ô&Øˆð Òä
�
‰
ŒØ×ÑœF 9¬b¯j©jÓ9Ô:Ü˜|Ó,ÐØ˜aÒÜ�M‰MØ#Ð$Ð$lÐmôðXÛÜ—‘Ø$ U GÐ+@ÀÀÐN_Ð`ôð & f uÐ-ò >�AØ×*Ñ*¨A¨3¸"Ð*Õ=ñ>ô 	�‰�Q�øô	 ò XÜ—‘ÐVÖWðXûô 	�‰�Q�üsA   ƒE ŠB"D& Â->D Ã+D& Ã,E ÄD#Ä D& Ä"D#Ä#D& Ä&D=Ä=E c                  óø   — t        j                  «       } t        j                  j	                  | «      rGt
        r)t        j                  dd| gt        j                  ¬«       yt        j                  | d¬«       yy)zK
    Removes the default root folder under which extensions are built.
    Úrmz-rf)rÔ  T)Úignore_errorsN)r/   Úget_default_build_rootrK   rˆ   rb  r«  rÈ  rà  r}  r£  r¤  )Údefault_build_roots    r:   Ú remove_cpp_extensions_build_rootr•	  ð  sW   € ô '×=Ñ=Ó?ÐÜ	‡w�w‡~�~Ð(Ô)Ýô �N‰N˜D %Ð);Ð<ÄZÇ_Á_ÖUä�M‰MÐ,¸DÖAð *r;   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  ó   •— d„ } ‰| d|i|¤ŽS )Nc                  ó  — t         rt        j                  | i |¤ŽS d|vsJ ‚t        «       5 }|j	                  dd«      rt        d|› d�t        j                  ¬«       ||d<   t        j                  | i |¤Žcd d d «       S # 1 sw Y   y xY w)NÚbuild_directoryrƒ  Fz$Using temporary extension directory z...rg  )r«  r/   Úload_inliner¦  r¢  râ  rÖ  rÕ  )r8   r9   Útemp_dir_names      r:   rš	  z8scoped_load_inline.<locals>.wrapper.<locals>.load_inline  s‘   € Ýä$×0Ñ0°$ÐA¸&ÑAÐAà$¨FÑ2Ð2Ð2Ü'Ó)ð B¨]Ø—:‘:˜i¨Ô/ÜÐ@ÀÀÈsÐSÔZ]×ZdÑZdÕeØ,9�Ð(Ñ)Ü$×0Ñ0°$ÐA¸&ÑA÷	B÷ Bò Bús   ¬ABÂB
rš	  rB   )r8   r9   rš	  rè  s      €r:   r­   z#scoped_load_inline.<locals>.wrapper   s    ø€ ò
	Bñ �TÐ= {Ð=°fÑ=Ð=r;   râ  )rè  r­   s   ` r:   Úscoped_load_inlinerœ	  þ  s    ø€ ä
ˆ4ƒ[ó>ó ð>ð €Nr;   r:  r2   )NNNNN)NNNNNr_  F)z'test doesn't currently work with dynamor‘  rG   )z@test doesn't currently work with torchinductor on the ROCm stack)z4test doesn't currently work with legacy JIT executor)F)r|  r|  F)r   (  r  Úargparseré  rJ  r¥  rR  r¯   r¨   rí   r¶   Úior‹   r°  r  rJ  rK   r—  r¢   r`  r   r£  rË  r¬  rÈ  rÖ  r˜  Ú	threadingr¼  ré  r»   rd  Úcollections.abcr   r   r   r   r   Údataclassesr   Úenumr	   r
   r   Ú	itertoolsr   r   r   Ú
statisticsr   Útypingr   r   r   r   r   r   r   Úunittest.mockr   rT  r°  rõ  ró  r3   Útorch.backends.cudnnÚtorch.backends.mklÚtorch.backends.mpsÚtorch.backends.xnnpackÚ
torch.cudar   Útorch._Cr   r   Útorch._dynamo.trace_rulesr   Útorch._utils_internalr   Útorch._logging.scriber   Útorch.nnr   r   r    r!   r"   Ú
torch.onnxr$   r%   Útorch.testingr&   Útorch.testing._comparisonr'   r(   r)   r*   r+   r,   Ú$torch.testing._internal.common_dtyper-   Útorch.utils._import_utilsr.   Útorch.utils._pytreerÅ  Ú_pytreerù  Útorch.utilsr/   r  r  r‹	  Ú
MI300_ARCHr6   r=   r±  rc   r�   r¯  Údisable_global_flagsÚFILE_SCHEMArU   rk   rn   rg   rq   r¡  r¢  rw   rÒ   Ú_utils_internalrx   Ú_is_fbcode_defaultry   r{   r}   r   r[   r�   r…   ÚDEFAULT_DISABLED_TESTS_FILEÚDEFAULT_SLOW_TESTS_FILErf  rc  r‘   rL   r‚  r¬  r%  Ú"DEVICE_LIST_SUPPORT_PROFILING_TESTÚALLOW_XPU_PROFILING_TESTÚcheck_namesré  r§   r±   rÇ   rÉ   rÐ   rÓ   rÕ   rû   r  r1  r3  r;  rj  rs  r{  rˆ  r‹  r�  r’  ÚScriptFunctionr  r˜  ÚScriptMethodrœ  r–  r™  r�  r¥  r¿   Úis_running_via_run_testÚArgumentParserÚparserÚadd_argumentri   ÚBooleanOptionalActionrº  r¸  ÚThreadÚhelp_threadry  r`   Úparse_known_argsr8   Ú	remainingÚjit_executorr}  rŠ  r  r~  Úrerun_disabled_testsrk  Úimport_slow_testsr’   Úimport_disabled_testsr”   Ú
log_suffixr  Úrun_parallelrn  Útest_bailoutsÚTEST_BAILOUTSÚ
use_pytestri  Úpytest_single_testro  Údiscover_testsrg  rj  rl  r  Úrepeatrs  rõ   rñ   Ú
showlocalsrh  Úacceptr¿  ÚUNITTEST_ARGSr_  rv  rÿ  r�  Ú
CI_PT_ROOTrˆ   ÚCI_FUNCTORCH_ROOTrÏ  rÚ  r(  rã  rç  rï  rõ  rû  r  r  r  r,  r  r@  r„  r  r«  rê  ÚmachineÚIS_PPCÚIS_X86ÚIS_ARM64rƒ  r”  ÚIS_AVX512_VNNI_SUPPORTEDr�  r¦  r¯  ÚgetfilesystemencodingÚIS_FILESYSTEM_UTF8_ENCODINGr  ÚTEST_FAIRSEQr%  Úmklr«  ÚTEST_MKLÚmkldnnÚopsÚ_is_mkldnn_acl_supportedrû  r#  r�  rK  Úmac_verr¾   r“  r—   r‰  r³  r—  r–   r¹  Úcustom_device_modÚTEST_PRIVATEUSE1ÚTEST_PRIVATEUSE1_DEVICE_TYPEÚ
TEST_NUMBAÚTEST_TRANSFORMERSÚ	TEST_DILLÚTEST_LIBROSAÚTEST_OPT_EINSUMÚTEST_Z3r»  Ú
NOTEST_CPUÚskipIfÚskipIfNoDillr½  r¾  rÀ  rÂ  rÄ  rÆ  r¦  rÉ  rË  rÍ  rÏ  rŸ  r   ÚTEST_CUDA_GRAPHÚTEST_CUDA_CUDSSrÙ  rÚ  Ú	num_procsr—  Úgb_availableÚset_per_process_memory_fractionr\  Ú
skipUnlessÚrequires_cudarã  Ú	overridesÚTorchFunctionModeræ  rì  rî  rð  Útorch._dynamor+  r4  Úaccumulated_recompile_limitÚlog_compilation_metricsÚissue_3_13_0_warningÚtorch._inductor.configrè  Úfallback_randomrù  rü  rÿ  r  r  r  r  r!  r&  r3  r6  r:  r?  ÚTEST_WITH_TVrM  rN  rO  rP  rQ  rR  Úbool_r3  r¨  rª  r¬  r9  r®  r7  r  r=  r  r´  r  r¶  rU  rY  r\  Úintcra   rë  rÏ  rê  Ú	complex32Úinline_inbuilt_nn_modulesra  rj  ry  r}  r�  r„  rŠ  r�  r”  r˜  r£  r§  r¬  r¶  rº  r¼  rÖ  rá  rë  r   r  r  r  r  r  r  r"  r&  r+  r.  r4  r7  r=  rB  rH  rL  r]  rò   rc  rh  rn  rq  ru  rw  r�  r¤  r³  r·  rº  Úregister_profileÚHealthCheckÚtoo_slowÚ	VerbosityÚnormalrƒ  Úload_profilere  ÚImportWarningrÌ  r¼   ró  rõ  r  r   r+  r<  rI  rM  rO  rQ  rî  Ú_AssertRaisesContextrS  r^  r`  r™  r©  r¶  ÚADDRESS_IN_USEÚCONNECT_TIMEOUTrÀ  rÌ  rÝ  rØ  râ  ré  rð  ró  rö  rø  rý  r  r  r  r  r  r  r  r%  r;  rA  rR  rU  rW  rZ  r`  ÚBytesIOrb  ÚGRADCHECK_NONDET_TOLre  ÚskipIfSlowGradcheckEnvrl  rp  rt  ry  ÚhalfÚdtype2prec_DONTUSEr}  r‡  r‰  r’  r™  rœ  rž  rF  rH  r¾  rÉ  rÍ  rÑ  rG  Údtype_abbrsÚ	lru_cacherê  rë  rï  rñ  rö  r	  r
	  r	  r_	  ra	  ry	  rª  r�	  r•	  rœ	  )rû  rZ   s   00r:   ú<module>r
     sD  ðòó Û Û Û Û Û Û 	Û Û Û 	Û Û Û Û Û 	Û Û Û Û 	Û Û Û Û Û 
Û Û Û Û Û Û ß -ß .Ý Ý !Ý ß $ß $Ý Ý ÷õ ÷ /Ý #ã Û ã Û Û Û Û Û Û Ý ß +Ý 4Ý 3Ý 6÷õ ÷õ &÷õ õ <Ý ?Ý :ß $Ð $Ý %ðÛØ€Jð
 €
òB÷_Xñ _XðD €g×Ñ˜Ó!€Ø ‡�× #Ñ #Ô %à€Ø‡<�<�7ÒØ€Kð ×&Ñ&ØØØÙ;ð	 'ó €€tó ð &×.Ñ.ØØÙBØð	 /ó €ˆtó ð —Z‘Z—^‘^Ð$6Ó7¸tÐC€ˆdÓ Cñ ˆE×!Ò! =Ó1ò &Ø	×Ò×%Ò%ð ð
 "×*Ñ*ØØ!ØØð	 +ó €	ˆ4ó ð &×.Ñ.ØØ%Øð /ó €ˆtó ð $3×#;Ñ#;Ø Ø0Øð $<ó $Ð ˜Dó ð  /×7Ñ7ØØ,Øˆ]Øð	  8ó  Ð ˜ó ð ,;×+FÒ+FØØ/Øð Ù:ð ,Gó ,Ð ˜8 C™=ó ð =Ð Ø+Ð àÐ Ø€òð €2‡9‚9Ð Ô#Ù% i b§i¢iÐ0AÀ2Ó&FÓG€OØ€2‡9‚9Ð" BÔ'Ù)¨)¨"¯)ª)Ð4IÈ2Ó*NÓOÐà˜ ¨°·²×0VÒ0VÓ0XÐY€ð &<Ð "ØÐ âW€ÙÑD¸ÔDÓD€	òð˜ (Ñ+ó ð$ ÷ð ó ðð3˜8 LÑ1ó 3ô!÷?3ñ ?3÷B1ñ 1òh&òR,÷^;ñ ;ô(CYÐ#ô CYôL4XÐ%ô 4Xôn<:Ð"ô <:ô~�Dô ò
$ð ñGó ðGð ñCó ðCð ñ:ó ð:ð �HŠH×#Ò#×,Ò,€	Ø�HŠH×!Ò!×*Ò*€	ò%ò5ò5ð $2€‡‚× Ò Ô  Ø!/€‡‚× Ò Ô ò5ð (©7°8¸ZÈÓ+LÐLÐ Ø	 ˆ×	 Ò	 Ð.EÐ*EÐTYÔ	Z€Ø × Ò �N¨<ØCð ô Eà × Ò �H 3°Ð Ô 5Ø × Ò �J |Ð Ô 4Ø × Ò Ð$Ð&6¸SÐ Ô AØ × Ò �J S°!Ð Ô 4Ø × Ò Ð%Ð'8ÀÐ Ô NØ × Ò �N¨<Ð Ô 8Ø × Ò �L¨°#Ù/Ó1Ù7<Ñ1Ô3À$ð ô Hð × Ò Ð&¨|Ð Ô <Ø × Ò �N¨°bÐ Ô 9Ø × Ò Ð$¨3¸Ð Ô :Ø × Ò Ð)°¸3ÐF]Ð Ô ^Ø × Ò Ð-°C¸sÐJeÐ Ô fØ × Ò Ð,°\Ð Ô BØ × Ò Ð*°¸AÐ Ô >Ø × Ò �N¨8×+IÒ+IÐSXÐ Ô Yòð ˆ3�8Š8Ñ�x 3§8¢8Ñ+Ø"�)×"Ò"Ð*;À3Ç8Â8À+ÔN€KØ×ÒÔØ×ÒÔà×)Ò)Ó+�€€iØ×Ò˜Ò Ø"×)Ò)�NØ	×Ò˜+Ò%Ø"×,Ò,�NØ	×Ò˜(Ò"Ø"×)Ò)�Nñ 6Ó7€Nà×0Ò0Ð à×(Ò(€Ø×0Ò0Ð Ø�_Š_€
Ø× Ò €Ø×"Ò"€Ø�_Š_€
Ø×,Ò,Ð Ø×#Ò#€Ø—_‘_Ð Ø—’€Ø�{Š{€Ø‡y‚y€Ø�_Š_€
Ùˆz˜8 UÔ+ØŸš€JÔØ—’˜!‘� 	Ñ)€Ø €× Ò �$Ô ñ ‘T˜)˜"Ÿ)š)›+Ó&Ó'€Ù‘�i�b—i’i“kÓ"×)Ò)Ó*€
Ù˜ŸšŸš¡T¨)¨"¯)ª)«+Ó%6×%=Ò%=¸{ÓKÓLÐ ô ôD0ð" 	ØØØØØØò/ð ˆ3�ˆ9Ñó/òdòHòò5ò'òð& '¨uó 
ð #ó ð('  S¡	ð '¨d°3©ió 'ð$ !ó [!ðz �<‰<˜7Ñ"€Ø�\‰\˜WÑ$€
Ø�<‰<˜8Ñ#€Ø	ˆ×	Ò	Ó	˜yÑ	(�Ø	ˆ×	Ò	Ó	Ð1Ð	1�Øˆ8×ÒÓÐ!5Ð5�Øˆ8×ÒÓ Ñ(�óò 4Ó5Ñ áØñó òð  ñó ññ Øó$ó ò$ð óó ñó
jð 8˜c×7Ò7Ó9¸WÑDÑ á! 'Ó*�
Ù# IÓ.�Ù! 'Ó*�
Ø�>‰>×Ò×*Ò*Ó,�Ø�>‰>× Ò ×-Ò-Ó/Ò_°E·I²I×4DÒ4D×4]Ò4]Ó4_�Ø�>‰>×Ò×*Ò*Ó,�Ú�c—h’hÐ/˜x×/Ò/Ó1°!Ñ4×:Ò:¸3Ó?ÀÀÐCÓDÒJÈÓK�Ø�9Š9×!Ò!Ó#�Ù˜E 5Ô)¨e¯iªi×.DÒ.DÔ.F‰4ÈU�Ø�JŠJ×#Ò#Ó%�	Ù˜E 5§8¢8×#IÒ#IÓ#KÈTÓRÑ Ú3Ó5Ñ Ø$Ÿxšx×EÒEÓGÑ Ù! 'Ó*�
Ù(¨Ó8Ñ Ù  Ó(�	á# IÓ.Ò?±x°<�á& |Ó4�á
˜tÓ
$�ð/˜#ô /ð Ò(¨¨¯ªÐ3VÐXZÓ)[Ó\Ð\�
àˆx�Š¡9˜}¨iÓ8�ð "'Ñ ˜$Ó &Ø&×/Ñ/ØØ$ð 0ó ��ó ð  /×7Ñ7ØØ,ð  8ó  Ñ ˜ó ð '×/Ñ/ØØ$ð 0ó ��ó ð (×0Ñ0ØØ%ð 1ó ��ó ð '×/Ñ/ØØ$ð 0ó ��ó ð !* §	¢	Ð*GÈÓ MÐQTÑ TÑ à&×/Ñ/ØØ$ð 0ó ��ó ð '×/Ñ/ØØ$ð 0ó ��ó ð +×3Ñ3ØØ(ð 4ó Ñ �Dó ð
 ,×4Ñ4ØØ)ð 5ó Ñ �Tó ñ ò Ñ%8Ð!8ò Ø	‡M‚M×Òò VØ
‡]‚]×ÒÒTš5 §¢¨%¯-ª-×*;Ò*;×*AÒ*AÀ#Ó*FÀqÈÐ*KÓ!LÓMÐQTÑTñ ñ
 Òd §¢×!3Ò!3Ò!c¹¸E¿MºM×<NÒ<N×<TÒ<TÐUXÓ<YÐZ[Ñ<\Ó8]ÐacÑ8c�ó	ð ,×4Ñ4ØØ%Ø ˆy× Ñ Ñ!<ÐEZÔ[ð 5ó Ñ �Tó ò Ð%¨¯©Ñ3Ù�I�B—I’IÐ2°CÓ8Ó9�IØ—:’:×*Ò*Ó,¨QÑ/°'Ñ9�Là	‡J‚J×.Ò.ªu±lÁYÐQTÁ_Ñ6TÑXdÑ5dÑgpÑ5pÐrsÓ/tÔuà#�×#Ò# E§J¢J×$;Ò$;Ó$=¸ÓO�óô�5—?’?×4Ò4õ ð !0× 8Ñ 8ØØ(ð !9ó !Ñ ˜ó ð
 ,×4Ñ4ØØ)ð 5ó Ñ �Tó ð .×6Ñ6ØØ&ÙHð 7ó Ñ �tó ò Üà79€E‡M‚M×ÒÕ4à38€E‡M‚M×ÒÕ0à05€E‡M‚M×ÒÕ-ÚÜ%Ø15ˆ�Š×ÒÕ.óMó@óMóSóiõð8 MÙ"9ôõ*õõ&õ<^õð. (,ò#Ø�™#˜s˜(Ñ#Ñ$ð#à‰c�3ˆhÑõ#ðN ˆr�yŠyÑ/Ó0°CÑ7�âØ;?€E‡H‚H×Ò×!Ò!Õ8ô
ð  "1×!9Ñ!9ÙÙ.ð ":ó "Ñ ˜$ô ð ‡H‚H�E—J‘JØ‡H‚H�E—K’KØ‡I‚I�E—L’LØ‡I‚I�E—L’LØ‡I‚I�E—L’LØ‡G‚G�E—J’JØ‡H‚H�E—K’KØ‡H‚H�E—K’KØ‡H‚H�E—K’KØ‡J‚J�E—M’MØ‡J‚J�E—M’MØ‡J‚J�E—M’MØ‡L‚L�E—O’OØ‡M‚M�E×$Ò$ðÑ ô*8ôñ ð
 */¯ªÑ˜bŸgšgÑ&ñ >W×=\Ò=\Ó=^×_©\¨c°5˜U S™[Ó_Ñ Ù ×  Ò  Ø	‡N‚N�B—J’JØ	‡O‚O�R—\’\ð"ô ñ 	>Ø�mŠm×"Ò"×<Ò<õñ2Ñ!P÷ ñ˜˜s¡C˜x™õ ôñ˜˜c¡3˜h™õ ô@ñÑ N÷ ôôôöôñÑ$V÷ ô"ô÷ ô  ÷2
Wô 
W÷ 	@ô 	@÷
Yô 
YôRö:öTÐõ Tôô(ô
ôô?ôôôôô4ôôôöô(-ôð ×Ñò-ó ñ-ð ×Ñò9ó ñ9ô7ôö÷./ô /÷4y(ô y(ðv ò@ó ñ@ð ò"ó ñ"ðL$jÝô4ñ ×Ò×(Ò(ÙÚØÙ#-×#9Ò#9×#BÒ#BÐ"CØÙÙ ×*Ò*×1Ò1õ	3ô4ñ ×Ò×(Ò(ÙÚÙ#-×#9Ò#9×#BÒ#BÐ"CØÙÙ ×*Ò*×1Ò1õ		3ô4ñ ×Ò×(Ò(ÙÚÙ#-×#9Ò#9×#BÒ#BÐ"CØÙÙ ×*Ò*×2Ò2õ		4ô5ñ ×Ò×$Ò$ÙŠ 9 2§9¢9Ñ-IÉ5Ó#Qôñ°ð ¸õ ñK`˜(×+Ò+õ K`öl&6˜õ &6öR7:˜
õ 7:öt ˜õ  ö2
�~õ 
ö,T�4õ Tö6‘õ ö
‰lõ ö‰|õ ö‘õ ö9°8·=²=×3UÒ3Uõ 9ð ñ' Tó 'ó ñ'÷ô ö
rGˆz×"Ò"õ rGöj/	‘8õ 	ö,ô(ñ  *�Ù(�à#'¹õ ö4ð2 16·²ÀUõ 	0ñ @CÉ%÷ &ô4ô*ôôôð AFÇÂÐUZ÷ 	ôDôô
Ið _d÷ ô*&ô>ñ
/¨Cñ 
/°sñ 
/Èð 
/ÐQV×Q]ÑQ]õ 
/öö*6sôr1ô3Hðl Ñ ôôEô	ö�R—Z’Zõ ñ Ñ à!0×!9Ñ!9ÙÙ.ð ":ó "Ñ ˜$ô ð
 )˜ŸšÙÙKóÑ ô:ö,Lô*Dð ñ�#ð ˜( 4™.ó ó ñð —k’k¡4Ø—l’l¡DØ—j’j¡$Ø—n’n¡dð,Ñ ôôð& ×Ñòó ññ3 Cð 3¨Dõ 3ôô(ôFñ%9˜t C™yñ %9°·²ñ %9ÀeÇlÂlõ %9ôPôô ô*$ð 
‡N‚N‘FØ	‡M‚M‘5Ø	‡M‚M‘5Ø	‡M‚M‘5Ø	‡O‚O‘UØ	‡O‚O‘UØ	×Ò‘fØ	‡J‚J‘Ø	‡K‚K‘Ø	‡K‚K‘Ø	‡K‚K‘Ø	‡J�J‘Ø	‡K‚K‘ð�ð" ×Òð#™5ó #ó ñ#ñ< ‰CƒL�ñP�x×(Ò(ñ P°8¹A±;ð PÁ1õ Pôð ò=ó ñ=ô	ôöH>‘Hõ H>ôTöD&[™8õ &[ñR ÷	ò 	ó ñ	ð %)¸$ÀTÐPQ÷ ðB Ø ¨u¯|©|ó 'ó ñ'ôTBõøðsl ò ØƒJðüóL6 `øðT ò jØ€H‡M‚MÑYÑ[h×iðjús8   Å&Af
 ÁGAfÁN:EAf Áf
AfÁfAfÁfAf=Áf<Af=