+
    ˜°³j^; ã                   ó3  a€ ERñ Et<0 t R t^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI t ^ RI!H"t"H#t# ^ RIH$t$H%t% ^ RIH&t& ^ RI'H(t( ^ RI)H*t* ^ RIH+t+H,t, ^ RI-H.t.H/t/ ^ R	IH0t0 ^ R
I1H2t2 ^ RI3H4t4H5t5 ^ RI!H6t6 ^ RI!H7t7H8t8 ^ RI9H:t: ^ RI;t;^ RI<t=^ RI>t>^ RI?t?^ RI@t?^ RIAt?^ RIBt?^ RICt?^ RIDt?^ RI?HEtE ^ RIFHGtGHHtH ^ RIIHJtJ ^ RIKHLtL ^ RIMHNtNHOtOHPtPHQtQHRtR ^ RISHTtTHUtU ^ RIVHWtW ^ RIXHYtYHZtZH[t[H\t\H]t]H^t^H_t_ ^ RI`Hata ^ RIbHctc ^ RIdHeu Hftg ^ RIhHiti ^ RIjHktk  ^ RIltlRtmRtoERòtpERótqERôtrERõtsERöttER÷tu ! R R]*4      tv ! R  R!]*4      twR"sxRsy] ^ k R"szR"s{^ s|Rs}^ s~RsR"s€Rs�Rs‚RsƒR"s„. s…] ^k Rs†Rs‡] ^k R# R$ ltˆR% R& lt‰R' tŠR( t‹ ! R) R*4      tŒ]EP                  ! ]Ž4      t�]?EP                   EP#                  4        R+t’]P&                  R,8X  d   R-t’]ŒEP'                  R.R/RR0 R17      t”] ^k ]ŒEP'                  R2R3R4 RR57      t•] ^k ]EP,                  EP/                  R64      RJt˜] ^k ]™! ]?EP4                  R74      ;'       d    ]?EP4                  EP6                  tœ]ŒEP'                  R8R9]œRR:7      t�] ^k ]ŒEP'                  R;R<RR=7      tž] ^k ]ŒEP'                  R>R?RR=7      tŸ] ^k ]ŒEP'                  R@RA]�'       * RR:7      t ] ^	k ]ŒEPC                  RBRCRRRD RE7      t¢] ^
k ]ŒEPC                  RFRFRRRG RE7      t£] ^k RHt¤RIt¥/ s¦/ s§RJ RK lt¨RL t©]EPT                  ! RMR"4      ;'       g    ]¨! 4       t«]«'       d   ]©! ]«4      s§]«]EP,                  RM&   ]EPT                  ! RNR"4      '       d   ]©! ]EPT                  ! RNR"4      4      s¦RORPRQRRRSRT]?EPX                  EP[                  4       3t®ERøt¯Rt°. ERùOt±]²;QJ d    RU ]± 4       F  '       g   K   RM	  RM! RU ]± 4       4      t³RV t´RW RX ltµ]( ! RY RZ4      4       t¶R[ R\ lt·R] R^ lt¸ ! R_ R`4      t¹ ! Ra Rb4      tºRc t»Rd t¼Re t½ ! Rf Rg4      t¾ ! Rh Ri]º4      t¿ ! Rj Rk]º4      tÀ ! Rl Rm]º4      tÁRn tÂ]%Ro 4       tÃ]%Rp 4       tÄ]%Rq 4       tÅ]?EPX                  EPŒ                  EPŽ                  tÈ]?EPX                  EP’                  EPŽ                  tÊRr tËRs tÌRt tÍRu tÎ]Í]?EPX                  EPŒ                  nÇ        ]Î]?EPX                  EP’                  nÇ        Rv tÏRw tÐERúRx ltÑERûRy ltÒERüRz R{ lltÓR| tÔR} tÕR~ tÖR t×R€ tØR� tÙERýR‚ ltÚRƒ R„ ltÛR… R† ltÜ ! R‡ Rˆ]EPº                  4      tÞERúR‰ ltß]P&                  RŠ8H  tà]P&                  R,8H  tá]P&                  R‹8H  tâ]EPÆ                  ! 4       RŒ8H  tä]EPÆ                  ! 4       ERþ9   tå]EPÆ                  ! 4       ERÿ9   tæ]EPÆ                  ! 4       R�8H  tç]?EPÐ                  EPÓ                  4       EP/                  RŽR4      tê]?EPÐ                  EPÓ                  4       EP/                  R�R4      të]?EPX                  EPÙ                  4       ER 9   tí]?EPX                  EPÙ                  4       R�8H  tî]á'       d
   ]%R‘ 4       tïM]%R’ 4       tï]á'       d   ]%ERúR“ l4       tðM]%ERúR” l4       tðR• tñ]ñ ! R– R—4      4       tò]EPæ                  ! 4       R˜8H  tô]c! R™4      tõ]c! Rš4      tö]c! R›4      t÷]?EP                   EPð                  EPó                  4       tú]?EP                   EPö                  EPø                  ;'       d(    ]?EP                   EPö                  EPó                  4       tý]?EP                   EPö                  EPó                  4       ;'       d(    ]?EPü                  EPö                  EPÿ                  4       Et ]?EP                   EP                  EPó                  4       EtE]! RœEP	                  ]EP
                  ! 4       ^ ,          EP                  Rœ4      R�,          4      ;'       g    ER4      Et]?EP                  EPó                  4       Et	E]
! ]™! ]?Rž4      ;'       d    ]?EP                  EPó                  4       4      Et]?EP                  EPó                  4       Et]ò! RŸ 4      Et]ò! R  4      Et]ò! R¡ 4      EtE]! ]?]?EPX                  EP[                  4       R4      Et]k! 4       Et]?EPX                  EP[                  4       Et]c! R¢4      Et]c! R£4      Et]c! R¤4      Et]c! R¥4      ;'       d    ]æ'       * Et]c! R¦4      Et]c! R§4      Et ! R¨ R©4      EtE]! 4       Et]ò! Rª 4      Et]ò! R« 4      Et]ò! R¬ 4      Et R­ R® lEt!ROE]!! ]EPT                  ! R¯R"4      4      9   Et"]EPF                  ! E]'       * R°4      Et$]EPF                  ! E]'       * R±4      Et%]EPF                  ! E]'       * R²4      Et&]EPF                  ! E] '       * R³4      Et'ERúR´ Rµ llEt(ERúR¶ R· llEt)R¸ R¹ lEt*Rº R» lEt+R¼ R½ lEt,REt-] ^k ]ŒEP'                  R¾R¿RÀ7      Et.] ^k ]ŒEP'                  RÁRÂRÀ7      Et/] ^k ]ŒEP'                  RÃRÄRÀ7      Et0] ^k ]ŒEP'                  RÅRÆRÀ7      Et1] ^k ]ŒEP'                  RÇRÈRÉ RÊ7      Et2] ^k ]ŒEP'                  RËRÌRÀ7      Et3] ^k ]EPT                  ! RÍRÎ4      RÏ8H  Et4]ŒEP'                  RÐRÑRÀ7      Et5] ^k ]ŒEP'                  RÒRÓRÀ7      Et6] ^k ]ŒEP'                  RÔRÕRÀ7      Et7] ^k ]ŒEP'                  RÖR×RÀ7      Et8] ^k E];'       dI    E]8'       * ;'       d9    ]?EPr                  EP                  ;'       g    ]?EPr                  EPt                  Et;E];'       d    ]?EPr                  EP                  RJEt<E];;'       d    ]?EPr                  EP                  RJEt=]c! RØ4      ;'       d    ]?EPr                  EP                  RJEt>]c! RÙ4      ;'       d    ]?EPr                  EP                  RJEt?]EPF                  ! E]?'       * RÚ4      Et@E]>'       d   RÛ EtAMREtARÜ EtB]ŒEP'                  RÝRÞ]PV                  ! E]BRßRà7      Rá7      EtC] ^k E]'       d    Râ]EP,                  9   dŽ   E]D! ]EPT                  ! RâRã4      4      EtE]?EP                  EP�                  4       ^,          ER,          EtG]?EP                  EP‘                  E]I! E]GE]ERä,          ,
          E]G,          E]E,          ^4      4       ]EP”                  ! ]?EP                  EPó                  4       Rå4      EtKRæ EtLRç EtM ! Rè Ré]?EPœ                  EPž                  4      EtP]ŒEP'                  RêRëRÀ7      EtQ] ^k ]ŒEP'                  RìRíRÀ7      EtR] ^k ]ŒEP'                  RîRïRð RÊ7      EtS] ^k ]ŒEP'                  RñRòRÀ7      EtT] ^k E]S'       d±   ^ REIUt?^@]?EP¬                  EP®                  EnX        R]?EP¬                  EP®                  EnY        R]?EP¬                  EP®                  EnZ        E]Q'       d%   ^ REI[t?R]?EP¸                  EP®                  En]        M$E]T'       * ]?EP¬                  EP®                  En^        Ró Et_]EP”                  ! ]úRô4      Et`]EP”                  ! ]ýRõ4      EtaRö EtbR÷ EtcRø EtdRù EteRú EtfRû EtgRü EthRý EtiRþ Rÿ lEtjER  ER lEtkER EtlERER lEtmERER lEtnERE]Q3ER lEtoERER lEtpERER lEtqERúER	 lEtrERýER
 lEtsERER lEttERER lEtuERúER ER llEtv]EPT                  ! ER4      RÏ8H  EtwE]w'       d*   R]?EPð                  EPò                  EPô                  En{        ]ŒEP'                  ERERRÀ7      Et|] ^k ]=EPú                  ]?EP                  ]=EPü                  ]?EPü                  ]=EPþ                  ]?EPþ                  ]=EP                   ]?EP                   ]=EP                  ]?EP                  ]=EP                  ]?EP                  ]=EP                  ]?EP                  ]=EP                  ]?EP                  ]=EP
                  ]?EP
                  ]=EP                  ]?EP                  ]=EP                  ]?EP                  ]=EP                  ]?EP                  ]=EP                  ]?EP                  ]=EP                  ]?EP                  /Et‹ER EtŒER Et�]á'       d   ]?EPˆ                  E]‹]=EP                  &   E]‹EP                  4        U Uu/ uF  w  rWbK	  	  upp Et�E]�EP#                  ]?EP$                  ]=EP                  ]?EP&                  ]=EP                  /4       ER	ER lEt”ERúERER/ER llEt•ERúERER/ER llEt–ER
ER ER llEt—ER ER lEt˜ER ER lEt™ER EtšER  ER! lEt›ER" EtœER# Et�ERúERER$/ER% llEtžERúERER$/ER& llEtŸER' Et ER( Et¡ER) Et¢ER* ER+ lEt£ERúER, lEt¤ERúER- lEt¥ER. Et¦ERúERER//ER0 llEt§ERúERER//ER1 llEt¨]EP”                  ! E]>ER24      Et©ER3 EtªER4 Et«ER5 Et¬ER6 Et­ ! ER7 ER84      Et® ! ER9 ER:4      Et¯ ! ER; ER<4      Et° ! ER= ER>4      Et±ER? Et²ERúER@ lEt³ ! ERA ERB]º4      Et´ERC EtµERD Et¶ERE Et·ERF Et¸ERG Et¹ERH EtºERI Et»ERJ Et¼ERK Et½ERL Et¾ERM Et¿ERN EtÀERO EtÁERP EtÂERúERQ lEtÃERR EtÄERúERS lEtÅ]PJ                  ERT 4       EtÆ ! ERU ERV4      EtÇ]PJ                  ERW 4       EtÈERX EtÉERY EtÊERERZ lEtË ! ER[ ER\4      EtÌ ! ER] ER^4      EtÍ]%ER_ 4       EtÎ]%ER` 4       EtÏ ^ REIÐEtÐERa EtÑE]ÐEP¢                  EP¥                  ERbE]Ñ! RE]ÐEP¦                  EP¨                  .R^2E]ÐEPª                  EP¬                  ERc7      4       E]ÐEP¢                  EP¥                  ERdE]Ñ! E]ÐEP¦                  EP¨                  .R^
E]ÐEPª                  EP¬                  ERe7      4       E]ÐEP¢                  EP¥                  ERfE]Ñ! E]ÐEP¦                  EP¨                  .RERgE]ÐEPª                  EP®                  ERe7      4       E]ÐEP¢                  EP±                  ]”'       d   ERbM]EPT                  ! ERhERd4      4       ERk ERl lEtÛERm ERn lEtÜ ! ERo ERp]Z4      EtÝ ! ERq ERr]]4      EtÞ ! ERs ERt]_4      Etß ! ERu ERv]_4      Età ! ERw ERx]^4      Etá ! ERy ERzE]á4      Etâ ! ER{ ER|E]á4      Etã ! ER} ER~E]á4      Etä ! ER ER€E]á4      Etå ! ER� ER‚]EPÌ                  EPÎ                  4      Etè]%ERƒ ER„ l4       Eté ! ER… ER†4      Etê ! ER‡ ERˆ];EPÖ                  4      Etë ! ER‰ ERŠE]ë4      EtìERER‹ lEtíERŒ EtîER�EtïERŽEtðRE]ï3ER� lEtñERER� lEtò]?EPæ                  RO3ER‘ lEtôER’ER“ER”ER•/ER– lEtõER— EtöER˜ Et÷ER™ EtøERš EtùER› EtúERœ]?EPæ                  ER�RO/ERž lEtûERŸ EtüER  EtýER¡ EtþER¢R/ER£ lEtÿER¤ Et ER¥ EtER¦ EtER§ ER¨ lEtERERª lEtERER« lEtER¬ EtER­ EtREsER® Et	ER¯ Et
ER° Et ! ER± ER²]EP                  4      EtER³Et]ŒEP'                  ER´ERµRÀ7      Et] ^k ]EPF                  ! E]ER¶4      EtER· EtERúER¸ lEtER¹ Et]%ERº ER» l4       Et]?EP                  ER¼]?EPæ                  ER¼]?EP*                  ER©]?EP$                  ER½/EtER¾ EtER¿ Et]PJ                  ERÀ 4       EtERÁ ERÂ lEtERÃ EtERÄ EtERÅ EtERÆ ERÇ lEtERÈ EtERÉ Et ERÊ Et!ERË Et"ERÌ ERÍ lEt#ERÎ ERÏ lEt$]EPJ                  ERERÐ ERÑ ll4       Et&]5! ERÒ4      Et'ERÓ ERÔ lEt(ERÕ Et)]%ERÖ 4       Et*ER× Et+ERØ Et, ! ERÙ ERÚE]ë4      Et- ! ERÛ ERÜE]ë4      Et.ERÝRERÞRERßRERà^ ERáRERâR/ERã lEt/]%^]?PŠ                  3ERä l4       Et0ERå Et1ERæ Et2ERç Et3ERè Et4ERé Et5ERê Et6ERë Et7ERì Et8ERí ERî lEt9ERï Et:ERERð lEt;R#   ]n d    Rtm ELãi ; iu upp i   ]n d    ] EP²                  ! ERiE]Ú^ERj7        ELòi ; i(  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ÚTypeVar©ÚCallable)ÚIterableÚIterator)Ú	MagicMock)ÚTensor)Ú
ScriptDictÚ
ScriptList)Úget_writable_path)Úopen_source_signpost)Ú
ModuleDictÚ
ModuleListÚParameterDictÚParameterListÚ
Sequential©Úregister_custom_op_symbolicÚunregister_custom_op_symbolic)Úmake_tensor)Ú_unwrap_dtensor_for_comparisonÚBooleanPairÚNonePairÚnot_close_error_metasÚ
NumberPairÚPairÚTensorLikePair)Úget_all_dtypes)Ú_check_module_exists)Úcpp_extension)Ú!_is_privateuse1_backend_availableTFiÒ  c                   ó"   € ] tR t^pt^t^t^tRtR# )ÚProfilingMode© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚLEGACYÚSIMPLEÚ	PROFILINGÚ__static_attributes__r1   ó    Úe/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/testing/_internal/common_utils.pyr0   r0   p   s   † Ø€FØ€FØ„Ir:   r0   c                   ó2   € ] tR t^utRtRtRtRtRtRt	Rt
RtR	# )
ÚHardwareClassificationuÅ  Hardware classification metadata for test classes.

Test classes declare a ``hw_classification`` class attribute to indicate
the kind of hardware their tests require.  When ``--hw-classification``
is passed, only tests whose classification matches one of the requested
values are executed.  When the flag is not specified, all test discovery
and execution paths remain unchanged.

Currently there are three hardware classification categories:

* ``GENERIC`` â€“ tests that exercise shared, device-agnostic logic
  (e.g. Dynamo dispatcher, FX passes, and other framework internals
  that do not depend on a particular accelerator).  These test classes
  typically do **not** use
  :func:`~torch.testing._internal.common_utils.instantiate_device_type_tests`.

* ``ACCELERATOR`` â€“ tests that verify behavior which must hold
  across every accelerator (e.g. operator semantics, memory profiling).
  These test classes **are** instantiated via
  :func:`~torch.testing._internal.common_utils.instantiate_device_type_tests`.

* ``CPU``, ``CUDA``, ``MPS``, ``XPU`` â€“ tests tied to a specific device.
  Use sparingly, and only for device-specific behavior.  These replace
  ``@onlyCPU``, ``@onlyCUDA``, and similar decorators

Usage::

    class TestFoo(TestCase):
        hw_classification = HardwareClassification.GENERIC

        def test_bar(self):
            ...

Run only GENERIC and ACCELERATOR tests:

    python test/test_torch.py --hw-classification GENERIC ACCELERATOR

ÚgenericÚacceleratorÚcpuÚcudaÚmpsÚxpur1   N)r2   r3   r4   r5   Ú__doc__ÚGENERICÚACCELERATORÚCPUÚCUDAÚMPSÚXPUr9   r1   r:   r;   r=   r=   u   s(   † ñ%ðL €GØ€KØ
€CØ€DØ
€CØ
„Cr:   r=   Ú c                óh   € V ^8„  d   QhR\         \        P                  ,          R\        R,          /# )é   Útest_case_clsÚreturnN)ÚtypeÚunittestÚTestCaser=   )Úformats   "r;   Ú__annotate__rT   ·   s,   € ÷ ñ Üœ×)Ñ)Õ*ðä˜dÕ"ñr:   c                 ó¢   € \        V R R4      pVf   R# \        V\        4      '       g&   \        V P                   RV P
                   R24      hV# )Úhw_classificationNÚ.z3.hw_classification must be a HardwareClassification)ÚgetattrÚ
isinstancer=   Ú	TypeErrorr3   r2   )rN   Úrequirements   & r;   Úget_hw_classificationr\   ·   se   € ô ˜-Ð)<¸dÓC€KØÒÙä�kÔ#9×:Ò:ÜØ×'Ñ'Ð(¨¨-×*@Ñ*@Ð)Að BAð Aó
ð 	
ð
 Ðr:   c          
      óÆ   € V ^8„  d   QhR\         \        ,          R\        \        ,          R\        \        .\
        R,          3,          R\        \        .R3,          RR/# )rM   Úitemsr[   Ú	get_classNÚon_matchrO   )r   r   Úsetr=   r   rP   )rS   s   "r;   rT   rT   Ç   s_   € ÷ (ñ (Ü”C�=ð(äÔ+Õ,ð(ô œ˜œt d�{Ð*Õ+ð(ô
 œ�u˜d�{Õ#ð(ð 
ñ(r:   c               óò  € ^ p^ p^ p^ pV  FV  pV^,          pV! V4      p	V	f   V^,          pK#  \        V	4      p
V
f   V^,          pK=  W¡9   g   KE  V^,          pV! V4       KX  	  WE,
          V,
          V,
          pRV Uu. uF  qÌP                  NK  	  up R2RV RV R2RV R2.pV^ 8”  d   VP                  RV R24       VP                  R	V 24       \        R
P	                  V4      4       R# u upi )a(  Filter items by hardware classification and print a summary.

For each item, `get_class` extracts the associated test class. Items whose
hardware classification is in `requirement` are passed to `on_match`, if
provided. Prints a summary of matched, mismatched, unclassified, and
classless items.
NzHW classification mode active (z):ztotal=z	, passed=Ú,zunclassified=z	no_class=zmismatched=Ú )r\   ÚnameÚappendÚprintÚjoin)r^   r[   r_   r`   ÚtotalÚpassedÚno_classÚunclassifiedÚitemÚclsÚclassificationÚ
mismatchedÚeÚpartss   &&&$          r;   Úfilter_by_hw_classificationrs   Ç   s  € ð €EØ€FØ€HØ€LÛˆØ��
ˆÙ˜‹oˆØŠ;Ø˜�MˆHÙÜ.¨sÓ3ˆØÒ!Ø˜AÕŠLØÖ*Ø�a�KˆFÙ�TŽNñ ð • ,Õ.°Õ9€Jà
)¹;Ó*G¹;°a¯6¬6¹;Ñ*GÐ)HÈÐKØ
���y  ¨Ð*Ø
˜�~ QÐ'ð€Eð
 �!„|Ø�‰�y  
¨!Ð,Ô-Ø	‡L�L�;˜z˜lÐ+Ô,Ü	ˆ#�(‰(�5‹/Öùò +Hs   Â C4c                  óê   € \         P                  P                  4       '       dO   \         P                  P                  ^ 4      p V P                  P                  R4      ^ ,          pV\        9   d   R# R# )é    Ú:TF)ÚtorchrA   Úis_availableÚget_device_propertiesÚgcnArchNameÚsplitÚ
NAVI3_ARCH)ÚpropÚgfx_archs     r;   Úis_navi3_archr   ò   sR   € Ü‡z�z×Ñ× Ò Ü�z‰z×/Ñ/°Ó2ˆØ×#Ñ#×)Ñ)¨#Ó.¨qÕ1ˆØ”zÔ!ÙÙr:   c                  óV   € \         P                  P                  P                  ! V / VB # ©N)rw   ÚtestingÚ_utilsÚfreeze_rng_state©ÚargsÚkwargss   *,r;   r„   r„   ú   s"   € Ü�=‰=×Ñ×0Ò0°$ÐA¸&ÑAÐAr:   c                   óŒ   a € ] tR tRt o / t]RRRR R 3R l4       t]RRRR 3R	 l4       t]V 3R
 lR l4       tV 3R lt	Rt
V tR# )ÚTestEnvironmenti  NFTc                ó&   € V'       d   V R 8g  # V R8H  # )Ú0Ú1r1   )Úenv_var_valÚdefaults   &&r;   Ú<lambda>ÚTestEnvironment.<lambda>&  s   € ß$+ˆ[˜CÑÐE°+ÀÑ2DÐEr:   c                 ó   € R # ©Fr1   r1   r:   r;   r�   r�   (  s   € ™er:   c                ó4  € TpR pVe   \         P                  ! V4      pV! Wr4      pRpVf   V! 4       pT;'       g    TpV'       d&   Ve"   Wb8w  d   V'       g   V\        P                  V&   V \	        4       9   d   \        RV  R24      hV\	        4       V &   V# )NFzduplicate definition of flag 'Ú'©ÚosÚgetenvr‰   Úrepro_env_varsÚglobalsÚAssertionError)	re   Úenv_varrŽ   Úinclude_in_reproÚ
enabled_fnÚimplied_by_fnÚenabledr�   Úimplieds	   &&&&&&   r;   Údef_flagÚTestEnvironment.def_flag   sœ   € ð ˆØˆØÒÜŸ)š) GÓ,ˆKÙ  Ó6ˆGØˆØÒÙ#“oˆGØ×(Ð( ˆGß Ò!4¸7Ô;M×W^Ø6AŒO×*Ñ*¨7Ñ3ð ”7“9ÔÜ Ð#AÀ$ÀÀqÐ!IÓJÐJØ!Œ‹	�$‰Øˆr:   c                ó   € V # r�   r1   )Úmaybe_val_strs   &r;   r�   r�   S  s   € ¡}r:   c                óæ   € Vf   TM\         P                  ! V4      pV! V4      pV'       d   WR8w  d   V\        P                  V&   V \	        4       9   d   \        RV  R24      hV\	        4       V &   V# )Nz!duplicate definition of setting 'r”   r•   )re   r›   rŽ   rœ   Úparse_fnÚvalues   &&&&& r;   Údef_settingÚTestEnvironment.def_settingM  sj   € ð #š?‘´·	²	¸'Ó0BˆÙ˜“ˆß Ô!1Ø6;ŒO×*Ñ*¨7Ñ3ð ”7“9ÔÜ Ð#DÀTÀFÈ!Ð!LÓMÐMØŒ‹	�$‰Øˆr:   c                ó    <€ V ^8„  d   QhRS[ /# ©rM   rO   ©Ústr)rS   Ú__classdict__s   "€r;   rT   ÚTestEnvironment.__annotate__e  s   ø€ ÷ Xñ X¡#ñ Xr:   c            	     óš   € R P                  \        P                  P                  4        U Uu. uF  w  rV  RV 2NK  	  upp 4      # u upp i )rd   Ú=)rh   r‰   r˜   r^   )r›   r§   s     r;   Úrepro_env_var_prefixÚ$TestEnvironment.repro_env_var_prefixd  sT   € à�x‰xÜ/>×/MÑ/M×/SÑ/SÔ/UôWÙ/U™^˜Wð $˜9 A e WÓ-Ù/UòWó Xð 	Xùó Ws   ­A
c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )rM   r˜   )Údict)rS   r®   s   "€r;   rT   r¯     s   ø‡ ‚ ñ Ñò	 r:   r1   )r2   r3   r4   r5   r˜   Ústaticmethodr¡   r¨   r²   Ú__annotate_func__r9   Ú__classdictcell__©r®   s   @r;   r‰   r‰     su   ø‡ € ð €Nð4 ð ØØñGá#óó ððX ð ØØÙ4óó ðð, ÷Xó ðX÷G ƒ r:   r‰   zfile://Úwin32zfile:///ÚIS_CIÚCIc                 ó   € \        V 4      # r�   ©Úbool)Úenv_var_valueÚ_s   &&r;   r�   r�   z  s	   € ¬¨]Ô(;r:   )r›   rœ   r�   ÚIS_SANDCASTLEÚ
SANDCASTLEc                  ó4   € \         P                  ! R 4      R8H  # )ÚTW_JOB_USERÚ
sandcastle)r–   r—   r1   r:   r;   r�   r�     s   € œ"Ÿ)š) MÓ2°lÒBr:   )r›   rž   rœ   ÚINSIDE_RE_WORKERÚIS_FBSOURCEÚ	IS_FBCODEÚPYTORCH_TEST_FBCODE)r›   rŽ   rœ   ÚIS_REMOTE_GPUÚPYTORCH_TEST_REMOTE_GPU)r›   rœ   Ú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                 ó$   € V f   R # \        V 4      # r�   ©Úint©Úvals   &r;   r�   r�   ª  ó   €  ¢˜Ð:´#°c³(Ð:r:   )r›   rŽ   rœ   r¦   ÚOPINFO_RESTRICT_TO_DSLc                 ó$   € V f   R # \        V 4      # r�   r¬   rÖ   s   &r;   r�   r�   ·  rØ   r:   z.pytorch-disabled-tests.jsonzslow_tests.jsonc                ó$   € V ^8„  d   QhR\         /# r«   r¬   )rS   s   "r;   rT   rT   Â  s   € ÷ 8ñ 8¬Cñ 8r:   c                  ó¸   € \         '       g   R # \        P                  P                  R\        4      p \
        P                  P                  V 4      '       d   V # R # )rK   Útest)rÂ   rw   Ú_utils_internalÚget_file_pathÚDEFAULT_SLOW_TESTS_FILEr–   ÚpathÚisfile)Úfilenames    r;   Ú"resolve_sandcastle_slow_tests_filerä   Â  s@   € ß‹=Ùä×$Ñ$×2Ñ2°6Ô;RÓS€HÜ—w‘w—~‘~ h×/Ò/ˆ8Ð7°RÐ7r:   c                 ó
  € \         P                  P                  V 4      '       d5   \        V 4      ;_uu_ 4       p\        P
                  ! V4      uuR R R 4       # \        P                  RV 4       / #   + '       g   i     L(; i)Nz7Attempted to load json file '%s' but it does not exist.)r–   rá   râ   ÚopenÚjsonÚloadÚlogÚwarning)rã   Úfps   & r;   Úmaybe_load_jsonrì   Ê  sN   € Ü	‡w�w‡~�~�h×ÒÜ�(�^Œ^˜rÜ—9’9˜R“=÷ Š^ä‡K�KÐIÈ8ÔTØ€I÷ �^ús   ¹A2Á2B	ÚSLOW_TESTS_FILEÚDISABLED_TESTS_FILEr@   rA   rC   ÚmetarB   Úmtiac              #   óP   "  € T F  q\         P                   ! 4       9   x € K  	  R # 5ir�   )Úplatform)Ú.0re   s   & r;   Ú	<genexpr>rô   á  s   é € ÐD¹°œ×)Ò)Ó+Ö+»ùs   ‚$&c                 óF   a € \         P                  ! S 4      V 3R  l4       pV# )c                  ó–   <€ \         '       d4   \        P                  ! 4        \        P                  P                  4        S! V / VB  R # r�   )Ú	IS_JETSONÚgcÚcollectrw   rA   Úempty_cache©r†   r‡   Úfns   *,€r;   ÚwrapperÚgcIfJetson.<locals>.wrapperå  s.   ø€ ç‹9Ü�JŠJŒLÜ�J‰J×"Ñ"Ô$Ù
ˆDÐ�FÔr:   ©Ú	functoolsr
   ©rü   rý   s   f r;   Ú
gcIfJetsonr  ã  s%   ø€ ä‡_‚_�RÓôó ðð
 €Nr:   c                ó2   € V ^8„  d   QhR\         R,          /# ©rM   rO   Nr   )rS   s   "r;   rT   rT   ï  s   € ÷ ñ œ D�ñ r:   c                  óò  €  \         P                  ! 4       p V  FÈ  pVP                  pR VP                  9  d   K"  VP                  R ,          p\	        V\
        P                  4      '       g   KW  VP                  4       pVP                  R^4      Ev rVpV\        V4      P                  8X  g   K˜  VP                  R4      '       g   K±  \        W74      P                  pVu # 	  R#   \         d     R# i ; i)ÚselfrW   rÝ   N)ÚinspectÚstackÚframeÚf_localsrY   rQ   rR   ÚidÚrsplitrP   r2   Ú
startswithrX   Ú__func__Ú	Exception)	r  Ú
frame_infor	  Úself_valÚtest_idrÁ   Úcls_nameÚ	test_nameÚtest_fns	            r;   Úextract_test_fnr  ï  sË   € ðÜ—’“ˆÛˆJØ×$Ñ$ˆEØ˜UŸ^™^Ô+ÙØ—~‘~ fÕ-ˆHÜ˜(¤H×$5Ñ$5×6Ô6Ø"Ÿ+™+›-�Ø*1¯.©.¸¸aÓ*@Ñ'�˜iØœt H›~×6Ñ6Ö6¸9×;OÑ;OÐPV×;WÔ;WÜ% hÓ:×CÑC�GØ"’Nñ  ñ øô ô ØÙðús*   ‚A)C' Á0<C' Â1C' Ã
C' Ã#C' Ã'C6Ã5C6c                   ó,   a € ] tR tRt o V 3R ltRtV tR# )ÚTrackedInputi  c                ó>   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[;R&   # )rM   Úindexr×   Ú	type_desc)rÕ   r   r­   )rS   r®   s   "€r;   rT   ÚTrackedInput.__annotate__  s'   ø‡ ‚ á�Jñ ñ 
�Hñ ñ �Nò	 r:   r1   N)r2   r3   r4   r5   r·   r9   r¸   r¹   s   @r;   r  r    s   ø‡ ‡ „ r:   r  c                ó2   € V ^8„  d   QhR\         R,          /# r  ©r  )rS   s   "r;   rT   rT   
  s   € ÷ 3ñ 3œ<¨$Õ.ñ 3r:   c                  ó<   € \        4       p V f   R # \        V RR 4      # ©NÚtracked_input)r  rX   ©r  s    r;   Úget_tracked_inputr#  
  s!   € ÜÓ€GØ‚ÙÜ�7˜O¨TÓ2Ð2r:   c                ó   € V ^8„  d   QhRR/# r  r1   )rS   s   "r;   rT   rT     s   € ÷ !ñ !˜Tñ !r:   c                  ó\   € \        4       p V f   R # \        V R4      '       g   R # R V n        R # r   )r  Úhasattrr!  r"  s    r;   Úclear_tracked_inputr'    s*   € ÜÓ€GØ‚ÙÜ�7˜O×,Ò,ÙØ €GÖr:   c                   óH   a € ] tR tRt o R	R ltR tR tV 3R lR ltRtV t	R# )
ÚTrackedInputIteri  Nc                óØ   € \        V4      V n        W n        W0n        V P                  f	   R V n        W@n        V P                  f	   R V n        \        4       V n        WPn        W`n        R # )Nc                 ó   € V # r�   r1   )ÚxÚis   &&r;   r�   Ú+TrackedInputIter.__init__.<locals>.<lambda>.  s   € ©ar:   c                 ó   € V # r�   r1   ©r,  s   &r;   r�   r.  2  s   € ©Ar:   )	Ú	enumerateÚ
child_iterÚinput_type_descÚitem_callbackÚtrack_callbackr  r  Úset_seedÚrestrict_to_index)r  r2  r3  r4  r5  r6  r7  s   &&&&&&&r;   Ú__init__ÚTrackedInputIter.__init__  sc   € ô $ JÓ/ˆŒà.Ôð +ÔØ×ÑÒ%Ù!/ˆDÔà,ÔØ×ÑÒ&Ù"-ˆDÔÜ&Ó(ˆŒà Œð "3Ör:   c                ó   € V # r�   r1   ©r  s   &r;   Ú__iter__ÚTrackedInputIter.__iter__:  ó   € Øˆr:   c                ó&  €  V P                   '       d‚   V P                  ec   \        P                  \        P
                  ! V P                  P                  P                  R4      4      P                  4       R,          R4      M\        p\        V4       \        V P                  4      w  r#V P                  e   W P                  8X  g   KË   T P                  \        Y P!                  T4      T P"                  R7      4       T P%                  Y24      # )Túutf-8:Né   NÚlittle)r  r×   r  )r6  r  rÕ   Ú
from_bytesÚhashlibÚsha256r4   ÚencodeÚdigestÚSEEDÚset_rng_seedÚnextr2  r7  Ú_set_tracked_inputr  r5  r3  r4  )r  ÚseedÚ	input_idxÚ	input_vals   &   r;   Ú__next__ÚTrackedInputIter.__next__=  sÝ   € ØØ�}�}ˆ}ð
 —|‘|Ò/ô —N‘N¤7§>¢>ØŸ™×1Ñ1×8Ñ8¸ÓAó$CßCIÁ6Ã8ÈBõ$PØQYô[ä59ð ô
 ˜TÔ"ô $(¨¯©Ó#8Ñ ˆIØ×&Ñ&Ò.°I×AWÑAWÖ4WØà×ÑÜØ×%8Ñ%8¸Ó%CÈt×OcÑOcôô	
ð
 ×!Ñ! )Ó7Ð7r:   c                ó    <€ V ^8„  d   QhRS[ /# )rM   r!  r  )rS   r®   s   "€r;   rT   ÚTrackedInputIter.__annotate__T  s   ø€ ÷ 3ñ 3±ñ 3r:   c                ó‚   € V P                   f   R # \        V P                   R4      '       g   R # WP                   n        R # r   )r  r&  r!  )r  r!  s   &&r;   rK  Ú#TrackedInputIter._set_tracked_inputT  s-   € Ø�<‰<ÒÙÜ�t—|‘| _×5Ò5ÙØ%2�‰Ö"r:   )r2  r3  r4  r7  r6  r  r5  )NNTN)
r2   r3   r4   r5   r8  r<  rO  rK  r9   r¸   r¹   s   @r;   r)  r)    s   ø‡ € ô3ò>ò8÷.3ö 3r:   r)  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )Ú_TestParametrizeri[  aX  
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                ó   € \         h)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  rÝ   Úgeneric_clsÚ
device_clss   &&&&r;   Ú_parametrize_testÚ#_TestParametrizer._parametrize_testn  s
   € ô( "Ð!r:   c                ó    € \        VR 4      '       d+   VP                  pV P                  p\        W#4      Vn        V# V P                  Vn        V# )Úparametrize_fn)r&  r^  r[  Úcompose_parametrize_fns)r  rü   Úold_parametrize_fnÚnew_parametrize_fns   &&  r;   Ú__call__Ú_TestParametrizer.__call__„  sR   € Ü�2Ð'×(Ò(à!#×!2Ñ!2ÐØ!%×!7Ñ!7ÐÜ 7Ð8JÓ _ˆBÔð ˆ	ð !%× 6Ñ 6ˆBÔØˆ	r:   r1   N)	r2   r3   r4   r5   rD   r[  rb  r9   r¸   r¹   s   @r;   rV  rV  [  s   ø‡ € ñò$"÷,ð r:   rV  c                ó   € V V3R lpV# )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   ó�  "  € \        V! WV4      4      pV F©  w  rgr‰V! WaV4       F–  w  r«rÍ\        VP                  4       4      P                  VP                  4       4      pV'       d   \	        R V P
                   RV 24      h/ VCVCpRP                  TVR8w  d
   VR8w  d   RMRV4      pW�3R lpV
VVV3x € K˜  	  K«  	  R# 5i)zkParametrization over the same parameter by multiple parametrization decorators is not supported. For test "z8", the following parameters are handled multiple times: z{}{}{}rK   rÁ   c                 óP   € \        V! V 4      4      \        V! V 4      4      ,           # r�   )Úlist)Úparam_kwargsÚ
old_dec_fnÚ
new_dec_fns   &&&r;   Úmerged_decorator_fnÚJcompose_parametrize_fns.<locals>.composite_fn.<locals>.merged_decorator_fn°  s!   € Ü¡
¨<Ó 8Ó9¼DÁÈLÓAYÓ<ZÕZÐZr:   N)rg  ra   ÚkeysÚintersectionÚRuntimeErrorr2   rS   )rÝ   rY  rZ  r`  ra  Ú	old_testsÚold_testÚold_test_nameÚold_param_kwargsri  Únew_testÚnew_test_nameÚnew_param_kwargsrj  Úredundant_paramsÚfull_param_kwargsÚmerged_test_namerk  s   &&&&&             r;   Úcomposite_fnÚ-compose_parametrize_fns.<locals>.composite_fnŸ  s  é € ô Ñ+¨D¸zÓJÓKˆ	ÛGPÑCˆXÐ&6á& x¸jÖIñ H�Ð*:ä#&Ð'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ô [ð  Ð!1Ð3DÐFYÐZÔZó Jó HQùs   ‚CCr1   )r`  ra  rz  s   && r;   r_  r_  �  s   € ð" );Ø(:ô[ð, Ðr:   c                ó2   € RV 9   d   \        RV  R24      hR# )am  
Validates a generated test name at instantiation time. In particular, test names must
not contain '.': unittest.TestLoader.loadTestsFromName resolves dotted names by
splitting on '.' and walking with getattr, so a dotted test name is discoverable in a
full-suite run but breaks any attempt to load the test by name (e.g.
`python test_foo.py TestClass.test_name`).
rW   zTest name "a�  " is invalid: it contains a "." character, which breaks loading the test by name (unittest.TestLoader.loadTestsFromName splits on "."). This name likely comes from a custom name_fn or an explicit subtest name that interpolates a value whose string form contains a dot (e.g. str(torch.bfloat16) == "torch.bfloat16" or a float). Use dtype_name() for dtypes, or sanitize the generated name (e.g. .replace(".", "_")).N©ro  )re   s   &r;   Úvalidate_test_namer~  ¸  s2   € ð ˆd„{ÜØ˜$˜ð  Pð PóQð 	Qñ r:   c           	     óZ  a € \        \        S 4      4       F‘  p\        S V4      p\        VR4      '       g   K#  \	        S V4       V 3R lpVP                  VS RR7       FD  w  rErgVP                   RV 2p\        V4       V! V4       F  p	V	! V4      pK  	  V! S W„VR7       KF  	  K“  	  S # )a5  
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                 ó�   <a€ \        S4      V3V3R  ll4       p\        SV4      '       d   \        RV 24      h\        SW4       R# )c                 ó   <€ S! V 3/ VB  R # r�   r1   )r  rh  rÝ   s   &&€r;   Úinstantiated_testÚZinstantiate_parametrized_tests.<locals>.instantiate_test_helper.<locals>.instantiated_testæ  s   ø€ á�TÑ*˜\Ô*r:   zRedefinition of test N)r
   r&  rš   Úsetattr)rn   re   rÝ   rh  r‚  rY  s   &&f& €r;   Úinstantiate_test_helperÚ?instantiate_parametrized_tests.<locals>.instantiate_test_helperå  sH   ù€ Ü�4‹[Ø5Aö +ó ð+ô �{ D×)Ò)Ü$Ð'<¸T¸FÐ%CÓDÐDÜ�K Ö9r:   N)rY  rZ  rÁ   )rn   re   rÝ   rh  )ÚtupleÚdirrX   r&  Údelattrr^  r2   r~  )
rY  Ú	attr_nameÚ
class_attrr…  rÝ   Útest_suffixrh  Údecorator_fnÚ	full_nameÚ	decorators
   f         r;   Úinstantiate_parametrized_testsr�  Ê  sÄ   ø€ ô$ œ3˜{Ó+Ö,ˆ	Ü˜[¨)Ó4ˆ
Ü�zÐ#3×4Ò4Ùô 	�˜YÔ'õ	:ð @J×?XÑ?XØ¨Àð @Yö @FÑ;ˆT àŸ=™=˜/¨¨;¨-Ð8ˆIÜ˜yÔ)ñ *¨,Ö7�	Ù  “’ñ 8ñ $¨¸)Ð]i×jó@Fñ% -ð8 Ðr:   c                   ó6   a € ] tR tRt o Rt. ROtRR ltRtV tR# )Úsubtestiû  a²  
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.
Nc                óL   € Wn         W n        V'       d	   W0n        R # . V n        R # r�   ©Ú
arg_valuesre   Ú
decorators)r  r•  re   r–  s   &&&&r;   r8  Úsubtest.__init__	  s   € Ø$ŒØŒ	ß(2˜*Ž¸ˆŽr:   )r•  r–  re   r”  ©NN)	r2   r3   r4   r5   rD   Ú	__slots__r8  r9   r¸   r¹   s   @r;   r’  r’  û  s   ø‡ € ñ
ò 5€I÷;ò ;r:   r’  c                   óJ   a € ] tR tRt o RtR
R ltR tR tR
R ltR t	R	t
V tR# )Úparametrizei  aÌ	  
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                ó    € VP                  R 4       Uu. uF  qDR8w  g   K  VP                  4       NK  	  upV n        W n        W0n        R# u upi )rc   rK   N)r{   ÚstripÚ	arg_namesr•  Úname_fn)r  Úarg_strr•  rŸ  Úss   &&&& r;   r8  Úparametrize.__init__G  s@   € Ø8?¿¹ÀcÔ8JÓ$VÑ8J°1ÐSUÉg¤Y Q§W¡W¦YÑ8JÑ$VˆŒØ$ŒØŽùò %Ws
   ”A¡Ac                óˆ  € \        V\        P                  4      '       d   \        V4      # \        V\        P                  4      '       d   \        V4      # \        V4      P                  R9   d   VP                  # \        V\        \        \
        34      '       d!   V R\        V4      P                  RR4       2# V V 2# )zcReturns a string representation for the given arg that is suitable for use in test function names. rÁ   rW   >   ÚOpInfoÚ
ModuleInfo)rY   rw   ÚdtypeÚ
dtype_nameÚdevicer­   rP   r2   Úformatted_namerÕ   ÚfloatÚreplace)r  Úidxre   r§   s   &&&&r;   Ú_formatted_str_reprÚparametrize._formatted_str_reprL  s�   € ä�eœUŸ[™[×)Ò)Ü˜eÓ$Ð$Ü˜œuŸ|™|×,Ò,Ü�u“:Ðä�%‹[×!Ñ!Ð%=Ô=Ø×'Ñ'Ð'Ü˜¤¤U¬CÐ0×1Ò1Ø�V˜1œS ›Z×/Ñ/°°SÓ9Ð:Ð;Ð;à�V˜C˜5�>Ð!r:   c                ó¤   € R P                  \        V P                  VRR7       UUu. uF  w  r4V P                  WV4      NK  	  upp4      # u uppi )rÁ   T©Ústrict)rh   Úziprž  r­  )r  r¬  ÚvaluesÚaÚvs   &&&  r;   Ú_default_subtest_nameÚ!parametrize._default_subtest_nameZ  sC   € Ø�x‰xÌÈTÏ^É^Ð]cÐlpÕIqÔrÑIqÁÀ˜×1Ñ1°#¸!Ö<ÑIqÒrÓsÐsùÓrs   §A
c                óˆ   € V'       d   TpV# V P                   '       d   V P                   ! V!  pV# V P                  W4      pV# r�   )rŸ  r¶  )r  r¬  r³  Úexplicit_nameÚsubtest_names   &&&& r;   Ú_get_subtest_nameÚparametrize._get_subtest_name]  sK   € ßØ(ˆLð
 Ðð	 �\�\ˆ\ØŸ<š<¨Ñ0ˆLð Ðð  ×5Ñ5°cÓBˆLØÐr:   c           
   #  ó  a"  € \        V P                  4      ^ 8X  d   RpSV/ R 3x € R# \        4       ;rV\        V P                  4       EF%  w  ruRp. p	\        V\        4      '       d>   Tp
V
P                  pV
P                  p\        S4      V3R l4       pV
P                  p	TpMSp\        V P                  4      ^8”  d   \        V4      MV.p\        V4      \        V P                  4      8w  d<   \        R\        V4       R\        V P                  4       RSP                   R24      h\        \        V P                  VR	R
7      4      pV P                  WuVR7      pV	3R lpWÄWÞ3x € EK(  	  WVJ d   \!        S R24      hR# 5i)ru   rK   c                 ó   € . # r�   r1   ©rÁ   s   &r;   r�   Ú/parametrize._parametrize_test.<locals>.<lambda>j  s   € ±"r:   Nc                  ó   <€ S! V / VB # r�   r1   ©r†   r‡   rÝ   s   *,€r;   Útest_wrapperÚ3parametrize._parametrize_test.<locals>.test_wrappery  s   ø€ á# TÐ4¨VÑ4Ð4r:   z+Expected # values == # arg names, but got: z values and z names for test "Ú"Tr°  )r¹  c                 ó   € V# r�   r1   )rÁ   r–  s   &&r;   r�  Ú3parametrize._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ž  Úobjectr1  r•  rY   r’  re   r
   r–  rg  ro  r2   rµ   r²  r»  Ú
ValueError)r  rÝ   rY  rZ  r  r³  Úcheck_exhausted_iteratorr¬  Ú
maybe_namer–  ÚsubrÃ  Úgen_testrh  r�  s   &f&&           r;   r[  Úparametrize._parametrize_testf  s’  øé € Üˆt�~‰~Ó !Ô#àˆIØ˜ B©Ð5Ô5ô
 17³Ð8ˆFÜ(¨¯©×9‘�Ø!�
à(*�
Ü˜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¨¯©¸ÀtÔ$LÓM�à ×2Ñ2°3ÈjÐ2ÓY�	à/9ô &ð  ¨LÐGÕGñ=  :ð@ Ó1Ü  D 6ð *Xð "Xó Yð Yñ 2ùs   ƒFF
)rž  r•  rŸ  r�   )r2   r3   r4   r5   rD   r8  r­  r¶  r»  r[  r9   r¸   r¹   s   @r;   r›  r›    s,   ø‡ € ñ6ônò
"òtô÷,Yð ,Yr:   r›  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )Úreparametrizei•  aE  
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                ó   € Wn         W n        R # r�   )ÚparametrizerÚ
adapter_fn)r  rÓ  rÔ  s   &&&r;   r8  Úreparametrize.__init__½  s   € Ø(ÔØ$Žr:   c              #  óº   "  € V P                   P                  WV4       F6  w  rErgV P                  WV4      pVf   K  V F  p	V	f   K	  V	w  r«WJW·3x € K  	  K8  	  R # 5ir�   )rÓ  r[  rÔ  )r  rÝ   rY  rZ  rÎ  r  rh  r�  ÚadaptedÚadapted_itemru  rv  s   &&&&        r;   r[  Úreparametrize._parametrize_testÁ  sb   é € à×!Ñ!×3Ñ3°DÀzÖRñ >ˆX ,à—o‘o iÓ>ˆGØÔ"Û$+�LØ#Ô/Ø:FÑ7˜Ø'Ð8HÐWÔWó %,ó Sùs   ‚5A¼AÁA)rÔ  rÓ  N©	r2   r3   r4   r5   rD   r8  r[  r9   r¸   r¹   s   @r;   rÑ  rÑ  •  s   ø‡ € ñ&òN%÷Xð Xr:   rÑ  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )Ú
decorateIfiÌ  a×  
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                ó   € Wn         W n        R # r�   ©r�  Úpredicate_fn)r  r�  rß  s   &&&r;   r8  ÚdecorateIf.__init__ö  s   € Ø"ŒØ(Ör:   c              #  ó€   a"  € V P                   V P                  3R  lp\        S4      V3R l4       pRpWV/ V3x € R# 5i)c                 ó(   € V! V 4      '       d   V.# . # r�   r1   )Úparamsr�  rß  s   &&&r;   r�  Ú2decorateIf._parametrize_test.<locals>.decorator_fný  s   € Ù˜F×#Ò#Ø!�{Ð"à�	r:   c                  ó   <€ S! V / VB # r�   r1   rÂ  s   *,€r;   rÃ  Ú2decorateIf._parametrize_test.<locals>.test_wrapper  s   ø€ á˜Ð( Ñ(Ð(r:   rK   N)r�  rß  r
   )r  rÝ   rY  rZ  r�  rÃ  r  s   &f&&   r;   r[  ÚdecorateIf._parametrize_testú  sH   øé € ð ,0¯>©>È×HYÑHYô 	ô 
ˆt‹ô	)ó 
ð	)ð ˆ	Ø¨¨LÐ9Ô9ùs   ƒ;>rÞ  NrÚ  r¹   s   @r;   rÜ  rÜ  Ì  s   ø‡ € ñ(òR)÷:ð :r:   rÜ  c                  óz  € \         P                  P                  R 4      p \         P                  P                  R 4      p\         P                  P                  V 4       \         P                  P                  V4       V '       d)   V'       d   \        P
                  # \        P                  # \        P                  # ©T)rw   Ú_CÚ_jit_set_profiling_executorÚ_get_graph_executor_optimizer0   r8   r7   r6   ©Úold_prof_exec_stateÚold_prof_mode_states     r;   Ú cppProfilingFlagsToProfilingModerð    s|   € ÜŸ(™(×>Ñ>¸tÓDÐÜŸ(™(×?Ñ?ÀÓEÐÜ	‡H�H×(Ñ(Ð)<Ô=Ü	‡H�H×)Ñ)Ð*=Ô>çßÜ ×*Ñ*Ð*ä ×'Ñ'Ð'ä×#Ñ#Ð#r:   c               #   óh  "  € R p R p\         '       g   \        R4      h\         \        P                  8X  d?   \        P
                  P                  R4      p \        P
                  P                  R4      p Rx € \         \        P                  8X  dA   \        P
                  P                  V 4       \        P
                  P                  V4       R# R#   \         \        P                  8X  d@   \        P
                  P                  T 4       \        P
                  P                  T4       i i ; i5i)FúGRAPH_EXECUTOR must be setTN)ÚGRAPH_EXECUTORrš   r0   r8   rw   rê  rë  rì  rí  s     r;   Ú)enable_profiling_mode_for_profiling_testsrô    sÕ   é € àÐØÐß‹>ÜÐ9Ó:Ð:Üœ×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    ‚A3D2Á6C Á:AD2ÃAD/Ä/D2c               #   ó–  "  € \         P                  P                  R 4      p \         P                  P                  R 4      p Rx € \         P                  P                  V 4       \         P                  P                  V4       R#   \         P                  P                  T 4       \         P                  P                  T4       i ; i5i)TN)rw   rê  rë  rì  rí  s     r;   Úenable_profiling_moderö  )  s‡   é € äŸ(™(×>Ñ>¸tÓDÐÜŸ(™(×?Ñ?ÀÓEÐðCÛä�‰×,Ñ,Ð-@ÔAÜ�‰×-Ñ-Ð.AÖBøô 	�‰×,Ñ,Ð-@ÔAÜ�‰×-Ñ-Ð.AÕBüs   ‚?C	ÁB ÁA C	ÂA CÃC	c              #   óÜ   "  € \         P                  P                  V 4      p R x € \         P                  P                  V4       R #   \         P                  P                  T4       i ; i5ir�   )rw   rê  Ú_jit_set_num_profiled_runs)Únum_runsÚold_num_runss   & r;   Únum_profiled_runsrû  3  sE   é € ä—8‘8×6Ñ6°xÓ@€Lð:Ûä�‰×+Ñ+¨LÖ9øŒ�‰×+Ñ+¨LÕ9üs   ‚ A,£A §!A,Á!A)Á)A,c                 ó  € R V9   da   VR  \         '       g   \        R4      h\         \        P                  8X  d.   \	        4       ;_uu_ 4        V ! V/ VB  V ! V/ VB uuRRR4       # V ! V/ VB #   + '       g   i     L; i)Úprofile_and_replayrò  N)ró  rš   r0   r8   rô  )Úcallabler†   r‡   s   &*,r;   Úprof_callablerÿ  >  sx   € Ø˜vÔ%ØÐ'Ð(ß‹~Ü Ð!=Ó>Ð>Üœ]×4Ñ4Ô4Ü:×<Õ<Ù˜$Ð) &Ò)Ù Ð0¨Ñ0÷ =Ò<ñ �TÐ$˜VÑ$Ð$÷	 =×<ús   ÁA0Á0B 	c                 ó    € \        R V  R24      h)z>This test file is not meant to be run directly, use:

	python z TESTNAME

instead.r}  )Úfile_to_calls   &r;   Úraise_on_run_directlyr  J  s#   € Ü
ð +Ø+7¨.ð 9"ð"ó #ð #r:   c                  ó(   € \        \        .V O5/ VB # r�   )rÿ  Ú	func_callr…   s   *,r;   Úprof_func_callr  O  ó   € ÜœÐ4 TÒ4¨VÑ4Ð4r:   c                  ó(   € \        \        .V O5/ VB # r�   )rÿ  Ú	meth_callr…   s   *,r;   Úprof_meth_callr	  R  r  r:   c                  ó�   € \         P                  P                  R 4      p V e   T MRp\         P                  P	                  RV4      # )ÚTEST_REPORT_SOURCE_OVERRIDEúpython-unittestztest-reports)r–   ÚenvironÚgetrá   rh   )ÚoverrideÚtest_sources     r;   Ú_get_test_report_pathr  X  s9   € ô �z‰z�~‰~Ð;Ó<€HØ&Ò2‘(Ð8I€KÜ�7‰7�<‰<˜¨Ó4Ð4r:   c                  ó:  € R \        \        RR4      9   p \        P                  ! V '       * RR7      pVP	                  RRRR7       VP	                  R	RR
7       VP	                  RR\
        R7       VP	                  R\        ^R7       VP	                  RRRR
7       VP	                  RRR
7       TP	                  RR\
        \        4       \        '       d   \        4       MRR7       VP	                  RRR
7       VP	                  R\
        RR7       VP	                  R\        ^R7       VP	                  R\
        R\        R7       VP	                  R\
        R\        R7       VP	                  RRR
7       VP	                  R\
        ^R7       VP	                  R \        P                  RR!7       TP	                  R"R#\         Uu. uF  q"P                  NK  	  up\
        P                  RR$7       R% pR&\        P                   9   g   R'\        P                   9   dH   \"        P$                  ! V\        P                   3R(7      pVP'                  4        VP)                  4        VP+                  4       w  rVVP,                  R)8X  d   \.        P0                  sMNVP,                  R*8X  d   \.        P4                  sM,VP,                  R+8X  d   \.        P6                  sM
\9        4       sVP:                  sVP>                  s VPB                  s"VPF                  s$VPJ                  s&VPN                  s(VPR                  s*VPV                  s,VPZ                  s.VP^                  s0VPb                  s2VPf                  s4VPj                  s6VPn                  e(   VPn                   Uu0 uF  p\        V,          kK  	  upMRs8\        \r        R,R4      '       g   VPt                  \r        n;        \        P                   ^ ,          .V,           s<\{        4        R# u upi u upi )-zrun_test.pyÚ__file__rK   F)Úadd_helpÚallow_abbrevz--subprocessÚ
store_truez(whether to run each test in a subprocess)ÚactionÚhelpz--accept)r  z--jit-executorz--jit_executor)rP   z--repeat)rP   rŽ   z--test-bailoutsz--test_bailoutsú--use-pytestú
--save-xmlÚ?N)ÚnargsrP   ÚconstrŽ   z--discover-testsz--log-suffixz--run-parallelú--import-slow-tests)rP   r  r  ú--import-disabled-testsú--rerun-disabled-testsú--pytest-single-test)rP   r  ú--showlocals)r  rŽ   ú--hw-classificationÚ+)r  ÚchoicesrP   rŽ   c                 ó4   € \         P                  ! V R 7       R# )©ÚargvN)rQ   Úmainr'  s   &r;   Úrun_unittest_helpÚ.parse_cmd_line_args.<locals>.run_unittest_help‰  s   € Ü�Š˜4× r:   z-hz--help)Útargetr†   ÚlegacyÚ	profilingÚsimpleÚACCEPT)>rX   Ú__main__ÚargparseÚArgumentParserÚadd_argumentr­   rÕ   r  r»   rà   ÚDEFAULT_DISABLED_TESTS_FILEÚBooleanOptionalActionr=   re   ÚupperÚsysr(  Ú	threadingÚThreadÚstartrh   Úparse_known_argsÚjit_executorr0   r6   ró  r8   r7   rð  Úrerun_disabled_testsÚRERUN_DISABLED_TESTSÚimport_slow_testsrí   Úimport_disabled_testsrî   Ú
log_suffixÚ
LOG_SUFFIXÚrun_parallelÚRUN_PARALLELÚtest_bailoutsÚTEST_BAILOUTSÚ
use_pytestÚ
USE_PYTESTÚpytest_single_testÚPYTEST_SINGLE_TESTÚdiscover_testsÚTEST_DISCOVERÚ
subprocessÚTEST_IN_SUBPROCESSÚsave_xmlÚTEST_SAVE_XMLÚrepeatÚREPEAT_COUNTÚ
showlocalsÚ
SHOWLOCALSrV   ÚHW_CLASSIFICATIONÚ
expecttestÚacceptr0  ÚUNITTEST_ARGSrI  )Úis_running_via_run_testÚparserrq   r*  Úhelp_threadr†   Ú	remainingre   s           r;   Úparse_cmd_line_argsr^  `  s‘  € ð$ ,¬w´xÀÈRÓ/PÑPÐÜ×$Ò$Ð2IÔ.IÐX]Ô^€FØ
×Ñ˜¨|ØGð ô Ià
×Ñ˜
¨<ÐÔ8Ø
×ÑÐ(Ð*:ÄÐÔEØ
×Ñ˜
¬°aÐÔ8Ø
×ÑÐ)Ð+<À\ÐÔRØ
×Ñ˜¨|ÐÔ<Ø
×Ñ˜¨C´cÜ3Ó5ß;@»5Ô 5Ô 7Àdð ô Lð ×ÑÐ*°<ÐÔ@Ø
×Ñ˜¬S¸"ÐÔ=Ø
×ÑÐ(¬s¸AÐÔ>Ø
×ÑÐ-´C¸sÔJaÐÔbØ
×ÑÐ1¼À3ÔNiÐÔjØ
×ÑÐ0¸ÐÔFØ
×ÑÐ.´SÀÐÔBØ
×Ñ˜¬x×/MÑ/MÐW\ÐÔ]Ø
×ÑÐ-°SÕSiÓBjÑSiÈaÇ6Ä6ÑSiÑBjÔqt×qzÑqzð  EIÐô  Jò!ð Œs�x‰xÔ˜8¤s§x¡xÔ/Ü×&Ò&Ð.?ÄsÇxÁxÀkÔRˆØ×ÑÔØ×ÑÔà×-Ñ-Ó/�O€DØ×Ñ˜HÔ$Ü&×-Ñ-‰Ø	×	Ñ	˜kÔ	)Ü&×0Ñ0‰Ø	×	Ñ	˜hÔ	&Ü&×-Ñ-‰ô :Ó;ˆà×4Ñ4Ðà×,Ñ,€OØ×4Ñ4ÐØ—‘€JØ×$Ñ$€LØ×&Ñ&€MØ—‘€JØ×0Ñ0ÐØ×'Ñ'€MØŸ™ÐØ—M‘M€MØ—;‘;€LØ—‘€Jð ×!Ñ!Ò-ð 37×2HÒ2HÓIÑ2H¨$Ô	 ×	%Ð	%Ñ2HÒIàð ô
 ”:˜x¨×/Ò/Ø ŸK™KŒ
ÔÜ—X‘X˜a•[�M IÕ-€Mä†Nùò[ CkùòJ 	Js   ÇPÎ!Pc                 óB  €  V P                  VR 7      V P                  4        #   \         d=    T P                  ^R 7      pTe   Tu T P                  4        # T P                  4        h \        P                   d{    T P                  \        P                  4       Rp T P                  ^R 7      pM  \        P                   d     Mi ; iTe   Tu T P                  4        # T P                  4        h  T P                  4        h ; i  T P                  4        i ; i)©ÚtimeoutN)ÚwaitÚKeyboardInterruptÚkillrN  ÚTimeoutExpiredÚsend_signalÚsignalÚSIGINT)Úpra  Úexit_statuss   && r;   Úwait_for_processrk  ¶  s÷   € ðØ�v‰v˜gˆvÓ&ð< 	
�‰�øô; ô ð —f‘f Q�fÓ'ˆØÒ"ØÑð0 	
�‰�ð- �F‰FŒHØÜ×$Ñ$ô à	�‰”f—m‘mÔ$Øˆð	ØŸ&™&¨˜&Ó+‰Køô ×(Ñ(ô 	Ùð	úàÒ"ØÑð 	
�‰�ð �F‰FŒHØðØ	�‰ŒØûð 	
�‰�úsW   ‚$ ¤#D	ÁD Á#D	Á="D	Â B3Â2D	Â3CÃD	Ã
CÃ	D	ÃD Ã&#D	Ä	D ÄDc           	      ó  € \         P                  P                  4        \         P                  P                  4        \	        V \
        4      '       d   \        R 4      h\        P                  ! V RWW4R7      p\        WeR7      # )z4Command to shell should be a list or tuple of tokensT)Úuniversal_newlinesÚcwdÚenvÚstdoutÚstderrr`  )
r8  rp  Úflushrq  rY   r­   rš   rN  ÚPopenrk  )Úcommandrn  ro  rp  rq  ra  ri  s   &&&&&& r;   Úshellru  Ø  s_   € Ü‡J�J×ÑÔÜ‡J�J×ÑÔô �'œ3×ÒÜÐSÓTÐTÜ×Ò˜°T¸sÐTZÔj€AÜ˜AÔ/Ð/r:   c                óF   € V ^8„  d   QhR\         \        \        3,          /# r«   )r‡  rÕ   r¿   )rS   s   "r;   rT   rT   è  s   € ÷ 8ñ 8ô Œ3”ˆ9Õñ8r:   c	                 ó°  € V^ 8¼  g   \        RV 24      h \        WW#WER7      p	V	^ 8X  g   V^ 8X  d   W—3# \        RV	 RV R2VRR7       \        V VVVVVV^,
          RVR7	      #   \        P                   d[    T^ 8X  d5   \        RT^<,           R	2T'       d   R
T R2MR,           TRR7       ^|T3u # \        RT^<,           RT R2TRR7        L‰i ; i)ru   z9Expecting non negative number for number of retries, got )rn  ro  rp  rq  ra  zGot exit code z, retrying (retries left=Ú)T)Úfilerr  zCommand took >zmin, returning 124ú (rK   zmin, retrying (retries left=)rn  ro  rp  rq  ra  ÚretriesÚ	was_rerunÚlabel)rš   ru  rg   rN  re  Úretry_shell)
rt  rn  ro  rp  rq  ra  r{  r|  r}  Ú	exit_codes
   &&&&&&&&& r;   r~  r~  è  s$  € ð �qŒLÜØGÈÀyÐQó
ð 	
ð
ÜØ #¸Vô
ˆ	ð ˜Œ>˜W¨œ\ØÐ'Ð'ÜØ˜Y˜KÐ'@ÀÀ	ÈÐKØØõ	
ô0 ØØØØØØØ˜!•ØØô
ð 
øô' ×$Ñ$ô 
Ø�aŒ<ô Ø  ¨B¥ Ð/AÐBß$)�R˜�w˜a‘=¨rõ3àØõ	ð ˜	�>Ò!ÜØ˜W¨�]˜OÐ+GÈÀyÐPQÐRØØ÷	
ð
ús   —A& ¶A& Á&ACÂ6CÃCc                 ó–   € \        V \        P                  4      '       d   V .# . pV  F  pVP                  \	        V4      4       K  	  V# r�   )rY   rQ   rR   ÚextendÚdiscover_test_cases_recursively)Úsuite_or_caseÚrcÚelements   &  r;   r‚  r‚  #  sC   € Ü�-¤×!2Ñ!2×3Ò3ØˆÐØ	€BÛ ˆØ
�	‰	Ô1°'Ó:Ö;ñ !à€Ir:   c                 óŽ   € V  Uu. uF4  pR P                  VP                  4       P                  R 4      RR 4      NK6  	  up# u upi )rW   Néþÿÿÿ)rh   r  r{   )Ú
test_casesÚcases   & r;   Úget_test_namesrŠ  +  s9   € Ù<FÓG¹J°DˆC�H‰H�T—W‘W“Y—_‘_ SÓ)¨"¨#Ð.Ö/¹JÑGÐGùÒGs   …:Ac                  ó¦   € \         P                  ! 4       P                  \        4      p \	        V 4      p\        V4       F  p\        V4       K  	  R # r�   )rQ   Ú
TestLoaderÚloadTestsFromModuler1  r‚  rŠ  rg   )Úsuiterˆ  re   s      r;   Ú_print_test_namesr�  .  s;   € Ü×ÒÓ!×5Ñ5´hÓ?€EÜ0°Ó7€JÜ˜zÖ*ˆÜˆdŽó +r:   c                 óT   € \        V4       Uu. uF  q VR V1,          NK  	  up# u upi r�   ©Úrange)ÚlstÚnchunksr-  s   && r;   Ú
chunk_listr•  4  s(   € Ü%*¨7¤^Ó4¡^ ��
�7�
�OˆO¡^Ñ4Ð4ùÒ4s   Ž%c                 ób   € \         P                  ! R RV 4      p\         P                  ! RRV4      # )z.py$rK   Ú/rW   )ÚrerÍ  )rã   Ústrip_pys   & r;   Úsanitize_test_filenamerš  8  s'   € Ü�vŠv�g˜r 8Ó,€HÜ�6Š6�#�t˜XÓ&Ð&r:   c                 ó  € R pV  EF  pTp\        V\        P                  4      '       dm   \        VP                  4      ^ 8”  d   VP                  ^ ,          MRpVe8   \        V\        P                  4      '       d   T;'       d    \        V4      u # TpVf   K˜  \        V\        4      '       d   K°  VP                  4       P                  R^4      ^,          P                  R4      ^ ,          pRp\        V RV 24       RpEK  	  V# )TNrW   z`This test class should extend from torch.testing._internal.common_utils.TestCase but it doesn't.z - failed. F)
rY   rQ   Ú	TestSuiterÈ  Ú_testsÚlint_test_case_extensionrR   r  r{   rg   )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Ò*TØ×OÐOÔ#;Ð<NÓ#OÒOØ"ˆIàÔ Ü˜i¬×2Ô2Ø&Ÿ\™\›^×1Ñ1°#°qÓ9¸!Õ<×BÑBÀ3ÓGÈÕJ�
Øx�Ü˜˜ K°¨uÐ5Ô6Ø“ñ $ð €Nr:   c                 óÄ  € V f   \         p \        V ^ ,          4      p\        \        ,           p\        P
                  P                  W24      pV'       dt   VP                  RR4      p\        P                  ! VRR7       \        P
                  P                  W2 R\        P                  ! ^4      P                  4        R24      pV# \        P                  ! VRR7       V# )Nr  zpython-pytestT)Úexist_okÚ-z.xml)rY  rš  rQ  rC  r–   rá   rh   r«  ÚmakedirsÚurandomÚhex)r(  ÚpytestÚtest_filenameÚtest_report_paths   &&  r;   Úget_report_pathr®  O  s¯   € Ø‚|ÜˆÜ*¨4°­7Ó3€MÜ$¤zÕ1ÐÜ—w‘w—|‘|Ð$4Ó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:   c                ó$   € V ^8„  d   QhR\         /# )rM   Úxml_filer¬   )rS   s   "r;   rT   rT   ^  s   € ÷ ñ ¤#ñ r:   c                 óº  € ^ RI Hu Hp VP                  V 4      pVP	                  R4       Fš  pVP
                  P                  R4      pVf   K$  \        P                  ! RV4      pVf   KA  VP                  R4      pVP                  R4      P                  RR4      pVP                  RV4       VP                  RV R24       Kœ  	  VP                  V 4       R# )	ru   NÚtestcaseÚ	classnamez.^(test\.)?(?P<file>.*)\.(?P<classname>[^\.]*)$ry  rW   r—  ú.py)Úxml.etree.ElementTreeÚetreeÚElementTreeÚparseÚiterÚattribr  r˜  ÚsearchÚgroupr«  ra   Úwrite)r°  ÚETÚtreer²  Úfull_classnameÚregex_resultr³  ry  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:   c                ó\   € V ^8„  d   QhR\         \        ,          R\         \        ,          /# )rM   r(  rO   ©rg  r­   )rS   s   "r;   rT   rT   r  s"   € ÷ 'ñ '¤¤S¥	ð '¬d´3­iñ 'r:   c                 óº   €  ! R  R4      pV! 4       p^ RI pVP                  ! V  Uu. uF  qDR8w  g   K  VNK  	  up. RO,           V.R7       VP                  # u upi )c                   ó8   a € ] tR tRt o V 3R lR ltR tRtV tR# )Ú2get_pytest_test_cases.<locals>.TestCollectorPluginis  c                ó   <€ V ^8„  d   QhRR/# r  r1   )rS   r®   s   "€r;   rT   Ú?get_pytest_test_cases.<locals>.TestCollectorPlugin.__annotate__t  s   ø€ ÷ 	'ñ 	'˜dñ 	'r:   c                ó   € . V n         R # r�   ©Útestsr;  s   &r;   r8  Ú;get_pytest_test_cases.<locals>.TestCollectorPlugin.__init__t  s	   € Ø$&ˆDŽJr:   c                ó¨   € VP                    FA  pV P                  P                  VP                  P	                  VP
                  4      4       KC  	  R # r�   )r^   rÌ  rf   ÚconfigÚcwd_relative_nodeidÚnodeid)r  Úsessionrm   s   && r;   Úpytest_collection_finishÚKget_pytest_test_cases.<locals>.TestCollectorPlugin.pytest_collection_finishw  s5   € ØŸœ�Ø—
‘
×!Ñ! '§.¡.×"DÑ"DÀTÇ[Á[Ó"QÖRó &r:   rË  N)r2   r3   r4   r5   r8  rÓ  r9   r¸   r¹   s   @r;   ÚTestCollectorPluginrÇ  s  s   ø‡ € ÷	'ð 	'÷	Sð 	Sr:   rÕ  Nz-vv)Úplugins)z--collect-onlyz-qqú--use-main-module)r«  r)  rÌ  )r(  rÕ  Útest_collector_pluginr«  Úargs   &    r;   Úget_pytest_test_casesrÚ  r  s_   € ÷Sñ Sñ 0Ó1ÐÛØ
‡K‚KÙÓ-™� u¡�ˆ™Ñ-Ò0^Õ^Ø&Ð'õð !×&Ñ&Ð&ùò 	.s
   ¦A³Ac                   óˆ   a a€ ] tR tRt oRtV 3R lt]V3R lR l4       tV3R lR ltRR	/V 3R
 llt	RV 3R llt
RtVtV ;t# )Ú HardwareClassificationTestLoaderi„  zCUnittest TestLoader that filters loaded tests by hw_classification.c                ó0   <€ \         SV `  4        Wn        R # r�   )Úsuperr8  rV   )r  rV   Ú	__class__s   &&€r;   r8  Ú)HardwareClassificationTestLoader.__init__†  s   ø€ Ü‰ÑÔØ!2Ör:   c                ó‚   <€ V ^8„  d   QhRS[ P                  S[ P                  ,          RS[S[ P                  ,          /# )rM   rƒ  rO   )rQ   rœ  rR   r   )rS   r®   s   "€r;   rT   Ú-HardwareClassificationTestLoader.__annotate__‹  s9   ø€ ÷ 	&ñ 	&Ù×)Ñ)©H×,=Ñ,=Õ=ð	&á	‘(×#Ñ#Õ	$ñ	&r:   c              #  ó°   "  € \        V \        P                  4      '       d   V x € R # \        P                  pV  F  pV! V4       R j  x€L
  K  	  R #  L
5ir�   )rY   rQ   rR   rÜ  Úiter_test_cases_recursively)rƒ  Ú_iterr…  s   &  r;   rä  Ú<HardwareClassificationTestLoader.iter_test_cases_recursivelyŠ  sH   é € ô �m¤X×%6Ñ%6×7Ò7ØÒÙä0×LÑLˆÛ$ˆGÙ˜W“~×%Ò%ó %Ù%ùs   ‚AAÁ	AÁ
Ac                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )rM   rÌ  rO   )rQ   rœ  )rS   r®   s   "€r;   rT   râ  –  s'   ø€ ÷ ñ ©×(:Ñ(:ð ¹x×?QÑ?Qñ r:   c                óÄ   € V P                   f   V# \        P                  ! 4       p\        P                  p\        V! V4      V P                   R VP                  R7       V# )Nc                 ó   € V P                   # r�   )rß  )Útcs   &r;   r�   ÚEHardwareClassificationTestLoader.get_filtered_suite.<locals>.<lambda>Ÿ  s   €  §¢r:   )r_   r`   )rV   rQ   rœ  rÜ  rä  rs   ÚaddTest)r  rÌ  Úfiltered_suiterå  s   &&  r;   Úget_filtered_suiteÚ3HardwareClassificationTestLoader.get_filtered_suite–  sX   € Ø×!Ñ!Ò)ØˆLä!×+Ò+Ó-ˆÜ0×LÑLˆÜ#Ù�%‹LØ×"Ñ"Ù-Ø#×+Ñ+õ		
ð Ðr:   ÚpatternNc               óR   <€ \         SV `  ! V.VO5R V/VB pV P                  V4      # )rð  )rÞ  r�  rî  )r  Úmodulerð  r†   r‡   rŽ  rß  s   &&$*, €r;   r�  Ú4HardwareClassificationTestLoader.loadTestsFromModule¤  s@   ø€ Ü‘Ò+Øð
Øò
Ø#*ð
Ø.4ñ
ˆð ×&Ñ& uÓ-Ð-r:   c                óÚ   <€ \         SV `  ! W.VO5/ VB p\        V4      pV'       d4   \        V^ ,          \        P
                  P                  4      '       d   V# V P                  V4      # ©ru   )rÞ  ÚloadTestsFromNamerg  rY   rQ   ÚloaderÚ_FailedTestrî  )r  re   rò  r†   r‡   rŽ  rÌ  rß  s   &&&*,  €r;   rö  Ú2HardwareClassificationTestLoader.loadTestsFromNameª  sZ   ø€ Ü‘Ò)¨$ÐH¸ÒHÀÑHˆô �U“ˆß”Z  a¥¬(¯/©/×*EÑ*E×FÒFØˆLØ×&Ñ& uÓ-Ð-r:   )rV   r�   )r2   r3   r4   r5   rD   r8  r¶   rä  rî  r�  rö  r9   r¸   Ú__classcell__©rß  r®   s   @@r;   rÜ  rÜ  „  sA   ù‡ € ÙMõ3ð ÷	&ó ð	&÷ð ð.¸÷ .÷
.÷ 
.r:   rÜ  c           	      ó(  € \        4        V f   \        p \        '       d—   \        P                  P                  \        4      '       dO   \        \        4      ;_uu_ 4       p\        P                  ! V4      s	\        \        P                  R&   R R R 4       M\        P                  ! R\         2^R7       \        '       d—   \        P                  P                  \        4      '       dO   \        \        4      ;_uu_ 4       p\        P                  ! V4      s\        \        P                  R&   R R R 4       M\        P                  ! R\         2^R7       \        '       d   \!        4        R # \"        P$                  ! 4       P'                  \(        4      p\+        V4      '       g   \,        P.                  ! ^4       \"        P0                  P2                  p\4        e   \7        \4        4      p\8        '       d'   V ^ ,          .\:        '       d   . R1OMR.OV R,          Op \<        '       Ed    VP'                  \(        4      p. p\        '       d   VP?                  R4       \        '       d   VP?                  R	4       \:        '       d   VP?                  R
4       \@        '       d   VP?                  R4       \B        '       d   VR\B        .,          p\4        e/   TR.\4         Uu. uF  qUPD                  NK  	  up,           ,          p\:        '       d   \G        V 4      M>\I        V4       Uu. uF)  qfPK                  4       PM                  R^4      ^,          NK+  	  upp. pV EF  p	\,        PN                  .V ^ ,          .,           V,           V R,          ,           \:        '       d   R.M. ,           V	.,           p
RPQ                  V
4      p\@        '       d   R MR2p\S        Y¬\@        '       d   ^ M^R7      w  rÞV^ 8w  g   Kž  RV	9   dY   \        P                  PU                  RR4      p\        P                  PU                  RR4      pRV RV 2pVR,           V,           p\W        RV RV 24       VP?                  V	4       EK"  	  \Y        V4      ^ 8w  d4   \[        RP]                  \Y        V4      RPQ                  V4      4      4      hR # \^        ^8”  dæ   VP'                  \(        4      p\I        V4      p\a        \c        V4      \^        4      p. p\e        \^        4       Fb  p\,        PN                  .V ,           RV^,            2.,           VV,          ,           pVP?                  \f        Ph                  ! VRR7      4       Kd  	  RpV F  pV\k        V4      ^ 8g  ,          pK  	  V'       d   \[        R 4      hR # \:        '       dÿ   V R!.,           p\4        e/   TR.\4         Uu. uF  qUPD                  NK  	  up,           ,          pRp\B        '       d/   \m        RR"7      p\W        R#V 24       VP?                  R$V 24       \n        '       d   \n        VR,          ,           p^ R I8pR%\        P                  R&&   VPr                  ! VR'7      p\B        '       d   \u        V4       \,        P.                  ! V^8X  d   ^ MT4       R # \B        '       d   ^ R I;p^ R(I<H=p  ! R) R*V4      p\m        4       pR+V 9   ;'       g    R,V 9   pV'       d   \W        R#V 24       \"        Pr                  ! T TP}                  TV'       d   ^M^VR-7      VR.7       R # \~        ^8”  dg   \e        \~        4       FQ  p\"        Pr                  ! RWR/7      P€                  Pƒ                  4       '       d   K;  \,        P.                  ! R34       KS  	  R # \"        Pr                  ! WR07       R #   + '       g   i     EL7; i  + '       g   i     EL©; iu upi u upi u upi )4Nrí   z'slow test file provided but not found: ©Ú
stacklevelrî   z+disabled test file provided but not found: z--localsºé   NNr  r  r  r   r  r#  rW   r!  rd   )ra  r{  ÚTestDistBackendWithSpawnÚBACKENDrK   Ú
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)rm  FzSome test shards have failedr×  )r«  zTest results will be stored in z--junit-xml-reruns=rŒ   ÚNO_COLOR)r†   )Ú_XMLTestResultc                   óN   a a€ ] tR tRt oRtV 3R ltV3R lV 3R lltRtVtV ;t	# )Ú'run_tests.<locals>.XMLTestResultVerbosei@  a  
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                óÞ   <€ \         SV `  W4       V P                  P                   FB  p\	        VP
                  \        4      '       g   K%  VP
                  R 8X  g   K8  RV 2Vn        KD  	  R# )Úskipzskip: N)rÞ  ÚaddSkipÚcallbackÚ__closure__rY   Úcell_contentsr­   )r  rÝ   ÚreasonÚcrß  s   &&& €r;   r
  Ú/run_tests.<locals>.XMLTestResultVerbose.addSkipK  sO   ø€ Ü‘‘ Ô-ØŸ™×2Ô2�AÜ! !§/¡/´3×7Ô7¸A¿O¹OÈvÖ<Uð -3°6°(Ð*;˜žó	 3r:   c                ó   <€ V ^8„  d   QhRR/# r  r1   )rS   r®   s   "€r;   rT   Ú4run_tests.<locals>.XMLTestResultVerbose.__annotate__S  s   ø€ ÷ Gñ G Tñ Gr:   c                ó\   <€ \         SV `  4        V P                  R V P                  4       R# )ÚXPASSN)rÞ  ÚprintErrorsÚprintErrorListÚunexpectedSuccesses)r  rß  s   &€r;   r  Ú3run_tests.<locals>.XMLTestResultVerbose.printErrorsS  s$   ø€ Ü‘Ñ#Ô%Ø×#Ñ# G¨T×-EÑ-EÖFr:   r1   )
r2   r3   r4   r5   rD   r
  r  r9   r¸   rú  rû  s   @@r;   ÚXMLTestResultVerboser  @  s!   ù‡ € ñõ<÷G÷ Gó Gr:   r  z	--verboseú-v)ÚoutputÚ	verbosityÚresultclass)r(  Ú
testRunnerÚ
testLoader)Úexitr(  r  )r(  r  )r"  z	--tb=longz--color=yesi„  éÿÿÿÿ)Br^  rY  rí   r–   rá   Úexistsræ   rç   rè   Úslow_tests_dictr  ÚwarningsÚwarnrî   Údisabled_tests_dictrM  r�  rQ   rŒ  r�  r1  rž  r8  r   r÷  ÚdefaultTestLoaderrV  rÜ  rU  rI  rO  rf   r?  rQ  re   rÚ  r‚  r  r{   Ú
executablerh   r~  r  rg   rÈ  rš   rS   rE  r•  rŠ  r’  rN  rs  rk  r®  rK  r«  r)  rÂ  Ú	xmlrunnerÚxmlrunner.resultr  ÚXMLTestRunnerrS  ÚresultÚwasSuccessful) r(  rë   rŽ  r  Ú
other_argsÚreqr‰  rˆ  Úfailed_testsÚtest_case_full_nameÚcmdÚ
string_cmdra  ÚexitcoderÁ   ÚbackendÚ
world_sizeÚ
env_prefixÚtest_batchesÚ	processesr-  rt  Úfailedri  Úpytest_argsr­  r«  r  r)  r  r  Úverboses    &                               r;   Ú	run_testsr=  ·  s[  € ÜÔØ‚|Üˆ÷ ƒÜ�7‰7�>‰>œ/×*Ò*Ü”o×&Ô&¨"ä"&§)¢)¨B£-�ä0?”—
‘
Ð,Ñ-÷	 'Ð&ô �MŠMÐCÄOÐCTÐUÐbcÕdßÓÜ�7‰7�>‰>Ô-×.Ò.ÜÔ)×*Ô*¨bä&*§i¢i°£mÐ#Ü4G”—
‘
Ð0Ñ1÷ +Ð*ô
 �MŠMÐGÔH[ÐG\Ð]ÐjkÕlçƒ}ÜÔÙô ×ÒÓ!×5Ñ5´hÓ?€EÜ# E×*Ò*Ü�Š�Œä—‘×2Ñ2€JÜÒ$Ü5Ô6GÓHˆ
çƒzà��Gð
ç>H»jÓ:ÈzÈlð
ð �"�Xð
ˆ÷ ÔØ×.Ñ.¬xÓ8ˆØˆ
ßÓØ×ÑÐ7Ô8ß‹?Ø×ÑÐ3Ô4ß‹:Ø×Ñ˜nÔ-ßÓØ×ÑÐ6Ô7ß‹=Ø˜<¬Ð7Õ7ˆJÜÒ(ØÐ0Ð1ÕIZÓ4[ÑIZÀ#·X´XÑIZÑ4[Õ[Õ[ˆJ÷ ,6«:Ô! $Ô'Ü4SÐTYÔ4ZÓ[Ñ4Z¨D�W‰W‹Y�_‰_˜S !Ó$ Q×'Ð'Ñ4ZÑ[ð 	ð
 ˆä#-Ðô —‘Ð  D¨¥G 9Õ,¨zÕ9¸DÀ½HÕDß-7«ZÐ(Ñ)¸RõAà$Ð%õ&ð ð
 Ÿ™ #›ˆJç2Ó2‘d¸ˆGä% c×I]ÓI]ÁAÐcdÔe‰KˆHà˜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ñ- $.ô0 ˆ|Ó Ô!Ü Ø/×6Ñ6Ü˜Ó% v§{¡{°<Ó'@óóð ñ "ô 
˜Ô	Ø×.Ñ.¬xÓ8ˆÜ4°UÓ;ˆ
Ü!¤.°Ó"<¼lÓKˆØˆ	Ü”|Ö$ˆAÜ—~‘~Ð&¨Õ-Ð3GÈÈAÍÀwÐ1OÐ0PÕPÐS_Ð`aÕSbÕbˆGØ×ÑœZ×-Ò-¨gÈ$ÔOÖPñ %ð ˆÛˆAØÔ& qÓ)¨QÑ.Õ.ŠFñ çÜ Ð!?Ó@Ð@ñ ç	‹ØÐ1Ð2Õ2ˆÜÒ(ØÐ1Ð2ÕJ[Ó5\ÑJ[À3·h´hÑJ[Ñ5\Õ\Õ\ˆKØÐß‹=Ü.°dÔ;ÐÜÐ3Ð4DÐ3EÐFÔGØ×ÑÐ!4Ð5EÐ4FÐGÔHßÓÜ,¨{¸2­Õ>ˆKãØ!$Œ�
‰
�:ÑØ—K’K [Ô1ˆ	ß‹=ÜÐ 0Ô1ô 	�Š�i 1”n‘¨)Ö4ß	‹ãÝ3ô	G >ô 	Gô, +Ó,ÐØ Ñ%×5Ð5¨°©ˆßÜÐ3Ð4DÐ3EÐFÔGÜ�Š˜4¨I×,CÑ,CØ#ß"‘a¨Ø,ð -Dó -.ð ;E÷	Fô 
˜Ô	Ü”|Ö$ˆAÜ—=’= e°$ÔN×UÑU×cÑc×eÔeÜ—’˜–ó %ô 	�Š˜4×7÷I '×&Ð&ú÷ +×*Ð*üòR 5\ùò \ùòh 6]s*   Á!._Ä._1Ë)`Ì0/`
×(`ß_.	ß1`	ÚlinuxÚdarwinÚppc64leÚs390xÚavx512_vnniÚsveÚSVE256c               /   óL  "  € R V9   d   VR ,          RJd   \        R4      hMRVR &   \        P                  ! V / VB p VP                  4        VP                  x € \
        P                  ! VP                  4       R#   \
        P                  ! TP                  4       i ; i5i)ÚdeleteFzAonly TemporaryFileName with delete=False is supported on Windows.N)ÚUserWarningÚtempfileÚNamedTemporaryFileÚclosere   r–   Úunlink©r†   r‡   Úfs   *, r;   ÚTemporaryFileNamerN  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   ‚<B$¿A? Á"B$Á?"B!Â!B$c               /   ó    "  € \         P                  ! V / VB ;_uu_ 4       pVP                  x € R R R 4       R #   + '       g   i     R # ; i5ir�   )rH  rI  re   rL  s   *, r;   rN  rN  ƒ  s4   é € ä×(Ò(¨$Ð9°&×9Ò9¸QØ—&‘&ŠL÷ :×9×9Ò9üs   ‚A¡:°
AºA	Á	Ac              #   ó¨   "  €  \         P                  ! V R 7      pVx € \        P                  ! V4       R#   \        P                  ! X4       i ; i5i©)ÚsuffixN)rH  ÚmkdtempÚshutilÚrmtree)rR  Údir_names   & r;   ÚTemporaryDirectoryNamerW  ‰  s7   é € ð	$Ü×'Ò'¨vÔ6ˆHØŠNä�MŠM˜(Ö#øŒF�MŠM˜(Õ#üs   ‚A„7 ŸA·AÁAc              #   óŽ   "  € \         P                  ! V R 7      ;_uu_ 4       pVx € RRR4       R#   + '       g   i     R# ; i5irQ  )rH  ÚTemporaryDirectory)rR  Úds   & r;   rW  rW  “  s+   é € ä×(Ò(°×7Õ7¸1ØŠG÷ 8×7×7Ò7üs   ‚ A¢1§
A±A	¼	Ac                 óh   a€ R  pWn         R F!  oRS R2pV3R lp\        WV! V4      4       K#  	  V # )c                 ó    € Wn         R V n        R # r�   )Ú_cbÚ_value)r  Úcbs   &&r;   Ú	lazy_initÚ"make_lazy_class.<locals>.lazy_init›  s   € ØŒØˆŽr:   Ú__c                 ó$   <a a€ SR9  oV V3R lpV# )r¿   c                 óè   <€ V P                   e   V P                  4       V n        R V n         S'       g   \        V P                  S4      ! V/ VB # \        \        S4      ! V P                  .VO5/ VB # r�   )r]  r^  rX   Úoperator)r  r†   r‡   re   Úuse_operators   &*,€€r;   ÚwrappedÚ7make_lazy_class.<locals>.inner_wrapper.<locals>.wrapped«  s_   ø€ Ø—8‘8Ò'Ø"&§(¡(£*�D”KØ#�D”Hß#Ü" 4§;¡;°Ô5°tÐF¸vÑFÐFä"¤8¨TÔ2°4·;±;ÐPÀÒPÈÑPÐPr:   )r¿   rÕ   r1   )re   rg  rf  Úbasenames   f @€r;   Úinner_wrapperÚ&make_lazy_class.<locals>.inner_wrapper¨  s   ú€ Ø#¨?Ñ:ˆLöQð ˆNr:   )ÚaddrÍ  ÚmulÚtruedivÚfloordivÚmodÚdivmodÚpowÚlshiftÚrshiftÚandÚorÚxorÚnegÚposÚabsÚinvertÚeqÚneÚltÚleÚgtÚger¿   rÕ   r  )r8  r„  )rn   r`  re   rj  ri  s   &   @r;   Úmake_lazy_classr‚  ™  sH   ø€ òð „Lóˆð
 �H�:˜RÐ ˆõ	ô 	�™=¨Ó.Ö/ñ)ð, €Jr:   c                   ó   € ] tR tRtRtR# )ÚLazyValiº  r1   N©r2   r3   r4   r5   r9   r1   r:   r;   r„  r„  º  s   † ãr:   r„  r@  ÚnumpyÚfairseqÚscipyrW   ºNrM   NÚhpuc                  ó>   € \         P                  P                  4       # r�   )rw   r?   rx   r1   r:   r;   r�   r�   Ì  s   € ¤5×#4Ñ#4×#AÑ#AÔ#Cr:   c                  óD   € \         P                  P                  4       ^8„  # ©r   )rw   r?   Údevice_countr1   r:   r;   r�   r�   Í  s   € ¬×(9Ñ(9×(FÑ(FÓ(HÈ1Ò(Lr:   c                  ón   € \         P                  P                  R R7      ;p '       d   V P                  # R# )T)Úcheck_availableN)rw   r?   Úcurrent_acceleratorrP   )Úaccs    r;   r�   r�   Î  s0   € ´u×7HÑ7H×7\Ñ7\ÐmqÐ7\Ó7rÐ0r°Ö0r 3§8¡8Ð#}Ðy}Ð#}r:   ÚnumbaÚtransformersÚdillÚlibrosaÚ
opt_einsumÚz3c                   óf   a € ] tR tRt o RtR tR tV 3R lR ltV 3R lR ltV 3R	 lR
 lt	Rt
V tR# )ÚLazyDSLCheckiÝ  z;Lazy DSL availability checker to avoid import-time overheadc                ó"   € R V n         RV n        R # ©NF)Ú	_registryÚ_import_attemptedr;  s   &r;   r8  ÚLazyDSLCheck.__init__ß  s   € ØˆŒØ!&ˆÖr:   c                óÄ   € V P                   '       g!   R V n          ^ RIHp Wn        V P                  # V P                  #   \         d    RT n         T P                  # i ; i)T)Údsl_registryN)rž  Útorch._native.dsl_registryr¡  r�  ÚImportError)r  r¡  s   & r;   Ú_get_registryÚLazyDSLCheck._get_registryã  sZ   € Ø×%×%Ð%Ø%)ˆDÔ"ð&ÝCØ!-”ð �~‰~Ðˆt�~‰~Ðøô ô &Ø!%�•Ø�~‰~Ðð&ús   ›? ¿AÁAc                ó&   <€ V ^8„  d   QhRS[ RS[/# ©rM   Údsl_namerO   ©r­   r¿   )rS   r®   s   "€r;   rT   ÚLazyDSLCheck.__annotate__í  s   ø€ ÷ Vñ V¡Sð V©Tñ Vr:   c                óP   € V P                  4       pVe   VP                  V4      # R# )z"Check if specific DSL is availableF)r¤  Úis_dsl_available)r  r¨  Úregistrys   && r;   rx   ÚLazyDSLCheck.is_availableí  s,   € à×%Ñ%Ó'ˆØ6>Ò6Jˆx×(Ñ(¨Ó2ÐUÐPUÐUr:   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r«   rÄ  )rS   r®   s   "€r;   rT   rª  ò  s   ø€ ÷ Tñ T¡¡S¥	ñ Tr:   c                ó`   € V P                  4       pVe   \        VP                  4       4      # . # )zGet list of available DSLs)r¤  rg  Úlist_available_dsls©r  r­  s   & r;   Úlist_availableÚLazyDSLCheck.list_availableò  s/   € à×%Ñ%Ó'ˆØ7?Ò7KŒt�H×0Ñ0Ó2Ó3ÐSÐQSÐSr:   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r«   rÄ  )rS   r®   s   "€r;   rT   rª  ÷  s   ø€ ÷ Nñ N™$™s�)ñ Nr:   c                ó`   € V P                  4       pVe   \        VP                  4       4      # . # )zGet list of all registered DSLs)r¤  rg  Úlist_all_dslsr²  s   & r;   Úlist_allÚLazyDSLCheck.list_all÷  s.   € à×%Ñ%Ó'ˆØ19Ò1EŒt�H×*Ñ*Ó,Ó-ÐMÈ2ÐMr:   )rž  r�  N)r2   r3   r4   r5   rD   r8  r¤  rx   r³  r¸  r9   r¸   r¹   s   @r;   rš  rš  Ý  s6   ø‡ € ÙEò'ò÷Vð V÷
Tð T÷
Nö Nr:   rš  c                  ó,   € \         P                  R 4      # )Útriton©Ú_dsl_checkerrx   r1   r:   r;   r�   r�   ÿ  ó   € ¤,×";Ñ";¸HÔ"Er:   c                  ó,   € \         P                  R 4      # )Úcutedslr¼  r1   r:   r;   r�   r�      s   € œ|×8Ñ8¸ÔCr:   c                  ó,   € \         P                  R 4      # )Úhelionr¼  r1   r:   r;   r�   r�     r¾  r:   c                ó$   € V ^8„  d   QhR\         /# )rM   r,  r¬   )rS   s   "r;   rT   rT     s   € ÷ /ñ /œ#ñ /r:   c                 óH   € \        V 4      ^ 8w  d   V P                  R4      # . # )ru   rc   )rÈ  r{   r0  s   &r;   Úsplit_if_not_emptyrÅ    s   € Ü˜q›6 Qœ;ˆ1�7‰7�3‹<Ð.¨BÐ.r:   Ú!PYTORCH_TESTING_DEVICE_EXCEPT_FORzno dillzTriton DSL not availablezCuTeDSL not availablezHelion DSL not availablec                ó>   € V ^8„  d   QhR\         R\         R,          /# ©rM   r¨  r  Nr¬   )rS   s   "r;   rT   rT     s   € ÷ /ñ /¤3ð /´°dµ
ñ /r:   c                ó‚   € \         P                  V 4      pT;'       g    V  R2p\        P                  ! V'       * V4      # )z*Skip test if specific DSL is not availablez DSL not available)r½  rx   rQ   ÚskipIf©r¨  r  Ú	availableÚmsgs   &&  r;   ÚskipIfDSLUnavailablerÎ    s:   € ä×)Ñ)¨(Ó3€IØ
×
3Ð
3�x�jÐ 2Ð3€CÜ�?Š?˜yœ=¨#Ó.Ð.r:   c                ó>   € V ^8„  d   QhR\         R\         R,          /# rÈ  r¬   )rS   s   "r;   rT   rT     s   € ÷ /ñ /¤Sð /´#¸µ*ñ /r:   c                óv   € \         P                  V 4      pT;'       g    V  R2p\        P                  ! W#4      # )z*Skip test unless specific DSL is availablez DSL required)r½  rx   rQ   Ú
skipUnlessrË  s   &&  r;   ÚskipUnlessDSLAvailablerÒ    s7   € ä×)Ñ)¨(Ó3€IØ
×
.Ð
.�x�j Ð.€CÜ×Ò˜yÓ.Ð.r:   c                ó:   € V ^8„  d   QhR\         \        ,          /# r«   rÄ  )rS   s   "r;   rT   rT     s   € ÷ )ñ )œD¤�Iñ )r:   c                 ó*   € \         P                  4       # )z9Get list of available DSL names for test parameterization)r½  r³  r1   r:   r;   Úget_available_dslsrÕ    s   € ä×&Ñ&Ó(Ð(r:   c                ó0   € V ^8„  d   QhR\         R\        /# r§  r©  )rS   s   "r;   rT   rT     s   € ÷ /ñ /œsð /¤tñ /r:   c                ó,   € \         P                  V 4      # )z:Check if specific DSL is available for conditional testingr¼  )r¨  s   &r;   r¬  r¬    s   € ä×$Ñ$ XÓ.Ð.r:   c                ó:   € V ^8„  d   QhR\         \        ,          /# r«   rÄ  )rS   s   "r;   rT   rT   #  s   € ÷ #ñ #”dœ3•iñ #r:   c                 ó*   € \         P                  4       # )zIGet all registered DSL names (available or not) for comprehensive testing)r½  r¸  r1   r:   r;   Úget_all_dslsrÚ  #  s   € ä× Ñ Ó"Ð"r:   ÚTEST_WITH_ASANÚPYTORCH_TEST_WITH_ASAN)r›   Ú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_ROCMc                  ó:   € \         P                  P                  R J# r�   )rw   ÚversionÚhipr1   r:   r;   r�   r�   <  s   € œ%Ÿ-™-×+Ñ+°4Ñ7r:   )r›   rž   ÚTEST_WITH_MTIAÚPYTORCH_TEST_WITH_MTIAÚPYTORCH_MIOPEN_SUGGEST_NHWCr‹   rŒ   Ú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_CUDAGRAPHzcuda.bindingsznvmath.bindingsznvmath-python not availablec                óž   € ^ RI pV vr#W!P                  P                  P                  P                  8w  d   \        RV 24      h\        V4      # )zŒMakes calls to cuda-python's cuda runtime functions more
pythonic by throwing an exception if they return a status
which is not cudaSuccess
NzCUDA failure! )Úcuda.bindingsÚbindingsÚruntimeÚcudaError_tÚcudaSuccessrÊ  r‡  )Úfunction_call_outputrA   ÚerrorÚotherss   &   r;   Úcuda_python_error_checkrü  q  sF   € ó
 	à-ˆˆØ—M‘M×)Ñ)×5Ñ5×AÑAÔAÜ˜~¨e¨WÐ5Ó6Ð6ä˜“=Ð r:   c                 óÎ   € V f   R# RV 9   d   V P                  R4      MV .p \        V  Uu. uF  q3P                  R4      NK  	  up4      pW$9   d   WB,          R8X  d   R# R# u upi )NFrc   rv   ÚTrueT)r{   rµ   )Úallocator_configrÁ   ÚoptionÚvarÚmappings   &&&  r;   Úallocator_option_enabled_fnr  €  sh   € ØÒÙØ69Ð=MÔ6MÐ'×-Ñ-¨cÔ2ÐTdÐSeÐÜÑ.>Ó?Ñ.> s—I‘I˜c–NÑ.>Ñ?Ó@€GàÔ˜W�_°Ô6Ùáùò @s   «A"ÚEXPANDABLE_SEGMENTSÚPYTORCH_CUDA_ALLOC_CONFÚexpandable_segments)r   )r›   r�   ÚNUM_PARALLEL_PROCSÚ2g333333ë?zRequires CUDAc                ó   a a€ V V3R lpV# )aK  Skip a test (function or class) when ``condition_fn()`` is true.

For function targets the condition is evaluated each time the test
runs, matching the historical PyTorch convention of checking skip
flags inside a wrapper. For class targets the condition is evaluated
once at class-decoration time and the standard ``__unittest_skip__``
attributes are set, since unittest's TestLoader makes class-level
skip decisions before instantiation.

Prefer this helper over hand-rolled ``@wraps + raise SkipTest``
wrappers, which silently drop classes from discovery when applied at
class scope.
c                 óœ   <a € \        S \        4      '       d   S! 4       '       d   R S n        SS n        S # \	        S 4      VV V3R l4       pV# )Tc                  óZ   <€ S! 4       '       d   \         P                  ! S4      hS! V / VB # r�   ©rQ   ÚSkipTest)r†   r‡   Úcondition_fnrü   r  s   *,€€€r;   rý   Ú0lazy_skip_if.<locals>.decorator.<locals>.wrapper°  s+   ø€ á�~Š~Ü×'Ò'¨Ó/Ð/Ù�tÐ&˜vÑ&Ð&r:   )rY   rP   Ú__unittest_skip__Ú__unittest_skip_why__r
   )rü   rý   r  r  s   f €€r;   r�  Úlazy_skip_if.<locals>.decorator©  sI   ù€ Ü�bœ$×ÒÙ�~Š~Ø'+�Ô$Ø+1�Ô(ØˆIä	ˆr‹ö	'ó 
ð	'ð ˆr:   r1   )r  r  r�  s   ff r;   Úlazy_skip_ifr  š  s   ù€ öð Ðr:   c                 ó(   € \        R  R4      ! V 4      # )c                  ó   € \         # r�   )rï  r1   r:   r;   r�   Ú skipIfCrossRef.<locals>.<lambda>º  s   € Õ 2r:   z$test doesn't currently with crossref©r  ©rü   s   &r;   ÚskipIfCrossRefr  ¹  s   € ÜÑ2Ð4ZÔ[Ð\^Ó_Ð_r:   c                   ó*   a € ] tR tRt o RR ltRtV tR# )ÚCrossRefModei¼  Nc                ó.   € T;'       g    / pV! V/ VB pV# r�   r1   )r  ÚfuncÚtypesr†   r‡   Úrs   &&&&& r;   Ú__torch_function__ÚCrossRefMode.__torch_function__½  s!   € Ø—�˜2ˆÙ�$Ð!˜&Ñ!ˆØˆr:   r1   )r1   N)r2   r3   r4   r5   r   r9   r¸   r¹   s   @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                  ó*   € \         ;'       g    \        # r�   )r"  r$  r1   r:   r;   r�   r�   Ï  s   € Ô1×HÐHÔ5HÐHr:   ÚTEST_WITHOUT_COMPILED_AUTOGRADÚ&PYTORCH_TEST_WITHOUT_COMPILED_AUTOGRADc                 óÒ   € \         '       d9   \        P                  ^ ,          R8X  d   \        P                  ! R4      ! V 4      # \         '       d   V # \        P
                  ! V 4      # )ru   r  z'skipping numpy 2.0+ dynamo-wrapped test)r&  ÚnpÚ__version__rQ   r	  ÚexpectedFailure©r  s   &r;   ÚxpassIfTorchDynamo_npr0  ç  sH   € çÓ¤§¡°Õ!2°cÔ!9Ü�}Š}ÐFÔGÈÓMÐMß(Ó(ˆ4ÐL¬h×.FÒ.FÀtÓ.LÐLr:   zTest requires MKLzTest requires OneDNN/MKLDNNc                 óJ   € \         '       d   \        P                  ! V 4      # T # r�   )ÚTEST_ACLrQ   r.  r/  s   &r;   Ú
xfailIfACLr3  ñ  ó   € ß-5«XŒ8×#Ò# DÓ)Ð?¸4Ð?r:   c                 óJ   € \         '       d   \        P                  ! V 4      # T # r�   )r&  rQ   r.  r/  s   &r;   ÚxfailIfTorchDynamor6  õ  s   € ß-BÓ-BŒ8×#Ò# DÓ)ÐLÈÐLr:   c                 ó\   € \         P                  R8¼  d   \        P                  ! V 4      # T # )é   )r8  é   ©r8  Úversion_inforQ   r.  r/  s   &r;   ÚxfailIfPy312Plusr<  ù  ó%   € Ü-0×-=Ñ-=ÀÔ-HŒ8×#Ò# DÓ)ÐRÈdÐRr:   c                 ó\   € \         P                  R8¼  d   \        P                  ! V 4      # T # ©r8  )r8  é   r:  r/  s   &r;   ÚxfailIfPy314PlusrA  ý  r=  r:   c                 ó\   € \         P                  R8  d   \        P                  ! V 4      # T # r?  r:  r/  s   &r;   ÚxfailIfPy313AndEarlierrC    s%   € Ü-0×-=Ñ-=ÀÔ-GŒ8×#Ò# DÓ)ÐQÈTÐQr:   c                 óz   € \         '       d/   \        '       g#   \        '       g   \        P                  ! V 4      # T # r�   )ÚIS_LINUXrã  rÉ   rQ   r.  r/  s   &r;   ÚxfailIfLinuxrF    s'   € ß-5«X¿n»n×U^ÓU^Œ8×#Ò# DÓ)ÐhÐdhÐhr:   c                 óJ   € \         '       d   \        P                  ! V 4      # T # r�   )Ú
IS_WINDOWSrQ   r.  r/  s   &r;   ÚxfailIfWindowsrI  	  s   € ß-7«ZŒ8×#Ò# DÓ)ÐA¸TÐAr:   c                 ój   € \         P                  P                  e   \        P                  ! V 4      # T # r�   )rw   ræ  rç  rQ   r.  r/  s   &r;   ÚxfailIfROCmrK    s(   € Ü-2¯]©]×->Ñ->Ò-JŒ8×#Ò# DÓ)ÐTÐPTÐTr:   c                ó$   € V ^8„  d   QhR\         /# r«   r¾   )rS   s   "r;   rT   rT     s   € ÷ ñ ¤ñ r:   c                 óÌ   € \        V \        P                  4      '       d   V P                  R 8H  # \        V \        4      '       d   V R 8H  ;'       g    V P                  R4      # R# )r@   zcpu:F)rY   rw   r¨  rP   r­   r  )Údevs   &r;   Ú_is_cpu_device_typerO    sM   € Ü�#”u—|‘|×$Ò$Ø�x‰x˜5Ñ Ð Ü�#”s×ÒØ�e‰|×5Ð5˜sŸ~™~¨fÓ5Ð5Ùr:   c                ó0   € V ^8„  d   QhR\         R\        /# )rM   r†   r‡   )r‡  rµ   )rS   s   "r;   rT   rT     s   € ÷ ñ ¤eð ´Tñ r:   c                 óF   € R V9   d
   VR ,          # RV9   d
   VR,          # R# )r¨  ÚdevicesNr1   r…   s   &&r;   Ú_device_spec_from_test_callrS    s+   € Ø�6ÔØ�hÕÐØ�FÔØ�iÕ Ð Ùr:   c                ód  a a€ ^ RI p^ RIp^ RIHo VP                  ! S 4      '       dl   \        \        S 4      4       FQ  pVP                  R4      '       g   K  \        S V4      p\        V4      '       g   K;  \        S V\        V4      4       KS  	  S # VP                  ! S 4      VV 3R l4       pV# )uç   Run test normally if triton is present or if running on CPU (which falls back to openmp).
Otherwise mark as xfail â€” any accelerator (CUDA, XPU, ROCm, etc.) requires triton.
Can be applied to a test method or an entire test class.N)Ú
has_tritonrÝ   c                  ó®  <€ S! 4       '       d	   S! V / VB # \        W4      pVf   V '       d   \        V ^ ,          RR 4      pVe   \        V4      '       d
    S! V / VB # ^ R IpVe   RV: R2MRpVP                  ! RV 24       R #   \         dB   pR\	        T4      P                  4       9   d   ^ R IpTP                  ! RT: RT 24       h R p?ii ; i)	NÚdevice_typer»  zTriton not available (device=z): z	 (device=rx  rK   zTriton not available)rS  rX   rO  r£  r­   Úlowerr«  Úxfail)r†   r‡   Úspecrq   r«  Údevice_inforU  Ú	test_funcs   *,    €€r;   rý   Ú+xfailIfNoAcceleratorTriton.<locals>.wrapper1  s×   ø€ á�<Š<Ù˜dÐ- fÑ-Ð-ä*¨4Ó8ˆØŠ<ŸDÜ˜4 �7 M°4Ó8ˆDØÒÔ 3°D× 9Ò 9ðÙ  $Ð1¨&Ñ1Ð1ó 	Ø/3Ò/?˜	 $¡¨Ñ+ÀRˆØ�ŠÐ+¨K¨=Ð9Ö:øô ô ð œs 1›vŸ|™|›~Ô-Û!Ø—L’LÐ#@ÀÁÈÈAÈ3Ð!OÔPØûðús   ÁB ÂCÂ<CÃC)r  r   Útorch.utils._tritonrU  Úisclassrg  Úvarsr  rX   rþ  r„  ÚxfailIfNoAcceleratorTritonr
   )r\  r  r   rŠ  Úmethodrý   rU  s   f     @r;   ra  ra  !  s”   ù€ ó ÛÝ.à‡‚�y×!Ò!Üœd 9›oÖ.ˆIØ×#Ñ# F×+Ô+Ü  ¨IÓ6�Ü˜F×#Ô#Ü˜I yÔ2LÈVÓ2TÖUñ	 /ð
 Ðà‡_‚_�YÓõ;ó  ð;ð, €Nr:   c                 ó    € \        V \        4      '       g   \        R 4      h\        P                  ! \
        P                  ! R4      ^8H  V 4      # )z+Are you using skipIfFreeThreaded correctly?ÚPy_GIL_DISABLED)rY   r­   rš   rQ   rÊ  Ú	sysconfigÚget_config_var©rÍ  s   &r;   ÚskipIfFreeThreadedrh  K  s=   € Ü�cœ3×ÒÜÐJÓKÐKÜ�?Š?œ9×3Ò3Ð4EÓFÈ!ÑKÈSÓQÐQr:   c                óV   a € \        S \        4      '       g   \        R4      hV 3R lpV# )z=
Usage:
@skipIfTorchDynamo(msg)
def test_blah(self):
    ...
z*Are you using skipIfTorchDynamo correctly?c                 óò   <a € \        S \        4      '       g   \        S 4      V V3R  l4       pV# \        S \        4      '       g   \        R\        S 4       24      h\        '       d   RS n        SS n        S # )c                  ó\   <€ \         '       d   \        P                  ! S4      hS! V / VB  R # r�   )r&  rQ   r  ©r†   r‡   rü   rÍ  s   *,€€r;   rý   Ú5skipIfTorchDynamo.<locals>.decorator.<locals>.wrapper]  s'   ø€ ç(Ó(Ü"×+Ò+¨CÓ0Ð0á˜Ð' Ô'r:   úexpected fn to be a type, got T)rY   rP   r
   rš   r&  r  r  ©rü   rý   rÍ  s   f €r;   r�  Ú$skipIfTorchDynamo.<locals>.decorator[  sl   ù€ Ü˜"œd×#Ò#Ü�2‹Yõ(ó ð(ð
 ˆNä˜"œd×#Ò#Ü Ð#AÄ$ÀrÃ(ÀÐ!LÓMÐMß Ó Ø#'ˆBÔ Ø'*ˆBÔ$àˆ	r:   )rY   r­   rš   ©rÍ  r�  s   f r;   ÚskipIfTorchDynamorr  Q  s+   ø€ ô �cœ3×ÒÜÐIÓJÐJõð$ Ðr:   z.test doesn't currently work with torchinductorc                 ó   a a€ VV 3R  lpV# )c                 óì   <a € \        S \        4      '       g   \        S 4      VV V3R  l4       pV# \        S \        4      '       g   \        R\        S 4       24      hS'       d   RS n        SS n        S # )c                  óT   <€ S'       d   \         P                  ! S4      hS! V / VB  R # r�   r  ©r†   r‡   Ú	conditionrü   rÍ  s   *,€€€r;   rý   Ú7skipIfTorchInductor.<locals>.decorator.<locals>.wrappers  ó$   ø€ çÜ"×+Ò+¨CÓ0Ð0á˜Ð' Ô'r:   rn  T©rY   rP   r
   rš   r  r  ©rü   rý   rw  rÍ  s   f €€r;   r�  Ú&skipIfTorchInductor.<locals>.decoratorq  si   ù€ Ü˜"œd×#Ò#Ü�2‹Yö(ó ð(ð
 ˆNä˜"œd×#Ò#Ü Ð#AÄ$ÀrÃ(ÀÐ!LÓMÐMßØ#'ˆBÔ Ø'*ˆBÔ$àˆ	r:   r1   ©rÍ  rw  r�  s   ff r;   ÚskipIfTorchInductorr~  o  s   ù€ öð$ Ðr:   c                óf   € \        V \        4      '       g   \        R\        V 4       24      hR pV# )zF
Usage:
@runWithoutCompiledAutograd(msg)
def test_blah(self):
    ...
zexpected msg to be str, got c                 ó0   a € \        S 4      V 3R  l4       pV# )c                  ó²   <€ \         P                  P                  P                  4       ;_uu_ 4        S! V / VB  R R R 4       R #   + '       g   i     R # ; ir�   )rw   Ú_dynamoÚcompiled_autogradÚ_disable)r†   r‡   r  s   *,€r;   rý   Ú>runWithoutCompiledAutograd.<locals>.decorator.<locals>.wrapper�  s8   ø€ ä—‘×0Ñ0×9Ñ9×;Õ;Ù�dÐ%˜fÒ%÷ <×;×;Ò;ús   ²	AÁA	©r
   ©r  rý   s   f r;   r�  Ú-runWithoutCompiledAutograd.<locals>.decorator�  s    ø€ Ü	ˆt‹ô	&ó 
ð	&ð ˆr:   )rY   r­   rš   rP   rq  s   & r;   ÚrunWithoutCompiledAutogradr‰  …  s5   € ô �cœ3×ÒÜÐ;¼DÀ»I¸;ÐGÓHÐHòð Ðr:   c                óh   a € \        S 4      \        Jd   \        R\        S 4       24      hV 3R lpV# )z8
Decorator for running tests serially.  Requires pytest
z#expected condition to be bool, got c                 ón   <€ \         '       d(   S'       d    \        P                  P                  V 4      # V # r�   )Ú
has_pytestr«  ÚmarkÚserial©rü   rw  s   &€r;   r�  ÚserialTest.<locals>.decorator¡  s$   ø€ ß‹:Ÿ)Ü—;‘;×%Ñ% bÓ)Ð)Øˆ	r:   )rP   r¿   rš   )rw  r�  s   f r;   Ú
serialTestr‘  ˜  s6   ø€ ô ˆIƒœdÓ"ÜÐBÄ4È	Ã?ÐBSÐTÓUÐUõð Ðr:   c                 ó$   € R  pV f   V# V! V 4      # )c                 ó   € R V n         V # r’   )Údynamo_strict©rn   s   &r;   r�  Ú)unMarkDynamoStrictTest.<locals>.decorator¨  s   € Ø!ˆÔØˆ
r:   r1   )rn   r�  s   & r;   ÚunMarkDynamoStrictTestr—  §  s   € òð ‚{ØÐá˜‹~Ðr:   c                ó,   a€ V3R lpV f   V# V! V 4      # )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                 óŽ   <a€ \         P                  ! V 4      '       d   R V n        SV n        V # V o\	        S4      V3R l4       pV# )Tc                  ó  <€ \         P                  P                  4        \        P                  P                  R R4      ;_uu_ 4        S! V / VB  RRR4       \         P                  P                  4        R#   + '       g   i     L0; i)ú$torch._dynamo.config.suppress_errorsFN)rw   r‚  ÚresetrQ   ÚmockÚpatchrû   s   *,€r;   rý   Ú8markDynamoStrictTest.<locals>.decorator.<locals>.wrapperÂ  sX   ø€ ä�M‰M×ÑÔ!Ü—‘×$Ñ$Ð%KÈU×SÕSÙ�DÐ#˜FÒ#÷ Tä�M‰M×ÑÖ!÷ T×Sús   Á	A9Á9B		)r  r_  r”  Údynamo_strict_nopythonr
   )Úcls_or_funcrý   rü   Únopythons   & @€r;   r�  Ú'markDynamoStrictTest.<locals>.decoratorº  sJ   ù€ Ü�?Š?˜;×'Ò'Ø(,ˆKÔ%Ø19ˆKÔ.ØÐàˆä	ˆr‹ô	"ó 
ð	"ð
 ˆr:   r1   )r¡  r¢  r�  s   &f r;   ÚmarkDynamoStrictTestr¤  ²  s!   ø€ õð  ÒØÐá˜Ó%Ð%r:   c                 ó@   € \        T \        ;'       d    \        R 7      # ))rÍ  rw  )r~  rã  r"  rg  s   &r;   ÚskipRocmIfTorchInductorr¦  Ð  s   € Ü 3´.×2\Ð2\ÔE\Ô]Ð]r:   c                 ó   a € V 3R  lpV# )c                 ó  <a € \        S \        4      '       g   \        S 4      V V3R  l4       pV# \        S \        4      '       g   \        R\        S 4       24      h\        \
        P                  8X  d   RS n        SS n        S # )c                  ó¤   <€ \         '       g   \        R 4      h\         \        P                  8X  d   \        P
                  ! S4      hS! V / VB  R# )rò  N)ró  rš   r0   r6   rQ   r  rl  s   *,€€r;   rý   Ú;skipIfLegacyJitExecutor.<locals>.decorator.<locals>.wrapperÖ  s@   ø€ ç%“~Ü(Ð)EÓFÐFÜ!¤]×%9Ñ%9Ô9Ü"×+Ò+¨CÓ0Ð0á˜Ð' Ô'r:   rn  T)	rY   rP   r
   rš   ró  r0   r6   r  r  ro  s   f €r;   r�  Ú*skipIfLegacyJitExecutor.<locals>.decoratorÔ  st   ù€ Ü˜"œd×#Ò#Ü�2‹Yõ(ó ð(ð ˆNä˜"œd×#Ò#Ü Ð#AÄ$ÀrÃ(ÀÐ!LÓMÐMÜœ]×1Ñ1Ô1Ø#'ˆBÔ Ø'*ˆBÔ$àˆ	r:   r1   rq  s   f r;   ÚskipIfLegacyJitExecutorr¬  Ó  s   ø€ õð* Ðr:   c                ór   € V ^8„  d   QhR\         R\        3,          R,          R\         R\        3,          /# )rM   rü   .NrO   )r   r   )rS   s   "r;   rT   rT   ì  s3   € ÷ #ñ #Ü�”c�Õ˜TÕ!ð#äˆc”3ˆhÕñ#r:   c                óŽ   a aaaa€ ^ RI HoHoHo S f   R # R VVV3R llo\        P
                  ! S 4      R V V3R ll4       pV# )z|
Decorator function to create a dynamo test case. A function annotate with
this decorator takes as input a unittest object.
)ÚCompileCounterrœ  Úoptimize_assertc                 ó   € \        V 4      # r�   )Úmake_dynamo_testr  s   &r;   r�   Ú"make_dynamo_test.<locals>.<lambda>õ  s
   € Ô*¨2Ô.r:   c                óN   € V ^8„  d   QhR\         R\        R\         3,          RR/# )rM   r  rü   .rO   N)r   r   )rS   s   "r;   rT   Ú&make_dynamo_test.<locals>.__annotate__÷  s/   € ÷ ñ Üðä�Sœ#�XÕðð 
ñ	r:   c                 ó†   <a aa€ R  VVV 3R llpS! 4       pV! 4        S! 4        S! V4      ! V4      pV! 4        S! 4        R# )c                ó   € V ^8„  d   QhRR/# r  r1   )rS   s   "r;   rT   Ú=make_dynamo_test.<locals>.standard_test.<locals>.__annotate__ü  s   € ÷ 	ñ 	�tñ 	r:   c                  ó   <€ S ! S3/ SB  R # r�   r1   )rü   r‡   r  s   €€€r;   ÚdummyÚ6make_dynamo_test.<locals>.standard_test.<locals>.dummyü  s   ø€ ÙˆtÑ�vÔr:   Nr1   )	r  rü   r‡   rº  ÚactualÚopt_fnr¯  r°  rœ  s	   fff   €€€r;   Ústandard_testÚ'make_dynamo_test.<locals>.standard_test÷  s:   û€ ÷
	ò 	ñ  Ó!ˆáŒÙŒÙ  Ô(¨Ó/ˆÙŒÙŽr:   c                ó(   € V ^8„  d   QhR\         RR/# )rM   r  rO   N)r   )rS   s   "r;   rT   rµ  	  s   € ÷ 
ñ 
”cð 
¨ñ 
r:   c                 ó   <€ S! V SVR 7      # ))rü   r‡   r1   )r  r‡   rü   r¾  s   &,€€r;   r  Ú!make_dynamo_test.<locals>.test_fn	  s   ø€ áØØØô
ð 	
r:   )Útorch._dynamo.testingr¯  rœ  r°  r   r
   )rü   r  r¯  r°  rœ  r¾  s   f @@@@r;   r²  r²  ì  sJ   ü€ ÷ MÑLØ	‚zÙ.Ð.÷ò ô  ‡_‚_�RÓ÷
ð 
ó ð
ð €Nr:   ÚPYTORCH_TEST_WITH_TVÚTEST_CUDA_MEM_LEAK_CHECKÚ PYTORCH_TEST_CUDA_MEM_LEAK_CHECKc                 ón   €  \         V ,          #   \         d    \         T P                  ,          u # i ; ir�   )Únumpy_to_torch_dtype_dictÚKeyErrorrP   ©Únp_dtypes   &r;   Únumpy_to_torch_dtyperÌ  :	  s0   € ð8Ü(¨Õ2Ð2øÜô 8Ü(¨¯©Õ7Ò7ð8ús   ‚ �"4³4c                 óB   €  \        V 4       R #   \         d     R# i ; i©TF)rÌ  rÉ  rÊ  s   &r;   Úhas_corresponding_torch_dtyperÏ  A	  s$   € ðÜ˜XÔ&ÙøÜô Úðúó   ‚ ��c                 ó   a a€ VV 3R  lpV# )c                 óì   <a € \        S \        4      '       g   \        S 4      VV V3R  l4       pV# \        S \        4      '       g   \        R\        S 4       24      hS'       d   RS n        SS n        S # )c                  óT   <€ S'       d   \         P                  ! S4      hS! V / VB  R # r�   r  rv  s   *,€€€r;   rý   Ú9skipIfNNModuleInlined.<locals>.decorator.<locals>.wrapper^	  ry  r:   rn  Trz  r{  s   f €€r;   r�  Ú(skipIfNNModuleInlined.<locals>.decorator[	  si   ù€ Ü˜"œd×#Ò#ä�2‹Yö(ó ð(ð ˆNä˜"œd×#Ò#Ü Ð#AÄ$ÀrÃ(ÀÐ!LÓMÐMßØ#'ˆBÔ Ø'*ˆBÔ$àˆ	r:   r1   r}  s   ff r;   ÚskipIfNNModuleInlinedrÖ  W	  s   ù€ öð( Ðr:   rÍ  z-test doesn't currently work on the ROCm stackc                ó>   € \        R  RV 24      pV e	   V! V 4      # T# )c                  ó   € \         # r�   )rã  r1   r:   r;   r�   ÚskipIfRocm.<locals>.<lambda>r	  s   € ¥^r:   úskipIfRocm: r  ©r  rÍ  r�  s   &$ r;   Ú
skipIfRocmrÜ  q	  s*   € ÜÑ3°|ÀCÀ5Ð5IÓJ€IØ"Ò.‰9�T‹?Ð=°IÐ=r:   c               ó4   a€ V3R lpV '       d	   V! V 4      # V# )zQOld skipIfRocm that silently drops classes from discovery. Migrate to skipIfRocm.c                 ó@   <a a€ R S 2o\        S 4      V V3R l4       pV# )rÚ  c                  óX   <€ \         '       d   \        P                  ! S4      hS! V / VB # r�   ©rã  rQ   r  ©r†   r‡   rü   r  s   *,€€r;   rý   Ú1skipIfRocm_BUGGY.<locals>.dec_fn.<locals>.wrapperz	  s)   ø€ ç‹~Ü×'Ò'¨Ó/Ð/á˜4Ð* 6Ñ*Ð*r:   r†  ©rü   rý   r  rÍ  s   f @€r;   Údec_fnÚ skipIfRocm_BUGGY.<locals>.dec_fnw	  s,   ú€ Ø ˜uÐ%ˆä	ˆr‹õ	+ó 
ð	+ð
 ˆr:   r1   ©r  rÍ  rä  s   &d r;   ÚskipIfRocm_BUGGYrç  u	  ó   ø€ õ	÷ Ù�d‹|ÐØ€Mr:   c                ó$   € V ^8„  d   QhR\         /# )rM   Údevice_indexrÔ   )rS   s   "r;   rT   rT   …	  s   € ÷ Fñ F¤#ñ Fr:   c                 óT   € \         P                  P                  V 4      P                  # r�   )rw   rA   ry   rz   )rê  s   &r;   ÚgetRocmArchNamerì  …	  s   € Ü�:‰:×+Ñ+¨LÓ9×EÑEÐEr:   c                ó>   € V ^8„  d   QhR\         \        R3,          /# ©rM   Úarch.©r‡  r­   )rS   s   "r;   rT   rT   ˆ	  s   € ÷ ,ñ ,œ%¤ S �/ñ ,r:   c                 óÐ   a€ \         P                  P                  '       g   R # \        4       o\        ;QJ d    V3R lV  4       F  '       g   K   R# 	  R # ! V3R lV  4       4      # )Fc              3   ó,   <"  € T F	  qS9   x € K  	  R # 5ir�   r1   )ró   r,  ÚrocmArchs   & €r;   rô   Ú"isRocmArchAnyOf.<locals>.<genexpr>Œ	  s   øé € Ð+¡d �HŽ}£dùó   ƒT)rw   ræ  rç  rì  Úany)rï  ró  s   &@r;   ÚisRocmArchAnyOfr÷  ˆ	  sG   ø€ Ü�=‰=××ÐÙÜÓ €Hß‹3Ô+¡dÓ+�3Œ3Ð+Š3Ð+ˆ3Ô+¡dÓ+Ó+Ð+r:   c                ó>   € V ^8„  d   QhR\         \        R3,          /# rî  rð  )rS   s   "r;   rT   rT   Ž	  s   € ÷ ñ œœs C˜x�ñ r:   c                 ó*   a € \        V 3R  lRS  24      # )c                  ó6   <€ \         ;'       d    \        S 4      # r�   )rã  r÷  ©rï  s   €r;   r�   Ú skipIfRocmArch.<locals>.<lambda>�	  s   ø€ ”×8Ð8¤?°4Ó#8Ð8r:   zskipIfRocm: test skipped on r  rû  s   fr;   ÚskipIfRocmArchrý  Ž	  s   ø€ ÜÜ8Ø
& t fÐ-óð r:   c                 ó0   a € \        S 4      V 3R  l4       pV# )c                  ó\   <€ \         '       d   S! V / VB  R# \        P                  ! R 4      h)z+test currently only works on the ROCm stackNrà  rû   s   *,€r;   rý   ÚrunOnRocm.<locals>.wrapper•	  s'   ø€ ç‹>Ù�Ð˜Ôä×#Ò#Ð$QÓRÐRr:   r†  r  s   f r;   Ú	runOnRocmr  ”	  s"   ø€ Ü
ˆ2ƒYôSó ðSð
 €Nr:   c                ó>   € V ^8„  d   QhR\         \        R3,          /# rî  rð  )rS   s   "r;   rT   rT   �	  s   € ÷ 	ñ 	œœc 3˜h�ñ 	r:   c                 ó   a € V 3R  lpV# )c                 ó4   <a € \        S 4      VV 3R  l4       pV# )c                 óŒ   <€ \         '       d-   \        S4      '       g   R S 2p\        P                  ! V4      hS! V .VO5/ VB # )zskipIfRocm: test only runs on )rã  r÷  rQ   r  )r  r†   r‡   r  rï  rü   s   &*, €€r;   Úwrap_fnÚ.runOnRocmArch.<locals>.dec_fn.<locals>.wrap_fnŸ	  sD   ø€ ç‹~¤o°d×&;Ò&;Ø9¸$¸Ð@�Ü×'Ò'¨Ó/Ð/Ù�dÐ,˜TÒ, VÑ,Ð,r:   r†  )rü   r  rï  s   f €r;   rä  ÚrunOnRocmArch.<locals>.dec_fnž	  s    ù€ Ü	ˆr‹õ	-ó 
ð	-ð
 ˆr:   r1   )rï  rä  s   f r;   ÚrunOnRocmArchr	  �	  s   ø€ õð €Mr:   c                 óJ   € \         '       d   \        P                  ! V 4      # T # r�   )ÚIS_S390XrQ   r.  r/  s   &r;   ÚxfailIfS390Xr  ¨	  r4  r:   c                 ó   a € V 3R  lpV# )c                 óD   <€ S'       d   \         P                  ! V 4      # V # r�   )rQ   r.  )r  rw  s   &€r;   rý   ÚxfailIf.<locals>.wrapper¬	  s   ø€ ßÜ×+Ò+¨DÓ1Ð1àˆKr:   r1   )rw  rý   s   f r;   ÚxfailIfr  «	  s   ø€ õð
 €Nr:   z,test doesn't currently work on the XPU stackc                ó>   € \        R  RV 24      pV e	   V! V 4      # T# )c                  ó   € \         # r�   ©ÚTEST_XPUr1   r:   r;   r�   ÚskipIfXpu.<locals>.<lambda>´	  s   € ¥Xr:   úskipIfXpu: r  rÛ  s   &$ r;   Ú	skipIfXpur  ³	  s*   € ÜÑ-°¸S¸EÐ/BÓC€IØ"Ò.‰9�T‹?Ð=°IÐ=r:   c               ó4   a€ V3R lpV '       d	   V! V 4      # V# )zOOld skipIfXpu that silently drops classes from discovery. Migrate to skipIfXpu.c                 ó@   <a a€ R S 2o\        S 4      V V3R l4       pV# )r  c                  óX   <€ \         '       d   \        P                  ! S4      hS! V / VB # r�   )r  rQ   r  rá  s   *,€€r;   rý   Ú0skipIfXpu_BUGGY.<locals>.dec_fn.<locals>.wrapper¼	  s)   ø€ ç‹xÜ×'Ò'¨Ó/Ð/á˜4Ð* 6Ñ*Ð*r:   r†  rã  s   f @€r;   rä  ÚskipIfXpu_BUGGY.<locals>.dec_fn¹	  s,   ú€ Ø˜s˜eÐ$ˆä	ˆr‹õ	+ó 
ð	+ð
 ˆr:   r1   ræ  s   &d r;   ÚskipIfXpu_BUGGYr  ·	  rè  r:   c                 óF  a aa€ R o\        S \        4      '       d   \        '       d   RS n        SS n        S # \
        P                  ! S 4      pRVP                  9   oS'       g'   \        P                  ! RS P                   R2^R7       \        S 4      V VV3R l4       pV# )z$test doesn't currently work with MPSTr¨  zskipIfMPS applied to zq which has no 'device' parameter. Consider using device-generic tests with instantiate_device_type_tests instead.rý  c                  óB  <€ S'       dn   V '       d
   V ^ ,          MRpVeV   \        VRR4      ;'       g    \        VRR4      p\        V\        4      '       d   VR8X  d   \        P                  ! S4      hM"\
        '       d   \        P                  ! S4      hS! V / VB # )ru   NrW  r¨  rB   )rX   rY   r­   rQ   r  ÚTEST_MPS)r†   r‡   ÚslfrW  rü   Úhas_device_argr  s   *,  €€€r;   rý   ÚskipIfMPS.<locals>.wrapperÛ	  s�   ø€ çç!�$�q–' tˆCØŠÜ% c¨=¸$Ó?÷ ð Ä7Ø˜ 4óD�ô ˜k¬3×/Ò/°KÀ5Ô4HÜ"×+Ò+¨FÓ3Ð3øß‹XÜ×#Ò# FÓ+Ð+Ù�4Ð"˜6Ñ"Ð"r:   )rY   rP   r   r  r  r  Ú	signatureÚ
parametersr$  r%  r4   r
   )rü   Úsigrý   r"  r  s   f  @@r;   Ú	skipIfMPSr'  Ç	  s˜   ú€ Ø3€Fô �"”d×Òß‹8Ø#'ˆBÔ Ø'-ˆBÔ$Øˆ	ä
×
Ò
˜BÓ
€CØ §¡Ñ/€NçÜ�ŠØ# B§O¡OÐ#4ð 5^ð ^àõ	
ô ˆ2ƒYö#ó ð#ð €Nr:   c                 ó(   € \        R  R4      ! V 4      # )c                  ó   € \         # r�   )ÚTEST_HPUr1   r:   r;   r�   ÚskipIfHpu.<locals>.<lambda>î	  s   € ¥r:   ú$test doesn't currently work with HPUr  r  s   &r;   Ú	skipIfHpur-  í	  s   € ÜÑ(Ð*PÔQÐRTÓUÐUr:   c                ó0   a € \        S 4      V 3R l4       pV# )zOOld skipIfHpu that silently drops classes from discovery. Migrate to skipIfHpu.c                  ó\   <€ \         '       d   \        P                  ! R 4      hS! V / VB  R# )r,  N)r*  rQ   r  rû   s   *,€r;   rý   Ú skipIfHpu_BUGGY.<locals>.wrapperò	  s'   ø€ ç‹8Ü×#Ò#Ð$JÓKÐKá�Ð˜Ôr:   r†  r  s   f r;   ÚskipIfHpu_BUGGYr1  ð	  s    ø€ ä
ˆ2ƒYô ó ð ð
 €Nr:   c                óF   € V ^8„  d   QhR\         \        \        3,          /# r«   )r‡  rÕ   )rS   s   "r;   rT   rT   ú	  s   € ÷ .ñ .œœc¤3˜h�ñ .r:   c                  ó@   € ^ RI Hp  V ! 4       pV^ ,          V^,          3# )ru   )Ú_get_torch_rocm_version)Ú#torch.testing._internal.common_cudar4  )r4  Úrocm_versions     r;   ÚgetRocmVersionr7  ú	  s    € ÝKÙ*Ó,€LØ˜�O˜\¨!�_Ð-Ð-r:   c                 ó0   a € V 3R  lp\        VRS  R24      # )c                  ó€   <€ \         '       g   R # \        4       p V RJ ;'       g    SRJ ;'       g    V \        S4      8  # ©FN©rã  r7  r‡  ©Úrocm_version_tupleræ  s    €r;   Ú_should_skipÚ/skipIfRocmVersionLessThan.<locals>._should_skip
  sH   ø€ ß‹~ÙÜ+Ó-Ðà $Ð&÷ 3ð 3Ø˜$ˆ÷3ð 3à!¤E¨'£NÑ2ð	
r:   zROCm version less than z	 requiredr  ©ræ  r>  s   f r;   ÚskipIfRocmVersionLessThanrA   
  s!   ø€ õ
ô ˜Ð(?À¸yÈ	Ð&RÓSÐSr:   c                 ó0   a € V 3R  lp\        VRS  R24      # )c                  ó€   <€ \         '       g   R # \        4       p V RJ;'       d    SRJ;'       d    V \        S4      8¬  # r:  r;  r<  s    €r;   r>  Ú.skipIfRocmVersionAtLeast.<locals>._should_skip
  sI   ø€ ß‹~ÙÜ+Ó-Ðà dÐ*÷ 5ð 5Ø˜tÐ#÷5ð 5à"¤e¨G£nÑ4ð	
r:   zROCm version at least z: known failurer  r@  s   f r;   ÚskipIfRocmVersionAtLeastrE  
  s!   ø€ õ
ô ˜Ð(>¸w¸iÀÐ&WÓXÐXr:   c                 ó(   € \        R  R4      ! V 4      # )c                  ó   € \         '       * # r�   )ÚTEST_WITH_MIOPEN_SUGGEST_NHWCr1   r:   r;   r�   Ú,skipIfNotMiopenSuggestNHWC.<locals>.<lambda>
  s   € Ô1Õ1r:   z:test doesn't currently work without MIOpen NHWC activationr  r  s   &r;   ÚskipIfNotMiopenSuggestNHWCrJ  
  s   € ÜÙ1ØDôð 	ó
ð 
r:   z0test doesn't currently work on the Windows stackc                ó>   € \        R  RV 24      pV e	   V! V 4      # T# )c                  ó   € \         # r�   )rH  r1   r:   r;   r�   ÚskipIfWindows.<locals>.<lambda>#
  s   € ¥Zr:   zskipIfWindows: r  rÛ  s   &$ r;   ÚskipIfWindowsrN  "
  s*   € ÜÑ/°?À3À%Ð1HÓI€IØ"Ò.‰9�T‹?Ð=°IÐ=r:   c                ó>   € \        R  RV 24      pV e	   V! V 4      # T# )c                  óZ   € \         ;'       d    \        P                  P                  4       # r�   )rH  rw   rC   rx   r1   r:   r;   r�   Ú"skipIfWindowsXPU.<locals>.<lambda>(
  s   € ”
×7Ð7œuŸy™y×5Ñ5Ó7Ð7r:   zskipIfWindowsXPU: r  rÛ  s   &$ r;   ÚskipIfWindowsXPUrR  &
  s/   € ÜÙ7Ð;MÈcÈUÐ9Só€Ið #Ò.‰9�T‹?Ð=°IÐ=r:   z$requires cuda-python (cuda.bindings)c                  ó  € \         P                  P                  4       ;'       dK    \         P                  P                  4       R8¬  ;'       d"    \         P                  P	                  4       ^8¬  p \         P                  P	                  4       p\        V^,
          4       FP  p\        V^,           V4       F,  p\         P                  P                  W#4      '       d   K*  Rp  M	  V '       d   KP   M	  \        V '       * R4      # )é   Fz cuda p2p access is not available)rT  ru   )rw   rA   rx   Úget_device_capabilityrŽ  r’  Úcan_device_access_peerÚskip_but_pass_in_sandcastle_if)Úcuda_p2p_access_availableÚnum_devicesr-  Újs       r;   Úrequires_cuda_p2p_accessr[  .
  sÒ   € ä�
‰
×ÑÓ!÷ 	+ð 	+Ü�J‰J×,Ñ,Ó.°&Ñ8÷	+ð 	+ä�J‰J×#Ñ#Ó%¨Ñ*ð ô
 —*‘*×)Ñ)Ó+€KÜ�; •?Ö#ˆÜ�q˜1•u˜kÖ*ˆAÜ—:‘:×4Ñ4°Q×:Ô:Ø,1Ð)Ùñ +÷ )Ñ(Ùñ $ô *Ø%Ô%Ø*óð r:   c                 ó0   a € \        S 4      V 3R  l4       pV# )c                  ó  <€ \         P                  P                  P                  4       p S! V / VB  \         P                  P                  P                  V4       R #   \         P                  P                  P                  T4       i ; ir�   )rw   ÚbackendsrA   Úpreferred_linalg_library©r†   r‡   Ú_preferred_backendrü   s   *, €r;   Ú_fnÚ.setLinalgBackendsToDefaultFinally.<locals>._fnE
  sb   ø€ ä"Ÿ^™^×0Ñ0×IÑIÓKÐð	MÙ�Ð˜Òä�N‰N×Ñ×8Ñ8Ð9KÖLøŒE�N‰N×Ñ×8Ñ8Ð9KÕLúó   «A Á+B	r†  ©rü   rb  s   f r;   Ú!setLinalgBackendsToDefaultFinallyrf  D
  s"   ø€ Ü
ˆ2ƒYôMó ðMð €Jr:   c                 ó0   a € \        S 4      V 3R  l4       pV# )c                  ó>  <€ \         P                  P                  P                  4       p S! V / VB  \         P                  P                  P                  V4       \         P                  P                  P	                  4       '       d]   \         P
                  P                  4        \         P
                  P                  4        \         P
                  P                  4        R # R #   \         P                  P                  P                  T4       \         P                  P                  P	                  4       '       d\   \         P
                  P                  4        \         P
                  P                  4        \         P
                  P                  4        i i ; ir�   )	rw   r^  rA   Úpreferred_blas_libraryÚis_builtrê  Ú_cuda_resetCublasWorkspaceSizeÚ _cuda_resetCublasLtWorkspaceSizeÚ_cuda_clearCublasWorkspacesr`  s   *, €r;   rb  Ú,setBlasBackendsToDefaultFinally.<locals>._fnR
  s   ø€ ä"Ÿ^™^×0Ñ0×GÑGÓIÐð	7Ù�Ð˜Òä�N‰N×Ñ×6Ñ6Ð7IÔJÜ�~‰~×"Ñ"×+Ñ+×-Ò-Ü—‘×7Ñ7Ô9Ü—‘×9Ñ9Ô;Ü—‘×4Ñ4Ö6ñ .øô �N‰N×Ñ×6Ñ6Ð7IÔJÜ�~‰~×"Ñ"×+Ñ+×-Ò-Ü—‘×7Ñ7Ô9Ü—‘×9Ñ9Ô;Ü—‘×4Ñ4Õ6ð .ús   «C( Ã(B4Fr†  re  s   f r;   ÚsetBlasBackendsToDefaultFinallyro  Q
  s    ø€ Ü
ˆ2ƒYô	7ó ð	7ð €Jr:   c                 ó0   a € \        S 4      V 3R  l4       pV# )c                  ó  <€ \         P                  P                  P                  4       p S! V / VB  \         P                  P                  P                  V4       R #   \         P                  P                  P                  T4       i ; ir�   )rw   r^  rA   Úpreferred_rocm_fa_libraryr`  s   *, €r;   rb  Ú,setSdpaBackendsToDefaultFinally.<locals>._fn`
  sb   ø€ ä"Ÿ^™^×0Ñ0×JÑJÓLÐð	NÙ�Ð˜Òä�N‰N×Ñ×9Ñ9Ð:LÖMøŒE�N‰N×Ñ×9Ñ9Ð:LÕMúrd  r†  re  s   f r;   ÚsetSdpaBackendsToDefaultFinallyrt  _
  s"   ø€ Ü
ˆ2ƒYôNó ðNð €Jr:   c                   óT   a € ] tR tRt o RRRR/R lt]R 4       tR tR	 tR
 t	Rt
V tR# )ÚDeterministicGuardik
  Ú	warn_onlyFÚfill_uninitialized_memoryTc               ó*   € Wn         W n        W0n        R # r�   )Údeterministicrw  rx  )r  rz  rw  rx  s   &&$$r;   r8  ÚDeterministicGuard.__init__l
  s   € Ø*ÔØ"ŒØ)BÖ&r:   c                ó¨   € V ! \         P                  ! 4       \         P                  ! 4       \         P                  P                  P
                  R 7      # ))rw  rx  )rw   Ú$are_deterministic_algorithms_enabledÚ-is_deterministic_algorithms_warn_only_enabledÚutilsrz  rx  r•  s   &r;   Ú_current_stateÚ!DeterministicGuard._current_stateq
  s:   € áÜ×6Ò6Ó8Ü×IÒIÓKÜ&+§k¡k×&?Ñ&?×&YÑ&Yô
ð 	
r:   c                ó°   € \         P                  ! V P                  V P                  R 7       V P                  \         P
                  P                  n        R# )©rw  N)rw   Úuse_deterministic_algorithmsrz  rw  rx  r  r;  s   &r;   Ú_updateÚDeterministicGuard._updatey
  s4   € Ü×*Ò*¨4×+=Ñ+=ÈÏÉÕXØ>B×>\Ñ>\Œ�‰×!Ñ!Ö;r:   c                óP   € V P                  4       V n        V P                  4        R # r�   )r€  Ú_restorer…  r;  s   &r;   Ú	__enter__ÚDeterministicGuard.__enter__}
  s   € Ø×+Ñ+Ó-ˆŒØ�‰Žr:   c                ó:   € V P                   P                  4        R # r�   )rˆ  r…  ©r  Úexception_typeÚexception_valueÚ	tracebacks   &&&&r;   Ú__exit__ÚDeterministicGuard.__exit__�
  s   € Ø�‰×ÑÖr:   )rˆ  rz  rx  rw  N)r2   r3   r4   r5   r8  Úclassmethodr€  r…  r‰  r�  r9   r¸   r¹   s   @r;   rv  rv  k
  sE   ø‡ € ðC°5ð CÐTXô Cð
 ñ
ó ð
ò]ò÷ ð  r:   rv  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚAlwaysWarnTypedStorageRemovali„
  c                ól   € \        V\        4      '       g   \        R \        V4       24      hWn        R# )z%expected always_warn to be bool, got N)rY   r¿   rš   rP   Úalways_warn)r  r–  s   &&r;   r8  Ú&AlwaysWarnTypedStorageRemoval.__init__…
  s.   € Ü˜+¤t×,Ò,Ü Ð#HÌÈkÓIZÐH[Ð!\Ó]Ð]Ø&Ör:   c                óž   € \         P                  P                  4       V n        \         P                  P	                  V P
                  4       R # r�   )rw   ÚstorageÚ&_get_always_warn_typed_storage_removalÚalways_warn_restoreÚ&_set_always_warn_typed_storage_removalr–  r;  s   &r;   r‰  Ú'AlwaysWarnTypedStorageRemoval.__enter__Š
  s/   € Ü#(§=¡=×#WÑ#WÓ#YˆÔ Ü�‰×<Ñ<¸T×=MÑ=MÖNr:   c                óX   € \         P                  P                  V P                  4       R # r�   )rw   r™  rœ  r›  rŒ  s   &&&&r;   r�  Ú&AlwaysWarnTypedStorageRemoval.__exit__Ž
  s   € Ü�‰×<Ñ<¸T×=UÑ=UÖVr:   )r–  r›  N©	r2   r3   r4   r5   r8  r‰  r�  r9   r¸   r¹   s   @r;   r”  r”  „
  s   ø‡ € ò'ò
O÷Wð Wr:   r”  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚCudaSyncGuardi•
  c                ó   € Wn         R # r�   )Úmode)r  Úsync_debug_modes   &&r;   r8  ÚCudaSyncGuard.__init__–
  s   € Ø#Ž	r:   c                óž   € \         P                  P                  4       V n        \         P                  P	                  V P
                  4       R # r�   )rw   rA   Úget_sync_debug_modeÚdebug_mode_restoreÚset_sync_debug_moder¤  r;  s   &r;   r‰  ÚCudaSyncGuard.__enter__™
  s-   € Ü"'§*¡*×"@Ñ"@Ó"BˆÔÜ�
‰
×&Ñ& t§y¡yÖ1r:   c                óX   € \         P                  P                  V P                  4       R # r�   )rw   rA   rª  r©  rŒ  s   &&&&r;   r�  ÚCudaSyncGuard.__exit__�
  s   € Ü�
‰
×&Ñ& t×'>Ñ'>Ö?r:   )r©  r¤  Nr   r¹   s   @r;   r¢  r¢  •
  s   ø‡ € ò$ò2÷@ð @r:   r¢  c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )ÚSwapTensorsGuardi¢
  c                ó   € Wn         R # r�   )Úuse_swap_tensors)r  r±  s   &&r;   r8  ÚSwapTensorsGuard.__init__£
  s   € Ø 0Ör:   c                ó¾   € \         P                  P                  4       V n        V P                  e,   \         P                  P                  V P                  4       R # R # r�   )rw   Ú
__future__Ú$get_swap_module_params_on_conversionÚswap_tensors_restorer±  Ú$set_swap_module_params_on_conversionr;  s   &r;   r‰  ÚSwapTensorsGuard.__enter__¦
  sD   € Ü$)×$4Ñ$4×$YÑ$YÓ$[ˆÔ!Ø× Ñ Ò,Ü×Ñ×AÑAÀ$×BWÑBWÖXñ -r:   c                óX   € \         P                  P                  V P                  4       R # r�   )rw   r´  r·  r¶  rŒ  s   &&&&r;   r�  ÚSwapTensorsGuard.__exit__«
  s   € Ü×Ñ×=Ñ=¸d×>WÑ>WÖXr:   )r¶  r±  Nr   r¹   s   @r;   r¯  r¯  ¢
  s   ø‡ € ò1òY÷
Yð Yr:   r¯  c                 ó0   a € \        S 4      V 3R  l4       pV# )c            	      ó2  <€ \        \        P                  ! 4       \        P                  ! 4       R 7      ;_uu_ 4         ! R R4      pV! 4       ;_uu_ 4        S! V / VB  RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i)rƒ  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚHwrapDeterministicFlagAPITest.<locals>.wrapper.<locals>.CuBLASConfigGuardiÑ
  ÚCUBLAS_WORKSPACE_CONFIGc                óœ   € \         P                  P                  V P                  4      V n        R \         P                  V P                  &   R# )z:4096:8N©r–   r  r  Úcublas_var_nameÚcublas_config_restorer;  s   &r;   r‰  ÚRwrapDeterministicFlagAPITest.<locals>.wrapper.<locals>.CuBLASConfigGuard.__enter__Ô
  s1   € Ü13·±·±À×@TÑ@TÓ1U�DÔ.Ø7@”B—J‘J˜t×3Ñ3Ó4r:   c                ó  € \         P                  P                  V P                  4      pV P                  f$   Ve   \         P                  V P                   R # R # V P                  \         P                  V P                  &   R # r�   rÁ  )r  r�  rŽ  r�  Úcur_cublas_configs   &&&& r;   r�  ÚQwrapDeterministicFlagAPITest.<locals>.wrapper.<locals>.CuBLASConfigGuard.__exit__Ø
  sa   € Ü(*¯
©
¯©°t×7KÑ7KÓ(LÐ%Ø×1Ñ1Ò9Ø,Ò8Ü "§
¡
¨4×+?Ñ+?Ò @ñ 9ð <@×;UÑ;UœŸ
™
 4×#7Ñ#7Ó8r:   )rÃ  N)	r2   r3   r4   r5   rÂ  r‰  r�  r9   r¸   r¹   s   @r;   ÚCuBLASConfigGuardr¾  Ñ
  s   ø‡ € Ø";�òA÷Vð Vr:   rÈ  N)rv  rw   r}  r~  )r†   r‡   rÈ  rü   s   *, €r;   rý   Ú-wrapDeterministicFlagAPITest.<locals>.wrapperÌ
  s{   ø€ äÜ×:Ò:Ó<Ü×MÒMÓO÷Qö Q÷Vñ Vñ #×$Õ$Ù�DÐ#˜FÒ#÷ %÷#Qñ Q÷" %×$ú÷#Q÷ Qð Qús#   ½BÁ	A2	Á BÁ2BÁ=BÂB	r†  r  s   f r;   ÚwrapDeterministicFlagAPITestrÊ  Ë
  s    ø€ Ü
ˆ2ƒYô$ó ð$ð( €Nr:   c                 ó   a € V 3R  lpV# )c                 ó4   <a € \        S 4      V V3R  l4       pV# )c                  óx   <€ \        S4      ;_uu_ 4        S! V / VB  R R R 4       R #   + '       g   i     R # ; ir�   )r¯  )r†   r‡   rü   Úswaps   *,€€r;   rý   Ú4wrapSwapTensorsTest.<locals>.dec_fn.<locals>.wrapperê
  s*   ø€ ä! $×'Õ'Ù�DÐ#˜FÒ#÷ (×'×'Ò'ús   •	(¨9	r†  )rü   rý   rÎ  s   f €r;   rä  Ú#wrapSwapTensorsTest.<locals>.dec_fné
  s    ù€ Ü	ˆr‹õ	$ó 
ð	$ð ˆr:   r1   )rÎ  rä  s   f r;   ÚwrapSwapTensorsTestrÑ  è
  s   ø€ õð €Mr:   c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )rÎ  iò
  c                ó0   <€ \         SV `  4        Wn        R # r�   )rÞ  r8  Úswap_values)r  rÔ  rß  s   &&€r;   r8  Úswap.__init__ó
  s   ø€ Ü‰ÑÔØ&Ör:   c              #  ój   "  € V P                    F  p\        V4      ! V4      R V 2/ R 3x € K   	  R# 5i)Úswap_c                 ó   € . # r�   r1   r¿  s   &r;   r�   Ú(swap._parametrize_test.<locals>.<lambda>ù
  s   € ÑQSr:   N)rÔ  rÑ  )r  rÝ   rY  rZ  rÎ  s   &&&& r;   r[  Úswap._parametrize_test÷
  s4   é € Ø×$Ô$ˆDÜ% dÔ+¨DÓ1°U¸4¸&°>À2Á|ÐSÔSó %ùs   ‚13)rÔ  )	r2   r3   r4   r5   r8  r[  r9   r¸   rú  rû  s   @@r;   rÎ  rÎ  ò
  s   ù‡ € õ'÷Tò Tr:   rÎ  c                 óâ   € \         pV'       d.    \        P                  ! \        P                  ! ^^.4      4       \        P                  ! V'       * R4      ! V 4      #   \
         d    Rp L1i ; i)rM   Fz*PyTorch was compiled without numpy support)Ú
TEST_NUMPYrw   Ú
from_numpyr,  Úarrayro  rQ   rÊ  )rü   Únumpy_supports   & r;   ÚskipIfCompiledWithoutNumpyrà  û
  s_   € ô €Mßð	"Ü×ÒœRŸXšX q¨! fÓ-Ô.ô �?Š?˜}Ô,Ð.ZÔ[Ð\^Ó_Ð_øô ô 	"Ø!ŠMð	"ús   �,A ÁA.Á-A.c                 ó   a a€ VV 3R  lpV# )c                 ó   <€ S! V S4      # r�   r1   )r  r¨  rü   s   &€€r;   Úrun_test_functionÚ)_test_function.<locals>.run_test_function  s   ø€ Ù�$˜ÓÐr:   r1   )rü   r¨  rã  s   ff r;   Ú_test_functionrå    s   ù€ ö àÐr:   c                 ó(   € \        R  R4      ! V 4      # )c                  óT   € \         P                  P                  P                  '       * # r�   )rw   r^  ÚxnnpackrŸ   r1   r:   r;   r�   Ú!skipIfNoXNNPACK.<locals>.<lambda>  s   € ”E—N‘N×*Ñ*×2Ñ2Õ2r:   zIXNNPACK must be enabled for these tests. Please build with USE_XNNPACK=1.r  r  s   &r;   ÚskipIfNoXNNPACKrê    s   € ÜÙ2ØSôð 	ó
ð 
r:   c                 ó(   € \        R  R4      ! V 4      # )c                  ó@   € \         P                  P                  '       * # r�   )rw   rê  Ú
has_lapackr1   r:   r;   r�   Ú skipIfNoLapack.<locals>.<lambda>  s   € ¤E§H¡H×$7Ñ$7Õ 7r:   zPyTorch compiled without Lapackr  r  s   &r;   ÚskipIfNoLapackrï    s   € ÜÑ7Ð9ZÔ[Ð\^Ó_Ð_r:   c                ó.   € \         P                  ! R4      # )a,  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)rQ   r	  )Úop_nameÚmessages   &&r;   ÚskipIfNotRegisteredró    s   € ô �=Š=Ð=Ó>Ð>r:   c                 ó(   € \        R  R4      ! V 4      # )c                  ó   € \         '       * # r�   )Ú
TEST_SCIPYr1   r:   r;   r�   ÚskipIfNoSciPy.<locals>.<lambda>"  s   € ¤J¥r:   z'test require SciPy, but SciPy not foundr  r  s   &r;   ÚskipIfNoSciPyrø  !  s   € ÜÑ.Ð0YÔZÐ[]Ó^Ð^r:   c                 ó(   € \        R  R4      ! V 4      # )c                  ó(   € R \         P                  9   # )ÚPYTEST_CURRENT_TEST)r–   r  r1   r:   r;   r�   Ú skip_if_pytest.<locals>.<lambda>&  s   € Ð%¬¯©Ò3r:   zdoes not work under pytestr  r  s   &r;   Úskip_if_pytestrý  $  s   € ÜÙ3Ð5Qôàó
ð 
r:   c                 ó(   € \        R  R4      ! V 4      # )c                  ó   € \         '       * # r�   r  r1   r:   r;   r�   ÚskipIfNoXPU.<locals>.<lambda>*  s   € ¤H¥r:   z)test required PyTorched compiled with XPUr  r  s   &r;   ÚskipIfNoXPUr  )  s   € ÜÑ,Ð.YÔZÐ[]Ó^Ð^r:   c                ó(   € \        R R4      ! V 4      # )aM  Skip if the CUDA/HIP caching allocator is not active. Covers both the
runtime toggle (``torch.cuda.caching_allocator_enable(False)``) and the
env-var bypass (``PYTORCH_NO_CUDA_MEMORY_CACHING`` /
``PYTORCH_NO_HIP_MEMORY_CACHING``). The CPU-only case (no CUDA built)
is treated as "allocator irrelevant", so the test is allowed to run.c                  ó”   € \         P                  P                  4       ;'       d$    \         P                  P	                  4       '       * # r�   )rw   rA   rx   rê  Ú%_cuda_cudaCachingAllocator_is_enabledr1   r:   r;   r�   Ú0skipIfCachingAllocatorDisabled.<locals>.<lambda>3  s6   € ”—
‘
×'Ñ'Ó)÷ Að AÜ—‘×>Ñ>Ó@Ô@ðAr:   zGrequires the CUDA/HIP caching allocator (current allocator is uncached)r  r  s   &r;   ÚskipIfCachingAllocatorDisabledr  ,  s$   € ô ñ	AàQôð 	ó	
ð 
r:   c                 óN   a € \        S 4      V 3R  l4       pRVP                  R&   V# )c                  ó\   <€ \         '       g   \        P                  ! R 4      hS! V / VB  R# )ú<test is slow; run with PYTORCH_TEST_WITH_SLOW to enable testN)rë  rQ   r  rû   s   *,€r;   rý   ÚslowTest.<locals>.wrapper9  s'   ø€ ç‹~Ü×#Ò#Ð$bÓcÐcá�Ð˜Ôr:   TÚ	slow_test)r
   Ú__dict__r  s   f r;   ÚslowTestr  8  s0   ø€ Ü
ˆ2ƒYô ó ð ð
 %)€G×Ñ�[Ñ!Ø€Nr:   c                 ó$   € V '       d   \         # R  # )c                 ó   € V # r�   r1   r  s   &r;   r�   ÚslowTestIf.<locals>.<lambda>D  s   € ±r:   )r  )rw  s   &r;   Ú
slowTestIfr  C  s   € ß Œ8Ð3¡mÐ3r:   c                 ó   a € V 3R  lpV# )c                 óF   <€ \        V R R4      '       d   S'       * V n        V # )Ú_do_cuda_memory_leak_checkT)rX   r  r�  s   &€r;   ÚdecÚ&skipCUDAMemoryLeakCheckIf.<locals>.decH  s"   ø€ Ü�2Ð3°T×:Ò:Ø09¬MˆBÔ)Øˆ	r:   r1   ©rw  r  s   f r;   ÚskipCUDAMemoryLeakCheckIfr  G  ó   ø€ õð €Jr:   c                 ó   a € V 3R  lpV# )c                 óF   <€ \        V R R4      '       d   S'       * V n        V # )Ú_do_cuda_non_default_streamT)rX   r  r�  s   &€r;   r  Ú'skipCUDANonDefaultStreamIf.<locals>.decO  s"   ø€ Ü�2Ð4°d×;Ò;Ø1:¬]ˆBÔ*Øˆ	r:   r1   r  s   f r;   ÚskipCUDANonDefaultStreamIfr  N  r  r:   c                 ó0   a € \        S 4      V 3R  l4       pV# )c                  ó¸   <€ \         P                  ! 4       ;_uu_ 4        \         P                  ! R 4       S! V / VB  RRR4       R#   + '       g   i     R# ; i)ÚignoreN)r$  Úcatch_warningsÚsimplefilterrû   s   *,€r;   rý   Ú"suppress_warnings.<locals>.wrapperV  s<   ø€ ä×$Ò$×&Õ&Ü×!Ò! (Ô+Ù�Ð˜Ò÷ '×&×&Ò&ús   ŸAÁA	r†  r  s   f r;   Úsuppress_warningsr%  U  s    ø€ Ü
ˆ2ƒYô ó ð ð €Nr:   c                 ó\  a€ Sf   / o\        V \        P                  4      '       d‘   V P                  '       g   \	        R4      hSP                  V P                  V P                  4      p\        P                  ! 4       ;_uu_ 4        V P                  VRRR7      pV P                  Vn	        R R R 4       V# \        P                  ! V 4      '       d=   V P                  4       P                  V P                  4       4      P                  V 4      # \        V \        4      '       d   V  Uu. uF  p\!        VS4      NK  	  up# \        V \"        4      '       d3   \"        ;QJ d    . V3R lV  4       F  NK  	  5# ! V3R lV  4       4      # \%        V 4      #   + '       g   i     X# ; iu upi )Nz expected obj to be a leaf tensorrA   T)r¦  r¨  Úcopyc              3   ó<   <"  € T F  p\        VS4      x € K  	  R # 5ir�   )Úto_gpu)ró   ÚoÚtype_maps   & €r;   rô   Úto_gpu.<locals>.<genexpr>n  s   øé € Ð6±#¨Q”V˜A˜x×(Ð(³#ùó   ƒ)rY   rw   r   Úis_leafrš   r  r¦  Úno_gradÚtoÚrequires_gradÚ
is_storageÚnewÚresize_ÚsizeÚcopy_rg  r)  r‡  r   )Úobjr+  ÚtÚresr*  s   &f   r;   r)  r)  ^  s3  ø€ ØÒØˆÜ�#”u—|‘|×$Ò$Ø�{�{ˆ{Ü Ð!CÓDÐDØ�L‰L˜Ÿ™ C§I¡IÓ.ˆÜ�]Š]�_�_Ø—&‘&˜q¨°d�&Ó;ˆCØ #× 1Ñ 1ˆCÔ÷ ð ˆ
Ü	×	Ò	˜#×	Ò	Ø�w‰w‹y× Ñ  §¡£Ó,×2Ñ2°3Ó7Ð7Ü	�Cœ×	Ò	Ù-0Ó1©S¨”�q˜(Ö#©SÑ1Ð1Ü	�Cœ×	Ò	ßŒuÔ6±#Ó6�uÐ6ˆuÔ6±#Ó6Ó6Ð6ä˜‹}Ð÷ Ž_ð ˆ
üò 2s   Â&FÄ*F)ÆF&	c                 óB   € \         P                  ! V 4      P                  # r�   )r  Úgetfullargspecr†   r/  s   &r;   Úget_function_arglistr<  s  s   € Ü×!Ò! $Ó'×,Ñ,Ð,r:   c                 óÌ   € V f   \         p \        P                  ! V 4       \        P                  ! V 4       \
        '       d"   \        P                  P	                  V 4       R # R # r�   )rH  rw   Úmanual_seedÚrandomrL  rÜ  r,  )rL  s   &r;   rI  rI  w  s@   € Ø‚|ÜˆÜ	×Ò�dÔÜ
‡K‚K�ÔßƒzÜ
�	‰	�‰�tÖñ r:   c              #   óÐ   "  € \         P                  ! 4       p\         P                  ! V 4        R x € \         P                  ! V4       R #   \         P                  ! T4       i ; i5ir�   )rw   Úget_default_dtypeÚset_default_dtype)r¦  Úsaved_dtypes   & r;   rB  rB  €  sE   é € ä×)Ò)Ó+€KÜ	×Ò˜EÔ"ð-Ûä×Ò Ö,øŒ×Ò Õ,üó   ‚,A&¯A ³A&ÁA#Á#A&c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )Úset_default_dtype_if_supportediŠ  a  Decorator like set_default_dtype, but only sets the dtype if the device
supports it.

Calls the test object's `DeviceTypeTestBase.get_primary_device()` method at
call time, so this only works on test classes that have had
`instantiate_device_type_tests` applied to them.
c                ó   € Wn         R # r�   ©Ú_dtype)r  r¦  s   &&r;   r8  Ú'set_default_dtype_if_supported.__init__“  s   € ØŽr:   c                óJ   a a€ \         P                  ! S4      VV 3R  l4       pV# )c                 ó¤  <€ V P                  4       pR p \        P                  ! ^ VSP                  R7       RpV'       d6   \        P
                  ! 4       p\        P                  ! SP                  4        S! V .VO5/ VB Ve   \        P                  ! V4       # #   \         d    Rp Lvi ; i  Te   \        P                  ! T4       i i ; i)T©r¨  r¦  FN)Úget_primary_devicerw   ÚemptyrI  rZ   rA  rB  )Ú	test_selfr†   r‡   r¨  Údtype_supportedrC  rü   r  s   &*,   €€r;   rý   Ú8set_default_dtype_if_supported.__call__.<locals>.wrapper—  s»   ø€ à×1Ñ1Ó3ˆFØ"ˆOð(Ü—’˜A f°D·K±KÕ@ð ˆKçÜ#×5Ò5Ó7�Ü×'Ò'¨¯©Ô4ð9Ù˜)Ð5 dÒ5¨fÑ5àÒ*Ü×+Ò+¨KÕ8ð +øô ô (Ø"'’ð(ûð Ò*Ü×+Ò+¨KÕ8ð +ús   •#B Á8B2 ÂB/Â.B/Â2Crÿ   )r  rü   rý   s   ff r;   rb  Ú'set_default_dtype_if_supported.__call__–  s%   ù€ Ü	�Š˜Ó	õ	9ó 
ð	9ð( ˆr:   rH  N)	r2   r3   r4   r5   rD   r8  rb  r9   r¸   r¹   s   @r;   rF  rF  Š  s   ø‡ € ñò÷ð r:   rF  c              #   óî   "  € \         P                  ! . 4      P                  4       p\         P                  ! V 4        R x € \         P                  ! V4       R #   \         P                  ! T4       i ; i5ir�   )rw   ÚtensorrP   Úset_default_tensor_type)Útensor_typeÚsaved_tensor_types   & r;   rV  rV  ¯  sQ   é € äŸš RÓ(×-Ñ-Ó/ÐÜ	×!Ò! +Ô.ð9Ûä×%Ò%Ð&7Ö8øŒ×%Ò%Ð&7Õ8üs   ‚;A5¾A ÁA5ÁA2Á2A5c                 óÜ   € V P                  4       ^ 8X  d   \        ^ 4      # V P                  4       ^8X  d   \        V P                  ^ 4      4      # \        R V P                  4        4       !  # )ru   c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir�   r‘  )ró   r¡  s   & r;   rô   Úiter_indices.<locals>.<genexpr>½  s   é € Ð5¡} !”U˜1—X�X£}ùs   ‚)Údimr’  r5  r   )rU  s   &r;   Úiter_indicesr]  ¸  sQ   € Ø‡z�zƒ|�qÔÜ�Q‹xˆØ‡z�zƒ|�qÔÜ�V—[‘[ “^Ó$Ð$ÜÑ5 v§{¡{¤}Ó5Ñ6Ð6r:   c                 óB   €  \        V 4       R #   \         d     R# i ; irÎ  )r¹  rZ   )r7  s   &r;   Úis_iterabler_  À  s#   € ðÜˆSŒ	ÙøÜô ÚðúrÐ  c                óþ   € \        V \        P                  4      '       d   R#  \        V 4      ^ 8X  d   V# \	        V 4       F&  p\        V\        P                  4      '       d   K%   R# 	  R#   \
         d     R# i ; i)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`
FT)rY   rw   r   rÈ  r¹  rZ   )ÚiterableÚinclude_emptyr8  s   && r;   Úis_iterable_of_tensorsrc  È  sj   € ô �(œEŸL™L×)Ò)Ùð	Üˆx‹=˜AÔØ Ð ä�h–ˆAÜ˜a¤§¡×.Ô.Úñ  ñ øô ô Úðús"   ¤A- ¶+A- Á&A- Á)A- Á-A<Á;A<c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚCudaNonDefaultStreamiß  c                ó\  € \         P                  P                  4       p. V n        \	        \         P                  P                  4       4       F¼  pV P                  P                  \         P                  P                  V4      4       \         P                  P                  VR 7      pV P                  R,          P                  4        \         P                  P                  VP                  VP                  VP                  R7       K¾  	  \         P                  P                  V4       R# )©r¨  ©Ú	stream_idrê  rW  Nr!  )rw   rA   Úcurrent_deviceÚbeforeStreamsr’  rŽ  rf   Úcurrent_streamÚStreamÚsynchronizerê  Ú_cuda_setStreamri  rê  rW  Ú_cuda_setDevice)r  ÚbeforeDevicerZ  ÚdeviceStreams   &   r;   r‰  ÚCudaNonDefaultStream.__enter__à  sÑ   € ô —z‘z×0Ñ0Ó2ˆØˆÔÜ”u—z‘z×.Ñ.Ó0Ö1ˆAØ×Ñ×%Ñ%¤e§j¡j×&?Ñ&?ÀÓ&BÔCÜ Ÿ:™:×,Ñ,°AÐ,Ó6ˆLØ×Ñ˜rÕ"×.Ñ.Ô0Ü�H‰H×$Ñ$¨|×/EÑ/EØ2>×2KÑ2KØ1=×1IÑ1Ið %ö Kñ	 2ô 	�‰× Ñ  Ö.r:   c                óÂ  € \         P                  P                  4       p\        \         P                  P	                  4       4       Fv  p\         P
                  P                  V P                  V,          P                  V P                  V,          P                  V P                  V,          P                  R 7       Kx  	  \         P
                  P                  V4       R# )rh  N)rw   rA   rj  r’  rŽ  rê  ro  rk  ri  rê  rW  rp  )r  Úexc_typeÚ	exc_valuer�  rq  rZ  s   &&&&  r;   r�  ÚCudaNonDefaultStream.__exit__ï  s™   € ô —z‘z×0Ñ0Ó2ˆÜ”u—z‘z×.Ñ.Ó0Ö1ˆAÜ�H‰H×$Ñ$¨t×/AÑ/AÀ!Õ/D×/NÑ/NØ26×2DÑ2DÀQÕ2G×2TÑ2TØ15×1CÑ1CÀAÕ1F×1RÑ1Rð %ö Tñ 2ô 	�‰× Ñ  Ö.r:   )rk  N©r2   r3   r4   r5   r‰  r�  r9   r¸   r¹   s   @r;   re  re  ß  s   ø‡ € ò/÷/ð /r:   re  c                   ó6   a € ] tR tRt o RR ltR tR tRtV tR# )ÚCudaMemoryLeakCheckiù  Nc                ób   € Vf   VP                  4       MTT n        Wn        ^ RIHp V! 4        R # )N)Úinitialize_cuda_context_rng)r  re   r²  r5  r|  )r  r²  re   r|  s   &&& r;   r8  ÚCudaMemoryLeakCheck.__init__ú  s&   € Ø%)¢\�H—K‘K”M°tˆŒ	Ø Œõ 	TÙ#Ö%r:   c                ó�  € . V n         . V n        \        P                  P	                  4       p\        V4       F|  p\        P                  P                  V4      pV^ 8”  g   K+  \        P                  ! 4        \        P                  P                  4        \        P                  P                  4         M	  \        V4       F  pV P                   P                  \        P                  P                  V4      4       \        P                  P                  V4      w  rEWT,
          pV P                  P                  V4       K�  	  R# ©ru   N)Úcaching_allocator_beforesÚdriver_beforesrw   rA   rŽ  r’  Úmemory_allocatedrø   rù   rê  rm  rú   rf   Úmem_get_info)r  rY  r-  Úcaching_allocator_mem_allocatedÚ
bytes_freeÚbytes_totalÚdriver_mem_allocateds   &      r;   r‰  ÚCudaMemoryLeakCheck.__enter__  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                ó˜  € Ve   R # V P                   P                  4        \        P                  ! 4        \        P
                  P                  4        \        P                  P                  4        Rp\        P                  P                  4       p\        V4       F[  p\        P
                  P                  4        \        P                  P                  V4      pWpP                  V,          8”  g   KY  Rp M	  V'       g   R # \        P                  ! 4        \        P                  P                  4        \        V4       EF�  pRp\        ^4       F—  p\        P                  P                  V4      p\        P                  P                  V4      w  ršW©,
          pRpRpWpP                  V,          8”  d   RpW°P                  V,          8”  d   RpV'       d   K‹  V'       d   K•  Rp M	  V'       g   K¶  X'       de   X'       g]   RV P                   RV P                  V,           RX RV RV P                  V,           RX R	2p\         P"                  ! V^R
7       EK"  V'       g   EK-  X'       g   EK8  RV P                   RV P                  V,           RX RV RV P                  V,           RX R	2p\%        V4      h	  R # )NFTzOCUDA 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 rW   rý  z$CUDA driver API confirmed a leak in )r²  Úbefore_cuda_memory_leak_checkrø   rù   rw   rê  rm  rA   rú   rŽ  r’  r‚  r€  rƒ  r�  re   r$  r%  ro  )r  ru  rv  r�  Údiscrepancy_detectedrY  r-  r„  rÁ   r…  r†  r‡  Úcaching_allocator_discrepancyÚdriver_discrepancyrÍ  s   &&&&           r;   r�  ÚCudaMemoryLeakCheck.__exit__  s„  € àÒÙà�‰×3Ñ3Ô5Ü
�
Š
ŒÜ�‰×,Ñ,Ô.Ü�
‰
×ÑÔ ð
  %ÐÜ—j‘j×-Ñ-Ó/ˆÜ�{Ö#ˆAä�H‰H×0Ñ0Ô2Ü.3¯j©j×.IÑ.IÈ!Ó.LÐ+à.×1OÑ1OÐPQÕ1RÖRØ'+Ð$Ùñ $÷ $Ùô 	�
Š
ŒÜ�
‰
×ÑÔ ä�{×#ˆAà#'Ð ô ˜1–X�Ü27·*±*×2MÑ2MÈaÓ2PÐ/Ü*/¯*©*×*AÑ*AÀ!Ó*DÑ'�
Ø'2Õ'?Ð$à05Ð-Ø%*Ð"à2×5SÑ5SÐTUÕ5VÔVØ48Ð1à'×*=Ñ*=¸aÕ*@Ô@Ø)-Ð&ç5Ñ5×9KÑ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¨a×0Ð0ß.Ò.×3EÒ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 $r:   )r€  r�  re   r²  r�   r   r¹   s   @r;   rz  rz  ù  s   ø‡ € ô&ò=÷.X(ð X(r:   rz  c              #   ój   "  €  R x € R #   T  d    p\         P                  ! RT 24      ThR p?ii ; i5i)Nznot implemented: r  )ru  rq   s   & r;   Úskip_exception_typer�  y  s:   é € ð@ÝøØô @Ü×ÒÐ"3°A°3Ð 7Ó8¸aÐ?ûð@üs   ‚3„
 ˆ3Š0‘+«0°3c              #   ó  "  €  R x € R #   \         P                   d    h \         dÛ   pRp\        TRR 4      pTe   RTP                   2pRP                  \        R T.T O54      4      p\        RR\        P                  ! RRP                  \        R T.T O54      4      /4      R7       R	T R
2p\        TP                  4      ^8¼  d3   TP                  ^ ,           RT 2.TP                  R,          O5Tn        h R p?ii ; i5i)NrK   Ú_tracked_inputz"PYTORCH_OPINFO_SAMPLE_INPUT_INDEX=rd   Útest_reprosÚtest_failureÚrepro)Ú	subsystemre   r%  zE
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=0Ú
rÿ  )rQ   r  r  rX   r  rh   Úfilterr   rç   ÚdumpsrÈ  r†   )Úrepro_partsrq   Ú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¸2µJÑ?ˆAŒFØûð;üs*   ‚D„
 ˆDŠD©DªCC?Ã?DÄDc                  óœ   € R V9   d1   \         P                  P                  R8¼  d   VP                  R 4       \         P                  ! V / VB # )Úmin_satisfying_examples)r8  é8   ru   )Ú
hypothesisræ  Ú__version_info__ÚpopÚsettingsr…   s   *,r;   r¥  r¥  ª  sA   € Ø$¨Ô.´:×3EÑ3E×3VÑ3VÐZdÔ3dØ�J‰JÐ0Ô1Ü×"Ò" DÐ3¨FÑ3Ð3r:   Ú
pytorch_ci)ÚderandomizeÚsuppress_health_checkÚdatabaseÚmax_examplesr  rN  )r¨  r©  rª  r  Údebugéè  ÚPYTORCH_HYPOTHESIS_PROFILEzEFail to import hypothesis in common_utils, tests are not derandomizedrý  c                ó0   € V ^8„  d   QhR\         R\         /# )rM   r  rO   r¬   )rS   s   "r;   rT   rT   Ñ  s   € ÷ ñ ´ð ¼ñ r:   c                 óª  € ^ RI Hp V! 4        Uu. uF  q"P                  NK  	  pp\        4        Uu. uF  p\	        V4      \        R4      R NK  	  ppV P                  R4      p\        V4      ^ 8”  dU   VR,          V9   dG   \        V4      ^8”  d#   VR,          V9   d   RP                  V^ R 4      # RP                  V^ R 4      # V # u upi u upi )ru   )Úget_device_type_test_basesztorch.NrÁ   r!  r‡  )Ú*torch.testing._internal.common_device_typer°  rW  r+   r­   rÈ  r{   rh   )r  r°  r,  Údevice_suffixesÚdtÚdtype_suffixesÚtest_name_chunkss   &      r;   Ú remove_device_and_dtype_suffixesr¶  Ñ  sÊ   € åUÙ.HÔ.JÓKÑ.J¨—}”}Ñ.J€OÐKÜ8FÔ8HÓIÑ8H°"”c˜"“gœc (›m˜nÓ-Ñ8H€NÐIà —‘ sÓ+ÐÜ
ÐÓ˜qÔ Ð%5°bÕ%9¸^Ô%KÜÐÓ  1Ô$Ð)9¸"Õ)=ÀÔ)PØ—8‘8Ð,¨Q¨rÐ2Ó3Ð3Ø�x‰xÐ(¨¨2Ð.Ó/Ð/ØÐùò LùÚIs
   �C² Cc                ó8   € V ^8„  d   QhR\         P                  /# )rM   rÝ   )rQ   rR   )rS   s   "r;   rT   rT   ß  s   € ÷ K`ñ K`œ(×+Ñ+ñ K`r:   c                 óœ  a a	a
aa€ \        S P                  4      P                  R 4      ^,          P                  R4      R),          o	\        S P                  4      oR V	VV 3R llo
\
        ;QJ d#    V
3R l\         4       F  '       g   K   RM	  RM! V
3R l\         4       4      '       dF   R\        S S P                  4      P                  R&   \        '       g   \        P                  ! R4      h\        '       EgÔ   RpR	p\        P                  4        EF`  w  pw  rES
! V4      '       g   K  R
\        R\        R\         R\         R\"        R\$        R\&        R\(        R\*        R\*        R\,        R\        /o\/        \1        V3R lV4      4      p\3        V4      ^ 8”  df   RP5                  V4      pRP5                  SP7                  4       4      p\9        RV R2RV RV R2RRV 24       \/        \1        V3R lV4      4      pV. 8X  gD   \
        ;QJ d    V3R  lV 4       F  '       g   K   RM	  RM! V3R  lV 4       4      '       g   EK;  RpR!T R"V. 8X  d   R#MR	 R$RP5                  V4       R%2p M	  V'       d#   \:        '       g   \        P                  ! V4      hV'       g%   \:        '       d   R&p\        P                  ! V4      h\<        '       dm   \?        S S P                  4      '       dO   \        S S P                  4      P                  PA                  RR4      '       g   \        P                  ! R'4      hR(# R(# R(# )*r”   rW   c                ó$   € V ^8„  d   QhR\         /# )rM   r,  r¬   )rS   s   "r;   rT   Ú%check_if_enable.<locals>.__annotate__ã  s   € ÷ 
zñ 
zœSñ 
zr:   c                 óò   <€ V P                  4       p\        V4      ^8  d   R# V^ ,          pV^,          ^R P                  R4      R,          pSP                  V4      ;'       d    VSP                  S39   # )rM   FrW   r!  )r{   rÈ  r  Ú_testMethodName)r,  Útarget_test_partsÚtarget_testnameÚtarget_classnamer³  Úsanitized_testnamerÝ   s   &   €€€r;   Úmatches_testÚ%check_if_enable.<locals>.matches_testã  sy   ø€ Ø"ŸL™L›NÐÜÐ Ó! AÔ%áØ+¨AÕ.ˆØ,¨QÕ/°°"Ð5×;Ñ;¸CÓ@ÀÕDÐð ×#Ñ#Ð$4Ó5×yÐy¸?Èt×OcÑOcÐewÐNxÑ;xÐyr:   c              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5ir�   r1   )ró   r,  rÁ  s   & €r;   rô   Ú"check_if_enable.<locals>.<genexpr>ï  s   øé € Ð
4¡O˜q‰<˜�?ˆ?£Oùs   ƒTFr  r	  rK   ÚmacÚmacosÚwinÚwindowsr>  ÚrocmrC   ÚasanÚdynamoÚdynamo_wrappedÚinductorÚslowc                 ó   <€ V S9  # r�   r1   ©ri  Úplatform_to_conditionals   &€r;   r�   Ú!check_if_enable.<locals>.<lambda>	  s   ø€ ¸!ÐCZÒ:Zr:   ú, 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9   # r�   r1   rÐ  s   &€r;   r�   rÒ    s   ø€ °aÐ;RÒ6Rr:   c              3   ó6   <"  € T F  pSV,          x € K  	  R # 5ir�   r1   )ró   rò   rÑ  s   & €r;   rô   rÄ    s   øé € Ð)fÑ\eÐPXÐ*AÀ(×*KÒ*KÓ\eù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_FASTNr!  )!r­   rß  r{   r¶  r¼  rö  r#  rX   r  rë  rQ   r  rÂ   r&  r^   ÚIS_MACOSrH  rE  rã  r  rÛ  r&  r"  rg  r˜  rÈ  rh   rm  rg   r?  rí  r&  r  )rÝ   Úshould_skipÚskip_msgÚdisabled_testÚ	issue_urlÚ	platformsÚinvalid_platformsÚinvalid_plats_strÚvalid_platsr³  rÁ  rÑ  rÀ  s   f        @@@@r;   Úcheck_if_enablerá  ß  sÉ  ü€ Ü�D—N‘NÓ#×)Ñ)¨#Ó.¨qÕ1×7Ñ7¸Ó<¸RÕ@€IÜ9¸$×:NÑ:NÓOÐ÷
zò 
z÷ ƒsÔ
4¥OÓ
4‡s‡s‚sÔ
4¥OÓ
4×4Ò4ØDHŒ��d×*Ñ*Ó+×4Ñ4°[ÑAß‹~Ü×#Ò#Ð$bÓcÐcçŒ=ØˆØˆä5H×5NÑ5N×5PÑ1ˆMÑ1˜IÙ˜M×*Ô*àœ8ØœXØœ:ØœzØœXØœNØœ8ØœNØÔ3Ø$Ô&;ØÔ 7ØœNð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£cÔ)fÑ\eÓ)f§c§c¢cÔ)fÑ\eÓ)f×&fÕ&fØ"&�KØ!XÐYbÐXcØ¨°b¬¡¸bÐAÀÈdÏiÉiÐXaÓNbÐMcð dqð q�Hñ ñI 6Q÷L ×3Ó3ä×#Ò# HÓ-Ð-ç×3Ó3ð*ˆHä×#Ò# HÓ-Ð-çƒ~Ü�4˜×-Ñ-×.Ò.´w¸tÀT×EYÑEYÓ7Z×7cÑ7c×7gÑ7gÐhsÐuz×7{Ò7{Ü×#Ò#Ð$^Ó_Ð_ñ 8|Ñ.ñ r:   c                   ób   a a€ ] tR tRt oRt]! ^ ^ 4      P                  tR tV 3R lt	Rt
VtV ;t# )ÚRelaxedBooleanPairi5  z£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.
c               óš  € \         P                  \        P                  3p. V P                  OV P
                  OVO5p\        WP                  4      '       d   \        W%4      '       g=   \        W P                  4      '       d   \        W4      '       g   V P                  4        W3 Uu. uF  q`P                  WcR 7      NK  	  up# u upi ©©r  )	rw   r   r,  ÚndarrayÚ_supported_typesÚ_supported_number_typesrY   Ú_inputs_not_supportedÚ_to_bool©r  r¼  Úexpectedr  Útensor_or_array_typesÚother_supported_typesÚinputs   &&&$   r;   Ú_process_inputsÚ"RelaxedBooleanPair._process_inputs=  s¡   € ô 49·<±<ÄÇÁÐ2LÐØ o $×"7Ñ"7Ð o¸$×:VÑ:VÐ oÐYnÑ oÐä˜× 5Ñ 5×6Ò6¼:Àh×;fÒ;fÜ˜8×%:Ñ%:×;Ò;Ä
È6×@iÒ@ià×&Ñ&Ô(à:@Ñ9KÓLÑ9K°—‘˜e�Ö+Ñ9KÑLÐLùÒLs   Â+Cc               ó0  <€ \        V\        P                  4      '       d   \        VP	                  4       4      # \        V4      V P                  9   d   \        V4      # \        V\        P                  \        P                  34      '       dy   \        V\        P                  4      '       d   VP                  4       MVP                  pV^8”  d   V P                  \        RV R2VR7       \        VP	                  4       4      # \        SV `=  WR7      # )r   zHOnly single element tensor-likes can be compared against a boolean. Got ú elements instead.ræ  )rY   r,  Únumberr¿   rm   rP   ré  rw   r   rç  Únumelr5  Ú_failrÊ  rÞ  rë  )r  Ú	bool_liker  rö  rß  s   &&$ €r;   rë  ÚRelaxedBooleanPair._to_boolJ  sØ   ø€ Ü�i¤§¡×+Ò+Ü˜	Ÿ™Ó(Ó)Ð)Ü�)‹_ × <Ñ <Ô<Ü˜	“?Ð"Ü˜	¤E§L¡L´"·*±*Ð#=×>Ò>Ü)3°I¼u¿|¹|×)LÒ)L�I—O‘OÔ%ÐR[×R`ÑR`ˆEØ�qŒyØ—
‘
ÜðØ ˜'Ð!3ð5àð	 ô ô ˜	Ÿ™Ó(Ó)Ð)ä‘7Ñ# IÐ#Ó5Ð5r:   r1   )r2   r3   r4   r5   rD   r(   rè  ré  rñ  rë  r9   r¸   rú  rû  s   @@r;   rã  rã  5  s/   ù‡ € ññ
 )¨¨AÓ.×?Ñ?ÐòM÷6õ 6r:   rã  c                   ó°   a a€ ] tR tRt oRt]]P                  ]]P                  ]
]P                  /tRRRRRR/V3R lV 3R	 llltR
 tV 3R ltRtVtV ;t# )ÚRelaxedNumberPairi^  a  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.
Úrtol_overrideç        Úatol_overrideÚcheck_dtypeNc                ó   <€ V ^8„  d   QhRR/# r  r1   )rS   r®   s   "€r;   rT   ÚRelaxedNumberPair.__annotate__o  s   ø€ ÷ 2ñ 2à	ñ2r:   c               óš   <€ \         SV `  ! W3R R/VB  \        V P                  V4      V n        \        V P                  V4      V n        R# )rÿ  FN©rÞ  r8  ÚmaxÚrtolÚatol)r  r¼  rí  rü  rþ  rÿ  Úother_parametersrß  s   &&&$$$,€r;   r8  ÚRelaxedNumberPair.__init__o  sA   ø€ ô 	‰Ò˜ÑQ°uÐQÐ@PÒQÜ˜Ÿ	™	 =Ó1ˆŒ	Ü˜Ÿ	™	 =Ó1ˆŽ	r:   c               ó‚  € \         P                  \        P                  3p. V P                  OVO5p\        WP                  4      '       d   \        W%4      '       g=   \        W P                  4      '       d   \        W4      '       g   V P                  4        W3 Uu. uF  q`P                  WcR 7      NK  	  up# u upi rå  )rw   r   r,  rç  rè  rY   rê  Ú
_to_numberrì  s   &&&$   r;   rñ  Ú!RelaxedNumberPair._process_inputsv  s–   € ô 49·<±<ÄÇÁÐ2LÐØ P $×"7Ñ"7Ð PÐ:OÑ PÐä˜F×$9Ñ$9×:Ò:¼zÈ(×?jÒ?jÜ˜x×)>Ñ)>×?Ò?ÄJÈv×DmÒDmà×&Ñ&Ô(à<BÑ;MÓNÑ;M°%—‘ �Ö-Ñ;MÑNÐNùÒNs   ÂB<c               óB  <€ \        V\        P                  \        P                  34      '       d“   \        V\        P                  4      '       d   VP                  4       MVP                  pV^8”  d   V P                  \        RV R2VR7       VP                  4       p\        V\        4      '       d   \        V4      pV# \        V\        4      '       d   \        V4      # \        SV `9  WR7      p\        V4      V P                   9  d   V P#                  4        V# )r   zGOnly single element tensor-likes can be compared against a number. Got rô  ræ  )rY   rw   r   r,  rç  rö  r5  r÷  rÊ  rm   r¿   rÕ   r   rÞ  r
  rP   Ú_TYPE_TO_DTYPErê  )r  Únumber_liker  rö  rõ  rß  s   &&$  €r;   r
  ÚRelaxedNumberPair._to_numberƒ  sì   ø€ Ü�k¤E§L¡L´"·*±*Ð#=×>Ò>Ü+5°kÄ5Ç<Á<×+PÒ+P�K×%Ñ%Ô'ÐVa×VfÑVfˆEØ�qŒyØ—
‘
ÜðØ ˜'Ð!3ð5àð	 ô ð !×%Ñ%Ó'ˆFÜ˜&¤$×'Ò'Ü˜V›�àˆMÜ˜¤T×*Ò*Ü�{Ó#Ð#ä‘WÑ'¨Ð'Ó;ˆFÜ�F‹| 4×#6Ñ#6Ô6Ø×*Ñ*Ô,ØˆMr:   ©r  r  )r2   r3   r4   r5   rD   rÕ   rw   Úint64rª  Úfloat32ÚcomplexÚ	complex64r  r8  rñ  r
  r9   r¸   rú  rû  s   @@r;   rû  rû  ^  s`   ù‡ € ñ	ð 	ˆU�[‰[Øˆu�}‰}Ø�—‘ð€Nð2Ø58ð2ØHKð2ØY]÷2õ 2òO÷õ r:   rû  c                   óH   a a€ ] tR tRt oRtRRRR/V 3R lltR tRtVtV ;t	# )	ÚTensorOrArrayPairi›  ag  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               ó–   <€ \         SV `  ! W3/ VB  \        V P                  V4      V n        \        V P                  V4      V n        R # r�   r  ©r  r¼  rí  rü  rþ  r  rß  s   &&&$$,€r;   r8  ÚTensorOrArrayPair.__init__¦  s:   ø€ Ü‰Ò˜Ñ>Ð-=Ò>Ü˜Ÿ	™	 =Ó1ˆŒ	Ü˜Ÿ	™	 =Ó1ˆŽ	r:   c               óÂ   a € S P                  W\        P                  \        P                  3R 7       V 3R lW3 4       w  rW3 F  pS P                  WSR7       K  	  W3# )r•  c              3   óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir�   )Ú
_to_tensor)ró   rð  r  s   & €r;   rô   Ú4TensorOrArrayPair._process_inputs.<locals>.<genexpr>®  s   øé € ÐSÑ@R°u˜DŸO™O¨E×2Ð2Ó@Rùs   ƒ!ræ  )Ú_check_inputs_isinstancerw   r   r,  rç  Ú_check_supported)r  r¼  rí  r  Úallow_subclassesrU  s   f&&$$ r;   rñ  Ú!TensorOrArrayPair._process_inputs«  sZ   ø€ Ø×%Ñ% f¼U¿\¹\Ì2Ï:É:Ð<VÐ%ÔWäSÀÑ@RÓSÑˆØÓ(ˆFØ×!Ñ! &Ð!Ö0ñ )àÐÐr:   r  )
r2   r3   r4   r5   rD   r8  rñ  r9   r¸   rú  rû  s   @@r;   r  r  ›  s'   ù‡ € ñ	ð2¸#ð 2ÈS÷ 2÷
 ò  r:   r  c                   óH   a a€ ] tR tRt oRtRRRR/V 3R lltR tRtVtV ;t	# )	ÚTypedStoragePairi´  z4Pair for :class:`torch.storage.TypedStorage` inputs.rü  rý  rþ  c               óì   <€ V P                  W\        P                  P                  R 7       \        SV `  ! W3/ VB  \        V P                  V4      V n        \        V P                  V4      V n        R# ©r•  N)	r  rw   r™  ÚTypedStoragerÞ  r8  r  r  r  r  s   &&&$$,€r;   r8  ÚTypedStoragePair.__init__¶  sW   ø€ Ø×%Ñ% f¼E¿M¹M×<VÑ<VÐ%ÔWÜ‰Ò˜Ñ>Ð-=Ò>Ü˜Ÿ	™	 =Ó1ˆŒ	Ü˜Ÿ	™	 =Ó1ˆŽ	r:   c                óÐ  € \         P                  ! VP                  \         P                  \         P                  \         P
                  \         P                  \         P                  \         P                  \         P                  \         P                  \         P                  \         P                  /P                  VP                  VP                  4      VP                  R 7      # )©r¦  r¨  )rw   rU  Ú_untyped_storageÚquint8Úuint8Úquint4x2Úquint2x4Úqint32Úint32Úqint8Úint8r  r¦  r¨  )r  Útyped_storages   &&r;   r  ÚTypedStoragePair._to_tensor¼  s…   € Ü�|Š|Ø×*Ñ*ä—‘œeŸk™kÜ—‘¤§¡Ü—‘¤§¡Ü—‘œeŸk™kÜ—‘œUŸZ™Zð÷ ‰c�-×%Ñ% }×':Ñ':Ó;Ø ×'Ñ'ô

ð 
	
r:   r  )
r2   r3   r4   r5   rD   r8  r  r9   r¸   rú  rû  s   @@r;   r#  r#  ´  s%   ù‡ € Ù>ð2¸#ð 2ÈS÷ 2÷
ò 
r:   r#  c                   óL   a a€ ] tR tRt oRtRtV 3R ltR tV3R ltRt	Vt
V ;t# )ÚUnittestPairiÊ  af  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.
Nc                ód   <€ V P                  WV P                  R 7       \        SV `  ! W3/ VB  R# r%  )r  ÚCLSrÞ  r8  )r  r¼  rí  r  rß  s   &&&,€r;   r8  ÚUnittestPair.__init__Õ  s-   ø€ Ø×%Ñ% f¸D¿H¹HÐ%ÔEÜ‰Ò˜Ñ>Ð-=Ô>r:   c                óÜ  € \         P                  ! 4       p VP                  V P                  V P                  4      #   TP
                   d   p\        T4      p R p?MR p?ii ; iT P                  ;'       gJ    \        T P                  \        4      '       d   T P                  MT P                  ^ ,          P                  pT P                  \        TP                  4        RT 24       R # )Nz comparison failed: )rQ   rR   ÚassertEqualr¼  rí  ÚfailureExceptionr­   Ú	TYPE_NAMErY   r8  rP   r2   r÷  rš   Útitle)r  r¡  rú  rÍ  Ú	type_names   &    r;   ÚcompareÚUnittestPair.compareÙ  s­   € Ü×%Ò%Ó'ˆ	ð	Ø×(Ñ(¨¯©°d·m±mÓDÐDøØ×)Ñ)ô 	Ü�e“*�Cûð	úð —N‘N×hÐh´:¸d¿h¹hÌ×3MÒ3M t§x¢xÐSW×S[ÑS[Ð\]ÕS^×&hÑ&hˆ	Ø�
‰
”> i§o¡oÓ&7Ð%8Ð8LÈSÈEÐ#RÖSs   —%= ½A#ÁAÁA#c                ód   <€ V ^8„  d   Qh/ S[ S[S[ R3,          ,          ;R&   S[R,          ;R&   # )rM   .r8  Nr=  )rP   r‡  r­   )rS   r®   s   "€r;   rT   ÚUnittestPair.__annotate__Ê  s1   ø‡ ‚ ñ 
‘‘d˜C�iÕ Õ	 Ñ ñ ñ �T�zÑ ò r:   r1   )r2   r3   r4   r5   rD   r=  r8  r@  r·   r9   r¸   rú  rû  s   @@r;   r6  r6  Ê  s#   ù‡ € ñð !€Iõ?ò	T÷ … r:   r6  c                   ó"   € ] tR tRt]]3tRtRtR# )Ú
StringPairiå  Ústringr1   N)	r2   r3   r4   r5   r­   Úbytesr8  r=  r9   r1   r:   r;   rE  rE  å  s   † Ø�ˆ,€CØ„Ir:   rE  c                   ó   € ] tR tRt]tRtR# )ÚSetPairiê  r1   N)r2   r3   r4   r5   ra   r8  r9   r1   r:   r;   rI  rI  ê  s   † Ø
„Cr:   rI  c                   ó   € ] tR tRt]tRtR# )ÚTypePairiî  r1   N)r2   r3   r4   r5   rP   r8  r9   r1   r:   r;   rK  rK  î  s   † Ø
„Cr:   rK  c                   ó   € ] tR tRt]tRtR# )Ú
ObjectPairiò  r1   N)r2   r3   r4   r5   rÉ  r8  r9   r1   r:   r;   rM  rM  ò  s   † Ø
„Cr:   rM  c                   ó2   a a€ ] tR tRt oV 3R ltRtVtV ;t# )Ú,AssertRaisesContextIgnoreNotImplementedErroriþ  c                ó”   <€ Ve5   \        V\        4      '       d   V P                  P                  RV 24       \        SV `  WV4      # )Nznot_implemented: )Ú
issubclassrX  r¡  ÚskipTestrÞ  r�  )r  ru  rv  Útbrß  s   &&&&€r;   r�  Ú5AssertRaisesContextIgnoreNotImplementedError.__exit__ÿ  sB   ø€ ØÒ¤J¨xÔ9L×$MÒ$MØ�N‰N×#Ñ#Ð&7¸	°{Ð$CÔDÜ‰wÑ °RÓ8Ð8r:   r1   )r2   r3   r4   r5   r�  r9   r¸   rú  rû  s   @@r;   rO  rO  þ  s   ù‡ € ÷9õ 9r:   rO  c                ó$   € V ^8„  d   QhR\         /# )rM   Únew_valr¾   )rS   s   "r;   rT   rT     s   € ÷ 'ñ '¤Tñ 'r:   c              #   óÐ   "  € \         P                  ! 4       p\         P                  ! V 4        R x € \         P                  ! V4       R #   \         P                  ! T4       i ; i5ir�   )rw   Úis_warn_always_enabledÚset_warn_always)rV  Úold_vals   & r;   Úset_warn_always_contextr[    sE   é € ä×*Ò*Ó,€GÜ	×Ò˜'Ô"ð'Ûä×Ò˜gÖ&øŒ×Ò˜gÕ&ürD  c                   ó   € ] tR tRtRtRtR# )ÚNoTesti  Fr1   N)r2   r3   r4   r5   Ú__test__r9   r1   r:   r;   r]  r]    s   † à„Hr:   r]  c                   ó  a a€ ] tR tRt o^ t^ tRt^ t]P                  P                  P                  t]P                  tRtR t]V3R lR l4       t]P(                  V3R lR l4       t]V3R	 lR
 l4       t]P(                  V3R lR l4       tRtRtRtR\V 3R lltR]R ltR t]R 4       tR tR tR t R t!R^V 3R llt"R^ RRRR/R lt#R_V 3R llt$R_V 3R llt%R t&R t'R t(R  t)R! t*R" t+R]V 3R# llt,R]R$ lt-R% t.R& t/]R'R/R( l4       t0R)R`R*^ /R+ lt1R*^ /R, lt2R*^ /R- lt3R*^ /R. lt4R*^ /R/ lt5R0 t6RaR1 lt7R2 t8R3 t9R_R4 lt:V3R5 lR6 lt;V3R7 lR8 lt<R]R9RR:RR;RR<RR=RR>RR?RR@R/V3RA lRB lllt=R]R9RR:R/V3RC lRD lllt>V3RE lV 3RF llt?V3RG lRH lt@V3RI lRJ ltAV 3RK ltBV 3RL ltCRM tDRN tERbRO ltF]GRbRP l4       tHR]RQ ltIR]RR ltJRcRS ltKRbRT ltLRdRU ltM]R]RV l4       tN]RW 4       tOR]V3RX lRY lltPV3RZ ltQR[tRVtSV ;tT# )erR   i  FNc                ó@  € \         P                  P                  4       '       d"    \         P                  P                  4        R# R#   \         dK   p\        R \        P                  R7       \        \        T4      \        P                  R7        Rp?R# Rp?ii ; i)zDTEST SUITE EARLY TERMINATION due to torch.cuda.synchronize() failure©ry  NTF)	rw   rA   Úis_initializedrn  ro  rg   r8  rq  r­   )r  Úrtes   & r;   Ú_should_stop_test_suiteÚ TestCase._should_stop_test_suite*  sk   € Ü�:‰:×$Ñ$×&Ò&ðÜ—
‘
×&Ñ&Ô(ñ
 áøô  ô ÜÐ\Ôcf×cmÑcmÕnÜ”c˜#“h¤S§Z¡ZÕ0Ýûðús   ¦A ÁBÁ?BÂBc                ó    <€ V ^8„  d   QhRS[ /# r«   ©rª  )rS   r®   s   "€r;   rT   ÚTestCase.__annotate__9  s   ø€ ÷ ñ ™5ñ r:   c                ó   € V P                   # r�   ©Ú
_precisionr;  s   &r;   Ú	precisionÚTestCase.precision8  s   € à�‰Ðr:   c                ó$   <€ V ^8„  d   QhRS[ RR/# ©rM   ÚprecrO   Nrg  )rS   r®   s   "€r;   rT   rh  =  s   ø€ ÷ ñ ™eð ¨ñ r:   c                ó   € Wn         R # r�   rj  ©r  rp  s   &&r;   rl  rm  <  s   € àŽr:   c                ó    <€ V ^8„  d   QhRS[ /# r«   rg  )rS   r®   s   "€r;   rT   rh  A  s   ø€ ÷ ñ ™ñ r:   c                ó   € V P                   # r�   ©Ú_rel_tolr;  s   &r;   Úrel_tolÚTestCase.rel_tol@  s   € à�}‰}Ðr:   c                ó$   <€ V ^8„  d   QhRS[ RR/# ro  rg  )rS   r®   s   "€r;   rT   rh  E  s   ø€ ÷ ñ ™Eð  dñ r:   c                ó   € Wn         R # r�   ru  rr  s   &&r;   rw  rx  D  s   € àŽr:   c                ó²  <€ VR 8w  d   Tp\         SV `  V4       \        WR4      pVEet   \        '       d^   V ;P                  \        VRR4      ,          un        V P                  '       d(   \
        '       g   V P                  WP                  4       V ;P                  \        VRR4      ,          un        V P                  '       d(   \
        '       g   V P                  WP                  4       V P                  '       d   V P                  VR 4       \        '       d{    R p\        P                  ! \        V 4      4      pV! V4      p\        V 4      P                   pRV RV R	V 2p\"        P%                  4       p	W˜.p
V P                  VV
3R
 l4       R# R# R#   \&         d,   p\(        P+                  R\-        T4      R7        Rp?R# Rp?ii ; i)ÚrunTestNr  Tr  c                  ó    € \        \        4      # r�   )r�  rX  r1   r:   r;   r�   Ú#TestCase.__init__.<locals>.<lambda>e  s   € Ô;NÔObÔ;cr:   c                 óF  € \        V 4      P                  p\        V4       FX  w  r#VR 8X  g   K  V^ 8”  d"   \        P                  P
                  ! VRV !  MRp\        P                  P                  WR7      u # 	  \        P                  P                  V 4      ^,          # )rÝ   NrK   )r;  )r   rr   r1  r–   rá   rh   Úrelpathr{   )Úabs_test_pathrr   r-  ÚpartÚbase_dirs   &    r;   Ú_get_rel_test_pathÚ-TestCase.__init__.<locals>._get_rel_test_pathi  s|   € ô !% ]Ó 3× 9Ñ 9˜Ü'0°Ö'7™G˜AØ# vž~ØGHÈ1Äu¬2¯7©7¯<ª<¸¸rÀ¸Ò+CÐRT Ü')§w¡w§¡°} Ó'UÒ Uñ (8ô  "Ÿw™wŸ}™}¨]Ó;¸AÕ>Ð>r:   zpython rd   rW   c                 ó   € \        V 4      # r�   )rž  )rš  s   &r;   r�   r~    s
   € Ô8NÈ{Ô8[r:   zcould not print repro string)Úextra)rÞ  r8  rX   rÅ  r  rH  Úwrap_with_cuda_policyÚassertLeaksNoCudaTensorsr  ÚenforceNonDefaultStreamÚ_ignore_not_implemented_errorÚwrap_with_policyrÏ   r  ÚgetfilerP   r2   r‰   r²   r  ré   Úinfor­   )r  Úmethod_nameÚ
methodNameÚtest_methodr„  r�  r¬  Ú
class_nameÚtest_run_cmdÚenv_var_prefixrš  rq   rß  s   &&&         €r;   r8  ÚTestCase.__init__O  s‘  ø€ ð ˜Ô"Ø$ˆKÜ‰Ñ˜Ô%ä˜d°Ó6ˆØÓ"ç'Ó'Ø×/Ò/´7¸;ÐHdÐfjÓ3kÕkÕ/à×2×2Ð2¿:»:Ø×.Ñ.¨{×<YÑ<YÔZð ×,Ò,´¸ÐEbÐdhÓ0iÕiÕ,Ø×/×/Ð/¿
»
Ø×*Ñ*¨;×8TÑ8TÔUà×1×1Ð1Ø×%Ñ% kÑ3cÔdç%Ó%ðKò?ô %,§O¢O´D¸³JÓ$?�MÙ$6°}Ó$E�MÜ!% d£×!4Ñ!4�JØ%,¨]¨O¸1¸Z¸LÈÈ+ÈÐ#W�LÜ%4×%IÑ%IÓ%K�NØ#1Ð"@�KØ×)Ñ)Ø#Ø+6Ó[ö]ñ- &ñ! #øôR !ô Kä—H‘HÐ;Ä3ÀqÃ6�H×JÒJûðKús   Ä#A7F  Æ GÆ+ GÇGc                óD   € Vf   V P                  4       MTp\        W4      # r�   )r  rz  )r  re   s   &&r;   r‰  Ú!TestCase.assertLeaksNoCudaTensors„  s   € Ø šLˆt�w‰wŒy¨dˆÜ" 4Ó.Ð.r:   c                ó&   € V P                  4        R # r�   )Ú_reset_dynamo_if_importedr;  s   &r;   rŠ  Ú&TestCase.before_cuda_memory_leak_checkˆ  s   € Ø×&Ñ&Ö(r:   c                 ó„   € \         P                  P                  R 4      p V e   \        V RR4      pVe
   V! 4        R# R# R# )ztorch._dynamoNrœ  )r8  Úmodulesr  rX   )rË  rœ  s     r;   r™  Ú"TestCase._reset_dynamo_if_imported‹  s=   € ä—‘—‘ Ó1ˆØÒÜ˜F G¨TÓ2ˆEØÒ Ù–ñ !ñ r:   c                ó   € \        4       # r�   )re  r;  s   &r;   rŠ  Ú TestCase.enforceNonDefaultStream“  s   € Ü#Ó%Ð%r:   c                óp   € \         P                  ! R \         P                  4      pVP                  RV4      # )aF  
            \x1B  # ESC
            (?:   # 7-bit C1 Fe (except CSI)
                [@-Z\\-_]
            |     # or [ for CSI, followed by a control sequence
                \[
                [0-?]*  # Parameter bytes
                [ -/]*  # Intermediate bytes
                [@-~]   # Final byte
            )
        rK   )r˜  ÚcompileÚVERBOSErÍ  )r  rð  Úansi_escapes   && r;   Ú_remove_ansi_escapeÚTestCase._remove_ansi_escape–  s1   € ä—j’jð 
"ô �Z‰Zó
ˆð �‰˜r 5Ó)Ð)r:   c                ó¾   € VP                  R 4      pV Uu. uF+  q3P                  4       P                  R4      '       d   K)  VNK-  	  ppR P                  V4      # u upi )r—  Ú#)r{   r�  r  rh   ©r  Úinput_stringÚlinesÚlineÚfiltered_liness   &&   r;   Úremove_comment_linesÚTestCase.remove_comment_lines¥  sO   € Ø×"Ñ" 4Ó(ˆÙ+0ÓU©5 4¿
¹
»×8OÑ8OÐPS×8TŸ$˜$©5ˆÐUØ�y‰y˜Ó(Ð(ùò Vs   –&AÁAc                óž   € VP                  R 4      pV Uu. uF  q3P                  4       R8w  g   K  VNK  	  ppR P                  V4      # u upi )r—  rK   )r{   r�  rh   r¨  s   &&   r;   Úremove_empty_linesÚTestCase.remove_empty_linesª  sH   € Ø×"Ñ" 4Ó(ˆÙ+0ÓG©5 4·J±J³LÀBÑ4FŸ$˜$©5ˆÐGØ�y‰y˜Ó(Ð(ùò Hs
   –A
±A
c                ó¦  <€ \        V\        4      '       d   TM
\        V4      pV P                  V4      pV P                  V4      pV'       d#   V P                  V4      pV P                  V4      pV'       d#   V P	                  V4      pV P	                  V4      p\
        ST `  \        V\        4      '       d   TM
\        V4      W#^,           4      # r�  )rY   r­   r¤  r­  r°  rÞ  ÚassertExpectedInline)r  r¼  Úexpectr	  Úignore_commentsÚignore_empty_linesrß  s   &&&&&&€r;   r³  ÚTestCase.assertExpectedInline°  s®   ø€ Ü% f¬c×2Ò2‘¼¸F»ˆØ×)Ñ)¨&Ó1ˆØ×)Ñ)¨&Ó1ˆßØ×.Ñ.¨vÓ6ˆFØ×.Ñ.¨vÓ6ˆFçØ×,Ñ,¨VÓ4ˆFØ×,Ñ,¨VÓ4ˆFä‰wÑ+´jÀÌ×6MÒ6M©FÔSVÐW]ÓS^Ð`fÐopÕhpÓqÐqr:   r	  Úsuppress_suffixTÚ
post_mungec               óà   €  V! 4        T P                  RR7       R#   T dJ   p\        YuT^,           R7      pT'       d	   T! T4      pT P                  YƒT^,           R7        Rp?R# Rp?ii ; i)r   )r¸  r	  )r	  NúDid not raise when expected torg  )Ú	munge_excr³  Úfail)	r  ru  rþ  r´  r	  r¸  r¹  rq   Úmungeds	   &&&&$$$  r;   ÚassertExpectedInlineMungedÚ#TestCase.assertExpectedInlineMunged¿  sm   € ð		ÙŒJð 	�	‰	Ð6ˆ	Ö7øð ô 	Ü˜qÈÈqÍÔQˆFßÙ# FÓ+�Ø×%Ñ%Ø T¨A¥Xð &ô õ ûð	ús   ‚ �A-¤>A(Á(A-c                óV   <€ Vf   \         P                  ! R4      p\        SV `  W4      # ©Nrw   )ÚloggingÚ	getLoggerrÞ  Ú
assertLogs©r  ÚloggerÚlevelrß  s   &&&€r;   rÅ  ÚTestCase.assertLogsÎ  s(   ø€ ØŠ>Ü×&Ò& wÓ/ˆFÜ‰wÑ! &Ó0Ð0r:   c                óV   <€ Vf   \         P                  ! R4      p\        SV `  W4      # rÂ  )rÃ  rÄ  rÞ  ÚassertNoLogsrÆ  s   &&&€r;   rË  ÚTestCase.assertNoLogsÓ  s(   ø€ ØŠ>Ü×&Ò& wÓ/ˆFÜ‰wÑ# FÓ2Ð2r:   c                óÎ   € \        W4      p^ RIHp V P                  4       P	                  4       pV'       d.   RV9   g   RV9   d   \        WV P                  W24      4       R# R# R# )ru   )Ú	TEST_CUDAÚgpurA   N)rX   r5  rÎ  r  rX  r„  Úwrap_method_with_policy)r  r�  Úpolicyr‘  rÎ  Úfullnames   &&&   r;   rˆ  ÚTestCase.wrap_with_cuda_policyØ  sR   € Ü˜dÓ0ˆõ 	BØ—7‘7“9—?‘?Ó$ˆß˜% 8Ô+¨v¸Ô/AÜ�D t×'CÑ'CÀKÓ'XÖYñ 0B‰9r:   c                óR   € \        W4      p\        WV P                  W24      4       R # r�   )rX   r„  rÐ  )r  r�  rÑ  r‘  s   &&& r;   rŒ  ÚTestCase.wrap_with_policyä  s!   € Ü˜dÓ0ˆÜ� 4×#?Ñ#?ÀÓ#TÖUr:   c                ó\   aa€ \        S4      VV3R  l4       p\        P                  ! W04      # )c                 óp   <€ S! 4       ;_uu_ 4        S! V/ VB  R R R 4       R #   + '       g   i     R # ; ir�   r1   )r  r†   r‡   rb  rÑ  s   &*,€€r;   rý   Ú1TestCase.wrap_method_with_policy.<locals>.wrapperò  s#   ø€ á—•Ù˜Ð' Ò'÷ ——’ús   ‘	$¤5	)r
   r  Ú
MethodType)r  rb  rÑ  rý   s   &ff r;   rÐ  Ú TestCase.wrap_method_with_policyë  s.   ù€ ô 
ˆv‹õ	(ó 
ð	(ô ×Ò Ó.Ð.r:   c                ó8   € V P                  WP                  4      # r�   )rÐ  r‰  )r  rb  s   &&r;   Úwrap_with_cuda_memory_checkÚ$TestCase.wrap_with_cuda_memory_checkø  s   € Ø×+Ñ+¨F×4QÑ4QÓRÐRr:   c                óL   € V P                   P                   R V P                   2# )rW   )rß  r2   r¼  r;  s   &r;   Ú_dynamo_test_keyÚTestCase._dynamo_test_keyû  s%   € Ø—.‘.×)Ñ)Ð*¨!¨D×,@Ñ,@Ð+AÐBÐBr:   c                óN   € \         P                  P                  W#R 7      ! V4      # ))r¢  )rw   r‚  Úoptimize)r  rü   r5  r¢  s   &&&&r;   Ú
compile_fnÚTestCase.compile_fnþ  s   € ä�}‰}×%Ñ% gÐ%ÔAÀ"ÓEÐEr:   c                ó4  <a € \        V\        P                  4      p\        SS `  pVP
                  p\        ;'       g    \        ;'       g    \        pR pR pR pV'       dÃ    \        P                  ! \        V4      4      p	\        P                  P                  V	4      p
\        P                   ! RV
4      pVe6   VP#                  ^4      p\        '       d   ^RIHp WÍ9  pRpVR8X  d   RpMRpR\        P,                  9   d   \        P,                  R,          R8X  d   RpR pV'       dW   \/        S S P0                  4      p\3        VR4      '       d   VP4                  pM!\3        VR4      '       d   VP4                  pMTp\/        VR	R 4      ;'       d    TpV'       g	   V'       d    \6        P8                  P;                  4        MS P=                  4        \6        P>                  PA                  R
4       V'       d	   V'       * pM$\6        P8                  PB                  PD                  pV'       d+   \6        PF                  PB                  PI                  R R7      M\J        PL                  ! 4       p\        PN                  PI                  RV4      ;_uu_ 4        T;_uu_ 4        \        '       d   S PQ                  VRV4      pEMŸ\        '       g   \        '       Ed‡   \        '       d   S PQ                  VRV4      pMS PQ                  VRV4      pS PS                  4       pV 3R lp\        '       d
   Rp^RIH*p MRp^RIH+p VV9   dU   \/        S S P0                  4      p\        P                  PY                  VV4      p\[        S S P0                  V! VV4      4       V 3R lp\        '       d
   Rp^RIH.p MRp^RIH/p VV9   dU   \/        S S P0                  4      p\        P                  PY                  VV4      p\[        S S P0                  V! VV4      4       ^RIH0p \6        P8                  PB                  Pb                  '       d   VV9   d   \e        4       ! V4      pV! VR7       RRR4       RRR4       V'       g	   V'       d    \6        P8                  P;                  4        Mc\6        P8                  PB                  Pb                  '       d*   \6        P8                  Pb                  P;                  4        MS P=                  4        V'       d½   S Pg                  4       '       d¥   VPi                  4       '       d}   \k        4       p\l        e/   ^ RI7H8p V! VV4      pVPr                  Vn:        RVn;        RVn<        VPz                  P}                  VR34       VPi                  4       R Jd   \        R 4      hVP�                  4        R# R# R#   \(        \*        3 d     ELüi ; i  + '       g   i     EL‰; i  + '       g   i     EL•; i)!Fz.*/test/(.*).pyN)ÚFIXME_inductor_non_strictTÚtest_opsÚSTRICT_DEFAULTrŒ   r”  r   rŽ   )Úsize_assertsr›  Úaot_eager_decomp_partitionrÍ  Úeager_noexceptc                 ó8   <a a€ \        S 4      V VV3R  l4       pV# )c                  ó†   <€  S! V / VB  \        RS R24      h  \          d   pSP                  T4        R p?L0R p?ii ; i)Nz#Unexpected success, please remove `Ú`)ÚBaseExceptionrR  ro  )r†   r‡   rq   rM  Ú	file_namer  s   *, €€€r;   rý   Ú=TestCase._run_custom.<locals>.expect_failure.<locals>.wrapper`  sP   ø€ ð-Ù˜tÐ. vÒ.ô +Ð-PÐQZÐP[Ð[\Ð+]Ó^Ð^øô  -ô -Ø ŸM™M¨!×,Ñ,ûð-ús   ƒ šA ¥;»A r†  ©rM  rð  rý   r  s   ff €r;   Úexpect_failureÚ,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                 ó8   <a a€ \        S 4      V VV3R  l4       pV# )c                  ó  <€  S! V / VB  \        SSP                  4      p\        VRR4      '       d   SP                  R4       R # SP                  RS R24       R #   \          d   pSP                  T4        R p?LtR p?ii ; i)NÚ__unittest_expecting_failure__Fzunexpected successz'This test passed, maybe we can remove `rî  )rï  rR  rX   r¼  )r†   r‡   rq   rb  rM  rð  r  s   *,  €€€r;   rý   Ú=TestCase._run_custom.<locals>.ignore_failure.<locals>.wrapperv  s€   ø€ ð-Ù˜tÐ. vÒ.ô ")¨¨t×/CÑ/CÓ!D˜Ü" 6Ð+KÈU×SÒSØ ŸM™MÐ*>Ö?à ŸM™MÐ,SÐT]ÐS^Ð^_Ð*`Öaøô  -ô -Ø ŸM™M¨!×,Ñ,ûð-ús   ƒA ÁBÁ)A?Á?Br†  rò  s   ff €r;   Úignore_failureÚ,TestCase._run_custom.<locals>.ignore_failureu  s"   ú€ Ü˜1“Xö	bó ð	bð #�Nr:   ztest/inductor_skips)Úinductor_skipsztest/dynamo_skips)Údynamo_skips)Úcompiled_autograd_skips©r,  )Ú	_TestInforý  ÚTestSuiteEarlyFailurez%TestSuite execution was aborted earlyz@expected result.wasSuccessful() to be False after adding failure)ArY   rQ   Ú
TestResultrÞ  ÚrunÚ__self__r&  r$  r"  r  r�  rP   r–   rá   Úabspathr˜  Úmatchr¼  Údynamo_test_failuresræ  ÚOSErrorrZ   r  rX   r¼  r&  r”  rw   r‚  rœ  r™  ÚcompilerÚ
set_stancerÏ  Úsuppress_errorsÚ	_inductorrž  Ú
contextlibÚnullcontextr�  rã  rß  rõ  rö  rh   r„  rý  rþ  rÿ  rƒ  r‰  rd  r-  rR   rQ  r*  r  ÚERRORr  Úelapsed_timeÚtest_descriptionÚfailuresrf   rš   Ústop)r  r,  Úusing_unittestÚ	super_runÚtest_clsÚcompiledÚstrict_defaultÚshould_reset_dynamoÚshould_disable_size_assertsrá   Ú	full_pathr  rã   ræ  Ústrict_moder‘  r¢  r  Úmaybe_disable_size_assertsÚkeyró  ÚsubdirÚexpected_failuresrb  rð  rû  Úskipsrÿ  r‰  r  rß  s   f&                            €r;   Ú_run_customÚTestCase._run_custom  s•  ù€ Ü# F¬H×,?Ñ,?Ó@ˆä‘G‘Kˆ	Ø×%Ñ%ˆô )×ZÐZÔ,?×ZÐZÔCZˆàˆØ#Ðð ',Ð#ßðÜ—’¤t¨H£~Ó6�ÜŸG™GŸO™O¨DÓ1�	ÜŸšÐ!3°YÓ?�ØÒ$Ø$Ÿ{™{¨1›~�Hß.Ó.ÝSØ)1Ñ)R˜Ø.2Ð+à# zÔ1Ø:>Ð7øà)-˜ð  ¤2§:¡:Ô-Ü—:‘:Ð.Õ/°3Ô6Ø%)�NàˆßÜ! $¨×(<Ñ(<Ó=ˆKÜ�{ O×4Ò4Ø)×7Ñ7‘Ü˜ ?×3Ò3Ø&×4Ñ4‘à,�Ü˜8Ð%=¸uÓE×RÐRÈ(ˆç×-Ü�M‰M×ÑÕ!ð ×*Ñ*Ô,ä�‰×!Ñ! )Ô,÷
 Ø"-œo‰Oä#Ÿm™m×2Ñ2×BÑBˆO÷ +ô �O‰O×"Ñ"×(Ñ(°eÐ(Ô<ä×'Ò'Ó)ð 	#ô �]‰]× Ñ Ð!GÈ×YÕY×[uÒ[uß"Ó"Ø ŸO™O¨IÐ7SÐU]Ó^’	ß&Ó&×*AÔ*Aß*Ó*Ø $§¡°	¸:ÀxÓ P‘Ið !%§¡°	Ð;KÈXÓ V�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åIÜ—=‘=×'Ñ'×9×9Ð9¸cÐE\Ô>\ä :Ô <¸YÓ G�Iá˜VÕ$÷E \v×Y÷H ×-Ü�M‰M×ÑÕ!Ü�]‰]×!Ñ!×3×3Ð3Ü�M‰M×+Ñ+×1Ñ1Õ3à×*Ñ*Ô,÷ ˜d×:Ñ:×<Ò<Ø×#Ñ#×%Ò%Ü“z�Ü Ò,õ ;Ù$ V¨TÓ2�DØ"+§/¡/�D”KØ(+�DÔ%Ø,C�DÔ)ð —‘×&Ñ&¨Ð.UÐ'VÔWØ×'Ñ'Ó)°Ó6Ü(Ð)kÓlÐlØ�K‰KŽMñ! =‰>øôo œYÐ'ô Úðú÷V \v×[uÐ[uú×Y×YÐYúsj   Á$A5W ÃW Ã0W ÊXÊ(-W2	ËW2	Ë#W2	Ë/AW2	Ì8A=W2	Î6BW2	Ñ W2	Ñ2X×W/×.W/×2X×=	XØX	c                óè   € \         P                  ! 4       ;_uu_ 4       p\        '       d   VP                  \	        4       4       V P                  VR 7       RRR4       R#   + '       g   i     R# ; i)r   N)r  Ú	ExitStackrï  Úenter_contextr  r#  )r  r,  r  s   && r;   r  ÚTestCase.run±  sN   € Ü×!Ò!×#Ô# uß!Ó!Ø×#Ñ#¤L£NÔ3Ø×ÑØð ô ÷ $×#×#Ò#ús   ž8A Á A1	c                ón  € \        V 4       \        4        \        P                  P                  P                  4       V n        \        P                  P                  P                  4        V P                  '       dJ   \        P                  ! 4       \        P                  8w  d"   \        R \        P                  ! 4        24      h\        P                  ! 4       V n        \        P                  P                  4       V n        \        P                  P#                  4       V n        \'        4       V n        R# )ú.expected default dtype to be torch.float, got N)rá  rI  rw   ÚsparseÚcheck_sparse_tensor_invariantsÚ
is_enabledÚ_check_invariantsÚenableÚ_default_dtype_check_enabledrA  rª  rš   Úis_grad_enabledÚ_prev_grad_staterê  Ú_len_torch_function_stackÚ#_prev_torch_function_mode_stack_lenÚ_get_torch_function_stateÚ_prev_torch_function_stateÚ_snapshot_fp32_precisionÚ_prev_fp32_precisionr;  s   &r;   ÚsetUpÚTestCase.setUp¹  sÎ   € Ü˜ÔÜŒô "'§¡×!LÑ!L×!WÑ!WÓ!YˆÔô 	�‰×3Ñ3×:Ñ:Ô<à×,×,Ð,Ü×&Ò&Ó(¬E¯K©KÔ7Ü$ØDÄU×E\ÒE\ÓE^ÐD_Ð`óð ô
 !&× 5Ò 5Ó 7ˆÔÜ38·8±8×3UÑ3UÓ3WˆÔ0Ü*/¯(©(×*LÑ*LÓ*NˆÔ'Ü$<Ó$>ˆÖ!r:   c                óÂ  € \        V R 4      '       dd   V P                  '       d*   \        P                  P                  P                  4        M(\        P                  P                  P                  4        V P                  '       dJ   \        P                  ! 4       \        P                  8w  d"   \        R\        P                  ! 4        24      h\        V R4      '       d!   \        P                  ! V P                  4       \        P                  P                  4       pWP                  8w  d\   \!        WP                  ,
          4       F!  p\        P                  P#                  4        K#  	  \        RV P                   RV 24      h\        P                  P%                  4       pW0P&                  8w  dE   \        P                  P)                  V P&                  4       \        RV P&                   RV 24      h\        V R4      '       dÈ   \*        P,                  P/                  R4      R8w  d¢   \1        4       pW@P2                  8w  d†   \5        V P2                  4       \7        4       p\9        WPP2                  V4       UUUUu. uF  w  w  p r'pWx8w  g   K  R	V R
V: RV: 2NK!  	  p	pppp\        RRP;                  V	4      ,           4      hR# R# R# u uppppi )r.  r*  r2  z:torch function mode stack was leaked: length changed from z to z.torch function state was leaked: changed from r8  Ú)PYTORCH_DISABLE_FP32_PRECISION_LEAK_CHECKrŒ   z  z: was z	, became z#fp32 precision flag leak detected:
r—  N)r&  r.  rw   r+  r,  r/  Údisabler0  rA  rª  rš   Úset_grad_enabledr2  rê  r3  r4  r’  Ú_pop_torch_function_stackr5  r6  Ú_set_torch_function_stater–   r  r  r7  r8  Ú_restore_fp32_precisionÚ_fp32_precision_flag_specsr²  rh   )
r  ÚafterrÁ   Útf_stateÚcurrentÚspecsr}  ÚprevÚcurÚ
mismatchess
   &         r;   ÚtearDownÚTestCase.tearDownÕ  sb  € ô �4Ð,×-Ò-à×%×%Ð%Ü—‘×;Ñ;×BÑBÕDä—‘×;Ñ;×CÑCÔEà×,×,Ð,Ü×&Ò&Ó(¬E¯K©KÔ7Ü$ØDÄU×E\ÒE\ÓE^ÐD_Ð`óð ô
 �4Ð+×,Ò,Ü×"Ò" 4×#8Ñ#8Ô9ô —‘×2Ñ2Ó4ˆØ×<Ñ<Ô<Ü˜5×#KÑ#KÕKÖL�Ü—‘×2Ñ2Ö4ñ Mä ð'Ø'+×'OÑ'OÐ&PÐPTÐUZÐT[ð]óð ô
 —8‘8×5Ñ5Ó7ˆØ×6Ñ6Ô6Ü�H‰H×.Ñ.¨t×/NÑ/NÔOÜ ð Ø $× ?Ñ ?Ð@ÀÀXÀJðPóð ô �DÐ0×1Ò1Ü—
‘
—‘ÐJÓKÈsÔRä.Ó0ˆGØ×3Ñ3Ô3Ü'¨×(AÑ(AÔBÜ2Ó4�ô 58¸×?XÑ?XÐZaÔ4böá4bÑ0™˜  1¨SØ‘{ô ?�b˜˜˜v d¡X¨Y°s±gÓ>Ù4bð ó ô
 %Ø:¸T¿Y¹YÀzÓ=RÕRóð ñ 4ñ Sñ 2ùõs   ÊK
ÊK
r?  c          
     óN  a a€ ^ Tu;8:  d   S S,          8:  g   M \        RV RS  RS 24      hVV 3R lp\        P                  ! S ^,           V\        P                  ! R4      R7      p^ ;r‰V! W‰4      p
V
'       dŸ   V\	        V
S4      8¼  dŽ   TpS ^,
          pV! WÉ4      pWË,
          ^8”  dE   W¼,           ^,          pV! Wé4      pV^ 8X  g   W.S,          ,
          \	        VS4      8  d   YïrÜKM  TpKQ  YÍr¨V'       g   \        R4      hWx) R P                  S4       V
'       dä   W(S,          ,
          \	        V
S V,
          4      8¼  d¿   T	pS^,
          pV! VV4      pVV,
          ^8”  de   VV,           ^,          pV! VV4      pV^ 8X  g;   W(S,          ,
          VS V,
          ,          ,
          \	        VS V,
          4      8  d   TTppKn  TpKr  TTr©V	'       g   \        R	4      hV^S V,
          ^,            P                  V	4       V
'       Ed{   \        W(S,          ,
          V	S V,
          ,          ,
          SV	,
          SV	,
          ^,           ,          ^,          4      w  pp^VSV	,
          ^,           ,          ,           p\        P                  ! ^V,          4      pVV^,           ,          ^V,          8”  d
   V^,          pVVV^,           ,          ^,          ,
          pV^8”  d   V	^ 8”  d   \        R
V RV	 24      h\        P                  ! V^,
          WGP                  R7      SV	,
          ^,           ,          V^V% VVVV,           ^,           ;;; \        P                  ! V^,           WGP                  R7      ,          uuu% M&^pW(S,          ,
          V	S V,
          ,          ,
          pVV;;,          V,          uu&   V'       d6   \        P                  ! S VP                  R7      pVR,          V,          VR&   TpVP                  ^ R7       VP                  VR7      # )ax  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.
zAnnz out of bounds: expected 0 <= nnz <= n_rows * n_cols, got nnz=z	, n_rows=z	, n_cols=c                 ó
  <€ SV,
          SV,
          ^,           ,          ^,          pSV ,
          SV,
          ^,           ,          pVSV ,
          SV,
          ^,           ,          ,          W3^,
          ,          ^,          ,           # r�  r1   )ÚnÚmÚMÚKÚn_colsÚn_rowss   &&  €€r;   ÚsawteethÚ-TestCase._make_crow_indices.<locals>.sawteethN  sb   ø€ ð
 ˜!• ¨¥
¨Q¥Õ/°1Õ4ˆAØ˜!• ¨¥
¨Q¥Õ/ˆAØ˜ !�¨°!­°a­Õ8Õ9¸AÀQÅ½KÈ1Õ<LÕLÐLr:   r@   r)  zn must be non-zeroNzm must be non-zeroz8full sawteeth are never on top of a bottom rectangle: p=z, m=rg  rÿ  )r\  )rš   rw   Úzerosr¨  r  Úfill_rq  ÚmathÚisqrtÚarangeÚrandpermÚcumsum_r0  )rS  rR  Únnzr¨  r¦  r?  rT  ÚcountsrN  rO  ÚNÚn_leftÚn_rightÚN_rightÚn_middleÚN_middleÚm_leftÚm_rightÚm_middleÚqr  ri  ÚkÚcorrÚpermÚcrow_indicess   ff&$$$                    r;   Ú_make_crow_indicesÚTestCase._make_crow_indices  sœ  ù€ ðl �SÖ+˜F V�OÖ+Ü ØSÐTWÐSXÐXaÐbhÐaiÐirÐsyÐrzÐ{óð ö	Mô —’˜V a�Z¨u¼U¿\º\È%Ó=PÔQˆàˆ	ˆÙ�Q‹Nˆß�œ˜A˜v›Ô&ð ˆFØ˜q•jˆGÙ˜wÓ*ˆGØÕ" QÔ&Ø"Õ,°Õ2�Ù# HÓ0�Ø˜q”= C°VÕ*;Õ$;¼cÀ(ÈFÓ>SÔ$SØ'/šWà%’FØˆqçÜ$Ð%9Ó:Ð:Ø�2�3ˆK×Ñ˜fÔ%ç�˜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™Wà%’FØ˜GˆqçÜ$Ð%9Ó:Ð:Ø�1�V˜a•Z !•^Ð$×*Ñ*¨1Ô-çˆ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Ø�A”˜A œEÜ$ØNÈqÈcÐQUÐVWÐUXÐYóð ô  Ÿ,š, q¨1¥u°EÇ-Á-ÔPÐTZÐ]^ÕT^ÐabÕTbÕcˆF�1�QˆKà�1�Q˜•U˜Q•YÓ¤5§<¢<°°Aµ¸UÏ=É=Ô#YÕYÔð ˆAØ˜V�Õ# a¨6°A­:Õ&6Õ6ˆDð 	ˆq�	�TÕ‹	çô —>’> &°·±Ô?ˆDØ � DÕ)ˆF�2‰Jð ˆØ×Ñ ÐÔ#Ø�‰ fˆÓ-Ð-r:   Ú	blocksizeÚ
dense_dimsc          
     ó:  a aaaaaa€ ^ RI Hp	 ^ RIHp
 ^p\        ;QJ d1    V3R l\        \        S4      4       4       F  '       d   K   RM&	  RM"! V3R l\        \        S4      4       4       4      '       g   V^ 8X  g   \        RS RV 24      h\        S4      V8  d   \        RV R	\        S4       24      hS'       d�   \        S4      ^8w  d   \        R
S RS 24      hSRV,
          ,          S^ ,          ,          ^ 8w  d   \        RS RS 24      hSRV,
          ,          S^,          ,          ^ 8w  d   \        RS RS 24      hSw  rÍM^;rÍ\        S4      oS\        S4      V,
          R oVVVVVV 3R lpSRRV,
           pV
! WŸ^4      pV\        P                  \        P                  09   d0   SRV,
          ,          V,          SRV,
          ,          V,          ppM.SRV,
          ,          V,          SRV,
          ,          V,          ppW,V,          ,          p\        V4       Uu. uF  pV! VVV4      NK  	  pp\        \        \        VRR/ 4      p\        P                  ! \!        V4      4      P"                  ! . VOVNSOSO5!  p\        P                  ! \!        V4      4      P"                  ! . VORN5!  p\        P                  ! \!        V4      4      P"                  ! . VORN5!  p\        P$                  ! VVVSSVSR7      # u upi )ru   )rm  )Úreducec              3   ó<   <"  € T F  pSV,          ^ 8„  x € K  	  R# 5ir  r1   ©ró   rZ  r5  s   & €r;   rô   Ú5TestCase.genSparseCompressedTensor.<locals>.<genexpr>­  s   øé € Ð:Ñ)9 A�D˜•G˜a–KÓ)9ùr-  FTúinvalid arguments: size=ú, nnz=zexpected len(size) >= ú, got z'expected len(blocksize) == 2, got size=ú, blocksize=z>size[-2 - dense_dims] must be divisible by blocksize[0]: size=z>size[-1 - dense_dims] must be divisible by blocksize[1]: size=Nc           	      óö  <€ SP                  WVSSR 7      p\        P                  ! VSSR7      p\        V 4       Fh  pW5^,           ,          W5,          ,
          p\        P                  ! \        P
                  ! VSSR7      RV 4      w  WCV,          W5^,           ,          % pKj  	  S\        P                  8w  d   RM^ pS\        P                  8w  d   ^M^p	\        V3S,           S,           SSW‰R7      p
W£V3# )rM  r)  N©r¨  r¦  ÚlowÚhighr!  )rm  rw   rV  r’  Úsortr[  r,  r#   )Ún_compressed_dimsÚn_plain_dimsr]  Úcompressed_indicesÚplain_indicesr-  ÚcountrÁ   r|  r}  r³  ro  Ú
dense_sizer¨  r¦  Úindex_dtyper  s   &&&        €€€€€€r;   Úrandom_sparse_compressedÚDTestCase.genSparseCompressedTensor.<locals>.random_sparse_compressedÃ  sí   ø€ Ø!%×!8Ñ!8Ð9JÐZ]ÐflÐtÐ!8ó  "AÐÜ!ŸKšK¨°;ÀvÔNˆMÜÐ,Ö-�Ø*¨q­5Õ1Ð4FÕ4IÕI�ÜTY×T^ÒT^Ü—N’N <°{È6ÔRÐSYÐTYÐZóU\ÑQ�°Õ3Ð4FÈ1ÅuÕ4MÐNÒPQñ .ð ¤§¡Ô,‘"°!ˆCØ¤§¡Ô,‘1°!ˆDÜ  # ¨)Õ!3°jÕ!@ÈÐW\ÐbeÔqˆFØ¨}Ð<Ð<r:   r±  )r5  r¦  Úlayoutr¨  r‡  r!  )re  rm  r   rr  r×  r’  rÈ  rš   r‡  rw   Ú
sparse_csrÚ
sparse_bsrÚmaprg  r²  r  rJ  ÚreshapeÚsparse_compressed_tensor)r  r5  r]  rˆ  r¨  r¦  r…  ro  rp  rm  rr  Ú
sparse_dimÚ
blocksize0Ú
blocksize1r†  Úbatch_shapeÚn_batchr  r€  ÚblocknnzrÁ   Úsparse_tensorsÚsparse_tensors_itr³  r�  r‚  r„  s   ff&$dddd$                 @r;   ÚgenSparseCompressedTensorÚ"TestCase.genSparseCompressedTensor©  sú  þ€ Ý Ý$Øˆ
ß“Ô:¬¬s°4«yÔ)9Ó:——’Ô:¬¬s°4«yÔ)9Ó:×:Ò:¸cÀQ¼hÜ Ð#;¸D¸6ÀÈÀuÐ!MÓNÐNÜˆt‹9�zÔ!Ü Ð#9¸*¸ÀVÌCÐPTËIÈ;Ð!WÓXÐXßÜ�9‹~ Ô"Ü$Ð'NÈtÈfÐT`ÐajÐ`kÐ%lÓmÐmØ�B˜•OÕ$ y°¥|Õ3°qÔ8Ü$ØTÐUYÐTZÐZfÐgpÐfqÐróð ð �B˜•OÕ$ y°¥|Õ3°qÔ8Ü$ØTÐUYÐTZÐZfÐgpÐfqÐróð ð &/Ñ"ˆJ˜
à&'Ð'ˆJä�T‹{ˆØœ3˜t›9 zÕ1Ð3Ð4ˆ
÷
	=ò 
	=ð Ð+˜B �OÐ,ˆÙ˜¨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ÑguÐbcÑ2Ð3DÀlÐT\Ö]ÑguˆÐvÜ¤¤c¨>Ð&GÀ$Ñ&GÓHÐä—’œTÐ"3Ó4Ó5×=Ò=Ðn¸{ÐnÈHÐnÐW`ÐnÐcmÓnˆÜ"Ÿ[š[¬Ð.?Ó)@ÓA×IÒIÐ[È;Ð[ÐXZÓ[ÐÜŸš¤DÐ):Ó$;Ó<×DÒDÐVÀkÐVÐSUÓVˆÜ×-Ò-Ð.@À-Ø.4¸4ÀuÐU[Ðdjôlð 	lùò ws   È3Lc               óL   € V P                  W\        P                  VWERVR 7      # )©rˆ  r¨  r¦  r…  ro  rp  r1   )r–  rw   r‰  ©r  r5  r]  r¨  r¦  r…  rp  s   &&&$$$$r;   ÚgenSparseCSRTensorÚTestCase.genSparseCSRTensorà  s2   € Ø×-Ñ-¨dÄ×@PÑ@PÐY_Ø49Ð^`Ðmwð .ó yð 	yr:   c               óL   € V P                  W\        P                  VWER^ R7      # )ru   r™  r1   )r–  rw   Ú
sparse_cscrš  s   &&&$$$$r;   ÚgenSparseCSCTensorÚTestCase.genSparseCSCTensorä  s2   € Ø×-Ñ-¨dÄ×@PÑ@PÐY_Ø49Ð^`Ðmnð .ó pð 	pr:   c               ó˜   € \        V4      ^8w  d   \        R\        V4       24      hV P                  W\        P                  VWVW'R7      # ©rM   z"expected len(blocksize) == 2, got r™  )rÈ  rš   r–  rw   rŠ  ©r  r5  ro  r]  r¨  r¦  r…  rp  s   &&&&$$$$r;   ÚgenSparseBSRTensorÚTestCase.genSparseBSRTensorè  óS   € Üˆy‹>˜QÔÜ Ð#EÄcÈ)ÃnÐEUÐ!VÓWÐWØ×-Ñ-¨dÄ×@PÑ@PÐY_Ø49Ð^gð .ó @ð 	@r:   c               ó˜   € \        V4      ^8w  d   \        R\        V4       24      hV P                  W\        P                  VWVW'R7      # r¢  )rÈ  rš   r–  rw   Ú
sparse_bscr£  s   &&&&$$$$r;   ÚgenSparseBSCTensorÚTestCase.genSparseBSCTensorî  r¦  r:   c                ó"  a€ \         ;QJ d(    V3R  l\        V4       4       F  '       d   K   RM	  RM! V3R  l\        V4       4       4      '       g   V^ 8X  g   \        RS RV RV 24      hV.\        SVR 4      ,           p\	        WuVR^R7      p\
        P                  ! W#VR7      p	V	P                  \
        P                  ! SRV 4      P                  ^4      P                  V	4      4       V	P                  \
        P                  4      p	V'       dJ   V	R	RV^,          1R
3,          p
V	R	RV^,           ^,          1R
3,          p\
        P                  ! W«.^4      p	\
        P                  ! W˜\
        P                  ! S4      WeR7      pV'       g   VP                  4       pM-VP!                  4       P#                  4       P%                  R4      pWÌP'                  4       P#                  4       VP)                  4       P#                  4       3# )c              3   ó<   <"  € T F  pSV,          ^ 8„  x € K  	  R# 5ir  r1   rt  s   & €r;   rô   Ú+TestCase.genSparseTensor.<locals>.<genexpr>÷  s   øé € Ð;Ñ): A�D˜•G˜a–KÓ):ùr-  FTrv  z, sparse_dim=rw  Nr{  rg  :NNN.r)  r!  )r×  r’  rš   rg  r#   rw   ÚrandÚmul_rU  Ú	unsqueezer0  ÚlongÚcatÚsparse_coo_tensorÚSizeÚcoalesceÚdetachÚcloneÚ_coalesced_Ú_indicesÚ_values)r  r5  rŽ  r]  Úis_uncoalescedr¨  r¦  Úv_sizerµ  r-  Úi1Úi2r,  s   &f&&&&&      r;   ÚgenSparseTensorÚTestCase.genSparseTensorô  s–  ø€ ÷ “Ô;¬¨zÔ):Ó;——’Ô;¬¨zÔ):Ó;×;Ò;¸sÀa¼xÜ Ð#;¸D¸6ÀÈzÈlÐZ`ÐadÐ`eÐ!fÓgÐgà�œ˜d : ;Ð/Ó0Õ0ˆÜ˜°UÀÈÔKˆÜ�JŠJ�z¨vÔ6ˆØ	�‰Œu�|Š|˜D  *Ð-Ó.×8Ñ8¸Ó;×>Ñ>¸qÓAÔBØ�D‰D”—‘ÓˆßØ�1�k˜˜q��k 3Ð&Õ'ˆBØ�1Ð'˜˜q� Q�Ð'¨Ð,Õ-ˆBÜ—	’	˜2˜( AÓ&ˆAÜ×#Ò# A¬%¯*ª*°TÓ*:À%ÔWˆçØ—
‘
“‰Að —‘“
× Ñ Ó"×.Ñ.¨uÓ5ˆAØ—*‘*“,×$Ñ$Ó&¨¯	©	«×(9Ñ(9Ó(;Ð;Ð;r:   c              #  ór  a a'a(a)a*a+"  € Vf   \         P                  pV\         P                  \         P                  \         P                  \         P
                  09   pV'       Edv   S P                  WW4VWxV	V
VVRR7       EFT  w  ppV'       d-   \        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      pV\         P                  J d—   \        V4      ^8w  d   \        R\        V4       24      hVP                  RR4      pVf   \        R4      hV'       d+   V^ ,          P                  V4      P                  4       x € KÉ  V^ ,          P                  V4      x € Kå  V\         P                  J d   \         P                  ! V/ VB x € EK  V'       d.   VP!                  VR7       \         P"                  ! V/ VB x € EKI  \        R	V 24      h	  R# R
 o)R o*V)V*3R lo+V(V+3R lo(V'3R lo'Vf‚   . RO. RO.RR.. RO3. RO. RO.. RO. RO.. RO. RO... RO. RO.. RO. RO.. RO. RO...RR .RR.3. R!O. R"O. R#O. R$O. R%O. R&O. R'O. R(O.R .RR.3^^.^^..^^ .^ ^ ...R).V'       d   R.M. 3.pR+V 3R llpV EFê  w  pppV'       g   V Uu. uF  pV'       d   K  VNK  	  ppV'       d	   V'       g   K=  \         P$                  ! V\         P                  R7      pV'       g   VP&                  ^8”  d   K~  V EFe  pS(! VV4      V,          pV EFJ  pVRR*  Uu. uF  pVP)                  W$R7      NK  	  ppS'! VR*,          V4      P)                  W#R7      p\+        W#VP,                  V,           R7      pVe   VP!                  VR7       . VOVN5VP/                  4       3x € V
'       d   VP&                  ^8”  dn   R, Fg  w  ppV Uu. uF  pV! VVVR7      NK  	  p p. V OVN5VP/                  4       3x € V'       g   KC  V! VR*^R7      p!. V OV!N5VP/                  4       3x € Ki  	  V'       g   EK&  V! VR*^R7      p!. VOV!N5VP/                  4       3x € EKM  	  EKh  	  EKí  	  V	'       Ed*   R-R..V'       d   . R/OMR.3R0. R1OR.3R2R..R.33 EF  w  p"ppV EFò  pV EFç  pV\         P                  8X  d$   Rp\         P0                  ! V"V,           W#R7      pEMvV\         P                  8X  dB   \         P0                  ! \        V"4      ^ W$R7      3p\         P0                  ! ^ .VO5W#R7      pEM V\         P                  8X  di   \         P$                  ! ^ .V"^ ,          ^,           ,          W$R7      p#\         P0                  ! ^ W$R7      p$V#V$3p\         P0                  ! ^ .VO5W#R7      pEM£V\         P                  8X  di   \         P$                  ! ^ .V"^,          ^,           ,          W$R7      p%\         P0                  ! ^ W$R7      p&V%V&3p\         P0                  ! ^ .VO5W#R7      pEM&V\         P                  8X  dx   \         P$                  ! ^ .V"^ ,          V^ ,          ,          ^,           ,          W$R7      p#\         P0                  ! ^ W$R7      p$V#V$3p\         P0                  ! ^ .VOVO5W#R7      pMšV\         P
                  8X  dx   \         P$                  ! ^ .V"^,          V^,          ,          ^,           ,          W$R7      p%\         P0                  ! ^ W$R7      p&V%V&3p\         P0                  ! ^ .VOVO5W#R7      pM\        R	V 24      h\+        W#V"V,           R7      pVe   VP!                  VR7       . VOVN5V3x € EKê  	  EKõ  	  EK  	  R# R# u upi u upi u upi 5i)3av  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)r¨  r¦  r…  Ú
pin_memoryÚenable_batchÚenable_hybridÚenable_zero_sizedÚenable_non_contiguous_indicesÚenable_non_contiguous_valuesÚenable_batch_variable_nseÚoutput_tensorc              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir�   ©rÂ  )ró   r´  s   & r;   rô   Ú2TestCase.generate_simple_inputs.<locals>.<genexpr>F  s   é € Ð >¹°A§¡§ »ùs   ‚z0expected len(args) == 1 for strided layout, got r5  z(size must not be None for strided layout)rˆ  zunreachable: unexpected layout c                 ó:  € V P                   pV^ ,          V^ ,          ,          ^ 8w  d   \        RV RV 24      hV^,          V^,          ,          ^ 8w  d   \        RV RV 24      hV P                  RV^ ,          V^,          V^,          ,          V^,          4      P                  RR4      P	                  R4      P	                  R4      p\
        P                  ! ^VP                  4       ^,           4      P                  VP                   4      pV^ 8g  V,          # )ru   z8basesize[0] must be divisible by blocksize[0]: basesize=ry  z8basesize[1] must be divisible by blocksize[1]: basesize=r!  éýÿÿÿr‡  )Úshaperš   rŒ  Ú	transposerö  rw   rZ  rö  )rð  ro  ÚbasesizeÚblockpatternÚ	block_idss   &&   r;   Úget_blockpatternÚ9TestCase.generate_simple_inputs.<locals>.get_blockpatternZ  s  € Ø—}‘}ˆHØ˜�{˜Y q�\Õ)¨QÔ.Ü$ØNÈxÈjÐXdÐenÐdoÐpóð ð ˜�{˜Y q�\Õ)¨QÔ.Ü$ØNÈxÈjÐXdÐenÐdoÐpóð ð #Ÿ?™?¨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                 ó˜  € V P                   p\        V4      ^8w  d   \        RV 24      h\        P                  ! V ^ 8g  4      p\        P
                  ! V4      p\        P                  ! V^ ,          ^,           \        P                  R7      p\        P                  ! V^ ,          P                  V^ ,          R7      ^ 4      VR&   V^,          p\        P                  ! V\        P                  R7      p\        P                  ! ^^\        V^ ,          4      ,           \        P                  R7      pWvV&   \        P                  ! V P                  ^ ^4      ^ 8g  4      p\        P
                  ! V4      p	\        P                  ! V^,          ^,           \        P                  R7      p
\        P                  ! V	^ ,          P                  V^,          R7      ^ 4      V
R&   V	^,          pVP                  ^ ^4      V,          p\        P                  W73\        P                  WEV3\        P                  W«V3\        P                  V3/# )rM   z.pattern is expected to be a matrix, got shape ©r¦  )Ú	minlengthrÿ  )rÏ  rÈ  rš   rw   Úwherer  rV  r  ÚcumsumÚbincountrZ  rÐ  Ú
sparse_coor‰  rž  Ústrided)rð  rÑ  ÚindicesÚcoo_indicesrl  Úcol_indicesÚstrided_valuesr³  Ú	indices_TÚcoo_indices_TÚccol_indicesÚrow_indicesÚ
csc_valuess   &            r;   Úget_sparse_dataÚ8TestCase.generate_simple_inputs.<locals>.get_sparse_datak  sÀ  € Ø—}‘}ˆHÜ�8‹} Ô!Ü$Ð'UÐV^ÐU_Ð%`ÓaÐaô —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Ø&,˜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ä×$Ñ$ {Ð&;Ü×$Ñ$ |À&Ð&IÜ×$Ñ$ |À*Ð&MÜ—M‘M NÐ#4ð6ð 6r:   c                 óð  <€ S! V 4      pS! W4      pS! V4      pV\         P                  ,          ^ ,          pV\         P                  ,          ^ ,          p\         P                  ! VP	                  ^ ^4       UUu. uFX  w  rxWWV^ ,          ,          V^,           V^ ,          ,          1W�^,          ,          V^,           V^,          ,          13,          NKZ  	  upp4      p	W”\         P
                  ,          ^,          ^,
          ,          p
\         P                  . V\         P                  ,          R,          OV	N5\         P                  . V\         P
                  ,          R,          OV
N5/VC# u uppi )ru   r‰  )	rw   rÝ  rÜ  r  rÐ  rž  rŠ  r‰  r¨  )rð  ro  Únonblock_datarÒ  Ú
block_datará  Úblock_indicesÚbiÚbjÚ
bsr_valuesÚ
bsc_valuesrÔ  rç  s   &&         €€r;   Úget_sparse_data_with_blockÚCTestCase.generate_simple_inputs.<locals>.get_sparse_data_with_block�  sV  ø€ Ù+¨GÓ4ˆMÙ+¨GÓ?ˆLÙ(¨Ó6ˆJà*¬5¯=©=Õ9¸!Õ<ˆNØ&¤u×'7Ñ'7Õ8¸Õ;ˆMÜŸšà4A×4KÑ4KÈAÈqÔ4Qô&Sá4Q©&¨"ð '5¸)ÀA½,Õ5FÈÈQÍÐR[Ð\]ÕR^ÕG^Ð5^Ø57ÀA½,Õ5FÈÈQÍÐR[Ð\]ÕR^ÕG^Ð5^ð6_÷ '`ð '`á4Qò&Só TˆJð $¬u×/?Ñ/?Õ$@ÀÕ$CÀaÕ$GÕHˆJä×$Ñ$Ð&U¨
´5×3CÑ3CÕ(DÀRÕ(HÐ&UÈ*Ñ&UÜ×$Ñ$Ð&U¨
´5×3CÑ3CÕ(DÀRÕ(HÐ&UÈ*Ñ&Uð%à#ð%ð %ùó&Ss   Á;AE2
c                 óZ  <a
€ V P                   p\        V4      ^8:  d	   S! W4      # / p\        V 4       EFò  w  rES! WQ4      P                  4        EFÑ  w  po
VP	                  V4      pV\
        P                  J dá   \
        P                  ! \
        P                  ! ^\        S
^,          4      3V\
        P                  R7      S
^ ,          34      pVf   VS
^,          3;qsV&   K—  V^ ,          P                  \
        P                  ! V^ ,          V3^4      4       V^,          P                  \
        P                  ! V^,          S
^,          34      4       EK  Vf^   \        ;QJ d)    . V
3R l\        \        S
4      4       4       F  NK  	  5M"! V
3R l\        \        S
4      4       4       4      ;qsV&   EKm  \        \        S
4      4       FL  p	Wy,          P                  \
        P                  ! Wy,          S
V	,          P                  ^ 4      34      4       KN  	  EKÔ  	  EKõ  	  V# )rM   r×  c              3   óT   <"  € T F  pSV,          P                  ^ 4      x € K  	  R# 5ir  )r°  )ró   rZ  rZ  s   & €r;   rô   ÚQTestCase.generate_simple_inputs.<locals>.get_batch_sparse_data.<locals>.<genexpr>º  s$   øé € Ð?iÑ[hÐVWÀÀ!ÅÇÁÈq×@QÐ@QÓ[hùs   ƒ%()rÏ  rÈ  r1  r^   r  rw   rÜ  r²  Úfullr  Úset_r‡  r’  r°  )rð  ro  r5  Ú
batch_datar-  rm   rˆ  r,  Úext_coo_indices1rZ  rZ  Úget_batch_sparse_datarñ  s   &&        @€€r;   rú  Ú>TestCase.generate_simple_inputs.<locals>.get_batch_sparse_data¤  s£  ù€ Ø—=‘=ˆDÜ�4‹y˜AŒ~Ù1°'ÓEÐEð ˆJÜ$ W×-‘�Ù!6°tÓ!G×!MÑ!M×!O‘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°Ó%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Ô[`ÔadÐefÓagÔ[hÓ?iÓ:iÐi˜F°Ô%7ä%*¬3¨q«6¦] Ø &¥	§¡¬u¯yªy¸&½)ÀQÀqÅTÇ^Á^ÐTUÓEVÐ9WÓ/XÖ Yô &3ô! "Pñ .ð& Ðr:   c           	     ó|  <€ V'       g   V # \        V \        4      '       g>   V P                  ^ 8”  d-   \        P                  ! V  Uu. uF  pS! W!4      NK  	  up4      # V ^ 8X  d'   \        P
                  ! V\        P                  R7      # \        P                  ! V^ ,          \        P                  R7      p\        VR,          4       FW  w  rE\        P                  ! V\        P                  R7      ^
V^,           ,          ,          pVR,          VR,          ,           pKY  	  VP                  V 4       V# u upi )a)  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ÿ  ).N)N.)
rY   rÕ   Úndimrw   r  rV  r  rZ  r1  Úadd_)ÚbaseÚ	densesizeÚbr  r-  rZ  ÚyÚgenerate_valuess   &&     €r;   r	  Ú8TestCase.generate_simple_inputs.<locals>.generate_valuesÀ  sÛ   ø€ ÷ Ø�Ü˜d¤C×(Ò(¨T¯Y©Y¸¬]Ü—{’{É4Ó#PÉ4Àa¡O°AÖ$AÉ4Ñ#PÓQÐQØ�qŒyÜ—{’{ 9´E·K±KÔ@Ð@Ü—’˜Y q�\´·±Ô=ˆAÜ! )¨B¥-Ö0‘�Ü—L’L ¬%¯+©+Ô6¸"ÀÀQÅ½-ÕH�Ø�i•L 1 Y¥<Õ/’ñ 1ð �F‰F�4ŒLØˆHùò $Qs   ÁD9c                 ó°  <€ SP                  V P                  4       4       V^ 8  d   WP                  ,           pV^ 8¼  d   WP                  8  g   \        RV P                   RV 24      h\	        ^V^,           4      p\
        P                  ! . V P                  RV OV P                  V,          V,          NV P                  V^,           R O5V P                  V P                  R7      p. \        R4      3V,          O\        VRV4      N5pWE,          P                  V 4      pSP                  VP                  4       4       SP                  W4       V# )ru   z&dim out of range: expected 0 <= dim < z
, got dim=Nr)  )Ú
assertTrueÚis_contiguousrý  rš   r  rw   rV  rÏ  r¦  r¨  Úslicer6  ÚassertFalser;  )r8  r\  ÚoffsetÚstepÚtmpÚ
dim_slicesr  r  s   &&&    €r;   Únon_contiguous_copyÚ<TestCase.generate_simple_inputs.<locals>.non_contiguous_copy  s  ø€ ð �O‰O˜AŸO™OÓ-Ô.Ø�QŒwØŸF™F•l�Ø˜1”H §v¡v¤Ü$Ð'MÈaÏfÉfÈXÐU_Ð`cÐ_dÐ%eÓ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Ø•×%Ñ% aÓ(ˆAØ×Ñ˜QŸ_™_Ó.Ô/Ø×Ñ˜QÔ"ØˆHr:   r×  rM  )r¨  r¦  r5  rË  )r\  r
	  )r   rM   ru   )r   ru   r8  ©rM   r   )r   r8  r1   ©rM   ©rA  é   )r1   r	  r	  )r   rM   r8  )r   ru   ru   )ru   rM   ru   ©rM   r8  )ru   r   ru   rM   ru   rM   )ru   r   ru   ru   rM   ru   )r8  r8  r8  ru   ru   ru   )ru   ru   ru   ru   ru   ru   )ru   r	  ru   é   r	  r	  )r	  ru   r	  r	  r	  r	  )ru   ru   ru   ru   rT  rT  )é   r	  r	  ru   rT  rT  )r   r   r!  )r!  ru   >   ©ru   r   ©r‡  ru   )rM   ru   ©r   rM   )r1   r	  r	  )ru   rM   )r	  r	  )r8  rM   )ru   ru   )rw   r  r‰  rž  rŠ  r¨  Úgenerate_simple_inputsr‡  rÝ  rÈ  rš   r¤  rŒ  rÂ  rÜ  r³  Úupdater�  rU  rý  r0  rµ   rÏ  r'  rO  ),r  rˆ  r¨  r¦  r…  rÂ  Úmembers_pin_memoryrÃ  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  ÚpatternsÚis_compressed_sparse_layoutr†   r‡   r5  r	  rð  Ú
blocksizesÚ
densesizesr¡  ro  Údatar 	  r´  rÞ  r³  r\  r
	  Úindices_copyÚvalues_copyrÑ  rl  rà  rä  rå  r	  rú  rÔ  rç  rñ  s,   f&&&&&&&&&&&&&&                        @@@@@r;   r	  ÚTestCase.generate_simple_inputs  sU  ýé € ðL ÒÜŸ+™+ˆKà&,´×1AÑ1AÄ5×CSÑCSÔUZ×UeÑUeÔgl×gwÑgwÐ0xÑ&xÐ#çˆ=Ø $× ;Ñ ;¸FÐY^ØGQØIUØN_ØZwØYuØVoØJOð !<÷ !Q‘��f÷ &ß œ5Ñ >¹Ó >Ÿ5™5Ñ >¹Ó >Ó>�DØœUŸ]™]Ó*Ü˜4“y A”~Ü,Ð/_Ô`cÐdhÓ`iÐ_jÐ-kÓlÐlØ!Ÿ:™: f¨dÓ3�DØ’|Ü,Ð-WÓXÐXß!Ø" 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ä(Ð+JÈ6È(Ð)SÓTÐTñ5!Qñ6 ò	3ò"#	6öJ	%ö(	õ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Ñ+ˆG�Z ß Ù)3Ó=© A¼1Ÿa˜a©�
Ð=ß§:ÙÜ—l’l 7´%·+±+Ô>ˆGß G§L¡L°1Ô$4ÙÜ'�	Ù,¨W°iÓ@ÀÕH�Ü!+�IØOSÐTWÐUWÉyÓYÉyÈ!˜qŸt™t¨6˜tÖEÉy�GÐYÙ,¨T°"­X°yÓA×DÑDÈFÐDÓ`�FÜ!¨À7Ç=Á=ÐS\ÕC\Ô]�FØ!Ò-ØŸ™°˜Ô<à,˜GÐ, VÑ,¨f¯k©k«mÐ;Ò;ß4¸¿¹ÈÔ9Iã->™M˜S &ÙdkÓ+lÑdkÐ_`Ñ,?ÀÀsÐSY×,ZÑdk˜LÐ+lØ"9 LÐ"9°&Ñ"9¸6¿;¹;»=Ð"HÒHç;Ñ;Ù.AÀ&ÈbÐYZÔ.[ Ø&B¨Ð&B°kÑ&BÀFÇKÁKÃMÐ&QÔ Qñ .?÷ 4Ò3Ù&9¸&ÀbÐQRÔ&S˜Ø5 Ð5¨Ñ5°v·{±{³}ÐDÕDô) ",ô (ñ 08÷B Ðà˜f˜X¿]Ó'9ÐQSÐPTÐUØÒ5¸°tÐ<Ø˜f˜X¨ tÐ,ô5Ñ0�˜* jô
 ",�IÜ%/˜	Ø!¤U§]¡]Ô2Ø&(˜GÜ%*§[¢[°(¸YÕ2FÐPVÔ%dšFØ#¤u×'7Ñ'7Ô7Ü',§{¢{´3°x³=À!ÈFÔ'fÐ&h˜GÜ%*§[¢[°!°°i±ÈÔ%]šFØ#¤u×'7Ñ'7Ô7Ü+0¯<ª<¸¸¸xÈ½{ÈQ½Õ8OÐX^Ô+r˜LÜ*/¯+ª+°aÀÔ*Z˜KØ'3°[Ð&A˜GÜ%*§[¢[°!°°i±ÈÔ%]šFØ#¤u×'7Ñ'7Ô7Ü+0¯<ª<¸¸¸xÈ½{ÈQ½Õ8OÐX^Ô+r˜LÜ*/¯+ª+°aÀÔ*Z˜KØ'3°[Ð&A˜GÜ%*§[¢[°!°°i±ÈÔ%]šFØ#¤u×'7Ñ'7Ô7Ü+0¯<ª<¸¸¸xÈ½{ÈiÐXYÍlÕ?ZÐ]^Õ?^Õ8_Ðhnô  ,C˜LÜ*/¯+ª+°aÀÔ*Z˜KØ'3°[Ð&A˜GÜ%*§[¢[°!Ð1L°iÐ1LÀ)Ñ1LÐU[Ô%i™FØ#¤u×'7Ñ'7Ô7Ü+0¯<ª<¸¸¸xÈ½{ÈiÐXYÍlÕ?ZÐ]^Õ?^Õ8_Ðhnô  ,C˜LÜ*/¯+ª+°aÀÔ*Z˜KØ'3°[Ð&A˜GÜ%*§[¢[°!Ð1L°iÐ1LÀ)Ñ1LÐU[Ô%i™Fä"0Ð3RÐSYÐRZÐ1[Ó"\Ð\Ü!%¨VÀxÐR[ÕG[Ô!\˜Ø%Ò1Ø"ŸM™M°Z˜MÔ@Ø0 Ð0¨Ñ0°&Ð8Õ8ôA &0ô ",ó5ñ ùò? >ùò Zùò ,mùsw   ˆA^7Á'3^7ÂB^7Ä A<^7ÆC<^7Ê
^(Ê(^(Ê.	^7Ê8^7Ë /^7Ë06^7Ì&^-
ÍA6^7Î8^7Ï^2Ï) ^7Ð-^7Ñ;^7Ñ=L:^7c                ó€   € VP                   \        P                  8X  d   VP                  4       pVP	                  4       # r�   )rˆ  rw   rÜ  rµ  Úto_dense)r  r8  s   &&r;   ÚsafeToDenseÚTestCase.safeToDensem  s+   € à�8‰8”u×'Ñ'Ô'Ø—
‘
“ˆAØ�z‰z‹|Ðr:   c                ó  € VP                  4       pVP                  VP                  VP                  r‡pVP                  VP                  VP                  rºp	V! V	.V
O5/ VB pV! V.VO5/ VB pV P                  ! WÍ3R R/VB  R# )Úexact_deviceFN)r†  rð  r†   r‡   r;  )r  Útorch_fnÚref_fnÚsample_inputr‡   Únumpy_sampleÚn_inpÚn_argsÚn_kwargsÚt_inpÚt_argsÚt_kwargsr¼  rí  s   &&&&,         r;   Úcompare_with_referenceÚTestCase.compare_with_referenceu  sŠ   € Ø#×)Ñ)Ó+ˆØ".×"4Ñ"4°l×6GÑ6GÈ×I\ÑI\�xˆØ".×"4Ñ"4°l×6GÑ6GÈ×I\ÑI\�xˆá˜%Ð5 &Ò5¨HÑ5ˆÙ˜%Ð5 &Ò5¨HÑ5ˆà×Ò˜ÑH¸ÐHÀÔHr:   c                ó|  € \         '       g   \        R 4      h\        V\        P                  4      '       d~   Ve   \        R4      hVe   \        R4      hVP                  4       P                  4       pVP                  \        P                  J d   VP                  4       pVP                  4       pTp	Mq\        P                  ! \        4      p
\        P                  V
\        P                  &   \        P                  ! W:V,          R7      p\        P                   ! W4VR7      p	V! V4      pV! V	4      P                  4       p\        V\        P"                  4      '       d‘    \        P$                  ! V4      pV	P                  \        P                  J d\   VP                  \        P                  J d>   VP                  \        P                  J d    VP)                  \        P                  4      pV P*                  ! W¼3/ VB  R#   \&         d(    \        P$                  ! TP                  4       4      p L¿i ; i)z1TEST_NUMPY must be True to use compare_with_numpyNz0device must be None when tensor_like is a Tensorz/dtype must be None when tensor_like is a Tensorr×  rM  )rÜ  rš   rY   rw   r   r¶  r@   r¦  Úbfloat16rª  r†  r'  Útorch_to_numpy_dtype_dictr,  r  rÞ  rU  rç  rÝ  r  r0  r;  )r  r+	  Únp_fnÚtensor_liker¨  r¦  r‡   Út_cpur´  r8  rZ  Ú	np_resultÚtorch_results   &&&&&&,      r;   Úcompare_with_numpyÚTestCase.compare_with_numpy„  s•  € ç‹zÜ Ð!TÓUÐUä�k¤5§<¡<×0Ò0ØÒ!Ü$Ð%WÓXÐXØÒ Ü$Ð%VÓWÐWØ×&Ñ&Ó(×,Ñ,Ó.ˆEØ�{‰{œeŸn™nÓ,ØŸ™›�Ø—‘“ˆAØ‰Aä—	’	Ô3Ó4ˆAÜ "§
¡
ˆAŒe�n‰nÑÜ—’˜¨e­HÔ5ˆAÜ—’˜[¸uÔEˆAá˜!“Hˆ	Ù “{—‘Ó(ˆô �i¤§¡×,Ò,ð?Ü!×,Ò,¨YÓ7�	ð
 �w‰wœ%Ÿ.™.Ó(¨\×-?Ñ-?Ä5Ç>Á>Ó-QÐV_×VeÑVeÔin×itÑitÓVtØ+Ÿ™¬u¯{©{Ó;�à×Ò˜Ñ;°FÔ;øô ô ?ô "×,Ò,¨Y¯^©^Ó-=Ó>’	ð?ús   Å%H	 È	/H;È:H;c                ó   <€ V ^8„  d   QhRR/# r  r1   )rS   r®   s   "€r;   rT   rh  ©  s   ø€ ÷ Dñ D¸ñ Dr:   c                ó*   € V P                   ! VR R/VB # )Úexact_dtypeF)r;  )r  r†   r‡   s   &*,r;   ÚassertEqualIgnoreTypeÚTestCase.assertEqualIgnoreType©  s   € ð ×Ò ÐC°5ÐC¸FÑCÐCr:   c                ó   <€ V ^8„  d   QhRR/# r  r1   )rS   r®   s   "€r;   rT   rh  ®  s   ø€ ÷ 	7ñ 	7Àñ 	7r:   c                ó6  € \        V\        4      '       g   \        P                  ! V4      V,          p\        V\        P                  4      '       g2   \        P                  ! V4      \        P
                  ! V4      ,          pV P                  ! W.VO5/ VB # )zHTests if tensor x equals to y, if y to be broadcast to x.shape.
        )rY   r   rw   Ú	ones_liker   rU  r;  )r  r,  r	  r†   r‡   s   &&&*,r;   ÚassertEqualBroadcastingÚ TestCase.assertEqualBroadcasting®  sk   € ô ˜!œX×&Ò&ä—’ Ó" QÕ&ˆAÜ˜!œUŸ\™\×*Ò*ä—’ Ó"¤U§\¢\°!£_Õ4ˆAØ×Ò Ð6 tÒ6¨vÑ6Ð6r:   r  r  Ú	equal_nanrC	  r*	  Úexact_layoutÚexact_strideÚexact_is_coalescedc                ó~   <€ V ^8„  d   QhRS[ S[S[ .S[ 3,          ,          R,          RS[R,          RS[R,          /# )rM   rÍ  Nr  r  )r­   r   rª  )rS   r®   s   "€r;   rT   rh  ¹  sM   ø€ ÷ [ñ [ñ ‘x¡ ¡s 
Õ+Õ+¨dÕ2ð	[ñ ˜$•,ð[ñ ˜$•,ñ[r:   c               ó  a€ R p\         ;QJ d    R W3 4       F  '       g   K   R M	  RM! R W3 4       4      '       d   R pV! V4      pV! V4      pMÅ\        V\        P                  4      '       dD   \        V\        4      '       d.   \        P
                  ! W!P                  VP                  R7      pMb\        V\        4      '       dM   \        V\        P                  4      '       d-   \        P
                  ! WP                  VP                  R7      p\        V\        P                  4      '       dB   VP                  '       d0   VP                  \        P                  8X  d   VP                  4       p\        V\        P                  4      '       dB   VP                  '       d0   VP                  \        P                  8X  d   VP                  4       p\        W4      w  r\        VV\        \        \         \"        \$        \&        \(        \*        \,        3	\        \.        \0        \2        \4        \        P6                  P8                  P:                  P<                  3\>        \@        \B        \D        3VV PF                  VV PH                  VVVV	V
VR7      pV'       d\   V.pVPK                  4       ^ ,          PM                  \        S\N        4      '       d   V PP                  '       d   V3R l4      hS4      hR# )Tc              3   óš   "  € T FA  p\        V\        P                  4      ;'       d    \        VP                  4      '       * x € KC  	  R # 5ir�   )rY   r,  rç  rÏ  r¦  )ró   rð  s   & r;   rô   Ú'TestCase.assertEqual.<locals>.<genexpr>Ð  s;   é € ð 
ÙjpÐafŒJ�uœbŸj™jÓ)×\Ð\Ô2OÐPU×P[ÑP[Ó2\Ô.\Ô\Ójpùs
   ‚%A¨#AFc                 ó˜   € \        V \        P                  \        P                  34      '       d   V P                  4       # \        V 4      # r�   )rY   rw   r   r,  rç  Útolistrg  ©rð  s   &r;   Úto_listÚ%TestCase.assertEqual.<locals>.to_listÓ  s3   € Ü)3°E¼E¿L¹LÌ"Ï*É*Ð;U×)VÒ)V�u—|‘|“~ÐgÔ\`ÐafÓ\gÐgr:   r)  )Ú
pair_typesÚsequence_typesÚmapping_typesr  rü  r  rþ  rK	  Úcheck_devicerÿ  Úcheck_layoutÚcheck_strideÚcheck_is_coalescedc                 ó   <€ V  R S 2# )r—  r1   )Úgenerated_msgrÍ  s   &€r;   r�   Ú&TestCase.assertEqual.<locals>.<lambda>  s   ø€ ¨-¨¸¸3¸%Ñ'@r:   N))rö  rY   rw   r   r   Ú	as_tensorr¦  r¨  Ú	is_nestedrˆ  rÝ  Úunbindr$   r'   r&   rã  rû  r  r#  rE  rI  rK  rM  r   r   r   r   r  r!	  ÚdatasetÚSubsetr   r   r   r   rw  rl  r¤  Úto_errorr­   ÚlongMessage)r  r,  r	  rÍ  r  r  rK	  rC	  r*	  rL	  rM	  rN	  Ú__tracebackhide__rV	  Úerror_metass   &&&f$$$$$$$$   r;   r;  ÚTestCase.assertEqual¹  s4  ø€ ð" !Ð÷ ‹3ñ 
ØklÑjpó
�3�3Š3ñ 
ØklÑjpó
÷ 
ò 
òhñ ˜“
ˆAÙ˜“
‰Aô ˜œ5Ÿ<™<×(Ò(¬Z¸¼8×-DÒ-DÜ—’ ¯©¸¿¹ÔB‰AÜ˜œ8×$Ò$¬°A´u·|±|×)DÒ)DÜ—’ ¯©¸¿¹ÔBˆAô �aœŸ™×&Ò&¨1¯;¯;¨;¸1¿8¹8ÄuÇ}Á}Ô;TØ—‘“
ˆAÜ�aœŸ™×&Ò&¨1¯;¯;¨;¸1¿8¹8ÄuÇ}Á}Ô;TØ—‘“
ˆAä-¨aÓ3‰ˆä+ØØäÜ"Ü!Ü!Ü ÜÜÜÜð
ô ÜÜÜÜÜ—‘× Ñ ×(Ñ(×/Ñ/ðô #¤J´¼zÐJØØŸ,™,ØØŸ.™.ØØ%Ø#Ø%Ø%Ø1ôA!
ˆ÷F à&˜-ˆKà—/‘/Ó# AÕ&×/Ñ/ô FPÐPSÔUX×EYÒEYÐ^b×^n×^nÐ^nÔ@ó	ð ð uxó	ð ñ	 r:   c                óZ   <€ V ^8„  d   QhRS[ R,          RS[R,          RS[R,          RR/# )rM   rÍ  Nr  r  rO   ©r­   rª  )rS   r®   s   "€r;   rT   rh    s>   ø€ ÷ Hñ H©¨d­
ð HÙ" T�\ðHÙ8=À½ðHØZ^ñHr:   c          	     ó®   € V P                  \        VR 7      ;_uu_ 4        V P                  ! WV3RVRV/VB  RRR4       R#   + '       g   i     R# ; i)rg  r  r  N)ÚassertRaisesrš   r;  )r  r,  r	  rÍ  r  r  r‡   s   &&&&$$,r;   ÚassertNotEqualÚTestCase.assertNotEqual  sF   € à×Ñœ~°3Ð×7Õ7Ø×Ò˜Q 3ÑG¨TÐG¸ÐGÀÒG÷ 8×7×7Ò7ús    AÁA	c                ó    <€ V ^8„  d   QhRS[ /# r«   r¬   )rS   r®   s   "€r;   rT   rh    s   ø€ ÷ 8ñ 8±#ñ 8r:   c                óT   <€ \        V4      '       d	   V! V4      # \        SV `	  W4      # r�   )rþ  rÞ  Ú_formatMessage)r  rÍ  ÚstandardMsgrß  s   &&&€r;   rt	  ÚTestCase._formatMessage  s'   ø€ ä�C�=Š=Ù�{Ó#Ð#Ü‰wÑ% cÓ7Ð7r:   c                ó   <€ V ^8„  d   QhRR/# r  r1   )rS   r®   s   "€r;   rT   rh  !  s   ø€ ÷ 3ñ 3¨Tñ 3r:   c                óê   € V P                  VP                  VP                  4       V P                  VP                  VP                  4       V P                  VP                  VP                  4       R # r�   )r;  r¨  r¦  Ú	is_sparse)r  r,  r	  s   &&&r;   ÚassertEqualTypeStringÚTestCase.assertEqualTypeString!  sJ   € à×Ñ˜Ÿ™ 1§8¡8Ô,Ø×Ñ˜Ÿ™ !§'¡'Ô*Ø×Ñ˜Ÿ™ a§k¡kÖ2r:   c                ó:   <€ V ^8„  d   QhRS[ RS[S[ ,          RR/# )rM   r7  ra  rO   N)r   r   )rS   r®   s   "€r;   rT   rh  '  s&   ø€ ÷ =ñ =¡#ð =±¹#µð =À4ñ =r:   c                ób   € V F  p\        V4      \        V4      8X  g   K   R # 	  \        R4      h)Nzobject not found in iterable)r  rš   )r  r7  ra  Úelems   &&& r;   ÚassertObjectInÚTestCase.assertObjectIn'  s-   € ÛˆDÜ�#‹wœ"˜T›(Ö"Úñ ô Ð;Ó<Ð<r:   c                óž   <€ V P                   '       d!   \        W4      p VP                  R W#4      Rp# \        SV `  ! V.VO5/ VB #   Rpi ; i)ro	  N)r‹  rO  ÚhandlerÞ  ro	  )r  Úexpected_exceptionr†   r‡   Úcontextrß  s   &&*, €r;   ro	  ÚTestCase.assertRaises/  s[   ø€ Ø×-×-Ð-ä<Ð=OÓVð ðØ—~‘~ n°dÓCð ‘ä‘7Ò'Ð(:ÐL¸TÒLÀVÑLÐLøð ‘ús    A ÁAc                ó   <€ \        V R 4      '       d)   V P                  \        9  d   V P                  R8w  d   RpV P                  '       d   \	        WV4      pVP                  RW44      # \        SV `  ! W.VO5/ VB # )rW  rB   rK   ÚassertRaisesRegex)r&  rW  ÚNATIVE_DEVICESr‹  rO  r‚	  rÞ  r‡	  )r  rƒ	  Úexpected_regexr†   r‡   r„	  rß  s   &&&*, €r;   r‡	  ÚTestCase.assertRaisesRegex=  s}   ø€ ô �4˜×'Ò'¨D×,<Ñ,<ÄNÔ,RÐW[×WgÑWgÐkpÔWpàˆNà×-×-Ð-ÜBØ"¨.ó:ˆGà—>‘>Ð"5°tÓDÐDä‘7Ò,Ð-?ÐaÐRVÒaÐZ`ÑaÐar:   c                ó¨  a€ R oV3R lp\         P                  ! 4       p\         P                  ! 4         \        P                  P                  RV4      ;_uu_ 4        V! V/ VB  R R R 4       V'       d   \         P                  ! 4        T P                  S4       R #   + '       g   i     L@; i  T'       d   \         P                  ! 4        i i ; i)Nc                 ó   <€ V oR # r�   r1   )Ú
unraisableÚraiseds   &€r;   Úrecord_unraisableÚ6TestCase.assertNoUnraisable.<locals>.record_unraisableW  s   ø€ àŠFr:   zsys.unraisablehook)rø   Ú	isenabledr=  rQ   r�  rž  r/  ÚassertIsNone)r  rþ  r†   r‡   r�	  rG  rŽ	  s   &&*,  @r;   ÚassertNoUnraisableÚTestCase.assertNoUnraisableT  sŽ   ø€ Øˆõ	 ô �|Š|‹~ˆÜ
�
Š
Œð	Ü—‘×$Ñ$Ð%9Ð;L×MÕMÙ˜$Ð) &Ò)÷ N÷ Ü—	’	”à×Ñ˜&Ö!÷ N×Mû÷ Ü—	’	•ð ús#   µ(B1 Á	BÁ&B1 ÂB.	Â)B1 Â1 Cc                óÆ   € R pRV9   d   VR,          pVR  V! V/ VB  T P                  RR7       R #   T d'   pT P                  \        T4      T4        R p?R # R p?ii ; i)NÚsubnamer»  rg  )ÚassertExpectedr­   r½  )r  ru  rþ  r†   r‡   r–	  rq   s   &&&*,  r;   ÚassertExpectedRaisesÚTestCase.assertExpectedRaisesk  sm   € ØˆØ˜ÔØ˜YÕ'ˆGØ�yÐ!ð	Ù�dÐ%˜fÒ%ð
 	�	‰	Ð6ˆ	Ö7øð	 ô 	Ø×Ñ¤ A£¨Ô0Ýûð	ús   —3 ³A ºAÁA c           	     óR  € \         P                  ! RR7      ;_uu_ 4       p\         P                  ! R4       \        R4      ;_uu_ 4        V! 4        RRR4       V P	                  \        V4      ^ 8H  V4       RRR4       R#   + '       g   i     L8; i  + '       g   i     R# ; i)z4
Test if :attr:`callable` does not raise a warning.
T©ÚrecordÚalwaysN)r$  r"  r#  r[  r	  rÈ  )r  rþ  rÍ  Úwss   &&& r;   ÚassertNotWarnÚTestCase.assertNotWarnx  sk   € ô ×$Ò$¨D×1Õ1°RÜ×!Ò! (Ô+Ü(¨×.Õ.Ù”
÷ /à�O‰OœC ›G q™L¨#Ô.÷	 2Ñ1ç.×.ú÷ 2×1Ð1ús#    *BÁ
B	Á&BÂBÂBÂB&	c              #  ó0  aa"  € \         P                  ! V4      o\        P                  ! RR7      ;_uu_ 4       p\        P                  ! R4       \        R4      ;_uu_ 4        Rx € RRR4       \        V4      ^ 8X  d   V P                  R4       T P                  \        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      4       T P                  \        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      S R	V Uu. uF*  p\        VP                  4      SJ g   K  VP                  NK,  	  up 24       RRR4       R#   + '       g   i     EL	; iu upi   + '       g   i     R# ; i5i)
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
Tr›	  r�	  Nzno warning caughtc              3   óR   <"  € T F  p\        VP                  4      SJ x € K  	  R # 5ir�   )rP   rò  )ró   ÚwÚcategorys   & €r;   rô   Ú0TestCase.assertWarnsOnceRegex.<locals>.<genexpr>‘  s   øé € ÐHÁRÀ¤ Q§Y¡Y£°8Õ ;ÃRùs   ƒ$'Fc              3   óx   <"  € T F/  p\         P                  ! S\        VP                  4      4      x € K1  	  R # 5ir�   )r˜  r  r­   rò  )ró   r£	  rð  s   & €r;   rô   r¥	  “  s'   øé € ÐB¹r¸!”B—H’H˜W¤c¨!¯)©)£n×5Ð5»rùs   ƒ7:rÓ  )r˜  r¡  r$  r"  r#  r[  rÈ  r½  r	  rö  rP   rò  )r  r¤	  Úregexrž	  r£	  rð  s   &f&  @r;   ÚassertWarnsOnceRegexÚTestCase.assertWarnsOnceRegex‚  s	  ùé € ô —*’*˜UÓ#ˆÜ×$Ò$¨D×1Õ1°RÜ×!Ò! (Ô+Ü(¨×.Õ.Û÷ /ä�2‹w˜!Œ|Ø—	‘	Ð-Ô.Ø�O‰OŸC›CÔHÁRÓHŸCŸCšCÔHÁRÓHÓHÔIØ�O‰Oß“ÔB¹rÓB——’ÔB¹rÓBÓBØ�)˜2±"ÓT±"¨Q¼¸Q¿Y¹Y»È8Ð8Sœy˜qŸyœy±"ÑTÐUÐVôX÷ 2Ñ1ç.×.Ð.üò U÷ 2×1Ð1üs^   „6Fº*FÁ$E)	Á)>FÂ(FÂ?1FÃ1FÄFÄ&E=ÅE=Å	FÅ
FÅ)E:Å4FÆF	Æ	Fc                ó.  aa
aa€ \        S\        4      '       g   \        R4      hR pV P                  P                  pV! V P                  4       VR,           4      o\        P                  P                  \        P                  V,          P                  4      p\        P                  P                  \        P                  P                  V4      RS4      o
RoV'       d   S
RV,           ,          o
RV R2oS
R	,          o
R
pV
VVV3R lp \        S
4      ;_uu_ 4       pVP                  4       pR
R
R
4       \.        '       d1   \0        P2                  ! RRT4      p\0        P2                  ! RRS4      oTP5                  RR\6        P8                  P:                   R24      p\&        P(                  '       d   TS8w  d	   T! R4      # R
# \=        T R4      '       d   T P?                  TS4       R
# T PA                  ST4       R
#   + '       g   i     LÛ; i  \          dr   p	T	P"                  \"        P$                  8w  d   h \&        P(                  '       d   T! R4      u R
p	?	# \+        RS S RS R\,        P                   RS R2
4      R
hR
p	?	ii ; i)al  
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                 óP   € V P                  V4      '       d   V \        V4      R  # V # r�   )r  rÈ  )ÚtextÚprefixs   &&r;   Úremove_prefixÚ.TestCase.assertExpected.<locals>.remove_prefix¤  s'   € Ø�‰˜v×&Ò&ØœC ›K˜LÐ)Ð)ØˆKr:   rW   r´  rK   r§  rz  rx  z.expectNc           	      óè   <€ \        R V  RS S RS 24       \        SR4      ;_uu_ 4       p\        P                  ! RRS4      pVP	                  V4       RRR4       R#   + '       g   i     R# ; i)z
Accepting rÖ  ú:

r£	  z(producer_version): "[0-9.]*"z\1: "CURRENT_VERSION"N)rg   ræ   r˜  rÍ  r½  )Úupdate_typerM  Ús_tagÚexpected_fileÚ	munged_idr¡  Úsubname_outputs   &  €€€€r;   Úaccept_outputÚ.TestCase.assertExpected.<locals>.accept_output»  sd   ø€ Ü�J˜{˜m¨5°°¸NÐ;KÈ5ÐQRÐPSÐTÔUÜ�m S×)Ô)¨QäŸšÐ?Ø7¸ó<�à—‘˜”÷	 *×)×)Ò)ús   ¬*A Á A1	r  zI got this output for r±	  zC

No expect file exists; to accept the current output, run:
python rd   z	 --acceptzCppOp\[(.+?)\]zCppOp[]z#producer_version: "CURRENT_VERSION"zproducer_version: "rÅ  zupdated outputÚassertMultiLineEqual)!rY   r­   rZ   rß  r3   r  r–   rá   Úrealpathr8  rœ  r  rh   Údirnameræ   Úreadr	  ÚerrnoÚENOENTrW  r0  ro  r1  rH  r˜  rÍ  r«  rw   ÚonnxÚproducer_versionr&  r¹	  r;  )r  r¡  r–	  r®	  Ú	module_idÚ	test_filerí  r·	  rM  rq   r´	  rµ	  r¶	  s   &f&       @@@r;   r—	  ÚTestCase.assertExpected–  s3  û€ ô ˜!œ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Ò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úsH   ÄH Ä!HÄ2H ÈH	ÈH ÈH ÈJÈ#5JÉJÉ JÉ&)JÊJc                óX   € \         P                  ! R RV4      pV P                  W4       R# )z__torch__[^ ]+rK   N)r˜  rÍ  r—	  )r  r¡  r–	  s   &&&r;   ÚassertExpectedStripMangledÚ#TestCase.assertExpectedStripMangledæ  s#   € Ü�FŠFÐ$ b¨!Ó,ˆØ×Ñ˜AÖ'r:   c                ó  € Ve   Ve   \        R4      hW8¼  d   R# W!,
          pVe   We8:  d   R# V RV RV R2pM#Vf   ^p\        Wc4      ^ 8X  d   R# V RV RV R2pV P                  WG4      pV P                  V4      h)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 deltaz places)rZ   Úroundrt	  r<  )r  ÚfirstÚsecondÚplacesrÍ  ÚdeltaÚdiffru	  s   &&&&&&  r;   ÚassertGreaterAlmostEqualÚ!TestCase.assertGreaterAlmostEqualê  s«   € ð Ò Ò!3ÜÐ>Ó?Ð?àŒ?Ùà�~ˆØÒØŒ}Ùà"˜GÐ#AÀ&ÀÈÐRWÐQXÐX^Ð_‰KàŠ~Ø�ä�TÓ" aÔ'Ùà"˜GÐ#AÀ&ÀÈÐRXÐQYÐY`ÐaˆKà×!Ñ! #Ó3ˆØ×#Ñ# CÓ(Ð(r:   c                ó  € VP                   P                   Uu. uF+  pVP                  R 8X  g   K  VP                  R8X  g   K)  VNK-  	  ppV P	                  V4       V FX  pVP
                   Uu/ uF'  qwP                  VP                  P                  4       bK)  	  ppVP                  R4      V8X  g   KX   M	  V P                  XR,          V4       V P                  VP                  RR4      V4       R# u upi u upi )ÚATenzorg.pytorch.atenre  Úoverload_namerK   N)ÚgraphÚnodeÚop_typeÚdomainr	  Ú	attributere   r¡  Údecoder  r;  )	r  Ú
onnx_modelre  rÒ	  ri  Úall_aten_nodesÚopÚattrÚattrss	   &&&&     r;   ÚassertAtenOpÚTestCase.assertAtenOp  sÞ   € Ø%/×%5Ñ%5×%:Ò%:ó UÑ%: ØŸY™Y¨&Ñ0ô Ø56·X±XÐASÑ5S÷ ˜!Ñ%:ˆð Uà�‰˜Ô'ã ˆBØ<>¿LºLÓI¹L°D—Y‘Y §¡§¡£Ò/¹LˆEÐIØ�y‰y˜Ó$¨Ö0Ùñ !ð
 	×Ñ˜˜zÕ*¨HÔ5Ø×Ñ˜Ÿ™ ?°BÓ7¸ÖGùòUùò
 Js   ™C8±C8ÁC8Á0-C=c                ó  € VR,           p\        R4      ;_uu_ 4        V'       d2   V P                  \        VRR7      ;_uu_ 4        V! 4        RRR4       M V! 4        RRR4       \        RRR7      ;_uu_ 4        V'       d0   V P                  \        V4      ;_uu_ 4        V! 4        RRR4       M—\        P                  ! RR	7      ;_uu_ 4       p\        P                  ! R
4       V! 4        V FL  p\        V\        4      '       g   K  V P                  \        P                  ! V\        V4      4      RJ 4       KN  	  RRR4       RRR4       R#   + '       g   i     EL; i  \         d?   pR\        T4      9   d)   T P	                  R\        T4      ,           R,           4       h Rp?ii ; i  + '       g   i     EL_; i  + '       g   i     LŽ; i  + '       g   i     L¡; i  + '       g   i     R# ; i)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 in
      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 raisedrg  Nz,does not have a deterministic implementationrÅ  rƒ  r›	  r�	  zEdid not expect non-deterministic error message, but got one anyway: ")rv  r‡	  ro  r­   r½  ÚassertWarnsRegexrG  r$  r"  r#  rY   r	  r˜  r»  )r  rü   Úcaller_nameÚshould_alertÚalert_messagerq   r£	  rê   s   &&&&    r;   Úcheck_nondeterministic_alertÚ%TestCase.check_nondeterministic_alert  s•  € ð" $Ð&bÕbˆô   ×%Õ%ßØ×+Ñ+Ü$Ø%ØWð ,÷ Yõ Yñ ”D÷	Yð YðÙ”D÷ &ô,   °×5Ö5ßØ×*Ñ*Ü#Ø%÷'õ 'ñ ”D÷'ð 'ô
 ×,Ò,°D×9Õ9¸QÜ×)Ò)¨(Ô3Ù”DÛ#$˜Ü% g¬{×;Ô;Ø ŸO™O¬B¯IªI°mÄSÈÃ\Ó,RÐVZÐ,ZÖ[ñ $%÷ :÷ 6Ñ5÷)Y÷ Yð Yûô $ô ØEÌÈQËÔOØŸ	™	ð6Ü8;¸A»õ?ØADõEôFð ûðú÷ &×%Ð%ú÷0'÷ 'ú÷
 :×9ú÷ 6×5Ð5úsƒ   �)F5ÁE	Á	F5ÁE)Á<'G/Â#G		Â+(G/Ã6G	Ä5G	ÅG/ÅE&Å 	F5Å)F2Å49F-Æ-F2Æ2F5Æ5G	Ç	GÇG/ÇG,Ç'G/Ç/H 	c                óø   € ^ RI pVP                  ! \        P                  RV .VP                  VP                  VR7      ;_uu_ 4       pVP                  4       w  rEWE3uuRRR4       #   + '       g   i     R# ; i)ru   Nú-c)rp  rq  ro  )rN  rs  r8  r(  ÚPIPEÚcommunicate)Úcodero  rN  ri  rp  rq  s   &&    r;   Úrun_process_no_exceptionÚ!TestCase.run_process_no_exceptionN  se   € ãà×ÒÜ�^‰^˜T 4Ð(Ø—?‘?Ø—?‘?Ø÷	
õ 
ð
 Ø Ÿ}™}›ÑˆVØÐ#÷
÷ 
÷ 
ó 
ús   ÁA(Á(A9	c                óâ   € \         P                  P                  4       pR VR&   VP                  RR4       VP                  RR4       \        P                  WR7      w  r#VP                  R4      # )rŒ   ÚPYTORCH_API_USAGE_STDERRr¼   NÚTEST_SHOWLOCALS)ro  Úascii)r–   r  r'  r¤  rR   rì	  rØ	  )rë	  ro  Ú_stdoutrq  s   &   r;   ÚrunWithPytorchAPIUsageStderrÚ%TestCase.runWithPytorchAPIUsageStderr\  s`   € ä�j‰j�o‰oÓˆØ*-ˆÐ&Ñ'ð 	�‰��dÔØ�‰Ð! 4Ô(Ü"×;Ñ;¸DÐ;ÓJ‰ˆØ�}‰}˜WÓ%Ð%r:   c                óR   <€ V ^8„  d   QhRS[ P                  RS[RS[R,          RR/# )rM   ry  Úimport_stringÚexpected_failure_messageNrO   )Úpathlibr   r­   )rS   r®   s   "€r;   rT   rh  g  sA   ø€ ÷ Gñ Gá�l‰lðGñ ðGñ #&¨¥*ð	Gð
 
ñGr:   c           
     óh  € RV RV R2pV'       d+   V P                  \        \        P                  ! V4      4      M\        P
                  ! 4       pT;_uu_ 4         \        P                  ! \        P                  RV.\        P                  P                  \        P                  P                  \        4      4      \        P                  R7        RRR4       R#   \        P                    d+   p\        TP"                  P%                  R4      4      RhRp?ii ; i  + '       g   i     R# ; i)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
    expected_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è	  )rn  rq  r@  N)r‡	  ro  r˜  Úescaper  r  rN  Úcheck_outputr8  r(  r–   rá   r»	  rº	  r  ÚSTDOUTÚCalledProcessErrorr  rØ	  )r  ry  rö	  r÷	  ÚscriptÚcmrq   s   &&&&   r;   Ú_attempt_load_from_subprocessÚ&TestCase._attempt_load_from_subprocessg  sã   € ð  !  ¨}¸T¸FÐBWÐXˆ÷ (ð ×"Ñ"¤<´·²Ð;SÓ1TÔUÜ-7×-CÒ-CÓ-Eð 	÷ ŠRð	GÜ×'Ò'Ü—^‘^ T¨6Ð2ô Ÿ™Ÿ™¬¯©×(8Ñ(8¼Ó(BÓCÜ%×,Ñ,ö÷ ‰Røô ×0Ñ0ô GÜ" 1§8¡8§?¡?°7Ó#;Ó<À$ÐFûðGú÷ �RˆRús+   ÁD ÁA6CÃDÃ3%DÄDÄD Ä D1	c                óJ   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[;R&   S[;R&   # )rM   rk  rv  r0  r4  )rª  r¿   rÕ   )rS   r®   s   "€r;   rT   rh    s9   ø‡ ‚ ñ Ññ ñ Ññ ñ #'Ñ.ñ ñ *-Ñ0ò r:   )r.  rk  r8  r2  r4  r6  rv  )r|  r|  r�   )ru   FFr˜  r1   )NNNNNTTTTTFTN)rK   )NNNré  )Ur2   r3   r4   r5   rk  rv  r0  r4  rw   rê  Ú_TorchFunctionStateÚENABLEDr6  r8  ÚmaxsizeÚ_diffThresholdÚmaxDiffrd  Úpropertyrl  Úsetterrw  r  r  r‹  r8  r‰  rŠ  r¶   r™  rŠ  r¤  r­  r°  r³  r¿  rÅ  rË  rˆ  rŒ  rÐ  rÜ  rß  rã  r#  r  r9  rJ  rm  r–  r›  rŸ  r¤  r©  r¿  r	  r'	  r5	  r?	  rD	  rI	  r;  rp	  rt	  rz	  r	  ro	  r‡	  r“	  r˜	  rŸ	  r   r¨	  r—	  rÅ	  rÎ	  rÞ	  rå	  rì	  ró	  r 
  r·   r9   r¸   rú  rû  s   @@r;   rR   rR     s.  ù‡ € ð €JØ€Hð */Ð à/0Ð'Ø!&§¡×!=Ñ!=×!EÑ!EÐð —[‘[€NØ€Gòð ÷ó ðð ×Ñ÷ó ðð ÷ó ðð ‡^�^÷ó ðð "'ÐØ"'Ðð %*Ð!÷3Kôj/ò)ð ñó ðò&ò*ò)ò
)÷rð8Ø23ð8ØEIð8ØVZô8÷1÷
3ò

ZòVò/òSòCòF÷lô^ò?ò8<ð| ðS.Ø48óS.ó ðS.ðj5lÐdfð 5lÐstô 5lðnyÐVWô yðpÐVWô pð@Ðabô @ð@Ðabô @ò<ô:Z9òx
òIô#<÷JDð D÷
	7ð 	7ñ[ð "&ð[ð "&ð[ð ð[ð ð[ð ð[ð ð[ð ð[ð  %÷[ó [ñzHØ,0ðHØGK÷Hó H÷
8ó 8÷3ð 3÷=ð =õ
Mõbò."ò.8ô/ð óXó ðXô&N.ô`(ô)ô<Hô6\ðr ó
$ó ð
$ð ñ&ó ð&÷Gò G÷g2 … r:   rR   c                   ó   € ] tR tRtRtR# )ÚTestCaseBasei‰  r1   Nr…  r1   r:   r;   r
  r
  ‰  s   † ó
 	r:   r
  c           	      óf  € ^ RI Hp ^ RIHpHp \
        P                  P                  V! V 4      ^,          4      p\        \
        P                  P                  \
        P                  P                  \        4      R4      4      p\
        P                  P                  We4      p\
        P                  P                  V4      '       d   V#  VP                  V ^R7      ;_uu_ 4       p\        Yq'       d   RMR4      ;_uu_ 4       p	VP                  4       p
V	P!                  V
4       RRR4       RRR4       V#   + '       g   i     L; i  + '       g   i     T# ; i  TP"                   d@   pRT  R	2p\$        P&                  ! T\(        ^R
7       \*        P,                  ! T4      ThRp?ii ; i)ru   )Úurlsplit)Úrequestrú  r!	  r`  Úwbr£	  Nzcould not download test file 'r”   rý  )Úurllib.parser
  Úurllibr
  rú  r–   rá   ri  r   rh   r»	  r  r"  Úurlopenræ   r¼	  r½  ÚURLErrorr$  r%  ÚRuntimeWarningrQ   r  )ÚurlÚbinaryr
  r
  rú  rã   Údata_dirrá   Úf1Úf2r!	  rq   rÍ  s   &&           r;   Údownload_filer
  ‘  s%  € Ý%ß%ä�w‰w×Ñ¡¨£¨aÕ 0Ó1€HÜ ¤§¡§¡¬b¯g©g¯o©o¼hÓ.GÈÓ!PÓQ€HÜ�7‰7�<‰<˜Ó+€Dä	‡w�w‡~�~�d×ÒØˆð,Ø�_‰_˜S¨"ˆ_×-Ô-°´T¸$ÎÁÐTW×5XÔ5XÐ\^Ø—7‘7“9ˆDØ�H‰H�TŒN÷ 6Y×-ð ˆ÷ 6Y×5Xú×-Ö-ð ˆûØ�>‰>ô ,Ø.¨s¨e°1Ð5ˆÜ�Š�cœ>°aÕ8Ü×Ò Ó$¨!Ð+ûð,úsN   ÃE  Ã'EÄ"D9	Ä'EÄ/	E  Ä9E	ÅEÅE	ÅE  ÅE  Å F0Å1:F+Æ+F0c                 óp  € \        \        P                  ! \        P                  \        P                  4      4      ;_uu_ 4       p V P	                  \        P
                  \        P                  ^4       V P                  R4       V P                  4       w  rVuuRRR4       #   + '       g   i     R# ; i)aj  
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 conjunction 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
N)Ú	localhostru   )	r   ÚsocketÚAF_INETÚSOCK_STREAMÚ
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRÚbindÚgetsockname)ÚsockrÁ   Úports      r;   Úfind_free_portr'
  ¥  sr   € ô 
”—’œvŸ~™~¬v×/AÑ/AÓB×	CÔ	CÀtØ�‰œ×)Ñ)¬6×+>Ñ+>ÀÔBØ�	‰	Ð"Ô#Ø×"Ñ"Ó$‰ˆØ÷	 
D×	C×	CÓ	Cús   ÁAB$Â$B5	zaddress already in usezconnect() timed out.c                ó^   a a€ S f   \        \        SR7      # \        S 4      VV 3R l4       pV# )zqReruns a test if the test returns a RuntimeError and the exception
contains one of the strings in connect_errors.)Úconnect_errorsc            	      ó~  <a€ ^
pTp  S! V / VB #   \          d¡   o\        ;QJ d    T3R lS 4       F  '       g   K   RM	  RM! T3R lS 4       4      '       d[   T^,          pT^ 8X  d   \        RT R\        S4       24      Sh\        P                  ! \
        P
                  ! 4       4        Ro>K¯  h Ro>ii ; i)é
   Tc              3   ó†   <"  € T F6  q\        S4      9   ;'       g    V\        S4      P                  4       9   x € K8  	  R # 5ir�   )r­   rX  )ró   Úcerú  s   & €r;   rô   Ú=retry_on_connect_failures.<locals>.wrapper.<locals>.<genexpr>Ç  s5   øé € Ð]ÉnÈœS ›ZÑ'×CÐC¨2´°U³×1AÑ1AÓ1CÑ+CÔCËnùs
   ƒAœ%AFzFailing after z retries with error: N)ro  rö  r­   ÚtimeÚsleepr?  )r†   r‡   Ú	n_retriesÚtries_remainingrú  r)
  r  s   *,  @€€r;   rý   Ú*retry_on_connect_failures.<locals>.wrapper¿  s¤   ù€ àˆ	Ø#ˆØð	Ù˜TÐ, VÑ,Ð,øÜô ß“3Ô]ÉnÓ]—3—3’3Ô]ÉnÓ]×]Ò]Ø# qÕ(�OØ&¨!Ô+Ü*¨^¸I¸;ÐF[Ô\_Ð`eÓ\fÐ[gÐ+hÓiÐotÐtÜ—J’JœvŸ}š}›Ô/ÝØûðús&   ‰ ‘B<œB7¾B7ÁAB7Â6B7Â7B<)r	   Úretry_on_connect_failuresr
   )r  r)
  rý   s   ff r;   r4
  r4
  ¸  s5   ù€ ð ‚|ÜÔ0ÀÔPÐPä
ˆ4ƒ[õó ðð €Nr:   c                 ó    a aaa€ V VVV3R  lpV# )c                 ó:   <a € \        S 4      VVV VV3R  l4       pV# )c            	      óJ  <€ S
Sr2V^8”  d
    S! V / VB #  S! V / VB #   S d?   pT RTR R2p\        T4       \        P                  ! T4       T^,          p Rp?KY  Rp?ii ; i  S d6   p\        P                  ! RS
 R\        T4       24      S	'       d   ThThRp?ii ; i)r   z, Retrying in rZ  z seconds...NzSkipping after z consecutive )rg   r/
  r0
  rQ   r  r­   )r†   r‡   ÚmtriesÚmdelayrq   rÍ  ÚExceptionToCheckÚdelayrM  Úskip_after_retriesÚtriess   *,    €€€€€r;   Úf_retryÚ*retry.<locals>.deco_retry.<locals>.f_retryÔ  sÀ   ø€ à" E�FØ˜1”*ð Ù˜dÐ- fÑ-Ð-ð|Ù˜$Ð) &Ñ)Ð)øð (ô  Ø˜C˜~¨f°Q¨Z°{ÐC�CÜ˜#”JÜ—J’J˜vÔ&Ø˜a•K–Fûð	 ûð $ô |Ü×'Ò'¨/¸%¸ÀÌcÐRSËfÈXÐ(VÓW×btÐ]^Ð{Ðz{Ð{ûð|ús+   � –A& žA#¥3AÁA#Á&B"Á-0BÂB"r†  )rM  r>
  r:
  r;
  r<
  r=
  s   f €€€€r;   Ú
deco_retryÚretry.<locals>.deco_retryÓ  s(   ù€ Ü	ˆq‹÷	|ð 	|ó 
ð	|ð ˆr:   r1   )r:
  r=
  r;
  r<
  r@
  s   ffff r;   ÚretryrB
  Ò  s   û€ ÷ð ð" Ðr:   c                 ód  € W8”  d   \        R V RV  24      h\        P                  ! W W#R7      p\        P                  P	                  VRR7      w  rVp\        V 4       F"  pW�8¼  d   ^ Wh&   K  Wh,          ^ 8X  g   K  ^Wh&   K$  	  WVP                  V4      P                  R4      ,          V,          # )zrank must be <= l, got rank=z, l=r)  F©Úfull_matricesr‡  )rš   rw   ÚrandnÚlinalgÚsvdr’  r0  r°  )	ÚlÚrankr¦  r¨  ÚAÚur¡  Úvhr-  s	   &&&&     r;   Úrandom_square_matrix_of_rankrN
  ë  sš   € Ø„xÜÐ;¸D¸6ÀÀaÀSÐIÓJÐJÜ�Š�A Ô5€AÜ�|‰|×Ñ °ÐÓ7�H€Aˆ"Ü�1ŽXˆØŒ9ØˆA‹DØ�T�QŽYØˆA‹Dñ	 ð
 —‘�U“×%Ñ% bÓ)Õ)¨RÕ/Ð/r:   r   ç      ð?Úsigmagü©ñÒMbP?c                óÂ  € \         P                  \         P                  \         P                  \         P                  \         P                  \         P                  \         P                  \         P                  /p\         P
                  ! W@VR7      pVP                  R	4      pVP                  R
4      p\         P                  P                  VRR7      w  ršp\         P                  ! VRR	 \        Wx4      3,           RWP,          RV/ V,          V,           P                  R
RR7      P                  P                  V 4      pWœP                  R	4      ,          V,          # )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.
r)  FrD
  Nr¦  r¨  T)Ú
descendingr‡  r!  )rw   rª  ÚdoubleÚcfloatÚcdoubler®  r5  rG
  rH
  rF
  Úminr~  r³  r0  r°  )r¦  r¨  r   rP
  rÏ  Úprimitive_dtyper,  rO  rN  rL
  rÁ   rM
  r¡  s   $$$$*        r;   Úrandom_well_conditioned_matrixrX
  ÷  sô   € ô 	�‰”U—[‘[Ü�‰”e—l‘lÜ�‰”e—k‘kÜ�‰”u—|‘|ð	€Oô 	�
Š
�5¨fÔ5€AØ	�‰ˆr‹
€AØ	�‰ˆr‹
€AÜ�|‰|×Ñ °ÐÓ7�H€Aˆ"Ü	�Š�u˜S˜b�z¤S¨£Y LÕ0Ð	_¸Õ9OÐ	_ÐX^Ñ	_ÐbgÕ	gÐjnÕ	nß	‰ˆb˜TˆÓ	"§6¡6¯"©"¨U«)ð à—‘˜B“Õ 2Õ%Ð%r:   c                 óÊ  € V P                  4       '       g   V # V P                  P                  '       g   V P                  P                  '       d   \        P
                  pM$V P                  \        P                  8X  d   R pM^pV P                  V P                  R,           4      pWR&   V P                  4       VR&   VR,          pVP                  V P                  4       V# )Tr	  ).ru   ).r   )r	  r¦  Úis_floating_pointÚ
is_complexrX  Únanrw   r¿   Ú	new_emptyrÏ  r¶  Úrequires_grad_r1  )r8  r§   r,  s   &  r;   Únoncontiguous_liker_
    s¤   € à�?‰?×ÒØˆð 	‡w�w× × Ð  A§G¡G×$6×$6Ð$6Ü—‘‰Ø	
�‰”E—J‘JÔ	Ø‰àˆà�[‰[˜Ÿ™ 4�Ó(€FØˆ6�NØ—X‘X“Z€Fˆ6�NØ�F�^€FØ
×Ñ˜!Ÿ/™/Ô*Ø€Mr:   c                 óì   € VP                  R \        P                  4      pVP                  RR4      p\        P                  ! WV 3,           R VRV/ pWUP                  ,           P                  ^4      pV# ©r¦  r¨  r@   )r  rw   rS
  rF
  ÚmTÚdiv_©rI
  Úbatchesr‡   r¦  r¨  rK
  s   &*,   r;   Úrandom_symmetric_matrixrf
  &  ó^   € Ø�J‰J�w¤§¡Ó-€EØ�Z‰Z˜ %Ó(€FÜ�Š�g A Õ&ÐD¨uÐD¸VÑD€AØ	
�T‰T��‰˜Ó€AØ€Hr:   c                 óÊ   € VR,          VR,          8w  d    \        RVR,           RVR,           24      h\        W VR7      pW3P                  ,           P                  ^4      pV# )r   ú&expected square matrix, got shape[-1]=ú != shape[-2]=rM  r!  r‡  )rš   r#   rb
  rc
  )r¨  r¦  rÏ  r8  s   $$* r;   Úmake_symmetric_matricesrk
  /  s]   € ØˆR…y�E˜"•IÔÜÐEÀeÈBÅiÀ[ÐP^Ð_dÐegÕ_hÐ^iÐjÓkÐkÜ�E°Ô6€AØ	
�T‰T��‰˜Ó€AØ€Hr:   c                 óì   € VP                  R \        P                  4      pVP                  RR4      p\        P                  ! WV 3,           R VRV/ pWUP                  ,           P                  ^4      pV# ra
  )r  rw   rS
  rF
  ÚmHrc
  rd
  s   &*,   r;   Úrandom_hermitian_matrixrn
  6  rg
  r:   c                óÊ   € VP                  R\        P                  4      pVP                  RR4      p\        P                  ! WV 3,           RVRV/ pWUP                  ,          # )aC  
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)
r¦  r¨  r@   )r  rw   rS
  rF
  rb
  rd
  s   &*,   r;   Úrandom_symmetric_psd_matrixrp
  >  sR   € ð �J‰J�w¤§¡Ó-€EØ�Z‰Z˜ %Ó(€FÜ�Š�g A Õ&ÐD¨uÐD¸VÑD€AØ�t‰t�8€Or:   r¦  r¨  c               óf   € \         P                  ! W0V 3,           RVRV/ pWDP                  ,          # )aC  
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)
r¦  r¨  )rw   rF
  rm
  ©Úmatrix_sizer¦  r¨  Ú
batch_dimsrK
  s   &$$* r;   Úrandom_hermitian_psd_matrixru
  L  s0   € ô 	�Š�j°Ð#=Õ=Ð[ÀeÐ[ÐTZÑ[€AØ�t‰t�8€Or:   c                 ó.  € VP                  R \        P                  4      pVP                  RR4      p\        P                  ! WV 3,           R VRV/ p\        P                  ! WUP
                  4      \        P                  ! WVR7      R,          ,           # )r¦  r¨  r@   r)  çñhãˆµøä>)r  rw   rS
  rF
  Úmatmulrb
  Úeye)rs
  rt
  r‡   r¦  r¨  rK
  s   &*,   r;   Úrandom_symmetric_pd_matrixrz
  Y  s}   € Ø�J‰J�w¤§¡Ó-€EØ�Z‰Z˜ %Ó(€FÜ�Š�j°Ð#=Õ=ð 	0Øð	0Ø(.ñ	0€Aä�<Š<˜Ÿ4™4Ó Ü
�)Š)�K°VÔ
<¸tÕ
CõDð Dr:   c                 ó  € VR,          VR,          8w  d    \        RVR,           RVR,           24      h\        W VR7      p\        P                  ! VR,          WR7      R,          pW3P                  ,          V,           # )r   ri
  rj
  rM  rw
  r!  r‡  )rš   r#   rw   ry
  rb
  )r¨  r¦  rÏ  r8  r-  s   $$*  r;   Úmake_symmetric_pd_matricesr|
  d  sm   € ØˆR…y�E˜"•IÔÜÐEÀeÈBÅiÀ[ÐP^Ð_dÐegÕ_hÐ^iÐjÓkÐkÜ�E°Ô6€AÜ�	Š	�%˜•) FÔ8¸4Õ?€AØ�t‰t�8�a�<Ðr:   c               ó    € \         P                  ! W0V 3,           RVRV/ pWDP                  ,          \         P                  ! WVR7      ,           # )a=  
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)
r¦  r¨  r)  )rw   rF
  rm
  ry
  rr
  s   &$$* r;   Úrandom_hermitian_pd_matrixr~
  k  sH   € ô 	�Š�j°Ð#=Õ=ð 	0Øð	0Ø(.ñ	0€Aà�t‰t�8”e—i’i ÀÔHÕHÐHr:   r1  c           	      ó¤  € \         P                  ! 4       ;_uu_ 4        \        W0VR 7      p\         P                  P	                  VRR7      w  rVpVP
                  P                  '       d   VP                  P
                  MVP
                  p\        VR,          VR,          4      p	\         P                  ! ^V	^,           W€R7      p
V
R;;,          R	,          uu&   V
P                  4       P                  R4       WZP                  VP
                  4      ,          V,          pRRR4       XP                  V4       V#   + '       g   i     L#; i)
rM  FrD
  r)  :r   NrM   rO
  Nr!  r‡  g      ð¿)rw   r/  r#   rG
  rH
  r¦  r[
  ÚrealrV
  rZ  Úreciprocal_rþ  r0  r^
  )r¨  r¦  r1  rÏ  r8  rL
  rÁ   rM
  Ú
real_dtyperi  r¡  r,  s   $$$*        r;   Ú4make_fullrank_matrices_with_distinct_singular_valuesrƒ
  y  sä   € Ü	�Š��Ü˜°EÔ:ˆÜ—<‘<×#Ñ# A°UÐ#Ó;‰ˆˆbØ%&§W¡W×%7×%7Ð%7�Q—V‘V—\’\¸Q¿W¹Wˆ
Ü��b•	˜5 �9Ó%ˆô �LŠL˜˜A �E¨ÔCˆà	ˆ$��3�‹ð 	
�‰‹×Ñ˜RÔ ð —‘�a—g‘g“Õ "Õ$ˆ÷! 
ð" ×Ñ�]Ô#Ø€H÷% 
�ús   žDD?Ä?E	c                óÄ  € VP                  R\        P                  4      pVP                  RR4      pVP                  RR4      pVP                  RR4      pV'       d9   \        P                  P                  '       g   \        P
                  ! WWER7      # \        P                  ! W V3,           WER7      pVP                  4       ^ 8X  d   V# \        P                  P                  VRR7      w  ršp\        W4      p\        P                  ! ^V^,           ,          ^WÄVR7      pV'       d   ^ WÜ^,
          &   V^8”  d   ^ V^ &   W�P                  R	4      ,          V,          # )
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
r¦  r¨  r@   ÚsilentFÚsingularr)  rD
  r‡  )r  rw   rS
  rê  rí  ÚonesrF
  rö  rG
  rH
  rV
  Úlinspacer°  )ÚrowsÚcolumnsrt
  r‡   r¦  r¨  r…
  r†
  rK
  rL
  rÁ   rM
  ri  r¡  s   &&*,          r;   Úrandom_matrixr‹
  Ž  s  € ð �J‰J�w¤§¡Ó-€EØ�Z‰Z˜ %Ó(€FØ�Z‰Z˜ %Ó(€FØ�z‰z˜* eÓ,€Hß”e—h‘h×)×)Ð)Ü�zŠz˜$¨uÔDÐDä�Š�J¨ Õ0¸ÔM€AØ‡w�wƒy�A„~ØˆÜ�|‰|×Ñ °ÐÓ7�H€Aˆ"ÜˆDÓ€AÜ�Š�q˜A �E•{ A q¸fÔE€Aßàˆˆa�%‰ØˆqŒ5ð ˆAˆa‰DØ—‘˜B“Õ 2Õ%Ð%r:   c                ó\  € VP                  R\        P                  4      pVP                  RR4      pVP                  RR4      pVP                  RR4      p. VOV NVN5p\        P                  ! W‡,          4      p	\        P
                  ! VRVRV/ V	,          p
V
P                  V4       V
# )aæ  Return rectangular matrix or batches of rectangular matrices
with entries being iid and sampled from N(0, sigma^2) such that
the variance of (A @ A.T)[..., i, j] is 1 if reduction_dim=-1, or
the variance of (A.T @ A)[..., i, j] is 1 if reduction_dim=-2.

Parameters:
  dtype - the data type
  device - the device kind
  requires_grad - whether output requires grad
  reduction_dim - the row/column dimension to re-scale.
                Expected to be either -1 (columns) or -2 (rows).
r¦  r¨  r@   r1  FÚreduction_dimr!  )r  rw   rS
  rX  ÚsqrtrF
  r^
  )r‰
  rŠ
  rt
  r‡   r¦  r¨  r1  r�
  rÏ  Ú	red_scaler9  s   &&*,       r;   Ú'random_matrix_with_scaled_reduction_dimr�
  ­  s�   € ð �J‰J�w¤§¡Ó-€EØ�Z‰Z˜ %Ó(€FØ—J‘J˜°Ó6€MØ—J‘J˜°Ó3€Mà(ˆjÐ(˜$Ð( Ñ(€EÜ—	’	˜%Õ.Ó/€IÜ
�+Š+�uÐ
9 EÐ
9°&Ñ
9¸IÕ
E€CØ×Ñ�}Ô%Ø€Jr:   c                ó`   € \        W.VO5/ VB p\        W.VO5/ VB pVP                  V4      # )zNReturn rectangular matrix or batches of rectangular matrices with
given rank.
)r‹
  rx
  )rJ
  r‰
  rŠ
  rt
  r‡   ÚBÚCs   &&&*,  r;   Úrandom_lowrank_matrixr”
  Æ  s:   € ô 	�dÐ8 :Ò8°Ñ8€AÜ�dÐ; jÒ;°FÑ;€AØ�8‰8�A‹;Ðr:   c                ó\   € V ^8„  d   QhR\         R\         R\         R\        P                  /# )rM   r‰
  ÚcolsÚnum_indicesrO   )rÕ   rw   r   )rS   s   "r;   rT   rT   Ï  s/   € ÷ 
/ñ 
/¬Cð 
/´sð 
/Ìð 
/ÔQV×Q]ÑQ]ñ 
/r:   c           	     ó  a€ . p\         P                  ! W ,          4      p\        \        V4      4      p\        V 4       F3  oVP	                  V3R l\
        P                  ! WTR7       4       4       K5  	  \        P                  ! VRV 4      # )z\Generate indices for a row x cols matrix, preferring at least one index per row if possible.c              3   ó,   <"  € T F	  pSV3x € K  	  R # 5ir�   r1   )ró   r  r  s   & €r;   rô   Ú4_generate_indices_prefer_all_rows.<locals>.<genexpr>×  s   øé € ÐPÑ'O !˜˜1•vÓ'Oùrõ  )ri  N)	rX  Úceilrg  r’  r�  r?  r%  rw   rU  )r‰
  r–
  r—
  rÞ  Ú	n_per_rowrà  r  s   &&&   @r;   Ú!_generate_indices_prefer_all_rowsr�
  Ï  sh   ø€ à€GÜ—	’	˜+Õ,Ó-€IÜ”u˜T“{Ó#€Kä�4Ž[ˆà�‰ÔP¤v§~¢~°kÕ'OÓPÖPñ ô �<Š<˜  Ð-Ó.Ð.r:   ç{®Gáz„?c                ó2  € VP                  R\        P                  4      pVP                  RR4      p\        \	        W4      \        W,          V,          4      4      p\        WV4      p\        P                  ! WdVR7      pT\        P                  ! V U	U
u. uF  w  rš\        Wš,
          4      ^,          ) NK   	  up
p	WER7      P                  4       ,          p\        P                  ! VP                  4       W€V3VR7      pVP                  4       # u up
p	i )a   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.
r¦  r¨  r@   r)  rg  )r  rw   rS
  r  rV
  rÕ   r�
  rF
  rU  rª  Úexpr³  r8  rµ  )r‰
  rŠ
  Údensityr‡   r¦  r¨  Únonzero_elementsrÞ  r³  r-  rZ  rK
  s   &&&,        r;   Úrandom_sparse_matrixr£
  Ü  sÒ   € ð �J‰J�w¤§¡Ó-€EØ�Z‰Z˜ %Ó(€Fäœ3˜tÓ-¬s°4µ>ÀGÕ3KÓ/LÓMÐÜ/°Ð?OÓP€GÜ�[Š[Ð)¸vÔF€Fð Œe�lŠl¹ÔA¹±°œU 1¥5›\¨1�_Ó,¹ÒAÈÔ^×bÑbÓdÕd€FÜ×Ò §	¡	£¨V¸G°_ÈVÔT€AØ�:‰:‹<Ðùó Bs   Â$Dc           
     óÆ  € ^ RI pVP                  R\        4       R,          4      pVP                  RVP                  4      pVP                  RR4      p\	        V 4       Uu/ uF  pWw3\        V^,           4      V ,          bK   	  ppRR lp	W,          V ,          p
\        V4      V
8  d«   \        P                  ! ^ V ^,
          4      p\        P                  ! ^ V ^,
          4      pW{8w  g   KT  \        P                  ! ^ ^VP                  ,          4      pVP                  ! V4      pVP                  ! V4      pV	! W€W{WÞRR7       V	! W€W{WÞR	R7       Kº  . . . ppp\        VP                  4       4       F;  w  w  r{pVP                  V4       VP                  V4       VP                  V4       K=  	  VP                   ! VV.4      pVP"                  ! VVW 3WVR
7      # u upi )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
Nrw   r¦  r¨  r@   Tc                 ój  € \        V4       F£  pV'       d   Wr3Ws3r˜MW'3W73r˜V P                  V^ 4      V P                  V	^ 4      rºWJ,          W[,          ,           V) V
,          WK,          ,           rºV
'       d   W V&   MV P                  VR4       V'       d   W°V	&   K‘  V P                  V	R4       K¥  	  R# r  )r’  r  r¤  )r!	  r_  r-  rZ  ÚcsÚsnÚleftri  ÚikÚjkÚaikÚajks   &&&&&&&     r;   ÚmultiplyÚ)random_sparse_pd_matrix.<locals>.multiply  s‘   € Ü�q–ˆAßØ˜ ! ‘Bà˜ ! �BØ—x‘x  A“¨¯©°°Q«�Ø•x "¥(Õ*¨R¨C°#­I¸½Õ,@�ßØ�R’à—‘˜˜TÔ"ßØ�R“à—‘˜˜TÖ"ó r:   )r¨
  Fr)  ré  )rX  r  r™   rS
  r’  rª  rÈ  r?  ÚrandintÚuniformÚpiÚcosÚsinÚsortedr^   rf   rU  r³  )rs
  r¡
  r‡   rX  rw   r¦  r¨  r-  r!	  r­
  Ú
target_nnzrZ  Úthetar¦
  r§
  ÚicoordsÚjcoordsr³  rµ  Ú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 ;Õ.Ò.Ù'ð 	ð )ô#ð" Õ&¨Õ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¨¨b¸4Õ@Ù�T¨¨b¸5×AØ! 2 r�fˆW€GÜ˜DŸJ™J›LÖ)‰	‰ˆ�Ø�‰�qÔØ�‰�qÔØ�‰�aÖñ *ð —\’\ 7¨GÐ"4Ó5€NØ×"Ò" >°6¸KÐ;UÐ]bÔrÐrùòK)s   Á!$Gc                 ó  € V F„  pV\         P                  8w  g   K  \         P                  ! RWBVR7      pV P                  WEP                  4       V P                  W%P
                  4       V P                  W5P                  4       K†  	  R# )rM   )r¦  rˆ  r¨  Nr	  )rw   Úfloat16rV  ÚassertIsr¦  rˆ  r;  r¨  )r  Údtypesrˆ  r¨  r¦  Úouts   &&&&  r;   Údo_test_dtypesrÀ
  *  s\   € ÛˆØ”E—M‘MÖ!Ü—+’+˜f¨EÈÔPˆCØ�M‰M˜%§¡Ô+Ø�M‰M˜&§*¡*Ô-Ø×Ñ˜V§Z¡ZÖ0ó r:   c                 óÀ  a a€ \         P                  ! ^^.4      oV V3R lpR p\         P                  ! 4       pV! \         P                  ! S4      V\         P                  R	RR4       V! \         P
                  ! SR
4      V\         P                  R	RR4       V EF>  pVP                  R0 EF'  pV! V4      p	\         P                  ! SWsW(R7      p
V! W§W#RV4       V
P                  4       pV! \         P                  ! SW³W(R7      WrVRV4       V! V
P                  S4      WrVRR4       V! V
P                  SW“RR7      W’VRR4       V! \         P                  ! V
4      WrVRR4       V! \         P                  ! W©W#RR7      W’VRR4       V\         P                  Jg   Kõ  V\         P                  8w  g   EK  ^p\         P
                  ! SWÇW#VR7      p
V! W§W#WÈ4       V! V
P                  SV^,           4      WrW<^,           R4       V
P                  4       pV! \         P
                  ! SV^,           W³W(R7      WrW<^,           V4       V! V
P                  SV^,           W“RR7      W’W<^,           R4       V! \         P                  ! W¬^,           4      WrW<^,           R4       V! \         P                  ! W¬^,           W’VRR7      W’W<^,           R4       EK*  	  EKA  	  R# )rM   c                 ó´  <€ SP                  SV P                  4       SP                  WP                  4       SP                  W P                  4       SP                  V P
                  V4       V P                  '       d    Ve   SP                  W0P                  4       Ve4   V P                  S4      P                  V4      pSP                  W4       R # R # r�   )
r;  rÏ  r½
  r¦  rˆ  r1  Úis_cudar¨  r3  rW  )	rU  r¦  rˆ  r¨  r§   r1  Úfillr  rÏ  s	   &&&&&& €€r;   Úcheck_valueÚ'do_test_empty_full.<locals>.check_value6  sŸ   ø€ Ø×Ñ˜ §¡Ô-Ø�‰�eŸ\™\Ô*Ø�‰�fŸm™mÔ,Ø×Ñ˜×-Ñ-¨}Ô=Ø�>�>ˆ>˜fÒ0Ø×Ñ˜V§]¡]Ô3ØÒØ—:‘:˜eÓ$×*Ñ*¨5Ó1ˆDØ×Ñ˜VÖ*ñ r:   c                 óÞ   € R P                  \        V 4      P                  R 4      ^R 4      pV'       g   \        P                  # \
        P                  ! V4      ! \        4      P                  # )rW   r!  )rh   r­   r{   rw   r  re  Ú
attrgetter)r¦  rò  s   & r;   Úget_int64_dtypeÚ+do_test_empty_full.<locals>.get_int64_dtypeA  sO   € Ø—‘œ#˜e›*×*Ñ*¨3Ó/°°"Ð5Ó6ˆßÜ—;‘;ÐÜ×"Ò" 6Ô*¬5Ó1×7Ñ7Ð7r:   NF)r¦  r¨  rˆ  r1  )r¿
  r¨  rˆ  r1  )r¦  r¨  r1  )r¦  rˆ  r¨  r1  r!  g      À)rw   r´  rA  rO  rÝ  rö  rZ
  r3  r]
  Ú
empty_liker¼
  rÜ  Únew_fullÚ	full_like)r  r¾
  rˆ  r¨  rÅ
  rÉ
  Údefault_dtyper¦  ÚrgÚint64_dtyperµ  r¿
  ÚfvrÏ  s   f&&&         @r;   Údo_test_empty_fullrÒ
  3  st  ù€ Ü�JŠJ˜˜1�vÓ€Eö	+ò8ô ×+Ò+Ó-€MÙ”—’˜EÓ" M´5·=±=À"ÀdÈEÔRÙ”—
’
˜5 #Ó&¨´u·}±}ÀbÈ$ÐPUÔVÜˆØ×*Ñ*¨EÔ2ˆBÙ)¨%Ó0ˆKÜ—’˜E¨ÀfÔ_ˆAÙ˜ &°$¸Ô;Ø—%‘%“'ˆCÙœŸš E¨sÈ&ÔcØ v¨t°Rô9á˜Ÿ™ EÓ*¨E¸6À4ÈÔOÙ˜Ÿ™ E°Ð[`˜ÓaØ#¨V°T¸5ôBáœ×(Ò(¨Ó+¨U¸FÀDÈ%ÔPÙœ×(Ò(¨ÀfÐkpÔqØ#¨V°T¸5ôBð œEŸM™MÕ)¨f¼×8HÑ8H×.HØ�Ü—J’J˜u b¸fÐceÔf�Ù˜A f°bÔ=Ù˜AŸJ™J u¨b°1­fÓ5°uÀfÐSTÍfÐV[Ô\Ø—e‘e“g�ÙœEŸJšJ u¨b°1­f¸#ÐU[ÔnØ!¨6¸µ6¸2ô?á˜AŸJ™J u¨b°1­f¸KÐfk˜JÓlØ'°¸a½ÀôHáœEŸOšO¨A°A­vÓ6¸ÀvÐTUÍvÐW\Ô]ÙœEŸOšO¨A°A­vØ2=ÐU[Ðkpôrà'°¸a½À÷Hô3 3ó r:   c                  ó  €  \         P                  P                  \         P                  P                  \        P
                  ^ ,          4      4      p V P                  R4      '       d   V sR# R#   \         d     R# i ; i)ru   r´  N)	r–   rá   r  rº	  r8  r(  ÚendswithÚrunning_script_pathr  )Úrunning_files    r;   Úset_running_script_pathr×
  j  s^   € ðÜ—w‘w—‘¤r§w¡w×'7Ñ'7¼¿¹À½Ó'DÓEˆØ× Ñ  ×'Ò'Ø".Òñ (øäô Úðús   ‚A'A0 Á*A0 Á0A?Á>A?c           	      ó2  € \         f   R # \        P                  P                  \        P                  P	                  \
        P                  ! V P                  4      4      4      pV\         8w  d(   \        RV P                  4        R\          RV R24      hR # )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?)
rÕ
  r–   rá   r  rº	  r  r�  rß  rš   r  )r¡  Útest_case_class_files   & r;   Ú$check_test_defined_in_running_scriptrÚ
  s  s…   € ÜÒ"ÙÜŸ7™7Ÿ?™?¬2¯7©7×+;Ñ+;¼G¿OºOÈI×L_ÑL_Ó<`Ó+aÓbÐØÔ2Ô2ÜØ(¨¯©«Ð(8ð 95Ü5HÐ4IÈÐUiÐTjð kIðIó
ð 	
ñ 3r:   c                 óà   € \        4        \        P                  ! 4       pV FH  p\        '       g   V F  p\	        V4       K  	  VP
                  '       g   K7  VP                  V4       KJ  	  V# r�   )r×
  rQ   rœ  rÍ   rÚ
  r�  rì  )r÷  rÌ  rð  Ú
test_suiteÚ
test_grouprÝ   s   &&&   r;   Ú
load_testsrÞ
  ~  sZ   € ÜÔÜ×#Ò#Ó%€JÛˆ
ß)Ó)Û"�Ü4°TÖ:ñ #à××ÒØ×Ñ˜zÖ*ñ ð Ðr:   c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚBytesIOContextiŠ  c                ó   € V # r�   r1   r;  s   &r;   r‰  ÚBytesIOContext.__enter__‹  r>  r:   c                ó   € R # r�   r1   )r  r†   s   &*r;   r�  ÚBytesIOContext.__exit__Ž  s   € Ùr:   r1   Nrx  r¹   s   @r;   rà
  rà
  Š  s   ø‡ € ò÷ð r:   rà
  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                 óÚ   € R RRR/p\         '       d   RVR&   VP                  4        F   w  rEVP                  V4      pVe   TMTW$&   K"  	  \        P                  P
                  ! W3/ VB # ©Úcheck_batched_gradTÚ	fast_modeF)rå
  r^   r  rw   ÚautogradÚ	gradcheck)rü   Úinputsr‡   Údefault_valuesr  r§   ri  s   &&,    r;   rì
  rì
  £  sr   € ð 	˜dØ�Tð€N÷
  ÓØ&+ˆ�{Ñ#à$×*Ñ*Ö,‰
ˆà�J‰J�s‹OˆØš=‘a¨eˆ‹ñ -ô
 �>‰>×#Ò# BÑ9°&Ñ9Ð9r:   c                 óÜ   € R RRR/p\         '       d   RVR&   VP                  4        F   w  rVVP                  V4      pVe   TMTW5&   K"  	  \        P                  P
                  ! WV3/ VB # rè
  )rå
  r^   r  rw   rë
  Úgradgradcheck)rü   rí
  Úgrad_outputsr‡   rî
  r  r§   ri  s   &&&,    r;   rð
  rð
  ¹  st   € ð 	˜dØ�Tð€N÷
  ÓØ&+ˆ�{Ñ#à$×*Ñ*Ö,‰
ˆà�J‰J�s‹OˆØš=‘a¨eˆ‹ñ -ô
 �>‰>×'Ò'¨°LÑKÀFÑKÐKr:   c                 ór   € V P                  \        W3/ VB 4       V P                  \        W3/ VB 4       R # r�   )r	  rì
  rð
  )r¡  Úapply_fnrí
  r‡   s   &&&,r;   Ú_assertGradAndGradgradChecksrô
  Î  s4   € ð ×Ñœ 8Ñ>°vÑ>Ô?Ø×Ñœ xÑB¸6ÑBÖCr:   c                ó>   € V ^8„  d   QhR\         R\        R,          /# )rM   rá   rO   N)r­   r   )rS   s   "r;   rT   rT   Ö  s   € ÷ ñ ”#ð œ( 4�.ñ r:   c              #   óÐ   "  € \         P                  ! 4       p \         P                  ! V 4       R x € \         P                  ! V4       R #   \         P                  ! T4       i ; i5ir�   )r–   ÚgetcwdÚchdir)rá   Úold_cwds   & r;   Úset_cwdrú
  Õ  s;   é € ä�iŠi‹k€GðÜ
�Š�ŒÛä
�Š�ÖøŒ�Š�Õüs   ‚A&™A ³A&ÁA#Á#A&rw
  gš™™™™™¹?c                 ó0   a € \        S 4      V 3R  l4       pV# )c                 óH   <€ S! V .VO5/ VBR R/B  S! V .VO5/ VBR R/B  R# )Ú	coalescedTFNr1   )r  r†   r‡   rM  s   &*,€r;   rg  Úcoalescedonoff.<locals>.wrappedë  s1   ø€ á	ˆ$Ð0�Ò0˜Ñ0¨4Ó0Ù	ˆ$Ð1�Ò1˜Ñ1¨5Õ1r:   r†  )rM  rg  s   f r;   Úcoalescedonoffrÿ
  ê  s    ø€ Ü
ˆ1ƒXô2ó ð2ð €Nr:   c                 óF  € V P                  4       pRV P                  V P                  4       ^,
          ^ R1,          ,           p\        P                  ! W P
                  R7      P                  R4      P                  R4      pV P                  4       ^8”  d*   VP                  R4       W,          P                  ^ 4      pMW,          p\        P                  ! W3P                  4       ^ ,          4      pT;'       d%    \        P                  ! W3P                  4       4      pV# )r   rg  r�  r!  )r¹  rÏ  rŽ  rw   rU  r¨  ÚcumprodÚflipÚ
unsqueeze_ÚsumÚallcloser~  Úunique)r¡  rÞ  Úhash_coeffsÚhash_indicesr9  s   &    r;   Úis_coalesced_indicesr	  ò  sÕ   € Ø�j‰j‹l€GØ˜Ÿ™ §¡£°!Õ!3°A°bÐ!8Õ9Õ9€KÜ—<’< ·H±HÔ=×EÑEÀbÓI×NÑNÈrÓR€LØ‡|�|ƒ~˜ÔØ×Ñ Ô#ØÕ.×3Ñ3°AÓ6‰àÕ-ˆô �.Š.˜×'8Ñ'8Ó':¸1Õ'=Ó
>€Cð ×
EÐ
E”%—.’. ×/BÑ/BÓ/DÓE€Cà€Jr:   c               #   óâ   "  € \         P                  ! 4       '       d2    \         P                  ! 4        R x € \         P                  ! 4        R # R x € R #   \         P                  ! 4        i ; i5ir�   )rø   r‘	  r=  r/  r1   r:   r;   Ú
disable_gcr    s9   é € ä	‡|‚|‡~‚~ð	Ü�JŠJŒLÛä�IŠIŽKåøô �IŠI�Küs   ‚A/ŸA ¸A/ÁA,Á,A/c                ó0   € V ^8„  d   QhR\         R\        /# )rM   Úlib_namerO   )r­   r   )rS   s   "r;   rT   rT     s   € ÷ 3ñ 3¤Cð 3¬Dñ 3r:   c                 ó\  € \        \        P                  4      P                  4       P                  pVR ,          V ,          p\
        P                  P                  V4      '       d   V# \        \        4      P                  4       P                  ^,          pVR,          R ,          V ,          # )ÚlibÚbuild)	r   rw   r  ÚresolveÚparentr–   rá   r"  Úparents)r  Ú
torch_rootrá   s   &  r;   Úfind_library_locationr    sz   € ô ”e—n‘nÓ%×-Ñ-Ó/×6Ñ6€JØ˜Õ Õ(€DÜ	‡w�w‡~�~�d×ÒØˆÜ”h“×'Ñ'Ó)×1Ñ1°!Õ4€JØ˜Õ %Õ'¨(Õ2Ð2r:   c                ó   a € V 3R lpV# )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                 ól   <a € \         '       g   R S n        SS n        S # \        S 4      V V3R l4       pV# )Tc                  ó^   <€ \        R SP                   RS 2\        P                  R7       R# ©z	Skipping z% on sandcastle for following reason: ra  N©rg   r2   r8  rq  ©r†   r‡   r  r  s   *,€€r;   rý   Ú?skip_but_pass_in_sandcastle.<locals>.decorator.<locals>.wrapper'  s+   ø€ ä�I˜dŸm™m˜_Ð,QÐRXÐQYÐZÔad×akÑakÕlÙr:   )rÂ   r  r  r
   )r  rý   r  s   f €r;   r�  Ú.skip_but_pass_in_sandcastle.<locals>.decorator!  s:   ù€ ß‹}Ø%)ˆDÔ"Ø)/ˆDÔ&ØˆKä	ˆt‹õ	ó 
ð	ð ˆr:   r1   )r  r�  s   f r;   Úskip_but_pass_in_sandcastler    s   ø€ õ
ð Ðr:   c                óV   a a€ \        4       o\        S 4      V V3R l4       pSVn        V# )zq
Returns a function that calls the real implementation of a method
in addition to passing args to a mock object.
c                 ó,   <€ S! V/ VB  S! V .VO5/ VB # r�   r1   )r  r†   r‡   rb  r�  s   &*,€€r;   rý   Úmock_wrapper.<locals>.wrapper6  s%   ø€ áˆdÐ�fÒÙ�dÐ,˜TÒ, VÑ,Ð,r:   )r   r
   r�  )rb  rý   r�  s   f @r;   Úmock_wrapperr"  /  s0   ù€ ô
 ‹;€Dä
ˆ6ƒ]õ-ó ð-ð €G„LØ€Nr:   c           
     óö   € \        V  Uu. uF  p\        V\        4      '       g   K  VNK  	  upVP                  4        Uu. uF  p\        V\        4      '       g   K  VNK  	  up,           4      # u upi u upi )zBReturns a set of all Tensor objects in the given args and kwargs. )ra   rY   r   r³  )r†   r‡   rÙ  rµ  s   &&  r;   Úget_tensors_fromr$  =  s\   € ä™tÓ?™t˜¤z°#´v×'>—�™tÑ?Ø!Ÿ=™=œ?ÓD™?�a¬j¸¼F×.C—�™?ÑDõEó Fð FùÒ?ùÚDs   ŠA1§A1ÁA6
ÁA6
c                óz   € V ^8„  d   QhR\         \        ,          R\        P                  R\        P                  /# )rM   Ú	byte_listr¦  r¨  )rg  rÕ   rw   r¦  r¨  )rS   s   "r;   rT   rT   D  s-   € ÷ ,9ñ ,9œt¤C�yð ,9´·±ð ,9ÄeÇlÁlñ ,9r:   c                 óð  € \         P                  \        P                  \         P                  \        P
                  \         P                  \        P                  \         P                  \        P                  \         P                  \        P                  \         P                  \        P                  \         P                  \        P                  \         P                   \        P"                  \         P$                  \        P&                  \         P(                  \        P*                  \         P,                  \        P*                  \         P.                  \        P0                  \         P2                  \        P0                  /pW1,          p\        P4                  ! V4      pR  pVP6                  '       d¿   \9        V 4      V^,          8w  d"   \;        RV^,           R\9        V 4       24      hV! V 4       VP=                  \        P>                  V,          ! V RV !  4      P@                  pVP=                  \        P>                  V,          ! WR !  4      P@                  pVRV,          ,           p	Mf\9        V 4      V8w  d   \;        RV R\9        V 4       24      hV! V 4       VP=                  \        P>                  V,          ! V !  4      P@                  p	\         PB                  ! W’VR7      # )c                 óV   € V  F"  p^ Tu;8:  d
   ^ÿ8:  d   K  M \        RV 24      h	  R# )ru   z8byte value out of range: expected 0 <= byte <= 255, got N)rš   )r&  Úbytes   & r;   Úcheck_bytesÚ$bytes_to_scalar.<locals>.check_bytesW  s1   € ÛˆDØ˜Ö$ ×$Ð$Ü$Ð'_Ð`dÐ_eÐ%fÓgÐgó r:   zexpected len(byte_list) == z for complex dtype, got Ny              ð?rx  rM  )"rw   r2  ÚctypesÚc_int8r,  Úc_uint8Úuint16Úc_uint16Úuint32Úc_uint32Úuint64Úc_uint64Úint16Úc_int16r0  Úc_int32r  Úc_int64r¿   Úc_boolr  Úc_floatr  Úfloat64Úc_doubleÚ
complex128Úsizeofr[
  rÈ  rš   Úfrom_bufferÚc_byter§   rU  )
r&  r¦  r¨  Údtype_to_ctypeÚctypeÚ	num_bytesr*  r€
  Úimagr9  s
   &&&       r;   Úbytes_to_scalarrE  D  s
  € ä�
‰
”F—M‘MÜ�‰”V—^‘^Ü�‰”f—o‘oÜ�‰”f—o‘oÜ�‰”f—o‘oÜ�‰”V—^‘^Ü�‰”V—^‘^Ü�‰”V—^‘^Ü�
‰
”F—M‘MÜ�‰”v—~‘~Ü�‰œŸ™Ü�‰”v—‘Ü×Ñœ&Ÿ/™/ð.€Nð Õ!€EÜ—’˜eÓ$€Iòhð
 ××ÐÜˆy‹>˜i¨!�mÔ,Ü Ø-¨i¸!­m¨_Ð<TÔUXÐYbÓUcÐTdÐeóð ñ 	�IÔØ× Ñ ¤&§-¡-°)Ö";Ø�z˜	Ð"ñ"$ó %ß%*¡Uð 	à× Ñ ¤&§-¡-°)Ö";Ø�zÐ"ñ"$ó %ß%*¡Uð 	à�R˜$•YÕ‰äˆy‹>˜YÔ&Ü Ø-¨i¨[¸¼sÀ9»~Ð>NÐOóð ñ 	�IÔØ×Ñ¤§¡°Ö!:Øñ!ó ß™ð 	ô �<Š<˜°%Ô8Ð8r:   c                óî   € \         P                  ! V P                  V P                  V P                  V P
                  V P                  R7      p\        P                  ! W4      pV P                  Vn	        V# )zBBased on http://stackoverflow.com/a/6528148/190597 (Glenn Maynard))re   ÚargdefsÚclosure)
r  ÚFunctionTypeÚ__code__Ú__globals__r2   Ú__defaults__r  r   Úupdate_wrapperÚ__kwdefaults__)rM  Úgs   & r;   Ú	copy_funcrP  s  sW   € ä×Ò˜1Ÿ:™: q§}¡}¸1¿:¹:Ø#$§>¡>Ø#$§=¡=ô	2€Aô 	× Ò  Ó&€AØ×'Ñ'€AÔØ€Hr:   c                ó   a € V 3R lpV# )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                 ó~   <€ S F5  p\        W\        P                  ! \        \	        W4      4      4      4       K7  	  V # r�   )r„  rQ   r.  rP  rX   )rn   r8  rÌ  s   & €r;   ÚdecoÚ#xfail_inherited_tests.<locals>.deco„  s4   ø€ ÛˆAô �CœH×4Ò4´Y¼wÀs»Ó5OÓPÖQñ ð ˆ
r:   r1   )rÌ  rS  s   f r;   Úxfail_inherited_testsrU  }  s   ø€ õð €Kr:   c                ó   a a€ V V3R lpV# )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                 ó|   <a € S'       d2   \         '       d   \        S 4      V V3R  l4       pV# RS n        SS n        S # )c                  ó^   <€ \        R SP                   RS 2\        P                  R7       R# r  r  r  s   *,€€r;   rý   ÚBskip_but_pass_in_sandcastle_if.<locals>.decorator.<locals>.wrapper–  s(   ø€ ä˜I d§m¡m _Ð4YÐZ`ÐYaÐbÔil×isÑis×tr:   T)rÂ   r
   r  r  )r  rý   rw  r  s   f €€r;   r�  Ú1skip_but_pass_in_sandcastle_if.<locals>.decorator“  s=   ù€ ßß‹}Ü�t“õuó ðuà�à)-�Ô&Ø-3�Ô*àˆr:   r1   )rw  r  r�  s   ff r;   rW  rW  �  s   ù€ öð Ðr:   c                óD   € \        V 4      P                  R4      ^,          # )zBReturns the pretty name of the dtype (e.g. torch.int64 -> int64). rW   )r­   r{   r×  s   &r;   r§  r§  ¢  s   € äˆu‹:×Ñ˜CÓ  Õ#Ð#r:   c                ó(   € V ^8„  d   QhR\         RR/# )rM   ÚcyclesrO   NrÔ   )rS   s   "r;   rT   rT   §  s   € ÷ ñ ”sð ˜tñ r:   c                ó*   € \        V 4       F  pK  	  R# )z7Spin-wait for approximately the given number of cycles.Nr‘  )r]  rÁ   s   & r;   Ú
_cpu_sleepr_  §  s   € ä�6Ž]ˆÙó r:   c                ó4   € V ^8„  d   QhR\         R\        RR/# )rM   r¨  r]  rO   N)r­   rÕ   )rS   s   "r;   rT   rT   ­  s!   € ÷ 7ñ 7œð 7¤cð 7¨dñ 7r:   c                óæ  € V R8X  dŒ   \        \        P                  RR4      p\        \        P                  n         \        P                  P	                  V4       Vf   \        \        P                  R4       R# V\        P                  n        R# \        P                  ! V 4      P	                  V4       R#   Tf   \        \        P                  R4       i T\        P                  n        i ; i)z½Sleep for the given number of cycles on the specified device.

For CPU, temporarily patches torch.cpu._sleep if needed.
For CUDA/other devices, uses torch.get_device_module(device)._sleep.
r@   Ú_sleepN)rX   rw   r@   r_  rb  r‰  Úget_device_module)r¨  r]  Úorigs   && r;   Údevice_sleepre  ­  s›   € ð �„Ü”u—y‘y (¨DÓ1ˆÜ%Œ�	‰	Ôð	(Ü�I‰I×Ñ˜VÔ$àŠ|ÜœŸ	™	 8Ö,à#'”—	‘	Ö ä×Ò Ó'×.Ñ.¨vÖ6øð Š|ÜœŸ	™	 8Õ,à#'”—	‘	Õ ús   ½B: Â:6C0c                ó0   € V ^8„  d   QhR\         R\        /# )rM   r¨  rO   rm	  )rS   s   "r;   rT   rT   Â  s   € ÷ .#ñ .#œcð .#¬uñ .#r:   c                óÖ   a aa€ RoS R8X  d   ^ RI oR VV3R llpM
R V V3R llp^
p\        V4       Uu. uF	  q1! 4       NK  	  pp\        V4      p\        V^V^,
           4      # u upi )zàMeasure and return approximate number of cycles per millisecond for device _sleep.

Args:
    device: Device type to measure cycles for ("cuda" or "cpu").

Works for both CUDA (torch.cuda._sleep) and CPU (torch.cpu._sleep).
é@B r@   Nc                ó$   € V ^8„  d   QhR\         /# r«   rg  )rS   s   "r;   rT   Ú'get_cycles_per_ms.<locals>.__annotate__Ï  s   € ÷ 	!ñ 	!œñ 	!r:   c                  ó¨   <€ SP                   ! 4       p \        S4       SP                   ! 4       pW,
          R ,          pV^ 8”  d   SV,          pV# RpV# )r¬  rh  )Úperf_counterr_  )r;  ÚendÚ
elapsed_msÚcycles_per_msÚtest_cyclesr/
  s       €€r;   ÚmeasureÚ"get_cycles_per_ms.<locals>.measureÏ  sX   ø€ Ø×%Ò%Ó'ˆEÜ�{Ô#Ø×#Ò#Ó%ˆCØ�+¨Õ-ˆJØ8BÀQ¼˜K¨*Õ4ˆMØ Ð ð MTˆMØ Ð r:   c                ó$   € V ^8„  d   QhR\         /# r«   rg  )rS   s   "r;   rT   rj  ×  s   € ÷ 	%ñ 	%œñ 	%r:   c                  ó’  <€ \        \        P                  ! S4      R 4      '       dž   \        P                  ! RR7      p \        P                  ! RR7      pV P	                  4        \        P                  ! S4      P                  S4       VP	                  4        VP                  4        SV P                  V4      ,          pV# RpV# )rb  T)Úenable_timingg    €„.A)r&  rw   rc  ÚEventrœ	  rb  rn  r  )r;  rm  ro  r¨  rp  s      €€r;   rq  rr  ×  s’   ø€ Ü”u×.Ò.¨vÓ6¸×AÒAÜŸš°$Ô7�Ü—k’k°Ô5�Ø—‘”Ü×'Ò'¨Ó/×6Ñ6°{ÔCØ—
‘
”Ø—‘Ô!Ø +¨e×.@Ñ.@ÀÓ.EÕ E�Ø$Ð$à )�Ø$Ð$r:   )r/
  r’  r´
  r   )r¨  rq  ÚnumrÁ   Úvalsrp  r/
  s   f    @@r;   Úget_cycles_per_msry  Á  sm   ú€ ð €Kà�„Û÷	!ò 	!÷	%ñ 	%ð, €CÜ$ SœzÓ*™z˜!ˆGŽI™z€DÐ*Ü�$‹<€DÜ��Q˜˜q�Ð!Ó"Ð"ùò +s   µA&ÚTc                óf   € V ^8„  d   QhR\         P                  R\        \        ,          R\        /# )rM   r  ÚsamplesrO   )rQ   rR   r   rz  )rS   s   "r;   rT   rT   ö  s0   € ÷ Pñ P”x×(Ñ(ð P´8¼Aµ;ð PÄ1ñ Pr:   c                ó€   €  \        \        V4      4      #   \         d   p\        P                  ! R4      ThRp?ii ; i)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)rJ  r¹  ÚStopIterationrQ   r  )r  r|  rq   s   && r;   Úfirst_sampler  ö  s=   € ð
PÜ”D˜“MÓ"Ð"øÜô PÜ×ÒÐ GÓHÈaÐOûðPús   ‚ –=¡8¸=c                 óÐ   € \        V \        P                  4      '       d   \        P                  ! V 4      # \        V \        4      '       d   \        \        \        V 4      4      # V # r�   )rY   rw   r   r·  r   r‡  r‹  Úclone_input_helperrU	  s   &r;   r�  r�    sG   € Ü�%œŸ™×&Ò&Ü�{Š{˜5Ó!Ð!ä�%œ×"Ò"Ü”SÔ+¨UÓ3Ó4Ð4à€Lr:   c              #  óf   "  €  \        WV4       Rx € \        W4       R#   \        Y4       i ; i5i)zBContext manager/decorator to test ONNX export with custom operatorNr    )ÚopnameÚsymbolic_fnÚopset_versions   &&&r;   Ú	custom_opr†    s(   é € ð=Ü# F¸ÔGÛä% fÖ<øÔ% fÕ<üs   ‚1„! ”1¡.®1c                 ó2  € V ! V!  p\         P                  ! V4       FY  p\        V\        P                  4      '       g   K%  VP
                  '       g   K9  VP                  4       P                  R R7       K[  	  \         P                  ! V4       Uu. uF1  p\        V\        P                  4      '       g   K%  VP                  NK3  	  pp\         P                  ! V4       F,  p\        V\        P                  4      '       g   K%  RVn        K.  	  W63# u upi )T)Úretain_graphN)	ÚpytreeÚtree_leavesrY   rw   r   r1  r  ÚbackwardÚgrad)rü   Ú
graph_inpsÚinpsÚoutsr¿
  ÚinpÚgradss   &&&    r;   Úouts_and_gradsr’    sÆ   € Ùˆz‰?€DÜ×!Ò! $Ö'ˆÜ�cœ5Ÿ<™<×(Ô(¨S×->×->Ò->Ø�G‰G‹I×Ñ¨DÐÖ1ñ (ô "(×!3Ò!3°DÔ!9Ó[Ñ!9˜#¼ZÈÌUÏ\É\×=ZŒXˆS�XŒXÑ!9€EÐ[Ü×!Ò! $Ö'ˆÜ�cœ5Ÿ<™<×(Ô(ØˆCŽHñ (ð ˆ;Ðùò	 \s   Â"DÂ9Dc                 ó‚   € \        WV4      w  rE\        W#V4      w  rgV P                  WF4       V P                  WW4       R # r�   )r’  r;  )rÝ   Úm1Úm2rŽ  Úr1Úg1Úr2Úg2s   &&&&    r;   Úcompare_equal_outs_and_gradsrš     s:   € Ü˜B dÓ+�F€BÜ˜B dÓ+�F€BØ×Ñ�RÔØ×Ñ�RÖr:   c                   ód   a € ] tR tRt o RtR tRRRRRRR	R/R
 ltRRRRRRR	R/R ltR tRt	V t
R# )ÚTestGradientsi&  Tc                ó0   a€ \        S4      V3R  l4       pV# )c                 ó8   <€ S! V P                  4       .VO5/ VB # r�   )r·  )r8  r†   r‡   Úinplace_variants   &*,€r;   rb  Ú,TestGradients._get_safe_inplace.<locals>._fn,  s   ø€ á" 1§7¡7£9Ð>¨tÒ>°vÑ>Ð>r:   r†  )r  rŸ  rb  s   &f r;   Ú_get_safe_inplaceÚTestGradients._get_safe_inplace+  s!   ø€ Ü	ˆÓ	ô	?ó 
 ð	?ð ˆ
r:   Úcheck_forward_adFÚcheck_backward_adré
  NÚcheck_batched_forward_gradc               óÂ  aaaa€ VR9  d   \        RV: 24      hSf   V P                  R4       SP                  V\        P                  ! V4      P
                  4      '       g+   V P                  RSP                   R\        V4       24       V3R lp
SP                  ;'       d    VP                  pSP                  WRV\        R	7      pV EF	  oSP                  '       d   V
! S4      '       d   K&  Rp\        SP                  4      '       d;   \        SP                  SP                   SP"                  P%                  4       4      pMC\'        \        SP                  3SP                   SP"                  P%                  4       4      4      p\&        ;QJ d    . R
 V 4       F  NK  	  5M! R
 V 4       4      pV F  pV P)                  VP*                  R4       K!  	  R oVVVV3R lpVR 8X  dL   Vf   SP,                  pV P/                  \1        VVVRSP2                  SP4                  VVRV	R7
      4       EKo  VR9   d�   V P7                  VRR7       R Fd  pRVRSP8                  RRRSP2                  RSP4                  /pVR8X  d   RVR&   RVR&   RVR&   RVR&   V P/                  \;        VV3/ VB 4       Kf  	  EKö  V P/                  RRR7       EK  	  R# )rì
  Úfwgrad_bwgradzJcheck must be one of ('gradcheck', 'bwgrad_bwgrad', 'fwgrad_bwgrad'), got Nz!Skipped! Variant not implemented.z	Skipped! z does not support dtype c                 ó„   <€ \        V R 4      '       d   V P                  SP                  4       J # V SP                  4       J # )Ú__wrapped__)r&  r©  Úget_inplace)ÚvariantrÛ	  s   &€r;   Ú
is_inplaceÚ/TestGradients._check_helper.<locals>.is_inplace>  s:   ø€ Ü�w ×.Ò.Ø×*Ñ*¨b¯n©nÓ.>Ð>Ð>Ø˜bŸn™nÓ.Ð.Ð.r:   T)r1  Úinclude_conjugated_inputsÚsmall_inputs_onlyc              3   ó’   "  € T F=  p\        V\        P                  4      '       g   K%  VP                  '       g   K9  Vx € K?  	  R # 5ir�   )rY   rw   r   r1  )ró   r,  s   & r;   rô   Ú.TestGradients._check_helper.<locals>.<genexpr>W  s*   é € Ð"l©h¨¼:ÀaÌÏÉ×;V¤1Ð[\×[jÕ[j§1¢1«hùs   ‚"A©A½
A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                 ó–  € \        V4      '       dt   . pV Fh  p\        V\        P                  4      '       d5   VP                  '       d#   VP                  W,          4       V^,           pKW  VP                  V4       Kj  	  W23# \        V\        P                  4      '       d$   VP                  '       d   W,          V^,           3# W3# r�  )rc  rY   rw   r   r1  rf   )rí
  r�  rM  Útensor_listr,  s   &&&  r;   Ú_input_recomposition_helperÚ@TestGradients._check_helper.<locals>._input_recomposition_helperb  sž   € Ü)¨#×.Ò.Ø"$�KÛ ˜Ü% a¬¯©×6Ò6¸1¿?¿?¸?Ø'×.Ñ.¨vÕ/@ÔAØ(1°A­šIà'×.Ñ.¨qÖ1ñ !ð 'Ð1Ð1Ü ¤U§\¡\×2Ò2°s×7H×7HÐ7HØ!Õ,¨i¸!­mÐ;Ð;à˜>Ð)r:   c                  óŽ  <€ . p^ pS	! V SP                   V4      w  r2VP                  V4       SP                   F  pS	! WV4      w  r2VP                  V4       K!  	  / pSP                  P	                  4        F  w  rgS	! WV4      w  r2W5V&   K  	  S
P
                  ! S.VO5/ VB pSP                  e   SP                  V4      # V# rõ  )rð  rf   r†   r‡   r^   Úgradcheck_wrapperÚoutput_process_fn_grad)rí
  Úpositional_argsrM  r�  r,  r‡   ri  rµ  r  r´  rÛ	  Úsampler«  s   *        €€€€r;   rü   Ú'TestGradients._check_helper.<locals>.fnq  sÍ   ø€ à"$�Ø�	Ù!<¸VÀVÇ\Á\ÐS\Ó!]‘�Ø×&Ñ& sÔ+àŸœ�AÙ%@ÀÈIÓ%V‘N�CØ#×*Ñ*¨3Ö/ñ %ð
 �Ø"ŸM™M×/Ñ/Ö1‘D�AÙ%@ÀÈIÓ%V‘N�CØ #˜1“Iñ 2ð ×-Ò-¨gÐR¸ÒRÈ6ÑR�Ø×0Ñ0Ò<Ø!×8Ñ8¸Ó@Ð@Ø�r:   )ré
  Úcheck_grad_dtypesÚ
nondet_tolrê
  r£  r¤  Úcheck_undefined_gradr¥  z-Cannot run forward AD check for gradgradcheckrg  FÚgen_non_contig_grad_outputsré
  r¼  r½  rê
  Úcheck_fwd_over_revÚcheck_rev_over_revr¾  zUnknown check requested!)rì
  Úbwgrad_bwgradr§  )rÂ  r§  )FT)rš   rR  Úsupports_dtyperw   r¨  rP   re   r­   Útest_conjugated_samplesr[
  Úsample_inputsrå
  Úbroadcasts_inputrc  rð  r   r†   r‡   r³  r‡  r’	  rŒ  ré
  r	  rì
  Úgradcheck_nondet_tolÚgradcheck_fast_moder		  Úcheck_batched_gradgradrð
  )r  r¨  r¦  rÛ	  r«  Úcheckr£  r¤  ré
  r¥  r¬  r®  r|  Úall_argsÚgradcheck_argsr8  rü   r¿  r‡   r´  rº  s   &&&ff&$$$$         @@r;   Ú_check_helperÚTestGradients._check_helper2  s´  û€ àÐGÔGÜ Ø\Ð]bÑ\eÐfóð ð Š?Ø�M‰MÐ=Ô>Ø× Ñ  ¬¯ª°VÓ(<×(AÑ(A×BÒBØ�M‰M˜I b§g¡g YÐ.FÄsÈ5ÃzÀlÐSÔTõ	/ð
 %'×$>Ñ$>×$SÐ$SÀ5×CSÑCSÐ!à×"Ñ" 6ÀÐ`yÜ5Mð #ó Oˆô ˆFØ×&×&Ð&©:°g×+>Ò+>Ùð ˆHÜ% f§l¡l×3Ò3Ü  §¡¨v¯{©{¸F¿M¹M×<PÑ<PÓ<RÓS‘ä ¤¨¯© ¸¿¹ÀVÇ]Á]×EYÑEYÓE[Ó!\Ó]�ß"œUÑ"l©hÓ"lŸU™UÑ"l©hÓ"lÓlˆNó $�Ø×!Ñ! !§&¡&ð#UöVñ $ò*÷ð ð, ˜Ô#Ø%Ò-Ø)+×)>Ñ)>Ð&Ø—‘¤	¨"¨nØ=OØ<@Ø57×5LÑ5LØ46×4JÑ4JØ;KØ<MØ?CØE_ô!a÷ bð Ð<Ô<Ø× Ñ Ð!1Ð7fÐ ÔgÛ3@Ð/à5Ð7RØ,¨b×.GÑ.GØ+¨TØ$ b×&=Ñ&=Ø# R×%;Ñ%;ð�Fð  Ô/Ø7;˜Ð3Ñ4Ø7<˜Ð3Ñ4Ø7<˜Ð3Ñ4Ø9>˜Ð5Ñ6à—O‘O¤M°"°nÑ$OÈÑ$OÖPô 4Að  —‘ Ð+E�×Fó{ r:   c               ó0   € V P                  WW4R VWgVR7	      # )rì
  )r£  r¤  ré
  r¥  )rÍ  )	r  r¨  r¦  rÛ	  r«  r£  r¤  ré
  r¥  s	   &&&&&$$$$r;   Ú_grad_test_helperÚTestGradients._grad_test_helper§  s+   € à×!Ñ! &°¸kÐ\lØ4EØ=Wð "ó Yð 	Yr:   c                ó   € W1P                  \        P                  ! V4      P                  4      9  d   V P	                  R 4       VP
                  '       g(   VP                  '       g   V P	                  R4       R# R# R# )z4Skipped! Op doesn't support autograd for this dtype.z Skipped! autograd not supported.N)Úsupported_backward_dtypesrw   r¨  rP   rR  Úsupports_autogradÚsupports_forward_ad)r  rÛ	  r¨  r¦  s   &&&&r;   Ú_skip_helperÚTestGradients._skip_helper­  s\   € Ø×4Ñ4´U·\²\À&Ó5I×5NÑ5NÓOÔOØ�M‰MÐPÔQØ×#×#Ð#¨B×,B×,BÐ,BØ�M‰MÐ<Ö=ñ -CÑ#r:   r1   )r2   r3   r4   r5   rC	  r¡  rÍ  rÐ  rÖ  r9   r¸   r¹   s   @r;   rœ  rœ  &  ss   ø‡ € Ø€KòðsGÐSXð sGÐlpð sGØ)-ðsGØJOôsGðjYÐPUð YÐimð YØ-1ðYØNSôY÷>ð >r:   rœ  c                   óP   a € ] tR tRt o R tR t]P                  R 4       tRt	V t
R# )ÚNestedTensorTestCasei·  c                ó€   € R  pV P                  \        P                  ! W14      \        P                  ! W24      4       R# )c                 óÈ   € \        V \        P                  4      '       dB   V P                  '       d0   V P                  \        P
                  8X  d   V P                  4       # V # r�   )rY   rw   r   rc	  rˆ  Újaggedrd	  r0  s   &r;   Ú_unbind_njtsÚHNestedTensorTestCase.assertEqualIgnoringNestedInts.<locals>._unbind_njts»  s;   € Ü˜!œUŸ\™\×*Ò*¨q¯{¯{¨{¸q¿x¹xÌ5Ï<É<Ô?WØ—x‘x“zÐ!à�r:   N)r;  r‰  Útree_map)r  r´  r	  rÝ  s   &&& r;   ÚassertEqualIgnoringNestedIntsÚ2NestedTensorTestCase.assertEqualIgnoringNestedInts¸  s+   € ò	ð 	×ÑœŸš¨Ó9¼6¿?º?È<Ó;[Ö\r:   c                ó¨   € V P                  W4       R  p\        P                  ! W14      p\        P                  ! W24      pV P                  WE4       R# )c                 ó‚   € \        V \        P                  4      '       d   V P                  '       d   V P                  # R # r�   )rY   rw   r   rc	  rÏ  r0  s   &r;   Ú_get_njt_shapesÚGNestedTensorTestCase.assertEqualNoncontigAware.<locals>._get_njt_shapesÈ  s5   € ô ˜a¤§¡×.Ò.°1·;·;°;ð —‘ðð ðr:   N)rà  r‰  rß  r;  )r  r´  r	  rä  Úa_shapesÚb_shapess   &&&   r;   ÚassertEqualNoncontigAwareÚ.NestedTensorTestCase.assertEqualNoncontigAwareÃ  sC   € ð 	×*Ñ*¨1Ô0ò	ô —?’? ?Ó6ˆÜ—?’? ?Ó6ˆØ×Ñ˜Ö,r:   c              #  óæ   "  € \         P                  P                  P                  pVP                  P                  4       pVP                  p Rx € W1n        W!n        R#   Y1n        Y!n        i ; i5i)z>Context manager to branch and restore the nested tensor state.N)rw   ÚnestedÚ	_internalÚnested_tensorÚ_tensor_symint_registryr'  Ú_tensor_id_counter)r  Únested_tensor_moduleÚoriginal_tensor_symint_registryÚoriginal_tensor_id_counters   &   r;   Úbranch_nested_stateÚ(NestedTensorTestCase.branch_nested_stateÓ  sc   é € ô  %Ÿ|™|×5Ñ5×CÑCÐØ*>×*VÑ*V×*[Ñ*[Ó*]Ð'Ø%9×%LÑ%LÐ"ð	[Ûà6PÔ3Ø;ZÖ8øð 7QÔ3Ø;ZÕ8üs   ‚AA1ÁA  ÁA1Á A.Á.A1r1   N)r2   r3   r4   r5   rà  rè  r  r   ró  r9   r¸   r¹   s   @r;   rÙ  rÙ  ·  s,   ø‡ € ò	]ò-ð  ×Ññ	[ó ö	[r:   rÙ  r¸  Úsuppress_prefixry  r	  Ústrip_caretsÚstrip_stack_attributionc          	      ó  a€ ^ RI Hp Sf.   \        P                  ! 4       ^V,           ,          P                  oV! S4      oV! \        V 4      4      pV3R lp	\        P                  ! RV	V4      p\        P                  ! RRV4      p\        P                  ! RRV4      p\        P                  ! RR	V4      p\        P                  ! SV! \        P                  P                  S4      4      V4      p\        P                  ! V! \        P                  P                  \        P                  P                  \        P                  4      R
4      4      R
V4      p\        P                  ! RRV\        P                  R7      pV'       dy   \        P                  ! RR
V\        P                   R7      p\        P                  ! RR
V\        P                   R7      p\        P                  ! RR
V\        P                   R7      pV'       d   \        P                  ! RR
V4      p\        P                  ! RR
V\        P                  R7      pV'       d   \        P                  ! RRV4      pV'       d   \        P                  ! RR
V4      pV# )ru   )Ú_as_posix_pathc                 ó†   <€ V P                  ^4      S8w  d   R# V P                  ^4      R8X  d   R# V P                  ^ 4      # )rM   rK   z<module>)r¼  )rO  ry  s   &€r;   Ú
repl_frameÚmunge_exc.<locals>.repl_frameê  s9   ø€ Ø�7‰7�1‹:˜ÔÙð �7‰7�1‹:˜Ô#Ùà�w‰w�q‹zÐr:   z@( *)File "([^"]+)", line \d+, in (.+)\n(\1  .+\n( +[~^]* *\n)?)*zline \d+zline Nz.py:\d+z.py:Nzhttps:/([a-zA-Z0-9_.-]+)z
https://\1rK   z%attempting to trace CALL_FUNCTION:.*$z8attempting to trace CALL: a function call, e.g. f(x, y):)Úflagsz\n*Set TORCH_LOGS.+z$\n*You can suppress this exception.+z\n*Set TORCHDYNAMO_VERBOSE=1.+zCannot export model.+\n\nz +$z4(\nStack variable source attribution:)\n(?:.*\n)*?\nz\1\n\nz\n[ ~^]*[~^][ ~^]*(?=\n|\Z))Útorch._dynamo.trace_rulesrù  r  r  rã   r­   r˜  rÍ  r–   rá   ri  rh   r»	  rw   r  Ú	MULTILINEÚDOTALL)
rq   r¸  rõ  ry  r	  rö  r÷  rù  r¡  rû  s
   &$$d$$$   r;   r¼  r¼  à  sÊ  ø€ Ý8à‚|Ü�}Š}‹˜q 4�xÕ(×1Ñ1ˆá˜$Ó€DÙ”s˜1“vÓ€Aõô 	�ŠØKØØ	ó	€Aô
 	�Šˆ{˜H aÓ(€AÜ
�Šˆz˜7 AÓ&€AÜ
�ŠÐ*¨M¸1Ó=€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ä
�ŠØ0ØBØ	Ü�l‰lô		€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ßô �FŠFØCØØó
ˆ÷
 ô �FŠFÐ1°2°qÓ9ˆØ€Hr:   c              #  ó®  a"  € V3R lp \         P                  ! 4        \         P                  ! \         P                  4       . pVx € \         P                  ! 4        VP	                  \        V\         P                  4      4       \        V4      pV^ 8”  d`   \        P                  ! V R2^R7        ^ RI
p\        P                  ! RV  RS R2^R7       VRV   F  pVP                  V.^
R7       K  	  \         P                  ! ^ 4       R#   \         d    \        P                  ! R	^R7        L=i ; i  \         P                  ! ^ 4       i ; i5i)
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                 ó   <€ \        V S4      # r�   )rY   )r7  Úmatched_types   &€r;   Ú	match_objÚ'check_leaked_tensors.<locals>.match_obj&  s   ø€ Ü˜#˜|Ó,Ð,r:   zH tensors were found in the garbage. Did you introduce a reference cycle?rý  NzDumping first z objgraphs of leaked zs rendered to png)Ú	max_depthz6`pip install objgraph` to enable memory leak debugging)rø   rù   Ú	set_debugÚDEBUG_SAVEALLr�  r˜  ÚgarbagerÈ  r$  r%  ÚobjgraphÚshow_backrefsr£  )Úlimitr  r  Úgarbage_objsÚnum_garbage_objsr
  rO  s   &f     r;   Úcheck_leaked_tensorsr    s  øé € õ-ðÜ
�
Š
ŒÜ
�Š”R×%Ñ%Ô&Øˆð Òä
�
Š
ŒØ×ÑœF 9¬b¯j©jÓ9Ô:Ü˜|Ó,ÐØ˜aÔÜ�MŠMØ#Ð$Ð$lÐmÐz{õðfÛÜ—’Ø$ U GÐ+@ÀÀÐN_Ð`Ðmnõð & f uÓ-�AØ×*Ñ*¨A¨3¸"Ð*Ö=ñ .ô 	�Š�QŽøô	 ô fÜ—’ÐVÐcd×eðfûô 	�Š�Q�üs<   ƒE‹B*D: Â6AD Ã9EÄ#D7Ä4D: Ä6D7Ä7D: Ä:EÅEc                 ó  € \         P                  ! 4       p \        P                  P	                  V 4      '       dR   \
        '       d,   \        P                  ! RRV .\        P                  R7       R# \        P                  ! V RR7       R# R# )zC
Removes the default root folder under which extensions are built.
Úrmz-rf)rp  T)Úignore_errorsN)r-   Úget_default_build_rootr–   rá   r"  rH  rN  r  ré	  rT  rU  )Údefault_build_roots    r;   Ú remove_cpp_extensions_build_rootr  G  s\   € ô '×=Ò=Ó?ÐÜ	‡w�w‡~�~Ð(×)Ò)ß‹:ô �NŠN˜D %Ð);Ð<ÄZÇ_Á_×Uä�MŠMÐ,¸D×Añ *r:   c           	      óÞ  € \         P                  P                  V R 4      p\         P                  P                  V R4      pW3 F@  p\         P                  P                  V4      '       g   K*  \        P
                  ! V4       KB  	  \        P                  RRRV RRRV.	p\        W@\         P                  R7      pV^ 8w  d   \        RV  24      hR	p\         P                  ! V4       F7  w  rxp	V F+  p
R
V
9   g   K  \         P                  P                  Wz4      pK-  	  K9  	  Vf   \        RV  24      hV\        P                  9  d#   \        P                  P                  ^ V4       R	# R	# )r  Úinstallz-mÚpipr  z--no-build-isolationz--root)rn  ro  z"build failed for cpp extension at Nz	-packagesz)installation failed for cpp extension at )r–   rá   rh   r"  rT  rU  r8  r(  ru  r  ro  ÚwalkÚinsert)Úextension_rootÚ	build_dirÚinstall_dirrZ  r2  Úreturn_codeÚmod_install_dirÚrootÚdirectoriesrÁ   Ú	directorys   &          r;   Úinstall_cpp_extensionr#  U  s#  € ä—‘—‘˜^¨WÓ5€IÜ—'‘'—,‘,˜~¨yÓ9€KØÓ%ˆÜ�7‰7�>‰>˜!×ÔÜ�MŠM˜!Öñ &ô
 �>‰>˜4 ¨	°>À4ÐI_ÐaiÐkvÐ
w€CÜ˜´R·Z±ZÔ@€KØ�aÔÜÐ?ÀÐ?OÐPÓQÐQà€Oä "§¢¨Ö 4Ñˆ˜1Û$ˆIØ˜iÖ'Ü"$§'¡'§,¡,¨tÓ"?’ó %ñ !5ð
 ÒÜÐFÀ~ÐFVÐWÓXÐXàœcŸh™hÔ&Ü�‰�‰˜˜?Ö+ñ 'r:   c                 ó0   a € \        S 4      V 3R  l4       pV# )c                  ó   <€ R  pS! V RV/VB # )c                  ón  € \         '       d   \        P                  ! V / VB # R V9   d   \        R4      h\	        4       ;_uu_ 4       pVP                  RR4      '       d    \        RV R2\        P                  R7       W!R &   \        P                  ! V / VB uuRRR4       #   + '       g   i     R# ; i)Úbuild_directoryzEbuild_directory should not be specified when using scoped_load_inliner<  Fz$Using temporary extension directory z...ra  N)	rH  r-   Úload_inlinerš   rW  r  rg   r8  rq  )r†   r‡   Útemp_dir_names   *, r;   r(  Ú8scoped_load_inline.<locals>.wrapper.<locals>.load_inlinev  s“   € ß‹zä$×0Ò0°$ÐA¸&ÑAÐAà  FÔ*Ü$Ð%lÓmÐmÜ'×)Ô)¨]Ø—:‘:˜i¨×/Ò/ÜÐ@ÀÀÈsÐSÔZ]×ZdÑZdÕeØ,9Ð(Ñ)Ü$×0Ò0°$ÐA¸&ÑA÷	 *×)×)Ó)ús   ÁAB#Â#B4	r(  r1   )r†   r‡   r(  r  s   *, €r;   rý   Ú#scoped_load_inline.<locals>.wrappert  s    ø€ ò	Bñ �TÐ= {Ð=°fÑ=Ð=r:   r†  r‡  s   f r;   Úscoped_load_inliner,  r  s    ø€ ä
ˆ4ƒ[ô>ó ð>ð €Nr:   c                  óN   € R R R 3RR R 3RR R 3R	R
 R 3RR R 3RR R 33# )z)torch.backends.cuda.matmul.fp32_precisionc                  ó^   € \         P                  P                  P                  P                  # r�   )rw   r^  rA   rx
  Úfp32_precisionr1   r:   r;   r�   Ú,_fp32_precision_flag_specs.<locals>.<lambda>Œ  s   € ”E—N‘N×'Ñ'×.Ñ.×=Ò=r:   c                 ó`   € \        \        P                  P                  P                  R V 4      # ©r/  )r„  rw   r^  rA   rx
  ©rµ  s   &r;   r�   r0  �  s   € ”gœeŸn™n×1Ñ1×8Ñ8Ð:JÈAÔNr:   z(torch.backends.cudnn.conv.fp32_precisionc                  ó^   € \         P                  P                  P                  P                  # r�   )rw   r^  ÚcudnnÚconvr/  r1   r:   r;   r�   r0  �  s   € ”E—N‘N×(Ñ(×-Ñ-×<Ò<r:   c                 ó`   € \        \        P                  P                  P                  R V 4      # r2  )r„  rw   r^  r5  r6  r3  s   &r;   r�   r0  �  s   € ”gœeŸn™n×2Ñ2×7Ñ7Ð9IÈ1ÔMr:   z'torch.backends.cudnn.rnn.fp32_precisionc                  ó^   € \         P                  P                  P                  P                  # r�   )rw   r^  r5  Úrnnr/  r1   r:   r;   r�   r0  ’  s   € ”E—N‘N×(Ñ(×,Ñ,×;Ò;r:   c                 ó`   € \        \        P                  P                  P                  R V 4      # r2  )r„  rw   r^  r5  r9  r3  s   &r;   r�   r0  “  s   € ”gœeŸn™n×2Ñ2×6Ñ6Ð8HÈ!ÔLr:   z+torch.backends.mkldnn.matmul.fp32_precisionc                  ó^   € \         P                  P                  P                  P                  # r�   )rw   r^  Úmkldnnrx
  r/  r1   r:   r;   r�   r0  •  s   € ”E—N‘N×)Ñ)×0Ñ0×?Ò?r:   c                 ó`   € \        \        P                  P                  P                  R V 4      # r2  )r„  rw   r^  r<  rx
  r3  s   &r;   r�   r0  –  s   € ”gœeŸn™n×3Ñ3×:Ñ:Ð<LÈaÔPr:   z)torch.backends.mkldnn.conv.fp32_precisionc                  ó^   € \         P                  P                  P                  P                  # r�   )rw   r^  r<  r6  r/  r1   r:   r;   r�   r0  ˜  s   € ”E—N‘N×)Ñ)×.Ñ.×=Ò=r:   c                 ó`   € \        \        P                  P                  P                  R V 4      # r2  )r„  rw   r^  r<  r6  r3  s   &r;   r�   r0  ™  s   € ”gœeŸn™n×3Ñ3×8Ñ8Ð:JÈAÔNr:   z(torch.backends.mkldnn.rnn.fp32_precisionc                  ó^   € \         P                  P                  P                  P                  # r�   )rw   r^  r<  r9  r/  r1   r:   r;   r�   r0  ›  s   € ”E—N‘N×)Ñ)×-Ñ-×<Ò<r:   c                 ó`   € \        \        P                  P                  P                  R V 4      # r2  )r„  rw   r^  r<  r9  r3  s   &r;   r�   r0  œ  s   € ”gœeŸn™n×3Ñ3×7Ñ7Ð9IÈ1ÔMr:   r1   r1   r:   r;   rB  rB  ‰  sp   € à	4Ù=ÙNð	Pð 
4Ù<ÙMð	Oð 
3Ù;ÙLð	Nð 
7Ù?ÙPð	Rð 
5Ù=ÙNð	Pð 
4Ù<ÙMð	Oð!ð r:   c                  óz   € \         ;QJ d    . R  \        4        4       F  NK  	  5# ! R  \        4        4       4      # )c              3   ó4   "  € T F  w  rq! 4       x € K  	  R # 5ir�   r1   )ró   rÁ   r  s   &  r;   rô   Ú+_snapshot_fp32_precision.<locals>.<genexpr>¡  s   é € ÐEÑ(D™9˜1 1�—�Ó(Dùs   ‚)r‡  rB  r1   r:   r;   r7  r7     s,   € ßŒ5ÑEÔ(BÔ(DÓE�5ÐEˆ5ÑEÔ(BÔ(DÓEÓEÐEr:   c                 ó^  € \        4       p\        V \        4      '       d   \        V 4      \        V4      8w  dT   \	        R \        V4       R\        V 4      P                   R\        V R4      '       d   \        V 4       24      hR 24      h\        W4       F  w  w   r#pV! V4       K  	  R# )z"fp32 precision snapshot must be a z-tuple, got z of length Ú__len__ÚunknownN)	rB  rY   r‡  rÈ  rZ   rP   r2   r&  r²  )ÚsnapshotrF  rÁ   r÷  r§   s   &    r;   rA  rA  ¤  s®   € Ü&Ó(€EÜ�h¤×&Ò&¬#¨h«-¼3¸u»:Ô*Eô Ø0´°U³°ð =Ü˜“>×*Ñ*Ð+¨;Ü '¨°)× <Ò <Œs�8‹}ÐLðNó
ð 	
ð CLÐLðNó
ð 	
ô
  # 5Ö3Ñ‰ˆˆA�eÙˆUŽó  4r:   c                 óH   € \         P                  R  4       pV! 4       ! V 4      # )c               3   ób   "  € \        4       p  R x € \        V 4       R #   \        T 4       i ; i5ir�   )r7  rA  )Úsnaps    r;   ÚrecoverÚ,recover_orig_fp32_precision.<locals>.recover´  s&   é € ä'Ó)ˆð	*Ûä# DÖ)øÔ# DÕ)üs   ‚/Ž ’/Ÿ,¬/)r  r   )rü   rL  s   & r;   Úrecover_orig_fp32_precisionrN  ³  s(   € Ü×Ññ*ó ð*ñ Œ9�R‹=Ðr:   c                 óH   a a€ \         P                  o\        V V3R  lR4      # )c                  ó^   <€ S ! SP                   SP                  SP                  4      '       * # r�   )ÚmajorÚminorÚmicro©Ú	predicateÚvis   €€r;   r�   Ú-skipIfPythonVersionMismatch.<locals>.<lambda>Á  s   ø€ ‘I˜bŸh™h¨¯©°"·(±(Ó;Õ;r:   zPython version mismatch)r8  r;  r  rT  s   f@r;   ÚskipIfPythonVersionMismatchrX  ¾  s!   ù€ Ü	×	Ñ	€BÜÝ;Ð=Vóð r:   c                óF   € V ^8„  d   QhR\         \        \        3,          /# )rM   Úupdates)rµ   r­   r   )rS   s   "r;   rT   rT   Å  s   € ÷ ñ ¤¤S¬# X¥ñ r:   c                 ó   a € V 3R  lpV# )c                 ó4   <a € \        S 4      V V3R  l4       pV# )c                 óD  <€ S Uu/ uF  q3\        W4      bK  	  ppSP                  4        F  w  r5\        WV4       K  	   S! V .VO5/ VB VP                  4        F  w  r6\        WV4       K  	  # u upi   TP                  4        F  w  r6\        YT4       K  	  i ; ir�   )rX   r^   r„  )	r  r†   r‡   ÚmemberÚoriginal_valuesr§   Úoriginal_valuer\  rZ  s	   &*,    €€r;   rý   Ú6patch_test_members.<locals>.decorator.<locals>.wrapperÇ  s¦   ø€ ñ LSÓSÉ7À¤w¨tÓ'<Ò<É7ˆOÐSð ")§¡¦‘�Ü˜ eÖ,ñ "1ð:Ù  Ð7¨Ò7°Ñ7ð />×.CÑ.CÖ.EÑ*�FÜ˜D¨.Ö9ò /Fùò Tøð />×.CÑ.CÖ.EÑ*�FÜ˜D¨.Ö9ò /Fús   †A3ÁA8 Á8'Br†  )r\  rý   rZ  s   f €r;   r�  Ú%patch_test_members.<locals>.decoratorÆ  s!   ù€ Ü	ˆyÓ	õ	:ó 
ð	:ð  ˆr:   r1   )rZ  r�  s   f r;   Úpatch_test_membersrc  Å  s   ø€ õð& Ðr:   c                 óØ   €  \         P                  ! . RO\         P                  RR7      P                  4       p \	        V P                  R4      ^ ,          4      #   \         d     R# i ; i)zC
Return GCC major version as int, or None if GCC is not available.
T)rq  r¬	  rW   N)Úgccz-dumpfullversionz-dumpversion)rN  rû	  rü	  r�  rÕ   r{   r  )r¿
  s    r;   Úget_gcc_major_versionrf  Û  s^   € ðÜ×%Ò%Ú7Ü×$Ñ$Øô
÷ ‰%‹'ð	 	ô
 �3—9‘9˜S“> !Õ$Ó%Ð%øÜô Úðús   ‚AA ÁA)Á(A)c                 ó¼  a
aa€ ^ RI Hp Vf   / pVf   \        V 4      p\        W4      '       g   V .V,          p \        P
                  ! V4      o
R.V,          oRoV
VV3R lp\        V 4       UUu. uF#  w  rg\        P                  ! WVV.VO5VRR7      NK%  	  pppV F  p	V	P                  4        K  	  V F  p	V	P                  4        K  	  Se   ShS# u uppi )ru   )r   Nc                 óz   <€  SP                  4        V! V/ VB pVSV &   R #   \         d   pTo R p?R # R p?ii ; ir�   )rb  r  )	r¬  r  r†   r‡   r9  rq   Úbarrierrv  Úresultss	   &&*,  €€€r;   Úwrapper_funcÚ&run_concurrently.<locals>.wrapper_funcü  s>   ø€ ð	Ø�L‰LŒNÙ˜Ð' Ñ'ˆCØˆG�C‹LøÜô 	àŽIûð	ús   ƒ" ¢:­5µ:T)r,  r†   r‡   Údaemon)
Úcollections.abcr   rÈ  rY   r9  ÚBarrierr1  r:  r;  rh   )Úworker_funcÚnum_threadsr†   r‡   r   rk  r-  r  Úworkersr£	  ri  rv  rj  s   &&&&      @@@r;   Úrun_concurrentlyrs  ê  så   ú€ õ )à‚~ØˆØÒÜ˜+Ó&ˆÜ�k×,Ò,Ø"�m kÕ1ˆä×Ò Ó,€Gàˆf�{Õ"€GØ€I÷ô ! Ô-ôñ .‰GˆAô 	×Ò °tÐ3C¸dÑ3CØ &¨t÷	5á-ð ñ ó
 ˆØ	�‰Ž	ñ ãˆØ	�‰Žñ ð ÒØˆà€Nùós   Á2)Cc                ó,  € V ^8„  d   Qh/ ^ \         9   d   \        R,          ;R&   ^\         9   d   \        \        ,          ;R&   ^\         9   d   \        \
        ,          R,          ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R	&   ^\         9   d
   \        ;R
&   ^	\         9   d
   \        ;R&   ^
\         9   d   \        R,          ;R&   ^\         9   d   \        R,          ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   ^\         9   d
   \        ;R&   # ) rM   Nró  rY  rV  r»   rÂ   ÚIN_RE_WORKERrÉ   rË   rÍ   rÏ   rÑ   rÙ   ÚNO_MULTIPROCESSING_SPAWNrÛ  rÝ  rß  rá  rã  rè  rë  rí  rï  rñ  r  r"  r$  r&  r)  rÅ  rå
  )Ú__conditional_annotations__r0   rg  r­   ra   r=   r¿   rÕ   )rS   s   "r;   rT   rT      sé  € ÷ ñ ÷F -Ò ,” Õ%Ñ ,ñG÷^ Ò ””S•	Ñ ñ_÷b >Ò =”CÔ.Õ/°$Õ6Ñ =ñc÷fò „tñ ñg÷rò Œtñ ñs÷~ DÒ CŒdÑ Cñ÷Lò Œ4ñ ñM÷Xò Œtñ ñY÷dò œDñ ñe÷pò œñ ñq÷@ò œ3 �:ñ ñA÷Zò œ˜d�
ñ ñ[÷J9 'Ò &œ$Ñ &ñK9÷L9ò ”ñ ñM9÷T9ò œñ ñU9÷\9ò ”ñ ñ]9÷d9ò ”ñ ñe9÷l9ò ”ñ ñm9÷v9ò ”ñ ñw9÷H:ò ”ñ ñI:÷Z:ò ”ñ ñ[:÷r:ò ”Dñ ñs:÷|:ò ”Tñ ñ}:÷P<ò ”Tñ ñQ<÷@>ò œñ ñA>÷J>ò ”Tñ ñK>÷R>ò ”tñ ñS>÷\>ò ¤ñ ñ]>÷vHò œ$ñ ñwH÷jtò œ$ñ òktr:   )Úgfx950)Úgfx942)Úgfx90a)Úgfx1030Úgfx1100Úgfx1101Úgfx1200Úgfx1201)r|  r}  )r~  r  )r@   rA   rC   )ÚorinÚconcordÚgalenÚxavierÚnanoÚjetsonÚtegraÚthorr�   )NNNNN)NNNNNr   FrK   rœ  )Úx86_64Úi386)Úarm64Úaarch64ÚARM64)ÚSVE128rD  r!  i   @)z+Test doesn't work with free-threaded python)z'test doesn't currently work with dynamo)z2test doesn't currently work with compiled autogradré  )z@test doesn't currently work with torchinductor on the ROCm stack)z4test doesn't currently work with legacy JIT executor)z3test doesn't currently work with nn module inliningTrõ  r’   )r8  r8  F)rž
  )rA   )Nr1   N(=  rw  rD   re  r2  r  r'  r,  r½	  r   rø   rD  r  Úiorç   rÃ  rX  re  r–   rø	  rò   r?  r˜  rT  rg  r
  rN  r8  rH  r9  r/
  r  rQ   r$  rn  r   r   r   r   r   Údataclassesr   Úenumr   r	   r
   Ú	itertoolsr   r   r   Ú
statisticsr   Útypingr   r   r   r   r   Úunittest.mockr   rW  r†  r,  r1  rw   Útorch.backends.cudnnÚtorch.backends.mklÚtorch.backends.mpsÚtorch.backends.xnnpackÚ
torch.cudar   Útorch._Cr   r   Ú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)   r*   Ú$torch.testing._internal.common_dtyper+   Útorch.utils._import_utilsr,   Útorch.utils._pytreer  Ú_pytreer‰  Útorch.utilsr-   Útorch._utilsr.   r«  rŒ  r£  rH  Ú
MI350_ARCHÚ
MI300_ARCHÚ
MI200_ARCHÚ	NAVI_ARCHr|   Ú
NAVI4_ARCHr0   r=   rî   ró  rC  rK  rS  r?  rE  rU  rí   rG  rM  rO  rQ  rY  rI  rV  r\   rs   r   r„   r‰   rÄ  r2   ré   r^  Údisable_global_flagsÚFILE_SCHEMAr¡   r»   rÂ   r  r  ru  r&  rÞ   rÈ   Ú_is_fbcode_defaultrÉ   rË   rÍ   rÏ   r¨   rÑ   rÙ   r5  rà   r&  r#  rä   rì   r—   Úslow_tests_filerê  Ú_get_privateuse1_backend_namerˆ	  Ú"DEVICE_LIST_SUPPORT_PROFILING_TESTÚALLOW_XPU_PROFILING_TESTÚcheck_namesrö  r÷   r  r  r  r#  r'  r)  rV  r_  r~  r�  r’  r›  rÑ  rÜ  rð  rô  rö  rû  ÚScriptFunctionrb  r  ÚScriptMethodr  rÿ  r  r  r	  r  r^  rk  ru  r~  r‚  rŠ  r�  r•  rš  rž  r®  rÂ  rÚ  rŒ  rÜ  r=  rE  rH  rØ  ÚmachineÚIS_PPCÚIS_X86ÚIS_ARM64r  r@   Úget_capabilitiesÚIS_AVX512_VNNI_SUPPORTEDÚIS_CPU_EXT_SVE_SUPPORTEDÚ_get_cpu_capabilityÚIS_CPU_CAPABILITY_SVEÚIS_CPU_CAPABILITY_SVE256rN  rW  r‚  r„  ÚgetfilesystemencodingÚIS_FILESYSTEM_UTF8_ENCODINGrÜ  ÚTEST_FAIRSEQrö  Úmklrx   ÚTEST_MKLr<  rŸ   ÚTEST_ONEDNNÚopsÚ_is_mkldnn_acl_supportedr2  rB   r   rª  rh   Úmac_verr{   ÚMACOS_VERSIONrC   r  r¿   rŠ  r*  rA   rÎ  ÚTEST_ACCELERATORÚTEST_MULTIACCELERATORÚACCELERATOR_TYPErX   Úcustom_device_modÚTEST_PRIVATEUSE1ÚTEST_PRIVATEUSE1_DEVICE_TYPEÚ
TEST_NUMBAÚTEST_TRANSFORMERSÚ	TEST_DILLÚTEST_LIBROSAÚTEST_OPT_EINSUMÚTEST_Z3rš  r½  ÚTEST_TRITON_DSLÚTEST_CUTEDSLÚTEST_HELION_DSLrÅ  Ú
NOTEST_CPUrÊ  ÚskipIfNoDillÚskipIfNoTritonDSLÚskipIfNoCuteDSLÚskipIfNoHelionDSLrÎ  rÒ  rÕ  r¬  rÚ  rv  rÛ  rÝ  rß  rá  rã  rè  rH  rë  rí  rï  rñ  ræ  rç  ÚTEST_CUDA_GRAPHÚTEST_CUDA_CUDSSÚ!TEST_CUDA_GRAPH_CONDITIONAL_NODESÚTEST_CUDA_PYTHON_BINDINGSÚTEST_NVMATHÚskipIfNoNvmathrü  r  r  rÕ   Ú	num_procsrƒ  Úgb_availableÚset_per_process_memory_fractionrÈ	  rÑ  Úrequires_cudar  r  Ú	overridesÚTorchFunctionModer  r"  r$  r&  r)  Útorch._dynamor‚  rÏ  Úaccumulated_recompile_limitÚlog_compilation_metricsÚissue_3_13_0_warningÚtorch._inductor.configr  Úfallback_randomrƒ  r0  Úrequires_mklÚrequires_onednnr3  r6  r<  rA  rC  rF  rI  rK  rO  rS  ra  rh  rr  r~  r‰  r‘  r—  r¤  r¦  r¬  r²  ÚTEST_WITH_TVÚfxÚexperimentalÚ_configÚtranslation_validationrÅ  Úbool_r,  r/  r1  r3  r2  r5  r0  r  r¼
  r  r;  r  r=  rÈ  rÌ  rÏ  Úintcr^   r9	  r	  r8	  Ú	complex32rÖ  rÜ  rç  rì  r÷  rý  r  r	  r  r  r  r  r'  r-  r1  r7  rA  rE  rJ  rN  rR  Úrequires_cuda_python_bindingsr[  rf  ro  rt  rv  r”  r¢  r¯  rÊ  rÑ  rÎ  rà  rå  rê  rï  ró  rø  rý  r  r  r  r  r  r  r%  r)  r<  rI  rB  rF  rV  r]  r_  rc  re  rz  r�  rž  r¢  r¥  Úregister_profileÚHealthCheckÚtoo_slowÚ	VerbosityÚnormalr<  Úload_profiler%  ÚImportWarningr¶  rá  rã  rû  r  r#  r6  rE  rI  rK  rM  r‰  Ú_AssertRaisesContextrO  r[  r]  rR   r
  r
  r'
  ÚADDRESS_IN_USEÚCONNECT_TIMEOUTr4
  rB
  rS
  rN
  rX
  r_
  rf
  rk
  rn
  rp
  ru
  rz
  r|
  r~
  rƒ
  r‹
  r�
  r”
  r�
  r£
  rº
  rÀ
  rÒ
  rÕ
  r×
  rÚ
  rÞ
  ÚBytesIOrà
  ÚGRADCHECK_NONDET_TOLrå
  ÚskipIfSlowGradcheckEnvrì
  rð
  rô
  rú
  ÚhalfÚdtype2prec_DONTUSErÿ
  r	  r  r  r  r"  r$  rE  rP  rU  rW  r§  r_  re  Ú	lru_cachery  rz  r  r�  r†  r’  rš  rœ  rÙ  r¼  r  r  r#  r,  rB  r7  rA  rN  rX  rc  rf  rs  rT   )r  r§   rw  s   00@r;   Ú<module>r     s%  øð÷ð ó Û Û Û Û Û Û Û 	Û Û Û 	Û Û Û Û Û 	Û Û Û Û 	Û Û Û Û Û 
Û Û Û Û Û Û ß -ß .Ý Ý !Ý ß $ß $Ý Ý ÷õ %ß .Ý #ã Û ã Û Û Û Û Û Û Ý ß +Ý 3Ý 6÷õ ÷õ &÷÷ ñ õ @Ý :ß $Ð $Ý %Ý :ðÛØ€Jð €Ù€
Ù€
Ù€
ÙC€	Ù#€
Ù#€
ô�Dô ô
,˜Tô ,ð` Ð Ø(,€Ó ,Ø€
ØÐ Ø€ØÐ Ø€Ø€
Ø€Ø€Ø€ØÐ Ø€Ø€Ó Ø€
Ø9=Ð Ó =õõ (òVòB÷eXñ eXðP ×Ó˜Ó!€Ø ‡‚× #Ò #Ô %à€Ø‡<�<�7ÔØ€Kð ×&Ò&ØØØÙ;ð	 'ó €ó ð &×.Ò.ØØÙBØð	 /ó €ó ð —Z’Z—^’^Ð$6Ó7¸tÐC€Ó Cñ ˆE×!Ò! =Ó1÷ &ð &Ø	×Ò×%Ò%ð ð
 "×*Ò*ØØ!ØØð	 +ó €	ó ð &×.Ò.ØØ%Øð /ó €ó ð $3×#;Ò#;Ø Ø0Øð $<ó $Ð ó ð  /×7Ò7ØØ,ØŒ]Øð	  8ó  Ð ó ð )8×(CÒ(CØØ/Øð Ù:ð )Dó )Ð ó ð &5×%@Ò%@ØØ$Øð Ù:ð &Aó &Ð ó ð =Ð Ø+Ð àÐ Ø€õ8òð —)“)Ð-¨rÓ2×ZÐZÑ6XÓ6Z€ßÙ% oÓ6€OØ$3€B‡J‚JÐ Ñ!Ø‡9ƒ9Ð" B×'Ò'Ù)¨"¯)«)Ð4IÈ2Ó*NÓOÐà˜ ¨°°v¸u¿xºx×?eÒ?eÓ?gÐh€ñ &<Ð "ØÐ ãW€ßÑD¹ÓD�C�CŠCÑD¹ÓDÓD€	òõð& ÷ð ó ðõ3õ!÷?3ñ ?3÷B1ñ 1òh&òRQò$.÷b;ñ ;ô(CYÐ#ô CYôL4XÐ%ô 4Xôn<:Ð"ô <:ò~$ð ñGó ðGð ñCó ðCð ñ:ó ð:ð �HŠH×#Ò#×,Ò,€	Ø�HŠH×!Ò!×*Ò*€	ò
%ò#ò
5ò5ð $2€‡‚× Ò Ô  Ø!/€‡‚× Ò Ô ò5òSõl õD0÷ 8ð 8òvòHòò5ò'òõ&õõ('ô$0. x×':Ò':ô 0.õfl8ð\ �<‰<˜7Ñ"€Ø�\‰\˜WÑ$€
Ø�<‰<˜8Ñ#€Ø	×	Ó	Ó	˜yÑ	(€Ø	×	Ó	Ó	Ñ1Ñ	1€Ø×ÓÓÑ!>Ñ>€Ø×ÓÓ Ñ(€Ø Ÿ9š9×5Ò5Ó7×;Ò;¸MÈ5ÓQÐ Ø Ÿ9š9×5Ò5Ó7×;Ò;¸EÀ5ÓIÐ ØŸš×4Ò4Ó6Ñ:NÑNÐ Ø Ÿ8š8×7Ò7Ó9¸XÑEÐ çØñó ñð  ñó ð÷ Øô$ó ñ$ð ôó ðò
ðB ÷	ð 	ó ð	ð "×7Ó7Ó9¸WÑDÐ á! 'Ó*€
Ù# IÓ.€Ù! 'Ó*€
Ø�>Š>×Ò×*Ò*Ó,€Ø�nŠn×#Ò#×+Ò+×TÐT°·²×0EÒ0E×0RÒ0RÓ0T€Ø�>Š>× Ò ×-Ò-Ó/×_Ð_°E·I²I×4DÒ4D×4]Ò4]Ó4_�Ø�>Š>×Ò×*Ò*Ó,�Ú�c—h’h˜x×/Ó/Ó1°!Õ4×:Ò:¸3Ó?ÀÕCÓD×JÐJÉÓK�Ø�9Š9×!Ò!Ó#�Ú‘˜˜uÓ%×BÐB¨%¯)ª)×*@Ò*@Ó*BÓC�Ø�JŠJ×#Ò#Ó%�	ÙÑCÓDÑ ÙÑ LÓMÑ ÙÑ}Ó~Ñ Ú˜E 5§8¢8×#IÒ#IÓ#KÈTÓRÑ Ù4Ó6Ñ Ø$Ÿxšx×EÒEÓGÑ Ù! 'Ó*�
Ù(¨Ó8Ñ Ù  Ó(�	á# IÓ.×?Ð?°x´<�á& |Ó4�á
˜tÓ
$�÷Nò Nò> ‹~�ñ ÑEÓF�ÙÑCÓD�ÙÑEÓF�ö/ð Ò(¨¯«Ð3VÐXZÓ)[Ó\Ñ\�
à�‹¡9œ}¨iÓ8�ð —O“O©Ô$7Ð9SÓTÑ Ø—/“/¡lÔ"2Ð4KÓL�Ø—O“O©Ô$7Ð9SÓTÑ ÷/ñ /÷/ñ /ö)ö/ö#ð
 "'Ñ Ó &Ø&×/Ò/ØØ$ð 0ó �ó ð  /×7Ò7ØØ,ð  8ó  Ñ ó ð '×/Ò/ØØ$ð 0ó �ó ð (×0Ò0ØØ%ð 1ó �ó ð '×/Ò/ØØ$Ù7ð 0ó �ó ð
 '×/Ò/ØØ$ð 0ó �ó ð !#§	£	Ð*GÈÓ MÐQTÑ TÑ à&×/Ò/ØØ$ð 0ó �ó ð '×/Ò/ØØ$ð 0ó �ó ð +×3Ò3ØØ(ð 4ó Ñ ó ð
 ,×4Ò4ØØ)ð 5ó Ñ ó ñ ÷ ð Ñ%8Ô!8÷ ð Ø	‡M‚M×Ò×+Ð+˜%Ÿ-š-×+Ò+ñ ñ ×>Ð> §¢× 2Ò 2¸$Ð >�Ù$3×$VÐ$V¸¿º×8JÒ8JÐRVÐ8VÑ !á0°ÓA×dÐdÀeÇmÂm×FXÒFXÐ`dÐFdÑ Ù"Ð#4Ó5×XÐX¸%¿-º-×:LÒ:LÐTXÐ:X�Ø—“¡[¤Ð2OÓP�çÐô!ð #Ñó	ð ,×4Ò4ØØ%Ø× Ò Ñ!<ÐEZÔ[ð 5ó Ñ ó ÷ €9Ð%¨¯ªÔ3Ú�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ó Ñ ó ð .×6Ò6ØØ&ÙHð 7ó Ñ ó ð
 (7×'?Ò'?Ø$Ø4ð (@ó (Ñ ó ÷
 ÐÜà79€E‡M‚M×ÒÕ4à38€E‡M‚M×ÒÕ0à05€E‡M‚M×ÒÕ-ßÐÜ%Ø15ˆ�Š×ÒÖ.ñ 6TÔ1Sˆ�Š×ÒÕ.óMð ×"Ó" 8Ð-@ÓA�Ø×%Ó% kÐ3PÓQ�ó@óMóSóSóRóióBóUö÷ð ô'÷TR÷ñ< MÙ"9ö÷,÷&÷÷&÷<^÷÷2#ó #ðN �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˜Uš[Ñ=^Ò_Ñ Ù ×  Ò  Ø	‡N‚N�B—J’JØ	‡O‚O�R—\’\ð"ô ÷
ó4>Ñ!P÷ >óÑ'V÷ ÷ Fó F÷,ð ,÷ð ô÷	ð 	ô@ôó>Ñ N÷ >óÑ&T÷ ô #ôLVô÷.ð .÷
T÷ 
Yô
ó>Ñ$V÷ >ó>Ñ'Y÷ >ð !)× 3Ó 3Ñ4MÑOuÓ vÑ ôô,ôô÷ ô  ÷2Wô W÷"	@ô 	@÷
Yô 
YôR÷:öTÐõ Tô	`ôô

ô`ô?ô_ô
ô
_ô

ôô4ôôô÷ô*-÷ð ×Ñò-ó ñ-÷"ô "ðJ ×Ñò9ó ñ9ô7ô÷÷./ô /÷4~(ô ~(ð@ ò@ó ñ@ð ò"ó ñ"ðL$xÝô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ñ ×Ò×$Ò$ßŠ 2§9£9Ñ-IÉ5Ó#Qô÷ð ÷K`ð K`öl&6˜õ &6öR:˜
õ :öz ˜õ  ö2
�~õ 
ö,T�4õ Tö6‘õ ö
‰lõ ö‰|õ ö‘õ ö9°8·=²=×3UÒ3Uõ 9ð ö'ó ñ'÷ô ö
rGˆz×"Ò"õ rGöj3	‘8õ 	÷,ô(ñ  *�Ù(�à#'¹ö ÷4ð2 16·²ÀUö 
0ñ&¹sñ &É%ö &ô4ô*ôôôñ	ÀÇÂñ 	ÐUZö 	ôDôô
IñÐ^cö ô*&ô>ô2÷
/ð 
/÷÷*6sôr1ô3Hðl Ñ ôô	
ô	ö�R—Z’Zõ ñ Ñ à!0×!9Ò!9ÙÙ.ð ":ó "Ñ ó ð
 "Ÿ›ÙÙKóÑ ô:÷,Lô*Dð öó ñð —k’k¡4Ø—l’l¡DØ—j’j¡$Ø—n’n¡dð,Ñ ôôð& ×Ñòó ñ÷3ð 3ôô(ôF÷,9ð ,9ô^ôô ô*$÷
ð ÷7ð 7ð( ×Ò÷.#ñ .#ó ñ.#ñf ‰CƒL�÷Pð Pôð ò=ó ñ=ô	ôöK>‘Hõ K>öb&[™8õ &[ñR9 Dñ 9¸$ñ 9ÀTñ 9ÐPQñ 9Ð`dñ 9ð  Cö 9ðx Ø ¨u¯|©|ô 'ó ñ'ôTBô,ô:ô.ô.Fôô	ô÷ð ô,÷*ñ *øðKL ô ØƒJðüóXG `øðr ô xØ‡MƒMÑYÑ[hÐuv×wÑwðxús8   Å/Ae ÁGAeÁP8EAe" Áe	AeÁeAeÁe" AfÁfAf