o
    g<S                     @   s  d Z ddlmZ ddlZddlZddlZddlZddlZdd ZG dd dZ	ddd	d
Z
dd Zdd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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d1d2 Zd3d4 Zd5d6 Z d7d8 Z!d9d: Z"d;d< Z#d=d> Z$d?d@ Z%dAdB Z&dCdD Z'dEdF Z(dGdH Z)dIdJ Z*dPdKdLZ+dMdN Z,e-dOkre,  dS dS )QzK
Collect various information about Python to help debugging test failures.
    )print_functionNc                 C   s*   | d u rd S t | } tdd| } |  S )Nz\s+ )strresubstrip)text r	   E/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/pythoninfo.pynormalize_text   s
   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )
PythonInfoc                 C   s
   i | _ d S N)infoselfr	   r	   r
   __init__   s   
zPythonInfo.__init__c                 C   s\   || j v rtd| |d u rd S t|ts't|tst|}| }|s'd S || j |< d S )Nzduplicate key: %r)r   
ValueError
isinstanceintr   r   )r   keyvaluer	   r	   r
   add   s   


zPythonInfo.addc                 C   s   dd | j  D S )zU
        Get information as a key:value dictionary where values are strings.
        c                 S   s   i | ]	\}}|t |qS r	   )r   ).0r   r   r	   r	   r
   
<dictcomp>.       z(PythonInfo.get_infos.<locals>.<dictcomp>N)r   itemsr   r	   r	   r
   	get_infos*   s   zPythonInfo.get_infosN)__name__
__module____qualname__r   r   r   r	   r	   r	   r
   r      s    r   	formatterc                C   sH   |D ]}t ||d }|d u rq|| }|d ur|||}| || qd S r   )getattr)info_addobjZname_fmt
attributesr!   attrr   namer	   r	   r
   copy_attributes1   s   
r(   c                 C   s2   zt ||}W n
 ty   Y d S w | || d S r   r"   AttributeError)r#   r'   modZ	attr_namer   r	   r	   r
   	copy_attr<   s   r,   c                C   sH   zt ||}W n
 ty   Y d S w | }|d ur||}| || d S r   r)   )r#   r'   r+   	func_namer!   funcr   r	   r	   r
   	call_funcD   s   r/   c                 C   s   d}t | td| t| dtd t| dtd t }ttdr(d|t f }| d	| d
D ]*}tt|}|d u r;q/t|dd }|sDq/t|dd }|rRd||f }| d| | q/ttd}|rdd}nd}| d| d S )N)
_frameworkabiflagsapi_versionbuiltin_module_names	byteorderdont_write_bytecode
executableflags
float_infofloat_repr_style	hash_info
hexversionimplementationint_infomaxsize
maxunicodepathplatform
platlibdirprefixthread_infoversionversion_infowinverzsys.%szsys.androidapilevelgetandroidapilevelzsys.windowsversionZgetwindowsversiongetfilesystemencodeerrorsz%s/%szsys.filesystem_encoding)stdinstdoutstderrencodingerrorszsys.%s.encodingZgettotalrefcountz$Yes (sys.gettotalrefcount() present)z#No (sys.gettotalrefcount() missing)Py_DEBUG)r(   sysr/   getfilesystemencodinghasattrrI   r"   )r#   r%   rM   r'   streamrN   rO   r   r	   r	   r
   collect_sysO   s0   



rT   c                 C   sp   dd l }| }dtt|}| d| | d|  | d|j dd d|   }|r6| d	| d S d S )
Nr   r   zplatform.architecturezplatform.python_implementationzplatform.platformT)Zaliasedz%s %szplatform.libc_ver)rA   ZarchitecturejoinfilterboolZpython_implementationlibc_verr   )r#   rA   ZarchrX   r	   r	   r
   collect_platform   s   

rY   c                 C   s   dd l }| d|d d S )Nr   zlocale.encodingF)localeZgetpreferredencoding)r#   rZ   r	   r	   r
   collect_locale   s   r[   c                 C   s$   | dt d | dt d d S )Nzbuiltins.float.float_formatfloatzbuiltins.float.double_formatZdouble)r\   __getformat__)r#   r	   r	   r
   collect_builtins   s   r^   c              
   C   s   dd l }t|drNz*z|d|j d}W n ty+ } z
d| }W Y d }~nd }~ww | d| W d S  tyM } z|jtjkrB W Y d }~d S d }~ww d S )Nr   	getrandom   zready (initialized)znot seeded yet (%s)zos.getrandom)osrR   r_   ZGRND_NONBLOCKBlockingIOErrorOSErrorerrnoZENOSYS)r#   ra   stateexcr	   r	   r
   collect_urandom   s$   
rg   c                 C   s  dd l }dd }d}t| |d||d dD ]}t| d| || qdd	 }t| d
|d|d t|drHz| }W n	 tyB   Y nw | d| td}|j D ]"\}}	|	 }
|
|v sl|

dsl|

drs|
drs| d| |	 qQt|dr|d}|| | dd|  d S d S )Nr   c                 S   s"   | dv rt tdd |D S |S )N)supports_follow_symlinkssupports_fdsupports_effective_idsc                 s   s    | ]}|j V  qd S r   )r   )r   r.   r	   r	   r
   	<genexpr>   s    z2collect_os.<locals>.format_attr.<locals>.<genexpr>)r   sortedr&   r   r	   r	   r
   format_attr   s   zcollect_os.<locals>.format_attr)r'   supports_bytes_environrj   ri   rh   zos.%sr    )
	cpu_countgetcwdgetegidgeteuidgetgid
getloadavgZ	getresgidZ	getresuidgetuidunamec                 S   s   d tt| S )N, )rU   mapr   )groupsr	   r	   r
   format_groups   s   z!collect_os.<locals>.format_groupszos.getgroups	getgroupsgetloginzos.login)>APPDATAZARZ	ARCHFLAGSZARFLAGSZAUDIODEVCCCFLAGSCOLUMNSZCOMPUTERNAMEZCOMSPECZCPPZCPPFLAGSZDISPLAYZDISTUTILS_DEBUGZDISTUTILS_USE_SDKZDYLD_LIBRARY_PATHZENSUREPIP_OPTIONSZHISTORY_FILEHOME	HOMEDRIVEHOMEPATHZIDLESTARTUPZLANGZLDFLAGSZLDSHAREDZLD_LIBRARY_PATHLINESZMACOSX_DEPLOYMENT_TARGETZMAILCAPSZ	MAKEFLAGSZMIXERDEVZMSSDKPATHPATHEXTZPIP_CONFIG_FILEZPLATZPOSIXLY_CORRECTZPY_SAX_PARSERZProgramFileszProgramFiles(x86)ZRUNNING_ON_VALGRINDZSDK_TOOLS_BINZSERVER_SOFTWARESHELLSOURCE_DATE_EPOCHZ
SYSTEMROOTTEMPZTERMZTILE_LIBRARYZTIX_LIBRARYTMPTMPDIRZTRAVISZTZUSERPROFILEZVIRTUAL_ENVZWAYLAND_DISPLAYZWINDIRZ_PYTHON_HOST_PLATFORMZ_PYTHON_PROJECT_BASEZ_PYTHON_SYSCONFIGDATA_NAME__PYVENV_LAUNCHER__)ZPYTHONZLC_ZVSZ	COMNTOOLSzos.environ[%s]umaskzos.umaskz0o%03o)ra   r(   r/   rR   r}   rc   	frozensetenvironr   upper
startswithendswithr   )r#   ra   rn   r%   r.   r{   ZloginZENV_VARSr'   r   rw   maskr	   r	   r
   
collect_os   s@   

@


r   c                 C   s   zdd l }W n
 ty   Y d S w dd l}| }z||}W n ty+   d }Y nw | d| |d ur6|nd |d u r?d S t|dr[||j|j	}d
tt|}| d| d S d S )Nr   zpwd.getpwuid(%s)z
<KeyError>getgrouplistrx   zos.getgrouplist)pwdImportErrorra   rv   getpwuidKeyErrorrR   r   pw_nameZpw_gidrU   ry   r   )r#   r   ra   uidentryrz   r	   r	   r
   collect_pwd;  s,   
r   c                 C   s   zdd l }W n
 ty   Y d S w dd }d}t| |d||d t|dsAt|dd	}d
|v r6| dd
 d S d|v rC| dd d S d S d S )Nr   c                 S   s   t |tr	d| S |S )Nz%#x)r   r   rm   r	   r	   r
   rn   \     
z%collect_readline.<locals>.format_attr)Z_READLINE_VERSIONZ_READLINE_RUNTIME_VERSION_READLINE_LIBRARY_VERSIONzreadline.%sr    r   __doc__ zlibedit readlinezreadline.libraryzGNU readline)readliner   r(   rR   r"   )r#   r   rn   r%   docr	   r	   r
   collect_readlineV  s$   

r   c                 C   sn   dd l }z|jg d|j|jdd}| d }|jrW d S W n
 ty)   Y d S w | d }| d| d S )Nr   )Zgdbz-nx	--versionTrK   rL   universal_newlinesZgdb_version)
subprocessPopenPIPEcommunicate
returncoderc   
splitlines)r#   r   procrE   r	   r	   r
   collect_gdbs  s    
r   c                 C   sv   zdd l }W n	 ty   Y n
w d}t| |d| zdd l}W n
 ty)   Y d S w | }|dd}| d| d S )Nr   )Z
TK_VERSIONZTCL_VERSIONz
tkinter.%sr   
patchlevelztkinter.info_patchlevel)_tkinterr   r(   tkinterZTclcall)r#   r   r%   r   Ztclr   r	   r	   r
   collect_tkinter  s   r   c              	   C   s   dd l }| d|   d}t| |d| t|drLdD ]2}ztjdd ||}W d    n1 s4w   Y  W n	 tyC   Y qw | d	| | qd S d S )
Nr   z	time.time)altzonedaylighttimezonetznameztime.%sget_clock_info)clock	monotonicperf_counterprocess_timethread_timetimeT)recordztime.get_clock_info(%s))r   r(   rR   warningscatch_warningsr   r   )r#   r   r%   r   Z
clock_infor	   r	   r
   collect_time  s"   
r   c                 C   s6   zdd l }W n
 ty   Y d S w | d|j   d S )Nr   zdatetime.datetime.now)datetimer   Znow)r#   r   r	   r	   r
   collect_datetime  s   r   c                 C   sD   dd l }dD ]}||}|dkr|sqt|}| d| | qd S )Nr   )ZABIFLAGSANDROID_API_LEVELr   ZCCSHAREDr   ZCFLAGSFORSHAREDZCONFIG_ARGSZHOST_GNU_TYPEZMACHDEPZ	MULTIARCHZOPTZ	PY_CFLAGSZPY_CFLAGS_NODISTZPY_CORE_LDFLAGSZ
PY_LDFLAGSZPY_LDFLAGS_NODISTZPY_STDMODULE_CFLAGSrO   ZPy_ENABLE_SHAREDr   ZSOABIrC   r   zsysconfig[%s])	sysconfigget_config_varr   )r#   r   r'   r   r	   r	   r
   collect_sysconfig  s   
r   c              	   C   s,  dd l }zdd l}W n
 ty   Y d S w zdd l}W n ty&   d }Y nw dd }d}t| |d||d d||jfd| fd	| ffD ]\}}d
}t| |d| d| qIddg}|d urwt	|drw|
 }	||	d |	d f |D ]}z|j| }
W n	 ty   Y qyw | d| |
 qyd S )Nr   c                 S   s   |  dr	d| S |S )NZOP_z%#8xr   rm   r	   r	   r
   rn     r   z collect_ssl.<locals>.format_attr)ZOPENSSL_VERSIONZOPENSSL_VERSION_INFOZHAS_SNIZOP_ALLZOP_NO_TLSv1_1zssl.%sr    
SSLContextZdefault_https_contextZstdlib_context)Zminimum_versionZmaximum_versionprotocoloptionsZverify_modezssl.z.%sZOPENSSL_CONFZSSLKEYLOGFILEget_default_verify_paths   zssl.environ[%s])ra   sslr   _sslr(   r   ZPROTOCOL_TLS_CLIENTZ_create_default_https_contextZ_create_stdlib_contextrR   r   extendr   r   )r#   ra   r   r   rn   r%   r'   ctxZ	env_namespartsr   r	   r	   r
   collect_ssl  s@   

r   c                 C   s   dd l }| }| d| d S )Nr   zsocket.hostname)socketgethostname)r#   r   hostnamer	   r	   r
   collect_socket  s   r   c                 C   8   zdd l }W n
 ty   Y d S w d}t| |d| d S )Nr   )rE   Zsqlite_versionz
sqlite3.%s)sqlite3r   r(   )r#   r   r%   r	   r	   r
   collect_sqlite     r   c                 C   r   )Nr   )ZLIB_VERSIONZLIB_RUNTIME_VERSIONzzlib.%s)zlibr   r(   )r#   r   r%   r	   r	   r
   collect_zlib'  r   r   c                 C   s<   zddl m} W n
 ty   Y d S w d}t| |d| d S )Nr   )expat)ZEXPAT_VERSIONzexpat.%s)Zxml.parsersr   r   r(   )r#   r   r%   r	   r	   r
   collect_expat1  s   r   c                 C   r   )Nr   )Z__libmpdec_version__z_decimal.%s)_decimalr   r(   )r#   r   r%   r	   r	   r
   collect_decimal;  r   r   c                 C   sB   zdd l }W n
 ty   Y d S w t| d|d t| d|d d S )Nr   zpymem.allocatorZpymem_getallocatorsnamezpymem.with_pymallocZWITH_PYMALLOC)	_testcapir   r/   r,   )r#   r   r	   r	   r
   collect_testcapiE  s   r   c                 C   sr   zdd l }W n
 ty   Y d S w dd t|D }|D ]}t||}||}| d| | qt| d|d d S )Nr   c                 S      g | ]	}| d r|qS )ZRLIMIT_r   )r   r&   r	   r	   r
   
<listcomp>U  r   z$collect_resource.<locals>.<listcomp>zresource.%szresource.pagesizeZgetpagesize)resourcer   dirr"   Z	getrlimitr/   )r#   r   Zlimitsr'   r   r   r	   r	   r
   collect_resourceO  s   

r   c                 C   sJ   zddl m} W n
 ty   Y d S w dd t|D }t| |d| d S )Nr   )test_socketc                 S   r   )ZHAVE_r   )r   r'   r	   r	   r
   r   e  s    
z'collect_test_socket.<locals>.<listcomp>ztest_socket.%s)testr   r   r   r(   )r#   r   r%   r	   r	   r
   collect_test_socket^  s   r   c                 C   sX   zddl m} W n
 ty   Y d S w d}t| |d| t| d|d t| d|d d S )	Nr   )support)ZIPV6_ENABLEDztest_support.%sztest_support._is_gui_availableZ_is_gui_availablez test_support.python_is_optimizedZpython_is_optimized)r   r   r   r(   r/   )r#   r   r%   r	   r	   r
   collect_test_supportj  s   r   c           	      C   s   dd l }dd l}|d}|sd S zdd l}||}W n ty)   | }Y nw |d z|j||j|j	dd}W n
 t
yF   Y d S w | d }|jrRd S | d }t|}| d| d S )Nr   r   r   Tr   z
CC.version)r   r   r   shlexsplitr   appendr   r   STDOUTrc   r   r   r   r   )	r#   r   r   r   r   argsr   rK   r   r	   r	   r
   
collect_ccw  s6   


r   c                 C   s@   zddl m} W n
 ty   Y d S w | ddtt| d S )Nr   )_GDBM_VERSIONzgdbm.GDBM_VERSION.)_gdbmr   r   rU   ry   r   )r#   r   r	   r	   r
   collect_gdbm  s   r   c                 C   sn   zddl m} W n
 ty   Y d S w | }t|D ]}|| }t|D ]}| d||f t||  q$qd S )Nr   )get_configsz%s[%s])Z_testinternalcapir   r   rl   repr)r#   r   Zall_configsZconfig_typeZconfigr   r	   r	   r
   collect_get_config  s   r   c                 C   s   dd l }t| |dd d S )Nr   zsubprocess.%s)_USE_POSIX_SPAWN)r   r(   )r#   r   r	   r	   r
   collect_subprocess  s   r  c              	   C   s   zdd l }W n
 ty   Y d S w t|dsd S |d}|j}z|j}W n ty0   d}Y nw ||_d|_t	| }| d| zdd l
}|tj}| d| W d S  ttfy_   Y d S w )Nr   WinDLLntdllz<function not available>r	   zwindows.RtlAreLongPathsEnabledzwindows.dll_path)ctypesr   rR   r  Zc_ubyteRtlAreLongPathsEnabledr*   ZrestypeargtypesrW   _winapiZGetModuleFileNamerP   Z	dllhandle)r#   r  r  ZBOOLEANr  resr  Zdll_pathr	   r	   r
   collect_windows  s2   




r
  c                 C   s   zdd l }W n ty   d }Y nw |d urt| d|d z)tddd}|  }W d    n1 s5w   Y  |rD| d| W d S W d S  tyP   Y d S w )Nr   zfips.openssl_fips_modeZget_fips_modez/proc/sys/crypto/fips_enabledzutf-8)rM   zfips.linux_crypto_fips_enabled)_hashlibr   r/   openr   rstriprc   )r#   r  fpliner	   r	   r
   collect_fips  s"   r  c                 C   s   d}| j }ttttttttt	t
tttttttttttttttttttfD ]/}z|| W q$ tyS   d}td|j  t!j"d t#j$t!j"d tt!j"d t!j"%  Y q$w |S )NFTzERROR: %s() failedfile)&r   rg   r^   r   r   r   r   r  r   r   r   r[   r   rY   r   r   r   r   r   r   r  rT   r   r   r   r   r
  r   r   r   	Exceptionprintr   rP   rL   	traceback	print_excflush)r   errorr#   Zcollect_funcr	   r	   r
   collect_info  sX   %
r  c                 C   sj   d}t | t dt|  t   |  }t| }|D ]\}}|dd}t d||f  qt   d S )NzPython debug information=
r   z%s: %s)r  lenr   rl   r   replace)r   r  titleZinfosr   r   r	   r	   r
   	dump_info  s   
r  c                  C   s:   t  } t| }t|  |rtdtjd td d S d S )Nz"Collection failed: exit with errorr  r`   )r   r  r  r  rP   rL   exit)r   r  r	   r	   r
   main+  s   r!  __main__r   ).r   Z
__future__r   rd   r   rP   r  r   r   r   r(   r,   r/   rT   rY   r[   r^   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r!  r   r	   r	   r	   r
   <module>   s`    : 	#5




#	
6

