U
    9%eA                     @   s   d dl Z d dlZd dlmZmZ d dlZddlmZ e jG dd dZ	G dd dZ
d	d
 Zdd ZG dd dZdd Zejjee dddZdS )    N)AnyList   )
print_oncec                   @   sr   e Zd ZU dZeed< dZeed< dZeed< dZ	eed< d ddd	Z
d dd
dZdd Zdd Zdd ZdS )ProfileMetricsg        microsecondsr   	operatorsfusionsgraphsotherc                 C   s4   |  j |j 7  _ |  j|j7  _|  j|j7  _| S Nr   r   r	   selfr    r   U/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/_dynamo/profiler.py__iadd__   s    zProfileMetrics.__iadd__c                 C   s2   t |tstt| j|j | j|j | j|j S r   )
isinstancer   AssertionErrorr   r   r	   r   r   r   r   __add__   s    


zProfileMetrics.__add__c                 C   sL   t |trt|||}t| jtd|j | jtd|j | jtd|j S )Nr   )r   intr   r   maxr   r	   r   r   r   r   __truediv__   s    
zProfileMetrics.__truediv__c                 C   s   | j dd| jddS )Nz4.0%z ops z timer   r   r   r   r   r   __str__(   s    zProfileMetrics.__str__c                 C   s   | j | jgS r   r   r   r   r   r   tocsv+   s    zProfileMetrics.tocsvN)__name__
__module____qualname__r   float__annotations__r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   
   s   
	r   c                   @   s:   e Zd Zdd ZedddZdd Zdd	 Zd
d ZdS )ProfileResultc                 C   s"   |pt  | _|pt  | _|| _d S r   )r   capturedtotalunique_graphs)r   r$   r%   r&   r   r   r   __init__0   s    zProfileResult.__init__r   c                 C   s4   |  j |j 7  _ |  j|j7  _|  j|j7  _| S r   r$   r%   r&   r   r   r   r   r   5   s    zProfileResult.__iadd__c                 C   s   | j | j S r   )r$   r%   r   r   r   r   percent;   s    zProfileResult.percentc                 C   s>   | j dd| jjdd| jjdd| jjddt|   S )N2z graphs z graph calls 4/z = )r&   r$   r
   r   r%   strr)   r   r   r   r   r   >   s    0
zProfileResult.__str__c                 C   s&   | j | jj| jj| jjg|    S r   )r&   r$   r
   r   r%   r)   r   r   r   r   r   r   E   s    
zProfileResult.tocsvN)	r   r   r    r'   r   r   r)   r   r   r   r   r   r   r#   /   s
   r#   c                   C   s   t jddkS )NZTORCHDYNAMO_PRINT_MISSING1)osenvirongetr   r   r   r   should_print_missingN   s    r2   c                 C   s@   t dd | D rd S dd | D } tdd| dd   d S )Nc                 s   s   | ]}d |kV  qdS )z/torch/autograd/profiler.pyNr   .0xr   r   r   	<genexpr>S   s     z print_missing.<locals>.<genexpr>c                 S   s    g | ]}d |krd|kr|qS )z	<built-inzsite-packages/torch/r   r3   r   r   r   
<listcomp>U   s      z!print_missing.<locals>.<listcomp>MISSINGz >> )anyr   join)stackr   r   r   print_missingR   s    r=   c                   @   s    e Zd ZdZdd Zdd ZdS )Profilerr   c                 C   s    t jjt jjjgt d| _d S )N)Z
activitiesZ
with_stack)torchprofilerZprofileZProfilerActivityZCPUr2   profr   r   r   r   r'   ^   s    
zProfiler.__init__c                 C   s   d}d}d}d}d}d}d}t | j dd d}|D ]}	|	jdkr^|	jj}|d7 }|d8 }q6|	jj|kr6|	jj}|	jj|kr|d7 }||	j 7 }nt rt	|	j
 |d7 }||	j 7 }q6q6tj}
dt_|d8 }tt|||| |dt|||d d	|
d
S )Nr   c                 S   s   | j jS r   )
time_rangestart)r5   r   r   r   <lambda>m       z"Profiler.results.<locals>.<lambda>)keyTORCHDYNAMOr   )r   r   r	   r
   r   r(   )sortedrA   eventsnamerC   endrD   Z
elapsed_usr2   r=   r<   r>   r&   r#   r   )r   Zcaptured_regionsZcaptured_opsZcaptured_microsecondsZ	total_opsZtotal_microsecondsZlast_op_end_timeZcaptured_region_end_timerJ   er&   r   r   r   resultsd   sP    


zProfiler.resultsN)r   r   r    r&   r'   rN   r   r   r   r   r>   [   s   r>   c                 C   s   | rdd | D S d S )Nc                 S   s   g | ]}t t|d g qS )shape)tuplegetattrr3   r   r   r   r7      s     zshapes_of.<locals>.<listcomp>r   )itr   r   r   	shapes_of   s    rS   )gmexample_inputsc                    s@   t |d fdd  fdd}t jd7  _|S )Nc                    s     j   d d d|  S )Nzshape mismatch in=z out=z got=)graphZprint_tabular)extra)rT   input_shapesoutput_shapesr   r   debug_print   s    
z(fx_insert_profiling.<locals>.debug_printc               
      s   t jd t| ks<tdd D s<t t| j|  }d krXt|n.t|kstdd D st t||W  5 Q R  S Q R X d S )NrH   c                 s   s   | ]}t |V  qd S r   Zfree_symbolsr4   sr   r   r   r6      s    z8fx_insert_profiling.<locals>._wrapped.<locals>.<genexpr>c                 s   s   | ]}t |V  qd S r   r[   r\   r   r   r   r6      s    )r?   r@   Zrecord_functionrS   r:   r   forward)argsresultrZ   rT   rX   rY   r   r   _wrapped   s    





z%fx_insert_profiling.<locals>._wrappedr   )rS   r>   r&   )rT   rU   rb   r   ra   r   fx_insert_profiling   s    rc   )dataclassesr/   typingr   r   r?   utilsr   	dataclassr   r#   r2   r=   r>   rS   ZfxZGraphModulerc   r   r   r   r   <module>   s   $	: