
    }Yh                        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"dS )!    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dS )r   createreplaceN)__name__
__module____qualname__CREATEREPLACE     d/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/fx/traceback.pyr   r      s        FGGGr"   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d
S )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dS )NodeSource.NodeInfonametargetgraph_idc                 0    || _         || _        || _        d S Nr'   r(   r)   )selfr'   r(   r)   s       r#   __init__zNodeSource.NodeInfo.__init__-   s    DI DK$DMMMr"   N)r   r   r   strintr.   r!   r"   r#   NodeInfor&   ,   s=        	% 	%c 	%S 	% 	% 	% 	% 	% 	%r"   r1   	pass_namer   action	from_node	node_info Nnodec                    || _         |g }nt          |t                    s|g}|D ]}t          |t                    sJ || _        |rw|                     |j        t          |j                  t          |j
                            | _        d|j        v rt          j        |j        d                   ng | _        d S d | _        g | _        d S )Nr,   r4   )r2   
isinstancelistr   r3   r1   r'   r/   r(   idgraphr5   metacopydeepcopyr4   )r-   r7   r2   r3   as        r#   r.   zNodeSource.__init__7   s     #>FFFD)) 	XF 	3 	3Aa!1222222 	 !]]Ys4;'7'7"TZ.. +  DN
 $)++ di4555 NNN "DNDNNNr"   returnc                 ,    | j         r| j         j        ndS Nr6   )r5   r'   r-   s    r#   r'   zNodeSource.nameS   s    &*n<t~"""<r"   c                 ,    | j         r| j         j        ndS rC   )r5   r(   rD   s    r#   r(   zNodeSource.targetW   s    (,>t~$$B>r"   c                 ,    | j         r| j         j        ndS )N)r5   r)   rD   s    r#   r)   zNodeSource.graph_id[   s    *..@t~&&b@r"   c                 *    |                                  S r+   )print_readablerD   s    r#   __repr__zNodeSource.__repr___   s    ""$$$r"   c                 J    d                     d | j        D                       S )N+c                 @    g | ]}|j                                         S r!   )r'   lower).0r@   s     r#   
<listcomp>z1NodeSource._get_action_string.<locals>.<listcomp>c   s"    ===A===r"   )joinr3   rD   s    r#   _get_action_stringzNodeSource._get_action_stringb   s%    xx=====>>>r"   r   c                     |dk    rdS d}|                                  }|d|z  dz  d| j         d| j         d| d| j         d		z   z  }| j        D ]}||                    |d
z             z  }|S )N	   r6       z(name=z, pass_name=z	, action=z, graph_id=z)
r   )rR   r'   r2   r)   r4   rI   )r-   indentresultaction_stringitems        r#   rI   zNodeSource.print_readablee   s    A::2//11&L1styssdnss}ssaeanssst	
 N 	6 	6Dd))&1*555FFr"   c                     |                                  }| j        | j        | j        | j        |d | j        D             dS )Nc                 6    g | ]}|                                 S r!   to_dict)rO   r7   s     r#   rP   z&NodeSource.to_dict.<locals>.<listcomp>{   s     DDDT$,,..DDDr"   )r'   r(   r)   r2   r3   r4   )rR   r'   r(   r)   r2   r4   )r-   rY   s     r#   r^   zNodeSource.to_dictr   sL    //11Ik#DDT^DDD
 
 	
r"   )r6   N)r   )r   r   r   __doc__r1   r/   __annotations__r:   r   r   r   r.   propertyr'   r(   r0   r)   rJ   rR   rI   dictr^   r!   r"   r#   r   r   %   s         
% % % % % % % % NNN#$$$$L!!!!
####
 PT	   tn    148J3KKLM	       8 =c = = = X= ? ? ? ? X? A# A A A XA% % %? ? ?   

 

 

 

 

 

 

r"   r   Tc              #      K   | sd V  d S t           }t                                          }	 da d V  |a |ad S # |a |aw xY w)NT)should_preserve_node_metar   r>   )enablesaved_should_preserve_node_metasaved_current_metas      r#   r   r      ss        .*C')..00	.(,%EEE(G%-LLL )H%-L----s   8 >stackc                 Z    t           r!| r!d                    |           t          d<   d S d S d S )Nr6   stack_trace)rd   rQ   r   )rh   s    r#   r   r      sA     ! 5U 5&(ggenn]###5 5 5 5r"   c                     t           rOt                              dg           | gz   t          d<   t                              dd          dz   t          d<   d S d S )Ngrad_fn_seq_nr
in_grad_fnr   r   rd   r   get)seq_nrs    r#   r   r      sj     ! K)5)9)9:JB)O)OS
 *
%& &2%5%5lA%F%F%J\"""K Kr"   c                      t           rgt                              dd          } | dk    sJ | dk    rt          d= t          d= d S | dz
  t          d<   t          d         d d         t          d<   d S d S )Nrm   r   r   rl   rG   rn   )current_levels    r#   r   r      s    
 ! Q$((q99q    A\*-...)6):L&-9:J-KCRC-PL)***Q Qr"   rA   c                      t           rt                              dd          gS t          j        t          j                    d d                   S )Nrj   r6   rG   )rd   r   ro   	tracebackformat_listextract_stackr!   r"   r#   r   r      sI      E  3344 $Y%<%>%>ss%CDDDr"   c                      t           S r+   )rd   r!   r"   r#   r   r      s    $$r"   r6   c              #      K   t           r[| j        rTt          }	 | j                                        at	          | |t
          j                  gt          d<   d V  |ad S # |aw xY wd V  d S )Nr4   )rd   r=   r   r>   r   r   r   )r7   r2   
saved_metas      r#   r   r      s       ! TY !
	&9>>++L 4,<,CDD)L% EEE%LLL:L%%%%s   AA A"c                      t           S r+   )r   r!   r"   r#   r   r      s    r"   r<   c                     i }| j         D ]7}|j        dk    r*d|j        v rd |j        d         D             ng ||j        <   8|S )za
    Given an fx.Graph, return a json that contains the provenance information of each node.
    call_functionr4   c                 6    g | ]}|                                 S r!   r]   )rO   sources     r#   rP   z-get_graph_provenance_json.<locals>.<listcomp>   s"    GGGf!!GGGr"   )nodesopr=   r'   )r<   provenance_tracking_jsonr7   s      r#   r   r      sm    
  "  7o%% $)++ HG	+0FGGGG %TY/
 $#r"   )T)r6   )#r>   rt   
contextlibr   enumr   typingr   r   r   _compatibilityr	   r<   r
   r7   r   __all__r   rb   r/   r`   rd   r   r   r   r:   r   r   r   r   boolr   r   r   r   r!   r"   r#   <module>r      sS        % % % % % %       ' ' ' ' ' ' ' ' ' ' ) ) ) ) ) )                "d38n ! ! !!  e,,,    t   -,
 e,,,V
 V
 V
 V
 V
 V
 V
 -,V
r e,,,. . .  -,.$ e,,,549 5 5 5 -,5 e,,,K K -,K e,,,Q Q -,Q e,,,Ed3i E E E -,E e,,,% % % % -,% e,,,    -,* e,,,$sCx.    -, e,,,$U $tCH~ $ $ $ -,$ $ $r"   