ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     U
    e5d                     @   s  d Z ddddddddd	d
dddddddgZdZddlZddlZddlZdd ZzddlmZmZ W n$ e	k
r   dd Zdd ZY nX eZ
G dd deZG dd deZG dd deZG dd deZG d d deZG d!d" d"eZG d#d	 d	ZG d$d
 d
eZG d%d deZd&d' Zd(d) Zee
d*fee
d*fee
d+fee
d,fd-Zd.d/ Zd0d Zd1ZG d2d dZd3Zd4ZG d5d dZ G d6d dZ!G d7d de!Z"G d8d de!Z#d9d: Z$eZ%dS );z1.5.3Optionmake_optionSUPPRESS_HELPSUPPRESS_USAGEValuesOptionContainerOptionGroupOptionParserHelpFormatterIndentedHelpFormatterTitledHelpFormatterOptParseErrorOptionErrorOptionConflictErrorOptionValueErrorBadOptionErrorcheck_choicea"  
Copyright (c) 2001-2006 Gregory P. Ward.  All rights reserved.
Copyright (c) 2002-2006 Python Software Foundation.  All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.

  * Neither the name of the author nor the names of its
    contributors may be used to endorse or promote products derived from
    this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    Nc                 C   s   d| j jt| | f S )Nz<%s at 0x%x: %s>)	__class____name__idself r    /usr/lib64/python3.8/optparse.py_reprO   s    r   )gettextngettextc                 C   s   | S Nr   )messager   r   r   r   \   s    r   c                 C   s   |dkr| S |S N   r   )ZsingularZpluralnr   r   r   r   _   s    r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s
   || _ d S r   msgr   r#   r   r   r   __init__h   s    zOptParseError.__init__c                 C   s   | j S r   r"   r   r   r   r   __str__k   s    zOptParseError.__str__Nr   
__module____qualname__r%   r&   r   r   r   r   r   g   s   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s   || _ t|| _d S r   )r#   str	option_id)r   r#   optionr   r   r   r%   u   s    zOptionError.__init__c                 C   s    | j rd| j | jf S | jS d S )Nzoption %s: %s)r+   r#   r   r   r   r   r&   y   s    zOptionError.__str__Nr'   r   r   r   r   r   o   s   c                   @   s   e Zd ZdS )r   Nr   r(   r)   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr-   r   r   r   r   r      s   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s
   || _ d S r   )opt_strr   r.   r   r   r   r%      s    zBadOptionError.__init__c                 C   s   t d| j S )Nzno such option: %s)_r.   r   r   r   r   r&      s    zBadOptionError.__str__Nr'   r   r   r   r   r      s   c                   @   s   e Zd Zdd Zdd ZdS )AmbiguousOptionErrorc                 C   s   t | | || _d S r   )r   r%   possibilities)r   r.   r2   r   r   r   r%      s    zAmbiguousOptionError.__init__c                 C   s   t d| jd| jf S )Nzambiguous option: %s (%s?), )r0   r.   joinr2   r   r   r   r   r&      s    zAmbiguousOptionError.__str__Nr'   r   r   r   r   r1      s   r1   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	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	   Znonec              	   C   s   d | _ || _|d krLzttjd }W n ttfk
rB   d}Y nX |d8 }|| _t|t	|d |d  | _
| _d| _d| _d | _|| _d| _i | _d| _d| _d S )	NZCOLUMNSP         r   z%defaultz%s %sz%s=%s)parserindent_incrementintosenvironKeyError
ValueErrorwidthminmaxhelp_positionmax_help_positioncurrent_indentlevel
help_widthshort_firstdefault_tagoption_strings_short_opt_fmt_long_opt_fmtr   r9   rC   r?   rG   r   r   r   r%      s&    

zHelpFormatter.__init__c                 C   s
   || _ d S r   )r8   r   r8   r   r   r   
set_parser   s    zHelpFormatter.set_parserc                 C   s&   |dkrt d| d| d | _d S )N)  z/invalid metavar delimiter for short options: %r%s)r>   rJ   r   Zdelimr   r   r   set_short_opt_delimiter   s
    z%HelpFormatter.set_short_opt_delimiterc                 C   s&   |dkrt d| d| d | _d S )N)=rP   z.invalid metavar delimiter for long options: %rrQ   )r>   rK   rR   r   r   r   set_long_opt_delimiter   s
    z$HelpFormatter.set_long_opt_delimiterc                 C   s"   |  j | j7  _ |  jd7  _d S r   rD   r9   rE   r   r   r   r   indent   s    zHelpFormatter.indentc                 C   s"   |  j | j8  _ |  jd8  _d S r   rV   r   r   r   r   dedent   s    zHelpFormatter.dedentc                 C   s   t dd S Nzsubclasses must implementNotImplementedErrorr   usager   r   r   format_usage   s    zHelpFormatter.format_usagec                 C   s   t dd S rY   rZ   r   Zheadingr   r   r   format_heading  s    zHelpFormatter.format_headingc                 C   s.   t | j| j d}d| j }tj||||dS )N   rP   )Zinitial_indentZsubsequent_indent)rA   r?   rD   textwrapZfill)r   textZ
text_widthrW   r   r   r   _format_text  s    
zHelpFormatter._format_textc                 C   s   |r|  |d S dS d S N
rO   rd   r   descriptionr   r   r   format_description  s    z HelpFormatter.format_descriptionc                 C   s   |rd|  | d S dS d S re   rg   )r   epilogr   r   r   format_epilog  s    zHelpFormatter.format_epilogc                 C   sP   | j d ks| js|jS | j j|j}|tks6|d kr<| j}|j| jt	|S r   )
r8   rH   helpdefaultsgetdest
NO_DEFAULTNO_DEFAULT_VALUEreplacer*   )r   r,   Zdefault_valuer   r   r   expand_default  s    zHelpFormatter.expand_defaultc                    s   g } j | } j j d }t||krBd jd|f } j}nd jd||f }d}|| |jr |}t| j	}|d|d|d f  |
 fdd|dd  D  n|d	 d
kr|d
 d|S )Nr6   %*s%s
rO   z	%*s%-*s  r   c                    s   g | ]}d  j d|f qS )ru   rO   )rB   ).0liner   r   r   
<listcomp>E  s   z/HelpFormatter.format_option.<locals>.<listcomp>r    rf   )rI   rB   rD   lenappendrm   rt   rb   ZwraprF   extendr4   )r   r,   resultoptsZ	opt_widthZindent_firstZ	help_textZ
help_linesr   r   r   format_option(  s&    





zHelpFormatter.format_optionc                 C   s   |    d}|jD ],}| |}|| j|< t|t|| j }q|    |jD ]8}|jD ],}| |}|| j|< t|t|| j }qXqN|   |   t	|d | j
| _t| j| j d| _d S )Nr   r6   ra   )rW   option_listformat_option_stringsrI   rA   rz   rD   option_groupsrX   r@   rC   rB   r?   rF   )r   r8   Zmax_lenoptZstringsgroupr   r   r   store_option_stringsK  s     






z"HelpFormatter.store_option_stringsc                    st   |  rF|jp|j   fdd|jD } fdd|jD }n|j}|j}jrb|| }n|| }d|S )Nc                    s   g | ]}j | f qS r   )rJ   )rv   Zsoptmetavarr   r   r   rx   a  s   z7HelpFormatter.format_option_strings.<locals>.<listcomp>c                    s   g | ]}j | f qS r   )rK   )rv   Zloptr   r   r   rx   c  s   r3   )takes_valuer   rp   upper_short_opts
_long_optsrG   r4   )r   r,   Z
short_optsZ	long_optsr~   r   r   r   r   ]  s    
z#HelpFormatter.format_option_stringsN)r   r(   r)   rr   r%   rN   rS   rU   rW   rX   r^   r`   rd   rj   rl   rt   r   r   r   r   r   r   r   r	      s    +
#c                   @   s&   e Zd ZdddZdd Zd	d
 ZdS )r
   r6      Nr    c                 C   s   t | |||| d S r   r	   r%   rL   r   r   r   r%   t  s        zIndentedHelpFormatter.__init__c                 C   s   t d| S )Nz
Usage: %s
)r0   r\   r   r   r   r^   |  s    z"IndentedHelpFormatter.format_usagec                 C   s   d| j d|f S )Nz%*s%s:
rO   )rD   r_   r   r   r   r`     s    z$IndentedHelpFormatter.format_heading)r6   r   Nr    r   r(   r)   r%   r^   r`   r   r   r   r   r
   p  s       
c                   @   s&   e Zd Zd
ddZdd Zdd	 ZdS )r   r   r   Nc                 C   s   t | |||| d S r   r   rL   r   r   r   r%     s        zTitledHelpFormatter.__init__c                 C   s   d|  td|f S )Nz%s  %s
ZUsage)r`   r0   r\   r   r   r   r^     s    z TitledHelpFormatter.format_usagec                 C   s   d|d| j  t| f S )Nz%s
%s
z=-)rE   rz   r_   r   r   r   r`     s    z"TitledHelpFormatter.format_heading)r   r   Nr   r   r   r   r   r   r     s       
c                 C   sh   | d d   dkrd}nD| d d   dkrDd}| dd  p@d} n| d d dkrZd}nd}|| |S )	Nr6   Z0x   Z0b0r       
   )lower)valtyperadixr   r   r   
_parse_num  s    r   c                 C   s
   t | tS r   )r   r:   )r   r   r   r   
_parse_int  s    r   Zintegerzfloating-pointcomplex)r:   longfloatr   c                 C   sH   t | j \}}z
||W S  tk
rB   ttd|||f Y nX d S )Nzoption %s: invalid %s value: %r)_builtin_cvtr   r>   r   r0   )r,   r   valueZcvtZwhatr   r   r   check_builtin  s    
r   c                 C   s:   || j kr|S dtt| j }ttd|||f d S )Nr3   z.option %s: invalid choice: %r (choose from %s))choicesr4   mapreprr   r0   )r,   r   r   r   r   r   r   r     s    
)ZNOZDEFAULTc                   @   s   e Zd Zddddddddd	d
ddgZdZdZdZdZdZdZ	e
e
e
e
ed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eeeeeeegZd+d, ZeZd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Z d7d8 Z!dS )9r   actionr   rp   defaultnargsconstr   callbackcallback_argscallback_kwargsrm   r   )
storestore_const
store_truestore_falser{   append_constcountr   rm   version)r   r   r   r   r{   r   r   )r   r{   r   )r   r{   )r   r   )stringr:   r   r   r   choice)r:   r   r   r   r   Nc                 O   sB   g | _ g | _| |}| | | | | jD ]}||  q0d S r   )r   r   _check_opt_strings_set_opt_strings
_set_attrsCHECK_METHODS)r   r~   attrscheckerr   r   r   r%   4  s    



zOption.__init__c                 C   s   dd |D }|st d|S )Nc                 S   s   g | ]}|r|qS r   r   )rv   r   r   r   r   rx   K  s      z-Option._check_opt_strings.<locals>.<listcomp>z+at least one option string must be supplied)	TypeError)r   r~   r   r   r   r   G  s    zOption._check_opt_stringsc                 C   s   |D ]}t |dk r$td| | qt |dkrd|d dkrH|d dksVtd| | | j| q|dd dkr|d dkstd| | | j| qd S )	Nr6   z>invalid option string %r: must be at least two characters longr   -r    zMinvalid short option string %r: must be of the form -x, (x any non-dash char)--zGinvalid long option string %r: must start with --, followed by non-dash)rz   r   r   r{   r   )r   r~   r   r   r   r   r   P  s2    zOption._set_opt_stringsc                 C   sv   | j D ]F}||kr*t| |||  ||= q|dkr@t| |t qt| |d  q|rrt| }tdd| | d S )Nr   zinvalid keyword arguments: %sr3   )ATTRSsetattrrq   sortedkeysr   r4   )r   r   attrr   r   r   r   e  s    
zOption._set_attrsc                 C   s2   | j d krd| _ n| j | jkr.td| j  | d S )Nr   zinvalid action: %r)r   ACTIONSr   r   r   r   r   _check_actionx  s    
zOption._check_actionc                 C   s   | j d kr0| j| jkr| jd k	r(d| _ qd| _ n^t| j t rF| j j| _ | j dkrVd| _ | j | jkrrtd| j  | | j| jkrtd| j | d S )Nr   r   r*   zinvalid option type: %rz$must not supply a type for action %r)	r   r   ALWAYS_TYPED_ACTIONSr   
isinstancer   TYPESr   TYPED_ACTIONSr   r   r   r   _check_type~  s     



 zOption._check_typec                 C   sr   | j dkrT| jd kr td| qnt| jttfsntdtt | jdd  | n| jd k	rntd| j  | d S )Nr   z/must supply a list of choices for type 'choice'z1choices must be a list of strings ('%s' supplied)'r    z#must not supply choices for type %r)r   r   r   r   tuplelistr*   splitr   r   r   r   _check_choice  s$    

 
 zOption._check_choicec                 C   s\   | j | jkp| jd k	}| jd krX|rX| jrH| jd dd  dd| _n| jd d | _d S )Nr   r6   r   r0   r    )r   STORE_ACTIONSr   rp   r   rs   r   )r   r   r   r   r   _check_dest  s    zOption._check_destc                 C   s*   | j | jkr&| jd k	r&td| j  | d S )Nz*'const' must not be supplied for action %r)r   CONST_ACTIONSr   r   r   r   r   r   _check_const  s
    zOption._check_constc                 C   s<   | j | jkr| jd kr8d| _n| jd k	r8td| j  | d S )Nr    z*'nargs' must not be supplied for action %r)r   r   r   r   r   r   r   r   _check_nargs  s    

zOption._check_nargsc                 C   s   | j dkrrt| js$td| j | | jd k	rJt| jtsJtd| j | | jd k	rt| jtstd| j | nB| jd k	rtd| j | | jd k	rtd| | jd k	rtd| d S )Nr   zcallback not callable: %rz3callback_args, if supplied, must be a tuple: not %rz4callback_kwargs, if supplied, must be a dict: not %rz.callback supplied (%r) for non-callback optionz.callback_args supplied for non-callback optionz0callback_kwargs supplied for non-callback option)	r   callabler   r   r   r   r   r   dictr   r   r   r   _check_callback  sR    

 





 
 zOption._check_callbackc                 C   s   d | j| j S )N/)r4   r   r   r   r   r   r   r&     s    zOption.__str__c                 C   s
   | j d k	S r   )r   r   r   r   r   r     s    zOption.takes_valuec                 C   s   | j r| j d S | jd S d S Nr   )r   r   r   r   r   r   get_opt_string  s    
zOption.get_opt_stringc                 C   s*   | j | j}|d kr|S || ||S d S r   )TYPE_CHECKERro   r   )r   r   r   r   r   r   r   check_value  s    zOption.check_valuec                    s:   |d k	r6j dkr |S t fdd|D S d S )Nr    c                    s   g | ]}  |qS r   )r   )rv   vr   r   r   r   rx     s     z(Option.convert_value.<locals>.<listcomp>)r   r   r   )r   r   r   r   r   r   convert_value   s    
zOption.convert_valuec                 C   s$   |  ||}| | j| j||||S r   )r   take_actionr   rp   )r   r   r   valuesr8   r   r   r   process  s         zOption.processc           	      C   s:  |dkrt ||| n|dkr2t ||| j n|dkrHt ||d n|dkr^t ||d n|dkrz||g | n|dkr||g | j n|d	krt ||||d
d  n||dkr| jpd}| jpi }| j| |||f|| nF|dkr|  |  n*|dkr(|	  |  nt
d| j dS )Nr   r   r   Tr   Fr{   r   r   r   r    r   r   rm   r   zunknown action %r)r   r   ensure_valuer{   r   r   r   
print_helpexitprint_versionr>   r   )	r   r   rp   r   r   r   r8   argskwargsr   r   r   r     s4    





zOption.take_action)"r   r(   r)   r   r   r   r   r   r   r   r   r   r   r   r%   r   r   r   r   r   r   r   r   r   r   r&   r   __repr__r   r   r   r   r   r   r   r   r   r   r     sj   
			ZSUPPRESSHELPZSUPPRESSUSAGEc                   @   s^   e Zd ZdddZdd ZeZdd Zdd	 Zd
d Z	dd Z
dddZdddZdd ZdS )r   Nc                 C   s&   |r"|  D ]\}}t| || qd S r   )itemsr   )r   rn   r   r   r   r   r   r%   9  s    zValues.__init__c                 C   s
   t | jS r   )r*   __dict__r   r   r   r   r&   >  s    zValues.__str__c                 C   s2   t |tr| j|jkS t |tr*| j|kS tS d S r   )r   r   r   r   NotImplemented)r   otherr   r   r   __eq__C  s
    


zValues.__eq__c                 C   s6   t | D ](}||kr|| }|d k	rt| || qd S r   )dirr   )r   r   r   Zdvalr   r   r   _update_carefulK  s
    zValues._update_carefulc                 C   s   | j | d S r   )r   update)r   r   r   r   r   _update_looseX  s    zValues._update_loosec                 C   s8   |dkr|  | n |dkr(| | ntd| d S )NcarefulZloosezinvalid update mode: %r)r   r   r>   )r   r   moder   r   r   _update`  s
    zValues._updater   c                 C   s&   t | tj| }| t|| d S r   )
__import__sysmodulesr   vars)r   modnamer   modr   r   r   read_moduleh  s    
zValues.read_modulec                 C   s&   i }t t| | | || d S r   )execopenreadr   )r   filenamer   r   r   r   r   	read_filem  s    zValues.read_filec                 C   s.   t | |rt| |d kr$t| || t| |S r   )hasattrgetattrr   )r   r   r   r   r   r   r   r  s    zValues.ensure_value)N)r   )r   )r   r(   r)   r%   r&   r   r   r   r   r   r   r   r   r   r   r   r   r   r   7  s   


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d Zdd  Zd!S )"r   c                 C   s&   |    || _| | | | d S r   )_create_option_listoption_classset_conflict_handlerset_description)r   r  conflict_handlerri   r   r   r   r%     s    
zOptionContainer.__init__c                 C   s   i | _ i | _i | _d S r   
_short_opt	_long_optrn   r   r   r   r   _create_option_mappings  s    z'OptionContainer._create_option_mappingsc                 C   s   |j | _ |j| _|j| _d S r   r  rM   r   r   r   _share_option_mappings  s    z&OptionContainer._share_option_mappingsc                 C   s   |dkrt d| || _d S )N)errorresolvez$invalid conflict_resolution value %r)r>   r  )r   handlerr   r   r   r    s    z$OptionContainer.set_conflict_handlerc                 C   s
   || _ d S r   ri   rh   r   r   r   r    s    zOptionContainer.set_descriptionc                 C   s   | j S r   r  r   r   r   r   get_description  s    zOptionContainer.get_descriptionc                 C   s   | ` | `| `d S r   r  r   r   r   r   destroy  s    zOptionContainer.destroyc                 C   s   g }|j D ]"}|| jkr
||| j| f q
|jD ]"}|| jkr4||| j| f q4|r| j}|dkrtdddd |D  |nd|dkr|D ]V\}}|dr|j	| | j|= n|j 	| | j|= |j s|js|j
j	| qd S )Nr
  z conflicting option string(s): %sr3   c                 S   s   g | ]}|d  qS )r   r   )rv   cor   r   r   rx     s     z3OptionContainer._check_conflict.<locals>.<listcomp>r  r   )r   r  r{   r   r  r  r   r4   
startswithremove	containerr   )r   r,   Zconflict_optsr   r  Zc_optionr   r   r   _check_conflict  s2    





zOptionContainer._check_conflictc                 O   s   t |d tr| j||}n8t|dkrL|sL|d }t |tsTtd| ntd| | | j| | |_	|j
D ]}|| j|< qv|jD ]}|| j|< q|jd k	r|jtk	r|j| j|j< n|j| jkrd | j|j< |S )Nr   r    znot an Option instance: %rinvalid arguments)r   r*   r  rz   r   r   r  r   r{   r  r   r  r   r  rp   r   rq   rn   )r   r   r   r,   r   r   r   r   
add_option  s(    





zOptionContainer.add_optionc                 C   s   |D ]}|  | qd S r   )r  )r   r   r,   r   r   r   add_options  s    zOptionContainer.add_optionsc                 C   s   | j |p| j|S r   )r  ro   r  r/   r   r   r   
get_option  s    
zOptionContainer.get_optionc                 C   s   || j kp|| jkS r   )r  r  r/   r   r   r   
has_option  s    
zOptionContainer.has_optionc                 C   sn   | j |}|d kr | j|}|d kr4td| |jD ]}| j |= q:|jD ]}| j|= qN|jj| d S )Nzno such option %r)	r  ro   r  r>   r   r   r  r   r  )r   r.   r,   r   r   r   r   remove_option  s    



zOptionContainer.remove_optionc                 C   s>   | j s
dS g }| j D ]}|jtk	r||| qd|S NrO   )r   rm   r   r{   r   r4   )r   	formatterr}   r,   r   r   r   format_option_help  s    

z"OptionContainer.format_option_helpc                 C   s   | |  S r   )rj   r  r   r  r   r   r   rj   (  s    z"OptionContainer.format_descriptionc                 C   s:   g }| j r|| | | jr0|| | d|S )Nrf   )ri   r{   rj   r   r  r4   r   r  r}   r   r   r   format_help+  s    zOptionContainer.format_helpN)r   r(   r)   r%   r  r	  r  r  r  r  r  r  r  r  r  r  r  rj   r   r   r   r   r   r   x  s     			c                   @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )r   Nc                 C   s$   || _ t| |j|j| || _d S r   )r8   r   r%   r  r  title)r   r8   r!  ri   r   r   r   r%   6  s       zOptionGroup.__init__c                 C   s   g | _ | | j d S r   )r   r	  r8   r   r   r   r   r   <  s    zOptionGroup._create_option_listc                 C   s
   || _ d S r   )r!  )r   r!  r   r   r   	set_title@  s    zOptionGroup.set_titlec                 C   s   t |  | `d S r   )r   r  r   r   r   r   r   r  C  s    
zOptionGroup.destroyc                 C   s0   | | j}|  |t| |7 }|  |S r   )r`   r!  rW   r   r   rX   r  r   r   r   r   J  s
    zOptionGroup.format_help)N)r   r(   r)   r%   r   r"  r  r   r   r   r   r   r   4  s
   
c                
   @   s^  e Zd Zg Zddedddddddf
ddZdd Zdd	 Zd
d Zdd Z	dOd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dPd(d)Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 ZdQd;d<Z d=d> Z!d?d@ Z"dRdAdBZ#dCdD Z$dSdEdFZ%dTdGdHZ&dIdJ Z'dUdKdLZ(dVdMdNZ)dS )Wr   Nr
  Tc                 C   sr   t | ||| | | |	| _|| _d| _d| _|d kr@t }|| _| j	|  |
| _
| j||d |   d S )NT)add_help)r   r%   	set_usageprogr   allow_interspersed_argsprocess_default_valuesr
   r  rN   rk   _populate_option_list_init_parsing_state)r   r]   r   r  r   r  ri   r  Zadd_help_optionr%  rk   r   r   r   r%     s(       
zOptionParser.__init__c                 C   s.   t |  | jD ]}|  q| `| `| `d S r   )r   r  r   r   r  )r   r   r   r   r   r    s    


zOptionParser.destroyc                 C   s   g | _ g | _|   d S r   )r   r   r  r   r   r   r   r     s    z OptionParser._create_option_listc                 C   s   | j dddtdd d S )Nz-hz--helprm   zshow this help message and exitr   rm   r  r0   r   r   r   r   _add_help_option  s    zOptionParser._add_help_optionc                 C   s   | j ddtdd d S )Nz	--versionr   z&show program's version number and exitr*  r+  r   r   r   r   _add_version_option  s    z OptionParser._add_version_optionc                 C   s>   | j r| | j  |r | | | jr.|   |r:|   d S r   )standard_option_listr  r   r-  r,  )r   r   r#  r   r   r   r(    s    
z"OptionParser._populate_option_listc                 C   s   d | _ d | _d | _d S r   )rargslargsr   r   r   r   r   r)    s    z OptionParser._init_parsing_statec                 C   sL   |d krt d| _n4|tkr$d | _n$| drB|dd  | _n|| _d S )Nz%prog [options]zusage:    )r0   r]   r   r   r  r\   r   r   r   r$    s    zOptionParser.set_usagec                 C   s
   d| _ d S )NTr&  r   r   r   r   enable_interspersed_args  s    z%OptionParser.enable_interspersed_argsc                 C   s
   d| _ d S )NFr2  r   r   r   r   disable_interspersed_args  s    z&OptionParser.disable_interspersed_argsc                 C   s
   || _ d S r   )r'  )r   r   r   r   r   set_process_default_values  s    z'OptionParser.set_process_default_valuesc                 C   s   || j |< d S r   )rn   )r   rp   r   r   r   r   set_default  s    zOptionParser.set_defaultc                 K   s   | j | d S r   )rn   r   )r   r   r   r   r   set_defaults  s    zOptionParser.set_defaultsc                 C   s*   | j d d  }| jD ]}||j  q|S r   )r   r   r|   )r   Zoptionsr   r   r   r   _get_all_options  s    
zOptionParser._get_all_optionsc                 C   s`   | j st| jS | j }|  D ]4}||j}t|tr"|	 }|
||||j< q"t|S r   )r'  r   rn   copyr8  ro   rp   r   r*   r   r   )r   rn   r,   r   r.   r   r   r   get_default_values  s    


zOptionParser.get_default_valuesc                 O   sz   t |d tr t| f||}nJt|dkrb|sb|d }t |tsNtd| |j| k	rjtdntd| j| |S )Nr   r    znot an OptionGroup instance: %rz"invalid OptionGroup (wrong parser)r  )	r   r*   r   rz   r   r8   r>   r   r{   )r   r   r   r   r   r   r   add_option_group+  s    


zOptionParser.add_option_groupc                 C   s0   | j |p| j|}|r,|j| k	r,|jS d S r   )r  ro   r  r  )r   r.   r,   r   r   r   get_option_group;  s    
zOptionParser.get_option_groupc                 C   s&   |d krt jdd  S |d d  S d S r   )r   argv)r   r   r   r   r   	_get_argsE  s    zOptionParser._get_argsc              
   C   s   |  |}|d kr|  }|| _g  | _}|| _z| |||}W n4 ttfk
rv } z| t	| W 5 d }~X Y nX || }| 
||S r   )r>  r:  r/  r0  r   _process_argsr   r   r
  r*   check_values)r   r   r   r/  r0  stoperrr   r   r   
parse_argsK  s    

 zOptionParser.parse_argsc                 C   s   ||fS r   r   )r   r   r   r   r   r   r@  r  s    zOptionParser.check_valuesc                 C   s   |r|d }|dkr|d= d S |dd dkr<|  || q |d d dkrft|dkrf| || q | jr~|| |d= q d S q d S )Nr   r   r6   r    r   )_process_long_optrz   _process_short_optsr&  r{   )r   r0  r/  r   argr   r   r   r?    s    

zOptionParser._process_argsc                 C   s   t || jS r   )_match_abbrevr  )r   r   r   r   r   _match_long_opt  s    zOptionParser._match_long_optc           
      C   s   | d}d|kr4|dd\}}|d| d}n|}d}| |}| j| }| r|j}t||k r| t	dd|||d  q|dkr| d}	qt
|d| }	|d|= n|r| td	|  nd }	|||	||  d S )
Nr   rT   r    TF.%(option)s option requires %(number)d argument/%(option)s option requires %(number)d argumentsr,   Znumberz%s option does not take a value)popr   insertrH  r  r   r   rz   r
  r   r   r0   r   )
r   r/  r   rF  r   Znext_argZhad_explicit_valuer,   r   r   r   r   r   rD    s6    


zOptionParser._process_long_optc                 C   s   | d}d}d}|dd  D ]}d| }| j|}|d7 }|sJt|| r|t|k rv|d||d   d}|j}	t||	k r| t	dd|	||	d  q|	dkr| d}
qt
|d|	 }
|d|	= nd }
|||
||  |r qqd S )	Nr   Fr    r   TrI  rJ  rK  )rL  r  ro   r   r   rz   rM  r   r
  r   r   r   )r   r/  r   rF  rA  iZchr   r,   r   r   r   r   r   rE    s<    
z OptionParser._process_short_optsc                 C   s&   | j d krtjtjd S | j S d S r   )r%  r;   pathbasenamer   r=  r   r   r   r   get_prog_name  s    
zOptionParser.get_prog_namec                 C   s   | d|  S )Nz%prog)rs   rQ  )r   sr   r   r   expand_prog_name  s    zOptionParser.expand_prog_namec                 C   s   |  | jS r   )rS  ri   r   r   r   r   r    s    zOptionParser.get_descriptionr   c                 C   s   |rt j| t | d S r   )r   stderrwriter   )r   Zstatusr#   r   r   r   r     s    zOptionParser.exitc                 C   s(   |  tj | dd|  |f  d S )Nr6   z%s: error: %s
)print_usager   rT  r   rQ  r$   r   r   r   r
    s    zOptionParser.errorc                 C   s"   | j r| j| | j S dS d S r  )r]   r  r^   rS  r   r   r   r   	get_usage#  s
    
zOptionParser.get_usagec                 C   s   | j rt|  |d d S N)file)r]   printrW  r   rY  r   r   r   rV  *  s    	zOptionParser.print_usagec                 C   s   | j r| | j S dS d S r  )r   rS  r   r   r   r   get_version6  s    zOptionParser.get_versionc                 C   s   | j rt|  |d d S rX  )r   rZ  r\  r[  r   r   r   r   <  s    zOptionParser.print_versionc                 C   s   |d kr| j }||  g }||td |  | jrZ|t| | |d | j	D ]}||
| |d q`|  d|d d S )NZOptionsrf   rO   ry   )r  r   r{   r`   r0   rW   r   r   r  r   r   rX   r4   )r   r  r}   r   r   r   r   r  G  s    


zOptionParser.format_option_helpc                 C   s   | | jS r   )rl   rk   r  r   r   r   rl   X  s    zOptionParser.format_epilogc                 C   sn   |d kr| j }g }| jr*||  d  | jrD|| |d  || | || | d|S re   )	r  r]   r{   rW  ri   rj   r  rl   r4   r  r   r   r   r   [  s    zOptionParser.format_helpc                 C   s    |d krt j}||   d S r   )r   stdoutrU  r   r[  r   r   r   r   g  s    zOptionParser.print_help)T)NN)r   N)N)N)N)N)N)*r   r(   r)   r.  r   r%   r  r   r,  r-  r(  r)  r$  r3  r4  r5  r6  r7  r8  r:  r;  r<  r>  rC  r@  r?  rH  rD  rE  rQ  rS  r  r   r
  rW  rV  r\  r   r  rl   r   r   r   r   r   r   r   R  s`   F
"

	

'3	$)





c                    sZ    |kr S  fdd|  D }t|dkr6|d S |sDt n|  t |d S )Nc                    s   g | ]}|  r|qS r   )r  )rv   ZwordrR  r   r   rx     s    
z!_match_abbrev.<locals>.<listcomp>r    r   )r   rz   r   sortr1   )rR  Zwordmapr2   r   r^  r   rG  t  s    
rG  )&__version____all__Z__copyright__r   r;   rb   r   r   r   ImportErrorr0   	Exceptionr   r   r   r   r   r1   r	   r
   r   r   r   r   r   r   r   r   rq   r   r   r   r   r   r   r   rG  r   r   r   r   r   <module>   s    

 P



  uA =    &