
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,an_  ã                   @   s  d Z ddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ejd Zejd Zejd Zejd ZeefZejZdZdZdZd	Zd
ZdZdZi Zdd„ Zi Zdd„ Zddd„ZG dd„ dƒZG dd„ dƒZdd„ Z e!dk�rz
e ƒ Z"W n e#k
�r   e$dƒ Y nX dS )z3Find modules used by a script, using introspection.é    NÚ
LOAD_CONSTÚIMPORT_NAMEÚ
STORE_NAMEÚSTORE_GLOBALé   é   é   é   é   é   c                 C   s   t  | g ¡ |¡ d S ©N)ÚpackagePathMapÚ
setdefaultÚappend)ZpackagenameÚpath© r   ú1/opt/alt/python38/lib64/python3.8/modulefinder.pyÚAddPackagePath(   s    r   c                 C   s   |t | < d S r   )ÚreplacePackageMap)ZoldnameÚnewnamer   r   r   ÚReplacePackage3   s    r   c                 C   s  t jj ¡  t jj | |¡}|dkr8tdj| d�| d�‚|jt jjkrVddddt	ffS |jt jj
krtddddtffS |j}|j | ¡rždtj |¡ddtffS t|jt jjƒr´t}n<t|jt jjƒrÊt}n&t|jt jjƒràt}nddddtffS t |¡}tj |¡d }|||d|ffS )zDAn importlib reimplementation of imp.find_module (for our purposes).NzNo 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)r   r   ÚspecZ	file_pathZkindÚfileÚsuffixr   r   r   Ú_find_module7   s*    
r:   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚModuleNc                 C   s(   || _ || _|| _d | _i | _i | _d S r   )Ú__name__Ú__file__Ú__path__Ú__code__ÚglobalnamesÚstarimports)Úselfr   r8   r   r   r   r   Ú__init__f   s    zModule.__init__c                 C   sL   d| j f }| jd k	r&|d| jf  }| jd k	r@|d| jf  }|d }|S )Nz	Module(%rz, %rú))r<   r=   r>   )rB   Úsr   r   r   Ú__repr__s   s    

zModule.__repr__)NN)r<   Ú
__module__Ú__qualname__rC   rF   r   r   r   r   r;   d   s   
r;   c                   @   sà   e Zd Zd6dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zd7dd„Z	d8dd„Z
dd„ Zdd„ Zd9dd„Zdd„ Zdd„ Zdd„ Zd d!„ Zd:d"d#„Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd;d,d-„Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ ZdS )<ÚModuleFinderNr   c                 C   sZ   |d krt j}|| _i | _i | _|| _d| _|d k	r8|ng | _|d k	rJ|ng | _g | _d S )Nr   )	Úsysr   ÚmodulesÚ
badmodulesÚdebugÚindentÚexcludesÚreplace_pathsÚprocessed_paths)rB   r   rM   rO   rP   r   r   r   rC   ~   s    zModuleFinder.__init__c                 G   sV   || j krRt| jƒD ]}tddd� qt|dd� |D ]}tt|ƒdd� q6tƒ  d S )Nú   ú ©Úend)rM   ÚrangerN   ÚprintÚrepr)rB   ÚlevelÚstrÚargsÚiÚargr   r   r   ÚmsgŠ   s    
zModuleFinder.msgc                 G   s,   |d }|| j kr(| jd | _| j|Ž  d S ©Nr   r   ©rM   rN   r^   ©rB   r[   rY   r   r   r   Úmsgin“   s    
zModuleFinder.msginc                 G   s,   |d }|| j kr(| jd | _| j|Ž  d S r_   r`   ra   r   r   r   Úmsgout™   s    
zModuleFinder.msgoutc              	   C   sB   |   dd|¡ t |¡� }ddtf}|  d|||¡ W 5 Q R X d S )Nr   Ú
run_scriptr   r   Ú__main__)r^   r4   r5   r.   Úload_module)rB   ÚpathnameÚfpÚstuffr   r   r   rd   Ÿ   s    
zModuleFinder.run_scriptc              	   C   sT   t j |¡\}}t j |¡\}}t |¡� }|dtf}|  ||||¡ W 5 Q R X d S )Nr   )r)   r   Úsplitr6   r4   r5   r.   rf   )rB   rg   Údirr   Zextrh   ri   r   r   r   Ú	load_file¥   s
    
zModuleFinder.load_filer   c           	      C   s\   |   dd||||¡ | j||d�}|  ||¡\}}|  ||¡}|sF|S |jrX|  ||¡ d S )Nr   Úimport_hook©rY   )r^   Údetermine_parentÚfind_head_packageÚ	load_tailr>   Úensure_fromlist)	rB   r   ÚcallerÚfromlistrY   ÚparentÚqÚtailÚmr   r   r   rm   ¬   s    zModuleFinder.import_hookc                 C   s&  |   dd||¡ |r|dkr,|  dd¡ d S |j}|dkr¸|jrH|d8 }|dkrl| j| }|  dd|¡ |S | d¡|k r‚tdƒ‚d | d¡d | … ¡}| j| }|  dd|¡ |S |jrÚ| j| }|  dd|¡ |S d|k�r| 	d¡}|d |… }| j| }|  dd|¡ |S |  dd¡ d S )	Né   ro   r   zdetermine_parent -> Noner   zdetermine_parent ->Ú.zrelative importpath too deep)
rb   rc   r<   r>   rK   Úcountr    Újoinrj   Úrfind)rB   rs   rY   Zpnameru   r\   r   r   r   ro   ·   s<    





zModuleFinder.determine_parentc                 C   sâ   |   dd||¡ d|kr@| d¡}|d |… }||d d … }n|}d}|r\d|j|f }n|}|  |||¡}|rŒ|  dd||f¡ ||fS |rÄ|}d }|  |||¡}|rÄ|  dd||f¡ ||fS |  dd|¡ td	| ƒ‚d S )
Nry   rp   rz   r   r   ú%s.%szfind_head_package ->ú"raise ImportError: No module namedúNo module named )rb   Úfindr<   Úimport_modulerc   r    )rB   ru   r   r\   Úheadrw   Zqnamerv   r   r   r   rp   Ú   s.    
zModuleFinder.find_head_packagec                 C   sž   |   dd||¡ |}|rŒ| d¡}|dk r2t|ƒ}|d |… ||d d …  }}d|j|f }|  |||¡}|s|  dd|¡ td| ƒ‚q|  dd	|¡ |S )
Nry   rq   rz   r   r   r~   r   r€   zload_tail ->)rb   r�   Úlenr<   r‚   rc   r    )rB   rv   rw   rx   r\   rƒ   Zmnamer   r   r   rq   õ   s    
 zModuleFinder.load_tailc                 C   s€   |   dd|||¡ |D ]d}|dkrD|sz|  |¡}|rz|  ||d¡ qt||ƒsd|j|f }|  |||¡}|std| ƒ‚qd S )Nry   rr   Ú*r   r~   r€   )r^   Úfind_all_submodulesrr   Úhasattrr<   r‚   r    )rB   rx   rt   Ú	recursiveÚsubÚallÚsubnameZsubmodr   r   r   rr     s    

zModuleFinder.ensure_fromlistc           
   	   C   sð   |j s
d S i }g }|tjjd d … 7 }|tjjd d … 7 }|tjjd d … 7 }|j D ]’}zt |¡}W n& tk
rŒ   |  	dd|¡ Y qTY nX |D ]R}d }|D ]0}t
|ƒ}	||	 d … |krž|d |	 … } qÐqž|r’|dkr’|||< q’qT| ¡ S )Nr   zcan't list directoryrC   )r>   r   r   ÚEXTENSION_SUFFIXESÚSOURCE_SUFFIXESÚBYTECODE_SUFFIXESr)   ÚlistdirÚOSErrorr^   r„   Úkeys)
rB   rx   rK   Úsuffixesrk   Únamesr   ÚmodZsuffÚnr   r   r   r†     s.    

z ModuleFinder.find_all_submodulesc                 C   s
  |   dd|||¡ z| j| }W n tk
r4   Y nX |  dd|¡ |S || jkrb|  dd¡ d S |r€|jd kr€|  dd¡ d S z|  ||o�|j|¡\}}}W n$ tk
rÂ   |  ddd ¡ Y d S X z|  	||||¡}W 5 |ræ| ¡  X |røt
|||ƒ |  dd|¡ |S )Nr   r‚   zimport_module ->zimport_module -> None)rb   rK   ÚKeyErrorrc   rL   r>   Úfind_moduler    Úcloserf   Úsetattr)rB   ZpartnameÚfqnameru   rx   rh   rg   ri   r   r   r   r‚   .  s:    
 ÿ
zModuleFinder.import_modulec              
   C   s(  |\}}}|   dd||od|¡ |tkrF|  ||¡}|  dd|¡ |S |tkr`t| ¡ |dƒ}	n||tkrØz| ¡ }
tj	 
|
|i ¡ W n: tk
r¾ } z|  ddt|ƒ |¡ ‚ W 5 d }~X Y nX t t|
ƒdd … ¡}	nd }	|  |¡}||_|	�r| j�r|  |	¡}	|	|_|  |	|¡ |  dd|¡ |S )Nr   rf   rh   zload_module ->Úexeczraise ImportError: é   )rb   r+   Úload_packagerc   r.   ÚcompileÚreadr2   r   Ú_bootstrap_externalÚ_classify_pycr    rZ   ÚmarshalÚloadsÚ
memoryviewÚ
add_moduler=   rP   Úreplace_paths_in_coder?   Ú	scan_code)rB   rš   rh   rg   Ú	file_infor9   ÚmodeÚtyperx   ÚcoÚdataÚexcr   r   r   rf   N  s4    


zModuleFinder.load_modulec                 C   s<   || j kri | j |< |r*d| j | |j< nd| j | d< d S )Nr   ú-)rL   r<   )rB   r   rs   r   r   r   Ú_add_badmodulek  s
    

zModuleFinder._add_badmodulec                 C   sB  || j kr|  ||¡ d S z| j|||d� W n~ tk
rn } z"|  ddt|ƒ¡ |  ||¡ W 5 d }~X Y nÐ tk
r¬ } z"|  ddt|ƒ¡ |  ||¡ W 5 d }~X Y n’X |�r>|D ]„}|d | }|| j krà|  ||¡ q¸z| j|||g|d� W q¸ tk
�r: } z"|  ddt|ƒ¡ |  ||¡ W 5 d }~X Y q¸X q¸d S )Nrn   r   zImportError:zSyntaxError:rz   )rL   r¯   rm   r    r^   rZ   ÚSyntaxError)rB   r   rs   rt   rY   r^   r‰   Úfullnamer   r   r   Ú_safe_import_hooks  s,    

zModuleFinder._safe_import_hookc                 c   sô   |j }|j}|j}dd„ t |¡D ƒ}t|ƒD ]À\}\}}|tkrTd|| ffV  q.|tkr.|dkr.||d  d ||d  d   kr�tkr.n q.|||d  d  }	|||d  d  }
|	dkrØd|
|| ffV  q.d|	|
|| ffV  q.q.d S )	Nc                 S   s"   g | ]\}}}|t kr||f‘qS r   )ÚEXTENDED_ARG)Ú.0Ú_Úopr]   r   r   r   Ú
<listcomp>’  s    ÿz-ModuleFinder.scan_opcodes.<locals>.<listcomp>Ústorer   r   r   Úabsolute_importÚrelative_import)	Úco_codeÚco_namesÚ	co_constsÚdisZ_unpack_opargsÚ	enumerateÚ	STORE_OPSr   r   )rB   r«   Úcoder“   ÚconstsZopargsr\   r¶   ZopargrY   rt   r   r   r   Úscan_opcodes�  s(     ÿÿ
zModuleFinder.scan_opcodesc                 C   sŒ  |j }| j}||ƒD �]F\}}|dkr8|\}d|j|< q|dk�r|\}}d}	|d k	rpd|krbd}	dd„ |D ƒ}| j|||dd� |	�r\d }
|jr¨| j |jd	 | ¡}
|
d kr¼| j |¡}
|
d k	rö|j |
j¡ |j	 |
j	¡ |
j
d krôd|j	|< n
d|j	|< q|d
k�rT|\}}}|�r0| j||||d� n"| j||d�}| j|jd |dd� qt|ƒ‚q|jD ]"}t|t|ƒƒ�rd|  ||¡ �qdd S )Nr¸   r   r¹   r   r…   c                 S   s   g | ]}|d kr|‘qS )r…   r   )r´   Úfr   r   r   r·   ¯  s      z*ModuleFinder.scan_code.<locals>.<listcomp>rn   rz   rº   )r»   rÃ   r@   r²   r>   rK   Úgetr<   ÚupdaterA   r?   ro   ÚRuntimeErrorr½   r,   rª   r§   )rB   r«   rx   rÁ   ÚscannerZwhatr[   r   rt   Z	have_starZmmrY   ru   Úcr   r   r   r§   ¢  sH    





zModuleFinder.scan_codec                 C   sœ   |   dd||¡ t |¡}|r"|}|  |¡}||_|g|_|jt |g ¡ |_|  d|j¡\}}}z&|  	||||¡ |  
dd|¡ |W ¢S |r–| ¡  X d S )Nr   r�   rC   zload_package ->)rb   r   rÅ   r¥   r=   r>   r   r—   r˜   rf   rc   )rB   rš   rg   r   rx   rh   Zbufri   r   r   r   r�   Ó  s    

zModuleFinder.load_packagec                 C   s*   || j kr| j | S t|ƒ | j |< }|S r   )rK   r;   )rB   rš   rx   r   r   r   r¥   è  s    

zModuleFinder.add_modulec                 C   sn   |d k	r|j d | }n|}|| jkr<|  dd|¡ t|ƒ‚|d krd|tjkr^d d ddtffS | j}t||ƒS )Nrz   r   zfind_module -> Excludedr   )	r<   rO   rc   r    rJ   Úbuiltin_module_namesr$   r   r:   )rB   r   r   ru   r±   r   r   r   r—   î  s    

zModuleFinder.find_modulec                 C   s  t ƒ  t dd ƒ t dd ƒ t| j ¡ ƒ}|D ]B}| j| }|jrRt ddd� nt ddd� t d| |jpnd	ƒ q0|  ¡ \}}|rÂt ƒ  t d
ƒ |D ]*}t| j|  ¡ ƒ}t d|dd |¡ƒ q–|�rt ƒ  t ddd� t dƒ |D ]*}t| j|  ¡ ƒ}t d|dd |¡ƒ qædS )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)ÚNameZFile)ú----rÌ   ÚPrS   rT   rx   z%-25sr   zMissing modules:ú?zimported fromz, z7Submodules that appear to be missing, but could also bez#global names in the parent package:N)	rW   ÚsortedrK   r‘   r>   r=   Úany_missing_mayberL   r|   )rB   r‘   Úkeyrx   ÚmissingÚmayber   Zmodsr   r   r   Úreport   s0    
zModuleFinder.reportc                 C   s   |   ¡ \}}|| 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Ð   )rB   rÒ   rÓ   r   r   r   Úany_missing"  s    zModuleFinder.any_missingc                 C   sÔ   g }g }| j D ]¬}|| jkrq| d¡}|dk r<| |¡ q||d d… }|d|… }| j |¡}|dk	r°|| j | kr†| |¡ qº||jkr’qº|jr¤| |¡ qº| |¡ q| |¡ q| ¡  | ¡  ||fS )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.
        rz   r   r   N)	rL   rO   r}   r   rK   rÅ   r@   rA   Úsort)rB   rÒ   rÓ   r   r\   r‹   ZpkgnameZpkgr   r   r   rÐ   *  s0    	




zModuleFinder.any_missing_maybec                 C   sâ   t j |j¡ }}| jD ]*\}}| |¡r||t|ƒd …  } qDq| jr�|| jkr�||krr|  	dd||f ¡ n|  	dd|f ¡ | j 
|¡ t|jƒ}tt|ƒƒD ](}t|| t|ƒƒr¦|  || ¡||< q¦|jt|ƒ|d�S )Nr   zco_filename %r changed to %rz co_filename %r remains unchanged)r½   Úco_filename)r)   r   Únormpathr×   rP   Ú
startswithr„   rM   rQ   rc   r   Úlistr½   rV   r,   rª   r¦   ÚreplaceÚtuple)rB   r«   Znew_filenameZoriginal_filenamerÄ   ÚrrÂ   r\   r   r   r   r¦   X  s&    
ÿÿ
z"ModuleFinder.replace_paths_in_code)Nr   NN)NNr   )r   )r   )r   )N)r<   rG   rH   rC   r^   rb   rc   rd   rl   rm   ro   rp   rq   rr   r†   r‚   rf   r¯   r²   rÃ   r§   r�   r¥   r—   rÔ   rÕ   rÐ   r¦   r   r   r   r   rI   |   s2   
	

#
 
1
".rI   c               
   C   s¾  dd l } z|   tjdd … d¡\}}W n2 | jk
rX } zt|ƒ W Y ¢d S d }~X Y nX d}d}g }g }|D ]Z\}}	|dkr†|d }|dkr’d}|dkrª||	 tj¡ }|dkr¶d}|dkrn| |	¡ qn|sÔd	}
n|d }
tj	d d … }tj	 
|
¡|d< || }|dk�r.td
ƒ |D ]}tdt|ƒƒ �qt|||ƒ}|dd … D ]`}|dk�r\d}�qF|�rš|dd … dk�rŽ| |d d… d dg¡ n
| |¡ n
| |¡ �qF| |
¡ | ¡  |S )Nr   r   zdmp:qx:z-dz-mz-pz-qz-xzhello.pyzpath:rR   éþÿÿÿz.*r…   )ÚgetoptrJ   ÚargvÚerrorrW   rj   r)   Úpathsepr   r   r*   rX   rI   rm   rl   rd   rÔ   )rß   Zoptsr[   r^   rM   ZdomodsZaddpathZexcludeÚoÚaZscriptr   ÚitemÚmfr]   r   r   r   Útestp  sX    


rç   re   z
[interrupted])N)%Ú__doc__r¾   Zimportlib._bootstrap_externalr   Úimportlib.machineryr¢   r)   r4   rJ   ÚtypesÚwarningsZopmapr   r   r   r   rÀ   r³   r3   r.   r2   r0   r+   r$   r&   r   r   r   r   r:   r;   rI   rç   r<   ræ   ÚKeyboardInterruptrW   r   r   r   r   Ú<module>   sL   




-   w;

