§
    ÖŽ’jzG  ã                  ó‚  — d dl mZ d dlZd dlmZ d dlmZ d dlZd dlZd dlZd dl	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e G d„ d¦  «        ¦   «         Zdd„Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z dS ) é    )ÚannotationsN)ÚCallable)ÚSequence)ÚAny)Úfinal)ÚLiteral)ÚNoReturné   )Ú
UsageError)ÚNOTSET)Úcheck_ispytestÚfile_or_dirc                  ó¶   — e Zd ZdZ	 	 d2dddœd3d„Zed4d„¦   «         Zej        d5d„¦   «         Zd6d„Z	 d7d8d„Z	d9d„Z
	 d:d;d%„Z	 d:d;d&„Z	 d:d<d(„Zdefd)d*œd=d1„ZdS )>ÚParserzÇParser for command line arguments and config-file values.

    :ivar extra_info: Dict of generic param -> value to display in case
        there's an error processing the command line arguments.
    NF)ÚprogÚ	_ispytestÚusageú
str | NoneÚ
processoptú!Callable[[Argument], None] | Noner   r   ÚboolÚreturnÚNonec               ó|  — t          |¦  «         ddlm} || _        i | _        t          || j        |¬¦  «        | _        | j                             d¦  «        }t          |d| d¬¦  «        | _	        | j	        g| _
        i | _        | j                             t          d¬	¦  «        }||_        i | _        i | _        d S )
Nr   )Úfilescompleter©r   zCustom optionsÚ
_anonymousT©r   Ú*)Únargs)r   Ú_pytest._argcompleter   Ú_processoptÚ
extra_infoÚPytestArgumentParserÚ	optparserÚadd_argument_groupÚOptionGroupr   Ú_groupsÚ	_opt2destÚadd_argumentÚFILE_OR_DIRÚ	completerÚ_inidictÚ_ini_aliases)Úselfr   r   r   r   r   Úanonymous_arggroupÚfile_or_dir_args           úGC:\Projects\DSCons\.venv\Lib\site-packages\_pytest\config\argparsing.pyÚ__init__zParser.__init__    sÍ   € õ 	�yÑ!Ô!Ð!à7Ð7Ð7Ð7Ð7Ð7à%ˆÔØ*,ˆŒÝ-¨e°T´_È4ÐPÑPÔPˆŒØ!œ^×>Ò>Ð?OÑPÔPÐÝ%Ø ¨d¸dð
ñ 
ô 
ˆŒð œÐ(ˆŒà)+ˆŒØœ.×5Ò5µkÈÐ5ÑMÔMˆØ$2ˆÔ!à9;ˆŒà,.ˆÔÐÐó    Ústrc                ó   — | j         j        S ©N©r%   r   ©r/   s    r2   r   zParser.prog=   s   € àŒ~Ô"Ð"r4   Úvaluec                ó   — || j         _        d S r7   r8   )r/   r:   s     r2   r   zParser.progA   s   € à#ˆŒÔÐÐr4   ÚoptionÚArgumentc                óT   — | j         r|j        r|                       |¦  «         d S d S d S r7   )r"   Údest)r/   r<   s     r2   ÚprocessoptionzParser.processoptionE   sE   € ØÔð 	)ØŒ{ð )Ø× Ò  Ñ(Ô(Ð(Ð(Ð(ð	)ð 	)ð)ð )r4   Ú ÚnameÚdescriptionÚafterr'   c                ó¢  — | j         D ]}|j        |k    r|c S Œ| j                             |p|¦  «        }t	          ||| d¬¦  «        }d}t          | j         ¦  «        D ]\  }}|j        |k    r nŒ| j                              |dz   |¦  «         | j        j                             |dz   | j        j                             ¦   «         ¦  «         |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
   )	r(   rB   r%   r&   r'   Ú	enumerateÚinsertÚ_action_groupsÚpop)r/   rB   rC   rD   ÚgroupÚarggroupÚiÚgrps           r2   ÚgetgroupzParser.getgroupJ   sî   € ð ”\ð 	ð 	ˆEØŒz˜TÒ!Ð!Ø���ð "ð ”>×4Ò4°[Ð5HÀDÑIÔIˆÝ˜H d¨D¸DÐAÑAÔAˆØˆÝ ¤Ñ-Ô-ð 	ð 	‰FˆAˆsØŒx˜5Ò Ð Ø�ð !àŒ×Ò˜A ™E 5Ñ)Ô)Ð)ð 	ŒÔ%×,Ò,¨Q°©U°D´NÔ4Q×4UÒ4UÑ4WÔ4WÑXÔXÐXØˆr4   ÚoptsÚattrsr   c                ó*   —  | j         j        |i |¤Ž dS )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/   rO   rP   s      r2   rR   zParser.addoptioni   s$   € ð 	"ˆŒÔ! 4Ð1¨5Ð1Ð1Ð1Ð1Ð1r4   Úargsú Sequence[str | os.PathLike[str]]Ú	namespaceúargparse.Namespace | Noneúargparse.Namespacec                óÊ   — ddl m}  || j        ¦  «         d„ |D ¦   «         }|€t          j        ¦   «         }	 d|_        | j                             ||¬¦  «        |`S # |`w xY w)zÅParse the arguments.

        Unlike ``parse_known_args`` and ``parse_known_and_unknown_args``,
        raises PrintHelp on `--help` and UsageError on unknown flags

        :meta private:
        r   )Útry_argcompletec                ó6   — g | ]}t          j        |¦  «        ‘ŒS © ©ÚosÚfspath©Ú.0Úxs     r2   ú
<listcomp>z Parser.parse.<locals>.<listcomp>ˆ   ó    € Ð.Ð.Ð. A•2”9˜Q‘<”<Ð.Ð.Ð.r4   NT©rV   )r!   rZ   r%   ÚargparseÚ	NamespaceÚ_raise_print_helpÚparse_intermixed_args)r/   rT   rV   rZ   Ústrargss        r2   ÚparsezParser.parsey   s�   € ð 	9Ð8Ð8Ð8Ð8Ð8àˆ˜œÑ'Ô'Ð'Ø.Ð.¨Ð.Ñ.Ô.ˆØÐÝ Ô*Ñ,Ô,ˆIð	,Ø*.ˆIÔ'Ø”>×7Ò7¸È9Ð7ÑUÔUàÐ+Ð+ø�	Ð+Ð+Ð+Ð+Ð+s   ¹"A ÁA"c                ó<   — |                       ||¬¦  «        d         S )zbParse the known arguments at this point.

        :returns: An argparse namespace object.
        re   r   )Úparse_known_and_unknown_args)r/   rT   rV   s      r2   Úparse_known_argszParser.parse_known_args‘   s"   € ð ×0Ò0°ÀÐ0ÑKÔKÈAÔNÐNr4   ú$tuple[argparse.Namespace, list[str]]c                ó€  — d„ |D ¦   «         }t           j        dk     sdt           j        cxk    rdk     rqn nn| j                             ||¦  «        \  }}|€J ‚t	          |t
          ¦  «        }g }|D ].}|                     d¦  «        r|n|                     |¦  «         Œ/||fS | j                             ||¦  «        S )a	  Parse the known arguments at this point, and also return the
        remaining unknown flag arguments.

        :returns:
            A tuple containing an argparse namespace object for the known
            arguments, and a list of unknown flag arguments.
        c                ó6   — g | ]}t          j        |¦  «        ‘ŒS r\   r]   r`   s     r2   rc   z7Parser.parse_known_and_unknown_args.<locals>.<listcomp>¨   rd   r4   )é   é   é   )rr   é   )rr   ru   r
   Nú-)	ÚsysÚversion_infor%   rn   Úgetattrr+   Ú
startswithÚappendÚparse_known_intermixed_args)r/   rT   rV   rj   Úunknownr   Úunknown_flagsÚargs           r2   rm   z#Parser.parse_known_and_unknown_argsœ   så   € ð /Ð.¨Ð.Ñ.Ô.ˆÝÔ˜jÒ(Ð(¨GµsÔ7GÐ,TÐ,TÒ,TÐ,TÈ*Ò,TÐ,TÐ,TÐ,TÐ,Tà!%¤×!@Ò!@ÀÈ)Ñ!TÔ!TÑˆI�wØÐ(Ð(Ð(Ý! )­[Ñ9Ô9ˆKØ')ˆMØð Tð T�Ø"%§.¢.°Ñ"5Ô"5ÐF��¸;×NÒNÈsÑSÔSÐSÐSØ˜mÐ+Ð+à”>×=Ò=¸gÀyÑQÔQÐQr4   r\   )ÚaliasesÚhelpÚtypeúYLiteral['string', 'paths', 'pathlist', 'args', 'linelist', 'bool', 'int', 'float'] | NoneÚdefaultr€   úSequence[str]c               ó  — |dv sJ ‚|€d}|t           u rt          |¦  «        }|||f| j        |<   |D ]X}|| j        v rt          d|›d�¦  «        ‚| j                             |¦  «        x}�t          |›d|›�¦  «        ‚|| j        |<   ŒYdS )a  Register a configuration file option.

        :param name:
            Name of the configuration.
        :param type:
            Type of the configuration. 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
                * ``int``: an integer
                * ``float``: a floating-point number

                .. versionadded:: 8.4

                    The ``float`` and ``int`` types.

            For ``paths`` and ``pathlist`` types, they are considered relative to the config-file.
            In case the execution is happening without a config-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 a config-file.

            Defaults to ``string`` if ``None`` or not passed.
        :param default:
            Default value if no config-file option exists but is queried.
        :param aliases:
            Additional names by which this option can be referenced.
            Aliases resolve to the canonical name.

            .. versionadded:: 9.0
                The ``aliases`` parameter.

        The value of configuration keys can be retrieved via a call to
        :py:func:`config.getini(name) <pytest.Config.getini>`.
        )	NÚstringÚpathsÚpathlistrT   Úlinelistr   ÚintÚfloatNr‡   zalias z- conflicts with existing configuration optionz is already an alias of )r   Úget_ini_default_for_typer-   Ú
ValueErrorr.   Úget)r/   rB   r�   r‚   r„   r€   ÚaliasÚalreadys           r2   ÚaddinizParser.addiniµ   sè   € ðn ð 

ð 

ð 

ð 

ð 

ð ˆ<ØˆDØ•fÐÐÝ.¨tÑ4Ô4ˆGà# T¨7Ð3ˆŒ�dÑàð 	,ð 	,ˆEØ˜œÐ%Ð%Ý ØS˜UÐSÐSÐSñô ð ð  Ô,×0Ò0°Ñ7Ô7Ð7�ÐDÝ  EÐ!PÐ!PÀWÐ!PÐ!PÑQÔQÐQØ'+ˆDÔ˜eÑ$Ð$ð	,ð 	,r4   )NN)
r   r   r   r   r   r   r   r   r   r   ©r   r5   )r:   r5   r   r   )r<   r=   r   r   )rA   N)rB   r5   rC   r5   rD   r   r   r'   ©rO   r5   rP   r   r   r   r7   )rT   rU   rV   rW   r   rX   )rT   rU   rV   rW   r   ro   )rB   r5   r�   r5   r‚   rƒ   r„   r   r€   r…   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r3   Úpropertyr   Úsetterr@   rN   rR   rk   rn   rm   r   r’   r\   r4   r2   r   r      sy  € € € € € ðð ð !Ø8<ð/ð
  Øð/ð /ð /ð /ð /ð /ð: ð#ð #ð #ñ „Xð#ð 
„[ð$ð $ð $ñ „[ð$ð)ð )ð )ð )ð EIðð ð ð ð ð>2ð 2ð 2ð 2ð& 04ð,ð ,ð ,ð ,ð ,ð6 04ð	Oð 	Oð 	Oð 	Oð 	Oð 04ðRð Rð Rð Rð Rð@ ØðP,ð "$ðP,ð P,ð P,ð P,ð P,ð P,ð P,ð P,r4   r   r‚   úRLiteral['string', 'paths', 'pathlist', 'args', 'linelist', 'bool', 'int', 'float']r   r   c                óB   — | dv rg S | dk    rdS | dk    rdS | dk    rdS dS )	zs
    Used by addini to get the default value for a given config option type, when
    default is not supplied.
    )rˆ   r‰   rT   rŠ   r   Fr‹   r   rŒ   g        rA   r\   )r‚   s    r2   r�   r�     sD   € ð Ð8Ð8Ð8Øˆ	Ø	�ŠˆØˆuØ	�ŠˆØˆqØ	�ŠˆØˆsàˆrr4   c                  óz   — e Zd ZdZdd„Zdd„Zdd
„Zedd„¦   «         Zedd„¦   «         Z	edd„¦   «         Z
dd„ZdS )r=   z$An option defined in an OptionGroup.Úactionúargparse.Actionr   r   c                ó   — || _         d S r7   )Ú_action)r/   rž   s     r2   r3   zArgument.__init__   s   € ØˆŒˆˆr4   údict[str, Any]c                ó   — | j         j        S r7   )r¡   Ú__dict__r9   s    r2   rP   zArgument.attrs#  s   € ØŒ|Ô$Ð$r4   r…   c                ó   — | j         j        S r7   )r¡   Úoption_stringsr9   s    r2   ÚnameszArgument.names&  s   € ØŒ|Ô*Ð*r4   r5   c                ó   — | j         j        S r7   )r¡   r?   r9   s    r2   r?   zArgument.dest)  ó   € àŒ|Ô Ð r4   r   c                ó   — | j         j        S r7   )r¡   r„   r9   s    r2   r„   zArgument.default-  s   € àŒ|Ô#Ð#r4   ú
Any | Nonec                ó   — | j         j        S r7   )r¡   r‚   r9   s    r2   r‚   zArgument.type1  r©   r4   c                ó€  — t          | dd ¦  «        }|€dS g }|dt          |                      ¦   «         ¦  «        z   gz  }|dt          | j        ¦  «        z   gz  }|j        r|dt          | j        ¦  «        z   gz  }|dt          | j        ¦  «        z   gz  }d                     d                     |¦  «        ¦  «        S )	Nr¡   zArgument(<uninitialized>)zopts: zdest: ztype: z	default: zArgument({})ú, )ry   Úreprr§   r?   r‚   r„   ÚformatÚjoin)r/   rž   rT   s      r2   Ú__repr__zArgument.__repr__5  s½   € Ý˜˜y¨$Ñ/Ô/ˆØˆ>Ø.Ð.ØˆØ��D §¢¡¤Ñ.Ô.Ñ.Ð/Ñ/ˆØ��D ¤™OœOÑ+Ð,Ñ,ˆØŒ;ð 	1Ø�X¥ T¤Y¡¤Ñ/Ð0Ñ0ˆDØ��t D¤LÑ1Ô1Ñ1Ð2Ñ2ˆØ×$Ò$ T§Y¢Y¨t¡_¤_Ñ5Ô5Ð5r4   N)rž   rŸ   r   r   )r   r¢   )r   r…   r“   )r   r   )r   r«   )r•   r–   r—   r˜   r3   rP   r§   r™   r?   r„   r‚   r²   r\   r4   r2   r=   r=     sÊ   € € € € € Ø.Ð.ðð ð ð ð%ð %ð %ð %ð+ð +ð +ð +ð ð!ð !ð !ñ „Xð!ð ð$ð $ð $ñ „Xð$ð ð!ð !ð !ñ „Xð!ð
6ð 
6ð 
6ð 
6ð 
6ð 
6r4   r=   c                  ó6   — e Zd ZdZ	 ddd„Zdd„Zdd„Zdd„ZdS )r'   z,A group of options shown in its own section.FrK   úargparse._ArgumentGrouprB   r5   ÚparserúParser | Noner   r   r   r   c                ó\   — t          |¦  «         || _        || _        g | _        || _        d S r7   )r   Ú	_arggrouprB   Úoptionsrµ   )r/   rK   rB   rµ   r   s        r2   r3   zOptionGroup.__init__E  s2   € õ 	�yÑ!Ô!Ð!Ø!ˆŒØˆŒ	Ø')ˆŒØˆŒˆˆr4   rO   rP   r   c                óÂ   — t          |¦  «                             d„ | j        D ¦   «         ¦  «        }|rt          d|› d�¦  «        ‚|                      ||d¬¦  «         dS )a“  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.
            Note that lower-case short options (e.g. `-x`) are reserved.
        :param attrs:
            Same attributes as the argparse library's :meth:`add_argument()
            <argparse.ArgumentParser.add_argument>` function accepts.
        c              3  óH   K  — | ]}|                      ¦   «         D ]}|V — ŒŒd S r7   )r§   )ra   ÚoptrB   s      r2   ú	<genexpr>z(OptionGroup.addoption.<locals>.<genexpr>a  sO   è è € ð *
ð *
Ø°S·Y²Y±[´[ð*
ð *
Ø-1ˆDð*
ð *
ð *
ð *
ð *
ð *
ð *
r4   zoption names z already addedF©Úallow_reservedN)ÚsetÚintersectionr¹   rŽ   Ú_addoption_inner)r/   rO   rP   Úconflicts       r2   rR   zOptionGroup.addoptionR  sƒ   € õ �t‘9”9×)Ò)ð *
ð *
Ø œLð*
ñ *
ô *
ñ 
ô 
ˆð ð 	GÝÐE¨XÐEÐEÐEÑFÔFÐFØ×Ò˜d E¸%ÐÑ@Ô@Ð@Ð@Ð@r4   c                ó6   — |                       ||d¬¦  «         dS )z}Like addoption(), but also allows registering short lower case options (e.g. -x),
        which are reserved for pytest core.Tr¾   N)rÂ   rS   s      r2   Ú
_addoptionzOptionGroup._addoptionh  s%   € ð 	×Ò˜d E¸$ÐÑ?Ô?Ð?Ð?Ð?r4   útuple[str, ...]r¢   r¿   c                ó¶  — |sM|D ]J}t          |¦  «        dk    r5|d         dk    r)|d                              ¦   «         rt          d¦  «        ‚ŒK | j        j        |i |¤Ž}t          |¦  «        }| j                             |¦  «         | j        rG| 	                    ¦   «         D ]}|j
        | j        j        |<   Œ| j                             |¦  «         d S d S )Né   r   rv   r
   z$lowercase short options are reserved)ÚlenÚislowerrŽ   r¸   r*   r=   r¹   r{   rµ   r§   r?   r)   r@   )r/   rO   rP   r¿   r¼   rž   r<   rB   s           r2   rÂ   zOptionGroup._addoption_innerm  sò   € ð ð 	MØð Mð M�Ý�s‘8”8˜q’=�= S¨¤V¨s¢] ]°s¸1´v·~²~Ñ7GÔ7G ]Ý$Ð%KÑLÔLÐLøà,�”Ô,¨dÐ<°eÐ<Ð<ˆÝ˜&Ñ!Ô!ˆØŒ×Ò˜FÑ#Ô#Ð#ØŒ;ð 	.ØŸš™œð :ð :�Ø.4¬k�”Ô% dÑ+Ð+ØŒK×%Ò% fÑ-Ô-Ð-Ð-Ð-ð	.ð 	.r4   N)F)
rK   r´   rB   r5   rµ   r¶   r   r   r   r   r”   )rO   rÆ   rP   r¢   r¿   r   r   r   )r•   r–   r—   r˜   r3   rR   rÅ   rÂ   r\   r4   r2   r'   r'   B  s|   € € € € € Ø6Ð6ð  ðð ð ð ð ðAð Að Að Að,@ð @ð @ð @ð
.ð .ð .ð .ð .ð .r4   r'   c                  ó.   ‡ — e Zd Zddœdˆ fd
„Zdd„Zˆ xZS )r$   Nr   r   r   r#   údict[str, str]r   r   r   c               ón   •— t          ¦   «                              ||dt          dd¬¦  «         || _        d S )NFú@)r   r   Úadd_helpÚformatter_classÚallow_abbrevÚfromfile_prefix_chars)Úsuperr3   ÚDropShorterLongHelpFormatterr#   )r/   r   r#   r   Ú	__class__s       €r2   r3   zPytestArgumentParser.__init__  sE   ø€ õ 	‰Œ×ÒØØØÝ8ØØ"%ð 	ñ 	
ô 	
ð 	
ð %ˆŒˆˆr4   Úmessager5   r	   c           	     ó  — | j         › d|› �}| j        rI|dd                     d„ t          | j                             ¦   «         ¦  «        D ¦   «         ¦  «        z   z  }t          |                      ¦   «         |z   ¦  «        ‚)z1Transform argparse error message into UsageError.z	: error: ú
c              3  ó,   K  — | ]\  }}d |› d|› �V — ŒdS )z  z: Nr\   )ra   ÚkÚvs      r2   r½   z-PytestArgumentParser.error.<locals>.<genexpr>˜  sC   è è € ð $ð $Ù"& ! Q��Q��˜!��ð$ð $ð $ð $ð $ð $r4   )r   r#   r±   ÚsortedÚitemsr   Úformat_usage)r/   rÖ   Úmsgs      r2   ÚerrorzPytestArgumentParser.error’  s—   € ð ”Ð.Ð. WÐ.Ð.ˆØŒ?ð 	Ø�4˜$Ÿ)š)ð $ð $Ý*0°´×1FÒ1FÑ1HÔ1HÑ*IÔ*Ið$ñ $ô $ñ ô ñ ñ ˆCõ ˜×*Ò*Ñ,Ô,¨sÑ2Ñ3Ô3Ð3r4   )r   r   r#   rÌ   r   r   r   r   )rÖ   r5   r   r	   )r•   r–   r—   r3   rà   Ú__classcell__©rÕ   s   @r2   r$   r$   ~  s`   ø€ € € € € ð  ð%ð %ð %ð %ð %ð %ð %ð %ð&	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4r4   r$   c                  ó8   ‡ — e Zd ZdZdˆ fd„Zdˆ fd„Zdd„Zˆ xZS )rÔ   zß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.
    rT   r   Úkwargsr   r   c                ó„   •— d|vr!t           j                             ¦   «         |d<    t          ¦   «         j        |i |¤Ž d S )NÚwidth)Ú_pytestÚ_ioÚget_terminal_widthrÓ   r3   )r/   rT   rä   rÕ   s      €r2   r3   z%DropShorterLongHelpFormatter.__init__¥  sG   ø€ à˜&Ð Ð Ý%œk×<Ò<Ñ>Ô>ˆF�7‰OØ�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)r4   rž   rŸ   r5   c                ó®  •— t          ¦   «                              |¦  «        }|r|d         dk    r|S |                     d¦  «        }t          |¦  «        dk    r4t          |d         ¦  «        dk    st          |d         ¦  «        dk    r|S g }i }|D ]”}t          |¦  «        dk    s|d         dk    rŒ"|                     d¦  «        sJ d|› d	�¦   «         ‚|dd …         }|                     dd
¦  «        }||vs&t          ||         ¦  «        t          |¦  «        k     r|||<   Œ•|D ]•}t          |¦  «        dk    s|d         dk    r|                     |¦  «         |dd …         |                     |                     dd
¦  «        ¦  «        k    r*|                     |                     ddd¦  «        ¦  «         Œ–d                     |¦  «        S )Nr   rv   r®   rÈ   r
   ú z--z&long optional argument without "--": [ú]rA   ú=)	rÓ   Ú_format_action_invocationÚsplitrÉ   rz   Úreplacer{   r�   r±   )
r/   rž   Úorgstrr¹   Úreturn_listÚ
short_longr<   ÚxxoptionÚ	shortenedrÕ   s
            €r2   rî   z6DropShorterLongHelpFormatter._format_action_invocation«  s  ø€ Ý‘”×2Ò2°6Ñ:Ô:ˆØð 	�f˜Q”i 3Ò&Ð&ØˆMØ—,’,˜tÑ$Ô$ˆÝˆw‰<Œ<˜1ÒÐ¥# g¨a¤j¡/¤/°QÒ"6Ð"6½#¸gÀa¼j¹/¼/ÈQÒ:NÐ:NàˆMØˆØ%'ˆ
Øð 	1ð 	1ˆFÝ�6‰{Œ{˜aÒÐ 6¨!¤9°Ò#3Ð#3ØØ×$Ò$ TÑ*Ô*ð ð ØB¸ÐBÐBÐBñô Ð*ð ˜a˜b˜b”zˆHØ ×(Ò(¨¨bÑ1Ô1ˆIØ 
Ð*Ð*­c°*¸YÔ2GÑ.HÔ.HÍ3ØñLô Lò /ð /ð )1�
˜9Ñ%øð ð 	@ð 	@ˆFÝ�6‰{Œ{˜aÒÐ 6¨!¤9°Ò#3Ð#3Ø×"Ò" 6Ñ*Ô*Ð*Ø�a�b�bŒz˜ZŸ^š^¨F¯NªN¸3ÀÑ,CÔ,CÑDÔDÒDÐDØ×"Ò" 6§>¢>°#°s¸AÑ#>Ô#>Ñ?Ô?Ð?øØ�yŠy˜Ñ%Ô%Ð%r4   Útextræ   r‹   ú	list[str]c                ó¬   — g }|                      ¦   «         D ]<}|                     t          j        |                     ¦   «         |¦  «        ¦  «         Œ=|S )z}Wrap lines after splitting on original newlines.

        This allows to have explicit line breaks in the help text.
        )Ú
splitlinesÚextendÚtextwrapÚwrapÚstrip)r/   rö   ræ   ÚlinesÚlines        r2   Ú_split_linesz)DropShorterLongHelpFormatter._split_linesÊ  sP   € ð
 ˆØ—O’OÑ%Ô%ð 	=ð 	=ˆDØ�LŠL�œ t§z¢z¡|¤|°UÑ;Ô;Ñ<Ô<Ð<Ð<Øˆr4   )rT   r   rä   r   r   r   )rž   rŸ   r   r5   )rö   r5   ræ   r‹   r   r÷   )r•   r–   r—   r˜   r3   rî   r   rá   râ   s   @r2   rÔ   rÔ   ž  sy   ø€ € € € € ðð ð*ð *ð *ð *ð *ð *ð&ð &ð &ð &ð &ð &ð>ð ð ð ð ð ð ð r4   rÔ   c                  ó0   ‡ — e Zd ZdZ	 ddˆ fd„Zdd„Zˆ xZS )ÚOverrideIniActionzøCustom argparse action that makes a CLI flag equivalent to overriding an
    option, in addition to behaving like `store_true`.

    This can simplify things since code only needs to inspect the config option
    and not consider the CLI flag.
    Nr¦   r…   r?   r5   r    úint | str | NoneÚ
ini_optionÚ	ini_valuer   r   c               ób   •—  t          ¦   «         j        ||dg|¢R i |¤Ž || _        || _        d S )Nr   )rÓ   r3   r  r  )	r/   r¦   r?   r    r  r  rT   rä   rÕ   s	           €r2   r3   zOverrideIniAction.__init__Ý  sB   ø€ ð 	�‰ŒÔ˜¨¨qÐB°4ÐBÐBÐB¸6ÐBÐBÐBØ$ˆŒØ"ˆŒˆˆr4   rµ   úargparse.ArgumentParserrV   rX   c                óÆ   — t          || j        d¦  «         t          |dd ¦  «        }|€g }|                     | j        › d| j        › �¦  «         t          |d|¦  «         d S )NTÚoverride_inirí   )Úsetattrr?   ry   r{   r  r  )r/   rµ   rV   rT   rä   Úcurrent_overridess         r2   Ú__call__zOverrideIniAction.__call__ë  su   € õ 	�	˜4œ9 dÑ+Ô+Ð+Ý# I¨~¸tÑDÔDÐØÐ$Ø "ÐØ× Ò  D¤OÐ!FÐ!F°d´nÐ!FÐ!FÑGÔGÐGÝ�	˜>Ð+<Ñ=Ô=Ð=Ð=Ð=r4   r7   )r¦   r…   r?   r5   r    r  r  r5   r  r5   r   r   )rµ   r  rV   rX   r   r   )r•   r–   r—   r˜   r3   r  rá   râ   s   @r2   r  r  Õ  se   ø€ € € € € ðð ð #'ð	#ð #ð #ð #ð #ð #ð #ð>ð >ð >ð >ð >ð >ð >ð >r4   r  )r‚   r›   r   r   )!Ú
__future__r   rf   Úcollections.abcr   r   r^   rw   rû   Útypingr   r   r   r	   Ú
exceptionsr   Ú_pytest._iorç   Ú_pytest.compatr   Ú_pytest.deprecatedr   r+   r   r�   r=   r'   ÚArgumentParserr$   ÚHelpFormatterrÔ   ÚActionr  r\   r4   r2   ú<module>r     s%  ðà "Ð "Ð "Ð "Ð "Ð "à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø -Ð -Ð -Ð -Ð -Ð -ð €ð ðl,ð l,ð l,ð l,ð l,ñ l,ô l,ñ „ðl,ð^ð ð ð ð*"6ð "6ð "6ð "6ð "6ñ "6ô "6ð "6ðJ9.ð 9.ð 9.ð 9.ð 9.ñ 9.ô 9.ð 9.ðx4ð 4ð 4ð 4ð 4˜8Ô2ñ 4ô 4ð 4ð@4ð 4ð 4ð 4ð 4 8Ô#9ñ 4ô 4ð 4ðn">ð ">ð ">ð ">ð ">˜œñ ">ô ">ð ">ð ">ð ">r4   