PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  lY-Z@s}dZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z e j !e j de ddlZWdQRXejdZejdZejdZejdZeefZejZiZdd ZiZd d ZGd d d ZGdddZddZedkryy eZWnek rxe dYnXdS)z3Find modules used by a script, using introspection.Nignore LOAD_CONST IMPORT_NAME STORE_NAME STORE_GLOBALcCstj|gj|dS)N)packagePathMap setdefaultappend)Z packagenamepathr +/opt/python35/lib/python3.5/modulefinder.pyAddPackagePath sr cCs|t|s zModule.__repr__)r __module__ __qualname__rrr r r r r/s  rc@sceZdZddggddZddZddZd d Zd d Zd dZddd6ddZ d7ddZ ddZ ddZ dddZ ddZddZddZd d!Zd8d"d#Zejd$d%Zd&d'Zd(d)Zd*d+Zdd,d-Zd.d/Zd0d1Zd2d3Zd4d5ZdS)9 ModuleFinderNrcCsa|dkrtj}||_i|_i|_||_d|_||_||_g|_dS)Nr) sysr modules badmodulesdebugindentexcludes replace_pathsprocessed_paths)rr r%r'r(r r r rIs         zModuleFinder.__init__cGs{||jkrwx't|jD]}tdddqWt|ddx$|D]}tt|ddqPWtdS)Nz end )r%ranger&printrepr)rlevelstrargsiargr r r msgUs zModuleFinder.msgcGs:|d}||jkr6|jd|_|j|dS)Nr)r%r&r4)rr1r/r r r msgin^s zModuleFinder.msgincGs:|d}||jkr6|jd|_|j|dS)Nrr5)r%r&r4)rr1r/r r r msgoutds zModuleFinder.msgoutc CsU|jdd|t|/}ddtjf}|jd|||WdQRXdS)N run_scriptr__main__)r4openimp PY_SOURCE load_module)rpathnamefpstuffr r r r9jszModuleFinder.run_scriptc Csrtjj|\}}tjj|\}}t|/}|dtjf}|j||||WdQRXdS)Nr;)osr splitsplitextr=r>r?r@)rrAdirrextrBrCr r r load_fileps zModuleFinder.load_filer5c Cs|jdd|||||j|d|}|j||\}}|j||}|se|S|jr~|j||dS)N import_hookr/)r4determine_parentfind_head_package load_tailrensure_fromlist) rrcallerfromlistr/parentqtailmr r r rKws zModuleFinder.import_hookcCs|jdd||| s)|dkr=|jdddS|j}|dkr|jre|d8}|dkr|j|}||kst|jdd||S|jd|krtddj|j dd| }|j|}|jdd||S|jrN|j|}||ks7t|jdd||Sd|kr|j d}|d|}|j|}|j|kst|jdd||S|jdddS) NrLrzdetermine_parent -> Noner5zdetermine_parent ->.zrelative importpath too deep) r6r7rrr#AssertionErrorcount ImportErrorjoinrErfind)rrPr/ZpnamerRr2r r r rLsB       #     zModuleFinder.determine_parentcCs;|jdd||d|krX|jd}|d|}||dd}n |}d}|rd|j|f}n|}|j|||}|r|jdd||f||fS|r|}d}|j|||}|r|jdd||f||fS|jdd|td |dS) NrVrMrWr5r:z%s.%szfind_head_package ->z"raise ImportError: No module namedzNo module named )r6findr import_moduler7rZ)rrRrr2headrTZqnamerSr r r rMs.   zModuleFinder.find_head_packagecCs|jdd|||}x|r|jd}|dkrLt|}|d|||dd}}d|j|f}|j|||}|s|jdd|td|qW|jdd ||S) NrVrNrWrr5z%s.%sz"raise ImportError: No module namedzNo module named z load_tail ->)r6r]lenrr^r7rZ)rrSrTrUr2r_Zmnamer r r rNs  %zModuleFinder.load_tailcCs|jdd|||x|D]}|dkrc|s|j|}|r|j||dq t||s d|j|f}|j|||}|s td|q WdS)NrVrO*r5z%s.%szNo module named )r4find_all_submodulesrOhasattrrr^rZ)rrUrQZ recursivesuballsubnameZsubmodr r r rOs  zModuleFinder.ensure_fromlistc Cs<|js dSi}g}|tjjdd7}|tjjdd7}|tjjdd7}x|jD]}ytj|}Wn(tk r|j dd|wqYnXxv|D]n}d}xC|D];}t |} || d|kr|d| }PqW|r|dkr|||YnX|jdd||S||jkry|jdddS|r|jdkr|jdddSy+|j||o|j|\}}}Wn)tk r|jddddSYnXz|j||||}Wd|r(|j X|r?t ||||jdd||S)NrJr^zimport_module ->zimport_module -> None) r6r#KeyErrorr7r$r find_modulerZr@closesetattr)rZpartnamefqnamerRrUrBrArCr r r r^s6  "   zModuleFinder.import_modulec Cs|\}}}|jdd||o'd||tjkrf|j||}|jdd||S|tjkrt|jd|d} n|tjkryt j j |j} WnEt k r} z%|jddt | |WYdd} ~ XnXtj| } nd} |j|}||_| rn|jrU|j| } | |_|j| ||jdd||S)Nr8r@rBzload_module -> execzraise ImportError: )r6r>Z PKG_DIRECTORY load_packager7r?compilereadZ PY_COMPILEDrg_bootstrap_external_validate_bytecode_headerrZr0marshalloads add_modulerr(replace_paths_in_coder scan_code) rrwrBrA file_infosuffixmodetyperUcoZ marshal_dataexcr r r r@s2   zModuleFinder.load_modulecCsN||jkri|j|<|r9d|j||jYs z0ModuleFinder.scan_opcodes_25..storer8r5rabsolute_importrelative_import) co_codeco_names co_constsdisZ_unpack_opargs enumerate STORE_OPSrr) rrunpackcoderpconstsZopargsr2rZopargr/rQr r r scan_opcodes_25Ss     4 zModuleFinder.scan_opcodes_25cCs'|j}|j}x||D]\}}|dkrP|\}d|j|.r/rWr)rrrrrr#getrupdaterrrL RuntimeErrorr isinstancerr)rrrUrscannerZwhatr1rrQZ have_starZmmr/rRcr r r risH            zModuleFinder.scan_codec Cs|jdd||tj|}|r1|}|j|}||_|g|_|jtj|g|_|jd|j\}}}z1|j|||||j dd||SWd|r|j XdS)Nr8rzrzload_package ->) r6rrrrrrrtr@r7ru)rrwrArrUrBbufrCr r r rzs  zModuleFinder.load_packagecCs5||jkr|j|St||j|<}|S)N)r#r)rrwrUr r r rs zModuleFinder.add_modulecCs|dk r |jd|}n|}||jkrT|jdd|t||dkr|tjkrddddtjffS|j}tj ||S)NrWrJzfind_module -> Excludedr:) rr'r7rZr"builtin_module_namesr>Z C_BUILTINr rt)rrr rRrr r r rts    zModuleFinder.find_modulecCs|ttddtddt|jj}xa|D]Y}|j|}|jrntdddntdddtd ||jpd q?W|j\}}|r ttd xC|D];}t|j|j}td |d dj|qW|rxttdddtdxC|D];}t|j|j}td |d dj|q9WdS)zPrint 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 %sNameFile----Pr*r+rUz%-25sr:zMissing modules:?z imported fromz, z7Submodules that appear to be missing, but could also bez#global names in the parent package:N)rr)rr) r-sortedr#rnrrany_missing_mayber$r[)rrnkeyrUmissingmayberZmodsr r r reports0        zModuleFinder.reportcCs|j\}}||S)zReturn 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)rrrr r r any_missingszModuleFinder.any_missingcCs(g}g}x|jD]}||jkr.q|jd}|dkrY|j|q||dd}|d|}|jj|}|dk r||j|kr|j|q||jkrq|jr|j|q|j|q|j|qW|j|j||fS)aReturn 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. rWrr5N) r$r'r\r r#rrrsort)rrrrr2rfZpkgnameZpkgr r r rs0       zModuleFinder.any_missing_maybecCstjj|j}}xA|jD]6\}}|j|r#||t|d}Pq#W|jr||jkr||kr|j dd||fn|j dd|f|jj |t |j }xJt t|D]6}t||t|r|j||||Zopmaprrrrrrrr rrrr!rrrKeyboardInterruptr-r r r r s>                   ;