+
    -Ië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
t
^ RI
HtHtHt ^ RIHt  ^ RIt]e   ^ RIHt R t]P*                  R 4       t ! R R]P.                  4      t] ! R	 R
]	P2                  4      4       tR#   ] d    Rt L[i ; i)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)ÚskipNotCPython©ÚCurlAsyncHTTPClientc                óš   aaaaaa€ VVVVVV3R lo. o. o\        4       o\        \        \        V 4      4      o\        4       oS! V 4       S# )zô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                 ó²  <€ V  FÏ  p\        V4      pVS9  d   K  VS	9   d   K   VS9   d9   SSP                  V4      R  pVP                  V4       SP                  V4       K_  SP                  V4       SP                  V4       S! \        P
                  ! V4      4       SP                  4        SP                  V4       S	P                  V4       KÑ  	  R # ©N)ÚidÚindexÚappendÚaddÚgcÚget_referentsÚpopÚremove)
ÚlevelÚitemÚitem_idÚ	candidateÚfoundÚgarbage_idsÚinnerÚstackÚ	stack_idsÚvisited_idss
   &   €€€€€€Ú>/usr/lib/python3/dist-packages/tornado/test/circlerefs_test.pyr   Ú'find_circular_references.<locals>.inner*   sµ   ø€ ÛˆDÜ˜“hˆGØ˜kÔ)ÙØ˜+Ô%ÙØ˜)Ô#Ø! %§+¡+¨dÓ"3Ð"5Ð6�	Ø× Ñ  Ô&Ø—‘˜YÔ'Ùà�L‰L˜ÔØ�M‰M˜'Ô"Ù”"×"Ò" 4Ó(Ô)Ø�I‰IŒKØ×Ñ˜WÔ%Ø�O‰O˜GÖ$ó# ó    )ÚsetÚmapr   )Úgarbager   r   r   r   r   r   s   &@@@@@@r   Úfind_circular_referencesr#   !   sD   ý€ ÷%ò %ð( "$€EØ€EÜ“€IÜ”cœ"˜gÓ&Ó'€KÜ“%€Ká	ˆ'„NØ€Lr   c               #  óŠ  "  € \         P                  ! 4        \         P                  ! 4        \         P                  ! \         P                  \         P
                  ,          4       Rx €  \        P                  ! 4       p \        P                  pV \        n	         \         P                  ! 4        V\        n	        \         P                  R,          p. \         P                  R&   \        V4      ^ 8X  d/    \         P                  ! ^ 4       \         P                  ! 4        R# \        V4       F¶  pV P                  R4       V F   pV P                  R\        V4       24       K"  	  V Fv  p\!        V\"        P$                  4      '       g   K%  V P                  RVP&                   24       V P                  R\        V4       24       \(        P*                  ! V4       Kx  	  K¸  	  ?\-        V P/                  4       4      h  T\        n	        i ; i  \         P                  ! ^ 4       \         P                  ! 4        i ; i5i)zERaise AssertionError if the wrapped code creates garbage with cycles.N:NNNz!
==========
 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=   H   s|  é € ô ‡J‚J„LÜ‡J‚J„LÜ‡L‚L”—‘¤"×"2Ñ"2Õ2Ô3Û	ðô �KŠK‹MˆÜ—Z‘Zˆ
ØŒŒ
ð	$Ü�JŠJŒLà#ŒCŒJÜ—*‘*˜Q•-ˆð Œ�
‰
�1‰Üˆw‹<˜1ÔØô 	�Š�QŒÜ
�	Š	Žô 1°Ö9ˆHØ�G‰GÐ:Ô;Û �Ø—‘˜&¤ d£ Ð-Ö.ñ !ã �Ü˜d¤E§O¡O×4Ô4Ø—G‘G˜j¨¯©¨Ð8Ô9Ø—G‘G˜m¬D°«J¨<Ð8Ô9Ü×)Ò)¨$Ö/ó	 !ñ	 :ð Ü˜QŸZ™Z›\Ó*Ð*øð# $ŒC�Jûô& 	�Š�QŒÜ
�	Š	�üsE   ‚A(IÁ+0H ÂH Â1AH Ã7-IÄ$A'H ÆA3H ÈHÈH È-I É Ic                   ó&   a € ] tR t^ot o R tRtV tR# )Ú	OkHandlerc                ó(   € V P                  R 4       R# ©úok
N©r0   ©Úselfs   &r   ÚgetÚOkHandler.getp   s   € Ø�
‰
�6Ör   © N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rF   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r?   r?   o   s   ø‡ € ÷ð r   r?   c                   óÀ   a € ] tR t^ut o R tRR ltR tR tR tR t	R t
]P                  ! ]RJ R	4      R
 4       t]P                  ! ]RJ R	4      R 4       tR tRtV tR# )ÚCircleRefsTestc           	     ót  €  ! R  R4      pV P                  \        4      ;_uu_ 4       p\        4       ;_uu_ 4        V! R4      pV! R4      pV! R4      pWCn        WSn        W4n        WTn        ??RRR4       RRR4       V P                  R\        XP                  4      4       V P                  R\        VP                  4      4       V P                  R\        VP                  4      4       V P                  R	\        VP                  4      4       R#   + '       g   i     L®; i  + '       g   i     L¹; i)
c                   ó,   a € ] tR t^yt o R tR tRtV tR# )Ú)CircleRefsTest.test_known_leak.<locals>.Cc                ó<   € Wn         R V n        R V n        R V n        R # r
   )ÚnameÚaÚbÚc)rE   rX   s   &&r   Ú__init__Ú2CircleRefsTest.test_known_leak.<locals>.C.__init__z   s   € Ø ”	Ø-1�”Ø-1�”Ø-1�–r   c                ó    € R V P                    2# )zname=)rX   rD   s   &r   Ú__repr__Ú2CircleRefsTest.test_known_leak.<locals>.C.__repr__€   s   € Ø˜tŸy™y˜kÐ*Ð*r   )rY   rZ   r[   rX   N)rJ   rK   rL   rM   r\   r_   rN   rO   rP   s   @r   ÚCrV   y   s   ø‡ € ò2÷+ð +r   ra   rY   rZ   r[   NÚCircularz
    name=az
    name=bz
    name=c)
ÚassertRaisesr8   r=   rZ   r[   rY   ÚassertInÚstrÚ	exceptionÚassertNotIn)rE   ra   ÚcmrY   rZ   r[   s   &     r   Útest_known_leakÚCircleRefsTest.test_known_leakw   sÞ   € ÷	+ñ 	+ð ×Ñœ~×.Ô.°"Ü(×*Õ*ñ �c“F�Ù�c“F�Ù�c“F�Ø”Ø”Ø”Ø”Ø�q÷ +÷ /ð 	�‰�j¤# b§l¡lÓ"3Ô4ð 	�‰�l¤C¨¯©Ó$5Ô6Ø�‰�l¤C¨¯©Ó$5Ô6Ø×Ñ˜¤s¨2¯<©<Ó'8Ö9÷' +×*ú÷ /×.ús"   ¨D'»3D	Á.D'ÄD$ÄD'Ä'D7	Nc              ‹  ó  "  € \         P                  ! R V3.4      p\        P                  P	                  4       w  rV\        P
                  P                  V4      pVP                  V4       Vf   \        P                  pV! 4       p\        4       ;_uu_ 4        VP                  ! RV R 23/ VB G Rj  x€L
  RRR4       VP                  4        VP                  4        VP                  4        R#  L>  + '       g   i     LD; i5i)Ú/Nzhttp://127.0.0.1:)r   ÚApplicationÚtornadoÚtestingÚbind_unused_portÚ
httpserverÚ
HTTPServerÚ
add_socketr   ÚAsyncHTTPClientr=   ÚfetchÚcloseÚstop)	rE   Úhandler_classÚclient_factoryÚfetch_kwargsÚappÚsocketÚportÚserverÚclients	   &&&,     r   Úrun_handlerÚCircleRefsTest.run_handler™   sÑ   é € Ü�oŠoà�}Ð%ðó
ˆô
 —‘×7Ñ7Ó9‰ˆÜ×#Ñ#×.Ñ.¨sÓ3ˆØ×Ñ˜&Ô!ð Ò!Ü'×7Ñ7ˆNÙÓ!ˆÜ$×&Õ&ð —,’,Ð!2°4°&¸Ð:ÑK¸lÑK×KÐK÷ 'ð 	�‰ŒØ�‰ŒØ�‰Žñ L÷ '×&üs0   ‚BDÂC5Â4C3Â5C5Â9:DÃ3C5Ã5D	Ä Dc                ó‚   €  ! R  R\         P                  4      p\        P                  ! V P	                  V4      4       R# )c                   ó&   a € ] tR t^´t o R tRtV tR# )Ú1CircleRefsTest.test_sync_handler.<locals>.Handlerc                ó(   € V P                  R 4       R# rA   rC   rD   s   &r   rF   Ú5CircleRefsTest.test_sync_handler.<locals>.Handler.getµ   s   € Ø—
‘
˜6Ö"r   rH   NrI   rP   s   @r   ÚHandlerr„   ´   s   ø‡ € ÷#ð #r   r‡   N©r   ÚRequestHandlerÚasyncioÚrunr€   ©rE   r‡   s   & r   Útest_sync_handlerÚ CircleRefsTest.test_sync_handler³   s-   € ô	#”c×(Ñ(ô 	#ô 	�Š�D×$Ñ$ WÓ-Ö.r   c                ó‚   €  ! R  R\         P                  4      p\        P                  ! V P	                  V4      4       R# )c                   ó&   a € ] tR t^»t o R tRtV tR# )Ú=CircleRefsTest.test_finish_exception_handler.<locals>.Handlerc                ó.   € \         P                  ! R 4      h)rB   )r   ÚFinishrD   s   &r   rF   ÚACircleRefsTest.test_finish_exception_handler.<locals>.Handler.get¼   s   € Ü—j’j Ó(Ð(r   rH   NrI   rP   s   @r   r‡   r‘   »   s   ø‡ € ÷)ð )r   r‡   Nrˆ   rŒ   s   & r   Útest_finish_exception_handlerÚ,CircleRefsTest.test_finish_exception_handlerº   s-   € ô	)”c×(Ñ(ô 	)ô 	�Š�D×$Ñ$ WÓ-Ö.r   c                ó‚   €  ! R  R\         P                  4      p\        P                  ! V P	                  V4      4       R# )c                   óD   a € ] tR t^Ât o ]P
                  R 4       tRtV tR# )Ú1CircleRefsTest.test_coro_handler.<locals>.Handlerc              3  ó`   "  € \         P                  ! R 4      x € V P                  R4       R# 5i)ç{®Gáz„?rB   N©rŠ   Úsleepr0   rD   s   &r   rF   Ú5CircleRefsTest.test_coro_handler.<locals>.Handler.getÃ   s    é € ä—m’m DÓ)Ò)Ø—
‘
˜6Ö"ùs   ‚,.rH   N)	rJ   rK   rL   rM   r   Ú	coroutinerF   rN   rO   rP   s   @r   r‡   r™   Â   s   ø‡ € Ø�]‰]ñ#ó ö#r   r‡   Nrˆ   rŒ   s   & r   Útest_coro_handlerÚ CircleRefsTest.test_coro_handlerÁ   s-   € ô	#”c×(Ñ(ô 	#ô 	�Š�D×$Ñ$ WÓ-Ö.r   c                ó‚   €  ! R  R\         P                  4      p\        P                  ! V P	                  V4      4       R# )c                   ó&   a € ] tR t^Ët o R tRtV tR# )Ú2CircleRefsTest.test_async_handler.<locals>.Handlerc              “  óp   "  € \         P                  ! R 4      G Rj  x€L
  V P                  R4       R#  L5i)r›   NrB   rœ   rD   s   &r   rF   Ú6CircleRefsTest.test_async_handler.<locals>.Handler.getÌ   s(   é € Ü—m’m DÓ)×)Ð)Ø—
‘
˜6Ö"ñ *ùs   ‚6œ4�6rH   NrI   rP   s   @r   r‡   r¤   Ë   s   ø‡ € ÷#ð #r   r‡   Nrˆ   rŒ   s   & r   Útest_async_handlerÚ!CircleRefsTest.test_async_handlerÊ   s-   € ô	#”c×(Ñ(ô 	#ô
 	�Š�D×$Ñ$ WÓ-Ö.r   c                ó^   € \         P                  ! V P                  \        R  R7      4       R# )c                 ó   € R # r
   rH   ©Úchunks   &r   Ú<lambda>Ú8CircleRefsTest.test_streaming_callback.<locals>.<lambda>Ø   s   € ÑQUr   )Ústreaming_callbackN©rŠ   r‹   r€   r?   rD   s   &r   Útest_streaming_callbackÚ&CircleRefsTest.test_streaming_callback×   s   € Ü�Š�D×$Ñ$¤YÑCUÐ$ÓVÖWr   zpycurl module not presentc                ó^   € \         P                  ! V P                  \        R  R7      4       R# )c                  ó   € \        R R7      # ©T)Úforce_instancer   rH   r   r   r­   Ú5CircleRefsTest.test_curl_httpclient.<locals>.<lambda>ß   ó
   € Ô':È$Õ'Or   )ry   Nr°   rD   s   &r   Útest_curl_httpclientÚ#CircleRefsTest.test_curl_httpclientÚ   s'   € ä�ŠØ×ÑÜÙOð ó ö	
r   c                ób   € \         P                  ! V P                  \        R  R R7      4       R# )c                  ó   € \        R R7      # rµ   r   rH   r   r   r­   ÚHCircleRefsTest.test_curl_httpclient_streaming_callback.<locals>.<lambda>è   r¸   r   c                 ó   € R # r
   rH   r«   s   &r   r­   r½   é   s   € ±r   )ry   r¯   Nr°   rD   s   &r   Ú'test_curl_httpclient_streaming_callbackÚ6CircleRefsTest.test_curl_httpclient_streaming_callbackã   s*   € ä�ŠØ×ÑÜÙOÙ#5ð ó ö	
r   c           	     óX  aa€ ^ RI pVP                  P                  ^4      ;_uu_ 4       o ! V3R lR4      pV! 4       oV3R lp\        4       ;_uu_ 4        \        P
                  ! V! 4       4       RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i)é    Nc                   ó`   <a € ] tR t^öt o  Zt]P                  P                  R 4       tRt	V t
R# )Ú4CircleRefsTest.test_run_on_executor.<locals>.Factoryc                ó   € R # r
   rH   rD   s   &r   r‹   Ú8CircleRefsTest.test_run_on_executor.<locals>.Factory.runù   s   € ár   rH   N)rJ   rK   rL   rM   Úexecutorrn   Ú
concurrentÚrun_on_executorr‹   rN   rO   )rQ   Úthread_pools   @€r   ÚFactoryrÄ   ö   s(   ù‡ € Ù&�à×#Ñ#×3Ñ3ñ ó 4ö r   rË   c               “   óh   <"  € \        ^4       F  p SP                  4       G Rj  x€L
  K  	  R#  L
5i)é   N)Úranger‹   )ÚiÚfactorys    €r   ÚmainÚ1CircleRefsTest.test_run_on_executor.<locals>.mainÿ   s&   øé € ä˜qž�AØ!Ÿ+™+›-×'Ò'ó "Ù'ùs   ƒ"2¥0¦2)Úconcurrent.futuresÚfuturesÚThreadPoolExecutorr=   rŠ   r‹   )rE   rÈ   rË   rÑ   rÐ   rÊ   s   &   @@r   Útest_run_on_executorÚ#CircleRefsTest.test_run_on_executorí   st   ù€ ó
 	"à×Ñ×2Ñ2°1×5Ô5¸÷ ô  ñ “iˆGõ(ô
 )×*Õ*Ü—’™D›FÔ#÷ +÷! 6Ñ5÷  +×*ú÷! 6×5Ð5ús#   ª-BÁB	Á3BÂBÂBÂB)	rH   r
   )rJ   rK   rL   rM   ri   r€   r�   r•   r    r§   r±   ÚunittestÚskipIfÚpycurlr¹   r¿   rÖ   rN   rO   rP   s   @r   rS   rS   u   s~   ø‡ € ò :ôDò4/ò/ò/ò/òXð ‡_‚_�V˜t�^Ð%@ÓAñ
ó Bð
ð ‡_‚_�V˜t�^Ð%@ÓAñ
ó Bð
÷$ð $r   rS   )Ú__doc__rŠ   Ú
contextlibr   r*   r,   r6   r3   ÚtypingrØ   rn   r   r   r   Útornado.test.utilr   rÚ   ÚImportErrorÚtornado.curl_httpclientr   r#   Úcontextmanagerr=   r‰   r?   ÚTestCaserS   rH   r   r   Ú<module>rã      s´   ðñó Û Û 	Û 	Û 
Û Û Û Û ã ß (Ñ (Ý ,ðÛð 
ÒÝ;ò$ðN ×Ññ#ó ð#ôL�×"Ñ"ô ð ôO$�X×&Ñ&ó O$ó òO$øðy ô Ø‚Fðús   ¼B Â	BÂB