Ë
    ÃÓ^j¤N  ã                  óÄ  — d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d	d
lmZmZ erd dlmZmZ  e«       Ze G d„ d«      «       Z G d„ dej                   j@                  «      Z!dd„Z"	 	 	 	 	 	 	 	 dd„Z#	 	 	 	 	 	 dd„Z$dd„Z%dd„Z&e G d„ d«      «       Z'e%fddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z(y) é    )ÚannotationsN)Ú	dataclass)ÚpartialÚwraps)ÚAnyÚTYPE_CHECKING)Útqdm)ÚStorageWeakRef)ÚContentStoreWriteré   )Úget_outputsÚget_placeholders)ÚCallableÚSequencec                  ó6   — e Zd ZU ded<   ded<   ded<   ded<   y)	ÚLoadTensorMetaztuple[int, ...]ÚsizeÚstrideztorch.dtypeÚdtypeztorch.deviceÚdeviceN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úg/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_functorch/fx_minifier.pyr   r      s   … à
ÓØÓØÓØÔr   r   c                  óN   ‡ — e Zd Zdddœ	 	 	 	 	 	 	 dˆ fd„Zdˆ fd„Zd	ˆ fd„Zˆ xZS )
ÚConcretePropNF©ÚwriterÚskip_offloadc               ól   •— t         ‰| �  |«       || _        || _        t	        «       | _        d | _        y ©N)ÚsuperÚ__init__r!   r"   ÚsetÚseen_storagesÚpbar)ÚselfÚmodr!   r"   Ú	__class__s       €r   r&   zConcreteProp.__init__$   s2   ø€ ô 	‰Ñ˜ÔØˆŒØ(ˆÔÜ25³%ˆÔØˆ�	r   c                ó   •— | j                   j                  d«       t        ‰| �  |«      }|j                  }t        |t        j                  «      �r| j                  €||j                  d<   |S t        |j                  «       «      | j                  v rd |j                  d<   |S | j                  s:| j                  j                  t        j                   j#                  d|«      |«       t%        |j'                  «       |j)                  «       |j*                  |j,                  «      |j                  d<   | j                  j/                  t        |j                  «       «      «       |S t0        |j                  d<   |S )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Úrr2   r,   s       €r   r1   zConcreteProp.run_node1   s1  ø€ Ø�	‰	×Ñ˜ÔÜ‰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                ó|  •— | j                   }t        |t        j                  «      st	        dt        |«      › �«      ‚t        dt        |j                  j                  «      | j                  d u ¬«      5 }|| _        t        ‰| �4  |Ž }| j                  s|j                  d«       |cd d d «       S # 1 sw Y   y xY w)Nzexpected fx.GraphModule, got z(Saving intermediates for delta debugging)ÚdescÚtotalÚdisablezESaved!  To skip next time, run with --skip-saving-eager-intermediates)Úmoduler3   ÚfxÚGraphModuleÚAssertionErrorÚtyper	   ÚlenÚgraphÚnodesr!   r)   r%   Úrunr"   Úset_description)r*   Úargsr+   r)   r?   r,   s        €r   Ú	propagatezConcreteProp.propagateJ   s¦   ø€ Ø�k‰kˆÜ˜#œrŸ~™~Ô.Ü Ð#@ÄÀcÃÀÐ!LÓMÐMÜØ;Ü�c—i‘i—o‘oÓ&Ø—K‘K 4Ð'ô
ð 	ð ØˆDŒIÜ‘‘˜TÐ"ˆAØ×$Ò$Ø×$Ñ$Ø[ôð ÷	÷ 	ò 	ús   Á62B2Â2B;)r+   úfx.GraphModuler!   zContentStoreWriter | Noner"   ÚboolÚreturnÚNone)r>   úfx.NoderR   r   )rN   r   rR   r   )r   r   r   r&   r1   rO   Ú__classcell__)r,   s   @r   r   r   #   sE   ø„ ð
 -1Ø"ñàðð *ð	ð
 ðð 
õõ÷2ñ r   r   c                ó˜   — | j                   dk(  xr: | j                  t        j                  j                  j
                  j                  u S )NÚcall_function)ÚopÚtargetr4   ÚopsÚ
debugprimsÚload_tensorÚdefault)Únodes    r   Úis_load_tensor_noder_   \   s;   € à�‰�?Ñ"ò 	DØ�K‰Kœ5Ÿ9™9×/Ñ/×;Ñ;×CÑCÐCðr   c                ó  — |j                   dk(  s|j                   dk(  ryt        |«      ry|j                  j                  dd «      }t	        |t
        j                  «      r8d|_         |j                  |_        d|_	        i |_
        |j                  |«       y|€y|t        u r/d}t        |j                  «      D ]  }t        | ||«      xs |}Œ |S t	        |t         «      rŸd|_         t
        j"                  j$                  j&                  j(                  |_        t*        j,                  j/                  d|j                  «      |j0                  |j2                  f|_	        |j4                  |j6                  d	œ|_
        yy)
NÚoutputÚplaceholderFr.   r   TrW   r/   )r   r   )rX   r_   r6   Úgetr3   r4   r5   r2   rY   rN   ÚkwargsÚappendr=   ÚlistÚusersÚ_convert_node_to_placeholderr   rZ   r[   r\   r]   r9   r:   r;   r   r   r   r   )rJ   r^   ÚinpsÚconcrete_valr?   Ú
tuple_users         r   rh   rh   d   sI  € ð ‡w�w�(Ò˜dŸg™g¨Ò6Øä˜4Ô Øà—9‘9—=‘=Ð!1°4Ó8€Lä�,¤§¡Ô-ØˆŒØ—i‘iˆŒØˆŒ	ØˆŒà�‰�LÔ!Øà	Ð	Øà	œÑ	!ØˆÜ˜tŸz™zÓ*ò 	KˆJÜ,¨U°JÀÓEÒJÈ‰Að	Kð ˆä	�L¤.Ô	1Ø!ˆŒÜ—i‘i×*Ñ*×6Ñ6×>Ñ>ˆŒä�G‰G�L‰L˜ $§)¡)Ó,Ø×ÑØ×Ñð
ˆŒ	ð #×)Ñ)Ø!×'Ñ'ñ
ˆŒð àr   c                ó€   — t        j                  «       › d�}t        j                  |d¬«       ddlm}  || ||«       y)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)r9   ÚgetcwdÚmakedirsÚtorch_xla.stablehlorn   )Úminified_fx_graphÚinputsÚhlo_dirrn   s       r   Úcreate_minified_hlo_graphru   –   s4   € ô —‘“�˜ZÐ(€GÜ‡K�K� $Õ'åAá!Ð"3°V¸WÕEr   c                óø   — t        dt        | j                  j                  «      › d|D �cg c]/  }|j                  |j
                  |j                  j                  f‘Œ1 c}› d| j                  › d�«       y c c}w )Nz
# Working Repro with z nodes
inps = zo
inps = [torch.zeros(())] + [torch.ones(shape, dtype=dtype, device=device) for (shape, dtype, device) in inps]
ú
)	ÚprintrI   rJ   rK   Úshaper   r   rH   Úcode)Úfx_gri   Úis      r   Ú
dump_stater}   ¥   sn   € Ü	ðÜ˜$Ÿ*™*×*Ñ*Ó+Ð,ð -Ø48Ö9¨qˆ!�'‰'�1—7‘7˜AŸH™HŸM™MÒ	*Ò9Ð:ð ;à‡�€ð ð		õùò 	:s   «4A7c                ó$   — | dk(  ry| | dz
  z  dk(  S )Nr   Fr   r   )r>   s    r   Úis_power_of_twor   °   s   € ØˆA‚vØØ��Q‘‰K˜AÑÐr   c                  ó*   — e Zd ZU ded<   ded<   dd„Zy)Ú
ReproStateúfx.GraphrJ   úSequence[torch.Tensor]ri   c                óÊ   — t        | j                  «      }t        |«      t        | j                  «      k7  r-t	        dt        |«      › dt        | j                  «      › �«      ‚y )Núlen(ph_nodes)=z != len(self.inps)=)r   rJ   rI   ri   rG   )r*   Úph_nodess     r   Ú__post_init__zReproState.__post_init__»   sT   € Ü# D§J¡JÓ/ˆÜˆx‹=œC §	¡	›NÒ*Ü Ø ¤ X£ Ð/BÄ3ÀtÇyÁyÃ>ÐBRÐSóð ð +r   N)rR   rS   )r   r   r   r   r‡   r   r   r   r�   r�   ¶   s   … àƒOØ
 Ó ôr   r�   F)Úsave_dirÚoffload_to_diskr"   Úskip_sanityÚmax_granularityc          
     ó°  ‡ ‡‡‡‡‡‡‡‡‡‡‡‡‡‡ — ‰ j                   }	t        |	j                  «      }
|�t        |«      st	        d|› d�«      ‚dŠd)ˆ fd„Šd*ˆ ˆˆfd„Šd}|r|€t        d«      ‚t        |«      } t        ‰ ||¬«      j                  |Ž  |s ‰|	|«      st	        d	«      ‚t        d
|
› d�t        j                  ¬«       	 	 	 	 	 	 d+ˆˆfd„Š	 	 	 	 d,ˆfd„} |d«      	 	 	 	 	 	 	 	 d-ˆfd„«       Š |d«      	 	 	 	 	 	 	 	 d-ˆfd„«       Šd.d„Š d.ˆˆ fd„Š	 	 	 	 	 	 	 	 d-ˆfd„}  |d«      |«      Š |d«      	 	 	 	 	 	 	 	 d-ˆfd„«       Š	 	 	 	 	 	 d/d„Š |d«      	 	 	 	 	 	 	 	 d-ˆˆˆˆ fd„«       Š |d«      	 	 	 	 	 	 	 	 d-ˆˆfd„«       Št        |	|«      }	 	 	 	 	 	 	 	 d0ˆˆˆˆˆˆfd„}	  |t        j                  ‰ |j                   «      |j                  «       t!        d t#        j$                  t#        j&                  t        |j                   j                  «      «      «      z  «      }|�t)        ||«      } |||d¬!«      }|�|}Œ¡|d z  }d"}|d#k\  r |||d"¬!«      }|�|}d}n|d z  }|d#k\  rŒ|rŒÍ ‰|d#«      }|�|}ŒÛ	  ‰|j                   |j                  «      st	        d$«      ‚t        d%‰› d&�t        j                  ¬«       t        j                  ‰ |j                   «      }d't*        j,                  v rt/        ||j                  «        |||j                  «       t        d(t        j                  ¬«       ||j                  fS )1aF  
    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                ój   •— t        j                  ‰t        j                  | «      «      j                  S r$   )rE   rF   ÚcopyÚdeepcopyrJ   )Úfx_graphÚfail_fs    €r   Údeepcopy_fx_graphz#minifier.<locals>.deepcopy_fx_graphæ   s#   ø€ Ü�~‰~˜f¤d§m¡m°HÓ&=Ó>×DÑDÐDr   c                óª   •— t        j                  | «      } ‰dz  Št        j                  ‰| «      }|j                  j                  «         ‰||«      S )Nr   )rŽ   r�   rE   rF   rJ   Úlint)rJ   ri   r+   r‘   Úmodule_failsÚnum_queriess      €€€r   Úgraph_failszminifier.<locals>.graph_failsé   sF   ø€ ä—‘˜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                ó<   •‡ ‡— t        ‰ «      ddˆˆˆˆ fd„«       }|S )Nc                óX  •— t        t        j                  ¬«       t        d‰› d|› dt        | j                  j
                  «      › dt        | j                  «      › d�	t        j                  ¬«        ‰ ‰
| j                  «      t        | j                  «      |«      }|��it        |j                  j
                  «      }t        | j                  j
                  «      }t        |j                  «      }t        | j                  «      }t        t        |j                  «      «      }t        t        | j                  «      «      }d}	||k  r$d}	t        d	|› d
|› d�t        j                  ¬«       ||kD  r$d}	t        d	|› d
|› d�t        j                  ¬«       ||k  r$d}	t        d	|› d
|› d�t        j                  ¬«       |	st        d«      ‚ ‰|j                  |j                  «      st        dt        j                  ¬«       y |S t        d‰› �t        j                  ¬«       y )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: )
rx   ÚsysÚstderrrI   rJ   rK   ri   rf   r   ÚRuntimeError)Ú	old_stateÚgranularityÚ	new_stateÚ	new_nodesÚ	old_nodesÚnew_inpsÚold_inpsÚnew_outsÚold_outsÚprogress_mader’   r—   r2   Ústrategys             €€€€r   Únew_funcz6minifier.<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¯?©?Ó;Ó<�Ø %�Ø˜yÒ(Ø$(�MÜØ-¨i¨[¸¸Y¸KÀvÐNÜ ŸZ™Zõð ˜hÒ&Ø$(�MÜØ-¨h¨Z°t¸H¸:ÀWÐMÜ ŸZ™Zõð ˜hÒ&Ø$(�MÜØ-¨h¨Z°t¸H¸:ÀXÐNÜ ŸZ™Zõñ
 %Ü&Ð'MÓNÐNá" 9§?¡?°I·N±NÔCÜØWÜ ŸZ™Zõð  Ø Ð ä˜˜t˜f�o¬C¯J©JÕ7Ør   )r   )r    r�   r¡   ÚintrR   úReproState | None)r   )rª   r2   r«   r’   r—   s   `` €€r   Ú_register_strategyz$minifier.<locals>._register_strategyü   s(   ú€ ô 
ˆx‹÷1	ð 1	ó 
ð1	ðf ˆr   c                ó   •— t        ‰| ¬«      S )N)r2   )r   )r2   r®   s    €r   Úregister_strategyz#minifier.<locals>.register_strategy6  s   ø€ ô Ð)°Ô5Ð5r   zTruncate suffixc                óì  •‡	— t        «       }t        j                  «       }i Š	t        | j                  «      D ]º  \  }}|j                  |ˆ	fd„«      }|j                  dvr�||z  dk(  r…||dz  z  dk7  rz||vrv|j                  |f«      }t        |j                  «      t        | j                  «      k  r ‰
||«      rt        ||«      c S |j                  |«       |j                  |«       |‰	|<   Œ¼ y )Nc                ó   •— ‰|    S r$   r   ©ÚxÚenvs    €r   ú<lambda>z1minifier.<locals>.remove_suffix.<locals>.<lambda>F  s   ø€ ¸3¸q¹6€ r   )rb   ra   r   é   )r'   rE   ÚGraphÚ	enumeraterK   Ú	node_copyrX   ra   rI   r�   r<   Ú
erase_node)Ú	cur_graphÚcur_inpsr¡   ÚtestedÚ	new_graphÚidxr^   Únew_nodeÚoutput_noderµ   r—   s            @€r   Úremove_suffixz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Ø 6Ñ)à"+×"2Ñ"2°H°;Ó"?�KÜ˜9Ÿ?™?Ó+¬c°)·/±/Ó.BÒBÁ{Ø! 8ôHô  *¨)°XÓ>Ò>àŸ
™
 3œØ!×,Ñ,¨[Ô9Ø ˆC�ŠIð#	!ð$ r   zRemove outputsc                ó*  •— t        d|dz  «      }d }t        | j                  «      D ]  \  }}||_        |j                  dk(  sŒ|} n |€y t        |j                  d   t        j                  «      ry |j                  d   }t        |t        t        f«      st        dt        |«      › �«      ‚t        |d„ ¬«      }t        |«      dk(  ry t        dt        |«      |«      D ]-  }|d | |||z   d  z   f|_         ‰| |«      sŒ!t!        | |«      c S  y )Nr   r·   ra   r   z2expected output_args_raw to be list or tuple, got c                ód   — t        | t        j                  «      r| j                  S t	        d«      S )Ng    eÍÍA)r3   rE   ÚNoderÀ   r¬   )r´   s    r   r¶   z2minifier.<locals>.remove_outputs.<locals>.<lambda>s  s   € ¤:¨a´·±Ô#9˜!Ÿ%™%€ ¼sÀ3»x€ r   )Úkey)Úmaxr¹   rK   rÀ   rX   r3   rN   rE   rÆ   rf   ÚtuplerG   rH   ÚsortedrI   Úranger�   )	r¼   r½   r¡   ra   rÀ   r^   Úoutput_args_rawÚoutput_argsr—   s	           €r   Úremove_outputsz minifier.<locals>.remove_outputsY  s/  ø€ ô ˜!˜[¨AÑ-Ó.ˆØ!%ˆÜ" 9§?¡?Ó3ò 	‰IˆC�ØˆDŒHØ�w‰w˜(Ó"Ø�Ùð		ð ˆ>Øä�f—k‘k !‘n¤b§g¡gÔ.Øð !Ÿ+™+ a™.ˆÜ˜/¬D´%¨=Ô9Ü ØDÄTÈ/ÓEZÐD[Ð\óð ô ØÙGô
ˆô ˆ{Ó˜qÒ Øä˜œC Ó,¨kÓ:ò 	7ˆCØ& t¨Ð,¨{¸3ÀÑ;LÐ;NÐ/OÑOÐQˆFŒKÙ˜9 hÕ/Ü! )¨XÓ6Ò6ð	7ð r   c                óÔ  — | j                   }| j                  }t        t        |«      «      }t	        |«      t	        |«      k7  r#t        dt	        |«      › dt	        |«      › �«      ‚g }t        t	        |«      «      D ]F  }t	        ||   j                  «      dk(  r|j                  ||   «       Œ3|j                  ||   «       ŒH t	        |«      t	        |«      k  rt        ||«      S y )Nr…   z != len(cur_inps)=r   )rJ   ri   rf   r   rI   rG   rË   rg   r»   re   r�   )Ú	cur_stater¼   r½   r†   r¥   rÀ   s         r   Úremove_unused_inputs_uncheckedz0minifier.<locals>.remove_unused_inputs_unchecked~  sÔ   € Ø—O‘Oˆ	Ø—>‘>ˆÜÔ(¨Ó3Ó4ˆÜˆx‹=œC ›MÒ)Ü Ø ¤ X£ Ð/AÄ#ÀhÃ-ÀÐQóð ð (*ˆÜœ˜X›Ó'ò 	/ˆCÜ�8˜C‘=×&Ñ&Ó'¨1Ò,Ø×$Ñ$ X¨c¡]Õ3à—‘ ¨¡Õ.ð		/ô
 ˆx‹=œ3˜x›=Ò(Ü˜i¨Ó2Ð2Ør   c                óX   •—  ‰| «      }|� ‰|j                   |j                  «      r|S y r$   )rJ   ri   )rÐ   r¢   r—   rÑ   s     €€r   Úremove_unused_inputs_checkedz.minifier.<locals>.remove_unused_inputs_checked‘  s-   ø€ Ù2°9Ó=ˆ	ØÐ ¡[°·±À)Ç.Á.Ô%QØÐØr   c                ó(   •—  ‰t        | |«      «      S r$   )r�   )r¼   r½   r¡   rÓ   s      €r   Ú_remove_unused_wrapperz(minifier.<locals>._remove_unused_wrapper—  s   ø€ ñ ,¬J°yÀ(Ó,KÓLÐLr   zRemove unused inputszEliminate dead codec                óP   •— | j                  «       r ‰| |«      rt        | |«      S y r$   )Úeliminate_dead_coder�   )r¼   r½   r¡   r—   s      €r   r×   z%minifier.<locals>.eliminate_dead_code   s*   ø€ ð ×(Ñ(Ô*©{¸9ÀhÔ/OÜ˜i¨Ó2Ð2Ør   c                ó  ‡— t        j                  «       }i Šd}| j                  D ]²  }|j                  dk(  r|j	                  |ˆfd„«      }|‰|<   Œ-|s‚t        |«      rw|j                  |j                  «      }|‰|<   |j                  t        j                  j                  j                  j                  |j                  i |j                  ¤Ž«       Œ±d}Œ´ | j                  D ]!  }|‰vsŒ|j	                  |ˆfd„«      }|‰|<   Œ# |S )NFrb   c                ó   •— ‰|    S r$   r   r³   s    €r   r¶   z=minifier.<locals>._consolidate_placeholders.<locals>.<lambda>´  ó   ø€ ¸sÀ1¹v€ r   Tc                ó   •— ‰|    S r$   r   r³   s    €r   r¶   z=minifier.<locals>._consolidate_placeholders.<locals>.<lambda>Â  rÚ   r   )rE   r¸   rK   rX   rº   r_   rb   r2   re   r4   rZ   r[   r\   r]   rN   rd   )r¼   ri   r¿   Úseen_non_placeholderr^   rÁ   rµ   s         @r   Ú_consolidate_placeholdersz+minifier.<locals>._consolidate_placeholders¨  sÿ   ø€ ô —H‘H“Jˆ	ØˆØ$Ðð
 —O‘Oò 	,ˆDØ�w‰w˜-Ò'Ø$×.Ñ.¨tÓ5EÓF�Ø$��D’	Ù)Ô.AÀ$Ô.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                ó
  •— t        | j                  «      }t        d||«      D ]Ý  }d} ‰| «      }t        |d d  «      }t	        |||z   «      }t        ||«      D ]*  }	t        |j                  «      |	   }
t        ||
|«      sŒ)d}Œ, |sŒf|j                  «         ‰||«      } ‰t        ||«      «      }|€t        ||«      } ‰|j                  |j                  «      sŒ½t        |j                  |j                  «      c S  y )Nr   FT)
rI   rK   rË   rf   Úminrh   r×   r�   rJ   ri   )r¼   r½   r¡   Ú	num_nodesÚstart_rangeÚis_removingr¿   r¥   Ú	end_rangerÀ   rÁ   r¢   rÝ   r’   r—   rÑ   s               €€€€r   Údelta_debuggingz!minifier.<locals>.delta_debuggingÆ  s  ø€ ô ˜	Ÿ™Ó(ˆ	Ü   I¨{Ó;ò 	CˆKØˆKÙ)¨)Ó4ˆIÜ˜H¡Q˜KÓ(ˆHÜ˜I {°[Ñ'@ÓAˆIÜ˜[¨)Ó4ò '�Ü 	§¡Ó0°Ñ5�Ü/°	¸8ÀXÕNØ"&‘Kð'ñ ØØ×)Ñ)Ô+Ù1°)¸XÓFˆIÙ6´zÀ)ÈXÓ7VÓWˆIØÐ Ü& y°(Ó;�	Ù˜9Ÿ?™?¨I¯N©NÕ;Ü! )§/¡/°9·>±>ÓBÒBð#	Cð& r   zConsolidate Inputsc                ó�   •— t        |«      }t        |d d  «      } ‰| |«      } t        |«      |kD  r ‰| |«      rt        | |«      S y r$   )rI   rf   r�   )r¼   r½   r¡   Úold_lenr¥   rÝ   r—   s        €€r   Úconsolidate_inputsz$minifier.<locals>.consolidate_inputsà  sM   ø€ ô �h“-ˆÜ˜¡˜Ó$ˆÙ-¨i¸ÓBˆ	Üˆx‹=˜7Ò"¡{°9¸hÔ'GÜ˜i¨Ó2Ð2Ør   c                ó*  •— t        d|› �t        j                  ¬«       g }t        | j                  j
                  «      }t        t        | j                  «      «      }||dz  kD  r|‰gz  }|r|‰
‰‰gz  }|‰‰	gz  }|D ]  } || |«      }|€Œ|c S  y )NzTrying granularity r™   r·   )rx   r�   rž   rI   rJ   rK   r   )Úfailing_stater¡   Úuse_non_granularÚ
strategiesrà   Únum_outputsrª   r¢   rç   rä   r×   rÎ   rÃ   Úremove_unused_inputss           €€€€€€r   Útry_granularityz!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‚   rR   r‚   )rJ   r‚   ri   rƒ   rR   rQ   )rª   zDCallable[[fx.Graph, Sequence[torch.Tensor], int], ReproState | None]r2   ÚstrrR   z.Callable[[ReproState, int], ReproState | None])r2   rð   rR   z€Callable[[Callable[[fx.Graph, Sequence[torch.Tensor], int], ReproState | None]], Callable[[ReproState, int], ReproState | None]])r¼   r‚   r½   rƒ   r¡   r¬   rR   r­   )rÐ   r�   rR   r­   )r¼   r‚   ri   úlist[torch.Tensor]rR   r‚   )ré   r�   r¡   r¬   rê   rQ   rR   r­   )rJ   rI   rK   r   rŸ   rG   r   r   rO   rx   r�   rž   r�   rE   rF   ri   r¬   ÚmathÚfloorÚlog2rß   r9   Úenvironru   )!r‘   ri   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ú   Ã   sY  ÿþ€ ð6 —L‘L€MÜ�=×&Ñ&Ó'€HàÐ"¬?¸?Ô+KÜÐ-¨oÐ->Ð>OÐPÓQÐQà€KõE÷'ð €FÙØÐÜ Ð!VÓWÐWÜ# HÓ-ˆàL„L� °\ÔB×LÑLÈdÑSÙ™{¨=¸$Ô?ÜÐ@ÓAÐAÜ	Ð˜h˜Z vÐ
.´S·Z±ZÕ@ð8ØVð8àð8ð 
8ö8ðt6Øð6ð
õ6ñ Ð(Ó)ðØðØ'=ðØLOðà	ôó *ðñ4 Ð'Ó(ð"Øð"Ø'=ð"ØLOð"à	ô"ó )ð"óHö&ðMØðMØ'=ðMØLOðMà	õMð
 EÑ,Ð-CÓDØóÐñ Ð,Ó-ðØðØ'=ðØLOðà	ôó .ððØðØ#5ðà	óñ< Ð(Ó)ðØðØ'=ðØLOðà	÷ó *ðñ2 Ð+Ó,ðØðØ'=ðØLOðà	õó -ðô ˜}¨dÓ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   )r^   rT   rR   rQ   )rJ   r‚   r^   rT   ri   rñ   rR   rQ   )rr   rP   rs   rƒ   rR   rS   )r{   rP   ri   rƒ   rR   rS   )r>   r¬   rR   rQ   )r‘   rP   ri   rƒ   r•   z8Callable[[fx.GraphModule, Sequence[torch.Tensor]], bool]r}   z8Callable[[fx.GraphModule, Sequence[torch.Tensor]], None]rˆ   z
str | Noner‰   rQ   r"   rQ   rŠ   rQ   r‹   z
int | NonerR   z-tuple[fx.GraphModule, Sequence[torch.Tensor]]))Ú
__future__r   rŽ   rò   r9   r�   Údataclassesr   Ú	functoolsr   r   Útypingr   r   r4   Útorch.fxrE   Ú	torch.hubr	   Ú torch.multiprocessing.reductionsr
   Útorch.utils._content_storer   Úcompile_utilsr   r   Úcollections.abcr   r   Úobjectr=   r   ÚInterpreterr   r_   rh   ru   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   