o bc @sZdZddlmZddlmZmZmZmZddlm Z m Z m Z ddZ Gdd d ej Zd 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)dirnamejoinexistssep) FromImportsymstokenccs|g}|rQ|}|jtjkr|jVn8|jtjkr(ddd|jDVn%|jtj kr7| |jdn|jtj krI| |jdddnt d|sdSdS)zF Walks over all the names imported in a dotted_as_names node. cSsg|]}|jqS)value).0chr r //usr/lib/python3.10/lib2to3/fixes/fix_import.py sz$traverse_imports..rNzunknown node type)poptyper NAMEr r dotted_namerchildrendotted_as_nameappenddotted_as_namesextendAssertionError)namespendingnoder r rtraverse_importss      r cs4eZdZdZdZfddZddZddZZS) FixImportTzj import_from< 'from' imp=any 'import' ['('] any [')'] > | import_name< 'import' imp=any > cs"tt|||d|jv|_dS)Nabsolute_import)superr! start_treefuture_featuresskip)selftreename __class__r rr$/szFixImport.start_treecCs|jrdS|d}|jtjkr2t|ds|jd}t|dr||jr0d|j|_|dSdSd}d}t |D] }||rDd}q:d}q:|rS|rQ| |ddSt d|g}|j |_ |S)Nimpr r.FTz#absolute and local imports together) r&rr import_fromhasattrrprobably_a_local_importr changedr warningrprefix)r'rresultsr, have_local have_absolutemod_namenewr r r transform3s0          zFixImport.transformcCst|drdS|ddd}t|j}t||}ttt|ds$dSdtddd d fD] }t||r7d Sq,dS) Nr-Frz __init__.pyz.pyz.pycz.soz.slz.pydT) startswithsplitrfilenamerrr)r'imp_name base_pathextr r rr0Us    z!FixImport.probably_a_local_import) __name__ __module__ __qualname__ BM_compatiblePATTERNr$r9r0 __classcell__r r r*rr!&s  "r!N)__doc__r ros.pathrrrr fixer_utilrr r r BaseFixr!r r r rs