o
    Š�bc¸  ã                   @   sZ   d Z ddlmZ ddlmZmZmZmZ ddlm	Z	m
Z
mZ dd„ ZG dd	„ d	ejƒZd
S )zÞFixer for import statements.
If spam is being imported from the local directory, this import:
    from spam import eggs
Becomes:
    from .spam import eggs

And this import:
    import spam
Becomes:
    from . import spam
é   )Ú
fixer_baseé    )ÚdirnameÚjoinÚexistsÚsep)Ú
FromImportÚsymsÚtokenc                 c   s¦   � | g}|rQ|  ¡ }|jtjkr|jV  n8|jtjkr(d dd„ |jD ƒ¡V  n%|jtj	kr7| 
|jd ¡ n|jtjkrI| |jddd… ¡ ntdƒ‚|sdS dS )zF
    Walks over all the names imported in a dotted_as_names node.
    Ú c                 S   s   g | ]}|j ‘qS © )Úvalue)Ú.0Úchr   r   ú//usr/lib/python3.10/lib2to3/fixes/fix_import.pyÚ
<listcomp>   s    z$traverse_imports.<locals>.<listcomp>r   Néþÿÿÿzunknown node type)ÚpopÚtyper
   ÚNAMEr   r	   Údotted_namer   ÚchildrenÚdotted_as_nameÚappendÚdotted_as_namesÚextendÚAssertionError)ÚnamesÚpendingÚnoder   r   r   Útraverse_imports   s   €
õr    c                       s4   e Zd ZdZdZ‡ fdd„Zdd„ Zdd„ Z‡  ZS )	Ú	FixImportTzj
    import_from< 'from' imp=any 'import' ['('] any [')'] >
    |
    import_name< 'import' imp=any >
    c                    s"   t t| ƒ ||¡ d|jv | _d S )NÚabsolute_import)Úsuperr!   Ú
start_treeÚfuture_featuresÚskip)ÚselfÚtreeÚname©Ú	__class__r   r   r$   /   s   zFixImport.start_treec                 C   s¾   | j rd S |d }|jtjkr2t|dƒs|jd }t|dƒr|  |j¡r0d|j |_| ¡  d S d S d}d}t	|ƒD ]}|  |¡rDd}q:d}q:|rS|rQ|  
|d¡ d S td|gƒ}|j|_|S )NÚimpr   r   Ú.FTz#absolute and local imports together)r&   r   r	   Úimport_fromÚhasattrr   Úprobably_a_local_importr   Úchangedr    Úwarningr   Úprefix)r'   r   Úresultsr,   Ú
have_localÚhave_absoluteÚmod_nameÚnewr   r   r   Ú	transform3   s0   


ÿþ
zFixImport.transformc                 C   st   |  d¡rdS | dd¡d }t| jƒ}t||ƒ}ttt|ƒdƒƒs$dS dtddd	d
fD ]}t|| ƒr7 dS q,dS )Nr-   Fé   r   z__init__.pyz.pyz.pycz.soz.slz.pydT)Ú
startswithÚsplitr   Úfilenamer   r   r   )r'   Úimp_nameÚ	base_pathÚextr   r   r   r0   U   s   


ÿz!FixImport.probably_a_local_import)	Ú__name__Ú
__module__Ú__qualname__ÚBM_compatibleÚPATTERNr$   r9   r0   Ú__classcell__r   r   r*   r   r!   &   s    "r!   N)Ú__doc__r   r   Úos.pathr   r   r   r   Ú
fixer_utilr   r	   r
   r    ÚBaseFixr!   r   r   r   r   Ú<module>   s    