o
    Zh,                     @   s   d dl Z d dlZd dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
mZ d dlmZmZmZmZmZmZ dgZedddG dd dZd	d
 ZdS )    N)
deprecated)_disable_profiler_legacy_enable_profiler_legacy
DeviceTypeProfilerConfigProfilerState)_filter_name_filter_stack_entry_rewrite_name	EventListFunctionEventMEMORY_EVENT_NAMEprofilez`torch.autograd.profiler_legacy.profile` is deprecated and will be removed in a future release. Please use `torch.profiler` instead.)categoryc                   @   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,ded efd!d"Zd-d$d%Zejje_d&d' Zejje_ed(d) ZdS ).r   z'DEPRECATED: use torch.profiler instead.TF)use_cudarecord_shapes
with_flopsprofile_memory
with_stackwith_modulesc                C   s   || _ | j sd S || _d | _d| _|| _|| _|  j| jO  _|| _|| _|| _| jr:t	j
 s:tjddd d| _| jrCtj| _d S tj| _d S )NFz/CUDA is not available, disabling CUDA profiling   )
stacklevel)enabledr   function_eventsenteredr   r   r   r   r   torchcudaZis_availablewarningswarnr   CUDAprofiler_kindCPU)selfr   r   r   r   r   r   r    r#   M/var/www/auris/lib/python3.10/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   Z_CZ	_profilerZ_ExperimentalConfigr"   r#   r#   r$   configH   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__T   s   zprofile.__enter__c                 C   s   t |   d S r&   )r   r(   r'   r#   r#   r$   r*   ]   s   zprofile._start_tracec                 C   sV   | j sd S | jrtj  t }t|}t|| jrdnd | j| j	d| _
| j
  dS )Nr   )
use_devicer   r   F)r   r   r   r   Zsynchronizer   _parse_legacy_recordsr   r   r   r   Z_build_tree)r"   exc_typeexc_valexc_tbrecordsZparsed_resultsr#   r#   r$   __exit__`   s   

zprofile.__exit__c                 C      | j d u rdS t| j S )Nz$<unfinished profiler_legacy.profile>)r   reprr'   r#   r#   r$   __repr__q      

zprofile.__repr__c                 C   r3   )Nz,<unfinished profile.profiler_legacy.profile>)r   strr'   r#   r#   r$   __str__v   r6   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_finish{   s   
zprofile._check_finishNd   K   7   P   c              	   C   s0   |    | jd usJ | jj|||||||dS )N)sort_by	row_limitmax_src_column_widthmax_name_column_widthmax_shapes_column_widthheadertop_level_events_only)r9   r   table)r"   r>   r?   r@   rA   rB   rC   rD   r#   r#   r$   rE      s   
zprofile.tablec                 C   s"   |    | jd usJ | j|S r&   )r9   r   export_chrome_trace)r"   pathr#   r#   r$   rF      s   zprofile.export_chrome_traceself_cpu_time_totalrG   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)r9   r   r   export_stacks)r"   rG   rI   r#   r#   r$   rK      s   zprofile.export_stacksr   c                 C   s(   |    | jd usJ d| j||S NrJ   )r9   r   key_averages)r"   Zgroup_by_input_shapeZgroup_by_stack_nr#   r#   r$   rM      s   zprofile.key_averagesc                 C   s$   |    | jd usJ d| j S rL   )r9   r   total_averager'   r#   r#   r$   rN      s   
zprofile.total_averagec                 C   s   |    | jdusJ | jjS )z;Return CPU time as the sum of self times across all events.N)r9   r   rH   r'   r#   r#   r$   rH      s   zprofile.self_cpu_time_total)T)Nr:   r;   r<   r=   NF)rH   )Fr   )__name__
__module____qualname____doc__r%   r(   r+   r*   r2   r5   r8   r9   rE   r   rF   r7   rK   rM   rN   propertyrH   r#   r#   r#   r$   r      sH    $	





c                 C   sz  dd }d }g }t j| D ]}| }|d u r|dkr|}q|d ur'| r)J | D ]}i }i }i }	t }
d }|D ]u}||}t| sL||
v rR|
| q;| dkr|d ur|| | kos| | kos|	 |	 k}|r||
| q;||	|< d||< d||< n%| dkrY||	v sJ d| d|	| }|| }|| }|
 p| | k}| }| }td(i d	| d
|	 dt| dddt| ddd| d||d||d| d| ddd | D d| d| rdnd d|d|d|d|d| d tjd!dd"|}|sJ| rJ||}|dkrJ|| | | || |	|= ||= ||= nV| d#krt|}t|}||ksoJ | D ]}||  | 7  < qs| D ]}||  |  7  < q|dkrtdt!d dddg | |  dd$
}|| |}q;q+|j"d%d& d' |S ))Nc                 S   s   |   |  fS )zPReturn a tuple for correlating start and end records in `_parse_legacy_records`.)handlenode_id)recordr#   r#   r$   _get_record_key   s   z._parse_legacy_records.<locals>._get_record_keyZ__start_profilepushr   popzExpected record with key zo to exist in range_starts.
                    This means that the pop event did not have a corresponding push.idrU   nameT)r[   Zwith_wildcard
trace_nameFthreadstart_usend_usZ
fwd_threadZinput_shapesstackc                 S   s   g | ]}t |r|qS r#   )r	   ).0entryr#   r#   r$   
<listcomp>  s
    z)_parse_legacy_records.<locals>.<listcomp>scoper,   r   cpu_memory_usagedevice_memory_usageis_async	is_remotesequence_nrZdevice_type	is_legacyflopsZmemory_alloc)
rZ   r[   r\   r]   r^   r_   r`   re   rf   rj   c                 S   s   | j j| j j gS r&   )Z
time_rangestartend)Zevtr#   r#   r$   <lambda>7  s    z'_parse_legacy_records.<locals>.<lambda>)keyr#   )#	itertoolschainfrom_iterabler[   rh   setr   addkindrU   rg   	thread_idrk   r   rT   r
   Zcpu_elapsed_usZfwd_thread_idZshapesr`   rd   Zhas_cudari   r   r!   Zcuda_elapsed_usZappend_kernelZdeviceappendlenkeysre   cuda_memory_usager   sort)Zthread_recordsrW   Zstart_recordZ	functionsrV   r[   Zthread_record_listZcpu_memory_allocsZcuda_memory_allocsZrange_startsZfiltered_handlesZprev_recordZ
record_keyZ	duplicaterl   re   rz   rg   Zis_remote_eventZstart_flopsZfedurationZnum_open_handles_cpuZnum_open_handles_cudarT   r#   r#   r$   r-      s   







	





dr-   )rp   r   Ztyping_extensionsr   r   Z
torch.cudaZtorch.autogradr   r   r   r   r   Ztorch.autograd.profiler_utilr   r	   r
   r   r   r   __all__r   r-   r#   r#   r#   r$   <module>   s    
 