
    i+                        U d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ ddlmZ ddlmZ dd	lmZ  ej&                  e      Zg d
Zi aeeef   ed<   da ed       G d de             Z ed       G d d             Z ed      edd              Z ed      dee   fd       Z  ed      d        Z! ed      d        Z" ed      dee   fd       Z# ed      de$fd       Z% ed      edd              Z& ed      deeef   fd       Z' ed      dedeeef   fd       Z(y)     N)contextmanager)Enum)AnyOptionalUnion)signpost_event   )compatibility)Graph)Node)preserve_node_metahas_preserved_node_metaset_stack_traceset_grad_fn_seq_nrreset_grad_fn_seq_nrformat_stackset_current_metaget_current_meta
NodeSourceNodeSourceActionget_graph_provenance_jsoncurrent_metaF)is_backward_compatiblec                       e Zd ZdZdZy)r   createreplaceN)__name__
__module____qualname__CREATEREPLACE     L/var/www/html/engine/venv/lib/python3.12/site-packages/torch/fx/traceback.pyr   r   $   s    FGr#   r   c                   Z   e Zd ZU dZ G d d      Zeed<   ed   ed<   ed    ed<   ed   ed<   ee	ee
f      ed	<   ee   ed
<   	 	 ddee   dedeeded   f      fdZedefd       Zedefd       Zedefd       Zd Zd ZddZde	fdZdefdZd Zedee	   ded    fd       Zy)r   z
    NodeSource is a data structure that contains the provenance information of a node.
    If node `a` is created from node `b`, then `a.meta["from_node"]` may contain NodeSource(b).
    c                        e Zd ZdededefdZy)NodeSource.NodeInfonametargetgraph_idc                 .    || _         || _        || _        y Nr(   r)   r*   )selfr(   r)   r*   s       r$   __init__zNodeSource.NodeInfo.__init__2   s    DI DK$DMr#   N)r   r   r   strintr/   r"   r#   r$   NodeInfor'   1   s    	% 	%c 	%S 	%r#   r2   	pass_namer   action	from_node	node_info_dict_action_stringNnodec                    || _         |g }nt        |t              s|g}|D ]  }t        |t              rJ  || _        |r| j                  |j                  t        |j                        t        |j                              | _        d|j                  v r"t        j                  |j                  d         ng | _        nd | _        g | _        d | _        d | _        y )Nr-   r5   )r3   
isinstancelistr   r4   r2   r(   r0   r)   idgraphr6   metacopydeepcopyr5   r8   r7   )r.   r9   r3   r4   as        r$   r/   zNodeSource.__init__>   s     #>FFD)XF 	3Aa!1222	3!]]YYs4;;'7"TZZ. + DN
 $))+ dii45 N "DNDN .2/3
r#   returnc                 J    | j                   r| j                   j                  S dS N )r6   r(   r.   s    r$   r(   zNodeSource.name^   s    &*nnt~~""<"<r#   c                 J    | j                   r| j                   j                  S dS rE   )r6   r)   rG   s    r$   r)   zNodeSource.targetb   s    (,t~~$$>B>r#   c                 J    | j                   r| j                   j                  S dS )N)r6   r*   rG   s    r$   r*   zNodeSource.graph_idf   s    *...t~~&&@b@r#   c                 "    | j                         S r,   )print_readablerG   s    r$   __repr__zNodeSource.__repr__j   s    ""$$r#   c                     | j                   Fdj                  | j                  D cg c]  }|j                  j	                          c}      | _         | j                   S c c}w )N+)r8   joinr4   r(   lower)r.   rB   s     r$   _get_action_stringzNodeSource._get_action_stringm   sJ    &"%((DKK+PqAFFLLN+P"QD""" ,Qs   !Ac                     |dkD  ryd}| j                         }|d|z  dz  d| j                   d| j                   d| d| j                   d		z   z  }| j                  D ]  }||j                  |d
z         z  } |S )N	   rF       z(name=z, pass_name=z	, action=z, graph_id=z)
r	   )rR   r(   r3   r*   r5   rL   )r.   indentresultaction_stringitems        r$   rL   zNodeSource.print_readabler   s    A://1&L1tyykdnn-=Y}oU`aeanan`oorst	
 NN 	6Dd))&1*55F	6r#   c           
      0   | j                   l| j                         }| j                  | j                  | j                  | j
                  || j                  D cg c]  }|j                          c}d| _         | j                   J | j                   S c c}w )N)r(   r)   r*   r3   r4   r5   )r7   rR   r(   r)   r*   r3   r5   to_dict)r.   rY   r9   s      r$   r\   zNodeSource.to_dict   s|    :: 335M		++ MM!^^'9=HdllnHDJ zz%%%zz	 Is   Botherc                 f    t        |t              sy| j                         |j                         k(  S )NF)r;   r   r\   )r.   r]   s     r$   __eq__zNodeSource.__eq__   s&    %,||~00r#   c                 L    fdt         | j                                     S )Nc                     t        | t              r+t        t        fd| j	                         D                    S t        | t
              rt        fd| D              S | S )Nc              3   8   K   | ]  \  }}| |      f  y wr,   r"   ).0kv_make_hashables      r$   	<genexpr>z>NodeSource.__hash__.<locals>._make_hashable.<locals>.<genexpr>   s     #Stq!Qq(9$:#Ss   c              3   .   K   | ]  } |        y wr,   r"   )rc   rZ   rf   s     r$   rg   z>NodeSource.__hash__.<locals>._make_hashable.<locals>.<genexpr>   s     Bd^D1Bs   )r;   dicttuplesorteditemsr<   )objrf   s    r$   rf   z+NodeSource.__hash__.<locals>._make_hashable   sI    #t$V#Ssyy{#SSTTC&BcBBB
r#   )hashr\   )r.   rf   s    @r$   __hash__zNodeSource.__hash__   s     	 N4<<>233r#   dc                 t   |yt        |t              sJ dt        |              t        j	                  t              }d|_        d|_        |j                  dd      |_        |j                  dd      }g }|r||j                  d      D ]h  }|j                         dk(  r |j                  t        j                         6|j                         dk(  sJ|j                  t        j                         j ||_        d	|v rWd
|v rSd|v rOt        j!                  |j                  d	d      |j                  d
d      |j                  dd            }||_        nd|_        |j                  dd      :|j                  dg       D cg c]  }| j%                  |      x}| c}|_        |S g |_        |S c c}w )z
        Recursively deserialize from_node metadata from dictionary data.
        It is used to deserialize the from_node field from serialized metadata.
        Please use constructor NodeSource(node, ...) to create a NodeSource object.
        NzExpected a dict, got r3   rF   r4   rO   r    r!   r(   r)   r*   rJ   r5   )r;   ri   typer   __new__r8   r7   getr3   splitupperappendr   r    r!   r4   r2   r6   
_from_dictr5   )	clsrp   node_source
action_stractionsaction_namer6   fnrX   s	            r$   rx   zNodeSource._from_dict   s    9!T"E&;DG9$EE" !((4 &*"  !"k2 6 UU8R(
)//4 =$$&(2NN#3#:#:; &&(I5NN#3#;#;<	=
 % Q;8q=Z1_"++fb!1552#6j"8MI %.K!$(K! 55d#/ %%R0%!nnR00F= %K!  %'K!%s   F5)rF   N)r   )r   r   r   __doc__r2   r0   __annotations__r<   r   ri   r   r   r   r/   propertyr(   r)   r1   r*   rM   rR   rL   r\   objectr_   ro   classmethodrx   r"   r#   r$   r   r   *   sF   
% % N#$$L!!
##DcN##SM!
 PT	4tn4 4 148J3KKLM	4@ =c = = ? ? ? A# A A%#
  1F 1
4 38D> 3h|.D 3 3r#   r   c              #   v   K   | sd  y t         }t        j                         }	 da d  |a |ay # |a |aw xY ww)NT)should_preserve_node_metar   r@   )enablesaved_should_preserve_node_metasaved_current_metas      r$   r   r      sK      *C')..0	.(,%(G%-L )H%-Ls   "90 969stackc                 H    t         r| rdj                  |       t        d<   y y y )NrF   stack_trace)r   rP   r   )r   s    r$   r   r      s#     !U&(ggen]# &+ r#   c                     t         rBt        j                  dg       | gz   t        d<   t        j                  dd      dz   t        d<   y y )Ngrad_fn_seq_nr
in_grad_fnr   r	   r   r   rt   )seq_nrs    r$   r   r      sQ     !)5)9)9:JB)OS
 *
%& &2%5%5lA%F%J\" !r#   c                      t         rQt        j                  dd      } | dkD  sJ | dk(  rt        d= t        d= y | dz
  t        d<   t        d   d d t        d<   y y )Nr   r   r	   r   rJ   r   )current_levels    r$   r   r      sl    
 !$((q9q   A\*-.)6):L&-9:J-KCR-PL)* !r#   rC   c                      t         rt        j                  dd      gS t        j                  t        j
                         d d       S )Nr   rF   rJ   )r   r   rt   	tracebackformat_listextract_stackr"   r#   r$   r   r     s>       344 $$Y%<%<%>s%CDDr#   c                      t         S r,   )r   r"   r#   r$   r   r     s    $$r#   c              #      K   t         rW| j                  rKt        }	 | j                  j                         at	        | |t
        j                        gt        d<   d  |ay d  y # |aw xY ww)Nr5   )r   r?   r   r@   r   r   r    )r9   r3   
saved_metas      r$   r   r     sa      !TYY!
	&99>>+L 4,<,C,CD)L% %L &Ls   A,AA% A,%A))A,c                      t         S r,   )r   r"   r#   r$   r   r   5  s    r#   r>   c           	      p   	 i }| j                   D ]Z  }|j                  dk(  sd|j                  v r+|j                  d   D cg c]  }|j                          c}ng ||j                  <   \ |S c c}w # t
        $ r8}t        dddt        |      t        j                         d       i cY d}~S d}~ww xY w)za
    Given an fx.Graph, return a json that contains the provenance information of each node.
    call_functionr5   inductorprovenance_tracking_errorr   )function	error_msgr   N)
nodesopr?   r\   r(   	Exceptionr   r0   r   
format_exc)r>   provenance_tracking_jsonr9   sourcees        r$   r   r   :  s    
#% KK 	Dww/) #dii/ 59IIk4JK&V^^%K )3	 ('	 L
   	'7 V(335	
 	s4    A4 A4 A/A4 /A4 4	B5=-B0*B50B5)T)rF   ))r@   loggingr   
contextlibr   enumr   typingr   r   r   torch._utils_internalr   _compatibilityr
   r>   r   r9   r   	getLoggerr   log__all__r   ri   r0   r   r   r   r   r   r<   r   r   r   r   boolr   r   r   r   r"   r#   r$   <module>r      s      %  ' ' 0 )   g!  "d38n !!  e,t  -
 e,j j -jZ e,.  -.$ e,549 5 -5 e,K -K e,Q -Q e,Ed3i E -E e,% % -% e,  -* e,$sCx.  - e,U tCH~  -r#   