a
    ze                     @   s  d Z g d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	yf   dd	 Zd
d ZY n0 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d(d) Zd*ZG d+d, d,Zd-Zd.ZG d/d0 d0Z G d1d2 d2Z!G d3d4 d4e!Z"G d5d6 d6e!Z#d7d8 Z$eZ%dS )9z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/lib/python3.9/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singular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   r   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   r   c                   @   s   e Zd ZdS )r   Nr   r)   r*   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )r   Nr.   r   r   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   )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   r   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/   r3   r   r   r   r&      s    zAmbiguousOptionError.__init__c                 C   s   t d| jd| jf S )Nzambiguous option: %s (%s?), )r1   r/   joinr3   r   r   r   r   r'      s    zAmbiguousOptionError.__str__Nr(   r   r   r   r   r2      s   r2   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 u rJzttjd }W n ttfy@   d}Y n0 |d8 }|| _t|t	|d |d  | _
| _d| _d| _d | _|| _d| _i | _d| _d| _d S )	N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   r;   rE   rA   rI   r   r   r   r&      s&    

zHelpFormatter.__init__c                 C   s
   || _ d S r   )r:   r   r:   r   r   r   
set_parser   s    zHelpFormatter.set_parserc                 C   s&   |dvrt d| d| d | _d S )N)  z/invalid metavar delimiter for short options: %r%s)r@   rL   r   delimr   r   r   set_short_opt_delimiter   s
    z%HelpFormatter.set_short_opt_delimiterc                 C   s&   |dvrt d| d| d | _d S )N)=rR   z.invalid metavar delimiter for long options: %rrS   )r@   rM   rT   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   rF   r;   rG   r   r   r   r   indent   s    zHelpFormatter.indentc                 C   s"   |  j | j8  _ |  jd8  _d S r   rY   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 r\   r]   r   headingr   r   r   format_heading  s    zHelpFormatter.format_headingc                 C   s.   t | j| j d}d| j }tj||||dS )N   rR   )initial_indentsubsequent_indent)rC   rA   rF   textwrapfill)r   text
text_widthrZ   r   r   r   _format_text  s    
zHelpFormatter._format_textc                 C   s   |r|  |d S dS d S N
rQ   rl   r   descriptionr   r   r   format_description  s    z HelpFormatter.format_descriptionc                 C   s   |rd|  | d S dS d S rm   ro   )r   epilogr   r   r   format_epilog  s    zHelpFormatter.format_epilogc                 C   sP   | j d u s| js|jS | j j|j}|tu s6|d u r<| j}|j| jt	|S r   )
r:   rJ   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 )Nr8   %*s%s
rQ   z	%*s%-*s  r   c                    s   g | ]}d  j d|f qS )r}   rQ   )rD   ).0liner   r   r   
<listcomp>E  s   z/HelpFormatter.format_option.<locals>.<listcomp>r    rn   )rK   rD   rF   lenappendru   r|   rh   wraprH   extendr5   )r   r-   resultoptsZ	opt_widthindent_first	help_text
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   r8   re   )rZ   option_listformat_option_stringsrK   rC   r   rF   option_groupsr[   rB   rE   rD   rA   rH   )r   r:   Zmax_lenopt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   )rL   )r~   Zsoptmetavarr   r   r   r   a  s   z7HelpFormatter.format_option_strings.<locals>.<listcomp>c                    s   g | ]}j | f qS r   )rM   )r~   Zloptr   r   r   r   c  s   r4   )takes_valuer   rx   upper_short_opts
_long_optsrI   r5   )r   r-   Z
short_optsZ	long_optsr   r   r   r   r   ]  s    
z#HelpFormatter.format_option_stringsN)r   r)   r*   rz   r&   rP   rV   rX   rZ   r[   ra   rd   rl   rr   rt   r|   r   r   r   r   r   r   r   r	      s    +
#r	   c                   @   s&   e Zd ZdddZdd Zd	d
 ZdS )r
   r8      Nr    c                 C   s   t | |||| d S r   r	   r&   rN   r   r   r   r&   t  s    
zIndentedHelpFormatter.__init__c                 C   s   t d| S )Nz
Usage: %s
)r1   r_   r   r   r   ra   |  s    z"IndentedHelpFormatter.format_usagec                 C   s   d| j d|f S )Nz%*s%s:
rQ   )rF   rb   r   r   r   rd     s    z$IndentedHelpFormatter.format_heading)r8   r   Nr    r   r)   r*   r&   ra   rd   r   r   r   r   r
   p  s       
r
   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   rN   r   r   r   r&     s    
zTitledHelpFormatter.__init__c                 C   s   d|  td|f S )Nz%s  %s
ZUsage)rd   r1   r_   r   r   r   ra     s    z TitledHelpFormatter.format_usagec                 C   s   d|d| j  t| f S )Nz%s
%s
z=-)rG   r   rb   r   r   r   rd     s    z"TitledHelpFormatter.format_heading)r   r   Nr   r   r   r   r   r   r     s       
r   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 )	Nr8   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   sF   t | j \}}z
||W S  ty@   ttd|||f Y n0 d S )Nzoption %s: invalid %s value: %r)_builtin_cvtr   r@   r   r1   )r-   r   valueZcvtZwhatr   r   r   check_builtin  s    
r   c                 C   s:   || j v r|S dtt| j }ttd|||f d S )Nr4   z.option %s: invalid choice: %r (choose from %s))choicesr5   mapreprr   r1   )r-   r   r   r   r   r   r   r     s    
r   )ZNOZDEFAULTc                   @   s   e Zd Zg d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$d% Zd&d' Zd(d) Zd*d+ Z d,d- Z!d	S ).r   )actionr   rx   defaultnargsconstr   callbackcallback_argscallback_kwargsru   r   )
storestore_const
store_truestore_falser   append_constcountr   ru   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   )r~   r   r   r   r   r   K      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 )	Nr8   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)r   r   r   r   r   )r   r   r   r   r   r   r   P  s2    zOption._set_opt_stringsc                 C   sv   | j D ]F}||v r*t| |||  ||= q|dkr@t| |t qt| |d  q|rrt| }tdd| | d S )Nr   zinvalid keyword arguments: %sr4   )ATTRSsetattrry   sortedkeysr   r5   )r   r   attrr   r   r   r   e  s    
zOption._set_attrsc                 C   s2   | j d u rd| _ n| j | jv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 u r0| j| jv r| jd ur(d| _ qd| _ n^t| j t rF| j j| _ | j dkrVd| _ | j | jvrrtd| j  | | j| jv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 u r td| qnt| jttfsntdtt | jdd  | n| jd u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v p| jd u}| jd u rX|rX| jrH| jd dd  dd| _n| jd d | _d S )Nr   r8   r   r1   r    )r   STORE_ACTIONSr   rx   r   r{   r   )r   r   r   r   r   _check_dest  s    zOption._check_destc                 C   s*   | j | jvr&| jd u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v r| jd u r8d| _n| jd u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 urJt| jtsJtd| j | | jd urt| jtstd| j | nB| jd urtd| j | | jd urtd| | jd u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  sL    









zOption._check_callbackc                 C   s   d | j| j S )N/)r5   r   r   r   r   r   r   r'     s    zOption.__str__c                 C   s
   | j d u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 u r|S || ||S d S r   )TYPE_CHECKERrw   r   )r   r   r   r   r   r   r   check_value  s    zOption.check_valuec                    s:   |d ur6j dkr |S t fdd|D S d S )Nr    c                    s   g | ]}  |qS r   )r   )r~   vr   r   r   r   r     r   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   rx   )r   r   r   valuesr:   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| |||g|R i | 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   ru   r   zunknown action %r)r   r   ensure_valuer   r   r   r   
print_helpexitprint_versionr@   r   )	r   r   rx   r   r   r   r:   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     sR   
			r   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   rv   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 ](}||v r|| }|d u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 u 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   


r   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_handlerrq   r   r   r   r&     s    
zOptionContainer.__init__c                 C   s   i | _ i | _i | _d S r   
_short_opt	_long_optrv   r   r   r   r   _create_option_mappings  s    z'OptionContainer._create_option_mappingsc                 C   s   |j | _ |j| _|j| _d S r   r  rO   r   r   r   _share_option_mappings  s    z&OptionContainer._share_option_mappingsc                 C   s   |dv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   rq   rp   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v r
||| j| f q
|jD ]"}|| jv 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): %sr4   c                 S   s   g | ]}|d  qS )r   r   )r~   cor   r   r   r     r   z3OptionContainer._check_conflict.<locals>.<listcomp>r  r   )r   r  r   r   r  r  r   r5   
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|i |}n8t|dkrP|sP|d }t |tsXtd| ntd| | | j| | |_	|j
D ]}|| j|< qz|jD ]}|| j|< q|jd ur|jtur|j| j|j< n|j| jvrd | j|j< |S )Nr   r    znot an Option instance: %rinvalid arguments)r   r+   r  r   r   r   r#  r   r   r"  r   r  r   r  rx   r   ry   rv   )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  rw   r  r0   r   r   r   
get_option  s    
zOptionContainer.get_optionc                 C   s   || j v p|| jv S r   )r  r  r0   r   r   r   
has_option  s    
zOptionContainer.has_optionc                 C   sn   | j |}|d u r | j|}|d u r4td| |jD ]}| j |= q:|jD ]}| j|= qN|jj| d S )Nzno such option %r)	r  rw   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ur||| qd|S NrQ   )r   ru   r   r   r   r5   )r   	formatterr   r-   r   r   r   format_option_help  s    

z"OptionContainer.format_option_helpc                 C   s   | |  S r   )rr   r  r   r+  r   r   r   rr   (  s    z"OptionContainer.format_descriptionc                 C   s:   g }| j r|| | | jr0|| | d|S )Nrn   )rq   r   rr   r   r,  r5   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,  rr   r/  r   r   r   r   r   x  s     			r   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   )r:   r   r&   r  r  title)r   r:   r0  rq   r   r   r   r&   6  s
    zOptionGroup.__init__c                 C   s   g | _ | | j d S r   )r   r  r:   r   r   r   r   r  <  s    zOptionGroup._create_option_listc                 C   s
   || _ d S r   )r0  )r   r0  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   )rd   r0  rZ   r   r/  r[   r.  r   r   r   r/  J  s
    zOptionGroup.format_help)N)r   r)   r*   r&   r  r1  r  r/  r   r   r   r   r   4  s
   
r   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 u r@t }|| _| j	|  |
| _
| j||d |   d S )NT)add_help)r   r&   	set_usageprogr   allow_interspersed_argsprocess_default_valuesr
   r+  rP   rs   _populate_option_list_init_parsing_state)r   r`   r   r  r   r  rq   r+  Zadd_help_optionr4  rs   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--helpru   zshow this help message and exitr   ru   r%  r1   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 exitr9  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   r2  r   r   r   r7    s    
z"OptionParser._populate_option_listc                 C   s   d | _ d | _d | _d S r   )rargslargsr   r   r   r   r   r8    s    z OptionParser._init_parsing_statec                 C   sL   |d u rt d| _n4|tu r$d | _n$| drB|dd  | _n|| _d S )Nz%prog [options]zusage:    )r1   r`   r   r   r   r_   r   r   r   r3    s    zOptionParser.set_usagec                 C   s
   d| _ d S )NTr5  r   r   r   r   enable_interspersed_args  s    z%OptionParser.enable_interspersed_argsc                 C   s
   d| _ d S )NFrA  r   r   r   r   disable_interspersed_args  s    z&OptionParser.disable_interspersed_argsc                 C   s
   || _ d S r   )r6  )r   r   r   r   r   set_process_default_values  s    z'OptionParser.set_process_default_valuesc                 C   s   || j |< d S r   )rv   )r   rx   r   r   r   r   set_default  s    zOptionParser.set_defaultc                 K   s   | j | d S r   )rv   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   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   )r6  r   rv   copyrH  rw   rx   r   r+   r   r   )r   rv   r-   r   r/   r   r   r   get_default_values  s    


zOptionParser.get_default_valuesc                 O   s   t |d tr&t| g|R i |}nJt|dkrh|sh|d }t |tsTtd| |j| urptdntd| j| |S )Nr   r    znot an OptionGroup instance: %rz"invalid OptionGroup (wrong parser)r$  )	r   r+   r   r   r   r:   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| ur,|jS d S r   )r  rw   r  r"  )r   r/   r-   r   r   r   get_option_group;  s    
zOptionParser.get_option_groupc                 C   s&   |d u 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 u r|  }|| _g  | _}|| _z| |||}W n6 ttfyx } z| t	| W Y d }~n
d }~0 0 || }| 
||S r   )rN  rJ  r>  r?  r   _process_argsr   r   r  r+   check_values)r   r   r   r>  r?  stoperrr   r   r   
parse_argsK  s    

$zOptionParser.parse_argsc                 C   s   ||fS r   r   )r   r   r   r   r   r   rP  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   r8   r    r   )_process_long_optr   _process_short_optsr5  r   )r   r?  r>  r   argr   r   r   rO    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|v 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   rW   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   insertrX  r  r   r   r   r  r   r   r1   r   )
r   r>  r   rV  r   Znext_argZhad_explicit_valuer-   r   r   r   r   r   rT    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   TrY  rZ  r[  )r\  r  rw   r   r   r   r]  r   r  r   r   r   )r   r>  r   rV  rQ  iZchr   r-   r   r   r   r   r   rU    s<    
z OptionParser._process_short_optsc                 C   s&   | j d u rtjtjd S | j S d S r   )r4  r=   pathbasenamer  rM  r   r   r   r   get_prog_name  s    
zOptionParser.get_prog_namec                 C   s   | d|  S )Nz%prog)r{   ra  )r   sr   r   r   expand_prog_name  s    zOptionParser.expand_prog_namec                 C   s   |  | jS r   )rc  rq   r   r   r   r   r    s    zOptionParser.get_descriptionr   c                 C   s   |rt j| t | d S r   )r  stderrwriter   )r   statusr$   r   r   r   r     s    zOptionParser.exitc                 C   s(   |  tj | dd|  |f  d S )Nr8   z%s: error: %s
)print_usager  rd  r   ra  r%   r   r   r   r    s    zOptionParser.errorc                 C   s"   | j r| j| | j S dS d S r*  )r`   r+  ra   rc  r   r   r   r   	get_usage#  s
    
zOptionParser.get_usagec                 C   s   | j rt|  |d d S N)file)r`   printrh  r   rj  r   r   r   rg  *  s    	zOptionParser.print_usagec                 C   s   | j r| | j S dS d S r*  )r   rc  r   r   r   r   get_version6  s    zOptionParser.get_versionc                 C   s   | j rt|  |d d S ri  )r   rk  rm  rl  r   r   r   r   <  s    zOptionParser.print_versionc                 C   s   |d u r| j }||  g }||td |  | jrZ|t| | |d | j	D ]}||
| |d q`|  d|d d S )NZOptionsrn   rQ   r   )r+  r   r   rd   r1   rZ   r   r   r,  r   r/  r[   r5   )r   r+  r   r   r   r   r   r,  G  s    


zOptionParser.format_option_helpc                 C   s   | | jS r   )rt   rs   r-  r   r   r   rt   X  s    zOptionParser.format_epilogc                 C   sn   |d u r| j }g }| jr*||  d  | jrD|| |d  || | || | d|S rm   )	r+  r`   r   rh  rq   rr   r,  rt   r5   r.  r   r   r   r/  [  s    zOptionParser.format_helpc                 C   s    |d u rt j}||   d S r   )r  stdoutre  r/  rl  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<  r7  r8  r3  rB  rC  rD  rE  rF  rH  rJ  rK  rL  rN  rS  rP  rO  rX  rT  rU  ra  rc  r  r   r  rh  rg  rm  r   r,  rt   r/  r   r   r   r   r   r   R  s`   F
"

	

'3	$)





r   c                    sZ    |v 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   )r~   Zwordrb  r   r   r     s   
z!_match_abbrev.<locals>.<listcomp>r    r   )r   r   r   sortr2   )rb  Zwordmapr3   r   ro  r   rW  t  s    
rW  )&__version____all__Z__copyright__r  r=   rh   r   r   r   ImportErrorr1   	Exceptionr   r   r   r   r   r2   r	   r
   r   r   r   r   r   r   r   r   ry   r   r   r   r   r   r   r   rW  r   r   r   r   r   <module>   s^    

 P



  uA =    &