+
    –°³jA’  ã                   óÌ  a € Rq tG0 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Ht ^ RIHt ^ RIHtHt ^ RI	Ht ^ RIHtHtHtHtHtHt ^ RIt^ RIHt ^ RIHtH t  ^ R	I!H"t" ^ R
I#H$t$H%t% ^ RI&H't' ]PP                  ! ])4      t*R R lt+R R lt,R R lt- ! R R]4      t. ! R R] 4      t/]! R4      t0 ! R R4      t1R R lt2]2! 4       '       d   RR.t3MR.t3 ! R R]4      t4R]3R R!R"R#R$R#/R%R&R'/R(R&R#/R)R&R#/R*/ R+/ /R)/ R%/ R,/ R-/ R.R/R#//.R0R1R#R2R#/R1R#R2R'/R1R'R2R#/R1R'R2R'/.R3R1R#R2R#/R1R#R2R'/R1R'R2R#/R1R'R2R'/.R4]'! 4       .R5]'! 4       ./t5] ^ k ]]6]7],          ].]3,          t8 ! R6 R7]4      t9 ! R8 R94      t:]:! 4       t;]<]6R:3,          t= ! R; R<4      t>]?]6]3,          t@]. ]A3,          tB]. ]B3,          tCR=/ R>R#bR?];bR@];bRA];bRB];bRC];bRD];bRE];bRF];bRG];bRH];bRI];bRJ];bRK];bRL];bRM];bRN];b/ RO];bRP];bRQ];bRR];bRS];bRT];bRU];bRV];bRW];bRX];bRY];bRZ];bR[];bR\];bR]];bR^];bR_];bCR`];Ra];Rb];Rc];Rd];Re];Rf];Rg];/CRhR4];R5];Ri];Rj];Rk];RlR'//tD] ^k  ! Rm Rn4      tERrRo Rp lltFR# )sé    N)ÚCallableÚKeysViewÚSequence)ÚEnum)ÚpartialÚwraps)Ú	FrameType)ÚAnyÚget_argsÚ
get_originÚLiteralÚTypeVarÚUnion©Ú#min_cut_rematerialization_partition)ÚCustomGraphPassÚCustomPartitionerFn)ÚBaseSchedulerNode)Ú_ConfigEntryÚConfigModule)Ú
OrderedSetc                ó$   € V ^8„  d   QhR\         /# ©é   Úreturn©Úbool)Úformats   "ÚW/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/_inductor/fuzzer.pyÚ__annotate__r       s   € ÷ Hñ H¤Tñ Hó    c                ó2   € WJ ;'       g    \        V 4      VJ # )a:  
Determines if type_hint is comp_type. There are some type annotations that this doesn't work for.
I think it's because some Type annotations are Type Objects and some are Special Forms, but not sure.
There's definite room for improvement to make this more general for someone who deeply understands
Python types.
)r   )Ú	type_hintÚ	comp_types   &&r   Úis_typer%      s   € ð Ð!×GÐG¤Z°	Ó%:¸iÐ%GÐGr!   c                ó$   € V ^8„  d   QhR\         /# r   r   )r   s   "r   r    r    %   s   € ÷ 
ñ 
¤4ñ 
r!   c                ób   € \        V 4      pV\        J d   \        V 4      p\        R4      V9   # R# )z
Special case of is_type.
NF)r   r   r   Útype)r#   ÚoriginÚargss   &  r   Úis_optional_typer+   %   s1   € ô ˜	Ó"€Fà”ƒÜ˜	Ó"ˆÜ�D‹z˜TÑ!Ð!ár!   c                ó$   € V ^8„  d   QhR\         /# r   r   )r   s   "r   r    r    2   s   € ÷ ,ñ ,¤4ñ ,r!   c                ó    € V P                   R8H  # )z
Special Case of is_type.
r   )Ú__name__)r#   s   &r   Úis_callable_typer/   2   s   € ð ×Ñ Ñ+Ð+r!   c                   óH   a € ] tR t^9t o RtV 3R lR ltV 3R lR ltRtV tR# )Ú	DummyPassz)
A Dummy pass to be used by ConfigFuzzer
c                ó`   <€ V ^8„  d   QhRS[ P                  P                  P                  RR/# )r   Úgraphr   N)ÚtorchÚfxr3   ÚGraph)r   Ú__classdict__s   "€r   r    ÚDummyPass.__annotate__>   s)   ø€ ÷ ñ ™eŸh™hŸn™n×2Ñ2ð °tñ r!   c                ó   € R # ©N© )Úselfr3   s   &&r   Ú__call__ÚDummyPass.__call__>   ó   € Ùr!   c                ó.   <€ V ^8„  d   QhRS[ R,          /# ©r   r   N©r
   )r   r7   s   "€r   r    r8   A   ó   ø€ ÷ ñ ‘c˜D•jñ r!   c                ó   € R # r:   r;   ©r<   s   &r   ÚuuidÚDummyPass.uuidA   r?   r!   r;   N©	r.   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r=   rF   Ú__static_attributes__Ú__classdictcell__©r7   s   @r   r1   r1   9   s   ø‡ € ñ÷ð ÷ö r!   r1   c                   óH   a € ] tR t^Et o RtV 3R lR ltV 3R lR ltRtV tR# )ÚDummyPartitionerFnz9
A Dummy partitioner function to be used by ConfigFuzzer
c          
      óÐ   <€ V ^8„  d   QhRS[ P                  P                  RS[S[,          RS[RS[S[ P                  P                  S[ P                  P                  3,          /# )r   ÚgmÚjoint_inputsÚkwargsr   )r4   r5   ÚGraphModuler   Úobjectr
   Útuple)r   r7   s   "€r   r    ÚDummyPartitionerFn.__annotate__J   s`   ø€ ÷ Oñ OÙ—(‘(×&Ñ&ðOÙ6>¹vÕ6FðOÙRUðOá	‰u�x‰x×#Ñ#¡U§X¡X×%9Ñ%9Ð9Õ	:ñOr!   c                ó   € \        W3/ VB # r:   r   )r<   rS   rT   rU   s   &&&,r   r=   ÚDummyPartitionerFn.__call__J   s   € ô 3°2ÑNÀvÑNÐNr!   c                ó.   <€ V ^8„  d   QhRS[ R,          /# rA   rB   )r   r7   s   "€r   r    rY   O   rC   r!   c                ó   € R # r:   r;   rE   s   &r   rF   ÚDummyPartitionerFn.uuidO   r?   r!   r;   NrH   rO   s   @r   rQ   rQ   E   s    ø‡ € ñ÷Oð O÷
ö r!   rQ   ÚTc            
       ól  a € ] tR t^Vt o Rt]P                   ]! 4       ]P                   ]! 4       ]	P                  P                  P                  P                   ]	P                  P                  P                  4       ]P                   ]! R4      /t]V 3R lR l4       t]V 3R lR l4       tV 3R ltRtV tR# )	ÚTypeExemplarsz>
This class returns examples of a Type, given its class name.
Nc                óD   <€ V ^8„  d   QhRS[ S[,          RS[R,          /# )r   Útr   N)r(   r_   )r   r7   s   "€r   r    ÚTypeExemplars.__annotate__c   s'   ø€ ÷ Bñ B‘4™•7ð B™q 4�xñ Br!   c                óV   € \         P                  P                  V P                  R4      # )z
Return an example of a class.
N)ra   ÚTYPE_EXEMPLARSÚgetr.   ©rc   s   &r   ÚexampleÚTypeExemplars.exampleb   s!   € ô ×+Ñ+×/Ñ/°·
±
¸DÓAÐAr!   c                ó6   <€ V ^8„  d   QhRS[ S[,          RS[/# )r   rc   r   )r(   r_   r   )r   r7   s   "€r   r    rd   k   s   ø€ ÷ :ñ :‘D™•Gð :¡ñ :r!   c                ó<   € V P                   \        P                  9   # r:   )r.   ra   rf   rh   s   &r   ÚcontainsÚTypeExemplars.containsj   s   € à�z‰zœ]×9Ñ9Ñ9Ð9r!   c                ó<   <€ V ^8„  d   Qh/ S[ S[S[3,          ;R&   # )r   rf   )ÚdictÚstrr
   )r   r7   s   "€r   r    rd   V   s   ø‡ ‚ ñ
 ™™c˜•Nñ ò r!   r;   )r.   rI   rJ   rK   rL   r   r1   r   rQ   r4   r5   r3   r6   r   rf   Ústaticmethodri   rm   Ú__annotate_func__rM   rN   rO   s   @r   ra   ra   V   s›   ø‡ € ñð
 	× Ñ ¡)£+Ø×$Ñ$Ñ&8Ó&:Ø�‰�‰×Ñ×%Ñ% u§x¡x§~¡~×';Ñ';Ó'=Ø×"Ñ"Ñ$5°dÓ$;ð	&€Nð ÷Bó ðBð ÷:ó ð:÷+ ƒ r!   ra   c                ó$   € V ^8„  d   QhR\         /# r   r   )r   s   "r   r    r    o   s   € ÷ ñ œTñ r!   c                 óX   €  \         P                  ! R4       R#   \         d     R# i ; i)z"checks if we have halide availableÚhalideTF)Ú	importlibÚimport_moduleÚModuleNotFoundErrorr;   r!   r   Úcheck_halide_importrz   o   s*   € ðÜ×Ò Ô)ÙøÜô Úðús   ‚ š)¨)Útritonrv   c                   óN   a € ] tR t^~t o RtRtRtRtRtRt	Rt
V 3R lR	 ltR
tV tR# )ÚStatusz0
The Status return value enum for Config Fuzzer
ÚskippedÚpassedÚfailed_compileÚfailed_run_compile_exceptionÚfailed_run_eager_exceptionÚfailed_run_returnc                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r7   s   "€r   r    ÚStatus.__annotate__‘   s   ø€ ÷ 	
ñ 	
™ñ 	
r!   c                óÊ   € V \         P                  8H  ;'       gJ    V \         P                  8H  ;'       g/    V \         P                  8H  ;'       g    V \         P                  8H  # )zE
Convenience method to check whether these status represent failure.
)r}   ÚFAILED_COMPILEÚFAILED_RUN_EAGER_EXCEPTIONÚFAILED_RUN_COMPILE_EXCEPTIONÚFAILED_RUN_RETURNrE   s   &r   ÚfailingÚStatus.failing‘   sa   € ð
 ”F×)Ñ)Ñ)÷ 0ð 0Ø”v×8Ñ8Ñ8÷0ð 0à”v×:Ñ:Ñ:÷0ð 0ð ”v×/Ñ/Ñ/ð		
r!   r;   N)r.   rI   rJ   rK   rL   ÚSKIPPEDÚPASSEDr‡   r‰   rˆ   rŠ   r‹   rM   rN   rO   s   @r   r}   r}   ~   s9   ø‡ € ñð
 €Gà€Fà%€Nà#AÐ à!=Ðð ,Ð÷	
ö 	
r!   r}   Úcuda_backendÚpost_grad_fusion_optionsÚbatch_linear_post_gradÚshape_broadcast_batch_linearTÚfuse_nodes_with_same_usersÚbatch_aten_mulÚfuse_nodes_with_same_parentFÚbatch_aten_sigmoidÚbatch_aten_addÚnormalization_aten_passÚunbind_stack_aten_passÚbatch_aten_subÚbatch_aten_divÚgroup_linearÚrequire_fbgemmÚautoheuristic_collectÚpad_mmÚmixed_mmÚautoheuristic_useÚtraceable_tensor_subclassesÚnontraceable_tensor_subclassesc                   ód   a € ] tR t^Èt o RtRtRt]V 3R lR l4       t]V 3R lR l4       t	Rt
V tR	# )
ÚSamplingMethoda  
This class handles the process of assigning concrete values to type annotations. So a type annotation of
```python
foo: Optional[int] = None
```
Will be assigned an int if the dispatch function gets TOGGLE, or a 50/50 split between an int and None if it gets
RANDOM.
ÚTOGGLEÚRANDOMc          
      óH   <€ V ^8„  d   QhRS[ RS[RS[S[,          RS[RS[/# )r   Úrandom_sampleÚ
field_namer#   Údefaultr   )r   rq   r(   r
   )r   r7   s   "€r   r    ÚSamplingMethod.__annotate__Ö   sG   ø€ ÷ gTñ gTÙðgTÙ),ðgTÙ9=¹c½ðgTÙMPðgTá	ñgTr!   c                óÐ  a aaa€ S\         9   d"   \        P                  ! \         S,          4      # V\        J d(   S '       d   \        P                  ! RR.4      # V'       * # V\        J d   \        P
                  ! ^ R4      # V\        J d   \        P                  ! ^ R4      # V\        J dt   \        P                  \        P                  ,           \        P                  ,           oRP                  V3R l\        \        P
                  ! ^^4      4       4       4      # \        V\         4      '       d»   \#        V4      ;'       g9    V'       d%   \%        V4      '       d   \'        V^ ,          4      .M\'        R4      .^ ,          pV'       d   \%        V4      ^ 8”  d
   V^ ,          MRp\        \        P
                  ! ^^4      4       Uu. uF  p\(        P+                  S SWE4      NK  	  up# \        V\,        4      '       dÆ   \!        V4      p\#        V4      ;'       g9    V'       d%   \%        V4      '       d   \'        V^ ,          4      .M\'        R4      .^ ,          pV'       d   \%        V4      ^ 8”  d
   V^ ,          MRp\        \        P
                  ! ^^4      4       Uu0 uF  p\(        P+                  S SWE4      kK  	  up# \        V\.        4      '       dÏ   \!        V4      p\#        V4      ;'       g9    V'       d%   \%        V4      '       d   \'        V^ ,          4      .M\'        R4      .^ ,          pV'       d   \%        V4      ^ 8”  d
   V^ ,          MRp\/        \        \        P
                  ! ^^4      4       Uu. uF  p\(        P+                  S SWE4      NK  	  up4      # \        V\0        4      '       Ed   \#        V4      ;'       ge    VeK   \%        V4      '       d:   \3        \5        \&        \7        \9        VP;                  4       4      4      4      4      M\'        R4      \'        R4      3w  r‰VeD   \%        VP;                  4       4      ^ 8”  d&   \7        \9        VP;                  4       4      4      w  r«MRRrº\        \        P
                  ! ^ ^4      4       Uu/ uF0  p\(        P+                  S SWŠ4      \(        P+                  S SW›4      bK2  	  up# \        V\<        4      '       g!   \        V\>        P@                  4      '       d›   \#        V4      p\%        V4      ^8:  d   \C        R4      hS '       d   \        P                  ! V4      pM6\        P                  ! V Uu. uF  qî\'        V4      Jg   K  VNK  	  up4      p V! 4       p\(        P+                  S SWÕ4      # \        V\2        4      '       dR   \#        V4      ;'       g    \3        \5        \&        V4      4      p\G        Wó4      p\3        \5        VV 3R lV4      4      # \        V\H        4      '       dv   \#        V4      pV'       g   \C        R	4      hS '       d   \        P                  ! V4      # V Uu. uF  qîV8w  g   K  VNK  	  ppV'       d   \        P                  ! V4      # V# \K        V4      '       d{   \#        V4      pV'       g   \C        R
4      hV^ ,          pS '       d.   \        P                  ! R\(        P+                  S SWC4      .4      # Vf   \(        P+                  S SVR4      # R# V\'        R4      J d   R# \M        V4      '       dA   \#        V4      pV'       g   \C        R4      hVR,          o\O        R 4      VV V3R l4       pV# V\P        PR                  PT                  8X  d/   \P        PV                  PX                  PZ                  P\                  # \^        Pa                  V4      '       d   \^        Pc                  V4      # V\d        8X  d   V^8w  d   ^# ^# \C        RV R24      hu upi u upi u upi u upi u upi   \D         d    Rp ELÁi ; iu upi )z3
Generates a value of a type based on the setting.
TFéè  Ú c              3   óP   <"  € T F  p\         P                  ! S4      x € K  	  R # 5ir:   )ÚrandomÚchoice)Ú.0Ú_Ú
characterss   & €r   Ú	<genexpr>Ú:SamplingMethod._generate_value_for_type.<locals>.<genexpr>ê   s!   øé € ð Ù3O¨a”—’˜j×)Ð)Ó3Oùs   ƒ#&NzUnion type with no argsc                 óP   <€ \         P                  SSV ^ ,          V ^,          4      # )r   ©r¥   Ú_generate_value_for_type)Úxrª   r©   s   &€€r   Ú<lambda>Ú9SamplingMethod._generate_value_for_type.<locals>.<lambda>@  s!   ø€ œn×EÑEØ% z°1°Qµ4¸¸1½ôr!   zLiteral type with no argszOptional type with no argszCallable type with no argsc                  ó   € R # r:   r;   )r*   rU   s   *,r   r¼   r½   o  s   € ©4r!   c                  ó4   <€ \         P                  SSSR 4      # r:   r¹   )r*   rU   rª   r©   Úreturn_types   *,€€€r   Údummy_functionÚ?SamplingMethod._generate_value_for_type.<locals>.dummy_functiono  s   ø€ ä%×>Ñ>Ø! :¨{¸Dóð r!   zUnable to process type z. PRs welcome :)éÿÿÿÿ)3ÚTYPE_OVERRIDESr±   r²   r   ÚintÚrandintÚfloatÚuniformrq   ÚstringÚascii_lettersÚdigitsÚpunctuationÚjoinÚranger%   Úlistr   Úlenr(   r¥   rº   Úsetr   rp   rX   ÚmapÚnextÚiterÚitemsr   ÚtypesÚ	UnionTypeÚ
ValueErrorÚ	ExceptionÚzipr   r+   r/   r   r4   Ú_opsÚ
OpOverloadÚopsÚatenÚaddr«   ra   rm   ri   r
   )r©   rª   r#   r«   Ú	elem_typeÚnew_defaultr´   Ú	indexableÚkey_typeÚ
value_typeÚdefault_keyÚdefault_valÚ
union_argsÚnew_typerc   r*   ÚzippedÚliteral_argsÚchoicesÚoptional_argsÚcallable_argsrÁ   rµ   rÀ   s   ff&&                  @@r   rº   Ú'SamplingMethod._generate_value_for_typeÕ   sû  û€ ð œÔ'Ü—=’=¤°
Õ!;Ó<Ð<àœÓß3@”6—=’= $¨ Ó/ÐQÈ'ÄkÐQØœ#Óô —>’> ! TÓ*Ð*Øœ%ÓÜ—>’> ! TÓ*Ð*Øœ#ÓÜ×-Ñ-´·±Õ=Ä×@RÑ@RÕRˆJØ—7‘7ô Ü38¼¿ºÈÈ2Ó9NÔ3Oóó ð ô �Y¤×%Ò%ä˜Ó#÷ Vð Vß*1´c¸'·l²l”T˜' !�*Ó%Ñ&ÌÈdËÈØõˆI÷ )0´C¸³LÀ1Ô4D˜' !ž*È$ˆKô
 œvŸ~š~¨a°Ó3Ô4ó	ñ 5�Aô ×7Ñ7Ø! :¨yöñ 5ñ	ð ô �Y¤×$Ò$Ü˜W›ˆIä˜Ó#÷ Xð Xß,3¼¸G¿º”T˜) A�,Ó'Ñ(Ì4ÐPTË:È,ØõˆI÷ +2´c¸'³lÀQÔ6F˜) Až,ÈDˆKô
 œvŸ~š~¨a°Ó3Ô4ó	ñ 5�Aô ×7Ñ7Ø! :¨yöñ 5ñ	ð ô �Y¤
×+Ò+Ü˜W›ˆIä˜Ó#÷ Xð Xß,3¼¸G¿º”T˜) A�,Ó'Ñ(Ì4ÐPTË:È,ØõˆI÷ +2´c¸'³lÀQÔ6F˜) Až,ÈDˆKÜô
 #¤6§>¢>°!°QÓ#7Ô8ó	ñ 9˜ô #×;Ñ;Ø% z°9öñ 9ñ	óð ô �Y¤×%Ó%Ü#+¨IÓ#6÷ $ð $àÒ'¬C°¯LªLô ”cœ$¤¤T¨'¯-©-«/Ó%:Ó ;Ó<Ô=ä˜4“j¤$ t£*Ð-ñ !ˆHð
 Ò"¤s¨7¯=©=«?Ó';¸aÔ'?Ü+/´°W·]±]³_Ó0EÓ+FÑ(�˜[à+/°˜[ô œvŸ~š~¨a°Ó3Ô4óñ 5�Aô ×7Ñ7Ø! :¨xóä!×:Ñ:Ø! :¨zóòñ
 5ñð ô �Y¤×&Ò&¬'°)¼U¿_¹_×*MÒ*Mä! )Ó,ˆJÜ�:‹ !Ô#Ü Ð!:Ó;Ð;ßÜ!Ÿ=š=¨Ó4‘ä!Ÿ=š=Ù *ÓE¡
˜1´t¸G³}Ð.D—Q�Q¡
ÑEó�ð#Ù&›j�ô
 "×:Ñ:Ø˜z¨8óð ô �Y¤×&Ò&Ü˜IÓ&×CÐC¬%´´D¸'Ó0BÓ*CˆDÜ˜Ó'ˆFÜÜõð ó	óð ô �Y¤×(Ò(Ü# IÓ.ˆLßÜ Ð!<Ó=Ð=ßÜ—}’} \Ó2Ð2á&2ÓC¡l ¸7±lŸ1˜1¡l�ÐCßÜ!Ÿ=š=¨Ó1Ð1à"�NÜ˜i×(Ò(Ü$ YÓ/ˆMß Ü Ð!=Ó>Ð>Ø% aÕ(ˆIßÜ—}’}àÜ&×?Ñ?Ø)¨:°yóðóð ð ’?Ü)×BÑBØ% z°9¸dóð ñ  Øœ$˜t›*Ó$ÙÜ˜i×(Ò(Ü$ YÓ/ˆMß Ü Ð!=Ó>Ð>Ø'¨Õ+ˆKäÑ/Ó0öó 1ðð
 "Ð!Øœ%Ÿ*™*×/Ñ/Ô/Ü—9‘9—>‘>×%Ñ%×-Ñ-Ð-Ü×#Ñ# I×.Ò.Ü ×(Ñ(¨Ó3Ð3Øœ#ÔØ 1œ�1Ð+¨!Ð+äÐ6°y°kÐAQÐRÓSÐSùòUùòùòùò"ùò" Føô ô #à"“ð#üò2 DsB   Ç `6Ê) `;Î	 a Ò,6aÕ4a
Ö	a
Öa Ù2a#Ù?a#áa áa c                ó$   <€ V ^8„  d   QhRRRS[ /# )r   Úsmr¥   r   )ÚSamplingType)r   r7   s   "€r   r    r¬   €  s    ø€ ÷ 	Añ 	AÐ%ð 	A©,ñ 	Ar!   c                óÚ   € V \         P                  8X  d   \        \         P                  R4      # V \         P                  8X  d   \        \         P                  R4      # \        RV  24      h)zb
Returns a function that will generate values from a type, based on the SamplingMethod passed in.
TFzmalformed sampling method: )r¥   r§   r   rº   r¦   rØ   )rð   s   &r   ÚdispatchÚSamplingMethod.dispatch  sY   € ð
 ”×&Ñ&Ô&Üœ>×BÑBÀDÓIÐIØ”>×(Ñ(Ô(Üœ>×BÑBÀEÓJÐJäÐ:¸2¸$Ð?Ó@Ð@r!   r;   N)r.   rI   rJ   rK   rL   r¦   r§   rr   rº   ró   rM   rN   rO   s   @r   r¥   r¥   È   sC   ø‡ € ñð €FØ€Fà÷gTó ðgTðR ÷	Aó ö	Ar!   r¥   c                   ó   € ] tR tRtRtRtR# )ÚDefaultiŒ  zn
Singleton default object that will cause the ConfigFuzzer to always use the default value set in the config.
r;   N)r.   rI   rJ   rK   rL   rM   r;   r!   r   rö   rö   Œ  s   † õr!   rö   .c                   ó®   a € ] tR tRt o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R ltRtV tR# )Ú
ResultTypei˜  zX
The mapping of the combo strings to the result status after running the config fuzzer.
c                ó    <€ V ^8„  d   QhRS[ /# r   ©rq   )r   r7   s   "€r   r    ÚResultType.__annotate__Ÿ  s   ø€ ÷ +ñ +™#ñ +r!   c                ó"   € R V P                    R2# )zResultType[Ú]©Ú_valsrE   s   &r   Ú__repr__ÚResultType.__repr__Ÿ  s   € Ø˜TŸZ™Z˜L¨Ð*Ð*r!   c                ó   <€ V ^8„  d   QhRR/# rA   r;   )r   r7   s   "€r   r    rû   ¢  s   ø€ ÷ ñ ˜$ñ r!   c                ó   € / V n         R # r:   rþ   rE   s   &r   Ú__init__ÚResultType.__init__¢  s	   € ØˆŽ
r!   c                ó    <€ V ^8„  d   QhRS[ /# r   ©rÅ   )r   r7   s   "€r   r    rû   ¥  s   ø€ ÷ ñ ™ñ r!   c                ó,   € \        V P                  4      # r:   )rÐ   rÿ   rE   s   &r   Ú__len__ÚResultType.__len__¥  s   € Ü�4—:‘:‹Ðr!   c                ó    <€ V ^8„  d   QhRS[ /# r   r  )r   r7   s   "€r   r    rû   ¨  s   ø€ ÷ ñ ™ñ r!   c                ó²   € \        V P                  4      pV P                  P                  4        F#  pV\        P                  8X  g   K  V^,          pK%  	  V# )z9
Returns how many combos actually ran (weren't skipped).
)rÐ   rÿ   Úvaluesr}   r�   )r<   ÚretÚstatuss   &  r   Únum_ranÚResultType.num_ran¨  sD   € ô �$—*‘*‹oˆØ—j‘j×'Ñ'Ö)ˆFØœŸ™Ö'Ø�q•’ñ *ð ˆ
r!   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r   Úcombor  r   N©Ú	ComboTyper}   )r   r7   s   "€r   r    rû   ²  s"   ø€ ÷ #ñ #™ð #©Fð #°tñ #r!   c                óJ   € \        \        V4      4      pW P                  V&   R # r:   )rX   Úsortedrÿ   )r<   r  r  s   &&&r   rÑ   ÚResultType.set²  s   € Ü”f˜U“mÓ$ˆØ"�
‰
�5Ór!   c                ó4   <€ V ^8„  d   QhRS[ RS[R,          /# )r   r  r   Nr  )r   r7   s   "€r   r    rû   ¶  s   ø€ ÷ +ñ +™Ið +©&°4­-ñ +r!   c                ób   € \        \        V4      4      pV P                  P                  VR 4      # r:   )rX   r  rÿ   rg   )r<   r  s   &&r   ÚlookupÚResultType.lookup¶  s%   € Ü”f˜U“mÓ$ˆØ�z‰z�~‰~˜e TÓ*Ð*r!   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r   )r   r  )r   r7   s   "€r   r    rû   º  s   ø€ ÷ !ñ !‘h™yÕ)ñ !r!   c                ó6   € V P                   P                  4       # r:   )rÿ   ÚkeysrE   s   &r   r  ÚResultType.keysº  s   € Ø�z‰z�‰Ó Ð r!   c                ó<   <€ V ^8„  d   Qh/ S[ S[S[3,          ;R&   # )r   rÿ   )rp   r  r}   )r   r7   s   "€r   r    rû   ˜  s   ø‡ ‚ ñ
 ‘	™6Ð!Õ"Ñ"ò r!   rþ   N)r.   rI   rJ   rK   rL   r   r  r	  r  rÑ   r  r  rs   rM   rN   rO   s   @r   rø   rø   ˜  sX   ø‡ € ñ÷+ð +÷ð ÷ð ÷ð ÷#ð #÷+ð +÷!ð !÷E ƒ r!   rø   ztorch._inductor.configÚforce_disable_cacheszcpp.cxxÚTYPE_CHECKINGÚmax_autotune_pointwiseÚmax_autotune_gemmÚmax_autotune_gemm_backendsÚmax_autotune_conv_backendsÚmax_autotune_gemm_search_spaceÚ+max_autotune_subproc_result_timeout_secondsÚ-max_autotune_subproc_graceful_timeout_secondsÚ.max_autotune_subproc_terminate_timeout_secondszaot_inductor.presetsz	cuda.archzcuda.versionzcuda.cutlass_dirzcuda.cuda_cxxz	rocm.archzrocm.ck_supported_archzrocm.ck_dirzrocm.rocm_homeÚ"check_stack_no_cycles_TESTING_ONLYÚsleep_sec_TESTING_ONLYz#triton.inject_relu_bug_TESTING_ONLYÚ reorder_for_compute_comm_overlapÚenabled_metric_tablesÚprofile_bandwidth_regexÚdisable_cpp_codegenztrace.save_real_tensorsÚpre_grad_fusion_optionsÚexternal_matmulz'test_configs.autotune_choice_name_regexz'test_configs.autotune_choice_desc_regexz'cpp.enable_floating_point_contract_flagÚpost_grad_custom_pre_passÚpost_grad_custom_post_passÚ'reorder_for_compute_comm_overlap_passesÚjoint_custom_post_passÚjoint_custom_pre_passÚpre_grad_custom_passÚcustom_partitioner_fnÚinductor_choices_classÚcudagraph_policyztorch._dynamo.configÚ!compiled_autograd_kwargs_overrideÚfail_on_recompile_limit_hitÚsuppress_errorsÚcaching_precompilec                   ó�  a € ] tR tRt o RtR]P                  R3V 3R lR lltV 3R lR ltV 3R	 lR
 lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltR)V 3R lR lltR*V 3R lR lltR*V 3R lR lltV 3R lR ltV 3R lR  ltR+V 3R! lR" lltV 3R# lR$ ltV 3R% lR& ltV 3R' ltR(tV tR# ),ÚConfigFuzzeri  aÌ  
This tool makes it easy to search through config state-space with a minimal reproduction or test, either for
  debugging or just bug hunting.
It has two entry points:
 - bisect, which randomly flips configs and tries to find the minimal reproduction upon failure.
 - fuzz_n_tuple, which tries every combination of n configs. This grows quickly as a function of n, so beware.
bisect is recommended, but fuzz_n_tuple can give you peace of mind that a new config will compose with
  every other config.

The main interface is a function factory that will return Callables to be torch.compiled. This function factory
  should return a test function when it's called. Said test function returns a boolean, which determines whether
  the ConfigFuzzer considers it a successful run or not. Throwing an exception from within the function will be
  considered a failure as well.

# Example usage:

```python
import torch._inductor.config as cfg


def create_simple_test_model_gpu() -> FactoryOutputType:
    batch_size = 32
    seq_length = 50
    hidden_size = 768

    def test_fn() -> bool:
        inp = torch.randn(batch_size, seq_length, hidden_size, device="cuda")
        weight = torch.randn(hidden_size, hidden_size, device="cuda")
        matmul_output = inp @ weight
        final_output = torch.nn.LayerNorm(hidden_size, device="cuda")(matmul_output)
        return True

    return test_fn


fuzzer = ConfigFuzzer(cfg, create_simple_test_model_gpu, seed=2)

# Test every pair of configs:
results = fuzzer.fuzz_n_tuple(n, max_combinations=10000000)

visualize_results(n, results)

# Test random configs with bisection:
ret = fuzzer.bisect(num_attempts=10)

# reproduce a failing config
fuzzer.reproduce(
    [{"triton.autotune_pointwise": ..., "coordinate_descent_tuning": ...}]
)
```

The list of known failures on inductor config are:
cpp_wrapper, disable_cpp_codegen
combo_kernels, benchmark_combo_kernel, profile_bandwidth, profile_bandwidth_regex
trace.enabled, trace.save_real_tensors
Ni  c                óL   <€ V ^8„  d   QhRS[ RS[RS[RS[R,          RS[RS[/# )r   Úconfig_moduleÚtest_model_fn_factoryÚseedr«   Nrð   Útest_timeout)r   ÚFactoryTyperÅ   Ú
ConfigTyper¥   )r   r7   s   "€r   r    ÚConfigFuzzer.__annotate__H  sL   ø€ ÷ !#ñ !#á#ð!#ñ  +ð!#ñ ð	!#ñ
 ˜dÕ"ð!#ñ ð!#ñ ñ!#r!   c                óf  € W0n         W`n        / V n        Wn        W n        V P                  P
                  V n        \        P                  V4      V n	        VfS   V P                  P                  \        9   d)   \        V P                  P                  ,          V n        R# \        R4      hW@n        R# )aÇ  
Args:
    config_module: The module containing the configs to fuzz
    test_model_fn_factory: Function that returns a test model, which runs and returns True if successful, or
      the outputs if they should be compared with eager
    seed: Randomness seed.
    default: Default values for the config. Inductor has preset based on known failures.
    sm: How type value samples are generated, default TOGGLE.
    test_timeout: max time a test can take.
Nz"No default passed to ConfigFuzzer.)rF  rG  Údetailed_resultsrD  rE  Ú_configÚfieldsr¥   ró   Úsampler.   ÚMODULE_DEFAULTSr«   rØ   )r<   rD  rE  rF  r«   rð   rG  s   &&&&&&&r   r  ÚConfigFuzzer.__init__H  sŠ   € ð& Œ	Ø(ÔØACˆÔØ*ÔØ%:Ô"Ø/3×/AÑ/A×/IÑ/IˆŒÜ$×-Ñ-¨bÓ1ˆŒàŠ?Ø×!Ñ!×*Ñ*¬oÔ=Ü.¨t×/AÑ/A×/JÑ/JÕK�–ä Ð!EÓFÐFà"ŽLr!   c                ó    <€ V ^8„  d   QhRS[ /# r   rú   )r   r7   s   "€r   r    rJ  k  s   ø€ ÷ 
ñ 
™#ñ 
r!   c           	     óp   € R V P                    RV P                   RV P                   RV P                   R2	# )zConfigFuzzer(config_module=z, test_model_fn_factory=z, seed=z
, default=Ú))rD  rE  rF  r«   rE   s   &r   r   ÚConfigFuzzer.__repr__k  sH   € à)¨$×*<Ñ*<Ð)=ð >%Ø%)×%?Ñ%?Ð$@ÀÈÏ	É	À{ÐR\Ð]a×]iÑ]iÐ\jÐjkðmð	
r!   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r   rª   Úvaluer   N)rq   r
   )r   r7   s   "€r   r    rJ  q  s"   ø€ ÷ 7ñ 7¡cð 7±#ð 7¸$ñ 7r!   c                ó2   € \        V P                  W4       R# )z!Set a config value in the module.N)ÚsetattrrD  )r<   rª   rW  s   &&&r   Ú_set_configÚConfigFuzzer._set_configq  s   € ä�×"Ñ" JÖ6r!   c                ó   <€ V ^8„  d   QhRR/# rA   r;   )r   r7   s   "€r   r    rJ  u  s   ø€ ÷ <ñ < ñ <r!   c                ó‚   € V P                   P                  4        F   w  rV P                  WP                  4       K"  	  R# )z*Reset all configs to their default values.N)rN  rÕ   rZ  r«   )r<   rª   Ú	field_objs   &  r   Ú_reset_configsÚConfigFuzzer._reset_configsu  s0   € à%)§[¡[×%6Ñ%6Ö%8Ñ!ˆJØ×Ñ˜Z×):Ñ):Ö;ó &9r!   c                ó    <€ V ^8„  d   QhRS[ /# r   )rI  )r   r7   s   "€r   r    rJ  z  s   ø€ ÷ ñ ™Jñ r!   c                ó¼   € V P                   P                  4        UUu/ uF/  w  rY\        8w  d   TMV P                  V,          P                   bK1  	  pppV# u uppi )z%creates a new config from the default)r«   rÕ   ÚDEFAULTrN  )r<   ÚnameÚvalr  s   &   r   Ú
new_configÚConfigFuzzer.new_configz  sY   € ð "Ÿ\™\×/Ñ/Ô1ô
á1‘	�ð ¤œ‘#¨T¯[©[¸Õ->×-FÑ-FÒFÙ1ð 	ñ 
ð ˆ
ùó	
s   ž5Ac                ó6   <€ V ^8„  d   QhRS[ S[,          RS[/# )r   Úconfigsr   )r   rI  rø   )r   r7   s   "€r   r    rJ  ‚  s    ø€ ÷ ñ ¡©*Õ!5ð ¹*ñ r!   c                óN   € \        4       pV F  pV P                  W24       K  	  V# )z#entrypoint to reproduce any failure©rø   Ú_reproduce_single_helper)r<   ri  ÚresultsÚconfs   &&  r   Ú	reproduceÚConfigFuzzer.reproduce‚  s&   € ä“,ˆÛˆDØ×)Ñ)¨$Ö8ñ àˆr!   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r   rn  rm  r   N©rI  rø   )r   r7   s   "€r   r    rJ  ‰  s(   ø€ ÷ Jñ J©Zð JÁ*ð JÐQUñ Jr!   c                óô   € \        R V 24       V P                  4       pVP                  V4       V P                  W#4       \        RV RVP	                  \        VP                  4       4      4       24       R# )zStarting repro of z
Status of z:
N)Úprintrf  ÚupdateÚtest_configr  rX   r  )r<   rn  rm  rf  s   &&& r   rl  Ú%ConfigFuzzer._reproduce_single_helper‰  sd   € ÜÐ" 4 &Ð)Ô*Ø—_‘_Ó&ˆ
Ø×Ñ˜$ÔØ×Ñ˜Ô-Ü�
˜4˜&  G§N¡N´5¸¿¹»Ó3EÓ$FÐ#GÐHÖIr!   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   Úconfigr   rr  )r   r7   s   "€r   r    rJ  �  s   ø€ ÷ ñ ¡zð ±jñ r!   c                ó<   € \        4       pV P                  W4       V# r:   rk  )r<   ry  rm  s   && r   Úreproduce_singleÚConfigFuzzer.reproduce_single�  s   € Ü“,ˆØ×%Ñ% fÔ6Øˆr!   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   rm  r  r   )rø   r  r}   )r   r7   s   "€r   r    rJ  •  s"   ø€ ÷ 1ñ 1¡Jð 1±yð 1ÁVñ 1r!   c                óÒ  € \        V4       VP                  V4      ;p'       d   V# V P                  4       pR pV Fa  pWd9   d   RpVP                  R4      '       d   RpV P                  V,          pV P                  WgP                  VP                  4      pW„V&   Kc  	  V'       d1   VP                  V\        P                  4       \        P                  # V P                  W4      # )FTr´   )rt  r  rf  Ú
startswithrN  rO  rä   r«   rÑ   r}   r�   rv  )	r<   rm  r  Ústry  Úskiprª   ÚfieldrW  s	   &&&      r   Ú_fuzz_helperÚConfigFuzzer._fuzz_helper•  sÀ   € ÜˆeŒØ—‘ Ó&Ð&ˆ2Ö&àˆIà—‘Ó"ˆàˆÛˆJØÔ#à�Ø×$Ñ$ S×)Ò)Ø�Ø—K‘K 
Õ+ˆEØ—K‘K 
×,<Ñ,<¸e¿m¹mÓLˆEØ!&�:Óñ  ÷ Ø�K‰K˜œvŸ~™~Ô.Ü—>‘>Ð!à×Ñ Ó0Ð0r!   c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[/# )r   ÚnÚmax_combinationsr   )rÅ   rø   )r   r7   s   "€r   r    rJ  ­  s"   ø€ ÷ ñ ™cð ±Sð ÁJñ r!   c                ól  € \        4       p\        RV RV P                   24       \        P                  ! V P                  4       \        P
                  ! V P                  V4       FI  pV P                  W44      pV\        P                  8w  g   K+  V^,          pV^ 8:  g   K=  \        R4        V# 	  V# )zp
Test every combination of n configs.

returns a dict of this shape: {(config-1, config-2... config-n): status}
z	Starting z-tuple testing with seed z"Reached maximum combinations limit)
rø   rt  rF  r±   Ú	itertoolsÚcombinationsrN  rƒ  r}   r�   )r<   r†  r‡  rm  r  r€  s   &&&   r   Úfuzz_n_tupleÚConfigFuzzer.fuzz_n_tuple­  s—   € ô “,ˆÜ�	˜!˜Ð5°d·i±i°[ÐAÔBÜ�Š�D—I‘IÔä×+Ò+¨D¯K©K¸Ö;ˆEØ×"Ñ" 7Ó2ˆBØ”V—^‘^Ö#Ø  AÕ%Ð Ø# qÖ(ÜÐ>Ô?Øàˆñ <ð ˆr!   c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r   Úfilenamer   Nrú   )r   r7   s   "€r   r    rJ  Á  s   ø€ ÷ ñ ¡3ð Àñ r!   c                óÆ   € \        VR4      ;_uu_ 4       p\        P                  ! RV P                  RV P                  /V4       RRR4       R#   + '       g   i     R# ; i)z'Save the current fuzzer state to a fileÚwbrm  rL  N)ÚopenÚpickleÚdumprm  rL  )r<   r�  Úfs   && r   Ú
save_stateÚConfigFuzzer.save_stateÁ  sF   € ä�(˜D×!Ô! QÜ�KŠKØ˜DŸL™LÐ*<¸d×>SÑ>SÐTÐVWô÷ "×!×!Ò!ús   •0AÁA 	c                ó$   <€ V ^8„  d   QhRS[ RR/# rŽ  rú   )r   r7   s   "€r   r    rJ  È  s   ø€ ÷ Fñ F¡3ð FÀñ Fr!   c                óÞ   € \        VR4      ;_uu_ 4       p\        P                  ! V4      pVR,          V n        VP	                  R/ 4      V n        RRR4       R#   + '       g   i     R# ; i)zLoad fuzzer state from a fileÚrbrm  rL  N)r’  r“  Úloadrm  rg   rL  )r<   r�  r•  Ústates   &&  r   Ú
load_stateÚConfigFuzzer.load_stateÈ  sM   € ä�(˜D×!Ô! QÜ—K’K “NˆEØ  Õ+ˆDŒLØ$)§I¡IÐ.@À"Ó$EˆDÔ!÷ "×!×!Ò!ús   •<AÁA,	c                ó8   <€ V ^8„  d   QhRS[ RS[R,          RR/# )r   ÚsignumÚframeNr   )rÅ   r	   )r   r7   s   "€r   r    rJ  Ï  s'   ø€ ÷ 7ñ 7¡cð 7±)¸dÕ2Bð 7Àtñ 7r!   c                ó   € \        R 4      h)zTest execution timed out)ÚTimeoutError)r<   r   r¡  s   &&&r   Útimeout_handlerÚConfigFuzzer.timeout_handlerÏ  s   € ÜÐ5Ó6Ð6r!   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   rm  ry  r   )rø   rI  r}   )r   r7   s   "€r   r    rJ  Ò  s,   ø€ ÷ PSñ PS¡:ð PS±zð PSÁfñ PSr!   c                ó˜  a aaaaaa€ \         P                   ! \         P                  S P                  4      o\         P                  ! S P                  4       \        RS 24       \        SP                  4       4      oSP                  S4      ;p'       d(   \         P                   ! \         P                  S4       V# R V3R lloR V3R lloR VVVVVV 3R llp\        P                  P                  4        S P                  4        SP                  4        F  w  rVS P                  WV4       K  	  S P                  4       p V! 4         S P                  4       p	\        P&                  ! T	RR7      p
 T
! 4       pT'       g   T! R\"        P,                  RR
4      # T! R\"        P.                  RR
4      #   \          d$   pT! R\"        P$                  R	T4      u R
p?# R
p?ii ; i  \          d$   pT! R\"        P(                  R	T4      u R
p?# R
p?ii ; i  \          d$   pT! R\"        P*                  R	T4      u R
p?# R
p?ii ; i)zJ
Tests a config by calling the function produced by the factory function.
zTesting config c                ó   € V ^8„  d   QhRR/# rA   r;   )r   s   "r   r    Ú.ConfigFuzzer.test_config.<locals>.__annotate__Þ  s   € ÷ 	,ñ 	,˜dñ 	,r!   c                  óZ   <€ SP                  4        F  w  r\        V  R V 24       K  	  R# )z = N)rÕ   rt  )r‚  rW  ry  s     €r   Úprint_configÚ.ConfigFuzzer.test_config.<locals>.print_configÞ  s(   ø€ Ø &§¡¦‘�Ü˜˜˜s 5 'Ð*Ö+ó !/r!   c                óR   € V ^8„  d   QhR\         R\        \        \        3,          /# )r   Úexcr   )rÙ   rp   rq   r
   )r   s   "r   r    r©  â  s"   € ÷ 	ñ 	¤	ð 	¬d´3¼°8­nñ 	r!   c                 óh   <€ R \        V 4      R\        P                  ! 4       RSP                  4       /# )Ú	exceptionÚ	tracebackry  )rq   r±  Ú
format_excÚcopy)r®  ry  s   &€r   Úget_error_infoÚ0ConfigFuzzer.test_config.<locals>.get_error_infoâ  s/   ø€ àœS ›XØœY×1Ò1Ó3Ø˜&Ÿ+™+›-ðð r!   c          
      ób   € V ^8„  d   QhR\         R\        R\        R\        R,          R\        /# )r   ÚmessageÚreturn_statusÚprint_tracebackr®  Nr   )rq   r}   r   rÙ   )r   s   "r   r    r©  é  s?   € ÷ 	!ñ 	!Üð	!ä!ð	!ô "ð	!ô ˜TÕ!ð		!ô
 ñ	!r!   c                 ó  <€ \         P                   ! \         P                  S4       \        V  R 24       S! 4        V'       d   S! V4      S	P                  S&   V'       d   \        P
                  ! 4        SP                  SV4       V# )z with config combination:)ÚsignalÚSIGALRMrt  rL  r±  Ú	print_excrÑ   )
r·  r¸  r¹  r®  Úconfig_tupler´  Úoriginal_handlerr«  rm  r<   s
   &&&&€€€€€€r   Úhandle_returnÚ/ConfigFuzzer.test_config.<locals>.handle_returné  sh   ø€ ô �MŠMœ&Ÿ.™.Ð*:Ô;Ü�W�IÐ6Ð7Ô8ÙŒNßÙ6DÀSÓ6I�×%Ñ% lÑ3ßÜ×#Ò#Ô%Ø�K‰K˜ mÔ4Ø Ð r!   zEager exceptionTNÚinductor)ÚbackendzException compilingzException running compiledzFunction returned FalseFzFunction succeeded)r»  r¼  r¤  ÚalarmrG  rt  rX   r  r  r4   Ú_dynamoÚresetr_  rÕ   rZ  rE  rÙ   r}   rˆ   Úcompiler‡   r‰   rŠ   rŽ   )r<   rm  ry  r  rÀ  rd  rW  Útest_model_fnr®  Útest_model_fn2ÚcompÚcompile_resultr¾  r´  r¿  r«  s   fff         @@@@r   rv  ÚConfigFuzzer.test_configÒ  sæ  þ€ ô "Ÿ=š=¬¯©¸×9MÑ9MÓNÐÜ�Š�T×&Ñ&Ô'Ü� ˜xÐ(Ô)Ü˜VŸ[™[›]Ó+ˆØ—.‘. Ó.Ð.ˆ3Ö.Ü�MŠMœ&Ÿ.™.Ð*:Ô;ØˆJ÷	,ð 	,÷	ð 	÷	!õ 	!ô" 	�‰×ÑÔØ×ÑÔØ!Ÿ<™<ž>‰KˆDØ×Ñ˜TÖ)ñ *ð ×2Ñ2Ó4ˆð	ÙŒOð	Ø!×7Ñ7Ó9ˆNÜ—=’= ¸ÔDˆDð	Ù!›VˆN÷ Ù Ø)¬6×+CÑ+CÀUÈDóð ñ !Ð!5´v·}±}ÀeÈTÓRÐRøô? ô 	Ù Ø!¤6×#DÑ#DÀdÈCóõ ûð	ûô ô 	Ù Ø%¤v×'<Ñ'<¸dÀCóõ ûð	ûô ô 	Ù Ø,Ü×3Ñ3ØØó	õ ûð	úsZ   ÅF9 Å(G* Å8H Æ9G'ÇG"ÇG'Ç"G'Ç*HÇ5HÈHÈHÈI	È&IÈ>I	ÉI	c                ó<   <€ V ^8„  d   QhRS[ RS[RS[S[,          /# )r   Únum_attemptsÚpr   )rÅ   rÇ   rÏ   rI  )r   r7   s   "€r   r    rJ  $  s'   ø€ ÷ #ñ #¡3ð #±ð #ÁÁjÕAQñ #r!   c                óL  € \        RV P                   RV 24       \        P                  ! V P                  4       V P                  4        \	        4       p. p\        V4       EF<  p\        RV^,            RV 24       V P                  4       pV P                  P                  4        Fu  w  rxWv9  g   K  VP                  R4      '       d   K&  RV9  g   K/  \        P                  ! 4       V8  g   KK  V P                  WxP                  VP                  4      p	W–V&   Kw  	  V P                  W64      p
V
\        \        P                   \        P"                  .4      9  g   EK  V P%                  W64      ;p'       g   EK  \        RV 24       VP'                  V4       EK?  	  V# )z;
Test configs and bisect to minimal failing configuration.
z-Starting random testing with bisection, seed z, and p zRandom attempt Ú/r´   ÚTESTING_ONLYzMinimum failing config: )rt  rF  r±   r_  rø   rÎ   rf  rN  rÕ   r  rO  rä   r«   rv  r   r}   rŽ   r�   Ú_bisect_failing_configÚappend)r<   rÎ  rÏ  rm  r  Úattemptry  rª   Úconfig_entryrW  r  Úminimal_failing_configs   &&&         r   ÚbisectÚConfigFuzzer.bisect$  sd  € ô 	Ð=¸d¿i¹i¸[ÈÐQRÐPSÐTÔUÜ�Š�D—I‘IÔØ×ÑÔÜ“,ˆØ "ˆä˜\×*ˆGÜ�O G¨a¥K =°°,°Ð@ÔAà—_‘_Ó&ˆFà,0¯K©K×,=Ñ,=Ö,?Ñ(�
àÖ,Ø&×1Ñ1°#×6Ô6Ø&¨jÖ8ÜŸš›¨!Ö+à ŸK™KØ"×$;Ñ$;¸\×=QÑ=Qó�Eð */˜:Ó&ñ -@ð ×%Ñ% gÓ6ˆFØœZ¬¯©¼¿¹Ð(GÓH×HØ-1×-HÑ-HØó.ð Ð)÷ ñ ô Ð4Ð5KÐ4LÐMÔNØ—J‘JÐ5×6ñ/ +ð2 ˆ
r!   c                ó:   <€ V ^8„  d   QhRS[ RS[RS[R,          /# ©r   rm  Úfailing_configr   N)rø   rI  )r   r7   s   "€r   r    rJ  I  s/   ø€ ÷ Yñ YÙ!ðYÙ3=ðYá	�dÕ	ñYr!   c                óT   € V P                  V\        VP                  4       4      4      # r:   )Ú_bisect_failing_config_helperrÏ   rÕ   )r<   rm  rÜ  s   &&&r   rÓ  Ú#ConfigFuzzer._bisect_failing_configI  s%   € ð ×1Ñ1°'¼4À×@TÑ@TÓ@VÓ;WÓXÐXr!   c                ó`   <€ V ^8„  d   QhRS[ RS[S[S[S[3,          ,          RS[R,          /# rÛ  )rø   rÏ   rX   rq   r
   rI  )r   r7   s   "€r   r    rJ  N  s7   ø€ ÷ 4$ñ 4$Ù!ð4$Ù37¹¹cÁ3¸h½Õ3Hð4$á	�dÕ	ñ4$r!   c                óÜ  a a€ \        RV 24       V'       g   R# R VV 3R llp\        V4      ^8:  d*   V! V4      P                  4       '       d   \        V4      # R# \        P
                  ! V4       \        V4      ^,          pVRV pW$R pV! V4      P                  4       '       d   S P                  SV4      # V! V4      P                  4       '       d   S P                  SV4      # \        V4      ^8¼  dò   \        V4      ^,          pWG,           pW'R p	V! V	4      P                  4       '       d   S P                  SV	4      # VRV V,           p
V! V
4      P                  4       '       d   S P                  SV
4      # WRRV ,           pV! V4      P                  4       '       d   S P                  SV4      # W(R pV! V4      P                  4       '       d   S P                  SV4      # \        \        V4      4       FY  p\        V4       UUu. uF  w  rïWí8w  g   K  VNK  	  pppV! V4      P                  4       '       g   KG  S P                  SV4      u # 	  \        V4      # u uppi )z¡
Bisect a failing configuration to find minimal set of configs that cause failure.

Splits it into halves, then fourths, then tries dropping configs one-by-one.
zbisecting config: Nc                óh   € V ^8„  d   QhR\         \        \        \        3,          ,          R\        /# )r   r»   r   )rÏ   rX   rq   r
   r}   )r   s   "r   r    Ú@ConfigFuzzer._bisect_failing_config_helper.<locals>.__annotate__[  s'   € ÷ 	ñ 	”Dœœs¤C˜x�Õ)ð 	¬fñ 	r!   c                 óB   <€ \        V 4      pSP                  SV4      pV# r:   )rp   rv  )r»   ÚdÚresultrm  r<   s   &  €€r   ÚtestÚ8ConfigFuzzer._bisect_failing_config_helper.<locals>.test[  s#   ø€ Ü�Q“ˆAØ×%Ñ% g¨qÓ1ˆFØˆMr!   )	rt  rÐ   r‹   rp   r±   ÚshufflerÞ  rÎ   Ú	enumerate)r<   rm  rÜ  rç  ÚmidÚ
first_halfÚsecond_halfÚlowÚhighÚquart1Úquart2Úquart3Úquart4ÚiÚjr»   Únew_lists   ff&              r   rÞ  Ú*ConfigFuzzer._bisect_failing_config_helperN  s6  ù€ ô 	Ð" >Ð"2Ð3Ô4çÙ÷	ñ 	ô
 ˆ~Ó !Ô#Ù+/°Ó+?×+GÑ+G×+IÒ+I”4˜Ó'ÐSÈtÐSä�Š�~Ô&ä�.Ó! QÕ&ˆØ# D SÐ)ˆ
Ø$ TÐ*ˆÙ�
Ó×#Ñ#×%Ò%Ø×5Ñ5°g¸zÓJÐJÙ�Ó×$Ñ$×&Ò&Ø×5Ñ5°g¸{ÓKÐKäˆ~Ó !Ô#Ü�nÓ%¨Õ*ˆCØ•9ˆDØ# DÐ)ˆFÙ�F‹|×#Ñ#×%Ò%Ø×9Ñ9¸'À6ÓJÐJØ# D SÐ)¨KÕ7ˆFÙ�F‹|×#Ñ#×%Ò%Ø×9Ñ9¸'À6ÓJÐJØ°°$Ð"7Õ7ˆFÙ�F‹|×#Ñ#×%Ò%Ø×9Ñ9¸'À6ÓJÐJØ# EÐ*ˆFÙ�F‹|×#Ñ#×%Ò%Ø×9Ñ9¸'À6ÓJÐJä”s˜>Ó*Ö+ˆAÜ&/°Ô&?ÔJÑ&?™d˜aÀ1Á6Ÿ˜Ñ&?ˆHÑJÙ�H‹~×%Ñ%×'Ô'Ø×9Ñ9¸'À8ÓLÒLñ ,ô
 �NÓ#Ð#ùó	 Ks   È
I(È I(c                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   # )r   rO  r«   )rñ   rI  )r   r7   s   "€r   r    rJ    s#   ø‡ ‚ ñt Ññu ñv Ñòw r!   )	rD  r«   rL  rN  rm  rO  rF  rE  rG  )r®   )zfuzzer_state.pkl)éd   g      à?)r.   rI   rJ   rK   rL   r¥   r¦   r  r   rZ  r_  rf  ro  rl  r{  rƒ  r‹  r–  r�  r¤  rv  rØ  rÓ  rÞ  rs   rM   rN   rO   s   @r   rB  rB    sÛ   ø‡ € ñ7ðB &*Ø+×2Ñ2Ø ÷!#ò !#÷F
ð 
÷7ð 7÷<ð <÷
ð ÷ð ÷Jð J÷ð ÷
1ð 1÷0ò ÷(ò ÷Fò F÷7ð 7÷PSð PS÷d#ò #÷JYð Y÷
4$ð 4$÷G
 ƒ r!   rB  c                ó@   € V ^8„  d   QhR\         R\        R\        RR/# )r   r†  rm  r�  r   N)rÅ   rø   rq   )r   s   "r   r    r    …  s2   € ÷ j!ñ j!Ü
ðj!Üðj!Ü+.ðj!à	ñj!r!   c                ó  € V ^8w  d   \        RV  24      h\        V4      ^ 8:  d   \        R4      h\        / 4      pVP                  4        F3  pVP	                  V^ ,          4       VP	                  V^,          4       K5  	  \        V4      pRpVR,          pV F!  pRP                  V4      pVRV R2,          pK#  	  VR,          pV Fè  p	VR	V	 R2,          pV FÉ  pVP                  W—34      p
R
pR
pV
\        P                  8X  d   RpRpM†V
\        P                  8X  d   RpRpMlV
\        P                  8X  d   RpRpMRV
\        P                  8X  d   RpRpM8V
\        P                  8X  d   RpRpMV
\        P                  8X  d   RpRpMRpRpVRV RV R2,          pKË  	  VR,          pKê  	  VR,          p\        VR4      ;_uu_ 4       pVP!                  V4       RRR4       R#   + '       g   i     R# ; i)zh
Creates an HTML document representing the results of running the fuzzer with fuzz_n_tuple, with n = 2.
zexpected n == 2, got zexpected non-empty resultsaô  
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title> Fuzzer Visualization</title>
        <style>
            table {
                border-collapse: collapse;
                width: 50%;
                margin: 20px auto;
            }
            th, td {
                border: 1px solid #ddd;
                padding: 8px;
                text-align: center;
            }
            th {
                background-color: #f2f2f2;
            }
            .skipped {
                background-color: yellow;
            }
            .passed {
                background-color: green;
                color: white;
            }
            .failed {
                background-color: red;
                color: white;
            }
        </style>
    </head>
    <body>
        <h2 style="text-align: center;">Fuzzer Visualization</h2>
        <table>
        <thead>
    z<tr><th>\</th>z<br>z<th>z</th>z</tr></thead><tbody>z<tr><th>r¯   r~   Ú-r   ÚOÚfailedÚeÚEÚRÚCz<td class="z">z</td>z</tr>z?
        </tbody>
        </table>
    </body>
    </html>
    ÚwN)ÚAssertionErrorrÐ   r   r  rß   r  rÍ   r  r}   r�   rŽ   rˆ   r‰   rŠ   r‡   r’  Úwrite)r†  rm  r�  Ú	input_setÚkeyÚ
input_listÚhtml_contentÚcol_nameÚcolÚrow_nameÚstatus_enumÚstatus_classÚ
status_valÚfiles   &&&           r   Úvisualize_resultsr  …  s  € ð 	ˆA„vÜÐ4°Q°CÐ8Ó9Ð9Ü
ˆ7ƒ|�qÔÜÐ9Ó:Ð:ä!+¨B£€IØ�|‰|Ž~ˆØ�‰�c˜!•fÔØ�‰�c˜!•fÖñ ô ˜	Ó"€Jð&€LðP Ð%Õ%€LÛˆØ�k‰k˜(Ó#ˆØ˜$˜s˜e 5Ð)Õ)Šñ ð Ð*Õ*€Ló ˆØ˜( 8 *¨EÐ2Õ2ˆÛ"ˆHà!Ÿ.™.¨(Ð)=Ó>ˆKØˆLØˆJØœfŸn™nÔ,Ø(�Ø ‘
Ø¤§¡Ô-Ø'�Ø ‘
Ø¤× AÑ AÔAØ'�Ø ‘
Ø¤× CÑ CÔCØ'�Ø ‘
Ø¤× 8Ñ 8Ô8Ø'�Ø ‘
Ø¤× 5Ñ 5Ô5Ø'�Ø ‘
à(�Ø �
à˜k¨,¨°r¸*¸ÀUÐKÕKŠLñ7 #ð8 	˜ÕŠñ= ð@ ð õ €Lô 
ˆh˜×	Ô	 Ø�
‰
�<Ô ÷ 
×	×	Ò	ús   ÇG0Ç0H	c                óÂ   € V ^8„  d   Qh/ ^ \         9   d&   \        \        \        \        ,          3,          ;R&   ^\         9   d   \        \        \
        3,          ;R&   # )r   rÄ   rP  )Ú__conditional_annotations__rp   rq   rÏ   r
   rI  )r   s   "r   r    r       sN   € × Ñ ÷~$ò $””Sœ$œs�)�^Õ$ñ $ñ ÷d5ò 5””cœ:�oÕ&ñ 5òe r!   )zresults.html)Hr  rw   r‰  Úloggingr“  r±   r»  rÉ   r±  rÖ   Úcollections.abcr   r   r   Úenumr   Ú	functoolsr   r   r	   Útypingr
   r   r   r   r   r   r4   Úfunctorch.compiler   Ú!torch._inductor.custom_graph_passr   r   Útorch._inductor.schedulerr   Útorch.utils._config_moduler   r   Útorch.utils._ordered_setr   Ú	getLoggerr.   Úlogr%   r+   r/   r1   rQ   r_   ra   rz   ÚCUDA_BACKENDr}   rÄ   rq   r(   rñ   r¥   rö   rc  rX   r  rø   rp   rI  r   ÚFactoryOutputTyperH  rP  rB  r  r    )r  s   @r   Ú<module>r"     s…  øðß Ð Û Û Û Û Û Û Û Û ß 8Ñ 8Ý ß $Ý ß E× Eã Ý Aß RÝ 7ß AÝ /ð ×Ò˜Ó!€õHõ
õ,ô	�ô 	ôÐ,ô ñ ˆCƒL€÷:ñ :õ2ñ ×ÒØ˜hÐ'�Là�:€Lô
ˆTô 
ðF �LØà$Ø.°Ø,¨dð'ð Ð<¸eÐDØ Ð#@À$Ð"GØÐ<¸dÐCØ% rØ$ bð
	
ð ˜bØ˜bØ˜bØ˜bØÐ-¨tÐ4ð	
ð!ð( Ø	�4˜ TÐ*Ø	�4˜ UÐ+Ø	�5˜* dÐ+Ø	�5˜* eÐ,ð	ð Ø	�4˜ TÐ*Ø	�4˜ UÐ+Ø	�5˜* dÐ+Ø	�5˜* eÐ,ð	ð "¡J£L >Ø$¡z£| nðG$(€ó $ðJ ˜˜d 3�i¨Ð-¨sÐ2Õ3€ôAA�Tô AA÷Hñ ñ ‹)€ð �#�s�(�O€	÷#!ñ #!ðN �#�s�(�^€
à˜R ˜XÕ&Ð à�rÐ,Ð,Õ-€ð" ð +Ø ð+à�7ð+ð 	˜ð+ð 	! 'ð	+ð
 	˜Wð+ð 	% gð+ð 	% gð+ð 	)¨'ð+ð 	6°wð+ð 	8¸ð+ð 	9¸'ð+ð 	 ð+ð 	�Wð+ð 	˜ð+ð 	˜Gð+ð  	˜ð!+ð" 	�Wñ#+ð$ 	! 'ð%+ð& 	�wð'+ð( 	˜'ð)+ð* 	-¨gð++ð, 	! 'ð-+ð. 	.¨wð/+ð0 	+¨Gð1+ð2 	  ð3+ð4 	" 7ð5+ð6 	˜wð7+ð8 	" 7ð9+ð: 	" 7ð;+ð< 	˜7ð=+ð> 	2°7ð?+ð@ 	2°7ðA+ðB 	2°7ðC+ðD 	$ WñE+ðF 	% gØ1°7Ø  'Ø Ø Ø Ø  'Ø˜GñU+ðX Ø% wØ(¨'Ø+¨WØ% wØ˜7Ø˜eðð[5*€ó 5÷pw$ñ w$÷tj!ñ j!r!   