+
    –°³jÂ_  ã                   ó¶  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
Ht ^ RIHtHt ^ RIHtHt ^ RIt^ RIHu Ht ^ RIHt ^ RIHt ]P8                  P:                  t^ t]! R4      t]! R4      t ]! R	4      t!]"t#]"t$]"t%]"t&]PN                  ! ](4      t)]PT                  ! R
4      t+ ! R R]PX                  4      t-] ! R R4      4       t. ! R R]/4      t0 ! R R]04      t1 ! R R]/4      t2] ! R R4      4       t3 ! R R4      t4 ! R R4      t5 ! R R4      t6R R lt7R R  lt8 ! R! R"4      t9 ! R# R$]4      t: ! R% R&4      t;R' t<];! 4       t=R# )(a  
This module introduces CUDA Sanitizer, a tool for detecting synchronization errors between kernels ran on different streams.

It stores information on accesses to tensors to determine if they are synchronized
or not. When enabled in a python program and a possible data race is detected, a
detailed warning will be printed and the program will exit.

It can be enabled either by importing this module and calling
:func:`enable_cuda_sanitizer()` or by exporting the ``TORCH_CUDA_SANITIZER``
environment variable.
N)ÚIterator)Ú	dataclassÚfield)ÚAnyÚTypeVar)Ú_pytree)ÚTorchDispatchModeÚTKÚTVaÚTVbz(new_.*|.*_like)c                   ój   a € ] tR t^5t o ]P
                  ! 4       t]P
                  ! 4       tR tRt	V t
R# )Ú
AccessTypec                ó2   € V \         P                  J d   R # R# )zreading fromz
writing to)r   ÚREAD©Úselfs   &ÚV/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/cuda/_sanitizer.pyÚ__str__ÚAccessType.__str__9   s   € Ø!%¬¯©Ó!8ˆ~ÐJ¸lÐJó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚenumÚautor   ÚWRITEr   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r   5   s'   ø‡ € Ø�9Š9‹;€DØ�IŠI‹K€E÷Kð Kr   r   c                   ó0   a € ] tR t^=t o RtV 3R ltRtV tR# )ÚAccessa/  Stores information about a single access to a tensor by a kernel.

Args:
    type: either AccessType.READ or AccessType.Write.
    seq_num: the sequential number of the kernel performing the access.
    stream: the stream id of the stream executing the kernel.
    operator: the schema of the launched kernel, which lists the
        arguments and return type.
    aliases: the arguments in the schema this access corresponds to.
    is_output: Whether the tensor was an output of the kernel.
    stack_trace: the stack summary object captured during access.
c                ó’   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[;R&   S[;R&   S[S[,          ;R&   S[;R&   S[P                  ;R&   # )é   ÚtypeÚseq_numÚstreamÚoperatorÚaliasesÚ	is_outputÚstack_trace)r   ÚSeqNumÚStreamIdÚstrÚlistÚboolÚ	tracebackÚStackSummary)Úformatr!   s   "€r   Ú__annotate__ÚAccess.__annotate__=   sg   ø‡ ‚ ñ Ññ ñ  �Oñ! ñ" Ññ# ñ$ �Mñ% ñ& ‘#�YÑñ' ñ( �Oñ) ñ* ×'Ñ'Ñ'ò+ r   r   N)r   r   r   r   Ú__doc__Ú__annotate_func__r   r   r    s   @r   r#   r#   =   s   ø‡ € ñ÷ ƒ r   r#   c                   ó   € ] tR t^UtRtRtR# )ÚSynchronizationErrorz1Base class for errors detected by CUDA Sanitizer.r   N)r   r   r   r   r7   r   r   r   r   r:   r:   U   s   † Ý;r   r:   c                   ó<   a € ] tR t^Yt o RtV 3R lR ltR tRtV tR# )ÚUnsynchronizedAccessErrorzIStores information about two unsynchronized accesses to one data pointer.c                óT   <€ V ^8„  d   QhRS[ RS[P                  R,          RS[RS[/# )r%   Údata_ptrÚallocation_stack_traceNÚcurrent_accessÚprevious_access)ÚDataPtrr2   r3   r#   )r4   r!   s   "€r   r5   Ú&UnsynchronizedAccessError.__annotate__\   s>   ø€ ÷ 
/ñ 
/áð
/ñ !*× 6Ñ 6¸Õ =ð
/ñ ð	
/ñ
  ñ
/r   c                ó6   € Wn         W n        W0n        W@n        R # ©N)r>   r?   r@   rA   )r   r>   r?   r@   rA   s   &&&&&r   Ú__init__Ú"UnsynchronizedAccessError.__init__\   s   € ð !ŒØ&<Ô#Ø,ÔØ.Ör   c                óš  a€ R  V3R llp\         P                  ! 4       ;_uu_ 4       oSP                  \        P                  ! RV P
                   RV P                  P                   R24      4       V! V P                  4       SP                  RV P                  P                   R24       V! V P                  4       V P                  '       d=   SP                  RRP                  V P                  P                  4       4       24       MSP                  R	4       SP                  4       uuR
R
R
4       #   + '       g   i     R
# ; i)c                ó$   € V ^8„  d   QhR\         /# )r%   Úaccess)r#   )r4   s   "r   r5   Ú7UnsynchronizedAccessError.__str__.<locals>.__annotate__i   s   € ÷ 
	ñ 
	¤&ñ 
	r   c                 óæ  <€ SP                  V P                   R V P                   24       V P                  '       dU   SP                  RRP	                  V P                  4      ,           4       V P
                  '       d   SP                  R4       V P
                  '       d   SP                  R4       SP                  RRP	                  V P                  P                  4       4       R 24       R# )Ú
z argument(s) z, z, and toz the outputz
With stack trace:
Ú N)Úwriter)   r&   r*   Újoinr+   r,   r4   )rJ   Úmessages   &€r   Úformat_accessÚ8UnsynchronizedAccessError.__str__.<locals>.format_accessi   s«   ø€ Ø�M‰M˜VŸ_™_Ð-¨R°·±¨}Ð=Ô>Ø�~�~ˆ~Ø—‘˜o°·	±	¸&¿.¹.Ó0IÕIÔJØ×#×#Ð#Ø—M‘M *Ô-Ø××ÐØ—‘˜mÔ,Ø�M‰MØ'¨¯©°×0BÑ0B×0IÑ0IÓ0KÓ(LÐ'MÈRÐPör   z„                    ============================
                    CSAN detected a possible data race on tensor with data pointer z&
                    Access by stream z$ during kernel:
                    zPrevious access by stream z during kernel:
z'Tensor was allocated with stack trace:
rN   z&Trace for tensor allocation not found.N)ÚioÚStringIOrO   ÚtextwrapÚdedentr>   r@   r(   rA   r?   rP   r4   Úgetvalue)r   rR   rQ   s   & @r   r   Ú!UnsynchronizedAccessError.__str__h   s  ø€ ÷
	ð 
	ô �[Š[�]Œ]˜gØ�M‰MÜ—’ðTàTX×TaÑTaÐSbð c&Ø&*×&9Ñ&9×&@Ñ&@Ð%Að Bðóôñ ˜$×-Ñ-Ô.à�M‰MØ,¨T×-AÑ-A×-HÑ-HÐ,IÐIZÐ[ôñ ˜$×.Ñ.Ô/à×*×*Ð*Ø—‘Ø>Ø—w‘w˜t×:Ñ:×AÑAÓCÓDÐEðGõð
 —‘ÐFÔGØ×#Ñ#Ó%÷1 �]�]‹]ús   ¨DD9Ä9E
	)r?   r@   r>   rA   N©	r   r   r   r   r7   rF   r   r   r   r    s   @r   r<   r<   Y   s   ø‡ € ÙS÷
/ð 
/÷%&ð %&r   r<   c                   ó<   a € ] tR t^�t o RtV 3R lR ltR tRtV tR# )ÚCUDASanitizerErrorsz4Wrapper class for errors reported by CUDA Sanitizer.c                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r%   Úerrors)r0   r:   )r4   r!   s   "€r   r5   Ú CUDASanitizerErrors.__annotate__“   s   ø€ ÷ ñ ™tÑ$8Õ9ñ r   c                ó   € Wn         R # rE   ©r^   )r   r^   s   &&r   rF   ÚCUDASanitizerErrors.__init__“   s   € ØŽr   c                ó4   € R \        V P                  4       R2# )z	detected z errors)Úlenr^   r   s   &r   r   ÚCUDASanitizerErrors.__str__–   s   € Øœ3˜tŸ{™{Ó+Ð,¨GÐ4Ð4r   ra   NrZ   r    s   @r   r\   r\   �   s   ø‡ € Ù>÷ð ÷5ð 5r   r\   c                   óF   a € ] tR t^št o Rt]! ]R7      tRtV 3R lt	Rt
V tR# )Ú
TensorInfoau  Stores information about a single tensor and recent accesses to it.

Args:
    allocation_stack_trace: the stack summary object captured during tensor
        allocation. Can be ``None`` if the allocation wasn't caught by CSAN.
    reads: list of read accesses to the tensor that were performed since
        the last write.
    write: the last write access to the tensor.
)Údefault_factoryNc                ó~   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[S[,          ;R&   S[R,          ;R&   # )r%   Nr?   ÚreadsrO   )r2   r3   r0   r#   )r4   r!   s   "€r   r5   ÚTensorInfo.__annotate__š   s?   ø‡ ‚ ñ &×2Ñ2°TÕ9Ñ9ñ ñ ‘�<Ñ5ñ ñ �D�=Ñò r   r   )r   r   r   r   r7   r   r0   rj   rO   r8   r   r   r    s   @r   rg   rg   š   s"   ø‡ € ññ  °Ô5€EØ€E÷ ƒ r   rg   c                   óæ   a € ] tR t^«t o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )Ú_TensorsAccessedc                ó   <€ V ^8„  d   QhRR/# ©r%   ÚreturnNr   )r4   r!   s   "€r   r5   Ú_TensorsAccessed.__annotate__¬   s   ø€ ÷ 6ñ 6˜$ñ 6r   c                ó   € / V n         R # rE   ©Úaccessesr   s   &r   rF   Ú_TensorsAccessed.__init__¬   s	   € Ø35ˆŽr   c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r%   r>   rp   N©rB   )r4   r!   s   "€r   r5   rq   ¯   s   ø€ ÷ /ñ /©Wð /¸ñ /r   c                óz   € WP                   9  d+   \        P                  R V4       V P                  VR4       R# R# )z¨Found tensor with pointer: %s, but no matching tensor allocation in the trace. Backfilling the trace now. Perhaps the sanitizer was enabled after some torch operations?N)rt   ÚloggerÚinfoÚcreate_tensor©r   r>   s   &&r   Úensure_tensor_existsÚ%_TensorsAccessed.ensure_tensor_exists¯   s:   € ØŸ=™=Ô(Ü�K‰KðQð ô	ð ×Ñ˜x¨Ö.ñ )r   c                ó$   <€ V ^8„  d   QhRS[ RR/# rw   rx   )r4   r!   s   "€r   r5   rq   ¹   s   ø€ ÷ 	)ñ 	)±Wð 	)Àñ 	)r   c                óx   € WP                   9   d*   \        P                  R V4       V P                  V4       R# R# )zÛFound duplicate tensor allocation in the trace for tensor with pointer: %s. Assuming the trace for tensor deallocation wasn't caught and backfilling it now. Perhaps the sanitizer was enabled after some torch operations?N)rt   rz   r{   Údelete_tensorr}   s   &&r   Úensure_tensor_does_not_existÚ-_TensorsAccessed.ensure_tensor_does_not_exist¹   s8   € Ø—}‘}Ô$Ü�K‰KðQð ôð ×Ñ˜xÖ(ñ %r   c                óL   <€ V ^8„  d   QhRS[ RS[P                  R,          RR/# )r%   r>   r,   Nrp   ©rB   r2   r3   )r4   r!   s   "€r   r5   rq   Ä   s0   ø€ ÷ :ñ :Ùð:Ù.7×.DÑ.DÀtÕ.Kð:à	ñ:r   c                ó6   € \        V4      V P                  V&   R # rE   )rg   rt   ©r   r>   r,   s   &&&r   r|   Ú_TensorsAccessed.create_tensorÄ   s   € ô #-¨[Ó"9ˆ�‰�hÓr   c                ó$   <€ V ^8„  d   QhRS[ RR/# rw   rx   )r4   r!   s   "€r   r5   rq   É   s   ø€ ÷ $ñ $¡gð $°$ñ $r   c                ó    € V P                   V R # rE   rs   r}   s   &&r   r‚   Ú_TensorsAccessed.delete_tensorÉ   s   € Ø�M‰M˜(Ò#r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r%   r>   rp   )rB   r1   )r4   r!   s   "€r   r5   rq   Ì   s   ø€ ÷ 3ñ 3¹'ð 3Ádñ 3r   c                óN   € \        V P                  V,          P                  4      # rE   )r1   rt   rj   r}   s   &&r   Ú!were_there_reads_since_last_writeÚ2_TensorsAccessed.were_there_reads_since_last_writeÌ   s   € Ü�D—M‘M (Õ+×1Ñ1Ó2Ð2r   c                óH   <€ V ^8„  d   QhRS[ RS[P                  R,          /# rw   r†   )r4   r!   s   "€r   r5   rq   Ï   s(   ø€ ÷ >ñ >Ùð>á	×	Ñ	 $Õ	&ñ>r   c                ó<   € V P                   V,          P                  # rE   )rt   r?   r}   s   &&r   Úget_allocation_stack_traceÚ+_TensorsAccessed.get_allocation_stack_traceÏ   s   € ð �}‰}˜XÕ&×=Ñ=Ð=r   c                ó4   <€ V ^8„  d   QhRS[ RS[R,          /# rw   ©rB   r#   )r4   r!   s   "€r   r5   rq   Ô   s   ø€ ÷ -ñ -¡'ð -©f°t­mñ -r   c                ó<   € V P                   V,          P                  # rE   )rt   rO   r}   s   &&r   Ú	get_writeÚ_TensorsAccessed.get_writeÔ   ó   € Ø�}‰}˜XÕ&×,Ñ,Ð,r   c                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# rŽ   )rB   r0   r#   )r4   r!   s   "€r   r5   rq   ×   s   ø€ ÷ -ñ -¡'ð -©d±6­lñ -r   c                ó<   € V P                   V,          P                  # rE   )rt   rj   r}   s   &&r   Ú	get_readsÚ_TensorsAccessed.get_reads×   r›   r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# ©r%   r>   rJ   rp   Nr—   )r4   r!   s   "€r   r5   rq   Ú   s"   ø€ ÷ 5ñ 5¡ð 5±&ð 5¸Tñ 5r   c                ó^   € V P                   V,          P                  P                  V4       R # rE   )rt   rj   Úappend©r   r>   rJ   s   &&&r   Úadd_readÚ_TensorsAccessed.add_readÚ   s   € Ø�‰�hÕ×%Ñ%×,Ñ,¨VÖ4r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# r¡   r—   )r4   r!   s   "€r   r5   rq   Ý   s"   ø€ ÷ +ñ +¡'ð +±6ð +¸dñ +r   c                ód   € W P                   V,          n        . V P                   V,          n        R # rE   )rt   rO   rj   r¤   s   &&&r   Ú	set_writeÚ_TensorsAccessed.set_writeÝ   s"   € Ø(.�‰�hÕÔ%Ø(*ˆ�‰�hÕÖ%r   rs   N)r   r   r   r   rF   r~   rƒ   r|   r‚   r�   r”   r™   rž   r¥   r©   r   r   r    s   @r   rm   rm   «   ss   ø‡ € ÷6ð 6÷/ð /÷	)ð 	)÷:ð :÷
$ð $÷3ð 3÷>ð >÷
-ð -÷-ð -÷5ð 5÷+ö +r   rm   c                   ó.  a € ] tR t^ât o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR # )!ÚStreamSynchronizationsc                ó   <€ V ^8„  d   QhRR/# ro   r   )r4   r!   s   "€r   r5   Ú#StreamSynchronizations.__annotate__ã   s   ø€ ÷ .ñ .˜$ñ .r   c                óZ   € / V n         / V n        / V n        V P                  \        4       R # rE   )Úcurrent_sync_statesÚrecorded_sync_statesÚhost_sync_stateÚcreate_streamÚDEFAULT_STREAM_IDr   s   &r   rF   ÚStreamSynchronizations.__init__ã   s)   € ØKMˆÔ ØKMˆÔ!Ø79ˆÔØ×ÑÔ,Ö-r   c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r%   r(   rp   N©r.   )r4   r!   s   "€r   r5   r®   é   s   ø€ ÷ 'ñ '©Hð '¸ñ 'r   c                óx   € WP                   9  d*   \        P                  R V4       V P                  V4       R# R# )z¡Found Stream with id: %s, but no matching stream creation in the trace. Backfilling the trace now. Perhaps the sanitizer was enabled after some torch operations?N)r°   rz   r{   r³   ©r   r(   s   &&r   Ú_ensure_stream_existsÚ,StreamSynchronizations._ensure_stream_existsé   s:   € Ø×1Ñ1Ô1Ü�K‰KðQð ô	ð ×Ñ˜vÖ&ñ 2r   c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r%   Úeventrp   N©ÚEventId)r4   r!   s   "€r   r5   r®   ó   s   ø€ ÷ %ñ %©'ð %°dñ %r   c                óx   € WP                   9  d*   \        P                  R V4       V P                  V4       R# R# )zŸFound Event with id: %s, but no matching event creation in the trace. Backfilling the trace now. Perhaps the sanitizer was enabled after some torch operations?N)r±   rz   r{   Úcreate_event©r   r¿   s   &&r   Ú_ensure_event_existsÚ+StreamSynchronizations._ensure_event_existsó   s:   € Ø×1Ñ1Ô1Ü�K‰KðQð ô	ð ×Ñ˜eÖ$ñ 2r   c                ó$   <€ V ^8„  d   QhRS[ RR/# r¾   rÀ   )r4   r!   s   "€r   r5   r®   ý   s   ø€ ÷ 	%ñ 	%±'ð 	%¸dñ 	%r   c                óx   € WP                   9   d*   \        P                  R V4       V P                  V4       R# R# )zÍFound duplicate event creation in the trace for event with id: %s. Assuming the trace for event deletion wasn't caught and backfilling it now. Perhaps the sanitizer was enabled after some torch operations?N)r±   rz   r{   Údelete_eventrÄ   s   &&r   Ú_ensure_event_does_not_existÚ3StreamSynchronizations._ensure_event_does_not_existý   s:   € Ø×-Ñ-Ô-Ü�K‰KðQð ôð ×Ñ˜eÖ$ñ .r   c                ó$   <€ V ^8„  d   QhRS[ RR/# r·   r¸   )r4   r!   s   "€r   r5   r®     s   ø€ ÷ 
Kñ 
K¡Hð 
K°ñ 
Kr   c                óÂ   € WP                   9   d   \        P                  R V4       R# ^ V P                  V&   V P                  P	                  4       V P                   V&   R# )z‹Found duplicate Stream creation in the trace for Stream with id: %s. PyTorch Streams are only created once, so this trace entry is ignored.N)r°   rz   r{   r²   Úcopyrº   s   &&r   r³   Ú$StreamSynchronizations.create_stream  sU   € Ø×-Ñ-Ô-Ü�K‰Kð*ð ö	ð ,-ˆD× Ñ  Ñ(Ø/3×/CÑ/C×/HÑ/HÓ/JˆD×$Ñ$ VÓ,r   c                ó$   <€ V ^8„  d   QhRS[ RR/# r¾   rÀ   )r4   r!   s   "€r   r5   r®     s   ø€ ÷ .ñ .¡'ð .¨dñ .r   c                óF   € V P                  V4       / V P                  V&   R # rE   )rÊ   r±   rÄ   s   &&r   rÃ   Ú#StreamSynchronizations.create_event  s    € Ø×)Ñ)¨%Ô0Ø+-ˆ×!Ñ! %Ó(r   c                ó$   <€ V ^8„  d   QhRS[ RR/# r¾   rÀ   )r4   r!   s   "€r   r5   r®     s   ø€ ÷ -ñ -¡'ð -¨dñ -r   c                óB   € V P                  V4       V P                  V R # rE   )rÅ   r±   rÄ   s   &&r   rÉ   Ú#StreamSynchronizations.delete_event  s   € Ø×!Ñ! %Ô(Ø×%Ñ% eÒ,r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r%   r(   r'   rp   N)r.   r-   )r4   r!   s   "€r   r5   r®     s"   ø€ ÷ ;ñ ;¡Xð ;¹ð ;À4ñ ;r   c                óR   € V P                  V4       W P                  V,          V&   R # rE   )r»   r°   )r   r(   r'   s   &&&r   Úupdate_seq_numÚ%StreamSynchronizations.update_seq_num  s#   € Ø×"Ñ" 6Ô*Ø3:× Ñ  Õ(¨Ó0r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# ©r%   r¿   r(   rp   N©rÁ   r.   )r4   r!   s   "€r   r5   r®      s'   ø€ ÷ Sñ S¡'ð S±8ð SÀñ Sr   c                ó¦   € V P                  V4       V P                  V4       V P                  V,          P                  4       V P                  V&   R # rE   )rÅ   r»   r°   rÎ   r±   ©r   r¿   r(   s   &&&r   Úrecord_stateÚ#StreamSynchronizations.record_state   sB   € Ø×!Ñ! %Ô(Ø×"Ñ" 6Ô*Ø+/×+CÑ+CÀFÕ+K×+PÑ+PÓ+Rˆ×!Ñ! %Ó(r   c                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RR/# )r%   ÚstateÚotherrp   N)Údictr.   r-   )r4   r!   s   "€r   r5   r®   %  s>   ø€ ÷ @ñ @Ù™(¡FÐ*Õ+ð@Ù48¹Á6Ð9IÕ4Jð@à	ñ@r   c                ót   € VP                  4        F#  w  r4\        VP                  VR4      V4      W&   K%  	  R# )é   Néÿÿÿÿ)ÚitemsÚmaxÚget)r   râ   rã   r(   r'   s   &&&  r   Ú_state_wait_for_otherÚ,StreamSynchronizations._state_wait_for_other%  s/   € ð  %Ÿ{™{ž}‰OˆFÜ §	¡	¨&°"Ó 5°wÓ?ˆE‹Mó  -r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r%   r(   r¿   rp   N)r.   rÁ   )r4   r!   s   "€r   r5   r®   +  s"   ø€ ÷ 
ñ 
©Hð 
¹Wð 
Èñ 
r   c                ó²   € V P                  V4       V P                  V4       V P                  V P                  V,          V P                  V,          4       R # rE   )r»   rÅ   rë   r°   r±   )r   r(   r¿   s   &&&r   Ústream_wait_for_eventÚ,StreamSynchronizations.stream_wait_for_event+  sG   € Ø×"Ñ" 6Ô*Ø×!Ñ! %Ô(Ø×"Ñ"Ø×$Ñ$ VÕ,¨d×.GÑ.GÈÕ.Nö	
r   c                ó$   <€ V ^8„  d   QhRS[ RR/# r¾   rÀ   )r4   r!   s   "€r   r5   r®   2  s   ø€ ÷ 
ñ 
±ð 
¸Dñ 
r   c                óÊ   € V P                  V4       V P                   F  pV P                  W!4       K  	  V P                  V P                  V P
                  V,          4       R # rE   )rÅ   r°   rï   rë   r²   r±   rÞ   s   && r   Úall_streams_wait_for_eventÚ1StreamSynchronizations.all_streams_wait_for_event2  sT   € Ø×!Ñ! %Ô(Ø×.Ô.ˆFØ×&Ñ& vÖ5ñ /ð 	×"Ñ"Ø× Ñ  $×";Ñ";¸EÕ"Bö	
r   c                ó$   <€ V ^8„  d   QhRS[ RR/# r·   r¸   )r4   r!   s   "€r   r5   r®   ;  s   ø€ ÷ 
ñ 
±(ð 
¸tñ 
r   c                ó  € V P                  V4       V P                  P                  4        F%  pV P                  W P                  V,          4       K'  	  V P                  V P                  V P                  V,          4       R # rE   )r»   r°   Úvaluesrë   r²   ©r   r(   râ   s   && r   Úall_streams_wait_for_streamÚ2StreamSynchronizations.all_streams_wait_for_stream;  sh   € Ø×"Ñ" 6Ô*Ø×-Ñ-×4Ñ4Ö6ˆEØ×&Ñ& u×.FÑ.FÀvÕ.NÖOñ 7ð 	×"Ñ"Ø× Ñ  $×":Ñ":¸6Õ"Bö	
r   c                ó   <€ V ^8„  d   QhRR/# ro   r   )r4   r!   s   "€r   r5   r®   D  s   ø€ ÷ Dñ D $ñ Dr   c                óî   € V P                   P                  4        F  w  rW!,          V P                  V&   K  	  V P                   P                  4        F  pV P	                  W P                  4       K   	  R # rE   )r°   rè   r²   r÷   rë   rø   s   &  r   Úsync_all_streamsÚ'StreamSynchronizations.sync_all_streamsD  s^   € Ø!×5Ñ5×;Ñ;Ö=‰MˆFØ+0­=ˆD× Ñ  Ó(ñ >ð ×-Ñ-×4Ñ4Ö6ˆEØ×&Ñ& u×.BÑ.BÖCó 7r   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[ RS[/# )r%   Úcurrent_streamr'   Úother_streamrp   )r.   r-   r1   )r4   r!   s   "€r   r5   r®   K  s3   ø€ ÷ Yñ YÙ&ðYÙ17ðYÙGOðYá	ñYr   c                ó�   € V P                  V4       V P                  V4       W P                  V,          P                  VR4      8*  # )ræ   rç   )r»   r°   rê   )r   r   r'   r  s   &&&&r   Úis_ordered_afterÚ'StreamSynchronizations.is_ordered_afterK  sB   € ð 	×"Ñ" >Ô2Ø×"Ñ" <Ô0Ø×2Ñ2°>ÕB×FÑFÀ|ÐUWÓXÑXÐXr   )r°   r²   r±   N)r   r   r   r   rF   r»   rÅ   rÊ   r³   rÃ   rÉ   rØ   rß   rë   rï   ró   rù   rý   r  r   r   r    s   @r   r¬   r¬   â   s¥   ø‡ € ÷.ð .÷'ð '÷%ð %÷	%ð 	%÷
Kð 
K÷.ð .÷-ð -÷;ð ;÷Sð S÷
@ð @÷
ð 
÷
ð 
÷
ð 
÷Dð D÷Yö Yr   r¬   c                   óü   a € ] tR tRt o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )ÚEventHandleriS  zØAnalyzes CSAN trace for synchronization errors.

Stores information on each stream's synchronizations with other streams as well
as tensor accesses to determine whether a given kernel launch might cause a
data race.
c                ó   <€ V ^8„  d   QhRR/# ro   r   )r4   r!   s   "€r   r5   ÚEventHandler.__annotate__[  s   ø€ ÷ !ñ !˜$ñ !r   c                óP   € \        4       V n        \        4       V n        ^ V n        R# )é    N)rm   Útensors_accessedr¬   Úsyncsr'   r   s   &r   rF   ÚEventHandler.__init__[  s   € Ü 0Ó 2ˆÔÜ+Ó-ˆŒ
Ø ˆŽr   c                óª   <€ V ^8„  d   QhRS[ RS[S[,          RS[S[,          RS[S[,          RS[RS[S[S[S[,          3,          RS[S[,          /# )r%   r(   Ú	read_onlyÚ
read_writeÚoutputsr)   Útensor_aliasesrp   )r.   ÚsetrB   r/   rä   Úintr0   r:   )r4   r!   s   "€r   r5   r  `  sy   ø€ ÷ Hñ HáðHñ ‘w•<ðHñ ™•Lð	Hñ
 ‘W•ðHñ ðHñ ™S¡$¡s¥)˜^Õ,ðHñ 
Ñ"Õ	#ñHr   c           
     ó2  a a€ R  VV 3R llp. oS ;P                   ^,          un         S P                  P                  VS P                   4       \        P                  P                  \        P                  ! \        P                  ! 4       4      RR7      pVP                  4        V FŒ  p	S P                  P                  V	4       \        \        P                  S P                   VVWi,          W”9   V4      p
V! WšS P                  P                  V	4      4       S P                  P!                  Wš4       KŽ  	  V FÙ  p	S P                  P                  V	4       \        \        P"                  S P                   VVWi,          W”9   V4      p
S P                  P%                  V	4      '       d-   S P                  P'                  V	4       F  pV! WšV4       K  	  M"V! WšS P                  P                  V	4      4       S P                  P)                  Wš4       KÛ  	  S# )c                óN   € V ^8„  d   QhR\         R\        R\        R,          RR/# )r%   r>   r@   rA   Nrp   r—   )r4   s   "r   r5   Ú8EventHandler._handle_kernel_launch.<locals>.__annotate__i  s1   € ÷ 	ñ 	Üð	Ü/5ð	ÜHNÐQUÍð	àñ	r   c                 ó  <€ Vf   R # SP                   P                  VP                  VP                  VP                  4      '       g9   SP	                  \        V SP                  P                  V 4      VV4      4       R # R # rE   )r  r  r(   r'   r£   r<   r  r”   )r>   r@   rA   Ú
error_listr   s   &&&€€r   Úcheck_conflictÚ:EventHandler._handle_kernel_launch.<locals>.check_conflicti  sx   ø€ ð Ò&ÙØ—:‘:×.Ñ.Ø×%Ñ% ×'>Ñ'>À×@VÑ@V÷ò ð ×!Ñ!Ü-Ø Ø×-Ñ-×HÑHÈÓRØ&Ø'ó	öñr   F©Úlookup_lines)r'   r  rØ   r2   r3   ÚextractÚ
walk_stackÚinspectÚcurrentframeÚreverser  r~   r#   r   r   r™   r¥   r   r�   rž   r©   )r   r(   r  r  r  r)   r  r  r,   r>   r@   rA   r  s   f&&&&&&     @r   Ú_handle_kernel_launchÚ"EventHandler._handle_kernel_launch`  sÉ  ù€ ÷	ñ 	ð" 24ˆ
Ø�Š˜Õ�Ø�
‰
×!Ñ! &¨$¯,©,Ô7Ü×,Ñ,×4Ñ4Ü× Ò ¤×!5Ò!5Ó!7Ó8Àuð 5ó 
ˆð
 	×ÑÔã!ˆHØ×!Ñ!×6Ñ6°xÔ@Ü#Ü—‘Ø—‘ØØØÕ(ØÑ#ØóˆNñ Ø¨$×*?Ñ*?×*IÑ*IÈ(Ó*Sôð ×!Ñ!×*Ñ*¨8ÖDñ "ó  #ˆHØ×!Ñ!×6Ñ6°xÔ@Ü#Ü× Ñ Ø—‘ØØØÕ(ØÑ#ØóˆNð ×$Ñ$×FÑFÀx×PÒPØ'+×'<Ñ'<×'FÑ'FÀxÖ'P�OÙ" 8¸_ÖMò (Qñ Ø¨d×.CÑ.C×.MÑ.MÈhÓ.Wôð ×!Ñ!×+Ñ+¨HÖEñ% #ð( Ðr   c                ó$   <€ V ^8„  d   QhRS[ RR/# r¾   rÀ   )r4   r!   s   "€r   r5   r  ª  ó   ø€ ÷ 'ñ '©Gð '¸ñ 'r   c                ó<   € V P                   P                  V4       R # rE   )r  rÃ   rÄ   s   &&r   Ú_handle_event_creationÚ#EventHandler._handle_event_creationª  ó   € Ø�
‰
×Ñ Ö&r   c                ó$   <€ V ^8„  d   QhRS[ RR/# r¾   rÀ   )r4   r!   s   "€r   r5   r  ­  r&  r   c                ó<   € V P                   P                  V4       R # rE   )r  rÉ   rÄ   s   &&r   Ú_handle_event_deletionÚ#EventHandler._handle_event_deletion­  r*  r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# rÛ   rÜ   )r4   r!   s   "€r   r5   r  °  s"   ø€ ÷ /ñ /©'ð /¹8ð /Èñ /r   c                ó<   € V P                   P                  W4       R # rE   )r  rß   rÞ   s   &&&r   Ú_handle_event_recordÚ!EventHandler._handle_event_record°  s   € Ø�
‰
×Ñ Ö.r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# rÛ   rÜ   )r4   r!   s   "€r   r5   r  ³  s"   ø€ ÷ 8ñ 8©ð 8¹ð 8Àdñ 8r   c                ó<   € V P                   P                  W!4       R # rE   )r  rï   rÞ   s   &&&r   Ú_handle_event_waitÚEventHandler._handle_event_wait³  s   € Ø�
‰
×(Ñ(¨Ö7r   c                ó$   <€ V ^8„  d   QhRS[ RR/# rw   rx   )r4   r!   s   "€r   r5   r  ¶  s   ø€ ÷ 
ñ 
±'ð 
¸dñ 
r   c                ó$  € V P                   P                  V4       \        P                  P	                  \        P
                  ! \        P                  ! 4       4      R R7      pVP                  4        V P                   P                  VV4       R# )Fr  N)
r  rƒ   r2   r3   r  r  r   r!  r"  r|   rˆ   s   && r   Ú_handle_memory_allocationÚ&EventHandler._handle_memory_allocation¶  sr   € Ø×Ñ×:Ñ:¸8ÔDÜ×,Ñ,×4Ñ4Ü× Ò ¤×!5Ò!5Ó!7Ó8Àuð 5ó 
ˆð
 	×ÑÔØ×Ñ×+Ñ+ØØö	
r   c                ó$   <€ V ^8„  d   QhRS[ RR/# rw   rx   )r4   r!   s   "€r   r5   r  Ã  s   ø€ ÷ 6ñ 6±Gð 6Àñ 6r   c                ór   € V P                   P                  V4       V P                   P                  V4       R # rE   )r  r~   r‚   r}   s   &&r   Ú_handle_memory_deallocationÚ(EventHandler._handle_memory_deallocationÃ  s*   € Ø×Ñ×2Ñ2°8Ô<Ø×Ñ×+Ñ+¨HÖ5r   c                ó$   <€ V ^8„  d   QhRS[ RR/# r·   r¸   )r4   r!   s   "€r   r5   r  Ç  s   ø€ ÷ )ñ )©hð )¸4ñ )r   c                ó<   € V P                   P                  V4       R # rE   )r  r³   rº   s   &&r   Ú_handle_stream_creationÚ$EventHandler._handle_stream_creationÇ  s   € Ø�
‰
× Ñ  Ö(r   c                ó   <€ V ^8„  d   QhRR/# ro   r   )r4   r!   s   "€r   r5   r  Ê  s   ø€ ÷ &ñ &°ñ &r   c                ó:   € V P                   P                  4        R # rE   )r  rý   r   s   &r   Ú_handle_device_synchronizationÚ+EventHandler._handle_device_synchronizationÊ  s   € Ø�
‰
×#Ñ#Ö%r   c                ó$   <€ V ^8„  d   QhRS[ RR/# r·   r¸   )r4   r!   s   "€r   r5   r  Í  s   ø€ ÷ 7ñ 7±Xð 7À$ñ 7r   c                ó<   € V P                   P                  V4       R # rE   )r  rù   rº   s   &&r   Ú_handle_stream_synchronizationÚ+EventHandler._handle_stream_synchronizationÍ  s   € Ø�
‰
×.Ñ.¨vÖ6r   c                ó$   <€ V ^8„  d   QhRS[ RR/# r¾   rÀ   )r4   r!   s   "€r   r5   r  Ð  s   ø€ ÷ 5ñ 5±7ð 5¸tñ 5r   c                ó<   € V P                   P                  V4       R # rE   )r  ró   rÄ   s   &&r   Ú_handle_event_synchronizationÚ*EventHandler._handle_event_synchronizationÐ  s   € Ø�
‰
×-Ñ-¨eÖ4r   )r'   r  r  N)r   r   r   r   r7   rF   r#  r(  r-  r1  r5  r9  r=  rA  rE  rI  rM  r   r   r    s   @r   r  r  S  s…   ø‡ € ñ÷!ð !÷
Hð H÷T'ð '÷'ð '÷/ð /÷8ð 8÷
ð 
÷6ð 6÷)ð )÷&ð &÷7ð 7÷5ö 5r   r  c          
      óÂ   € V ^8„  d   QhR\         \        \        3,          R\         \        \        3,          R\        \
        \        \        \        3,          ,          /# )r%   ÚaÚbrp   )rä   r	   r
   r   r   Útuple)r4   s   "r   r5   r5   Ô  sA   € ÷ %ñ %”$”rœ3�w•-ð %¤D¬¬S¨¥Mð %´h¼uÄRÌÌcÀ\Õ?RÕ6Sñ %r   c              #   óh   "  € V P                  4        F  w  r#W!9   g   K  W#W,          3x € K  	  R # 5irE   )rè   )rP  rQ  ÚargÚvalues   &&  r   Ú
zip_by_keyrV  Ô  s)   é € Ø—g‘g–i‰
ˆØŽ8Ø˜a�fÐ$Ô$ó  ùs   ‚2 2c                óä   € V ^8„  d   QhR\         P                  R\        \        R3,          R\        \
        \        3,          R\        \        \         P                  \        3,          ,          /# )r%   ÚschemaÚargs.Úkwargsrp   )ÚtorchÚFunctionSchemarR  r   rä   r/   r   ÚArgument)r4   s   "r   r5   r5   Ú  sU   € ÷ 	 ñ 	 Ü× Ñ ð	 Ü(-¬c°3¨h­ð	 ÜAEÄcÌ3ÀhÅð	 äŒe”E—N‘N¤CÐ'Õ(Õ)ñ	 r   c              #   ó  "  € V P                   R \        V4       pV P                   \        V4      R   Uu/ uF  qDP                  VbK  	  pp\        W14       R j  x€L
  \	        WR4       F  w  rgpWx3x € K  	  R # u upi  L%5irE   )Ú	argumentsrd   ÚnameÚziprV  )	rX  rY  rZ  Úschema_argsrT  Úschema_kwargsÚ_ÚargumentrU  s	   &&&      r   Úzip_argumentsrf  Ú  s   é € ð ×"Ñ" ;¤S¨£YÐ/€KØ.4×.>Ñ.>¼sÀ4»y¸{Ñ.KÓLÑ.K s—X‘X˜s’]Ñ.K€MÐLä�;Ó%×%Ð%ä(¨Ö?Ñˆ�UØÐÔó @ùò	 Má%ùs   ‚3BµA;Á
BÁB Á&Bc                   ól   a € ] tR tRt o V 3R lR ltRV 3R lR lltV 3R lR ltV 3R	 lR
 ltRtV t	R# )ÚArgumentHandleriæ  c                ó   <€ V ^8„  d   QhRR/# ro   r   )r4   r!   s   "€r   r5   ÚArgumentHandler.__annotate__ç  s   ø€ ÷ +ñ +˜$ñ +r   c                ón   € \        4       V n        \        4       V n        / V n        \        4       V n        R # rE   )r  Údataptrs_readÚdataptrs_writtenr  r  r   s   &r   rF   ÚArgumentHandler.__init__ç  s'   € Ü+.«5ˆÔÜ.1«eˆÔØ8:ˆÔÜ%(£UˆŽr   Nc                óJ   <€ V ^8„  d   QhRS[ RS[RS[RS[R,          RS[RR/# )r%   rU  Úis_writeÚmetadata_onlyr`  Nr+   rp   )r   r1   r/   )r4   r!   s   "€r   r5   rj  í  sK   ø€ ÷ +ñ +áð+ñ ð+ñ ð	+ñ
 �D�jð+ñ ð+ð 
ñ+r   c                ó0  € \        V\        P                  4      '       dö   VP                  '       dâ   VP	                  4       '       d   VP	                  4       M
\        V4      pV'       d   V P                  P                  V4       M#V'       g   V P                  P                  V4       V P                  P                  V. 4       Ve#   V P                  V,          P                  V4       V'       d   V P                  P                  V4       R # R # R # R # rE   )Ú
isinstancer[  ÚTensorÚis_cudar>   Úidrm  Úaddrl  r  Ú
setdefaultr£   r  )r   rU  rp  rq  r`  r+   r>   s   &&&&&& r   Ú_handle_argumentÚ ArgumentHandler._handle_argumentí  sÂ   € ô �eœUŸ\™\×*Ò*¨u¯}¯}¨}ð ,1¯>©>×+;Ò+;�u—~‘~Ô'ÄÀEÃˆHßØ×%Ñ%×)Ñ)¨(Õ3ß"Ø×"Ñ"×&Ñ& xÔ0à×Ñ×*Ñ*¨8°RÔ8ØÒØ×#Ñ# HÕ-×4Ñ4°TÔ:ßØ—‘× Ñ  Ö*ñ ñ 0=Ñ*r   c          
      ót   <€ V ^8„  d   QhRS[ P                  RS[S[R3,          RS[S[S[3,          RS[RR/# )r%   rX  rY  .rZ  Ú
is_factoryrp   N)r[  r\  rR  r   rä   r/   r1   )r4   r!   s   "€r   r5   rj    sS   ø€ ÷ ñ á×$Ñ$ðñ ‘C˜�H�oðñ ‘S™#�X•ð	ñ ðð 
ñr   c          
     ó„  € \        WV4       F¯  w  rVVP                  R J;'       d    VP                  P                  pT;'       g2    VP                  R J;'       d    VP                  P                  '       * p\        P                  ! \
        P                  ! V P                  VVP                  VR7      V4       K±  	  R # )N)rp  r`  rq  )	rf  Ú
alias_inforp  ÚpytreeÚ	tree_map_Ú	functoolsÚpartialry  r`  )	r   rX  rY  rZ  r|  re  rU  rp  rq  s	   &&&&$    r   Úparse_inputsÚArgumentHandler.parse_inputs  s®   € ô  -¨V¸6ÖB‰OˆHØ×*Ñ*°$Ð6×WÐW¸8×;NÑ;N×;WÑ;WˆHð '÷ ð Ø×#Ñ#¨4Ð/×TÐT¸×8KÑ8K×8TÑ8TÔ4Tð ô ×ÒÜ×!Ò!Ø×)Ñ)Ø%Ø!Ÿ™Ø"/ô	ð öó  Cr   c                óD   <€ V ^8„  d   QhRS[ P                  RS[RS[RR/# )r%   rX  r  r|  rp   N)r[  r\  r   r1   )r4   r!   s   "€r   r5   rj    s3   ø€ ÷ ñ Ù×*Ñ*ðÙ58ðÙIMðà	ñr   c          
     ó8  € \        VP                  V34       F~  w  rET;'       g2    VP                  R J;'       d    VP                  P                  '       * p\        P
                  ! \        P                  ! V P                  V'       * RVR7      V4       K€  	  R # )NT)rp  r+   rq  )	ra  Úreturnsr~  rp  r  r€  r�  r‚  ry  )r   rX  r  r|  ÚresrU  rq  s   &&&$   r   Úparse_outputsÚArgumentHandler.parse_outputs  sˆ   € ô ˜fŸn™n¨w¨jÖ9‰JˆCØ&÷ ð Ø—‘ dÐ*×JÐJ°3·>±>×3JÑ3JÔ/Jð ô ×ÒÜ×!Ò!Ø×)Ñ)Ø!.Ô.Ø"Ø"/ô	ð öó	 :r   )rl  rm  r  r  ©NF)
r   r   r   r   rF   ry  rƒ  r‰  r   r   r    s   @r   rh  rh  æ  s-   ø‡ € ÷+ð +÷+ò +÷.ð ÷2ö r   rh  c                   ó<   a € ] tR tRt o V 3R lR ltRR ltRtV tR# )ÚCUDASanitizerDispatchModei/  c                ó   <€ V ^8„  d   QhRR/# ro   r   )r4   r!   s   "€r   r5   Ú&CUDASanitizerDispatchMode.__annotate__0  s   ø€ ÷  
ñ  
˜$ñ  
r   c                ó¨  € \        4       V n        \        P                  P	                  4        \
        P                  ! V P                  P                  4       \
        P                  ! V P                  P                  4       \
        P                  ! V P                  P                  4       \
        P                  ! V P                  P                  4       \
        P                  ! V P                  P                  4       \
        P                   ! V P                  P"                  4       \
        P$                  ! V P                  P&                  4       \
        P(                  ! V P                  P*                  4       \
        P,                  ! V P                  P.                  4       \
        P0                  ! V P                  P2                  4       R # rE   )r  Úevent_handlerr[  Ú_CÚ_activate_gpu_traceÚ	gpu_traceÚ$register_callback_for_event_creationr(  Ú$register_callback_for_event_deletionr-  Ú"register_callback_for_event_recordr1  Ú register_callback_for_event_waitr5  Ú'register_callback_for_memory_allocationr9  Ú)register_callback_for_memory_deallocationr=  Ú%register_callback_for_stream_creationrA  Ú,register_callback_for_device_synchronizationrE  Ú,register_callback_for_stream_synchronizationrI  Ú+register_callback_for_event_synchronizationrM  r   s   &r   rF   Ú"CUDASanitizerDispatchMode.__init__0  sP  € Ü)›^ˆÔÜ�‰×$Ñ$Ô&Ü×6Ò6Ø×Ñ×5Ñ5ô	
ô 	×6Ò6Ø×Ñ×5Ñ5ô	
ô 	×4Ò4Ø×Ñ×3Ñ3ô	
ô 	×2Ò2Ø×Ñ×1Ñ1ô	
ô 	×9Ò9Ø×Ñ×8Ñ8ô	
ô 	×;Ò;Ø×Ñ×:Ñ:ô	
ô 	×7Ò7Ø×Ñ×6Ñ6ô	
ô 	×>Ò>Ø×Ñ×=Ñ=ô	
ô 	×>Ò>Ø×Ñ×=Ñ=ô	
ô 	×=Ò=Ø×Ñ×<Ñ<ö	
r   Nc                óÜ  € Vf   / pV\         P                  P                  J d	   V! V/ VB # \        \        P                  VP                  P                  4      4      p\        4       pVP                  VP                  W4VR7       V! V/ VB pVP                  VP                  WuR7       V P                  P                  \        P                  P                  4       P                   VP"                  VP$                  ,
          VP$                  VP&                  VP                  VP(                  4      pV'       d0   V F  p	\+        V	\,        P.                  R7       K   	  \1        V4      hV# )N)r|  )Úfile)ÚatenÚrecord_streamÚdefaultr1   ÚFACTORY_FUNCTION_REGEXÚmatchÚ_schemar`  rh  rƒ  r‰  r‘  r#  r[  Úcudar   Úcuda_streamrl  rm  r  r  ÚprintÚsysÚstderrr\   )
r   ÚfuncÚtypesrY  rZ  r|  Úargument_handlerr  r^   Úerrors
   &&&&&     r   Ú__torch_dispatch__Ú,CUDASanitizerDispatchMode.__torch_dispatch__R  s*  € ØŠ>ØˆFð ”4×%Ñ%×-Ñ-Ó-Ù˜Ð( Ñ(Ð(äÔ0×6Ñ6°t·|±|×7HÑ7HÓIÓJˆ
ä*Ó,ÐØ×%Ñ% d§l¡l°DÈZÐ%ÔXá˜Ð' Ñ'ˆà×&Ñ& t§|¡|°WÐ&ÔTØ×#Ñ#×9Ñ9Ü�J‰J×%Ñ%Ó'×3Ñ3Ø×*Ñ*Ð-=×-NÑ-NÕNØ×-Ñ-Ø×$Ñ$Ø�L‰LØ×+Ñ+ó
ˆ÷ Û�Ü�e¤#§*¡*×-ñ  ä% fÓ-Ð-àˆr   )r‘  )r   N)r   r   r   r   rF   r±  r   r   r    s   @r   r�  r�  /  s   ø‡ € ÷ 
ð  
÷Dò r   r�  c                   óH   a € ] tR tRt o RtV 3R lR ltR tR tR tRt	V t
R	# )
ÚCUDASanitizerir  au  Manages the lifetime of a CUDASanitizer dispatch mode object.

The CUDASanitizer class wraps the entering/exiting functions of the dispatch mode
context manager in the enable function/destructor, respectively. This is to
explicitly set the lifetime of the dispatch mode object to that of the application.
This approach was deemed more elegant than using the atexit module.
c                ó   <€ V ^8„  d   QhRR/# ro   r   )r4   r!   s   "€r   r5   ÚCUDASanitizer.__annotate__{  s   ø€ ÷ ñ ˜$ñ r   c                ó2   € \        4       V n        R V n        R# )FN)r�  ÚdispatchÚenabledr   s   &r   rF   ÚCUDASanitizer.__init__{  s   € Ü1Ó3ˆŒØˆŽr   c                óH   € V P                   P                  4        R V n        R# )TN)r¸  Ú	__enter__r¹  r   s   &r   ÚenableÚCUDASanitizer.enable  s   € Ø�‰×ÑÔ!ØˆŽr   c                óN   € V P                   P                  R R R 4       RV n        R # r‹  )r¸  Ú__exit__r¹  r   s   &r   ÚdisableÚCUDASanitizer.disableƒ  s   € Ø�‰×Ñ˜t T¨4Ô0ØˆŽr   c                óœ   € \         eD   \         P                  ! 4       '       g'   V P                  '       d   V P                  4        R # R # R # R # rE   )r«  Úis_finalizingr¹  rÁ  r   s   &r   Ú__del__ÚCUDASanitizer.__del__‡  s4   € ô ŠO¤c×&7Ò&7×&9Ò&9¸t¿|¿|¸|Ø�L‰LŽNñ @LÑ&9‰Or   )r¸  r¹  N)r   r   r   r   r7   rF   r½  rÁ  rÅ  r   r   r    s   @r   r´  r´  r  s(   ø‡ € ñ÷ð òò÷	ð 	r   r´  c                 ó.   € \         P                  4        R# )aO  Enable CUDA Sanitizer.

The sanitizer will begin to analyze low-level CUDA calls invoked by torch functions
for synchronization errors. All data races found will be printed to the standard
error output along with stack traces of suspected causes. For best results, the
sanitizer should be enabled at the very beginning of the program.
N)Úcuda_sanitizerr½  r   r   r   Úenable_cuda_sanitizerrÉ  “  s   € ô ×ÑÖr   )>r7   r   r�  r   rT   ÚloggingÚrer«  rV   r2   Úcollections.abcr   Údataclassesr   r   Útypingr   r   r[  Útorch.cuda._gpu_tracer¨  Ú
_gpu_tracer”  Útorch.utilsr   r  Útorch.utils._python_dispatchr   Úopsr¢  r´   r	   r
   r   r  rB   r.   rÁ   r-   Ú	getLoggerr   rz   Úcompiler¥  ÚEnumr   r#   Ú	Exceptionr:   r<   r\   rg   rm   r¬   r  rV  rf  rh  r�  r´  rÉ  rÈ  r   r   r   Ú<module>rØ     sv  ðñ
ó Û Û Û 	Û Û 	Û 
Û Û Ý $ß (ß ã ß )Ð )Ý )Ý :ð ‡y�y‡~�~€àÐ áˆTƒ]€Ùˆeƒn€Ùˆeƒn€à
€Ø€Ø
€Ø	€à	×	Ò	˜8Ó	$€ð ŸšÐ$6Ó7Ð ôK�—‘ô Kð ÷(ð (ó ð(ô.<˜9ô <ô4&Ð 4ô 4&ôn5˜)ô 5ð ÷ ð  ó ð ÷ 4+ñ 4+÷nnYñ nY÷b~5ñ ~5õB%õ	 ÷Fñ FôR@Ð 1ô @÷Fñ òBñ “‚r   