
    sh                     D   S SK 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  \R                  R                  rS\R                  S\4S jr\R                   \R"                  \R$                  \R&                  \R(                  \R*                  \R,                  \R.                  \R0                  \R2                  \R4                  \R6                  \R8                  \R:                  \R<                  /rS	\R                  R@                  RB                  4S
 jr"S r#S r$S r%g)    )CallableN)StorageWeakRef)_pytree)tree_flattennodereturnc                 |    [        U R                  S5      (       a  U R                  R                  $ U R                  $ )Noverloadpacket)hasattrtargetr
   r   s    r/Users/tiagomarins/Projetos/claudeai/copy_bank/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Hj  nUR                  S	:X  dT  UR                  S:X  dD  UR                  S
:X  d4  [        U5      [        ;   d!  [        U5      [         R"                  L d  X;   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R(                  5      u  nnUR*                  UUUUS.n[-        [/        S U 5       5      [/        S U 5       5      45      nUR*                  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M3  SnUR%                  UU4S j5      nUTU'   U(       d
  U(       a  GMa  XU'   UUU'   GMm     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_node=   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>c   	    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>.substituteh   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$   r@   rB   s     r   rE   rF      s     9WPV1d1g,PVrG   FTc                    > TU    $ r$   r%   r&   s    r   r)   r*      r+   r   )r/   Graphtorch._inductor.pattern_matcherr   r   listnodesopr0   boolall_input_nodesr   r   r   r   rand_opsatenempty	node_copyr;   r=   r   hashr4   )r   	new_graphhash_env	token_mapr   r   output_noder   noutput_storagesnodes_that_alias_outputsnew_noder9   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_cserd   *   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/, **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%-"&+	(#E H a
 s    J*JJ$(JJ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)	graphrM   r   r   r   _ops
OpOverloadr
   	recompile)gmr   s     r   strip_overloadsrk      sM     dkk5::#8#899++44DK  LLNr   c                      U R                  SS9$ )Nr!   rN   )
find_nodes)rf   s    r   get_placeholdersro      s    }--r   c                     U R                  SS9 H&  n[        R                  " UR                  S   5      s  $    [	        S5      e)Nr   rm   r   zNo output node found)rn   pytreetree_leavesr;   AssertionError)rf   r   s     r   get_outputsrt      s?      H -!!$))A,// .
/
00r   )&typingr   r   torch.fxr/    torch.multiprocessing.reductionsr   torch.utilsr   rq   torch.utils._pytreer   opsrR   r0   r   dropout_fused_dropout_standard_gamma	bernoullimultinomialnative_dropoutnormalpoissonbinomialrrelu	rand_likerandrandintrandnrandpermrQ   rf   rJ   rd   rk   ro   rt   r%   r   r   <module>r      s       ; ) , yy~~"'' h  	LLNNKKLLMMJJNNIILLJJMM(ouxx~~++ od
.1r   