B
    =)H[à`  ã               @   s²  d Z ddlmZ ddlmZ ddlmZ ddlm	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ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z( ddl)m*Z* ddlm+Z+ dd„ Z,G dd„ deƒZ-G dd„ deƒZG dd„ deƒZ.dd„ Z/dd„ Z0dd„ Z1dd „ Z2d!d"„ Z3d#d$„ Z4d%d&„ Z5d'd(„ Z6d0d*d+„Z7d,d-„ Z8d.d/„ Z9dS )1zUsetuptools.command.egg_info

Create a distribution's .egg-info directory and contentsé    )ÚFileList)ÚDistutilsInternalError)Úconvert_path)ÚlogN)Úsix)Úmap)ÚCommand)Úsdist)Úwalk_revctrl)Úedit_config)Ú	bdist_egg)Úparse_requirementsÚ	safe_nameÚparse_versionÚsafe_versionÚyield_linesÚ
EntryPointÚiter_entry_pointsÚto_filename)Úglob)Ú	packagingc             C   sî  d}|   tjj¡}t tj¡}d|f }�x¤t|ƒD �]–\}}|t|ƒd k}|dkrv|rd|d7 }q4|d||f 7 }q4d}t|ƒ}	�x:||	k �r¾|| }
|
dkr°||d 7 }�n|
d	krÂ||7 }nò|
d
k�r¦|d }||	k rð|| dkrð|d }||	k �r|| dk�r|d }x&||	k �r6|| dk�r6|d }�qW ||	k�rR|t |
¡7 }nR||d |… }d}|d dk�r„d}|dd… }|t |¡7 }|d|f 7 }|}n|t |
¡7 }|d7 }q†W |s4||7 }q4W |d7 }tj|tj	tj
B d�S )zö
    Translate a file path glob like '*.txt' in to a regular expression.
    This differs from fnmatch.translate which allows wildcards to match
    directory separators. It also knows about '**/' which matches any number of
    directories.
    Ú z[^%s]é   z**z.*z
(?:%s+%s)*r   Ú*ú?ú[ú!ú]ú^Nz[%s]z\Z)Úflags)ÚsplitÚosÚpathÚsepÚreÚescapeÚ	enumerateÚlenÚcompileÚ	MULTILINEÚDOTALL)r   ÚpatÚchunksr#   Z
valid_charÚcÚchunkÚ
last_chunkÚiZ	chunk_lenÚcharZinner_iÚinnerÚ
char_class© r4   úcC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\setuptools\setuptools\command\egg_info.pyÚtranslate_pattern$   sV    




r6   c               @   sž   e Zd ZdZddddgZdgZddiZdd	„ Zed
d„ ƒZ	e	j
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„ Zdd„ Zd d!„ Zd"S )$Úegg_infoz+create a distribution's .egg-info directory)z	egg-base=ÚezLdirectory containing .egg-info directories (default: top of the source tree))ztag-dateÚdz0Add date stamp (e.g. 20050528) to version number)z
tag-build=Úbz-Specify explicit tag to add to version number)zno-dateÚDz"Don't include date stamp [default]ztag-datezno-datec             C   s4   d | _ d | _d | _d | _d | _d| _d| _d | _d S )Nr   F)Úegg_nameÚegg_versionÚegg_baser7   Ú	tag_buildÚtag_dateÚbroken_egg_infoÚvtags)Úselfr4   r4   r5   Úinitialize_options‡   s    zegg_info.initialize_optionsc             C   s   d S )Nr4   )rC   r4   r4   r5   Útag_svn_revision”   s    zegg_info.tag_svn_revisionc             C   s   d S )Nr4   )rC   Úvaluer4   r4   r5   rE   ˜   s    c             C   s0   t  ¡ }|  ¡ |d< d|d< t|t|d�ƒ dS )z³
        Materialize the value of date into the
        build tag. Install build keys in a deterministic order
        to avoid arbitrary reordering on subsequent builds.
        r?   r   r@   )r7   N)ÚcollectionsÚOrderedDictÚtagsr   Údict)rC   Úfilenamer7   r4   r4   r5   Úsave_version_info�   s    zegg_info.save_version_infoc             C   sV  t | j ¡ ƒ| _|  ¡ | _|  ¡ | _t| jƒ}y6t	|t
jjƒ}|rFdnd}tt|| j| jf ƒƒ W n, tk
r�   tj d| j| jf ¡‚Y nX | jd kr¸| jj}|pªi  dtj¡| _|  d¡ t| jƒd | _| jtjkròtj | j| j¡| _d| jk�r|  ¡  | j| jj_| jj}|d k	�rR|j | j !¡ k�rR| j|_"t| jƒ|_#d | j_d S )Nz%s==%sz%s===%sz2Invalid distribution name or version syntax: %s-%sr   r>   z	.egg-infoú-)$r   ÚdistributionÚget_namer<   rI   rB   Útagged_versionr=   r   Ú
isinstancer   ÚversionÚVersionÚlistr   Ú
ValueErrorÚ	distutilsÚerrorsÚDistutilsOptionErrorr>   Úpackage_dirÚgetr!   ÚcurdirÚensure_dirnamer   r7   r"   ÚjoinÚcheck_broken_egg_infoÚmetadataZ_patched_distÚkeyÚlowerÚ_versionÚ_parsed_version)rC   Úparsed_versionZ
is_versionÚspecÚdirsÚpdr4   r4   r5   Úfinalize_optionsª   s8    




zegg_info.finalize_optionsFc             C   sL   |r|   |||¡ n4tj |¡rH|dkr>|s>t d||¡ dS |  |¡ dS )a¹  Write `data` to `filename` or delete if empty

        If `data` is non-empty, this routine is the same as ``write_file()``.
        If `data` is empty but not ``None``, this is the same as calling
        ``delete_file(filename)`.  If `data` is ``None``, then this is a no-op
        unless `filename` exists, in which case a warning is issued about the
        orphaned file (if `force` is false), or deleted (if `force` is true).
        Nz$%s not set in setup(), but %s exists)Ú
write_filer!   r"   Úexistsr   ÚwarnÚdelete_file)rC   ÚwhatrK   ÚdataÚforcer4   r4   r5   Úwrite_or_delete_fileÙ   s    	
zegg_info.write_or_delete_filec             C   sD   t  d||¡ tjr| d¡}| js@t|dƒ}| |¡ | ¡  dS )zªWrite `data` to `filename` (if not a dry run) after announcing it

        `what` is used in a log message to identify what is being written
        to the file.
        zwriting %s to %szutf-8ÚwbN)	r   Úinfor   ÚPY3ÚencodeÚdry_runÚopenÚwriteÚclose)rC   rm   rK   rn   Úfr4   r4   r5   ri   í   s    


zegg_info.write_filec             C   s    t  d|¡ | jst |¡ dS )z8Delete `filename` (if not a dry run) after announcing itzdeleting %sN)r   rr   ru   r!   Úunlink)rC   rK   r4   r4   r5   rl   û   s    zegg_info.delete_filec             C   s2   | j  ¡ }| jr$| | j¡r$t|ƒS t|| j ƒS )N)rN   Úget_versionrB   Úendswithr   )rC   rR   r4   r4   r5   rP     s    
zegg_info.tagged_versionc             C   sˆ   |   | j¡ | jj}x@tdƒD ]4}|j|d� | ¡ }|| |jtj	 
| j|j¡ƒ qW tj	 
| jd¡}tj	 |¡r||  |¡ |  ¡  d S )Nzegg_info.writers)Ú	installerznative_libs.txt)Úmkpathr7   rN   Zfetch_build_eggr   ÚrequireÚresolveÚnamer!   r"   r]   rj   rl   Úfind_sources)rC   r}   ÚepÚwriterÚnlr4   r4   r5   Úrun	  s     
zegg_info.runc             C   s,   d}| j r|| j 7 }| jr(|t d¡7 }|S )Nr   z-%Y%m%d)r?   r@   ÚtimeÚstrftime)rC   rR   r4   r4   r5   rI     s    
zegg_info.tagsc             C   s4   t j | jd¡}t| jƒ}||_| ¡  |j| _dS )z"Generate SOURCES.txt manifest filezSOURCES.txtN)	r!   r"   r]   r7   Úmanifest_makerrN   Úmanifestr†   Úfilelist)rC   Zmanifest_filenameÚmmr4   r4   r5   r‚      s
    
zegg_info.find_sourcesc             C   sT   | j d }| jtjkr&tj | j|¡}tj |¡rPt d|| j	¡ | j	| _
|| _	d S )Nz	.egg-infoaB  ------------------------------------------------------------------------------
Note: Your current .egg-info directory has a '-' in its name;
this will not work correctly with "setup.py develop".

Please rename %s to %s to correct this problem.
------------------------------------------------------------------------------)r<   r>   r!   r[   r"   r]   rj   r   rk   r7   rA   )rC   Zbeir4   r4   r5   r^   (  s    

zegg_info.check_broken_egg_infoN)F)Ú__name__Ú
__module__Ú__qualname__ÚdescriptionÚuser_optionsÚboolean_optionsÚnegative_optrD   ÚpropertyrE   ÚsetterrL   rh   rp   ri   rl   rP   r†   rI   r‚   r^   r4   r4   r4   r5   r7   w   s(   /
r7   c               @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )r   c             C   s<  |   |¡\}}}}|dkrV|  dd |¡ ¡ x"|D ]}|  |¡s4t d|¡ q4W �nâ|dkrš|  dd |¡ ¡ x"|D ]}|  |¡sxt d|¡ qxW �nž|dkrÞ|  d	d |¡ ¡ x"|D ]}|  |¡s¼t d
|¡ q¼W �nZ|dk�r(|  dd |¡ ¡ x&|D ]}|  |¡�st d|¡ �qW �n|dk�rx|  d|d |¡f ¡ xì|D ]"}|  	||¡�sPt d||¡ �qPW nÀ|dk�rÈ|  d|d |¡f ¡ xœ|D ]"}|  
||¡�s t d||¡ �q W np|dk�rú|  d| ¡ |  |¡�s8t d|¡ n>|dk�r,|  d| ¡ |  |¡�s8t d|¡ ntd| ƒ‚d S )NÚincludezinclude ú z%warning: no files found matching '%s'Úexcludezexclude z9warning: no previously-included files found matching '%s'zglobal-includezglobal-include z>warning: no files found matching '%s' anywhere in distributionzglobal-excludezglobal-exclude zRwarning: no previously-included files matching '%s' found anywhere in distributionzrecursive-includezrecursive-include %s %sz:warning: no files found matching '%s' under directory '%s'zrecursive-excludezrecursive-exclude %s %szNwarning: no previously-included files matching '%s' found under directory '%s'Úgraftzgraft z+warning: no directories found matching '%s'Úprunezprune z6no previously-included directories found matching '%s'z'this cannot happen: invalid action '%s')Z_parse_template_lineÚdebug_printr]   r–   r   rk   r˜   Úglobal_includeÚglobal_excludeÚrecursive_includeÚrecursive_excluder™   rš   r   )rC   ÚlineÚactionÚpatternsÚdirZdir_patternÚpatternr4   r4   r5   Úprocess_template_line;  sd    













zFileList.process_template_linec             C   sV   d}xLt t| jƒd ddƒD ]2}|| j| ƒr|  d| j|  ¡ | j|= d}qW |S )z†
        Remove all files from the file list that match the predicate.
        Return True if any matching files were removed
        Fr   éÿÿÿÿz
 removing T)Úranger'   Úfilesr›   )rC   Ú	predicateÚfoundr0   r4   r4   r5   Ú_remove_files„  s    zFileList._remove_filesc             C   s$   dd„ t |ƒD ƒ}|  |¡ t|ƒS )z#Include files that match 'pattern'.c             S   s   g | ]}t j |¡s|‘qS r4   )r!   r"   Úisdir)Ú.0ry   r4   r4   r5   ú
<listcomp>“  s    z$FileList.include.<locals>.<listcomp>)r   ÚextendÚbool)rC   r¤   rª   r4   r4   r5   r–   ‘  s    
zFileList.includec             C   s   t |ƒ}|  |j¡S )z#Exclude files that match 'pattern'.)r6   r«   Úmatch)rC   r¤   r±   r4   r4   r5   r˜   —  s    zFileList.excludec             C   s8   t j |d|¡}dd„ t|dd�D ƒ}|  |¡ t|ƒS )zN
        Include all files anywhere in 'dir/' that match the pattern.
        z**c             S   s   g | ]}t j |¡s|‘qS r4   )r!   r"   r¬   )r­   ry   r4   r4   r5   r®   ¡  s    z.FileList.recursive_include.<locals>.<listcomp>T)Ú	recursive)r!   r"   r]   r   r¯   r°   )rC   r£   r¤   Zfull_patternrª   r4   r4   r5   rž   œ  s    
zFileList.recursive_includec             C   s    t tj |d|¡ƒ}|  |j¡S )zM
        Exclude any file anywhere in 'dir/' that match the pattern.
        z**)r6   r!   r"   r]   r«   r±   )rC   r£   r¤   r±   r4   r4   r5   rŸ   ¦  s    zFileList.recursive_excludec             C   s$   dd„ t |ƒD ƒ}|  |¡ t|ƒS )zInclude all files from 'dir/'.c             S   s"   g | ]}t j |¡D ]}|‘qqS r4   )rV   r‹   Úfindall)r­   Z	match_dirÚitemr4   r4   r5   r®   °  s   z"FileList.graft.<locals>.<listcomp>)r   r¯   r°   )rC   r£   rª   r4   r4   r5   r™   ­  s    
zFileList.graftc             C   s   t tj |d¡ƒ}|  |j¡S )zFilter out files from 'dir/'.z**)r6   r!   r"   r]   r«   r±   )rC   r£   r±   r4   r4   r5   rš   ·  s    zFileList.prunec                sJ   | j dkr|  ¡  ttj d|¡ƒ‰ ‡ fdd„| j D ƒ}|  |¡ t|ƒS )z“
        Include all files anywhere in the current directory that match the
        pattern. This is very inefficient on large file trees.
        Nz**c                s   g | ]}ˆ   |¡r|‘qS r4   )r±   )r­   ry   )r±   r4   r5   r®   Ä  s    z+FileList.global_include.<locals>.<listcomp>)Úallfilesr³   r6   r!   r"   r]   r¯   r°   )rC   r¤   rª   r4   )r±   r5   rœ   ¼  s    

zFileList.global_includec             C   s   t tj d|¡ƒ}|  |j¡S )zD
        Exclude all files anywhere that match the pattern.
        z**)r6   r!   r"   r]   r«   r±   )rC   r¤   r±   r4   r4   r5   r�   È  s    zFileList.global_excludec             C   s8   |  d¡r|d d… }t|ƒ}|  |¡r4| j |¡ d S )Núr¦   )r|   r   Ú
_safe_pathr¨   Úappend)rC   r´   r"   r4   r4   r5   r¸   Ï  s
    

zFileList.appendc             C   s   | j  t| j|ƒ¡ d S )N)r¨   r¯   Úfilterr·   )rC   Úpathsr4   r4   r5   r¯   ×  s    zFileList.extendc             C   s   t t| j| jƒƒ| _dS )zÜ
        Replace self.files with only safe paths

        Because some owners of FileList manipulate the underlying
        ``files`` attribute directly, this method must be called to
        repair those paths.
        N)rT   r¹   r·   r¨   )rC   r4   r4   r5   Ú_repairÚ  s    zFileList._repairc          	   C   sš   d}t  |¡}|d kr(t d| ¡ dS t  |d¡}|d krNt ||d¡ dS y tj |¡shtj |¡rldS W n& tk
r”   t ||t	 
¡ ¡ Y nX d S )Nz!'%s' not %s encodable -- skippingz''%s' in unexpected encoding -- skippingFzutf-8T)Úunicode_utilsÚfilesys_decoder   rk   Z
try_encoder!   r"   rj   ÚUnicodeEncodeErrorÚsysÚgetfilesystemencoding)rC   r"   Zenc_warnZu_pathZ	utf8_pathr4   r4   r5   r·   ä  s    
zFileList._safe_pathN)r�   rŽ   r�   r¥   r«   r–   r˜   rž   rŸ   r™   rš   rœ   r�   r¸   r¯   r»   r·   r4   r4   r4   r5   r   8  s   I


r   c               @   s\   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	e
dd„ ƒZdd„ Zdd„ ZdS )r‰   zMANIFEST.inc             C   s   d| _ d| _d| _d| _d S )Nr   )Zuse_defaultsrš   Zmanifest_onlyZforce_manifest)rC   r4   r4   r5   rD   ÿ  s    z!manifest_maker.initialize_optionsc             C   s   d S )Nr4   )rC   r4   r4   r5   rh     s    zmanifest_maker.finalize_optionsc             C   sd   t ƒ | _tj | j¡s|  ¡  |  ¡  tj | j¡r<|  	¡  |  
¡  | j ¡  | j ¡  |  ¡  d S )N)r   r‹   r!   r"   rj   rŠ   Úwrite_manifestÚadd_defaultsÚtemplateZread_templateÚprune_file_listÚsortZremove_duplicates)rC   r4   r4   r5   r†     s    

zmanifest_maker.runc             C   s   t  |¡}| tjd¡S )Nú/)r¼   r½   Úreplacer!   r#   )rC   r"   r4   r4   r5   Ú_manifest_normalize  s    
z"manifest_maker._manifest_normalizec                sB   ˆ j  ¡  ‡ fdd„ˆ j jD ƒ}dˆ j }ˆ  tˆ j|f|¡ dS )zo
        Write the file list in 'self.filelist' to the manifest file
        named by 'self.manifest'.
        c                s   g | ]}ˆ   |¡‘qS r4   )rÈ   )r­   ry   )rC   r4   r5   r®      s    z1manifest_maker.write_manifest.<locals>.<listcomp>zwriting manifest file '%s'N)r‹   r»   r¨   rŠ   Úexecuteri   )rC   r¨   Úmsgr4   )rC   r5   rÁ     s    

zmanifest_maker.write_manifestc             C   s   |   |¡st | |¡ d S )N)Ú_should_suppress_warningr	   rk   )rC   rÊ   r4   r4   r5   rk   $  s    
zmanifest_maker.warnc             C   s   t  d| ¡S )z;
        suppress missing-file warnings from sdist
        zstandard file .*not found)r$   r±   )rÊ   r4   r4   r5   rË   (  s    z'manifest_maker._should_suppress_warningc             C   st   t  | ¡ | j | j¡ | j | j¡ ttƒ ƒ}|rB| j |¡ nt	j
 | j¡rX|  ¡  |  d¡}| j |j¡ d S )Nr7   )r	   rÂ   r‹   r¸   rÃ   rŠ   rT   r
   r¯   r!   r"   rj   Zread_manifestÚget_finalized_commandr™   r7   )rC   ZrcfilesZei_cmdr4   r4   r5   rÂ   /  s    


zmanifest_maker.add_defaultsc             C   sZ   |   d¡}| j ¡ }| j |j¡ | j |¡ t tj	¡}| jj
d| d | dd� d S )NÚbuildz(^|z)(RCS|CVS|\.svn)r   )Zis_regex)rÌ   rN   Úget_fullnamer‹   rš   Ú
build_baser$   r%   r!   r#   Zexclude_pattern)rC   rÍ   Úbase_dirr#   r4   r4   r5   rÄ   ;  s    

zmanifest_maker.prune_file_listN)r�   rŽ   r�   rÃ   rD   rh   r†   rÈ   rÁ   rk   ÚstaticmethodrË   rÂ   rÄ   r4   r4   r4   r5   r‰   ü  s   r‰   c          	   C   s8   d  |¡}| d¡}t| dƒ�}| |¡ W dQ R X dS )z{Create a file with the specified name and write 'contents' (a
    sequence of strings without line terminators) to it.
    Ú
zutf-8rq   N)r]   rt   rv   rw   )rK   Úcontentsry   r4   r4   r5   ri   E  s    

ri   c          	   C   s|   t  d|¡ | jsx| jj}| j|j |_}| j|j |_}z| 	| j
¡ W d || |_|_X t| jdd ƒ}t | j
|¡ d S )Nz
writing %sZzip_safe)r   rr   ru   rN   r_   r=   rR   r<   r�   Úwrite_pkg_infor7   Úgetattrr   Zwrite_safety_flag)ÚcmdÚbasenamerK   r_   ZoldverZoldnameÚsafer4   r4   r5   rÔ   R  s    rÔ   c             C   s   t j |¡rt d¡ d S )NzsWARNING: 'depends.txt' is not used by setuptools 0.6!
Use the install_requires/extras_require setup() args instead.)r!   r"   rj   r   rk   )rÖ   r×   rK   r4   r4   r5   Úwarn_depends_obsoletee  s    rÙ   c             C   s,   t |pdƒ}dd„ }t||ƒ}|  |¡ d S )Nr4   c             S   s   | d S )NrÒ   r4   )r    r4   r4   r5   Ú<lambda>o  s    z%_write_requirements.<locals>.<lambda>)r   r   Ú
writelines)ÚstreamÚreqsÚlinesZ	append_crr4   r4   r5   Ú_write_requirementsm  s    
rß   c             C   sn   | j }t ¡ }t||jƒ |jp"i }x2t|ƒD ]&}| djf t	ƒ Ž¡ t||| ƒ q.W |  
d|| ¡ ¡ d S )Nz
[{extra}]
Úrequirements)rN   r   ÚStringIOrß   Zinstall_requiresÚextras_requireÚsortedrw   ÚformatÚvarsrp   Úgetvalue)rÖ   r×   rK   Údistrn   râ   Úextrar4   r4   r5   Úwrite_requirementst  s    
ré   c             C   s,   t  ¡ }t|| jjƒ |  d|| ¡ ¡ d S )Nzsetup-requirements)Úiorá   rß   rN   Zsetup_requiresrp   ræ   )rÖ   r×   rK   rn   r4   r4   r5   Úwrite_setup_requirements  s    rë   c             C   s:   t  dd„ | j ¡ D ƒ¡}|  d|d t|ƒ¡d ¡ d S )Nc             S   s   g | ]}|  d d¡d ‘qS )Ú.r   r   )r    )r­   Úkr4   r4   r5   r®   ˆ  s   z(write_toplevel_names.<locals>.<listcomp>ztop-level namesrÒ   )rJ   ÚfromkeysrN   Ziter_distribution_namesri   r]   rã   )rÖ   r×   rK   Úpkgsr4   r4   r5   Úwrite_toplevel_names…  s    rð   c             C   s   t | ||dƒ d S )NT)Ú	write_arg)rÖ   r×   rK   r4   r4   r5   Úoverwrite_arg�  s    rò   Fc             C   sH   t j |¡d }t| j|d ƒ}|d k	r4d |¡d }|  ||||¡ d S )Nr   rÒ   )r!   r"   ÚsplitextrÕ   rN   r]   rp   )rÖ   r×   rK   ro   ÚargnamerF   r4   r4   r5   rñ   “  s
    rñ   c             C   s¨   | j j}t|tjƒs|d kr"|}nr|d k	r”g }xZt| ¡ ƒD ]J\}}t|tjƒstt ||¡}d 	tt
t| ¡ ƒƒ¡}| d||f ¡ q<W d 	|¡}|  d||d¡ d S )NrÒ   z	[%s]
%s

r   zentry pointsT)rN   Úentry_pointsrQ   r   Ústring_typesrã   Úitemsr   Úparse_groupr]   r   ÚstrÚvaluesr¸   rp   )rÖ   r×   rK   rƒ   rn   ÚsectionrÓ   r4   r4   r5   Úwrite_entries›  s    
rü   c           	   C   s^   t  dt¡ tj d¡rZt d¡�2} x*| D ]"}t 	d|¡}|r*t
| d¡ƒS q*W W dQ R X dS )zd
    Get a -r### off of PKG-INFO Version in case this is an sdist of
    a subversion revision.
    z$get_pkg_info_revision is deprecated.zPKG-INFOzVersion:.*-r(\d+)\s*$r   Nr   )Úwarningsrk   ÚDeprecationWarningr!   r"   rj   rê   rv   r$   r±   ÚintÚgroup)ry   r    r±   r4   r4   r5   Úget_pkg_info_revision¬  s    
r  )F):Ú__doc__Údistutils.filelistr   Z	_FileListÚdistutils.errorsr   Údistutils.utilr   rV   r   r!   r$   r¿   rê   rý   r‡   rG   Zsetuptools.externr   Zsetuptools.extern.six.movesr   Ú
setuptoolsr   Zsetuptools.command.sdistr	   r
   Zsetuptools.command.setoptr   Zsetuptools.commandr   Úpkg_resourcesr   r   r   r   r   r   r   r   Zsetuptools.unicode_utilsr¼   Zsetuptools.globr   r   r6   r7   r‰   ri   rÔ   rÙ   rß   ré   rë   rð   rò   rñ   rü   r  r4   r4   r4   r5   Ú<module>   sR   (S B EI

