Ë
    ÷ÿæi�  ã                   ó¦   — d Z ddlZddlZddlZddlZ G d„ dej
                  «      Z G d„ de«      Z e	ed«      rd„ Z
ej                  Zyd	„ Z
d
„ Zy)a[  A subclass of unittest.TestCase which checks for reference leaks.

To use:
- Use testing_refleak.BaseTestCase instead of unittest.TestCase
- Configure and compile Python with --with-pydebug

If sys.gettotalrefcount() is not available (because Python was built without
the Py_DEBUG option), then this module is a no-op and tests will run normally.
é    Nc                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚLocalTestResultzHA TestResult which forwards events to a parent object, except for Skips.c                 óP   — t         j                  j                  | «       || _        y ©N)ÚunittestÚ
TestResultÚ__init__Úparent_result)Úselfr
   s     ú~/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/google/protobuf/internal/testing_refleaks.pyr	   zLocalTestResult.__init__   s   € Ü×Ñ× Ñ  Ô&Ø&€DÕó    c                 ó<   — | j                   j                  ||«       y r   )r
   ÚaddError©r   ÚtestÚerrors      r   r   zLocalTestResult.addError   s   € Ø×Ñ×Ñ  eÕ,r   c                 ó<   — | j                   j                  ||«       y r   )r
   Ú
addFailurer   s      r   r   zLocalTestResult.addFailure"   s   € Ø×Ñ×!Ñ! $¨Õ.r   c                  ó   — y r   © )r   r   Úreasons      r   ÚaddSkipzLocalTestResult.addSkip%   ó   € Ør   c                  ó   — y r   r   )r   r   Údurations      r   ÚaddDurationzLocalTestResult.addDuration(   r   r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r   r   r   r   r   r   r      s   „ ÙPò'ò-ò/ò	ó	r   r   c                   ó.   ‡ — e Zd ZdZdZdˆ fd„	Zd„ Zˆ xZS )ÚReferenceLeakCheckerMixinz:A mixin class for TestCase, which checks reference counts.é   c                 ó  •— t        | | j                  «      }t        |dd«      }t        | dd«      }|s|ry t        j                  j	                  «       | _        t        t        | �#  |¬«       t        t        | �#  |¬«       t        |«      }d}g }| j                  «       }t        |«      | j                  k  rs| j                  «       }t        t        | �#  |¬«       | j                  «       }	|	|k  r|dk  r|dz  }Œ\d}|j                  |	|z
  «       t        |«      | j                  k  rŒst        || «       	 | j                  |dg| j                  z  «       y # t         $ r' |j#                  | t%        j&                  «       «       Y y w xY w)NÚ__unittest_expecting_failure__F)Úresultr   é   é   )ÚgetattrÚ_testMethodNameÚcopyregÚdispatch_tableÚcopyÚ_saved_pickle_registryÚsuperr"   Úrunr   Ú_getRefcountsÚlenÚNB_RUNSÚappendÚprintÚassertEqualÚ	Exceptionr   ÚsysÚexc_info)r   r&   Ú
testMethodÚexpecting_failure_methodÚexpecting_failure_classÚlocal_resultÚ
num_flakesÚrefcount_deltasÚoldrefcountÚnewrefcountÚ	__class__s             €r   r0   zReferenceLeakCheckerMixin.run1   s|  ø€ Ü˜˜t×3Ñ3Ó4€JÜ& zÐ3SÐUZÓ[ÐÜ% dÐ,LÈeÓTÐÙÑ":Øô
 #*×"8Ñ"8×"=Ñ"=Ó"?€DÔô 
Ô
# TÑ.°fÐ.Ô=Ü	Ô
# TÑ.°fÐ.Ô=ä" 6Ó*€LØ€JØ€Oð ×$Ñ$Ó&€KÜ
ˆoÓ
 §¡Ò
-Ø×&Ñ&Ó(€kÜÔ% tÑ0¸Ð0ÔEØ×&Ñ&Ó(€kð 
�{Ò	" z°A¢~ð
 	�a‰ˆ
ØØ€jØ×Ñ˜[¨;Ñ6Ô7ô ˆoÓ
 §¡Ó
-ô 
ˆ/˜4Ô ð,Ø
×Ñ�¨¨¨d¯l©lÑ(:Õ;øÜò ,Ø‡o�o�dœCŸL™L›NÖ+ð,ús   Ä9 E Å-F
Æ	F
c                 ó¢  — t        t        d«      rt        j                  «        nt        j                  «        t        j
                  j                  «        t        j
                  j                  | j                  «       t        j                  «        t        j                  «        t        j                  «        t        j                  «       S )NÚ_clear_internal_caches)Úhasattrr8   rD   Ú_clear_type_cacher+   r,   ÚclearÚupdater.   ÚgcÚcollectÚgettotalrefcount)r   s    r   r1   z'ReferenceLeakCheckerMixin._getRefcounts^   s}   € ÜŒsÐ,Ô-Ü	× Ñ Õ"ä	×ÑÔÜ×Ñ× Ñ Ô"Ü×Ñ×!Ñ! $×"=Ñ"=Ô>ô ‡J�J„LÜ‡J�J„LÜ‡J�J„LÜ×ÑÓ!Ð!r   r   )r   r   r   r    r3   r0   r1   Ú__classcell__)rB   s   @r   r"   r"   ,   s   ø„ ÙBà€'õ+,öZ"r   r"   rK   c                 óŽ   — t         f| j                  z   } t        | «      | j                  |t	        | j
                  «      «      }|S r   )r"   Ú	__bases__Útyper   ÚdictÚ__dict__)Ú
test_classÚ	new_basesÚ	new_classs      r   ÚTestCaserU   o   sE   € Ü*Ð,¨z×/CÑ/CÑC€IØ ”�ZÓ Ø×Ñ˜Y¬¨Z×-@Ñ-@Ó(AóC€IàÐr   c                 ó   — | S r   r   )rR   s    r   rU   rU   y   s   € ØÐr   c                 ó   — ~ d„ }|S )Nc                 ó   — | S r   r   )Úfuncs    r   ÚSamez&SkipReferenceLeakChecker.<locals>.Same~   s   € Ø€kr   r   )r   rZ   s     r   ÚSkipReferenceLeakCheckerr[   |   s   € Øòà€Kr   )r    r+   rI   r8   r   r   r   Úobjectr"   rE   rU   Úskipr[   r   r   r   Ú<module>r^      s_   ðñó Û 	Û 
Û ô	�h×)Ñ)ô 	ô(>" ô >"ñB ˆ3Ð"Ô#òð
 &Ÿ]™]Ñò
ór   