Ë
    g^(hîŽ  ã            	       óø  — U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZ d dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZ d dlZd dlmZ d dlm Z  d d	l!m"Z"m#Z# d d
l$m%Z%  ejL                  e'«      Z(de)fd„Z*de)fd„Z+de)fd„Z, G d„ de«      Z- ed«      Z. G d„ d«      Z/de)fd„Z0 e0«       rddgZ1ndgZ1 G d„ de«      Z2e1dddœddiddiddii i dœi i i i ddidœgd d!gd d!g e%«       gd"œZ3e4e5e6e   f   e7d#<   ee5e8e   egef   Z9 G d$„ d%e«      Z: G d&„ d'«      Z; e;«       Z<e=e5d(f   Z> G d)„ d*«      Z?e4e5ef   Z@eg e)f   ZAeg eAf   ZBi d+d“d,e<“d-e<“d.e<“d/e<“d0e<“d1e<“d2e<“d3e<“d4e<“d5e<“d6e<“d7e<“d8e<“d9e<“d:e<“d;e<“i d<e<“d=e<“d>e<“d?e<“d@e<“dAe<“dBe<“dCe<“dDe<“dEe<“dFe<“dGe<“dHe<“dIe<“dJe<“dKe<“dLe<“¥e<e<e<e<e<e<e<dMœ¥e<e<e<e<dNœdOœZCe4e5e@f   e7dP<    G dQ„ dR«      ZD	 dWdSeEdTe?dUe5ddfdV„ZFy)Xé    N)ÚKeysViewÚSequence)ÚEnum)ÚpartialÚwraps)Ú	FrameType)ÚAnyÚCallableÚget_argsÚ
get_originÚLiteralÚOptionalÚTypeVarÚUnion)ÚCustomGraphPass)ÚBaseSchedulerNode)Ú_ConfigEntryÚConfigModule)Ú
OrderedSetÚreturnc                 ó(   — | |u xs t        | «      |u S )aN  
    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     úT/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_inductor/fuzzer.pyÚis_typer   #   s   € ð ˜	Ð!ÒG¤Z°	Ó%:¸iÐ%GÐGó    c                 óZ   — t        | «      }|t        u rt        | «      }t        d«      |v S y)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                 ó    — | j                   dk(  S )z"
    Special Case of is_type.
    r
   )Ú__name__)r   s    r   Úis_callable_typer$   :   s   € ð ×Ñ Ñ+Ð+r   c                   ón   — e Zd ZdZdej
                  j                  j                  ddfd„Zde	e
   fd„Zy)Ú	DummyPassz1
    A Dummy pass to be used by ConfigFuzzer
    Úgraphr   Nc                  ó   — y ©N© )Úselfr'   s     r   Ú__call__zDummyPass.__call__F   ó   € Ør   c                  ó   — y r)   r*   ©r+   s    r   ÚuuidzDummyPass.uuidI   r-   r   )r#   Ú
__module__Ú__qualname__Ú__doc__ÚtorchÚfxr'   ÚGraphr,   r   r	   r0   r*   r   r   r&   r&   A   s8   „ ñð˜eŸh™hŸn™n×2Ñ2ð °tó ð�h˜s‘mô r   r&   ÚTc                   óN  — e Zd ZU dZej                    e«       ej                  j                  j                  j                   ej                  j                  j                  «       e
j                    e
d«      iZeeef   ed<   edee   dee   fd„«       Zedee   defd„«       Zy)ÚTypeExemplarszF
    This class returns examples of a Type, given its class name.
    NÚTYPE_EXEMPLARSÚtr   c                 óV   — t         j                  j                  | j                  d«      S )z/
        Return an example of a class.
        N)r9   r:   Úgetr#   ©r;   s    r   ÚexamplezTypeExemplars.example[   s!   € ô
 ×+Ñ+×/Ñ/°·
±
¸DÓAÐAr   c                 ó:   — | j                   t        j                  v S r)   )r#   r9   r:   r>   s    r   ÚcontainszTypeExemplars.containsb   s   € à�z‰zœ]×9Ñ9Ð9Ð9r   )r#   r1   r2   r3   r   r&   r4   r5   r'   r6   r   r:   ÚdictÚstrr	   Ú__annotations__Ústaticmethodr   r7   r   r?   ÚboolrA   r*   r   r   r9   r9   P   s»   … ñð
 	× Ñ ¡)£+Ø�‰�‰×Ñ×%Ñ% u§x¡x§~¡~×';Ñ';Ó'=Ø×"Ñ"Ñ$5°dÓ$;ð&€N�D˜˜c˜‘Nó ð ðB�4˜‘7ð B˜x¨™{ò Bó ðBð ð:�D˜‘Gð : ò :ó ñ:r   r9   c                  óN   — 	 t        j                  d«       y# t        $ r Y yw xY w)z"checks if we have halide availableÚhalideTF)Ú	importlibÚimport_moduleÚModuleNotFoundErrorr*   r   r   Úcheck_halide_importrL   g   s*   € ðÜ×Ñ Ô)ØøÜò Ùðús   ‚ ˜	$£$ÚtritonrH   c                   ó4   — e Zd ZdZdZdZdZdZdZdZ	de
fd	„Zy
)ÚStatusz8
    The Status return value enum for Config Fuzzer
    ÚskippedÚpassedÚfailed_compileÚfailed_run_compile_exceptionÚfailed_run_eager_exceptionÚfailed_run_returnr   c                 ó¦   — | t         j                  k(  xs= | t         j                  k(  xs( | t         j                  k(  xs | t         j                  k(  S )zU
        Convenience method to check whether these status represent failure.
        )rO   ÚFAILED_COMPILEÚFAILED_RUN_EAGER_EXCEPTIONÚFAILED_RUN_COMPILE_EXCEPTIONÚFAILED_RUN_RETURNr/   s    r   ÚfailingzStatus.failing‰   sR   € ð
 ”F×)Ñ)Ñ)ò 0Ø”v×8Ñ8Ñ8ò0à”v×:Ñ:Ñ:ò0ð ”v×/Ñ/Ñ/ð		
r   N)r#   r1   r2   r3   ÚSKIPPEDÚPASSEDrW   rY   rX   rZ   rF   r[   r*   r   r   rO   rO   v   s8   „ ñð
 €Gà€Fà%€Nà#AÐ à!=Ðð ,Ðð	
˜ô 	
r   rO   T)Úshape_broadcast_batch_linearÚfuse_nodes_with_same_usersÚfuse_nodes_with_same_parentF)Úbatch_linear_post_gradÚbatch_aten_mulÚbatch_aten_sigmoidÚbatch_aten_addÚnormalization_aten_passÚunbind_stack_aten_passÚrequire_fbgemm)rd   rb   Úbatch_aten_subÚbatch_aten_divÚgroup_linearÚpad_mmÚmixed_mm)Úcuda_backendÚpost_grad_fusion_optionsÚautoheuristic_collectÚautoheuristic_useÚtraceable_tensor_subclassesÚTYPE_OVERRIDESc                   ó^   — e Zd ZdZdZdZededede	e
   de
de
f
d	„«       Zed
d defd„«       Zy)Ú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ÚRANDOMÚrandom_sampleÚ
field_namer   Údefaultr   c                 ó"  ‡ ‡‡‡— ‰t         v rt        j                  t         ‰   «      S |t        k(  r‰ rt        j                  ddg«      S | S |t        k(  rt        j
                  dd«      S |t        k(  rt        j                  dd«      S |t        k(  rit        j                  t        j                  z   t        j                  z   Šdj                  ˆfd„t        t        j
                  dd«      «      D «       «      S t        |t         «      rŒt#        |d	t%        |«      rt'        |d   «      gnt'        d
«      g«      d   }t%        |«      dkD  r|d   nd
}t        t        j
                  dd«      «      D �cg c]  }t(        j+                  ‰ ‰||«      ‘Œ c}S t        |t,        «      r—t!        |«      }t#        |d	t%        |«      rt'        |d   «      gnt'        d
«      g«      d   }t%        |«      dkD  r|d   nd
}t        t        j
                  dd«      «      D �ch c]  }t(        j+                  ‰ ‰||«      ’Œ c}S t        |t.        «      r t!        |«      }t#        |d	t%        |«      rt'        |d   «      gnt'        d
«      g«      d   }t%        |«      dkD  r|d   nd
}t/        t        t        j
                  dd«      «      D �cg c]  }t(        j+                  ‰ ‰||«      ‘Œ c}«      S t        |t0        «      �rt#        |d	|�;t%        |«      r0t3        t&        t5        t7        |j9                  «       «      «      «      nt'        d
«      t'        d
«      f«      \  }}	|�Bt%        |j9                  «       «      dkD  r&t5        t7        |j9                  «       «      «      \  }
}nd\  }
}t        t        j
                  dd«      «      D �ci c]1  }t(        j+                  ‰ ‰||
«      t(        j+                  ‰ ‰|	|«      “Œ3 c}S t        |t:        «      rš	 t%        |j<                  «      dkD  sJ ‚	 ‰ r t        j                  |j<                  «      }n<t        j                  |j<                  D �cg c]  }|t'        |«      k7  sŒ|‘Œ c}«      }	  |«       }t(        j+                  ‰ ‰||«      S t        |tD        «      rIt#        |d	tE        t3        t&        |«      «      «      }tG        ||«      }tE        t3        ˆˆ fd„|«      «      S t        |tH        «      rZ	 ‰ rt        j                  |j<                  «      S |j<                  D �cg c]
  }||k7  sŒ	|‘Œ }}|rt        j                  |«      S |S tK        |«      rZ	 |j<                  d   }‰ r-t        j                  d
t(        j+                  ‰ ‰||«      g«      S |€t(        j+                  ‰ ‰|d
«      S y
|t'        d
«      u ry
tM        |«      r1	 t!        |j<                  «      d   ŠtO        d„ «      ˆˆ ˆfd„«       }|S tP        jS                  |«      rtP        jU                  |«      S |tV        k(  r	|dk(  sdS dS tA        d|› d�«      ‚c c}w c c}w c c}w c c}w # t>        $ r}tA        d«      |‚d
}~ww xY wc c}w # tB        $ r d
}Y �Œw xY wc c}w # t>        $ r}tA        d«      |‚d
}~ww xY w# t>        $ r}tA        d«      |‚d
}~ww xY w# t>        $ r}tA        d«      |‚d
}~ww xY w)zC
        Generates a value of a type based on the setting.
        TFr   éè  Ú c              3   óH   •K  — | ]  }t        j                  ‰«      –— Œ y ­wr)   )ÚrandomÚchoice)Ú.0Ú_Ú
characterss     €r   ú	<genexpr>z:SamplingMethod._generate_value_for_type.<locals>.<genexpr>×   s   øè ø€ ò Ø./”—‘˜j×)ñùs   ƒ"é   é   Ú__args__Né   )NNzUnion type with no argsc                 ó@   •— t         j                  ‰‰| d   | d   «      S )Nr   r„   ©rt   Ú_generate_value_for_type)Úxrx   rw   s    €€r   ú<lambda>z9SamplingMethod._generate_value_for_type.<locals>.<lambda>7  s#   ø€ œn×EÑEØ% z°1°Q±4¸¸1¹ó€ r   zLiteral type with no argszOptional type with no argséÿÿÿÿzCallable type with no argsc                   ó   — y r)   r*   )r    Úkwargss     r   rŒ   z9SamplingMethod._generate_value_for_type.<locals>.<lambda>f  s   � r   c                  ó4   •— t         j                  ‰‰‰d «      S r)   r‰   )r    r�   rx   rw   Úreturn_types     €€€r   Údummy_functionz?SamplingMethod._generate_value_for_type.<locals>.dummy_functionf  s   ø€ ä%×>Ñ>Ø! :¨{¸Dóð r   é   zUnable to process type z. PRs welcome :)),rr   r~   r   rF   ÚintÚrandintÚfloatÚuniformrC   ÚstringÚascii_lettersÚdigitsÚpunctuationÚjoinÚranger   ÚlistÚgetattrÚlenr   rt   rŠ   Úsetr   rB   ÚmapÚnextÚiterÚitemsr   r†   ÚAttributeErrorÚ
ValueErrorÚ	ExceptionÚtupleÚzipr   r!   r$   r   r9   rA   r?   r	   )rw   rx   r   ry   Ú	elem_typeÚnew_defaultr�   Ú	indexableÚkey_typeÚ
value_typeÚdefault_keyÚdefault_valÚerrÚnew_typer;   r    ÚzippedÚchoicesr’   r‚   r‘   s   ``                 @@r   rŠ   z'SamplingMethod._generate_value_for_typeÂ   så  û€ ð œÑ'Ü—=‘=¤°
Ñ!;Ó<Ð<àœÒÙ3@”6—=‘= $¨ Ó/ÐQÈ'ÀkÐQØœ#Òô —>‘> ! TÓ*Ð*Øœ%ÒÜ—>‘> ! TÓ*Ð*Øœ#ÒÜ×-Ñ-´·±Ñ=Ä×@RÑ@RÑRˆJØ—7‘7ó Ü38¼¿¹ÈÈ2Ó9NÓ3Oôó ð ô �Y¤Ô%ÜØØÜ&)¨'¤l”�g˜a‘jÓ!Ñ"¼¸d»¸óð ñ	ˆIô
 ),¨G«°qÒ(8˜' !š*¸dˆKô
 œvŸ~™~¨a°Ó3Ó4ö	ð ô ×7Ñ7Ø! :¨y¸+õòð ô �Y¤Ô$Ü˜W›ˆIÜØØÜ(+¨G¬”�i ‘lÓ#Ñ$¼4À»:¸,óð ñ	ˆIô
 +.¨g«,¸Ò*:˜) Aš,ÀˆKô
 œvŸ~™~¨a°Ó3Ó4ö	ð ô ×7Ñ7Ø! :¨y¸+õòð ô �Y¤
Ô+Ü˜W›ˆIÜØØÜ(+¨G¬”�i ‘lÓ#Ñ$¼4À»:¸,óð ñ	ˆIô
 +.¨g«,¸Ò*:˜) Aš,ÀˆKÜô
 #¤6§>¡>°!°QÓ#7Ó8ö	ð ô #×;Ñ;Ø% z°9¸kõòóð ô �Y¤Õ%Ü#*ØØàÐ'¬C°¬Lô ”Dœ$œt G§M¡M£OÓ4Ó5Ô6ä˜4“j¤$ t£*Ð-ó$Ñ ˆH�jð Ð"¤s¨7¯=©=«?Ó';¸aÒ'?Ü+/´°W·]±]³_Ó0EÓ+FÑ(�™[à+5Ñ(�˜[ô œvŸ~™~¨a°Ó3Ó4öð ô ×7Ñ7Ø! :¨x¸óä!×:Ñ:Ø! :¨z¸;óñòð ô �Y¤Ô&ðEÜ˜9×-Ñ-Ó.°Ò2Ð2Ñ2ñ Ü!Ÿ=™=¨×);Ñ);Ó<‘ä!Ÿ=™=Ø )× 2Ñ 2ÖI˜1°a¼4À»=Ó6H’QÒIó�ð#Ù&›j�ô
 "×:Ñ:Ø˜z¨8°[óð ô �Y¤Ô&ÜØØÜ”cœ$ Ó(Ó)óˆDô
 ˜˜wÓ'ˆFÜÜôð ó	óð ô �Y¤Ô(ð
GÙ Ü!Ÿ=™=¨×);Ñ);Ó<Ð<à*3×*<Ñ*<ÖM QÀÀWÃšqÐM�GÐMÙÜ%Ÿ}™}¨WÓ5Ð5à&˜ô ˜iÔ(ðHØ%×.Ñ.¨qÑ1�	ñ Ü—}‘}àÜ&×?Ñ?Ø)¨:°yÀ'óðóð ð �?Ü)×BÑBØ% z°9¸dóð ð  Øœ$˜t›*Ñ$ØÜ˜iÔ(ðHÜ" 9×#5Ñ#5Ó6°rÑ:�ô Ñ/Ó0õó 1ðð
 "Ð!Ü×#Ñ# IÔ.Ü ×(Ñ(¨Ó3Ð3Øœ#ÒØ# qšL�1Ð/¨aÐ/äÐ6°y°kÐAQÐRÓSÐSùòcùòùòùò&øô "ò EÜ Ð!:Ó;ÀÐDûðEüò Jøô ò #à"“ð#üò6 Nøô
 "ò GÜ Ð!<Ó=À3ÐFûðGûô
 "ò HÜ Ð!=Ó>ÀCÐGûðHûô. "ò HÜ Ð!=Ó>ÀCÐGûðHúsº   Å8Y-ÈY2ËY7Ï6Y<ÐZ Ñ1ZÒZÒZ# Ô Z: Ô;Z: Õ	
Z5ÕZ5ÕZ: Õ1Z: Õ?[ ×2[4 Ú	ZÚ
ZÚZÚ#Z2Ú1Z2Ú5Z: Ú:	[Û[Û[Û	[1Û [,Û,[1Û4	\Û=\	Ü	\Úsmc                 óÒ   — | t         j                  k(  rt        t         j                  d«      S | t         j                  k(  rt        t         j                  d«      S t        d| › �«      ‚)zr
        Returns a function that will generate values from a type, based on the SamplingMethod passed in.
        TFzmalformed sampling method: )rt   rv   r   rŠ   ru   r§   )r¶   s    r   ÚdispatchzSamplingMethod.dispatcht  sY   € ð
 ”×&Ñ&Ò&Üœ>×BÑBÀDÓIÐIØ”>×(Ñ(Ò(Üœ>×BÑBÀEÓJÐJäÐ:¸2¸$Ð?Ó@Ð@r   N)r#   r1   r2   r3   ru   rv   rE   rF   rC   r   r	   rŠ   ÚSamplingTyper¸   r*   r   r   rt   rt   µ   s‡   „ ñð €FØ€FàðoTØðoTØ),ðoTØ9=¸c¹ðoTØMPðoTà	òoTó ðoTðb ð	AÐ%ð 	A¨,ò 	Aó ñ	Ar   rt   c                   ó   — e Zd ZdZy)ÚDefaultzv
    Singleton default object that will cause the ConfigFuzzer to always use the default value set in the config.
    N)r#   r1   r2   r3   r*   r   r   r»   r»   �  s   „ òr   r»   .c                   óŽ   — e Zd ZU dZeeef   ed<   defd„Z	dd„Z
defd„Zdefd„Zd	ed
eddfd„Zd	edee   fd„Zdee   fd„Zy)Ú
ResultTypez`
    The mapping of the combo strings to the result status after running the config fuzzer.
    Ú_valsr   c                 ó"   — d| j                   › d�S )NzResultType[ú]©r¾   r/   s    r   Ú__repr__zResultType.__repr__”  s   € Ø˜TŸZ™Z˜L¨Ð*Ð*r   Nc                 ó   — i | _         y r)   rÁ   r/   s    r   Ú__init__zResultType.__init__—  s	   € Øˆ�
r   c                 ó,   — t        | j                  «      S r)   )r    r¾   r/   s    r   Ú__len__zResultType.__len__š  s   € Ü�4—:‘:‹Ðr   c                 ó    — t        | j                  «      }| j                  j                  «       D ]  }|t        j                  k(  sŒ|dz  }Œ |S )zI
        Returns how many combos actually ran (weren't skipped).
        r„   )r    r¾   ÚvaluesrO   r\   )r+   ÚretÚstatuss      r   Únum_ranzResultType.num_ran�  sI   € ô �$—*‘*‹oˆØ—j‘j×'Ñ'Ó)ò 	ˆFØœŸ™Ó'Ø�q‘‘ð	ð ˆ
r   ÚcomborÊ   c                 óJ   — t        t        |«      «      }|| j                  |<   y r)   )r©   Úsortedr¾   )r+   rÌ   rÊ   s      r   r¡   zResultType.set§  s   € Ü”f˜U“mÓ$ˆØ"ˆ�
‰
�5Òr   c                 ób   — t        t        |«      «      }| j                  j                  |d «      S r)   )r©   rÎ   r¾   r=   )r+   rÌ   s     r   ÚlookupzResultType.lookup«  s%   € Ü”f˜U“mÓ$ˆØ�z‰z�~‰~˜e TÓ*Ð*r   c                 ó6   — | j                   j                  «       S r)   )r¾   Úkeysr/   s    r   rÒ   zResultType.keys¯  s   € Ø�z‰z�‰Ó Ð r   ©r   N)r#   r1   r2   r3   rB   Ú	ComboTyperO   rD   rC   rÂ   rÄ   r”   rÆ   rË   r¡   r   rÐ   r   rÒ   r*   r   r   r½   r½   �  s…   … ñð �	˜6Ð!Ñ"Ó"ð+˜#ó +óð˜ó ð˜ó ð#˜ð #¨Fð #°tó #ð+˜Ið +¨(°6Ñ*:ó +ð!�h˜yÑ)ô !r   r½   Ú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_tablesztriton.debug_sync_graphztriton.debug_sync_kernelÚ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_regex)z'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)rq   Ú!compiled_autograd_kwargs_overrideÚfail_on_recompile_limit_hitÚsuppress_errors)ztorch._inductor.configztorch._dynamo.configÚMODULE_DEFAULTSc                   ó²  — e Zd ZU dZeed<   eed<   dej                  dfde	de
dedee   d	ed
efd„Zdefd„Zdededdfd„Zd,d„Zdefd„Zdee   defd„Zdededdfd„Zdedefd„Zdededefd„Zd-dededefd„Zd.deddfd „Zd.deddfd!„Zd"ed#ee   ddfd$„Z dededefd%„Z!d/d&ed'e"de#e   fd(„Z$ded)edee   fd*„Z%ded)e#e&eef      dee   fd+„Z'y)0ÚConfigFuzzeraÃ  
    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, triton_debug_sync_graph
    cpp_wrapper, triton_debug_sync_kernel
    cpp_wrapper, disable_cpp_codegen
    combo_kernels, benchmark_combo_kernel, profile_bandwidth, profile_bandwidth_regex
    trace.enabled, trace.save_real_tensors
    Úsamplery   Ni  Úconfig_moduleÚtest_model_fn_factoryÚseedr¶   Útest_timeoutc                 ó¬  — t         j                  dk  rt        j                  d«       y|| _        || _        i | _        || _        || _        | j                  j                  | _
        t        j                  |«      | _        |€J| j                  j                  t        v r#t        | j                  j                     | _        yt#        d«      ‚|| _        y)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 know failures.
            sm: How type value samples are generated, default TOGGLE.
            test_timeout: max time a test can take.
        )r‡   é
   z$Only python 3.10 and later supportedNz"No default passed to ConfigFuzzer.)ÚsysÚversion_infoÚlogÚerrorrö   r÷   Údetailed_resultsrô   rõ   Ú_configÚfieldsrt   r¸   ró   r#   rð   ry   r§   )r+   rô   rõ   rö   ry   r¶   r÷   s          r   rÄ   zConfigFuzzer.__init__<  s²   € ô& ×Ñ˜gÒ%Ü�I‰IÐ<Ô=ØØˆŒ	Ø(ˆÔØACˆÔØ*ˆÔØ%:ˆÔ"Ø/3×/AÑ/A×/IÑ/IˆŒÜ$×-Ñ-¨bÓ1ˆŒàˆ?Ø×!Ñ!×*Ñ*¬oÑ=Ü.¨t×/AÑ/A×/JÑ/JÑK�•ä Ð!EÓFÐFà"ˆD�Lr   r   c           	      óp   — d| j                   › d| j                  › d| j                  › d| j                  › d�	S )NzConfigFuzzer(config_module=z, test_model_fn_factor=z, seed=z
, default=ú))rô   rõ   rö   ry   r/   s    r   rÂ   zConfigFuzzer.__repr__b  sH   € à)¨$×*<Ñ*<Ð)=ð >$Ø$(×$>Ñ$>Ð#?¸wÀtÇyÁyÀkÐQ[Ð\`×\hÑ\hÐ[iÐijðlð	
r   rx   Úvaluec                 ó2   — t        | j                  ||«       y)z!Set a config value in the module.N)Úsetattrrô   )r+   rx   r  s      r   Ú_set_configzConfigFuzzer._set_configh  s   € ä�×"Ñ" J°Õ6r   c                 ó€   — | j                   j                  «       D ]!  \  }}| j                  ||j                  «       Œ# y)z*Reset all configs to their default values.N)r   r¥   r  ry   )r+   rx   Ú	field_objs      r   Ú_reset_configszConfigFuzzer._reset_configsl  s9   € à%)§[¡[×%6Ñ%6Ó%8ò 	<Ñ!ˆJ˜	Ø×Ñ˜Z¨×):Ñ):Õ;ñ	<r   c                 ó°   — | j                   j                  «       D ��ci c]*  \  }}||t        k7  r|n| j                  |   j                   “Œ, }}}|S c c}}w )z%creates a new config from the default)ry   r¥   ÚDEFAULTr   )r+   ÚnameÚvalrÉ   s       r   Ú
new_configzConfigFuzzer.new_configq  sZ   € ð "Ÿ\™\×/Ñ/Ó1÷
á��cð ˜¤š‘#¨T¯[©[¸Ñ->×-FÑ-FÑFð
ˆñ 
ð ˆ
ùó	
s   ž/AÚconfigsc                 óL   — t        «       }|D ]  }| j                  ||«       Œ |S )z#entrypoint to reproduce any failure©r½   Ú_reproduce_single_helper)r+   r  ÚresultsÚconfs       r   Ú	reproducezConfigFuzzer.reproducey  s-   € ä“,ˆØò 	9ˆDØ×)Ñ)¨$°Õ8ð	9àˆr   r  r  c                 óô   — t        d|› �«       | j                  «       }|j                  |«       | j                  ||«       t        d|› d|j	                  t        |j                  «       «      «      › �«       y )NzStarting repro of z
Status of z:
)Úprintr  ÚupdateÚtest_configrÐ   r©   rÒ   )r+   r  r  r  s       r   r  z%ConfigFuzzer._reproduce_single_helper€  sf   € ÜÐ" 4 &Ð)Ô*Ø—_‘_Ó&ˆ
Ø×Ñ˜$ÔØ×Ñ˜ *Ô-Ü�
˜4˜&  G§N¡N´5¸¿¹»Ó3EÓ$FÐ#GÐHÕIr   Úconfigc                 ó>   — t        «       }| j                  ||«       |S r)   r  )r+   r  r  s      r   Úreproduce_singlezConfigFuzzer.reproduce_single‡  s   € Ü“,ˆØ×%Ñ% f¨gÔ6Øˆr   rÌ   c                 ó¤  — t        |«       |j                  |«      x}r|S | j                  «       }d}|D ]V  }||v rd}|j                  d«      rd}| j                  |   }| j                  ||j                  |j                  «      }|||<   ŒX |r0|j                  |t        j                  «       t        j                  S | j                  ||«      S )NFTr�   )r  rÐ   r  Ú
startswithr   ró   r¯   ry   r¡   rO   r\   r  )	r+   r  rÌ   Ústr  Úskiprx   Úfieldr  s	            r   Ú_fuzz_helperzConfigFuzzer._fuzz_helperŒ  sÊ   € ÜˆeŒØ—‘ Ó&Ð&ˆ2Ð&àˆIà—‘Ó"ˆàˆØò 	'ˆJØ˜VÑ#à�Ø×$Ñ$ SÔ)Ø�Ø—K‘K 
Ñ+ˆEØ—K‘K 
¨E×,<Ñ,<¸e¿m¹mÓLˆEØ!&ˆF�:Òð	'ñ Ø�K‰K˜œvŸ~™~Ô.Ü—>‘>Ð!à×Ñ ¨Ó0Ð0r   ÚnÚmax_combinationsc                 óT  — t        «       }t        d|› d| j                  › �«       t        j                  | j                  «       t	        j
                  | j                  |«      D ]@  }| j                  ||«      }|t        j                  k7  sŒ)|dz  }|dk  sŒ4t        d«        |S  |S )zˆ
        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 r„   r   z"Reached maximum combinations limit)
r½   r  rö   r~   Ú	itertoolsÚcombinationsr   r"  rO   r\   )r+   r#  r$  r  rÌ   r  s         r   Úfuzz_n_tuplezConfigFuzzer.fuzz_n_tuple¤  sž   € ô “,ˆÜ�	˜!˜Ð5°d·i±i°[ÐAÔBÜ�‰�D—I‘IÔä×+Ñ+¨D¯K©K¸Ó;ò 	ˆEØ×"Ñ" 7¨EÓ2ˆBØ”V—^‘^Ó#Ø  AÑ%Ð Ø# qÓ(ÜÐ>Ô?Øàˆð	ð ˆr   Úfilenamec                 ó    — t        |d«      5 }t        j                  | j                  | j                  dœ|«       ddd«       y# 1 sw Y   yxY w)z'Save the current fuzzer state to a fileÚwb)r  rþ   N)ÚopenÚpickleÚdumpr  rþ   )r+   r)  Úfs      r   Ú
save_statezConfigFuzzer.save_state¸  sD   € ä�(˜DÓ!ð 	 QÜ�K‰KØ ŸL™L¸d×>SÑ>SÑTÐVWô÷	÷ 	ñ 	ús   �.AÁAc                 ó²   — t        |d«      5 }t        j                  |«      }|d   | _        |j	                  di «      | _        ddd«       y# 1 sw Y   yxY w)zLoad fuzzer state from a fileÚrbr  rþ   N)r,  r-  Úloadr  r=   rþ   )r+   r)  r/  Ústates       r   Ú
load_statezConfigFuzzer.load_state¿  sT   € ä�(˜DÓ!ð 	F QÜ—K‘K “NˆEØ  Ñ+ˆDŒLØ$)§I¡IÐ.@À"Ó$EˆDÔ!÷	F÷ 	Fñ 	Fús   �7AÁAÚsignumÚframec                 ó   — t        d«      ‚)NzTest execution timed out)ÚTimeoutError)r+   r6  r7  s      r   Útimeout_handlerzConfigFuzzer.timeout_handlerÆ  s   € ÜÐ5Ó6Ð6r   c           
      óÖ  ‡ ‡‡‡‡‡‡— t        j                   t         j                  ‰ j                  «      Št        j                  ‰ j                  «       t        d‰› �«       t        ‰j                  «       «      Š‰j                  ‰«      x}r&t        j                   t         j                  ‰«       |S dˆfd„Šdt        dt        t        t        f   fˆfd„Šdt        dt        d	t        dt        t           dt        f
ˆˆˆˆˆˆ fd
„}t         j"                  j%                  «        ‰ j'                  «        ‰j)                  «       D ]  \  }}‰ j+                  ||«       Œ ‰ j-                  «       }	  |«        	 ‰ j-                  «       }	t!        j0                  |	d¬«      }
	  |
«       }|s |dt        j6                  dd«      S  |dt        j8                  dd«      S # t        $ r#} |dt        j.                  d|«      cY d}~S d}~ww xY w# t        $ r#} |dt        j2                  d|«      cY d}~S d}~ww xY w# t        $ r#} |dt        j4                  d|«      cY d}~S d}~ww xY w)zZ
        Tests a config by calling the function produced by the factory function.
        zTesting config r   Nc                  óV   •— ‰j                  «       D ]  \  } }t        | › d|› �«       Œ y )Nz = )r¥   r  )r!  r  r  s     €r   Úprint_configz.ConfigFuzzer.test_config.<locals>.print_configÕ  s/   ø€ Ø &§¡£ò ,‘��uÜ˜˜˜s 5 'Ð*Õ+ñ,r   Úexcc                 ób   •— t        | «      t        j                  «       ‰j                  «       dœS )N)Ú	exceptionÚ	tracebackr  )rC   rA  Ú
format_excÚcopy)r>  r  s    €r   Úget_error_infoz0ConfigFuzzer.test_config.<locals>.get_error_infoÙ  s)   ø€ ä  ›XÜ&×1Ñ1Ó3Ø Ÿ+™+›-ñð r   ÚmessageÚreturn_statusÚprint_tracebackc                 óø   •— t        j                   t         j                  ‰«       t        | › d�«        ‰«        |r ‰|«      ‰	j                  ‰<   |rt	        j
                  «        ‰j                  ‰|«       |S )Nz with config combination:)ÚsignalÚSIGALRMr  rþ   rA  Ú	print_excr¡   )
rE  rF  rG  r>  Úconfig_tuplerD  Úoriginal_handlerr=  r  r+   s
       €€€€€€r   Úhandle_returnz/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 exceptionTÚinductor)ÚbackendzException compilingzException running compiledzFunction returned FalseFzFunction succeededrÓ   )rI  rJ  r:  Úalarmr÷   r  r©   rÒ   rÐ   r¨   rB   rC   r	   rO   rF   r   r4   Ú_dynamoÚresetr	  r¥   r  rõ   rX   ÚcompilerW   rY   rZ   r]   )r+   r  r  rÉ   rN  r  r  Útest_model_fnr>  Útest_model_fn2ÚcompÚcompile_resultrL  rD  rM  r=  s   ```         @@@@r   r  zConfigFuzzer.test_configÉ  s.  þ€ ô "Ÿ=™=¬¯©¸×9MÑ9MÓNÐÜ�‰�T×&Ñ&Ô'Ü� ˜xÐ(Ô)Ü˜VŸ[™[›]Ó+ˆØ—.‘. Ó.Ð.ˆ3Ð.Ü�M‰Mœ&Ÿ.™.Ð*:Ô;ØˆJõ	,ð	¤	ð 	¬d´3¼°8©nõ 	ð	!Üð	!ä!ð	!ô "ð	!ô œ)Ñ$ð		!ô
 ÷	!ò 	!ô" 	�‰×ÑÔØ×ÑÔØ!Ÿ<™<›>ò 	*‰KˆD�%Ø×Ñ˜T 5Õ)ð	*ð ×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   Å3G Å;'H Æ#H< Ç	H
Ç'HÇ?H
ÈH
È	H9ÈH4È.H9È4H9È<	I(ÉI#ÉI(É#I(Únum_attemptsÚpc                 ó  — t        d| j                  › d|› �«       t        j                  | j                  «       | j                  «        t	        «       }g }t        |«      D �]  }t        d|dz   › d|› �«       | j                  «       }| j                  j                  «       D ]e  \  }}||vsŒ|j                  d«      rŒd|vsŒ"t        j                  «       |k  sŒ:| j                  ||j                  |j                  «      }	|	||<   Œg | j                  ||«      }
|
t        t        j                   t        j"                  g«      vsŒè| j%                  ||«      x}sŒýt        d|› �«       |j'                  |«       �Œ |S )	zK
        Test configs and bisect to minimal failing configuration.
        z-Starting random testing with bisection, seed z, and p zRandom attempt r„   ú/r�   ÚTESTING_ONLYzMinimum failing config: )r  rö   r~   r	  r½   r�   r  r   r¥   r  ró   r¯   ry   r  r   rO   r]   r\   Ú_bisect_failing_configÚappend)r+   rY  rZ  r  rÉ   Úattemptr  rx   Úconfig_entryr  rÊ   Úminimal_failing_configs               r   ÚbisectzConfigFuzzer.bisect  sq  € ô 	Ð=¸d¿i¹i¸[ÈÐQRÐPSÐTÔUÜ�‰�D—I‘IÔØ×ÑÔÜ“,ˆØ "ˆä˜\Ó*ó 	7ˆGÜ�O G¨a¡K =°°,°Ð@ÔAà—_‘_Ó&ˆFà,0¯K©K×,=Ñ,=Ó,?ò 
/Ñ(�
˜Là fÒ,Ø&×1Ñ1°#Õ6Ø&¨jÒ8ÜŸ™›¨!Ó+à ŸK™KØ" L×$;Ñ$;¸\×=QÑ=Qó�Eð */�F˜:Ò&ð
/ð ×%Ñ% g¨vÓ6ˆFØœZ¬¯©¼¿¹Ð(GÓHÒHØ-1×-HÑ-HØ˜Vó.ð Ð)ñ ô Ð4Ð5KÐ4LÐMÔNØ—J‘JÐ5Ö6ð/	7ð2 ˆ
r   Úfailing_configc                 óT   — | j                  |t        |j                  «       «      «      S r)   )Ú_bisect_failing_config_helperrž   r¥   )r+   r  rd  s      r   r^  z#ConfigFuzzer._bisect_failing_config@  s%   € ð ×1Ñ1°'¼4À×@TÑ@TÓ@VÓ;WÓXÐXr   c                 óv  ‡ ‡— t        d|› �«       |sydt        t        t        t        f      dt
        fˆˆ fd„}t        |«      dk  r# ||«      j                  «       rt        |«      S dS t        j                  |«       t        |«      dz  }|d| }||d } ||«      j                  «       r‰ j                  ‰|«      S  ||«      j                  «       r‰ j                  ‰|«      S t        |«      dk\  rÍt        |«      d	z  }||z   }||d }	 ||	«      j                  «       r‰ j                  ‰|	«      S |d| |z   }
 ||
«      j                  «       r‰ j                  ‰|
«      S ||d| z   } ||«      j                  «       r‰ j                  ‰|«      S ||d } ||«      j                  «       r‰ j                  ‰|«      S t        t        |«      «      D ]O  }t        |«      D ��cg c]  \  }}||k7  sŒ|‘Œ }}} ||«      j                  «       sŒ=‰ j                  ‰|«      c S  t        |«      S c c}}w )
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: Nr‹   r   c                 óB   •— t        | «      }‰j                  ‰|«      }|S r)   )rB   r  )r‹   ÚdÚresultr  r+   s      €€r   Útestz8ConfigFuzzer._bisect_failing_config_helper.<locals>.testR  s#   ø€ Ü�Q“ˆAØ×%Ñ% g¨qÓ1ˆFØˆMr   r„   r“   é   é   )r  rž   r©   rC   r	   rO   r    r[   rB   r~   Úshufflerf  r�   Ú	enumerate)r+   r  rd  rk  ÚmidÚ
first_halfÚsecond_halfÚlowÚhighÚquart1Úquart2Úquart3Úquart4ÚiÚjr‹   Únew_lists   ``               r   rf  z*ConfigFuzzer._bisect_failing_config_helperE  sD  ù€ ô 	Ð" >Ð"2Ð3Ô4áØð	”Dœœs¤C˜x™Ñ)ð 	¬fö 	ô
 ˆ~Ó !Ò#Ù+/°Ó+?×+GÑ+GÔ+I”4˜Ó'ÐSÈtÐSä�‰�~Ô&ä�.Ó! QÑ&ˆØ# D SÐ)ˆ
Ø$ S TÐ*ˆÙ�
Ó×#Ñ#Ô%Ø×5Ñ5°g¸zÓJÐJÙ�Ó×$Ñ$Ô&Ø×5Ñ5°g¸{ÓKÐKäˆ~Ó !Ò#Ü�nÓ%¨Ñ*ˆCØ˜‘9ˆDØ# C 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Ø# D EÐ*ˆFÙ�F‹|×#Ñ#Ô%Ø×9Ñ9¸'À6ÓJÐJä”s˜>Ó*Ó+ò 	MˆAÜ&/°Ó&?×J™d˜a À1ÈÃ6šÐJˆHÑJÙ�H‹~×%Ñ%Õ'Ø×9Ñ9¸'À8ÓLÒLð	Mô
 �NÓ#Ð#ùó	 Ks   Ç)H5Ç7H5rÓ   )r{   )zfuzzer_state.pkl)éd   g      à?)(r#   r1   r2   r3   r¹   rD   Ú
ConfigTypert   ru   r   ÚFactoryTyper”   r   rÄ   rC   rÂ   r	   r  r	  r  r   r½   r  r  r  rÔ   rO   r"  r(  r0  r5  r   r:  r  r–   rž   rc  r^  r©   rf  r*   r   r   rò   rò   ý  s  … ñ9ðv ÓØÓð )-Ø+×2Ñ2Ø ñ$#à#ð$#ð  +ð$#ð ð	$#ð
 ˜*Ñ%ð$#ð ð$#ð ó$#ðL
˜#ó 
ð7 cð 7°#ð 7¸$ó 7ó<ð
˜Jó ð ¨*Ñ!5ð ¸*ó ðJ¨Zð JÀ*ð JÐQUó Jð zð °jó ð
1 Jð 1°yð 1ÀVó 1ñ0˜cð °Sð ÀJó ñ( 3ð Àó ñF 3ð FÀó Fð7 cð 7°(¸9Ñ2Eð 7È$ó 7ðPS :ð PS°zð PSÀfó PSñd# 3ð #°ð #ÀÀjÑAQó #ðJYØ!ðYØ3=ðYà	�*Ñ	óYð
4$Ø!ð4$Ø37¸¸cÀ3¸h¹Ñ3Hð4$à	�*Ñ	ô4$r   rò   r#  r  r)  c                 óF  — | dk(  sJ ‚t        |«      dkD  sJ ‚t        i «      }|j                  «       D ]*  }|j                  |d   «       |j                  |d   «       Œ, t	        |«      }d}|dz  }|D ]  }dj                  |«      }|d|› d�z  }Œ |d	z  }|D ]Î  }	|d
|	› d�z  }|D ]¹  }|j                  |	|f«      }
d}d}|
t        j                  k(  rd}d}n||
t        j                  k(  rd}d}nd|
t        j                  k(  rd}d}nL|
t        j                  k(  rd}d}n4|
t        j                  k(  rd}d}n|
t        j                  k(  rd}d}nd}d}|d|› d|› d�z  }Œ» |dz  }ŒÐ |dz  }t        |d«      5 }|j                  |«       ddd«       y# 1 sw Y   yxY w)zp
    Creates an HTML document representing the results of running the fuzzer with fuzz_n_tuple, with n = 2.
    r“   r   r„   aô  
    <!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|   rP   ú-rQ   ÚOÚfailedÚeÚEÚRÚCz<td class="z">z</td>z</tr>z?
        </tbody>
        </table>
    </body>
    </html>
    ÚwN)r    r   rÒ   ÚaddrÎ   rœ   rÐ   rO   r\   r]   rX   rY   rZ   rW   r,  Úwrite)r#  r  r)  Ú	input_setÚkeyÚ
input_listÚhtml_contentÚcol_nameÚcolÚrow_nameÚstatus_enumÚstatus_classÚ
status_valÚfiles                 r   Úvisualize_resultsr•  |  s  € ð �Š6€Mˆ6Üˆw‹<˜!ÒÐÐä!+¨B£€IØ�|‰|‹~ò ˆØ�‰�c˜!‘fÔØ�‰�c˜!‘fÕðô ˜	Ó"€Jð&€LðP Ð%Ñ%€LØò *ˆØ�k‰k˜(Ó#ˆØ˜$˜s˜e 5Ð)Ñ)‰ð*ð Ð*Ñ*€Lð ò  ˆØ˜( 8 *¨EÐ2Ñ2ˆØ"ò 	LˆHà!Ÿ.™.¨(°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	Lð8 	˜Ñ‰ð= ð@ ð ñ €Lô 
ˆh˜Ó	ð ! Ø�
‰
�<Ô ÷!÷ !ñ !ús   Å<FÆF )zresults.html)GrI   r&  Úloggingr-  r~   rI  r˜   rú   rA  Úcollections.abcr   r   Úenumr   Ú	functoolsr   r   Útypesr   Útypingr	   r
   r   r   r   r   r   r   r4   Ú!torch._inductor.custom_graph_passr   Útorch._inductor.schedulerr   Útorch.utils._config_moduler   r   Útorch.utils._ordered_setr   Ú	getLoggerr#   rü   rF   r   r!   r$   r&   r7   r9   rL   ÚCUDA_BACKENDrO   rr   rB   rC   rž   rD   r   r¹   rt   r»   r  r©   rÔ   r½   r}  ÚFactoryOutputTyper~  rð   rò   r”   r•  r*   r   r   ú<module>r£     s  ðÜ Û Û Û Û Û Û Û 
Û ß .Ý ß $Ý ÷	÷ 	ó 	ó Ý =Ý 7ß AÝ /ð €g×Ñ˜Ó!€ðH Tó Hð
 4ó 
ð, 4ó ,ô	�ô 	ñ ˆCƒL€÷:ñ :ð.˜Tó ñ ÔØ˜hÐ'�Là�:€Lô
ˆTô 
ðF !ð 15Ø.2ñ'ð  =¸eÐDØ#@À$Ð"GØ<¸dÐCØ')Ø&(ñ
	
ð !Ø Ø Ø Ø-¨tÐ4ñ	
ð!ð( '¨
Ð3Ø" JÐ/Ù$.£L >ñ1(€��S˜$˜s™)�^Ñ$ó ð4 ˜˜d 3™i¨Ð-¨sÐ2Ñ3€ôIA�Tô IA÷Xñ ñ ‹)€ð �#�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 	# Gð7*ð8 	" 7ð9*ð: 	˜wð;*ð< 	" 7ð=*ð> 	" 7ð?*ð@ 	˜7ðA*ðB 	2°7ðC*ðD 	2°7ñE*ðF 4;Ø%,Ø&-Ø3:Ø")Ø!(Ø 'òS*ðX (/Ø-4Ø'.Ø"ñ	ñY2*€��c˜:�oÑ&ó 2÷j|$ñ |$ð@ 2@ñh!Ø
ðh!Øðh!Ø+.ðh!à	ôh!r   