o
     JAf                     @   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	y4   dd	 Zd
d ZY nw 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.10/optparse.py_reprO      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   
   || _ d S r   msgr   r&   r   r   r   __init__h      
zOptParseError.__init__c                 C      | j S r   r%   r   r   r   r   __str__k      zOptParseError.__str__Nr   
__module____qualname__r(   r+   r   r   r   r   r   g   s    r   c                   @      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 )Nzoption %s: %s)r2   r&   r   r   r   r   r+   y   s   zOptionError.__str__Nr-   r   r   r   r   r   o   s    r   c                   @      e Zd ZdS )r   Nr   r.   r/   r   r   r   r   r          r   c                   @   r4   )r   Nr5   r   r   r   r   r      r6   r   c                   @   r0   )r   c                 C   r$   r   )opt_strr   r7   r   r   r   r(      r)   zBadOptionError.__init__c                 C   s   t d| j S )Nzno such option: %s)_r7   r   r   r   r   r+         zBadOptionError.__str__Nr-   r   r   r   r   r      s    r   c                   @   r0   )AmbiguousOptionErrorc                 C   s   t | | || _d S r   )r   r(   possibilities)r   r7   r<   r   r   r   r(      s   
zAmbiguousOptionError.__init__c                 C   s   t d| jd| jf S )Nzambiguous option: %s (%s?), )r9   r7   joinr<   r   r   r   r   r+      s   zAmbiguousOptionError.__str__Nr-   r   r   r   r   r;      s    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	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 r%z	ttjd }W n ttfy    d}Y nw |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   rD   rN   rJ   rR   r   r   r   r(      s(   

zHelpFormatter.__init__c                 C   r$   r   )rC   r   rC   r   r   r   
set_parser   r)   zHelpFormatter.set_parserc                 C   &   |dvr
t d| d| d | _d S )N)  z/invalid metavar delimiter for short options: %r%s)rI   rU   r   delimr   r   r   set_short_opt_delimiter   
   z%HelpFormatter.set_short_opt_delimiterc                 C   rZ   )N)=r\   z.invalid metavar delimiter for long options: %rr]   )rI   rV   r^   r   r   r   set_long_opt_delimiter   ra   z$HelpFormatter.set_long_opt_delimiterc                 C   s"   |  j | j7  _ |  jd7  _d S r    rO   rD   rP   r   r   r   r   indent   s   zHelpFormatter.indentc                 C   s"   |  j | j8  _ |  jd8  _d S r    rd   r   r   r   r   dedent   s   zHelpFormatter.dedentc                 C      t dNzsubclasses must implementNotImplementedErrorr   usager   r   r   format_usage      zHelpFormatter.format_usagec                 C   rg   rh   ri   r   headingr   r   r   format_heading  rn   zHelpFormatter.format_headingc                 C   s0   	 t | j| j d}d| j }tj||||dS )N   r\   )initial_indentsubsequent_indent)rL   rJ   rO   textwrapfill)r   text
text_widthre   r   r   r   _format_text  s   
zHelpFormatter._format_textc                 C   s   |r	|  |d S dS N
r[   ry   r   descriptionr   r   r   format_description  s   z HelpFormatter.format_descriptionc                 C   s   |rd|  | d S dS rz   r|   )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 s|d u r| j}|j| jt	|S r   )
rC   rS   helpdefaultsgetdest
NO_DEFAULTNO_DEFAULT_VALUEreplacer1   )r   r3   Zdefault_valuer   r   r   expand_default  s   zHelpFormatter.expand_defaultc                    s   g } j | } j j d }t||kr!d 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rh|d
 d|S )NrA   %*s%s
r[   z	%*s%-*s  r   c                    s   g | ]
}d  j d|f qS )r   r[   )rM   ).0liner   r   r   
<listcomp>E  s    z/HelpFormatter.format_option.<locals>.<listcomp>r!   r{   )rT   rM   rO   lenappendr   r   ru   wraprQ   extendr>   )r   r3   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 ]}|jD ]}| |}|| j|< t|t|| j }q,q'|   |   t	|d | j
| _t| j| j d| _d S )Nr   rA   rr   )re   option_listformat_option_stringsrT   rL   r   rO   option_groupsrf   rK   rN   rM   rJ   rQ   )r   rC   Zmax_lenoptstringsgroupr   r   r   store_option_stringsK  s"   






z"HelpFormatter.store_option_stringsc                    sv   	 |  r$|jp|j   fdd|jD } fdd|jD }n|j}|j}jr2|| }n|| }d|S )Nc                       g | ]	}j | f qS r   )rU   )r   Zsoptmetavarr   r   r   r   a      z7HelpFormatter.format_option_strings.<locals>.<listcomp>c                    r   r   )rV   )r   Zloptr   r   r   r   c  r   r=   )takes_valuer   r   upper_short_opts
_long_optsrR   r>   )r   r3   Z
short_optsZ	long_optsr   r   r   r   r   ]  s   

z#HelpFormatter.format_option_stringsN)r   r.   r/   r   r(   rY   r`   rc   re   rf   rm   rq   ry   r   r   r   r   r   r   r   r   r   r   r	      s$    )
#r	   c                   @   s0   e Zd Z	 				dddZdd Zd	d
 ZdS )r
   rA      Nr!   c                 C      t | |||| d S r   r	   r(   rW   r   r   r   r(   t     
zIndentedHelpFormatter.__init__c                 C   s   t d| S )Nz
Usage: %s
)r9   rk   r   r   r   rm   |     z"IndentedHelpFormatter.format_usagec                 C   s   d| j d|f S )Nz%*s%s:
r[   )rO   ro   r   r   r   rq        z$IndentedHelpFormatter.format_heading)rA   r   Nr!   r   r.   r/   r(   rm   rq   r   r   r   r   r
   p      
r
   c                   @   s0   e Zd Z	 				d
ddZdd Zdd	 ZdS )r   r   r   Nc                 C   r   r   r   rW   r   r   r   r(     r   zTitledHelpFormatter.__init__c                 C   s   d|  td|f S )Nz%s  %s
ZUsage)rq   r9   rk   r   r   r   rm     r   z TitledHelpFormatter.format_usagec                 C   s   d|d| j  t| f S )Nz%s
%s
z=-)rP   r   ro   r   r   r   rq     s   z"TitledHelpFormatter.format_heading)r   r   Nr   r   r   r   r   r   r     r   r   c                 C   sh   | d d   dkrd}n"| d d   dkr"d}| dd  p d} n| d d dkr-d}nd}|| |S )	NrA   0x   Z0b0r!      
   )lower)valtyperadixr   r   r   
_parse_num  s   
r   c                 C   s
   t | tS r   )r   rE   )r   r   r   r   
_parse_int  r)   r   Zintegerzfloating-pointcomplex)rE   longfloatr   c                 C   s>   t | j \}}z||W S  ty   ttd|||f w )Nzoption %s: invalid %s value: %r)_builtin_cvtr   rI   r   r9   )r3   r   valueZcvtZwhatr   r   r   check_builtin  s   
r   c                 C   s6   || j v r|S dtt| j }ttd|||f )Nr=   z.option %s: invalid choice: %r (choose from %s))choicesr>   mapreprr   r9   )r3   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   r   defaultnargsconstr   callbackcallback_argscallback_kwargsr   r   )
storestore_const
store_truestore_falser   append_constcountr   r   version)r   r   r   r   r   r   r   )r   r   r   )r   r   )r   r   )stringrE   r   r   r   choice)rE   r   r   r   r   Nc                 O   sB   g | _ g | _| |}| | | | | jD ]}||  qd 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 ]J}t |dk rtd| | t |dkr1|d dkr#|d dks*td| | | j| q|dd dkr?|d dksFtd| | | j| qd S )	NrA   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  s4   zOption._set_opt_stringsc                 C   sv   | j D ]#}||v rt| |||  ||= q|dkr t| |t qt| |d  q|r9t| }tdd| | d S )Nr   zinvalid keyword arguments: %sr=   )ATTRSsetattrr   sortedkeysr   r>   )r   r   attrr   r   r   r   e  s   
zOption._set_attrsc                 C   s4   | j d u r
d| _ d S | 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 r| j| jv r| jd urd| _ d S d| _ d S d S t| j t r'| j j| _ | j dkr/d| _ | j | jvr=td| j  | | j| jvrKtd| j | d S )Nr   r   r1   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r*| jd u rtd| t| jttfs(tdtt | jdd  | d S | jd ur7t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listr1   splitr   r   r   r   _check_choice  s$   



zOption._check_choicec                 C   sf   | j | jv p
| jd u}| jd u r/|r1| jr%| jd dd  dd| _d S | jd d | _d S d S d S )Nr   rA   r   r9   r!   )r   STORE_ACTIONSr   r   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 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   sB   | j | jv r| jd u rd| _d S d S | jd urt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r<t| jstd| j | | jd ur%t| jts%td| j | | jd ur8t| jts:td| j | d S d S | jd urItd| j | | jd urStd| | jd ur]t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  sP   









zOption._check_callbackc                 C   s   d | j| j S )N/)r>   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     r)   zOption.takes_valuec                 C   s   | j r| j d S | j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 r   )TYPE_CHECKERr   r   )r   r   r   r   r   r   r   check_value  s   zOption.check_valuec                    s:   |d ur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     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   r   )r   r   r   valuesrC   r   r   r   process  s   zOption.processc           	      C   sH  |dkrt ||| dS |dkrt ||| j dS |dkr%t ||d dS |dkr1t ||d dS |dkr@||g | dS |dkrP||g | j dS |d	krbt ||||d
d  dS |dkr| jpjd}| jpoi }| j| |||g|R i | dS |dkr|  |  dS |dkr|	  |  dS t
d| j )Nr   r   r   Tr   Fr   r   r   r   r!   r   r   r   r   zunknown action %r)r   r   ensure_valuer   r   r   r   
print_helpexitprint_versionrI   r   )	r   r   r   r   r   r   rC   argskwargsr   r   r   r     sF   


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     sV    
			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 d S r   )itemsr   )r   r   r   r   r   r   r   r(   9  s
   zValues.__init__c                 C   s
   t | jS r   )r1   __dict__r   r   r   r   r+   >  r)   zValues.__str__c                 C   s.   t |tr| j|jkS t |tr| j|kS tS r   )r   r   r
  r   NotImplemented)r   otherr   r   r   __eq__C  s
   


zValues.__eq__c                 C   s8   	 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|  | d S |dkr| | d S td| )NcarefulZloosezinvalid update mode: %r)r  r  rI   )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_valuer   )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_handlerr~   r   r   r   r(     s   
zOptionContainer.__init__c                 C   s   i | _ i | _i | _d S r   
_short_opt	_long_optr   r   r   r   r   _create_option_mappings  s   
z'OptionContainer._create_option_mappingsc                 C   s   |j | _ |j| _|j| _d S r   r(  rX   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)rI   r'  )r   handlerr   r   r   r%    s   
z$OptionContainer.set_conflict_handlerc                 C   r$   r   r~   r}   r   r   r   r&    r)   zOptionContainer.set_descriptionc                 C   r*   r   r0  r   r   r   r   get_description  r,   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 r+||| j| f q|rv| j}|dkrDtdddd |D  ||dkrx|D ]/\}}|dr^|j	| | j|= n
|j 	| | j|= |j su|jsu|j
j	| qJd S d S d S )Nr-  z conflicting option string(s): %sr=   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   r>   
startswithremove	containerr   )r   r3   Zconflict_optsr   r/  Zc_optionr   r   r   _check_conflict  s>   





zOptionContainer._check_conflictc                 O   s   	 t |d tr| j|i |}nt|dkr)|s)|d }t |ts(td| ntd| | | j| | |_	|j
D ]}|| j|< q>|jD ]}|| j|< qI|jd urp|jturd|j| j|j< |S |j| jvrpd | j|j< |S )Nr   r!   znot an Option instance: %rinvalid arguments)r   r1   r$  r   r   r   r7  r   r   r6  r   r)  r   r*  r   r   r   r   )r   r  r  r3   r   r   r   r   
add_option  s.   





zOptionContainer.add_optionc                 C   s   |D ]}|  | qd S r   )r9  )r   r   r3   r   r   r   add_options  s   zOptionContainer.add_optionsc                 C   s   | j |p| j|S r   )r)  r   r*  r8   r   r   r   
get_option  s   
zOptionContainer.get_optionc                 C   s   || j v p	|| jv S r   )r)  r*  r8   r   r   r   
has_option  s   
zOptionContainer.has_optionc                 C   sn   | j |}|d u r| j|}|d u rtd| |jD ]}| j |= q|jD ]}| j|= q'|jj| d S )Nzno such option %r)	r)  r   r*  rI   r   r   r6  r   r5  )r   r7   r3   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 Nr[   )r   r   r   r   r   r>   )r   	formatterr   r3   r   r   r   format_option_help  s   


z"OptionContainer.format_option_helpc                 C   s   | |  S r   )r   r1  r   r?  r   r   r   r   (  r:   z"OptionContainer.format_descriptionc                 C   s:   g }| j r|| | | jr|| | d|S )Nr{   )r~   r   r   r   r@  r>   r   r?  r   r   r   r   format_help+  s   
zOptionContainer.format_helpN)r   r.   r/   r(   r+  r,  r%  r&  r1  r2  r7  r9  r:  r;  r<  r=  r@  r   rC  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   )rC   r   r(   r$  r'  title)r   rC   rD  r~   r   r   r   r(   6  s
   
zOptionGroup.__init__c                 C   s   g | _ | | j d S r   )r   r,  rC   r   r   r   r   r#  <  s   zOptionGroup._create_option_listc                 C   r$   r   )rD  )r   rD  r   r   r   	set_title@  r)   zOptionGroup.set_titlec                 C   s   	 t |  | `d S r   )r   r2  r   r   r   r   r   r2  C  s   
zOptionGroup.destroyc                 C   s0   | | j}|  |t| |7 }|  |S r   )rq   rD  re   r   rC  rf   rB  r   r   r   rC  J  s
   zOptionGroup.format_helpr   )r   r.   r/   r(   r#  rE  r2  rC  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$dRdEdFZ%dRdGdHZ&dIdJ Z'dRdKdLZ(dRdMdNZ)dS )Sr   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?  rY   r   _populate_option_list_init_parsing_state)r   rl   r   r$  r   r'  r~   r?  Zadd_help_optionrH  r   r   r   r   r(     s"   
zOptionParser.__init__c                 C   s0   	 t |  | jD ]}|  q	| `| `| `d S r   )r   r2  r   r   r?  )r   r   r   r   r   r2    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--helpr   zshow this help message and exitr   r   r9  r9   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 exitrM  rN  r   r   r   r   _add_version_option  s   
z OptionParser._add_version_optionc                 C   sB   | j r	| | j  |r| | | jr|   |r|   d S d S r   )standard_option_listr:  r   rP  rO  )r   r   rF  r   r   r   rK    s   
z"OptionParser._populate_option_listc                 C   s   d | _ d | _d | _d S r   )rargslargsr   r   r   r   r   rL    s   
z OptionParser._init_parsing_statec                 C   sR   |d u rt d| _d S |tu rd | _d S | dr$|dd  | _d S || _d S )Nz%prog [options]zusage:    )r9   rl   r   r   r4  rk   r   r   r   rG    s   

zOptionParser.set_usagec                 C      	 d| _ d S )NTrI  r   r   r   r   enable_interspersed_args     
z%OptionParser.enable_interspersed_argsc                 C   rU  )NFrV  r   r   r   r   disable_interspersed_args  rX  z&OptionParser.disable_interspersed_argsc                 C   r$   r   )rJ  )r   r  r   r   r   set_process_default_values  r)   z'OptionParser.set_process_default_valuesc                 C   s   || j |< d S r   )r   )r   r   r   r   r   r   set_default  r:   zOptionParser.set_defaultc                 K   s   | j | d S r   )r   r  )r   r  r   r   r   set_defaults  r   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 ]}||j}t|tr+|	 }|
||||j< qt|S r   )rJ  r   r   copyr^  r   r   r   r1   r   r   )r   r   r3   r   r7   r   r   r   get_default_values  s   


zOptionParser.get_default_valuesc                 O   s   t |d trt| g|R i |}n%t|dkr4|s4|d }t |ts*td| |j| ur3tdntd| j| |S )Nr   r!   znot an OptionGroup instance: %rz"invalid OptionGroup (wrong parser)r8  )	r   r1   r   r   r   rC   rI   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)  r   r*  r6  )r   r7   r3   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 r    )r  argv)r   r  r   r   r   	_get_argsE  s   zOptionParser._get_argsc              
   C   s   	 |  |}|d u r|  }|| _g  | _}|| _z	| |||}W n ttfy= } z| t	| W Y d }~nd }~ww || }| 
||S r   )rd  r`  rR  rS  r   _process_argsr   r   r-  r1   check_values)r   r  r   rR  rS  stoperrr   r   r   
parse_argsK  s   

zOptionParser.parse_argsc                 C   s
   	 ||fS r   r   )r   r   r  r   r   r   rf  r  s   
zOptionParser.check_valuesc                 C   s   	 |rF|d }|dkr|d= d S |dd dkr|  || n#|d d dkr4t|dkr4| || n| jr@|| |d= nd S |sd S d S )Nr   r   rA   r!   r   )_process_long_optr   _process_short_optsrI  r   )r   rS  rR  r   argr   r   r   re    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 r|dd\}}|d| d}n|}d}| |}| j| }| r\|j}t||k rD| t	dd|||d  n&|dkrN| d}	nt
|d| }	|d|= n|rh| td	|  nd }	|||	||  d S )
Nr   rb   r!   TF.%(option)s option requires %(number)d argument/%(option)s option requires %(number)d argumentsr3   Znumberz%s option does not take a value)popr   insertrn  r*  r   r   r   r-  r   r   r9   r  )
r   rR  r   rl  r   Znext_argZhad_explicit_valuer3   r   r   r   r   r   rj    s6   


zOptionParser._process_long_optc                 C   s   | d}d}d}|dd  D ]k}d| }| j|}|d7 }|s%t|| rk|t|k r;|d||d   d}|j}	t||	k rS| t	dd|	||	d  n|	dkr]| d}
nt
|d|	 }
|d|	= nd }
|||
||  |rz d S qd S )	Nr   Fr!   r   Tro  rp  rq  )rr  r)  r   r   r   r   rs  r   r-  r   r   r  )r   rR  r   rl  rg  iZchr   r3   r   r   r   r   r   rk    s@   
z OptionParser._process_short_optsc                 C   s"   | j d u rtjtjd S | j S r   )rH  rF   pathbasenamer  rc  r   r   r   r   get_prog_name  s   
zOptionParser.get_prog_namec                 C   s   | d|  S )Nz%prog)r   rw  )r   sr   r   r   expand_prog_name  r   zOptionParser.expand_prog_namec                 C   s   |  | jS r   )ry  r~   r   r   r   r   r1    r   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 )NrA   z%s: error: %s
)print_usager  rz  r  rw  r'   r   r   r   r-    s   zOptionParser.errorc                 C   s   | j r| j| | j S dS r>  )rl   r?  rm   ry  r   r   r   r   	get_usage#  s
   
zOptionParser.get_usagec                 C       	 | j rt|  |d d S d S N)file)rl   printr~  r   r  r   r   r   r}  *  s   zOptionParser.print_usagec                 C   s   | j r	| | j S dS r>  )r   ry  r   r   r   r   get_version6  s   zOptionParser.get_versionc                 C   r  r  )r   r  r  r  r   r   r   r  <  s   zOptionParser.print_versionc                 C   s   |d u r| j }||  g }||td |  | jr-|t| | |d | j	D ]}||
| |d q0|  d|d d S )NZOptionsr{   r[   r   )r?  r   r   rq   r9   re   r   r   r@  r   rC  rf   r>   )r   r?  r   r   r   r   r   r@  G  s   


zOptionParser.format_option_helpc                 C   s   | | jS r   )r   r   rA  r   r   r   r   X  r   zOptionParser.format_epilogc                 C   sn   |d u r| j }g }| jr||  d  | jr"|| |d  || | || | d|S rz   )	r?  rl   r   r~  r~   r   r@  r   r>   rB  r   r   r   rC  [  s   
zOptionParser.format_helpc                 C   s"   	 |d u rt j}||   d S r   )r  stdoutr{  rC  r  r   r   r   r  g  s   zOptionParser.print_help)T)NN)r   Nr   )*r   r.   r/   rQ  r   r(   r2  r#  rO  rP  rK  rL  rG  rW  rY  rZ  r[  r\  r^  r`  ra  rb  rd  ri  rf  re  rn  rj  rk  rw  ry  r1  r  r-  r~  r}  r  r  r@  r   rC  r  r   r   r   r   r   R  sd    D
"

	

'3	$)





r   c                    sV   	  |v r S  fdd|  D }t|dkr|d S |s"t |  t |)Nc                    s   g | ]	}|  r|qS r   )r4  )r   Zwordrx  r   r   r     s    
z!_match_abbrev.<locals>.<listcomp>r!   r   )r   r   r   sortr;   )rx  Zwordmapr<   r   r  r   rm  t  s   
rm  )&__version____all__Z__copyright__r  rF   ru   r   r   r   ImportErrorr9   	Exceptionr   r   r   r   r   r;   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rm  r   r   r   r   r   <module>   sd     
	
 P



  uA =    &