
    daf                     p    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 Z G d dej                        Zy	)
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              #   V  K   | g}|r|j                         }|j                  t        j                  k(  r|j                   n|j                  t
        j                  k(  r6dj                  |j                  D cg c]  }|j                   c}       n|j                  t
        j                  k(  r|j                  |j                  d          nJ|j                  t
        j                  k(  r"|j                  |j                  ddd          nt        d      |ryyc c}w w)zF
    Walks over all the names imported in a dotted_as_names node.
     r   Nzunknown node type)poptyper   NAMEvaluer
   dotted_namer   childrendotted_as_nameappenddotted_as_namesextendAssertionError)namespendingnodechs       3/root/Python-3.12.4/Lib/lib2to3/fixes/fix_import.pytraverse_importsr      s      gG
{{}99

"**YY$***''dmm<288<==YY$---NN4==+,YY$...NN4==2./ !455 
 =s   A9D);D$BD)"D)c                   2     e Zd ZdZdZ fdZd Zd Z xZS )	FixImportTzj
    import_from< 'from' imp=any 'import' ['('] any [')'] >
    |
    import_name< 'import' imp=any >
    c                 T    t         t        |   ||       d|j                  v | _        y )Nabsolute_import)superr!   
start_treefuture_featuresskip)selftreename	__class__s      r   r%   zFixImport.start_tree/   s&    i)$5%)=)==	    c                    | j                   ry |d   }|j                  t        j                  k(  rit	        |d      s|j
                  d   }t	        |d      s| j                  |j                        r%d|j                  z   |_        |j                          y y d}d}t        |      D ]  }| j                  |      rd}d} |r|r| j                  |d       y 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news           r   	transformzFixImport.transform3   s    99en99(((
 c7+ll1o c7+++CII6#))O	 7 J!M,S1 )//9!%J$(M	)
  LL'LMS3%(CCJJr,   c                    |j                  d      ry|j                  dd      d   }t        | j                        }t	        ||      }t        t	        t        |      d            sydt        ddd	d
fD ]  }t        ||z         s y y)Nr/   F   r   z__init__.pyz.pyz.pycz.soz.slz.pydT)
startswithsplitr   filenamer   r   r   )r(   imp_name	base_pathexts       r   r2   z!FixImport.probably_a_local_importU   s    s#>>#q)!,DMM*	H-	 d79-}=>3uf= 	Ci#o&	 r,   )	__name__
__module____qualname__BM_compatiblePATTERNr%   r;   r2   __classcell__)r+   s   @r   r!   r!   &   s    MG> Dr,   r!   N)__doc__r   r   os.pathr   r   r   r   
fixer_utilr	   r
   r   r   BaseFixr!    r,   r   <module>rO      s2   
  . . 0 06&=
"" =r,   