
    N j!                    \   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    o/root/GenerationalWealth/GenerationalWealth/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  pU" 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  XU'   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]    		!DIIe4Dell)S)S	IIe,,.  # 		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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)   rE   rG   s     r   rJ   rK      s     9WPV1d1g,PVrL   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~~!;KNN;K1M
 	

 ,,,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
-5
-1
- )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   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     
x7G7GHM 't##$)  +Fs4K_K_G`Fab  %%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)	rs   rU   r   r   r    _ops
OpOverloadr   rz   )r{   r   s     r   strip_overloadsr      sM     dkk5::#8#899++44DK  LLNr   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 ; ) , (+,yy~~ 	LLNNKKLLMMJJNNIILLJJMM(FR*
.1r   