
    #hx                     N   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"y)    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y)r   createreplaceN)__name__
__module____qualname__CREATEREPLACE     O/var/www/html/sandstorm/venv/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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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#   r2   	pass_namer   action	from_node	node_infoNnodec                 N   || _         || _        |r| j                  |j                  t	        |j
                        t        |j                              | _        d|j                  v r(t        j                  |j                  d         | _        y g | _        y d | _        g | _        y )Nr-   r5   )r3   r4   r2   r(   r0   r)   idgraphr6   metacopydeepcopyr5   )r.   r7   r3   r4   s       r$   r/   zNodeSource.__init__8   s     #!]]YYs4;;'7"TZZ. + DN
 $))+ dii45 N  N "DNDNr#   returnc                 J    | j                   r| j                   j                  S dS N )r6   r(   r.   s    r$   r(   zNodeSource.nameM   s    &*nnt~~""<"<r#   c                 J    | j                   r| j                   j                  S dS r@   )r6   r)   rB   s    r$   r)   zNodeSource.targetQ   s    (,t~~$$>B>r#   c                 J    | j                   r| j                   j                  S dS )N)r6   r*   rB   s    r$   r*   zNodeSource.graph_idU   s    *...t~~&&@b@r#   c                 "    | j                         S r,   )print_readablerB   s    r$   __repr__zNodeSource.__repr__Y   s    ""$$r#   c                     |dkD  ryd}|d|z  dz  d| j                    d| j                   d| j                   d| j                   d		z   z  }| j                  D ]  }||j                  |d
z         z  } |S )N	   rA       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:&L1tyykdnn-=Yt{{mS^_c_l_l^mmpqr	
 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*   r3   r4   r5   )r(   r)   r*   r3   r4   r5   to_dict)r.   r7   s     r$   rQ   zNodeSource.to_dicth   sO     IIkkkk59^^DT$,,.D
 	
 Es   A")rA   N)r   )r   r   r   __doc__r2   r0   __annotations__r   r   r   r/   propertyr(   r)   r1   r*   rH   rG   dictrQ   r"   r#   r$   r   r   &   s    
% % N'((L!!
##
 /3	 tn    +,	 * =c = = ? ? ? A# A A%
	
 	
r#   r   c               #   h   K   t         } t        j                         }	 da d  | a |ay # | a |aw xY ww)NT)should_preserve_node_metar   r<   )saved_should_preserve_node_metasaved_current_metas     r$   r   r   t   sF      '@#%**,*$(!$C!) %D!)s   2) 2/2stackc                 H    t         r| rdj                  |       t        d<   y y y )NrA   stack_trace)rW   joinr   )rZ   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	   rW   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 )Nr`   r   r	   r_   rE   ra   )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 )Nr\   rA   rE   )rW   r   rb   	tracebackformat_listextract_stackr"   r#   r$   r   r      s>       344 $$Y%<%<%>s%CDDr#   c                      t         S r,   )rW   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   )rW   r;   r   r<   r   r   r    )r7   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      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                  <   \ t        j                  |      S c c}w )zh
    Given an fx.Graph, return a json string that contains the provenance information of each node.
    call_functionr5   )nodesopr;   rQ   r(   jsondumps)r:   provenance_tracking_jsonr7   sources       r$   r   r      s    
  " 77o% $))+ 15		+0FGf!G %TYY/ ::.//	 Hs   B)rA   )#r<   rr   rg   
contextlibr   enumr   typingr   r   r   r   _compatibilityr
   r:   r   r7   r   __all__r   r0   rS   rW   r   r   r   r   r   r   r   boolr   r   r   r   r"   r#   r$   <module>r|      s      %  , , )    "d38n !!  e,sD  -
 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,0U 0s 0 -0r#   