§
    �ŠtjTB  ã                   ó@  — d dl Z d dlZd dlmZmZ d dlZd dlZd dlZd dlm	Z	 d dl
Z
d dlmZmZ d dlZd dlZ ej        e¦  «        Zd„ Zd„ Z e¦   «         Zd„ Zeee ed¦  «        eefZdZd	„ Z G d
„ de¦  «        Z dddœd„Z!d„ Z"d„ Z#d„ Z$d„ Z%dZ&dZ'd„ Z(d„ Z)d„ Z*dS )é    N)ÚAnyÚ
NamedTuple)ÚNamedTemporaryFile)Ú_frames_fmtÚ_block_extrac                 óœ   ‡ ‡‡— dŠdˆfd„}t          j        |¦  «         dˆˆ fd„Št          j                             ‰¦  «         dˆfd„}|S )NTÚreturnc                  ó   •— dŠ d S )NF© )Úenableds   €úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/utils/viz/_cycles.pyÚdisablez observe_garbage.<locals>.disable   s   ø€ ð ˆˆˆó    c                 óØ   •‡‡‡— ‰sd S | dk    r t          j        t           j        ¦  «         d S | dk    r5t          j        ¦   «         ŠdgŠˆˆˆˆˆfd„}t          j        |¦  «         d S d S )NÚstartÚstopFc                  ó,  •— ‰d         sd‰d<   nút          j        ‰¦  «         dŠ	 ‰d         dk    rt          j        ¦   «           ‰t          j        ¦  «         t          j                             ¦   «          t          j        d¦  «         t          j         	                    ¦   «         }t          j        ¦   «          t          j         	                    ¦   «         }||k    rt                               d||z
  ¦  «         dŠn# dŠw xY w‰� ‰| i |¤ŽS d S )Nr   TFÚ
generationé   z.CUDA Memory changed during GC, %d bytes freed.)ÚsysÚ
setprofileÚgcÚcollectÚgarbageÚclearÚ	set_debugÚtorchÚcudaÚmemory_allocatedÚloggerÚwarning)	ÚargsÚkwargsÚbeforeÚafterr   ÚinfoÚobserverÚ
orig_traceÚself_returns	       €€€€€r   Ú
do_collectz8observe_garbage.<locals>.gc_callback.<locals>.do_collect#   s  ø€ à" 1”~ð 'Ø%)�K ‘N�Nå”N :Ñ.Ô.Ð.Ø#�Gð'ð   Ô-°Ò2Ð2ÝœJ™LœL˜LØ ˜¥¤Ñ,Ô,Ð,Ýœ
×(Ò(Ñ*Ô*Ð*õ œ Q™œ˜Ý!&¤×!<Ò!<Ñ!>Ô!>˜Ýœ
™œ˜Ý %¤
× ;Ò ;Ñ =Ô =˜Ø! Uš?˜?Ý"ŸNšNÐ+[Ð]cÐfkÑ]kÑlÔlÐlà"&˜˜ø $˜˜˜˜˜ØÐ)Ø%˜: tÐ6¨vÐ6Ð6Ð6ð *Ð)s   §CD ÄD)r   r   ÚDEBUG_SAVEALLr   Ú
getprofiler   )Úphaser&   r*   r(   r)   r   r'   s    ` @@€€r   Úgc_callbackz$observe_garbage.<locals>.gc_callback   s¡   øøøø€ àð 	ØˆFØ�GÒÐÝŒL�Ô)Ñ*Ô*Ð*Ð*Ð*Ø�fŠ_ˆ_ÝœÑ)Ô)ˆJØ ˜'ˆKð7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7õ: ŒN˜:Ñ&Ô&Ð&Ð&Ð&ðC ˆ_r   c                  óF   •— t           j                             ‰ ¦  «         d S ©N)r   Ú	callbacksÚremove)r.   s   €r   r2   zobserve_garbage.<locals>.removeE   s   ø€ Ý
Œ×Ò˜KÑ(Ô(Ð(Ð(Ð(r   ©r	   N)ÚatexitÚregisterr   r1   Úappend)r'   r   r2   r   r.   s   `  @@r   Úobserve_garbager7      s™   øøø€ Ø€Gðð ð ð ð ð õ
 „O�GÑÔÐð''ð ''ð ''ð ''ð ''ð ''ð ''õR „L×Ò˜Ñ$Ô$Ð$ð)ð )ð )ð )ð )ð )à€Mr   c                  óN   — dd„} t           | ¦   «         j        d         ¦  «        S )Nc                 ó   ‡ — ˆ fd„S )Nc                  ó   •— ‰ S r0   r   ©Úxs   €r   ú<lambda>z+_get_cell_type.<locals>.f.<locals>.<lambda>Z   s   ø€ �q€ r   r   r;   s   `r   Úfz_get_cell_type.<locals>.fY   s   ø€ ØˆyˆyˆyÐr   r   r0   )ÚtypeÚ__closure__)r>   s    r   Ú_get_cell_typerA   X   s1   € ðð ð ð å��‘”” Ô"Ñ#Ô#Ð#r   c                 ó"  ‡ ‡‡‡— i Šdˆfd„Šdˆˆ fd„Šdˆfd„}dˆfd„}dˆˆ fd„}dˆˆ fd„}dˆˆ fd	„}dˆfd
„}dˆˆ fd„}dˆˆˆ fd„}dˆfd„}	t           |t          |t          |t          |t          |t
          j        |t
          j        |t          |t
          j	        |t          j        |t
          j        |	i}
t          ‰ ¦  «        j        D ]}||
v r |
|         ¦   «          Œ ‰dd¦  «         t          ‰ t          ¦  «        r ‰d¦  «         ‰S )a%  
    Return known information about references held by the given object.

    Returns a mapping from referents to lists of descriptions.  Note that there
    may be more than one edge leading to any particular referent; hence the
    need for a list.  Descriptions are currently strings.

    r	   Nc                 ót   •— ‰                      t          |¦  «        g ¦  «                             | ¦  «         d S r0   )Ú
setdefaultÚidr6   )ÚnameÚobjÚ
referencess     €r   Úadd_referencez+annotated_references.<locals>.add_referencej   s3   ø€ Ø×Ò�b ™gœg rÑ*Ô*×1Ò1°$Ñ7Ô7Ð7Ð7Ð7r   c                  óf   •— | D ],}t          ‰|¦  «        r ‰|t          ‰|¦  «        ¦  «         Œ-d S r0   )ÚhasattrÚgetattr)ÚattrsÚattrrI   rG   s     €€r   Ú	add_attrsz'annotated_references.<locals>.add_attrsm   sK   ø€ Øð 	8ð 	8ˆDÝ�s˜DÑ!Ô!ð 8Ø�˜d¥G¨C°Ñ$6Ô$6Ñ7Ô7Ð7øð	8ð 	8r   c                  óB   •— 	  ‰ d¦  «         d S # t           $ r Y d S w xY w)NÚcell_contents)Ú
ValueError©rO   s   €r   Úadd_cell_referencesz1annotated_references.<locals>.add_cell_referencesr   sB   ø€ ð	ØˆI�oÑ&Ô&Ð&Ð&Ð&øÝð 	ð 	ð 	ð
 ˆDˆDð	øøøs   ƒ �
�c                  ó.   •—  ‰ ddddddddd	¦	  «	         d S )
NÚ__defaults__r@   Ú__globals__Ú__code__Ú__name__Ú
__module__Ú__doc____qualname__Ú__annotations__Ú__kwdefaults__r   rS   s   €r   Úadd_function_referencesz5annotated_references.<locals>.add_function_references|   s=   ø€ Øˆ	�.ØØØØØð!à#Ø"ñ		$ô 		$ð 		$ð 		$ð 		$r   c                  óR   •— t          ‰¦  «        D ]\  } } ‰d| › d�|¦  «         Œd S )Nú[ú])Ú	enumerate)ÚpositionÚitemrI   rG   s     €€r   Úadd_sequence_referencesz5annotated_references.<locals>.add_sequence_references‰   sC   ø€ Ý'¨™nœnð 	1ð 	1‰NˆH�dØˆM˜/˜h˜/˜/˜/¨4Ñ0Ô0Ð0Ð0ð	1ð 	1r   c                  óŽ   •— ‰                      ¦   «         D ].\  } } ‰d| ¦  «          ‰dt          | ¦  «        › d�|¦  «         Œ/d S )NÚkeyr`   ra   )ÚitemsÚrepr)rg   ÚvaluerI   rG   s     €€r   Úadd_dict_referencesz1annotated_references.<locals>.add_dict_references�   sa   ø€ ØŸ)š)™+œ+ð 	3ð 	3‰JˆC�ØˆM˜% Ñ%Ô%Ð%ØˆMÐ*�d 3™iœiÐ*Ð*Ð*¨EÑ2Ô2Ð2Ð2ð	3ð 	3r   c                  ó*   •— ‰D ]}  ‰d| ¦  «         Œd S )NÚelementr   )ÚeltrI   rG   s    €€r   Úadd_set_referencesz0annotated_references.<locals>.add_set_references’   s1   ø€ Øð 	*ð 	*ˆCØˆM˜) SÑ)Ô)Ð)Ð)ð	*ð 	*r   c                  ó"   •—  ‰ ddd¦  «         d S )NÚ__self__Ú__func__Úim_classr   rS   s   €r   Úadd_bound_method_referencesz9annotated_references.<locals>.add_bound_method_references–   s   ø€ Øˆ	�*˜j¨*Ñ5Ô5Ð5Ð5Ð5r   c                  ó¼   •— t          ‰¦  «        t          j        u r=t          j        ‰¦  «        } t          | ¦  «        dk    r| d         } ‰d|¦  «         d S d S d S )Né   r   Ú__callback__)r?   ÚweakrefÚrefr   Úget_referentsÚlen)Ú	referentsÚtargetrI   rG   s     €€r   Úadd_weakref_referencesz4annotated_references.<locals>.add_weakref_references™   sh   ø€ õ �‰9Œ9�œÐ#Ð#ÝÔ(¨Ñ-Ô-ˆIÝ�9‰~Œ~ Ò"Ð"Ø" 1œ�Ø�˜n¨fÑ5Ô5Ð5Ð5Ð5ð	 $Ð#à"Ð"r   c                  óÂ   •— ‰j         }  ‰dddddd¦  «         t          | ¦  «        t          u r.‰j                              ¦   «         D ]\  }} ‰d|› �|¦  «         Œd S d S )NÚf_backÚf_codeÚ
f_builtinsÚ	f_globalsÚf_traceÚf_localszlocal )r…   r?   Údictrh   )r…   rF   ÚlocalrO   rI   rG   s      €€€r   Úadd_frame_referencesz2annotated_references.<locals>.add_frame_references£   s…   ø€ Ø”<ˆØˆ	�(˜H l°KÀÈJÑWÔWÐWõ �‰>Œ>�TÐ!Ð!Ø"œ|×1Ò1Ñ3Ô3ð 6ð 6‘��eØ�˜o t˜o˜o¨uÑ5Ô5Ð5Ð5ð "Ð!ð6ð 6r   c                  ó"   •—  ‰ ddd¦  «         d S )NÚ__objclass__rY   Ú__doc__r   rS   s   €r   Ú add_getset_descriptor_referencesz>annotated_references.<locals>.add_getset_descriptor_references­   s   ø€ Øˆ	�. *¨iÑ8Ô8Ð8Ð8Ð8r   Ú__dict__Ú	__class__Ú__mro__r3   )ÚtupleÚlistr†   ÚsetÚ	frozensetÚtypesÚFunctionTypeÚ	FrameTypeÚCellTypeÚ
MethodTyperx   ry   ÚGetSetDescriptorTyper?   r�   Ú
isinstance)rG   rT   r^   re   rk   ro   rt   r~   rˆ   rŒ   Útype_based_referencesÚtype_rO   rI   rH   s   `           @@@r   Úannotated_referencesr�   _   sH  øøøø€ ð (*€Jð8ð 8ð 8ð 8ð 8ð 8ð8ð 8ð 8ð 8ð 8ð 8ð 8ð
ð ð ð ð ð ð
$ð 
$ð 
$ð 
$ð 
$ð 
$ð1ð 1ð 1ð 1ð 1ð 1ð 1ð3ð 3ð 3ð 3ð 3ð 3ð 3ð
*ð *ð *ð *ð *ð *ð *ð6ð 6ð 6ð 6ð 6ð 6ð6ð 6ð 6ð 6ð 6ð 6ð 6ð6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð9ð 9ð 9ð 9ð 9ð 9õ 	Ð&ÝÐ%ÝÐ!ÝÐÝÐ%ÝÔÐ3ÝŒÐ-ÝÐ%ÝÔÐ5ÝŒÐ+ÝÔ"Ð$DðÐõ �c‘”Ô"ð +ð +ˆØÐ)Ð)Ð)Ø(Ð! %Ô(Ñ*Ô*Ð*øà€Iˆj˜+Ñ&Ô&Ð&Ý�#•tÑÔð Øˆ	�)ÑÔÐàÐr   é    c                 ó�  — d„ }t          | t          ¦  «        rt          | ¦  «        S t          | ¦  «        j        dk    r
d| j        › �S t          | t
          j        ¦  «        r%	 | j        j        }n# t          $ r d}Y nw xY wd|› �S t          | t          ¦  «        rd || ¦  «        › d�S t          | t          ¦  «        rd || ¦  «        › d	�S t          | t          ¦  «        rd
t          | ¦  «        › d�S t          | t
          j        ¦  «        r
d| j        › �S t          | t          ¦  «        r
d| j        › �S t          | t          j        ¦  «        r! | ¦   «         }|€dS dt#          |¦  «        d›�S t          | t
          j        ¦  «        rG| j        j        }t          |¦  «        t*          k    rd|t*          dz
   d…         z   }d|› d| j        › �S t/          | ¦  «        r5dt          | ¦  «        j        › dt          | ¦  «        j        › d| j        › d	�S dt          | ¦  «        j        › dt          | ¦  «        j        › �S )zx
    Return a string to be used for Graphviz nodes.

    The string should be short but as informative as possible.
    c                 ó¨   — d                      d„ | d d…         D ¦   «         ¦  «        }t          | ¦  «        dk    r|› dt          | ¦  «        dz
  › �}|S )Nú,c              3   ó†   K  — | ]<}t          |t          ¦  «        rt          |¦  «        nt          |¦  «        j        V — Œ=d S r0   )rš   Ú
BASE_TYPESri   r?   rY   )Ú.0r<   s     r   ú	<genexpr>z=object_annotation.<locals>.format_sequence.<locals>.<genexpr>×   sE   è è € ÐdÐdÐWX¥:¨aµÑ#<Ô#<ÐR�˜Q™œ˜Å$ÀqÁ'Ä'ÔBRÐdÐdÐdÐdÐdÐdr   é   z, ...)Újoinr{   )rG   Úbodys     r   Úformat_sequencez*object_annotation.<locals>.format_sequenceÖ   s`   € Ø�xŠxÐdÐdÐ\_Ð`bÐabÐ`bÔ\cÐdÑdÔdÑdÔdˆÝˆs‰8Œ8�aŠ<ˆ<ØÐ/Ð/¥ S¡¤¨A¡Ð/Ð/ˆDØˆr   Úfunctionz	function
z<anonymous>zinstancemethod
r`   ra   ú(ú)zdict[zmodule
ztype
Nzweakref (dead referent)zweakref to id 0xr<   z...é   zframe
ú:zobject
ú.z ()rš   r£   ri   r?   rY   r”   r˜   rr   Ú__qualname__ÚAttributeErrorr‘   r�   r†   r{   Ú
ModuleTyperx   ry   rE   r–   r�   Úco_filenameÚFRAME_FILENAME_LIMITÚf_linenoÚis_cuda_tensorrZ   Úshape)rG   r©   Ú	func_nameÚreferentÚfilenames        r   Úobject_annotationr»   Ï   s•  € ðð ð õ �#•zÑ"Ô"ð Ý�C‰yŒyÐÝˆC�y„yÔ˜ZÒ'Ð'Ø*˜CœLÐ*Ð*Ð*Ý	�C�Ô)Ñ	*Ô	*ð Fð	&ØœÔ1ˆIˆIøÝð 	&ð 	&ð 	&Ø%ˆIˆIˆIð	&øøøà- )Ð-Ð-Ð-Ý	�C�Ñ	Ô	ð FØ*�?�? 3Ñ'Ô'Ð*Ð*Ð*Ð*Ý	�C�Ñ	Ô	ð FØ*�?�? 3Ñ'Ô'Ð*Ð*Ð*Ð*Ý	�C�Ñ	Ô	ð FØ"•s˜3‘x”xÐ"Ð"Ð"Ð"Ý	�C�Ô)Ñ	*Ô	*ð FØ(˜#œ,Ð(Ð(Ð(Ý	�C�Ñ	Ô	ð FØ&˜œÐ&Ð&Ð&Ý	�C�œÑ	%Ô	%ð FØ�3‘5”5ˆØÐØ,Ð,à6¥b¨¡l¤lÐ6Ð6Ð6Ð6Ý	�C�œÑ	)Ô	)ð FØ”:Ô)ˆÝˆx‰=Œ=Õ/Ò/Ð/Ø˜xÕ*>ÀÑ*BÐ(CÐ(DÐ(DÔEÑEˆHØ2˜Ð2Ð2 C¤LÐ2Ð2Ð2Ý	˜Ñ	Ô	ð FØS�$˜s™)œ)Ô.ÐSÐSµ°c±´Ô1CÐSÐSÀsÄyÐSÐSÐSÐSàE�$˜s™)œ)Ô.ÐEÐEµ°c±´Ô1CÐEÐEÐEs   Á%A2 Á2BÂ Bc                   óZ   — e Zd ZU eed<   edz  ed<   eed<   eeeef                  ed<   dS )ÚNodeÚlabelNÚcontextÚrootÚ
referrents)	rY   rZ   r°   Ústrr\   Úboolr‘   r�   Úintr   r   r   r½   r½     sM   € € € € € € Ø€J€J�JØ�4‰ZÐÐÑØ
€J€J�JØ�U˜3 ˜8”_Ô%Ð%Ð%Ñ%Ð%Ð%r   r½   )r¿   Úfilterc                óú  ‡‡‡— ‰€t          ¦   «         Š‰€t          Šd„ | D ¦   «         } ˆˆfd„| D ¦   «         }d„ | D ¦   «         }d„ t          | ¦  «        D ¦   «         }| D ]¿}|t          |¦  «                 }||         }t	          |¦  «        }	t          j        |¦  «        D ]|}
t          |
¦  «        }|                     |¦  «        }|€Œ)|	                     |dg¦  «        }||                              |¦  «         |D ]}|j	                             ||f¦  «         ŒŒ}ŒÀd„ t          |¦  «        D ¦   «         }t          ¦   «         }|rM|                     ¦   «         }||v rŒ|                     |¦  «         ||         }|                     |¦  «         |°Mi Šg }t          |¦  «        D ]0\  }}||v r't          ‰¦  «        ‰|<   |                     |¦  «         Œ1|D ]}ˆfd„|j	        D ¦   «         |j	        d d …<   Œ |S )Nc                 óF   — g | ]}t          |t          j        ¦  «        °|‘ŒS r   )rš   rx   Ú
ProxyTypes©r¤   rG   s     r   ú
<listcomp>z create_graph.<locals>.<listcomp>  s*   € ÐQÐQÐQ�s­Z¸½WÔ=OÑ-PÔ-PÐQˆsÐQÐQÐQr   c           	      ór   •— g | ]3}t          t          |¦  «         ‰|¦  «         ‰|¦  «        g ¦  «        ‘Œ4S r   )r½   r»   )r¤   rG   r¿   rÅ   s     €€r   rÊ   z create_graph.<locals>.<listcomp>  s@   ø€ Ð\Ð\Ð\ÈS�TÕ# CÑ(Ô(¨'¨'°#©,¬,¸¸¸s¹¼ÀRÑHÔHÐ\Ð\Ð\r   c                 ó   — g | ]}g ‘ŒS r   r   rÉ   s     r   rÊ   z create_graph.<locals>.<listcomp>  s   € Ð&=Ð&=Ð&=¨c rÐ&=Ð&=Ð&=r   c                 ó4   — i | ]\  }}t          |¦  «        |“ŒS r   )rE   )r¤   ÚirG   s      r   ú
<dictcomp>z create_graph.<locals>.<dictcomp>  s$   € Ð>Ð>Ð>¡  C•"�S‘'”'˜1Ð>Ð>Ð>r   ú?c                 ó&   — g | ]\  }}|j         ¯|‘ŒS r   )rÀ   )r¤   rÎ   Úns      r   rÊ   z create_graph.<locals>.<listcomp>"  s#   € Ð:Ð:Ð:‘t�q˜!°1´6Ð:�Ð:Ð:Ð:r   c                 ó2   •— g | ]\  }}|‰v ¯	|‰|         f‘ŒS r   r   )r¤   r¾   ÚidxÚid_to_filtered_ids      €r   rÊ   z create_graph.<locals>.<listcomp>2  s>   ø€ ð 8ð 8ð 8Ù+  sØ!Ð%6Ð6Ð6ð "Ð#4°SÔ#9Ð:à6Ð6Ð6r   )Úcuda_allocation_contextr¶   rb   rE   r�   r   rz   Úgetr6   rÁ   r’   ÚpopÚaddÚextendr{   )Úobjectsr¿   rÅ   ÚnodesÚnode_referrersÚ
id_to_noderG   Úfidxr>   rH   Ú	referrentÚridÚtidxÚlabelsr¾   Ú	to_searchÚto_keeprÔ   Ú	referrersÚfilteredrÎ   rÒ   rÕ   s    ``                   @r   Úcreate_graphrè   	  sy  øøø€ Ø€Ý)Ñ+Ô+ˆØ€~ÝˆàQÐQ˜gÐQÑQÔQ€GØ\Ð\Ð\Ð\Ð\ÐT[Ð\Ñ\Ô\€EØ&=Ð&=°WÐ&=Ñ&=Ô&=€Nà>Ð>­9°WÑ+=Ô+=Ð>Ñ>Ô>€JØð 3ð 3ˆØ�"˜S™'œ'Ô"ˆØ�$ŒKˆÝ)¨#Ñ.Ô.ˆ
ÝÔ)¨#Ñ.Ô.ð 	3ð 	3ˆIÝ�Y‘-”-ˆCØ—>’> #Ñ&Ô&ˆDØˆ|ØØ—^’^ C¨#¨Ñ/Ô/ˆFØ˜4Ô ×'Ò'¨Ñ-Ô-Ð-Øð 3ð 3�Ø”×#Ò# U¨D MÑ2Ô2Ð2Ð2ð3ð	3ð ;Ð:�y¨Ñ/Ô/Ð:Ñ:Ô:€IÝ‰eŒe€GØ
ð $Ø�mŠm‰oŒoˆØ�'ˆ>ˆ>ØØ�Š�CÑÔÐØ" 3Ô'ˆ	Ø×Ò˜Ñ#Ô#Ð#ð ð $ð )+ÐØ€HÝ˜%Ñ Ô ð ð ‰ˆˆ1Ø�ˆ<ˆ<Ý#&Ð'8Ñ#9Ô#9Ð˜aÑ Ø�OŠO˜AÑÔÐøØð 8ð 8ˆð8ð 8ð 8ð 8Ø/0¬|ð8ñ 8ô 8ˆŒ�Q�Q�Q‰ˆð €Or   c                 ó*   — t          j        | ¦  «        S r0   )ÚjsonÚdumps)rÒ   s    r   Úescaperì   7  s   € ÝŒ:�a‰=Œ=Ðr   c                 ó–   — t          | t          j        ¦  «        o/| j        j        dk    ot          | t          j        j        ¦  «         S )Nr   )rš   r   ÚTensorÚdevicer?   Ú_subclassesÚ
FakeTensor)rG   s    r   r¶   r¶   ;  sB   € å�3�œÑ%Ô%ð 	:ØŒ
Œ˜6Ò!ð	:å�s�EÔ-Ô8Ñ9Ô9Ð9ðr   c                  óô   ‡— t           j        j                             ¦   «         } i Š| d         D ]C}|d         }|d         D ]0}|d         dk    rt	          |¦  «        \  }}|‰|<   ||d         z  }Œ1ŒDˆfd„}|S )NÚsegmentsÚaddressÚblocksÚstateÚactive_allocatedÚsizec                 óè   •— t          | ¦  «        ra|                      ¦   «                              ¦   «         }‰                     |¦  «        }|�$d                     t          |d¬¦  «        ¦  «        S d S )Nú
T)Úfull_filename)r¶   Úuntyped_storageÚdata_ptrr×   r§   r   )rG   ÚaddrÚframesÚaddr_to_frames      €r   Úobject_contextz/cuda_allocation_context.<locals>.object_contextM  sn   ø€ Ý˜#ÑÔð 	JØ×&Ò&Ñ(Ô(×1Ò1Ñ3Ô3ˆDØ"×&Ò& tÑ,Ô,ˆFØÐ!Ø—y’y¥¨VÀ4Ð!HÑ!HÔ!HÑIÔIÐIØˆtr   )r   r   ÚmemoryÚ	_snapshotr   )ÚsnapshotÚsegrþ   Úblkrÿ   Ú
_real_sizer  r   s          @r   rÖ   rÖ   B  s°   ø€ ÝŒzÔ ×*Ò*Ñ,Ô,€HØ€MØ˜
Ô#ð  ð  ˆØ�9Œ~ˆØ�x”=ð 	 ð 	 ˆCØ�7Œ|Ð1Ò1Ð1Ý%1°#Ñ%6Ô%6Ñ"�˜
Ø&,�˜dÑ#Ø�C˜”KÑˆDˆDð		 ðð ð ð ð ð Ðr   c                 ó”  — g d¢}t          | ¦  «        D ]>\  }}|                     |› dt          |j        ¦  «        › d|j        rdnd› d�¦  «         Œ?t          | ¦  «        D ]=\  }}|j        D ]0\  }}|                     |› d|› dt          |¦  «        › d	�¦  «         Œ1Œ>|                     d
¦  «         d                     |¦  «        S )N)zdigraph GraphName {znode [shape=rect];zrankdir=LR;z [label=z, color=ÚredÚblackz];z -> z
 [label = ra   z}
rú   )rb   r6   rì   r¾   rÀ   rÁ   r§   )rÜ   ÚlinesrÎ   rÒ   r>   r¾   Újs          r   Úto_dotr  V  sþ   € ØHÐHÐH€EÝ˜%Ñ Ô ð ^ð ^‰ˆˆ1Ø�Š˜Ð\Ð\¥6¨!¬'¡?¤?Ð\Ð\ÀQÄVÐ<X¸E¸EÐQXÐ\Ð\Ð\Ñ]Ô]Ð]Ð]å˜%Ñ Ô ð Bð B‰ˆˆ1Øœð 	Bð 	B‰HˆE�1Ø�LŠL˜AÐ@Ð@ 1Ð@Ð@µ°u±´Ð@Ð@Ð@ÑAÔAÐAÐAð	Bà	‡L‚L�ÑÔÐØ�9Š9�UÑÔÐr   a  
<!DOCTYPE html>
<html>
<head>
  <style>
    body {
      margin: 0;
      padding: 0;
      overflow: hidden;
    }

    #container {
      display: flex;
      flex-direction: column;
      height: 100vh;
    }

    #main {
      flex: 2;
      height: 60vh;
      overflow: clip;
    }

    #preContainer {
      flex: 1;
      height: 40vh;
      overflow: auto;
    }

    pre {
      margin: 0;
      padding: 10px;
    }
  </style>
</head>
<body>
  <div id="container">
    <div id="main">
    </div>
    <div id="preContainer">
      <pre id="stacktrace">Mouse over tensor objects to see where they were allocated.</pre>
    </div>
  </div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/viz.js/1.8.0/viz-lite.js'></script>
<script>
let dot = $DOT
let image = Viz(dot, {format: 'svg', 'totalMemory': 1024*1024*1024});
let main = document.getElementById('main')
main.innerHTML = image
let svg = main.firstElementChild
// Panning and zooming logic
let isPanning = false;
let startX, startY;
let viewBox = { x: 0, y: 0, width: parseFloat(svg.getAttribute('width')), height: parseFloat(svg.getAttribute('height')) };
svg.removeAttribute('width');
svg.removeAttribute('height');
function updateViewBox() {
    svg.setAttribute('viewBox', `${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}`);
}
updateViewBox()
svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');
svg.addEventListener('mousedown', function(e) {
    isPanning = true;
    startX = e.clientX;
    startY = e.clientY;
});
svg.addEventListener('mousemove', function(e) {
    if (!isPanning) return;
    const dx = (e.clientX - startX) * (viewBox.width / svg.clientWidth);
    const dy = (e.clientY - startY) * (viewBox.height / svg.clientHeight);
    viewBox.x -= dx;
    viewBox.y -= dy;
    startX = e.clientX;
    startY = e.clientY;
    updateViewBox();
});
svg.addEventListener('mouseup', function() {
    isPanning = false;
});
svg.addEventListener('mouseleave', function() {
    isPanning = false;
});
svg.addEventListener('wheel', function(e) {
    e.preventDefault();
    const zoomFactor = 0.1;
    const zoomAmount = e.deltaY > 0 ? 1 + zoomFactor : 1 - zoomFactor;
    // Calculate mouse position relative to the SVG
    const rect = svg.getBoundingClientRect();
    const mouseX = e.clientX - rect.left;
    const mouseY = e.clientY - rect.top;
    const mouseXRel = mouseX / svg.clientWidth;
    const mouseYRel = mouseY / svg.clientHeight;
    // Adjust viewBox to zoom around the mouse position
    const newWidth = viewBox.width * zoomAmount;
    const newHeight = viewBox.height * zoomAmount;
    viewBox.x += (viewBox.width - newWidth) * mouseXRel;
    viewBox.y += (viewBox.height - newHeight) * mouseYRel;
    viewBox.width = newWidth;
    viewBox.height = newHeight;
    updateViewBox();
});
$LISTENERS
</script>
</body>
</html>
z˜
document.getElementById('node{id}').addEventListener('mouseover', function(event) {{
  document.getElementById("stacktrace").textContent = {stack}
}})
c           	      ó¶  — g }t          | ¦  «        D ]j\  }}|j        €Œt                               t	          |dz   ¦  «        t          |j        › d|j        › �¦  «        ¬¦  «        }|                     |¦  «         Œkt          | ¦  «        }t           
                    dt          |¦  «        ¦  «         
                    dd                     |¦  «        ¦  «        S )Nrv   z:
)rE   Ústackz$DOTz
$LISTENERSrú   )rb   r¿   Ú_listener_templateÚformatrÂ   rì   r¾   r6   r  Ú	_templateÚreplaceri   r§   )rÜ   Ú	listenersrÎ   rÒ   ÚsÚdots         r   Úto_htmlr  Ð  sÆ   € Ø€IÝ˜%Ñ Ô ð ð ‰ˆˆ1ØŒ9ÐØÝ×%Ò%­¨Q°©U©¬½6ÀQÄWÐB\ÐB\ÐQRÔQZÐB\ÐB\Ñ;]Ô;]Ð%Ñ^Ô^ˆØ×Ò˜ÑÔÐÐÝ
�‰-Œ-€CÝ×Ò˜V¥T¨#¡Y¤YÑ/Ô/×7Ò7¸ÀdÇiÂiÐPYÑFZÔFZÑ[Ô[Ð[r   c                 óx   ‡ — t           j        j                             d¬¦  «         dˆ fd„}t	          |¦  «        S )Ni † )Úmax_entriesr	   c                 óÄ   •— | r\t          d„ | D ¦   «         ¦  «        st                               d¦  «         d S  ‰t          t	          | ¦  «        ¦  «        ¦  «         d S d S )Nc              3   ó4   K  — | ]}t          |¦  «        V — Œd S r0   )r¶   rÉ   s     r   r¥   z:observe_tensor_cycles.<locals>.observer.<locals>.<genexpr>ß  s*   è è € Ð>Ð>¨s•~ cÑ*Ô*Ð>Ð>Ð>Ð>Ð>Ð>r   z No CUDA Tensors found in garbage)Úanyr    r&   r  rè   )r   Úcallbacks    €r   r'   z'observe_tensor_cycles.<locals>.observerÝ  sr   ø€ Øð 	5ÝÐ>Ð>°gÐ>Ñ>Ô>Ñ>Ô>ð Ý—’Ð>Ñ?Ô?Ð?Ø�ØˆH•W�\¨'Ñ2Ô2Ñ3Ô3Ñ4Ô4Ð4Ð4Ð4ð		5ð 	5r   r3   )r   r   r  Ú_record_memory_historyr7   )r  r'   s   ` r   Úobserve_tensor_cyclesr  Ú  sM   ø€ Ý	„JÔ×,Ò,¸Ð,Ñ@Ô@Ð@ð5ð 5ð 5ð 5ð 5ð 5õ ˜8Ñ$Ô$Ð$r   c                  ó\   — t                                d¦  «         dd„} t          | ¦  «        S )aŠ  
    Install a warning that reports whenever a cycle that is holding CUDA memory is observed.

    The warning produces an .html file that visualizes the cycle,
    and links it to the stack frame that allocated the CUDA tensor.

    Reference cycles are freed by the cycle collector rather than being cleaned up
    when the objects in the cycle first become unreachable. If a cycle points to a tensor,
    the CUDA memory for that tensor will not be freed until garbage collection runs.
    Accumulation of CUDA allocations can lead to out of memory errors (OOMs), as well as
    non-deterministic allocation behavior which is harder to debug.
    z2Watching Python reference cycles for CUDA Tensors.r	   Nc                 óÄ   — t          dd¬¦  «        5 }|                     | ¦  «         t                               d|j        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚwz.html)ÚsuffixzDReference cycle includes a CUDA Tensor see visualization of cycle %s)r   Úwriter    r!   rF   )Úhtmlr>   s     r   Úwrite_and_logz)warn_tensor_cycles.<locals>.write_and_logõ  s±   € Ý ¨GÐ4Ñ4Ô4ð 	k¸Ø�GŠG�D‰MŒMˆMÝ�NŠNÐaÐcdÔciÑjÔjÐjð	kð 	kð 	kñ 	kô 	kð 	kð 	kð 	kð 	kð 	kð 	kð 	køøøð 	kð 	kð 	kð 	kð 	kð 	ks   ’6AÁAÁAr3   )r    r&   r  )r&  s    r   Úwarn_tensor_cyclesr'  æ  s?   € õ ‡K‚KÐDÑEÔEÐEðkð kð kð kõ ! Ñ/Ô/Ð/r   )+r   r   Útypingr   r   r”   rx   rê   Útempfiler   r   Útorch.cuda._memory_vizr   r   r4   ÚloggingÚ	getLoggerrY   r    r7   rA   r—   r�   rÄ   ÚfloatÚcomplexr?   rÂ   Úbytesr£   r´   r»   r½   rè   rì   r¶   rÖ   r  r  r  r  r  r'  r   r   r   ú<module>r0     sé  ðà 	€	€	€	Ø 
€
€
€
Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø €€€Ø €€€Ø €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø €€€Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø €€€Ø €€€Ø	ˆÔ	˜8Ñ	$Ô	$€ð8ð 8ð 8ðR$ð $ð $ð
 ˆ>ÑÔ€ðgð gð gðZ �5˜' 4 4¨¡:¤:¨s°EÐ:€
ØÐ ð0Fð 0Fð 0Fðh&ð &ð &ð &ð &ˆ:ñ &ô &ð &ð &*°$ð ,ð ,ð ,ð ,ð ,ð\ð ð ðð ð ðð ð ð(	ð 	ð 	ði€	ðTÐ ð
\ð \ð \ð	%ð 	%ð 	%ð0ð 0ð 0ð 0ð 0r   