Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_embed.cpython-311.opt-1.pyc
�

�Ke���T�ddlmZddlmZddlmZddlZddlmZddlZddl	Z	ddl
Z
ddlZ
ddlZddl
Z
ddlZddlZddlZddlZddlZejsejd���e
jdkZejdkZeed	��ZdZd
ZdZdZd
ZdZ d
Z!dZ"e
j#�$ej%ej&dej'j(�dej'j)����Z*e
j#�+e
j#�$e*d����sdZ*d�Z,d�Z-Gd�d��Z.Gd�de.ej/��Z0Gd�de.ej/��Z1Gd�dej/��Z2Gd�de.ej/��Z3Gd�de.ej/��Z4Gd �d!e.ej/��Z5e6d"krej7��dSdS)#�)�support)�
import_helper)�	os_helperN)�
namedtupleztest module requires subprocess�nt�darwin�gettotalrefcount����l���python�.�os.pyc��tj�|��}tj�|��d}|����d�����S)Nr�_d)�os�path�basename�splitext�casefold�endswith)�program�names  �9/usr/local/apps/python3/lib/python3.11/test/test_embed.py�debug_buildr0sU���g���w�'�'�G�
�7���G�$�$�Q�'�D��=�=�?�?�#�#�D�M�M�O�O�4�4�4�c��ttj��}t|��D]}|�d��r||=�|S)N�PYTHON)�dictr�environ�list�
startswith)�env�keys  r�remove_python_envvarsr&6sG��
�r�z�
�
�C��C�y�y�����>�>�(�#�#�	��C����Jrc�4�eZdZd�Zd�Zdddddd�d�Zd�ZdS)�EmbeddingTestsMixinc��d}tj�tj��}t
r(t
tj��rdnddz}||z
}|}n tj�|d��}tj�||��x|_}tj�	|��s|�
d|z��tj��|_tj
|��dS)N�
_testembedr��.exe�Programsz%r doesn't exist)rr�dirname�sys�
executable�
MS_WINDOWSr�join�test_exe�exists�skipTest�getcwd�oldcwd�chdir)�self�exename�builddir�ext�exepath�exes      r�setUpzEmbeddingTestsMixin.setUp@s������7�?�?�3�>�2�2���	9�&�s�~�6�6�>�4�4�B�&�H�C��s�N�G��G�G��g�l�l�8�Z�8�8�G� �g�l�l�7�G�<�<�<��
���w�~�~�c�"�"�	4��M�M�,�s�2�3�3�3��i�k�k���
�������rc�8�tj|j��dS�N)rr8r7�r9s r�tearDownzEmbeddingTestsMixin.tearDownRs��
��������rNr)r$�timeout�
returncode�input�cwdc��|jg}|�|��|�0tr)|���}tjd|d<t
j|tjtjd||���}	|�	||���\}	}
n.#|�
��|����xYw|j|krRtjrFtd|�d���td|	����td	|
����td
��|�|j|d|j|
fz��|	|
fS)z'Runs a test in the embedded interpreterN�
SYSTEMROOTT)�stdout�stderr�universal_newlinesr$rG)rFrDz--- z failed ---zstdout:
zstderr:
z------zbad returncode %d, stderr is %r)r3�extendr1�copyrr!�
subprocess�Popen�PIPE�communicate�	terminate�waitrEr�verbose�print�assertEqual)r9r$rDrErFrG�args�cmd�p�out�errs           r�run_embedded_interpreterz,EmbeddingTestsMixin.run_embedded_interpreterUs_���}�o���
�
�4�����?�z�?��(�(�*�*�C� "�
�<� 8�C�����S�$.�O�$.�O�04�!$�!$�
&�
&�
&��	����U�G��D�D�J�S�#�#��	�
�K�K�M�M�M�
�F�F�H�H�H������<�:�%�%�'�/�%��)��)�)�)�*�*�*��#�c�#�#�$�$�$��#�c�#�#�$�$�$��)���������z�:��,��,�-�	.�	.�	.��C�x�s�?B�+Cc#��K�|�d��\}}|�|d��d}tdd��}d}g}|���D�]�}|d�|��krH|�t|��d��tjdkrt|��|dz
}�d|�	t|��d	��tj||��}|�|�||��||�
���}	tjdkrt|	��|�|	j��|�|	j��|�|	j��|�|	��t|��d	kr$|d}
|�|	|
��|V�g}���dS)
N�&test_repeated_init_and_subinterpretersr+zS^interp (\d+) <(0x[\dA-F]+)>, thread state <(0x[\dA-F]+)>: id\(modules\) = ([\d]+)$�Interpzid interp tstate modulesrz--- Pass {} ---r�)r]rWr�
splitlines�format�lenrrUrV�
assertLess�re�match�assertRegex�groups�
assertTrue�interp�tstate�modules�append)r9r[r\�
interp_patr`�numloops�current_run�linergrk�mains           r�%run_repeated_init_and_subinterpretersz9EmbeddingTestsMixin.run_repeated_init_and_subinterpretersxs������0�0�1Y�Z�Z���S�����b�!�!�!�2�
��H�&@�A�A�������N�N�$�$�	!�	!�D��(�/�/��9�9�9�9�� � ��[�!1�!1�1�5�5�5��?�Q�&�&��$�K�K�K��A�
����O�O�C��,�,�a�0�0�0��H�Z��.�.�E��}�� � ��z�2�2�2��V�U�\�\�^�^�,�F����"�"��f�
�
�
��O�O�F�M�*�*�*��O�O�F�M�*�*�*��O�O�F�N�+�+�+����v�&�&�&��;���1�$�$�"�1�~��� � ���.�.�.�!�!�!�!� ���9	!�	!r)�__name__�
__module__�__qualname__r?rCr]rt�rrr(r(?sj���������$���37�)-�!�4�%)�!�!�!�!�!�F1!�1!�1!�1!�1!rr(c�r�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�ZdS)�EmbeddingTestsi�c�z�|���D]%}|d}|�|jd���&dS)Nr�0)rtrW�id)r9�runrss   r�test_subinterps_mainz#EmbeddingTests.test_subinterps_main�sK���=�=�?�?�	+�	+�C��q�6�D����T�W�c�*�*�*�*�	+�	+rc	���|���D]_}|�^}}}t|j��}t|��D]3\}}|�|jt||zdz�����4�`dS)Nr)rt�intr}�	enumeraterW�str)r9r~rs�subs�_�mainid�i�subs        r�test_subinterps_different_idsz,EmbeddingTests.test_subinterps_different_ids�s����=�=�?�?�	>�	>�C� �N�D�4�����\�\�F�#�D�/�/�
>�
>���3�� � ����V�a�Z�!�^�)<�)<�=�=�=�=�
>�		>�	>rc�:�|���D]�}|�^}}}d|vrtjd���|D]b}|�|j|j��|�|j|j��|�|j|j���c��dS)N�0x0zplatform prints pointers as 0x0)rt�unittest�SkipTest�assertNotEqualrkrlrm)r9r~rsr�r�r�s      r�test_subinterps_distinct_statez-EmbeddingTests.test_subinterps_distinct_state�s����=�=�?�?�	?�	?�C� �N�D�4����}�}�
�'�(I�J�J�J��
?�
?���#�#�C�J���<�<�<��#�#�C�J���<�<�<��#�#�C�K���>�>�>�>�
?�	?�	?rc��|�d��\}}|�|d��d�tdtdz��D��}d�|��dz}|�||��dS)N�test_repeated_init_and_inittabr+c��g|]}d|�d���	S)z	--- Pass z ---rx)�.0r�s  r�
<listcomp>zAEmbeddingTests.test_repeated_init_and_inittab.<locals>.<listcomp>�s$��E�E�E��$�Q�$�$�$�E�E�Err�
)r]rW�range�
INIT_LOOPSr2)r9r[r\�liness    rr�z-EmbeddingTests.test_repeated_init_and_inittab�s����0�0�1Q�R�R���S�����b�!�!�!�E�E�e�A�z�!�|�.D�.D�E�E�E���	�	�%� � �4�'������e�$�$�$�$�$rc��ttjd���}|�d|���\}}tjdkr,t
��t
|��t
|��d}d}d�gd	���}|�|||�
��}d|_	|�
|���|��dS)Nzutf-8:surrogateescape)�PYTHONIOENCODING�test_forced_io_encoding�r$r�utf-8�surrogateescaper�)z--- Use defaults ---�Expected encoding: default�Expected errors: defaultzstdin: {in_encoding}:{errors}zstdout: {out_encoding}:{errors}�'stderr: {out_encoding}:backslashreplacez--- Set errors only ---r�zExpected errors: ignorezstdin: {in_encoding}:ignorezstdout: {out_encoding}:ignorer�z--- Set encoding only ---�Expected encoding: iso8859-1r�zstdin: iso8859-1:{errors}zstdout: iso8859-1:{errors}�"stderr: iso8859-1:backslashreplacez--- Set encoding and errors ---r�zExpected errors: replacezstdin: iso8859-1:replacezstdout: iso8859-1:replacer�)�in_encoding�out_encoding�errors)r rr!r]rrUrVr2rc�maxDiffrW�strip)r9r$r[r\�expected_stream_encoding�expected_errors�expected_outputs       rr�z&EmbeddingTests.test_forced_io_encoding�s����2�:�0G�H�H�H���0�0�1J�PS�0�T�T���S��?�Q����G�G�G��#�J�J�J��#�J�J�J�#*� �+���)�)�%.�%.�%.�/�/��2*�0�0�,D�-E�'6�1�8�8��
�����������o�6�6�6�6�6rc��ttjtj�t
j�����}|�d|���\}}tr|j	}n1tj�tj
��d��}d|�d�}|�||��|�|d��dS)	z�
        Checks some key parts of the C-API that need to work before the runtime
        is initialized (via Py_Initialize()).
        )�
PYTHONPATH�test_pre_initialization_apir��spamzsys.executable: r�r+N)
r rr!�pathsepr2r/rr]r1r3r6�assertInrW)r9r$r[r\�
expected_pathr�s      rr�z*EmbeddingTests.test_pre_initialization_apis���
�2�:�"�*�/�/�#�(�*C�*C�D�D�D���0�0�1N�TW�0�X�X���S��	>� �M�M�M��G�L�L�����f�=�=�M�>�]�>�>�>���
�
�o�s�+�+�+�����b�!�!�!�!�!rc�
�t��}tj�tj��|d<|�d|���\}}d}|�||��|�|d��dS)z�
        Checks that sys.warnoptions and sys._xoptions can be set before the
        runtime is initialized (otherwise they won't be effective).
        r��#test_pre_initialization_sys_optionsr�z�sys.warnoptions: ['once', 'module', 'default']
sys._xoptions: {'not_an_option': '1', 'also_not_an_option': '2'}
warnings.filters[:3]: ['default', 'module', 'once']
r+N)	r&rr�r2r/rr]r�rW)r9r$r[r\r�s     rr�z2EmbeddingTests.test_pre_initialization_sys_optionss���
$�%�%���J�O�O�C�H�5�5��L���0�0�=�3�1�H�H���S�
D�	�
	
�
�
�o�s�+�+�+�����b�!�!�!�!�!rc��|�d��\}}|�|d��|�|d��dS)ze
        bpo-20891: Calling PyGILState_Ensure in a non-Python thread must not
        crash.
        �
test_bpo20891r+N�r]rW�r9r[r\s   rr�zEmbeddingTests.test_bpo20891%sM��
�0�0��A�A���S�����b�!�!�!�����b�!�!�!�!�!rc��|�d��\}}|�|d��|�|d��dS)zf
        bpo-33932: Calling Py_Initialize() twice should do nothing (and not
        crash!).
        �test_initialize_twicer+Nr�r�s   rr�z$EmbeddingTests.test_initialize_twice.sN��
�0�0�1H�I�I���S�����b�!�!�!�����b�!�!�!�!�!rc��|�d��\}}|�|���d��|�|d��dS)zS
        bpo-34008: Calling Py_Main() after Py_Initialize() must not fail.
        �test_initialize_pymainz6Py_Main() after Py_Initialize: sys.argv=['-c', 'arg2']r+N�r]rW�rstripr�s   rr�z%EmbeddingTests.test_initialize_pymain7sW���0�0�1I�J�J���S���������'_�`�`�`�����b�!�!�!�!�!rc��|�d��\}}|�|���d��|�|d��dS)N�
test_run_mainz%Py_RunMain(): sys.argv=['-c', 'arg2']r+r�r�s   rr�zEmbeddingTests.test_run_main?sT���0�0��A�A���S���������'N�O�O�O�����b�!�!�!�!�!rc��d}|�d��\}}|�|d|z��|�|d��dS)Nra�test_run_main_loopz&Py_RunMain(): sys.argv=['-c', 'arg2']
r+r�)r9�nloopr[r\s    rr�z!EmbeddingTests.test_run_main_loopDsY�����0�0�1E�F�F���S�����G�%�O�P�P�P�����b�!�!�!�!�!rc��tjd��}t|d���5}|���}ddd��n#1swxYwY|�d|��\}}|�|dtz��dS)Nz_test_embed_structseq.pyr���encoding�test_repeated_init_exec�
Tests passed
)r�findfile�open�readr]rWr�)r9�script�fp�coder[r\s      r�test_finalize_structseqz&EmbeddingTests.test_finalize_structseqLs����!�"<�=�=��
�&�7�
+�
+�
+�	�r��7�7�9�9�D�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��0�0�1J�D�Q�Q���S�����.��;�<�<�<�<�<s�A�A�Ac�r�|�d��\}}|�|dtz��dS)N�test_repeated_simple_initz
Finalized
�r]rWr�r�s   r�test_simple_initialization_apiz-EmbeddingTests.test_simple_initialization_apiXs=���0�0�1L�M�M���S�����m�j�8�9�9�9�9�9rc	���ddlm}|d}|d}ddlm}t	jd|�d|�d|�d	���}|j}|d
|��\}}|�|dtz��dS)Nr)�
_all_opmap�RESUME�RESUME_QUICK)�QUICKENING_WARMUP_DELAYa            import importlib._bootstrap
            func = importlib._bootstrap._handle_fromlist
            code = func.__code__

            # Assert initially unquickened.
            # Use sets to account for byte order.
            if set(code._co_code_adaptive[:2]) != set([zJ, 0]):
                raise AssertionError()

            for i in range(z�):
                func(importlib._bootstrap, ["x"], lambda *args: None)

            # Assert quickening worked
            if set(code._co_code_adaptive[:2]) != set([zY, 0]):
                raise AssertionError()

            print("Tests passed")
        r�r�)	�disr��
test.test_disr��textwrap�dedentr]rWr�)	r9r��resume�resume_quickr�r�r~r[r\s	         r�:test_quickened_static_code_gets_unquickened_at_Py_FINALIZEzIEmbeddingTests.test_quickened_static_code_gets_unquickened_at_Py_FINALIZE^s���	#�"�"�"�"�"��H�%��!�.�1��9�9�9�9�9�9��� �9?� � �4� � �9E� � � �
�
��&�+���3�0�$�7�7���S�����.��;�<�<�<�<�<rc�x�d}|�d|��\}}|�|dtz��dS)Nzprint('\N{digit nine}')r�z9
r�)r9r�r[r\s    r�test_ucnhash_capi_resetz&EmbeddingTests.test_ucnhash_capi_reset�sB��)���0�0�1J�D�Q�Q���S�����e�j�0�1�1�1�1�1rN)rurvrwr�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rxrrrzrz�s�������G�+�+�+�>�>�>�?�?�?�*%�%�%�)7�)7�)7�V
"�
"�
"�"�"�"�""�"�"�"�"�"�"�"�"�"�"�"�
"�"�"�
=�
=�
=�:�:�:� =� =� =�D2�2�2�2�2rrzc�z�eZdZdZerdndZe��Ze��Ze	e
dddddd�Zere�ddi��e
eedee���Ze
eedddddd�	��Zgd
�Zide	�dd�d
d�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�de�de�dd�ide�dd�dd g�d!g�d"g�d#g�d$d�d%d�d&e�d'e�d(e�d)e�d*e�d+e�d,e�d-d�d.ej��id/e�d0d�d1d�d2d�d3d�d4d�d5d�d6d�d7d�d8d�d9d�d:d�d;d�d<d�d=e�d>e�d?d��ddddd@dddededA��Zere�dBdi��e
eeddC�D��Ze
eedddddddddd�E��ZerdedB<ddddF�ZdGgZgdH�Zer*e�dI��e�dJ��dZedK���ZdL�Z dM�Z!dN�Z"	d�dO�Z#dP�Z$dQ�Z%dR�Z&				d�dddSddT�dU�Z'dV�Z(dW�Z)dX�Z*dY�Z+dZ�Z,d[�Z-d\�Z.d]�Z/d^�Z0d_�Z1d`�Z2da�Z3db�Z4dc�Z5dd�Z6de�Z7df�Z8dg�Z9dh�Z:di�Z;e<j=dj��dk���Z>dl�Z?dm�Z@dn�ZAdo�ZBdp�ZCdq�ZDdr�ZEds�ZFd�dt�ZGeHjId�du���ZJdv�ZKdw�ZLdx�ZMe<jNedy��dz���ZOe<jPed{��d|���ZQd}�ZRe<jPed~��d���ZSd��ZTd��ZUd��ZVd��ZWd��ZXdS)��InitConfigTestsi�
surrogatepassr�rr)�_config_init�	allocator�
parse_argv�configure_locale�coerce_c_locale�coerce_c_locale_warn�	utf8_mode�legacy_windows_fs_encoding)r�r�r�r�)r�r��isolated�use_environmentr��dev_moder�)r�r�r�r�r�r�r��install_signal_handlers�
use_hash_seed�	hash_seed�faulthandler�tracemalloc�import_time�code_debug_ranges�show_ref_count�	dump_refs�malloc_stats�filesystem_encoding�filesystem_errors�pycache_prefixN�program_namer��argvr+�	orig_argv�xoptions�warnoptions�pythonpath_env�homer0�base_executable�prefix�base_prefix�exec_prefix�base_exec_prefix�module_search_paths�module_search_paths_set�
platlibdir�
stdlib_dir�site_import�
bytes_warning�warn_default_encoding�inspect�interactive�optimization_level�parser_debug�write_bytecoderU�quiet�user_site_directory�configure_c_stdio�buffered_stdio�stdio_encoding�stdio_errors�skip_source_first_line�default)�run_command�
run_module�run_filename�_install_importlib�check_hash_pycs_mode�pathconfig_warnings�
_init_main�_isolated_interpreter�use_frozen_modules�	safe_path�_is_python_build�legacy_windows_stdior
)r�rr�)r�r�r�rr&r�r�r�r�r�r")�Py_HasFileSystemDefaultEncoding�Py_HashRandomizationFlag�$_Py_HasFileSystemDefaultEncodeErrors)�Py_UTF8Moder�))�Py_BytesWarningFlagr)�Py_DebugFlagr)�Py_DontWriteBytecodeFlagrT)� Py_FileSystemDefaultEncodeErrorsr�)�Py_FileSystemDefaultEncodingr�)�
Py_FrozenFlagr"T)�Py_IgnoreEnvironmentFlagr�T)�Py_InspectFlagr)�Py_InteractiveFlagr)�Py_IsolatedFlagr�)�
Py_NoSiteFlagr
T)�Py_NoUserSiteDirectoryrT)�Py_OptimizeFlagr)�Py_QuietFlagr)�Py_UnbufferedStdioFlagrT)�Py_VerboseFlagrU))�Py_LegacyWindowsFSEncodingFlagr�))�Py_LegacyWindowsStdioFlagr(c��d|_dSrA)�EXPECTED_CONFIG)�clss r�
tearDownClasszInitConfigTests.tearDownClass>s��#����rc�d�i}|D]*}d|vr|�dd��\}}|||<�%d||<�+|S)N�=rT)�split)r9�
xoptions_listr�optr%�values      r�
main_xoptionszInitConfigTests.main_xoptionsCsQ���� �	%�	%�C��c�z�z� �Y�Y�s�A�.�.�
��U� %���
�
� $���
�
��rc���t��}tjd��}tjdd|g}tj||t
jt
j���}|jrtd|j
�d|j�����|j
�d��}	tj|��S#tj$r|�d|����YdSwxYw)	Na4
            import json
            import sys
            import _testinternalcapi

            configs = _testinternalcapi.get_configs()

            data = json.dumps(configs)
            data = data.encode('utf-8')
            sys.stdout.buffer.write(data)
            sys.stdout.buffer.flush()
        z-S�-c)r$rJrKz)failed to get the default config: stdout=z stderr=r��fail to decode stdout: )r&r�r�r/r0rOr~rQrE�	ExceptionrJrK�decode�json�loads�JSONDecodeError�fail)r9r$r�rX�procrJs      r�_get_expected_config_implz)InitConfigTests._get_expected_config_implMs��#�%�%���� �
�
�����d�D�1���~�d��%/�_�%/�_�6�6�6���?�	N��M�&*�k�M�M�=A�[�M�M�N�N�
N���#�#�G�,�,��	<��:�f�%�%�%���#�	<�	<�	<��I�I�:��:�:�;�;�;�;�;�;�	<���s� B4�4'C�Cc�4�t}|j�|���|_i}|j���D]T\}}i}|���D]3\}}t	|t
��r|���}|||<�4|||<�U|SrA)r�r@rT�items�
isinstancer"rN)r9rA�configs�
config_key�config_value�configr%rHs        r�_get_expected_configz$InitConfigTests._get_expected_configls�������&�"&�"@�"@�"B�"B�C����(+�(;�(A�(A�(C�(C�	)�	)�$�J���F�*�0�0�2�2�
$�
$�
��U��e�T�*�*�)�!�J�J�L�L�E�#��s���"(�G�J����rc��|���}|d}|���D]\}}	|	|jur||||<�|dr|tkrdD]}|j||<�
|ds
|j|d<|ddkrU|d|jurd|d<|d|jur
|j|d<|d	|jurd|d	<|d
|jurd|d
<tr|j}
nf|d|jur&tj	�
|d��}
n1tj	�tj��d
��}
|d|jur|
|d<|d|jur|
|d<|d|jurd|d<|d}|���D]\}}	|	|jur||||<�|d|jurm|d}|�3|�
tj	j��}
g|
�|d�|d<|�.|d���|d<||d��|jD]}||vr||||<�dS)N�
pre_configr�)r�r�rrr�rr�r�r�rrr�r�r*r0rz./_testembedr[r	r)r\rV�GET_DEFAULT_CONFIG�
API_COMPAT�
IGNORE_CONFIG�UTF8_MODE_ERRORSr1r3rr�abspathr2r6rEr�rN�COPY_PRE_CONFIG)r9�expected_preconfig�expectedr$�api�modify_path_cbrXr^r%rH�default_executabler[r�pathss              r�get_expected_configz#InitConfigTests.get_expected_config|s���+�+�-�-���\�*�
�,�2�2�4�4�	:�	:�J�C����/�/�/�*4�S�/�"�3�'��!�"4�5�	3��
�9J�9J�:�
3�
3�� $� 2���
�
�!�"4�5�	A�/3�.@��{�+��k�*�a�/�/��-�.�$�2I�I�I�29��.�/��+�,��0G�G�G�04�0E��,�-��(�)�T�-D�D�D�-4��)�*���'�4�+B�B�B�+<���(��	I�!%����
�n�
%�T�-D�
D�
D�!#�����.�1I�!J�!J���!#����b�i�k�k�<�!H�!H���L�!�T�%<�<�<�%7�H�\�"��%�&�$�*A�A�A�*<�H�&�'��N�#�t�'>�>�>�'5�H�^�$���"��"�.�.�*�*�	,�	,�J�C����/�/�/� &�s����
���)�*�$�2D�D�D�%�&6�7�N��)�&�,�,�R�W�_�=�=��2\�E�2\�H�EZ�<[�2\��.�/��)�2:�;P�2Q�2V�2V�2X�2X��.�/���x�(=�>�?�?�?��'�	8�	8�C��,�,�,�*2�3�-�"�3�'��	8�	8rc���t|d��}t|�����D]'\}}||jur|�|d��||=�(|�||��dS)Nr^)r r"rVra�poprW)r9rXrfr^r%rHs      r�check_pre_configz InitConfigTests.check_pre_config�s���'�,�/�0�0�
��x�~�~�/�/�0�0�	"�	"�J�C����*�*�*����s�D�)�)�)��S�M������X�.�.�.�.�.rc��t|d��}tr�|�dx}��}|r�t|t��r�|dt|����d�����}ttj
��r<|dt|����d�����}|||<t|�����D]'\}}||j
ur|�|d��||=�(|�||��dS)Nr[r�r,r)r r1�getrWr�rd�lower�removesuffixrr/r0r"rVrarmrW)r9rXrfr[r%rHs      r�check_configzInitConfigTests.check_config�s.���g�h�'�(�(���	$��J�J�n�4�s�5�5�E��
$��E�3�/�/�
$��F�s�5�;�;�=�=�#=�#=�f�#E�#E�F�F�F�G���s�~�.�.�J�!�"H�3�u�{�{�}�}�'A�'A�$�'G�'G�#H�#H�"H�I�E�#��s���x�~�~�/�/�0�0�	"�	"�J�C����*�*�*��
�
�3��%�%�%��S�M�������*�*�*�*�*rc��|d}|d}t|j��}|jD];}t|��dkr|\}}}||rdnd||<�+|\}}||||<�<|jD];}t|��dkr|\}}}||rdnd||<�+|\}}||||<�<|�|d|��dS)Nr^r[rrr�
global_config)r �DEFAULT_GLOBAL_CONFIG�COPY_GLOBAL_CONFIGrd�COPY_GLOBAL_PRE_CONFIGrW)	r9rXr^r[rf�item�
global_key�core_key�opposites	         r�check_global_configz#InitConfigTests.check_global_config�s���\�*�
���"����2�3�3���+�	8�	8�D��4�y�y�A�~�~�15�.�
�H�h�,2�8�,<�'C�q�q�!���$�$�'+�$�
�H�'-�h�'7���$�$��/�	<�	<�D��4�y�y�A�~�~�15�.�
�H�h�,6�x�,@�'G�q�q�a���$�$�'+�$�
�H�'1�(�';���$�$������1�8�<�<�<�<�<rF)�
preconfig_apir$�
ignore_stderrrGc�4�t��}|�|�|��|}|�|}|tkr|j}n|tkr|j}n|j}|�i}t|fi|��}|�i}|tkr|j}
n|tkr|j	}
n|j
}
t|
fi|��}|�|||||��|�|||
���\}}|�
|dsd}|�*|	s(|�
|���|��	tj|��}n-#tj$r|�d|����YnwxYw|�||��|�||��|�|��|S)N)r$rGrUr+rL)r&�update�API_ISOLATED�PRE_CONFIG_ISOLATED�
API_PYTHON�PRE_CONFIG_PYTHON�PRE_CONFIG_COMPATr �
CONFIG_PYTHON�CONFIG_ISOLATED�
CONFIG_COMPATrkr]rWr�rOrPrQrRrnrsr})r9�testname�expected_configrerhrKrgr~r$rrG�new_env�default_preconfig�default_configr[r\rXs                 r�check_all_configsz!InitConfigTests.check_all_configs�s	��
(�)�)���?��N�N�3������� ��M��L�(�(� $� 8���
�j�
(�
(� $� 6��� $� 6���%�!#��!�"3�J�J�7I�J�J���"� �O��*���!�/�N�N�
�L�
 �
 �!�1�N�N�!�/�N��~�A�A��A�A��� � �!3�!0�!$�!$�n�	6�	6�	6�
�0�0��58�c�1�C�C���S��>�/�)�"<�>��F���m�����S�Z�Z�\�\�6�2�2�2�	9��j��o�o�G�G���#�	9�	9�	9��I�I�7��7�7�8�8�8�8�8�	9����	
���g�'9�:�:�:����'�?�3�3�3�� � ��)�)�)��s�D*�*'E�Ec�>�|�dt���dS)N�test_init_initialize_config�rg�r�r`rBs r�test_init_default_configz(InitConfigTests.test_init_default_configs"�����<�*��M�M�M�M�Mrc�>�|�dt���dS)N�test_preinit_compat_configr�r�rBs rr�z*InitConfigTests.test_preinit_compat_config!�"�����;���L�L�L�L�Lrc�>�|�dt���dS)N�test_init_compat_configr�r�rBs rr�z'InitConfigTests.test_init_compat_config$�"�����8�j��I�I�I�I�Irc�l�ddi}ddddgdddddddddd�
}|�d||t�	��dS)
Nr�rz./globalvarr�default::BytesWarningr
)
r�r
rrrrrrrUrrrr"�test_init_global_configr�r��r9�	preconfigr[s   rr�z'InitConfigTests.test_init_global_config'sy����
�	�*���3�4���"#�����#$�#$�
�
�� 	
���8�&�)�#-�	�	/�	/�	/�	/�	/rc�N�tdd�}idd�dd�dd�dd	�d
d�dd�dd�d
d�dd�dd�dd�dd�dddg�dgd��dd	�dgd��dgd��id d!�d"d�d#d�d$d�d%d�d&d	�d'd�d(d�d)d�d*d�d+d�d,d�d-d�d.d/�d0|j�d1d�d2d3��ddd4��}|�d5||t�6��dS)7Nr�r�r�r�rr�r��{r�r
r�r�r�r�r�	iso8859-1r�replacer��conf_pycache_prefixr�z./conf_program_namer�rK�arg2r�)�python3�-W�cmdline_warnoption�-X�cmdline_xoptionrK�passr�r�r)zconfig_xoption1=3zconfig_xoption2=�config_xoption3r�r)r�r��config_warnoptionr�pass
r
rrrrrrUrrrrr�r�
my_platlibdirr	r&r!�always)r"r$�test_init_from_configr���PYMEM_ALLOCATOR_MALLOCrar�r`r�s   rr�z%InitConfigTests.test_init_from_config>sX��/��
�
�	�7
�%�q�7
��Q�7
�
��7
�
�1�	7
�

�1�7
�
 ��
7
�
�a�7
�
�A�7
�
�k�7
�
�I�7
�
�3�7
�
�1�7
�
�T�6�N�7
� 
�"�"�"�!7
�*
�!�+7
�,
����-7
�8
����97
�7
�B
�8�C7
�F
�1�G7
�H
�Q�I7
�J
�q�K7
�L
�1�M7
�N
!�!�O7
�P
�a�Q7
�R
�q�S7
�T
�Q�U7
�V
 ��W7
�X
�a�Y7
�Z
"�1�[7
�\
�A�]7
�^
�/�_7
�`
"�4�#5�a7
�b
��c7
�f
#�H�g7
�7
�h$%�%&�m7
�7
�7
��p	
���6��	�#-�	�	/�	/�	/�	/�	/rc���dti}idd�dd�dd�dd�d	d
�dd�dd�d
d�dd�dd�dd
�dd�dd
�dd�dd�dd
�dd�dgd|jdd��}|�d||t���dS) Nr�r�rr��*r�r
r�r�rr�rrr�/my/pathr��env_pycache_prefixrrUrrr�rr�rr��EnvVar�env_platlibdir�rrr	r&�test_init_compat_envr�r�r�s   rr�z$InitConfigTests.test_init_compat_env~s4���/�
�	�
��Q�
���
�
�1�
�
�1�	
�

 ��
�
�A�

�
�q�
�
!�!�
�
�j�
�
�2�
�
�a�
�
�q�
�
�a�
�
�k�
�
�I�
� 
"�1�!
�"
�A�#
�$%�:�*�#'�#5��+
�
�
��.	
���5�v�y�#-�	�	/�	/�	/�	/�	/rc���tdd�}idd�dd�dd�dd�d	d
�dd�dd�d
d�dd�dd�dd
�dd�dd
�dd�dd�dd
�dd�dgd|jdd��}|�d||t���dS) Nrr�r�r�r�r�r
r�r�rr�rrrr�r�r�rrUrrr�rr�rr�r�r�r��test_init_python_envr�)r�rar�r�r�s   rr�z$InitConfigTests.test_init_python_env�s9��/��
�
�	�
��Q�
���
�
�1�
�
�1�	
�

 ��
�
�A�

�
�q�
�
!�!�
�
�j�
�
�2�
�
�a�
�
�q�
�
�a�
�
�k�
�
�I�
� 
"�1�!
�"
�A�#
�$%�:�*�#'�#5��+
�
�
��.	
���5�v�y�#-�	�	/�	/�	/�	/�	/rc��tt���}tdddg���}|�d||t���dS)N�r�rr�r�r�r�test_init_env_dev_moder�)r �PYMEM_ALLOCATOR_DEBUGr�r`r�s   rr�z&InitConfigTests.test_init_env_dev_mode�sd���#8�9�9�9�	��q�#$�#,�+�/�/�/��	
���7���#-�	�	/�	/�	/�	/�	/rc��tt���}tdddg���}|�d||t���dS)Nr�rrr��test_init_env_dev_mode_allocr�)r r�r�r`r�s   rr�z,InitConfigTests.test_init_env_dev_mode_alloc�sd���#9�:�:�:�	��q�#$�#,�+�/�/�/��	
���=�v�y�#-�	�	/�	/�	/�	/�	/rc�b�dti}dddgd�}|�d||t���dS)Nr�rr)r�r�r�test_init_dev_moder�)r�r�r�r�s   rr�z"InitConfigTests.test_init_dev_mode�s[���.�
�	���%�;�
�
��
	
���3�V�Y�#-�	�	/�	/�	/�	/�	/rc	��dti}dggd�tj�d��dddgdgdd�}|�d||t
�	��dS)
Nr��	script.py)r�r��dev�-Pr�rrr�)r�r�rr�r�rrr&�test_preinit_parse_argvr�)r�rrrcr�r�r�s   rr�z'InitConfigTests.test_preinit_parse_argv�s���
�.�
�	�!�M�D�D�D��G�O�O�K�8�8���%�;����	
�	
��	
���8�&�)�#-�	�	/�	/�	/�	/�	/rc�^�ddi}gd�}||dd�}|�d||t���dS)Nr�r)	r��-E�-Ir�r�r�r��utf8r�)r�r�r��test_preinit_dont_parse_argvr��r�r�)r9r�r�r[s    rr�z,InitConfigTests.test_preinit_dont_parse_argv�sk��
��
�	��������
�
��
	
���=�v�y�#/�	�	1�	1�	1�	1�	1rc�N�ddddd�}|�d|t���dS)Nrr�r�r&r�r�test_init_isolated_flagr��r�r��r9r[s  rr�z'InitConfigTests.test_init_isolated_flag�s>���� �#$�	
�
��	
���8�&�j��Q�Q�Q�Q�Qrc�N�ddddd�}|�d|t���dS)Nrrr��test_preinit_isolated1r�r�r�s  rr�z&InitConfigTests.test_preinit_isolated1�@���� �#$�	
�
��	
���7��Z��P�P�P�P�Prc�N�ddddd�}|�d|t���dS)Nrrr��test_preinit_isolated2r�r�r�s  rr�z&InitConfigTests.test_preinit_isolated2r�rc�>�|�dt���dS)N�test_preinit_isolated_configr�r�rBs rr�z,InitConfigTests.test_preinit_isolated_configs"�����=�<��P�P�P�P�Prc�>�|�dt���dS)N�test_init_isolated_configr�r�rBs rr�z)InitConfigTests.test_init_isolated_configs"�����:���M�M�M�M�Mrc�>�|�dt���dS)N�test_preinit_python_configr�r�rBs rr�z*InitConfigTests.test_preinit_python_configr�rc�>�|�dt���dS)N�test_init_python_configr�r�rBs rr�z'InitConfigTests.test_init_python_config"r�rc�L�ddd�}|�di|t���dS)Nr)r�r��test_init_dont_configure_localer�r�)r9r�s  rr�z/InitConfigTests.test_init_dont_configure_locale%sI��!"� �
�
�	�	
���@�"�i�#-�	�	/�	/�	/�	/�	/rzSas of 3.11 this test no longer works because path calculations do not occur on readc�T�dddd�}d�}|�d|t|���dS)Nz./init_read_set�
my_executable)r�r0rc�\�|�dd��|�d��dS)Nr�test_path_insert1�test_path_append)�insertrn)rs r�modify_pathz7InitConfigTests.test_init_read_set.<locals>.modify_path6s0���K�K��.�/�/�/��K�K�*�+�+�+�+�+r�test_init_read_set)rgrhr�)r9r[r�s   rr�z"InitConfigTests.test_init_read_set.s\��.�)�.�
�
��
	,�	,�	,�	
���3�V�#-�.9�	�	;�	;�	;�	;�	;rc�Z�dgd�gd�gd�d�}|�d|t���dS)Nr)�config_xoptionr��sysadd_xoptionr�)�ignore:::cmdline_warnoptionzignore:::sysadd_warnoptionzignore:::config_warnoption)r�r�r�r�r�)r�rrr��test_init_sys_addr�r�r�s  rr�z!InitConfigTests.test_init_sys_add=sb���������
3�3�3�
�
��"	
���2�F�
��K�K�K�K�Krc�f�d}ddgdd|dgd|dzdd�}|�d	|t�
��dS)N�Rimport _testinternalcapi, json; print(json.dumps(_testinternalcapi.get_configs()))rKr�r��	./python3r�r
)r�r�r�rr��test_init_run_mainr�r��r9r�r[s   rr�z"InitConfigTests.test_init_run_mainQs\��E���6�N�#�T�4��8�'��$�;��
�
��	
���3�V���L�L�L�L�Lrc�j�d}ddgdd|dgd|dzddd	�}|�d
|td���dS)
Nr�rKr�r�r�r�r
r)r�r�r�rr�r#�test_init_mainz)Run Python code before _Py_InitializeMain)rgrKr�r�s   rr�zInitConfigTests.test_init_main]sz��E���6�N�#��� �"�(��$�;���	
�	
��	
���/��#-�&Q�	�	S�	S�	S�	S�	Src�Z�dgd�gd�dddd�}|�d|t�	��dS)
Nr
)rK�arg1�-v�arg3��./argv0r�rKr�r�r�r�rr�r)r�r�r�r�rr��test_init_parse_argvr�r�r�s  rrz$InitConfigTests.test_init_parse_argvnsP���0�0�0�N�N�N�%�#� �

�
��	
���5�v�:��N�N�N�N�Nrc�`�ddi}dgd�gd�dd�}|�d||t���dS)Nr�rr�r)r�r�r�r��test_init_dont_parse_argvr�r�)r9r^r[s   rrz)InitConfigTests.test_init_dont_parse_argvysg���!�
�
��I�I�I�N�N�N�%�	
�
��	
���:�F�J�#-�	�	/�	/�	/�	/�	/rc��tr
d}|j}n'd}tr|j}ntj|��pd}|�|||d���dS)Nrr�r+)r�rr0)r1r3�MACOS�shutil�whichr�)r9r[r�r0s    r�default_program_namez$InitConfigTests.default_program_name�su���	>�#�L���J�J�$�L��
>�!�]�
�
�#�\�,�7�7�=�2�
��
�
�(�)�$�
�
�	�	�	�	�	rc��|���}|dd}|dddddd�}|�|��dtjj�|��i}|�d|t|d���dS)	Nr[r	r+)r	rrrrr�TESTPATH�test_init_setpathT�rgr$r)r\rrrr�r2r�r`�r9r[rjr$s    rrz!InitConfigTests.test_init_setpath�s����*�*�,�,���x� �!6�7��$)���� "��	
�	
��	
�!�!�&�)�)�)��2�7�?�/�/��6�6�7�����2�F�#-�3�-1�	�	3�	3�	3�	3�	3rc��|���}|dd}|dddddtdddd�
}dtjj�|��i}|�d|t|d	�
��dS)Nr[r	r+�conf_program_name�conf_executable)
r	rrrrrr%r�rr0r
�test_init_setpath_configTr)r\�Py_DEBUGrrr�r2r�r�r
s    rrz(InitConfigTests.test_init_setpath_config�s����*�*�,�,���x� �!6�7��$)���� "��&.�,�/�0�+�
�
�� �2�7�?�/�/��6�6�7�����9�6�#-�3�d�	�	L�	L�	L�	L�	Lrc
��|���}|�|dd}|�|dd}tr|ddStj}tj�|tjd|j�|j	�d���tj�|tjd|j�d|j	����tj�|tjd|j�d|j	��d��gS)Nr[rr	rz.zipr�lib-dynload)
r\r1r/�version_inforrr2r�major�minor)r9rrr[�vers     rr	z#InitConfigTests.module_search_paths�s����*�*�,�,���>��H�%�h�/�F��� ��*�8�4�K��	��(�#�$9�:�:��"�C�����V�S�^�@�c�i�@���@�@�@�B�B�����V�S�^�=�c�i�=�=�#�)�=�=�?�?�����[�#�.�=�c�i�=�=�#�)�=�=�}�N�N��
rc	#�K�tj��5}tj�|��}|rQtj�tj�||����}tj|��tr�ddl	}tj�
|j��}tj|��D]i}|�	|d��rQtjtj�||��tj�||�����jtj�|tj�|j����}tj|j|��tj|j|��||_|V�ddd��dS#1swxYwYdS)Nrz*.dll)�tempfile�TemporaryDirectoryrr�realpath�normpathr2�makedirsr1�fnmatchr.r3�listdirr�copyfiler�copystat)r9�subdir�tmpdirr�exedir�f�	exec_copys       r�tmpdir_with_pythonz"InitConfigTests.tmpdir_with_python�s������
(�
*�
*�	�f��W�%�%�f�-�-�F��
$���)�)�"�'�,�,�v�v�*F�*F�G�G����F�#�#�#��
Z�����������7�7����F�+�+�Z�Z�A����q�'�2�2�Z�������V�Q�(?�(?�����f�VW�AX�AX�Y�Y�Y������V�R�W�-=�-=�d�m�-L�-L�M�M�I��O�D�M�9�5�5�5��O�D�M�9�5�5�5�%�D�M��L�L�L�/	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�F!G�G�Gc	���|���}|dd}tjj�|��}|D]�}tj�|��s�"tj�tj�|d����r!tj�|��}n��|�d|����|x}}trJtj�|d��}|dtj�|d��|g}	njtjj�dtjj
��}
tj�|tjd	|
����}|�||�
��}	||	||||||d�}|�|��||d�}|�d
|t$|���dS)Nr[r	r�Unable to find home in �Libr�DLLsrr�rr�rr	rrrrrr��TESTHOMEr��test_init_setpythonhome�rgr$)r\rrr�r2�isdirr4r.rRr1r/rrrrr	rr�r`)r9r[rj�	paths_strrrrr�stdlib�expected_paths�versionr$s            rr1z'InitConfigTests.test_init_setpythonhome�s����*�*�,�,���x� �!6�7���G�O�(�(��/�/�	��	;�	;�D��7�=�=��&�&�
���w�~�~�b�g�l�l�4��9�9�:�:�
��w���t�,�,����
�
�I�I�9��9�9�:�:�:�#�#����	U��W�\�\�$��.�.�F�$�A�h�����T�6�(B�(B�F�K�N�N��)�/�J�J�#�2B�2H�J�J�G��W�\�\�$���8J��8J�8J�K�K�F�!�5�5�T�t�5�T�T�N��#1��!�&� +�'� �	
�	
��	
�!�!�&�)�)�)��y�9�9�����8�&�#-�3�	�	8�	8�	8�	8�	8rc	�l�|���}|dd}tjj�|��}|D]�}tj�|��s�"tj�tj�|d����r!tj�|��}n��|�d|����|x}}trJtj�|d��}|dtj�|d��|g}	njtjj�dtjj
��}
tj�|tjd	|
����}|�||�
��}	||	||||||d�}||d�}d
|d<d|d<|�d|t"|���d|d<d|d<tj�tj��}t'tj�|d��d���5}
tj�tj�||
����d����d����|	trdnd<ddd��n#1swxYwYtsFtjx}}|�|���d|	d<|�||||���|�d|t"|���dS)Nr[r	rr*r+rr,rrr-r.r/�1�NEGATIVE_ISPYTHONBUILDr'�test_init_is_python_buildr2r|r�pybuilddir.txtr�r�z
$r
)r)rrrr)r\rrr�r2r3r4r.rRr1r/rrrrr	r�r`r0r�rr�rbrr�)r9r[rjr4rrrrr5r6r7r$r%r&s              r�#test_init_is_python_build_with_homez3InitConfigTests.test_init_is_python_build_with_homesw���*�*�,�,���x� �!6�7���G�O�(�(��/�/�	��	;�	;�D��7�=�=��&�&�
���w�~�~�b�g�l�l�4��9�9�:�:�
��w���t�,�,����
�
�I�I�9��9�9�:�:�:�#�#����	U��W�\�\�$��.�.�F�$�A�h�����T�6�(B�(B�F�K�N�N��)�/�J�J�#�2B�2H�J�J�G��W�\�\�$���8J��8J�8J�K�K�F�!�5�5�T�t�5�T�T�N��#1��!�&� +�'� �	
�	
�� �y�9�9��(+��$�%�%&��!�"����:�F�#-�3�	�	8�	8�	8�),��$�%�%&��!�"�������0�0��
�"�'�,�,�v�'7�8�8�6�
J�
J�
J�	H�a�57�W�5E�5E�����V������%5�%5�%5�%@�%@�%B�%B�1�%E�F�F�6H�6H�N�
�1�1�1��2�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H��	Q�#&�:�-�F�[� $� 8� 8�� 8� G� G�� J�N�1���M�M��V�&1�K�
�
Q�
Q�
Q����:�F�#-�3�	�	8�	8�	8�	8�	8s�;A7J>�>K�Kc��|���}|dd}tjj�|��}||d<d|i}|S)Nr[r	rr�)r\rrr�r2)r9r[�all_configsrjr4r$s      r�copy_paths_by_envz!InitConfigTests.copy_paths_by_envYsT���/�/�1�1���H�%�&;�<���G�O�(�(��/�/�	�#,��� ��Y�'���
rzSee test_init_pybuilddir_win32c	�@�|���5}tjd��pd}d}tj�||��}tj�tj�||d����}tj|��tj�|d��}t|dd���5}|�	|��ddd��n#1swxYwY|�
��}||d	<||d
<|j}	tjd��tjd��|	|	||d
�}
|�|
��}|�
d|
t|d|���ddd��dS#1swxYwYdS)N�VPATHr+�libdirr+r<�wr�r�������rr)rrrr0r	rr�T�rgr$rrG)r(�	sysconfig�get_config_varrrr2r�mkdirr��writer	r3r@r�r`)r9r$�vpathr#rC�	stdlibdir�filenamer�r	r0r[r$s            r�test_init_pybuilddirz$InitConfigTests.test_init_pybuilddiras*���
$�
$�
&�
&�	C�&��,�W�5�5�;��E��F��W�\�\�&�&�1�1�F���(�(�����f�e�U�)K�)K�L�L�I��H�V�����w�|�|�F�,<�=�=�H��h��f�5�5�5�
!������ � � �
!�
!�
!�
!�
!�
!�
!�
!�
!�
!�
!����
!�
!�
!�
!�#'�":�":�"<�"<��&/���#�&,���#���J�$-�$<�]�$K�$K�(�7��A�A�#-�(�':�'�
��F��(�(��0�0�C��"�"�#<�f�'1�s�15�6�
#�
C�
C�
C�9	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C����	C�	C�	C�	C�	C�	Cs7�B=F�C4�(F�4C8	�8F�;C8	�<B
F�F�FzSee test_init_pybuilddirc
�X�tjd��}d}tj�|���tj��dkr tj�|d��}|�|��5}tj�tj�||����}tj�tj�||d����}tj�|d��}t|dd�	��5}|�
|��ddd��n#1swxYwY|���}tj�|tj�|d
����|d
<||d<||d<|j
}	|||	|	||||d
�}
|�|
��}|�d|
t |d|���ddd��dS#1swxYwYdS)NrBzPCbuild\archr
�instrumentedr+r<rDr�r����rErF)rrrr0rrr	rr�FrG)rHrIrrr�count�sepr2r(r�rKr	rr3r@r�r`)r9rLr#r$rrMrNr�r	r0r[r$s            r�test_init_pybuilddir_win32z*InitConfigTests.test_init_pybuilddir_win32�s����(��1�1�� ��
�7���E�"�"�(�(���0�0�A�5�5��W�\�\�&�.�9�9�F�
�
$�
$�V�
,�
,�	D���W�%�%�b�g�l�l�6�5�&A�&A�B�B�F���(�(�����f�e�U�)K�)K�L�L�I��w�|�|�F�,<�=�=�H��h��f�5�5�5�
!������ � � �
!�
!�
!�
!�
!�
!�
!�
!�
!�
!�
!����
!�
!�
!�
!�#'�":�":�"<�"<��&(�g�l�l�6�2�7�;K�;K�L_�`b�Lc�;d�;d�&e�&e���#�&,���#�&/���#���J�$*�%�#-�(� �%�':�'�	�	�F��(�(��0�0�C��"�"�#<�f�'1�s�16�F�
#�
D�
D�
D�7	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	D�	Ds8�B.H�:E�H�E 	� H�#E 	�$B.H�H#�&H#c
��|���5}tj��5}tj}t
sQtj�|tj	d|j
�d|j��d��}t
j|��n�tj�|d��}t
j|��tjtj�tjd��tj�|d����tj�|d��}t#|dd�	��5}t%d
|z|���t%d|���ddd��n#1swxYwY|���}t
s||d
<ndtj�|tj�|d����|tj�|d��g}|j}	tj�|tj�|	����}
|}t-jd��|||
|	|d�}t
rF||d<||d<tj�|d��|d<t1t2��|d<n"|j|d<t1t2��|d<|�|��}
|�d|t:|
d|���ddd��n#1swxYwYddd��dS#1swxYwYdS)Nrrrr+rz
pyvenv.cfgrDr�r�z	home = %s��filez$include-system-site-packages = falserFrr)rrrrr0r	rrr%r�TrG)r(rrr/rr1rrr2rrrrrr!r�
STDLIB_DIRr�rVr	rr3rHrIr�rrar@r�r`)r9r$�pyvenv_homer�lib_dynload�
lib_folderrNr�rjr0rrr[r$s              r�test_init_pyvenv_cfgz$InitConfigTests.test_init_pyvenv_cfg�s����
$�
$�
&�
&�;	C�&�
�
(�
*�
*�;	C�.9��"�C��

� �g�l�l�;�+.�>�+K�C�I�+K�+K��	�+K�+K�+8�:�:����K�(�(�(�(��W�\�\�+�u�=�=�
���J�'�'�'����G�L�L��!3�W�=�=��G�L�L��W�5�5����
�w�|�|�F�L�9�9�H��h��f�5�5�5�
G���k�K�/�b�9�9�9�9��<�2�F�F�F�F�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G����
G�
G�
G�
G��,�,�.�.�E��
�'��b�	�	��G�L�L����)9�)9�%��(�)C�)C�D�D���G�L�L��e�4�4�����J� �g�l�l�;���8H�8H��8T�8T�U�U�O�%�K�(�7��A�A�$/�*�#2�(�',�
��F��	
A�(3��}�%�#.��x� �')�w�|�|�K��'G�'G��|�$�/2�x�<�/@�/@��+�,�,�(,�'9��|�$�/2�x�<�/@�/@��+�,��(�(��0�0�C��"�"�#<�f�'1�s�15�6�
#�
C�
C�
C�s;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C����;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C�;	C����;	C�;	C�;	C�;	C�;	C�;	CsZ�L:�D&L"�&F�5L"�F�L"�F�	F
L"�L:�"L&	�&L:�)L&	�*L:�:L>�L>zspecific to Windowsc	��ddddddtj���d�fg}|�dit���d	tjj�d
�|D����i����\}}|�|d��	tj	|��}n-#tj
$r|�d
|����YnwxYw|dd}t||��D]\\}}}|�||���dS)N)z	C:/a. . .�	C:\a. . .)r_r_)z\\?\C:////a////b. . .z\\?\C:\a\b. . .)z//a/b/c. . .�\\a\b\c. . .)r`r`za. . .z\ar�r�c3�&K�|]}|dV��
dS)rNrx)r��cs  r�	<genexpr>z=InitConfigTests.test_getpath_abspath_win32.<locals>.<genexpr>�s&����3H�3H�Q�A�a�D�3H�3H�3H�3H�3H�3Hrr�r+rLr[r	)
rr6r]r&rr�r2rWrOrPrQrR�zip)r9�CASESr[r\�resultsr�rf�results        r�test_getpath_abspath_win32z*InitConfigTests.test_getpath_abspath_win32�s\��
)�(�@�0�4�
�"�)�+�+�*�*�*�+�

���0�0�)�J�(�*�*�J��r�w��3�3�3H�3H�%�3H�3H�3H�H�H�J�J�1�
�
���S�
	
����b�!�!�!�	9��*�S�/�/�C�C���#�	9�	9�	9��I�I�7��7�7�8�8�8�8�8�	9�����h�-� 5�6��%(���%8�%8�	/�	/�!�M�Q��6����V�X�.�.�.�.�	/�	/s�B#�#'C
�C
c��
�tjd���
tjd��}�
fd�}|d��}|d��}|d��}|d��}|d��}|d	��}|���d
}	|�|���t
jj��|	d��|�|��|	d��|�|��|	d
��|�|��|	d��|�|��|	d��|�|��|	d��dS)N�ctypes�_testinternalcapic�X��t�j|��}d|_�j|_|S)Nrx)�getattr�	pythonapi�argtypes�	c_wchar_p�restype)r�funcrjs  �r�get_funcz8InitConfigTests.test_global_pathconfig.<locals>.get_funcs+����6�+�T�2�2�D��D�M�!�+�D�L��Kr�
Py_GetPath�Py_GetPrefix�Py_GetExecPrefix�Py_GetProgramName�Py_GetProgramFullPath�Py_GetPythonHomer[r	rrr�r0r)r�
import_module�get_configsrWrErrr�)r9rkrsrtrurvrwrxryr[rjs          @r�test_global_pathconfigz&InitConfigTests.test_global_pathconfig	s�����,�X�6�6��)�7�8K�L�L��	�	�	�	�	��X�l�+�+�
��x��/�/��#�8�$6�7�7��$�H�%8�9�9�� (��)@� A� A��#�8�$6�7�7��"�.�.�0�0��:���������+�+�B�G�O�<�<�� 5�6�	8�	8�	8����������)9�:�:�:����)�)�+�+�V�M�-B�C�C�C����*�*�,�,�f�^�.D�E�E�E����.�.�0�0�&��2F�G�G�G����)�)�+�+�V�F�^�<�<�<�<�<rc��gd�}tt���}ddd|gd�d�}|�d||t���dS)N)zignore:::PyConfig_Insert0rz
ignore:::env1z
ignore:::env2zignore:::cmdline1zignore:::cmdline2r�zignore:::PySys_AddWarnOption1zignore:::PySys_AddWarnOption2zignore:::PyConfig_BeforeReadzignore:::PyConfig_AfterReadr�r)r�z-Wignore:::cmdline1z-Wignore:::cmdline2)r�r�rrr��test_init_warnoptionsr�)r r�r�r�)r9rr�r[s    rr~z%InitConfigTests.test_init_warnoptions/s���+�+�+���#8�9�9�9�	����&�1�1�1�
�
��	
���6��	�#-�	�	/�	/�	/�	/�	/rc�N�dddgd�}|�d|t���dS)Nrr
zerror::BytesWarning)r#rr�test_init_set_configr�r�r�s  rr�z$InitConfigTests.test_init_set_configJsK����1�2�
�
��
	
���5�v�#/�	�	1�	1�	1�	1�	1rc�0�|�d��dS)N�test_get_argc_argv�r]rBs rr�z"InitConfigTests.test_get_argc_argvSs���%�%�&:�;�;�;�;�;rc
��hd�}|D]�\}}d|��}ddgdd|ddgddd	|g|d
�}|rd|d	d�ind}|�t|����5|�d|t|�
��ddd��n#1swxYwY��dS)N>�z=onr�z=offr�r+r�rDr�frozen_modulesr
rKrr�r�r�r)r�r�r�r�rr�rr%�
TESTFROZEN�test_init_use_frozen_modulesr2)�subTest�reprr�r�)r9�tests�rawrf�optvalr[r$s       rr�z,InitConfigTests.test_init_use_frozen_modulesWs=��
�
�
��#�	@�	@�M�C��+�c�+�+�F����'��v�t�V�D� )�'�#$�#�H�&.�	�	�F�.1�:�<��Q�R�R��)�)�d�C����d�3�i�i�(�(�
@�
@��&�&�'E�v�+5�3�'�@�@�@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@����
@�
@�
@�
@��	@�	@s�B�B	�B	rA)NNNN)NN)Yrurvrwr�r1rb�objectr_rar`�PYMEM_ALLOCATOR_NOT_SETr�r�r r�r�r�r�rdr/rrr�r�r�rvrxrwrMr@�classmethodrBrIrTr\rkrnrsr}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��skipr�r�r�r�rrrrrr	�
contextlib�contextmanagerr(r1r=r@�skipIfrO�
skipUnlessrUr]rhr|r~r�r�r�rxrrr�r��ss	�������G�+5�L���;L�� ������F�H�H�M�#�,���� !�������� � �(�!�"
�	�	�	���.���*�$�	�����$�0�!��������������O�I��
�I��A�I�	�1�I�	�A�	I�	"�1�
I�	��I�	�Q�I�	��I�	�q�I�	�q�I�	�Q�I�	�!�I�	�Q�I�	��I�"	�1�#I�$	�/�%I�(	�$�)I�I�*	�*�+I�,	�a�-I�.	���/I�0	�R�1I�4	�B�5I�6	�r�7I�:	�$�;I�<	��=I�>	�(�?I�@	�-�AI�D	�$�EI�F	�)�GI�H	�)�II�J	�.�KI�L	�1�MI�N	"�1�OI�P	�c�n�QI�I�I�R	�(�SI�V	�q�WI�X	��YI�Z	 ��[I�\	�1�]I�^	�q�_I�`	�a�aI�b	��cI�d	�!�eI�f	�1�gI�h	��iI�j	�q�kI�l	�Q�mI�n	�!�oI�r	�,�sI�t	�*�uI�x	!�!�yI�I�z���� )� ��!"�"*�l��)�QI�I�I�M�T�����"�A�
�	�	�	��D��������M�
�d�=�!������ !��������O��4�23��.�/�,-�$%�01����	%�������(���%�%�'
�	�	�	�	�!�!�#
�	�	�	��O��#�#��[�#����<�<�<�>���"6:�=8�=8�=8�=8�~/�/�/�
+�
+�
+�=�=�=�,;?�-1�)-�!%�4�>B�"�%�T�	4�4�4�4�4�lN�N�N�M�M�M�J�J�J�/�/�/�.>/�>/�>/�@/�/�/�</�/�/�>/�/�/�/�/�/�
/�
/�
/�/�/�/�&1�1�1�$R�R�R�Q�Q�Q�Q�Q�Q�Q�Q�Q�N�N�N�M�M�M�J�J�J�/�/�/��X�]�<�=�=�;�;�=�=�;�L�L�L�(
M�
M�
M�S�S�S�"	O�	O�	O�/�/�/���� 3�3�3�,L�L�L�2����&��������6'8�'8�'8�R:8�:8�:8�x����X�_�Z�!A�B�B�!C�!C�C�B�!C�F�X���%?�@�@�%D�%D�A�@�%D�N>C�>C�>C�@�X���%:�;�;�/�/�<�;�/�6$=�$=�$=�L/�/�/�61�1�1�<�<�<�@�@�@�@�@rr�c��eZdZd�ZdS)�SetConfigTestsc�~�tjd��tjdddddg}t	j|tjtjdd�	��}|jr4tj	r(t|j��t|j��|�
|jd
|j|j|jf��dS)N�	_testcapir�r�r�z-mztest._test_embed_set_configr��backslashreplace)rJrKr�r�r)rrzr/r0rOr~rQrErrUrVrJrKrW)r9rYrSs   r�test_set_configzSetConfigTests.test_set_configqs����#�K�0�0�0��~�t�V�T�4�9V�W���~�c�%/�_�%/�_�'.�7I�K�K�K���?�	�w��	��$�+�����$�+���������!��/�4�;���D�	F�	F�	F�	F�	FrN)rurvrwr�rxrrr�r�ps(������F�F�F�F�Frr�c�D�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
S)�
AuditingTestsc�0�|�d��dS)N�test_open_code_hookr�rBs rr�z!AuditingTests.test_open_code_hook�s���%�%�&;�<�<�<�<�<rc�0�|�d��dS)N�
test_auditr�rBs rr�zAuditingTests.test_audit�s���%�%�l�3�3�3�3�3rc�0�|�d��dS)N�test_audit_subinterpreterr�rBs rr�z'AuditingTests.test_audit_subinterpreter�����%�%�&A�B�B�B�B�Brc�J�|�dtjd���dS)N�test_audit_run_commandr�rDrE�r]r�
SHORT_TIMEOUTrBs rr�z$AuditingTests.test_audit_run_command�s5���%�%�&>�.5�.C�12�	&�	4�	4�	4�	4�	4rc�J�|�dtjd���dS)N�test_audit_run_filerr�r�rBs rr�z!AuditingTests.test_audit_run_file�s5���%�%�&;�.5�.C�12�	&�	4�	4�	4�	4�	4rc���tj�|jtj��dz}t
|dd���5}td|���td|���ddd��n#1swxYwY	it���d|i�}|�	d	tjd
|���tj|��dS#tj|��wxYw)N�.pyrDr�r�z
import sysrWz&sys.__interactivehook__ = lambda: None�
PYTHONSTARTUP�test_audit_run_interactivehook�
�rDrEr$�
rrr2r7r�TESTFNr�rVr&r]rr��unlink�r9�startupr&r$s    rr�z,AuditingTests.test_audit_run_interactivehook�s;���'�,�,�t�{�I�,<�=�=��E��
�'�3��
1�
1�
1�	D�Q��,�Q�'�'�'�'��:��C�C�C�C�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	�G�*�,�,�G�o�w�G�G�C��)�)�*J�29�2G�57�S�
*�
B�
B�
B�
�I�g�������B�I�g�������s�#A4�4A8�;A8�7C
�
C#c��tj�|jtj��dz}t
|dd���5}td|���ddd��n#1swxYwY	it���d|i�}|�	dtjd	|�
��tj|��dS#tj|��wxYw)Nr�rDr�r�r�rWr��test_audit_run_startupr�r�r�r�s    rr�z$AuditingTests.test_audit_run_startup�s���'�,�,�t�{�I�,<�=�=��E��
�'�3��
1�
1�
1�	"�Q��&�q�!�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	�G�*�,�,�G�o�w�G�G�C��)�)�*B�29�2G�57�S�
*�
B�
B�
B�
�I�g�������B�I�g�������s�A#�#A'�*A'�/7B<�<Cc�J�|�dtjd���dS)N�test_audit_run_stdinrr�r�rBs rr�z"AuditingTests.test_audit_run_stdin�s5���%�%�&<�.5�.C�12�	&�	4�	4�	4�	4�	4rc�0�|�d��dS)N�test_get_incomplete_framer�rBs rr�z'AuditingTests.test_get_incomplete_frame�r�rN)rurvrwr�r�r�r�r�r�r�r�r�rxrrr�r��s�������=�=�=�4�4�4�C�C�C�4�4�4�
4�4�4�
���
�
�
�4�4�4�
C�C�C�C�Crr�c��eZdZd�Zejejdkd��d���Zej	e
ed��d��d���ZdS)	�	MiscTestsc�0�|�d��dS)N�test_unicode_id_initr�rBs rr�zMiscTests.test_unicode_id_init�s��	
�%�%�&<�=�=�=�=�=rrz(Py_FrozenMain is not exported on Windowsc�4�ttj��}d|d<|�d|���\}}tj�d��}t
jd|�d������}|�	||��dS)Nr9�PYTHONUNBUFFERED�test_frozenmainr�rz�
            Frozen Hello World
            sys.argv ['./argv0', '-E', 'arg1', 'arg2']
            config program_name: ./argv0
            config executable: z|
            config use_environment: 1
            config configure_c_stdio: 1
            config buffered_stdio: 0
        )
r rr!r]rrr�r��lstriprW)r9r$r[r\r0rfs      rr�zMiscTests.test_frozenmain�s����2�:����"%�����0�0�1B��0�L�L���S��W�%�%�i�0�0�
��?�$�!+�	$�$�$�
�
��V�X�X�	�	
����h�'�'�'�'�'rr	z--X showrefcount requires a Python debug buildc	��d}|D�]O\}}d|��}tjdddd|d|g}tj|tjtjd���}|�|jd	��|j�	��}tjd
|��}|s|�d|����t|�d����}	t|�d
����}
|�||���5|�|	d	|��|�|
d	|��ddd��n#1swxYwY��QdS)N))�offr�)�onr�)r��import __hello__)r�r�zfrozen_modules=r�r��showrefcountrKT)rJrK�textrz!^\[(-?\d+) refs, (-?\d+) blocks\]zunexpected output: rr
)r��stmt)r/r0rOr~rQ�STDOUTrWrErJr�rfrgrRr��groupr�)r9r��flagr��xoptrYrSr[rg�refs�blockss           r�test_no_memleakzMiscTests.test_no_memleak�s���
�� �	1�	1�J�D�$�+�T�+�+�D��>�4��~�t�T�4�QU�V�C��>�#�)3��)3�):�'+�-�-�-�D�
���T�_�a�0�0�0��+�$�$�&�&�C��H�A�3�G�G�E��
9��	�	�7��7�7�8�8�8��u�{�{�1�~�~�&�&�D�����Q���(�(�F����T���=�=�
1�
1�� � ��q�#�.�.�.�� � ���C�0�0�0�
1�
1�
1�
1�
1�
1�
1�
1�
1�
1�
1����
1�
1�
1�
1��	1�	1s�/E	�	E
	�E
	N)
rurvrwr�r�r�rrr�r��hasattrr/r�rxrrr�r��s�������>�>�>��X�_�R�W��_�?�A�A�(�(�A�A�(� �X�����&8�9�9�H�J�J�1�1�J�J�1�1�1rr�c�*�eZdZdZd�Zd�Zd�Zd�ZdS)�StdPrinterTestsrc��tjd��}|jj}|jf|_|j|_||��S)Nrj)rrzrn�PyFile_NewStdPrinter�c_intro�	py_objectrq)r9�fdrjr�s    r�create_printerzStdPrinterTests.create_printer�sH���,�X�6�6��%�/�D��)/����%�'-�'7��$�#�#�B�'�'�'rc��d}|j}tj|��}|�tj|��tj��\}}|�tj|��|�tj|��	tj||��|�|��}|�|��tj||��n#tj||��wxYwtj	|d��}|�
||�dd����dS)Nuunicode:é-€-�!
�dr�r�)�	STDOUT_FDr�dup�
addCleanup�close�pipe�dup2r�rKr�rW�encode)r9�message�	stdout_fd�stdout_fd_copy�rfd�wfd�printer�datas        r�
test_writezStdPrinterTests.test_write�s��1���N�	���	�*�*�������.�1�1�1��7�9�9���S������#�&�&�&������#�&�&�&�	/�
�G�C��#�#�#��)�)�)�4�4�G��M�M�'�"�"�"��G�N�I�.�.�.�.��B�G�N�I�.�.�.�.�����w�s�C� � ������w�~�~�f�6H�I�I�J�J�J�J�Js�?C*�*Dc�R�|j}|�|��}|�|���|��|�|���tj|����|���|���dSrA)r�r�rW�fileno�isattyr�flushr��r9r�r�s   r�test_methodszStdPrinterTests.test_methodss���
�^���%�%�b�)�)��������)�)�2�.�.�.�������)�)�2�9�R�=�=�9�9�9��
�
�����
�
�����rc��|j}|�|��}tj|t	|����dSrA)r�r�r�check_disallow_instantiation�typer�s   r�test_disallow_instantiationz+StdPrinterTests.test_disallow_instantiations;��
�^���%�%�b�)�)���,�T�4��=�=�A�A�A�A�ArN)rurvrwr�r�r�r�r�rxrrr�r��s_������
�I�(�(�(�K�K�K�.���B�B�B�B�Brr��__main__)8�testr�test.supportrrr��collectionsrr�rOr�os.pathrfrrOr/rHrr��has_subprocess_supportr�rr1�platformrr�rr�r�r�r`r�r�r��
MAX_HASH_SEEDrr2rrrrr�STDLIB_INSTALL�isfilerr&r(�TestCaserzr�r�r�r�r�rursrxrr�<module>rsi��������&�&�&�&�&�&�"�"�"�"�"�"�����"�"�"�"�"�"���������	�	�	�	�����	�	�	�	�
�
�
�
�����
�
�
�
��������������%�?�
�(�
�=�
>�
>�>��g��o�
�	���	!���7�3�*�+�+���������
�
�
���
�
��
�
����c�j�#�.�>�S�
�
#�>�>�c�&6�&<�>�>�@�@��	�w�~�~�b�g�l�l�>�7�;�;�<�<���N�5�5�5����j!�j!�j!�j!�j!�j!�j!�j!�ZX2�X2�X2�X2�X2�(�(�*;�X2�X2�X2�tg@�g@�g@�g@�g@�)�8�+<�g@�g@�g@�T'
F�
F�
F�
F�
F�X�&�
F�
F�
F� 3C�3C�3C�3C�3C�'��):�3C�3C�3C�l31�31�31�31�31�#�X�%6�31�31�31�l0B�0B�0B�0B�0B�)�8�+<�0B�0B�0B�f�z����H�M�O�O�O�O�O��r