Ë
    Z^(hdA  ã                   ó4  — d dl Z d dlZd dl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+y)é    N)ÚAnyÚ
NamedTupleÚOptional)ÚNamedTemporaryFile)Ú_frames_fmtÚ_block_extrac                 ó˜   ‡ ‡‡— dŠˆfd„}t        j                  |«       ˆˆ fd„Št        j                  j	                  ‰«       ˆfd„}|S )NTc                  ó
   •— dŠ y )NF© )Úenableds   €úU/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/utils/viz/_cycles.pyÚdisablez observe_garbage.<locals>.disable   s
   ø€ ð ‰ó    c                 óÚ   •‡‡‡— ‰sy | dk(  r$t        j                  t         j                  «       y | dk(  r6t        j                  «       ŠdgŠˆˆˆˆˆfd„}t        j
                  |«       y y )NÚstartÚstopFc                  ó  •— ‰d   sd‰d<   nít        j                  ‰«       dŠ	 ‰d   dk7  rt        j                  «         ‰t        j                  «       t        j                  j                  «        t        j                  d«       t        j                  j                  «       }t        j                  «        t        j                  j                  «       }||k7  rt        j                  d||z
  «       dŠ‰� ‰| i |¤ŽS y # dŠw xY w)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ÜŸJ™JœLÙ ¤§¡Ô,ÜŸ
™
×(Ñ(Ô*ô Ÿ™ QœÜ!&§¡×!<Ñ!<Ó!>˜ÜŸ
™
œÜ %§
¡
× ;Ñ ;Ó =˜Ø! Uš?Ü"ŸN™NÐ+[Ð]cÐfkÑ]kÔlà"&˜ØÐ)Ù% tÐ6¨vÑ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[   û€ áØØ�GÒÜ�L‰Lœ×)Ñ)Õ*Ø�fŠ_ÜŸ™Ó)ˆJØ ˜'ˆK÷7ð 7ô: �N‰N˜:Õ&ðC r   c                  óD   •— t         j                  j                  ‰ «       y ©N)r   Ú	callbacksÚremove)r.   s   €r   r2   zobserve_garbage.<locals>.removeE   s   ø€ Ü
�‰×Ñ˜KÕ(r   )ÚatexitÚregisterr   r1   Úappend)r'   r   r2   r   r.   s   `  @@r   Úobserve_garbager6      s?   ú€ Ø€Gôô
 ‡O�O�GÔõ''ôR ‡L�L×Ñ˜Ô$ô)à€Mr   c                  óD   — 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	   ø€ ÛÐr   r   r0   )ÚtypeÚ__closure__)r=   s    r   Ú_get_cell_typer@   X   s   € óä‘“—‘ Ñ"Ó#Ð#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 sŒ |
|   «        Œ  ‰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                 óZ   •— ‰j                  t        |«      g «      j                  | «       y r0   )Ú
setdefaultÚidr5   )ÚnameÚobjÚ
referencess     €r   Úadd_referencez+annotated_references.<locals>.add_referencej   s"   ø€ Ø×Ñœb ›g rÓ*×1Ñ1°$Õ7r   c                  óT   •— | D ]"  }t        ‰|«      sŒ ‰|t        ‰|«      «       Œ$ y r0   )ÚhasattrÚgetattr)ÚattrsÚattrrH   rF   s     €€r   Ú	add_attrsz'annotated_references.<locals>.add_attrsm   s-   ø€ Øò 	8ˆDÜ�s˜DÕ!Ù˜d¤G¨C°Ó$6Õ7ñ	8r   c                  ó6   •— 	  ‰ d«       y # t         $ r Y y w xY w)NÚcell_contents)Ú
ValueError©rN   s   €r   Úadd_cell_referencesz1annotated_references.<locals>.add_cell_referencesr   s$   ø€ ð	Ù�oÕ&øÜò 	ñ
 ð	ús   ƒ Œ	—c                  ó&   •—  ‰ ddddddddd	«	       y )
NÚ__defaults__r?   Ú__globals__Ú__code__Ú__name__Ú
__module__Ú__doc____qualname__Ú__annotations__Ú__kwdefaults__r   rR   s   €r   Úadd_function_referencesz5annotated_references.<locals>.add_function_references|   s'   ø€ Ù�.ØØØØØð!à#Ø"õ		$r   c                  óF   •— t        ‰«      D ]  \  } } ‰d| › d�|«       Œ y )Nú[ú])Ú	enumerate)ÚpositionÚitemrH   rF   s     €€r   Úadd_sequence_referencesz5annotated_references.<locals>.add_sequence_references‰   s,   ø€ Ü'¨›nò 	1‰NˆH�dÙ˜A˜h˜Z q˜/¨4Õ0ñ	1r   c                  ót   •— ‰j                  «       D ]$  \  } } ‰d| «        ‰dt        | «      › d�|«       Œ& y )NÚkeyr_   r`   )ÚitemsÚrepr)rf   ÚvaluerH   rF   s     €€r   Úadd_dict_referencesz1annotated_references.<locals>.add_dict_references�   s=   ø€ ØŸ)™)›+ò 	3‰JˆC�Ù˜% Ô%Ù˜Aœd 3›i˜[¨Ð*¨EÕ2ñ	3r   c                  ó&   •— ‰D ]  }  ‰d| «       Œ y )NÚelementr   )ÚeltrH   rF   s    €€r   Úadd_set_referencesz0annotated_references.<locals>.add_set_references’   s   ø€ Øò 	*ˆCÙ˜) SÕ)ñ	*r   c                  ó   •—  ‰ ddd«       y )NÚ__self__Ú__func__Úim_classr   rR   s   €r   Úadd_bound_method_referencesz9annotated_references.<locals>.add_bound_method_references–   s   ø€ Ù�*˜j¨*Õ5r   c                  ó¢   •— t        ‰«      t        j                  u r3t        j                  ‰«      } t        | «      dk(  r| d   } ‰d|«       y y y )Né   r   Ú__callback__)r>   ÚweakrefÚrefr   Úget_referentsÚlen)Ú	referentsÚtargetrH   rF   s     €€r   Úadd_weakref_referencesz4annotated_references.<locals>.add_weakref_references™   sN   ø€ ô �‹9œŸ™Ñ#Ü×(Ñ(¨Ó-ˆIÜ�9‹~ Ò"Ø" 1™�Ù˜n¨fÕ5ð #ð $r   c                  ó¸   •— ‰j                   }  ‰dddddd«       t        | «      t        u r/‰j                   j                  «       D ]  \  }} ‰d|› �|«       Œ y y )NÚf_backÚf_codeÚ
f_builtinsÚ	f_globalsÚf_traceÚf_localszlocal )r„   r>   Údictrg   )r„   rE   ÚlocalrN   rH   rF   s      €€€r   Úadd_frame_referencesz2annotated_references.<locals>.add_frame_references£   sa   ø€ Ø—<‘<ˆÙ�(˜H l°KÀÈJÔWô �‹>œTÑ!Ø"Ÿ|™|×1Ñ1Ó3ò 6‘��eÙ  t f˜o¨uÕ5ñ6ð "r   c                  ó   •—  ‰ ddd«       y )NÚ__objclass__rX   Ú__doc__r   rR   s   €r   Ú add_getset_descriptor_referencesz>annotated_references.<locals>.add_getset_descriptor_references­   s   ø€ Ù�. *¨iÕ8r   Ú__dict__Ú	__class__Ú__mro__)ÚtupleÚlistr…   ÚsetÚ	frozensetÚtypesÚFunctionTypeÚ	FrameTypeÚCellTypeÚ
MethodTyperw   rx   ÚGetSetDescriptorTyper>   rŽ   Ú
isinstance)rF   rS   r]   rd   rj   rn   rs   r}   r‡   r‹   Útype_based_referencesÚtype_rN   rH   rG   s   `           @@@r   Úannotated_referencesrœ   _   sý   û€ ð (*€Jô8õ8ô
ô
$õ1õ3õ
*ô6õ6ö6ô9ô 	Ð&ÜÐ%ÜÐ!ÜÐÜÐ%Ü×ÑÐ3Ü�‰Ð-ÜÐ%Ü×ÑÐ5Ü�‰Ð+Ü×"Ñ"Ð$DðÐô �c“×"Ñ"ò +ˆØÐ)Ò)Ø(Ð! %Ñ(Õ*ð+ñ ˆj˜+Ô&Ü�#”tÔÙ�)ÔàÐr   é    c                 óä  — d„ }t        | t        «      rt        | «      S t        | «      j                  dk(  rd| j                  › �S t        | t
        j                  «      r	 | j                  j                  }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 | «       }|€ydt#        |«      d›�S t        | t
        j$                  «      rJ| j&                  j(                  }t        |«      t*        kD  rd|t*        dz
   d z   }d|› d| j,                  › �S dt        | «      j.                  › dt        | «      j                  › �S # t        $ r d}Y �Œww xY w)zx
    Return a string to be used for Graphviz nodes.

    The string should be short but as informative as possible.
    c                 óž   — dj                  d„ t        t        d«      | «      D «       «      }t        | «      dkD  r|› dt        | «      dz
  › �}|S )Nú,c              3   ó‚   K  — | ]7  \  }}t        |t        «      rt        |«      nt        |«      j                  –— Œ9 y ­wr0   )r™   Ú
BASE_TYPESrh   r>   rX   )Ú.0Úir;   s      r   ú	<genexpr>z=object_annotation.<locals>.format_sequence.<locals>.<genexpr>×   s3   è ø€ ÒrÑW[ÐWXÐZ[¤:¨a´Ô#<œ˜QœÄ$ÀqÃ'×BRÑBRÓRÑrùs   ‚=?é   z, ...)ÚjoinÚzipÚrangerz   )rF   Úbodys     r   Úformat_sequencez*object_annotation.<locals>.format_sequenceÖ   sN   € Ø�x‰xÑrÔ_bÔchÐijÓckÐmpÓ_qÔrÓrˆÜˆs‹8�aŠ<Ø�V˜5¤ S£¨A¡ Ð/ˆDØˆr   Úfunctionz	function
z<anonymous>zinstancemethod
r_   r`   ú(ú)zdict[zmodule
ztype
Nzweakref (dead referent)zweakref to id 0xr;   z...é   zframe
ú:zobject
ú.)r™   r¢   rh   r>   rX   r“   r—   rq   Ú__qualname__ÚAttributeErrorr�   r�   r…   rz   Ú
ModuleTyperw   rx   rD   r•   r€   Úco_filenameÚFRAME_FILENAME_LIMITÚf_linenorY   )rF   r«   Ú	func_nameÚreferentÚfilenames        r   Úobject_annotationr»   Ï   s×  € òô �#”zÔ"Ü�C‹yÐÜˆCƒy×Ñ˜ZÒ'Ø˜CŸL™L˜>Ð*Ð*Ü	�Cœ×)Ñ)Ô	*ð	&ØŸ™×1Ñ1ˆIð " ) Ð-Ð-Ü	�CœÔ	Ø‘? 3Ó'Ð(¨Ð*Ð*Ü	�CœÔ	Ø‘? 3Ó'Ð(¨Ð*Ð*Ü	�CœÔ	Ø”s˜3“x�j Ð"Ð"Ü	�Cœ×)Ñ)Ô	*Ø˜#Ÿ,™,˜Ð(Ð(Ü	�CœÔ	Ø˜Ÿ™�~Ð&Ð&Ü	�CœŸ™Ô	%Ù“5ˆØÐØ,à%¤b¨£l°1Ð%5Ð6Ð6Ü	�CœŸ™Ô	)Ø—:‘:×)Ñ)ˆÜˆx‹=Ô/Ò/Ø˜xÔ*>ÀÑ*BÐ(CÐ(DÐEÑEˆHØ˜˜
 ! C§L¡L >Ð2Ð2àœ$˜s›)×.Ñ.Ð/¨q´°c³×1CÑ1CÐ0DÐEÐEøô3 ò 	&Ø%‹Ið	&ús   Á!G  Ç G/Ç.G/c                   óL   — e Zd ZU eed<   ee   ed<   eed<   eeee	f      ed<   y)ÚNodeÚlabelÚcontextÚrootÚ
referrentsN)
rX   rY   r²   Ústrr[   r   Úboolr�   r�   Úintr   r   r   r½   r½     s)   … ØƒJØ�c‰]ÓØ
ƒJØ�U˜3 ˜8‘_Ñ%Ô%r   r½   )r¿   Úfilterc          
      ó¼  — |€
t        «       }|€t        }| D �cg c]  }t        |t        j                  «      rŒ|‘Œ! } }| D �cg c]%  }t        t        |«       ||«       ||«      g «      ‘Œ' }}| D �cg c]  }g ‘Œ }}t        | «      D ��ci c]  \  }}t        |«      |“Œ }}}| D ]¥  }|t        |«         }||   }	t        |«      }
t        j                  |«      D ]m  }t        |«      }|j                  |d «      }|€Œ#|
j                  |dg«      }||   j                  |«       |D ]  }|	j                  j                  ||f«       Œ! Œo Œ§ t        |«      D ��cg c]  \  }}|j                  sŒ|‘Œ }}}t!        «       }|r?|j#                  «       }||v rŒ|j%                  |«       ||   }|j'                  |«       |rŒ?i }g }t        |«      D ])  \  }}||v sŒt)        |«      ||<   |j                  |«       Œ+ |D ]7  }|j                  D ��cg c]  \  }}||v r|||   f‘Œ c}}|j                  d d  Œ9 |S c c}w c c}w c c}w c c}}w c c}}w c c}}w )Nú?)Úcuda_allocation_contextÚis_cuda_tensorr™   rw   Ú
ProxyTypesr½   r»   ra   rD   rœ   r   ry   Úgetr5   rÁ   rÀ   r‘   ÚpopÚaddÚextendrz   )Úobjectsr¿   rÅ   rF   ÚnodesÚnode_referrersr¤   Ú
id_to_nodeÚfidxr=   rG   Ú	referrentÚridÚtidxÚlabelsr¾   ÚnÚ	to_searchÚto_keepÚidxÚ	referrersÚid_to_filtered_idÚfiltereds                          r   Úcreate_graphrß     sv  € Ø€Ü)Ó+ˆØ€~Üˆà%ÖQ�s¬Z¸¼W×=OÑ=OÕ-PŠsÐQ€GÐQØT[Ö\ÈSŒTÔ# CÓ(©'°#«,¹¸s»ÀRÕHÐ\€EÐ\Ø5<Ö&=¨c¢rÐ&=€NÐ&=ä+4°WÓ+=×>¡  C”"�S“'˜1‘*Ð>€JÑ>Øò 3ˆØœ"˜S›'Ñ"ˆØ�$‰KˆÜ)¨#Ó.ˆ
Ü×)Ñ)¨#Ó.ò 	3ˆIÜ�Y“-ˆCØ—>‘> # tÓ,ˆDØˆ|ØØ—^‘^ C¨#¨Ó/ˆFØ˜4Ñ ×'Ñ'¨Ô-Øò 3�Ø—‘×#Ñ# U¨D MÕ2ñ3ñ	3ð	3ô  )¨Ó/×:‘t�q˜!°1·6³6’Ð:€IÑ:Ü‹e€GÙ
Ø�m‰m‹oˆØ�'‰>ØØ�‰�CÔØ" 3Ñ'ˆ	Ø×Ñ˜Ô#ò ð )+ÐØ€HÜ˜%Ó ò ‰ˆˆ1Ø�Š<Ü#&Ð'8Ó#9Ð˜aÑ Ø�O‰O˜AÕðð ò 8ˆà/0¯|©|÷8Ù+  sØ!Ð%6Ñ6ð "Ð#4°SÑ#9Ò:ó 8ˆ�‰‘Q‰ð8ð €OùòM RùÚ\ùÚ&=ùã>ùó ;ùó 8s.   ™H=¹H=Á*IÁ3	IÂIÅIÅ2IÈIc                 ó,   — t        j                  | «      S r0   )ÚjsonÚdumps)rØ   s    r   Úescaperã   5  s   € Ü�:‰:�a‹=Ðr   c                 ó    — t        | t        j                  «      xr3 | j                  xr% t        | t        j                  j
                  «       S r0   )r™   r   ÚTensorÚis_cudaÚ_subclassesÚ
FakeTensor)rF   s    r   rÉ   rÉ   9  s8   € Ü�cœ5Ÿ<™<Ó(Òn¨S¯[©[ÒnÄÈCÔQV×QbÑQb×QmÑQmÓAnÐ=nÐnr   c                  óÞ   ‡— t         j                  j                  j                  «       } i Š| d   D ]4  }|d   }|d   D ]%  }|d   dk(  rt	        |«      \  }}|‰|<   ||d   z  }Œ' Œ6 ˆfd„}|S )NÚsegmentsÚaddressÚblocksÚstateÚactive_allocatedÚsizec                 ó¶   •— t        | «      rM| j                  «       j                  «       }‰j                  |«      }|�dj	                  t        |d¬«      «      S y )Nú
T)Úfull_filename)rÉ   Úuntyped_storageÚdata_ptrrË   r§   r   )rF   ÚaddrÚframesÚaddr_to_frames      €r   Úobject_contextz/cuda_allocation_context.<locals>.object_contextG  sQ   ø€ Ü˜#ÔØ×&Ñ&Ó(×1Ñ1Ó3ˆDØ"×&Ñ& tÓ,ˆFØÐ!Ø—y‘y¤¨VÀ4Ô!HÓIÐIØr   )r   r   ÚmemoryÚ	_snapshotr   )ÚsnapshotÚsegrõ   Úblkrö   Ú
_real_sizerø   r÷   s          @r   rÈ   rÈ   <  s‘   ø€ Ü�z‰z× Ñ ×*Ñ*Ó,€HØ€MØ˜
Ñ#ò  ˆØ�9‰~ˆØ�x‘=ò 	 ˆCØ�7‰|Ð1Ò1Ü%1°#Ó%6Ñ"�˜
Ø&,�˜dÑ#Ø�C˜‘KÑ‰Dñ		 ð ôð Ðr   c                 ó~  — g d¢}t        | «      D ]@  \  }}|j                  |› dt        |j                  «      › d|j                  rdnd› d�«       ŒB t        | «      D ]<  \  }}|j
                  D ](  \  }}|j                  |› d|› dt        |«      › d	�«       Œ* Œ> |j                  d
«       dj                  |«      S )N)zdigraph GraphName {znode [shape=rect];zrankdir=LR;z [label=z, color=ÚredÚblackz];z -> z
 [label = r`   z}
rñ   )ra   r5   rã   r¾   rÀ   rÁ   r§   )rÐ   Úlinesr¤   rØ   r=   r¾   Újs          r   Úto_dotr  P  sÉ   € ÚH€EÜ˜%Ó ò _‰ˆˆ1Ø�‰˜�s˜(¤6¨!¯'©'£?Ð"3°8ÀaÇfÂf¹UÐRYÐ;ZÐZ\Ð]Õ^ð_ô ˜%Ó ò B‰ˆˆ1ØŸ™ò 	B‰HˆE�1Ø�L‰L˜A˜3˜d 1 # Z´°u³¨¸aÐ@ÕAñ	Bð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 ]h  \  }}|j                  €Œt        j                  t	        |dz   «      t        |j                  › d|j                  › �«      ¬«      }|j                  |«       Œj t        | «      }t        j                  dt        |«      «      j                  ddj                  |«      «      S )Nru   z:
)rD   Ústackz$DOTz
$LISTENERSrñ   )ra   r¿   Ú_listener_templateÚformatrÂ   rã   r¾   r5   r  Ú	_templateÚreplacerh   r§   )rÐ   Ú	listenersr¤   rØ   ÚsÚdots         r   Úto_htmlr  Ê  s¬   € Ø€IÜ˜%Ó ò ‰ˆˆ1Ø�9‰9ÐØÜ×%Ñ%¬¨Q°©U«¼6ÀQÇWÁWÀIÈSÐQR×QZÑQZÐP[ÐB\Ó;]Ð%Ó^ˆØ×Ñ˜Õð	ô
 �‹-€CÜ×Ñ˜V¤T¨#£YÓ/×7Ñ7¸ÀdÇiÁiÐPYÓFZÓ[Ð[r   c                 óx   ‡ — t         j                  j                  j                  d¬«       ˆ fd„}t	        |«      S )Ni † )Úmax_entriesc                 ó�   •— | rCt        d„ | D «       «      st        j                  d«       y  ‰t        t	        | «      «      «       y y )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr0   )rÉ   )r£   rF   s     r   r¥   z:observe_tensor_cycles.<locals>.observer.<locals>.<genexpr>Ù  s   è ø€ Ò>¨s”~ c×*Ñ>ùs   ‚z No CUDA Tensors found in garbage)Úanyr    r&   r  rß   )r   Úcallbacks    €r   r'   z'observe_tensor_cycles.<locals>.observer×  s;   ø€ ÙÜÑ>°gÔ>Ô>Ü—‘Ð>Ô?ØÙ”Wœ\¨'Ó2Ó3Õ4ð	 r   )r   r   rù   Ú_record_memory_historyr6   )r  r'   s   ` r   Úobserve_tensor_cyclesr  Ô  s0   ø€ Ü	‡J�J×Ñ×,Ñ,¸Ð,Ô@ô5ô ˜8Ó$Ð$r   c                  óH   — t         j                  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 }|j                  | «       t        j                  d|j                  «       d d d «       y # 1 sw Y   y xY w)NÚwz.htmlF)ÚsuffixÚdeletezDReference cycle includes a CUDA Tensor see visualization of cycle %s)r   Úwriter    r!   rE   )Úhtmlr=   s     r   Úwrite_and_logz)warn_tensor_cycles.<locals>.write_and_logï  sJ   € Ü ¨G¸EÔBð 	kÀaØ�G‰G�DŒMÜ�N‰NÐaÐcd×ciÑciÔj÷	k÷ 	kñ 	kús   �2A
Á
A)r    r&   r  )r  s    r   Úwarn_tensor_cyclesr  à  s$   € ô ‡K�KÐDÔEòkô ! Ó/Ð/r   ),r   r   Útypingr   r   r   r“   rw   rá   Útempfiler   r   Útorch.cuda._memory_vizr   r   r3   ÚloggingÚ	getLoggerrX   r    r6   r@   r–   rœ   rÄ   ÚfloatÚcomplexr>   rÂ   Úbytesr¢   r¶   r»   r½   rß   rã   rÉ   rÈ   r  r	  r  r  r  r  r   r   r   ú<module>r(     sË   ðã 	Û 
ß ,Ñ ,Û Û Û Ý 'Û ß <Û Û Ø	ˆ×	Ñ	˜8Ó	$€ò8òR$ñ
 Ó€ògðZ �5˜'¡4¨£:¨s°EÐ:€
ØÐ ò.Fôd&ˆ:ô &ð &*°$ô ,ò\òoòò(	ði€	ðTÐ ò
\ò	%ó0r   