
    Vh                     L   U 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 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   )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     B/home/dcms/DCMS/lib/python3.12/site-packages/torch/fx/traceback.pyr   r      s    FGr"   r   c                       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<   	 	 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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__-   s    DI DK$DMr"   N)r   r   r   strintr.   r!   r"   r#   NodeInfor&   ,   s    	% 	%c 	%S 	%r"   r1   	pass_namer   action	from_node	node_infoN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         | _        y g | _        y d | _        g | _        y )Nr,   r4   )r2   
isinstancelistr   r3   r1   r'   r/   r(   idgraphr5   metacopydeepcopyr4   )r-   r6   r2   r3   as        r#   r.   zNodeSource.__init__7   s     #>FFD)XF 	3Aa!1222	3!]]YYs4;;'7"TZZ. + DN
 $))+ dii45 N  N "DNDNr"   returnc                 J    | j                   r| j                   j                  S dS N )r5   r'   r-   s    r#   r'   zNodeSource.nameS   s    &*nnt~~""<"<r"   c                 J    | j                   r| j                   j                  S dS rB   )r5   r(   rD   s    r#   r(   zNodeSource.targetW   s    (,t~~$$>B>r"   c                 J    | j                   r| j                   j                  S dS )N)r5   r)   rD   s    r#   r)   zNodeSource.graph_id[   s    *...t~~&&@b@r"   c                 "    | j                         S r+   )print_readablerD   s    r#   __repr__zNodeSource.__repr___   s    ""$$r"   c                     dj                  | j                  D cg c]  }|j                  j                          c}      S c c}w )N+)joinr3   r'   lower)r-   r?   s     r#   _get_action_stringzNodeSource._get_action_stringb   s-    xx=A=>>=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	   rC       z(name=z, pass_name=z	, action=z, graph_id=z)
r   )rO   r'   r2   r)   r4   rI   )r-   indentresultaction_stringitems        r#   rI   zNodeSource.print_readablee   s    A://1&L1tyykdnn-=Y}oU`aeanan`oorst	
 NN 	6Dd))&1*55F	6r"   c           
          | j                         }| j                  | j                  | j                  | j                  || j
                  D cg c]  }|j                          c}dS c c}w )N)r'   r(   r)   r2   r3   r4   )rO   r'   r(   r)   r2   r4   to_dict)r-   rV   r6   s      r#   rY   zNodeSource.to_dictr   sW    //1IIkk#59^^DT$,,.D
 	
 Es   A()rC   N)r   )r   r   r   __doc__r1   r/   __annotations__r9   r   r   r   r.   propertyr'   r(   r0   r)   rJ   rO   rI   dictrY   r!   r"   r#   r   r   %   s    
% % N#$$L!!
##
 PT	 tn    148J3KKLM	 8 =c = = ? ? ? A# A A%?

 

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 )NrC   stack_trace)r_   rM   r   )rc   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   get)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 )Nrh   r   r   rg   rG   ri   )current_levels    r#   r   r      sl    
 !$((q9q   A\*-.)6):L&-9:J-KCR-PL)* !r"   r@   c                      t         rt        j                  dd      gS t        j                  t        j
                         d d       S )Nre   rC   rG   )r_   r   rj   	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)Nr4   )r_   r<   r   r=   r   r   r   )r6   r2   
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      s    r"   r;   c                     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 )za
    Given an fx.Graph, return a json that contains the provenance information of each node.
    call_functionr4   )nodesopr<   rY   r'   )r;   provenance_tracking_jsonr6   sources       r#   r   r      sv    
  " 77o% $))+ 15		+0FGf!G %TYY/ $#	 Hs   A.)T)rC   )#r=   ro   
contextlibr   enumr   typingr   r   r   _compatibilityr	   r;   r
   r6   r   __all__r   r]   r/   r[   r_   r   r   r   r9   r   r   r   r   boolr   r   r   r   r!   r"   r#   <module>r      s     %  ' ' )    "d38n !!  e,t  -
 e,V
 V
 -V
r 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"   