grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a ´i¸ ã@sZdZddlmZddlmZmZmZmZddlm Z m Z m Z dd„Z Gdd „d ej ƒZd S) zÞFixer 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Útokenccsž|g}|rš| ¡}|jtjkr(|jVq|jtjkrNd dd„|jDƒ¡Vq|jtj krl|  |jd¡q|jtj kr�|  |jddd…¡qt dƒ‚qdS)zF Walks over all the names imported in a dotted_as_names node. ÚcSsg|] }|j‘qS©)Úvalue)Ú.0Zchr r ú0/usr/lib64/python3.9/lib2to3/fixes/fix_import.pyÚ óz$traverse_imports..rNéþÿÿÿzunknown node type)ÚpopÚtyper ÚNAMEr r Z dotted_namerÚchildrenZdotted_as_nameÚappendZdotted_as_namesÚextendÚAssertionError)ÚnamesÚpendingÚnoder r rÚtraverse_importss     rcs4eZdZdZdZ‡fdd„Zdd„Zdd„Z‡ZS) Ú FixImportTzj import_from< 'from' imp=any 'import' ['('] any [')'] > | import_name< 'import' imp=any > cs"tt|ƒ ||¡d|jv|_dS)NZabsolute_import)ÚsuperrÚ start_treeZfuture_featuresÚskip)ÚselfZtreeÚname©Ú __class__r rr /szFixImport.start_treecCs´|jr dS|d}|jtjkrVt|dƒs4|jd}q| |j¡r°d|j|_| ¡nZd}d}t |ƒD]}| |¡rzd}qfd}qf|r˜|r”|  |d¡dSt d|gƒ}|j |_ |SdS)NÚimpr rÚ.FTz#absolute and local imports together) r!rr Z import_fromÚhasattrrÚprobably_a_local_importr ÚchangedrÚwarningrÚprefix)r"rÚresultsr&Z have_localZ have_absoluteÚmod_nameÚnewr r rÚ transform3s,          zFixImport.transformcCst| d¡rdS| dd¡d}t|jƒ}t||ƒ}ttt|ƒdƒƒsHdSdtddd d fD]}t||ƒrXd SqXdS) Nr'Férz __init__.pyz.pyz.pycz.soz.slz.pydT)Ú startswithÚsplitrÚfilenamerrr)r"Zimp_nameÚ base_pathÚextr r rr)Us    z!FixImport.probably_a_local_import) Ú__name__Ú __module__Ú __qualname__Z BM_compatibleZPATTERNr r0r)Ú __classcell__r r r$rr&s  "rN)Ú__doc__r rZos.pathrrrrZ fixer_utilrr r rZBaseFixrr r r rÚs