o
     JAf                     @   sX   	 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 )
   )
fixer_base    )dirnamejoinexistssep)
FromImportsymstokenc                 c   s    	 | g}|rR|  }|jtjkr|jV  n8|jtjkr)ddd |jD V  n%|jtj	kr8|
|jd  n|jtjkrJ||jd d d  ntd|sd S d S )N c                 S   s   g | ]}|j qS  )value).0Zchr   r   //usr/lib/python3.10/lib2to3/fixes/fix_import.py
<listcomp>   s    z$traverse_imports.<locals>.<listcomp>r   zunknown node type)poptyper
   NAMEr   r	   Zdotted_namer   childrenZdotted_as_nameappendZ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 )NZabsolute_import)superr   
start_treeZfuture_featuresskip)selfZ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	   Zimport_fromhasattrr   probably_a_local_importr   changedr   warningr   prefix)r!   r   resultsr%   Z
have_localZhave_absoluteZ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!   Zimp_name	base_pathextr   r   r   r(   U   s   


z!FixImport.probably_a_local_import)	__name__
__module____qualname__ZBM_compatibleZPATTERNr   r.   r(   __classcell__r   r   r#   r   r   &   s    "r   N)r   r   Zos.pathr   r   r   r   Z
fixer_utilr   r	   r
   r   ZBaseFixr   r   r   r   r   <module>   s    