o
    ^i+                     @   s  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eZg d
Zi aeeef ed< daeddG dd deZeddG dd dZedded)ddZedddee fddZ edddd Z!edddd Z"edddee fddZ#eddde$fdd Z%edded*d"d#Z&edddeeef fd$d%Z'eddd&edeeef fd'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                   @   s   e Zd ZdZdZdS )r   createreplaceN)__name__
__module____qualname__CREATEREPLACE r    r    M/var/www/html/RAG/RAG_venv/lib/python3.10/site-packages/torch/fx/traceback.pyr   $   s    r   c                   @   s.  e Zd ZU dZG d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dZedefddZedefddZedefddZdd Zdd Zd)ddZde	fddZd efd!d"Zd#d$ Zed%ee	 ded  fd&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                   @   s"   e Zd ZdededefddZdS )zNodeSource.NodeInfonametargetgraph_idc                 C   s   || _ || _|| _d S Nr"   r#   r$   )selfr"   r#   r$   r    r    r!   __init__2   s   
zNodeSource.NodeInfo.__init__N)r   r   r   strintr(   r    r    r    r!   NodeInfo1   s    r+   	pass_namer   action	from_node	node_info_dict_action_string Nnodec                 C   s   || _ |d u r
g }nt|ts|g}|D ]	}t|tsJ q|| _|rD| j|jt|jt	|j
d| _d|jv r@t|jd ng | _nd | _g | _d | _d | _d S )Nr&   r.   )r,   
isinstancelistr   r-   r+   r"   r)   r#   idgraphr/   metacopydeepcopyr.   r1   r0   )r'   r3   r,   r-   ar    r    r!   r(   >   s(   


zNodeSource.__init__returnc                 C      | j r| j jS dS Nr2   )r/   r"   r'   r    r    r!   r"   ^      zNodeSource.namec                 C   r=   r>   )r/   r#   r?   r    r    r!   r#   b   r@   zNodeSource.targetc                 C   r=   )N)r/   r$   r?   r    r    r!   r$   f   r@   zNodeSource.graph_idc                 C   s   |   S r%   )print_readabler?   r    r    r!   __repr__j   s   zNodeSource.__repr__c                 C   s(   | j d u rddd | jD | _ | j S )N+c                 S   s   g | ]}|j  qS r    )r"   lower).0r;   r    r    r!   
<listcomp>o   s    z1NodeSource._get_action_string.<locals>.<listcomp>)r1   joinr-   r?   r    r    r!   _get_action_stringm   s   
zNodeSource._get_action_stringr   c                 C   sn   |dkrdS d}|   }|d| d d| j d| j d| d| j d		 7 }| jD ]}|||d
 7 }q)|S )N	   r2       z(name=z, pass_name=z	, action=z, graph_id=z)
r   )rI   r"   r,   r$   r.   rB   )r'   indentresultaction_stringitemr    r    r!   rB   r   s   
"
zNodeSource.print_readablec                 C   sN   | j d u r|  }| j| j| j| j|dd | jD d| _ | j d us$J | j S )Nc                 S      g | ]}|  qS r    to_dict)rF   r3   r    r    r!   rG          z&NodeSource.to_dict.<locals>.<listcomp>)r"   r#   r$   r,   r-   r.   )r0   rI   r"   r#   r$   r,   r.   )r'   rO   r    r    r!   rS      s   
	zNodeSource.to_dictotherc                 C   s   t |tsdS |  | kS )NF)r4   r   rS   )r'   rU   r    r    r!   __eq__   s   
zNodeSource.__eq__c                    s    fdd t  |  S )Nc                    sL   t | trtt fdd|  D S t | tr$t fdd| D S | S )Nc                 3   s     | ]\}}| |fV  qd S r%   r    )rF   kv_make_hashabler    r!   	<genexpr>   s    z>NodeSource.__hash__.<locals>._make_hashable.<locals>.<genexpr>c                 3   s    | ]} |V  qd S r%   r    )rF   rP   rY   r    r!   r[      s    )r4   dicttuplesorteditemsr5   )objrY   r    r!   rZ      s
   

z+NodeSource.__hash__.<locals>._make_hashable)hashrS   r?   r    rY   r!   __hash__   s   zNodeSource.__hash__dc                    s0  |du rdS t |tsJ dt| tt}d|_d|_|dd|_|dd}g }|rQ|	dD ]}|
 dkrD|tj q5|
 dkrP|tj q5||_d	|v rwd
|v rwd|v rwt|d	d|d
d|dd}||_nd|_|dddur fdd|dg D |_|S 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 r,   r2   r-   rD   r   r   r"   r#   r$   rA   r.   c                    s"   g | ]}  | d urqS r%   )
_from_dict)rF   fnclsrN   r    r!   rG      s
    z)NodeSource._from_dict.<locals>.<listcomp>)r4   r\   typer   __new__r1   r0   getr,   splitupperappendr   r   r   r-   r+   r/   r.   )rg   rc   node_source
action_stractionsaction_namer/   r    rf   r!   rd      s<   

zNodeSource._from_dict)r2   N)r   )r   r   r   __doc__r+   r)   __annotations__r5   r   r\   r   r   r   r(   propertyr"   r#   r*   r$   rC   rI   rB   rS   objectrV   rb   classmethodrd   r    r    r    r!   r   *   s@   
 
 
 r   Tc                 c   s@    | sd V  d S t }t }zda d V  W |a |ad S |a |aw )NT)should_preserve_node_metar   r9   )enablesaved_should_preserve_node_metasaved_current_metar    r    r!   r      s   
r   stackc                 C   s"   t r| rd| td< d S d S d S )Nr2   stack_trace)rw   rH   r   )r{   r    r    r!   r      s   r   c                 C   s6   t rtdg | g td< tddd td< d S d S )Ngrad_fn_seq_nr
in_grad_fnr   r   rw   r   rj   )seq_nrr    r    r!   r      s   

r   c                  C   s\   t r,tdd} | dksJ | dkrtd= td= d S | d td< td d d td< d S d S )Nr~   r   r   r}   rA   r   )current_levelr    r    r!   r      s   
r   r<   c                   C   s(   t r	tddgS tt d d S )Nr|   r2   rA   )rw   r   rj   	tracebackformat_listextract_stackr    r    r    r!   r     s   r   c                   C      t S r%   )rw   r    r    r    r!   r        r   r2   c                 c   sP    t r#| jr#t}z| j at| |tjgtd< d V  W |ad S |aw d V  d S )Nr.   )rw   r8   r   r9   r   r   r   )r3   r,   
saved_metar    r    r!   r     s   


r   c                   C   r   r%   )r   r    r    r    r!   r   5  r   r   r7   c              
   C   s   z$i }| j D ]}|jdkr!d|jv rdd |jd D ng ||j< q|W S  tyF } ztdddt|t d i W  Y d	}~S d	}~ww )
za
    Given an fx.Graph, return a json that contains the provenance information of each node.
    call_functionr.   c                 S   rQ   r    rR   )rF   sourcer    r    r!   rG   D  rT   z-get_graph_provenance_json.<locals>.<listcomp>inductorprovenance_tracking_errorr   )function	error_msgr|   N)	nodesopr8   r"   	Exceptionr   r)   r   
format_exc)r7   provenance_tracking_jsonr3   er    r    r!   r   :  s,   


	r   )T)r2   ))r9   loggingr   
contextlibr   enumr   typingr   r   r   torch._utils_internalr   _compatibilityr	   r7   r
   r3   r   	getLoggerr   log__all__r   r\   r)   rs   rw   r   r   r   r5   r   r   r   r   boolr   r   r   r   r    r    r    r!   <module>   sN   

 .

 