Ë
    •KêjŽ_  ã            	      ó<  — U 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	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mZ d dlZd dlmZ d dlmZ erd dlmZ dZ ed   Z!de"d<   ere!ee#e$z  e%z  e&z     z  dz  Z'de"d<   e ejP                  d¬«       G d„ d«      «       «       Z)e!e)z  e*e!e)z  df   z  Z+de"d<    ee!«      D � ci c]  } | | “Œ c} e&de#de$d e%d!iz  Z,d"e"d#<   d7d$„Z-d8d%„Z.d9d&„Z/d:d'„Z0e G d(„ d)«      «       Z1d;d*„Z2 G d+„ d,«      Z3 G d-„ d.«      Z4 G d/„ d0ejj                  «      Z6 G d1„ d2ejn                  «      Z8 ejr                  d3«      Z:d<d4„Z; G d5„ d6ejx                  «      Z=yc c} w )=é    )ÚannotationsN)ÚCallable)ÚSequence)ÚAny)Úfinal)Úget_args)Ú
get_origin)ÚLiteral)ÚNoReturn)ÚTYPE_CHECKING)Ú	TypeAlias)ÚUnioné   )Ú
UsageError)ÚNOTSET)Úcheck_ispytest)ÚTypeFormÚfile_or_dir)ÚstringÚpathsÚpathlistÚargsÚlinelistÚboolÚintÚfloatr   Ú_IniTypeTagÚ_IniTypeArgT)Úfrozenc                  ó   — e Zd ZU dZded<   y)Ú_IniLiteralz@The choices of an ini option registered with a ``Literal`` type.útuple[str, ...]ÚchoicesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    ú^/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/_pytest/config/argparsing.pyr!   r!   .   s   … ñ KàÔr*   r!   .ÚIniTyper   r   r   r   zdict[object, _IniTypeTag]Ú
_INI_TYPESc                ó®   — 	 t         |   S # t        t        f$ r: t        d| ›d|›ddj	                  d„ t        t        «      D «       «      › d�«      d‚w xY w)zGNormalize one member of an `addini(type=...)` argument to a string tag.úinvalid type for ini option ú: z (expected one of ú, c              3  ó2   K  — | ]  }t        |«      –— Œ y ­w©N©Úrepr)Ú.0Útags     r+   ú	<genexpr>z#_ini_type_to_tag.<locals>.<genexpr>M   s   è ø€ ÒD sœ˜cŸÑDùó   ‚zp, one of the types str, bool, int, float, a union of these types such as `int | str`, or a `Literal` of strings)N)r-   ÚKeyErrorÚ	TypeErrorÚ
ValueErrorÚjoinr   r   )ÚnameÚtype_s     r+   Ú_ini_type_to_tagr@   F   sm   € ðÜ˜%Ñ Ð øÜ”iÐ ò ÜØ*¨4¨(°"°U°IÐ=OØ�y‰yÑD¬h´{Ó.CÔDÓDÐEð F6ð6ó
ð
 ð	ðús
   ‚ ‹A	Ac                ó®   — t        |«      t        u r9t        |«      }t        d„ |D «       «      st	        d| ›d|›�«      ‚t        |«      S t        | |«      S )z7Normalize one member of an `addini(type=...)` argument.c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr3   )Ú
isinstanceÚstr©r6   Úchoices     r+   r8   z&_ini_type_to_member.<locals>.<genexpr>W   s   è ø€ ÒA¨v”:˜f¤c×*ÑAùs   ‚r/   z': Literal choices must be strings, got )r	   r
   r   Úallr<   r!   r@   )r>   r?   r#   s      r+   Ú_ini_type_to_memberrH   S   sc   € ä�%ÓœGÑ#Ü˜5“/ˆÜÑA¸ÔAÔAÜØ.¨t¨hð 7(Ø(/ {ð4óð ô ˜7Ó#Ð#Ü˜D %Ó(Ð(r*   c                óº   — t        | t        «      r"dj                  d„ | j                  D «       «      S t        | t        «      rdj                  d„ | D «       «      S | S )z?Render an ini option type for --help output and error messages.z | c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr3   r4   rE   s     r+   r8   z!_ini_type_repr.<locals>.<genexpr>c   s   è ø€ ÒB¨6œ$˜vŸ,ÑBùr9   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr3   )Ú_ini_type_repr)r6   Úmembers     r+   r8   z!_ini_type_repr.<locals>.<genexpr>e   s   è ø€ ÒD°Vœ.¨×0ÑDùr9   )rC   r!   r=   r#   Útuple©Útypes    r+   rL   rL   `   sI   € ä�$œÔ$Ø�z‰zÑB°T·\±\ÔBÓBÐBÜ�$œÔØ�z‰zÑD¸tÔDÓDÐDØ€Kr*   c                ó¨   — | D �cg c]  }|j                  d«      sŒ|‘Œ }}|r|d   n| d   }|j                  d«      j                  dd«      S c c}w )Nú--r   ú-Ú_)Ú
startswithÚlstripÚreplace)ÚoptsÚoptÚ	long_optss      r+   Ú_get_argparse_destr[   i   sQ   € Ø $Ö=˜¨¯©°tÕ(<’Ð=€IÐ=Ù#ˆ)�AŠ,¨¨a©€CØ�:‰:�c‹?×"Ñ" 3¨Ó,Ð,ùò >s
   …AœAc                  ó  — e Zd ZdZ	 	 ddddœ	 	 	 	 	 	 	 	 	 dd„Zedd„«       Zej                  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œ	 	 	 	 	 	 	 	 	 	 	 dd„Zy)Ú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Ú	_ispytestc               óx  — t        |«       ddlm} || _        i | _        t        || j                  |¬«      | _        | j                  j                  d«      }t        |d| d¬«      | _	        | j                  g| _
        i | _        | j                  j                  t        d¬	«      }||_        i | _        i | _        y )
Nr   )Úfilescompleter©r^   zCustom optionsÚ
_anonymousT©r_   Ú*)Únargs)r   Ú_pytest._argcompletera   Ú_processoptÚ
extra_infoÚPytestArgumentParserÚ	optparserÚadd_argument_groupÚOptionGrouprc   Ú_groupsÚ	_opt2destÚadd_argumentÚFILE_OR_DIRÚ	completerÚ_inidictÚ_ini_aliases)ÚselfÚusageÚ
processoptr^   r_   ra   Úanonymous_arggroupÚfile_or_dir_args           r+   Ú__init__zParser.__init__w   s¤   € ô 	�yÔ!å7à%ˆÔØ*,ˆŒÜ-¨e°T·_±_È4ÔPˆŒØ!Ÿ^™^×>Ñ>Ð?OÓPÐÜ%Ø ¨d¸dô
ˆŒð Ÿ™Ð(ˆŒà)+ˆŒØŸ.™.×5Ñ5´kÈÐ5ÓMˆØ$2ˆÔ!à=?ˆŒà,.ˆÕr*   c                ó.   — | j                   j                  S r3   ©rk   r^   ©ru   s    r+   r^   zParser.prog”   s   € à�~‰~×"Ñ"Ð"r*   c                ó&   — || j                   _        y r3   r|   )ru   Úvalues     r+   r^   zParser.prog˜   s   € à#ˆ�‰Õr*   c                óZ   — | j                   r|j                  r| j                  |«       y y y r3   )rh   Údest)ru   Úoptions     r+   ÚprocessoptionzParser.processoptionœ   s*   € Ø×ÒØ�{Š{Ø× Ñ  Õ(ð ð r*   c                óÞ  — | j                   D ]  }|j                  |k(  sŒ|c S  | j                  j                  |xs |«      }t	        ||| d¬«      }d}t        | j                   «      D ]  \  }}|j                  |k(  sŒ n | j                   j                  |dz   |«       | j                  j                  j                  |dz   | j                  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``.
        Trd   r   r   )	rn   r>   rk   rl   rm   Ú	enumerateÚinsertÚ_action_groupsÚpop)ru   r>   ÚdescriptionÚafterÚgroupÚarggroupÚiÚgrps           r+   ÚgetgroupzParser.getgroup¡   sÕ   € ð —\‘\ò 	ˆEØ�z‰z˜TÓ!Ø’ð	ð —>‘>×4Ñ4°[Ò5HÀDÓIˆÜ˜H d¨D¸DÔAˆØˆÜ §¡Ó-ò 	‰FˆAˆsØ�x‰x˜5Ó Ùð	ð 	�‰×Ñ˜A ™E 5Ô)ð 	�‰×%Ñ%×,Ñ,¨Q°©U°D·N±N×4QÑ4Q×4UÑ4UÓ4WÔXØˆ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)rc   Ú	addoption©ru   rX   Úattrss      r+   r‘   zParser.addoptionÀ   s   € ð 	"ˆ�‰×!Ñ! 4Ð1¨5Ó1r*   c                ó  — ddl m}  || j                  «       |D �cg c]  }t        j                  |«      ‘Œ }}|€t        j                  «       }	 d|_        | j                  j                  ||¬«      |`S c c}w # |`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_argcompleteT©Ú	namespace)	rg   r•   rk   ÚosÚfspathÚargparseÚ	NamespaceÚ_raise_print_helpÚparse_intermixed_args)ru   r   r—   r•   ÚxÚstrargss         r+   ÚparsezParser.parseÐ   s{   € õ 	9á˜Ÿ™Ô'Ø)-Ö. A”2—9‘9˜Q•<Ð.ˆÐ.ØÐÜ ×*Ñ*Ó,ˆIð	,Ø*.ˆIÔ'Ø—>‘>×7Ñ7¸È9Ð7ÓUàÑ+ùò /øð Ñ+ús   �A8Á#A= Á=Bc                ó.   — | j                  ||¬«      d   S )zbParse the known arguments at this point.

        :returns: An argparse namespace object.
        r–   r   )Úparse_known_and_unknown_args)ru   r   r—   s      r+   Úparse_known_argszParser.parse_known_argsè   s   € ð ×0Ñ0°ÀÐ0ÓKÈAÑNÐNr*   c                ó®  — |D �cg c]  }t        j                  |«      ‘Œ }}t        j                  dk  sdt        j                  cxk  rdk  rgn nd| j                  j                  ||«      \  }}|€J ‚t        |t        «      }g }|D ]&  }|j                  d«      r|n|j                  |«       Œ( ||fS | j                  j                  ||«      S c c}w )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.
        )é   é   é   )r¥   é   )r¥   r¨   r   rS   )r˜   r™   ÚsysÚversion_infork   r£   Úgetattrrq   rU   ÚappendÚparse_known_intermixed_args)	ru   r   r—   rž   rŸ   Úunknownr   Úunknown_flagsÚargs	            r+   r¢   z#Parser.parse_known_and_unknown_argsó   sÊ   € ð *.Ö. A”2—9‘9˜Q•<Ð.ˆÐ.Ü×Ñ˜jÒ(¨G´s×7GÑ7GÔ,TÈ*Õ,Tà!%§¡×!@Ñ!@ÀÈ)Ó!TÑˆI�wØÐ(Ð(Ð(Ü! )¬[Ó9ˆKØ')ˆMØò T�Ø"%§.¡.°Ô"5‘¸;×NÑNÈsÕSðTà˜mÐ+Ð+à—>‘>×=Ñ=¸gÀyÓQÐQùò /s   …Cr)   )Úaliasesc               ó(  ‡— |€d}nKt        |«      t        t        j                  fv rt	        ˆfd„t        |«      D «       «      }nt        ‰|«      }|t        u rGt        |t        t        f«      r&t        |t        «      rdnd}t        d‰›d|› d�«      ‚t        |«      }|||f| j                  ‰<   |D ][  }|| j                  v rt        d	|›d
�«      ‚| j                  j                  |«      x}	�t        |›d|	›�«      ‚‰| j                  |<   Œ] y)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 the scalar types, the plain Python type may be passed instead
            of the string tag: ``str``, ``bool``, ``int`` and ``float`` (for
            example ``type=int``). A union of these types accepts a value of
            any of its members, for example ``int | str``. In TOML
            configuration files the value may then be any of the member types;
            string-based formats (INI files, ``-o`` overrides) coerce it to the
            first member that accepts it.

            A ``Literal`` type of strings restricts the value to the given
            choices, for example ``Literal["auto", "long", "short"]``, and may
            also be a union member, for example ``int | Literal["auto"]``.
            Since the choices have no unambiguous implicit default, an
            explicit ``default`` must be passed.

            .. versionadded:: 9.2

                Passing a type expression such as ``int``, ``int | str``, or
                a ``Literal`` of strings.

            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>`.
        Nr   c              3  ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wr3   )rH   )r6   rM   r>   s     €r+   r8   z Parser.addini.<locals>.<genexpr>W  s   øè ø€ ò Ø6<Ô# D¨&×1ñùs   ƒÚunionr
   zini option z has a zL type, which has no implicit default; pass an explicit `default` to `addini`zalias z- conflicts with existing configuration optionz is already an alias of )r	   r   ÚtypesÚ	UnionTyperN   r   rH   r   rC   r!   r<   Úget_ini_default_for_typers   rt   Úget)
ru   r>   ÚhelprP   Údefaultr±   Úini_typeÚkindÚaliasÚalreadys
    `        r+   ÚaddinizParser.addini  s7  ø€ ðP ˆ<Ø‰HÜ˜Ó¤%¬¯©Ð!9Ñ9Üó Ü@HÈÃôó ‰Hô +¨4°Ó6ˆHØ”fÑÜ˜(¤U¬KÐ$8Ô9Ü",¨X´uÔ"=‘wÀ9�Ü Ø! $ ¨°°ð 7Oð Oóð ô /¨xÓ8ˆGà# X¨wÐ7ˆ�‰�dÑàò 	,ˆEØ˜Ÿ™Ñ%Ü Ø˜U˜IÐ%RÐSóð ð  ×,Ñ,×0Ñ0°Ó7Ð7�ÐDÜ  E 9Ð,DÀWÀKÐ!PÓQÐQØ'+ˆD×Ñ˜eÒ$ñ	,r*   )NN)
rv   ú
str | Nonerw   z!Callable[[Argument], None] | Noner^   rÀ   r_   r   ÚreturnÚNone©rÁ   rD   )r   rD   rÁ   rÂ   )r‚   ÚArgumentrÁ   rÂ   )Ú N)r>   rD   r‰   rD   rŠ   rÀ   rÁ   rm   ©rX   rD   r“   r   rÁ   rÂ   r3   )r   ú Sequence[str | os.PathLike[str]]r—   úargparse.Namespace | NonerÁ   úargparse.Namespace)r   rÇ   r—   rÈ   rÁ   z$tuple[argparse.Namespace, list[str]])r>   rD   r¹   rD   rP   r   rº   r   r±   úSequence[str]rÁ   rÂ   )r$   r%   r&   r'   rz   Úpropertyr^   Úsetterrƒ   r�   r‘   r    r£   r¢   r   r¿   r)   r*   r+   r]   r]   o   s†  „ ñð !Ø8<ð/ð
  Øñ/àð/ð 6ð/ð
 ð/ð ð/ð 
ó/ð: ò#ó ð#ð 
‡[�[ò$ó ð$ó)ð EIðØðØ&)ðØ7Aðà	óó>2ð& 04ð,à.ð,ð -ð,ð 
ó	,ð6 04ð	Oà.ð	Oð -ð	Oð 
ó		Oð 04ðRà.ðRð -ðRð 
.ó	Rð: !Øðb,ð "$ñb,àðb,ð ðb,ð ð	b,ð
 ðb,ð ðb,ð 
ôb,r*   r]   c                ó4   — | dv rg S | dk(  ry| dk(  ry| dk(  ryy)	zs
    Used by addini to get the default value for a given config option type, when
    default is not supplied.
    )r   r   r   r   r   Fr   r   r   g        rÅ   r)   rO   s    r+   r·   r·   q  s3   € ð
 Ð8Ñ8Øˆ	Ø	�ŠØØ	�ŠØØ	�ŠØàr*   c                  óf   — 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y	)rÄ   z$An option defined in an OptionGroup.c                ó   — || _         y r3   )Ú_action)ru   Úactions     r+   rz   zArgument.__init__…  s	   € Øˆ�r*   c                ó.   — | j                   j                  S r3   )rÐ   Ú__dict__r}   s    r+   r“   zArgument.attrsˆ  s   € Ø�|‰|×$Ñ$Ð$r*   c                ó.   — | j                   j                  S r3   )rÐ   Úoption_stringsr}   s    r+   ÚnameszArgument.names‹  s   € Ø�|‰|×*Ñ*Ð*r*   c                ó.   — | j                   j                  S r3   )rÐ   r�   r}   s    r+   r�   zArgument.destŽ  ó   € à�|‰|× Ñ Ð r*   c                ó.   — | j                   j                  S r3   )rÐ   rº   r}   s    r+   rº   zArgument.default’  s   € à�|‰|×#Ñ#Ð#r*   c                ó.   — | j                   j                  S r3   )rÐ   rP   r}   s    r+   rP   zArgument.type–  rØ   r*   c                óf  — t        | dd «      }|€yg }|dt        | j                  «       «      z   gz  }|dt        | j                  «      z   gz  }|j                  r|dt        | j                  «      z   gz  }|dt        | j
                  «      z   gz  }dj                  dj                  |«      «      S )	NrÐ   zArgument(<uninitialized>)zopts: zdest: ztype: z	default: zArgument({})r1   )r«   r5   rÖ   r�   rP   rº   Úformatr=   )ru   rÑ   r   s      r+   Ú__repr__zArgument.__repr__š  s©   € Ü˜˜y¨$Ó/ˆØˆ>Ø.ØˆØ�œD §¡£Ó.Ñ.Ð/Ñ/ˆØ�œD §¡›OÑ+Ð,Ñ,ˆØ�;Š;Ø�X¤ T§Y¡Y£Ñ/Ð0Ñ0ˆDØ�œt D§L¡LÓ1Ñ1Ð2Ñ2ˆØ×$Ñ$ T§Y¡Y¨t£_Ó5Ð5r*   N)rÑ   úargparse.ActionrÁ   rÂ   )rÁ   údict[str, Any])rÁ   rÊ   rÃ   )rÁ   r   )rÁ   z
Any | None)r$   r%   r&   r'   rz   r“   rÖ   rË   r�   rº   rP   rÝ   r)   r*   r+   rÄ   rÄ   ‚  sU   „ Ù.óó%ó+ð ò!ó ð!ð ò$ó ð$ð ò!ó ð!ô
6r*   rÄ   c                  óV   — e Zd ZdZ	 d	 	 	 	 	 	 	 	 	 dd„Zd	d„Zd	d„Z	 	 	 	 	 	 	 	 d
d„Zy)rm   z,A group of options shown in its own section.c                óR   — t        |«       || _        || _        g | _        || _        y r3   )r   Ú	_arggroupr>   ÚoptionsÚparser)ru   rŒ   r>   rä   r_   s        r+   rz   zOptionGroup.__init__ª  s(   € ô 	�yÔ!Ø!ˆŒØˆŒ	Ø')ˆŒØˆ�r*   c                óœ  — t        |«      j                  d„ | j                  D «       «      }|rt        d|› d�«      ‚| j                  rpd|vrlt        |«      }| j                  j                  D ]H  }|j                  D ]7  }|j                  |k(  sŒt        d|›d|j                  «       ›d|›d|›d	�	«      ‚ ŒJ | j                  ||d
¬«       y)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  óJ   K  — | ]  }|j                  «       D ]  }|–— Œ Œ y ­wr3   )rÖ   )r6   rY   r>   s      r+   r8   z(OptionGroup.addoption.<locals>.<genexpr>Æ  s-   è ø€ ò *
Ø°S·Y±Y³[ò*
Ø-1ŒDð*
Øñ*
ùs   ‚!#zoption names z already addedr�   zoption dest z already used by z' (this is the option that maps to dest z); pass dest=z$ explicitly to share the destinationF©Úallow_reservedN)
ÚsetÚintersectionrã   r<   rä   r[   rn   r�   rÖ   Ú_addoption_inner)ru   rX   r“   Úconflictr�   r‹   r‚   s          r+   r‘   zOptionGroup.addoption·  sç   € ô �t“9×)Ñ)ñ *
Ø ŸL™Lô*
ó 
ˆñ Ü˜}¨X¨J°nÐEÓFÐFà�;Š;˜6¨Ñ.Ü% dÓ+ˆDØŸ™×,Ñ,ò �Ø#Ÿm™mò �FØ—{‘{ dÓ*Ü(Ø*¨4¨(Ð2CØ%Ÿ|™|›~Ð0ð 1$Ø$( 8¨=¸¸ð A7ð7óð ñðð 	×Ñ˜d E¸%ÐÕ@r*   c                ó,   — | j                  ||d¬«       y)z}Like addoption(), but also allows registering short lower case options (e.g. -x),
        which are reserved for pytest core.Trç   N)rë   r’   s      r+   Ú
_addoptionzOptionGroup._addoptionÙ  s   € ð 	×Ñ˜d E¸$ÐÕ?r*   c                óÆ  — |s=|D ]8  }t        |«      dk\  sŒ|d   dk(  sŒ|d   j                  «       sŒ/t        d«      ‚  | j                  j                  |i |¤Ž}t        |«      }| j                  j                  |«       | j                  rT|j                  «       D ]%  }|j                  | j                  j                  |<   Œ' | j                  j                  |«       y y )Né   r   rS   r   z$lowercase short options are reserved)ÚlenÚislowerr<   râ   rp   rÄ   rã   r¬   rä   rÖ   r�   ro   rƒ   )ru   rX   r“   rè   rY   rÑ   r‚   r>   s           r+   rë   zOptionGroup._addoption_innerÞ  sÊ   € ñ Øò M�Ü�s“8˜q“= S¨¡V¨s£]°s¸1±v·~±~Õ7GÜ$Ð%KÓLÐLðMð -�—‘×,Ñ,¨dÐ<°eÑ<ˆÜ˜&Ó!ˆØ�‰×Ñ˜FÔ#Ø�;Š;ØŸ™›ò :�Ø.4¯k©k�—‘×%Ñ% dÒ+ð:à�K‰K×%Ñ% fÕ-ð r*   N)F)
rŒ   zargparse._ArgumentGroupr>   rD   rä   zParser | Noner_   r   rÁ   rÂ   rÆ   )rX   r"   r“   rß   rè   r   rÁ   rÂ   )r$   r%   r&   r'   rz   r‘   rî   rë   r)   r*   r+   rm   rm   §  sq   „ Ù6ð  ðà)ðð ðð ð	ð
 ðð 
óó AóD@ð
.Ø#ð.Ø,:ð.ØLPð.à	ô.r*   rm   c                  ó<   ‡ — e Zd Zddœ	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )rj   Nrb   c               óF   •— t         ‰| �  ||dt        dd¬«       || _        y )NFú@)rv   r^   Úadd_helpÚformatter_classÚallow_abbrevÚfromfile_prefix_chars)Úsuperrz   ÚDropShorterLongHelpFormatterri   )ru   rv   ri   r^   Ú	__class__s       €r+   rz   zPytestArgumentParser.__init__ð  s2   ø€ ô 	‰ÑØØØÜ8ØØ"%ð 	ô 	
ð %ˆ�r*   c           	     óò   — | j                   › d|› �}| j                  r?|ddj                  d„ t        | j                  j	                  «       «      D «       «      z   z  }t        | j                  «       |z   «      ‚)z1Transform argparse error message into UsageError.z	: error: ú
c              3  ó2   K  — | ]  \  }}d |› d|› �–— Œ y­w)z  r0   Nr)   )r6   ÚkÚvs      r+   r8   z-PytestArgumentParser.error.<locals>.<genexpr>	  s%   è ø€ ò $Ù"& ! Q�"�Q�C�r˜!˜”ñ$ùr9   )r^   ri   r=   ÚsortedÚitemsr   Úformat_usage)ru   ÚmessageÚmsgs      r+   ÚerrorzPytestArgumentParser.error  su   € ð —‘�˜9 W IÐ.ˆØ�?Š?Ø�4˜$Ÿ)™)ñ $Ü*0°·±×1FÑ1FÓ1HÓ*Iô$ó ñ ñ ˆCô ˜×*Ñ*Ó,¨sÑ2Ó3Ð3r*   )rv   rÀ   ri   zdict[str, str]r^   rÀ   rÁ   rÂ   )r  rD   rÁ   r   )r$   r%   r&   rz   r  Ú__classcell__©rü   s   @r+   rj   rj   ï  s8   ø„ ð  ñ%àð%ð #ð%ð
 ð%ð 
õ%÷&	4r*   rj   c                  óD   ‡ — e Zd ZdZdˆ fd„Zdˆ fd„Zdd„Zdˆ f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.
    c                ón   •— d|vr!t         j                  j                  «       |d<   t        ‰| �  |i |¤Ž y )NÚwidth)Ú_pytestÚ_ioÚget_terminal_widthrú   rz   )ru   r   Úkwargsrü   s      €r+   rz   z%DropShorterLongHelpFormatter.__init__  s3   ø€ à˜&Ñ Ü%Ÿk™k×<Ñ<Ó>ˆF�7‰OÜ‰Ñ˜$Ð) &Ó)r*   c                óÄ  •— t         ‰	| �  |«      }|r
|d   dk7  r|S |j                  d«      }t        |«      dk(  r$t        |d   «      dk(  st        |d   «      dk(  r|S g }i }|D ]p  }t        |«      dk(  s|d   dk(  rŒ|j	                  d«      sJ d|› d	�«       ‚|dd  }|j                  dd
«      }||vst        ||   «      t        |«      k  sŒl|||<   Œr |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   rS   r1   rð   r   ú rR   z&long optional argument without "--": [ú]rÅ   ú=)	rú   Ú_format_action_invocationÚsplitrñ   rU   rW   r¬   r¸   r=   )
ru   rÑ   Úorgstrrã   Úreturn_listÚ
short_longr‚   ÚxxoptionÚ	shortenedrü   s
            €r+   r  z6DropShorterLongHelpFormatter._format_action_invocation  s‘  ø€ Ü‘Ñ2°6Ó:ˆÙ�f˜Q‘i 3Ò&ØˆMØ—,‘,˜tÓ$ˆÜˆw‹<˜1Ò¤# g¨a¡j£/°QÒ"6¼#¸gÀa¹j»/ÈQÒ:NàˆMØˆØ%'ˆ
Øò 	1ˆFÜ�6‹{˜aÒ 6¨!¡9°Ò#3ØØ×$Ñ$ TÔ*ð Ø8¸¸ÀÐBóÐ*ð ˜a˜b�zˆHØ ×(Ñ(¨¨bÓ1ˆIØ 
Ñ*¬c°*¸YÑ2GÓ.HÌ3ØóLó /ð )1�
˜9Ò%ð	1ð ò 	@ˆFÜ�6‹{˜aÒ 6¨!¡9°Ò#3Ø×"Ñ" 6Ô*Ø�a�bˆz˜ZŸ^™^¨F¯N©N¸3ÀÓ,CÓDÓDØ×"Ñ" 6§>¡>°#°s¸AÓ#>Õ?ð		@ð
 �y‰y˜Ó%Ð%r*   c                ó   — t        ||«      S r3   )Ú_split_help_text)ru   Útextr  s      r+   Ú_split_linesz)DropShorterLongHelpFormatter._split_lines;  s   € Ü  eÓ,Ð,r*   c                ól   •— t        j                  ddt        ‰| �  |«      t         j                  ¬«      S )Nz[ \t]+$rÅ   )Úflags)ÚreÚsubrú   Ú_format_actionÚ	MULTILINE)ru   rÑ   rü   s     €r+   r$  z+DropShorterLongHelpFormatter._format_action>  s-   ø€ ô �v‰vØ˜œE™GÑ2°6Ó:Ä"Ç,Á,ô
ð 	
r*   )r   r   r  r   rÁ   rÂ   )rÑ   rÞ   rÁ   rD   ©r  rD   r  r   rÁ   z	list[str])	r$   r%   r&   r'   rz   r  r  r$  r  r	  s   @r+   rû   rû     s!   ø„ ñõ*õ&ó>-÷
ñ 
r*   rû   z^([-*+]|\(?\d+[.)])\s+c           
     ó2  — | j                  d«      \  }}}g }|j                  «       |z   t        j                  |«      z   j	                  «       D ]¡  }|j                  «       }|s|j                  d«       Œ'|dt        |«      t        |«      z
   }t        j                  |«      }	|	r|dt        |	j                  «       «      z  z   n|}
|j                  t        j                  ||||
d¬«      «       Œ£ |r|d   s|d= |r|d   sŒ|r|d   s|d= |r|d   sŒ|S )	aW  Wrap help text to ``width`` while preserving its line structure.

    Explicit line breaks are kept, so that a help text can use paragraphs and
    lists instead of being reflowed into one blob (see #6817).  Each line keeps
    its own indentation, and the continuation lines of a list item are indented
    to hang under the item's text.
    rþ   rÅ   Nr  F)Úinitial_indentÚsubsequent_indentÚbreak_on_hyphensr   éÿÿÿÿ)Ú	partitionÚstripÚtextwrapÚdedentÚ
splitlinesrV   r¬   rñ   Ú_BULLETÚmatchr‹   ÚextendÚwrap)r  r  ÚfirstÚnewlineÚrestÚlinesÚlineÚstrippedÚindentÚbulletr)  s              r+   r  r  J  s  € ð  Ÿ>™>¨$Ó/Ñ€Eˆ7�DØ€EØ—‘“ Ñ(¬8¯?©?¸4Ó+@Ñ@×LÑLÓNò 
ˆØ—;‘;“=ˆÙØ�L‰L˜ÔØØÐ1œ˜D›	¤C¨£MÑ1Ð2ˆÜ—‘˜xÓ(ˆÙBH˜F S¬3¨v¯|©|«~Ó+>Ñ%>Ò>ÈfÐØ�‰Ü�M‰MØØØ%Ø"3Ø!&ôõ	
ð
ñ& ˜˜ašØ�!ˆHñ ˜˜a›á
˜˜bš	Ø�"ˆIñ ˜˜b›	à€Lr*   c                  óR   ‡ — 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.
    c               óL   •— t        ‰| �  ||dg|¢­i |¤Ž || _        || _        y )Nr   )rú   rz   Ú
ini_optionÚ	ini_value)	ru   rÕ   r�   rf   r@  rA  r   r  rü   s	           €r+   rz   zOverrideIniAction.__init__y  s.   ø€ ô 	‰Ñ˜¨¨qÐB°4ÒB¸6ÒBØ$ˆŒØ"ˆ�r*   c                óÂ   — t        || j                  d«       t        |dd «      }|€g }|j                  | j                  › d| j
                  › �«       t        |d|«       y )NTÚoverride_inir  )Úsetattrr�   r«   r¬   r@  rA  )ru   rä   r—   r   r  Úcurrent_overridess         r+   Ú__call__zOverrideIniAction.__call__‡  s_   € ô 	�	˜4Ÿ9™9 dÔ+Ü# I¨~¸tÓDÐØÐ$Ø "ÐØ× Ñ  D§O¡OÐ#4°A°d·n±nÐ5EÐ!FÔGÜ�	˜>Ð+<Õ=r*   r3   )rÕ   rÊ   r�   rD   rf   zint | str | Noner@  rD   rA  rD   rÁ   rÂ   )rä   zargparse.ArgumentParserr—   rÉ   rÁ   rÂ   )r$   r%   r&   r'   rz   rF  r  r	  s   @r+   r>  r>  q  sm   ø„ ñð #'ð	#à%ð#ð ð#ð  ð	#ð ð#ð ð#ð 
õ#ð>à'ð>ð &ð>ð 
÷>r*   r>  )r>   rD   r?   ÚobjectrÁ   r   )r>   rD   r?   rG  rÁ   z_IniTypeTag | _IniLiteral)rP   r,   rÁ   rD   )rX   rÊ   rÁ   rD   )rP   r   rÁ   r   r&  )>Ú
__future__r   rš   Úcollections.abcr   r   Údataclassesr˜   r"  r©   r.  rµ   Útypingr   r   r   r	   r
   r   r   r   r   Ú
exceptionsr   Ú_pytest._ior  Ú_pytest.compatr   Ú_pytest.deprecatedr   Útyping_extensionsr   rq   r   r(   r   r   r   rD   r   Ú	dataclassr!   rN   r,   r-   r@   rH   rL   r[   r]   r·   rÄ   rm   ÚArgumentParserrj   ÚHelpFormatterrû   Úcompiler1  r  ÚActionr>  )r7   s   0r+   ú<module>rV     sÙ  ðæ "ã Ý $Ý $Û Û 	Û 	Û 
Û Û Ý Ý Ý Ý Ý Ý Ý  Ý Ý å "Û Ý !Ý -ñ Ý*ð €ð !ØMñ€ˆYó ñ ð )¨8°D¸3±JÀÑ4FÈÑ4LÑ+MÑMÐPTÑT€K�ÓTð Ø€×Ñ˜dÔ#÷ð ó $ó ðð ! ;Ñ.°°{À[Ñ7PÐRUÐ7UÑ1VÑV€ˆÓ Vñ >FÀkÓ=RÖ(S°c¨¨c©Ò(SØˆØˆ&ØˆØ	ˆ7ð	Wñ )€
Ð%ó ó
ó
)óó-ð ÷~,ð ~,ó ð~,óB÷""6ñ "6÷JE.ñ E.ôP4˜8×2Ñ2ô 4ô@4
 8×#9Ñ#9ô 4
ðp ˆ"�*‰*Ð.Ó
/€ó$ôN">˜Ÿ™õ ">ùòg )Ts   Ã/
F