§
    ‹Ÿj™  ã                   óÖ   — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddl
mZmZmZ ddlmZ d„ Zej        d„ ¦   «         Ze G d„ de	j        ¦  «        ¦   «         ZdS )	ao  Test script to find circular references.

Circular references are not leaks per se, because they will eventually
be GC'd. However, on CPython, they prevent the reference-counting fast
path from being used and instead rely on the slower full GC. This
increases memory footprint and CPU overhead, so we try to eliminate
circular references created by normal operation.
é    N)ÚwebÚgenÚ
httpclient)ÚskipNotCPythonc                 óÀ   ‡‡‡‡‡‡— ˆˆˆˆˆˆfd„Šg Šg Št          ¦   «         Št          t          t          | ¦  «        ¦  «        Št          ¦   «         Š ‰| ¦  «         ‰S )a  Find circular references in a list of objects.

    The garbage list contains objects that participate in a cycle,
    but also the larger set of objects kept alive by that cycle.
    This function finds subsets of those objects that make up
    the cycle(s).
    c                 óæ  •— | D ]ì}t          |¦  «        }|‰vrŒ|‰	v rŒ|‰v rH‰‰                     |¦  «        d …         }|                     |¦  «         ‰                     |¦  «         Œg‰                     |¦  «         ‰                     |¦  «          ‰t	          j        |¦  «        ¦  «         ‰                     ¦   «          ‰                     |¦  «         ‰	                     |¦  «         Œíd S ©N)ÚidÚindexÚappendÚaddÚgcÚget_referentsÚpopÚremove)
ÚlevelÚitemÚitem_idÚ	candidateÚfoundÚgarbage_idsÚinnerÚstackÚ	stack_idsÚvisited_idss
       €€€€€€úi/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/tornado/test/circlerefs_test.pyr   z'find_circular_references.<locals>.inner"   s  ø€ Øð 	%ð 	%ˆDÝ˜‘h”hˆGØ˜kÐ)Ð)ØØ˜+Ð%Ð%ØØ˜)Ð#Ð#Ø! %§+¢+¨dÑ"3Ô"3Ð"5Ð"5Ô6�	Ø× Ò  Ñ&Ô&Ð&Ø—’˜YÑ'Ô'Ð'Øà�LŠL˜ÑÔÐØ�MŠM˜'Ñ"Ô"Ð"ØˆE•"Ô" 4Ñ(Ô(Ñ)Ô)Ð)Ø�IŠI‰KŒKˆKØ×Ò˜WÑ%Ô%Ð%Ø�OŠO˜GÑ$Ô$Ð$Ð$ð#	%ð 	%ó    )ÚsetÚmapr
   )Úgarbager   r   r   r   r   r   s    @@@@@@r   Úfind_circular_referencesr!      s�   øøøøøø€ ð%ð %ð %ð %ð %ð %ð %ð %ð %ð %ð( "$€EØ€EÝ‘”€IÝ•c�"˜gÑ&Ô&Ñ'Ô'€KÝ‘%”%€Kà	€Eˆ'�N„N€NØ€Lr   c               #   óX  K  — t          j        ¦   «          t          j        ¦   «          t          j        t           j        t           j        z  ¦  «         dV — 	 t          j        ¦   «         } t          j	        }| t          _	        	 t          j        ¦   «          |t          _	        n# |t          _	        w xY wt           j
        dd…         }g t           j
        dd…<   t          |¦  «        dk    r*	 t          j        d¦  «         t          j        ¦   «          dS t          |¦  «        D ]¶}|                      d¦  «         |D ]'}|                      dt          |¦  «        › �¦  «         Œ(|D ]r}t!          |t"          j        ¦  «        rV|                      d|j        › �¦  «         |                      dt          |¦  «        › �¦  «         t)          j        |¦  «         ŒsŒ·~t-          |                      ¦   «         ¦  «        ‚# t          j        d¦  «         t          j        ¦   «          w xY w)zERaise AssertionError if the wrapped code creates garbage with cycles.Nr   z!
==========
 Circular 
==========z
    z	
Locals: z
Traceback: )r   ÚdisableÚcollectÚ	set_debugÚDEBUG_STATSÚDEBUG_SAVEALLÚioÚStringIOÚsysÚstderrr    ÚlenÚenabler!   ÚwriteÚreprÚ
isinstanceÚtypesÚ	FrameTypeÚf_localsÚ	tracebackÚprint_stackÚAssertionErrorÚgetvalue)ÚfÚ
old_stderrr    Úcircularr   s        r   Úassert_no_cycle_garbager;   @   sï  è è € õ „J�L„L€LÝ„J�L„L€LÝ„L•”¥"Ô"2Ñ2Ñ3Ô3Ð3Ø	€E€E€Eðõ ŒK‰MŒMˆÝ”Zˆ
Ø�Œ
ð	$ÝŒJ‰LŒLˆLà#�CŒJˆJø˜�CŒJÐ#Ð#Ð#Ð#Ý”*˜Q˜Q˜Q”-ˆð �Œ
�1�1�1‰Ýˆw‰<Œ<˜1ÒÐØõ 	Œ�Q‰ŒˆÝ
Œ	‰Œˆˆˆõ 1°Ñ9Ô9ð 	0ð 	0ˆHØ�GŠGÐ:Ñ;Ô;Ð;Ø ð /ð /�Ø—’Ð-¥ d¡¤Ð-Ð-Ñ.Ô.Ð.Ð.Ø ð 0ð 0�Ý˜d¥E¤OÑ4Ô4ð 0Ø—G’GÐ8¨¬Ð8Ð8Ñ9Ô9Ð9Ø—G’GÐ8­D°©J¬JÐ8Ð8Ñ9Ô9Ð9ÝÔ)¨$Ñ/Ô/Ð/øð	0ð
 Ý˜QŸZšZ™\œ\Ñ*Ô*Ð*øå
Œ�Q‰ŒˆÝ
Œ	‰Œˆˆøøøs+   Á+H  ÂB% ÂH  Â%B3Â3;H  ÄC(H  È )H)c                   ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚCircleRefsTestc                 ó”  ‡—  G ˆfd„d¦  «        Š|                       t          ¦  «        5 }t          ¦   «         5   ‰d¦  «        } ‰d¦  «        } ‰d¦  «        }||_        ||_        ||_        ||_        ~~d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         |                      dt          |j        ¦  «        ¦  «         |                      dt          |j        ¦  «        ¦  «         |  	                    d	t          |j        ¦  «        ¦  «         d S )
Nc                   ó    •— e Zd Zˆ fd„Zd„ ZdS )ú)CircleRefsTest.test_known_leak.<locals>.Cc                 ó@   •— || _         d | _        d | _        d | _        d S r	   )ÚnameÚaÚbÚc)ÚselfrB   ÚCs     €r   Ú__init__z2CircleRefsTest.test_known_leak.<locals>.C.__init__m   s#   ø€ Ø �”	Ø-1�”Ø-1�”Ø-1�”��r   c                 ó   — d| j         › �S )Nzname=)rB   ©rF   s    r   Ú__repr__z2CircleRefsTest.test_known_leak.<locals>.C.__repr__s   s   € Ø*˜tœyÐ*Ð*Ð*r   N)Ú__name__Ú
__module__Ú__qualname__rH   rK   )rG   s   €r   rG   r@   l   s=   ø€ € € € € ð2ð 2ð 2ð 2ð 2ð+ð +ð +ð +ð +r   rG   rC   rD   rE   ÚCircularz
    name=az
    name=bz
    name=c)
ÚassertRaisesr6   r;   rD   rE   rC   ÚassertInÚstrÚ	exceptionÚassertNotIn)rF   ÚcmrC   rD   rE   rG   s        @r   Útest_known_leakzCircleRefsTest.test_known_leakj   sÌ  ø€ ð	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð ×Ò�~Ñ.Ô.ð 	°"Ý(Ñ*Ô*ð 
ð 
ð �A�c‘F”F�Ø�A�c‘F”F�Ø�A�c‘F”F�Ø�”Ø�”Ø�”Ø�”Ø�qð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	�Š�j¥# b¤lÑ"3Ô"3Ñ4Ô4Ð4ð 	�Š�l¥C¨¬Ñ$5Ô$5Ñ6Ô6Ð6Ø�Š�l¥C¨¬Ñ$5Ô$5Ñ6Ô6Ð6Ø×Ò˜¥s¨2¬<Ñ'8Ô'8Ñ9Ô9Ð9Ð9Ð9s5   «BºA BÁ:BÂB
	Â
BÂB
	ÂBÂB!Â$B!c              ƒ   ó
  K  — t          j        d|fg¦  «        }t          j                             ¦   «         \  }}t          j                             |¦  «        }|                     |¦  «         t          j	        ¦   «         }t          ¦   «         5  |                     d|› d�¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   |                     ¦   «          |                     ¦   «          |                     ¦   «          d S )Nú/zhttp://127.0.0.1:)r   ÚApplicationÚtornadoÚtestingÚbind_unused_portÚ
httpserverÚ
HTTPServerÚ
add_socketr   ÚAsyncHTTPClientr;   ÚfetchÚcloseÚstop)rF   Úhandler_classÚappÚsocketÚportÚserverÚclients          r   Úrun_handlerzCircleRefsTest.run_handlerŒ   s5  è è € ÝŒoà�}Ð%ðñ
ô 
ˆõ
 ”×7Ò7Ñ9Ô9‰ˆ�ÝÔ#×.Ò.¨sÑ3Ô3ˆØ×Ò˜&Ñ!Ô!Ð!åÔ+Ñ-Ô-ˆÝ$Ñ&Ô&ð 	<ð 	<ð —,’,Ð:°4Ð:Ð:Ð:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð 	�Š‰ŒˆØ�Š‰ŒˆØ�Š‰Œˆˆˆs   Â B<Â<C ÃC c                 ó„   —  G d„ dt           j        ¦  «        }t          j        |                      |¦  «        ¦  «         d S )Nc                   ó   — e Zd Zd„ ZdS )ú1CircleRefsTest.test_sync_handler.<locals>.Handlerc                 ó0   — |                       d¦  «         d S ©Núok
)r.   rJ   s    r   Úgetz5CircleRefsTest.test_sync_handler.<locals>.Handler.get¤   s   € Ø—
’
˜6Ñ"Ô"Ð"Ð"Ð"r   N©rL   rM   rN   rq   © r   r   ÚHandlerrm   £   s#   € € € € € ð#ð #ð #ð #ð #r   rt   ©r   ÚRequestHandlerÚasyncioÚrunrj   ©rF   rt   s     r   Útest_sync_handlerz CircleRefsTest.test_sync_handler¢   sU   € ð	#ð 	#ð 	#ð 	#ð 	#•cÔ(ñ 	#ô 	#ð 	#õ 	Œ�D×$Ò$ WÑ-Ô-Ñ.Ô.Ð.Ð.Ð.r   c                 ó„   —  G d„ dt           j        ¦  «        }t          j        |                      |¦  «        ¦  «         d S )Nc                   ó   — e Zd Zd„ ZdS )ú=CircleRefsTest.test_finish_exception_handler.<locals>.Handlerc                 ó*   — t          j        d¦  «        ‚ro   )r   ÚFinishrJ   s    r   rq   zACircleRefsTest.test_finish_exception_handler.<locals>.Handler.get«   s   € Ý”j Ñ(Ô(Ð(r   Nrr   rs   r   r   rt   r}   ª   s#   € € € € € ð)ð )ð )ð )ð )r   rt   ru   ry   s     r   Útest_finish_exception_handlerz,CircleRefsTest.test_finish_exception_handler©   sU   € ð	)ð 	)ð 	)ð 	)ð 	)•cÔ(ñ 	)ô 	)ð 	)õ 	Œ�D×$Ò$ WÑ-Ô-Ñ.Ô.Ð.Ð.Ð.r   c                 ó„   —  G d„ dt           j        ¦  «        }t          j        |                      |¦  «        ¦  «         d S )Nc                   ó.   — e Zd Zej        d„ ¦   «         ZdS )ú1CircleRefsTest.test_coro_handler.<locals>.Handlerc              3   ó`   K  — t          j        d¦  «        V — |                      d¦  «         d S ©Ng{®Gáz„?rp   ©rw   Úsleepr.   rJ   s    r   rq   z5CircleRefsTest.test_coro_handler.<locals>.Handler.get²   s4   è è € å”m DÑ)Ô)Ð)Ð)Ð)Ø—
’
˜6Ñ"Ô"Ð"Ð"Ð"r   N)rL   rM   rN   r   Ú	coroutinerq   rs   r   r   rt   rƒ   ±   s/   € € € € € ØŒ]ð#ð #ñ Œ]ð#ð #ð #r   rt   ru   ry   s     r   Útest_coro_handlerz CircleRefsTest.test_coro_handler°   sU   € ð	#ð 	#ð 	#ð 	#ð 	#•cÔ(ñ 	#ô 	#ð 	#õ 	Œ�D×$Ò$ WÑ-Ô-Ñ.Ô.Ð.Ð.Ð.r   c                 ó„   —  G d„ dt           j        ¦  «        }t          j        |                      |¦  «        ¦  «         d S )Nc                   ó   — e Zd Zd„ ZdS )ú2CircleRefsTest.test_async_handler.<locals>.Handlerc              “   óh   K  — t          j        d¦  «        ƒ d {V —† |                      d¦  «         d S r…   r†   rJ   s    r   rq   z6CircleRefsTest.test_async_handler.<locals>.Handler.get»   s@   è è € Ý”m DÑ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ø—
’
˜6Ñ"Ô"Ð"Ð"Ð"r   Nrr   rs   r   r   rt   rŒ   º   s#   € € € € € ð#ð #ð #ð #ð #r   rt   ru   ry   s     r   Útest_async_handlerz!CircleRefsTest.test_async_handler¹   sU   € ð	#ð 	#ð 	#ð 	#ð 	#•cÔ(ñ 	#ô 	#ð 	#õ
 	Œ�D×$Ò$ WÑ-Ô-Ñ.Ô.Ð.Ð.Ð.r   c                 ó8  ‡‡— dd l }|j                             d¦  «        5 Š G ˆfd„d¦  «        } |¦   «         Šˆfd„}t          ¦   «         5  t	          j         |¦   «         ¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )Nr   é   c                   ó>   •— e Zd Z” Zej        j        d„ ¦   «         ZdS )ú4CircleRefsTest.test_run_on_executor.<locals>.Factoryc                 ó   — d S r	   rs   rJ   s    r   rx   z8CircleRefsTest.test_run_on_executor.<locals>.Factory.runÍ   s   € à˜4r   N)rL   rM   rN   ÚexecutorrZ   Ú
concurrentÚrun_on_executorrx   )Úthread_pools   €r   ÚFactoryr’   Ê   s:   ø€ € € € € Ø&�àÔ#Ô3ð ð  ñ 4Ô3ð ð  ð  r   r˜   c               “   ód   •K  — t          d¦  «        D ]} ‰                     ¦   «         ƒ d {V —† Œd S )Né   )Úrangerx   )ÚiÚfactorys    €r   Úmainz1CircleRefsTest.test_run_on_executor.<locals>.mainÓ   sI   øè è € å˜q™œð (ð (�AØ!Ÿ+š+™-œ-Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ð(ð (r   )Úconcurrent.futuresÚfuturesÚThreadPoolExecutorr;   rw   rx   )rF   r•   r˜   rž   r�   r—   s       @@r   Útest_run_on_executorz#CircleRefsTest.test_run_on_executorÁ   s[  øø€ ð
 	"Ð!Ð!Ð!àÔ×2Ò2°1Ñ5Ô5ð 	$¸ð ð  ð  ð  ð  ð  ð  ñ  ô  ð  ð �g‘i”iˆGð(ð (ð (ð (ð (õ
 )Ñ*Ô*ð $ð $Ý”˜D˜D™FœFÑ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð!	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð 	$ð 	$s5   ¡-BÁA7Á+BÁ7A;	Á;BÁ>A;	Á?BÂBÂBN)
rL   rM   rN   rV   rj   rz   r€   r‰   rŽ   r¢   rs   r   r   r=   r=   h   s~   € € € € € ð :ð  :ð  :ðDð ð ð,/ð /ð /ð/ð /ð /ð/ð /ð /ð/ð /ð /ð$ð $ð $ð $ð $r   r=   )Ú__doc__rw   Ú
contextlibr   r(   r*   r4   r1   ÚtypingÚunittestrZ   r   r   r   Útornado.test.utilr   r!   Úcontextmanagerr;   ÚTestCaser=   rs   r   r   ú<module>rª      s  ððð ð €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€à €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð$ð $ð $ðN Ôð#ð #ñ Ôð#ðN ðp$ð p$ð p$ð p$ð p$�XÔ&ñ p$ô p$ñ „ðp$ð p$ð p$r   