o
    HXhB                     @   s*  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
Zd dlmZ d dl
mZ d dlmZmZ d dl
mZ d dlZd dlZd dlZd aG dd dejZG dd	 d	ejZG d
d dejZejjG dd dejZejjG dd dejZedkre  dS dS )    N)support)	os_helper)assert_python_okassert_python_failure)threading_helperc                   @   $   e Zd Zdd Zdd Zdd ZdS )DisplayHookTestc                 C   s   t j}t }|d W d    n1 sw   Y  | | d | tjd t`t }|d  W d    n1 s?w   Y  | | d | t	td  | 
t| t j}zt `| 
t|d W |t _d S |t _w )N*   z42
 _)sys__displayhook__r   Zcaptured_stdoutassertEqualgetvaluebuiltinsr   
assertTruehasattrassertRaises	TypeErrorstdoutRuntimeError)selfZdhoutr    r   7/opt/python-3.10.19/usr/lib/python3.10/test/test_sys.pytest_original_displayhook   s$   



z)DisplayHookTest.test_original_displayhookc                 C   s:   t j}zt `tddd}| tt| W |t _d S |t _w )N42<string>single)r   displayhookcompiler   r   eval)r   r   coder   r   r   test_lost_displayhook7   s   z%DisplayHookTest.test_lost_displayhookc                 C   sV   dd }t td| tddd}| tt| W d    d S 1 s$w   Y  d S )Nc                 S      t N
ValueError)objr   r   r   baddisplayhookA      z?DisplayHookTest.test_custom_displayhook.<locals>.baddisplayhookr   r   r   r   )r   	swap_attrr   r    r   r'   r!   )r   r)   r"   r   r   r   test_custom_displayhook@   s
   "z'DisplayHookTest.test_custom_displayhookN)__name__
__module____qualname__r   r#   r,   r   r   r   r   r      s    	r   c                   @   r   )ExceptHookTestc                 C   s   zt d t y1 } z!t }tjt   W d    n1 s"w   Y  W Y d }~nd }~ww | | d | 	t
tj d S )Nr	   ValueError: 42
)r'   r   captured_stderrr   __excepthook__exc_infor   r   endswithr   r   r   excerrr   r   r   test_original_excepthookK   s   
z'ExceptHookTest.test_original_excepthookc                 C   s   t  A t dt ztdd ty= } z!t }tjt	   W d    n1 s.w   Y  W Y d }~nd }~ww W d    n1 sHw   Y  |
 }| d| | d| | |d d S )Nignoremsg)s   bytes_filename{   r   textz%  File "b'bytes_filename'", line 123
z	    text
zSyntaxError: msg
)warningscatch_warningssimplefilterBytesWarningSyntaxErrorr   r2   r   r3   r4   r   assertInr   r5   r6   r   r   r   test_excepthook_bytes_filenameV   s    


	z-ExceptHookTest.test_excepthook_bytes_filenamec                 C   sP   t jd}tddd W d    n1 sw   Y  | d| v  d S )Nstderr   1zETypeError: print_exception(): Exception expected for value, str found)testr   captured_outputr   
excepthookr   r   )r   rE   r   r   r   test_excepthookg   s   
zExceptHookTest.test_excepthookN)r-   r.   r/   r9   rD   rK   r   r   r   r   r0   I   s    r0   c                   @   s(  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
jdd Zdd Zdd Zeeedddd Ze	j
jdd Zdd Zejdd Zejdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Z d+d, Z!d-d. Z"d/d0 Z#e	j
jd1d2 Z$d3d4 Z%ee&j'd5ee( e)*d6kd7d8d9 Z+e,ej-ej.kd:d;d< Z/dhd>d?Z0d@dA Z1didBdCZ2dDdE Z3dFdG Z4dHdI Z5dJdK Z6e	j
jdLdM Z7eeedNdOdPdQ Z8dRdS Z9dTdU Z:dVdW Z;eeedXdYdZd[ Z<d\d] Z=d^d_ Z>eeed`dadbdc Z?ddde Z@dfdg ZAd=S )jSysModuleTestc                 C   s   t j  d S r%   )rH   r   reap_childrenr   r   r   r   tearDowns      zSysModuleTest.tearDownc                    s    ttjdd   t}t  W d    n1 sw   Y   |jj tdd\}}} 	|d  	|d  	|d   t}td W d    n1 sXw   Y   	|jjd   t}td W d    n1 szw   Y   	|jjd   t}td W d    n1 sw   Y   	|jjd   t}td W d    n1 sw   Y   	|jjd t
dd	\}}} 	|d
  	|d  	|d  fdd}|dd |dd |dddd d S )Nr	   -czimport sys; sys.exit()r       )r	   exit)      zraise SystemExit(47)/   c                    sV   t d| fi |\}}} |d  |d  ||dt|t|f  d S )NrQ   rF   rR   z%s doesn't start with %s)r   r   r   
startswithascii)r"   expectedZenv_varsrcr   r8   rN   r   r   check_exit_message   s   z3SysModuleTest.test_exit.<locals>.check_exit_messagez?import sys; sys.stderr.write("unflushed,"); sys.exit("message")s   unflushed,messagez)import sys; sys.exit("surrogates:\uDCFF")s   surrogates:\udcffzimport sys; sys.exit("h\xe9")s   hzlatin-1)PYTHONIOENCODING)r   r   r   rS   
SystemExitassertIsNone	exceptionr"   r   r   r   )r   cmrZ   r   r8   r[   r   rN   r   	test_exitv   sT   
	
zSysModuleTest.test_exitc                 C   s$   |  ttjd | t t d S )Nr	   )r   r   r   getdefaultencodingassertIsInstancestrrN   r   r   r   test_getdefaultencoding   s   z%SysModuleTest.test_getdefaultencodingc              	   C   s   |  ttj |  ttjd |  ttjd |  ttjd t }| |dk | zddd|fD ]}t| | t | q2W t| d S t| w )Nag      g        g      ?gh㈵>g?g      @)r   r   r   setswitchintervalr'   getswitchintervalr   ZassertAlmostEqual)r   Zorignr   r   r   test_switchinterval   s   
z!SysModuleTest.test_switchintervalc                 C   s^   |  ttjd t }|  ttj |  ttjd td | t d t| d S )Nr	   ii'  )r   r   r   getrecursionlimitsetrecursionlimitr'   r   )r   oldlimitr   r   r   test_recursionlimit   s   
z!SysModuleTest.test_recursionlimitc              	      s   t tdrt r| d t } fdd zNdD ]C}zt| W n	 ty-   Y qw | t    W d    n1 sAw   Y  | t    W d    n1 sYw   Y  qW t| d S t| w )Ngettracez(fatal error if run with a trace functionc                      
      d S r%   r   r   fr   r   rr         
z5SysModuleTest.test_recursionlimit_recovery.<locals>.f)2   K   d        )r   r   ro   ZskipTestrk   rl   RecursionErrorr   )r   rm   depthr   rq   r   test_recursionlimit_recovery   s(   
z*SysModuleTest.test_recursionlimit_recoveryc              	      s`   ddl m   fddt }ztd dD ]}|| qW t| d S t| w )Nr   )get_recursion_depthc                    sf     }|| kr, t}t| W d    n1 sw   Y  t|jd d S | | d S )Nz\cannot set the recursion limit to [0-9]+ at the recursion depth [0-9]+: the limit is too low)r   ry   r   rl   ZassertRegexrd   r_   )rz   limitrecursion_depthr`   r|   r   set_recursion_limit_at_depthr   r   r      s   zZSysModuleTest.test_setrecursionlimit_recursion_depth.<locals>.set_recursion_limit_at_depthrx   )
      rt   ru   rv         )_testinternalcapir|   r   rk   rl   )r   rm   r}   r   r   r   &test_setrecursionlimit_recursion_depth   s   
z4SysModuleTest.test_setrecursionlimit_recursion_depthc                 C   sv  t jtd t }| t|d | |d t | |d t | |d t | |d t | |d t	 | 
ttj|d | |jt | |jt | |jt | |jt | |jt	 | |jt | |jt | |jt | |jt | |d |j | |d |j | |d |j | |d |j | |d |j t \}}}}}d S )Ngetwindowsversion   r   rF            )rH   r   get_attributer   r   r   lenrc   intrd   r   
IndexErroroperatorgetitemmajorminorZbuildplatformZservice_packZservice_pack_minorZservice_pack_majorZ
suite_maskZproduct_type)r   vZmajminZbuildnoZplatZcsdr   r   r   test_getwindowsversion  s0   z$SysModuleTest.test_getwindowsversionc                 C   s   |  ttjtd d S )Nr   )r   r   r   call_tracingtyperN   r   r   r   test_call_tracing+     zSysModuleTest.test_call_tracingsetdlopenflagsztest needs sys.setdlopenflags()c                 C   sf   |  ttd | ttjd t }| ttj t|d  | t |d  t| d S )Ngetdlopenflagsr	   rF   )r   r   r   r   r   r   r   r   )r   Zoldflagsr   r   r   test_dlopenflags.  s   zSysModuleTest.test_dlopenflagsc                 C   sh   |  ttj td }d a| td |d  b| td | ttdr2| t t	 d S d S )NrF   gettotalrefcount)
r   r   r   getrefcountri   r   r   rc   r   r   )r   cr   r   r   test_refcount9  s   

zSysModuleTest.test_refcountc                 C   s>   |  ttjdd |  ttjd | tjjt j	u  d S )Nr	   i 5w)
r   r   r   	_getframer'   r   rL   test_getframe__code__f_coderN   r   r   r   r   I  s   zSysModuleTest.test_getframec                    sp  dd l dd l}   g fdd} fddj|d}|     | td d }t	 }|D ]}| 
|t | |d qA }| || | || ||}| |t u  ||}||}	t|	D ]\}
\}}}}|dkr nq|| d	 | |d
 |	|
d  \}}}}| |d | |ddg   |  d S )Nr   c                      rp   r%   r   r   g456r   r   f123^  rs   z/SysModuleTest.test_current_frames.<locals>.f123c                      s"           d S r%   )append	get_identsetwaitr   	entered_gleave_gthread_info	threadingr   r   r   a  s   z/SysModuleTest.test_current_frames.<locals>.g456targetrF   r   )didn't find f123() on thread's call stackg456()r   zleave_g.wait()zentered_g.set())r   	tracebackEventThreadstartr   r   r   r   _current_framesrc   r   assertGreaterr   rC   popr   r   extract_stack	enumeratefailr   join)r   r   r   t	thread_iddtidmain_idframestackifilenamelinenofuncname
sourceliner   r   r   r   r   r   r   test_current_framesR  sD   



z!SysModuleTest.test_current_framesc                    sn  dd l dd l}   g fdd} fddj|d}|     | td d }t	 }|D ]}| 
|t | |d qA }| || | || | d|| ||\}}	}
||
j}t|D ]\}\}}}}|d	kr nq{| d
 | |d ||d  \}}}}| |d | |d   |  d S )Nr   c                      rp   r%   r   r   r   r   r   r     rs   z3SysModuleTest.test_current_exceptions.<locals>.f123c                      sJ         	 ztd ty#   jtjdr!Y d S Y nw q)NTZoops)timeout)r   r   r   r'   r   r   ZLONG_TIMEOUTr   r   r   r   r     s   z3SysModuleTest.test_current_exceptions.<locals>.g456r   rF   )NNNr   r   r   r   zif leave_g.wait()r   r   r   r   r   r   r   r   r   _current_exceptionsrc   r   r   r   rC   r   r   tb_framer   r   r   rW   r   r   )r   r   r   r   r   r   r   r   exc_type	exc_valueexc_tbr   r   r   r   r   r   r   r   r   test_current_exceptions  sB   

z%SysModuleTest.test_current_exceptionsc                 C   s  |  tjt |  tjt tjD ]}|  |t q|  tjt tjD ]}|  |t q$| tj	d |  tj
t |  tjt |  tjt |  tjt |  tjt | ttjd | tjjd | ttjd | tjjd dk | tjjdk | tjjd | tjjd	 | tjjtjj | ttjjt | ttjjt |  tjjt |  tjjt |  tjt | ttjd
 | tjj dtjj!  t"dd	D ]}| t#|tjj d tjj dd$tjj  q|  tjj%t |  tjj&t |  tjj't t()d}tjj*dv r\| tjj+ddh | tjj,h d |dkrC| tjj*d n|dkrQ| tjj*d n| tjj*ddh n| |d | tjj-d | tjj-d |  tj.t |  tj/t | tj/d |  tj0t |  tj1t |  tj2t |  tj3t |  tj4t tj5}|  |d d  t | t|d |  |d t |  |d t |  |d t | |d d |  |d t |  |j6t |  |j7t |  |j8t | |j9d |  |j:t | |d |j6 | |d |j7 | |d |j8 | |d |j9 | |d |j: | |dk |  tj;t | tj;d tj0<ds\|  tj=t d S d S )N)littlebig   r   r   r   r   rF   i  rv   	   z'sys.hash_info.modulus {} is a non-primeZPy_HASH_ALGORITHM>   fnv	siphash24    @   >   r   r      r   r      i r   alphabeta	candidatefinal)rF   r   r   )Zshortlegacywin)>rc   r   api_versionr   argvlistrd   	orig_argvrC   	byteorderbuiltin_module_namestuple	copyrightexec_prefixbase_exec_prefix
executabler   r   
float_inforadixint_infor   bits_per_digitsizeof_digitassertGreaterEqualdefault_max_str_digitsstr_digits_check_thresholdr   r   
hexversion	hash_info
assertLessmoduluswidthrangepowformatinfnanimag	sysconfigZget_config_var	algorithm	hash_bits	seed_bitscutoffmaxsize
maxunicoder   prefixbase_prefix
platlibdirversionversion_infor   r   microreleaselevelserialfloat_repr_stylerW   abiflags)r   argxZalgovir   r   r   test_attributes  s   





zSysModuleTest.test_attributesc                 C   s6   t j}| t|d | |jd | |jd d S )Nr   )ntZpthreadZsolarisN)	semaphorez
mutex+condN)r   r   r   r   rC   namelock)r   infor   r   r   test_thread_info3  s   zSysModuleTest.test_thread_infoc                 C   s   |  tjjtjj d S r%   )r   r   
__stdout__encoding
__stderr__rN   r   r   r   
test_435819  s   zSysModuleTest.test_43581c                 C   s~   t d7 a | ttj dtt  }| t||u  |  }| t||u  G dd dt}| ttj|d d S )NrF   znever interned beforec                   @      e Zd Zdd ZdS )z$SysModuleTest.test_intern.<locals>.Sc                 S      dS )Nr<   r   rN   r   r   r   __hash__M  r*   z-SysModuleTest.test_intern.<locals>.S.__hash__N)r-   r.   r/   r'  r   r   r   r   SL      r(  abc)INTERN_NUMRUNSr   r   r   internrd   r   swapcase)r   ss2r(  r   r   r   test_intern>  s   zSysModuleTest.test_internc                 C   s   |  tj d}|D ]!}|  ttj|| |dkrtnt}| tttj||| q
|  t	tj | t
tjt
| | tjjh d d S )N)debuginspectinteractiveoptimizedont_write_bytecodeno_user_siteno_siteignore_environmentverbosebytes_warningquiethash_randomizationisolateddev_mode	utf8_modewarn_default_encodingint_max_str_digitsr>  >   r   rF   r   )r   r   flagsr   boolr   r   r   getattrreprr   rC   r?  )r   Zattrsattr	attr_typer   r   r   test_sys_flagsR  s   zSysModuleTest.test_sys_flagsc                 C   sz   |}t |}| t || W d    n1 sw   Y  | t ||| W d    d S 1 s6w   Y  d S r%   )r   r   r   __new__)r   Zsys_attrr  rG  r   r   r   assert_raise_on_new_sys_typec  s   
"z*SysModuleTest.assert_raise_on_new_sys_typec                 C      |  tj d S r%   )rJ  r   rB  rN   r   r   r   test_sys_flags_no_instantiationm     z-SysModuleTest.test_sys_flags_no_instantiationc                 C   rK  r%   )rJ  r   r  rN   r   r   r   &test_sys_version_info_no_instantiationp  rM  z4SysModuleTest.test_sys_version_info_no_instantiationc                 C   s    t jtd | t  d S )Nr   )rH   r   r   r   rJ  r   rN   r   r   r   +test_sys_getwindowsversion_no_instantiations  s   z9SysModuleTest.test_sys_getwindowsversion_no_instantiationc                 C   s   t   d S r%   )r   _clear_type_cacherN   r   r   r   test_clear_type_cachex  s   z#SysModuleTest.test_clear_type_cachec                 C   s  t tj}d|d< tjtjddgtj|d}| d 	 }dtj
 d}| || d|d< tjtjddgtj|d}| d 	 }| |d	 d
|d< tjtjddgtjtj|d}| \}}| |d | d| | d| d|d< tjtjddgtjtj|d}| \}}| |d | d| | d| d|d< tjtjddgtj|d}| d 	 }| |d d S )Ncp424r\   rQ   zprint(chr(0xa2))r   envr      ¢zascii:replace   ?rX   )r   rE   rT  rR   s   UnicodeEncodeError:s   '\xa2'zascii:z:surrogateescapezprint(chr(0xdcbd))   )dictosenviron
subprocessPopenr   r   PIPEcommunicatestriplinesepencoder   rC   )r   rT  pr   rY   r8   r   r   r   test_ioencoding|  sL   
zSysModuleTest.test_ioencodingz*requires OS support of non-ASCII encodingsFz$requires FS encoding to match localec                 C   sZ   t tj}d|d< tjtjddtj gtj	|d}|
 d  }| |ttj d S )Nr
   r\   rQ   z	print(%a)rS  r   )rX  rY  rZ  r[  r\  r   r   r   FS_NONASCIIr]  r^  r_  r   fsencode)r   rT  rb  r   r   r   r   test_ioencoding_nonascii  s   

z&SysModuleTest.test_ioencoding_nonasciizTest is not venv-compatiblec              	   C   s   |  tjtjtj tjtjtj}tj	g dtjtj
|d}| d }| d}|  | |dttjddg d S )N)ZnonexistentrQ   zEimport sys; print(sys.executable.encode("ascii", "backslashreplace")))r   r   cwdr   ASCIIzb''rX   backslashreplace)r   rY  pathabspathr   r   dirnamerealpathr[  r\  r]  r^  r_  decoder   rC   rE  ra  )r   Z
python_dirrb  r   r   r   r   r   test_executable  s   
"zSysModuleTest.test_executableNc                 C   s,   |  | t| |r| || d S d S r%   )ZassertIsNotNonecodecslookupr   r   Zfs_encodingrY   r   r   r   check_fsencoding  s
   

zSysModuleTest.check_fsencodingc                 C   s,   t  }t jdkrd}nd }| || d S )Ndarwinzutf-8)r   getfilesystemencodingr   rs  rr  r   r   r   test_getfilesystemencoding  s
   
z(SysModuleTest.test_getfilesystemencodingc           
      C   s   t j }||d< d|d< dd}tjddd|g}|r!|d	 |d ur*||d
< n|d
d  tj	|tj
tj|dd}| \}}	|S )NLC_ALL0ZPYTHONCOERCECLOCALE
)
import syszdef dump(name):z    std = getattr(sys, name)z(    print("%s: %s" % (name, std.errors))zdump("stdin")zdump("stdout")zdump("stderr")-Xzutf8=0rQ   -Ir\   T)r   rE   rT  universal_newlines)rY  rZ  copyr   r   r   r   r   r[  r\  r]  STDOUTr^  )
r   localer=  r"  rT  r"   argsrb  r   rE   r   r   r   c_locale_get_error_handler  s$   

	

z(SysModuleTest.c_locale_get_error_handlerc                 C   s   | j |dd}| |d | j |dd}| |d | j |dd}| |d | j |d	d}| |d | j |d
d}| |d | j |dd}| |d d S )NT)r=  zHstdin: surrogateescape
stdout: surrogateescape
stderr: backslashreplace
z:ignore)r"  z6stdin: ignore
stdout: ignore
stderr: backslashreplace
z	iso8859-1z6stdin: strict
stdout: strict
stderr: backslashreplace
z
iso8859-1::r
   )r  r   )r   r  r   r   r   r   check_locale_surrogateescape  s0   z*SysModuleTest.check_locale_surrogateescapec                 C      |  d d S )NCr  rN   r   r   r   test_c_locale_surrogateescape  rP   z+SysModuleTest.test_c_locale_surrogateescapec                 C   r  )NZPOSIXr  rN   r   r   r   !test_posix_locale_surrogateescape  rP   z/SysModuleTest.test_posix_locale_surrogateescapec                 C   s   ddddd}|  ttjd |  ttjd |  ttjd |  ttjd	 tjj}| |d d
 |j|jf |jd> |jd> B |jd> B ||j	 d> B |j
d> B }| tjj| | tjjtjj  d S )Nr   r         r   r  r  r   	cache_tagr         r   r   r   )r   r   r   implementationr  r   r   r   r  r  r  r   r  lower)r   Zlevelsr  r   r   r   r   test_implementation"  s$   

z!SysModuleTest.test_implementationc                 C   sB   ddl m} ddg}|| \}}}| d| | ttjd d S )Nr   )r   rQ   z#import sys; sys._debugmallocstats()s   free PyDictObjectsT)test.support.script_helperr   rC   r   r   r   _debugmallocstats)r   r   r  retr   r8   r   r   r   test_debugmallocstats8  s
   z#SysModuleTest.test_debugmallocstatsgetallocatedblocksz0sys.getallocatedblocks unavailable on this buildc              
   C   s  zdd l }W n ty   t }Y n w z| }W n ty. } zd}W Y d }~n	d }~ww |dv }t }| t	|t
 |rH| |d n| |d z
| |t  W n	 tya   Y nw t  t }| || t  t }| |t|d |d  d S )Nr   T)ZpymallocZpymalloc_debugrt   )	_testcapiImportErrorr   with_pymallocZpymem_getallocatorsnamer   r   r  assertIsr   r   r   r   r   r   AttributeErrorgcZcollectZassertLessEqualrC   r   )r   r  r  Z
alloc_namer7   rf   br   r   r   r   test_getallocatedblocksC  s8   z%SysModuleTest.test_getallocatedblocksc                 C   s8   |  t d d}td|\}}}| | d d S )NFa  if 1:
            import sys

            class AtExit:
                is_finalizing = sys.is_finalizing
                print = print

                def __del__(self):
                    self.print(self.is_finalizing(), flush=True)

            # Keep a reference in the __main__ module namespace, so the
            # AtExit destructor will be called at Python exit
            ref = AtExit()
        rQ   s   True)r  r   is_finalizingr   r   rstripr   r"   rZ   r   rE   r   r   r   test_is_finalizingl  s   z SysModuleTest.test_is_finalizingc                 C   s@   d}t d|\}}}| }| d|d  | d|d  d S )Nzif 1:
            import sys
            class A:
                def __del__(self, sys=sys):
                    print(sys.flags)
                    print(sys.float_info)
            a = A()
            rQ   s	   sys.flagsr   s   sys.float_inforF   )r   
splitlinesrC   r   r"   rZ   r   r8   r   r   r   test_issue20602  s
   zSysModuleTest.test_issue20602c                 C   sD   d}t d|\}}}| |d | | d | | d d S )Nzif 1:
            import struct, sys

            class C:
                def __init__(self):
                    self.pack = struct.pack
                def __del__(self):
                    self.pack('I', -42)

            sys.x = C()
            rQ   r   rR   )r   r   r  r  r   r   r   &test_sys_ignores_cleaning_up_user_data  s
   z4SysModuleTest.test_sys_ignores_cleaning_up_user_datagetandroidapilevelzneed sys.getandroidapilevel()c                 C   s$   t  }| |t | |d d S )Nr   )r   r  rc   r   r   )r   levelr   r   r   test_getandroidapilevel  s   z%SysModuleTest.test_getandroidapilevelc                    s   d  fdd}g d}|d| |d| |d|d d |dd    |d|d d |dd    |d	|d
 g |d
|d
 g |dd> | |d
d> |d
 g |d | d S )Nzif 1:
            import sys
            def f1():
                1 / 0
            def f2():
                f1()
            sys.tracebacklimit = %r
            f2()
        c                    s<   t jtjd |  gt jd}| d }| | d S )NrQ   )rE   rF   )r[  r\  r   r   r]  r^  r   r  )tracebacklimitrY   rb  r   r"   r   r   r   check  s
   z4SysModuleTest.test_sys_tracebacklimit.<locals>.check)s"   Traceback (most recent call last):s&     File "<string>", line 8, in <module>s      File "<string>", line 6, in f2s      File "<string>", line 4, in f1s#   ZeroDivisionError: division by zeror   r   r   rF   r   rx   r   )r   r  r   r   r  r   test_sys_tracebacklimit  s   	

z%SysModuleTest.test_sys_tracebacklimitc                 C   s    |  ttjtttj d S r%   )r   r   r   	meta_pathr   rN   r   r   r   test_no_duplicates_in_meta_path  s    z-SysModuleTest.test_no_duplicates_in_meta_pathZ_enablelegacywindowsfsencodingz*needs sys._enablelegacywindowsfsencoding()c                 C   s:   d}t dd|\}}}|dd }| |d d S )N)rz  z$sys._enablelegacywindowsfsencoding()zCprint(sys.getfilesystemencoding(), sys.getfilesystemencodeerrors())rQ   z; rX   replacezmbcs replace)r   r   rn  r  r   r  r   r   r   #test__enablelegacywindowsfsencoding  s   z1SysModuleTest.test__enablelegacywindowsfsencodingc                 C   s`   t d}tjdddd|dg}tj|dddd}tddgt|g}| |j	 
 || d S )	Nz]
            import sys
            print(sys.argv)
            print(sys.orig_argv)
        r|  r{  utf8rQ   r  T)r  capture_outputr=   )textwrapdedentr   r   r[  runrE  r   r   r  r  )r   r"   r  procrY   r   r   r   test_orig_argv  s   

zSysModuleTest.test_orig_argvc                 C   s*   |  tjt tjD ]}|  |t q
d S r%   )rc   r   stdlib_module_names	frozensetrd   )r   r  r   r   r   test_module_names  s   
zSysModuleTest.test_module_namesr%   )FN)Br-   r.   r/   rO   ra   re   rj   rn   r{   rH   r   cpython_onlyr   r   r   unittestZ
skipUnlessr   r   r   Zrefcount_testr   r   r   Zreap_threadsr   r   r  r   r$  r0  rH  rJ  rL  rN  rO  rQ  rc  r   rd  ru  r  getpreferredencodingrf  ZskipIfr  r  ro  rs  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rL   q   s    B	

	
	
@
B]

+



&


'
!
rL   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )UnraisableHookTestc                 C   sP   dd l }dd l}d| }z|||| |jt|||j||dW d }S d }w )Nr   Exception ignored )r   r   exc_tracebackerr_msgobject)r  typeswrite_unraisable_excSimpleNamespacer   __traceback__)r   r7   r  r(   r  r  Zerr_msg2r   r   r   r    s   

z'UnraisableHookTest.write_unraisable_excc                 C   s  dD ]~}| j |dn d}tjd*}tjtdtj | td|| W d    n1 s1w   Y  W d    n1 s@w   Y  |	 }|d ur[| 
d| d|d	| n
| 
d
|d	| | 
d| | 
d| W d    n1 s{w   Y  qd S )N)Nzoriginal hook)r  z	an objectrE   unraisablehookr	   r  z: ry  zException ignored in: #Traceback (most recent call last):
r1   )subTestrH   r   rI   r+   r   __unraisablehook__r  r'   r   rC   )r   r  r(   rE   r8   r   r   r   test_original_unraisablehook  s(   
z/UnraisableHookTest.test_original_unraisablehookc                    sV  G dd d}G dd dt  G  fddd}||fD ]}| |} | }tj "}tjtdtj	 ~W d    n1 sBw   Y  W d    n1 sQw   Y  | }| 	d| | 	|j
j| | 	d	| | 	d
| ||u r| 	d| | 	d| n| 	d| | 	d| | |d W d    n1 sw   Y  qd S )Nc                   @   r%  )zFUnraisableHookTest.test_original_unraisablehook_err.<locals>.BrokenDelc                 S   s   t d}|)Ndel is brokenr&   r   r7   r   r   r   __del__  s   zNUnraisableHookTest.test_original_unraisablehook_err.<locals>.BrokenDel.__del__Nr-   r.   r/   r  r   r   r   r   	BrokenDel  r)  r  c                   @   r%  )zOUnraisableHookTest.test_original_unraisablehook_err.<locals>.BrokenStrExceptionc                 S      t d)Nzstr() is broken	ExceptionrN   r   r   r   __str__     zWUnraisableHookTest.test_original_unraisablehook_err.<locals>.BrokenStrException.__str__N)r-   r.   r/   r  r   r   r   r   BrokenStrException  r)  r  c                       s   e Zd Z fddZdS )zOUnraisableHookTest.test_original_unraisablehook_err.<locals>.BrokenExceptionDelc                    s
     }|r%   r   r  r  r   r   r    s   zWUnraisableHookTest.test_original_unraisablehook_err.<locals>.BrokenExceptionDel.__del__Nr  r   r  r   r   BrokenExceptionDel  s    r  r  zException ignoredztest_sys.pyz	raise excz<exception str() failed>r'   r  ry  )r  r  rH   r   r2   r+   r   r  r   rC   r  r/   r   r5   )r   r  r  Z
test_classr(   rE   reportr   r  r    test_original_unraisablehook_err  s:   
 z3UnraisableHookTest.test_original_unraisablehook_errc              	   C   s   G dd d}t j +}t jtdtj | |j dd}W d    n1 s+w   Y  W d    n1 s:w   Y  |	 }d}| 
| d| d S )Nc                   @   s   e Zd ZG dd dZdS )zMUnraisableHookTest.test_original_unraisablehook_exception_qualname.<locals>.Ac                   @   s   e Zd ZG dd deZdS )zOUnraisableHookTest.test_original_unraisablehook_exception_qualname.<locals>.A.Bc                   @      e Zd ZdS )zQUnraisableHookTest.test_original_unraisablehook_exception_qualname.<locals>.A.B.XNr-   r.   r/   r   r   r   r   X9  s    r  N)r-   r.   r/   r  r  r   r   r   r   B8  s    r  N)r-   r.   r/   r  r   r   r   r   A7  s    r  r  r;   r(   /test_original_unraisablehook_exception_qualnamez.<locals>.A.B.X)rH   r   r2   r+   r   r  r  r  r  r   rC   )r   r  rE   rY   r  ZtestNamer   r   r   r  6  s   
 zBUnraisableHookTest.test_original_unraisablehook_exception_qualnamec              	   C   s   t d}tjtdtj+ | t t| W d    n1 s#w   Y  W d    d S W d    d S 1 s;w   Y  d S )Nr	   r  )	r'   rH   r   r+   r   r  r   r   r  r  r   r   r   'test_original_unraisablehook_wrong_typeE  s   
"z:UnraisableHookTest.test_original_unraisablehook_wrong_typec                    s   d   fdd}t  }zEtjtd|' | tdd|}d D ]}| t	 |t	|| |f q"W d    n1 s>w   Y  W d }d  d S W d }d  d S d }d  w )Nc                    s   |  d S r%   r   r  Z	hook_argsr   r   	hook_funcO  s   z@UnraisableHookTest.test_custom_unraisablehook.<locals>.hook_funcr  r	   zcustom hookz/exc_type exc_value exc_traceback err_msg object)
r  rH   r   r+   r   r  r'   splitr   rD  )r   r  r(   rY   rF  r   r  r   test_custom_unraisablehookL  s,   
		z-UnraisableHookTest.test_custom_unraisablehookc              	   C   s   dd }t jd)}t jtd| | tddd  W d    n1 s'w   Y  W d    n1 s6w   Y  | }| d|d| | d	| | d
| d S )Nc                  W   r  )Nzhook_func failedr  r  r   r   r   r  b  r  zEUnraisableHookTest.test_custom_unraisablehook_fail.<locals>.hook_funcrE   r  r	   zcustom hook failz)Exception ignored in sys.unraisablehook: ry  r  zException: hook_func failed
)	rH   r   rI   r+   r   r  r'   r   rC   )r   r  rE   r8   r   r   r   test_custom_unraisablehook_faila  s"   
z2UnraisableHookTest.test_custom_unraisablehook_failN)
r-   r.   r/   r  r  r  r  r  r  r  r   r   r   r   r    s    (r  c                       sl   e Zd Zdd ZejjZdd Zdd Zdd Z	 fd	d
Z
dd Zdd Zdd Zdd Zdd Z  ZS )
SizeofTestc                 C   s*   t d| _tjj| _dd l}|j| _	d S )NPr   )
structcalcsizer  r   r   r   	longdigitr   ZSIZEOF_PYGC_HEADgc_headsize)r   r   r   r   r   setUpu  s   
zSizeofTest.setUpc                 C   sH   t jj}| j}| td|d| j  | tg |d|  d S )NTr
   Pn)rH   r   calcvobjsizer  r   r   	getsizeofr  )r   vsizeZgc_header_sizer   r   r   test_gc_head_size}  s   zSizeofTest.test_gc_head_sizec                 C   s  G dd d}|  ttj|  G dd d}|  ttj|  dg}| t| || G dd d}|  ttj|  | t| || G dd	 d	t}| t|tjtj| j	  |  t
 t|tjd
  W d    n1 s{w   Y  |  t t|d W d    n1 sw   Y  |  tt
f t|tj d
  W d    d S 1 sw   Y  d S )Nc                   @   r%  )z)SizeofTest.test_errors.<locals>.BadSizeofc                 S   r$   r%   r&   rN   r   r   r   
__sizeof__  r*   z4SizeofTest.test_errors.<locals>.BadSizeof.__sizeof__Nr-   r.   r/   r  r   r   r   r   	BadSizeof  r)  r  c                   @   r%  )z-SizeofTest.test_errors.<locals>.InvalidSizeofc                 S      d S r%   r   rN   r   r   r   r    r*   z8SizeofTest.test_errors.<locals>.InvalidSizeof.__sizeof__Nr  r   r   r   r   InvalidSizeof  r)  r  sentinelc                   @   r%  )z+SizeofTest.test_errors.<locals>.FloatSizeofc                 S   r&  )Ng      @r   rN   r   r   r   r    r*   z6SizeofTest.test_errors.<locals>.FloatSizeof.__sizeof__Nr  r   r   r   r   FloatSizeof  r)  r  c                   @   r%  )z.SizeofTest.test_errors.<locals>.OverflowSizeofc                 S   s   t | S r%   )r   rN   r   r   r   r    r  z9SizeofTest.test_errors.<locals>.OverflowSizeof.__sizeof__Nr  r   r   r   r   OverflowSizeof  r)  r  rF   r  )r   r'   r   r  r   r  r   r   r  r  OverflowError)r   r  r  r  r  r  r   r   r   test_errors  s,   
"zSizeofTest.test_errorsc                 C   sF   t jj}| td|d| j  | tdd|d| j  d S )NTr
   r  )rH   r   r  r   r   r  r  )r   sizer   r   r   test_default  s   "zSizeofTest.test_defaultc           '   	      s	  t j}tjjtjj}j  d|dj   td ddd g}|D ]}t	|} ||d|
   q' tt	 d  d|d	d
   d|d	d  dd } | jd d fdd}|| jd ||jd dd }||jd|d	   tdd
d  tjd dd l}	 |	jjd dd l}
 |
jjd  tjd  i jd  i d  dd
id|d d d|d    d
d!d"d#dd$d%dd&} |d|d d' d(|d     i  d  i  d  i  d  ti d)  ti  d)  ti  d)  ti  d) G d*d+ d+t} |jd  t d,  t dddddd-  t!dddddd-  t"ddd
dd-  t#d dd l$}dd l%}|&|j'j(} |d.  t)g d/  t*dd  t+dd0  t,j-|dj.tt,j-   dd l/}d1}|0 }t|j1j2}t|j1j3}|j1j4|j1j5 | | d
 } ||d2|d3  d |d   d4d5 } |d6 G  fd7d8d8}d9d: } | d;  td<d= dd l6} |7ddd  t8g |d>  t8d
g|d>d!j.    t8d
d!g|d>d!j.    t8g d?|d>d#j.    tg d=  t*g d  d|d  d
|dj   d@|dj  d!t,j9j: } t||dd!j    t|d! d
 |dd!j    t|d! |dd"j    t;dA  d d  t<d  t d G  fdBd+d+t} tt=d
dC  t*dd  t=d
dD  t=dEdD d}g t=d(t=dFg}dG|d  dH }|D ]Q}t|}|dkrGd
}|d! }|}||kr[|d
> }||ksR|dkrp t>||  t?|| q: t>||||d    t?||||d   q: tt> dI  t@ddJ  tAtdJ  dK|d  d?|dd"j.   dL}||} t| ||dM }G dNdO dOt} |||dP d d|d     | jddj.   | } d
 | _B | _C | _D | _E | _F | _G | _H| _I |||dP d' d(|d     | jdd(j.   g dQ}dR}!|!dS }"|"d }#|D ]L}tJtK|}$|$dTk rU|!t| d
 }%n.|$dUk re|"t| d
 }%n|$dVk rw|"d!t|d
   }%n|"d#t|d
   }% ||% q=tLdW} ||"d#  tM|dXdY  ||"d# d#  dd lN}& |&OtdZ  |&PtdZ d S )[NTr
   Z5PrR      ui Zn2PiZnPri   rF   s
   xxxxxxxxxxr   c                     s   d  fdd} | S )Nr	   c                          S r%   r   r   r  r   r   inner  r*   z<SizeofTest.test_objecttypes.<locals>.get_cell.<locals>.innerr   )r  r   r  r   get_cell  s   z-SizeofTest.test_objecttypes.<locals>.get_cellr   r  c                    s     t| | d S r%   )r   r   r  )rf   Zexpected_sizerN   r   r   check_code_size  r   z4SizeofTest.test_objecttypes.<locals>.check_code_sizeZ6i13Pc                    s    fdd}|S )Nc                      r  r%   r   r   r  r   r   r    r*   z=SizeofTest.test_objecttypes.<locals>.get_cell2.<locals>.innerr   )r  r  r   r  r   	get_cell2  s   z.SizeofTest.test_objecttypes.<locals>.get_cell2Z2dZ3PPPZ3PPZ3P2PZ2PZnQ2Prf   Z2nP2nr   r   Zn2Pr   r   r         )rF   r   r   r   r   r	  r
  r   r  r   ZP2nPnc                   @   r  )&SizeofTest.test_objecttypes.<locals>.CNr  r   r   r   r   r        r  Z5Pbz	5Pb 2P2nPZ32B2iBZn3Pr      Z
4Pi2c4P3icZ3ic                   S   r  r%   r   r   r   r   r   func      z)SizeofTest.test_objecttypes.<locals>.funcZ14Pc                       s@   e Zd Zedd Zedd Z ed  ed dS )z&SizeofTest.test_objecttypes.<locals>.cc                   S   r  r%   r   r   r   r   r   foo     z*SizeofTest.test_objecttypes.<locals>.c.fooc                 S   r  r%   r   )clsr   r   r   bar  r  z*SizeofTest.test_objecttypes.<locals>.c.barZPPN)r-   r.   r/   staticmethodr  classmethodr  r   r  r   r   r   r     s    

r   c                   s   s    dV  d S )NrF   r   r   r   r   r   get_gen&  s   
 z,SizeofTest.test_objecttypes.<locals>.get_genZP2PPP4Pr*  ZlPr  )rF   r   r   r  ZPnPPPc                       s@   e Zd Zdd Zdd Zdd ZeeeedZ ed d	S )
r  c                 S   s   | j S r%   Z_C__xrN   r   r   r   getxL  s    z+SizeofTest.test_objecttypes.<locals>.C.getxc                 S   s
   || _ d S r%   r  )r   valuer   r   r   setxM  s   
 z+SizeofTest.test_objecttypes.<locals>.C.setxc                 S   s   | ` d S r%   r  rN   r   r   r   delxN  s    z+SizeofTest.test_objecttypes.<locals>.C.delxr
   Z5PiN)r-   r.   r/   r  r  r  propertyr  r   r  r   r   r  K  s    Z4lZ4Pi rt   Z3nPZ2nPZP3n3Pr   ZP2nPI13Pl4Pn9Pn11PIPPZ4P36P3P10P2P5Pc                   @   r  )z2SizeofTest.test_objecttypes.<locals>.newstyleclassNr  r   r   r   r   newstyleclass  r  r  Z2nP2n0P)Zd1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111ud   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿuP   ĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀĀu,  ￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿￿ux   𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀u  􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿􏿿ZnnbPZnPnr      i   i @  z<stdin>r!   Z2Pn2P)Qr  r  rH   r   calcobjsizer  check_sizeofr  r   	bytearray	__alloc__iter__closure__r   complexrd   r  datetimeZ	timedeltaZdayscollectionsdefaultdictdefault_factoryr   __add____iter__keysvaluesitemsr  __dict__BaseExceptionUnicodeEncodeErrorUnicodeDecodeErrorUnicodeTranslateErrorEllipsisrp  Zencodings.iso8859_3charmap_build	iso8859_3Zdecoding_tabler   reversedfloatr   r   r  r2  currentframer   co_cellvarsco_freevarsco_stacksize
co_nlocalsrefinditerr   r   r   r  NotImplementedr   r   r  slicesuperrf   r  r   r   err   ghordmaxchrr    weakrefrefproxy)'r   r  r  Zsamplessampler  r  r  r  r(  r)  Zlongdictr  rp  	encodingsr2  ZCO_MAXBLOCKSZncellsZnfreesextrasr  r   r  r@  ZPyLong_BASEZPySet_MINSIZEr.  ZminusedtmpZnewsizefmtr  oZasciifieldsZcompactfieldsZunicodefieldsZmaxcharLrK  	__class__)r  r   r   r   test_objecttypes  s.  *& "  $ 	



"0"


zSizeofTest.test_objecttypesc                 C   sH   t |t| }t|rt|s|| j7 }| t || d S r%   )r   r  r  r  r  Z
is_trackedr  r   )r   r(   baseextrarY   r   r   r   check_slots  s   
zSizeofTest.check_slotsc           	      C   s   | j }G dd dt}|| t d G dd dt}||g ddg id G dd	 d	t}|| g d G d
d dt}|| t d G dd dt}|| t d ddlm} G dd d|}||g d|g dd d S )Nc                   @      e Zd ZdZdS )z!SizeofTest.test_slots.<locals>.BArf   r  r   Nr-   r.   r/   	__slots__r   r   r   r   BA      r_  r  c                   @   r[  )z SizeofTest.test_slots.<locals>.Dr\  Nr]  r   r   r   r   D  r`  ra  r  r  c                   @   r[  )z SizeofTest.test_slots.<locals>.Lr\  Nr]  r   r   r   r   rT    r`  rT  c                   @   r[  )z SizeofTest.test_slots.<locals>.Sr\  Nr]  r   r   r   r   r(    r`  r(  c                   @   r[  )z!SizeofTest.test_slots.<locals>.FSr\  Nr]  r   r   r   r   FS  r`  rb  r   )OrderedDictc                   @   r[  )z!SizeofTest.test_slots.<locals>.ODr\  Nr]  r   r   r   r   OD  r`  rd  )rZ  r#  rX  r   r   r  r)  rc  )	r   r  r_  ra  rT  r(  rb  rc  rd  r   r   r   
test_slots  s   zSizeofTest.test_slotsc                 C   s   t jj}t jj}| j}dd l}|| |d zt ty4   t	 d }|d ur2|||d Y nw |tj
|d| jttj
   d S )Nr   r  r   Z2P2ir
   )rH   r   r!  r  r"  _astZASTr   r   r4   rB  r  r   )r   r   r  r  rf  tbr   r   r   test_pythontypes  s   $zSizeofTest.test_pythontypesc                 C   s   t  }| |j | |j dd }t j|d t  }| |j| | |d | | |jd  | |d d  dd }t j|d t  }| |j| | |d | | |j| | |d | t j|  t  }| |j | |j d S )Nc                  W   r  r%   r   rf   r   r   r   <lambda>  r  z0SizeofTest.test_asyncgen_hooks.<locals>.<lambda>)	firstiterr   rF   c                  W   r  r%   r   ri  r   r   r   rj    r  )	finalizer)r   get_asyncgen_hooksr^   rk  rl  set_asyncgen_hooksr  )r   oldrk  Zhooksrl  Zcurr   r   r   test_asyncgen_hooks  s*   
zSizeofTest.test_asyncgen_hooksc                 C   s6   t d}td|\}}}| |d | |d d S )Nz
            import sys
            class MyStderr:
                def write(self, s):
                    sys.stderr = None
            sys.stderr = MyStderr()
            1/0
        rQ   rR   )r  r  r   r   r  r   r   r   /test_changing_sys_stderr_and_removing_reference  s   
z:SizeofTest.test_changing_sys_stderr_and_removing_reference)r-   r.   r/   r  rH   r   r"  r  r  r  rW  rZ  re  rh  rp  rq  __classcell__r   r   rU  r   r  r  s    	  r  __main__)r   rp  r  r  r   rY  r  r[  r   r  Ztest.supportrH   r   r   r  r   r   r   r  r  r>   r+  ZTestCaser   r0   rL   r  r  r  r-   mainr   r   r   r   <module>   sP    /(           !