
    7h                        S SK r S SK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  \R                   R"                  rS\R$                  S\4S	 jr\R(                  \R*                  \R,                  \R.                  \R0                  \R2                  \R4                  \R6                  \R8                  \R:                  \R<                  \R>                  \R@                  \RB                  \RD                  /r#S
\R                  RH                  RJ                  4S jr&S\RN                  S\RN                  4S jr(S r)S r*S r+g)    N)Callable)free_unbacked_symbols)StorageWeakRef)_pytree)tree_flattennodereturnc                 |    [        U R                  S5      (       a  U R                  R                  $ U R                  $ )Noverloadpacket)hasattrtargetr   r   s    X/var/www/fran/franai/venv/lib/python3.13/site-packages/torch/_functorch/compile_utils.pyget_aten_targetr      s.    t{{,--{{)));;    fx_gc                   ^ [         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:X  d   eS[         R                  S[        4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  U4S jnU" UR.                  5      u  pU" UR0                  5      u  nnUR2                  UUUUS.n[5        [7        S U 5       5      [7        S U 5       5      45      nUR2                  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  XU'   UUU'   GM     U$ s  snf s  snf )Nr   )compute_mutation_region_idssame_mutation_regionsoutputr   r	   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_nodeA   s]    		!DIIe4Dell)S)S	IIe,,.  # 		s   A 
A*)A*r   placeholderget_attrc                    > TU    $ N xenvs    r   <lambda>fx_graph_cse.<locals>.<lambda>u   	    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>.substitutez   s    !-h!7s8}-A A!!UXX]]%7%788Q#X&)!f!!emmU\\5>>%RSS&'ff . 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     2T47|T   c              3   :   #    U  H  o[        U5      4v   M     g 7fr%   rA   rC   s     r   rF   rG      s     9WPV1d1g,PVrH   FTc                    > TU    $ r%   r&   r'   s    r   r*   r+      r,   r   )r0   Graphtorch._inductor.pattern_matcherr   r   listnodesopr1   boolall_input_nodesr   r   r   r   rand_opsatenemptyr   sympySymbolr   	node_copyr<   r>   r   hashr5   )r   	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_cserg   .   s   
I
CHI
  %
  

+B/K>>X%%%
RWW 
 
 ,,,A! 	8qvve}4467,    A! 	
 166%=88:;N 	
    ZZ DDM!ttxttz!q!X- q!TZZ/, qvve}ell;;)!&&-88 !**1.>?HCF- )0OD",QXX"6FK
 ((& *E 2T22E9WPV9W4WXH (+H $,x#7 (-%#	((;u(D#+H#5 (,<==-CF 15- **1.>?HCF(0D0D%-"&+	(#a d }
 s    K.*K.K3$(K3K3gmc                 "   [        U R                  R                  S[        R                  S95      n[        U5       H>  n[        UR                  5      S:X  d   eUR                  S   nUR                  U5        M@     U R                  5         U $ )Ncall_function)rO   r      r   )
rM   graph
find_nodesoperatorgetitemreversedr/   rQ   append	recompile)rh   getitem_nodesr   parents       r   raise_getitemsru      s     
x7G7GHM '4''(A---%%a(d (
 LLN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)	rl   rN   r   r   r   _ops
OpOverloadr   rr   )rh   r   s     r   strip_overloadsry      sM     dkk5::#8#899++44DK  LLNr   c                      U R                  SS9$ )Nr"   rO   )rm   )rl   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)rm   pytreetree_leavesr<   AssertionError)rl   r   s     r   get_outputsr      s?      H -!!$))A,// .
/
00r   ),rn   typingr   rU   r   torch.fxr0   %torch.fx.experimental.symbolic_shapesr    torch.multiprocessing.reductionsr   torch.utilsr   r~   torch.utils._pytreer   opsrS   r1   r   dropout_fused_dropout_standard_gamma	bernoullimultinomialnative_dropoutnormalpoissonbinomialrrelu	rand_likerandrandintrandnrandpermrR   rl   rK   rg   GraphModuleru   ry   r|   r   r&   r   r   <module>r      s	        G ; ) , yy~~"'' h  	LLNNKKLLMMJJNNIILLJJMM(}uxx~~++ }@r~~ ".. $
.1r   