ó
    Eñi¤N  ã                  óÞ  • S SK Jr  S SKrS SKrS SKrS SKrS SKJr  S SKJ	r	J
r
  S SKJrJr  S SKrS SKJr  S SKJr  S SKJr  S SKJr  S	S
KJrJr  \(       a  S SKJrJr  \" 5       r\ " S S5      5       r " S S\R                   R@                  5      r!SS jr"        SS jr#      SS jr$SS jr%SS jr&\ " S S5      5       r'\%4SSSSSS.                   SS jjjr(g) é    )ÚannotationsN)Ú	dataclass)ÚpartialÚwraps)ÚAnyÚTYPE_CHECKING)Útqdm)ÚStorageWeakRef)ÚContentStoreWriteré   )Úget_outputsÚget_placeholders)ÚCallableÚSequencec                  ó>   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	rg
)ÚLoadTensorMetaé   ztuple[int, ...]ÚsizeÚstrideztorch.dtypeÚdtypeztorch.deviceÚdevice© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   ó    ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_functorch/fx_minifier.pyr   r      s   ‡ à
ÓØÓØÓØÖr   r   c                  ód   ^ • \ rS rSrSSS.       S	U 4S jjjrS
U 4S jjrSU 4S jjrSrU =r$ )ÚConcretePropé#   NF©ÚwriterÚskip_offloadc               óh   >• [         TU ]  U5        X l        X0l        [	        5       U l        S U l        g ©N)ÚsuperÚ__init__r%   r&   ÚsetÚseen_storagesÚpbar)ÚselfÚmodr%   r&   Ú	__class__s       €r    r*   ÚConcreteProp.__init__$   s.   ø€ ô 	‰Ñ˜ÔØŒØ(ÔÜ25³%ˆÔØˆ�	r   c                ó  >• U R                   R                  S5        [        TU ]  U5      nUR                  n[        U[        R                  5      (       Ga   U R                  c  X!R                  S'   U$ [        UR                  5       5      U R                  ;   a  S UR                  S'   U$ U R                  (       d:  U R                  R                  [        R                   R#                  SU5      U5        [%        UR'                  5       UR)                  5       UR*                  UR,                  5      UR                  S'   U R                  R/                  [        UR                  5       5      5         U$ [0        UR                  S'   U$ )Nr   Úconcrete_valueÚeager)r-   Úupdater)   Úrun_nodeÚnameÚ
isinstanceÚtorchÚTensorr%   Úmetar
   Úuntyped_storager,   r&   Úwrite_tensorÚosÚpathÚjoinr   r   r   r   r   ÚaddÚis_tuple)r.   ÚnÚrr7   r0   s       €r    r6   ÚConcreteProp.run_node1   s2  ø€ Ø�	‰	×Ñ˜ÔÜ‰GÑ˜QÓˆØ�v‰vˆä�aœŸ™×&Ò&Ø�{‰{Ñ"Ø+,—‘Ð'Ñ(ð  ˆô " !×"3Ñ"3Ó"5Ó6¸$×:LÑ:LÓLð 04�A—F‘FÐ+Ñ,ð ˆð  ×,×,ØŸ™×0Ñ0´·±·±¸gÀtÓ1LÈaÔPÜ/=ØŸ™› !§(¡(£*¨a¯g©g°q·x±xó0�A—F‘FÐ+Ñ,ð ×&Ñ&×*Ñ*¬>¸!×:KÑ:KÓ:MÓ+NÕOð ˆô (0ˆA�F‰FÐ#Ñ$àˆr   c                ó”  >• U R                   n[        U[        R                  5      (       d  [	        S[        U5       35      e[        S[        UR                  R                  5      U R                  S L S9 nX0l        [        TU ]4  " U6 nU R                  (       d  UR                  S5        UsS S S 5        $ ! , (       d  f       g = f)Nzexpected fx.GraphModule, got z(Saving intermediates for delta debugging)ÚdescÚtotalÚdisablezESaved!  To skip next time, run with --skip-saving-eager-intermediates)Úmoduler8   ÚfxÚGraphModuleÚAssertionErrorÚtyper	   ÚlenÚgraphÚnodesr%   r-   r)   Úrunr&   Úset_description)r.   Úargsr/   r-   rD   r0   s        €r    Ú	propagateÚConcreteProp.propagateJ   s¢   ø€ Ø�k‰kˆÜ˜#œrŸ~™~×.Ñ.Ü Ð#@ÄÀcÃÀÐ!LÓMÐMÜØ;Ü�c—i‘i—o‘oÓ&Ø—K‘K 4Ð'ò
ð ØŒIÜ‘’˜TÐ"ˆAØ×$×$Ø×$Ñ$Ø[ôð ÷
÷ 
÷ 
ús   Á87B9Â9
C)r-   r,   r&   r%   )r/   úfx.GraphModuler%   zContentStoreWriter | Noner&   ÚboolÚreturnÚNone)rC   úfx.NoderY   r   )rT   r   rY   r   )	r   r   r   r   r*   r6   rU   r   Ú__classcell__)r0   s   @r    r"   r"   #   sJ   ø† ð
 -1Ø"ñàðð *ð	ð
 ðð 
÷ð ÷÷2õ r   r"   c                ó¢   • U R                   S:H  =(       a:    U R                  [        R                  R                  R
                  R                  L $ )NÚcall_function)ÚopÚtargetr9   ÚopsÚ
debugprimsÚload_tensorÚdefault)Únodes    r    Úis_load_tensor_noderf   \   s;   € à�‰�?Ñ"÷ 	DØ�K‰Kœ5Ÿ9™9×/Ñ/×;Ñ;×CÑCÐCðr   c                ó:  • UR                   S:X  d  UR                   S:X  a  g[        U5      (       a  gUR                  R                  SS 5      n[	        U[
        R                  5      (       a8  SUl         UR                  Ul        SUl	        0 Ul
        UR                  U5        gUc  gU[        L a5  Sn[        UR                  5       H  n[        XU5      =(       d    UnM     U$ [	        U[         5      (       aŸ  SUl         [
        R"                  R$                  R&                  R(                  Ul        [*        R,                  R/                  SUR                  5      UR0                  UR2                  4Ul	        UR4                  UR6                  S	.Ul
        gg)
NÚoutputÚplaceholderFr3   r   Tr^   r4   )r   r   )r_   rf   r;   Úgetr8   r9   r:   r7   r`   rT   ÚkwargsÚappendrB   ÚlistÚusersÚ_convert_node_to_placeholderr   ra   rb   rc   rd   r>   r?   r@   r   r   r   r   )rP   re   ÚinpsÚconcrete_valrD   Ú
tuple_users         r    ro   ro   d   sI  € ð ‡w�w�(Ó˜dŸg™g¨Ó6Øä˜4× Ñ Øà—9‘9—=‘=Ð!1°4Ó8€Lä�,¤§¡×-Ñ-ØˆŒØ—i‘iˆŒØˆŒ	ØˆŒà�‰�LÔ!Øà	Ñ	Øà	œÒ	!ØˆÜ˜tŸz™zÖ*ˆJÜ,¨UÀÓE×JÈŠAñ +ð ˆä	�L¤.×	1Ñ	1Ø!ˆŒÜ—i‘i×*Ñ*×6Ñ6×>Ñ>ˆŒä�G‰G�L‰L˜ $§)¡)Ó,Ø×ÑØ×Ñð
ˆŒ	ð #×)Ñ)Ø!×'Ñ'ñ
ˆŒð àr   c                ó|   • [         R                  " 5        S3n[         R                  " USS9  SSKJn  U" XU5        g)z˜
Takes minified FX graph as primary input, and ports it to HLO via StableHLO
Provides minified HLO graph as output, and archive them to local directory
z
/hlo_filesT)Úexist_okr   )Úsave_torch_model_as_stablehloN)r>   ÚgetcwdÚmakedirsÚtorch_xla.stablehloru   )Úminified_fx_graphÚinputsÚhlo_dirru   s       r    Úcreate_minified_hlo_graphr|   –   s2   € ô —’“�˜ZÐ(€GÜ‡K‚K� $Ò'åAá!Ð"3¸WÕEr   c                óü   • [        S[        U R                  R                  5       SU Vs/ s H/  o"R                  UR
                  UR                  R                  4PM1     sn SU R                   S35        g s  snf )Nz
# Working Repro with z nodes
inps = zo
inps = [torch.zeros(())] + [torch.ones(shape, dtype=dtype, device=device) for (shape, dtype, device) in inps]
Ú
)	ÚprintrO   rP   rQ   Úshaper   r   rN   Úcode)Úfx_grp   Úis      r    Ú
dump_stater„   ¥   sp   € Ü	ðÜ˜$Ÿ*™*×*Ñ*Ó+Ð,ð -Ù48Ó9²D¨q�'‰'�1—7‘7˜AŸH™HŸM™MÓ	*±DÑ9Ð:ð ;à‡�€ð ð		õùò 	:s   «6A9c                ó$   • U S:X  a  gX S-
  -  S:H  $ )Nr   Fr   r   )rC   s    r    Úis_power_of_twor†   °   s   € ØˆAƒvØØ�Q‘‰K˜AÑÐr   c                  ó4   • \ rS rSr% S\S'   S\S'   S	S jrSrg)
Ú
ReproStateé¶   úfx.GraphrP   úSequence[torch.Tensor]rp   c                óÌ   • [        U R                  5      n[        U5      [        U R                  5      :w  a-  [	        S[        U5       S[        U R                  5       35      eg )Núlen(ph_nodes)=z != len(self.inps)=)r   rP   rO   rp   rM   )r.   Úph_nodess     r    Ú__post_init__ÚReproState.__post_init__»   sT   € Ü# D§J¡JÓ/ˆÜˆx‹=œC §	¡	›NÓ*Ü Ø ¤ X£ Ð/BÄ3ÀtÇyÁyÃ>ÐBRÐSóð ð +r   r   N)rY   rZ   )r   r   r   r   r   r�   r   r   r   r    rˆ   rˆ   ¶   s   ‡ àƒOØ
 Ó ÷r   rˆ   F)Úsave_dirÚoffload_to_diskr&   Úskip_sanityÚmax_granularityc          
     ó  ^ ^^^^^^^^^^^^^^ • T R                   n	[        U	R                  5      n
Ub  [        U5      (       d  [	        SU S35      eSmS)U 4S jjmS*U UU4S jjmSnU(       a  Uc  [        S5      e[        U5      n[        T X¶S9R                  " U6   U(       d  T" X‘5      (       d  [	        S	5      e[        S
U
 S3[        R                  S9        S+UU4S jjm    S,U4S jjnU" S5              S-U4S jj5       mU" S5              S-U4S jj5       mS.S jm S.UU 4S jjm        S-U4S jjnU" S5      " U5      mU" S5              S-U4S jj5       m      S/S jmU" S5              S-UUUU 4S jj5       mU" S5              S-UU4S jj5       m[        X‘5      n        S0UUUUUU4S jjn U" [        R                  " T UR                   5      UR                  5        [!        S ["        R$                  " ["        R&                  " [        UR                   R                  5      5      5      -  5      nUb  [)        UU5      nU" UUSS!9nUb  UnM¤  US -  nS"nUS#:¼  a  U" UUS"S!9nUb  UnSnOUS -  nUS#:¼  a  M  U(       a  M×  T" US#5      nUb  UnMç   T" UR                   UR                  5      (       d  [	        S$5      e[        S%T S&3[        R                  S9  [        R                  " T UR                   5      nS'[*        R,                  ;   a  [/        UUR                  5        U" UUR                  5        [        S([        R                  S9  UUR                  4$ )1a  
Minimizes a FX graph with given inputs, such that the resulting FX graph still returns True for module_fails.

Does 2 main strategies:
1. Truncates suffix: Removes some suffix from the graph and sets a new output.
2. Delta Debugging: Tries replacing half of the graph with inputs. If fails,
    tries replacing quarter of the graph, etc.

>>> # xdoctest: +SKIP(failing)
>>> failing_function = fx.symbolic_trace(f)
>>> minimize(failing_function, [torch.randn(5)], lambda fx_g, inps: fx_g(*inps))

note: module_fails returns True if it fails.
Nzmax_granularity z not power of twor   c                ón   >• [         R                  " T[        R                  " U 5      5      R                  $ r(   )rK   rL   ÚcopyÚdeepcopyrP   )Úfx_graphÚfail_fs    €r    Údeepcopy_fx_graphÚ#minifier.<locals>.deepcopy_fx_graphæ   s#   ø€ Ü�~Š~˜f¤d§m¢m°HÓ&=Ó>×DÑDÐDr   c                ó¬   >• [         R                  " U 5      n TS-  m[        R                  " TU 5      nUR                  R                  5         T" X!5      $ )Nr   )r—   r˜   rK   rL   rP   Úlint)rP   rp   r/   rš   Úmodule_failsÚnum_queriess      €€€r    Úgraph_failsÚminifier.<locals>.graph_failsé   sD   ø€ ä—’˜eÓ$ˆØ�qÑˆÜ�nŠn˜V UÓ+ˆØ�	‰	�‰ÔÙ˜CÓ&Ð&r   z3save_dir must not be None when offload_to_disk=Truer$   z#Input graph did not fail the testerzStarted off with ú nodes©Úfilec                óB   >^ ^• [        T 5      SSUUUU 4S jjj5       nU$ )Nc                óD  >• [        [        R                  S9  [        ST SU S[        U R                  R
                  5       S[        U R                  5       S3	[        R                  S9  T" T
" U R                  5      [        U R                  5      U5      nUGbg  [        UR                  R
                  5      n[        U R                  R
                  5      n[        UR                  5      n[        U R                  5      n[        [        UR                  5      5      n[        [        U R                  5      5      nSn	X4:  a!  Sn	[        S	U S
U S3[        R                  S9  XV:”  a!  Sn	[        S	U S
U S3[        R                  S9  Xx:  a!  Sn	[        S	U S
U S3[        R                  S9  U	(       d  [        S5      eT" UR                  UR                  5      (       d  [        S[        R                  S9  g U$ [        ST 3[        R                  S9  g )Nr¤   z
Strategy: z (G: z) (z nodes, z inputs)FTzSUCCESS: Went from z to r£   z inputsz outputsz$Success raised but no progress made?z=WARNING: Something went wrong, not applying this minificationzFAIL: )
r   ÚsysÚstderrrO   rP   rQ   rp   rm   r   ÚRuntimeError)Ú	old_stateÚgranularityÚ	new_stateÚ	new_nodesÚ	old_nodesÚnew_inpsÚold_inpsÚnew_outsÚold_outsÚprogress_mader›   r¡   r7   Ústrategys             €€€€r    Únew_funcÚ6minifier.<locals>._register_strategy.<locals>.new_func   sÛ  ø€ ä”s—z‘zÒ"ÜØ˜T˜F %¨ }ð 5Ü˜	Ÿ™×-Ñ-Ó.Ð/¨x¼¸I¿N¹NÓ8KÐ7LÈHðVä—Z‘Zòñ
 !Ù! )§/¡/Ó2´D¸¿¹Ó4HÈ+óˆIð Ò$Ü 	§¡× 5Ñ 5Ó6�	Ü 	§¡× 5Ñ 5Ó6�	Ü˜yŸ~™~Ó.�Ü˜yŸ~™~Ó.�Üœ{¨9¯?©?Ó;Ó<�Üœ{¨9¯?©?Ó;Ó<�Ø %�ØÓ(Ø$(�MÜØ-¨i¨[¸¸Y¸KÀvÐNÜ ŸZ™Zòð Ó&Ø$(�MÜØ-¨h¨Z°t¸H¸:ÀWÐMÜ ŸZ™Zòð Ó&Ø$(�MÜØ-¨h¨Z°t¸H¸:ÀXÐNÜ ŸZ™Zòö
 %Ü&Ð'MÓNÐNá" 9§?¡?°I·N±N×CÑCÜØWÜ ŸZ™Zòð  Ø Ð ä˜˜t˜f�o¬C¯J©JÒ7Ør   )r   )r«   rˆ   r¬   ÚintrY   úReproState | None)r   )rµ   r7   r¶   r›   r¡   s   `` €€r    Ú_register_strategyÚ$minifier.<locals>._register_strategyü   s(   ú€ ô 
ˆx‹÷1	ó 1	ó 
ð1	ðf ˆr   c                ó   >• [        TU S9$ )N)r7   )r   )r7   rº   s    €r    Úregister_strategyÚ#minifier.<locals>.register_strategy6  s   ø€ ô Ð)°Ñ5Ð5r   zTruncate suffixc                ó   >^	• [        5       n[        R                  " 5       n0 m	[        U R                  5       HÂ  u  pVUR                  UU	4S j5      nUR                  S;  a’  XR-  S:X  aŠ  XRS-  -  S:w  a  XS;  az  UR                  U45      n[        UR                  5      [        U R                  5      :  a  T
" XA5      (       a  [        XA5      s  $ UR                  U5        UR                  U5        UT	U'   MÄ     g )Nc                ó   >• TU    $ r(   r   ©ÚxÚenvs    €r    Ú<lambda>Ú1minifier.<locals>.remove_suffix.<locals>.<lambda>F  s	   ø€ ¸3¸qº6r   )ri   rh   r   é   )r+   rK   ÚGraphÚ	enumeraterQ   Ú	node_copyr_   rh   rO   rˆ   rA   Ú
erase_node)Ú	cur_graphÚcur_inpsr¬   ÚtestedÚ	new_graphÚidxre   Únew_nodeÚoutput_noderÃ   r¡   s            @€r    Úremove_suffixÚminifier.<locals>.remove_suffix>  sä   ù€ ô ›5ˆÜ—H’H“Jˆ	Ø&(ˆÜ" 9§?¡?Ö3‰IˆCØ ×*Ñ*¨4Ô1AÓBˆHØ�w‰wÐ7Ó7ð Ñ%¨Ó*Ø¨a¡Ñ0°AÓ5ØÓ)à"+×"2Ñ"2°H°;Ó"?�KÜ˜9Ÿ?™?Ó+¬c°)·/±/Ó.BÓBÁ{Ø!÷Hñ Hô  *¨)Ó>Ò>àŸ
™
 3œØ!×,Ñ,¨[Ô9Ø ˆC�‹Iñ# 4ð$ r   zRemove outputsc                óF  >• [        SUS-  5      nS n[        U R                  5       H  u  pEXEl        UR                  S:X  d  M  Un  O   Uc  g [        UR                  S   [        R                  5      (       a  g UR                  S   n[        U[        [        45      (       d  [        S[        U5       35      e[        US S9n[        U5      S:X  a  g [        S[        U5      U5       H0  nUS U XtU-   S  -   4Ul        T" X5      (       d  M%  [!        X5      s  $    g )Nr   rÆ   rh   r   z2expected output_args_raw to be list or tuple, got c                ón   • [        U [        R                  5      (       a  U R                  $ [	        S5      $ )Ng    eÍÍA)r8   rK   ÚNoderÏ   r¸   )rÂ   s    r    rÄ   Ú2minifier.<locals>.remove_outputs.<locals>.<lambda>s  s$   € ¤:¨a´·±×#9Ñ#9˜!Ÿ%™%ÐG¼sÀ3»xÐGr   )Úkey)ÚmaxrÈ   rQ   rÏ   r_   r8   rT   rK   rÖ   rm   ÚtuplerM   rN   ÚsortedrO   Úrangerˆ   )	rË   rÌ   r¬   rh   rÏ   re   Úoutput_args_rawÚoutput_argsr¡   s	           €r    Úremove_outputsÚ minifier.<locals>.remove_outputsY  s$  ø€ ô ˜!˜[¨AÑ-Ó.ˆØ!%ˆÜ" 9§?¡?Ö3‰IˆCØŒHØ�w‰w˜(Õ"Ø�Ùñ	 4ð ‰>Øä�f—k‘k !‘n¤b§g¡g×.Ñ.Øð !Ÿ+™+ a™.ˆÜ˜/¬D´%¨=×9Ñ9Ü ØDÄTÈ/ÓEZÐD[Ð\óð ô ØÙGñ
ˆô ˆ{Ó˜qÓ Øä˜œC Ó,¨kÖ:ˆCØ& t¨Ð,¨{ÀÑ;LÐ;NÐ/OÑOÐQˆFŒKÙ˜9×/Ó/Ü! )Ó6Ò6ñ ;ð r   c                óØ  • U R                   nU R                  n[        [        U5      5      n[	        U5      [	        U5      :w  a#  [        S[	        U5       S[	        U5       35      e/ n[        [	        U5      5       HF  n[	        X5   R                  5      S:X  a  UR                  X5   5        M3  UR                  X%   5        MH     [	        U5      [	        U5      :  a  [        X5      $ g )Nr�   z != len(cur_inps)=r   )rP   rp   rm   r   rO   rM   rÜ   rn   rÊ   rl   rˆ   )Ú	cur_staterË   rÌ   rŽ   r°   rÏ   s         r    Úremove_unused_inputs_uncheckedÚ0minifier.<locals>.remove_unused_inputs_unchecked~  sÇ   € Ø—O‘Oˆ	Ø—>‘>ˆÜÔ(¨Ó3Ó4ˆÜˆx‹=œC ›MÓ)Ü Ø ¤ X£ Ð/AÄ#ÀhÃ-ÀÐQóð ð (*ˆÜœ˜X›Ö'ˆCÜ�8‘=×&Ñ&Ó'¨1Ó,Ø×$Ñ$ X¡]Ö3à—‘ ¡Ö.ñ	 (ô
 ˆx‹=œ3˜x›=Ó(Ü˜iÓ2Ð2Ør   c                ód   >• T" U 5      nUb$  T" UR                   UR                  5      (       a  U$ g r(   )rP   rp   )râ   r­   r¡   rã   s     €€r    Úremove_unused_inputs_checkedÚ.minifier.<locals>.remove_unused_inputs_checked‘  s0   ø€ Ù2°9Ó=ˆ	ØÑ ¡[°·±À)Ç.Á.×%QÑ%QØÐØr   c                ó&   >• T" [        X5      5      $ r(   )rˆ   )rË   rÌ   r¬   ræ   s      €r    Ú_remove_unused_wrapperÚ(minifier.<locals>._remove_unused_wrapper—  s   ø€ ñ ,¬J°yÓ,KÓLÐLr   zRemove unused inputszEliminate dead codec                ó`   >• U R                  5       (       a  T" X5      (       a  [        X5      $ g r(   )Úeliminate_dead_coderˆ   )rË   rÌ   r¬   r¡   s      €r    rì   Ú%minifier.<locals>.eliminate_dead_code   s,   ø€ ð ×(Ñ(×*Ñ*©{¸9×/OÑ/OÜ˜iÓ2Ð2Ør   c                óJ  ^• [         R                  " 5       n0 mSnU R                   HÂ  nUR                  S:X  a  UR	                  UU4S j5      nUTU'   M0  U(       d‰  [        U5      (       ay  UR                  UR                  5      nUTU'   UR                  [        R                  R                  R                  R                  " UR                  0 UR                  D65        MÀ  SnMÄ     U R                   H&  nUT;  d  M  UR	                  UU4S j5      nUTU'   M(     U$ )NFri   c                ó   >• TU    $ r(   r   rÁ   s    €r    rÄ   Ú=minifier.<locals>._consolidate_placeholders.<locals>.<lambda>´  ó	   ø€ ¸sÀ1ºvr   Tc                ó   >• TU    $ r(   r   rÁ   s    €r    rÄ   rð   Â  rñ   r   )rK   rÇ   rQ   r_   rÉ   rf   ri   r7   rl   r9   ra   rb   rc   rd   rT   rk   )rË   rp   rÎ   Úseen_non_placeholderre   rÐ   rÃ   s         @r    Ú_consolidate_placeholdersÚ+minifier.<locals>._consolidate_placeholders¨  sø   ø€ ô —H’H“Jˆ	ØˆØ$Ðð
 —O”OˆDØ�w‰w˜-Ó'Ø$×.Ñ.¨tÔ5EÓF�Ø$��D“	Þ)Ô.AÀ$×.GÑ.GØ$×0Ñ0°·±Ó;�Ø$��D‘	Ø—‘Ü—I‘I×(Ñ(×4Ñ4×<Ò<¸d¿i¹iÐWÈ4Ï;É;ÑWöð (,Ò$ñ $ð —O”OˆDØ˜3�Ø$×.Ñ.¨tÔ5EÓF�Ø$��D“	ñ $ð Ðr   zDelta Debuggingc                ó(  >• [        U R                  5      n[        SX25       Hì  nSnT" U 5      n[        US S  5      n[	        X4U-   5      n[        XH5       H0  n	[        UR                  5      U	   n
[        XjU5      (       d  M.  SnM2     U(       d  Mq  UR                  5         T" Xg5      nT" [        Xg5      5      nUc  [        Xg5      nT" UR                  UR                  5      (       d  MÌ  [        UR                  UR                  5      s  $    g )Nr   FT)
rO   rQ   rÜ   rm   Úminro   rì   rˆ   rP   rp   )rË   rÌ   r¬   Ú	num_nodesÚstart_rangeÚis_removingrÎ   r°   Ú	end_rangerÏ   rÐ   r­   rô   r›   r¡   rã   s               €€€€r    Údelta_debuggingÚ!minifier.<locals>.delta_debuggingÆ  sð   ø€ ô ˜	Ÿ™Ó(ˆ	Ü   IÖ;ˆKØˆKÙ)¨)Ó4ˆIÜ˜H¡Q˜KÓ(ˆHÜ˜I°[Ñ'@ÓAˆIÜ˜[Ö4�Ü 	§¡Ó0°Ñ5�Ü/°	ÀX×NÓNØ"&’Kñ 5ö ÙØ×)Ñ)Ô+Ù1°)ÓFˆIÙ6´zÀ)Ó7VÓWˆIØÑ Ü& yÓ;�	Ù˜9Ÿ?™?¨I¯N©N×;Ó;Ü! )§/¡/°9·>±>ÓBÒBñ# <ð& r   zConsolidate Inputsc                ó–   >• [        U5      n[        US S  5      nT" X5      n [        U5      U:”  a  T" X5      (       a  [        X5      $ g r(   )rO   rm   rˆ   )rË   rÌ   r¬   Úold_lenr°   rô   r¡   s        €€r    Úconsolidate_inputsÚ$minifier.<locals>.consolidate_inputsà  sJ   ø€ ô �h“-ˆÜ˜¡˜Ó$ˆÙ-¨iÓBˆ	Üˆx‹=˜7Ó"¡{°9×'GÑ'GÜ˜iÓ2Ð2Ør   c                ó2  >• [        SU 3[        R                  S9  / n[        U R                  R
                  5      n[        [        U R                  5      5      nXTS-  :”  a  UT/-  nU(       a  UT
TT/-  nUTT	/-  nU H  nU" X5      nUc  M  Us  $    g )NzTrying granularity r¤   rÆ   )r   r¨   r©   rO   rP   rQ   r   )Úfailing_stater¬   Úuse_non_granularÚ
strategiesrø   Únum_outputsrµ   r­   r   rü   rì   rß   rÒ   Úremove_unused_inputss           €€€€€€r    Útry_granularityÚ!minifier.<locals>.try_granularityí  s³   ø€ ô 	Ð# K =Ð1¼¿
¹
ÒCàˆ
Ü˜×+Ñ+×1Ñ1Ó2ˆ	Üœ+ m×&9Ñ&9Ó:Ó;ˆØ a™Ó'Ø˜>Ð*Ñ*ˆJæØØ#Ø$Ø"ðñ ˆJð 	�} oÐ6Ñ6ˆ
ã"ˆHÙ  Ó<ˆIØÓ$Ø Ò ñ #ð r   TrÆ   )r  Fr   z9Uh oh, something went wrong :( Final graph is not failingzMade z queriesÚXLA_HLO_DEBUGz#Wrote minimal repro out to repro.py)r™   rŠ   rY   rŠ   )rP   rŠ   rp   r‹   rY   rX   )rµ   zDCallable[[fx.Graph, Sequence[torch.Tensor], int], ReproState | None]r7   ÚstrrY   z.Callable[[ReproState, int], ReproState | None])r7   r  rY   z€Callable[[Callable[[fx.Graph, Sequence[torch.Tensor], int], ReproState | None]], Callable[[ReproState, int], ReproState | None]])rË   rŠ   rÌ   r‹   r¬   r¸   rY   r¹   )râ   rˆ   rY   r¹   )rË   rŠ   rp   úlist[torch.Tensor]rY   rŠ   )r  rˆ   r¬   r¸   r  rX   rY   r¹   )rP   rO   rQ   r†   rª   rM   r   r"   rU   r   r¨   r©   rˆ   rK   rL   rp   r¸   ÚmathÚfloorÚlog2r÷   r>   Úenvironr|   )!rš   rp   rŸ   r„   r‘   r’   r&   r“   r”   Úfailing_graphÚcur_sizer%   r½   ré   r  r  r¬   r­   Úhas_progressÚ
failing_fxrô   rº   r   r›   rü   rì   r¡   r    rß   rÒ   r  ræ   rã   s!   ` `                 @@@@@@@@@@@@@r    Úminifierr  Ã   sj  ÿþ€ ð6 —L‘L€MÜ�=×&Ñ&Ó'€HàÑ"¬?¸?×+KÑ+KÜÐ-¨oÐ->Ð>OÐPÓQÐQà€K÷E÷'ñ 'ð €FÞØÑÜ Ð!VÓWÐWÜ# HÓ-ˆä� ÑB×LÒLÈdÑSÞ™{¨=×?Ñ?ÜÐ@ÓAÐAÜ	Ð˜h˜Z vÐ
.´S·Z±ZÒ@ð8ØVð8àð8ð 
8÷8ð 8ðt6Øð6ð
÷6ñ Ð(Ó)ðØðØ'=ðØLOðà	öó *ðñ4 Ð'Ó(ð"Øð"Ø'=ð"ØLOð"à	ö"ó )ð"ôH÷&ð ðMØðMØ'=ðMØLOðMà	÷Mñ
 -Ð-CÔDØóÐñ Ð,Ó-ðØðØ'=ðØLOðà	öó .ððØðØ#5ðà	ôñ< Ð(Ó)ðØðØ'=ðØLOðà	÷ñ ó *ðñ2 Ð+Ó,ðØðØ'=ðØLOðà	÷ó -ðô ˜}Ó3€MðØ!ðØ03ðØGKðà	÷ô ð4 Ù”2—>’> &¨-×*=Ñ*=Ó>À×@RÑ@RÔSÜ˜!¤§
¢
¬4¯9ª9´S¸×9LÑ9L×9RÑ9RÓ5SÓ+TÓ UÑVÓWˆØÑ&Ü˜o¨{Ó;ˆKÙ# M°;ÐQUÑVˆ	ØÑ Ø%ˆMÙà˜ÑˆØˆØ˜QÓÙ'Ø˜{¸UñˆIð Ñ$Ø )�Ø#�ØØ˜AÑˆKð ˜QÕö Ùá" =°!Ó4ˆ	ØÑ Ø%ˆMÙàá�}×*Ñ*¨M×,>Ñ,>×?Ñ?ÜÐVÓWÐWä	ˆE�+�˜hÐ
'¬c¯j©jÒ9Ü—’ ¨×(;Ñ(;Ó<€Jð œ"Ÿ*™*Ó$Ü! *¨m×.@Ñ.@ÔAáˆz˜=×-Ñ-Ô.Ü	Ð
/´c·j±jÒAØ�}×)Ñ)Ð)Ð)r   )re   r[   rY   rX   )rP   rŠ   re   r[   rp   r  rY   rX   )ry   rW   rz   r‹   rY   rZ   )r‚   rW   rp   r‹   rY   rZ   )rC   r¸   rY   rX   )rš   rW   rp   r‹   rŸ   z8Callable[[fx.GraphModule, Sequence[torch.Tensor]], bool]r„   z8Callable[[fx.GraphModule, Sequence[torch.Tensor]], None]r‘   z
str | Noner’   rX   r&   rX   r“   rX   r”   z
int | NonerY   z-tuple[fx.GraphModule, Sequence[torch.Tensor]]))Ú
__future__r   r—   r  r>   r¨   Údataclassesr   Ú	functoolsr   r   Útypingr   r   r9   Útorch.fxrK   Ú	torch.hubr	   Ú torch.multiprocessing.reductionsr
   Útorch.utils._content_storer   Úcompile_utilsr   r   Úcollections.abcr   r   ÚobjectrB   r   ÚInterpreterr"   rf   ro   r|   r„   r†   rˆ   r  r   r   r    Ú<module>r"     so  ðÝ "ã Û Û 	Û 
Ý !ß $ß %ã Ý Ý Ý ;Ý 9ç 8ö ß2ñ ‹8€ð ÷ð ó ðô6�5—8‘8×'Ñ'ô 6ôrð/Øð/Ø"ð/Ø*<ð/à	ô/ðdFØ%ðFØ/EðFà	ôFôôð ÷	ð 	ó ð	ð  LVð	o*ð  Ø!ØØØ"&ño*Øðo*à
 ðo*ð Kðo*ð Ið	o*ð ðo*ð ðo*ð ðo*ð ðo*ð  ðo*ð 3÷o*r   