
    &Vji+                     <   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(dS )"    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dS )r   createreplaceN)__name__
__module____qualname__CREATEREPLACE     L/root/voice-cloning/.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<   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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__2   s    DI DK$DMMMr#   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_string Nnodec                    || _         |g }nt          |t                    s|g}|D ]}t          |t                    sJ || _        |rv|                     |j        t          |j                  t          |j
                            | _        d|j        v rt          j        |j        d                   ng | _        nd | _        g | _        d | _        d | _        d S )Nr-   r5   )r3   
isinstancelistr   r4   r2   r(   r0   r)   idgraphr6   metacopydeepcopyr5   r8   r7   )r.   r:   r3   r4   as        r$   r/   zNodeSource.__init__>   s     #>FFFD)) 	XF 	3 	3Aa!1222222 	 !]]Ys4;'7'7"TZ.. +  DN
 $)++ di4555 NN "DNDN .2/3


r#   returnc                 ,    | j         r| j         j        ndS Nr9   )r6   r(   r.   s    r$   r(   zNodeSource.name^   s    &*n<t~"""<r#   c                 ,    | j         r| j         j        ndS rF   )r6   r)   rG   s    r$   r)   zNodeSource.targetb   s    (,>t~$$B>r#   c                 ,    | j         r| j         j        ndS )N)r6   r*   rG   s    r$   r*   zNodeSource.graph_idf   s    *..@t~&&b@r#   c                 *    |                                  S r,   )print_readablerG   s    r$   __repr__zNodeSource.__repr__j   s    ""$$$r#   c                 p    | j         )d                    d | j        D                       | _         | j         S )N+c                 @    g | ]}|j                                         S r"   )r(   lower).0rC   s     r$   
<listcomp>z1NodeSource._get_action_string.<locals>.<listcomp>o   s"    +P+P+PqAFLLNN+P+P+Pr#   )r8   joinr4   rG   s    r$   _get_action_stringzNodeSource._get_action_stringm   s9    &"%((+P+PDK+P+P+P"Q"QD""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	   r9       z(name=z, pass_name=z	, action=z, graph_id=z)
r	   )rU   r(   r3   r*   r5   rL   )r.   indentresultaction_stringitems        r$   rL   zNodeSource.print_readabler   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         E|                                 }| j        | j        | j        | j        |d | j        D             d| _         | j         J | j         S )Nc                 6    g | ]}|                                 S r"   to_dict)rR   r:   s     r$   rS   z&NodeSource.to_dict.<locals>.<listcomp>   s     HHHdllnnHHHr#   )r(   r)   r*   r3   r4   r5   )r7   rU   r(   r)   r*   r3   r5   )r.   r\   s     r$   ra   zNodeSource.to_dict   sk    : 3355M	+ M!^'HHHHH DJ z%%%zr#   otherc                     t          |t                    sdS |                                 |                                k    S )NF)r<   r   ra   )r.   rb   s     r$   __eq__zNodeSource.__eq__   s4    %,, 	5||~~00r#   c                 b    fdt           |                                                     S )Nc                    t          | t                    r:t          t          fd|                                 D                                 S t          | t
                    rt          fd| D                       S | S )Nc              3   8   K   | ]\  }}| |          fV  d S r,   r"   )rR   kv_make_hashables      r$   	<genexpr>z>NodeSource.__hash__.<locals>._make_hashable.<locals>.<genexpr>   s6      #S#Stq!Qq(9(9$:#S#S#S#S#S#Sr#   c              3   .   K   | ]} |          V  d S r,   r"   )rR   r]   rj   s     r$   rk   z>NodeSource.__hash__.<locals>._make_hashable.<locals>.<genexpr>   s-      BBd^^D11BBBBBBr#   )r<   dicttuplesorteditemsr=   )objrj   s    r$   rj   z+NodeSource.__hash__.<locals>._make_hashable   s    #t$$ V#S#S#S#Ssyy{{#S#S#SSSTTTC&& BBBBcBBBBBB
r#   )hashra   )r.   rj   s    @r$   __hash__zNodeSource.__hash__   s>    	 	 	 	 	 NN4<<>>22333r#   dc                     |dS t          |t                    sJ dt          |                       t                              t                    }d|_        d|_        |                    dd          |_        |                    dd          }g }|r|	                    d          D ]q}|
                                dk    r |                    t          j                   :|
                                dk    r|                    t          j                   r||_        d	|v rhd
|v rdd|v r`t                              |                    d	d          |                    d
d          |                    dd                    }||_        nd|_        |                    dd          ) fd|                    dg           D             |_        ng |_        |S )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   r9   r4   rO   r    r!   r(   r)   r*   rJ   r5   c                 B    g | ]}                     |          xS r,   )
_from_dict)rR   fnclsr[   s     r$   rS   z)NodeSource._from_dict.<locals>.<listcomp>   s:     % % %!nnR000F= ===r#   )r<   rm   typer   __new__r8   r7   getr3   splitupperappendr   r    r!   r4   r2   r6   r5   )ry   rt   node_source
action_stractionsaction_namer6   r[   s   `      @r$   rw   zNodeSource._from_dict   s    94!T""EE$EDGG$E$EEE" !((44 &*"  !"k2 6 6 UU8R((
 	=)//44 = =$$&&(22NN#3#:;;;; &&((I55NN#3#;<<<$ Q;;8q==Z1__"++fb!!1552#6#6j"8M8M I %.K!!$(K! 55d##/% % % % %%%R00% % %K!! %'K!r#   )r9   N)r   )r   r   r   __doc__r2   r0   __annotations__r=   r   rm   r   r   r   r/   propertyr(   r)   r1   r*   rM   rU   rL   ra   objectrd   rs   classmethodrw   r"   r#   r$   r   r   *   s0         
% % % % % % % % NNN#$$$$L!!!!
####DcN####SM!!!
 PT	4 4tn4 4 148J3KKLM	4 4 4 4@ =c = = = X= ? ? ? ? X? A# A A A XA% % %# # #
        1F 1 1 1 1
4 4 4 38D> 3h|.D 3 3 3 [3 3 3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   rA   )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 )Nr9   stack_trace)r   rT   r   )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   r|   )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 )Nr   r   r	   r   rJ   r   )current_levels    r$   r   r      s    
 ! Q$((q99q    A\*-...)6):L&-9:J-KCRC-PL)***Q Qr#   rD   c                      t           rt                              dd          gS t          j        t          j                    d d                   S )Nr   r9   rJ   )r   r   r|   	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#   r9   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   rA   r   r   r    )r:   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   5  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 # t          $ r?}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   c                 6    g | ]}|                                 S r"   r`   )rR   sources     r$   rS   z-get_graph_provenance_json.<locals>.<listcomp>D  s"    KKK&V^^%%KKKr#   inductorprovenance_tracking_errorr   )function	error_msgr   N)	nodesopr@   r(   	Exceptionr   r0   r   
format_exc)r?   provenance_tracking_jsonr:   es       r$   r   r   :  s    
#% K 	 	Dw/)) #di// LKDIk4JKKKK )3
 ('    	'7 VV(355 	
 	
 	
 						s   AA 
B4B	B	B)T)r9   ))rA   loggingr   
contextlibr   enumr   typingr   r   r   torch._utils_internalr   _compatibilityr
   r?   r   r:   r   	getLoggerr   log__all__r   rm   r0   r   r   r   r   r   r=   r   r   r   r   boolr   r   r   r   r"   r#   r$   <module>r      s         % % % % % %       ' ' ' ' ' ' ' ' ' ' 0 0 0 0 0 0 ) ) ) ) ) )             g!!    "d38n ! ! !!  e,,,    t   -,
 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,,,U tCH~    -,  r#   