§
    Ë²Åjú7  ã                   ó‚  — d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ e
rd dlmZ d„ d	fd
efd„Z e j        ed„ d¬¦  «        Z e j        ed„ d	¬¦  «        Ze G d„ d¦  «        ¦   «         Ze G d„ d¦  «        ¦   «         Z G d„ d¦  «        Z G d„ d¦  «        Zdd„Zd„ d dfd„Zd„ Zd„ ZdS )é    N)Údeque)Ú	dataclass)ÚDictÚListÚTYPE_CHECKING©Úprofile)Ú
DeviceType)Ú_KinetoEventc                 ó   — | j         S ©N)Úchildren©Úxs    úFC:\Projects\Historical\venv\Lib\site-packages\torch/profiler/_utils.pyú<lambda>r      s   € °1´:€ ó    FÚreversec              #   óÔ   K  — |rt           nd„ }t           || ¦  «        ¦  «        }|r? ||¦  «        }|V —  | ||¦  «        ¦  «        D ]}|                     |¦  «         Œ|°=d S d S )Nc                 ó   — | S r   © r   s    r   r   z_traverse.<locals>.<lambda>   s   € ¨q€ r   )Úreversedr   Úappend)ÚtreeÚnext_fnÚchildren_fnr   ÚorderÚ	remainingÚ
curr_eventÚchild_events           r   Ú	_traverser!      s¦   è è € ØÐ0�HˆH [ [€EÝ�e�e˜D‘k”kÑ"Ô"€IØ
ð *Ø�W˜YÑ'Ô'ˆ
ØÐÐÐØ ˜5  ¨ZÑ!8Ô!8Ñ9Ô9ð 	*ð 	*ˆKØ×Ò˜[Ñ)Ô)Ð)Ð)ð	 ð *ð *ð *ð *ð *r   c                 ó*   — |                       ¦   «         S r   )Úpopr   s    r   r   r      s   € ¸a¿eºe¹g¼g€ r   T)r   r   c                 ó*   — |                       ¦   «         S r   )Úpopleftr   s    r   r   r      s   €  §¢¡¤€ r   c                   ó^   — 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<   e	d„ ¦   «         Z
dS )ÚEventMetricsr   Úduration_time_nsÚself_time_nsÚidle_time_nsÚqueue_depthc                 ó:   — | j         dk    rdS | j        | j         z  S )Nr   g        )r(   r*   ©Úselfs    r   Úfraction_idle_timezEventMetrics.fraction_idle_time(   s&   € àÔ  AÒ%Ð%Ø�3ØÔ  4Ô#8Ñ8Ð8r   N)Ú__name__Ú
__module__Ú__qualname__r(   ÚintÚ__annotations__r)   r*   r+   Úpropertyr/   r   r   r   r'   r'   !   sp   € € € € € € àÐ�cÐÐÑØ€L�#ÐÐÑØ€L�#ÐÐÑØ€K�ÐÐÑàð9ð 9ñ „Xð9ð 9ð 9r   r'   c                   ó2   — e Zd ZU eed<   eed<   dZeed<   dS )ÚIntervalÚstartÚendr   r+   N)r0   r1   r2   r3   r4   r+   r   r   r   r7   r7   /   s4   € € € € € € à€J€J�JØ	€H€H�HØ€K�ÐÐÑÐÐr   r7   c                   ó>   — e Zd Zd„ Zd„ Zd„ Zd„ Zdee         fd„Z	dS )ÚEventKeyc                 ó   — || _         d S r   ©Úevent)r.   r>   s     r   Ú__init__zEventKey.__init__7   s   € ØˆŒ
ˆ
ˆ
r   c                 ó4   — t          | j        j        ¦  «        S r   )Úhashr>   Úidr-   s    r   Ú__hash__zEventKey.__hash__:   s   € Ý�D”J”MÑ"Ô"Ð"r   c                 ó6   — | j         j        |j         j        k    S r   )r>   rB   )r.   Úothers     r   Ú__eq__zEventKey.__eq__=   s   € ØŒzŒ} ¤¤Ò.Ð.r   c                 ó   — | j         j        › S r   )r>   Únamer-   s    r   Ú__repr__zEventKey.__repr__@   s   € Ø”*”/Ð#Ð#r   Ú	intervalsc                 ób  — d}t          |d„ ¬¦  «        }|rXt          | j        j        |d         j        ¦  «        }t          | j        j        |d         j        ¦  «        }||k     r|||z
  z  }d\  }}|t          |¦  «        k     r¨||         }||         }|dz  }|j        |j        k    r$|j        |j        k    r|dz  }ŒN|j        |_        |}t          | j        j        |j        ¦  «        }t          | j        j        |j        ¦  «        }||k     r|||z
  z  }|t          |¦  «        k     °¨|S )Nr   c                 ó   — | j         S r   ©r8   r   s    r   r   z,EventKey.intervals_overlap.<locals>.<lambda>E   s   € °A´G€ r   ©Úkey)r   é   rP   )	ÚsortedÚmaxr>   Ústart_time_nsr8   ÚminÚend_time_nsr9   Úlen)	r.   rJ   Úoverlap_timeÚoverlap_startÚoverlap_endÚiÚjÚprev_intervalÚcurr_intervals	            r   Úintervals_overlapzEventKey.intervals_overlapC   sK  € ØˆÝ˜9Ð*;Ð*;Ð<Ñ<Ô<ˆ	àð 	<Ý ¤
Ô 8¸)ÀA¼,Ô:LÑMÔMˆMÝ˜dœjÔ4°iÀ´lÔ6FÑGÔGˆKà˜{Ò*Ð*Ø ¨mÑ ;Ñ;�à‰ˆˆ1Ø•#�i‘.”.Ò Ð Ø% aœLˆMØ% aœLˆMØ�‰FˆAØÔ  =Ô#6Ò6Ð6à Ô$ }Ô'8Ò8Ð8Ø˜‘F�AØà*7Ô*;�MÔ'Ø�Aå ¤
Ô 8¸-Ô:MÑNÔNˆMÝ˜dœjÔ4°mÔ6GÑHÔHˆKØ˜{Ò*Ð*Ø ¨mÑ ;Ñ;�ð! •#�i‘.”.Ò Ð ð$ Ðr   N)
r0   r1   r2   r?   rC   rF   rI   r   r7   r^   r   r   r   r;   r;   6   so   € € € € € ðð ð ð#ð #ð #ð/ð /ð /ð$ð $ð $ð¨4°¬>ð ð ð ð ð ð r   r;   c                   óD   — e Zd Zdefd„Zd„ Zd„ Zd„ Zd„ Zdd	e	d
e
fd„ZdS )ÚBasicEvaluationÚprofc                 óN  — || _         i | _        |                      ¦   «          t          d„ | j                             ¦   «         D ¦   «         d„ ¬¦  «        | _        d„ | j        D ¦   «         | _        g | _        |                      ¦   «         | _	        |  
                    ¦   «          d S )Nc              3   ó   K  — | ]}|V — Œd S r   r   ©Ú.0Úes     r   ú	<genexpr>z+BasicEvaluation.__init__.<locals>.<genexpr>j   s"   è è € Ð,Ð,�1ˆQÐ,Ð,Ð,Ð,Ð,Ð,r   c                 ó   — | j         j        S r   )r>   rS   r   s    r   r   z*BasicEvaluation.__init__.<locals>.<lambda>j   s   € ¸A¼GÔ<Q€ r   rN   c                 ó   — g | ]	}|j         ‘Œ
S r   r=   rd   s     r   ú
<listcomp>z,BasicEvaluation.__init__.<locals>.<listcomp>l   s   € Ð8Ð8Ð8 1�q”wÐ8Ð8Ð8r   )r	   ÚmetricsÚcompute_self_timerQ   ÚkeysÚ
event_keysÚeventsÚcuda_eventsÚcompute_queue_depthÚqueue_depth_listÚcompute_idle_time)r.   ra   s     r   r?   zBasicEvaluation.__init__e   sª   € ØˆŒØ57ˆŒØ×ÒÑ Ô Ð Ý Ø,Ð,˜œ×)Ò)Ñ+Ô+Ð,Ñ,Ô,Ð2QÐ2Qð
ñ 
ô 
ˆŒð 9Ð8¨¬Ð8Ñ8Ô8ˆŒØ/1ˆÔØ $× 8Ò 8Ñ :Ô :ˆÔØ×ÒÑ Ô Ð Ð Ð r   c                 óþ  — | j         j        €J ‚t          | j         j                             ¦   «         ¦  «        }|rÁ|                     ¦   «         }|j        }|j        D ]!}||j        z  }|                     |¦  «         Œ"t          |¦  «        | j	        vsJ d|j
        › d|j        › �¦   «         ‚t          |¬¦  «        | j	        t          |¦  «        <   |j        | j	        t          |¦  «                 _        |°¿dS dS )zM
        Computes event's self time(total time - time in child ops).
        NzDuplicate id: z, )r)   )r	   Úkineto_resultsr   Úexperimental_event_treer#   r(   r   r   r;   rk   rB   rH   r'   )r.   Ústackr   Ú	self_timer    s        r   rl   z!BasicEvaluation.compute_self_timeq   s  € ð Œ|Ô*Ð6Ð6Ð6Ý�d”lÔ1×IÒIÑKÔKÑLÔLˆð ð 	=ØŸš™œˆJØ"Ô3ˆIØ)Ô2ð *ð *�Ø˜[Ô9Ñ9�	Ø—’˜[Ñ)Ô)Ð)Ð)å˜Ñ$Ô$¨D¬LÐ8Ð8Ð8ØB 
¤ÐBÐB°´ÐBÐBñ 9Ô8Ð8å1=È9Ð1UÑ1UÔ1UˆDŒL� *Ñ-Ô-Ñ.ð ",Ô!<ð ŒLÝ˜Ñ$Ô$ôäð ð 	=ð 	=ð 	=ð 	=ð 	=r   c                 óŠ  ‡‡‡— | j         j        €J ‚| j         j                             ¦   «         }d„ Šd„ Št          ˆfd„|D ¦   «         d„ ¬¦  «        }t          ˆfd„|D ¦   «         d„ ¬¦  «        }t          ||z   d	„ ¬¦  «        | _        i }d
}|D ]"Št          |ˆfd„|¬¦  «        }||‰<   |�|n|}Œ#d
}d}||z   | j        z   }	d„ }
g }|	                     |
¬¦  «         |	D �]Þ}t          |d¦  «        rW|                     ¦   «         dz  }|                     ¦   «         | 	                    ¦   «         z   dz  }||v r||         �||         }t          |d¦  «        rR| 
                    ¦   «         }| 
                    ¦   «         |                     ¦   «         z   }||v r||         �||         }nt          |d¦  «        r|j        }|j        }|t          |¦  «        k     rT||          
                    ¦   «         |k    r6|dz  }|t          |¦  «        k     r||          
                    ¦   «         |k    °6||z
  dz   }t          |d
¦  «        }t          |d¦  «        st          |d¦  «        r&|                     t#          |||¦  «        ¦  «         �Œ¯t          |d¦  «        r|| j        t'          |¦  «                 _        �Œà|S )zâ
        Computes queue_depth at each event. This will calculate the queue depth data for
        All the events in the tree.
        This will return a list of Interval of queue depth data of cuda launch and kernels.
        Nc                 ó   — | j         dk    S )NÚcudaLaunchKernel)rH   ©rf   s    r   Úis_cuda_launch_kernelzBBasicEvaluation.compute_queue_depth.<locals>.is_cuda_launch_kernel�   s   € à”6Ð/Ò/Ð/r   c                 ó|   — |                       ¦   «         t          j        k    od| j                             ¦   «         vS )NÚmem)Údevice_typer
   ÚCUDArH   Úlowerr|   s    r   Úis_cuda_kernelz;BasicEvaluation.compute_queue_depth.<locals>.is_cuda_kernel”   s+   € à—=’=‘?”?¥j¤oÒ5ÐU¸%ÀqÄvÇ|Â|Á~Ä~Ð:UÐUr   c              3   ó2   •K  — | ]} ‰|¦  «        ¯|V — Œd S r   r   )re   rf   r}   s     €r   rg   z6BasicEvaluation.compute_queue_depth.<locals>.<genexpr>™   s4   øè è € ÐDÐD�1Ð+@Ð+@ÀÑ+CÔ+CÐDˆQÐDÐDÐDÐDÐDÐDr   c                 ó*   — |                       ¦   «         S r   ©Ústart_nsr   s    r   r   z5BasicEvaluation.compute_queue_depth.<locals>.<lambda>š   ó   € ˜!Ÿ*š*™,œ,€ r   rN   c              3   ó2   •K  — | ]} ‰|¦  «        ¯|V — Œd S r   r   )re   rf   rƒ   s     €r   rg   z6BasicEvaluation.compute_queue_depth.<locals>.<genexpr>�   s2   øè è € Ð=Ð=�1¨>¨>¸!Ñ+<Ô+<Ð=ˆQÐ=Ð=Ð=Ð=Ð=Ð=r   c                 ó*   — |                       ¦   «         S r   r†   r   s    r   r   z5BasicEvaluation.compute_queue_depth.<locals>.<lambda>ž   rˆ   r   c                 ó*   — |                       ¦   «         S r   r†   r   s    r   r   z5BasicEvaluation.compute_queue_depth.<locals>.<lambda>¢   s   € À1Ç:Â:Á<Ä<€ r   r   c                 óX   •— |                       ¦   «         ‰                      ¦   «         k    S r   )Úlinked_correlation_id)r   Úcuda_launch_events    €r   r   z5BasicEvaluation.compute_queue_depth.<locals>.<lambda>ª   s'   ø€ ˜!×1Ò1Ñ3Ô3Ø$×:Ò:Ñ<Ô<ò=€ r   rM   éÿÿÿÿc                 óä   — t          | d¦  «        r|                      ¦   «         dz  S t          | d¦  «        r|                      ¦   «         S t          | d¦  «        r| j        S t	          d¦  «        ‚)NÚstart_uséè  r‡   rS   zUnknown Event Type)Úhasattrr‘   r‡   rS   Ú	Exceptionr=   s    r   Únew_old_event_comparatorzEBasicEvaluation.compute_queue_depth.<locals>.new_old_event_comparator¶   su   € Ý�u˜jÑ)Ô)ð /Ø—~’~Ñ'Ô'¨$Ñ.Ð.Ý�u˜jÑ)Ô)ð (Ø—~’~Ñ'Ô'Ð'Ý�u˜oÑ.Ô.ð +ØÔ*Ð*ÝÐ0Ñ1Ô1Ð1r   r‘   r’   r‡   rS   rP   )r	   ru   ro   rQ   rp   Úindex_of_first_matchÚsortr“   r‘   Úduration_usr‡   Úduration_nsrS   rU   rV   rR   r   r7   rk   r;   r+   )r.   Úcuda_event_listÚcuda_launch_eventsÚcuda_kernel_eventsÚkernel_mappingÚlast_mapped_kernelÚindexÚcurrent_kernel_indexÚspawned_kernel_indexÚ
all_eventsr•   rr   r>   Ú
start_timeÚend_timeÚcurrent_queue_depthrŽ   rƒ   r}   s                   @@@r   rq   z#BasicEvaluation.compute_queue_depth‡   s¼  øøø€ ð Œ|Ô*Ð6Ð6Ð6Øœ,Ô5×<Ò<Ñ>Ô>ˆð	0ð 	0ð 	0ð	Vð 	Vð 	Võ $ØDÐDÐDÐD˜ÐDÑDÔDØ&Ð&ð
ñ 
ô 
Ðõ $Ø=Ð=Ð=Ð=˜Ð=Ñ=Ô=Ø&Ð&ð
ñ 
ô 
Ðõ
 "ØÐ!3Ñ3Ð9OÐ9Oð
ñ 
ô 
ˆÔð 35ˆØÐØ!3ð 	Tð 	TÐÝ(Ø"ð=ð =ð =ð =à(ð	ñ ô ˆEð 16ˆNÐ,Ñ-Ø*/Ð*;  ÐASÐÐà ÐØ!Ðà'Ð*<Ñ<¸t¼{ÑJˆ
ð	2ð 	2ð 	2ð ,.ÐØ�ŠÐ4ˆÑ5Ô5Ð5Øð  	Pñ  	PˆEå�u˜jÑ)Ô)ð AØ"Ÿ^š^Ñ-Ô-°Ñ4�
Ø!ŸNšNÑ,Ô,¨u×/@Ò/@Ñ/BÔ/BÑBÀdÑJ�à˜NÐ*Ð*¨~¸eÔ/DÐ/PØ+9¸%Ô+@Ð(Ý�u˜jÑ)Ô)ð -Ø"Ÿ^š^Ñ-Ô-�
Ø Ÿ>š>Ñ+Ô+¨e×.?Ò.?Ñ.AÔ.AÑA�à˜NÐ*Ð*¨~¸eÔ/DÐ/PØ+9¸%Ô+@Ð(øÝ˜ Ñ0Ô0ð -Ø"Ô0�
Ø Ô,�ð %¥sÐ+=Ñ'>Ô'>Ò>Ð>Ø'Ð(<Ô=×FÒFÑHÔHØòð ð %¨Ñ)Ð$ð	 %¥sÐ+=Ñ'>Ô'>Ò>Ð>Ø'Ð(<Ô=×FÒFÑHÔHØòð ð #7Ð9MÑ"MÐPQÑ"QÐÝ"%Ð&9¸1Ñ"=Ô"=Ðå�u˜jÑ)Ô)ð P­W°U¸JÑ-GÔ-Gð PØ ×'Ò'Ý˜Z¨Ð3FÑGÔGñô ð ñ õ ˜ Ñ0Ô0ð PØ<O�”�X e™_œ_Ô-Ô9ùàÐr   c                 óp  — d}d}g }| j         rj| j        rc|t          | j        d         j        | j         d         j        ¦  «        t          | j         d         j        | j        d         j        ¦  «        gz  }| j         D ]O}|j        dk    r|s	|j        }d}|j        dk    r,|r*|                     t          ||j        ¦  «        ¦  «         d}ŒPd„ | j	         
                    ¦   «         D ¦   «         }|D ]A}t          |¦  «                             |¦  «        | j	        t          |¦  «                 _        ŒBdS )z4
        Computes idle time of the profile.
        Fr   r�   Tc                 ó   — g | ]	}|j         ‘Œ
S r   r=   rd   s     r   rj   z5BasicEvaluation.compute_idle_time.<locals>.<listcomp>û   s   € Ð;Ð;Ð; !�a”gÐ;Ð;Ð;r   N)rr   ro   r7   rS   r8   r9   rU   r+   r   rk   rm   r;   r^   r*   )r.   ÚidleÚ
idle_startÚidle_intervalsÚ
data_pointÚ
event_listr>   s          r   rs   z!BasicEvaluation.compute_idle_timeå   sU  € ð
 ˆØˆ
Ø)+ˆØÔ ð 	 T¤[ð 	ØÝ˜œ QœÔ5°tÔ7LÈQÔ7OÔ7UÑVÔVÝ˜Ô.¨rÔ2Ô6¸¼ÀB¼Ô8SÑTÔTðñ ˆNð
 Ô/ð 	ð 	ˆJØÔ%¨Ò*Ð*°4Ð*Ø'œ^�
Ø�ØÔ%¨Ò)Ð)¨dÐ)Ø×%Ò%¥h¨z¸:Ô;KÑ&LÔ&LÑMÔMÐMØ�øà;Ð; t¤|×'8Ò'8Ñ':Ô':Ð;Ñ;Ô;ˆ
Øð 	0ð 	0ˆEÝ9AØñ:ô :çÒ Ñ/Ô/ð ŒL� %™œÔ)Ô6Ð6ð	0ð 	0r   c                 ól  ‡ ‡‡— ddl }t          t          ‰ j        ¦  «        ¦  «        }d„ |D ¦   «         }dŠd}g Šd}|t	          |¦  «        k     rÃ||         ‰k    r|dz  }Œ%t          |dz   t	          |¦  «        ¦  «        D ]x}t          |ˆfd„|¬¦  «        }t          |||¬¦  «        }	|	�M||	         |k    rA‰                     t          ||	         j
        ||         j
        ¦  «        ¦  «         |�|n|} nŒy|dz  }|t	          |¦  «        k     °Ãˆfd	„‰ j                             ¦   «         D ¦   «         }
|
rú|                     ˆ fd
„|
D ¦   «         |j        ¬¦  «        }|                     ˆ fd„|
D ¦   «         |j        ¬¦  «        }||                     |¦  «        z
  |                     |¦  «        z  }||                     |¦  «        z
  |                     |¦  «        z  }|d|z  z   }d„ t#          t%          ||
¦  «        t'          j        d¦  «        d¬¦  «        D ¦   «         }
|
d|…         }
|
S )a  
        Filter and Rank the events based on some heuristics:
        1) Events that are in the falling phase of the queue depth.
        2) Events that have a high idle_time, self_time difference.

        Parameters:
            length: The number of events to return.
        r   Nc                 ó   — g | ]	}|j         ‘Œ
S r   )r+   rd   s     r   rj   z/BasicEvaluation.rank_events.<locals>.<listcomp>  s   € Ð=Ð=Ð= q�Q”]Ð=Ð=Ð=r   é   rP   c                 ó   •— | ‰k    S r   r   )r   Úbottom_threasholds    €r   r   z-BasicEvaluation.rank_events.<locals>.<lambda>  s   ø€ ¨Ð.?Ò)?€ r   rM   )r8   r9   c                 ó>   •— g | ]}|                      ‰¦  «        ¯|‘ŒS r   )r^   )re   r>   Údecrease_intervals     €r   rj   z/BasicEvaluation.rank_events.<locals>.<listcomp>,  s>   ø€ ð 
ð 
ð 
àØ×&Ò&Ð'8Ñ9Ô9ð
Øð
ð 
ð 
r   c                 ó4   •— g | ]}‰j         |         j        ‘ŒS r   )rk   r)   ©re   r>   r.   s     €r   rj   z/BasicEvaluation.rank_events.<locals>.<listcomp>3  s#   ø€ ÐJÐJÐJ°e�”˜eÔ$Ô1ÐJÐJÐJr   )Údtypec                 ó4   •— g | ]}‰j         |         j        ‘ŒS r   )rk   r/   rµ   s     €r   rj   z/BasicEvaluation.rank_events.<locals>.<listcomp>7  s#   ø€ ÐPÐPÐP¸E�”˜eÔ$Ô7ÐPÐPÐPr   g333333ã?c                 ó   — g | ]\  }}|‘ŒS r   r   )re   Ú_r>   s      r   rj   z/BasicEvaluation.rank_events.<locals>.<listcomp>?  s,   € ð ð ð á�A�uð ðð ð r   T)rO   r   )ÚtorchÚlistr   rr   rV   Úranger–   Úargmaxr   r7   r8   rk   rm   ÚtensorÚfloat32ÚmeanÚstdrQ   ÚzipÚoperatorÚ
itemgetter)r.   Úlengthrº   rr   Ú	qd_valuesÚtop_threasholdrZ   r[   Únext_minimum_idxÚpeak_idxr¬   rx   Ú	idle_timeÚnormalized_gainÚnormalized_selfÚheuristic_score_listr±   r³   s   `               @@r   Úrank_eventszBasicEvaluation.rank_events  sÔ  øøø€ ð 	ˆˆˆå¥¨Ô)>Ñ ?Ô ?Ñ@Ô@ÐØ=Ð=Ð,<Ð=Ñ=Ô=ˆ	àÐØˆØÐØˆØ•#�i‘.”.Ò Ð Ø˜Œ|Ð/Ò/Ð/Ø�Q‘�ØÝ˜1˜q™5¥# i¡.¤.Ñ1Ô1ð ð �õ $8ØÐ?Ð?Ð?Ð?Àqð$ñ $ô $Ð õ " )°1Ð:JÐKÑKÔK�ð Ð'¨I°hÔ,?À>Ò,QÐ,QØ%×,Ò,Ý Ø,¨XÔ6Ô<Ð>NÈqÔ>QÔ>Wñô ñô ð ð
 -=Ð,HÐ(Ð(Èa�AØ�EøØ�‰FˆAð+ •#�i‘.”.Ò Ð ð.
ð 
ð 
ð 
àœ×*Ò*Ñ,Ô,ð
ñ 
ô 
ˆ
ð
 ð 	-ØŸšØJÐJÐJÐJ¸zÐJÑJÔJØ”mð %ñ ô ˆIð ŸšØPÐPÐPÐPÀZÐPÑPÔPØ”mð %ñ ô ˆIð  )¨5¯:ª:°iÑ+@Ô+@Ñ@ÀEÇIÂIÈiÑDXÔDXÑXˆOØ(¨5¯:ª:°iÑ+@Ô+@Ñ@ÀEÇIÂIÈiÑDXÔDXÑXˆOØ#2°S¸?Ñ5JÑ#JÐ ðð å &ÝÐ,¨jÑ9Ô9Ý Ô+¨AÑ.Ô.Ø ð!ñ !ô !ðñ ô ˆJð $ G V GÔ,ˆJØÐr   rP   TrÅ   Úprint_enablec                 ó°   ‡ — ‰                       |¦  «        }|s|S |rdnd}|d                     ˆ fd„|D ¦   «         ¦  «        z  }|rt          |¦  «         |S )NzOptimizable events:
zNo events to optimize
ú
c                 ó|   •— g | ]8}d › d|› dt          |j        ¦  «        › d‰j        |         j        dz  d›dd › �	‘Œ9S )zP--------------------------------------------------------------------------------z
Event:                z
Source code location: z
Percentage idle time: éd   z.2fz%
)Úsource_code_locationr>   rk   r/   rµ   s     €r   rj   z:BasicEvaluation.get_optimizable_events.<locals>.<listcomp>Q  s‹   ø€ ð ð ð ð ð ð ð Øðð å+¨E¬KÑ8Ô8ðð ð ”| EÔ*Ô=ÀÑCðð ð ð ð	ð ðð ð r   )rÎ   ÚjoinÚprint)r.   rÅ   rÏ   r¬   Úoutputs   `    r   Úget_optimizable_eventsz&BasicEvaluation.get_optimizable_eventsJ  s’   ø€ Ø×%Ò% fÑ-Ô-ˆ
Øð 	ØÐØ,6ÐUÐ(Ð(Ð<Uˆà�$—)’)ðð ð ð ð (ðñ ô ñ	
ô 	
ñ 		
ˆð ð 	Ý�&‰MŒMˆMØÐr   N)rP   T)r0   r1   r2   r	   r?   rl   rq   rs   rÎ   r3   ÚboolrØ   r   r   r   r`   r`   d   sš   € € € € € ð
!˜Wð 
!ð 
!ð 
!ð 
!ð=ð =ð =ð,\ ð \ ð \ ð|0ð 0ð 0ð8Gð Gð GðRð ¨Sð ÀDð ð ð ð ð ð r   r`   c                 óž   — |�|t          | ¦  «        k    rt          | ¦  «        }t          ||¦  «        D ]} || |         ¦  «        r|c S Œd S r   )rV   r¼   )ÚseqÚ	predicater8   r9   rZ   s        r   r–   r–   _  sb   € Ø
€{�c�S ™XœX’o�oÝ�#‰hŒhˆÝ�5˜#ÑÔð ð ˆØˆ9�S˜”VÑÔð 	ØˆHˆHˆHð	àˆ4r   c                 ó   — | S r   r   r   s    r   r   r   h  s   € ˜a€ r   c                 óŽ   — | ||…         } t          | ¦  «        dk    rd S |                      t          | |¬¦  «        ¦  «        |z   S )Nr   rN   )rV   rŸ   rR   )rÛ   rO   r8   r9   s       r   r½   r½   h  sG   € Ø
ˆe�CˆiŒ.€CÝ
ˆ3�x„x�1‚}€}ØˆtØ�9Š9•S˜ #Ð&Ñ&Ô&Ñ'Ô'¨%Ñ/Ð/r   c                 ó`   — | �+t          j        d| j        ¦  «        }|€| j        } Œ&| j        S dS )Nz
\.py\(.*\)zNo source code location found)ÚreÚsearchrH   Úparent)r>   Úmatchs     r   rÔ   rÔ   o  s8   € Ø
Ð
Ý”	˜-¨¬Ñ4Ô4ˆØˆ=Ø”LˆEØØŒzÐØ*Ð*r   c                  óZ   — ddl m}   | ¦   «         5  	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr   r   )Útorch.autograd.profilerr	   r   s    r   Ú_init_for_cuda_graphsræ   }  s‡   € Ø/Ð/Ð/Ð/Ð/Ð/à	ˆ‰Œð ð Øðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ‘  $§$)r   N)Ú	functoolsrÃ   rà   Úcollectionsr   Údataclassesr   Útypingr   r   r   rå   r	   Útorch.profilerr
   Útorch.autogradr   rÙ   r!   ÚpartialÚtraverse_dfsÚtraverse_bfsr'   r7   r;   r`   r–   r½   rÔ   ræ   r   r   r   ú<module>rð      s/  ðà Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à +Ð +Ð +Ð +Ð +Ð +Ø %Ð %Ð %Ð %Ð %Ð %ð ð ,Ø+Ð+Ð+Ð+Ð+Ð+ð *>Ð)=Èuð *ð *Èð *ð *ð *ð *ð !ˆyÔ  Ð4EÐ4EÈtÐTÑTÔT€Ø ˆyÔ ØÐ,Ð,°eðñ ô €ð
 ð
9ð 
9ð 
9ð 
9ð 
9ñ 
9ô 
9ñ „ð
9ð ðð ð ð ð ñ ô ñ „ðð+ð +ð +ð +ð +ñ +ô +ð +ð\xð xð xð xð xñ xô xð xðvð ð ð ð  �K q¨dð 0ð 0ð 0ð 0ð+ð +ð +ðð ð ð ð r   