a
    h                     @   s   d dl mZ d dlmZmZ d dlZd dlZd dlZd dlm	Z	 e
ee
 dddZejjdd	d
Ze
eeee f dddZdd Zdd ZdddedddZedd ZedddZedddZedddZdS )     )contextmanager)AnycastN)Timer)filenamereturnc                    s   d}d}d  g }t | }| |}t|D ]p\}}|dkrBq0||}|dkrVq0|d | }	||d   d   fdd|	jdd	D }
|d
|
 q0W d    n1 s0    Y  |S )Nz<GRAPH_EXPORT>z</GRAPH_EXPORT>r      c                    s   g | ]}|t  d  qS N)len).0xpfx W/var/www/html/assistant/venv/lib/python3.9/site-packages/torch/utils/jit/log_extract.py
<listcomp>       zextract_ir.<locals>.<listcomp>T)keepends )openreadsplit	enumeratefind
splitlinesappendjoin)r   ZBEGINENDZgraphsfZ
split_strsiZ	split_strZend_locslinesr   r   r   
extract_ir	   s"    

0r#   )inp_typec                 C   sb   |   }|  }|  }|  }|d us,J |d us8J |d usDJ |d usPJ tj||||dS )N)sizestridedevicedtype)sizesstridesr'   r(   torchZempty_strided)r$   r%   r&   r'   r(   r   r   r   make_tensor_from_type   s    r,   )irr   c                 C   s
  t jj| dd}|  g }| D ]}t| t jjrN|t	
dd q$t| t jjrt|t	dd q$t| t jjrtt jj| }|t| q$t| t jjr|t	dddk q$td|  q$t jd|}t j|j ||fS )	NT)Zparse_tensor_constantsg?d   r	   r   z,A default value is not implemented for type forward)r+   _CZparse_irZmakeMultiOutputIntoTupleinputs
isinstancetypeZ	FloatTyper   randomuniformZIntTyperandint
TensorTyper   r,   ZBoolTypeNotImplementedErrorZ_create_function_from_graphZ!_jit_pass_erase_shape_informationgraph)r-   r9   r1   inpZ
tensorTypefuncr   r   r   load_graph_and_inputs)   s"    r<   c                 C   s$   t d| |dd}| }|jd S )Nzfn(*inputs))fnr1   )stmtglobals  )r   Zblocked_autorangeZmedian)r=   r1   	test_runsttimesr   r   r   	time_cuda>   s    rD   c                 C   s6   t  }t|D ]}| |  qt  }|| | d S )Nr@   )timeperf_counterrange)r=   r1   rA   r!   _er   r   r   time_cpuC   s
    
rJ   
      )warmup_runsrA   )r   c          	      C   sx   t | \}}t|D ]}||  qd }|D ] }t|tjr*|jjdk} qLq*|d usXJ |rht|||n
t|||}|S )Ncpu)	r<   rG   r2   r+   ZTensorr'   r3   rJ   rD   )	r-   r1   rM   rA   r9   rH   Zis_cpuinputoutr   r   r   run_testJ   s    
rQ   c               	   o   s6   t jd}zd V  W t j| nt j| 0 d S )NF)r+   r0   Z_get_graph_executor_optimize)argskwargsZold_optimizer   r   r   no_fuserY   s    rT   c                 C   s4   t   t| |W  d    S 1 s&0    Y  d S r
   )rT   rQ   r-   r1   r   r   r   run_baseline_no_fusiona   s    rV   c              	   C   s   zp|rdgndg}t j|}t jd( t| |W  d    W t j| S 1 sX0    Y  W t j| nt j| 0 d S )N)ZDYNAMICrK   )ZSTATICrK   Zfuser1)r+   jitZset_fusion_strategyfuserrQ   )r-   r1   ZdynamicZstratZ	old_stratr   r   r   run_nncf   s    rY   c                 C   s:   t jd t| |W  d    S 1 s,0    Y  d S )NZfuser2)r+   rW   rX   rQ   rU   r   r   r   run_nvfusero   s    rZ   )
contextlibr   typingr   r   r4   r+   rE   Ztorch.utils.benchmarkr   strlistr#   r0   r7   r,   tupler<   rD   rJ   floatrQ   rT   rV   rY   rZ   r   r   r   r   <module>   s    
	