Ë
    æØjj3< ã                  ó  — d 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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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ZddlZddlZddlm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)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l0m1Z1 ddl0m2Z2 ddl3m4Z4 ddl3m5Z5 ddl3m6Z6 dd l3m7Z7 dd!l8m9Z9 ddl:Z8dd"l:m;Z; dd#l:m<Z< dd$l=m>Z> dd%l?m@Z@ dd&lAmBZB dd'lAmCZC dd(lAmDZD dd)lEmFZF dd*lEmGZG dd+lEmHZH ddlIZ8ddlJZ8dd,lKmLZL dd-lKmMZM dd.lNmOZO dd/lNmPZP dd0lNmQZQ dd1lNmRZR dd2lNmSZS dd3lNmTZT dd4lUmVZV dd5lWmXZX dd6lWmYZY e(rdd7lZm[Z[ dd8l\m]Z] dd9l^m_Z_ e`Za	  e+d:«      Zb e-d:«      Zce% G d;„ d<ejÈ                  «      «       Ze G d=„ d>ef«      Zg	 	 	 	 dd?„Zhd€d@„Zid�dA„Zjd‚dB„Zk	 	 dƒ	 	 	 	 	 d„dC„ZldddDœ	 	 	 	 	 	 	 d…dE„Zmd†dF„Znd†dG„Zo G dH„ dI«      Zpd‡dJ„Zqd‡dK„ZrdLZsg es¢dM‘dN‘dO‘dP‘dQ‘dR‘dS‘dT‘dU‘dV‘dW‘dX‘dY‘dZ‘d[‘d\‘d]‘d^‘d_‘d`‘da‘db‘dc‘dd‘de‘­Zth et£df’dg’dh’Zu	 	 dƒddiœ	 	 	 	 	 	 	 dˆdk„Zvd‰dm„Zw	 dŠddiœ	 	 	 	 	 	 	 d‹dn„ZxdŒdo„Zy	 	 	 	 	 	 	 	 d�dp„Zze% G dq„ dle/«      «       Z{	 	 	 	 dŽdr„Z|d�ds„Z} G dt„ duee~e"f   «      Ze% G dv„ dj«      «       Z€d�dw„Z�	 dŠ	 	 	 	 	 d‘dx„Z‚d’dy„Zƒ edz¬{«      	 	 	 	 	 	 d“d|„«       Z„d”d}„Z…	 	 	 	 	 	 d•d~„Z†y)–z=Command line options, config-file and conftest.py processing.é    )ÚannotationsN)ÚCallable)Ú	Generator)ÚIterable)ÚIterator)ÚMapping)ÚMutableMapping)ÚSequence)Ú	lru_cache)Údedent)ÚFunctionType)ÚAny)Úcast)ÚFinal)Úfinal)ÚIO)ÚTextIO)ÚTYPE_CHECKING)ÚHookimplMarker)ÚHookimplOpts)ÚHookspecMarker)ÚHookspecOpts)ÚPluginManageré   )Ú	PrintHelp)Ú
UsageError)Ú
ConfigDict)ÚConfigValue)Údetermine_setup)Úparse_override_ini)Ú__version__)ÚExceptionInfo)Úfilter_traceback)ÚTracebackStyle)ÚTerminalWriter)Úassert_never)Ú
deprecated)ÚNOTSET)ÚArgument)ÚFILE_OR_DIR)ÚParser)Úfail)ÚSkipped)Úabsolutepath)Úbestrelpath)Úimport_path)Ú
ImportMode)Úresolve_package_path)Úsafe_exists)ÚStash)ÚPytestConfigWarning)Úwarn_explicit_for)ÚAssertionRewritingHook)ÚCache)ÚTerminalReporterÚpytestc                  ó0   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zy
)ÚExitCodez�Encodes the valid exit codes by pytest.

    Currently users and plugins may supply other exit codes as well.

    .. versionadded:: 5.0
    r   r   é   é   é   é   é   r:   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚOKÚTESTS_FAILEDÚINTERRUPTEDÚINTERNAL_ERRORÚUSAGE_ERRORÚNO_TESTS_COLLECTEDÚMAX_WARNINGS_ERROR© ó    úY/opt/eval-harness/bench_task/venv/lib/python3.12/site-packages/_pytest/config/__init__.pyr<   r<   d   s3   „ ñð 
€Bà€Là€Kà€Nà€KàÐàÐà�JrN   r<   c                  ó(   — e Zd Z	 	 	 	 	 	 dd„Zdd„Zy)ÚConftestImportFailurec               ó    — || _         || _        y ©N)ÚpathÚcause)ÚselfrT   rU   s      rO   Ú__init__zConftestImportFailure.__init__€   s   € ð ˆŒ	Øˆ�
rN   c                óz   — t        | j                  «      j                  › d| j                  › d| j                  › d�S )Nú: z (from ú))ÚtyperU   rB   rT   ©rV   s    rO   Ú__str__zConftestImportFailure.__str__‰   s3   € Ü�t—z‘zÓ"×+Ñ+Ð,¨B¨t¯z©z¨l¸'À$Ç)Á)ÀÈAÐNÐNrN   N)rT   úpathlib.PathrU   Ú	ExceptionÚreturnÚNone)r`   Ústr)rB   rC   rD   rW   r]   rM   rN   rO   rQ   rQ      s)   „ ðàðð ð	ð
 
óôOrN   rQ   c                ó„   — t        | «      xr4 dt        | j                  «      j                  t        j
                  «      vS )zÓFilter tracebacks entries which point to pytest internals or importlib.

    Make a special case for importlib because we use it to import test modules and conftest files
    in _pytest.pathlib.import_path.
    Ú	importlib)r#   rb   rT   ÚsplitÚosÚsep)Úentrys    rO   Ú,filter_traceback_for_conftest_import_failureri   �   s3   € ô ˜EÓ"ÒW {¼#¸e¿j¹j»/×:OÑ:OÔPR×PVÑPVÓ:WÐ'WÐWrN   c                óÂ  — t        j                  | j                  «      }t        |«      }|j	                  d| j
                  › d�d¬«       |j                  j                  t        «      |_        |j                  r|j                  dd¬«      n|j                  «       }t        |«      }|j                  «       D ]#  }|j	                  |j                  «       d¬«       Œ% y )Nz$ImportError while loading conftest 'z'.T©ÚredÚshortF)ÚstyleÚchain)r"   Úfrom_exceptionrU   r%   ÚlinerT   Ú	tracebackÚfilterri   ÚgetreprÚexconlyrb   Ú
splitlinesÚrstrip)ÚeÚfileÚexc_infoÚtwÚexc_reprÚformatted_tbrq   s          rO   Úprint_conftest_import_errorr~   ˜   sÄ   € Ü×+Ñ+¨A¯G©GÓ4€HÜ	˜Ó	€BØ‡G�GÐ2°1·6±6°(¸"Ð=À4€GÔHØ!×+Ñ+×2Ñ2Ü4ó€HÔð
 ×Òð 	×Ñ˜w¨eÐÔ4à×ÑÓð ô
 �x“=€LØ×'Ñ'Ó)ò )ˆØ
�‰�—‘“ 4ˆÕ(ñ)rN   c                ój   — t        |«      }| j                  D ]  }|j                  d|› d�d¬«       Œ y )NzERROR: ú
Trk   )r%   Úargsrq   )rx   ry   r{   Úmsgs       rO   Úprint_usage_errorrƒ   ©   s8   € Ü	˜Ó	€BØ�v‰vò -ˆØ
�‰�'˜#˜˜bÐ! tˆÕ,ñ-rN   c                ó\   — | r| d   nd}t         j                  j                  |«      dk(  ryy)zèDetermine the CLI program name from the argument vector.

    :param argv: The argument vector (typically ``sys.argv``).
    :returns: ``"python -m pytest"`` when invoked via ``python -m``,
              ``"pytest"`` otherwise.
    r   Ú z__main__.pyzpython -m pytestr:   )rf   rT   Úbasename)ÚargvÚargv0s     rO   Ú_get_prog_namer‰   ¯   s.   € ñ ˆD�ŠG €EÜ	‡w�w×Ñ˜Ó -Ò/Ø!ØrN   c                ó   — t        | |d¬«      S )aL  Perform an in-process test run.

    :param args:
        List of command line arguments. If `None` or not given, defaults to reading
        arguments directly from the process command line (:data:`sys.argv`).
    :param plugins: List of plugin objects to be auto-registered during initialization.

    :returns: An exit code.
    zpytest.main())r�   ÚpluginsÚprog)Ú_main©r�   r‹   s     rO   Úmainr�   ¼   s   € ô �d G°/ÔBÐBrN   rŽ   c                óž  — | €t         j                  dd  n| }t        |t        «      r]|j	                  d«      |j	                  d«      z   dk(  r7t         j
                  j                  dt        › d�«       t        j                  S t        j                  j                  d«      }	 t        t        j                  d<   	 t        |||¬«      }	 |j&                  j)                  |¬	«      }	 t        |«      |j+                  «        |€!t        j                  j%                  dd «       S |t        j                  d<   S # t        $ rk}t        |t         j                   ¬«       t        j"                  cY d }~|€!t        j                  j%                  dd «       S |t        j                  d<   S d }~ww xY w# t,        $ rK |cY |j+                  «        |€!t        j                  j%                  dd «       S |t        j                  d<   S w xY w# |j+                  «        w xY w# t.        $ rk}t1        |t         j                   ¬«       t        j"                  cY d }~|€!t        j                  j%                  dd «       S |t        j                  d<   S d }~ww xY w# |€!t        j                  j%                  dd «       w |t        j                  d<   w xY w)
Nr   ú	--versionz-Vzpytest r€   ÚPYTEST_VERSION©rŒ   ©ry   ©Úconfig)Úsysr‡   Ú
isinstancer
   ÚcountÚstdoutÚwriter!   r<   rF   rf   ÚenvironÚgetÚ_prepareconfigrQ   r~   ÚstderrrJ   ÚpopÚhookÚpytest_cmdline_mainÚ_ensure_unconfigureÚ
ValueErrorr   rƒ   )r�   r‹   rŒ   Únew_argsÚold_pytest_versionr–   rx   Úrets           rO   r�   r�   Ì   s.  € ð  $˜|Œs�x‰x˜˜‰|°€Hä�8œXÔ&Ø�^‰^˜KÓ(¨8¯>©>¸$Ó+?Ñ?ÀAÒEä�
‰
×Ñ˜7¤; -¨rÐ2Ô3Ü�{‰{ÐäŸ™Ÿ™Ð(8Ó9Ðð>Ü'2Œ�
‰
Ð#Ñ$ð	(Ü# H¨g¸DÔAˆFð
	)Ø"(§+¡+×"AÑ"AÈÐ"AÓ"PˆCðÜ “}ð ×&Ñ&Ô(ð
 Ð%Ü�J‰J�N‰NÐ+¨TÕ2à+=ŒB�J‰JÐ'Ò(øô' %ò 	(Ü'¨´·
±
Õ;Ü×'Ñ'Ô'ð Ð%Ü�J‰J�N‰NÐ+¨TÕ2à+=ŒB�J‰JÐ'Ò(ûð'	(ûô ò Ø‘
à×&Ñ&Ô(ð
 Ð%Ü�J‰J�N‰NÐ+¨TÕ2à+=ŒB�J‰JÐ'Ò(ðûð ×&Ñ&Õ(ûÜò $Ü˜!¤#§*¡*Õ-Ü×#Ñ#Ô#àÐ%Ü�J‰J�N‰NÐ+¨TÕ2à+=ŒB�J‰JÐ'Ò(ûð$ûð Ð%Ü�J‰J�N‰NÐ+¨TÕ2à+=ŒB�J‰JÐ'Ò(ús–   Â%H Â=D: ÃH Ã)
F1 Ã3H Ä:	F.Å*F)Å-F.Å.H Æ)F.Æ.H Æ1HÆ<H Æ=H ÈHÈH ÈHÈH È	JÈ&*JÉJÉJ ÊJÊJ Ê8Kc                 óp  — 	 t        t        t        j                  «      ¬«      } t        j                  j                  «        | S # t        $ rg t        j                  t        j                  t        j                  «      }t        j                  |t        j                  j                  «       «       Y yw xY w)z}The CLI entry point of pytest (internal).

    This is the real implementation used by entry points and ``__main__.py``.
    r“   r   )r�   r‰   r—   r‡   rš   ÚflushÚBrokenPipeErrorrf   ÚopenÚdevnullÚO_WRONLYÚdup2Úfileno)Úcoder¬   s     rO   Ú_console_mainr±   ö   sv   € ð	Üœ.¬¯©Ó2Ô3ˆÜ�
‰
×ÑÔØˆøÜò ô —'‘'œ"Ÿ*™*¤b§k¡kÓ2ˆÜ
�‰�œŸ™×*Ñ*Ó,Ô-Ùðús   ‚AA ÁA-B5Â4B5c                 óR   — ddl } ddlm}  | j                  |d¬«       t	        «       S )zÅThe CLI entry point of pytest.

    .. deprecated:: 9.1
        This function is slated for removal in pytest 10.
        It is not meant for programmable use; use :func:`pytest.main` instead.
    r   N)ÚCONSOLE_MAINr=   ©Ú
stacklevel)ÚwarningsÚ_pytest.deprecatedr³   Úwarnr±   )r¶   r³   s     rO   Úconsole_mainr¹     s"   € ó å/à€H‡M�M�,¨1Õ-Ü‹?ÐrN   c                  ó   — e Zd Z ee«      Zy)ÚcmdlineN)rB   rC   rD   Ústaticmethodr�   rM   rN   rO   r»   r»     s   „ Ù˜Ó�DrN   r»   c                ód   — t         j                  j                  | «      rt        |› d| › �«      ‚| S )ztArgparse type validator for filename arguments.

    :path: Path of filename.
    :optname: Name of the option.
    z must be a filename, given: ©rf   rT   Úisdirr   ©rT   Úoptnames     rO   Úfilename_argrÂ     s0   € ô 
‡w�w‡}�}�TÔÜ˜G˜9Ð$@ÀÀÐGÓHÐHØ€KrN   c                ód   — t         j                  j                  | «      st        |› d| › �«      ‚| S )zvArgparse type validator for directory arguments.

    :path: Path of directory.
    :optname: Name of the option.
    z must be a directory, given: r¾   rÀ   s     rO   Údirectory_argrÄ   &  s0   € ô �7‰7�=‰=˜ÔÜ˜G˜9Ð$AÀ$ÀÐHÓIÐIØ€KrN   )Úmarkr�   ÚrunnerÚfixturesÚ
helpconfigÚpythonÚterminalÚ	debuggingÚunittestÚcaptureÚskippingÚ
legacypathÚtmpdirÚmonkeypatchÚrecwarnÚpastebinÚ	assertionÚjunitxmlÚdoctestÚcacheproviderÚ	setuponlyÚ	setupplanÚstepwiseÚunraisableexceptionÚthreadexceptionr¶   ÚloggingÚreportsÚfaulthandlerÚsubtestsÚpytesterÚpytester_assertionsÚterminalprogressr“   ÚConfigc               ó0  — t        «       }t        j                  | xs d|t        j                  j                  «       ¬«      }t        |||¬«      }|j                  r|j                  |j                  d¬«       t        D ]  }|j                  |«       Œ |S )NrM   ©r�   r‹   Údir©Úinvocation_paramsrŒ   T©Úexclude_only)
ÚPytestPluginManagerrä   ÚInvocationParamsÚpathlibÚPathÚcwdr�   Úconsider_preparseÚdefault_pluginsÚimport_plugin)r�   r‹   rŒ   Úpluginmanagerré   r–   Úspecs          rO   Ú
get_configrö   _  s”   € ô (Ó)€MÜ×/Ñ/ØŠZ�RØÜ�L‰L×ÑÓð 0ó Ðô
 �MÐ5FÈTÔR€Fà×Òà×'Ñ'Ð(9×(>Ñ(>ÈTÐ'ÔRäò *ˆØ×#Ñ# DÕ)ð*ð €MrN   rì   c                 ó*   — t        «       j                  S )zíObtain a new instance of the
    :py:class:`pytest.PytestPluginManager`, with default plugins
    already loaded.

    This function can be used by integration with other tools, like hooking
    into pytest to run tests into an IDE.
    )rö   rô   rM   rN   rO   Úget_plugin_managerrø   x  s   € ô ‹<×%Ñ%Ð%rN   c               óø  — t        | t        j                  «      rt        j                  | «      g} n6t        | t        «      s&d}t        |j                  | t        | «      «      «      ‚t        | ||¬«      }|j                  }	 |r:|D ]5  }t        |t        «      r|j                  |«       Œ%|j                  |«       Œ7 |j                  j                  || ¬«      }|S # t        $ r |j!                  «        ‚ w xY w)NzG`args` parameter expected to be a list of strings, got: {!r} (type: {})r“   )rô   r�   )r˜   rf   ÚPathLikeÚfspathÚlistÚ	TypeErrorÚformatr[   rö   rô   rb   Úconsider_pluginargÚregisterr¡   Úpytest_cmdline_parseÚBaseExceptionr£   )r�   r‹   rŒ   r‚   Úinitial_configrô   Úpluginr–   s           rO   rž   rž   ƒ  sî   € ô �$œŸ™Ô$Ü—	‘	˜$“Ð ‰Ü˜œdÔ#àUð 	ô ˜Ÿ
™
 4¬¨d«Ó4Ó5Ð5ä  g°DÔ9€NØ"×0Ñ0€MðÙØ!ò 3�Ü˜f¤cÔ*Ø!×4Ñ4°VÕ<à!×*Ñ*¨6Õ2ð	3ð
 '×+Ñ+×@Ñ@Ø'¨dð Aó 
ˆð ˆøÜò Ø×*Ñ*Ô,Øðús   ÂAC ÃC9c                ó>   — | j                  «       r| j                  S | S )z<Get the directory of a path - itself if already a directory.)Úis_fileÚparent)rT   s    rO   Ú_get_directoryr  £  s   € à‡|�|„~Ø�{‰{ÐàˆrN   c                ó  — t         rt        j                  | «      sJ ‚t        | dg «      D �ch c]  }|j                  ’Œ }}g }i }|D ]Z  }t        | |t
        «      }|t
        ur|j                  |› d|› �«       d||<   Œ8||v r|j                  |› d�«       d||<   ŒVd||<   Œ\ |radj                  |«      }	t        j                  j                  j                  || j                  |	¬«      }
t        t        t        | «      |
«       |S c c}w )NÚ
pytestmarkú=Tz=TrueFú, )r[   ÚfullnameÚ	hook_opts)r   ÚinspectÚ	isroutineÚgetattrÚnameÚAttributeErrorÚappendÚjoinÚ_pytestr'   ÚHOOK_LEGACY_MARKINGrþ   rD   r6   r   r   )ÚmethodÚ	hook_typeÚ	opt_namesÚmÚknown_marksÚ	must_warnÚoptsÚopt_nameÚopt_attrr  Úmessages              rO   Ú_get_legacy_hook_marksr"  «  s  € õ
 ä× Ñ  Ô(Ð(Ð(Ü-4°V¸\È2Ó-NÖO¨˜QŸV›VÐO€KÐOØ€IØ€DØò 	#ˆÜ˜6 8¬^Ó<ˆØœ>Ñ)Ø×Ñ ˜z¨¨8¨*Ð5Ô6Ø!ˆD�ŠNØ˜Ñ$Ø×Ñ ˜z¨Ð/Ô0Ø!ˆD�ŠNà"ˆD�ŠNð	#ñ Ø—I‘I˜iÓ(ˆ	Ü×$Ñ$×8Ñ8×?Ñ?ØØ×(Ñ(Øð @ó 
ˆô
 	œ$œ|¨VÓ4°gÔ>Ø€Kùò+ Ps   ­D
c                  óh  ‡ — e Zd ZdZdˆ fd„Z	 	 	 	 	 	 dˆ fd„Zdˆ fd„Zddˆ f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œ	 	 	 	 	 d(d„Zd)d„Z	 	 	 	 	 	 d*d„Zdd„Zd+d„Z	 	 	 	 d,d„Zd-d.d„Zˆ xZS )/rì   a;  A :py:class:`pluggy.PluginManager <pluggy.PluginManager>` with
    additional pytest-specific functionality:

    * Loading plugins from the command line, ``PYTEST_PLUGINS`` env variable and
      ``pytest_plugins`` global variables found in plugins being loaded.
    * ``conftest.py`` loading during start-up.
    c                óÖ  •— ddl m} ddl m} t        ‰| �  d«       t        «       | _        i | _        d | _        d| _	         t        d«      t        «      | _        g | _        | j                  t        j                  «       | j!                  | «       t"        j$                  j'                  d«      r—t(        j*                  }t-        |dd	«      }	 t/        t#        j0                  |j3                  «       «      |j4                  d
|¬«      }| j8                  j:                  j=                  |j>                  «       | jA                  «         |«       | _!        d| _"        y # t6        $ r Y Œ^w xY w)Nr   )ÚDummyRewriteHook)ÚRewriteHookr:   Fé   ÚPYTEST_DEBUGÚencodingÚutf8r   )ÚmodeÚ	bufferingr)  )#Ú_pytest.assertionr%  r&  ÚsuperrW   ÚsetÚ_conftest_pluginsÚ_dirpath2confmodsÚ_confcutdirÚ_noconftestr   r  Úskipped_pluginsÚadd_hookspecsr  Úhookspecr   rf   rœ   r�   r—   rŸ   r  r«   Údupr¯   r+  r_   ÚtraceÚrootÚ	setwriterr›   Úenable_tracingÚrewrite_hookÚ_configured)rV   r%  r&  Úerrr)  Ú	__class__s        €rO   rW   zPytestPluginManager.__init__Õ  s#  ø€ Ý6Ý1ä‰Ñ˜Ô"ô 9<»ˆÔð NPˆÔà04ˆÔà ˆÔð
 -œi¨›n¬^Ó<ˆÔð 79ˆÔà×Ñœ7×+Ñ+Ô,Ø�‰�dÔÜ�:‰:�>‰>˜.Ô)ÜŸ:™:ˆCÜ# C¨°VÓ<ˆHðÜÜ—F‘F˜3Ÿ:™:›<Ó(ØŸ™ØØ%ô	�ð �J‰J�O‰O×%Ñ% c§i¡iÔ0Ø×ÑÔ!ñ *:Ó);ˆÔà ˆÕøô ò Ùðús   Ã:E Å	E(Å'E(c                óÚ   •— |j                  d«      sy|dk(  ryt        ‰| �	  ||«      }|�|S t        ||«      }t	        j
                  |«      syt        |dd«      }t        t        |«      S )ú:meta private:Úpytest_NÚpytest_pluginsÚimpl)ÚtryfirstÚtrylastÚoptionalhookÚhookwrapper)	Ú
startswithr.  Úparse_hookimpl_optsr  r  r  r"  r   r   )rV   r  r  r  r  Úlegacyr?  s         €rO   rJ  z'PytestPluginManager.parse_hookimpl_opts	  sz   ø€ ð �‰˜yÔ)ØàÐ#Ò#Øä‰wÑ*¨6°4Ó8ˆØÐØˆKä˜ Ó&ˆä× Ñ  Ô(Øä'Ø�FÐRó
ˆô ”L &Ó)Ð)rN   c                ó    •— t         ‰| �  ||«      }|€:t        ||«      }|j                  d«      rt	        |dd«      }t        t        |«      }|S )rA  rB  rõ   )ÚfirstresultÚhistoric)r.  Úparse_hookspec_optsr  rI  r"  r   r   )rV   Úmodule_or_classr  r  r  rK  r?  s         €rO   rO  z'PytestPluginManager.parse_hookspec_opts$  sV   ø€ ä‰wÑ*¨?¸DÓAˆØˆ<Ü˜_¨dÓ3ˆFØ�‰˜yÔ)Ü/Ø˜FÐ$?ó�ô œL¨&Ó1�ØˆrN   c           
     óš  •— |t         j                  j                  v r>t        j                  t        dj                  |j                  dd«      «      «      «       y t        ‰| �%  ||«      }|�]| j                  j                  j                  t        ||| ¬«      ¬«       t        |t        j                   «      r| j#                  |«       |S )NzQ{} plugin has been merged into the core, please remove it from your requirements.Ú_ú-)r  Úplugin_nameÚmanager©Úkwargs)r  r'   ÚDEPRECATED_EXTERNAL_PLUGINSr¶   r¸   r5   rþ   Úreplacer.  r   r¡   Úpytest_plugin_registeredÚcall_historicÚdictr˜   ÚtypesÚ
ModuleTypeÚconsider_module)rV   r  r  rT  r?  s       €rO   r   zPytestPluginManager.register0  s¹   ø€ Ø”7×%Ñ%×AÑAÑAÜ�M‰MÜ#ð?ß?E¹vØŸ™ S¨#Ó.ó@óôð Ü‘gÑ& v¨tÓ4ˆØÐ"Ø�I‰I×.Ñ.×<Ñ<ÜØ!Ø +Ø ôð =ô ô ˜&¤%×"2Ñ"2Ô3Ø×$Ñ$ VÔ,ØÐrN   c                ó(   — | j                  |«      }|S rS   )Ú
get_plugin)rV   r  r  s      rO   Ú	getpluginzPytestPluginManager.getpluginI  s   € à'+§¡°tÓ'<ˆØˆrN   c                ó6   — t        | j                  |«      «      S )z:Return whether a plugin with the given name is registered.)Úboolra  )rV   r  s     rO   Ú	haspluginzPytestPluginManager.haspluginN  s   € ä�D—O‘O DÓ)Ó*Ð*rN   c                óZ   — |j                  dd«       |j                  dd«       d| _        y)rA  Úmarkerszµtryfirst: mark a hook implementation function such that the plugin machinery will try to call it first/as early as possible. DEPRECATED, use @pytest.hookimpl(tryfirst=True) instead.z±trylast: mark a hook implementation function such that the plugin machinery will try to call it last/as late as possible. DEPRECATED, use @pytest.hookimpl(trylast=True) instead.TN)Úaddinivalue_liner=  ©rV   r–   s     rO   Úpytest_configurez$PytestPluginManager.pytest_configureR  s>   € ð 	×ÑØðGô	
ð 	×ÑØðFô	
ð  ˆÕrN   c               ó  — |rt        ||z  «      nd| _        || _        || _        g }	|D ]‹  }
t	        |
«      }|j                  d«      }|dk7  r|d| }t        ||z  «      }t        |«      sŒC|	j                  |«       |j                  «       sŒe|	j                  d„ |j                  d«      D «       «       Œ� |	s8|	j                  |«       |	j                  d„ |j                  d«      D «       «       |	D ]  }| j                  ||||¬«       Œ y)a`  Load initial conftest files given a preparsed "namespace".

        As conftest files may add their own command line options which have
        arguments ('--my-opt somepath') we might get some false positives.
        All builtin and 3rd party plugins will have been loaded, however, so
        common options will not confuse our logic here.
        Nú::éÿÿÿÿc              3  óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­wrS   ©Úis_dir©Ú.0Úxs     rO   ú	<genexpr>z=PytestPluginManager._set_initial_conftests.<locals>.<genexpr>�  s   è ø€ ÒM QÀ!Ç(Á(Å*œqÑMùó   ‚˜ztest*c              3  óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­wrS   ro  rq  s     rO   rt  z=PytestPluginManager._set_initial_conftests.<locals>.<genexpr>“  s   è ø€ ÒQ ÀaÇhÁhÅjœ1ÑQùru  ©Úconsider_namespace_packages)r.   r2  r3  Ú_using_pyargsrb   Úfindr3   r  rp  ÚextendÚglobÚ_loadconftestmodules)rV   r�   ÚpyargsÚ
noconftestÚrootpathÚ
confcutdirÚinvocation_dirÚ
importmoderx  ÚanchorsÚinitial_pathrT   ÚiÚanchors                 rO   Ú_set_initial_conftestsz*PytestPluginManager._set_initial_conftestsg  s  € ñ( :DŒL˜¨*Ñ4Ô5Èð 	Ôð &ˆÔØ#ˆÔàˆØ ò 	NˆLÜ�|Ó$ˆDà—	‘	˜$“ˆAØ�BŠwØ˜B˜Q�x�Ü! .°4Ñ"7Ó8ˆFô ˜vÔ&Øà�N‰N˜6Ô"à�}‰}�Ø—‘ÑM¨&¯+©+°gÓ*>ÔMÕMð	Nñ  Ø�N‰N˜>Ô*Ø�N‰NÑQ n×&9Ñ&9¸'Ó&BÔQÔQàò 	ˆFØ×%Ñ%ØØØØ,Gð	 &õ ñ	rN   c                óL   — | j                   €y|| j                   j                  vS )z:Whether to consider the given path to load conftests from.T)r2  Úparents©rV   rT   s     rO   Ú_is_in_confcutdirz%PytestPluginManager._is_in_confcutdir�  s*   € à×ÑÐ#Øð ˜4×+Ñ+×3Ñ3Ð3Ð3rN   c               óX  — | j                   ry | j                  |«      }|| j                  v ry g }t        |g|j                  ¢­«      D ]P  }| j                  |«      sŒ|dz  }|j                  «       sŒ+| j                  ||||¬«      }	|j                  |	«       ŒR || j                  |<   y )Núconftest.pyrw  )	r3  r  r1  ÚreversedrŠ  rŒ  r  Ú_importconftestr  )
rV   rT   rƒ  r€  rx  Ú	directoryÚclistr  ÚconftestpathÚmods
             rO   r}  z(PytestPluginManager._loadconftestmodules¬  s¿   € ð ×ÒØà×'Ñ'¨Ó-ˆ	ð ˜×.Ñ.Ñ.ØàˆÜ 	Ð>¨I×,=Ñ,=Ñ>Ó?ò 
	&ˆFØ×%Ñ% fÕ-Ø%¨Ñ5�Ø×'Ñ'Õ)Ø×.Ñ.Ø$Ø"Ø Ø4Oð	 /ó �Cð —L‘L Õ%ð
	&ð -2ˆ×Ñ˜yÒ)rN   c                ó\   — | j                  |«      }| j                  j                  |d«      S )NrM   )r  r1  r�   )rV   rT   r‘  s      rO   Ú_getconftestmodulesz'PytestPluginManager._getconftestmodulesÌ  s+   € Ø×'Ñ'¨Ó-ˆ	Ø×%Ñ%×)Ñ)¨)°RÓ8Ð8rN   c                ó˜   — | j                  |«      }t        |«      D ]  }	 |t        ||«      fc S  t	        |«      ‚# t        $ r Y Œ+w xY wrS   )r–  r�  r  r  ÚKeyError)rV   r  rT   Úmodulesr”  s        rO   Ú_rget_with_confmodz&PytestPluginManager._rget_with_confmodÐ  s_   € ð
 ×*Ñ*¨4Ó0ˆÜ˜GÓ$ò 	ˆCðØœG C¨Ó.Ð.Ò.ð	ô
 �t‹nÐøô "ò Ùðús   ¡=½	A	ÁA	c          
     ó  — t        |«      }| j                  |«      }|�t        t        j                  |«      S t        |«      }|€	 t        j                  |j                  = 	 t        ||||¬«      }| j                  ||«       | j                  j!                  |«       |j"                  }
|
| j$                  v rj| j$                  j'                  «       D ]M  \  }}|
|j(                  v s||
k(  sŒ||v rt+        d|›d|› d|j,                  › d�«      ‚|j/                  |«       ŒO | j1                  d|›�«       | j3                  ||¬«       |S # t        $ r Y Œõw xY w# t        $ r!}	|	j                  €J ‚t        ||	¬«      |	‚d }	~	ww xY w)	N)r+  r9  rx  )rU   z#While trying to load conftest path z, found that the module z is already loaded with path zE. This is not supposed to happen. Please report this issue to pytest.zloading conftestmodule )Úregistration_name)rb   ra  r   r]  r^  r2   r—   r™  Ústemr˜  r0   r_   Ú__traceback__rQ   Ú_check_non_top_pytest_pluginsr0  Úaddr  r1  ÚitemsrŠ  ÚAssertionErrorÚ__file__r  r8  Úconsider_conftest)rV   r“  rƒ  r€  rx  Úconftestpath_plugin_nameÚexistingÚpkgpathr”  rx   ÚdirpathrT   Úmodss                rO   r�  z#PytestPluginManager._importconftestÝ  s´  € ô $' |Ó#4Ð Ø—?‘?Ð#;Ó<ˆØÐÜœ×(Ñ(¨(Ó3Ð3ô ' |Ó4ˆØˆ?ðÜ—K‘K × 1Ñ 1Ð2ð		FÜØØØØ,Gô	ˆCð 	×*Ñ*¨3°Ô=à×Ñ×"Ñ" 3Ô'Ø×%Ñ%ˆØ�d×,Ñ,Ñ,Ø"×4Ñ4×:Ñ:Ó<ò %‘
��dØ˜dŸl™lÑ*¨d°g«oØ˜d‘{Ü,ØAÀ,ÐAQð R5Ø58°EÐ9VÐWZ×WcÑWcÐVdð ebðbóð ð
 —K‘K Õ$ð%ð 	�
‰
Ð,¨S¨GÐ4Ô5Ø×Ñ˜sÐ6NÐÔOØˆ
øô= ò Ùðûô ò 	FØ—?‘?Ð.Ð.Ð.Ü'¨¸AÔ>ÀAÐEûð	Fús*   ÁE Á#E Å	EÅEÅ	FÅ$F Æ Fc                ó¤   — t        |d«      rD| j                  r7| j                  s*d}t        |j	                  || j
                  «      d¬«       y y y y )NrC  af  Defining 'pytest_plugins' in a non-top-level conftest is no longer supported:
It affects the entire test suite instead of just below the conftest as expected.
  {}
Please move it to a top level conftest file at the rootdir:
  {}
For more information, visit:
  https://docs.pytest.org/en/stable/deprecations.html#pytest-plugins-in-non-top-level-conftest-filesF)Úpytrace)Úhasattrr=  ry  r,   rþ   r2  )rV   r”  r“  r‚   s       rO   rŸ  z1PytestPluginManager._check_non_top_pytest_plugins  sX   € ô �CÐ)Ô*Ø× Ò Ø×&Ò&ðwð ô �—‘˜L¨$×*:Ñ*:Ó;ÀUÖKð 'ð !ð +rN   Frê   c               óD  — d}t        |«      }||k  r||   }|dz  }t        |t        «      r^|dk(  r	 ||   }|dz  }n|j	                  d«      r|dd }nŒH|j                  «       }|r|j	                  d«      sŒl| j                  |«       ||k  rŒ~yy# t        $ r Y yw xY w)rA  r   r   z-pNr=   úno:)Úlenr˜   rb   Ú
IndexErrorrI  Ústriprÿ   )rV   r�   rë   r†  ÚnÚoptÚpargs          rO   rñ   z%PytestPluginManager.consider_preparse,  s¶   € ð ˆÜ�‹IˆØ�!ŠeØ�q‘'ˆCØ�‰FˆAÜ˜#œsÔ#Ø˜$’;ðØ# A™w˜ð ˜‘F‘AØ—^‘^ DÔ)Ø˜q˜r˜7‘DàØ—z‘z“|�Ù¨¯©¸Ô(>ØØ×'Ñ'¨Ô-ð# �!�eøô &ò Ùðús   ³B Â	BÂBc                óò  — |j                  d«      r›|dd }|t        v rt        d|› d�«      ‚|j                  d«      rt        d|› d�«      ‚|d	k(  r"| j	                  d
«       | j	                  d«       | j	                  |«       |j                  d«      s| j	                  d|z   «       yy|}| j                  |«       |j                  d«      s| j                  d|z   «       | j                  |d¬«       y)rA  r®  r>   Nzplugin z cannot be disabledrŽ  z9Blocking conftest files using -p is not supported: -p no:zB
conftest.py files are not plugins and cannot be disabled via -p.
r×   rÚ   Úpytest_stepwiserB  T)Úconsider_entry_points)rI  Úessential_pluginsr   ÚendswithÚset_blockedÚunblockró   )rV   Úargr  s      rO   rÿ   z&PytestPluginManager.consider_pluginargE  s  € à�>‰>˜%Ô Ø�q�r�7ˆDØÔ(Ñ(Ü  7¨4¨&Ð0CÐ!DÓEÐEà�}‰}˜]Ô+Ü ØOÐPTÈvð VYð Yóð ð �Ò&Ø× Ñ  Ô,Ø× Ñ Ð!2Ô3à×Ñ˜TÔ"Ø—?‘? 9Ô-Ø× Ñ  ¨TÑ!1Õ2ð .ð ˆDà�L‰L˜ÔØ—?‘? 9Ô-Ø—‘˜Y¨Ñ-Ô.Ø×Ñ˜s¸$ÐÕ?rN   c                ó*   — | j                  ||¬«       y)rA  ©r  N)r   )rV   Úconftestmodulerœ  s      rO   r¤  z%PytestPluginManager.consider_conftestb  s   € ð 	�‰�nÐ+<ˆÕ=rN   c                ó`   — | j                  t        j                  j                  d«      «       y)rA  ÚPYTEST_PLUGINSN)Ú_import_plugin_specsrf   rœ   r�   r\   s    rO   Úconsider_envz PytestPluginManager.consider_envh  s   € à×!Ñ!¤"§*¡*§.¡.Ð1AÓ"BÕCrN   c                ó<   — | j                  t        |dg «      «       y)rA  rC  N)rÂ  r  )rV   r”  s     rO   r_  z#PytestPluginManager.consider_modulel  s   € à×!Ñ!¤'¨#Ð/?ÀÓ"DÕErN   c                óJ   — t        |«      }|D ]  }| j                  |«       Œ y rS   )Ú_get_plugin_specs_as_listró   )rV   rõ   r‹   Úimport_specs       rO   rÂ  z(PytestPluginManager._import_plugin_specsp  s+   € ô ,¨DÓ1ˆØ"ò 	,ˆKØ×Ñ˜{Õ+ñ	,rN   c                óÀ  — t        |t        «      s
J d|›�«       ‚| j                  |«      s| j                  |«      �y|t        v rd|z   n|}| j
                  j                  |«       |r| j                  d|¬«      }|ry	 t        j                  dk\  rt        j                  |«      }nt        |«       t        j                  |   }| j                  ||«       y# t        $ r=}t        d|› d|j                   d	   › �«      j#                  |j$                  «      |‚d}~wt&        $ r5}| j(                  j+                  ||j,                  xs d
f«       Y d}~yd}~ww xY w)z™Import a plugin with ``modname``.

        If ``consider_entry_points`` is True, entry point names are also
        considered to find a plugin.
        z"module name as text required, got Nz_pytest.Úpytest11r¾  )r>   é   zError importing plugin "z": r   r…   )r˜   rb   Ú
is_blockedra  Úbuiltin_pluginsr<  Úmark_rewriteÚload_setuptools_entrypointsr—   Úversion_inford   Úimport_moduleÚ
__import__r™  r   ÚImportErrorr�   Úwith_tracebackrž  r-   r4  r  r‚   )rV   Úmodnamer·  Ú
importspecÚloadedr”  rx   s          rO   ró   z!PytestPluginManager.import_pluginw  sL  € ô ˜'¤3Ô'ð 	
Ø0°°Ð<ó	
Ð'ð �?‰?˜7Ô# t§¡°wÓ'?Ð'KØà-4¼Ñ-G�Z 'Ò)ÈWˆ
Ø×Ñ×&Ñ& zÔ2á Ø×5Ñ5°jÀwÐ5ÓOˆFÙØð	(Ü×Ñ 7Ò*Ü×-Ñ-¨jÓ9‘ô ˜:Ô&Ü—k‘k *Ñ-�ð �M‰M˜#˜wÕ'øô ò 	5ÜØ*¨7¨)°3°q·v±v¸a±y°kÐBóç‰n˜QŸ_™_Ó-°1ð5ûô ò 	@Ø× Ñ ×'Ñ'¨°!·%±%²+¸2Ð(>×?Ñ?ûð	@ús%   ÂAC Ã	EÃ$8DÄEÄ(+EÅE©r`   ra   )r  Ú_PluggyPluginr  rb   r`   zHookimplOpts | None)r  rb   r`   zHookspecOpts | NonerS   )r  rØ  r  ú
str | Noner`   rÙ  ©r  rb   )r  rb   r`   rd  ©r–   rä   r`   ra   )r�   zSequence[str | pathlib.Path]r~  rd  r  rd  r€  r^   r�  úpathlib.Path | Noner‚  r^   rƒ  zImportMode | strrx  rd  r`   ra   )rT   r^   r`   rd  )
rT   r^   rƒ  ústr | ImportModer€  r^   rx  rd  r`   ra   )rT   r^   r`   zSequence[types.ModuleType])r  rb   rT   r^   r`   ztuple[types.ModuleType, Any])
r“  r^   rƒ  rÝ  r€  r^   rx  rd  r`   útypes.ModuleType)r”  rÞ  r“  r^   r`   ra   )r�   úSequence[str]rë   rd  r`   ra   )r¼  rb   r`   ra   )r¿  rÞ  rœ  rb   r`   ra   )r”  rÞ  r`   ra   )rõ   ú-None | types.ModuleType | str | Sequence[str]r`   ra   )F)rÔ  rb   r·  rd  r`   ra   )rB   rC   rD   rE   rW   rJ  rO  r   rb  re  rj  rˆ  rŒ  r}  r–  rš  r�  rŸ  rñ   rÿ   r¤  rÃ  r_  rÂ  ró   Ú__classcell__)r?  s   @rO   rì   rì   Ë  sÏ  ø„ ñõ2!ðh*Ø#ð*Ø+.ð*à	õ*õ6
öó2ó
+ó ð*4à*ð4ð ð4ð ð	4ð
 ð4ð (ð4ð %ð4ð %ð4ð &*ð4ð 
ó4ól4ð2àð2ð %ð2ð ð	2ð &*ð2ð 
ó2ó@9ðàðð ðð 
&ó	ð3à"ð3ð %ð3ð ð	3ð &*ð3ð 
ó3ðjLàðLð #ðLð 
ó	Lð6 <Añ.Ø!ð.Ø48ð.à	ó.ó2@ð:>Ø.ð>ØCFð>à	ó>óDóFð,ØAð,à	ó,÷((ð ((rN   c                ó  — | €g S t        | t        j                  «      rg S t        | t        «      r| r| j	                  d«      S g S t        | t
        j                  j                  «      rt        | «      S t        d| ›�«      ‚)z:Parse a plugins specification into a list of plugin names.ú,zWPlugins may be specified as a sequence or a ','-separated string of plugin names. Got: )
r˜   r]  r^  rb   re   ÚcollectionsÚabcr
   rü   r   )Úspecss    rO   rÆ  rÆ  ¢  sz   € ð
 €}Øˆ	ä�%œ×)Ñ)Ô*Øˆ	ä�%œÔÙ#(ˆu�{‰{˜3ÓÐ0¨bÐ0ä�%œŸ™×1Ñ1Ô2Ü�E‹{ÐÜ
Ø
aÐbgÐajÐkóð rN   c              #  ó@  K  — t        | «      } d}| D ]«  }d|vxr |j                  d«      }|j                  d«      dk(  xr |j                  d«      }|rAt        j                  j                  |«      \  }}|dk7  sŒk|j                  d«      rŒ}d}|–— Œ„|sŒ‡t        j                  j                  |«      }d}|–— Œ­ |sYg }| D ];  }|j                  d«      }	dj                  |	dd	 «      }
|
sŒ+|j                  |
«       Œ= |rt        |«      E d	{  –—†  y	y	y	7 Œ­w)
aM  Given an iterable of file names in a source distribution, return the "names" that should
    be marked for assertion rewrite.

    For example the package "pytest_mock/__init__.py" should be added as "pytest_mock" in
    the assertion rewrite mechanism.

    This function has to deal with dist-info based distributions and egg based distributions
    (which are still very much in use for "editable" installs).

    Here are the file names as seen in a dist-info based distribution:

        pytest_mock/__init__.py
        pytest_mock/_version.py
        pytest_mock/plugin.py
        pytest_mock.egg-info/PKG-INFO

    Here are the file names as seen in an egg based distribution:

        src/pytest_mock/__init__.py
        src/pytest_mock/_version.py
        src/pytest_mock/plugin.py
        src/pytest_mock.egg-info/PKG-INFO
        LICENSE
        setup.py

    We have to take in account those two distribution flavors in order to determine which
    names should be considered for assertion rewriting.

    More information:
        https://github.com/pytest-dev/pytest-mock/issues/167
    Fú/z.pyr   z__init__.pyÚsetupÚ__editable__TN)rü   r¹  r™   rf   rT   ÚsplitextrI  Údirnamere   r  r  Ú_iter_rewritable_modules)Úpackage_filesÚ	seen_someÚfnÚis_simple_moduleÚ
is_packageÚmodule_namerR  Úpackage_nameÚnew_package_filesÚpartsÚnew_fns              rO   rí  rí  ·  s.  è ø€ ô@ ˜Ó'€MØ€IØò ˆØ b˜=Ò?¨R¯[©[¸Ó-?ÐØ—X‘X˜c“] aÑ'ÒF¨B¯K©K¸Ó,Fˆ
ÙÜŸW™W×-Ñ-¨bÓ1‰NˆK˜ð ˜gÓ%¨k×.DÑ.DÀ^Õ.TØ �	Ø!Ó!ÚÜŸ7™7Ÿ?™?¨2Ó.ˆLØˆIØÓðñ ð ÐØò 	1ˆBØ—H‘H˜S“MˆEØ—X‘X˜e A B˜iÓ(ˆFÚØ!×(Ñ(¨Õ0ð		1ñ
 Ü/Ð0AÓB×BÑBð ð ð Cús+   ‚A:DÁ=DÂ	DÂADÃ1#DÄDÄDc                  óD   — e Zd ZdZdZd
d„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
y	)Ú_DeprecatedInicfgProxyz5Compatibility proxy for the deprecated Config.inicfg.©Ú_configc                ó   — || _         y rS   rú  ri  s     rO   rW   z_DeprecatedInicfgProxy.__init__ý  s	   € Øˆ�rN   c                óH   — | j                   j                  |   j                  S rS   )rû  Ú_inicfgÚvalue©rV   Úkeys     rO   Ú__getitem__z"_DeprecatedInicfgProxy.__getitem__   s   € Ø�|‰|×#Ñ# CÑ(×.Ñ.Ð.rN   c                óN   — t        |dd¬«      | j                  j                  |<   y )NÚoverrideÚtoml)Úoriginr+  )r   rû  rþ  )rV   r  rÿ  s      rO   Ú__setitem__z"_DeprecatedInicfgProxy.__setitem__  s   € Ü$/°¸jÈvÔ$Vˆ�‰×Ñ˜SÒ!rN   c                ó2   — | j                   j                  |= y rS   )rû  rþ  r   s     rO   Ú__delitem__z"_DeprecatedInicfgProxy.__delitem__  s   € Ø�L‰L× Ñ  Ñ%rN   c                ó@   — t        | j                  j                  «      S rS   )Úiterrû  rþ  r\   s    rO   Ú__iter__z_DeprecatedInicfgProxy.__iter__	  s   € Ü�D—L‘L×(Ñ(Ó)Ð)rN   c                ó@   — t        | j                  j                  «      S rS   )r¯  rû  rþ  r\   s    rO   Ú__len__z_DeprecatedInicfgProxy.__len__  s   € Ü�4—<‘<×'Ñ'Ó(Ð(rN   NrÛ  )r  rb   r`   r   )r  rb   rÿ  r   r`   ra   )r  rb   r`   ra   )r`   úIterator[str]©r`   Úint)rB   rC   rD   rE   Ú	__slots__rW   r  r  r	  r  r  rM   rN   rO   rù  rù  ø  s)   „ Ù?à€Ióó/óWó&ó*ô)rN   rù  c                  óT  — e Zd ZU dZe ej                  d¬«       G d„ d«      «       «       Z G d„ dej                  «      Z
ded	<   d
d
dœ	 	 	 	 	 	 	 dEd„Zer ed«      edFd„«       «       Zn	edFd„«       ZedGd„«       ZedHd„«       ZdId„ZdJd„ZdJd„ZdKd„Z	 	 	 	 	 	 dLd„Z	 dM	 	 	 	 	 dNd„ZdOd„ZedPd„«       ZdQd„Z ed¬«      dRd„«       ZdJd„Z	 	 	 	 	 	 dSd„Z dJd„Z!dJd „Z"dTd!„Z#	 	 	 	 	 	 	 	 	 	 	 	 	 	 dUd"„Z$ ed¬#«      dVd$„«       Z%dJd%„Z&dJd&„Z'dJd'„Z(dWd(„Z)dXd)„Z*dYdZd*„Z+d[d+„Z,d\d,„Z-d]d-„Z.d^d.„Z/d_d/„Z0	 	 	 	 	 	 	 	 	 	 d`d0„Z1	 	 	 	 	 	 	 	 	 	 dad1„Z2	 	 	 	 	 	 dbd2„Z3e4d3fdcd4„Z5dMd_d5„Z6dMd_d6„Z7d7Z8d8ed9<   d:Z9d8ed;<   d<Z:d8ed=<   d>Z;d8ed?<   dMddd@„Z<e=dedA„«       Z>e=dfdB„«       Z?dgdC„Z@dJdD„ZAy
)hrä   a  Access to configuration values, pluginmanager and plugin hooks.

    :param PytestPluginManager pluginmanager:
        A pytest PluginManager.

    :param InvocationParams invocation_params:
        Object containing parameters regarding the :func:`pytest.main`
        invocation.
    T)Úfrozenc                  óN   — e Zd ZU dZded<   	 ded<   	 ded<   	 	 	 	 	 	 	 	 	 d
d„Zy	)úConfig.InvocationParamsa¤  Holds parameters passed during :func:`pytest.main`.

        The object attributes are read-only.

        .. versionadded:: 5.1

        .. note::

            Note that the environment variable ``PYTEST_ADDOPTS`` and the ``addopts``
            configuration option are handled by pytest, not being included in the ``args`` attribute.

            Plugins accessing ``InvocationParams`` must be aware of that.
        útuple[str, ...]r�   ú$Sequence[str | _PluggyPlugin] | Noner‹   r^   rç   c               ó    — t         j                  | dt        |«      «       t         j                  | d|«       t         j                  | d|«       y )Nr�   r‹   rç   )ÚobjectÚ__setattr__Útuple)rV   r�   r‹   rç   s       rO   rW   z Config.InvocationParams.__init__4  s>   € ô ×Ñ˜t V¬U°4«[Ô9Ü×Ñ˜t Y°Ô8Ü×Ñ˜t U¨CÕ0rN   N)r�   úIterable[str]r‹   r  rç   r^   r`   ra   )rB   rC   rD   rE   Ú__annotations__rW   rM   rN   rO   rí   r    sQ   … ñ	ð ÓØJØ5Ó5Ø-ØÓØGð		1ð  ð		1ð :ð			1ð
 ð		1ð ô		1rN   rí   c                  óz   — e Zd ZdZ ej
                  «       Z ej
                  «       ZeZ ej
                  «       Z	y)úConfig.ArgsSourcezSIndicates the source of the test arguments.

        .. versionadded:: 7.2
        N)
rB   rC   rD   rE   ÚenumÚautoÚARGSÚINVOCATION_DIRÚINCOVATION_DIRÚ	TESTPATHSrM   rN   rO   Ú
ArgsSourcer   ?  s5   „ ñ	ð ˆt�y‰y‹{ˆà"˜Ÿ™›ˆØ'ˆà�D—I‘I“K‰	rN   r'  r8   ÚcacheNrè   c               ó`  — |€0| j                  dd t        j                  j                  «       ¬«      }t	        j
                  «       | _        	 || _        	 t        dt        › dt        › d�| j                  |d¬«      | _        || _        	 t        «       | _        	 | j                  | _        | j                  j                   j"                  j%                  d«      | _        | j                  j&                  | _        i | _        i | _        t-        j.                  «       | _        | j                  j3                  | d	«       d
| _        | j&                  j6                  j9                  t;        | j                  | j                  ¬«      ¬«       t<        j>                  j@                  | _!        g | _"        y )NrM   ræ   z%(prog)s [options] [z] [z] [...]T)ÚusageÚ
processoptrŒ   Ú	_ispytestr–   ÚpytestconfigF)Úparserrô   rV  )#rí   rî   rï   rð   ÚargparseÚ	NamespaceÚoptionré   r+   r*   Ú_processoptÚ_parserrô   r4   ÚstashÚ_storer8  r9  r�   r¡   Ú	_inicacherþ  Ú
contextlibÚ	ExitStackÚ_cleanup_stackr   r=  Úpytest_addoptionr[  r\  rä   r'  r#  Úargs_sourcer�   )rV   rô   ré   rŒ   s       rO   rW   zConfig.__init__P  sw  € ð Ð$Ø $× 5Ñ 5Ø ¬7¯<©<×+;Ñ+;Ó+=ð !6ó !Ðô ×(Ñ(Ó*ˆŒð	ð
 "3ˆÔð	ô
 Ø(¬¨°S¼¸ÀWÐMØ×'Ñ'ØØô	
ˆŒð +ˆÔð	ô
 “WˆŒ
ð	ð —j‘jˆŒà×'Ñ'×-Ñ-×2Ñ2×6Ñ6°xÓ@ˆŒ
Ø×&Ñ&×+Ñ+ˆŒ	Ø)+ˆŒØ#%ˆŒÜ(×2Ñ2Ó4ˆÔØ×Ñ×#Ñ# D¨.Ô9Ø ˆÔØ�	‰	×"Ñ"×0Ñ0Ü˜tŸ|™|¸4×;MÑ;MÔNð 	1ô 	
ô "×,Ñ,×1Ñ1ˆÔØ!ˆ�	rN   zXconfig.inicfg is deprecated, use config.getini() to access configuration values instead.c                ó   — t        «       ‚rS   )ÚNotImplementedErrorr\   s    rO   ÚinicfgzConfig.inicfgŒ  s   € ô
 &Ó'Ð'rN   c                óv   — t        j                  t        j                  j                  d¬«       t        | «      S )Nr=   r´   )r¶   r¸   r  r'   ÚCONFIG_INICFGrù  r\   s    rO   r>  zConfig.inicfg”  s-   € ä�M‰MÜ×"Ñ"×0Ñ0Øõô *¨$Ó/Ð/rN   c                ó   — | j                   S )zQThe path to the :ref:`rootdir <rootdir>`.

        .. versionadded:: 6.1
        )Ú	_rootpathr\   s    rO   r€  zConfig.rootpathœ  s   € ð �~‰~ÐrN   c                ó   — | j                   S )zXThe path to the :ref:`configfile <configfiles>`.

        .. versionadded:: 6.1
        )Ú_inipathr\   s    rO   ÚinipathzConfig.inipath¤  s   € ð �}‰}ÐrN   c                ó:   — | j                   j                  |«       y)z�Add a function to be called when the config object gets out of
        use (usually coinciding with pytest_unconfigure).
        N)r9  Úcallback)rV   Úfuncs     rO   Úadd_cleanupzConfig.add_cleanup¬  s   € ð 	×Ñ×$Ñ$ TÕ*rN   c                óŽ   — | j                   rJ ‚d| _         | j                  j                  j                  t	        | ¬«      ¬«       y )NTr•   rV  )r=  r¡   rj  r[  r\  r\   s    rO   Ú_do_configurezConfig._do_configure²  s9   € Ø×#Ò#Ð#Ð#ØˆÔØ�	‰	×"Ñ"×0Ñ0¼ÀDÔ8IÐ0ÕJrN   c                ó.  — 	 | j                   r?d| _         	 | j                  j                  | ¬«       g | j                  j                  _        	 | j
                  j                  «        t        j                  «       | _        y # g | j                  j                  _        w xY w# t        j                  «       | _        w xY w# 	 | j
                  j                  «        t        j                  «       | _        w # t        j                  «       | _        w xY wxY w)NFr•   )	r=  r¡   Úpytest_unconfigurerj  Ú_call_historyr9  Úcloser7  r8  r\   s    rO   r£   zConfig._ensure_unconfigure·  sÓ   € ð	=Ø×ÒØ#(�Ô ðBØ—I‘I×0Ñ0¸Ð0Ô=à?A�D—I‘I×.Ñ.Ô<ð=Ø×#Ñ#×)Ñ)Ô+ä&0×&:Ñ&:Ó&<�Õ#øð @B�D—I‘I×.Ñ.Õ<ûô
 '1×&:Ñ&:Ó&<�Õ#ûð=Ø×#Ñ#×)Ñ)Ô+ä&0×&:Ñ&:Ó&<�Õ#ø¤j×&:Ñ&:Ó&<�Õ#ýsE   ‚C  –B ²C  ÁB" ÂBÂC  Â"B=Ã DÃC6ÃDÃ6DÄDc                óX   — | j                   j                  d«      }|€J ‚|j                  S )NÚterminalreporter)rô   ra  Ú_tw)rV   rQ  s     rO   Úget_terminal_writerzConfig.get_terminal_writerÅ  s6   € Ø48×4FÑ4F×4QÑ4QØó5
Ðð  Ð+Ð+Ð+Ø×#Ñ#Ð#rN   c                ó^  — 	 | j                  |«       | S # t        $ rŽ t        | j                  dd«      sd|v rddlm}  || «       ‚ t        | j                  dd«      sd|v sd|v rC| j                  j                  j                  «        t        j                  j                  d	«       ‚ w xY w)
NÚversionFr‘   r   )Úshow_version_verboseÚhelpz--helpz-hz8
NOTE: displaying only minimal help due to UsageError.

)Úparser   r  r1  Ú_pytest.helpconfigrV  r3  Ú	optparserÚ
print_helpr—   rš   r›   )rV   rô   r�   rV  s       rO   r  zConfig.pytest_cmdline_parseÌ  s¦   € ð	Ø�J‰J�tÔð* ˆøô) ò 	ô �t—{‘{ I¨uÔ5¸ÈÑ9LÝCñ % TÔ*ð ô ˜Ÿ™ V¨UÔ3°xÀ4Ñ7GÈ4ÐSWÉ<à—‘×&Ñ&×1Ñ1Ô3Ü—
‘
× Ñ ØQôð ð%	ús
   ‚ •BB,c                ó|  — |rt        |dd«      rd}nd}|j                  dt        |dd«      |¬«      }| j                  j                  ||¬«      }t	        |«      sat        |«      j                  d	«      D ]C  }t        j                  j                  d
|› d	�«       t        j                  j                  «        ŒE y y )NÚ	fulltraceFÚlongÚnativeTÚ
showlocals)Úfuncargsr`  rn   )ÚexcreprÚexcinfor€   zINTERNALERROR> )r  rt   r¡   Úpytest_internalerrorÚanyrb   re   r—   rŸ   r›   r©   )rV   rc  r1  rn   rb  Úresrq   s          rO   Únotify_exceptionzConfig.notify_exceptionç  s°   € ñ
 ”g˜f k°5Ô9Ø$*‰EàˆEØ—/‘/Ø¤g¨f°lÀEÓ&JÐRWð "ó 
ˆð �i‰i×,Ñ,°WÀgÐ,ÓNˆÜ�3ŒxÜ˜G›×*Ñ*¨4Ó0ò #�Ü—
‘
× Ñ  ?°4°&¸Ð!;Ô<Ü—
‘
× Ñ Õ"ñ#ð rN   c                óø   — | j                   j                  | j                  k7  rV|j                  d«      ^}}| j                  |z  }t	        | j                   j                  |«      }dj                  |g|¢«      }|S )Nrl  )ré   rç   r€  re   r/   r  )rV   ÚnodeidÚbase_path_partÚnodeid_partÚfullpathÚrelative_paths         rO   Úcwd_relative_nodeidzConfig.cwd_relative_nodeidù  sn   € à×!Ñ!×%Ñ%¨¯©Ò6Ø+1¯<©<¸Ó+=Ð(ˆN˜[à—}‘} ~Ñ5ˆHÜ'¨×(>Ñ(>×(BÑ(BÀHÓMˆMà—Y‘Y Ð<°Ð<Ó=ˆFØˆrN   c                óø   — t        |«      }|j                  j                  j                  |«       |j	                  |d¬«       |j                  j
                  D ]  }|j                  j                  |«       Œ |S )z$Constructor usable for subprocesses.F)Úaddopts)rö   r1  Ú__dict__ÚupdaterX  r‹   rô   rÿ   )ÚclsÚoption_dictr�   r–   rs  s        rO   ÚfromdictargszConfig.fromdictargs  sh   € ô ˜DÓ!ˆØ�‰×Ñ×%Ñ% kÔ2Ø�‰�T 5ˆÔ)Ø—‘×&Ñ&ò 	7ˆAØ× Ñ ×3Ñ3°AÕ6ð	7àˆrN   c                óœ   — t        | j                  |j                  «      s,t        | j                  |j                  |j                  «       y y rS   )r¬  r1  ÚdestÚsetattrÚdefault)rV   r³  s     rO   r2  zConfig._processopt  s1   € Ü�t—{‘{ C§H¡HÔ-Ü�D—K‘K §¡¨3¯;©;Õ7ð .rN   )rF  c                ó"  — |j                  |j                  j                  |j                  j                  |j	                  d«      |j
                  j                  |j                  d¬«      \  }}| j                  j                  ||j                  j                  |j                  j                  |j                  |j                  j                  |j
                  j                  |j                  j                  |j	                  d«      ¬«       y )NÚ	testpathsF©r�   r~  r{  r‚  r€  r¸   rx  )r�   r~  r  r€  r�  r‚  rƒ  rx  )Ú_decide_argsÚknown_args_namespaceÚfile_or_dirr~  Úgetiniré   rç   r€  rô   rˆ  r  r�  rƒ  )rV   Úearly_configr�   Ú_args_sources       rO   Úpytest_load_initial_conftestsz$Config.pytest_load_initial_conftests  sè   € ð *×6Ñ6Ø×2Ñ2×>Ñ>Ø×4Ñ4×;Ñ;Ø"×)Ñ)¨+Ó6Ø'×9Ñ9×=Ñ=Ø!×*Ñ*Øð 7ó 
Ñˆˆlð 	×Ñ×1Ñ1ØØ×4Ñ4×;Ñ;Ø#×8Ñ8×CÑCØ!×*Ñ*Ø#×8Ñ8×CÑCØ'×9Ñ9×=Ñ=Ø#×8Ñ8×CÑCØ(4×(;Ñ(;Ø-ó)ð 	2õ 	
rN   c                óf  — t        | j                  dd«      }t        | j                  dd«      xs( t        t        j                  j                  d«      «      }|dk(  r2ddl}	 |j                  j                  | «      }| j                  ||«       | j                  |«       y# t        $ r d}Y Œw xY w)	zïInstall the PEP 302 import hook if using assertion rewriting.

        Needs to parse the --assert=<mode> option from the commandline
        and find all the installed plugins to mark them for rewriting
        by the importhook.
        Ú
assertmodeÚplainÚdisable_plugin_autoloadFÚPYTEST_DISABLE_PLUGIN_AUTOLOADÚrewriter   N)r  r~  rd  rf   rœ   r�   r-  rÔ   Úinstall_importhookÚ_mark_plugins_for_rewriteÚSystemErrorÚ_warn_about_missing_assertion)rV   r+  Údisable_autoloadr  r¡   s        rO   Ú_consider_importhookzConfig._consider_importhook-  s¯   € ô �t×0Ñ0°,ÀÓHˆä"Ø×%Ñ%Ð'@À%ó
ò Dä”"—*‘*—.‘.Ð!AÓBÓCð 	ð �9ÒÛ$ðGØ×(Ñ(×;Ñ;¸DÓA�ð ×.Ñ.¨tÐ5EÔFØ×*Ñ*¨4Õ0øô	 ò Ø’ðús   Á#B" Â"B0Â/B0c                ó¸   — || j                   _        |ryd„ t        j                  j	                  «       D «       }t        |«      D ]  }|j                  |«       Œ y)z‹Given an importhook, mark for rewrite any top-level
        modules or packages in the distribution package for
        all pytest plugins.Nc              3  ó”   K  — | ]@  }t        d „ |j                  D «       «      r"|j                  xs g D ]  }t        |«      –— Œ ŒB y­w)c              3  ó:   K  — | ]  }|j                   d k(  –— Œ y­w)rÉ  N)Úgroup)rr  Úeps     rO   rt  z=Config._mark_plugins_for_rewrite.<locals>.<genexpr>.<genexpr>T  s   è ø€ ÒF¨b�2—8‘8˜zÕ)ÑFùs   ‚N)re  Úentry_pointsÚfilesrb   )rr  Údistry   s      rO   rt  z3Config._mark_plugins_for_rewrite.<locals>.<genexpr>Q  sN   è ø€ ò 
àÜÑF°D×4EÑ4EÔFÔFØŸ
™
Ò( bò	
ð ô ��Ið
Øñ
ùs   ‚AA)rô   r<  rd   ÚmetadataÚdistributionsrí  rÍ  )rV   r¡   rŽ  rî  r  s        rO   r‹  z Config._mark_plugins_for_rewriteD  s\   € ð +/ˆ×ÑÔ'áð ñ
ä!×*Ñ*×8Ñ8Ó:ô
ˆô -¨]Ó;ò 	$ˆDØ×Ñ˜dÕ#ñ	$rN   c                óÊ   — t        | j                  d«      «      D ]+  }t        j                  j	                  dt        |«      «       Œ- | j                  | j                  «       y )NÚ
pythonpathr   )r�  r€  r—   rT   Úinsertrb   rI  Ú_unconfigure_python_pathr‹  s     rO   Ú_configure_python_pathzConfig._configure_python_path[  sI   € ä˜TŸ[™[¨Ó6Ó7ò 	*ˆDÜ�H‰H�O‰O˜Aœs 4›yÕ)ð	*à×Ñ˜×6Ñ6Õ7rN   c                óª   — | j                  d«      D ]?  }t        |«      }|t        j                  v sŒ!t        j                  j	                  |«       ŒA y )Nr›  )r€  rb   r—   rT   Úremove)rV   rT   Úpath_strs      rO   r�  zConfig._unconfigure_python_patha  s?   € Ø—K‘K Ó-ò 	*ˆDÜ˜4“yˆHØœ3Ÿ8™8Ò#Ü—‘—‘ Õ)ñ	*rN   c                óP  — || j                   j                  d<   	 | j                   j                  |t        j                  | j                  «      ¬«       | j                   j                  j                  dd«       |S # | j                   j                  j                  dd«       w xY w)zValidate known args.zconfig source©Ú	namespaceN)r3  Ú
extra_infoÚparse_known_and_unknown_argsÚcopyr1  r    )rV   r�   Úvias      rO   Ú_validate_argszConfig._validate_argsg  sƒ   € à36ˆ�‰×Ñ Ñ0ð	?Ø�L‰L×5Ñ5Ø¤§	¡	¨$¯+©+Ó 6ð 6ô ð �L‰L×#Ñ#×'Ñ'¨¸Ô>àˆøð �L‰L×#Ñ#×'Ñ'¨¸Õ>ús   ›:A= Á=(B%c          	     ó¤  — |r t         j                  j                  }|}||fS ||k(  r|t         j                  j                  }|r|}n_g }|D ]1  }	|j	                  t        t        j                  |	d¬«      «      «       Œ3 |r%|s#|r!d}
| j                  t        |
«      d¬«       ng }|s&t         j                  j                  }t        |«      g}|fS )zÑDecide the args (initial paths/nodeids) to use given the relevant inputs.

        :param warn: Whether can issue warnings.

        :returns: The args and the args source. Guaranteed to be non-empty.
        T)Ú	recursivez˜No files were found in testpaths; consider removing or adjusting your testpaths configuration. Searching recursively from the current directory instead.r>   r´   )rä   r'  r#  r&  r{  Úsortedr|  ÚiglobÚissue_config_time_warningr5   r$  rb   )rV   r�   r~  r{  r‚  r€  r¸   ÚsourceÚresultrT   Úwarning_texts              rO   r}  zConfig._decide_argss  sâ   € ñ  Ü×&Ñ&×+Ñ+ˆFØˆFð2 �vˆ~Ðð/  Ò)Ü×*Ñ*×4Ñ4�ÙØ&‘Fà�FØ )ò P˜ØŸ™¤f¬T¯Z©Z¸ÈÔ-MÓ&NÕOðPá ©Ùð!\ð )ð
 !×:Ñ:Ü 3°LÓ AÈað ;õ ð �ÙÜ×*Ñ*×9Ñ9�Ü˜nÓ-Ð.�Ø�vˆ~ÐrN   )Úwrapperc              #  ó^   K  — 	 d –—| j                  «        S # | j                  «        w xY w­wrS   )Ú_validate_config_optionsr\   s    rO   Úpytest_collectionzConfig.pytest_collection   s&   è ø€ ð	,Úà×)Ñ)Õ+øˆD×)Ñ)Õ+üs   ‚-„ ‡-˜*ª-c                óÒ   — dd l }| j                  d«      }|rPddlm}  ||«       ||j                  «      kD  r.|j                  | j                  › d|› d|j                  › d�«      ‚y y )Nr   Ú
minversion©ÚVersionz: 'minversion' requires pytest-z, actual pytest-ú')r:   r€  Úpackaging.versionr¹  r!   r   rE  )rV   r:   Úminverr¹  s       rO   Ú_checkversionzConfig._checkversion©  sr   € Ûà—‘˜\Ó*ˆÙå1á�v‹¡¨×);Ñ);Ó!<Ò<Ø×'Ñ'Ø—|‘|�nÐ$CÀFÀ8ÐK[Ð\b×\nÑ\nÐ[oÐopÐqóð ð =ð	 rN   c                ój   — t        | j                  «       «      D ]  }| j                  d|› d�«       Œ y )NzUnknown config option: r€   )r¬  Ú_get_unknown_ini_keysÚ_warn_or_fail_if_strictr   s     rO   r´  zConfig._validate_config_options¶  s9   € Ü˜$×4Ñ4Ó6Ó7ò 	LˆCØ×(Ñ(Ð+BÀ3À%ÀrÐ)JÕKñ	LrN   c                ój  — t        | j                  d«      «      }|sy ddlm} ddlm} ddlm} | j                  j                  «       }|D ��ci c]  \  }}|j                  |j                  “Œ }}}g }	|D ]m  }
	  ||
«      }|j                  |vr|	j                  |
«       Œ,|j                  j                   |||j                     «      d¬«      rŒ]|	j                  |
«       Œo |	r)t        dj!                  d	j#                  |	«      «      «      ‚y c c}}w # |$ r |	j                  |
«       Y Œºw xY w)
NÚrequired_pluginsr   )ÚInvalidRequirement)ÚRequirementr¸  T)ÚprereleaseszMissing required plugins: {}r  )r¬  r€  Úpackaging.requirementsrÃ  rÄ  r»  r¹  rô   Úlist_plugin_distinfoÚproject_namerU  r  r  Ú	specifierÚcontainsr   rþ   r  )rV   rÂ  rÃ  rÄ  r¹  Úplugin_inforR  r—  Úplugin_dist_infoÚmissing_pluginsÚrequired_pluginÚreqs               rO   Ú_validate_pluginszConfig._validate_pluginsº  s4  € Ü! $§+¡+Ð.@Ó"AÓBÐÙØõ 	>Ý6Ý-à×(Ñ(×=Ñ=Ó?ˆØKV×WÁÀÀ4˜D×-Ñ-¨t¯|©|Ñ;ÐWÐÑWàˆØ/ò 	8ˆOðÙ! /Ó2�ð
 �x‰xÐ/Ñ/Ø×&Ñ& Õ7Ø—]‘]×+Ñ+ÙÐ(¨¯©Ñ2Ó3Àð ,õ ð  ×&Ñ& Õ7ð	8ñ ÜØ.×5Ñ5°d·i±iÀÓ6PÓQóð ð ùó# Xøð &ò Ø×&Ñ& Ô7Ùðús   Á!DÁ;DÄD2Ä1D2c                óž   — | j                  d«      }|€| j                  d«      }|rt        |«      ‚| j                  t        |«      d¬«       y )NÚstrict_configÚstrictr>   r´   )r€  r   r®  r5   )rV   r!  rÒ  s      rO   rÀ  zConfig._warn_or_fail_if_strictÛ  sL   € ØŸ™ OÓ4ˆØÐ Ø ŸK™K¨Ó1ˆMÙÜ˜WÓ%Ð%à×&Ñ&Ô':¸7Ó'CÐPQÐ&ÕRrN   c                óÎ   — | j                   j                  j                  «       | j                   j                  j                  «       z  }| j                  j                  «       |z
  S rS   )r3  Ú_inidictÚkeysÚ_ini_aliasesrþ  )rV   Ú
known_keyss     rO   r¿  zConfig._get_unknown_ini_keysä  sJ   € Ø—\‘\×*Ñ*×/Ñ/Ó1°D·L±L×4MÑ4M×4RÑ4RÓ4TÑTˆ
Ø�|‰|× Ñ Ó" ZÑ/Ð/rN   c                óZ  — | j                   g k(  sJ d«       ‚| j                  j                  j                  t	        | j
                  ¬«      ¬«       |rVt        j                  j                  dd«      }t        |«      r+| j                  t        j                  |«      d«      |z   |d d  | j                  j                  |t        j                  | j                   «      ¬«      }t#        |j$                  |j&                  |j(                  |j*                  xs d | j,                  j.                  ¬«      \  }}}}|| _        || _        || _        || _        t9        | j:                  «      | j                  j<                  d	<   t9        | j>                  «      | j                  j<                  d
<   | j                  jA                  ddd«       | j                  jA                  dd«       | j                  jA                  dddg ¬«       | j                  jA                  dddg ¬«       |r'| j                  | jC                  d«      d«      |z   |d d  | j                  j                  |t        j                  | j                   «      ¬«      | _"        |rVtG        | jD                  j&                  «      x}	r5| j6                  jI                  |	«       | jJ                  jM                  «        | jO                  «        | jQ                  «        | jS                  «        | j
                  jU                  |d¬«       t        j                  j                  d«      s1| jD                  jV                  s| j
                  jY                  d«       | j
                  j[                  «        | j                  j                  |t        j                  | j                   «      ¬«      | _"        | j]                  «        | j_                  «        | jD                  j`                  €R| j>                  � t9        | j>                  jb                  «      }
nt9        | j:                  «      }
|
| jD                  _0        	 | j                  je                  | || j                  ¬«       	 | j                  js                  || j                   ¬«       | jw                  ty        | j                   tz        «      | j                   j|                  | jC                  d «      | j,                  j.                  | j:                  d!¬"«      \  | _         | _?        y # tf        $ rb}| jD                  jh                  s| jD                  jj                  r*| jm                  to        d|jp                  › �«      d¬«       n‚ Y d }~�Œd }~ww xY w# tt        $ r Y y w xY w)#Nz:can only parse cmdline args at most once per Config object)rô   rV  ÚPYTEST_ADDOPTSr…   zvia PYTEST_ADDOPTSr£  )ÚinifileÚoverride_inir�   Úrootdir_cmd_argr‚  ÚrootdirrÛ  rp  zExtra command line optionsr�   r·  z!Minimally required pytest versionr›  ÚpathszAdd paths to sys.path)r[   rW  ry  rÂ  z.Plugins that must be present for pytest to run)r[   ry  zvia addopts configFrê   rˆ  rÉ  )r�  r�   r.  z"could not load initial conftests: r=   r´   r{  Tr|  )@r�   r¡   Úpytest_addhooksr[  r\  rô   rf   rœ   r�   r¯  r©  Úshlexre   r3  Úparse_known_argsr§  r1  r   ÚinifilenamerÜ  r  rÞ  ré   rç   rB  rD  Ú_ignored_config_filesrþ  rb   r€  r¥  rE  Úaddinir€  r~  r    rr  r6  Úclearr½  r�  rž  rñ   r‡  rÎ  rÃ  rÐ  Ú_warn_about_skipped_pluginsr�  r  rƒ  rQ   rW  rU  r®  r5   rT   rX  r   r}  r  r*   r~  r;  )rV   r�   rp  Úenv_addoptsÚnsr€  rE  r>  Úignored_config_filesÚ	overridesr�  rx   s               rO   rX  zConfig.parseè  s¯  € à�y‰y˜BŠð 	
ØHó	
ˆð 	�	‰	×!Ñ!×/Ñ/Ü d×&8Ñ&8Ô9ð 	0ô 	
ñ ÜŸ*™*Ÿ.™.Ð)9¸2Ó>ˆKÜ�;Ôà×'Ñ'¬¯©°KÓ(@ÐBVÓWØñð ‘Q�ð �\‰\×*Ñ*¨4¼4¿9¹9ÀTÇ[Á[Ó;QÐ*ÓRˆÜ:IØ—N‘NØŸ™Ø—‘ØŸJ™JÒ.¨$Ø×1Ñ1×5Ñ5ô;
Ñ7ˆ�'˜6Ð#7ð "ˆŒØˆŒØ%9ˆÔ"ØˆŒÜ-0°·±Ó-?ˆ�‰×Ñ 	Ñ*Ü-0°·±Ó->ˆ�‰×Ñ 	Ñ*à�‰×Ñ˜IÐ'CÀVÔLØ�‰×Ñ˜LÐ*MÔNØ�‰×ÑØ˜wÐ-DÈbð 	ô 	
ð 	�‰×ÑØØ<ØØð	 	ô 	
ñ à×#Ñ# D§K¡K°	Ó$:Ð<PÓQÐTXÑXð ‘ˆGð %)§L¡L×$AÑ$AØœDŸI™I d§k¡kÓ2ð %Bó %
ˆÔ!ñ ô /¨t×/HÑ/H×/UÑ/UÓVÐVˆyÐVØ—‘×#Ñ# IÔ.Ø—‘×$Ñ$Ô&Ø×ÑÔØ×!Ñ!Ô#Ø×#Ñ#Ô%Ø×Ñ×,Ñ,¨TÀÐ,ÔFä—
‘
—‘Ð?Ô@Ø×-Ñ-×EÒEð ×Ñ×:Ñ:¸:ÔFð 	×Ñ×'Ñ'Ô)ð
 %)§L¡L×$AÑ$AØœDŸI™I d§k¡kÓ2ð %Bó %
ˆÔ!ð 	×ÑÔ Ø×(Ñ(Ô*à×$Ñ$×/Ñ/Ð7Ø�|‰|Ð'Ü  §¡×!4Ñ!4Ó5‘
ä  §¡Ó/�
Ø3=ˆD×%Ñ%Ô0ð	Ø�I‰I×3Ñ3Ø!¨°T·\±\ð 4ô ð	Ø�L‰L×Ñ˜t¨t¯{©{ÐÔ;ð '+×&7Ñ&7Ü˜Ÿ™¤kÓ2Ø—;‘;×%Ñ%Ø—k‘k +Ó.Ø×1Ñ1×5Ñ5Ø—]‘]Øð '8ó '
Ñ#ˆŒ	�4Õ#øô! %ò 		Ø×(Ñ(×-Ò-°×1JÑ1J×1RÒ1Rð ×.Ñ.Ü'Ð*LÈQÏVÉVÈHÐ(UÓVØ ð /õ ð
 õûð			ûô ò 	Ùð	ús+   Ñ"(T0 Ò'V Ô0	VÔ9AVÖVÖ	V*Ö)V*c                ó|  — | j                   j                  d«      ry| j                  j                  xs g }| j	                  d«      }t        j                  d¬«      5 }t        j                  dt        |«      «       t        ||«       t        j                  ||¬«       ddd«       r†t        j                  |dz
  «      }|j                  j                  |j                  |j                  j                   f}| j"                  j$                  j'                  t)        |d	   d
d|¬«      ¬«       yy# 1 sw Y   Œ’xY w)a  Issue and handle a warning during the "configure" stage.

        During ``pytest_configure`` we can't capture warnings using the ``catch_warnings_for_item``
        function because it is not possible to have hook wrappers around ``pytest_configure``.

        This function is mainly intended for plugins that need to issue warnings during
        ``pytest_configure`` (or similar stages).

        :param warning: The warning instance.
        :param stacklevel: stacklevel forwarded to warnings.warn.
        r¶   NÚfilterwarningsT)ÚrecordÚalwaysr´   r   r   r–   r…   )Úwarning_messageÚwhenri  ÚlocationrV  )rô   rË  r~  Úpythonwarningsr€  r¶   Úcatch_warningsÚsimplefilterr[   Úapply_warning_filtersr¸   r—   Ú	_getframeÚf_codeÚco_filenameÚf_linenoÚco_namer¡   Úpytest_warning_recordedr[  r\  )rV   Úwarningrµ   Úcmdline_filtersÚconfig_filtersÚrecordsÚframerò  s           rO   r®  z Config.issue_config_time_warninga  s  € ð ×Ñ×(Ñ(¨Ô4Øà×3Ñ3×BÑBÒHÀbˆØŸ™Ð%5Ó6ˆä×$Ñ$¨DÔ1ð 	:°WÜ×!Ñ! (¬D°«MÔ:Ü! .°/ÔBÜ�M‰M˜'¨jÕ9÷	:ñ
 Ü—M‘M *¨q¡.Ó1ˆEØ—|‘|×/Ñ/°·±ÀÇÁ×AUÑAUÐUˆHØ�I‰I×-Ñ-×;Ñ;ÜØ$+¨A¡JØ!ØØ%ô	ð <õ ð ÷	:ð 	:ús   ÁAD2Ä2D;c                ól   — | j                  |«      }t        |t        «      sJ ‚|j                  |«       y)z­Add a line to a configuration option. The option must have been
        declared but might not yet be set in which case the line becomes
        the first line in its value.N)r€  r˜   rü   r  )rV   r  rq   rs  s       rO   rh  zConfig.addinivalue_line„  s-   € ð �K‰K˜ÓˆÜ˜!œTÔ"Ð"Ð"Ø	�‰��rN   c                óÐ   — | j                   j                  j                  ||«      }	 | j                  |   S # t        $ r Y nw xY w| j                  |«      x| j                  |<   }|S )a~  Return configuration value the an :ref:`configuration file <configfiles>`.

        If a configuration value is not defined in a
        :ref:`configuration file <configfiles>`, then the ``default`` value
        provided while registering the configuration through
        :func:`parser.addini <pytest.Parser.addini>` will be returned.
        Please note that you can even provide ``None`` as a valid
        default value.

        If ``default`` is not provided while registering using
        :func:`parser.addini <pytest.Parser.addini>`, then a default value
        based on the ``type`` parameter passed to
        :func:`parser.addini <pytest.Parser.addini>` will be returned.
        The default values based on ``type`` are:
        ``paths``, ``pathlist``, ``args`` and ``linelist`` : empty list ``[]``
        ``bool`` : ``False``
        ``string`` : empty string ``""``
        ``int`` : ``0``
        ``float`` : ``0.0``

        If neither the ``default`` nor the ``type`` parameter is passed
        while registering the configuration through
        :func:`parser.addini <pytest.Parser.addini>`, then the configuration
        is treated as a string and a default empty string '' is returned.

        If the specified name hasn't been registered through a prior
        :func:`parser.addini <pytest.Parser.addini>` call (usually from a
        plugin), a ValueError is raised.
        )r3  r×  r�   r6  r˜  Ú_getini)rV   r  Úcanonical_nameÚvals       rO   r€  zConfig.getiniŒ  sg   € ð< Ÿ™×2Ñ2×6Ñ6°t¸TÓBˆð	Ø—>‘> .Ñ1Ð1øÜò 	Ùð	úà/3¯|©|¸NÓ/KÐKˆ�‰�~Ñ&¨Øˆ
s   ¨7 ·	AÁAc                ó.   — d|› d|› d|›�}t        |«      ‚)NzOption z  has unknown configuration type z with value )r¤   )rV   r  r[   rÿ  r‚   s        rO   Ú_getini_unknown_typezConfig._getini_unknown_type´  s*   € à�d�VÐ;¸D¸6ÀÈeÈYÐWð 	ô ˜‹oÐrN   c                óö  — | j                   j                  j                  ||«      }	 | j                   j                  |   \  }}}g }|| j                  v r |j                  | j                  |   df«       | j                   j                  j                  «       D ]:  \  }}	|	|k(  sŒ|| j                  v sŒ|j                  | j                  |   df«       Œ< |s|S t        |d„ ¬«      d   }
|
j                  }|
j                  }|dk(  r-t        |t        t        f«      sJ ‚| j                  |||||«      S |dk(  r| j!                  |||||«      S t#        |«       y # t        $ r}t        d|›�«      |‚d }~ww xY w)	Nzunknown configuration value: TFc                ó0   — | d   j                   dk(  | d   fS )Nr   r  r   )r  ©rs  s    rO   ú<lambda>z Config._getini.<locals>.<lambda>Ò  s   € °!°A±$·+±+ÀÑ2KÈQÈqÉTÐ1R€ rN   )r  r   Úinir  )r3  r×  r�   rÕ  r˜  r¤   rþ  r  r¡  Úmaxrÿ  r+  r˜   rb   rü   Ú_getini_iniÚ_getini_tomlr&   )rV   r  r  Ú_descriptionr[   ry  rx   Ú
candidatesÚaliasÚtargetÚselectedrÿ  r+  s                rO   r  zConfig._getiniº  s{  € àŸ™×2Ñ2×6Ñ6°t¸TÓBˆð	NØ*.¯,©,×*?Ñ*?ÀÑ*OÑ'ˆL˜$ ð ˆ
Ø˜TŸ\™\Ñ)Ø×Ñ˜tŸ|™|¨NÑ;¸TÐBÔCØ!Ÿ\™\×6Ñ6×<Ñ<Ó>ò 	@‰MˆE�6Ø˜Ó'¨E°T·\±\Ò,AØ×!Ñ! 4§<¡<°Ñ#6¸Ð">Õ?ð	@ñ ØˆNô
 �zÑ'RÔSÐTUÑVˆØ—‘ˆØ�}‰}ˆà�5Š=ä˜e¤c¬4 [Ô1Ð1Ð1Ø×#Ñ# D¨.¸$ÀÀwÓOÐOØ�VŠ^Ø×$Ñ$ T¨>¸4ÀÈÓPÐPä˜Õøô; ò 	NÜÐ<¸T¸HÐEÓFÈAÐMûð	Nús   ¨E Å	E8Å$E3Å3E8c                ó.  — |dk(  rr| j                   �| j                   j                  n| j                  j                  }t	        |t
        «      rt        j                  |«      n|}|D �cg c]  }||z  ‘Œ	 c}S |dk(  r't	        |t
        «      rt        j                  |«      S |S |dk(  r?t	        |t
        «      r-t        d„ |j                  d«      «      D �	cg c]  }	|	sŒ|	‘Œ	 c}	S |S |dk(  r"t        t        |«      j                  «       «      S |dk(  r|S |d	k(  r-t	        |t
        «      st        d
|› d|›�«      d‚t        |«      S |dk(  r-t	        |t
        «      st        d|› d|›�«      d‚t        |«      S | j                  |||«      S c c}w c c}	w )z¯Handle config values read in INI mode.

        In INI mode, values are stored as str or list[str] only, and coerced
        from string based on the registered type.
        rß  Nr�   Úlinelistc                ó"   — | j                  «       S rS   ©r±  r  s    rO   r  z$Config._getini_ini.<locals>.<lambda>  s   € °·±³€ rN   r€   rd  Ústringr  z"Expected an int string for option z of type integer, but got: Úfloatz#Expected a float string for option z of type float, but got: )rE  r  ré   rç   r˜   rb   rá  re   ÚmapÚ
_strtoboolr±  rý   r  r  r  )
rV   r  r  r[   rÿ  ry  ÚdpÚinput_valuesrs  Úts
             rO   r  zConfig._getini_iniß  s–  € ð6 �7Š?ð —<‘<Ð+ð —‘×#Ò#à×+Ñ+×/Ñ/ð ô
 2<¸EÄ3Ô1Gœ5Ÿ;™; uÔ-ÈUˆLØ$0Ö1˜q�B˜“FÒ1Ð1Ø�VŠ^Ü)3°E¼3Ô)?”5—;‘;˜uÓ%ÐJÀUÐJØ�ZÒÜ˜%¤Ô%Ü#&Ñ':¸E¿K¹KÈÓ<MÓ#NÖT˜aÒRSšÒTÐTà�Ø�VŠ^Üœc %›j×.Ñ.Ó0Ó1Ð1Ø�XÒØˆLØ�UŠ]Ü˜e¤SÔ)ÜØ8¸¸Ð>YÐZ_ÐYbÐcóàðô �u“:ÐØ�WŠ_Ü˜e¤SÔ)ÜØ9¸$¸Ð?XÐY^ÐXaÐbóàðô ˜“<Ðà×,Ñ,¨T°4¸Ó?Ð?ùò3 2ùò
 Us   Á)FÃFÃFc                óŒ  — t        j                  |«      j                  }|dk(  ràt        |t        «      s t        | j                  › d|› d|› d|›�«      ‚t        |«      D ]W  \  }}t        |t        «      rŒt        j                  |«      j                  }	t        | j                  › d|› d|› d|	› d|›�	«      ‚ | j                  �| j                  j                  n| j                  j                  }
|D �cg c]  }|
|z  ‘Œ	 c}S |dv r£t        |t        «      s#t        | j                  › d|› d|› d	|› d|›�	«      ‚t        |«      D ]W  \  }}t        |t        «      rŒt        j                  |«      j                  }	t        | j                  › d|› d|› d|	› d|›�	«      ‚ t	        |«      S |d
k(  r2t        |t        «      s t        | j                  › d|› d|› d|›�«      ‚|S |dk(  rBt        |t        «      rt        |t        «      r t        | j                  › d|› d|› d|›�«      ‚|S |dk(  rHt        |t        t        f«      rt        |t        «      r t        | j                  › d|› d|› d|›�«      ‚|S |dk(  r2t        |t        «      s t        | j                  › d|› d|› d|›�«      ‚|S | j                  |||«      S c c}w )zæHandle TOML config values with strict type validation and no coercion.

        In TOML mode, values already have native types from TOML parsing.
        We validate types match expectations exactly, including list items.
        rß  z: config option 'z'' expects a list for type 'paths', got rY   z/' expects a list of strings, but item at index z is >   r�   r  z' expects a list for type 'z', got rd  z' expects a bool, got r  z' expects an int, got r  z' expects a float, got r  z' expects a string, got )Úbuiltinsr[   rB   r˜   rü   rý   rE  Ú	enumeraterb   r  ré   rç   rd  r  r  r  )rV   r  r  r[   rÿ  ry  Ú
value_typer†  ÚitemÚ	item_typer  rs  s               rO   r  zConfig._getini_toml  s:  € ô —]‘] 5Ó)×2Ñ2ˆ
Ø�7Š?ä˜e¤TÔ*ÜØ—|‘|�nÐ$5°d°Vð <Ø%˜, b¨¨	ð3óð ô % UÓ+ò ‘��4Ü! $¬Õ,Ü (§¡¨dÓ 3× <Ñ <�IÜ#ØŸ<™<˜.Ð(9¸$¸ð @-Ø-.¨C¨t°I°;¸bÀÀðJóð ðð —<‘<Ð+ð —‘×#Ò#à×+Ñ+×/Ñ/ð ð
 %*Ö*˜q�B˜“FÒ*Ð*ØÐ)Ñ)ä˜e¤TÔ*ÜØ—|‘|�nÐ$5°d°VÐ;VÐW[ÐV\ð ]Ø%˜, b¨¨	ð3óð ô % UÓ+ò ‘��4Ü! $¬Õ,Ü (§¡¨dÓ 3× <Ñ <�IÜ#ØŸ<™<˜.Ð(9¸$¸ð @-Ø-.¨C¨t°I°;¸bÀÀðJóð ðô ˜“;ÐØ�VŠ^ä˜e¤TÔ*ÜØ—|‘|�nÐ$5°d°Vð <Ø%˜, b¨¨	ð3óð ð ˆLØ�UŠ]ä˜e¤SÔ)¬Z¸¼tÔ-DÜØ—|‘|�nÐ$5°d°Vð <Ø%˜, b¨¨	ð3óð ð ˆLØ�WŠ_ä˜e¤e¬S \Ô2´jÀÌÔ6MÜØ—|‘|�nÐ$5°d°Vð <Ø%˜, b¨¨	ð3óð ð ˆLØ�XÒä˜e¤SÔ)ÜØ—|‘|�nÐ$5°d°Vð <Ø%˜, b¨¨	ð3óð ð ˆLà×,Ñ,¨T°4¸Ó?Ð?ùòc +s   Ã6Kc                óÂ  — 	 | j                   j                  ||«      \  }}|j                  €J ‚t	        j
                  |j                  «      j                  }g }|D ]q  }t        |t        j                  «      rt	        j
                  |«      }n.|j                  dt        j                  «      }t        ||z  «      }|j                  |«       Œs |S # t        $ r Y y w xY w)Nrè  )rô   rš  r˜  r£  rî   rï   r  r˜   rf   rú   rY  rg   r.   r  )rV   r  rT   r”  ÚrelrootsÚmodpathÚvaluesÚrelroots           rO   Ú_getconftest_pathlistzConfig._getconftest_pathlistp  sÇ   € ð	Ø ×.Ñ.×AÑAÀ$ÈÓM‰MˆC�ð �|‰|Ð'Ð'Ð'Ü—,‘,˜sŸ|™|Ó,×3Ñ3ˆØ%'ˆØò 	#ˆGÜ˜'¤2§;¡;Ô/Ü!Ÿ,™, wÓ/‘à!Ÿ/™/¨#¬r¯v©vÓ6�Ü& w°Ñ'8Ó9�Ø�M‰M˜'Õ"ð	#ð ˆøô ò 	Ùð	ús   ‚C Ã	CÃCFc                ó2  — | j                   j                  j                  ||«      }	 t        | j                  |«      }|€|rt        |«      ‚|S # t
        $ r>}|t        ur|cY d}~S |rddl}|j                  d|›d�«       t        d|›�«      |‚d}~ww xY w)as  Return command line option value.

        :param name: Name of the option. You may also specify
            the literal ``--OPT`` option instead of the "dest" option name.
        :param default: Fallback value if no option of that name is **declared** via :hook:`pytest_addoption`.
            Note this parameter will be ignored when the option is **declared** even if the option's value is ``None``.
        :param skip: If ``True``, raise :func:`pytest.skip` if option is undeclared or has a ``None`` value.
            Note that even if ``True``, if a default was specified it will be returned instead of a skip.
        Nr   zno z option foundzno option named )
r3  Ú	_opt2destr�   r  r1  r  r(   r:   Úskipr¤   )rV   r  ry  r/  r  rx   r:   s          rO   Ú	getoptionzConfig.getoptionƒ  sœ   € ð �|‰|×%Ñ%×)Ñ)¨$°Ó5ˆð	AÜ˜$Ÿ+™+ tÓ,ˆCØˆ{™tÜ$ TÓ*Ð*ØˆJøÜò 	AØœfÑ$Ø•ÙÛà—‘˜c $ ¨Ð7Ô8ÜÐ/°¨xÐ8Ó9¸qÐ@ûð	Aús#   ¨&A Á	BÁ	BÁ!BÁ'*BÂBc                ó$   — | j                  |«      S )z$Deprecated, use getoption() instead.©r0  ©rV   r  rT   s      rO   ÚgetvaluezConfig.getvalueœ  s   € à�~‰~˜dÓ#Ð#rN   c                ó(   — | j                  |d¬«      S )z-Deprecated, use getoption(skip=True) instead.T)r/  r2  r3  s      rO   ÚgetvalueorskipzConfig.getvalueorskip   s   € à�~‰~˜d¨ˆ~Ó.Ð.rN   Ú
assertionsr   ÚVERBOSITY_ASSERTIONSÚ
test_casesÚVERBOSITY_TEST_CASESrà   ÚVERBOSITY_SUBTESTSr"  Ú_VERBOSITY_INI_DEFAULTc                ó  — | j                  dd¬«      }t        |t        «      sJ ‚|€|S t        j	                  |«      }|| j
                  j                  vr|S | j                  |«      }|t        j                  k(  r|S t        |«      S )a´  Retrieve the verbosity level for a fine-grained verbosity type.

        :param verbosity_type: Verbosity type to get level for. If a level is
            configured for the given type, that value will be returned. If the
            given type is not a known verbosity type, the global verbosity
            level will be returned. If the given type is None (default), the
            global verbosity level will be returned.

        To configure a level for a fine-grained verbosity type, the
        configuration file should have a setting for the configuration name
        and a numeric value for the verbosity level. A special value of "auto"
        can be used to explicitly use the global verbosity level.

        Example:

        .. tab:: toml

            .. code-block:: toml

                [tool.pytest]
                verbosity_assertions = 2

        .. tab:: ini

            .. code-block:: ini

                [pytest]
                verbosity_assertions = 2

        .. code-block:: console

            pytest -v

        .. code-block:: python

            print(config.get_verbosity())  # 1
            print(config.get_verbosity(Config.VERBOSITY_ASSERTIONS))  # 2
        Úverboser   )ry  )	r0  r˜   r  rä   Ú_verbosity_ini_namer3  rÕ  r€  r<  )rV   Úverbosity_typeÚglobal_levelÚini_nameÚlevels        rO   Úget_verbosityzConfig.get_verbosity­  s‡   € ðN —~‘~ i¸�~Ó;ˆÜ˜,¬Ô,Ð,Ð,ØÐ!ØÐä×-Ñ-¨nÓ=ˆØ˜4Ÿ<™<×0Ñ0Ñ0ØÐà—‘˜HÓ%ˆØ”F×1Ñ1Ò1ØÐä�5‹zÐrN   c                ó   — d| › �S )NÚ
verbosity_rM   )r@  s    rO   r?  zConfig._verbosity_ini_nameã  s   € à˜NÐ+Ð,Ð,rN   c                óp   — | j                  t        j                  |«      |dt        j                  ¬«       y)a¦  Add a output verbosity configuration option for the given output type.

        :param parser: Parser for command line arguments and config-file values.
        :param verbosity_type: Fine-grained verbosity category.
        :param help: Description of the output this type controls.

        The value should be retrieved via a call to
        :py:func:`config.get_verbosity(type) <pytest.Config.get_verbosity>`.
        r  )rW  r[   ry  N)rå  rä   r?  r<  )r.  r@  rW  s      rO   Ú_add_verbosity_inizConfig._add_verbosity_iniç  s2   € ð 	�‰Ü×&Ñ& ~Ó6ØØÜ×1Ñ1ð	 	õ 	
rN   c                óf   — t        «       s'|dk(  rd}nd}| j                  t        |«      d¬«       y y )Nr†  zRASSERTIONS ARE NOT EXECUTED and FAILING TESTS WILL PASS.  Are you using python -O?z¥assertions not in test modules or plugins will be ignored because assert statements are not executed by the underlying Python interpreter (are you using python -O?)
r>   r´   )Ú_assertion_supportedr®  r5   )rV   r+  r±  s      rO   r�  z$Config._warn_about_missing_assertionù  sH   € Ü#Ô%Ø�wŠð(ñ ð3ð ð ×*Ñ*Ü# LÓ1Øð +õ ð &rN   c           	     ó„   — | j                   j                  D ]'  \  }}| j                  t        d|›d|› �«      d¬«       Œ) y )Nzskipped plugin rY   r=   r´   )rô   r4  r®  r5   )rV   ró  r‚   s      rO   rç  z"Config._warn_about_skipped_plugins  sM   € Ø $× 2Ñ 2× BÑ Bò 	ÑˆK˜Ø×*Ñ*Ü# o°k°_ÀBÀsÀeÐ$LÓMØð +õ ñ	rN   )rô   rì   ré   zInvocationParams | NonerŒ   rÙ  r`   ra   )r`   rù  )r`   r^   )r`   rÜ  )rH  zCallable[[], None]r`   ra   r×  )r`   r%   )rô   rì   r�   ú	list[str]r`   rä   rS   )rc  zExceptionInfo[BaseException]r1  zargparse.Namespace | Noner`   ra   )ri  rb   r`   rb   )rt  zMapping[str, Any]r�   rL  r`   rä   )r³  r)   r`   ra   )r�  rä   r`   ra   )r¡   r7   rŽ  rd  r`   ra   )r�   rL  r¨  rb   r`   rL  )r�   rL  r~  rd  r{  rL  r‚  r^   r€  r^   r¸   rd  r`   ztuple[list[str], ArgsSource])r`   zGenerator[None, object, object])r!  rb   r`   ra   )r`   zset[str])T)r�   rL  rp  rd  r`   ra   )rý  ÚWarningrµ   r  r`   ra   )r  rb   rq   rb   r`   ra   )r  rb   r`   r   )r  rb   r[   rb   rÿ  r  rÚ  )
r  rb   r  rb   r[   rb   rÿ  zstr | list[str]ry  r   )
r  rb   r  rb   r[   rb   rÿ  r  ry  r   )r  rb   rT   r^   r`   zlist[pathlib.Path] | None)r  rb   ry  r   r/  rd  )r@  rÙ  r`   r  )r@  rb   r`   rb   )r.  r+   r@  rb   rW  rb   r`   ra   )r+  rb   r`   ra   )BrB   rC   rD   rE   r   ÚdataclassesÚ	dataclassrí   r!  ÚEnumr'  r  rW   r   r'   Úpropertyr>  r€  rE  rI  rK  r£   rS  r  rg  rn  Úclassmethodru  r2  Úhookimplrƒ  r�  r‹  rž  r�  r©  r}  rµ  r½  r´  rÐ  rÀ  r¿  rX  r®  rh  r€  r  r  r  r  r,  r(   r0  r4  r6  r8  r:  r;  r<  rD  r¼   r?  rH  r�  rç  rM   rN   rO   rä   rä     sb  … ñð Ø€[×Ñ $Ô'÷1ð 1ó (ó ð1ôB �T—Y‘Yô  ð ƒLð 6:Øñ8"à*ð8"ð 3ð	8"ð
 ð8"ð 
ó8"ñt á	Øfó

ð 
ò	(ó 
ó

ñ	(ð 
ò	0ó 
ð	0ð òó ðð òó ðó+óKó
=ó$ðØ0ðØ8Aðà	óð< -1ð#à-ð#ð *ð#ð 
ó	#ó$	ð òó ðó8ñ �dÔò
ó ð
ó41ð.$Ø*ð$Ø>Bð$à	ó$ó.8ó*ó
ð+ð ð+ð ð	+ð
 ð+ð %ð+ð ð+ð ð+ð 
&ó+ñZ �dÔò,ó ð,óóLóóBSó0ôw
ór!óFó$óPó#ðJ;@àð;@ð ð;@ð ð	;@ð
 ð;@ð ó;@ðzR@àðR@ð ðR@ð ð	R@ð
 ðR@ð óR@ðhØðØ+ðà	"óð& 39Àuô Aô2$ô/ð
 #/Ð˜%Ó.à".Ð˜%Ó.à *Ð˜Ó*à$*Ð˜EÓ*ô4ðl ò-ó ð-ð ò
ó ð
ó"ô*rN   c                 ó&   — 	 J ‚# t         $ r Y yw xY w)NT)r¢  rM   rN   rO   rJ  rJ    s   € ðØˆuøÜò Ùðús   ‚ „	�c                ó$  — t        |¬«      }| j                  j                  dk(  rd|_        n | j                  j                  dk(  rd|_        | j                  j                  dk(  r	d|_        |S | j                  j                  dk(  rd|_        |S )zÚCreate a TerminalWriter instance configured according to the options
    in the config object.

    Every code which requires a TerminalWriter object and has access to a
    config object should use this function.
    r”   ÚyesTÚnoF)r%   r1  ÚcolorÚ	hasmarkupÚcode_highlight)r–   ry   r{   s      rO   Úcreate_terminal_writerr[    s‚   € ô 
˜TÔ	"€Bà‡}�}×Ñ˜eÒ#Øˆ�Ø	�‰×	Ñ	 Ò	$ØˆŒà‡}�}×#Ñ# uÒ,Ø ˆÔð €Ið 
�‰×	%Ñ	%¨Ò	-Ø!ˆÔà€IrN   c                óR   — | j                  «       } | dv ry| dv ryt        d| ›�«      ‚)a  Convert a string representation of truth to True or False.

    True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values
    are 'n', 'no', 'f', 'false', 'off', and '0'.  Raises ValueError if
    'val' is anything else.

    .. note:: Copied from distutils.util.
    )ÚyrV  r   ÚtrueÚonÚ1T)r²  rW  ÚfÚfalseÚoffÚ0Fzinvalid truth value )Úlowerr¤   )r  s    rO   r  r  7  s:   € ð �)‰)‹+€CØ
Ð2Ñ2ØØ	Ð5Ñ	5ØäÐ/°¨wÐ7Ó8Ð8rN   é2   )Úmaxsizec          	     óÄ  — d}t        d| › d�«      }| j                  d«      }t        |«      dkD  r8d}t        dt        |«      › d|› d	�«      }t        |j	                  |¬
«      «      ‚t        |«      dk  r |j                  d«       t        |«      dk  rŒ d„ |D «       \  }}}	}
}	 t        j                  |«      }	 t        |	«      }|r|rt!        j"                  |«      }|
r|rt!        j"                  |
«      dz   }
|r	 t%        |«      }|dk  rt'        d«      ‚nd}	 t!        j(                  |«       t!        j(                  |
«       ||||
|fS # t        j                  $ r*}t        |j	                  t        |«      ¬
«      «      d‚d}~ww xY w# t        $ r ‚ t        $ rC t        j                  «       }|j                  d¬«      }t        |j	                  |¬
«      «      d‚w xY w# t&        $ r'}t        |j	                  d|›d|› �¬
«      «      d‚d}~ww xY w# t         j*                  $ r1}t        |j	                  d|j,                  ›d|› �¬
«      «      d‚d}~ww xY w)zíParse a warnings filter string.

    This is copied from warnings._setoption with the following changes:

    * Does not apply the filter.
    * Escaping is optional.
    * Raises UsageError so we get nice error messages on failure.
    TzF        while parsing the following warning configuration:

          z8

        This error occurred:

        {error}
        ú:r@   zJhttps://docs.python.org/3/library/warnings.html#describing-warning-filtersz            Too many fields (z�), expected at most 5 separated by colons:

              action:message:category:module:line

            For more information please consult: z
            )Úerrorr…   c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrS   r  )rr  Úss     rO   rt  z'parse_warning_filter.<locals>.<genexpr>t  s   è ø€ Ò3MÀ!°A·G±G·IÑ3Mùs   ‚Nr_  )rn   z\Zr   znumber is negativezinvalid lineno rY   zInvalid regex )r   re   r¯  r   rþ   r  r¶   Ú
_getactionÚ_OptionErrorrb   Ú_resolve_warning_categoryrÒ  r_   r"   Úfrom_currentrt   ÚreÚescaper  r¤   Úcompilerj  Úpattern)r¼  rr  Ú__tracebackhide__Úerror_templaterö  Údoc_urlrj  Úaction_r!  Ú	category_ÚmoduleÚlineno_Úactionrx   Úcategoryrz   Úexception_textÚlinenos                     rO   Úparse_warning_filterr€  I  sœ  € ð ÐÜðð ˆ%ð 	ð	ó
€Nð �I‰I�c‹N€EÜ
ˆ5ƒz�A‚~àXð 	ô ðÜ! %›j˜\ð *2ð 3:°ð ;ðó
ˆô ˜×.Ñ.°UÐ.Ó;Ó<Ð<ä
ˆe‹*�qŠ.Ø�‰�RÔô ˆe‹*�q‹.á3MÀuÔ3MÑ0€GˆW�i ¨ðHÜ'/×':Ñ':¸7Ó'CˆðPÜ";¸IÓ"Fˆñ ‘6Ü—)‘)˜GÓ$ˆÙ‘&Ü—‘˜6Ó" UÑ*ˆÙð	Ü˜“\ˆFØ˜ŠzÜ Ð!5Ó6Ð6ð ð ˆðÜ
�
‰
�7ÔÜ
�
‰
�6Ôð
 �7˜H f¨fÐ4Ð4øôA × Ñ ò HÜ˜×.Ñ.´S¸³VÐ.Ó<Ó=À4ÐGûðHûô ò ØÜò PÜ ×-Ñ-Ó/ˆØ!×)Ñ)°Ð)Ó9ˆÜ˜×.Ñ.°^Ð.ÓDÓEÈ4ÐOðPûô ò 	ÜØ×%Ñ%¨o¸g¸[ÈÈ1È#Ð,NÐ%ÓOóàðûð	ûô �8‰8ò ÜØ×!Ñ!¨.¸¿¹¸ÀRÈÀsÐ(KÐ!ÓLó
àð	ûðúsU   Â'E Â=F Ä G( Ä*H ÅFÅ#%FÆFÆAG%Ç(	HÇ1"HÈHÈIÈ.,IÉIc                ó  — d}| st         S d| vrddl}| }n*| j                  d«      \  }}}t        j                  |«      }t        ||«      }t        |t         «      st        |› d�«      ‚t        t        t            |«      S )z§
    Copied from warnings._getcategory, but changed so it lets exceptions (specially ImportErrors)
    propagate so we can get access to their tracebacks (#9218).
    Tú.r   Nz is not a Warning subclass)
rM  r"  Ú
rpartitionrd   rÐ  r  Ú
issubclassr   r   r[   )r}  ru  r  Úklassrz  rR  Úcats          rO   ro  ro  š  sƒ   € ð
 ÐÙÜˆà
�(ÑÛà‰à#×.Ñ.¨sÓ3Ñˆ��5Ü×#Ñ# FÓ+ˆÜ
�!�UÓ
€CÜ�cœ7Ô#Ü˜C˜5Ð :Ð;Ó<Ð<Ü””W‘˜sÓ#Ð#rN   c                ó˜  — | D ]   }	 t        j                  t        |d¬«      Ž  Œ" |D ]   }	 t        j                  t        |d¬«      Ž  Œ" y# t        $ r4}t        j                  d|j
                  › d|› �t        «       Y d}~Œ�d}~ww xY w# t        $ r4}t        j                  d|j
                  › d|› �t        «       Y d}~Œœd}~ww xY w)z8Applies pytest-configured filters to the warnings moduleF)rr  z Failed to import filter module 'z': NT)r¶   rí  r€  rÒ  r¸   r  r5   )rÿ  rþ  r¼  rx   s       rO   rö  rö  °  sÍ   € ð ò ˆð	Ü×#Ñ#Ô%9¸#ÀeÔ%LÒMðð ò ˆð	Ü×#Ñ#Ô%9¸#ÀdÔ%KÒLñøô ò 	Ü�M‰MØ2°1·6±6°(¸#¸c¸UÐCÔEXôô ûð		ûô ò 	Ü�M‰MØ2°1·6±6°(¸#¸c¸UÐCÔEXôô ûð		ús.   ‡A¬BÁ	B	Á*BÂB	Â	C	Â*CÃC	)rh   z_pytest._code.TracebackEntryr`   rd  )rx   rQ   ry   r   r`   ra   )rx   r   ry   r   r`   ra   )r‡   rß  r`   rb   )NN)r�   ú#list[str] | os.PathLike[str] | Noner‹   r  r`   úint | ExitCode)r�   rˆ  r‹   r  rŒ   rb   r`   r‰  r  )rT   rb   rÁ   rb   r`   rb   )r�   zIterable[str] | Noner‹   r  rŒ   rÙ  r`   rä   )r`   rì   rS   )r�   zlist[str] | os.PathLike[str]r‹   r  rŒ   rÙ  r`   rä   )rT   r^   r`   r^   )r  r   r  rb   r  r  r`   zdict[str, bool])ræ  rà  r`   rL  )rî  r  r`   r  )r`   rd  )r–   rä   ry   zTextIO | Noner`   r%   )r  rb   r`   rd  )r¼  rb   rr  rd  r`   z9tuple[warnings._ActionKind, str, type[Warning], str, int])r}  rb   r`   ztype[Warning])rÿ  r  rþ  r  r`   ra   )‡rE   Ú
__future__r   r/  r"  Úcollections.abcrä  r   r   r   r   r   r	   r
   r7  r§  rN  r!  Ú	functoolsr   r|  rd   Úimportlib.metadatar  rf   rî   rq  rá  r—   Útextwrapr   r]  r   Útypingr   r   r   r   r   r   r   r¶   Úpluggyr   r   r   r   r   Ú
exceptionsr   r   Ú	findpathsr   r   r   r    r  r!   Ú_pytest._coder"   r#   Ú_pytest._code.coder$   Ú_pytest._ior%   Ú_pytest.compatr&   r'   r(   Ú_pytest.config.argparsingr)   r*   r+   r·   Ú_pytest.hookspecÚ_pytest.outcomesr,   r-   Ú_pytest.pathlibr.   r/   r0   r1   r2   r3   Ú_pytest.stashr4   Ú_pytest.warning_typesr5   r6   Ú_pytest.assertion.rewriter7   Ú_pytest.cacheproviderr8   Ú_pytest.terminalr9   r  rØ  rS  r6  ÚIntEnumr<   r_   rQ   ri   r~   rƒ   r‰   r�   r�   r±   r¹   r»   rÂ   rÄ   r¸  rò   rÌ  rö   rø   rž   r  r"  rì   rÆ  rí  rb   rù  rä   rJ  r[  r  r€  ro  rö  rM   rN   rO   ú<module>r¡     s³  ðá Cå "ã Û Û Ý $Ý %Ý $Ý $Ý #Ý *Ý $Û Û Û Û Ý Û Û Û Û Û 	Û Û 	Û Û 
Ý Û Ý Ý Ý Ý Ý Ý Ý Ý  Û å !Ý Ý !Ý Ý  å .Ý 0Ý !Ý "Ý &Ý )Ý Û Ý 'Ý *Ý -Ý &Ý 'Ý %Ý !Ý .Ý 1Ý ,Û Û Ý !Ý $Ý (Ý 'Ý 'Ý &Ý 0Ý 'Ý Ý 5Ý 3ñ Ý@Ý+Ý1à€ðñ ˜(Ó#€Ù˜(Ó#€ð ôˆt�|‰|ó ó ðô4O˜Iô OðXØ'ðXà	óXó)ó"-ó
ð 15Ø48ðCØ
-ðCà1ðCð óCð$ 15Ø48ñ'>à
-ð'>ð 2ð'>ð ð	'>ð
 ó'>óTó$÷ñ óóðÐ ðØðàðð ðð ð	ð
 ðð ðð ðð ðð ðð ðð ðð ðð ðð ðð ðð  ð!ð" ð#ð$ ð%ð& ð'ð( ð)ð* ð+ð, ð-ð. ð/ð0 ð1ð2 ð3ð4 ñ5€ð:Øðàðð ðð ð	€ð "&Ø48ðð ñ	Ø
ðà1ðð ð	ð
 óó2&ð 59ðð ñ	Ø
&ðà1ðð ð	ð
 óó@ðØðàðð ðð ó	ð@ ôS(˜-ó S(ó ðS(ðlØ8ðàóó*>CôB)˜^¨C°¨HÑ5ô )ð0 ÷Bð Bó ðBóJ ð +/ðØðØ'ðàóó09ñ$ �2ÔðM5Ø	ðM5ØðM5à>òM5ó ðM5ó`$ð,Ø!ðØ4Aðà	ôrN   