f ndZddlmZddlmZmZmZmZddlm Z m Z m Z dZ Gddej 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) FromImportsymstokenc#K|g}|r|}|jtjkr |jVn|jt jkr'dd|jDVn~|jt j kr!| |jdnH|jt j kr$| |jdddntd|dSdS)zF Walks over all the names imported in a dotted_as_names node. cg|] }|j S)value).0chs ?/opt/alt/python311/lib64/python3.11/lib2to3/fixes/fix_import.py z$traverse_imports..s<<<28<<<rNzunknown node type)poptyper NAMErr dotted_namerchildrendotted_as_nameappenddotted_as_namesextendAssertionError)namespendingnodes rtraverse_importsr$s gG  6{{}} 9 " "*     Y$* * *''< | import_name< 'import' imp=any > cvtt|||d|jv|_dS)Nabsolute_import)superr& start_treefuture_featuresskip)selftreename __class__s rr*zFixImport.start_tree/s6 i))$555%)== rc|jrdS|d}|jtjkrnt |ds|jd}t |d||jr%d|jz|_|dSdSd}d}t|D]}||rd}d}|r|r| |ddStd|g}|j |_ |S)Nimprr.FTz#absolute and local imports together) r,rr import_fromhasattrrprobably_a_local_importrchangedr$warningr prefix)r-r#resultsr2 have_local have_absolutemod_namenews r transformzFixImport.transform3s0 9  Fen 9( ( ( c7++ &l1oc7++ &++CI66 #)O    J!M,S11 ) )//99)!%JJ$(MM NLL'LMMMS3%((CCJJrcV|drdS|ddd}t|j}t ||}t t t|dsdSdt ddd d fD]}t ||zrd SdS) Nr3Frz __init__.pyz.pyz.pycz.soz.slz.pydT) startswithsplitrfilenamerrr)r-imp_name base_pathexts rr6z!FixImport.probably_a_local_importUs   s # # 5>>#q))!,DM** H-- d79--}==>> 53uf=  Ci#o&& tt ur) __name__ __module__ __qualname__ BM_compatiblePATTERNr*r?r6 __classcell__)r0s@rr&r&&scMG >>>>>   Drr&N)__doc__r ros.pathrrrr fixer_utilr r r r$BaseFixr&rrrrRs  ............0000000000666&===== "=====r