o
    h                     @   s  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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   )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   f/var/www/html/construction_image-detection-poc/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< 			
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
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__-   s   
zNodeSource.NodeInfo.__init__N)r   r   r   strintr'   r   r   r   r    NodeInfo,   s    r*   	pass_namer   action	from_node	node_info Nnodec                 C   s   || _ |d u r
g }nt|ts|g}|D ]	}t|tsJ q|| _|rH| j|jt|jt	|j
d| _d|jv rCt|jd | _d S g | _d S d | _g | _d S )Nr%   r-   )r+   
isinstancelistr   r,   r*   r!   r(   r"   idgraphr.   metacopydeepcopyr-   )r&   r0   r+   r,   ar   r   r    r'   7   s&   


zNodeSource.__init__returnc                 C      | j r| j jS dS Nr/   )r.   r!   r&   r   r   r    r!   S      zNodeSource.namec                 C   r:   r;   )r.   r"   r<   r   r   r    r"   W   r=   zNodeSource.targetc                 C   r:   )N)r.   r#   r<   r   r   r    r#   [   r=   zNodeSource.graph_idc                 C   s   |   S r$   )print_readabler<   r   r   r    __repr___   s   zNodeSource.__repr__c                 C   s   d dd | jD S )N+c                 S   s   g | ]}|j  qS r   )r!   lower).0r8   r   r   r    
<listcomp>c   s    z1NodeSource._get_action_string.<locals>.<listcomp>)joinr,   r<   r   r   r    _get_action_stringb   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	   r/       z(name=z, pass_name=z	, action=z, graph_id=z)
r   )rF   r!   r+   r#   r-   r?   )r&   indentresultaction_stringitemr   r   r    r?   e   s   
"
zNodeSource.print_readablec                 C   s.   |   }| j| j| j| j|dd | jD dS )Nc                 S      g | ]}|  qS r   to_dict)rC   r0   r   r   r    rD   {       z&NodeSource.to_dict.<locals>.<listcomp>)r!   r"   r#   r+   r,   r-   )rF   r!   r"   r#   r+   r-   )r&   rL   r   r   r    rP   r   s   zNodeSource.to_dict)r/   N)r   )r   r   r   __doc__r*   r(   __annotations__r2   r   r
   r   r'   propertyr!   r"   r)   r#   r@   rF   r?   dictrP   r   r   r   r    r   %   s4   
 

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   r6   )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 )Nr/   stack_trace)rV   rE   r   )rZ   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   rV   r   get)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\   r>   r^   )current_levelr   r   r    r      s   
r   r9   c                   C   s(   t r	tddgS tt d d S )Nr[   r/   r>   )rV   r   r_   	tracebackformat_listextract_stackr   r   r   r    r      s   r   c                   C      t S r$   )rV   r   r   r   r    r         r   r/   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-   )rV   r5   r   r6   r   r   r   )r0   r+   
saved_metar   r   r    r      s   


r   c                   C   re   r$   )r   r   r   r   r    r      rf   r   r4   c                 C   sF   i }| j D ]}|jdkr d|jv rdd |jd D ng ||j< q|S )za
    Given an fx.Graph, return a json that contains the provenance information of each node.
    call_functionr-   c                 S   rN   r   rO   )rC   sourcer   r   r    rD      rQ   z-get_graph_provenance_json.<locals>.<listcomp>)nodesopr5   r!   )r4   provenance_tracking_jsonr0   r   r   r    r      s   


r   )T)r/   )#r6   rb   
contextlibr   enumr   typingr   r   r   _compatibilityr   r4   r	   r0   r
   __all__r   rU   r(   rS   rV   r   r   r   r2   r   r   r   r   boolr   r   r   r   r   r   r   r    <module>   sF   
Y

 