a
    OSic+                     @   s|   d dl Z d dlZ d dlmZmZmZmZmZmZ d dl	m
Z
mZmZmZmZ d dlZd dlmZ G dd deZdd ZdS )	    N)	EventListFunctionEventMEMORY_EVENT_NAME_filter_name_filter_stack_entry_rewrite_name)
DeviceTypeProfilerConfigProfilerState_disable_profiler_legacy_enable_profiler_legacy)warnc                   @   s   e Zd ZdZd'dddddddddZdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zd(ddZejje_dd Zejje_d)eedddZd*d!d"Zejje_d#d$ Zejje_ed%d& ZdS )+profilez&DEPRECATED: use torch.profiler insteadTF)use_cudarecord_shapes
with_flopsprofile_memory
with_stackwith_modulesc                C   s   || _ | j sd S || _d | _d| _|| _|| _|  j| jO  _|| _|| _|| _| jrnt	j
 sntd d| _| jr~tj| _ntj| _d S )NFz/CUDA is not available, disabling CUDA profiling)enabledr   function_eventsenteredr   r   r   r   r   torchcudais_availabler   r
   CUDAprofiler_kindCPU)selfr   r   r   r   r   r   r    r   Z/var/www/html/django/DPS/env/lib/python3.9/site-packages/torch/autograd/profiler_legacy.py__init__   s$    

zprofile.__init__c              	   C   s(   t | j| j| j| j| j| jtjj	
 S N)r	   r   r   r   r   r   r   r   _C	_autograd_ExperimentalConfigr   r   r   r    config3   s    
zprofile.configc                 C   s*   | j s
d S | jrtdd| _|   | S )Nz)Profiler context manager is not reentrantT)r   r   RuntimeError_start_tracer&   r   r   r    	__enter__?   s    zprofile.__enter__c                 C   s   t |   d S r"   )r   r'   r&   r   r   r    r)   H   s    zprofile._start_tracec                 C   sN   | j s
d S | jrtj  t }t|}t|| j| j| j	d| _
| j
  dS )N)r   r   r   F)r   r   r   r   synchronizer   _parse_legacy_recordsr   r   r   r   _build_tree)r   exc_typeexc_valexc_tbrecordsparsed_resultsr   r   r    __exit__K   s    

zprofile.__exit__c                 C   s   | j d u rdS t| j S )Nz$<unfinished profiler_legacy.profile>)r   reprr&   r   r   r    __repr__[   s    
zprofile.__repr__c                 C   s   | j d u rdS t| j S )Nz,<unfinished profile.profiler_legacy.profile>)r   strr&   r   r   r    __str__`   s    
zprofile.__str__c                 C   s   | j d u rtdd S )NzProfiler didn't finish running)r   r(   r&   r   r   r    _check_finishe   s    
zprofile._check_finishNd   K   c                 C   s,   |    | jd usJ | jj|||||dS )N)sort_by	row_limitmax_src_column_widthheadertop_level_events_only)r8   r   table)r   r;   r<   r=   r>   r?   r   r   r    r@   i   s    zprofile.tablec                 C   s"   |    | jd usJ | j|S r"   )r8   r   export_chrome_trace)r   pathr   r   r    rA   r   s    zprofile.export_chrome_traceself_cpu_time_total)rB   metricc                 C   s6   |    | jd usJ d| js(J d| j||S )NExpected profiling resultsz(export_stacks() requires with_stack=True)r8   r   r   export_stacks)r   rB   rD   r   r   r    rF   x   s    zprofile.export_stacksr   c                 C   s(   |    | jd usJ d| j||S NrE   )r8   r   key_averages)r   group_by_input_shapegroup_by_stack_nr   r   r    rH   ~   s    zprofile.key_averagesc                 C   s$   |    | jd usJ d| j S rG   )r8   r   total_averager&   r   r   r    rK      s    zprofile.total_averagec                 C   s   |    | jdusJ | jjS )zl Returns total time spent on CPU obtained as a sum of
        all self times across all the events.
        N)r8   r   rC   r&   r   r   r    rC      s    zprofile.self_cpu_time_total)T)Nr9   r:   NF)rC   )Fr   )__name__
__module____qualname____doc__r!   r'   r*   r)   r3   r5   r7   r8   r@   r   rA   r6   rF   rH   rK   propertyrC   r   r   r   r    r      s8     	





r   c                 C   s&  dd }d}d }g }g }t j|  D ] }| }|d u r"|dkr"|}q"|d urT| rXJ | D ]}i }	i }
i }t }d }|D ]}||}t| s||v r|| q|| dkr |d ur| | ko| | ko| | k}|r|| q||||< d|	|< d|
|< n| dkr^||v sFJ d	||| }|	| }|
| }|
 pv| | k}| }| }t| | t| dd	t| d
d	| ||||| | dd | D | ||||| tjd|d}|s@| r@||}|dkr@|| | | || ||= |	|= |
|= n| dkr
t|	}t|
}||ksJ |	 D ]}|	|  | 7  < q|
 D ]}|
|  |  7  < q|dkr
tdt!d dddg | |  dd
}|| |}q|q\|j"dd d |S )Nc                 S   s   |   |  fS )zt
        Returns a tuple to be used by _parse_legacy_records for correlating start and
        end records.
        )handlenode_id)recordr   r   r    _get_record_key   s    z._parse_legacy_records.<locals>._get_record_keyr   Z__start_profilepushpopzExpected record with key {} to exist in range_starts.
                    This means that the pop event did not have a corresponding push.T)namewith_wildcardFc                 S   s   g | ]}t |r|qS r   )r   ).0entryr   r   r    
<listcomp>       z)_parse_legacy_records.<locals>.<listcomp>)idrR   rW   
trace_namethreadstart_usend_us
fwd_threadinput_shapesstackscopecpu_memory_usagecuda_memory_usageis_async	is_remotesequence_nrdevice_type	is_legacyflopsZmemory_alloc)
r]   rW   r^   r_   r`   ra   rd   rf   rg   rl   c                 S   s   | j j| j j gS r"   )
time_rangestartend)evtr   r   r    <lambda>  r\   z'_parse_legacy_records.<locals>.<lambda>)key)#	itertoolschainrW   ri   setr   addkindrR   formatrh   	thread_idrm   r   rQ   r   cpu_elapsed_usfwd_thread_idshapesrd   re   rj   r   r   has_cudacuda_elapsed_usappend_kerneldeviceappendlenkeysrf   rg   r   sort)Zthread_recordsrT   next_idZstart_record	functionsZrecord_stackrS   rW   Zthread_record_listZcpu_memory_allocsZcuda_memory_allocsZrange_startsZfiltered_handlesZprev_recordZ
record_key	duplicatero   rf   rg   rh   Zis_remote_eventZstart_flopsfedurationZnum_open_handles_cpuZnum_open_handles_cudarQ   r   r   r    r,      s    










r,   )r   
torch.cudatorch.autograd.profiler_utilr   r   r   r   r   r   torch.autogradr   r	   r
   r   r   rt   warningsr   objectr   r,   r   r   r   r    <module>   s     