Ë
    V.jRP  ã                  ó¦  — d dl mZ d dlZd dlmZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlZd dlmZ d dlmZ dZ G d„ d«      Z e«       Ze
 G d„ d«      «       Z	 	 	 	 dd„Z G d„ de«      Z G d„ d«      Z G d„ d«      Z G d„ dej>                  «      Z  G d„ dejB                  «      Z"y) é    )ÚannotationsN)Úgettext)ÚAny)ÚCallable)Úcast)Úfinal)ÚList)ÚLiteral)ÚMapping)ÚNoReturn)ÚSequence)Ú
UsageError)Úcheck_ispytestÚfile_or_dirc                  ó   — e Zd Zdd„Zy)ÚNotSetc                 ó   — y)Nz<notset>© ©Úselfs    ú[C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\_pytest/config/argparsing.pyÚ__repr__zNotSet.__repr__   s   € Øó    N©ÚreturnÚstr)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s   „ ôr   r   c                  óð   — e Zd ZU dZdZded<   	 	 dddœ	 	 	 	 	 	 	 dd„Zdd„Z	 d	 	 	 	 	 	 	 dd	„Zdd
„Z		 d	 	 	 	 	 dd„Z
dd„Z	 d	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 dd„Z	 d	 	 	 	 	 dd„Zdef	 	 	 	 	 	 	 	 	 dd„Zy)ÚParserzÄParser for command line arguments and ini-file values.

    :ivar extra_info: Dict of generic param -> value to display in case
        there's an error processing the command line arguments.
    Nú
str | NoneÚprogF©Ú	_ispytestc               ó”   — t        |«       t        d| d¬«      | _        g | _        || _        || _        i | _        g | _        i | _        y )NzCustom optionsT©Úparserr%   )	r   ÚOptionGroupÚ
_anonymousÚ_groupsÚ_processoptÚ_usageÚ_inidictÚ	_ininamesÚ
extra_info)r   ÚusageÚ
processoptr%   s       r   Ú__init__zParser.__init__,   sH   € ô 	�yÔ!Ü%Ð&6¸tÈtÔTˆŒØ*,ˆŒØ%ˆÔØˆŒØ@BˆŒØ$&ˆŒØ*,ˆ�r   c                óZ   — | j                   r|j                  r| j                  |«       y y y ©N)r,   Údest)r   Úoptions     r   ÚprocessoptionzParser.processoption<   s*   € Ø×ÒØ�{Š{Ø× Ñ  Õ(ð ð r   c                ó
  — | j                   D ]  }|j                  |k(  sŒ|c S  t        ||| d¬«      }d}t        | j                   «      D ]  \  }}|j                  |k(  sŒ n | j                   j	                  |dz   |«       |S )a  Get (or create) a named option Group.

        :param name: Name of the option group.
        :param description: Long description for --help output.
        :param after: Name of another group, used for ordering --help output.
        :returns: The option group.

        The returned group object has an ``addoption`` method with the same
        signature as :func:`parser.addoption <pytest.Parser.addoption>` but
        will be shown in the respective group in the output of
        ``pytest --help``.
        Tr'   r   é   )r+   Únamer)   Ú	enumerateÚinsert)r   r;   ÚdescriptionÚafterÚgroupÚiÚgrps          r   ÚgetgroupzParser.getgroupA   s   € ð —\”\ˆEØ�z‰z˜TÓ!Ø’ð "ô ˜D +°dÀdÔKˆØˆÜ §¡Ö-‰FˆAˆsØ�x‰x˜5Ó Ùð .ð 	�‰×Ñ˜A ™E 5Ô)Øˆr   c                ó<   —  | j                   j                  |i |¤Ž y)a  Register a command line option.

        :param opts:
            Option names, can be short or long options.
        :param attrs:
            Same attributes as the argparse library's :meth:`add_argument()
            <argparse.ArgumentParser.add_argument>` function accepts.

        After command line parsing, options are available on the pytest config
        object via ``config.option.NAME`` where ``NAME`` is usually set
        by passing a ``dest`` attribute, for example
        ``addoption("--long", dest="NAME", ...)``.
        N)r*   Ú	addoption)r   ÚoptsÚattrss      r   rE   zParser.addoption[   s   € ð 	"ˆ�‰×!Ñ! 4Ð1¨5Ó1r   c                óä   — ddl m} | j                  «       | _         || j                  «       |D �cg c]  }t	        j
                  |«      ‘Œ }}| j                  j                  ||¬«      S c c}w )Nr   )Útry_argcomplete©Ú	namespace)Ú_pytest._argcompleterI   Ú
_getparserÚ	optparserÚosÚfspathÚ
parse_args)r   ÚargsrK   rI   ÚxÚstrargss         r   ÚparsezParser.parsek   s\   € õ
 	9àŸ™Ó*ˆŒÙ˜Ÿ™Ô'Ù)-Ó.© A”2—9‘9˜Q•<¨ˆÐ.Ø�~‰~×(Ñ(¨¸IÐ(ÓFÐFùò /s   ²A-c                óÊ  — ddl m} t        | | j                  | j                  ¬«      }g | j
                  ¢| j                  ‘}|D ]}  }|j                  sŒ|j                  xs |j                  }|j                  |«      }|j                  D ]4  }|j                  «       }|j                  «       }	 |j                  |i |	¤Ž Œ6 Œ |j                  t        d¬«      }
||
_        |S )Nr   )Úfilescompleter)r#   Ú*)Únargs)rL   rW   ÚMyOptionParserr0   r#   r+   r*   Úoptionsr>   r;   Úadd_argument_groupÚnamesrG   Úadd_argumentÚFILE_OR_DIRÚ	completer)r   rW   rN   Úgroupsr@   ÚdescÚarggroupr7   ÚnÚaÚfile_or_dir_args              r   rM   zParser._getparserw   sÇ   € Ý7ä" 4¨¯©¸t¿y¹yÔIˆ	Ø1�4—<‘<Ð1 §¡Ð1ˆÛˆEØ�}‹}Ø×(Ñ(Ò6¨E¯J©J�Ø$×7Ñ7¸Ó=�Ø#Ÿmœm�FØŸ™›�AØŸ™›�AØ)�H×)Ñ)¨1Ð2°Ó2ñ ,ð	 ð $×0Ñ0´ÀCÐ0ÓHˆð %3ˆÔ!ØÐr   c                óÐ   — | j                  ||¬«      }|j                  j                  «       D ]  \  }}t        |||«       Œ t	        t
        t           t        |t        «      «      S )NrJ   )	rU   Ú__dict__ÚitemsÚsetattrr   r	   r   Úgetattrr_   )r   rR   r7   rK   Úparsedoptionr;   Úvalues          r   Úparse_setoptionzParser.parse_setoptionŠ   sW   € ð —z‘z $°)�zÓ<ˆØ'×0Ñ0×6Ñ6Ö8‰KˆD�%Ü�F˜D %Õ(ð 9ä”Dœ‘Iœw |´[ÓAÓBÐBr   c                ó.   — | j                  ||¬«      d   S )zbParse the known arguments at this point.

        :returns: An argparse namespace object.
        rJ   r   )Úparse_known_and_unknown_args)r   rR   rK   s      r   Úparse_known_argszParser.parse_known_args•   s   € ð ×0Ñ0°ÀÐ0ÓKÈAÑNÐNr   c                ó–   — | j                  «       }|D �cg c]  }t        j                  |«      ‘Œ }}|j                  ||¬«      S c c}w )a  Parse the known arguments at this point, and also return the
        remaining unknown arguments.

        :returns:
            A tuple containing an argparse namespace object for the known
            arguments, and a list of the unknown arguments.
        rJ   )rM   rO   rP   rq   )r   rR   rK   rN   rS   rT   s         r   rp   z#Parser.parse_known_and_unknown_args    sG   € ð —O‘OÓ%ˆ	Ù)-Ó.© A”2—9‘9˜Q•<¨ˆÐ.Ø×)Ñ)¨'¸YÐ)ÓGÐGùò /s   •Ac                ó�   — |dv sJ ‚|t         u rt        |«      }|||f| j                  |<   | j                  j	                  |«       y)aR  Register an ini-file option.

        :param name:
            Name of the ini-variable.
        :param type:
            Type of the variable. Can be:

                * ``string``: a string
                * ``bool``: a boolean
                * ``args``: a list of strings, separated as in a shell
                * ``linelist``: a list of strings, separated by line breaks
                * ``paths``: a list of :class:`pathlib.Path`, separated as in a shell
                * ``pathlist``: a list of ``py.path``, separated as in a shell

            For ``paths`` and ``pathlist`` types, they are considered relative to the ini-file.
            In case the execution is happening without an ini-file defined,
            they will be considered relative to the current working directory (for example with ``--override-ini``).

            .. versionadded:: 7.0
                The ``paths`` variable type.

            .. versionadded:: 8.1
                Use the current working directory to resolve ``paths`` and ``pathlist`` in the absence of an ini-file.

            Defaults to ``string`` if ``None`` or not passed.
        :param default:
            Default value if no ini-file option exists but is queried.

        The value of ini-variables can be retrieved via a call to
        :py:func:`config.getini(name) <pytest.Config.getini>`.
        )NÚstringÚpathsÚpathlistrR   ÚlinelistÚboolN)ÚNOT_SETÚget_ini_default_for_typer.   r/   Úappend)r   r;   ÚhelpÚtypeÚdefaults        r   ÚaddinizParser.addini°   sM   € ðN ÐXÑXÐXÐXØ”gÑÜ.¨tÓ4ˆGà# T¨7Ð3ˆ�‰�dÑØ�‰×Ñ˜dÕ#r   ©NN)r1   r"   r2   z!Callable[[Argument], None] | Noner%   rx   r   ÚNone)r7   ÚArgumentr   r�   ©Ú N)r;   r   r>   r   r?   r"   r   r)   ©rF   r   rG   r   r   r�   r5   )rR   ú Sequence[str | os.PathLike[str]]rK   úargparse.Namespace | Noner   úargparse.Namespace)r   rZ   )rR   r†   r7   rˆ   rK   r‡   r   ú	list[str])rR   r†   rK   r‡   r   z$tuple[argparse.Namespace, list[str]])
r;   r   r|   r   r}   úILiteral['string', 'paths', 'pathlist', 'args', 'linelist', 'bool'] | Noner~   r   r   r�   )r   r   r   Ú__doc__r#   Ú__annotations__r3   r8   rC   rE   rU   rM   rn   rq   rp   ry   r   r   r   r   r!   r!   "   s{  … ñð €Dˆ*Óð !Ø8<ð-ð
  ñ-àð-ð 6ð-ð
 ð-ð 
ó-ó )ð EIðØðØ&)ðØ7Aðà	óó42ð& 04ð
Gà.ð
Gð -ð
Gð 
ó	
Góð. 04ð		Cà.ð	Cð #ð	Cð -ð		Cð
 
ó	Cð 04ð	Oà.ð	Oð -ð	Oð 
ó		Oð 04ðHà.ðHð -ðHð 
.ó	Hð* Øð,$àð,$ð ð,$ðð	,$ð ð,$ð 
ô,$r   r!   c                ó"   — | €y| dv rg S | dk(  ryy)zp
    Used by addini to get the default value for a given ini-option type, when
    default is not supplied.
    r„   )ru   rv   rR   rw   rx   Fr   )r}   s    r   rz   rz   ß   s'   € ð €|ØØ	Ð:Ñ	:Øˆ	Ø	�ŠØàr   c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚArgumentErrorzURaised if an Argument instance is created with invalid or
    inconsistent arguments.c                ó2   — || _         t        |«      | _        y r5   )Úmsgr   Ú	option_id)r   r‘   r7   s      r   r3   zArgumentError.__init__ô   s   € ØˆŒÜ˜V›ˆ�r   c                ój   — | j                   rd| j                   › d| j                  › �S | j                  S )Nzoption ú: )r’   r‘   r   s    r   Ú__str__zArgumentError.__str__ø   s.   € Ø�>Š>Ø˜TŸ^™^Ð,¨B¨t¯x©x¨jÐ9Ð9à—8‘8ˆOr   N)r‘   r   r7   zArgument | strr   r�   r   )r   r   r   r‹   r3   r•   r   r   r   r�   r�   ð   s   „ ñó%ôr   r�   c                  ó8   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zdd„Zy)r‚   z÷Class that mimics the necessary behaviour of optparse.Option.

    It's currently a least effort implementation and ignoring choices
    and integer prefixes.

    https://docs.python.org/3/library/optparse.html#optparse-standard-option-types
    c                óÐ  — || _         g | _        g | _        	 |d   | _        	 |d   | _        | j                  |«       |j                  d«      }|r|| _        y| j                  r(| j                  d   dd j                  dd«      | _        y	 | j                  d   d	d | _        y# t        $ r Y Œ�w xY w# t        $ r Y Œ“w xY w# t        $ r}d
| _        t        d| «      |‚d}~ww xY w)z5Store params in private vars for use in add_argument.r}   r~   r6   r   é   NÚ-Ú_r:   z???zneed a long or short option)Ú_attrsÚ_short_optsÚ
_long_optsr}   ÚKeyErrorr~   Ú_set_opt_stringsÚgetr6   ÚreplaceÚ
IndexErrorr�   )r   r]   rG   r6   Úes        r   r3   zArgument.__init__  sü   € àˆŒØ&(ˆÔØ%'ˆŒð	Ø˜f™ˆDŒIð	à  Ñ+ˆDŒLð 	×Ñ˜eÔ$Ø Ÿ9™9 VÓ,ˆÙØˆD�IØ�_Š_ØŸ™¨Ñ*¨1¨2Ð.×6Ñ6°s¸CÓ@ˆD�IðPØ ×,Ñ,¨QÑ/°°Ð3�•	øô ò 	Ùð	ûô
 ò 	Ùð	ûô ò PØ!�”	Ü#Ð$AÀ4ÓHÈaÐOûðPús:   —
B% ¢
B4 ÂC Â%	B1Â0B1Â4	C Â?C Ã	C%ÃC Ã C%c                ó4   — | j                   | j                  z   S r5   )rœ   r�   r   s    r   r]   zArgument.names#  s   € Ø×Ñ $§/¡/Ñ1Ð1r   c                óÐ   — dj                  «       }|j                  | j                  «       |D ]  }	 t        | |«      | j                  |<   Œ | j                  S # t
        $ r Y Œ6w xY w)Nzdefault dest help)Úsplitr{   r6   rk   r›   ÚAttributeError)r   rG   Úattrs      r   rG   zArgument.attrs&  sd   € à#×)Ñ)Ó+ˆØ�‰�T—Y‘YÔÛˆDðÜ$+¨D°$Ó$7�—‘˜DÒ!ð ð
 �{‰{Ðøô "ò Ùðús   ²AÁ	A%Á$A%c                óX  — |D ]¥  }t        |«      dk  rt        d|›d�| «      ‚t        |«      dk(  r<|d   dk(  r|d   dk7  st        d|›d�| «      ‚| j                  j                  |«       Œk|dd d	k(  r|d   dk7  st        d
|›d�| «      ‚| j                  j                  |«       Œ§ y)zhDirectly from optparse.

        Might not be necessary as this is passed to argparse later on.
        r˜   zinvalid option string z&: must be at least two characters longr   r™   r:   zinvalid short option string z/: must be of the form -x, (x any non-dash char)ú--zinvalid long option string z*: must start with --, followed by non-dashN)Úlenr�   rœ   r{   r�   )r   rF   Úopts      r   rŸ   zArgument._set_opt_strings1  sä   € ó
 ˆCÜ�3‹x˜!Š|Ü#Ø,¨S¨Gð 4;ð ;àóð ô
 �S“˜Q’Ø˜A™ #š¨#¨a©&°Cª-Ü'Ø6°s°gð >Hð Hàóð ð
 × Ñ ×'Ñ'¨Õ,à˜A˜a˜ DÒ(¨S°©V°sª]Ü'Ø5°c°Wð =Cð Càóð ð
 —‘×&Ñ& sÕ+ñ- r   c                ó¾  — g }| j                   r|dt        | j                   «      z   gz  }| j                  r|dt        | j                  «      z   gz  }|dt        | j                  «      z   gz  }t	        | d«      r|dt        | j
                  «      z   gz  }t	        | d«      r|dt        | j                  «      z   gz  }dj                  d	j                  |«      «      S )
Nz_short_opts: z_long_opts: zdest: r}   ztype: r~   z	default: zArgument({})ú, )	rœ   Úreprr�   r6   Úhasattrr}   r~   ÚformatÚjoin)r   rR   s     r   r   zArgument.__repr__N  sË   € ØˆØ×ÒØ�_¤t¨D×,<Ñ,<Ó'=Ñ=Ð>Ñ>ˆDØ�?Š?Ø�^¤d¨4¯?©?Ó&;Ñ;Ð<Ñ<ˆDØ�œD §¡›OÑ+Ð,Ñ,ˆÜ�4˜Ô Ø�X¤ T§Y¡Y£Ñ/Ð0Ñ0ˆDÜ�4˜Ô#Ø�[¤4¨¯©Ó#5Ñ5Ð6Ñ6ˆDØ×$Ñ$ T§Y¡Y¨t£_Ó5Ð5r   N)r]   r   rG   r   r   r�   )r   r‰   )r   zMapping[str, Any])rF   zSequence[str]r   r�   r   )	r   r   r   r‹   r3   r]   rG   rŸ   r   r   r   r   r‚   r‚   ÿ   s!   „ ñóPó62ó	ó,ô:6r   r‚   c                  óP   — e Zd ZdZ	 	 d	ddœ	 	 	 	 	 	 	 	 	 d
d„Zdd„Zdd„Zddd„Zy)r)   z,A group of options shown in its own section.NFr$   c               óR   — t        |«       || _        || _        g | _        || _        y r5   )r   r;   r>   r[   r(   )r   r;   r>   r(   r%   s        r   r3   zOptionGroup.__init___  s)   € ô 	�yÔ!ØˆŒ	Ø&ˆÔØ')ˆŒØˆ�r   c                ó¸   — t        |«      j                  d„ | j                  D «       «      }|rt        d|› d�«      ‚t	        |i |¤Ž}| j                  |d¬«       y)aJ  Add an option to this group.

        If a shortened version of a long option is specified, it will
        be suppressed in the help. ``addoption('--twowords', '--two-words')``
        results in help showing ``--two-words`` only, but ``--twowords`` gets
        accepted **and** the automatic destination is in ``args.twowords``.

        :param opts:
            Option names, can be short or long options.
        :param attrs:
            Same attributes as the argparse library's :meth:`add_argument()
            <argparse.ArgumentParser.add_argument>` function accepts.
        c              3  óJ   K  — | ]  }|j                  «       D ]  }|–— Œ Œ y ­wr5   )r]   )Ú.0r¬   r;   s      r   Ú	<genexpr>z(OptionGroup.addoption.<locals>.<genexpr>{  s"   è ø€ ð *
Ù(�S°S·Y±Y¶[¨TŒD°[ˆD™Lùs   ‚!#zoption names z already addedF©Ú
shortupperN)ÚsetÚintersectionr[   Ú
ValueErrorr‚   Ú_addoption_instance)r   rF   rG   Úconflictr7   s        r   rE   zOptionGroup.addoptionm  sd   € ô �t“9×)Ñ)ñ *
Ø ŸLšLó*
ó 
ˆñ Ü˜}¨X¨J°nÐEÓFÐFÜ˜4Ð) 5Ñ)ˆØ× Ñ  °EÐ Õ:r   c                ó@   — t        |i |¤Ž}| j                  |d¬«       y )NTr¹   )r‚   r¾   )r   rF   rG   r7   s       r   Ú
_addoptionzOptionGroup._addoptionƒ  s$   € Ü˜4Ð) 5Ñ)ˆØ× Ñ  °DÐ Õ9r   c                óü   — |s8|j                   D ])  }|d   dk(  sŒ|d   j                  «       sŒ t        d«      ‚ | j                  r| j                  j	                  |«       | j
                  j                  |«       y )Nr   r™   r:   zlowercase shortoptions reserved)rœ   Úislowerr½   r(   r8   r[   r{   )r   r7   rº   r¬   s       r   r¾   zOptionGroup._addoption_instance‡  sf   € ÙØ×)Ô)�Ø�q‘6˜S“= S¨¡V§^¡^Õ%5Ü$Ð%FÓGÐGð *ð �;Š;Ø�K‰K×%Ñ% fÔ-Ø�‰×Ñ˜FÕ#r   rƒ   )
r;   r   r>   r   r(   zParser | Noner%   rx   r   r�   r…   )F)r7   r‚   rº   rx   r   r�   )r   r   r   r‹   r3   rE   rÁ   r¾   r   r   r   r)   r)   \  s[   „ Ù6ð
 Ø $ð	ð  ñàðð ðð ð	ð ðð 
óó;ó,:õ$r   r)   c                  óŠ   ‡ — e Zd Z	 	 d	 	 	 	 	 	 	 dˆ fd„Zdd„Z	 	 d	 	 	 	 	 d	d„Zej                  dk  r	 	 	 	 d
d„Zˆ xZ	S ˆ xZ	S )rZ   c                ó|   •— || _         t        ‰| �	  ||j                  dt        dd¬«       |r|| _        y i | _        y )NFÚ@)r#   r1   Úadd_helpÚformatter_classÚallow_abbrevÚfromfile_prefix_chars)Ú_parserÚsuperr3   r-   ÚDropShorterLongHelpFormatterr0   )r   r(   r0   r#   Ú	__class__s       €r   r3   zMyOptionParser.__init__’  sE   ø€ ð ˆŒÜ‰ÑØØ—-‘-ØÜ8ØØ"%ð 	ô 	
ñ )3˜*ˆ�¸ˆ�r   c                óÀ   — | j                   › d|› �}t        | j                  d«      r|› d| j                  j                  › d�}t	        | j                  «       |z   «      ‚)z1Transform argparse error message into UsageError.z	: error: Ú_config_source_hintz (Ú))r#   r°   rË   rÐ   r   Úformat_usage)r   Úmessager‘   s      r   ÚerrorzMyOptionParser.error¥  s[   € à—‘�˜9 W IÐ.ˆä�4—<‘<Ð!6Ô7Ø�E˜˜DŸL™L×<Ñ<Ð=¸QÐ?ˆCä˜×*Ñ*Ó,¨sÑ2Ó3Ð3r   c                óž  — | j                  ||«      \  }}|rµ|D ]‘  }|sŒ|d   dk(  sŒdj                  dj                  |«      «      g}t        | j                  j                  «       «      D ]  \  }}|j                  d|› d|› �«       Œ | j                  dj                  |«      «       Œ“ t        |t        «      j                  |«       |S )z(Allow splitting of positional arguments.r   r™   zunrecognized arguments: {}Ú z  r”   Ú
)rq   r±   r²   Úsortedr0   ri   r{   rÔ   rk   r_   Úextend)	r   rR   rK   ÚparsedÚunrecognizedÚargÚlinesÚkÚvs	            r   rQ   zMyOptionParser.parse_args¯  s¿   € ð  $×4Ñ4°T¸9ÓEÑˆ�ÙÛ#�Ú˜3˜q™6 S›=à4×;Ñ;¸C¿H¹HÀ\Ó<RÓSð�Eô !' t§¡×'<Ñ'<Ó'>Ö ?™˜˜1ØŸ™ r¨!¨¨B¨q¨c ]Õ3ð !@à—J‘J˜tŸy™y¨Ó/Õ0ð $ô �FœKÓ(×/Ñ/°Ô=Øˆr   )é   é	   c                ó~  — |sy |d   | j                   vry || j                  v r| j                  |   }||d fS t        |«      dk(  ry d|v r7|j                  dd«      \  }}|| j                  v r| j                  |   }|||fS | j                  s|j                  d«      sn| j                  |«      }t        |«      dkD  r;t        d«      }dj                  d„ |D «       «      }| j                  |||dœz  «       nt        |«      dk(  r|\  }|S | j                  j                  |«      r| j                  sy d	|v ry d |d fS )
Nr   r:   Ú=rª   z4ambiguous option: %(option)s could match %(matches)sr®   c              3  ó(   K  — | ]
  \  }}}|–— Œ y ­wr5   r   )r·   rš   r7   s      r   r¸   z1MyOptionParser._parse_optional.<locals>.<genexpr>Ü  s   è ø€ Ð'QÁ=±<°1°f¸a¬Á=ùs   ‚)r7   ÚmatchesrÖ   )Úprefix_charsÚ_option_string_actionsr«   r¦   rÉ   Ú
startswithÚ_get_option_tuplesr   r²   rÔ   Ú_negative_number_matcherÚmatchÚ_has_negative_number_optionals)	r   Ú
arg_stringÚactionÚoption_stringÚexplicit_argÚoption_tuplesr‘   r[   Úoption_tuples	            r   Ú_parse_optionalzMyOptionParser._parse_optionalÅ  sa  € ñ ØØ˜!‰} D×$5Ñ$5Ñ5ØØ˜T×8Ñ8Ñ8Ø×4Ñ4°ZÑ@�Ø˜z¨4Ð/Ð/Ü�:‹ !Ò#ØØ�jÑ Ø.8×.>Ñ.>¸sÀAÓ.FÑ+�˜|Ø  D×$?Ñ$?Ñ?Ø!×8Ñ8¸ÑG�FØ! =°,Ð>Ð>Ø× Ò ¨
×(=Ñ(=¸dÔ(CØ $× 7Ñ 7¸
Ó C�Ü�}Ó%¨Ò)Ü!ØNó�Cð #Ÿi™iÑ'QÁ=Ó'QÓQ�GØ—J‘J˜s°
ÀwÑ%OÑOÕPÜ˜Ó'¨1Ò,Ø&3‘O�\Ø'Ð'Ø×,Ñ,×2Ñ2°:Ô>Ø×:Ò:ØØ�jÑ ØØ˜ TÐ)Ð)r   r€   )r(   r!   r0   zdict[str, Any] | Noner#   r"   r   r�   )rÓ   r   r   r   )rR   zSequence[str] | NonerK   r‡   r   rˆ   )rí   r   r   z5tuple[argparse.Action | None, str, str | None] | None)
r   r   r   r3   rÔ   rQ   ÚsysÚversion_inforó   Ú__classcell__©rÎ   s   @r   rZ   rZ   ‘  sŽ   ø„ ð -1Øð	;àð;ð *ð;ð ð	;ð
 
õ;ó&4ð &*Ø/3ðà"ðð -ðð 
ó	ð& ×Ñ˜&Ò ð!	*Ø!ð!	*àB÷!	*ó !r   rZ   c                  ó6   ‡ — e Zd ZdZdˆ fd„Zdˆ fd„Zd„ Zˆ xZS )rÍ   a+  Shorten help for long options that differ only in extra hyphens.

    - Collapse **long** options that are the same except for extra hyphens.
    - Shortcut if there are only two options and one of them is a short one.
    - Cache result on the action object as this is called at least 2 times.
    c                ón   •— d|vr!t         j                  j                  «       |d<   t        ‰| �  |i |¤Ž y )NÚwidth)Ú_pytestÚ_ioÚget_terminal_widthrÌ   r3   )r   rR   ÚkwargsrÎ   s      €r   r3   z%DropShorterLongHelpFormatter.__init__ñ  s3   ø€ à˜&Ñ Ü%Ÿk™k×<Ñ<Ó>ˆF�7‰OÜ‰Ñ˜$Ð) &Ó)r   c                ó  •— t         ‰| �  |«      }|r
|d   dk7  r|S t        |dd «      }|r|S |j                  d«      }t	        |«      dk(  r+t	        |d   «      dk(  st	        |d   «      dk(  r	||_        |S g }i }|D ]u  }t	        |«      dk(  s|d   dk(  rŒ|j                  d«      st        d	|› d
�|«      ‚|dd  }|j                  dd«      }	|	|vst	        ||	   «      t	        |«      k  sŒq|||	<   Œw |D ]s  }t	        |«      dk(  s|d   dk(  r|j                  |«       |dd  |j                  |j                  dd«      «      k(  sŒR|j                  |j                  ddd«      «       Œu dj                  |«      }
|
|_        |
S )Nr   r™   Ú_formatted_action_invocationr®   r˜   r:   rÖ   rª   z&long optional argument without "--": [Ú]r„   rã   )rÌ   Ú_format_action_invocationrk   r¦   r«   r   rè   r�   r¡   r{   r    r²   )r   rî   ÚorgstrÚresr[   Úreturn_listÚ
short_longr7   ÚxxoptionÚ	shortenedÚformatted_action_invocationrÎ   s              €r   r  z6DropShorterLongHelpFormatter._format_action_invocation÷  s´  ø€ Ü‘Ñ2°6Ó:ˆÙ�f˜Q‘i 3Ò&ØˆMÜ! &Ð*HÈ$ÓOˆÙØˆJØ—,‘,˜tÓ$ˆÜˆw‹<˜1Ò¤# g¨a¡j£/°QÒ"6¼#¸gÀa¹j»/ÈQÒ:Nà28ˆFÔ/ØˆMØˆØ%'ˆ
ÛˆFÜ�6‹{˜aÒ 6¨!¡9°Ò#3ØØ×$Ñ$ TÔ*Ü#Ø<¸V¸HÀAÐFÈóð ð ˜a˜b�zˆHØ ×(Ñ(¨¨bÓ1ˆIØ 
Ñ*¬c°*¸YÑ2GÓ.HÌ3ØóLó /ð )1�
˜9Ò%ð ó ˆFÜ�6‹{˜aÒ 6¨!¡9°Ò#3Ø×"Ñ" 6Ô*Ø�a�bˆz˜ZŸ^™^¨F¯N©N¸3ÀÓ,CÓDÓDØ×"Ñ" 6§>¡>°#°s¸AÓ#>Õ?ð	 ð
 '+§i¡i°Ó&<Ð#Ø.IˆÔ+Ø*Ð*r   c                óš   — ddl }g }|j                  «       D ]1  }|j                  |j                  |j	                  «       |«      «       Œ3 |S )z}Wrap lines after splitting on original newlines.

        This allows to have explicit line breaks in the help text.
        r   N)ÚtextwrapÚ
splitlinesrÙ   ÚwrapÚstrip)r   Útextrú   r  rÝ   Úlines         r   Ú_split_linesz)DropShorterLongHelpFormatter._split_lines  s?   € ó
 	àˆØ—O‘OÖ%ˆDØ�L‰L˜Ÿ™ t§z¡z£|°UÓ;Õ<ð &àˆr   )rR   r   rþ   r   r   r�   )rî   zargparse.Actionr   r   )r   r   r   r‹   r3   r  r  rö   r÷   s   @r   rÍ   rÍ   é  s   ø„ ñõ*õ$+öL
r   rÍ   )r}   rŠ   r   r   )#Ú
__future__r   Úargparser   rO   rô   Útypingr   r   r   r   r	   r
   r   r   r   Ú_pytest._iorû   Ú_pytest.config.exceptionsr   Ú_pytest.deprecatedr   r_   r   ry   r!   rz   Ú	Exceptionr�   r‚   r)   ÚArgumentParserrZ   ÚHelpFormatterrÍ   r   r   r   Ú<module>r     sÏ   ðå "ã Ý Û 	Û 
Ý Ý Ý Ý Ý Ý Ý Ý Ý ã Ý 0Ý -ð €÷ñ ñ
 ‹(€ð ÷y$ð y$ó ðy$ðxØ
Sðàóô"�Iô ÷Z6ñ Z6÷z2$ñ 2$ôjU*�X×,Ñ,ô U*ôp> 8×#9Ñ#9õ >r   