JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbrў fZc @sdZddlZddlZddlZddlZddlZddlZddlZddl Z e ej j dgZ e ej j dgZe ej j dgZe ej j dgZeegZe ejgZiZddZiZd d ZGd d d ZGd ddZddZedkry eZWnek r}edYnXndS(u3Find modules used by a script, using introspection.iNu LOAD_CONSTu IMPORT_NAMEu STORE_NAMEu STORE_GLOBALcCstj|gj|dS(N(upackagePathMapu setdefaultuappend(u packagenameupath((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyuAddPackagePathsuAddPackagePathcCs|t| Noneiudetermine_parent ->u.urelative importpath too deep( umsginumsgoutuNoneu__name__u__path__umodulesucountu ImportErrorujoinuspliturfind(uselfucallerulevelupnameuparentui((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyudetermine_parents<      #     uModuleFinder.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||fSn|jdd|td |dS( Niufind_head_packageu.iuu%s.%sufind_head_package ->u"raise ImportError: No module nameduNo module named (umsginufindu__name__u import_moduleumsgoutuNoneu ImportError(uselfuparentunameuiuheadutailuqnameuq((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyufind_head_packages.   uModuleFinder.find_head_packagecCs|jdd|||}x|r|jd}|dkrOt|}n|d|||dd}}d|j|f}|j|||}|s|jdd|td|qqW|jdd ||S( Niu load_tailu.iiu%s.%su"raise ImportError: No module nameduNo module named u load_tail ->(umsginufindulenu__name__u import_moduleumsgoutu ImportError(uselfuqutailumuiuheadumname((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu load_tails  %uModuleFinder.load_tailcCs|jdd|||x|D]}|dkri|s|j|}|rf|j||dqfqq t||s d|j|f}|j|||}|std|qq q WdS(Niuensure_fromlistu*iu%s.%suNo module named (umsgufind_all_submodulesuensure_fromlistuhasattru__name__u import_moduleu ImportError(uselfumufromlistu recursiveusubuallusubnameusubmod((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyuensure_fromlists  uModuleFinder.ensure_fromlistc CsE|js dSi}g}|tjjdd7}|tjjdd7}|tjjdd7}x|jD]}ytj|}Wn+tjk r|j dd|wqYnXx||D]t}d}xF|D]>}t |} || d|kr|d| }PqqW|r|dkr|||YnX|jdd||S||jkry|jdddS|r|jdkr|jdddSy+|j||o|j|\}}}Wn)tk r|jddddSYnXz|j ||||}Wd|r+|j nX|rEt |||n|jdd||S(Niu import_moduleuimport_module ->uimport_module -> None( umsginumodulesuKeyErrorumsgoutu badmodulesuNoneu__path__u find_moduleu ImportErroru load_moduleucloseusetattr(uselfupartnameufqnameuparentumufpupathnameustuff((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu import_modules6  "  uModuleFinder.import_modulec Csu|\}}}|jdd||o'd||tjkrf|j||}|jdd||S|tjkrt|jd|d} nu|tjkr|jdtj kr|jdd|t d |n|jd t j |} nd} |j|}||_| r^|jrB|j| } n| |_|j| |n|jdd||S( Niu load_moduleufpuload_module ->u uexeciu#raise ImportError: Bad magic numberuBad magic number in %si(umsginuimpu PKG_DIRECTORYu load_packageumsgoutu PY_SOURCEucompileureadu PY_COMPILEDu get_magicu ImportErrorumarshaluloaduNoneu add_moduleu__file__u replace_pathsureplace_paths_in_codeu__code__u scan_code( uselfufqnameufpupathnameu file_infousuffixumodeutypeumuco((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu load_modules0    uModuleFinder.load_modulecCsQ||jkri|j|ys u*ModuleFinder.scan_code..ulevelu.urelative_import(uco_codeuscan_opcodes_25u globalnamesuNoneu_safe_import_hooku__path__umodulesugetu__name__uupdateu starimportsu__code__udetermine_parentu RuntimeErroru co_constsu isinstanceutypeu scan_code(uselfucoumucodeuscanneruwhatuargsunameufromlistu have_starummuleveluparentuc((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu scan_codelsH              uModuleFinder.scan_codec Cs|jdd||tj|}|r4|}n|j|}||_|g|_|jtj|g|_|jd|j\}}}z1|j|||||j dd||SWd|r|j nXdS(Niu load_packageu__init__uload_package ->( umsginureplacePackageMapugetu add_moduleu__file__u__path__upackagePathMapu find_moduleu load_moduleumsgoutuclose(uselfufqnameupathnameunewnameumufpubufustuff((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu load_packages   uModuleFinder.load_packagecCs5||jkr|j|St||j|<}|S(N(umodulesuModule(uselfufqnameum((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu add_modules uModuleFinder.add_modulecCs|dk r |jd|}n|}||jkrW|jdd|t|n|dkr|tjkrddddtjffS|j }ntj ||S(Nu.iufind_module -> Excludedu( uNoneu__name__uexcludesumsgoutu ImportErrorusysubuiltin_module_namesuimpu C_BUILTINupathu find_module(uselfunameupathuparentufullname((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu find_modules   uModuleFinder.find_modulecCsttddtddt|jj}xa|D]Y}|j|}|jrntdddntdddtd ||jpd q?W|j\}}|rttd xF|D];}t|j|j}td |d dj|qWn|r~ttdddtdxF|D];}t|j|j}td |d dj|q<WndS(uPrint a report to stdout, listing the found modules with their paths, as well as modules that are missing, or seem to be missing. u %-25s %suNameuFileu----uPuendu umu%-25suuMissing modules:u?u imported fromu, u7Submodules that appear to be missing, but could also beu#global names in the parent package:N(uNameuFile(u----u----( uprintusortedumodulesukeysu__path__u__file__uany_missing_maybeu badmodulesujoin(uselfukeysukeyumumissingumaybeunameumods((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyureports0     #  uModuleFinder.reportcCs|j\}}||S(uReturn 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. (uany_missing_maybe(uselfumissingumaybe((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu any_missingsuModuleFinder.any_missingcCs.g}g}x|jD]}||jkr1qn|jd}|dkr_|j|qn||dd}|d|}|jj|}|dk r||j|kr|j|q ||jkrq |jr|j|q |j|q|j|qW|j |j ||fS(uReturn 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. u.iiN( u badmodulesuexcludesurfinduappendumodulesugetuNoneu globalnamesu starimportsusort(uselfumissingumaybeunameuiusubnameupkgnameupkg((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyuany_missing_maybes0       uModuleFinder.any_missing_maybecCstjj|j}}xD|jD]9\}}|j|r#||t|d}Pq#q#W|jr||jkr||kr|j dd||fn|j dd|f|jj |nt |j }xMt t|D]9}t||t|r|j||||s6            ;