Ë
    •Kêj–g ã                  ó²  — 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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#m+Z+ ddl#m,Z, ddl-Z-ddl.m/Z/ ddl.m0Z0 ddl.m1Z1 ddl.m2Z2 ddl.m3Z3 ddl4m5Z5 ddl4m6Z6 ddl7m8Z8 dd l7m9Z9 dd!l7m:Z: dd"l7m;Z; dd#l<m=Z= ddl>Z<dd$l>m?Z? dd%l>m@Z@ dd&lAmBZB dd'lCmDZD dd(lEmFZF dd)lEmGZG dd*lEmHZH dd+lImJZJ dd,lImKZK dd-lImLZL dd.lImMZM dd/lImNZN ddlOZ<ddlPZ<dd0lQmRZR dd1lSmTZT dd2lSmUZU dd3lVmWZW dd4lVmXZX dd5lVmYZY dd6lVmZZZ dd7lVm[Z[ dd8lVm\Z\ dd9l]m^Z^ dd:l_m`Z` dd;l_maZa e,rdd<lbmcZc dd=ldmeZe dd>lfmgZg ehZi	  e/d?«      Zj e1d?«      Zke' G d@„ dAejØ                  «      «       Zm G dB„ dCen«      Zo G dD„ dEen«      Zp	 	 	 	 d�dF„ZqdŽdG„Zrd�dH„Zsd�dI„Ztd‘dJ„Zud’dK„Zv	 	 d“	 	 	 	 	 d”dL„ZwdddMœ	 	 	 	 	 	 	 d•dN„Zxd–dO„Zyd–dP„Zz G dQ„ dR«      Z{d—dS„Z|d—dT„Z}dUZ~g e~¢dV‘dW‘dX‘dY‘dZ‘d[‘d\‘d]‘d^‘d_‘d`‘da‘db‘dc‘dd‘de‘df‘dg‘dh‘di‘dj‘dk‘dl‘dm‘dn‘­Zh e£do’dp’dq’Z€	 	 d“ddrœ	 	 	 	 	 	 	 d˜dt„Z�d™dv„Z‚	 dšddrœ	 	 	 	 	 	 	 d›dw„Zƒdœdx„Z„	 	 	 	 	 	 	 	 d�dy„Z…e' G dz„ due3«      «       Z†džd{„Z‡	 	 	 	 dŸd|„Zˆd d}„Z‰d¡d~„ZŠd¢d„Z‹ G d€„ d�eeŒe$f   «      Z� G d‚„ dƒe*«      ZŽe' G d„„ ds«      «       Z�d£d…„Z�	 dš	 	 	 	 	 d¤d†„Z‘d¥d‡„Z’ edˆ¬‰«      	 	 	 	 	 	 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)ÚLiteral)Ú
NamedTuple)Ú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)Ú_ini_type_repr)Ú_IniLiteral)ÚArgument)ÚFILE_OR_DIR)ÚParser)ÚNodeId)Ú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© ó    ú\/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/_pytest/config/__init__.pyrA   rA   k   s3   „ ñð 
€Bà€Là€Kà€Nà€KàÐàÐà�JrS   rA   c                  ó(   — e Zd Z	 	 	 	 	 	 dd„Zdd„Zy)ÚConftestImportFailurec               ó    — || _         || _        y ©N)ÚpathÚcause)ÚselfrY   rZ   s      rT   Ú__init__zConftestImportFailure.__init__‡   s   € ð ˆŒ	Øˆ�
rS   c                óz   — t        | j                  «      j                  › d| j                  › d| j                  › d�S )Nú: z (from ú))ÚtyperZ   rG   rY   ©r[   s    rT   Ú__str__zConftestImportFailure.__str__�   s3   € Ü�t—z‘zÓ"×+Ñ+Ð,¨B¨t¯z©z¨l¸'À$Ç)Á)ÀÈAÐNÐNrS   N)rY   úpathlib.PathrZ   Ú	ExceptionÚreturnÚNone)re   Ústr)rG   rH   rI   r\   rb   rR   rS   rT   rV   rV   †   s)   „ ðàðð ð	ð
 
óôOrS   rV   c                  ó   — e Zd ZdZy)ÚPluginImportFailurea_  A plugin was found, but raised while being imported.

    This is deliberately distinct from a plugin which could not be found at
    all: not finding it means pytest was pointed at something that isn't there,
    which is a :class:`UsageError`, while a plugin blowing up on import is a
    defect in the plugin and reported as an internal error.
    N)rG   rH   rI   rJ   rR   rS   rT   ri   ri   ”   s   „ òrS   ri   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%   rg   rY   ÚsplitÚosÚsep)Úentrys    rT   Ú#filter_traceback_for_import_failurerp   ž   s3   € ô ˜EÓ"ÒW {¼#¸e¿j¹j»/×:OÑ:OÔPR×PVÑPVÓ:WÐ'WÐWrS   c                ó’  — t        j                  |«      }t        |«      }|j                  | d¬«       |j                  j                  t        «      |_        |j                  r|j                  dd¬«      n|j                  «       }t        |«      }|j                  «       D ]#  }|j                  |j                  «       d¬«       Œ% y )NT©ÚredÚshortF)ÚstyleÚchain)r$   Úfrom_exceptionr'   ÚlineÚ	tracebackÚfilterrp   ÚgetreprÚexconlyrg   Ú
splitlinesÚrstrip)ÚheaderrZ   ÚfileÚexc_infoÚtwÚexc_reprÚformatted_tbrx   s           rT   Ú_print_import_errorr…   ©   s°   € Ü×+Ñ+¨EÓ2€HÜ	˜Ó	€BØ‡G�GˆF˜€GÔØ!×+Ñ+×2Ñ2Ô3VÓW€HÔð ×Òð 	×Ñ˜w¨eÐÔ4à×ÑÓð ô
 �x“=€LØ×'Ñ'Ó)ò )ˆØ
�‰�—‘“ 4ˆÕ(ñ)rS   c                óN   — t        d| j                  › d�| j                  |«       y )Nz$ImportError while loading conftest 'z'.)r…   rY   rZ   ©Úer€   s     rT   Úprint_conftest_import_errorr‰   ¸   s"   € ÜØ
.¨q¯v©v¨h°bÐ9¸1¿7¹7ÀDõrS   c                óf   — | j                   €
J | ›d�«       ‚t        d| › d�| j                   |«       y )Nz) must be raised `from` the original errorzError while loading plugin "z".)Ú	__cause__r…   r‡   s     rT   Úprint_plugin_import_errorrŒ   ¾   s9   € Ø�;‰;Ð"ÐU q eÐ+TÐ$UÓUÐ"ÜÐ6°q°c¸Ð<¸a¿k¹kÈ4ÕPrS   c                ój   — t        |«      }| j                  D ]  }|j                  d|› d�d¬«       Œ y )NzERROR: ú
Trr   )r'   Úargsrx   )rˆ   r€   r‚   Úmsgs       rT   Úprint_usage_errorr‘   Ã   s8   € Ü	˜Ó	€BØ�v‰vò -ˆØ
�‰�'˜#˜˜bÐ! tˆÕ,ñ-rS   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?   )rm   rY   Úbasename)ÚargvÚargv0s     rT   Ú_get_prog_namer—   É   s.   € ñ ˆD�ŠG €EÜ	‡w�w×Ñ˜Ó -Ò/Ø!ØrS   c                ó   — t        | |d¬«      S )aÊ  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.

    .. warning::
        pytest's warning filters do not apply whilst importing module
        names passed via ``plugins``.

    :returns: An exit code.
    zpytest.main())r�   ÚpluginsÚprog)Ú_main©r�   r™   s     rT   Úmainr�   Ö   s   € ô" �d G°/ÔBÐBrS   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        |«      |j1                  «        |€!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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# t2        $ rK |cY |j1                  «        |€!t        j                  j%                  dd «       S |t        j                  d<   S w xY w# |j1                  «        w xY w# t4        $ rk}t7        |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š   ©r€   ©Úconfig)Úsysr•   Ú
isinstancer
   ÚcountÚstdoutÚwriter#   rA   rK   rm   ÚenvironÚgetÚ_prepareconfigrV   r‰   ÚstderrrO   Úpopri   rŒ   rN   ÚhookÚpytest_cmdline_mainÚ_ensure_unconfigureÚ
ValueErrorr   r‘   )r�   r™   rš   Únew_argsÚold_pytest_versionr¤   rˆ   Úrets           rT   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Ð'Ò(ûô' #ò 	+Ü% a¬c¯j©jÕ9Ü×*Ñ*Ô*ð Ð%Ü�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®   Â%J Â=D: ÃI: Ã)
H# Ã3J Ä:	H Å*F)Å-H Å.J Æ)H Æ5*HÇH Ç J ÈH È J È#I7È.I: È/J É6I7É7I: É:JÊJ Ê	LÊ*K>ËLËL Ë>LÌL Ì8L>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ÚBrokenPipeErrorrm   ÚopenÚdevnullÚO_WRONLYÚdup2Úfileno)Úcoderº   s     rT   Ú_console_mainr¿     sv   € ð	Üœ.¬¯©Ó2Ô3ˆÜ�
‰
×ÑÔØˆøÜò ô —'‘'œ"Ÿ*™*¤b§k¡kÓ2ˆÜ
�‰�œŸ™×*Ñ*Ó,Ô-Ùðús   ‚AA ÁA-B5Â4B5c                 ón   — ddl } ddlm}  | j                  |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_MAINrB   ©Ú
stacklevel)ÚwarningsÚ_pytest.deprecatedrÁ   ÚwarnÚformatr¿   )rÄ   rÁ   s     rT   Úconsole_mainrÈ   )  s+   € ó å/à€H‡M�M�,×%Ñ%Ó'°AÕ6Ü‹?ÐrS   c                  ó   — e Zd Z ee«      Zy)ÚcmdlineN)rG   rH   rI   Ústaticmethodr�   rR   rS   rT   rÊ   rÊ   8  s   „ Ù˜Ó�DrS   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: ©rm   rY   Úisdirr   ©rY   Úoptnames     rT   Úfilename_argrÑ   <  s0   € ô 
‡w�w‡}�}�TÔÜ˜G˜9Ð$@ÀÀÐGÓHÐHØ€KrS   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     rT   Údirectory_argrÓ   G  s0   € ô �7‰7�=‰=˜ÔÜ˜G˜9Ð$AÀ$ÀÐHÓIÐIØ€KrS   )Ú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 )NrR   ©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          rT   Ú
get_configr  €  s”   € ô (Ó)€MÜ×/Ñ/ØŠZ�RØÜ�L‰L×ÑÓð 0ó Ðô
 �MÐ5FÈTÔR€Fà×Òà×'Ñ'Ð(9×(>Ñ(>ÈTÐ'ÔRäò *ˆØ×#Ñ# DÕ)ð*ð €MrS   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  rR   rS   rT   Úget_plugin_managerr  ™  s   € ô ‹<×%Ñ%Ð%rS   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¦   rm   ÚPathLikeÚfspathÚlistÚ	TypeErrorrÇ   r`   r  r  rg   Úconsider_pluginargÚregisterr¯   Úpytest_cmdline_parseÚBaseExceptionr±   )r�   r™   rš   r�   Úinitial_configr  Úpluginr¤   s           rT   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©rY   s    rT   Ú_get_directoryr  Ä  s   € à‡|�|„~Ø�{‰{ÐàˆrS   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Ç   rI   r;   r   r   )ÚmethodÚ	hook_typeÚ	opt_namesÚmÚknown_marksÚ	must_warnÚoptsÚopt_nameÚopt_attrr  Úmessages              rT   Ú_get_legacy_hook_marksr1  Ì  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                  óv  ‡ — 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dd0ˆ fd„Zˆ xZS )1rû   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Ú	bufferingr8  )#Ú_pytest.assertionr4  r5  Úsuperr\   ÚsetÚ_conftest_pluginsÚ_dirpath2confmodsÚ_confcutdirÚ_noconftestr   r  Úskipped_pluginsÚadd_hookspecsr%  Úhookspecr  rm   rª   r«   r¥   r­   r   r¹   Údupr½   r:  rd   ÚtraceÚrootÚ	setwriterr©   Úenable_tracingÚrewrite_hookÚ_configured)r[   r4  r5  Úerrr8  Ú	__class__s        €rT   r\   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  r1  r   r   )r[   r  r!  r-  r'  ÚlegacyrN  s         €rT   rY  z'PytestPluginManager.parse_hookimpl_opts*  sz   ø€ ð �‰˜yÔ)ØàÐ#Ò#Øä‰wÑ*¨6°4Ó8ˆØÐØˆKä˜ Ó&ˆä× Ñ  Ô(Øä'Ø�FÐRó
ˆô ”L &Ó)Ð)rS   c                ó    •— t         ‰| �  ||«      }|€:t        ||«      }|j                  d«      rt	        |dd«      }t        t        |«      }|S )rP  rQ  r  )ÚfirstresultÚhistoric)r=  Úparse_hookspec_optsr   rX  r1  r   r   )r[   Úmodule_or_classr!  r-  r'  rZ  rN  s         €rT   r^  z'PytestPluginManager.parse_hookspec_optsE  sV   ø€ ä‰wÑ*¨?¸DÓAˆØˆ<Ü˜_¨dÓ3ˆFØ�‰˜yÔ)Ü/Ø˜FÐ$?ó�ô œL¨&Ó1�ØˆrS   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Æ   r:   rÇ   Úreplacer=  r  r¯   Úpytest_plugin_registeredÚcall_historicÚdictr¦   ÚtypesÚ
ModuleTypeÚconsider_module)r[   r  r!  rc  rN  s       €rT   r  zPytestPluginManager.registerQ  s¹   ø€ Ø”7×%Ñ%×AÑAÑAÜ�M‰MÜ#ð?ß?E¹vØŸ™ S¨#Ó.ó@óôð Ü‘gÑ& v¨tÓ4ˆØÐ"Ø�I‰I×.Ñ.×<Ñ<ÜØ!Ø +Ø ôð =ô ô ˜&¤%×"2Ñ"2Ô3Ø×$Ñ$ VÔ,ØÐrS   c                ó(   — | j                  |«      }|S rX   )Ú
get_plugin)r[   r!  r  s      rT   Ú	getpluginzPytestPluginManager.getpluginj  s   € à'+§¡°tÓ'<ˆØˆrS   c                ó6   — t        | j                  |«      «      S )z:Return whether a plugin with the given name is registered.)Úboolrp  )r[   r!  s     rT   Ú	haspluginzPytestPluginManager.hasplugino  s   € ä�D—O‘O DÓ)Ó*Ð*rS   c                óZ   — |j                  dd«       |j                  dd«       d| _        y)rP  Ú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_linerL  ©r[   r¤   s     rT   Úpytest_configurez$PytestPluginManager.pytest_configures  s>   € ð 	×ÑØðGô	
ð 	×ÑØðFô	
ð  ˆÕrS   c               ó"  — |rt        ||z  «      nd| _        || _        || _        g }	|D ]�  }
t	        j
                  t        |
«      «      j                  }t        ||z  «      }t        |«      sŒE|	j                  |«       |j                  «       sŒg|	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.
        Nc              3  óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­wrX   ©Úis_dir©Ú.0Úxs     rT   ú	<genexpr>z=PytestPluginManager._set_initial_conftests.<locals>.<genexpr>®  s   è ø€ ÒM QÀ!Ç(Á(Å*œqÑMùó   ‚˜ztest*c              3  óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­wrX   r|  r~  s     rT   r�  z=PytestPluginManager._set_initial_conftests.<locals>.<genexpr>±  s   è ø€ ÒQ ÀaÇhÁhÅjœ1ÑQùr‚  ©Úconsider_namespace_packages)r3   rA  rB  Ú_using_pyargsr0   Úparserg   rY   r8   r#  r}  ÚextendÚglobÚ_loadconftestmodules)r[   r�   ÚpyargsÚ
noconftestÚrootpathÚ
confcutdirÚinvocation_dirÚ
importmoder…  ÚanchorsÚinitial_pathrY   Úanchors                rT   Ú_set_initial_conftestsz*PytestPluginManager._set_initial_conftestsˆ  s  € ñ( :DŒL˜¨*Ñ4Ô5Èð 	Ôð &ˆÔØ#ˆÔàˆØ ò 	NˆLä—<‘<¤ LÓ 1Ó2×7Ñ7ˆDÜ! .°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ð	 &õ ñ	rS   c                óL   — | j                   €y|| j                   j                  vS )z:Whether to consider the given path to load conftests from.T)rA  Úparents©r[   rY   s     rT   Ú_is_in_confcutdirz%PytestPluginManager._is_in_confcutdir»  s*   € à×ÑÐ#Øð ˜4×+Ñ+×3Ñ3Ð3Ð3rS   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.pyr„  )	rB  r  r@  Úreversedr–  r˜  r  Ú_importconftestr#  )
r[   rY   r�  r�  r…  Ú	directoryÚclistr  ÚconftestpathÚmods
             rT   rŠ  z(PytestPluginManager._loadconftestmodulesÊ  s¿   € ð ×ÒØà×'Ñ'¨Ó-ˆ	ð ˜×.Ñ.Ñ.ØàˆÜ 	Ð>¨I×,=Ñ,=Ñ>Ó?ò 
	&ˆFØ×%Ñ% fÕ-Ø%¨Ñ5�Ø×'Ñ'Õ)Ø×.Ñ.Ø$Ø"Ø Ø4Oð	 /ó �Cð —L‘L Õ%ð
	&ð -2ˆ×Ñ˜yÒ)rS   c                ó\   — | j                  |«      }| j                  j                  |d«      S )NrR   )r  r@  r«   )r[   rY   r�  s      rT   Ú_getconftestmodulesz'PytestPluginManager._getconftestmodulesê  s+   € Ø×'Ñ'¨Ó-ˆ	Ø×%Ñ%×)Ñ)¨)°RÓ8Ð8rS   c                ó˜   — | j                  |«      }t        |«      D ]  }	 |t        ||«      fc S  t	        |«      ‚# t        $ r Y Œ+w xY wrX   )r¢  r›  r   r"  ÚKeyError)r[   r!  rY   Úmodulesr   s        rT   Ú_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:  rH  r…  )rZ   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)rg   rp  r   rl  rm  r7   r¥   r¥  Ústemr¤  r5   rd   Ú__traceback__rV   Ú_check_non_top_pytest_pluginsr?  Úaddr  r@  Úitemsr–  ÚAssertionErrorÚ__file__r#  rG  Úconsider_conftest)r[   rŸ  r�  r�  r…  Úconftestpath_plugin_nameÚexistingÚpkgpathr   rˆ   ÚdirpathrY   Úmodss                rT   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 )NrR  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)ÚhasattrrL  r†  r1   rÇ   rA  )r[   r   rŸ  r�   s       rT   r«  z1PytestPluginManager._check_non_top_pytest_plugins0  sX   € ô �CÐ)Ô*Ø× Ò Ø×&Ò&ðwð ô �—‘˜L¨$×*:Ñ*:Ó;ÀUÖKð 'ð !ð +rS   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)rP  r   r   z-pNrB   úno:)Úlenr¦   rg   Ú
IndexErrorrX  Ústripr  )r[   r�   rú   ÚiÚnÚoptÚpargs          rT   r   z%PytestPluginManager.consider_preparseJ  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)rP  rº  rC   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_stepwiserQ  T©Úconsider_entry_points)rX  Úessential_pluginsr   ÚendswithÚset_blockedÚunblockr  )r[   Úargr!  s      rT   r  z&PytestPluginManager.consider_pluginargc  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¸$ÐÕ?rS   c                ó*   — | j                  ||¬«       y©rP  ©r!  N)r  )r[   Úconftestmoduler¨  s      rT   r°  z%PytestPluginManager.consider_conftest€  s   € ð 	�‰�nÐ+<ˆÕ=rS   c                ó`   — | j                  t        j                  j                  d«      «       y)rP  ÚPYTEST_PLUGINSN)Ú_import_plugin_specsrm   rª   r«   ra   s    rT   Úconsider_envz PytestPluginManager.consider_env†  s   € à×!Ñ!¤"§*¡*§.¡.Ð1AÓ"BÕCrS   c                ó<   — | j                  t        |dg «      «       y)rP  rR  N)rÑ  r   )r[   r   s     rT   rn  z#PytestPluginManager.consider_moduleŠ  s   € à×!Ñ!¤'¨#Ð/?ÀÓ"DÕErS   c                óN   — t        |«      }|D ]  }| j                  |d¬«       Œ y )NTrÄ  )Ú_get_plugin_specs_as_listr  )r[   r  r™   Úimport_specs       rT   rÑ  z(PytestPluginManager._import_plugin_specsŽ  s2   € ô ,¨DÓ1ˆØ"ò 	HˆKØ×Ñ˜{À$ÐÕGñ	HrS   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        $ r5}| j                   j#                  ||j$                  xs df«       Y d}~yd}~wt&        $ r/}t)        ||«      rt+        d|› d	|› �«      |‚t-        |«      |‚d}~wt*        $ r ‚ t.        $ r}t-        |«      |‚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Í  )rC   é   r“   zError importing plugin "z": )r¦   rg   Ú
is_blockedrp  Úbuiltin_pluginsrK  Úmark_rewriteÚload_setuptools_entrypointsr¥   Úversion_infork   Úimport_moduleÚ
__import__r¥  r  r2   rC  r#  r�   ÚModuleNotFoundErrorÚ_is_missing_moduler   ri   rd   )r[   ÚmodnamerÅ  Ú
importspecÚloadedr   rˆ   s          rT   r  z!PytestPluginManager.import_plugin•  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Õ'øô ò 	@Ø× Ñ ×'Ñ'¨°!·%±%²+¸2Ð(>×?Ñ?ûÜ"ò 	6Ü! ! ZÔ0ô !Ð#;¸G¸9ÀCÈÀsÐ!KÓLÐRSÐSô & gÓ.°AÐ5ûÜò 	ØÜò 	6Ü% gÓ.°AÐ5ûð	6ús1   ÂAC Ã	E0Ã$+DÄE0Ä *E
Å
E0ÅE+Å+E0c                ó|   •— 	 t         ‰| �  ||¬«      S # t        $ r ‚ t        $ r}t	        |xs |«      |‚d}~ww xY wrÌ  )r=  rÝ  r   rd   ri   )r[   Úgroupr!  rˆ   rN  s       €rT   rÝ  z/PytestPluginManager.load_setuptools_entrypointsÆ  sK   ø€ ð	<Ü‘7Ñ6°uÀ4Ð6ÓHÐHøÜò 	ØÜò 	<ô & d¢m¨eÓ4¸!Ð;ûð	<ús   ƒ ”;¦6¶;©re   rf   )r  Ú_PluggyPluginr!  rg   re   zHookimplOpts | None)r!  rg   re   zHookspecOpts | NonerX   )r  ré  r!  ú
str | Nonere   rê  ©r!  rg   )r!  rg   re   rs  ©r¤   ró   re   rf   )r�   zSequence[str | pathlib.Path]r‹  rs  rŒ  rs  r�  rc   rŽ  úpathlib.Path | Noner�  rc   r�  zImportMode | strr…  rs  re   rf   )rY   rc   re   rs  )
rY   rc   r�  ústr | ImportModer�  rc   r…  rs  re   rf   )rY   rc   re   zSequence[types.ModuleType])r!  rg   rY   rc   re   ztuple[types.ModuleType, Any])
rŸ  rc   r�  rî  r�  rc   r…  rs  re   útypes.ModuleType)r   rï  rŸ  rc   re   rf   )r�   úSequence[str]rú   rs  re   rf   )rÊ  rg   re   rf   )rÎ  rï  r¨  rg   re   rf   )r   rï  re   rf   )r  ú-types.ModuleType | str | Sequence[str] | Nonere   rf   )F)rã  rg   rÅ  rs  re   rf   )rç  rg   r!  rê  re   Úint)rG   rH   rI   rJ   r\   rY  r^  r  rq  rt  ry  r”  r˜  rŠ  r¢  r¦  rœ  r«  r   r  r°  rÒ  rn  rÑ  r  rÝ  Ú__classcell__)rN  s   @rT   rû   rû   ì  sØ  ø„ ñõ2!ðh*Ø#ð*Ø+.ð*à	õ*õ6
öó2ó
+ó ð*1à*ð1ð ð1ð ð	1ð
 ð1ð (ð1ð %ð1ð %ð1ð &*ð1ð 
ó1óf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ðHØAðHà	óHô/(÷b	<ò 	<rS   c                óz   — | j                   €y| j                   |k(  xs |j                  | j                   › d�«      S )zËWhether ``e`` means that ``importspec`` itself could not be found.

    A ``ModuleNotFoundError`` naming some other module means the plugin was
    located but one of its own imports is unsatisfied.
    Fú.)r!  rX  )rˆ   rä  s     rT   râ  râ  Ò  s9   € ð 	‡v�v€~Øà�6‰6�ZÑÒF :×#8Ñ#8¸A¿F¹F¸8À1¸Ó#FÐFrS   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¦   rl  rm  rg   rl   ÚcollectionsÚabcr
   r  r   )Úspecss    rT   rÕ  rÕ  Þ  sz   € ð
 €}Øˆ	ä�%œ×)Ñ)Ô*Øˆ	ä�%œÔÙ#(ˆu�{‰{˜3ÓÐ0¨bÐ0ä�%œŸ™×1Ñ1Ô2Ü�E‹{ÐÜ
Ø
aÐbgÐajÐkóð rS   c                ó8  — | j                  d«      }d}t        |«      D ]y  \  }}t        j                  j                  j                  ||«      }|€ y|j                  €|j                  €dj                  |d|dz    «      c S t        |j                  «      }Œ{ y)a®  Return the name to mark so that ``module`` is rewritten.

    This is the outermost package of ``module`` that is not a namespace
    package: a namespace package can be shared with distributions that have
    nothing to do with the plugin, and marking it would rewrite those too.

    Names are resolved through ``PathFinder`` because it does not import
    anything, and the plugin must not be imported before it is marked.
    rõ  Nr   )
rl   Ú	enumeraterk   Ú	machineryÚ
PathFinderÚ	find_specÚoriginÚsubmodule_search_locationsr$  r  )ÚmoduleÚpartsÚsearch_pathr¾  Úpartr  s         rT   Ú_plugin_rewrite_namer  ó  s˜   € ð �L‰L˜Ó€EØ$(€KÜ˜UÓ#ò <‰ˆˆ4Ü×"Ñ"×-Ñ-×7Ñ7¸¸kÓJˆØˆ<ÙØ�;‰;Ð" d×&EÑ&EÐ&MØ—8‘8˜E ' A¨¡E˜NÓ+Ò+Ü˜4×:Ñ:Ó;‰ð<ð rS   c                óÖ   — t        | dd«      }|€y |d«      }|sy	 t        j                  |«      j                  di «      }t        |j                  d«      «      S # t        $ r Y yw xY w)zèWhether the distribution was installed in editable mode (PEP 660).

    Such installs do not record the package's Python files in the distribution
    metadata, so they need special handling when looking for modules to rewrite.
    Ú	read_textNFzdirect_url.jsonÚdir_infoÚeditable)r   ÚjsonÚloadsr«   r²   rs  )Údistr  Ú
direct_urlr	  s       rT   Ú_is_editable_installr  	  sv   € ô ˜˜k¨4Ó0€IØÐØÙÐ,Ó-€JÙØðÜ—:‘:˜jÓ)×-Ñ-¨j¸"Ó=ˆô �—‘˜ZÓ(Ó)Ð)øô ò Ùðús   �%A Á	A(Á'A(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§   rm   rY   ÚsplitextrX  Údirnamerl   r$  r#  Ú_iter_rewritable_modules)Úpackage_filesÚ	seen_someÚfnÚis_simple_moduleÚ
is_packageÚmodule_namera  Úpackage_nameÚnew_package_filesr  Únew_fns              rT   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 rX   r"  rx  s     rT   r\   z_DeprecatedInicfgProxy.__init__b  s	   € Øˆ�rS   c                óH   — | j                   j                  |   j                  S rX   )r#  Ú_inicfgÚvalue©r[   Úkeys     rT   Ú__getitem__z"_DeprecatedInicfgProxy.__getitem__e  s   € Ø�|‰|×#Ñ# CÑ(×.Ñ.Ð.rS   c                óN   — t        |dd¬«      | j                  j                  |<   y )NÚoverrideÚtoml)r   r:  )r    r#  r&  )r[   r)  r'  s      rT   Ú__setitem__z"_DeprecatedInicfgProxy.__setitem__h  s   € Ü$/°¸jÈvÔ$Vˆ�‰×Ñ˜SÒ!rS   c                ó2   — | j                   j                  |= y rX   )r#  r&  r(  s     rT   Ú__delitem__z"_DeprecatedInicfgProxy.__delitem__k  s   € Ø�L‰L× Ñ  Ñ%rS   c                ó@   — t        | j                  j                  «      S rX   )Úiterr#  r&  ra   s    rT   Ú__iter__z_DeprecatedInicfgProxy.__iter__n  s   € Ü�D—L‘L×(Ñ(Ó)Ð)rS   c                ó@   — t        | j                  j                  «      S rX   )r»  r#  r&  ra   s    rT   Ú__len__z_DeprecatedInicfgProxy.__len__q  s   € Ü�4—<‘<×'Ñ'Ó(Ð(rS   Nrì  )r)  rg   re   r   )r)  rg   r'  r   re   rf   )r)  rg   re   rf   )re   úIterator[str]©re   rò  )rG   rH   rI   rJ   Ú	__slots__r\   r*  r.  r0  r3  r5  rR   rS   rT   r!  r!  ]  s)   „ Ù?à€Ióó/óWó&ó*ô)rS   r!  c                  ó0   — e Zd ZU dZded<   ded<   ded<   y)ÚRegisteredMarkerz)A marker registered in the configuration.rg   r!  Ú	signatureÚdescriptionN)rG   rH   rI   rJ   Ú__annotations__rR   rS   rT   r:  r:  u  s   … Ù3ð ƒIàƒNàÔrS   r:  c                  óÐ  — 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œ	 	 	 	 	 	 	 dId„Zer ed«      edJd„«       «       Zn	edJd„«       ZedKd„«       ZedLd„«       ZdMd„Zej*                  	 	 	 	 dNd„«       Zej*                  dOd„«       ZdPd„ZdPd„ZdQd„Z	 	 	 	 	 	 dRd„Z	 dS	 	 	 	 	 dTd„ZdUd„ZedVd„«       ZdWd„Z  e!d¬«      dXd„«       Z"dPd„Z#	 	 	 	 	 	 dYd „Z$dPd!„Z%dPd"„Z&dZd#„Z'	 	 	 	 	 	 	 	 	 	 	 	 	 	 d[d$„Z( e!d¬%«      d\d&„«       Z)dPd'„Z*dPd(„Z+dPd)„Z,d]d*„Z-d^d+„Z.d_d`d,„Z/dad-„Z0dbd.„Z1dcd/„Z2ddd0„Z3ded1„Z4dfd2„Z5	 	 	 	 	 	 	 	 	 	 	 	 dgd3„Z6	 	 	 	 	 	 	 	 	 	 dhd4„Z7	 	 	 	 	 	 	 	 	 	 did5„Z8	 	 	 	 	 	 djd6„Z9e:d7fdkd8„Z;dSdfd9„Z<dSdfd:„Z=d;Z>d<ed=<   d>Z?d<ed?<   d@Z@d<edA<   dBZAd<edC<   dSdldD„ZBeCdmdE„«       ZDeCdndF„«       ZEdodG„ZFdPdH„ZGy
)pró   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™   rc   rö   c               ó    — t         j                  | dt        |«      «       t         j                  | d|«       t         j                  | d|«       y )Nr�   r™   rö   )ÚobjectÚ__setattr__Útuple)r[   r�   r™   rö   s       rT   r\   z Config.InvocationParams.__init__¤  s>   € ô ×Ñ˜t V¬U°4«[Ô9Ü×Ñ˜t Y°Ô8Ü×Ñ˜t U¨CÕ0rS   N)r�   úIterable[str]r™   rC  rö   rc   re   rf   )rG   rH   rI   rJ   r=  r\   rR   rS   rT   rü   rA  Œ  sQ   … ñ	ð ÓØJØ5Ó5Ø-ØÓØGð		1ð  ð		1ð :ð			1ð
 ð		1ð ô		1rS   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)
rG   rH   rI   rJ   ÚenumÚautoÚARGSÚINVOCATION_DIRÚINCOVATION_DIRÚ	TESTPATHSrR   rS   rT   Ú
ArgsSourcerJ  ¯  s5   „ ñ	ð ˆt�y‰y‹{ˆà"˜Ÿ™›ˆØ'ˆà�D—I‘I“K‰	rS   rQ  r=   Ú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 )NrR   rõ   z%(prog)s [options] [z] [z] [...]T)ÚusageÚ
processoptrš   Ú	_ispytestr¤   ÚpytestconfigF)Úparserr  re  )#rü   rý   rþ   rÿ   ÚargparseÚ	NamespaceÚoptionrø   r/   r.   Ú_processoptÚ_parserr  r9   ÚstashÚ_storerG  rH  r«   r¯   Ú	_inicacher&  Ú
contextlibÚ	ExitStackÚ_cleanup_stackr  rL  Úpytest_addoptionrj  rk  ró   rQ  rM  Úargs_sourcer�   )r[   r  rø   rš   s       rT   r\   zConfig.__init__À  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ˆÔØ!ˆ�	rS   zXconfig.inicfg is deprecated, use config.getini() to access configuration values instead.c                ó   — t        «       ‚rX   )ÚNotImplementedErrorra   s    rT   ÚinicfgzConfig.inicfgü  s   € ô
 &Ó'Ð'rS   c                ó’   — t        j                  t        j                  j                  j                  «       d¬«       t        | «      S )NrB   rÂ   )rÄ   rÆ   r%  r)   ÚCONFIG_INICFGrÇ   r!  ra   s    rT   rh  zConfig.inicfg  s6   € ä�M‰MÜ×"Ñ"×0Ñ0×7Ñ7Ó9Øõô *¨$Ó/Ð/rS   c                ó   — | j                   S )zQThe path to the :ref:`rootdir <rootdir>`.

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

        .. versionadded:: 6.1
        )Ú_inipathra   s    rT   ÚinipathzConfig.inipath  s   € ð �}‰}ÐrS   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)rc  Úcallback)r[   Úfuncs     rT   Úadd_cleanupzConfig.add_cleanup  s   € ð 	×Ñ×$Ñ$ TÕ*rS   c             #  ód  K  — | j                  d«      }| j                  j                  xs g }t        j                  |¬«      5 }t
        j                  s6t        j                  dt        ¬«       t        j                  dt        ¬«       t        ||«       |–— ddd«       y# 1 sw Y   yxY w­w)a	  Apply configured filters in a warnings-catching context.

        Defined here instead of _pytest.warnings as _do_configure uses
        it before the warnings module's pytest_configure hook runs, and
        defining it there would create an import cycle.
        Úfilterwarnings©ÚrecordÚalways)ÚcategoryN)ÚgetiniÚknown_args_namespaceÚpythonwarningsrÄ   Úcatch_warningsr¥   Úwarnoptionsru  ÚDeprecationWarningÚPendingDeprecationWarningÚapply_warning_filters)r[   rw  Úconfig_filtersÚcmdline_filtersÚlogs        rT   Ú_catch_configured_warningsz!Config._catch_configured_warnings"  s‹   è ø€ ð Ÿ™Ð%5Ó6ˆØ×3Ñ3×BÑBÒHÀbˆÜ×$Ñ$¨FÔ3ð 
	°sÜ—?’?ä×'Ñ'¨Ô;MÕNÜ×'Ñ'¨Ô;TÕUô
 " .°/ÔBØŠI÷
	÷ 
	ñ 
	üs   ‚AB0ÁAB$Â	B0Â$B-Â)B0c              #  ó`  K  — | j                  d¬«      5 }|€J ‚	 d –— |D ]5  }| j                  j                  j                  t	        |ddd ¬«      ¬«       Œ7 	 d d d «       y # |D ]5  }| j                  j                  j                  t	        |ddd ¬«      ¬«       Œ7 w xY w# 1 sw Y   y xY w­w)NTrv  r“   r¤   )Úwarning_messageÚnodeidÚwhenÚlocationre  )r…  r¯   Úpytest_warning_recordedrj  rk  )r[   Úrecordsr‡  s      rT   Ú_capture_plugin_import_warningsz&Config._capture_plugin_import_warnings<  sÌ   è ø€ à×,Ñ,°DÐ,Ó9ð 	¸WàÐ&Ð&Ð&ðÛà'.ò �OØ—I‘I×5Ñ5×CÑCÜ#Ø,;Ø#%Ø!)Ø%)ô	 ð Dõ ñ÷	ð 	øð (/ò �OØ—I‘I×5Ñ5×CÑCÜ#Ø,;Ø#%Ø!)Ø%)ô	 ð Dõ ñú÷	ð 	üs2   ‚B.•B"›A#Ÿ:B"Á	B.Á#<BÂB"Â"B+Â'B.c                óª  — | j                   rJ ‚d| _         | j                  j                  d«      rgt        j                  «       5 }|j                  | j                  d¬«      «       | j                  |j                  «       j                  «       d d d «       | j                  j                  j                  t        | ¬«      ¬«       y # 1 sw Y   Œ:xY w)NTrÄ   Frv  r£   re  )rL  r  rt  ra  rb  Úenter_contextr…  rs  Úpop_allÚcloser¯   ry  rj  rk  )r[   Ústacks     rT   Ú_do_configurezConfig._do_configureO  sª   € Ø×#Ò#Ð#Ð#ØˆÔØ×Ñ×'Ñ'¨
Ô3Ü×%Ñ%Ó'ð 8¨5ð
 ×#Ñ# D×$CÑ$CÈ5Ð$CÓ$QÔRØ× Ñ  §¡£×!6Ñ!6Ô7÷8ð 	�	‰	×"Ñ"×0Ñ0¼ÀDÔ8IÐ0ÕJ÷8ð 8ús   ÁAC	Ã	C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£   )	rL  r¯   Úpytest_unconfigurery  Ú_call_historyrc  r‘  ra  rb  ra   s    rT   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  rp  Ú_tw)r[   r˜  s     rT   Úget_terminal_writerzConfig.get_terminal_writerj  s6   € Ø48×4FÑ4F×4QÑ4QØó5
Ðð  Ð+Ð+Ð+Ø×#Ñ#Ð#rS   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.

)r‡  r   r   r[  Ú_pytest.helpconfigr�  r]  Ú	optparserÚ
print_helpr¥   r¨   r©   )r[   r  r�   r�  s       rT   r  zConfig.pytest_cmdline_parseq  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¦  ru   )ÚexcreprÚexcinforŽ   zINTERNALERROR> )r   r{   r¯   Úpytest_internalerrorÚanyrg   rl   r¥   r­   r©   r·   )r[   r©  r[  ru   r¨  Úresrx   s          rT   Ú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°&¸Ð!;Ô<Ü—
‘
× Ñ Õ"ñ#ð rS   c                óì   — | j                   j                  | j                  k7  rP| j                  |j                  z  }t	        | j                   j                  |«      }t        j                  ||¬«      S |S )Nr  )rø   rö   r�  rY   r4   Údataclassesrh  )r[   rˆ  ÚfullpathÚrelative_paths       rT   Úcwd_relative_nodeidzConfig.cwd_relative_nodeidž  s\   € à×!Ñ!×%Ñ%¨¯©Ò6Ø—}‘} v§{¡{Ñ2ˆHÜ'¨×(>Ñ(>×(BÑ(BÀHÓMˆMÜ×&Ñ& v°MÔBÐBØˆrS   c                óø   — t        |«      }|j                  j                  j                  |«       |j	                  |d¬«       |j                  j
                  D ]  }|j                  j                  |«       Œ |S )z$Constructor usable for subprocesses.F)Úaddopts)r  r[  Ú__dict__Úupdater‡  r™   r  r  )ÚclsÚoption_dictr�   r¤   r€  s        rT   ÚfromdictargszConfig.fromdictargs¦  sh   € ô ˜DÓ!ˆØ�‰×Ñ×%Ñ% kÔ2Ø�‰�T 5ˆÔ)Ø—‘×&Ñ&ò 	7ˆAØ× Ñ ×3Ñ3°AÕ6ð	7àˆrS   c                óœ   — t        | j                  |j                  «      s,t        | j                  |j                  |j                  «       y y rX   )r¸  r[  ÚdestÚsetattrÚdefault)r[   rÀ  s     rT   r\  zConfig._processopt°  s1   € Ü�t—{‘{ C§H¡HÔ-Ü�D—K‘K §¡¨3¯;©;Õ7ð .rS   )rU  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Æ   r…  )r�   r‹  rŒ  r�  rŽ  r�  r�  r…  )Ú_decide_argsr{  Úfile_or_dirr‹  rz  rø   rö   r�  r  r”  rŒ  rŽ  r�  )r[   Úearly_configr�   Ú_args_sources       rT   Ú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õ 	
rS   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{  rs  rm   rª   r«   r<  rã   Úinstall_importhookÚ_mark_plugins_for_rewriteÚSystemErrorÚ_warn_about_missing_assertion)r[   r:  Údisable_autoloadr%  r¯   s        rT   Ú_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t        j                  j	                  «       D ]Â  }|j
                  D �cg c]  }|j                  dk(  sŒ|‘Œ }}|sŒ/t        t        d„ |j                  xs g D «       «      «      }|sQt        |«      rF|D �ch c];  }t        |j                  j                  d«      d   j                  «       «      x}r|’Œ= }}|D ]  }|j                  |«       Œ ŒÄ yc c}w c c}w )z‹Given an importhook, mark for rewrite any top-level
        modules or packages in the distribution package for
        all pytest plugins.NrØ  c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrX   )rg   )r  r€   s     rT   r�  z3Config._mark_plugins_for_rewrite.<locals>.<genexpr>ø  s   è ø€ Ò(P°t¬¨T¯Ñ(Pùs   ‚ú:r   )r  rK  rk   ÚmetadataÚdistributionsÚentry_pointsrç  r>  r  Úfilesr  r  r'  Ú	partitionr½  rÜ  )r[   r¯   rÐ  r  Úepr×  Únamesr!  s           rT   rÍ  z Config._mark_plugins_for_rewriteæ  s  € ð +/ˆ×ÑÔ'áð ä×&Ñ&×4Ñ4Ó6ò 	(ˆDØ)-×):Ñ):ÖU 2¸b¿h¹hÈ*Ó>TšBÐUˆLÐUÙØÜÜ(Ñ(P¸t¿z¹zÒ?OÈRÔ(PÓPóˆEñ Ô1°$Ô7ð
 +öàä 4°R·X±X×5GÑ5GÈÓ5LÈQÑ5O×5UÑ5UÓ5WÓ XÐX˜ÐXò ð�ð ð ò (�Ø×!Ñ! $Õ'ñ(ñ#	(ùÚUùòs   ÁC9ÁC9ÂA C>c                óÊ   — t        | j                  d«      «      D ]+  }t        j                  j	                  dt        |«      «       Œ- | j                  | j                  «       y )NÚ
pythonpathr   )r›  rz  r¥   rY   Úinsertrg   rs  Ú_unconfigure_python_pathr—  s     rT   Ú_configure_python_pathzConfig._configure_python_path  sI   € ä˜TŸ[™[¨Ó6Ó7ò 	*ˆDÜ�H‰H�O‰O˜Aœs 4›yÕ)ð	*à×Ñ˜×6Ñ6Õ7rS   c                óª   — | j                  d«      D ]?  }t        |«      }|t        j                  v sŒ!t        j                  j	                  |«       ŒA y )NrÝ  )rz  rg   r¥   rY   Úremove)r[   rY   Úpath_strs      rT   rß  zConfig._unconfigure_python_path  s?   € Ø—K‘K Ó-ò 	*ˆDÜ˜4“yˆHØœ3Ÿ8™8Ò#Ü—‘—‘ Õ)ñ	*rS   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)r]  Ú
extra_infoÚparse_known_and_unknown_argsÚcopyr[  r®   )r[   r�   Úvias      rT   Ú_validate_argszConfig._validate_args  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.rC   rÂ   )ró   rQ  rM  rP  rˆ  Úsortedr‰  ÚiglobÚissue_config_time_warningr:   rN  rg   )r[   r�   r‹  r¿  r�  r�  rÆ   ÚsourceÚresultrY   Úwarning_texts              rT   rÁ  zConfig._decide_args  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ˆ~ÐrS   )Úwrapperc              #  ó^   K  — 	 d –—| j                  «        S # | j                  «        w xY w­wrX   )Ú_validate_config_optionsra   s    rT   Úpytest_collectionzConfig.pytest_collectionL  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?   rz  Úpackaging.versionrû  r#   r   ro  )r[   r?   Úminverrû  s       rT   Ú_checkversionzConfig._checkversionU  sr   € Ûà—‘˜\Ó*ˆÙå1á�v‹¡¨×);Ñ);Ó!<Ò<Ø×'Ñ'Ø—|‘|�nÐ$CÀFÀ8ÐK[Ð\b×\nÑ\nÐ[oÐopÐqóð ð =ð	 rS   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     rT   rö  zConfig._validate_config_optionsb  s9   € Ü˜$×4Ñ4Ó6Ó7ò 	LˆCØ×(Ñ(Ð+BÀ3À%ÀrÐ)JÕKñ	LrS   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î  rz  Úpackaging.requirementsr  r  rý  rû  r  Úlist_plugin_distinfoÚproject_namerœ  r#  r!  Ú	specifierÚcontainsr   rÇ   r$  )r[   r  r  r  rû  Úplugin_infora  r  Úplugin_dist_infoÚmissing_pluginsÚrequired_pluginÚreqs               rT   Ú_validate_pluginszConfig._validate_pluginsf  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ÚstrictrC   rÂ   )rz  r   rð  r:   )r[   r0  r  s      rT   r  zConfig._warn_or_fail_if_strict‡  sL   € ØŸ™ OÓ4ˆØÐ Ø ŸK™K¨Ó1ˆMÙÜ˜WÓ%Ð%à×&Ñ&Ô':¸7Ó'CÐPQÐ&ÕRrS   c                óÎ   — | j                   j                  j                  «       | j                   j                  j                  «       z  }| j                  j                  «       |z
  S rX   )r]  Ú_inidictÚkeysÚ_ini_aliasesr&  )r[   Ú
known_keyss     rT   r  zConfig._get_unknown_ini_keys�  sJ   € Ø—\‘\×*Ñ*×/Ñ/Ó1°D·L±L×4MÑ4M×4RÑ4RÓ4TÑTˆ
Ø�|‰|× Ñ Ó" ZÑ/Ð/rS   c                ó~  — | 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«      }
| jD                  jV                  D ]"  }|jY                  «       }|dk(  rd}
Œ|dk(  sŒ!d}
Œ$ |
r| j[                  «       nt]        j^                  «       5  | j
                  ja                  |d¬«       t        j                  j                  d«      s1| jD                  jb                  s| j
                  je                  d«       | j
                  jg                  «        d d d «       | j                  j                  |t        j                  | j                   «      ¬«      | _"        | ji                  «        | jk                  «        | jD                  jl                  €R| j>                  � t9        | j>                  jn                  «      }nt9        | j:                  «      }|| jD                  _6        	 | j                  jq                  | || j                  ¬«       	 | j                  j                  || j                   ¬«       | jƒ                  t…        | j                   t†        «      | j                   jˆ                  | jC                  d#«      | j,                  j.                  | j:                  d¬$«      \  | _         | _E        y # 1 sw Y   �Œ xY w# tr        $ rb}| jD                  jt                  s| jD                  jv                  r*| jy                  t{        d |j|                  › �«      d!¬"«       n‚ Y d }~�Œd }~ww xY w# t€        $ r Y y w xY w)%Nz:can only parse cmdline args at most once per Config object)r  re  ÚPYTEST_ADDOPTSr“   zvia PYTEST_ADDOPTSrå  )ÚinifileÚoverride_inir�   Úrootdir_cmd_argr�  Úrootdirr  r´  zExtra command line optionsr�   rù  z!Minimally required pytest versionrÝ  ÚpathszAdd paths to sys.path)r`   rž  r½  r  z.Plugins that must be present for pytest to run)r`   r½  zvia addopts configrÄ   zno:warningsFTrù   rÊ  rØ  )rÃ  r�   rX  z"could not load initial conftests: rB   rÂ   r¿  rÀ  )Fr�   r¯   Úpytest_addhooksrj  rk  r  rm   rª   r«   r»  rë  Úshlexrl   r]  Úparse_known_argsré  r[  r!   Úinifilenamer  rÂ  r   rø   rö   rl  rn  Ú_ignored_config_filesr&  rg   r�  rç  ro  Úaddinirz  r{  r"   r¶  r`  Úclearrÿ  rÑ  rà  rt  r™   r½  r�  ra  Únullcontextr   rÉ  rÝ  rÒ  r  Ú_warn_about_skipped_pluginsrŽ  r  rÅ  rV   rž  rœ  rð  r:   rY   r‡  r   rÁ  r   r.   r‹  re  )r[   r�   r´  Úenv_addoptsÚnsr�  ro  rh  Úignored_config_filesÚ	overridesÚwarnings_plugin_enabledr  rŽ  rˆ   s                 rT   r‡  zConfig.parse”  sA  € à�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Ô.Ø—‘×$Ñ$Ô&Ø×ÑÔØ×!Ñ!Ô#Ø×#Ñ#Ô%ð #'×"4Ñ"4×">Ñ">¸zÓ"JÐØ×/Ñ/×7Ñ7ò 	/ˆFØ—\‘\“^ˆFØ˜Ò&Ø*/Ñ'Ø˜:Ó%Ø*.Ñ'ð	/ñ 'ð ×0Ñ0Ô2ä×'Ñ'Ó)ñ	.ð
 ×Ñ×0Ñ0°ÀEÐ0ÔJä—J‘J—N‘NÐ#CÔDØ×1Ñ1×IÒIð ×"Ñ"×>Ñ>¸zÔJð ×Ñ×+Ñ+Ô-÷	.ð( %)§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Õ#÷k	.ñ 	.ûôJ %ò 		Ø×(Ñ(×-Ò-°×1JÑ1J×1RÒ1Rð ×.Ñ.Ü'Ð*LÈQÏVÉVÈHÐ(UÓVØ ð /õ ð
 õûð			ûô ò 	Ùð	ús8   ÎBV5Ó'(W Ô'X0 Ö5V?×	X-×AX(Ø(X-Ø0	X<Ø;X<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Ä   Nru  Trv  rx  rÂ   r   r   r¤   r“   )r‡  r‰  rˆ  rŠ  re  )r  rÚ  r{  r|  rz  rÄ   r}  Úsimplefilterr`   r�  rÆ   r¥   Ú	_getframeÚf_codeÚco_filenameÚf_linenoÚco_namer¯   r‹  rj  rk  )r[   ÚwarningrÃ   rƒ  r‚  rŒ  ÚframerŠ  s           rT   rð  z Config.issue_config_time_warning  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)rz  r¦   r  r#  )r[   r!  rx   r€  s       rT   rw  zConfig.addinivalue_line>  s-   € ð �K‰K˜ÓˆÜ˜!œTÔ"Ð"Ð"Ø	�‰��rS   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.

        If the value read from the configuration file does not match the
        registered ``type``, a :class:`~pytest.UsageError` is raised.
        )r]  r  r«   r`  r¤  Ú_getini)r[   r!  Úcanonical_nameÚvals       rT   rz  zConfig.getiniF  sh   € ðB Ÿ™×2Ñ2×6Ñ6°t¸TÓBˆð	Ø—>‘> .Ñ1Ð1øÜò 	Ùð	úà/3¯|©|¸NÓ/KÐKˆ�‰�~Ñ&¨Øˆ
s   ¨7 ·	AÁAc              #  ó  K  — | j                  d«      D ]m  }|j                  dd«      }|d   }t        |«      dk(  r|d   j                  «       nd}|j                  d«      d   j                  «       }t	        |||«      –— Œo y­w)	z9Iterate over all markers registered in the configuration.rv  rÔ  r   r   rB   r“   ú(N)rz  rl   r»  r½  r:  )r[   rx   r  r;  r<  r!  s         rT   Ú_iter_registered_markerszConfig._iter_registered_markerso  s‚   è ø€ à—K‘K 	Ó*ò 	AˆDð —J‘J˜s AÓ&ˆEØ˜a™ˆIÜ.1°%«j¸Aªo˜% ™(Ÿ.™.Ô*À2ˆKØ—?‘? 3Ó'¨Ñ*×0Ñ0Ó2ˆDÜ" 4¨°KÓ@Ó@ñ	Aùs   ‚BBc                ó.   — d|› d|› d|›�}t        |«      ‚)NzOption z  has unknown configuration type z with value )r²   )r[   r!  r`   r'  r�   s        rT   Ú_getini_unknown_typezConfig._getini_unknown_type}  s*   € à�d�VÐ;¸D¸6ÀÈeÈYÐWð 	ô ˜‹oÐrS   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                  }	 t        |t        «      s| j                  ||||||«      S |D ]  }	 | j                  ||||||«      c S  t        | j                   › d|› dt#        |«      › d	t%        j&                  |«      j(                  › d
|›�	«      ‚# t        $ r}t        d|›�«      |‚d }~ww xY w# t        t
        f$ r Y Œ—w xY w# t        t
        f$ r}t+        t-        |«      «      |‚d }~ww xY w)Nzunknown configuration value: TFc                ó0   — | d   j                   dk(  | d   fS )Nr   r,  r   )r   )r€  s    rT   ú<lambda>z Config._getini.<locals>.<lambda>›  s   € °!°A±$·+±+ÀÑ2KÈQÈqÉTÐ1R€ rS   )r)  r   ú: config option 'ú' expects one of ú, got r^   )r]  r  r«   r  r¤  r²   r&  r#  r­  Úmaxr'  r:  r¦   rG  Ú_getini_valuer  ro  r+   Úbuiltinsr`   rG   r   rg   )r[   r!  r<  Ú_descriptionr`   r½  rˆ   Ú
candidatesÚaliasÚtargetÚselectedr'  r:  Úmembers                 rT   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ˆØ—‘ˆØ�}‰}ˆð	,Ü˜d¤EÔ*Ø×)Ñ)Ø˜$ °°e¸Wóð ð
 ò �ðØ×-Ñ-Ø˜d N°F¸EÀ7óò ðô Ø—<‘<�.Ð 1°$°Ð7HÜ! $Ó'Ð(¨¬x¯}©}¸UÓ/C×/LÑ/LÐ.MÈRÐPUÈyðZóð øôM ò 	NÜÐ<¸T¸HÐEÓFÈAÐMûð	NûôH "¤:Ð.ò Ùðûô œ:Ð&ò 	,ÜœS ›VÓ$¨!Ð+ûð	,ús`   ¨F Ä%G Ä*G Ä0F2ÅG ÅA
G Æ	F/ÆF*Æ*F/Æ2GÇG ÇGÇG ÇG0ÇG+Ç+G0c           	     óÞ  — t        |t        «      r†t        |t        «      s=t        | j                  › d|› dt        j                  |«      j                  › d|›�«      ‚||j                  vr)t        | j                  › d|› dt        |«      › d|›�«      ‚|S |dk(  r-t        |t        t        f«      sJ ‚| j                  |||||«      S |dk(  r| j                  |||||«      S t        |«       y)	zEConvert a config value, read in the given mode, to the option's type.rF  ú' expects a string, got r^   rG  rH  Úinir-  N)r¦   r,   rg   r  ro  rK  r`   rG   Úchoicesr²   r+   r  Ú_getini_iniÚ_getini_tomlr(   )r[   r:  r!  r<  r`   r'  r½  s          rT   rJ  zConfig._getini_value¶  s  € ô �dœKÔ(ô ˜e¤SÔ)ÜØ—|‘|�nÐ$5°d°Vð <Ü#Ÿ=™=¨Ó/×8Ñ8Ð9¸¸E¸9ðFóð ð ˜DŸL™LÑ(Ü Ø—|‘|�nÐ$5°d°VÐ;LÜ% dÓ+Ð,¨F°5°)ð=óð ð ˆLØ�5Š=ä˜e¤c¬4 [Ô1Ð1Ð1Ø×#Ñ# D¨.¸$ÀÀwÓOÐOØ�VŠ^Ø×$Ñ$ T¨>¸4ÀÈÓPÐPä˜ÕrS   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(  rDt	        |t
        «      r2|j                  d«      D �	cg c]  }	|	j                  «       x}
sŒ|
‘Œ c}	S |S |dk(  r"t        t        |«      j                  «       «      S |dk(  rAt	        |t
        «      s/t        j                  t        j                  j                  d¬	«       |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�   ÚlinelistrŽ   rs  ÚstringrB   rÂ   rò  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: )ro  r  rø   rö   r¦   rg   r#  rl   r½  Ú
_strtoboolrÄ   rÆ   r%  r)   ÚINI_STRING_TYPE_NON_STR_VALUEr  rò  r[  rB  )r[   r!  r<  r`   r'  r½  ÚdpÚinput_valuesr€  rx   Ústrippeds              rT   rV  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ÒÜ˜%¤Ô%à).¯©°TÓ):öØ!%È4Ï:É:Ë<Ð?W¸xÑ?W’Hòð ð �Ø�VŠ^Üœc %›j×.Ñ.Ó0Ó1Ð1Ø�XÒÜ˜e¤SÔ)Ü—‘Ü×&Ñ&×DÑDØ õð ˆLØ�UŠ]Ü˜e¤SÔ)ÜØ8¸¸Ð>YÐZ_ÐYbÐcóàðô �u“:ÐØ�WŠ_Ü˜e¤SÔ)ÜØ9¸$¸Ð?XÐY^ÐXaÐbóàðô ˜“<Ðà×,Ñ,¨T°4¸Ó?Ð?ùòA 2ùò
s   Á)GÃGÃ$G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!  rF  z'' expects a list for type 'paths', got r^   z/' expects a list of strings, but item at index z is >   r�   rY  z' expects a list for type 'z', got rs  z' expects a bool, got rò  z' expects an int, got r[  z' expects a float, got rZ  rS  )rK  r`   rG   r¦   r  r  ro  rü  rg   r  rø   rö   rs  rò  r[  rB  )r[   r!  r<  r`   r'  r½  Ú
value_typer¾  ÚitemÚ	item_typer^  r€  s               rT   rW  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¦   rm   r	  rh  rn   r3   r#  )r[   r!  rY   r   ÚrelrootsÚmodpathÚvaluesÚrelroots           rT   Ú_getconftest_pathlistzConfig._getconftest_pathlisto  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 )
r]  Ú	_opt2destr«   r   r[  r"  r*   r?   Úskipr²   )r[   r!  r½  rm  r=  rˆ   r?   s          rT   Ú	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.©rn  ©r[   r!  rY   s      rT   ÚgetvaluezConfig.getvalue›  s   € à�~‰~˜dÓ#Ð#rS   c                ó(   — | j                  |d¬«      S )z-Deprecated, use getoption(skip=True) instead.T)rm  rp  rq  s      rT   ÚgetvalueorskipzConfig.getvalueorskipŸ  s   € à�~‰~˜d¨ˆ~Ó.Ð.rS   Ú
assertionsr   ÚVERBOSITY_ASSERTIONSÚ
test_casesÚVERBOSITY_TEST_CASESrï   ÚVERBOSITY_SUBTESTSrL  Ú_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   )r½  )	rn  r¦   rò  ró   Ú_verbosity_ini_namer]  r  rz  rz  )r[   Úverbosity_typeÚglobal_levelÚini_nameÚlevels        rT   Úget_verbosityzConfig.get_verbosity¬  s‡   € ðN —~‘~ i¸�~Ó;ˆÜ˜,¬Ô,Ð,Ð,ØÐ!ØÐä×-Ñ-¨nÓ=ˆØ˜4Ÿ<™<×0Ñ0Ñ0ØÐà—‘˜HÓ%ˆØ”F×1Ñ1Ò1ØÐä�5‹zÐrS   c                ó   — d| › �S )NÚ
verbosity_rR   )r~  s    rT   r}  zConfig._verbosity_ini_nameâ  s   € à˜NÐ+Ð,Ð,rS   c                óŒ   — | j                  t        j                  |«      |t        t        d   z  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>`.
        rL  )rž  r`   r½  N)r'  ró   r}  rò  r   rz  )rX  r~  rž  s      rT   Ú_add_verbosity_inizConfig._add_verbosity_iniæ  s;   € ð 	�‰Ü×&Ñ& ~Ó6ØÜ”w˜v‘Ñ&Ü×1Ñ1ð	 	õ 	
rS   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?)
rC   rÂ   )Ú_assertion_supportedrð  r:   )r[   r:  ró  s      rT   rÏ  z$Config._warn_about_missing_assertionø  sH   € Ü#Ô%Ø�wŠð(ñ ð3ð ð ×*Ñ*Ü# LÓ1Øð +õ ð &rS   c           	     ó„   — | j                   j                  D ]'  \  }}| j                  t        d|›d|› �«      d¬«       Œ) y )Nzskipped plugin r^   rB   rÂ   )r  rC  rð  r:   )r[   r  r�   s      rT   r*  z"Config._warn_about_skipped_plugins	  sM   € Ø $× 2Ñ 2× BÑ Bò 	ÑˆK˜Ø×*Ñ*Ü# o°k°_ÀBÀsÀeÐ$LÓMØð +õ ñ	rS   )r  rû   rø   zInvocationParams | Nonerš   rê  re   rf   )re   r!  )re   rc   )re   rí  )rr  zCallable[[], None]re   rf   )rw  rs  re   z/Generator[list[warnings.WarningMessage] | None])re   zIterator[None]rè  )re   r'   )r  rû   r�   ú	list[str]re   ró   rX   )r©  zExceptionInfo[BaseException]r[  zargparse.Namespace | Nonere   rf   )rˆ  r0   re   r0   )r¸  zMapping[str, Any]r�   rŠ  re   ró   )rÀ  r-   re   rf   )rÃ  ró   re   rf   )r¯   r<   rÐ  rs  re   rf   )r�   rŠ  rê  rg   re   rŠ  )r�   rŠ  r‹  rs  r¿  rŠ  r�  rc   r�  rc   rÆ   rs  re   ztuple[list[str], ArgsSource])re   zGenerator[None, object, object])r0  rg   re   rf   )re   zset[str])T)r�   rŠ  r´  rs  re   rf   )r7  ÚWarningrÃ   rò  re   rf   )r!  rg   rx   rg   re   rf   )r!  rg   re   r   )re   zIterator[RegisteredMarker])r!  rg   r`   rg   r'  rE  rë  )r:  zLiteral['ini', 'toml']r!  rg   r<  rg   r`   zstr | _IniLiteralr'  rE  r½  r   )
r!  rg   r<  rg   r`   rg   r'  zstr | list[str]r½  r   )
r!  rg   r<  rg   r`   rg   r'  rE  r½  r   )r!  rg   rY   rc   re   zlist[pathlib.Path] | None)r!  rg   r½  r   rm  rs  )r~  rê  re   rò  )r~  rg   re   rg   )rX  r/   r~  rg   rž  rg   re   rf   )r:  rg   re   rf   )HrG   rH   rI   rJ   r   r¯  Ú	dataclassrü   rK  ÚEnumrQ  r=  r\   r   r)   Úpropertyrh  r�  ro  rs  ra  Úcontextmanagerr…  r�  r“  r±   rš  r  r­  r²  Úclassmethodr¹  r\  ÚhookimplrÅ  rÑ  rÍ  rà  rß  rë  rÁ  r÷  rÿ  rö  r  r  r  r‡  rð  rw  rz  r@  rB  r;  rJ  rV  rW  rj  r*   rn  rr  rt  rv  rx  ry  rz  r‚  rË   r}  r†  rÏ  r*  rR   rS   rT   ró   ró   €  s÷  … ñð Ø€[×Ñ $Ô'÷1ð 1ó (ó ð1ôB �T—Y‘Yô  ð ƒLð 6:Øñ8"à*ð8"ð 3ð	8"ð
 ð8"ð 
ó8"ñt á	Øfó

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

ñ	(ð 
ò	0ó 
ð	0ð òó ðð òó ðó+ð ×Ñðð ðð 
9ò	ó ðð2 ×Ñòó ðó$Kó=ó$ðØ0ðØ8Aðà	óð< -1ð#à-ð#ð *ð#ð 
ó	#ó$ð òó ðó8ñ �dÔò
ó ð
ó41ð.(Ø*ð(Ø>Bð(à	ó(óB8ó*ó
ð+ð ð+ð ð	+ð
 ð+ð %ð+ð ð+ð ð+ð 
&ó+ñZ �dÔò,ó ð,óóLóóBSó0ôE
óN!óFó'óR
Aóó1,ðfà$ðð ðð ð	ð
  ðð ðð óðBB@àðB@ð ðB@ð ð	B@ð
 ðB@ð óB@ðHR@àðR@ð ðR@ð ð	R@ð
 ðR@ð óR@ðhØðØ+ðà	"óð& 39Àuô Aô2$ô/ð
 #/Ð˜%Ó.à".Ð˜%Ó.à *Ð˜Ó*à$*Ð˜EÓ*ô4ðl ò-ó ð-ð ò
ó ð
ó"ô*rS   c                 ó&   — 	 J ‚# t         $ r Y yw xY w)NT)r®  rR   rS   rT   rˆ  rˆ  	  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'   r[  ÚcolorÚ	hasmarkupÚcode_highlight)r¤   r€   r‚   s      rT   Úcreate_terminal_writerr™  	  s‚   € ô 
˜TÔ	"€Bà‡}�}×Ñ˜eÒ#Øˆ�Ø	�‰×	Ñ	 Ò	$ØˆŒà‡}�}×#Ñ# uÒ,Ø ˆÔð €Ið 
�‰×	%Ñ	%¨Ò	-Ø!ˆÔà€IrS   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.
    )Úyr”  ÚtÚtrueÚonÚ1T)r¿  r•  ÚfÚfalseÚoffÚ0Fzinvalid truth value )Úlowerr²   )r=  s    rT   r\  r\  6	  s:   € ð �)‰)‹+€CØ
Ð2Ñ2ØØ	Ð5Ñ	5ØäÐ/°¨wÐ7Ó8Ð8rS   é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Ô  rE   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rX   )r½  )r  Úss     rT   r�  z'parse_warning_filter.<locals>.<genexpr>s	  s   è ø€ Ò3MÀ!°A·G±G·IÑ3Mùs   ‚Nr¥  )ru   z\Zr   znumber is negativezinvalid lineno r^   zInvalid regex )r   rl   r»  r   rÇ   r#  rÄ   Ú
_getactionÚ_OptionErrorrg   Ú_resolve_warning_categoryÚImportErrorrd   r$   Úfrom_currentr{   ÚreÚescaperò  r²   Úcompiler¨  Úpattern)rÊ  r±  Ú__tracebackhide__Úerror_templater  Údoc_urlr¨  Úaction_r0  Ú	category_r  Úlineno_Úactionrˆ   ry  r�   Úexception_textÚlinenos                     rT   Úparse_warning_filterr½  H	  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).
    Trõ  r   Nz is not a Warning subclass)
r‹  rK  Ú
rpartitionrk   rß  r   Ú
issubclassr   r   r`   )ry  r´  r*  Úklassr  ra  Úcats          rT   r­  r­  ™	  sƒ   € ð
 ÐÙÜˆà
�(ÑÛà‰à#×.Ñ.¨sÓ3Ñˆ��5Ü×#Ñ# FÓ+ˆÜ
�!�UÓ
€CÜ�cœ7Ô#Ü˜C˜5Ð :Ð;Ó<Ð<Ü””W‘˜sÓ#Ð#rS   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)r±  z Failed to import filter module 'z': NT)rÄ   ru  r½  r®  rÆ   r!  r:   )r‚  rƒ  rÊ  rˆ   s       rT   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	)ro   z_pytest._code.TracebackEntryre   rs  )r   rg   rZ   r  r€   r   re   rf   )rˆ   rV   r€   r   re   rf   )rˆ   ri   r€   r   re   rf   )rˆ   r   r€   r   re   rf   )r•   rð  re   rg   )NN)r�   ú#list[str] | os.PathLike[str] | Noner™   rC  re   úint | ExitCode)r�   rÄ  r™   rC  rš   rg   re   rÅ  r7  )rY   rg   rÐ   rg   re   rg   )r�   zIterable[str] | Noner™   rC  rš   rê  re   ró   )re   rû   rX   )r�   zlist[str] | os.PathLike[str]r™   rC  rš   rê  re   ró   )rY   rc   re   rc   )r'  r   r(  rg   r)  rB  re   zdict[str, bool])rˆ   rá  rä  rg   re   rs  )rú  rñ  re   rŠ  )r  rg   re   rê  )r  zimportlib.metadata.Distributionre   rs  )r  rH  re   r6  )re   rs  )r¤   ró   r€   zTextIO | Nonere   r'   )r=  rg   re   rs  )rÊ  rg   r±  rs  re   z9tuple[warnings._ActionKind, str, type[Warning], str, int])ry  rg   re   ztype[Warning])r‚  rH  rƒ  rH  re   rf   )–rJ   Ú
__future__r   rY  rK  Úcollections.abcrø  r   r   r   r   r   r	   r
   ra  ré  r¯  rK  Ú	functoolsr   r‰  rk   Úimportlib.machineryÚimportlib.metadatar  r  rm   rý   r°  r#  r¥   Útextwrapr   rl  r   Útypingr   r   r   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.   r/   rÅ   Ú_pytest.hookspecÚ_pytest.nodeidr0   Ú_pytest.outcomesr1   r2   Ú_pytest.pathlibr3   r4   r5   r6   r7   r8   Ú_pytest.stashr9   Ú_pytest.warning_typesr:   r;   Ú_pytest.assertion.rewriter<   Ú_pytest.cacheproviderr=   Ú_pytest.terminalr>   rE  ré  r‘  rE  ÚIntEnumrA   rd   rV   ri   rp   r…   r‰   rŒ   r‘   r—   r�   r›   r¿   rÈ   rÊ   rÑ   rÓ   rÆ  r  rÛ  r  r  r¬   r  r1  rû   râ  rÕ  r  r  r  rg   r!  r:  ró   rˆ  r™  r\  r½  r­  r�  rR   rS   rT   ú<module>rß     sû  ðá Cå "ã Û Û Ý $Ý %Ý $Ý $Ý #Ý *Ý $Û Û Û Û Ý Û Û Û Û Û Û Û 	Û Û 	Û Û 
Ý Û Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý  Û å !Ý Ý !Ý Ý  å .Ý 0Ý !Ý "Ý &Ý )Ý Û Ý 'Ý *Ý -Ý &Ý 'Ý %Ý !Ý 4Ý 1Ý .Ý 1Ý ,Û Û Ý !Ý !Ý $Ý (Ý 'Ý 'Ý &Ý 0Ý 'Ý Ý 5Ý 3ñ Ý@Ý+Ý1à€ðñ ˜(Ó#€Ù˜(Ó#€ð ôˆt�|‰|ó ó ðô4O˜Iô Oô˜)ô ðXØ'ðXà	óXó)óóQó
-ó
ð 15Ø48ðCØ
-ðCà1ðCð óCð, 15Ø48ñ*>à
-ð*>ð 2ð*>ð ð	*>ð
 ó*>óZó$÷ñ óóðÐ ðØðàðð ðð ð	ð
 ðð ðð ðð ðð ðð ðð ðð ðð ðð ðð ðð  ð!ð" ð#ð$ ð%ð& ð'ð( ð)ð* ð+ð, ð-ð. ð/ð0 ð1ð2 ð3ð4 ñ5€ð:Øðàðð ðð ð	€ð "&Ø48ðð ñ	Ø
ðà1ðð ð	ð
 óó2&ð 59ðð ñ	Ø
&ðà1ðð ð	ð
 óó@ðØðàðð ðð ó	ð@ ôb<˜-ó b<ó ðb<óJ	GðØ8ðàóó*ó,*ó&>CôB)˜^¨C°¨HÑ5ô )ô0�zô ð ÷Qð Qó ðQóh$ð +/ðØðØ'ðàóó09ñ$ �2ÔðM5Ø	ðM5ØðM5à>òM5ó ðM5ó`$ð,Ø!ðØ4Aðà	ôrS   