Ë
    ÃÓ^jø   ã                  óF  — d dl mZ d dlZd dlmZmZ d dl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 erd dlmZ d d	lmZ d d
lmZ ej0                  j2                  Zdd„Zej6                  ej8                  ej:                  ej<                  ej>                  ej@                  ejB                  ejD                  ejF                  ejH                  ejJ                  ejL                  ejN                  ejP                  ejR                  gZ*dd„Z+dd„Z,dd„Z-dd„Z.dd„Z/y)é    )ÚannotationsN)ÚAnyÚTYPE_CHECKING)Úfree_unbacked_symbols)ÚStorageWeakRef)Ú_pytree)Útree_flatten)ÚCallable)ÚOpOverloadPacket)ÚTreeSpecc                ór   — t        | j                  d«      r| j                  j                  S | j                  S )NÚoverloadpacket)ÚhasattrÚtargetr   ©Únodes    úi/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_functorch/compile_utils.pyÚget_aten_targetr      s+   € Üˆt�{‰{Ð,Ô-Ø�{‰{×)Ñ)Ð)Ø�;‰;Ðó    c                óh  ‡— t        j                  «       }i Ši }i }ddlm}m}  || «       t        | j                  «      d   }|j                  dk7  rt        d|j                  › d�«      ‚dd„}|j                  D �ch c]0  } ||«      r&t        |j                  d   j                  «       «      ’Œ2 }	}| j                  D �ch c]4  } ||«      r*t        |j                  d   j                  «       «      |	v r|’Œ6 }
}| j                  D �]š  }|j                  d	k(  s›|j                  dk(  sŒ|j                  d
k(  s}t        |«      t        v slt        |«      t        j                   u sQ||
v sMd|j                  v rZt#        |j                  d   t$        j&                  «      r3t)        |j                  d   «      r|j+                  |ˆfd„«      }|‰|<   ŒÉ	 	 	 	 dˆfd„} ||j,                  «      \  }} ||j.                  «      \  }}|j0                  ||||dœ}t3        t5        d„ |D «       «      t5        d„ |D «       «      f«      }|j0                  |f}||v }d}|r||   |k(  r||   } |||«      r|‰|<   �Œod}|j+                  |ˆfd„«      }|‰|<   |s|r�Œ‘|||<   |||<   �Œ� |S c c}w c c}w )Nr   )Úcompute_mutation_region_idsÚsame_mutation_regionséÿÿÿÿÚoutputz-expected output_node.op to be 'output', got 'ú'c                óÊ   — d| j                   vs't        | j                   d   t        j                  «      sy	 | j                   d   j	                  «        y# t
        $ r Y yw xY w)zGWe can evaluate only nodes that represent tensors with defined storage.ÚvalFT)ÚmetaÚ
isinstanceÚtorchÚTensorÚuntyped_storageÚNotImplementedErrorr   s    r   Úcheckable_nodez$fx_graph_cse.<locals>.checkable_nodeM   sZ   € à˜Ÿ	™	Ñ!¬°D·I±I¸eÑ4DÄeÇlÁlÔ)SØð	Ø�I‰I�eÑ×,Ñ,Ô.ð øô #ò 	Ùð	ús   ¸A Á	A"Á!A"r   ÚplaceholderÚget_attrc                ó   •— ‰|    S ©N© ©ÚxÚenvs    €r   ú<lambda>zfx_graph_cse.<locals>.<lambda>�   ó   ø€ ¸¸A¹€ r   c                ó|  •— t        | «      \  } }t        t        | «      «      D ]Š  }| |   }t        |t        j
                  j                  j                  «      r|‰v r‰|   | |<   t        |t        j                  t        j                  t        j                  f«      sŒ||j                  | |<   ŒŒ t        | «      |fS r(   )r	   ÚrangeÚlenr   r    Úfxr   ÚNodeÚSymBoolÚSymIntÚSymFloatÚtuple)Úarg_listÚspecÚiÚvr,   s       €r   Ú
substitutez fx_graph_cse.<locals>.substitute†   sš   ø€ ô ".¨hÓ!7‘�˜$Üœs 8›}Ó-ò -�AØ  ™�AÜ! !¤U§X¡X§]¡]×%7Ñ%7Ô8¸QÀ#¹XØ&)¨!¡f˜ ™Ü! !¤e§m¡m´U·\±\Ä5Ç>Á>Ð%RÕSØ&'§f¡f˜ šð-ô ˜X“¨Ð,Ð,r   )r   ÚargsÚ	args_specÚkwargsÚkwargs_specc              3  ó6   K  — | ]  }|t        |«      f–— Œ y ­wr(   ©Útype©Ú.0Úas     r   ú	<genexpr>zfx_graph_cse.<locals>.<genexpr>£   s   è ø€ Ò2¨˜œ4 ›7”|Ñ2ùó   ‚c              3  ó6   K  — | ]  }|t        |«      f–— Œ y ­wr(   rB   rD   s     r   rG   zfx_graph_cse.<locals>.<genexpr>£   s   è ø€ Ò9WÈ1¸1¼dÀ1»g¼,Ñ9WùrH   FTc                ó   •— ‰|    S r(   r)   r*   s    €r   r-   zfx_graph_cse.<locals>.<lambda>³   r.   r   )r   úfx.NodeÚreturnÚbool)r8   zlist[Any] | tuple[Any, ...]rL   z tuple[tuple[Any, ...], TreeSpec])r2   ÚGraphÚtorch._inductor.pattern_matcherr   r   ÚlistÚnodesÚopÚAssertionErrorÚall_input_nodesr   r   r"   r   Úrand_opsÚatenÚemptyr   ÚsympyÚSymbolr   Ú	node_copyr=   r?   r   Úhashr7   )Úfx_gÚ	new_graphÚhash_envÚ	token_mapr   r   Úoutput_noder$   ÚnÚoutput_storagesÚnodes_that_alias_outputsÚnew_noder<   r=   r>   r?   r@   ÚtokenÚhash_argÚhash_valÚhash_val_in_hash_envÚoverwrite_due_to_mutationÚduplicate_n_prevr,   s                          @r   Úfx_graph_cserk   3   sê  ø€ Ü—‘“
€Ið 	ð ð
 	ð ð 8:€I÷ñ
   Ô%ô
   §
¡
Ó+¨BÑ/€KØ‡~�~˜Ò!ÜØ;¸K¿N¹NÐ;KÈ1ÐMó
ð 	
ó
ð ×,Ñ,öàÙ˜!Ôô 	�q—v‘v˜e‘}×4Ñ4Ó6Õ7ð€Oð ð —‘ö àÙ˜!ÔÜ˜1Ÿ6™6 %™=×8Ñ8Ó:Ó;¸ÑNò 	
ð Ðð  ð �Z‰Zó R,ˆð �D‰D�MÒ!Ø�t‰t�xÒØ�t‰t�zÒ!Ü˜qÓ!¤XÑ-ô ˜qÓ!¤T§Z¡ZÑ/ØÐ,Ñ,ð ˜Ÿ™‘Ü˜qŸv™v e™}¬e¯l©lÔ;Ü)¨!¯&©&°©-Ô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Ø%-�˜Ñ"Ø&+�	˜(Ó#ðeR,ðh ÐùòAùò
 s   Á>5J*Ã9J/c           	     óz  — t        | j                  j                  dt        j                  ¬«      «      }t        |«      D ]h  }t        |j                  «      dk7  r.t        d|j                  › dt        |j                  «      › �«      ‚|j                  d   }|j                  |«       Œj | j                  «        | S )NÚcall_function)rR   r   é   zexpected node z to have 1 input node, got r   )rP   ÚgraphÚ
find_nodesÚoperatorÚgetitemÚreversedr1   rT   rS   ÚnameÚappendÚ	recompile)ÚgmÚgetitem_nodesr   Úparents       r   Úraise_getitemsrz   ¼   s°   € ô Ø
�‰×Ñ˜´x×7GÑ7GÐÓHó€Mô ˜Ó'ò ˆÜˆt×#Ñ#Ó$¨Ò)Ü Ø  §¡ Ð+FÄsÈ4×K_ÑK_ÓG`ÐFaÐbóð ð ×%Ñ% aÑ(ˆØ�‰�dÕðð ‡L�L„NØ€Ir   c                óî   — | j                   j                  D ]L  }t        |j                  t        j
                  j                  «      sŒ2|j                  j                  |_        ŒN | j                  «        y)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)	ro   rQ   r   r   r    Ú_opsÚ
OpOverloadr   rv   )rw   r   s     r   Ústrip_overloadsr~   Ñ   sO   € ð —‘—‘ò 5ˆÜ�d—k‘k¤5§:¡:×#8Ñ#8Õ9ØŸ+™+×4Ñ4ˆD�Kð5ð ‡L�L…Nr   c                ó&   — | j                  d¬«      S )Nr%   ©rR   )rp   )ro   s    r   Úget_placeholdersr�   Þ   s   € Ø×Ñ˜}ÐÓ-Ð-r   c                óŒ   — | j                  d¬«      D ]%  }t        j                  |j                  d   «      c S  t	        d«      ‚)Nr   r€   r   zNo output node found)rp   ÚpytreeÚtree_leavesr=   rS   )ro   r   s     r   Úget_outputsr…   â   sD   € Ø× Ñ  HÐ Ó-ò 0ˆÜ×!Ñ! $§)¡)¨A¡,Ó/Ò/ð0ä
Ð/Ó
0Ð0r   )r   rK   rL   z+OpOverloadPacket | Callable[..., Any] | str)r\   ztorch.fx.graph.GraphrL   úfx.Graph)rw   úfx.GraphModulerL   r‡   )rw   r‡   rL   ÚNone)ro   r†   rL   z	list[Any])ro   r†   rL   zlist[fx.Node])0Ú
__future__r   rq   Útypingr   r   rX   r    Útorch.fxr2   Ú%torch.fx.experimental.symbolic_shapesr   Ú torch.multiprocessing.reductionsr   Útorch.utilsr   rƒ   Útorch.utils._pytreer	   Úcollections.abcr
   Ú
torch._opsr   r   ÚopsrV   r   ÚdropoutÚ_fused_dropoutÚ_standard_gammaÚ	bernoulliÚmultinomialÚnative_dropoutÚnormalÚpoissonÚbinomialÚrreluÚ	rand_likeÚrandÚrandintÚrandnÚrandpermrU   rk   rz   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   