§
    öyIfœ ã                   ó:  — d 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
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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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,Z,ddl,m-Z- ddl,m.Z. ddl,m/Z/ ddl,m0Z0 ddl,m1Z1 dd l2m3Z3 dd!l4m5Z5 dd"l4m6Z6 dd#l7m8Z8 dd$l9m:Z: ddl;Z9dd%l;m<Z< dd&l;m=Z= dd'l>m?Z? ddl@Z9ddlAZ9dd(lBmCZC dd)lBmDZD dd*lEmFZF dd+lEmGZG dd,lEmHZH dd-lEmIZI dd.lEmJZJ dd/lEmKZK dd0lLmMZM dd1lNmOZO dd2lNmPZP e)rdd3lQmRZR dd4lQmSZS dd5lTmUZU dd6lVmWZW eXZY	  e-d7¦  «        ZZ e/d7¦  «        Z[e G d8„ d9ej\        ¦  «        ¦   «         Z] G d:„ d;e^¦  «        Z_d<e9j`        ja        d=ebfd>„Zc	 	 d‹d?e#e*e"ed         d@f                  dAe#e$e*edeYf                           d=e*eee]f         fdB„Zfd=eefdC„Zg G dD„ dE¦  «        ZhdFeddGedd=edfdH„ZidFeddGedd=edfdI„ZjdJZkg ek¢dK‘dL‘dM‘dN‘dO‘dP‘dQ‘dR‘dS‘dT‘dU‘dV‘dW‘dX‘dY‘dZ‘d[‘d\‘d]‘d^‘d_‘d`‘da‘db‘dc‘dd‘R Zl emel¦  «        Znen o                    de¦  «         en o                    df¦  «         	 	 d‹d?e#e"ed                  dAe#e$e*edeYf                           d=dgfdh„ZpdŒdj„Zq	 	 d‹d?e#e*e"ed         d@f                  dAe#e$e*edeYf                           d=dgfdk„ZrdFed=efdl„Zsdmedneddoe'eddpf         d=eedebf         fdq„Zte G dr„ die1¦  «        ¦   «         Zudse*dejv        ede$ed         f         d=e"ed         fdt„Zw G du„ dv¦  «        Zx ex¦   «         Zydwe ed         d=e!ed         fdx„Zze G dy„ dg¦  «        ¦   «         Z{d=ebfdz„Z|	 d�d{e{d|e#e&         d=e?fd}„Z}d~edd=ebfd„Z~ ed€¬�¦  «        d‚eddƒebd=e'd„ede(e         edeef         fd…„¦   «         Z€d†edd=e(e         fd‡„Z�dˆe ed         d‰e ed         d=dfdŠ„Z‚dS )Žz:Command line options, ini-file and conftest.py processing.é    N)Ú	lru_cache)ÚPath)Údedent)ÚFunctionType)ÚAny)ÚCallable)Úcast)ÚDict)ÚFinal)Úfinal)Ú	Generator)ÚIO)ÚIterable)ÚIterator)ÚList)ÚOptional)ÚSequence)ÚSet)ÚTextIO)ÚTuple)ÚType)ÚTYPE_CHECKING)ÚUnion)ÚHookimplMarker)ÚHookimplOpts)ÚHookspecMarker)ÚHookspecOpts)ÚPluginManageré   )ÚPathAwareHookProxy)Ú	PrintHelp)Ú
UsageError)Údetermine_setup)Ú__version__)ÚExceptionInfo)Úfilter_traceback)ÚTerminalWriter)Úfail)ÚSkipped)Úabsolutepath)Úbestrelpath)Úimport_path)Ú
ImportMode)Úresolve_package_path)Úsafe_exists)ÚStash)ÚPytestConfigWarning)Úwarn_explicit_for)ÚArgument©ÚParser)Ú_TracebackStyle)ÚTerminalReporterÚpytestc                   ó*   — e Zd ZdZdZdZdZdZdZdZ	dS )	ÚExitCodez�Encodes the valid exit codes by pytest.

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

    .. versionadded:: 5.0
    r   r   é   é   é   é   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚOKÚTESTS_FAILEDÚINTERRUPTEDÚINTERNAL_ERRORÚUSAGE_ERRORÚNO_TESTS_COLLECTED© ó    úK/var/www/piapp/venv/lib/python3.11/site-packages/_pytest/config/__init__.pyr:   r:   ^   s;   € € € € € ðð ð 
€Bà€Là€Kà€Nà€KàÐÐÐrJ   r:   c                   ó.   — e Zd Zdededdfd„Zdefd„ZdS )ÚConftestImportFailureÚpathÚcauseÚreturnNc                ó"   — || _         || _        d S ©N)rN   rO   )ÚselfrN   rO   s      rK   Ú__init__zConftestImportFailure.__init__v   s   € ð ˆŒ	ØˆŒ
ˆ
ˆ
rJ   c                 óZ   — t          | j        ¦  «        j        › d| j        › d| j        › d�S )Nú: z (from ú))ÚtyperO   r?   rN   ©rS   s    rK   Ú__str__zConftestImportFailure.__str__   s2   € Ý�t”zÑ"Ô"Ô+ÐNÐN¨t¬zÐNÐNÀ$Ä)ÐNÐNÐNÐNrJ   )r?   r@   rA   r   Ú	ExceptionrT   ÚstrrZ   rI   rJ   rK   rM   rM   u   sf   € € € € € ðàðð ð	ð
 
ðð ð ð ðO˜ð Oð Oð Oð Oð Oð OrJ   rM   ÚentryrP   c                 ó†   — t          | ¦  «        o2dt          | 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&   r\   rN   ÚsplitÚosÚsep)r]   s    rK   Ú,filter_traceback_for_conftest_import_failurerc   ƒ   s6   € õ ˜EÑ"Ô"ÐW {½#¸e¼j¹/¼/×:OÒ:OÕPRÔPVÑ:WÔ:WÐ'WÐWrJ   Úargszos.PathLike[str]Úpluginsc                 ó€  — t           j                             d¦  «        }	 t          t           j        d<   	 t	          | |¦  «        }	 |j                             |¬¦  «        }	 t          |¦  «        |                     ¦   «          |€!t           j         	                    dd¦  «         S |t           j        d<   S # t          $ rK |cY |                     ¦   «          |€!t           j         	                    dd¦  «         S |t           j        d<   S w xY w# |                     ¦   «          w xY w# t          $ �r?}t          j        |j        ¦  «        }t          t           j        ¦  «        }|                     d|j        › d�d¬¦  «         |j                             t,          ¦  «        |_        |j        r|                     dd	¬
¦  «        n|                     ¦   «         }t3          |¦  «        }	|	                     ¦   «         D ]+}
|                     |
                     ¦   «         d¬¦  «         Œ,t          j        cY d}~|€!t           j         	                    dd¦  «         S |t           j        d<   S d}~ww xY w# t:          $ r†}t          t           j        ¦  «        }|j        D ]}|                     d|› d�d¬¦  «         Œt          j        cY d}~|€!t           j         	                    dd¦  «         S |t           j        d<   S d}~ww xY w# |€!t           j         	                    dd¦  «         n|t           j        d<   w xY w)aL  Perform an in-process test run.

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

    :returns: An exit code.
    ÚPYTEST_VERSION©ÚconfigNz$ImportError while loading conftest 'z'.T)ÚredÚshortF)ÚstyleÚchainzERROR: ú
)ra   ÚenvironÚgetr$   Ú_prepareconfigÚhookÚpytest_cmdline_mainr:   Ú_ensure_unconfigureÚpopÚ
ValueErrorrM   r%   Úfrom_exceptionrO   r'   ÚsysÚstderrÚlinerN   Ú	tracebackÚfilterrc   ÚgetreprÚexconlyr\   Ú
splitlinesÚrstriprG   r"   rd   )rd   re   Úold_pytest_versionri   ÚretÚeÚexc_infoÚtwÚexc_reprÚformatted_tbrz   Úmsgs               rK   Úmainr‰   Ž   sp  € õ œŸšÐ(8Ñ9Ô9Ðð(>Ý'2�Œ
Ð#Ñ$ð	-Ý# D¨'Ñ2Ô2ˆFð$	-Ø,2¬K×,KÒ,KØ!ð -Lñ -ô -�ðÝ# C™=œ=ð ×*Ò*Ñ,Ô,Ð,ð Ð%ÝŒJ�NŠNÐ+¨TÑ2Ô2Ð2Ð2à+=�BŒJÐ'Ñ(Ð(øõ "ð ð ð Ø�J�Jà×*Ò*Ñ,Ô,Ð,ð Ð%ÝŒJ�NŠNÐ+¨TÑ2Ô2Ð2Ð2à+=�BŒJÐ'Ñ(Ð(ðøøøøð ×*Ò*Ñ,Ô,Ð,Ð,øøøøõ5 %ð 	(ñ 	(ð 	(Ý$Ô3°A´GÑ<Ô<ˆHÝ¥¤
Ñ+Ô+ˆBØ�GŠGÐE¸1¼6ÐEÐEÐEÈ4ˆGÑPÔPÐPØ!)Ô!3×!:Ò!:Ý<ñ"ô "ˆHÔð
 Ô%ð(�× Ò  w°eÐ Ñ<Ô<Ð<à×%Ò%Ñ'Ô'ð õ
 ˜x™=œ=ˆLØ$×/Ò/Ñ1Ô1ð 1ð 1�Ø—’˜Ÿš™œ¨4�Ñ0Ô0Ð0Ð0ÝÔ'Ð'Ð'Ð'Ð'Ð'ð$ Ð%ÝŒJ�NŠNÐ+¨TÑ2Ô2Ð2Ð2à+=�BŒJÐ'Ñ(Ð(øøøøðI	(øøøøõ6 ð $ð $ð $Ý�CœJÑ'Ô'ˆØ”6ð 	1ð 	1ˆCØ�GŠGÐ%˜cÐ%Ð%Ð%¨4ˆGÑ0Ô0Ð0Ð0ÝÔ#Ð#Ð#Ð#Ð#Ð#àÐ%ÝŒJ�NŠNÐ+¨TÑ2Ô2Ð2Ð2à+=�BŒJÐ'Ñ(Ð(øøøøð$øøøøð Ð%ÝŒJ�NŠNÐ+¨TÑ2Ô2Ð2Ð2à+=�BŒJÐ'Ñ(Ð=Ð=Ð=Ð=s–   ¡I6 ¶D) ÁD Á#B8 Á1I6 Â8DÃD ÃI6 ÄDÄD ÄD&Ä&I6 Ä)I3Ä4DI.È6I3È7I6 É.I3É3I6 É6
LÊ A	LË	LË
L	 ÌLÌL	 Ì	4L=c                  ó6  — 	 t          ¦   «         } t          j                             ¦   «          | S # t          $ r^ t          j        t
          j        t
          j        ¦  «        }t          j	        |t          j         
                    ¦   «         ¦  «         Y dS w xY w)zoThe CLI entry point of pytest.

    This function is not meant for programmable use; use `main()` instead.
    r   )r‰   rx   ÚstdoutÚflushÚBrokenPipeErrorra   ÚopenÚdevnullÚO_WRONLYÚdup2Úfileno)Úcoder�   s     rK   Úconsole_mainr”   Ç   s‚   € ð	Ý‰vŒvˆÝŒ
×ÒÑÔÐØˆøÝð ð ð õ ”'�"œ*¥b¤kÑ2Ô2ˆÝ
Œ��œ×*Ò*Ñ,Ô,Ñ-Ô-Ð-Øˆqˆqðøøøs   ‚-0 °A$BÂBc                   ó$   — e Zd Z ee¦  «        ZdS )ÚcmdlineN)r?   r@   rA   Ústaticmethodr‰   rI   rJ   rK   r–   r–   Ù   s   € € € € € Øˆ<˜ÑÔ€D€D€DrJ   r–   rN   Úoptnamec                 ól   — t           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: ©ra   rN   Úisdirr"   ©rN   r˜   s     rK   Úfilename_argr�   Ý   s<   € õ 
„w‡}‚}�TÑÔð IÝ˜GÐGÐGÀÐGÐGÑHÔHÐHØ€KrJ   c                 ól   — t           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     rK   Údirectory_argrŸ   è   s<   € õ Œ7�=Š=˜ÑÔð JÝ˜GÐHÐHÀ$ÐHÐHÑIÔIÐIØ€KrJ   )Úmarkr‰   ÚrunnerÚfixturesÚ
helpconfigÚpythonÚterminalÚ	debuggingÚunittestÚcaptureÚskippingÚ
legacypathÚtmpdirÚmonkeypatchÚrecwarnÚpastebinÚ	assertionÚjunitxmlÚdoctestÚcacheproviderÚfreeze_supportÚ	setuponlyÚ	setupplanÚstepwiseÚwarningsÚloggingÚreportsÚpython_pathÚunraisableexceptionÚthreadexceptionÚfaulthandlerÚpytesterÚpytester_assertionsÚConfigc           	      ó  — t          ¦   «         }t          |t                               | pd|t          j        ¦   «         ¬¦  «        ¬¦  «        }| �|                     | d¬¦  «         t          D ]}|                     |¦  «         Œ|S )NrI   ©rd   re   Údir©Úinvocation_paramsT©Úexclude_only)ÚPytestPluginManagerrÀ   ÚInvocationParamsr   ÚcwdÚconsider_preparseÚdefault_pluginsÚimport_plugin)rd   re   Úpluginmanagerri   Úspecs        rK   Ú
get_configrÐ     s�   € õ
 (Ñ)Ô)€MÝØÝ ×1Ò1Ø�˜ØÝ”‘
”
ð 2ñ 
ô 
ðñ ô €Fð Ðà×'Ò'¨¸4Ð'Ñ@Ô@Ð@åð *ð *ˆØ×#Ò# DÑ)Ô)Ð)Ð)à€MrJ   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Î   rI   rJ   rK   Úget_plugin_managerrÒ   8  s   € õ ‰<Œ<Ô%Ð%rJ   c                 ó^  — | €t           j        dd …         } nwt          | t          j        ¦  «        rt          j        | ¦  «        g} nGt          | t          ¦  «        s2d}t          |                     | t          | ¦  «        ¦  «        ¦  «        ‚t          | |¦  «        }|j        }	 |rE|D ]B}t          |t          ¦  «        r|                     |¦  «         Œ-|                     |¦  «         ŒC|j                             || ¬¦  «        }|S # t"          $ r |                     ¦   «          ‚ w xY w)Nr   zG`args` parameter expected to be a list of strings, got: {!r} (type: {}))rÎ   rd   )rx   ÚargvÚ
isinstancera   ÚPathLikeÚfspathÚlistÚ	TypeErrorÚformatrX   rÐ   rÎ   r\   Úconsider_pluginargÚregisterrr   Úpytest_cmdline_parseÚBaseExceptionrt   )rd   re   rˆ   ri   rÎ   Úplugins         rK   rq   rq   C  sJ  € ð €|ÝŒx˜˜˜Œ|ˆˆÝ	�D�"œ+Ñ	&Ô	&ð 6Ý”	˜$‘”Ð ˆˆÝ˜�dÑ#Ô#ð 6àUð 	õ ˜Ÿ
š
 4­¨d©¬Ñ4Ô4Ñ5Ô5Ð5å˜˜gÑ&Ô&€FØÔ(€MðØð 	3Ø!ð 3ð 3�Ý˜f¥cÑ*Ô*ð 3Ø!×4Ò4°VÑ<Ô<Ð<Ð<à!×*Ò*¨6Ñ2Ô2Ð2Ð2ØÔ#×8Ò8Ø'¨dð 9ñ 
ô 
ˆð ˆøÝð ð ð Ø×"Ò"Ñ$Ô$Ð$Øðøøøs   Â'A$D Ä D,c                 ó<   — |                       ¦   «         r| j        S | S )z<Get the directory of a path - itself if already a directory.)Úis_fileÚparent)rN   s    rK   Ú_get_directoryrã   c  s   € à‡|‚|�~„~ð ØŒ{ÐàˆrJ   ÚmethodÚ	hook_typeÚ	opt_names.c                 ó   — t           rt          j        | ¦  «        sJ ‚d„ t          | dg ¦  «        D ¦   «         }g }i }|D ]h}t          | |t          ¦  «        }|t          ur |                     |› d|› �¦  «         d||<   ŒA||v r|                     |› d�¦  «         d||<   Œcd||<   Œi|rdd                     |¦  «        }t          j        j	         
                    || j        |¬¦  «        }	t          t          t          | ¦  «        |	¦  «         |S )	Nc                 ó   — h | ]	}|j         ’Œ
S rI   ©Úname)Ú.0Úms     rK   ú	<setcomp>z)_get_legacy_hook_marks.<locals>.<setcomp>s  s   € ÐOÐOÐO¨˜QœVÐOÐOÐOrJ   Ú
pytestmarkú=Tz=TrueFú, )rX   ÚfullnameÚ	hook_opts)r   ÚinspectÚ	isroutineÚgetattrÚAttributeErrorÚappendÚjoinÚ_pytestÚ
deprecatedÚHOOK_LEGACY_MARKINGrÚ   rA   r2   r	   r   )
rä   rå   ræ   Úknown_marksÚ	must_warnÚoptsÚopt_nameÚopt_attrrò   Úmessages
             rK   Ú_get_legacy_hook_marksr  k  sI  € õ
 ð )åÔ  Ñ(Ô(Ð(Ð(Ð(ØOÐO­W°V¸\È2Ñ-NÔ-NÐOÑOÔO€KØ€IØ€DØð 	#ð 	#ˆÝ˜6 8­^Ñ<Ô<ˆØ�>Ð)Ð)Ø×Ò Ð5Ð5¨8Ð5Ð5Ñ6Ô6Ð6Ø!ˆD�‰NˆNØ˜Ð$Ð$Ø×Ò Ð/Ð/Ð/Ñ0Ô0Ð0Ø!ˆD�‰NˆNà"ˆD�‰NˆNØð ?Ø—I’I˜iÑ(Ô(ˆ	ÝÔ$Ô8×?Ò?ØØÔ(Øð @ñ 
ô 
ˆõ
 	�$�|¨VÑ4Ô4°gÑ>Ô>Ð>Ø€KrJ   c                   óú  ‡ — e Zd ZdZd3ˆ fd„Zdededee         fˆ fd„Z	dedee
         fˆ fd„Z	 d4dedee         dee         fˆ fd	„Zdefd
„Zdedefd„Zd5d„Zdeeeef                  dedededee         dedeeef         deddfd„Zdedefd„Zdedeeef         dededdf
d„Zdedeeef         dededdf
d„Zdedeej                 fd„Zdededeej        ef         fd„Zdedeeef         dededej        f
d „Zd!ej        deddfd"„Z d#d$œdee         d%eddfd&„Z!d'eddfd(„Z"d)ej        d*eddfd+„Z#d3d,„Z$d!ej        ddfd-„Z%d.edej        eee         f         ddfd/„Z&d6d0ed1eddfd2„Z'ˆ xZ(S )7rÈ   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.
    rP   Nc                 ó   •— dd l }t          ¦   «                              d¦  «         t          ¦   «         | _        i | _        d | _        d| _         t          d¦  «        t          ¦  «        | _	        g | _
        |                      |j        ¦  «         |                      | ¦  «         t          j                             d¦  «        r£t"          j        }t'          |dd¦  «        }	 t)          t          j        |                     ¦   «         ¦  «        |j        d|¬	¦  «        }n# t0          $ r Y nw xY w| j        j                             |j        ¦  «         |                      ¦   «          |j                             ¦   «         | _         d| _!        d S )
Nr   r8   Fé   ÚPYTEST_DEBUGÚencodingÚutf8r   )ÚmodeÚ	bufferingr  )"Ú_pytest.assertionÚsuperrT   ÚsetÚ_conftest_pluginsÚ_dirpath2confmodsÚ_confcutdirÚ_noconftestr   rã   Úskipped_pluginsÚadd_hookspecsÚhookspecrÜ   ra   ro   rp   rx   ry   rõ   rŽ   Údupr’   r	  r[   ÚtraceÚrootÚ	setwriterÚwriteÚenable_tracingr¯   ÚDummyRewriteHookÚrewrite_hookÚ_configured)rS   rù   Úerrr  Ú	__class__s       €rK   rT   zPytestPluginManager.__init__•  s|  ø€ Ø Ð Ð Ð å‰Œ×Ò˜Ñ"Ô"Ð"õ 9<¹¼ˆÔð FHˆÔà+/ˆÔà ˆÔð
 -�i¨™nœn­^Ñ<Ô<ˆÔð 79ˆÔà×Ò˜7Ô+Ñ,Ô,Ð,Ø�Š�dÑÔÐÝŒ:�>Š>˜.Ñ)Ô)ð 	"Ýœ:ˆCÝ# C¨°VÑ<Ô<ˆHðÝÝ”F˜3Ÿ:š:™<œ<Ñ(Ô(ØœØØ%ð	ñ ô ��øõ ð ð ð Ø�ðøøøàŒJŒO×%Ò% c¤iÑ0Ô0Ð0Ø×ÒÑ!Ô!Ð!ð $Ô-×>Ò>Ñ@Ô@ˆÔà ˆÔÐÐs   Ã$<D! Ä!
D.Ä-D.rß   rê   c                 óü   •— |                      d¦  «        sdS |dk    rdS t          ¦   «                              ||¦  «        }|�|S t          ||¦  «        }t	          j        |¦  «        sdS t          |dd¦  «        S )ú:meta private:Úpytest_NÚpytest_pluginsÚimpl)ÚtryfirstÚtrylastÚoptionalhookÚhookwrapper)Ú
startswithr  Úparse_hookimpl_optsrõ   ró   rô   r  )rS   rß   rê   rþ   rä   r  s        €rK   r*  z'PytestPluginManager.parse_hookimpl_optsÈ  s”   ø€ ð �Š˜yÑ)Ô)ð 	Ø�4àÐ#Ò#Ð#Ø�4å‰wŒw×*Ò*¨6°4Ñ8Ô8ˆØÐØˆKå˜ Ñ&Ô&ˆåÔ  Ñ(Ô(ð 	Ø�4å%Ø�FÐRñ
ô 
ð 	
rJ   c                 ó¼   •— t          ¦   «                              ||¦  «        }|€6t          ||¦  «        }|                     d¦  «        rt	          |dd¦  «        }|S )r!  Nr"  rÏ   )ÚfirstresultÚhistoric)r  Úparse_hookspec_optsrõ   r)  r  )rS   Úmodule_or_classrê   rþ   rä   r  s        €rK   r.  z'PytestPluginManager.parse_hookspec_optsâ  sc   ø€ å‰wŒw×*Ò*¨?¸DÑAÔAˆØˆ<Ý˜_¨dÑ3Ô3ˆFØ�Š˜yÑ)Ô)ð Ý-ØØØ/ñô �ð
 ˆrJ   c           
      óÈ  •— |t           j        j        v rJt          j        t          d                     |                     dd¦  «        ¦  «        ¦  «        ¦  «         d S t          ¦   «          	                    ||¦  «        }|�_| j
        j                             t          ||| ¬¦  «        ¬¦  «         t          |t          j        ¦  «        r|                      |¦  «         |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·   Úwarnr1   rÚ   Úreplacer  rÜ   rr   Úpytest_plugin_registeredÚcall_historicÚdictrÕ   ÚtypesÚ
ModuleTypeÚconsider_module)rS   rß   rê   r3  r  s       €rK   rÜ   zPytestPluginManager.registerï  sò   ø€ ð •7Ô%ÔAÐAÐAÝŒMÝ#ð?ß?EºvØŸš S¨#Ñ.Ô.ñ@ô @ñô ñô ð ð �4Ý‘g”g×&Ò& v¨tÑ4Ô4ˆØÐ"ØŒIÔ.×<Ò<ÝØ!Ø +Ø ðñ ô ð =ñ ô ð õ ˜&¥%Ô"2Ñ3Ô3ð -Ø×$Ò$ VÑ,Ô,Ð,ØÐrJ   c                 ó0   — |                       |¦  «        }|S rR   )Ú
get_plugin)rS   rê   rß   s      rK   Ú	getpluginzPytestPluginManager.getplugin
  s   € à*.¯/ª/¸$Ñ*?Ô*?ˆØˆrJ   c                 óF   — t          |                      |¦  «        ¦  «        S )z:Return whether a plugin with the given name is registered.)ÚboolrA  )rS   rê   s     rK   Ú	haspluginzPytestPluginManager.hasplugin  s   € å�D—O’O DÑ)Ô)Ñ*Ô*Ð*rJ   ri   rÀ   c                 ól   — |                      dd¦  «         |                      dd¦  «         d| _        dS )r!  Úmarkerszµtryfirst: mark a hook implementation function such that the plugin machinery will try to call it first/as early as possible. DEPRECATED, use @pytest.hookimpl(tryfirst=True) instead.z±trylast: mark a hook implementation function such that the plugin machinery will try to call it last/as late as possible. DEPRECATED, use @pytest.hookimpl(trylast=True) instead.TN)Úaddinivalue_liner  )rS   ri   s     rK   Úpytest_configurez$PytestPluginManager.pytest_configure  sX   € ð 	×ÒØðGñ	
ô 	
ð 	
ð 	×ÒØðFñ	
ô 	
ð 	
ð  ˆÔÐÐrJ   rd   ÚpyargsÚ
noconftestÚrootpathÚ
confcutdirÚinvocation_dirÚ
importmodeÚconsider_namespace_packagesc                ó€  — |rt          ||z  ¦  «        nd| _        || _        || _        d}	|D ]r}
t	          |
¦  «        }|                     d¦  «        }|dk    r
|d|…         }t          ||z  ¦  «        }t          |¦  «        r|                      ||||¬¦  «         d}	Œs|	s|                      ||||¬¦  «         dS dS )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.
        NFz::éÿÿÿÿ©rP  T)r*   r  r  Ú_using_pyargsr\   Úfindr/   Ú_try_load_conftest)rS   rd   rJ  rK  rL  rM  rN  rO  rP  ÚfoundanchorÚintitial_pathrN   ÚiÚanchors                 rK   Ú_set_initial_conftestsz*PytestPluginManager._set_initial_conftests(  s  € ð( :DÐM�L˜¨*Ñ4Ñ5Ô5Ð5Èð 	Ôð &ˆÔØ#ˆÔØˆØ!ð 	#ð 	#ˆMÝ�}Ñ%Ô%ˆDà—	’	˜$‘”ˆAØ�BŠwˆwØ˜B˜Q˜B”x�Ý! .°4Ñ"7Ñ8Ô8ˆFõ ˜6Ñ"Ô"ð #Ø×'Ò'ØØØØ0Kð	 (ñ ô ð ð #�øØð 	Ø×#Ò#ØØØØ,Gð	 $ñ ô ð ð ð ð	ð 	rJ   rN   c                 ó0   — | j         €dS || j         j        vS )z:Whether to consider the given path to load conftests from.NT)r  Úparents)rS   rN   s     rK   Ú_is_in_confcutdirz%PytestPluginManager._is_in_confcutdir[  s#   € àÔÐ#Ø�4ð ˜4Ô+Ô3Ð3Ð3rJ   rZ  c                óî   — |                       ||||¬¦  «         |                     ¦   «         rE|                     d¦  «        D ]1}|                     ¦   «         r|                       ||||¬¦  «         Œ0d S d S )NrS  ztest*)Ú_loadconftestmodulesÚis_dirÚglob)rS   rZ  rO  rL  rP  Úxs         rK   rV  z&PytestPluginManager._try_load_conftestj  s¨   € ð 	×!Ò!ØØØØ(Cð	 	"ñ 	
ô 	
ð 	
ð �=Š=‰?Œ?ð 	Ø—[’[ Ñ)Ô)ð ð �Ø—8’8‘:”:ð Ø×-Ò-ØØ"Ø Ø4Oð	 .ñ ô ð øð	ð 	ðð rJ   c                ó^  — | j         rd S |                      |¦  «        }|| j        v rd S g }t          |g|j        ¢R ¦  «        D ]^}|                      |¦  «        rG|dz  }|                     ¦   «         r.|                      ||||¬¦  «        }	|                     |	¦  «         Œ_|| j        |<   d S )Nzconftest.pyrS  )	r  rã   r  Úreversedr]  r^  rá   Ú_importconftestr÷   )
rS   rN   rO  rL  rP  Ú	directoryÚclistrâ   ÚconftestpathÚmods
             rK   r`  z(PytestPluginManager._loadconftestmodulesƒ  sè   € ð Ôð 	ØˆFà×'Ò'¨Ñ-Ô-ˆ	ð ˜Ô.Ð.Ð.ØˆFàˆÝ 	Ð>¨IÔ,=Ð>Ð>Ñ?Ô?ð 
	&ð 
	&ˆFØ×%Ò% fÑ-Ô-ð 	&Ø%¨Ñ5�Ø×'Ò'Ñ)Ô)ð &Ø×.Ò.Ø$Ø"Ø Ø4Oð	 /ñ ô �Cð —L’L Ñ%Ô%Ð%øØ,1ˆÔ˜yÑ)Ð)Ð)rJ   c                 ób   — |                       |¦  «        }| j                             |d¦  «        S )NrI   )rã   r  rp   )rS   rN   rg  s      rK   Ú_getconftestmodulesz'PytestPluginManager._getconftestmodules£  s.   € Ø×'Ò'¨Ñ-Ô-ˆ	ØÔ%×)Ò)¨)°RÑ8Ô8Ð8rJ   c                 ó¶   — |                       |¦  «        }t          |¦  «        D ]&}	 |t          ||¦  «        fc S # t          $ r Y Œ#w xY wt	          |¦  «        ‚rR   )rl  re  rõ   rö   ÚKeyError)rS   rê   rN   Úmodulesrj  s        rK   Ú_rget_with_confmodz&PytestPluginManager._rget_with_confmod§  sz   € ð
 ×*Ò*¨4Ñ0Ô0ˆÝ˜GÑ$Ô$ð 	ð 	ˆCðØ�G C¨Ñ.Ô.Ð.Ð.Ð.Ð.øÝ!ð ð ð Ø�ðøøøå�t‰nŒnÐs   ¨<¼
A	ÁA	ri  c          
      ó  — t          |¦  «        }|                      |¦  «        }|�t          t          j        |¦  «        S t          |¦  «        }|€$	 t          j        |j        = n# t          $ r Y nw xY w	 t          ||||¬¦  «        }n-# t          $ r }	|	j        €J ‚t          ||	¬¦  «        |	‚d }	~	ww xY w|                      ||¦  «         | j                             |¦  «         |j        }
|
| j        v re| j                             ¦   «         D ]K\  }}|
|j        v s||
k    r7||v rt+          d|›d|› d|j        › d�¦  «        ‚|                     |¦  «         ŒL|                      d|›�¦  «         |                      ||¬¦  «         |S )	N)r	  r  rP  )rO   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)r\   rA  r	   r=  r>  r.   rx   ro  Ústemrn  r,   r[   Ú__traceback__rM   Ú_check_non_top_pytest_pluginsr  Úaddrâ   r  Úitemsr]  ÚAssertionErrorÚ__file__r÷   r  Úconsider_conftest)rS   ri  rO  rL  rP  Úconftestpath_plugin_nameÚexistingÚpkgpathrj  rƒ   ÚdirpathrN   Úmodss                rK   rf  z#PytestPluginManager._importconftest´  s  € õ $' |Ñ#4Ô#4Ð Ø—?’?Ð#;Ñ<Ô<ˆØÐÝ�Ô(¨(Ñ3Ô3Ð3õ ' |Ñ4Ô4ˆØˆ?ðÝ”K Ô 1Ð2Ð2øÝð ð ð Ø�ðøøøð		FÝØØØØ,Gð	ñ ô ˆCˆCøõ ð 	Fð 	Fð 	FØ”?Ð.Ð.Ð.Ý'¨¸AÐ>Ñ>Ô>ÀAÐEøøøøð	Føøøð 	×*Ò*¨3°Ñ=Ô=Ð=àÔ×"Ò" 3Ñ'Ô'Ð'ØÔ%ˆØ�dÔ,Ð,Ð,Ø"Ô4×:Ò:Ñ<Ô<ð %ð %‘
��dØ˜dœlÐ*Ð*¨d°gªo¨oØ˜d�{�{Ý,ðbÀ,ð bð bØ58ðbð bØWZÔWcðbð bð bñô ð ð
 —K’K Ñ$Ô$Ð$øØ�
Š
Ð4¨SÐ4Ð4Ñ5Ô5Ð5Ø×Ò˜sÐ6NÐÑOÔOÐOØˆ
s*   ÁA& Á&
A3Á2A3Á7B Â
B5ÂB0Â0B5rj  c                 ó¦   — t          |d¦  «        r<| j        r7| j        s2d}t          |                     || j        ¦  «        d¬¦  «         d S d S d S d S )Nr#  af  Defining 'pytest_plugins' in a non-top-level conftest is no longer supported:
It affects the entire test suite instead of just below the conftest as expected.
  {}
Please move it to a top level conftest file at the rootdir:
  {}
For more information, visit:
  https://docs.pytest.org/en/stable/deprecations.html#pytest-plugins-in-non-top-level-conftest-filesF)Úpytrace)Úhasattrr  rT  r(   rÚ   r  )rS   rj  ri  rˆ   s       rK   ru  z1PytestPluginManager._check_non_top_pytest_pluginsé  s�   € õ �CÐ)Ñ*Ô*ð	LàÔ ð	Lð Ô&ð	Lðwð õ �—’˜L¨$Ô*:Ñ;Ô;ÀUÐKÑKÔKÐKÐKÐKð	Lð 	Lð 	Lð 	Lð 	Lð 	LrJ   FrÆ   rÇ   c                óš  — d}t          |¦  «        }||k     r³||         }|dz  }t          |t          ¦  «        r‰|dk    r!	 ||         }n# t          $ r Y dS w xY w|dz  }n!|                     d¦  «        r|dd…         }nŒp|                     ¦   «         }|r|                     d¦  «        sŒœ|                      |¦  «         ||k     °±dS dS )r!  r   r   z-pNr;   úno:)ÚlenrÕ   r\   Ú
IndexErrorr)  ÚstriprÛ   )rS   rd   rÇ   rY  ÚnÚoptÚpargs          rK   rË   z%PytestPluginManager.consider_preparse  sÿ   € ð ˆÝ�‰IŒIˆØ�!ŠeˆeØ�q”'ˆCØ�‰FˆAÝ˜#�sÑ#Ô#ð .Ø˜$’;�;ðØ# Aœw˜˜øÝ%ð ð ð Ø˜˜ðøøøà˜‘F�A�AØ—^’^ DÑ)Ô)ð Ø˜q˜r˜rœ7�D�DàØ—z’z‘|”|�Øð ¨¯ª¸Ñ(>Ô(>ð ØØ×'Ò'¨Ñ-Ô-Ð-ð# �!Šeˆeˆeˆeˆeˆes   ÁA
 Á

AÁAÚargc                 ó  — |                      d¦  «        r›|dd…         }|t          v rt          d|z  ¦  «        ‚|dk    r*|                      d¦  «         |                      d¦  «         |                      |¦  «         |                      d¦  «        s|                      d|z   ¦  «         dS dS |}|                      |¦  «         |                      d¦  «        s|                      d|z   ¦  «         |                      |d	¬
¦  «         dS )r!  r„  r<   Nzplugin %s cannot be disabledr²   r¶   Úpytest_stepwiser"  T)Úconsider_entry_points)r)  Úessential_pluginsr"   Úset_blockedÚunblockrÍ   )rS   r‹  rê   s      rK   rÛ   z&PytestPluginManager.consider_pluginarg  s.  € à�>Š>˜%Ñ Ô ð 	@Ø�q�r�r”7ˆDØÕ(Ð(Ð(Ý Ð!?À$Ñ!FÑGÔGÐGð �Ò&Ð&Ø× Ò  Ñ,Ô,Ð,Ø× Ò Ð!2Ñ3Ô3Ð3à×Ò˜TÑ"Ô"Ð"Ø—?’? 9Ñ-Ô-ð 3Ø× Ò  ¨TÑ!1Ñ2Ô2Ð2Ð2Ð2ð3ð 3ð ˆDà�LŠL˜ÑÔÐØ—?’? 9Ñ-Ô-ð /Ø—’˜Y¨Ñ-Ñ.Ô.Ð.Ø×Ò˜s¸$ÐÑ?Ô?Ð?Ð?Ð?rJ   Úconftestmodulerr  c                 ó4   — |                       ||¬¦  «         dS )r!  ré   N)rÜ   )rS   r’  rr  s      rK   rz  z%PytestPluginManager.consider_conftest3  s!   € ð 	�Š�nÐ+<ˆÑ=Ô=Ð=Ð=Ð=rJ   c                 ój   — |                       t          j                             d¦  «        ¦  «         dS )r!  ÚPYTEST_PLUGINSN)Ú_import_plugin_specsra   ro   rp   rY   s    rK   Úconsider_envz PytestPluginManager.consider_env9  s+   € à×!Ò!¥"¤*§.¢.Ð1AÑ"BÔ"BÑCÔCÐCÐCÐCrJ   c                 óN   — |                       t          |dg ¦  «        ¦  «         dS )r!  r#  N)r–  rõ   )rS   rj  s     rK   r?  z#PytestPluginManager.consider_module=  s)   € à×!Ò!¥'¨#Ð/?ÀÑ"DÔ"DÑEÔEÐEÐEÐErJ   rÏ   c                 óX   — t          |¦  «        }|D ]}|                      |¦  «         Œd S rR   )Ú_get_plugin_specs_as_listrÍ   )rS   rÏ   re   Úimport_specs       rK   r–  z(PytestPluginManager._import_plugin_specsA  sA   € õ ,¨DÑ1Ô1ˆØ"ð 	,ð 	,ˆKØ×Ò˜{Ñ+Ô+Ð+Ð+ð	,ð 	,rJ   ÚmodnamerŽ  c                 ó¢  — t          |t          ¦  «        sJ d|z  ¦   «         ‚|                      |¦  «        s|                      |¦  «        �dS |t          v rd|z   n|}| j                             |¦  «         |r|                      d|¬¦  «        }|rdS 	 t          |¦  «         t          j
        |         }|                      ||¦  «         dS # t          $ r>}t          d|› d|j        d         › �¦  «                             |j        ¦  «        |‚d}~wt           $ r.}| j                             ||j        pd	f¦  «         Y d}~dS 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 %rNz_pytest.Úpytest11ré   zError importing plugin "z": r   Ú )rÕ   r\   Ú
is_blockedrA  Úbuiltin_pluginsr  Úmark_rewriteÚload_setuptools_entrypointsÚ
__import__rx   ro  rÜ   ÚImportErrorrd   Úwith_tracebackrt  r)   r  r÷   rˆ   )rS   rœ  rŽ  Ú
importspecÚloadedrj  rƒ   s          rK   rÍ   z!PytestPluginManager.import_pluginH  s£  € õ ˜'¥3Ñ'Ô'ð 	
ð 	
Ø2°WÑ<ñ	
ô 	
ð 	
ð �?Š?˜7Ñ#Ô#ð 	 t§¢°wÑ'?Ô'?Ð'KØˆFà-4½Ð-GÐ-G�Z 'Ñ)Ð)ÈWˆ
ØÔ×&Ò& zÑ2Ô2Ð2à ð 	Ø×5Ò5°jÀwÐ5ÑOÔOˆFØð Ø�ð	(Ý�zÑ"Ô"Ð"õ ”+˜jÔ)ˆCØ�MŠM˜#˜wÑ'Ô'Ð'Ð'Ð'øõ ð 	5ð 	5ð 	5ÝØB¨7ÐBÐB°q´v¸a´yÐBÐBñô çŠn˜Qœ_Ñ-Ô-°1ð5øøøøõ ð 	@ð 	@ð 	@ØÔ ×'Ò'¨°!´%°+¸2Ð(>Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?øøøøð	@øøøs$   ÂC Ã
EÃ9DÄEÄ #E	Å	E©rP   NrR   )ri   rÀ   rP   N)F))r?   r@   rA   rB   rT   Ú_PluggyPluginr\   r   r   r*  r   r.  rÜ   rB  rD  rE  rI  r   r   r   r-   r[  r^  rV  r`  r=  r>  rl  r   r   rp  rf  ru  rË   rÛ   rz  r—  r?  r–  rÍ   Ú__classcell__)r  s   @rK   rÈ   rÈ   ‹  sÇ  ø€ € € € € ðð ð1!ð 1!ð 1!ð 1!ð 1!ð 1!ðf
Ø#ð
Ø+.ð
à	�,Ô	ð
ð 
ð 
ð 
ð 
ð 
ð4¸ð ÀÈ,ÔAWð ð ð ð ð ð ð <@ðð Ø#ðØ+3°C¬=ðà	�#Œðð ð ð ð ð ð6˜cð ð ð ð ð
+˜cð + dð +ð +ð +ð +ð ð  ð  ð  ð*1à�u˜S $˜YÔ'Ô(ð1ð ð1ð ð	1ð
 ð1ð ˜T”Nð1ð ð1ð ˜* c˜/Ô*ð1ð &*ð1ð 
ð1ð 1ð 1ð 1ðf4 dð 4¨tð 4ð 4ð 4ð 4ðàðð ˜#˜z˜/Ô*ðð ð	ð &*ðð 
ðð ð ð ð22àð2ð ˜#˜z˜/Ô*ð2ð ð	2ð &*ð2ð 
ð2ð 2ð 2ð 2ð@9¨ð 9°¸%Ô:JÔ1Kð 9ð 9ð 9ð 9ðàðð ðð 
ˆuÔ Ð$Ô	%ð	ð ð ð ð3àð3ð ˜#˜z˜/Ô*ð3ð ð	3ð &*ð3ð 
Ô	ð3ð 3ð 3ð 3ðjLàÔðLð ðLð 
ð	Lð Lð Lð Lð6 <Að.ð .ð .Ø˜S”Mð.Ø48ð.à	ð.ð .ð .ð .ð2@ cð @¨dð @ð @ð @ð @ð.>Ø#Ô.ð>ØCFð>à	ð>ð >ð >ð >ðDð Dð Dð DðF 5Ô#3ð F¸ð Fð Fð Fð Fð,Ø˜$ Ô 0°#°xÀ´}ÐDÔEð,à	ð,ð ,ð ,ð ,ð#(ð #( Sð #(Àð #(ÐRVð #(ð #(ð #(ð #(ð #(ð #(ð #(ð #(rJ   Úspecsc                 ó  — | €g S t          | t          j        ¦  «        rg S t          | t          ¦  «        r| r|                      d¦  «        ng S t          | t
          j        j        ¦  «        rt          | ¦  «        S t          d| z  ¦  «        ‚)z:Parse a plugins specification into a list of plugin names.Nú,zYPlugins may be specified as a sequence or a ','-separated string of plugin names. Got: %r)
rÕ   r=  r>  r\   r`   ÚcollectionsÚabcr   rØ   r"   )r¬  s    rK   rš  rš  n  s–   € ð
 €}Øˆ	å�%�Ô)Ñ*Ô*ð Øˆ	å�%�ÑÔð 1Ø#(Ð0ˆu�{Š{˜3ÑÔÐ¨bÐ0å�%�œÔ1Ñ2Ô2ð Ý�E‰{Œ{ÐÝ
ØcØ
ñ	ñô ð rJ   c                   ó   — e Zd Zd„ ZdS )ÚNotsetc                 ó   — dS )Nz<NOTSET>rI   rY   s    rK   Ú__repr__zNotset.__repr__…  s   € ØˆzrJ   N)r?   r@   rA   r´  rI   rJ   rK   r²  r²  „  s#   € € € € € ðð ð ð ð rJ   r²  Úpackage_filesc              #   óx  K  — t          | ¦  «        } d}| D ]¶}d|vo|                     d¦  «        }|                     d¦  «        dk    o|                     d¦  «        }|rDt          j                             |¦  «        \  }}|dk    r|                     d¦  «        sd}|V — Œ�|r%t          j                             |¦  «        }d}|V — Œ·|sig }| D ]K}|                     d¦  «        }	d 	                    |	dd	…         ¦  «        }
|
r| 
                    |
¦  «         ŒL|rt          |¦  «        E d	{V —† d	S d	S d	S )
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Ø   ÚendswithÚcountra   rN   Úsplitextr)  Údirnamer`   rø   r÷   Ú_iter_rewritable_modules)rµ  Ú	seen_someÚfnÚis_simple_moduleÚ
is_packageÚmodule_namer1  Úpackage_nameÚnew_package_filesÚpartsÚnew_fns              rK   r¾  r¾  Œ  s—  è è € õ@ ˜Ñ'Ô'€MØ€IØð ð ˆØ b˜=Ð?¨R¯[ª[¸Ñ-?Ô-?ÐØ—X’X˜c‘]”] aÒ'ÐF¨B¯KªK¸Ñ,FÔ,Fˆ
Øð 
	ÝœW×-Ò-¨bÑ1Ô1‰NˆK˜ð ˜gÒ%Ð%¨k×.DÒ.DÀ^Ñ.TÔ.TÐ%Ø �	Ø!Ð!Ð!Ð!øØð 	Ýœ7Ÿ?š?¨2Ñ.Ô.ˆLØˆIØÐÐÐøàð Cð ÐØð 	1ð 	1ˆBØ—H’H˜S‘M”MˆEØ—X’X˜e A B BœiÑ(Ô(ˆFØð 1Ø!×(Ò(¨Ñ0Ô0Ð0øØð 	CÝ/Ð0AÑBÔBÐBÐBÐBÐBÐBÐBÐBÐBÐBðCð Cð	Cð 	CrJ   c                   ó
  — e Zd ZU dZe ej        d¬¦  «         G d„ d¦  «        ¦   «         ¦   «         Z G d„ dej	        ¦  «        Z
dd	œd
edee         ddfd„Zedefd„¦   «         Zedee         fd„¦   «         Zdeg df         ddfd„Zd\d„Zd\d„Zdefd„Zd
edee         dd fd„Z	 d]dee         deej                 ddfd„Zdedefd„Z e!d^d„¦   «         Z"d_d„Z# e$d¬ ¦  «        d`d"„¦   «         Z%de&e         ddfd#„Z'de&e         ddfd$„Z(d\d%„Z)dee         d&edee         fd'„Z*dee         d(e+d)ee         d*ed+ed,e+de,ee         e
f         fd-„Z-dadee         d.e+ddfd/„Z. e$d¬0¦  «        de/de0e0f         fd1„¦   «         Z1d\d2„Z2d\d3„Z3d\d4„Z4d5eddfd6„Z5dee         fd7„Z6dadee         d.e+ddfd8„Z7d9e8d:e9ddfd;„Z:d<ed=eddfd>„Z;d<efd?„Z<d<ed@edAe=eee         f         fdB„Z>d<efdC„Z?d<edDedeee                  fdE„Z@d<edee         fdF„ZAeBdGfd<edHe+fdI„ZCd]d<efdJ„ZDd]d<efdK„ZEdLZFeGeHdM<   dNZIeGeHdO<   dPZJeGeHdQ<   d]dRee         de9fdS„ZKeLdRedefdT„¦   «         ZMeLdUdVdRedWeddfdX„¦   «         ZNdYeddfdZ„ZOd\d[„ZPdS )brÀ   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                   ó¼   — e Zd ZU dZeedf         ed<   	 eee	ee
f                           ed<   	 eed<   	 dee         deee	ee
f                           deddfd„ZdS )	ú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``
            ini option are handled by pytest, not being included in the ``args`` attribute.

            Plugins accessing ``InvocationParams`` must be aware of that.
        .rd   re   rÃ   rP   Nc                óÈ   — t                                | dt          |¦  «        ¦  «         t                                | d|¦  «         t                                | d|¦  «         d S )Nrd   re   rÃ   )ÚobjectÚ__setattr__Útuple)rS   rd   re   rÃ   s       rK   rT   z Config.InvocationParams.__init__ñ  sX   € õ ×Ò˜t V­U°4©[¬[Ñ9Ô9Ð9Ý×Ò˜t Y°Ñ8Ô8Ð8Ý×Ò˜t U¨CÑ0Ô0Ð0Ð0Ð0rJ   )r?   r@   rA   rB   r   r\   Ú__annotations__r   r   r   rª  r   r   rT   rI   rJ   rK   rÉ   rË  Ù  s¼   € € € € € € ð	ð 	ð �C˜�HŒoÐÐÑØJØ˜( 5¨¨mÐ);Ô#<Ô=Ô>Ð>Ð>Ñ>Ø-Øˆ	ˆ	‰	ØGð		1ð ˜3”-ð		1ð ˜h u¨S°-Ð-?Ô'@ÔAÔBð			1ð
 ð		1ð ð		1ð 		1ð 		1ð 		1ð 		1ð 		1rJ   rÉ   c                   óp   — e Zd ZdZ ej        ¦   «         Z ej        ¦   «         ZeZ ej        ¦   «         Z	dS )úConfig.ArgsSourcezSIndicates the source of the test arguments.

        .. versionadded:: 7.2
        N)
r?   r@   rA   rB   ÚenumÚautoÚARGSÚINVOCATION_DIRÚINCOVATION_DIRÚ	TESTPATHSrI   rJ   rK   Ú
ArgsSourcerÒ  ü  sF   € € € € € ð	ð 	ð ˆtŒy‰{Œ{ˆà"˜œ™œˆØ'ˆà�D”I‘K”Kˆ	ˆ	ˆ	rJ   rÙ  NrÄ   rÎ   rÅ   rP   c                ó*  — ddl m} ddl m} |€)|                      dd t	          j        ¦   «         ¬¦  «        }t          j        ¦   «         | _        	 || _	        	 |} |d|› d|› d�| j
        d	¬
¦  «        | _        || _        	 t          ¦   «         | _        	 | j        | _        | j        j        j                             d¦  «        | _        t'          | j        j        ¦  «        | _        i | _        d| _        i | _        g | _        | j                             | d¦  «         d| _        | j        j                             t;          | j        | j        ¬¦  «        ¬¦  «         t<          j        j         | _!        g | _"        tF          rddl$m%} d | _&        d S d S )Nr   )ÚFILE_OR_DIRr4   rI   rÂ   z%(prog)s [options] [z] [z] [...]T)ÚusageÚ
processoptÚ	_ispytestri   ÚpytestconfigF)ÚparserrÎ   r5  r   )ÚCache)'Ú
argparsingrÛ  r5   rÉ   r   rÊ   ÚargparseÚ	NamespaceÚoptionrÅ   Ú_processoptÚ_parserrÎ   r0   ÚstashÚ_storer  r  rp   r    rr   Ú	_inicacheÚ_override_iniÚ	_opt2destÚ_cleanuprÜ   r  Úpytest_addoptionr;  r<  rÀ   rÙ  rÕ  Úargs_sourcerd   r   Ú_pytest.cacheproviderrá  Úcache)rS   rÎ   rÅ   rÛ  r5   Ú_ará  s          rK   rT   zConfig.__init__
  sÔ  € ð 	,Ð+Ð+Ð+Ð+Ð+Ø&Ð&Ð&Ð&Ð&Ð&àÐ$Ø $× 5Ò 5Ø ­4¬8©:¬:ð !6ñ !ô !Ðõ Ô(Ñ*Ô*ˆŒð	ð
 "3ˆÔð	ð
 ˆØ�vØ;¨Ð;Ð;°Ð;Ð;Ð;ØÔ'Øð
ñ 
ô 
ˆŒð
 +ˆÔð	õ
 ‘W”WˆŒ
ð	ð ”jˆŒàÔ'Ô-Ô2×6Ò6°xÑ@Ô@ˆŒ
Ý&8¸Ô9KÔ9PÑ&QÔ&QˆŒ	Ø)+ˆŒØ,.ˆÔØ)+ˆŒØ24ˆŒØÔ×#Ò# D¨.Ñ9Ô9Ð9Ø ˆÔØŒ	Ô"×0Ò0Ý˜tœ|¸4Ô;MÐNÑNÔNð 	1ñ 	
ô 	
ð 	
õ "Ô,Ô1ˆÔØ!ˆŒ	åð 	/Ø3Ð3Ð3Ð3Ð3Ð3à*.ˆDŒJˆJˆJð	/ð 	/rJ   c                 ó   — | j         S )znThe path to the :ref:`rootdir <rootdir>`.

        :type: pathlib.Path

        .. versionadded:: 6.1
        )Ú	_rootpathrY   s    rK   rL  zConfig.rootpathL  s   € ð Œ~ÐrJ   c                 ó   — | j         S )zThe path to the :ref:`configfile <configfiles>`.

        :type: Optional[pathlib.Path]

        .. versionadded:: 6.1
        )Ú_inipathrY   s    rK   ÚinipathzConfig.inipathV  s   € ð Œ}ÐrJ   Úfuncc                 ó:   — | j                              |¦  «         dS )zxAdd a function to be called when the config object gets out of
        use (usually coinciding with pytest_unconfigure).N)rí  r÷   )rS   rø  s     rK   Úadd_cleanupzConfig.add_cleanup`  s    € ð 	Œ×Ò˜TÑ"Ô"Ð"Ð"Ð"rJ   c                 ó  — | j         rJ ‚d| _         t          j        ¦   «         5  t          j        d¦  «         | j        j                             t          | ¬¦  «        ¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NTÚdefaultrh   r5  )r  r·   Úcatch_warningsÚsimplefilterrr   rI  r;  r<  rY   s    rK   Ú_do_configurezConfig._do_configuree  sØ   € ØÔ#Ð#Ð#Ð#ØˆÔÝÔ$Ñ&Ô&ð 	Oð 	OÝÔ! )Ñ,Ô,Ð,ØŒIÔ&×4Ò4½DÈÐ<MÑ<MÔ<MÐ4ÑNÔNÐNð	Oð 	Oð 	Oñ 	Oô 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oøøøð 	Oð 	Oð 	Oð 	Oð 	Oð 	Os   ¤AA4Á4A8Á;A8c                 óà   — | j         r3d| _         | j                             | ¬¦  «         g | j        j        _        | j        r,| j                             ¦   «         } |¦   «          | j        °*d S d S )NFrh   )r  rr   Úpytest_unconfigurerI  Ú_call_historyrí  ru   )rS   Úfins     rK   rt   zConfig._ensure_unconfigurel  sƒ   € ØÔð 	:Ø$ˆDÔØŒI×(Ò(°Ð(Ñ5Ô5Ð5Ø79ˆDŒIÔ&Ô4ØŒmð 	Ø”-×#Ò#Ñ%Ô%ˆCØˆC‰EŒEˆEð Œmð 	ð 	ð 	ð 	ð 	rJ   c                 óL   — | j                              d¦  «        }|€J ‚|j        S )NÚterminalreporter)rÎ   rA  Ú_tw)rS   r  s     rK   Úget_terminal_writerzConfig.get_terminal_writeru  s5   € Ø7;Ô7I×7TÒ7TØñ8
ô 8
Ðð  Ð+Ð+Ð+ØÔ#Ð#rJ   rd   c                 óz  — 	 |                       |¦  «         n£# t          $ r– t          | j        dd¦  «        sd|v rddlm}  || ¦  «         nht          | j        dd¦  «        sd|v sd|v rJ| j                             ¦   «                              ¦   «          t          j
                             d	¦  «         ‚ w xY w| S )
NÚversionFz	--versionr   )ÚshowversionÚhelpz--helpz-hz8
NOTE: displaying only minimal help due to UsageError.

)Úparser"   rõ   rå  Ú_pytest.helpconfigr
  rç  Ú
_getparserÚ
print_helprx   r‹   r  )rS   rÎ   rd   r
  s       rK   rÝ   zConfig.pytest_cmdline_parse|  sñ   € ð	Ø�JŠJ�tÑÔÐÐøÝð 	ð 	ð 	õ �t”{ I¨uÑ5Ô5ð 
¸ÈÐ9LÐ9LØ:Ð:Ð:Ð:Ð:Ð:à�˜DÑ!Ô!Ð!Ð!å˜œ V¨UÑ3Ô3ðØ7?À4Ð7GÐ7GÈ4ÐSWÈ<È<à”×'Ò'Ñ)Ô)×4Ò4Ñ6Ô6Ð6Ý”
× Ò ØQñô ð ð ð!	øøøð$ ˆs
   ‚ ˜B B8Úexcinforå  c                 ó¨  — |rt          |dd¦  «        rd}nd}|                     dt          |dd¦  «        |¬¦  «        }| j                             ||¬¦  «        }t	          |¦  «        set          |¦  «                             d	¦  «        D ]D}t          j         	                    d
|z  ¦  «         t          j         
                    ¦   «          ŒCd S d S )NÚ	fulltraceFÚlongÚnativeTÚ
showlocals)Úfuncargsr  rl   )Úexcreprr  rn   zINTERNALERROR> %s
)rõ   r}   rr   Úpytest_internalerrorÚanyr\   r`   rx   ry   r  rŒ   )rS   r  rå  rl   r  Úresrz   s          rK   Únotify_exceptionzConfig.notify_exception•  së   € ð
 ð 	•g˜f k°5Ñ9Ô9ð 	Ø%+ˆEˆEàˆEØ—/’/Ø¥g¨f°lÀEÑ&JÔ&JÐRWð "ñ 
ô 
ˆð Œi×,Ò,°WÀgÐ,ÑNÔNˆÝ�3‰xŒxð 	#Ý˜G™œ×*Ò*¨4Ñ0Ô0ð #ð #�Ý”
× Ò Ð!6¸Ñ!=Ñ>Ô>Ð>Ý”
× Ò Ñ"Ô"Ð"Ð"ð	#ð 	#ð#ð #rJ   Únodeidc                 óx   — | j         j        | j        k    r$| j        |z  }t          | j         j        |¦  «        }|S rR   )rÅ   rÃ   rL  r+   )rS   r  Úfullpaths      rK   Úcwd_relative_nodeidzConfig.cwd_relative_nodeid§  s;   € àÔ!Ô%¨¬Ò6Ð6Ø”} vÑ-ˆHÝ  Ô!7Ô!;¸XÑFÔFˆFØˆrJ   c                 óâ   — t          |¦  «        }|j        j                             |¦  «         |                     |d¬¦  «         |j        j        D ]}|j                             |¦  «         Œ|S )z$Constructor usable for subprocesses.F©Úaddopts)rÐ   rå  Ú__dict__Úupdater  re   rÎ   rÛ   )ÚclsÚoption_dictrd   ri   rc  s        rK   ÚfromdictargszConfig.fromdictargs®  ss   € õ ˜DÑ!Ô!ˆØŒÔ×%Ò% kÑ2Ô2Ð2Ø�Š�T 5ˆÑ)Ô)Ð)Ø”Ô&ð 	7ð 	7ˆAØÔ ×3Ò3°AÑ6Ô6Ð6Ð6ØˆrJ   r‰  r3   c                 óä   — |j         |j        z   D ]}|j        | j        |<   Œt	          |d¦  «        r<t	          | j        |j        ¦  «        s$t          | j        |j        |j        ¦  «         d S d S d S )Nrü  )Ú_short_optsÚ
_long_optsÚdestrì  r‚  rå  Úsetattrrü  )rS   r‰  rê   s      rK   ræ  zConfig._processopt¸  s…   € Ø”O c¤nÑ4ð 	,ð 	,ˆDØ#&¤8ˆDŒN˜4Ñ Ð å�3˜	Ñ"Ô"ð 	<Ý˜4œ;¨¬Ñ1Ô1ð <Ý˜œ S¤X¨s¬{Ñ;Ô;Ð;Ð;Ð;ð	<ð 	<ð<ð <rJ   )r&  Úearly_configc                 ó†  — |                      |j        j        |j        j        |                     d¦  «        |j        j        |j        d¬¦  «        \  }}| j         	                    ||j        j        |j        j
        |j        |j        j        |j        j        |j        j        |                     d¦  «        ¬¦  «         d S )NÚ	testpathsF©rd   rJ  r/  rN  rL  r8  rP  )rd   rJ  rK  rL  rM  rN  rO  rP  )Ú_decide_argsÚknown_args_namespaceÚfile_or_dirrJ  ÚgetinirÅ   rÃ   rL  rÎ   r[  rK  rM  rO  )rS   r-  rd   rï  s       rK   Úpytest_load_initial_conftestsz$Config.pytest_load_initial_conftestsÀ  sÐ   € ð )×5Ò5ØÔ2Ô>ØÔ4Ô;Ø"×)Ò)¨+Ñ6Ô6Ø'Ô9Ô=Ø!Ô*Øð 6ñ 
ô 
Ñˆˆkð 	Ô×1Ò1ØØÔ4Ô;Ø#Ô8ÔCØ!Ô*Ø#Ô8ÔCØ'Ô9Ô=Ø#Ô8ÔCØ(4×(;Ò(;Ø-ñ)ô )ð 	2ñ 	
ô 	
ð 	
ð 	
ð 	
rJ   c                 óP  — | j                              |t          j        | j        ¦  «        ¬¦  «        \  }}t	          |j        |j        |z   |j        pd | j        j	        ¬¦  «        \  }}}|| _
        || _        || _        t          | j        ¦  «        | j         j        d<   t          | j        ¦  «        | j         j        d<   | j                              ddd¦  «         | j                              dd	¦  «         | j                              d
ddg ¬¦  «         |j        pd| _        d S )N©Ú	namespace)Úinifilerd   Úrootdir_cmd_argrN  Úrootdirr9  r"  zExtra command line optionsrd   Ú
minversionz!Minimally required pytest versionÚrequired_pluginsz.Plugins that must be present for pytest to run)rX   rü  rI   )rç  Úparse_known_and_unknown_argsÚcopyrå  r#   Úinifilenamer3  r;  rÅ   rÃ   rô  rö  Úinicfgr\   rL  Ú
extra_infor÷  ÚaddiniÚoverride_inirë  )rS   rd   ÚnsÚunknown_argsrL  r÷  rA  s          rK   Ú_initinizConfig._initiniÛ  s3  € Øœ<×DÒDØ�DœI d¤kÑ2Ô2ð Eñ 
ô 
ÑˆˆLõ %4Ø”NØ” ,Ñ.ØœJÐ.¨$ØÔ1Ô5ð	%
ñ %
ô %
Ñ!ˆ�'˜6ð "ˆŒØˆŒØˆŒÝ-0°´Ñ-?Ô-?ˆŒÔ 	Ñ*Ý-0°´Ñ->Ô->ˆŒÔ 	Ñ*ØŒ×Ò˜IÐ'CÀVÑLÔLÐLØŒ×Ò˜LÐ*MÑNÔNÐNØŒ×ÒØØ<ØØð	 	ñ 	
ô 	
ð 	
ð  œ_Ð2°ˆÔÐÐrJ   c                 ó&  — | j                              |¦  «        \  }}t          |dd¦  «        }|dk    rGddl}	 |j                             | ¦  «        }|                      |¦  «         n# t          $ r d}Y nw xY w|                      |¦  «         dS )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Úrewriter   N)	rç  r>  rõ   r  r¯   Úinstall_importhookÚ_mark_plugins_for_rewriteÚSystemErrorÚ_warn_about_missing_assertion)rS   rd   rE  rF  r	  rù   rr   s          rK   Ú_consider_importhookzConfig._consider_importhookô  s¼   € ð  œ<×DÒDÀTÑJÔJÑˆˆLÝ�r˜<¨Ñ1Ô1ˆØ�9ÒÐØ$Ð$Ð$Ð$ð5ØÔ(×;Ò;¸DÑAÔA�ð ×.Ò.¨tÑ4Ô4Ð4Ð4øõ ð ð ð Ø���ðøøøð 	×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0s   ºA* Á*A9Á8A9c                 óþ   — || j         _        t          j                             d¦  «        rdS d„ t
          j                             ¦   «         D ¦   «         }t          |¦  «        D ]}| 	                    |¦  «         ŒdS )z‹Given an importhook, mark for rewrite any top-level
        modules or packages in the distribution package for
        all pytest plugins.ÚPYTEST_DISABLE_PLUGIN_AUTOLOADNc              3   óˆ   K  — | ]=}t          d „ |j        D ¦   «         ¦  «        ¯ |j        pg D ]}t          |¦  «        V — ŒŒ>dS )c              3   ó,   K  — | ]}|j         d k    V — ŒdS )rž  N)Úgroup)rë   Úeps     rK   ú	<genexpr>z=Config._mark_plugins_for_rewrite.<locals>.<genexpr>.<genexpr>  s)   è è € ÐFÐF¨b�2”8˜zÒ)ÐFÐFÐFÐFÐFÐFrJ   N)r  Úentry_pointsÚfilesr\   )rë   ÚdistÚfiles      rK   rW  z3Config._mark_plugins_for_rewrite.<locals>.<genexpr>  s~   è è € ð 
ð 
àÝÐFÐF°DÔ4EÐFÑFÔFÑFÔFð
ð œ
Ð( bð	
ð 
ð õ �‰IŒIð
ð 
ð 
ð 
ð 
ð 
ð 
rJ   )
rÎ   r  ra   ro   rp   r_   ÚmetadataÚdistributionsr¾  r¢  )rS   rr   rµ  rê   s       rK   rM  z Config._mark_plugins_for_rewrite  s’   € ð +/ˆÔÔ'åŒ:�>Š>Ð:Ñ;Ô;ð 	àˆFð
ð 
å!Ô*×8Ò8Ñ:Ô:ð
ñ 
ô 
ˆõ -¨]Ñ;Ô;ð 	$ð 	$ˆDØ×Ò˜dÑ#Ô#Ð#Ð#ð	$ð 	$rJ   Úviac                 ó®   — || j         _        	 | j                              |t          j        | j        ¦  «        ¬¦  «         | j         `n# | j         `w xY w|S )zValidate known args.r7  )rç  Ú_config_source_hintr>  r?  rå  )rS   rd   r^  s      rK   Ú_validate_argszConfig._validate_args  sg   € à+.ˆŒÔ(ð	1ØŒL×5Ò5Ø¥¤	¨$¬+Ñ 6Ô 6ð 6ñ ô ð ð ”Ð0Ð0ø�”Ð0Ð0Ð0Ð0Ð0àˆs   Ž3A	 Á		ArJ  r/  rN  rL  r8  c          	      óŒ  — |rt           j        j        }|}n«||k    r€t           j        j        }|r|}nlg }|D ]8}	|                     t          t          j        |	d¬¦  «        ¦  «        ¦  «         Œ9|r*|s(|r&d}
|                      t          |
¦  «        d¬¦  «         ng }|s!t           j        j
        }t          |¦  «        g}||fS )zÑDecide the args (initial paths/nodeids) to use given the relevant inputs.

        :param warn: Whether can issue warnings.

        :returns: The args and the args source. Guaranteed to be non-empty.
        T)Ú	recursivez˜No files were found in testpaths; consider removing or adjusting your testpaths configuration. Searching recursively from the current directory instead.r<   ©Ú
stacklevel)rÀ   rÙ  rÕ  rØ  ÚextendÚsortedrb  ÚiglobÚissue_config_time_warningr1   rÖ  r\   )rS   rd   rJ  r/  rN  rL  r8  ÚsourceÚresultrN   Úwarning_texts              rK   r1  zConfig._decide_args(  s  € ð  ð 	/ÝÔ&Ô+ˆFØˆFˆFà Ò)Ð)ÝÔ*Ô4�Øð Ø&�F�Fà�FØ )ð Pð P˜ØŸš¥f­T¬Z¸ÈÐ-MÑ-MÔ-MÑ&NÔ&NÑOÔOÐOÐOØ ð 	¨ð 	Øð ð!\ð )ð
 !×:Ò:Ý 3°LÑ AÔ AÈað ;ñ ô ð øð �Øð /ÝÔ*Ô9�Ý˜nÑ-Ô-Ð.�Ø�vˆ~ÐrJ   r"  c                 óR  — |r_t           j                             dd¦  «        }t          |¦  «        r0|                      t          j        |¦  «        d¦  «        |z   |d d …<   |                      |¦  «         |r1|                      |                      d¦  «        d¦  «        |z   |d d …<   | j	         
                    |t          j        | j        ¦  «        ¬¦  «        | _        |                      ¦   «          |                      |¦  «         | j                             |d¬¦  «         t           j                             d	¦  «        s| j                             d
¦  «         | j                             ¦   «          | j	         
                    |t          j        | j        ¦  «        ¬¦  «        | _        |                      ¦   «          |                      ¦   «          | j        j        €A| j        �t1          | j        j        ¦  «        }nt1          | j        ¦  «        }|| j        _        	 | j                             | || j	        ¬¦  «         d S # t:          $ rQ}| j        j        s| j        j        r-|                       tC          d|j"        › �¦  «        d¬¦  «         n‚ Y d }~d S d }~ww xY w)NÚPYTEST_ADDOPTSrŸ  zvia PYTEST_ADDOPTSr"  zvia addopts configr7  FrÆ   rR  rž  )r-  rd   rà  z"could not load initial conftests: r;   rd  )#ra   ro   rp   r…  ra  Úshlexr`   rG  r4  rç  Úparse_known_argsr?  rå  r2  Ú_checkversionrP  rÎ   rË   r£  r—  Ú_validate_pluginsÚ_warn_about_skipped_pluginsrM  r÷  r\   râ   rL  rr   r5  rM   r  r	  ri  r1   rN   )rS   rd   r"  Úenv_addoptsrM  rƒ   s         rK   Ú	_preparsezConfig._preparseU  sÜ  € Øð 	Ýœ*Ÿ.š.Ð)9¸2Ñ>Ô>ˆKÝ�;ÑÔð à×'Ò'­¬°KÑ(@Ô(@ÐBVÑWÔWØñð �Q�Q�Q‘ð 	�Š�dÑÔÐØð 	à×#Ò# D§K¢K°	Ñ$:Ô$:Ð<PÑQÔQÐTXÑXð ���‰Gð %)¤L×$AÒ$AØ�DœI d¤kÑ2Ô2ð %Bñ %
ô %
ˆÔ!ð 	×ÒÑÔÐØ×!Ò! $Ñ'Ô'Ð'ØÔ×,Ò,¨TÀÐ,ÑFÔFÐFÝŒz�~Š~Ð>Ñ?Ô?ð 	Gð Ô×:Ò:¸:ÑFÔFÐFØÔ×'Ò'Ñ)Ô)Ð)à$(¤L×$AÒ$AØ�DœI dÔ&?Ñ@Ô@ð %Bñ %
ô %
ˆÔ!ð 	×ÒÑ Ô Ð Ø×(Ò(Ñ*Ô*Ð*àÔ$Ô/Ð7ØŒ|Ð'Ý  ¤Ô!4Ñ5Ô5�
�
å  ¤Ñ/Ô/�
Ø3=ˆDÔ%Ô0ð	ØŒI×3Ò3Ø!¨°T´\ð 4ñ ô ð ð ð øõ %ð 		ð 		ð 		ØÔ(Ô-ð °Ô1JÔ1Rð ð ×.Ò.Ý'Ð(UÈQÌVÐ(UÐ(UÑVÔVØ ð /ñ ô ð ð ð
 ðð ð ð ð ð øøøøð			øøøs   È'"I É
J&ÉAJ!Ê!J&)Úwrapperc              #   ój   K  — 	 d V —|                       ¦   «          S # |                       ¦   «          w xY wrR   )Ú_validate_config_optionsrY   s    rK   Úpytest_collectionzConfig.pytest_collection‹  s?   è è € ð	,Ø�E�Eà×)Ò)Ñ+Ô+Ð+Ð+øˆD×)Ò)Ñ+Ô+Ð+Ð+øøøs   „ œ2c                 óF  — dd l }| j                             dd ¦  «        }|r}ddlm} t          |t          ¦  «        s|                     d| j        z  ¦  «        ‚ ||¦  «         ||j	        ¦  «        k    r*|                     | j        › d|› d|j	        › d�¦  «        ‚d S d S )Nr   r<  ©ÚVersionz'%s: 'minversion' must be a single valuez: 'minversion' requires pytest-z, actual pytest-ú')
r8   rA  rp   Úpackaging.versionr|  rÕ   r\   r"   r÷  r$   )rS   r8   Úminverr|  s       rK   rq  zConfig._checkversion”  sÜ   € Øˆˆˆà”—’ ¨tÑ4Ô4ˆØð 	à1Ð1Ð1Ð1Ð1Ð1å˜f¥cÑ*Ô*ð Ø×'Ò'Ø=ÀÄÑLñô ð ð ˆw�v‰Œ  ¨Ô);Ñ!<Ô!<Ò<Ð<Ø×'Ò'Ø”|ÐqÐqÀFÐqÐqÐ\bÔ\nÐqÐqÐqñô ð ð	ð 	ð =Ð<rJ   c                 ó€   — t          |                      ¦   «         ¦  «        D ]}|                      d|› d�¦  «         Œd S )NzUnknown config option: rn   )rg  Ú_get_unknown_ini_keysÚ_warn_or_fail_if_strict)rS   Úkeys     rK   rx  zConfig._validate_config_options¦  sV   € Ý˜$×4Ò4Ñ6Ô6Ñ7Ô7ð 	Lð 	LˆCØ×(Ò(Ð)JÀ3Ð)JÐ)JÐ)JÑKÔKÐKÐKð	Lð 	LrJ   c                 ó^  — t          |                      d¦  «        ¦  «        }|sd S ddlm} ddlm} ddlm} | j                             ¦   «         }d„ |D ¦   «         }g }|D ]“}	  ||¦  «        }	n # |$ r | 	                    |¦  «         Y Œ+w xY w|	j
        |vr| 	                    |¦  «         ŒN|	j                              |||	j
                 ¦  «        d¬¦  «        s| 	                    |¦  «         Œ”|r5t          d	                     d
                     |¦  «        ¦  «        ¦  «        ‚d S )Nr=  r   )ÚInvalidRequirement)ÚRequirementr{  c                 ó.   — i | ]\  }}|j         |j        “ŒS rI   )Úproject_namer	  )rë   r1  rZ  s      rK   ú
<dictcomp>z,Config._validate_plugins.<locals>.<dictcomp>µ  s#   € ÐWÐWÐWÁÀÀ4˜DÔ-¨t¬|ÐWÐWÐWrJ   T)ÚprereleaseszMissing required plugins: {}rð   )rg  r4  Úpackaging.requirementsr…  r†  r~  r|  rÎ   Úlist_plugin_distinfor÷   rê   Ú	specifierÚcontainsr"   rÚ   rø   )
rS   r=  r…  r†  r|  Úplugin_infoÚplugin_dist_infoÚmissing_pluginsÚrequired_pluginÚreqs
             rK   rr  zConfig._validate_pluginsª  s�  € Ý! $§+¢+Ð.@Ñ"AÔ"AÑBÔBÐØð 	ØˆFð 	>Ð=Ð=Ð=Ð=Ð=Ø6Ð6Ð6Ð6Ð6Ð6Ø-Ð-Ð-Ð-Ð-Ð-àÔ(×=Ò=Ñ?Ô?ˆØWÐWÈ;ÐWÑWÔWÐàˆØ/ð 	8ð 	8ˆOðØ!�k /Ñ2Ô2��øØ%ð ð ð Ø×&Ò& Ñ7Ô7Ð7Ø�ðøøøð ŒxÐ/Ð/Ð/Ø×&Ò& Ñ7Ô7Ð7Ð7Ø”]×+Ò+Ø�Ð(¨¬Ô2Ñ3Ô3Àð ,ñ ô ð 8ð  ×&Ò& Ñ7Ô7Ð7øàð 	ÝØ.×5Ò5°d·i²iÀÑ6PÔ6PÑQÔQñô ð ð	ð 	s   Á%A1Á1BÂBr  c                 ó„   — | j         j        rt          |¦  «        ‚|                      t	          |¦  «        d¬¦  «         d S )Nr<   rd  )r2  Ústrict_configr"   ri  r1   )rS   r  s     rK   r‚  zConfig._warn_or_fail_if_strictË  sG   € ØÔ$Ô2ð 	&Ý˜WÑ%Ô%Ð%à×&Ò&Õ':¸7Ñ'CÔ'CÐPQÐ&ÑRÔRÐRÐRÐRrJ   c                 óB   ‡— | j         j        Šˆfd„| j        D ¦   «         S )Nc                 ó   •— g | ]}|‰v¯|‘Œ	S rI   rI   )rë   rê   Úparser_inicfgs     €rK   ú
<listcomp>z0Config._get_unknown_ini_keys.<locals>.<listcomp>Ó  s#   ø€ ÐJÐJÐJ˜°¸MÐ0IÐ0I�Ð0IÐ0IÐ0IrJ   )rç  Ú_inidictrA  )rS   r˜  s    @rK   r�  zConfig._get_unknown_ini_keysÑ  s)   ø€ ØœÔ-ˆØJÐJÐJÐJ ¤ÐJÑJÔJÐJrJ   c                 óö  — | j         g k    s
J d¦   «         ‚| j        j                             t	          | j        ¬¦  «        ¬¦  «         |                      ||¬¦  «         d| j        _        	 | j         	                    || j
        | j
        ¬¦  «        }|                      || j        j        |                      d¦  «        | j        j        | j        d¬¦  «        \  | _         | _        d S # t&          $ r Y d S w xY w)	Nz:can only parse cmdline args at most once per Config object)rÎ   r5  r!  Tr7  r/  r0  )rd   rr   Úpytest_addhooksr;  r<  rÎ   ru  rç  Úafter_preparseÚparse_setoptionrå  r1  r2  rJ  r4  rÅ   rÃ   rL  rï  r!   )rS   rd   r"  s      rK   r  zConfig.parseÕ  s  € ð ŒI˜ŠOˆOˆOØGñ ŒOˆOàŒ	Ô!×/Ò/Ý dÔ&8Ð9Ñ9Ô9ð 	0ñ 	
ô 	
ð 	
ð 	�Š�t WˆÑ-Ô-Ð-Ø&*ˆŒÔ#ð	Ø”<×/Ò/Ø�d”k¨T¬[ð 0ñ ô ˆDð +/×*;Ò*;ØØÔ0Ô7ØŸ+š+ kÑ2Ô2Ø#Ô5Ô9ØœØð +<ñ +ô +Ñ'ˆDŒI�tÔ'Ð'Ð'øõ ð 	ð 	ð 	ØˆDˆDð	øøøs   Á-A;C* Ã*
C8Ã7C8Úwarningre  c                 óN  — | j                              d¦  «        rdS | j        j        pg }|                      d¦  «        }t          j        d¬¦  «        5 }t          j        dt          |¦  «        ¦  «         t          ||¦  «         t          j
        ||¬¦  «         ddd¦  «         n# 1 swxY w Y   |rnt          j        |dz
  ¦  «        }|j        j        |j        |j        j        f}| j        j                             t)          |d	         d
d|¬¦  «        ¬¦  «         dS dS )a  Issue and handle a warning during the "configure" stage.

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

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

        :param warning: The warning instance.
        :param stacklevel: stacklevel forwarded to warnings.warn.
        r·   NÚfilterwarningsT)ÚrecordÚalwaysrd  r   r   ri   rŸ  )Úwarning_messageÚwhenr  Úlocationr5  )rÎ   r   r2  Úpythonwarningsr4  r·   rý  rþ  rX   Úapply_warning_filtersr8  rx   Ú	_getframeÚf_codeÚco_filenameÚf_linenoÚco_namerr   Úpytest_warning_recordedr;  r<  )rS   rŸ  re  Úcmdline_filtersÚconfig_filtersÚrecordsÚframer¦  s           rK   ri  z Config.issue_config_time_warningî  su  € ð Ô×(Ò(¨Ñ4Ô4ð 	ØˆFàÔ3ÔBÐHÀbˆØŸšÐ%5Ñ6Ô6ˆåÔ$¨DÐ1Ñ1Ô1ð 	:°WÝÔ! (­D°©M¬MÑ:Ô:Ð:Ý! .°/ÑBÔBÐBÝŒM˜'¨jÐ9Ñ9Ô9Ð9ð	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:ð
 ð 
	Ý”M *¨q¡.Ñ1Ô1ˆEØ”|Ô/°´ÀÄÔAUÐUˆHØŒIÔ-×;Ò;ÝØ$+¨A¤JØ!ØØ%ð	ñ ô ð <ñ ô ð ð ð ð
	ð 
	s   ÁA	B*Â*B.Â1B.rê   rz   c                 óˆ   — |                       |¦  «        }t          |t          ¦  «        sJ ‚|                     |¦  «         dS )z©Add a line to an ini-file 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)r4  rÕ   rØ   r÷   )rS   rê   rz   rc  s       rK   rH  zConfig.addinivalue_line  s>   € ð �KŠK˜ÑÔˆÝ˜!�TÑ"Ô"Ð"Ð"Ð"Ø	�Š�‰ŒˆˆˆrJ   c                 ó€   — 	 | j         |         S # t          $ r$ |                      |¦  «        x| j         |<   }|cY S w xY w)a8  Return configuration value from an :ref:`ini file <configfiles>`.

        If a configuration value is not defined in an
        :ref:`ini 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 ``""``

        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.
        )rê  rn  Ú_getini)rS   rê   Úvals      rK   r4  zConfig.getini  sU   € ð8	Ø”> $Ô'Ð'øÝð 	ð 	ð 	Ø)-¯ª°dÑ);Ô);Ð;ˆDŒN˜4Ñ  3ØˆJˆJˆJð	øøøs   ‚ �+=¼=rX   Úvaluec                 ó,   — d|› �}t          ||¦  «        ‚)Nzunknown configuration type: )rv   )rS   rê   rX   r·  rˆ   s        rK   Ú_getini_unknown_typezConfig._getini_unknown_type=  s   € Ø3¨TÐ3Ð3ˆÝ˜˜eÑ$Ô$Ð$rJ   c                 óT  ‡	— 	 | j         j        |         \  }}}n%# t          $ r}t          d|›�¦  «        |‚d }~ww xY w|                      |¦  «        }|€!	 | j        |         }n# t          $ r |cY S w xY w|}|dk    rX| j        �| j        j        n| j        j	        Š	t          |t          ¦  «        rt          j        |¦  «        n|}ˆ	fd„|D ¦   «         S |dk    r+t          |t          ¦  «        rt          j        |¦  «        n|S |dk    rEt          |t          ¦  «        r.d„ t          d„ |                     d¦  «        ¦  «        D ¦   «         S |S |d	k    r.t          t          |¦  «                             ¦   «         ¦  «        S |d
k    r|S |€|S |                      |||¦  «        S )Nzunknown configuration value: Úpathsc                 ó   •— g | ]}‰|z  ‘ŒS rI   rI   )rë   rc  Údps     €rK   r™  z"Config._getini.<locals>.<listcomp>d  s   ø€ Ð1Ð1Ð1˜q�B˜‘FÐ1Ð1Ð1rJ   rd   Úlinelistc                 ó   — g | ]}|¯|‘ŒS rI   rI   )rë   Úts     rK   r™  z"Config._getini.<locals>.<listcomp>i  s   € ÐTÐTÐT˜aÐRSÐT˜ÐTÐTÐTrJ   c                 ó*   — |                       ¦   «         S rR   ©r‡  )rc  s    rK   ú<lambda>z Config._getini.<locals>.<lambda>i  s   € °·²±´€ rJ   rn   rD  Ústring)rç  rš  rn  rv   Ú_get_override_ini_valuerA  r÷  râ   rÅ   rÃ   rÕ   r\   ro  r`   ÚmapÚ
_strtoboolr‡  r¹  )
rS   rê   ÚdescriptionrX   rü  rƒ   Úoverride_valuer·  Úinput_valuesr½  s
            @rK   rµ  zConfig._getiniA  sû  ø€ ð	NØ)-¬Ô)>¸tÔ)DÑ&ˆK˜˜w˜wøÝð 	Nð 	Nð 	NÝÐE¸TÐEÐEÑFÔFÈAÐMøøøøð	Nøøøà×5Ò5°dÑ;Ô;ˆØÐ!ðØœ DÔ)��øÝð ð ð Ø���ðøøøð #ˆEð  �7Š?ˆ?ð ”<Ð+ð ”Ô#Ð#àÔ+Ô/ð õ
 2<¸EÅ3Ñ1GÔ1GÐR�5œ; uÑ-Ô-Ð-ÈUˆLØ1Ð1Ð1Ð1 LÐ1Ñ1Ô1Ð1Ø�VŠ^ˆ^Ý)3°E½3Ñ)?Ô)?ÐJ•5”;˜uÑ%Ô%Ð%ÀUÐJØ�ZÒÐÝ˜%¥Ñ%Ô%ð ØTÐT¥3Ð':Ð':¸E¿KºKÈÑ<MÔ<MÑ#NÔ#NÐTÑTÔTÐTà�Ø�VŠ^ˆ^Ý�c %™jœj×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ø�XÒÐØˆLØˆ\ØˆLà×,Ò,¨T°4¸Ñ?Ô?Ð?s"   ƒ š
<¤7·<ÁA% Á%A4Á3A4rN   c                 óœ  — 	 | j                              ||¦  «        \  }}n# t          $ r Y d S w xY w|j        €J ‚t	          |j        ¦  «        j        }g }|D ]s}t          |t          j        ¦  «        rt	          |¦  «        }n2| 	                    dt          j
        ¦  «        }t          ||z  ¦  «        }|                     |¦  «         Œt|S )Nr·  )rÎ   rp  rn  ry  r   râ   rÕ   ra   rÖ   r9  rb   r*   r÷   )rS   rê   rN   rj  ÚrelrootsÚmodpathÚvaluesÚrelroots           rK   Ú_getconftest_pathlistzConfig._getconftest_pathlistu  sÝ   € ð	Ø Ô.×AÒAÀ$ÈÑMÔM‰MˆC��øÝð 	ð 	ð 	Ø�4�4ð	øøøàŒ|Ð'Ð'Ð'Ý�s”|Ñ$Ô$Ô+ˆØˆØð 	#ð 	#ˆGÝ˜'¥2¤;Ñ/Ô/ð :Ý˜w™-œ-��à!Ÿ/š/¨#­r¬vÑ6Ô6�Ý& w°Ñ'8Ñ9Ô9�Ø�MŠM˜'Ñ"Ô"Ð"Ð"Øˆs   ‚! ¡
/®/c                 ó®   — d }| j         D ]J}	 |                     dd¦  «        \  }}||k    r|}Œ%# t          $ r}t          d|›d�¦  «        |‚d }~ww xY w|S )Nrï   r   z3-o/--override-ini expects option=value style (got: z).)rë  r`   rv   r"   )rS   rê   r·  Ú
ini_configrƒ  Úuser_ini_valuerƒ   s          rK   rÅ  zConfig._get_override_ini_value†  s–   € Øˆð Ô,ð 		+ð 		+ˆJð+Ø&0×&6Ò&6°s¸AÑ&>Ô&>Ñ#��^ð ˜$’;�;Ø*�Eøøõ ð ð ð Ý ØZÈ*ÐZÐZÐZñô àðøøøøðøøøð ˆs   �/¯
A¹AÁAFÚskipc                 ó6  — | j                              ||¦  «        }	 t          | j        |¦  «        }|€|rt	          |¦  «        ‚|S # t          $ rG}|t
          ur|cY d}~S |rddl}|                     d|›d�¦  «         t          d|›�¦  «        |‚d}~ww xY w)ai  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: Default value if no option of that name exists.
        :param skip: If True, raise pytest.skip if option does not exists
            or has a None value.
        Nr   zno z option foundzno option named )	rì  rp   rõ   rå  rö   Únotsetr8   rÔ  rv   )rS   rê   rü  rÔ  r¶  rƒ   r8   s          rK   Ú	getoptionzConfig.getoption—  sÓ   € ð Œ~×!Ò! $¨Ñ-Ô-ˆð	AÝ˜$œ+ tÑ,Ô,ˆCØˆ{˜tˆ{Ý$ TÑ*Ô*Ð*ØˆJøÝð 	Að 	Að 	AØ�fÐ$Ð$Ø������Øð 9Ø���à—’Ð7 $Ð7Ð7Ð7Ñ8Ô8Ð8ÝÐ8°Ð8Ð8Ñ9Ô9¸qÐ@øøøøð	Aøøøs#   �)A Á
BÁ
BÁBÁ!2BÂBc                 ó,   — |                       |¦  «        S )z$Deprecated, use getoption() instead.©r×  ©rS   rê   rN   s      rK   ÚgetvaluezConfig.getvalue¯  s   € à�~Š~˜dÑ#Ô#Ð#rJ   c                 ó0   — |                       |d¬¦  «        S )z-Deprecated, use getoption(skip=True) instead.T)rÔ  rÙ  rÚ  s      rK   ÚgetvalueorskipzConfig.getvalueorskip³  s   € à�~Š~˜d¨ˆ~Ñ.Ô.Ð.rJ   Ú
assertionsÚVERBOSITY_ASSERTIONSÚ
test_casesÚVERBOSITY_TEST_CASESrÔ  Ú_VERBOSITY_INI_DEFAULTÚverbosity_typec                 ó  — | j         j        }t          |t          ¦  «        sJ ‚|€|S t                               |¦  «        }|| j        j        vr|S |                      |¦  «        }|t          j	        k    r|S t          |¦  «        S )a4  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:
        .. code-block:: ini

            # content of pytest.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
        )
rå  ÚverboserÕ   ÚintrÀ   Ú_verbosity_ini_namerç  rš  r4  râ  )rS   rã  Úglobal_levelÚini_nameÚlevels        rK   Úget_verbosityzConfig.get_verbosity½  sŠ   € ð< ”{Ô*ˆÝ˜,­Ñ,Ô,Ð,Ð,Ð,ØÐ!ØÐå×-Ò-¨nÑ=Ô=ˆØ˜4œ<Ô0Ð0Ð0ØÐà—’˜HÑ%Ô%ˆØ•FÔ1Ò1Ð1ØÐå�5‰zŒzÐrJ   c                 ó   — d| › �S )NÚ
verbosity_rI   )rã  s    rK   rç  zConfig._verbosity_ini_nameê  s   € à,˜NÐ,Ð,Ð,rJ   rà  r5   r  c                 ó|   — |                       t                               |¦  «        |dt          j        ¬¦  «         dS )a£  Add a output verbosity configuration option for the given output type.

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

        The value should be retrieved via a call to
        :py:func:`config.get_verbosity(type) <pytest.Config.get_verbosity>`.
        rÄ  )r  rX   rü  N)rC  rÀ   rç  râ  )rà  rã  r  s      rK   Ú_add_verbosity_inizConfig._add_verbosity_iniî  sF   € ð 	�ŠÝ×&Ò& ~Ñ6Ô6ØØÝÔ1ð	 	ñ 	
ô 	
ð 	
ð 	
ð 	
rJ   r	  c                 ó„   — t          ¦   «         s1|dk    rd}nd}|                      t          |¦  «        d¬¦  «         d S d S )NrJ  zRASSERTIONS ARE NOT EXECUTED and FAILING TESTS WILL PASS.  Are you using python -O?z¥assertions not in test modules or plugins will be ignored because assert statements are not executed by the underlying Python interpreter (are you using python -O?)
r<   rd  )Ú_assertion_supportedri  r1   )rS   r	  rl  s      rK   rO  z$Config._warn_about_missing_assertion   sp   € Ý#Ñ%Ô%ð 	Ø�wŠˆð(ð �ð3ð ð ×*Ò*Ý# LÑ1Ô1Øð +ñ ô ð ð ð ð	ð 	rJ   c           	      ó~   — | j         j        D ]/\  }}|                      t          d|›d|› �¦  «        d¬¦  «         Œ0d S )Nzskipped plugin rV   r;   rd  )rÎ   r  ri  r1   )rS   rÃ  rˆ   s      rK   rs  z"Config._warn_about_skipped_plugins  sg   € Ø $Ô 2Ô Bð 	ð 	ÑˆK˜Ø×*Ò*Ý#Ð$L°kÐ$LÐ$LÀsÐ$LÐ$LÑMÔMØð +ñ ô ð ð ð	ð 	rJ   r©  rR   )rP   rÀ   )r‰  r3   rP   N)r-  rÀ   rP   N)T)Qr?   r@   rA   rB   r   ÚdataclassesÚ	dataclassrÉ   rÓ  ÚEnumrÙ  rÈ   r   rT   Úpropertyr   rL  r÷  r   rú  rÿ  rt   r'   r  r   r\   rÝ   r%   rÞ   rã  rä  r  r  Úclassmethodr'  ræ  Úhookimplr5  r   rG  rP  rM  ra  rD  r   r1  ru  r   rÍ  ry  rq  rx  rr  r‚  r�  r  ÚWarningræ  ri  rH  r4  r   r¹  rµ  rÐ  rÅ  rÖ  r×  rÛ  rÝ  rß  r   rÐ  rá  râ  rë  r—   rç  rï  rO  rs  rI   rJ   rK   rÀ   rÀ   Í  su  € € € € € € ðð ð Ø€[Ô $Ð'Ñ'Ô'ð1ð 1ð 1ð 1ð 1ñ 1ô 1ñ (Ô'ñ „Uð1ðB ð  ð  ð  ð  �T”Yñ  ô  ð  ð$ 9=ð	@/ð @/ð @/à*ð@/ð $Ð$4Ô5ð	@/ð
 
ð@/ð @/ð @/ð @/ðD ð˜$ð ð ð ñ „Xðð ð˜ $œð ð ð ñ „Xðð# ¨¨T¨Ô 2ð #°tð #ð #ð #ð #ð
Oð Oð Oð Oðð ð ð ð$ ^ð $ð $ð $ð $ðØ0ðØ8<¸S¼	ðà	ðð ð ð ð8 04ð#ð #à˜}Ô-ð#ð ˜Ô+Ô,ð#ð 
ð	#ð #ð #ð #ð$¨#ð °#ð ð ð ð ð ðð ð ñ „[ðð<ð <ð <ð <ð €X�dÐÑÔð
ð 
ð 
ñ Ôð
ð43˜X cœ]ð 3¨tð 3ð 3ð 3ð 3ð21¨°#¬ð 1¸4ð 1ð 1ð 1ð 1ð($ð $ð $ð $ð(
 4¨¤9ð 
°3ð 
¸4À¼9ð 
ð 
ð 
ð 
ð+ð �3Œið+ð ð	+ð
 ˜”9ð+ð ð+ð ð+ð ð+ð 
ˆt�CŒy˜*Ð$Ô	%ð+ð +ð +ð +ðZ4ð 4˜d 3œið 4°$ð 4À$ð 4ð 4ð 4ð 4ðl €X�dÐÑÔð, 9¨T°6¸6Ð-AÔ#Bð ,ð ,ð ,ñ Ôð,ðð ð ð ð$Lð Lð Lð Lðð ð ð ðBS¨sð S°tð Sð Sð Sð SðK t¨C¤yð Kð Kð Kð Kðð ˜$˜sœ)ð ¨dð ¸dð ð ð ð ð2!°ð !Àcð !Èdð !ð !ð !ð !ðF Sð °ð ¸ð ð ð ð ð ˜3ð  ð  ð  ð  ðH%¨ð %°Cð %ÀÀcÈ4ÐPSÌ9ÀnÔ@Uð %ð %ð %ð %ð2@˜Cð 2@ð 2@ð 2@ð 2@ðh¨#ð °Tð ¸hÀtÈDÄzÔ>Rð ð ð ð ð"¨Cð °H¸S´Mð ð ð ð ð" ,2Àð Að A˜cð A¸ð Að Að Að Að0$ð $˜Sð $ð $ð $ð $ð/ð / 3ð /ð /ð /ð /ð
 #/Ð˜%Ð.Ð.Ñ.à".Ð˜%Ð.Ð.Ñ.Ø$*Ð˜EÐ*Ð*Ñ*ð+ð +¨H°S¬Mð +ÀSð +ð +ð +ð +ðZ ð-¨Cð -°Cð -ð -ð -ñ „\ð-ð ð
 8ð 
¸Sð 
Èð 
ÐPTð 
ð 
ð 
ñ „\ð
ð"°#ð ¸$ð ð ð ð ð*ð ð ð ð ð rJ   c                  ó*   — 	 J ‚# t           $ r Y dS w xY w)NFT)rx  rI   rJ   rK   rñ  rñ    s.   € ðØˆøÝð ð ð Øˆtˆtðøøøs   ‚ „
‘ri   r[  c                 óâ   — t          |¬¦  «        }| j        j        dk    rd|_        n| j        j        dk    rd|_        | j        j        dk    rd|_        n| 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)ri   r[  r…   s      rK   Úcreate_terminal_writerr  &  s|   € õ 
˜TÐ	"Ñ	"Ô	"€Bà„}Ô˜eÒ#Ð#ØˆŒˆØ	ŒÔ	 Ò	$Ð	$ØˆŒà„}Ô# uÒ,Ð,Ø ˆÔÐØ	ŒÔ	%¨Ò	-Ð	-Ø!ˆÔà€IrJ   r¶  c                 óf   — |                       ¦   «         } | dv rdS | dv rdS 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ü  rÀ  ÚtrueÚonÚ1T)rˆ  rý  ÚfÚfalseÚoffÚ0Fzinvalid truth value )Úlowerrv   )r¶  s    rK   rÇ  rÇ  >  sJ   € ð �)Š)‰+Œ+€CØ
Ð2Ð2Ð2ØˆtØ	Ð5Ð	5Ð	5ØˆuåÐ7°Ð7Ð7Ñ8Ô8Ð8rJ   é2   )Úmaxsizer‹  Úescapezwarnings._ActionKindc          	      óz  — d}t          d| › d�¦  «        }|                      d¦  «        }t          |¦  «        dk    rHd}t          dt          |¦  «        › d|› d	�¦  «        }t          |                     |¬
¦  «        ¦  «        ‚t          |¦  «        dk     r(|                     d¦  «         t          |¦  «        dk     °(d„ |D ¦   «         \  }}}	}
}	 t          j        |¦  «        }nH# t          j        $ r6}t          |                     t          |¦  «        ¬
¦  «        ¦  «        d‚d}~ww xY w	 t          |	¦  «        }n[# t          $ rN t          j        ¦   «         }|                     d¬¦  «        }t          |                     |¬
¦  «        ¦  «        d‚w xY w|r|rt          j        |¦  «        }|
r|rt          j        |
¦  «        dz   }
|rb	 t#          |¦  «        }|dk     rt%          d¦  «        ‚n># t$          $ r/}t          |                     d|›d|› �¬
¦  «        ¦  «        d‚d}~ww xY wd}||||
|fS )zíParse a warnings filter string.

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

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

          z8

        This error occurred:

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

              action:message:category:module:line

            For more information please consult: z
            )ÚerrorrŸ  c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S rR   rÂ  )rë   Úss     rK   rW  z'parse_warning_filter.<locals>.<genexpr>{  s*   è è € Ð3MÐ3MÀ!°A·G²G±I´IÐ3MÐ3MÐ3MÐ3MÐ3MÐ3MrJ   Nr  )rl   z\Zr   znumber is negativezinvalid lineno rV   )r   r`   r…  r"   rÚ   r÷   r·   Ú
_getactionÚ_OptionErrorr\   Ú_resolve_warning_categoryr[   r%   Úfrom_currentr}   Úrer  ræ  rv   )r‹  r  Ú__tracebackhide__Úerror_templaterÆ  Údoc_urlr  Úaction_r  Ú	category_ÚmoduleÚlineno_Úactionrƒ   Úcategoryr„   Úexception_textÚlinenos                     rK   Úparse_warning_filterr$  P  sÏ  € ð ÐÝð	ð ð	ð 	ð 	ñ
ô 
€Nð �IŠI�c‰NŒN€EÝ
ˆ5�z„z�A‚~€~àXð 	õ ðÝ! %™jœjðð ð
 3:ðð ð ñ
ô 
ˆõ ˜×.Ò.°UÐ.Ñ;Ô;Ñ<Ô<Ð<å
ˆe‰*Œ*�qŠ.ˆ.Ø�Š�RÑÔÐõ ˆe‰*Œ*�qŠ.ˆ.à3MÐ3MÀuÐ3MÑ3MÔ3MÑ0€GˆW�i ¨ðHÝ)1Ô)<¸WÑ)EÔ)EˆˆøÝÔ ð Hð Hð HÝ˜×.Ò.µS¸±V´VÐ.Ñ<Ô<Ñ=Ô=À4ÐGøøøøðHøøøðPÝ";¸IÑ"FÔ"FˆˆøÝð Pð Pð PÝ Ô-Ñ/Ô/ˆØ!×)Ò)°Ð)Ñ9Ô9ˆÝ˜×.Ò.°^Ð.ÑDÔDÑEÔEÈ4ÐOðPøøøð ð %�6ð %Ý”)˜GÑ$Ô$ˆØð +�&ð +Ý”˜6Ñ"Ô" UÑ*ˆØð 
ð	Ý˜‘\”\ˆFØ˜ŠzˆzÝ Ð!5Ñ6Ô6Ð6ð øåð 	ð 	ð 	ÝØ×%Ò%Ð,N¸gÐ,NÐ,NÈ1Ð,NÐ,NÐ%ÑOÔOñô àðøøøøð	øøøð
 ˆØ�7˜H f¨fÐ4Ð4s=   ÃC) Ã)D.Ã81D)Ä)D.Ä2E ÅAFÇ$G8 Ç8
H1È*H,È,H1r!  c                 ó4  — d}| st           S d| vrddl}| }n,|                      d¦  «        \  }}}t          |dd|g¦  «        }t	          ||¦  «        }t          |t           ¦  «        st          |› d�¦  «        ‚t          t          t                    |¦  «        S )z§
    Copied from warnings._getcategory, but changed so it lets exceptions (specially ImportErrors)
    propagate so we can get access to their tracebacks (#9218).
    Tú.r   Nz is not a Warning subclass)	rù  ÚbuiltinsÚ
rpartitionr¤  rõ   Ú
issubclassr"   r	   r   )r!  r  rì   Úklassr  r1  Úcats          rK   r  r  ˜  s°   € ð
 ÐØð Ýˆà
�(ÐÐØÐÐÐàˆˆà#×.Ò.¨sÑ3Ô3Ñˆ��5Ý�v˜t T¨E¨7Ñ3Ô3ˆÝ
�!�UÑ
Ô
€CÝ�c�7Ñ#Ô#ð =Ý˜CÐ;Ð;Ð;Ñ<Ô<Ð<Ý••W”˜sÑ#Ô#Ð#rJ   r°  r¯  c                 óŽ   — | D ]}t          j        t          |d¬¦  «        Ž  Œ |D ]}t          j        t          |d¬¦  «        Ž  Œ dS )z8Applies pytest-configured filters to the warnings moduleF)r  TN)r·   r¡  r$  )r°  r¯  r‹  s      rK   r¨  r¨  ®  sp   € ð ð Jð JˆÝÔÕ!5°cÀ%Ð!HÑ!HÔ!HÐIÐIÐIàð Ið IˆÝÔÕ!5°cÀ$Ð!GÑ!GÔ!GÐHÐHÐHðIð IrJ   )NN)rP   rÈ   rR   )ƒrB   rã  Úcollections.abcr¯  r?  ró  rÓ  Ú	functoolsr   rb  Úimportlib.metadatar_   ró   ra   Úpathlibr   r  ro  rx   Útextwrapr   r=  r   Útypingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r·   Úpluggyr   r   r   r   r   Úcompatr    Ú
exceptionsr!   r"   Ú	findpathsr#   rù   r$   Ú_pytest._coder%   r&   Ú_pytest._ior'   Ú_pytest.deprecatedÚ_pytest.hookspecÚ_pytest.outcomesr(   r)   Ú_pytest.pathlibr*   r+   r,   r-   r.   r/   Ú_pytest.stashr0   Ú_pytest.warning_typesr1   r2   râ  r3   r5   Ú_pytest._code.coder6   Ú_pytest.terminalr7   rÍ  rª  rø  r  ÚIntEnumr:   r[   rM   Ú_codeÚTracebackEntryrD  rc   r\   ræ  r‰   r”   r–   r�   rŸ   r�  rÌ   r  r¡  rv  rÐ   rÒ   rq   rã   r  rÈ   r>  rš  r²  rÖ  r¾  rÀ   rñ  r  rÇ  rù  r$  r  r¨  rI   rJ   rK   ú<module>rD     s"  ðà @Ð @à €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø €€€à €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à &Ð &Ð &Ð &Ð &Ð &Ø .Ð .Ð .Ð .Ð .Ð .Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø *Ð *Ð *Ð *Ð *Ð *Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ø Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø $Ð $Ð $Ð $Ð $Ð $Ø (Ð (Ð (Ð (Ð (Ð (Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø &Ð &Ð &Ð &Ð &Ð &Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð ð 2Ø$Ð$Ð$Ð$Ð$Ð$Ø"Ð"Ð"Ð"Ð"Ð"Ø2Ð2Ð2Ð2Ð2Ð2Ø1Ð1Ð1Ð1Ð1Ð1ð €ðð ˆ>˜(Ñ#Ô#€Øˆ>˜(Ñ#Ô#€ð ðð ð ð ð ˆtŒ|ñ ô ñ „ðð,Oð Oð Oð Oð O˜Iñ Oô Oð OðXØŒ=Ô'ðXà	ðXð Xð Xð Xð <@Ø=Að6>ð 6>Ø
�5˜˜cœÐ$6Ð6Ô7Ô
8ð6>à�h˜u S¨-Ð%7Ô8Ô9Ô:ð6>ð ˆ3�ˆ=Ôð6>ð 6>ð 6>ð 6>ðr�cð ð ð ð ð$ð ð ð ð ñ ô ð ð�sð  Sð ¨Sð ð ð ð ð˜ð  cð ¨cð ð ð ð ðÐ ðØðàðð ðð ð	ð
 ðð ðð ðð ðð ðð ðð ðð ðð ðð ðð ðð  ð!ð" ð#ð$ ð%ð& ð'ð( ð)ð* ð+ð, ð-ð. ð/ð0 ð1ð2 ð3ð4 ð5ð6 ð7ð €ð< �#�oÑ&Ô&€Ø × Ò �JÑ Ô Ð Ø × Ò Ð)Ñ *Ô *Ð *ð !%Ø=Aðð Ø
�4˜”9Ô
ðà�h˜u S¨-Ð%7Ô8Ô9Ô:ðð ðð ð ð ð2&ð &ð &ð &ð <@Ø=Aðð Ø
�5˜˜cœÐ$6Ð6Ô7Ô
8ðà�h˜u S¨-Ð%7Ô8Ô9Ô:ðð ðð ð ð ð@˜ð  $ð ð ð ð ðØðàðð �S˜#�XŒðð 
ˆ#ˆtˆ)„_ð	ð ð ð ð@ ð_(ð _(ð _(ð _(ð _(˜-ñ _(ô _(ñ „ð_(ðDØ��uÔ'¨¨h°s¬mÐ;Ô<ðà	ˆ#„Yðð ð ð ð,ð ð ð ð ñ ô ð ð
 
ˆ‰Œ€ð>C¨H°S¬Mð >C¸hÀs¼mð >Cð >Cð >Cð >CðB ðLð Lð Lð Lð Lñ Lô Lñ „ðLð^˜dð ð ð ð ð .2ðð ØðØ" 6Ô*ðàðð ð ð ð09�Cð 9˜Dð 9ð 9ð 9ð 9ð$ €�2ÐÑÔðD5Ø	ðD5ØðD5à
Ð! 3¨¨W¬°s¸CÐ?Ô@ðD5ð D5ð D5ñ ÔðD5ðN$¨ð $°°W´ð $ð $ð $ð $ð,
IØ˜S”Mð
IØ4<¸S´Mð
Ià	ð
Ið 
Ið 
Ið 
Ið 
Ið 
IrJ   