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 )zFixer 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   Nz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    