ó
    Eñi!  ã                  ó\  • S SK Jr  S SKrS SKJrJr  S SK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  \(       a  S SKJr  S S	KJr  S S
KJr  \R0                  R2                  rSS jr\R6                  \R8                  \R:                  \R<                  \R>                  \R@                  \RB                  \RD                  \RF                  \RH                  \RJ                  \RL                  \RN                  \RP                  \RR                  /r*SS jr+SS jr,SS jr-SS jr.SS jr/g)é    )ÚannotationsN)ÚAnyÚTYPE_CHECKING)Úfree_unbacked_symbols)ÚStorageWeakRef)Ú_pytree)Útree_flatten)ÚCallable)ÚOpOverloadPacket)ÚTreeSpecc                ó|   • [        U R                  S5      (       a  U R                  R                  $ U R                  $ )NÚoverloadpacket)ÚhasattrÚtargetr   ©Únodes    Ú[/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_functorch/compile_utils.pyÚget_aten_targetr      s.   € Üˆt�{‰{Ð,×-Ñ-Ø�{‰{×)Ñ)Ð)Ø�;‰;Ðó    c                óþ  ^• [         R                  " 5       n0 m0 n0 nSSKJnJn  U" U 5        [        U R                  5      S   nUR                  S:w  a  [        SUR                   S35      eSS jnUR                   Vs1 s H8  nU" U5      (       d  M  [        UR                  S   R                  5       5      iM:     n	nU R                   Vs1 s H@  nU" U5      (       d  M  [        UR                  S   R                  5       5      U	;   d  M>  UiMB     n
nU R                   GHÉ  nUR                  S	:X  d­  UR                  S:X  d�  UR                  S
:X  d�  [        U5      [        ;   dz  [        U5      [        R                   L d^  XŠ;   dY  SUR                  ;   af  [#        UR                  S   [$        R&                  5      (       a:  [)        UR                  S   5      (       a  UR+                  UU4S j5      nUTU'   MÞ      SU4S jjnU" UR,                  5      u  pÞU" UR.                  5      u  nnUR0                  UUUUS.n[3        [5        S U 5       5      [5        S U 5       5      45      nUR0                  U4nUU;   nSnU(       a&  UU   U:X  a  UU   nU" UU5      (       a  UTU'   GM’  SnUR+                  UU4S j5      nUTU'   U(       d
  U(       a  GMÀ  X²U'   UUU'   GMÌ     U$ s  snf s  snf )Nr   )Úcompute_mutation_region_idsÚsame_mutation_regionséÿÿÿÿÚoutputz-expected output_node.op to be 'output', got 'Ú'c                óÚ   • SU R                   ;  d,  [        U R                   S   [        R                  5      (       d  g U R                   S   R	                  5         g! [
         a     gf = f)zGWe can evaluate only nodes that represent tensors with defined storage.ÚvalFT)ÚmetaÚ
isinstanceÚtorchÚTensorÚuntyped_storageÚNotImplementedErrorr   s    r   Úcheckable_nodeÚ$fx_graph_cse.<locals>.checkable_nodeM   s]   € à˜Ÿ	™	Ó!¬°D·I±I¸eÑ4DÄeÇlÁl×)SÑ)SØð	Ø�I‰I�eÑ×,Ñ,Ô.ð øô #ó 	Ùð	ús   ¿A Á
A*Á)A*r   ÚplaceholderÚget_attrc                ó   >• TU    $ ©N© ©ÚxÚenvs    €r   Ú<lambda>Úfx_graph_cse.<locals>.<lambda>�   ó	   ø€ ¸¸Aºr   c                ó’  >• [        U 5      u  p[        [        U 5      5       H•  nX   n[        U[        R
                  R                  R                  5      (       a  UT;   a  TU   X'   [        U[        R                  [        R                  [        R                  45      (       d  M‡  UR                  X'   M—     [        U 5      U4$ r)   )r	   ÚrangeÚlenr   r    Úfxr   ÚNodeÚSymBoolÚSymIntÚSymFloatÚtuple)Úarg_listÚspecÚiÚvr-   s       €r   Ú
substituteÚ fx_graph_cse.<locals>.substitute†   s“   ø€ ô ".¨hÓ!7‘�Üœs 8›}Ö-�AØ ™�AÜ! !¤U§X¡X§]¡]×%7Ñ%7×8Ñ8¸QÀ#»XØ&)¨!¡f˜™Ü! !¤e§m¡m´U·\±\Ä5Ç>Á>Ð%R×SÓSØ&'§f¡f˜›ñ .ô ˜X“¨Ð,Ð,r   )r   ÚargsÚ	args_specÚkwargsÚkwargs_specc              3  ó:   #   • U  H  o[        U5      4v •  M     g 7fr)   ©Útype©Ú.0Úas     r   Ú	<genexpr>Úfx_graph_cse.<locals>.<genexpr>£   s   é € Ð2ªT¨œ4 ›7•|ªTùó   ‚c              3  ó:   #   • U  H  o[        U5      4v •  M     g 7fr)   rE   rG   s     r   rJ   rK   £   s   é € Ð9WÒPVÈ1¼dÀ1»g½,ÒPVùrL   FTc                ó   >• TU    $ r)   r*   r+   s    €r   r.   r/   ³   r0   r   )r   úfx.NodeÚreturnÚbool)r:   zlist[Any] | tuple[Any, ...]rP   z tuple[tuple[Any, ...], TreeSpec])r4   ÚGraphÚtorch._inductor.pattern_matcherr   r   ÚlistÚnodesÚopÚAssertionErrorÚall_input_nodesr   r   r"   r   Úrand_opsÚatenÚemptyr   ÚsympyÚSymbolr   Ú	node_copyr@   rB   r   Úhashr9   )Úfx_gÚ	new_graphÚhash_envÚ	token_mapr   r   Úoutput_noder$   ÚnÚoutput_storagesÚnodes_that_alias_outputsÚnew_noder>   r@   rA   rB   rC   ÚtokenÚhash_argÚhash_valÚhash_val_in_hash_envÚoverwrite_due_to_mutationÚduplicate_n_prevr-   s                          @r   Úfx_graph_csero   3   sö  ø€ Ü—’“
€Ið 	ð ð
 	ð ð 8:€I÷ñ
   Ô%ô
   §
¡
Ó+¨BÑ/€KØ‡~�~˜Ó!ÜØ;¸K¿N¹NÐ;KÈ1ÐMó
ð 	
ô
ð ×,Ò,óâ,ˆAÙ˜!×ó 	8Œ�q—v‘v˜e‘}×4Ñ4Ó6Ö7Ù,ð ð ð —’ó âˆAÙ˜!×ó 	
ô ˜1Ÿ6™6 %™=×8Ñ8Ó:Ó;¸ÑN÷ 	
Ùð ð  ð �Z�Zˆð �D‰D�MÓ!Ø�t‰t�xÓØ�t‰t�zÓ!Ü˜qÓ!¤XÓ-ô ˜qÓ!¤T§Z¡ZÒ/ØÓ,ð ˜Ÿ™“Ü˜qŸv™v e™}¬e¯l©l×;Ñ;Ü)¨!¯&©&°©-×8Ñ8ð !×*Ñ*¨1Ô.>Ó?ˆHØˆC�‹Fð
-Ø5ð
-à1÷
-ñ )¨¯©Ó0‰OˆDÙ",¨Q¯X©XÓ"6ÑˆF�Kð
 Ÿ(™(ØØ&Ø Ø*ñˆEô ÜÑ2©TÓ2Ó2´EÑ9WÑPVÓ9WÓ4WÐXóˆHð Ÿ™ (Ð+ˆHð $,¨xÑ#7Ð Ø(-Ð%Þ#¨	°(Ñ(;¸uÓ(DØ#+¨HÑ#5Ð Ù(¨Ð,<×=Ñ=Ø-�C˜‘FÚð 15Ð-à ×*Ñ*¨1Ô.>Ó?ˆHØˆC�‰FÞ(×0DÑ0DØ%-˜Ñ"Ø&+�	˜(Ô#ñe ðh ÐùòAùò
 s   ÂK5Â*K5ÃK:Ã%(K:ÄK:c           	     óz  • [        U R                  R                  S[        R                  S95      n[        U5       Hj  n[        UR                  5      S:w  a.  [        SUR                   S[        UR                  5       35      eUR                  S   nUR                  U5        Ml     U R                  5         U $ )NÚcall_function)rV   r   é   zexpected node z to have 1 input node, got r   )rT   ÚgraphÚ
find_nodesÚoperatorÚgetitemÚreversedr3   rX   rW   ÚnameÚappendÚ	recompile)ÚgmÚgetitem_nodesr   Úparents       r   Úraise_getitemsr~   ¼   s«   € ô Ø
�‰×Ñ˜´x×7GÑ7GÐÐHó€Mô ˜Ö'ˆÜˆt×#Ñ#Ó$¨Ó)Ü Ø  §¡ Ð+FÄsÈ4×K_ÑK_ÓG`ÐFaÐbóð ð ×%Ñ% aÑ(ˆØ�‰�dÖñ (ð ‡L�L„NØ€Ir   c                óþ   • U R                   R                   HS  n[        UR                  [        R
                  R                  5      (       d  M8  UR                  R                  Ul        MU     U R                  5         g)zŽ
Modifies the target of graph nodes in :attr:`gm` to strip overloads.

Args:
    gm(fx.GraphModule): The input Fx graph module to be modified
N)	rs   rU   r   r   r    Ú_opsÚ
OpOverloadr   rz   )r{   r   s     r   Ústrip_overloadsr‚   Ñ   sM   € ð —‘—”ˆÜ�d—k‘k¤5§:¡:×#8Ñ#8×9Ó9ØŸ+™+×4Ñ4ˆDŽKñ ð ‡L�L…Nr   c                ó    • U R                  SS9$ )Nr&   ©rV   )rt   )rs   s    r   Úget_placeholdersr…   Þ   s   € Ø×Ñ˜}ÐÐ-Ð-r   c                óŠ   • U R                  SS9 H&  n[        R                  " UR                  S   5      s  $    [	        S5      e)Nr   r„   r   zNo output node found)rt   ÚpytreeÚtree_leavesr@   rW   )rs   r   s     r   Úget_outputsr‰   â   s?   € Ø× Ñ  HÐ Ó-ˆÜ×!Ò! $§)¡)¨A¡,Ó/Ò/ñ .ä
Ð/Ó
0Ð0r   )r   rO   rP   z+OpOverloadPacket | Callable[..., Any] | str)r`   ztorch.fx.graph.GraphrP   úfx.Graph)r{   úfx.GraphModulerP   r‹   )r{   r‹   rP   ÚNone)rs   rŠ   rP   zfx.graph._node_list)rs   rŠ   rP   zlist[fx.Node])0Ú
__future__r   ru   Útypingr   r   r\   r    Útorch.fxr4   Ú%torch.fx.experimental.symbolic_shapesr   Ú torch.multiprocessing.reductionsr   Útorch.utilsr   r‡   Útorch.utils._pytreer	   Úcollections.abcr
   Ú
torch._opsr   r   ÚopsrZ   r   ÚdropoutÚ_fused_dropoutÚ_standard_gammaÚ	bernoulliÚmultinomialÚnative_dropoutÚnormalÚpoissonÚbinomialÚrreluÚ	rand_likeÚrandÚrandintÚrandnÚrandpermrY   ro   r~   r‚   r…   r‰   r*   r   r   Ú<module>r¦      sØ   ðÝ "ã ß %ã ã Ý Ý GÝ ;Ý )Ý ,ö Ý(å+Ý,à‡y�y‡~�~€ôð 	‡L�LØ×ÑØ×ÑØ‡N�NØ×ÑØ×ÑØ‡K�KØ‡L�LØ‡M�MØ‡J�JØ‡N�NØ‡I�IØ‡L�LØ‡J�JØ‡M�Mð€ô(FôRô*
ô.õ1r   