§
    Ì²ÅjJ;  ã                   óP  — d dl Z d dlZd dlmZmZmZmZ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ÚDictÚListÚ
NamedTupleÚOptionalÚTuple)ÚNamedTemporaryFile)Ú_frames_fmtÚ_block_extrac                 ó–   ‡ ‡‡— dŠˆfd„}t          j        |¦  «         ˆˆ fd„Št          j                             ‰¦  «         ˆfd„}|S )NTc                  ó   •— dŠ d S )NF© )Úenableds   €úHC:\Projects\Historical\venv\Lib\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)r1   s   €r   r5   zobserve_garbage.<locals>.removeE   s   ø€ Ý
Œ×Ò˜KÑ(Ô(Ð(Ð(Ð(r   )ÚatexitÚregisterr   r4   Úappend)r*   r   r5   r   r1   s   `  @@r   Úobserve_garbager9      sŠ   øøø€ Ø€Gðð ð ð ð õ
 „O�GÑÔÐð''ð ''ð ''ð ''ð ''ð ''õR „L×Ò˜Ñ$Ô$Ð$ð)ð )ð )ð )ð )à€Mr   c                  óN   — dd„} t           | ¦   «         j        d         ¦  «        S )Nc                 ó   ‡ — ˆ fd„S )Nc                  ó   •— ‰ S r3   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   r3   )ÚtypeÚ__closure__)r@   s    r   Ú_get_cell_typerC   X   s1   € ðð ð ð å��‘”” Ô"Ñ#Ô#Ð#r   c                 ó  ‡ ‡‡‡— i Šˆfd„Šˆˆ fd„Šˆfd„}ˆfd„}ˆˆ fd„}ˆˆ fd„}ˆˆ fd„}ˆfd„}ˆˆ fd	„}ˆˆˆ f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.

    c                 ót   •— ‰                      t          |¦  «        g ¦  «                             | ¦  «         d S r3   )Ú
setdefaultÚidr8   )Ú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 r3   )ÚhasattrÚgetattr)ÚattrsÚattrrK   rI   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©rQ   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__rB   Ú__globals__Ú__code__Ú__name__Ú
__module__Ú__doc____qualname__Ú__annotations__Ú__kwdefaults__r   rU   s   €r   Úadd_function_referencesz5annotated_references.<locals>.add_function_references|   s=   ø€ Øˆ	�.ØØØØØð!à#Ø"ñ		$ô 		$ð 		$ð 		$ð 		$r   c                  óR   •— t          ‰¦  «        D ]\  } } ‰d| › d�|¦  «         Œd S )Nú[ú])Ú	enumerate)ÚpositionÚitemrK   rI   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Úkeyrb   rc   )ÚitemsÚrepr)ri   ÚvaluerK   rI   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   )ÚeltrK   rI   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   rU   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__)rA   ÚweakrefÚrefr   Úget_referentsÚlen)Ú	referentsÚtargetrK   rI   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‡   rA   Údictrj   )r‡   rH   ÚlocalrQ   rK   rI   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__r[   Ú__doc__r   rU   s   €r   Ú add_getset_descriptor_referencesz>annotated_references.<locals>.add_getset_descriptor_references­   s   ø€ Øˆ	�. *¨iÑ8Ô8Ð8Ð8Ð8r   Ú__dict__Ú	__class__Ú__mro__)ÚtupleÚlistrˆ   ÚsetÚ	frozensetÚtypesÚFunctionTypeÚ	FrameTypeÚCellTypeÚ
MethodTyperz   r{   ÚGetSetDescriptorTyperA   r‘   Ú
isinstance)rI   rV   r`   rg   rm   rq   rv   r€   rŠ   rŽ   Útype_based_referencesÚtype_rQ   rK   rJ   s   `           @@@r   Úannotated_referencesrŸ   _   s  øøøø€ ð (*€Jð8ð 8ð 8ð 8ð 8ð8ð 8ð 8ð 8ð 8ð 8ð
ð ð ð ð ð
$ð 
$ð 
$ð 
$ð 
$ð1ð 1ð 1ð 1ð 1ð 1ð3ð 3ð 3ð 3ð 3ð 3ð
*ð *ð *ð *ð *ð *ð6ð 6ð 6ð 6ð 6ð6ð 6ð 6ð 6ð 6ð 6ð6ð 6ð 6ð 6ð 6ð 6ð 6ð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 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„ t          t          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 r3   )rœ   Ú
BASE_TYPESrk   rA   r[   )Ú.0Úir>   s      r   ú	<genexpr>z=object_annotation.<locals>.format_sequence.<locals>.<genexpr>×   sK   è è € ÐrÐrÑW[ÐWXÐZ[¥:¨aµÑ#<Ô#<ÐR�˜Q™œ˜Å$ÀqÁ'Ä'ÔBRÐrÐrÐrÐrÐrÐrr   é   z, ...)ÚjoinÚzipÚranger}   )rI   Úbodys     r   Úformat_sequencez*object_annotation.<locals>.format_sequenceÖ   si   € Ø�xŠxÐrÐrÕ_bÕchÐijÑckÔckÐmpÑ_qÔ_qÐrÑrÔrÑrÔrˆÝˆs‰8Œ8�aŠ<ˆ<ØÐ/Ð/¥ S¡¤¨A¡Ð/Ð/ˆDØˆr   Úfunctionz	function
z<anonymous>zinstancemethod
rb   rc   ú(ú)zdict[zmodule
ztype
Nzweakref (dead referent)zweakref to id 0xr>   z...é   zframe
ú:zobject
ú.)rœ   r¥   rk   rA   r[   r–   rš   rt   Ú__qualname__ÚAttributeErrorr“   r’   rˆ   r}   Ú
ModuleTyperz   r{   rG   r˜   rƒ   Úco_filenameÚFRAME_FILENAME_LIMITÚf_linenor\   )rI   r®   Ú	func_nameÚreferentÚfilenames        r   Úobject_annotationr¾   Ï   sO  € ðð ð õ �#•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àE�$˜s™)œ)Ô.ÐEÐEµ°c±´Ô1CÐEÐEÐEs   Á%A2 Á2BÂ Bc                   ó`   — e Zd ZU eed<   ee         ed<   eed<   eeee	f                  ed<   dS )ÚNodeÚlabelÚcontextÚrootÚ
referrentsN)
r[   r\   rµ   Ústrr^   r   Úboolr   r   Úintr   r   r   rÀ   rÀ     sM   € € € € € € Ø€J€J�JØ�cŒ]ÐÐÑØ
€J€J�JØ�U˜3 ˜8”_Ô%Ð%Ð%Ñ%Ð%Ð%r   rÀ   )rÂ   Úfilterc                óä  ‡‡‡— ‰€t          ¦   «         Š‰€t          Šˆˆfd„| D ¦   «         }d„ | D ¦   «         }d„ t          | ¦  «        D ¦   «         }| D ]À}|t          |¦  «                 }||         }t	          |¦  «        }	t          j        |¦  «        D ]}}
t          |
¦  «        }|                     |d ¦  «        }|€Œ*|	                     |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           	      ór   •— g | ]3}t          t          |¦  «         ‰|¦  «         ‰|¦  «        g ¦  «        ‘Œ4S r   )rÀ   r¾   )r¦   rI   rÂ   rÈ   s     €€r   ú
<listcomp>z create_graph.<locals>.<listcomp>  s@   ø€ Ð\Ð\Ð\ÈS�TÕ# CÑ(Ô(¨'¨'°#©,¬,¸¸¸s¹¼ÀRÑHÔHÐ\Ð\Ð\r   c                 ó   — g | ]}g ‘ŒS r   r   ©r¦   rI   s     r   rË   z create_graph.<locals>.<listcomp>  s   € Ð&=Ð&=Ð&=¨c rÐ&=Ð&=Ð&=r   c                 ó4   — i | ]\  }}t          |¦  «        |“ŒS r   )rG   )r¦   r§   rI   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>/  s>   ø€ ð 8ð 8ð 8Ù+  sØ!Ð%6Ð6Ð6ð "Ð#4°SÔ#9Ð:à6Ð6Ð6r   )Úcuda_allocation_contextÚis_cuda_tensorrd   rG   rŸ   r   r|   Úgetr8   rÄ   r”   ÚpopÚaddÚextendr}   )ÚobjectsrÂ   rÈ   ÚnodesÚnode_referrersÚ
id_to_noderI   Úfidxr@   rJ   Ú	referrentÚridÚtidxÚlabelsrÁ   Ú	to_searchÚto_keeprÔ   Ú	referrersÚfilteredr§   rÒ   rÕ   s    ``                   @r   Úcreate_graphré     sh  øøø€ Ø€Ý)Ñ+Ô+ˆØ€~Ýˆà\Ð\Ð\Ð\Ð\ÐT[Ð\Ñ\Ô\€EØ&=Ð&=°WÐ&=Ñ&=Ô&=€Nà>Ð>­9°WÑ+=Ô+=Ð>Ñ>Ô>€JØð 3ð 3ˆØ�"˜S™'œ'Ô"ˆØ�$ŒKˆÝ)¨#Ñ.Ô.ˆ
ÝÔ)¨#Ñ.Ô.ð 	3ð 	3ˆIÝ�Y‘-”-ˆCØ—>’> # tÑ,Ô,ˆ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 r3   )ÚjsonÚdumps)rÒ   s    r   Úescaperí   4  s   € ÝŒ:�a‰=Œ=Ðr   c                 ó„   — t          | t          j        ¦  «        o&| j        ot          | t          j        j        ¦  «         S r3   )rœ   r    ÚTensorÚis_cudaÚ_subclassesÚ
FakeTensor)rI   s    r   r×   r×   8  s4   € Ý�c�5œ<Ñ(Ô(Ðn¨S¬[ÐnÅÈCÕQVÔQbÔQmÑAnÔAnÐ=nÐnr   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
   )rI   ÚaddrÚframesÚaddr_to_frames      €r   Úobject_contextz/cuda_allocation_context.<locals>.object_contextF  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Ö   ;  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 = rc   z}
rû   )rd   r8   rí   rÁ   rÃ   rÄ   rª   )rÝ   Úlinesr§   rÒ   r@   rÁ   Újs          r   Úto_dotr  O  sþ   € ØHÐHÐH€EÝ˜%Ñ Ô ð _ð _‰ˆˆ1Ø�Š˜Ð]Ð]¥6¨!¬'¡?¤?Ð]Ð]ÀaÄfÐ=Y¸U¸UÐRYÐ]Ð]Ð]Ñ^Ô^Ð^Ð^å˜%Ñ Ô ð Bð B‰ˆˆ1Øœð 	Bð 	B‰HˆE�1Ø�LŠL˜AÐ@Ð@ 1Ð@Ð@µ°u±´Ð@Ð@Ð@ÑAÔAÐAÐAð	Bà	‡L‚L�ÑÔÐØ�9Š9�UÑÔÐr   az  
<!DOCTYPE html>
<html>
<head>
  <style>
    body {
      margin: 0;
      padding: 0;
      overflow: hidden;
    }

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

    #main {
      flex: 2;
      overflow: auto;
    }

    #preContainer {
      flex: 1;
      overflow: auto;
    }

    svg {
        overflow: scroll;
    }

    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'});
document.getElementById('main').innerHTML = image
$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 )Nrx   z:
)rG   Ústackz$DOTz
$LISTENERSrû   )rd   rÂ   Ú_listener_templateÚformatrÅ   rí   rÁ   r8   r  Ú	_templateÚreplacerk   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                 óv   ‡ — t           j        j                             d¬¦  «         ˆ fd„}t	          |¦  «        S )Ni † )Úmax_entriesc                 óÄ   •— | r\t          d„ | D ¦   «         ¦  «        st                               d¦  «         d S  ‰t          t	          | ¦  «        ¦  «        ¦  «         d S d S )Nc              3   ó4   K  — | ]}t          |¦  «        V — Œd S r3   )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   )r    r!   r  Ú_record_memory_historyr9   )r  r*   s   ` r   Úobserve_tensor_cyclesr      sH   ø€ Ý	„JÔ×,Ò,¸Ð,Ñ@Ô@Ð@ð5ð 5ð 5ð 5ð 5õ ˜8Ñ$Ô$Ð$r   c                  óZ   — t                                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 allocted 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.c                 óÆ   — t          ddd¬¦  «        5 }|                     | ¦  «         t                               d|j        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚwz.htmlF)ÚsuffixÚdeletezDReference cycle includes a CUDA Tensor see visualization of cycle %s)r	   Úwriter#   r$   rH   )Úhtmlr@   s     r   Úwrite_and_logz)warn_tensor_cycles.<locals>.write_and_log»  s³   € Ý ¨G¸EÐBÑBÔBð 	kÀaØ�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)r#   r)   r   )r(  s    r   Úwarn_tensor_cyclesr)  ¬  s9   € õ ‡K‚KÐDÑEÔEÐEðkð kð kõ ! Ñ/Ô/Ð/r   )/r   r   Útypingr   r   r   r   r   r   r–   rz   rë   Útempfiler	   r    Útorch.cuda._memory_vizr
   r   r6   ÚloggingÚ	getLoggerr[   r#   r9   rC   r™   rŸ   rÇ   ÚfloatÚcomplexrA   rÅ   Úbytesr¥   r¹   r¾   rÀ   ré   rí   r×   rÖ   r  r  r  r  r   r)  r   r   r   ú<module>r2     s  ðà 	€	€	€	Ø 
€
€
€
Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø €€€Ø €€€Ø €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø €€€Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø €€€Ø €€€Ø	ˆÔ	˜8Ñ	$Ô	$€ð8ð 8ð 8ðR$ð $ð $ð
 ˆ>ÑÔ€ðgð gð gðZ �5˜' 4 4¨¡:¤:¨s°EÐ:€
ØÐ ð.Fð .Fð .Fðd&ð &ð &ð &ð &ˆ:ñ &ô &ð &ð &*°$ð +ð +ð +ð +ð +ðZð ð ðoð oð oðð ð ð(	ð 	ð 	ð6€	ðnÐ ð
\ð \ð \ð	%ð 	%ð 	%ð0ð 0ð 0ð 0ð 0r   