
    wix                        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
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e                      Z ed           G d d                      Z ed          e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fd            Z"dS )    N)contextmanager)Enum)AnyDictListOptional   )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     b/root/.openclaw/workspace/chatterbox_venv_py311/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d         fdZ
edefd            Zedefd            Zedef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#   r2   	pass_namer   action	from_node	node_info Nnodec                 0   || _         || _        |rw|                     |j        t	          |j                  t          |j                            | _        d|j	        v rt          j        |j	        d                   ng | _        d S d | _        g | _        d S )Nr-   r5   )r3   r4   r2   r(   r0   r)   idgraphr6   metacopydeepcopyr5   )r.   r8   r3   r4   s       r$   r/   zNodeSource.__init__8   s     # 	 !]]Ys4;'7'7"TZ.. +  DN
 $)++ di4555 NNN "DNDNNNr#   returnc                 ,    | j         r| j         j        ndS Nr7   )r6   r(   r.   s    r$   r(   zNodeSource.nameM   s    &*n<t~"""<r#   c                 ,    | j         r| j         j        ndS rA   )r6   r)   rB   s    r$   r)   zNodeSource.targetQ   s    (,>t~$$B>r#   c                 ,    | j         r| j         j        ndS )N)r6   r*   rB   s    r$   r*   zNodeSource.graph_idU   s    *..@t~&&b@r#   c                 *    |                                  S r,   )print_readablerB   s    r$   __repr__zNodeSource.__repr__Y   s    ""$$$r#   r   c                     |dk    rdS d}|d|z  dz  d| j          d| j         d| j         d| j         d		z   z  }| j        D ]}||                    |d
z             z  }|S )N	   r7       z(name=z, pass_name=z	, action=z, graph_id=z)
r	   )r(   r3   r4   r*   r5   rG   )r.   indentresultitems       r$   rG   zNodeSource.print_readable\   s    A::2&L1qtyqqdnqqt{qq_c_lqqqr	
 N 	6 	6Dd))&1*555FFr#   c                 d    | j         | j        | j        | j        | j        d | j        D             dS )Nc                 6    g | ]}|                                 S r"   to_dict).0r8   s     r$   
<listcomp>z&NodeSource.to_dict.<locals>.<listcomp>p   s     DDDT$,,..DDDr#   r(   r)   r*   r3   r4   r5   rV   rB   s    r$   rS   zNodeSource.to_dicth   s?     IkkDDT^DDD
 
 	
r#   )r7   N)r   )r   r   r   __doc__r2   r0   __annotations__r   r   r   r/   propertyr(   r)   r1   r*   rH   rG   dictrS   r"   r#   r$   r   r   &   s         
% % % % % % % % NNN'((((L!!!!
####
 /3	   tn    +,	       * =c = = = X= ? ? ? ? X? A# A A A XA% % %
 
 
 
	
 	
 	
 	
 	
 	
 	
r#   r   c               #   r   K   t           } t                                          }	 da d V  | a |ad S # | a |aw xY w)NT)should_preserve_node_metar   r=   )saved_should_preserve_node_metasaved_current_metas     r$   r   r   t   s_       '@#%**,,*$(!$C!) %D!)))))s   0 6stackc                 Z    t           r!| r!d                    |           t          d<   d S d S d S )Nr7   stack_trace)r\   joinr   )r_   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	   r\   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 )Nre   r   r	   rd   rE   rf   )current_levels    r$   r   r      s    
 ! Q$((q99q    A\*-...)6):L&-9:J-KCRC-PL)***Q Qr#   r?   c                      t           rt                              dd          gS t          j        t          j                    d d                   S )Nra   r7   rE   )r\   r   rg   	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,   )r\   r"   r#   r$   r   r      s    $$r#   r7   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 )Nr5   )r\   r<   r   r=   r   r   r    )r8   r3   
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        <   8t	          j        |          S )zh
    Given an fx.Graph, return a json string that contains the provenance information of each node.
    call_functionr5   c                 6    g | ]}|                                 S r"   rR   )rT   sources     r$   rU   z-get_graph_provenance_json.<locals>.<listcomp>   s"    GGGf!!GGGr#   )nodesopr<   r(   jsondumps)r;   provenance_tracking_jsonr8   s      r$   r   r      sx    
  "  7o%% $)++ HG	+0FGGGG %TY/
 :.///r#   )r7   )#r=   ry   rl   
contextlibr   enumr   typingr   r   r   r   _compatibilityr
   r;   r   r8   r   __all__r   r0   rX   r\   r   r   r   r   r   r   r   boolr   r   r   r   r"   r#   r$   <module>r      sW         % % % % % %       , , , , , , , , , , , , ) ) ) ) ) )                "d38n ! ! !!  e,,,    sD   -,
 e,,,J
 J
 J
 J
 J
 J
 J
 -,J
Z 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,,,0U 0s 0 0 0 -,0 0 0r#   