o
    &j(I                     @   s   d dl Z d dlZd dlZg dZdd Zd%ddZd%dd	Zd%d
dZd%ddZG dd dZ	dd Z
dd Zdd Zdd Zd&ddZdd Zdd Zd'd!d"ZG d#d$ d$eZdS )(    N)Z
DataloaderZForwardZBackwardZOptimizationc                 C   s&   d}| D ]}||d |d  7 }q|S Nr       )rangesresultZ
time_ranger   r   i/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/visualdl/component/profiler/parser/utils.py
sum_ranges   s   r   Fc                 C   s   g }t | dkrc|s| jdd d d}|| | d | | d f tdt | D ]8}| | d |d d krb| | d |d d krS|d d | | d f|d< q*|| | d | | d f q*|S )Nr   c                 S   s   | d S )Nr   r   )xr   r   r   <lambda>    s    z#merge_self_ranges.<locals>.<lambda>)keyr   )lensortappendrange)Z
src_ranges	is_sortedmerged_rangesZcur_indxr   r   r   merge_self_ranges   s&   




r   c           
      C   s  g }|st | } t |}t| }t|}|dkr|dkr|S |dkr$|S |dkr*| S d}d}| | }|| }	|d |	d k rH|| |d7 }n	||	 |d7 }||k r||k r| | }|| }	|d |	d k r|d |d d kr|d |d d kr|d d |d f|d< n||d |d f |d7 }n:|d7 }n5|	d |d d kr|	d |d d kr|d d |	d f|d< n||	d |	d f |d7 }n|d7 }||k r||k sY||k r | | }|d |d d kr|d |d d kr|d d |d f|d< n||d |d f |d7 }n|d7 }||k s||k re|| }	|	d |d d kr\|	d |d d krL|d d |	d f|d< n||	d |	d f |d7 }n|d7 }||k s%|S )Nr   r   r   r   r   r   )
range_list1range_list2r   r   len1len2indx1indx2range1range2r   r   r   merge_ranges/   sr   












r   c           
      C   s  g }t | dkst |dkr|S |st| } t|}t | }t |}d}d}| | }|| }	||k rF||k rF|	d |d krP|d7 }||krK	 |S || }	n|	d |d kr|	d |d k r|	d |d ksjJ ||d |	d f |	d |d f}|d7 }||kr	 |S || }	n|	d |d kr|	d |d ksJ || |d |	d f}	|d7 }||kr	 |S | | }n|	d |d k r|	d |d ksJ ||	 |	d |d f}|d7 }||kr	 |S || }	nR|	d |d k r"|	d |d ksJ ||	d |d f |d |	d f}	|d7 }||kr	 |S | | }n|	d |d ks-J |d7 }||kr9	 |S | | }||k rF||k s8|S r   )r   r   r   
r   r   r   Zresult_ranger   r   r   r   r   r   r   r   r   intersection_rangest   s~   -
 $





	

1r   c           
      C   s  g }|st | } t |}t| dkr|S t|dkr| S t| }t|}d}d}| | }|| }	|t| k r|t|krQ|| |d7 }||krL	 |S | | }n|	d |d krf|d7 }||kre|| }	n|	d |d kr|	d |d k r|	d |d f}|d7 }||kr|| }	nh|	d |d kr|	d |d ksJ |d |	d f}	|d7 }||kr| | }nA|	d |d k r|	d |d ksJ ||d |	d f |	d |d f}n|	d |d ksJ || |d7 }||kr| | }|t| k s6|S r   r   r   r   r   r   subtract_ranges   sf   

 
 r    c                   @   s@   e Zd ZdZdd Zdd Zedd Zedd	 Zd
d Z	dS )HostStatisticNodez?
    Wrap original node for calculating statistic metrics.
    c                 C   s@   || _ g | _g | _d| _d| _d| _d| _d| _d| _d| _	d S )Nr   T)
hostnodechildren_noderuntime_nodecpu_timeself_cpu_timegpu_timeself_gpu_timegeneral_gpu_timeself_general_gpu_timeis_terminal_operator_node)selfr"   r   r   r   __init__   s   
zHostStatisticNode.__init__c                 C   sz  | j D ]}|  |jdu rd| _q| jD ]}|  q| jj| jj | _| j| _| j D ]%}|j	dkr6d| _|  j
|j
7  _
|  j|j7  _|  j|j|j 8  _q,| jD ]-}|  j|j|j 8  _|  j
|j
7  _
|  j|j
7  _|  j|j7  _|  j|j7  _qU| jjD ]3}|j	dkr|  j
|j|j 7  _
|  j|j|j 7  _|  j|j|j 7  _|  j|j|j 7  _qd S )NFOperatorZKernel)r#   cal_statisticr+   r$   r"   end_nsstart_nsr%   r&   typer'   r)   r(   r*   device_node)r,   childrtZdevicer   r   r   r/      s8   







zHostStatisticNode.cal_statisticc                 C      | j jS N)r"   r0   r,   r   r   r   r0        zHostStatisticNode.end_nsc                 C   r6   r7   )r"   r1   r8   r   r   r   r1     r9   zHostStatisticNode.start_nsc                 C   s   t | j|S r7   )getattrr"   )r,   namer   r   r   __getattr__  s   zHostStatisticNode.__getattr__N)
__name__
__module____qualname____doc__r-   r/   propertyr0   r1   r<   r   r   r   r   r!      s    

r!   c                 C   sf   t t}|  D ]'\}}g }|| || }|r0| }|| |jD ]}|| q&|sq	|S r7   )collectionsdefaultdictlistitemsr   popr#   )	nodetreesresults	thread_idrootnodestack
threadlistcurrent_node	childnoder   r   r   traverse_tree#  s   



rO   c                 C   s^   g }g }| |  |r-| }|jD ]}| | q|jD ]}|jD ]}| | q"q|s|S )zD
    Get all device nodes called in the time range of hostnode.
    )r   rF   r#   r$   r3   )r"   rK   Zdevice_nodesrM   rN   runtimenodeZ
devicenoder   r   r   get_device_nodes1  s   



rQ   c                 C   s  i }t t}t t}|  D ]b\}}g }|| t|}g }|| |||< || }	|| }
|rr| }|	| | }|
| |jD ]}|| t|}|j| || qI|jD ]}t|}|j| qc|s4q| D ]\}}|	  qw||fS )zn
    Using HostStatisticNode to wrap original profiler result tree, and calculate node statistic metrics.
    )
rB   rC   rD   rE   r   r!   rF   r#   r$   r/   )rG   Znode_statistic_treerH   Z
newresultsrI   rJ   rK   root_statistic_nodeZnewstackrL   ZnewthreadlistrM   Zcurrent_statistic_noderN   Zchild_statistic_noderP   Zruntime_statistic_noder   r   r   	wrap_treeB  sD   









rS   c                 C   s  d }|   D ];\}}d}t|}|jD ]'}|jdkr:t|}|j| d}|jD ]}|jtv r8|jt| q)q |du rA nq|d u rJtd i }|   D ]\}	}
d}|
jD ]}|jdkred} nqZg }g }t|
}|||	< |du r|jD ]}t|j}|j| |jD ]}t|j}|j| qqzg }g }g }|| |d |r| }| }|dkr|| |d t	|jD ]}|| |d qn|| |s|
j
D ]}t|}|j
| q|
jD ]+}|| |D ]!}|j|jkr|j|jkrt|}|| |j|  nqqn
||
 || |r_| }| }|jD ]}|| t|}|j| || q3|j
D ]}t|}|j
| qN|s(qP|  D ]	\}	}|  qd|S )NFZProfileStepTz9No profiler steps found, overview page will have no data.r   r   )rE   r!   r#   r2   r   	StageTypeprintr"   rF   reversedr$   r1   r0   r/   )rG   Ztemplate_rootZthreadidrootZhas_find_template_rootchildrenZprofiler_step_nodeZ
stage_nodeZwrapped_treerI   rJ   Zunwrapped_stackZwarpped_stackrR   Zprofiler_step_wrap_nodeZstage_wrap_noderK   Z
flag_stackZpost_order_nodesrM   flagr#   rP   Zruntime_wrapped_nodenodeZwrapped_nodeZchild_wrapped_nodeZcurrent_wrapped_noderN   Zroot_wrapped_noder   r   r   rebuild_node_treesh  s   




















	



r[   ms-c                 C   sV   | t dkr|S t | }|dkr|d }n|dkr|d }n|dkr&|d }t|dS )	z/
    Transform time in ns to time in unit.
    infsg    eAr\   g    .Ausg     @@   floatround)timeunitZinf_subsr   r   r   r   format_time  s   


rg   c                 C   s   t | d dS )zC
    Transform ratio within [0, 1] to percentage presentation.
    d   ra   rd   )ratior   r   r   format_ratio  s   rk   c                 C   s
   t | dS )Nra   ri   )Z
float_datar   r   r   format_float  s   
rl   KBc                 C   sF   t | }|dkr|d }n|dkr|d }n|dkr|d }t|dS )NGBi   @MBi   rm   i   ra   rb   )ZmemoryZmemory_unitr   r   r   r   format_memory  s   


rp   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	RedirectStdStreamsNc                 C   s   |pt j| _|p
t j| _d S r7   )sysstdout_stdoutstderr_stderr)r,   rs   ru   r   r   r   r-     s   zRedirectStdStreams.__init__c                 C   sn   t j  t j  tt j tt j | _| _t	| j
 t j  t	| j t j  dS )z@
        Replace stdout and stderr to specified stream.
        N)rr   rs   flushru   osdupfilenoold_stdout_filenoold_stderr_filenodup2rt   rv   r8   r   r   r   	__enter__  s   


zRedirectStdStreams.__enter__c                 C   sD   t | jtj  t | jtj  t | j t | j d S r7   )	rx   r}   r{   rr   rs   rz   r|   ru   close)r,   exc_type	exc_value	tracebackr   r   r   __exit__   s   zRedirectStdStreams.__exit__)NN)r=   r>   r?   r-   r~   r   r   r   r   r   rq     s    
rq   )F)r\   r]   )rm   )rB   rx   rr   rT   r   r   r   r   r    r!   rO   rQ   rS   r[   rg   rk   rl   rp   objectrq   r   r   r   r   <module>   s&   


E
B49&
a
