
    Ph                    Z   U d dl m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mZ d dlmZ d dlmZ erd dlmZmZmZmZ d ad ad ag ad	ed
<   g Zded<   d ad ad ad Z i Z!e G d d             Z"e"jG                  dg d       e"jG                  dg d       d Z$edd       Z%d Z&d Z'y)    )annotationsN)	dataclass)	lru_cache)ListSetTupleTYPE_CHECKINGUnion)config)get_benchmark_name)BaseSchedulerNodeExternKernelSchedulerNodeNopKernelSchedulerNodeSchedulerNodezYList[Tuple[Union[NopKernelSchedulerNode, SchedulerNode, ExternKernelSchedulerNode], int]]nodes_num_elemz%List[Tuple[BaseSchedulerNode, float]]node_runtimesc                 l    da dadat        j	                          t
        j	                          dadaday )Nr   )	generated_kernel_countgenerated_cpp_vec_kernel_countnum_bytes_accessedr   clearr   ir_nodes_pre_fusioncpp_to_dtype_countdisable_cpp_wrapper     bC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_inductor/metrics.pyresetr   -   s@     %&"r   c                  X    e Zd ZU ded<   ded<   dZded<   d Zd	 Zd
 Zd Ze	d        Z
y)MetricTablestr
table_namez	List[str]column_namesr   intnum_rows_addedc                   | j                   t               vry  |       }t        | j                        t        |      k(  s(J t        | j                         dt        |              t	        | j                        t	        |j                               k(  s6J t	        | j                         dt	        |j                                       t               g}|| j                  D cg c]  }||   	 c}z  }| j                  |       y c c}w )Nz v.s. )r"   enabled_metric_tableslenr#   setkeysr   
_write_row)selfrow_fnrow_dictrowcolumn_names        r   add_rowzMetricTable.add_rowI   s   ??"7"9984$$%*
 
 	<$##$%VCM?;	< 
 4$$%MMO*
 
 	C$##$%VC,@+AB	C 

  
 	9J9JK9J+%9JKK Ls   'D
c                "    d| j                    dS )Nmetric_table_z.csv)r"   )r,   s    r   output_filenamezMetricTable.output_filename[   s    t/t44r   c                    | j                         }t        |d      5 }t        j                  |d      }|j	                  dg| j
                  z          d d d        y # 1 sw Y   y xY w)Nw
lineterminator
model_name)r4   opencsvwriterwriterowr#   )r,   filenamefdr=   s       r   write_headerzMetricTable.write_header^   sQ    '')(C BZZ48FOO\NT->->>? !  s   7AA&c                   | j                         }| j                  dk(  r/t        j                  j	                  |      s| j                          | xj                  dz  c_        t        |      D ]&  \  }}t        |t              r|d}n|d}n|}|||<   ( t        |d      5 }t        j                  |d      }|j                  |       d d d        y # 1 sw Y   y xY w)Nr      z.6f ar7   r8   )r4   r%   ospathexistsrA   	enumerate
isinstancefloatr;   r<   r=   r>   )r,   r/   r?   idxorig_valnew_valr@   r=   s           r   r+   zMetricTable._write_rowd   s    '')!#BGGNN8,Dq &s^MC(E*%cN!"CH , (C BZZ48FOOC  !  s   $)CCc                .    t        | |      }|t        | <   y N)r    REGISTERED_METRIC_TABLES)namer#   tables      r   register_tablezMetricTable.register_tablex   s    D,/). &r   N)__name__
__module____qualname____annotations__r%   r1   r4   rA   r+   staticmethodrT   r   r   r   r    r    B   s@    ONC$5@!( / /r   r    slow_fusion)kernel1_pathkernel1_latencykernel2_pathkernel2_latencyfused_kernel_pathfused_kernel_latencyslow_down_ratiograph_stats)graph_idnum_nodes_before_fusionnum_nodes_after_fusionc                     t         j                         D ]f  \  } }| t               v s|j                         }t        j
                  j                  |      rt	        j                  |       |j                          h y)z
    Purge the old log file at the beginning when the benchmark script runs.
    Should do it in the parent process rather than the child processes running
    each individual model.
    N)	rQ   itemsr'   r4   rF   rG   rH   unlinkrA   )rR   rS   r?   s      r   purge_old_log_filesri      s]     0557e(**,,.Hww~~h'		(#  8r   c                     t         j                  } t               }| j                  d      D ]9  }|j	                         }|s|t
        v sJ d| d       |j                  |       ; |S )N,zMetric table name z is not registered)r   r'   r)   splitstriprQ   add)
config_strenabledrR   s      r   r'   r'      sp    --JeG  %zz|,,	9v%78	9,D & Nr   c                    | t               v S rP   )r'   rR   s    r   is_metric_table_enabledrs      s    (***r   c                :    | t         v sJ d|  d       t         |    S )NzMetric table z is not defined)rQ   rr   s    r   get_metric_tableru      s*    ++R}TF/-RR+#D))r   )returnzSet[str])(
__future__r   r<   rF   dataclassesr   	functoolsr   typingr   r   r   r	   r
   torch._inductorr   torch._inductor.utilsr   torch._inductor.schedulerr   r   r   r   r   r   r   r   rX   r   r   r   r   r   rQ   r    rT   ri   r'   rs   ru   r   r   r   <module>r~      s    " 
 	 !  9 9 " 4    !"       8:4 9      $   8/ 8/ 8/v      !  +*r   