grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026o ®û|jQ_ã@s dZddlZddlZddlZddlZddlZddlZddlZej dZ ej dZ ej dZ ej dZ e e fZejZdZdZdZd Zd Zd Zd ZiZd d„ZiZdd„Zddd„ZGdd„dƒZGdd„dƒZdd„ZedkrƒzeƒZ WdSe!y‚e"dƒYdSwdS)z3Find modules used by a script, using introspection.éNÚ LOAD_CONSTÚ IMPORT_NAMEÚ STORE_NAMEÚ STORE_GLOBALéééééécCst |g¡ |¡dS©N)ÚpackagePathMapÚ setdefaultÚappend)Z packagenameÚpath©rú3/opt/alt/python310/lib64/python3.10/modulefinder.pyÚAddPackagePath&srcCs |t|<dSr )ÚreplacePackageMap)ZoldnameÚnewnamerrrÚReplacePackage1s rcCstjj ¡tjj ||¡}|durtdj|d�|d�‚|jtjjur+ddddt ffS|jtjj ur:ddddt ffS|j }|j  |¡rOdtj |¡ddtffSt|jtjjƒrZt}nt|jtjjƒret}nt|jtjjƒrpt}nddddtffSt |¡}tj |¡d}|||d|ffS)zDAn importlib reimplementation of imp.find_module (for our purposes).NzNo module named {name!r})ÚnameÚéÿÿÿÿÚrb)Ú importlibÚ machineryÚ PathFinderÚinvalidate_cachesÚ find_specÚ ImportErrorÚformatÚloaderÚBuiltinImporterÚ _C_BUILTINÚFrozenImporterÚ _PY_FROZENÚoriginÚ is_packageÚosrÚdirnameÚ_PKG_DIRECTORYÚ isinstanceÚSourceFileLoaderÚ _PY_SOURCEÚExtensionFileLoaderÚ _C_EXTENSIONÚSourcelessFileLoaderÚ _PY_COMPILEDÚ _SEARCH_ERRORÚioÚ open_codeÚsplitext)rrÚspecZ file_pathÚkindÚfileÚsuffixrrrÚ _find_module5s*   r;c@seZdZddd„Zdd„ZdS)ÚModuleNcCs(||_||_||_d|_i|_i|_dSr )Ú__name__Ú__file__Ú__path__Ú__code__Ú globalnamesÚ starimports)Úselfrr9rrrrÚ__init__ds  zModule.__init__cCsLd|jf}|jdur|d|jf}|jdur |d|jf}|d}|S)Nz Module(%rz, %rú))r=r>r?)rCÚsrrrÚ__repr__qs   zModule.__repr__)NN)r=Ú __module__Ú __qualname__rDrGrrrrr<bs  r<c@sàeZdZd6dd„Zdd„Zdd„Zd d „Zd d „Zd d„Zd7dd„Z d8dd„Z dd„Z dd„Z d9dd„Z dd„Zdd„Zdd„Zd d!„Zd8d"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd:d,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„ZdS);Ú ModuleFinderNrcCsZ|durtj}||_i|_i|_||_d|_|dur|ng|_|dur%|ng|_g|_dS)Nr) ÚsysrÚmodulesÚ badmodulesÚdebugÚindentÚexcludesÚ replace_pathsÚprocessed_paths)rCrrNrPrQrrrrD|s zModuleFinder.__init__cGsZ||jkr+t|jƒD]}tddd�q t|dd�|D] }tt|ƒdd�qtƒdSdS)Nú ú ©Úend)rNÚrangerOÚprintÚrepr)rCÚlevelÚstrÚargsÚiÚargrrrÚmsgˆs   úzModuleFinder.msgcGs0|d}||jkr|jd|_|j|ŽdSdS©Nrr©rNrOr_©rCr\rZrrrÚmsgin‘ó   þzModuleFinder.msgincGs0|d}||jkr|jd|_|j|ŽdSdSr`rarbrrrÚmsgout—rdzModuleFinder.msgoutcCsX| dd|¡t |¡�}ddtf}| d|||¡WdƒdS1s%wYdS)NrÚ run_scriptrrÚ__main__)r_r4r5r.Ú load_module)rCÚpathnameÚfpÚstuffrrrrf�s   "þzModuleFinder.run_scriptcCsjtj |¡\}}tj |¡\}}t |¡�}|dtf}| ||||¡WdƒdS1s.wYdS)Nr)r)rÚsplitr6r4r5r.rh)rCriÚdirrZextrjrkrrrÚ load_file£s   "þzModuleFinder.load_filerc Cs\| dd||||¡|j||d�}| ||¡\}}| ||¡}|s#|S|jr,| ||¡dS)NrÚ import_hook©rZ)r_Údetermine_parentÚfind_head_packageÚ load_tailr?Úensure_fromlist) rCrÚcallerÚfromlistrZÚparentÚqÚtailÚmrrrroªs  zModuleFinder.import_hookcCsJ| dd||¡|r|dkr| dd¡dS|j}|dkrb|jr$|d8}|dkr<|j|}||us3J‚| dd|¡|S| d¡|krGtdƒ‚d | d¡d| …¡}|j|}| dd|¡|S|jry|j|}||uspJ‚| dd|¡|Sd|vr�|  d¡}|d|…}|j|}|j|ks”J‚| dd|¡|S| dd¡dS) Nérqrzdetermine_parent -> Nonerzdetermine_parent ->Ú.zrelative importpath too deep) rcrer=r?rLÚcountr ÚjoinrlÚrfind)rCrurZZpnamerwr]rrrrqµsB           zModuleFinder.determine_parentcCsÞ| dd||¡d|vr | d¡}|d|…}||dd…}n|}d}|r.d|j|f}n|}| |||¡}|rF| dd||f¡||fS|rb|}d}| |||¡}|rb| dd||f¡||fS| dd|¡td |ƒ‚) Nr{rrr|rrú%s.%szfind_head_package ->ú"raise ImportError: No module namedúNo module named )rcÚfindr=Ú import_modulerer )rCrwrr]ÚheadryZqnamerxrrrrrØs.   zModuleFinder.find_head_packagecCs | dd||¡|}|rG| d¡}|dkrt|ƒ}|d|…||dd…}}d|j|f}| |||¡}|sE| dd|¡td|ƒ‚|s | dd |¡|S) Nr{rsr|rrr€r�r‚z load_tail ->)rcrƒÚlenr=r„rer )rCrxryrzr]r…Zmnamerrrrsós  ø zModuleFinder.load_tailcCs€| dd|||¡|D]2}|dkr"|s!| |¡}|r!| ||d¡q t||ƒs=d|j|f}| |||¡}|s=td|ƒ‚q dS)Nr{rtÚ*rr€r‚)r_Úfind_all_submodulesrtÚhasattrr=r„r )rCrzrvÚ recursiveÚsubÚallÚsubnameZsubmodrrrrts €  €özModuleFinder.ensure_fromlistc Csê|jsdSi}g}|tjjdd…7}|tjjdd…7}|tjjdd…7}|jD]F}zt |¡}WntyC|  dd|¡Yq*w|D])}d}|D]}t |ƒ} || d…|krd|d| …}nqL|ro|dkro|||<qFq*|  ¡S)Nrzcan't list directoryrD) r?rrÚEXTENSION_SUFFIXESÚSOURCE_SUFFIXESÚBYTECODE_SUFFIXESr)ÚlistdirÚOSErrorr_r†Úkeys) rCrzrLÚsuffixesrmÚnamesrÚmodZsuffÚnrrrrˆs6  þþ €ø z ModuleFinder.find_all_submodulescCs| dd|||¡z|j|}Wn tyYn w| dd|¡|S||jvr0| dd¡dS|r?|jdur?| dd¡dSz| ||oG|j|¡\}}}Wnty_| ddd¡YdSwz| ||||¡}W|rp|  ¡n|rx|  ¡ww|r�t |||ƒ| dd|¡|S)Nrr„zimport_module ->zimport_module -> None) rcrLÚKeyErrorrerMr?Ú find_moduler rhÚcloseÚsetattr)rCZpartnameÚfqnamerwrzrjrirkrrrr„,sD ÿ    ÿ þ€ÿ ÿ zModuleFinder.import_modulec Cs|\}}}| dd||o d|¡|tkr#| ||¡}| dd|¡|S|tkr0t| ¡|dƒ} n9|tkrgz| ¡} tj   | |i¡Wnt yZ} z | ddt | ƒ|¡‚d} ~ wwt  t| ƒdd…¡} nd} | |¡}||_| r„|jr{| | ¡} | |_| | |¡| dd|¡|S)Nrrhrjzload_module ->Úexeczraise ImportError: é)rcr+Ú load_packagerer.ÚcompileÚreadr2rÚ_bootstrap_externalÚ _classify_pycr r[ÚmarshalÚloadsÚ memoryviewÚ add_moduler>rQÚreplace_paths_in_coder@Ú scan_code) rCrœrjriÚ file_infor:ÚmodeÚtyperzÚcoÚdataÚexcrrrrhLs8  €þ   zModuleFinder.load_modulecCs>||jvr i|j|<|rd|j||j<dSd|j|d<dS)Nrú-)rMr=)rCrrurrrÚ_add_badmoduleis  zModuleFinder._add_badmodulec CsJ||jvr | ||¡dSz |j|||d�WnCty9}z| ddt|ƒ¡| ||¡WYd}~dSd}~wtyZ}z| ddt|ƒ¡| ||¡WYd}~dSd}~ww|r¡|D]C}|d|}||jvrs| ||¡q_z |j|||g|d�Wq_ty }z| ddt|ƒ¡| ||¡WYd}~q_d}~wwdSdS)Nrprz ImportError:z SyntaxError:r|)rMr±ror r_r[Ú SyntaxError)rCrrurvrZr_r‹ÚfullnamerrrÚ_safe_import_hookqs:  €€þ   €þøzModuleFinder._safe_import_hookc csö�|j}|j}|j}dd„t |¡Dƒ}t|ƒD]`\}\}}|tvr+d||ffVq|tkrx|dkrx||dd||ddkrItkrxnq|||dd} |||dd} | dkrmd| ||ffVn d| | ||ffVqqdS) NcSs"g|] \}}}|tkr||f‘qSr)Ú EXTENDED_ARG)Ú.0Ú_Úopr^rrrÚ �sÿz-ModuleFinder.scan_opcodes..ÚstorerrrÚabsolute_importÚrelative_import) Úco_codeÚco_namesÚ co_constsÚdisZ_unpack_opargsÚ enumerateÚ STORE_OPSrr) rCr­Úcoder•ÚconstsZopargsr]r¸ZopargrZrvrrrÚ scan_opcodes‹s&€0€ôzModuleFinder.scan_opcodescCs||j}|j}||ƒD]ž\}}|dkr|\}d|j|<q |dkr~|\}}d} |dur6d|vr/d} dd„|Dƒ}|j|||dd�| r}d} |jrQ|j |jd |¡} | dur[|j |¡} | durx|j | j¡|j  | j ¡| j durwd|j |<q d|j |<q |d kr¥|\} }}|r“|j|||| d�q |j || d�} |j| jd|dd�q t |ƒ‚|j D]} t| t|ƒƒr»| | |¡q¬dS) Nrºrr»rr‡cSsg|]}|dkr|‘qS)r‡r)r¶Úfrrrr¹­sz*ModuleFinder.scan_code..rpr|r¼)r½rÅrAr´r?rLÚgetr=ÚupdaterBr@rqÚ RuntimeErrorr¿r,r¬r©)rCr­rzrÃÚscannerZwhatr\rrvZ have_starZmmrZrwÚcrrrr© sP    € €   €þzModuleFinder.scan_codecCs¦| dd||¡t |¡}|r|}| |¡}||_|g|_|jt |g¡|_| d|j¡\}}}z| ||||¡|  dd|¡|W|rJ|  ¡SS|rR|  ¡ww)NrrŸrDzload_package ->) rcrrÇr§r>r?r r™rhrerš)rCrœrirrzrjZbufrkrrrrŸÑs$   ÿ ÿzModuleFinder.load_packagecCs*||jvr |j|St|ƒ|j|<}|Sr )rLr<)rCrœrzrrrr§æs  zModuleFinder.add_modulecCsn|dur |jd|}n|}||jvr| dd|¡t|ƒ‚|dur2|tjvr/ddddtffS|j}t||ƒS)Nr|rzfind_module -> Excludedr) r=rPrer rKÚbuiltin_module_namesr$rr;)rCrrrwr³rrrr™ìs   zModuleFinder.find_modulecCstƒtddƒtddƒt|j ¡ƒ}|D]!}|j|}|jr)tddd�ntddd�td||jp7d ƒq| ¡\}}|ratƒtd ƒ|D]}t|j| ¡ƒ}td |d d  |¡ƒqK|rˆtƒtddd�tdƒ|D]}t|j| ¡ƒ}td |d d  |¡ƒqrdSdS)z’Print a report to stdout, listing the found modules with their paths, as well as modules that are missing, or seem to be missing. z %-25s %s)ÚNameZFile)ú----rÎÚPrTrUrzz%-25srzMissing modules:ú?z imported fromz, z7Submodules that appear to be missing, but could also bez#global names in the parent package:N) rXÚsortedrLr“r?r>Úany_missing_mayberMr~)rCr“ÚkeyrzÚmissingÚmayberZmodsrrrÚreportþs4      úzModuleFinder.reportcCs| ¡\}}||S)z½Return a list of modules that appear to be missing. Use any_missing_maybe() if you want to know which modules are certain to be missing, and which *may* be missing. )rÒ)rCrÔrÕrrrÚ any_missing s zModuleFinder.any_missingcCsÔg}g}|jD]V}||jvrq| d¡}|dkr| |¡q||dd…}|d|…}|j |¡}|durX||j|vrC| |¡q||jvrIq|jrR| |¡q| |¡q| |¡q| ¡| ¡||fS)a®Return two lists, one with modules that are certainly missing and one with modules that *may* be missing. The latter names could either be submodules *or* just global names in the package. The reason it can't always be determined is that it's impossible to tell which names are imported when "from module import *" is done with an extension module, short of actually importing it. r|rrN) rMrPrrrLrÇrArBÚsort)rCrÔrÕrr]r�ZpkgnameZpkgrrrrÒ(s0            zModuleFinder.any_missing_maybecCsâtj |j¡}}|jD]\}}| |¡r!||t|ƒd…}nq |jrH||jvrH||kr9|  dd||f¡n |  dd|f¡|j  |¡t |j ƒ}t t|ƒƒD]}t||t|ƒƒrg| ||¡||<qS|jt|ƒ|d�S)Nrzco_filename %r changed to %rz co_filename %r remains unchanged)r¿Ú co_filename)r)rÚnormpathrÙrQÚ startswithr†rNrRrerÚlistr¿rWr,r¬r¨ÚreplaceÚtuple)rCr­Z new_filenameZoriginal_filenamerÆÚrrÄr]rrrr¨Vs* þÿÿ  €z"ModuleFinder.replace_paths_in_code)NrNN)NNr)r)rr )r=rHrIrDr_rcrerfrnrorqrrrsrtrˆr„rhr±r´rÅr©rŸr§r™rÖr×rÒr¨rrrrrJzs4     #   1 " .rJc Cs®ddl}z| tjdd…d¡\}}Wn|jy+}z t|ƒWYd}~dSd}~wwd}d}g}g}|D]-\}} |dkrB|d}|dkrHd}|dkrT||  tj¡}|dkrZd}|dkrc| | ¡q6|sid } n|d} tj dd…} tj   | ¡| d<|| } |dkr”td ƒ| D] } td t | ƒƒqŠt | ||ƒ} |dd…D]+}|dkr©d}q |rÆ|d d…d krÀ|   |dd …ddg¡q |   |¡q |  |¡q |  | ¡|  ¡| S)Nrrzdmp:qx:z-dz-mz-pz-qz-xzhello.pyzpath:rSéþÿÿÿz.*r‡)ÚgetoptrKÚargvÚerrorrXrlr)Úpathseprrr*rYrJrornrfrÖ)ráZoptsr\r_rNZdomodsZaddpathZexcludeÚoÚaZscriptrÚitemÚmfr^rrrÚtestns^€þ  €    rérgz [interrupted]r )#Ú__doc__rÀZimportlib._bootstrap_externalrÚimportlib.machineryr¤r)r4rKZopmaprrrrrÂrµr3r.r2r0r+r$r&r rrrr;r<rJrér=rèÚKeyboardInterruptrXrrrrÚsN     -w;  ÿý