�
!A?hf; � � � d Z ddlmZ ddlmZmZ ddlmZ ddl m
Z
d� Zd� Zd� Z
d � Zd-d�Zd� Zd
� Zd� Z e� � e
� � fd�Zd.d�Zd� Zd� Zd-d�Zd� Zd-d�Zd-d�Zd� Zd� Zd� Zd� Zd� Zh d�Z d� Z!da"da#d a$d!a%d"� Z&d#� Z'd$� Z(d%� Z)d&� Z*d'� Z+d(� Z,d)� Z-ej. ej/ hZ0d-d*�Z1ej/ ej. ej2 hZ3d+� Z4d-d,�Z5d
S )/z1Utility functions, node construction macros, etc.� )�token)�Leaf�Node)�python_symbols)�patcompc �l � t t j | t t j d� � |g� � S )N�=)r �syms�argumentr r �EQUAL)�keyword�values �?/opt/alt/python-internal/lib64/python3.11/lib2to3/fixer_util.py�
KeywordArgr s. � ���
��$�u�{�C�0�0�%�8�:� :� :� c �6 � t t j d� � S )N�()r r �LPAR� r r �LParenr � � ���
�C� � � r c �6 � t t j d� � S )N�))r r �RPARr r r �RParenr r r c �� � t | t � � s| g} t |t � � s
d|_ |g}t t j | t
t j dd�� � gz |z � � S )zBuild an assignment statement� r ��prefix) �
isinstance�listr r r
�atomr r r )�target�sources r �Assignr% su � ��f�d�#�#� �����f�d�#�#� ���
������ ��$�u�{�C��<�<�<�=�=��F�H� H� Hr Nc �: � t t j | |�� � S )zReturn a NAME leafr )r r �NAME)�namer s r �Namer) $ s � ���
�D��0�0�0�0r c �V � | t t j t � � |g� � gS )zA node tuple for obj.attr)r r
�trailer�Dot)�obj�attrs r �Attrr/ ( s! � ���d�l�S�U�U�D�M�2�2�3�3r c �6 � t t j d� � S )zA comma leaf�,)r r �COMMAr r r �Commar3 , s � ����S�!�!�!r c �6 � t t j d� � S )zA period (.) leaf�.)r r �DOTr r r r, r, 0 s � ��� �3���r c �� � t t j |� � � |� � � g� � }| r.|� dt t j | � � � � |S )z-A parenthesised argument list, used by Call()r )r r
r+ �clone�insert_child�arglist)�args�lparen�rparen�nodes r �ArgListr? 4 sW � ����v�|�|�~�~�v�|�|�~�~�>�?�?�D�� 7����!�T�$�,��5�5�6�6�6��Kr c �j � t t j | t |� � g� � }|�||_ |S )zA function call)r r
�powerr? r )� func_namer; r r> s r �CallrC ; s0 � ���
�Y���
�
�6�7�7�D�
������Kr c �6 � t t j d� � S )zA newline literal�
�r r �NEWLINEr r r �NewlinerH B s � ���
�t�$�$�$r c �6 � t t j d� � S )zA blank line� rF r r r � BlankLinerK F s � ���
�r�"�"�"r c �: � t t j | |�� � S )Nr )r r �NUMBER)�nr s r �NumberrO J s � ����a��/�/�/�/r c � � t t j t t j d� � | t t j d� � g� � S )zA numeric or string subscript�[�])r r
r+ r r �LBRACE�RBRACE)�
index_nodes r � SubscriptrV M s= � ����t�E�L�#�6�6�)�#�E�L�#�6�6�8� 9� 9� 9r c �: � t t j | |�� � S )z
A string leafr )r r �STRING)�stringr s r �StringrZ S s � ����f�V�4�4�4�4r c �p � d| _ d|_ d|_ t t j d� � }d|_ t t j d� � }d|_ ||||g}|rWd|_ t t j d� � }d|_ |� t t j ||g� � � � t t j | t t j |� � g� � }t t j
t t j d� � |t t j d� � g� � S )zuA list comprehension of the form [xp for fp in it if test].
If test is None, the "if test" part is omitted.
rJ r �for�in�ifrQ rR )
r r r r' �appendr r
�comp_if� listmaker�comp_forr" rS rT ) �xp�fp�it�test�for_leaf�in_leaf�
inner_args�if_leaf�inners r �ListComprl W s � �
�B�I��B�I��B�I��E�J��&�&�H��H�O��5�:�t�$�$�G��G�N��B���,�J�� ?�����u�z�4�(�(��������$�t�|�g�t�_�=�=�>�>�>����"�d�4�=�*�&E�&E�!F�G�G�E��� ��U�\�3�/�/���U�\�3�/�/�1�2� 2� 2r c �@ � |D ]}|� � � �t t j d� � t t j | d�� � t t j dd�� � t t
j |� � g}t t
j |� � }|S )zO Return an import statement in the form:
from package import name_leafs�fromr r �import)�remover r r' r r
�import_as_names�import_from)�package_name�
name_leafs�leaf�children�imps r �
FromImportrx o s� � � � � �����
�
�
�
��U�Z��(�(��U�Z��c�:�:�:��U�Z��#�6�6�6��T�)�:�6�6�8�H� �t���
*�
*�C��Jr c �l � |d � � � }|j t j k r|� � � }n-t t j |� � � g� � }|d }|rd� |D � � }t t j t
t |d � � t |d � � � � t t j |d � � � ||d � � � g� � gz |z � � }| j |_ |S )zfReturns an import statement and calls a method
of the module:
import module
module.name()r- �afterc �6 � g | ]}|� � � ��S r )r8 )�.0rN s r �