§
    øÛgfÅ  ã                   óü  — 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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mZmZ  ed¦  «        Z ed¦  «        Z G d„ de¦  «        Zd0d„Z G d„ d	¦  «        Z G d
„ de¦  «        Zg Zd                     ¦   «         Z ee¦  «        Ze                     d¦  «         d„ Zd„ Zd„ Z d0d„Z! G d„ de¦  «        Z" G d„ d¦  «        Z# G d„ de¦  «        Z$ G d„ d¦  «        Z% G d„ d¦  «        Z& G d„ dej'        ¦  «        Z( G d„ dej)        ¦  «        Z*d „ Z+ G d!„ d"e,¦  «        Z- G d#„ d$¦  «        Z. e.¦   «         Z/d%Z0 G d&„ d'e,¦  «        Z1e2fd(„Z3d1d)„Z4d*„ Z5d+„ Z6d1d,„Z7d-„ Z8d.„ Z9d/„ Z:dS )2z< command line options, ini-file and conftest.py processing. é    N)ÚPluginManagerÚHookimplMarkerÚHookspecMarkerÚpytestc                   ó   — e Zd Zd„ Zd„ ZdS )ÚConftestImportFailurec                 óZ   — t                                | ||¦  «         || _        || _        d S ©N)Ú	ExceptionÚ__init__ÚpathÚexcinfo)Úselfr   r   s      úD/granary/edev/quantum/lib/python3.11/site-packages/_pytest/config.pyr   zConftestImportFailure.__init__   s,   € Ý×Ò˜4  wÑ/Ô/Ð/ØˆŒ	ØˆŒˆˆó    c                 ó    — | j         \  }}}t          j        |¦  «        }t          |¦  «        dz   d                     |dd …         ¦  «        z   S )Nú
Ú é   )r   Ú	tracebackÚ	format_tbÚreprÚjoin)r   ÚetypeÚevalueÚetbÚ	formatteds        r   Ú__str__zConftestImportFailure.__str__   sJ   € Ø!œ\Ñˆˆv�sÝÔ'¨Ñ,Ô,ˆ	å�F‰|Œ|˜dÑ" R§W¢W¨Y°q°r°r¬]Ñ%;Ô%;Ñ;Ð;r   N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s2   € € € € € ðð ð ð
<ð <ð <ð <ð <r   r   c                 ó²  — 	 	 t          | |¦  «        }	 |j                             ¦   «          |j                             |¬¦  «        |                     ¦   «          S # |                     ¦   «          w xY w# t          $ r’}t          j         	                    t          j        ¦  «        }t          j        |j        Ž D ]+}|                     |                     ¦   «         d¬¦  «         Œ,|                     d|j        z  d¬¦  «         Y d}~dS d}~ww xY w# t$          $ r8}|j        D ]%}t          j                             d|›d�¦  «         Œ&Y d}~dS d}~ww xY w)	zÙ return exit code, after performing an in-process test run.

    :arg args: list of command line arguments.

    :arg plugins: list of plugin objects to be auto-registered during
                  initialization.
    ©ÚconfigT)ÚredzERROR: could not load %s
Né   zERROR: r   )Ú_prepareconfigÚpluginmanagerÚcheck_pendingÚhookÚpytest_cmdline_mainÚ_ensure_unconfigurer   ÚpyÚioÚTerminalWriterÚsysÚstderrr   Úformat_exceptionr   ÚlineÚrstripr   Ú
UsageErrorÚargsÚwrite)r7   Úpluginsr%   ÚeÚtwr4   Úmsgs          r   Úmainr=   $   sw  € ðð	-Ý# D¨'Ñ2Ô2ˆFð-ØÔ$×2Ò2Ñ4Ô4Ð4Ø”{×6Ò6¸fÐ6ÑEÔEà×*Ò*Ñ,Ô,Ð,Ð,ø�×*Ò*Ñ,Ô,Ð,Ð,øøøøõ %ð 	ð 	ð 	Ý”×%Ò%¥c¤jÑ1Ô1ˆBÝ!Ô2°A´IÐ>ð 1ð 1�Ø—’˜Ÿš™œ¨4�Ñ0Ô0Ð0Ð0Ø�GŠGÐ0°A´FÑ;ÀˆGÑFÔFÐFØ�1�1�1�1�1øøøøð	øøøøõ ð ð ð Ø”6ð 	4ð 	4ˆCÝŒJ×ÒÐ¨S¨S¨SÐ2Ñ3Ô3Ð3Ð3ØˆqˆqˆqˆqˆqøøøøðøøøsM   ƒA5 ”3A ÁD ÁA2Á2D Á5
DÁ?BDÄD ÄDÄD Ä
EÄ-EÅEc                   ó$   — e Zd Z ee¦  «        ZdS )ÚcmdlineN)r   r    r!   Ústaticmethodr=   r"   r   r   r?   r?   @   s   € € € € € Øˆ<˜ÑÔ€D€D€Dr   r?   c                   ó   — e Zd ZdZdS )r6   z$ error in pytest usage or invocationN)r   r    r!   Ú__doc__r"   r   r   r6   r6   C   s   € € € € € Ø.Ð.Ð.Ð.r   r6   z×mark main terminal runner python fixtures debugging unittest capture skipping tmpdir monkeypatch recwarn pastebin helpconfig nose assertion junitxml resultlog doctest cacheprovider freeze_support setuponly setupplanÚpytesterc                  ód   — t           rJ ‚t                                t          ¦   «         ¦  «         d S r
   )Ú_preinitÚappendÚ
get_configr"   r   r   Ú_preloadpluginsrH   R   s*   € ÝÐÐÐÝ‡O‚O•J‘L”LÑ!Ô!Ð!Ð!Ð!r   c                  óÀ   — t           rt                                d¦  «        S t          ¦   «         } t          | ¦  «        }t          D ]}|                      |¦  «         Œ|S ©Nr   )rE   ÚpopÚPytestPluginManagerÚConfigÚdefault_pluginsÚimport_plugin)r)   r%   Úspecs      r   rG   rG   V   s]   € Ýð Ý�|Š|˜A‰ŒÐå'Ñ)Ô)€MÝ�MÑ"Ô"€FÝð *ð *ˆØ×#Ò# DÑ)Ô)Ð)Ð)Ø€Mr   c                  ó(   — t          ¦   «         j        S )zú
    Obtain a new instance of the
    :py:class:`_pytest.config.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.
    )rG   r)   r"   r   r   Úget_plugin_managerrR   `   s   € õ ‰<Œ<Ô%Ð%r   c                 óø  — d }| €t           j        dd …         } n¤t          | t          j        j        ¦  «        rt          | ¦  «        g} ntt          | t          t          f¦  «        sXt          | t          ¦  «        st          d| ›�¦  «        ‚t          j        | t           j        dk    ¬¦  «        } ddlm} |j        }t!          ¦   «         }|j        }	 |rO|D ]L}t          |t          j        j        ¦  «        r|                     |¦  «         Œ7|                     |¦  «         ŒM|r|                     d|¦  «         |j                             || ¬¦  «        S # t2          $ r |                     ¦   «          ‚ w xY w)	Né   znot a string or argument list: Úwin32)Úposixr   )Ú
deprecatedÚC1)r)   r7   )r1   ÚargvÚ
isinstancer.   r   ÚlocalÚstrÚtupleÚlistÚ
ValueErrorÚshlexÚsplitÚplatformÚ_pytestrW   ÚMAIN_STR_ARGSrG   r)   ÚbuiltinÚ_basestringÚconsider_pluginargÚregisterÚwarnr+   Úpytest_cmdline_parseÚBaseExceptionr-   )r7   r9   ÚwarningrW   r%   r)   Úplugins          r   r(   r(   k   s˜  € Ø€GØ€|ÝŒx˜˜˜Œ|ˆˆÝ	�D�"œ'œ-Ñ	(Ô	(ð +Ý�D‘	”	ˆ{ˆˆÝ˜�u¥d˜mÑ,Ô,ð +Ý˜$¥Ñ$Ô$ð 	LÝ�*ÀDÀDÐJÑKÔKÐKÝŒ{˜4¥s¤|°wÒ'>Ð?Ñ?Ô?ˆØ&Ð&Ð&Ð&Ð&Ð&ØÔ*ˆÝ‰\Œ\€FØÔ(€MðØð 	3Ø!ð 3ð 3�Ý˜f¥b¤jÔ&<Ñ=Ô=ð 3Ø!×4Ò4°VÑ<Ô<Ð<Ð<à!×*Ò*¨6Ñ2Ô2Ð2Ð2Øð 	'Ø�KŠK˜˜gÑ&Ô&Ð&ØÔ!×6Ò6Ø+°$ð 7ñ 8ô 8ð 	8øåð ð ð Ø×"Ò"Ñ$Ô$Ð$Øðøøøs   ÃBE Å E9c                   ó²   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ fd„Zˆ fd„Zˆ fd„Zdˆ fd„	Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )rL   a(  
    Overwrites :py:class:`pluggy.PluginManager` to add pytest-specific
    functionality:

    * loading plugins from the command line, ``PYTEST_PLUGIN`` env variable and
      ``pytest_plugins`` global variables found in plugins being loaded;
    * ``conftest.py`` loading during start-up;
    c                 óÜ  •— t          t          | ¦  «                             dd¬¦  «         t          ¦   «         | _        i | _        i | _        d | _        d| _        t          ¦   «         | _	        |  
                    t          j        ¦  «         |                      | ¦  «         t          j                             d¦  «        rˆt"          j        }t'          |dd¦  «        }	 t(          j                             ||¬¦  «        }n# t.          $ r Y nw xY w| j        j                             |j        ¦  «         |                      ¦   «          t          j                             ¦   «         | _        d S )	Nr   Úpytest_)Ú
implprefixFÚPYTEST_DEBUGÚencodingÚutf8)rs   ) ÚsuperrL   r   ÚsetÚ_conftest_pluginsÚ_path2confmodsÚ_conftestpath2modÚ_confcutdirÚ_noconftestÚ_duplicatepathsÚadd_hookspecsrc   Úhookspecrh   ÚosÚenvironÚgetr1   r2   Úgetattrr.   r/   Údupfiler   ÚtraceÚrootÚ	setwriterr8   Úenable_tracingÚ	assertionÚDummyRewriteHookÚrewrite_hook)r   Úerrrs   Ú	__class__s      €r   r   zPytestPluginManager.__init__’   sA  ø€ ÝÕ! 4Ñ(Ô(×1Ò1°(ÀyÐ1ÑQÔQÐQÝ!$¡¤ˆÔð !ˆÔØ!#ˆÔØˆÔØ ˆÔÝ"™uœuˆÔà×Ò�7Ô+Ñ,Ô,Ð,Ø�Š�dÑÔÐÝŒ:�>Š>˜.Ñ)Ô)ð 	"Ý”*ˆCÝ˜s J°Ñ7Ô7ˆHðÝ”e—m’m C°(�mÑ;Ô;��øÝð ð ð Ø�ðøøøàŒJŒO×%Ò% c¤iÑ0Ô0Ð0Ø×ÒÑ!Ô!Ð!õ $Ô-×>Ò>Ñ@Ô@ˆÔÐÐs   Ã!D Ä
DÄDc                 óÚ   — t          dt          j                             t	          j        d¦  «        ¦  «        dd¬¦  «        }|                      |¦  «         |                      |¦  «        S )zi
        .. deprecated:: 2.8

        Use :py:meth:`pluggy.PluginManager.add_hookspecs` instead.
        ÚI2rT   NzHuse pluginmanager.add_hookspecs instead of deprecated addhooks() method.©ÚcodeÚ
fslocationÚnodeidÚmessage)Údictrc   Ú_codeÚgetfslinenor1   Ú	_getframeÚ_warnr}   )r   Úmodule_or_classrl   s      r   ÚaddhookszPytestPluginManager.addhooks¬   sj   € õ ˜DÝ")¤-×";Ò";½C¼MÈ!Ñ<LÔ<LÑ"MÔ"MØ"ð ?ð@ñ @ô @ˆð
 	�
Š
�7ÑÔÐØ×!Ò! /Ñ2Ô2Ð2r   c                 ó8  •— |                      d¦  «        sd S |dk    s|                      d¦  «        rd S t          ||¦  «        }t          t          | ¦  «                             ||¦  «        }|�)dD ]&}|                     |t          ||¦  «        ¦  «         Œ'|S )Nrp   Úpytest_pluginsÚpytest_funcarg__)ÚtryfirstÚtrylastÚoptionalhookÚhookwrapper)Ú
startswithr‚   ru   rL   Úparse_hookimpl_optsÚ
setdefaultÚhasattr)r   rm   ÚnameÚmethodÚoptsrŒ   s        €r   r£   z'PytestPluginManager.parse_hookimpl_optsº   s«   ø€ ð �Š˜yÑ)Ô)ð 	ØˆFàÐ#Ò#Ð# t§¢Ð7IÑ'JÔ'JÐ#ØˆFå˜ Ñ&Ô&ˆÝÕ(¨$Ñ/Ô/×CÒCÀFÈDÑQÔQˆØÐØNð =ð =�Ø—’ ¥g¨f°dÑ&;Ô&;Ñ<Ô<Ð<Ð<Øˆr   c                 óê   •— t          t          | ¦  «                             ||¦  «        }|€Ft          ||¦  «        }|                     d¦  «        r!t          |d¦  «        t          |d¦  «        dœ}|S )Nrp   ÚfirstresultÚhistoric)rª   r«   )ru   rL   Úparse_hookspec_optsr‚   r¢   r¥   )r   r™   r¦   r¨   r§   rŒ   s        €r   r¬   z'PytestPluginManager.parse_hookspec_optsË   s€   ø€ ÝÕ(¨$Ñ/Ô/×CÒCØ0?ÀñGô Gˆàˆ<Ý˜_¨dÑ3Ô3ˆFØ�Š˜yÑ)Ô)ð AÝ'.¨v°}Ñ'EÔ'EÝ$+¨F°JÑ$?Ô$?ðAð A�àˆr   c                 ó  •— t          t          | ¦  «                             ||¦  «         d|j        v rVt          j                             |j        ¦  «        }t          d|d d|j	        z  ¬¦  «        }|  
                    |¦  «         d S d S )NÚ__multicall__ÚI1z.%r hook uses deprecated __multicall__ argumentr�   )ru   rL   Ú_verify_hookÚargnamesrc   r•   r–   Úfunctionr”   r¦   r˜   )r   r+   Ú
hookmethodÚfslinenorl   rŒ   s        €r   r°   z PytestPluginManager._verify_hookÕ   s—   ø€ ÝÕ! 4Ñ(Ô(×5Ò5°d¸JÑGÔGÐGØ˜jÔ1Ð1Ð1Ý”}×0Ò0°Ô1DÑEÔEˆHÝ Ø&.Ø"&ð$.Ø15´ñ$<ð=ñ =ô =ˆGð
 �JŠJ�wÑÔÐÐÐð 2Ð1r   Nc                 ó¼   •— t          t          | ¦  «                             ||¦  «        }|r/| j        j                             t          || ¬¦  «        ¬¦  «         |S )N)rm   Úmanager©Úkwargs)ru   rL   rh   r+   Úpytest_plugin_registeredÚcall_historicr”   )r   rm   r¦   ÚretrŒ   s       €r   rh   zPytestPluginManager.registerà   sf   ø€ ÝÕ'¨Ñ.Ô.×7Ò7¸ÀÑEÔEˆØð 	@ØŒIÔ.×<Ò<Ý!¨¸Ð>Ñ>Ô>ð =ñ @ô @ð @àˆ
r   c                 ó,   — |                       |¦  «        S r
   )Ú
get_plugin©r   r¦   s     r   Ú	getpluginzPytestPluginManager.getpluginç   s   € à�Š˜tÑ$Ô$Ð$r   c                 óF   — t          |                      |¦  «        ¦  «        S )z<Return True if the plugin with the given name is registered.)Úboolr½   r¾   s     r   Ú	haspluginzPytestPluginManager.haspluginë   s   € å�D—O’O DÑ)Ô)Ñ*Ô*Ð*r   c                 ó^   — |                      dd¦  «         |                      dd¦  «         d S )NÚmarkersz|tryfirst: mark a hook implementation function such that the plugin machinery will try to call it first/as early as possible.zytrylast: mark a hook implementation function such that the plugin machinery will try to call it last/as late as possible.)Úaddinivalue_line)r   r%   s     r   Úpytest_configurez$PytestPluginManager.pytest_configureï   sX   € ð 	×Ò 	ðOñ	Pô 	Pð 	Pð 	×Ò 	ðMñ	Nô 	Nð 	Nð 	Nð 	Nr   c                 ó‚   — t          |t          ¦  «        r|nd|d d dœ}| j        j                             |¬¦  «         d S )Nr¯   ©r�   r“   r‘   r’   r·   )rZ   r”   r+   Úpytest_logwarningrº   )r   r“   r¸   s      r   r˜   zPytestPluginManager._warnù   sT   € Ý& wµÑ5Ô5ð 
��ØØØØð	<
ð <
ˆð 	Œ	Ô#×1Ò1¸Ð1Ñ@Ô@Ð@Ð@Ð@r   c                 óÞ  — t           j                             ¦   «         }|j        r|                     |j        d¬¦  «        nd| _        |j        | _        |j        }d}|D ]s}t          |¦  «        }| 
                    d¦  «        }|dk    r
|d|…         }|                     |d¬¦  «        }t          |¦  «        r|                      |¦  «         d}Œt|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.
        T©ÚabsNFz::éÿÿÿÿrT   )r.   r   r[   Ú
confcutdirr   rz   Ú
noconftestr{   Úfile_or_dirr\   ÚfindÚexistsÚ_try_load_conftest)r   Ú	namespaceÚcurrentÚ	testpathsÚfoundanchorr   ÚiÚanchors           r   Ú_set_initial_conftestsz*PytestPluginManager._set_initial_conftests  s  € õ ”'—-’-‘/”/ˆà#,Ô#7ðB˜7Ÿ<š<¨	Ô(<À$˜<ÑGÔGÐGØ=Að 	Ôà$Ô/ˆÔØÔ)ˆ	ØˆØð 		#ð 		#ˆDÝ�t‘9”9ˆDà—	’	˜$‘”ˆAØ�BŠwˆwØ˜B˜Q˜B”x�Ø—\’\ $¨A�\Ñ.Ô.ˆFÝ�f‰~Œ~ð #Ø×'Ò'¨Ñ/Ô/Ð/Ø"�øØð 	-Ø×#Ò# GÑ,Ô,Ð,Ð,Ð,ð	-ð 	-r   c                 óæ   — |                       |¦  «         |                     d¬¦  «        rC|                     d¦  «        D ]/}|                     d¬¦  «        r|                       |¦  «         Œ.d S d S )NrT   )Údirztest*)Ú_getconftestmodulesÚcheckÚlistdir)r   rÙ   Úxs      r   rÓ   z&PytestPluginManager._try_load_conftest   s„   € Ø× Ò  Ñ(Ô(Ð(à�<Š<˜Aˆ<ÑÔð 	0Ø—^’^ GÑ,Ô,ð 0ð 0�Ø—7’7˜q�7‘>”>ð 0Ø×,Ò,¨QÑ/Ô/Ð/øð	0ð 	0ð0ð 0r   c                 óü  — | j         rg S 	 | j        |         S # t          $ rÙ |                     ¦   «         r(|                      |                     ¦   «         ¦  «        }nŽg }|                     ¦   «         D ]w}| j        r| j                             |¦  «        rŒ$| 	                    d¦  «        }|                     ¦   «         r*|  
                    |¦  «        }|                     |¦  «         Œx|| j        |<   |cY S w xY w)Nzconftest.py)r{   rx   ÚKeyErrorÚisfilerÝ   ÚdirpathÚpartsrz   Úreltor   Ú_importconftestrF   )r   r   ÚclistÚparentÚconftestpathÚmods         r   rÝ   z'PytestPluginManager._getconftestmodules(  s  € ØÔð 	ØˆIð	ØÔ& tÔ,Ð,øÝð 	ð 	ð 	Ø�{Š{‰}Œ}ð *Ø×0Ò0°·²±´Ñ@Ô@��ð
 �Ø"Ÿjšj™lœlð *ð *�FØÔ'ð !¨DÔ,<×,BÒ,BÀ6Ñ,JÔ,Jð !Ø Ø#)§;¢;¨}Ñ#=Ô#=�LØ#×*Ò*Ñ,Ô,ð *Ø"×2Ò2°<Ñ@Ô@˜ØŸš SÑ)Ô)Ð)øà(-ˆDÔ Ñ%ØˆLˆLˆLð#	øøøs   ‹ ˜C C;Ã:C;c                 ó¶   — |                       |¦  «        }t          |¦  «        D ]&}	 |t          ||¦  «        fc S # t          $ r Y Œ#w xY wt	          |¦  «        ‚r
   )rÝ   Úreversedr‚   ÚAttributeErrorrâ   )r   r¦   r   Úmodulesrë   s        r   Ú_rget_with_confmodz&PytestPluginManager._rget_with_confmod@  sx   € Ø×*Ò*¨4Ñ0Ô0ˆÝ˜GÑ$Ô$ð 	ð 	ˆCðØ�G C¨Ñ.Ô.Ð.Ð.Ð.Ð.øÝ!ð ð ð Ø�ðøøøå�t‰nŒnÐs   ¨<¼
A	ÁA	c                 ó¬  — 	 | j         |         S # t          $ �r9 |                     ¦   «         }|€t          |j        ¦  «         	 |                     ¦   «         }n/# t          $ r" t          |t          j	        ¦   «         ¦  «        ‚w xY w| j
                             |¦  «         || j         |<   |                     ¦   «         }|| j        v rW| j                             ¦   «         D ]=\  }}|r|                     |¦  «        s||k    r||vsJ ‚|                     |¦  «         Œ>|                      d|z  ¦  «         |                      |¦  «         |cY S w xY w)Nzloaded conftestmodule %r)ry   râ   Ú	pypkgpathÚ_ensure_removed_sysmoduleÚpurebasenameÚpyimportr   r   r1   Úexc_inforw   Úaddrä   rx   Úitemsræ   rF   r„   Úconsider_conftest)r   rê   Úpkgpathrë   rä   r   Úmodss          r   rç   z#PytestPluginManager._importconftestI  s„  € ð	ØÔ)¨,Ô7Ð7øÝð 	ñ 	ð 	Ø"×,Ò,Ñ.Ô.ˆGØˆÝ)¨,Ô*CÑDÔDÐDðJØ"×+Ò+Ñ-Ô-��øÝð Jð Jð JÝ+¨L½#¼,¹.¼.ÑIÔIÐIðJøøøð Ô"×&Ò& sÑ+Ô+Ð+Ø36ˆDÔ" <Ñ0Ø"×*Ò*Ñ,Ô,ˆGØ˜$Ô-Ð-Ð-Ø"&Ô"5×";Ò";Ñ"=Ô"=ð )ð )‘J�D˜$Øð ) §
¢
¨7Ñ 3Ô 3ð )°t¸w²°Ø"¨$˜˜˜˜ØŸš CÑ(Ô(Ð(øØ�JŠJÐ1°CÑ8Ñ9Ô9Ð9Ø×"Ò" 3Ñ'Ô'Ð'ØˆJˆJˆJð'	øøøs(   ‚ �5EÁAÁEÁ,BÂC
EÅEc                 óx   — t          ||dd …         ¦  «        D ] \  }}|dk    r|                      |¦  «         Œ!d S )NrT   z-p)Úziprg   )r   r7   Úopt1Úopt2s       r   Úconsider_preparsez%PytestPluginManager.consider_preparsef  sO   € Ý˜T 4¨¨¨¤8Ñ,Ô,ð 	.ð 	.‰IˆD�Ø�tŠ|ˆ|Ø×'Ò'¨Ñ-Ô-Ð-øð	.ð 	.r   c                 óú   — |                      d¦  «        rP|dd …         }|                      |¦  «         |                      d¦  «        s|                      d|z   ¦  «         d S d S |                      |¦  «         d S )Nzno:é   rp   )r¢   Úset_blockedrO   )r   Úargr¦   s      r   rg   z&PytestPluginManager.consider_pluginargk  s�   € Ø�>Š>˜%Ñ Ô ð 	$Ø�q�r�r”7ˆDØ×Ò˜TÑ"Ô"Ð"Ø—?’? 9Ñ-Ô-ð 3Ø× Ò  ¨TÑ!1Ñ2Ô2Ð2Ð2Ð2ð3ð 3ð ×Ò˜sÑ#Ô#Ð#Ð#Ð#r   c                 ól   — |                       ||j        ¬¦  «        r|                      |¦  «         d S d S )N)r¦   )rh   Ú__file__Úconsider_module)r   Úconftestmodules     r   rù   z%PytestPluginManager.consider_conftestt  sA   € Ø�=Š=˜¨nÔ.Eˆ=ÑFÔFð 	1Ø× Ò  Ñ0Ô0Ð0Ð0Ð0ð	1ð 	1r   c                 ój   — |                       t          j                             d¦  «        ¦  «         d S )NÚPYTEST_PLUGINS)Ú_import_plugin_specsr   r€   r�   ©r   s    r   Úconsider_envz PytestPluginManager.consider_envx  s+   € Ø×!Ò!¥"¤*§.¢.Ð1AÑ"BÔ"BÑCÔCÐCÐCÐCr   c                 ó    — t          |dg ¦  «        }t          |t          ¦  «        r|g} | j        j        |Ž  |                      |¦  «         d S )Nrœ   )r‚   rZ   r\   rŠ   Úmark_rewriter  )r   rë   r9   s      r   r  z#PytestPluginManager.consider_module{  sZ   € Ý˜#Ð/°Ñ4Ô4ˆÝ�g�sÑ#Ô#ð 	 Ø�iˆGØ&ˆÔÔ&¨Ð0Ð0Ø×!Ò! 'Ñ*Ô*Ð*Ð*Ð*r   c                 ó–   — |rDt          |t          ¦  «        r|                     d¦  «        }|D ]}|                      |¦  «         Œd S d S )Nú,)rZ   r\   ra   rO   )r   rP   Úimport_specs      r   r  z(PytestPluginManager._import_plugin_specs‚  se   € Øð 	0Ý˜$¥Ñ$Ô$ð 'Ø—z’z #‘”�Ø#ð 0ð 0�Ø×"Ò" ;Ñ/Ô/Ð/Ð/ð		0ð 	0ð0ð 0r   c           
      óœ  — t          |t          ¦  «        sJ ‚|                      |¦  «        �d S |t          v rd|z   }n|}	 t	          |¦  «         t
          j        |         }|                      ||¦  «         |                      |¦  «         d S # t          $ rP}t          d|›d|›�¦  «        }dD ]1}t          ||¦  «        rt          ||t          ||¦  «        ¦  «         Œ2|‚d }~wt          $ rZ}dd l}t          |d¦  «        rt          ||j        j        ¦  «        s‚ |                      d|›d|j        ›�¦  «         Y d }~d S d }~ww xY w)	Nz_pytest.zError importing plugin "z": )r¦   r   r   Úskipzskipped plugin ú: )rZ   r\   r½   Úbuiltin_pluginsÚ
__import__r1   rï   rh   r  ÚImportErrorr¥   Úsetattrr‚   r   r   r  r˜   r<   )r   ÚmodnameÚ
importspecrë   r:   Únew_excÚattrr   s           r   rO   z!PytestPluginManager.import_plugin‰  s�  € õ
 ˜'¥3Ñ'Ô'Ð'Ð'Ð'Ø�?Š?˜7Ñ#Ô#Ð/ØˆFØ•oÐ%Ð%Ø# gÑ-ˆJˆJà ˆJð	&Ý�zÑ"Ô"Ð"õ ”+˜jÔ)ˆCØ�MŠM˜#˜wÑ'Ô'Ð'Ø× Ò  Ñ%Ô%Ð%Ð%Ð%øõ ð 	ð 	ð 	Ý!�kÀwÀwÀwÐPQÐPQÐ"RÑSÔSˆGà(ð =ð =�Ý˜1˜dÑ#Ô#ð =Ý˜G T­7°1°dÑ+;Ô+;Ñ<Ô<Ð<øØˆMøøøøÝð 	Dð 	Dð 	DØˆMˆMˆMÝ˜6 6Ñ*Ô*ð µ*¸QÀÄÔ@UÑ2VÔ2Vð ØØ�JŠJˆJ°'°'°'¸1¼5¸5ÐBÑCÔCÐCÐCÐCÐCÐCÐCÐCøøøøð		Døøøs&   ÁB Â
EÂAC$Ã$EÃ1AEÅEr
   )r   r    r!   rB   r   rš   r£   r¬   r°   rh   r¿   rÂ   rÆ   r˜   rÚ   rÓ   rÝ   rð   rç   r   rg   rù   r  r  r  rO   Ú__classcell__)rŒ   s   @r   rL   rL   ‰   s¸  ø€ € € € € ðð ðAð Að Að Að Að43ð 3ð 3ðð ð ð ð ð"ð ð ð ð ð	 ð 	 ð 	 ð 	 ð 	 ðð ð ð ð ð ð%ð %ð %ð+ð +ð +ðNð Nð NðAð Að Að-ð -ð -ð60ð 0ð 0ðð ð ð0ð ð ðð ð ð:.ð .ð .ð
$ð $ð $ð1ð 1ð 1ðDð Dð Dð+ð +ð +ð0ð 0ð 0ð&ð &ð &ð &ð &ð &ð &r   rL   c                   ó\   — e Zd ZdZdd„Zd„ Zdd„Zd„ Zdd„Zd	„ Z	dd
„Z
dd„Zdd„Zdd„ZdS )ÚParserzÅ Parser for command line arguments and ini-file values.

    :ivar extra_info: dict of generic param -> value to display in case
        there's an error processing the command line arguments.
    Nc                 ó†   — t          d| ¬¦  «        | _        g | _        || _        || _        i | _        g | _        i | _        d S )Nzcustom options©Úparser)ÚOptionGroupÚ
_anonymousÚ_groupsÚ_processoptÚ_usageÚ_inidictÚ	_ininamesÚ
extra_info)r   ÚusageÚ
processopts      r   r   zParser.__init__°  sF   € Ý%Ð&6¸tÐDÑDÔDˆŒØˆŒØ%ˆÔØˆŒØˆŒØˆŒØˆŒˆˆr   c                 óT   — | j         r|j        r|                       |¦  «         d S d S d S r
   )r'  Údest)r   Úoptions     r   ÚprocessoptionzParser.processoption¹  sE   € ØÔð 	)ØŒ{ð )Ø× Ò  Ñ(Ô(Ð(Ð(Ð(ð	)ð 	)ð)ð )r   r   c                 óê   — | j         D ]}|j        |k    r|c S Œt          ||| ¬¦  «        }d}t          | j         ¦  «        D ]\  }}|j        |k    r nŒ| j                              |dz   |¦  «         |S )aØ   get (or create) a named option Group.

        :name: name of the option group.
        :description: long description for --help output.
        :after: name of other group, used for ordering --help output.

        The returned group object has an ``addoption`` method with the same
        signature as :py:func:`parser.addoption
        <_pytest.config.Parser.addoption>` but will be shown in the
        respective group in the output of ``pytest. --help``.
        r"  r   rT   )r&  r¦   r$  Ú	enumerateÚinsert)r   r¦   ÚdescriptionÚafterÚgrouprØ   Úgrps          r   ÚgetgroupzParser.getgroup¾  sž   € ð ”\ð 	ð 	ˆEØŒz˜TÒ!Ð!Ø���ð "å˜D +°dÐ;Ñ;Ô;ˆØˆÝ ¤Ñ-Ô-ð 	ð 	‰FˆAˆsØŒx˜5Ò Ð Ø�ð !àŒ×Ò˜A˜a™C Ñ'Ô'Ð'Øˆr   c                 ó*   —  | j         j        |i |¤Ž dS )a   register a command line option.

        :opts: option names, can be short or long options.
        :attrs: same attributes which the ``add_option()`` function of the
           `argparse library
           <http://docs.python.org/2/library/argparse.html>`_
           accepts.

        After command line parsing options are available on the pytest config
        object via ``config.option.NAME`` where ``NAME`` is usually set
        by passing a ``dest`` attribute, for example
        ``addoption("--long", dest="NAME", ...)``.
        N)r%  Ú	addoption)r   r¨   Úattrss      r   r;  zParser.addoptionÕ  s$   € ð 	"ˆŒÔ! 4Ð1¨5Ð1Ð1Ð1Ð1Ð1r   c                 ó¬   — ddl m} |                      ¦   «         | _         || j        ¦  «         | j                             d„ |D ¦   «         |¬¦  «        S )Nr   )Útry_argcompletec                 ó,   — g | ]}t          |¦  «        ‘ŒS r"   ©r\   ©Ú.0rà   s     r   ú
<listcomp>z Parser.parse.<locals>.<listcomp>é  s   € Ð)?Ð)?Ð)?°Q­#¨a©&¬&Ð)?Ð)?Ð)?r   ©rÔ   )Ú_pytest._argcompleter>  Ú
_getparserÚ	optparserÚ
parse_args)r   r7   rÔ   r>  s       r   ÚparsezParser.parseå  sa   € Ø8Ð8Ð8Ð8Ð8Ð8ØŸšÑ*Ô*ˆŒØˆ˜œÑ'Ô'Ð'ØŒ~×(Ò(Ð)?Ð)?¸$Ð)?Ñ)?Ô)?È9Ð(ÑUÔUÐUr   c                 óz  — ddl m} t          | | j        ¦  «        }| j        | j        gz   }|D ]k}|j        rb|j        p|j        }| 	                    |¦  «        }|j        D ]7}| 
                    ¦   «         }|                     ¦   «         }	 |j        |i |	¤Ž Œ8Œl||                     t          d¬¦  «        _        |S )Nr   )ÚfilescompleterÚ*)Únargs)rE  rK  ÚMyOptionParserr+  r&  r%  Úoptionsr5  r¦   Úadd_argument_groupÚnamesr<  Úadd_argumentÚFILE_OR_DIRÚ	completer)
r   rK  rG  Úgroupsr7  ÚdescÚarggroupr0  ÚnÚas
             r   rF  zParser._getparserë  sÙ   € Ø7Ð7Ð7Ð7Ð7Ð7Ý" 4¨¬Ñ9Ô9ˆ	Ø” ¤Ð 1Ñ1ˆØð 	3ð 	3ˆEØŒ}ð 3ØÔ(Ð6¨E¬J�Ø$×7Ò7¸Ñ=Ô=�Ø#œmð 3ð 3�FØŸš™œ�AØŸš™œ�AØ)�HÔ)¨1Ð2°Ð2Ð2Ð2Ð2øàAOˆ	×Ò�{°#ÐÑ6Ô6Ô@ØÐr   c                 óº   — |                       ||¬¦  «        }|j                             ¦   «         D ]\  }}t          |||¦  «         Œt	          |t
          ¦  «        S )NrD  )rI  Ú__dict__rø   r  r‚   rS  )r   r7   r0  rÔ   Úparsedoptionr¦   Úvalues          r   Úparse_setoptionzParser.parse_setoptionû  s^   € Ø—z’z $°)�zÑ<Ô<ˆØ'Ô0×6Ò6Ñ8Ô8ð 	)ð 	)‰KˆD�%Ý�F˜D %Ñ(Ô(Ð(Ð(Ý�|¥[Ñ1Ô1Ð1r   c                 ó<   — |                       ||¬¦  «        d         S )zZparses and returns a namespace object with known arguments at this
        point.
        rD  r   )Úparse_known_and_unknown_args)r   r7   rÔ   s      r   Úparse_known_argszParser.parse_known_args  s"   € ð ×0Ò0°ÀÐ0ÑKÔKÈAÔNÐNr   c                 óp   — |                       ¦   «         }d„ |D ¦   «         }|                     ||¬¦  «        S )zparses and returns a namespace object with known arguments, and
        the remaining arguments unknown at this point.
        c                 ó,   — g | ]}t          |¦  «        ‘ŒS r"   r@  rA  s     r   rC  z7Parser.parse_known_and_unknown_args.<locals>.<listcomp>  s   € Ð%Ð%Ð%˜1•�A‘”Ð%Ð%Ð%r   rD  )rF  ra  )r   r7   rÔ   rG  s       r   r`  z#Parser.parse_known_and_unknown_args  s?   € ð —O’OÑ%Ô%ˆ	Ø%Ð% Ð%Ñ%Ô%ˆØ×)Ò)¨$¸)Ð)ÑDÔDÐDr   c                 ó`   — |dv sJ ‚|||f| j         |<   | j                             |¦  «         dS )a“   register an ini-file option.

        :name: name of the ini-variable
        :type: type of the variable, can be ``pathlist``, ``args``, ``linelist``
               or ``bool``.
        :default: default value if no ini-file option exists but is queried.

        The value of ini-variables can be retrieved via a call to
        :py:func:`config.getini(name) <_pytest.config.Config.getini>`.
        )NÚpathlistr7   ÚlinelistrÁ   N)r)  r*  rF   )r   r¦   ÚhelpÚtypeÚdefaults        r   ÚaddinizParser.addini  sE   € ð ÐEÐEÐEÐEÐEØ# T¨7Ð3ˆŒ�dÑØŒ×Ò˜dÑ#Ô#Ð#Ð#Ð#r   ©NN©r   Nr
   )r   r    r!   rB   r   r1  r9  r;  rI  rF  r^  ra  r`  rj  r"   r   r   r   r   ©  sã   € € € € € ðð ðð ð ð ð)ð )ð )ð
ð ð ð ð.2ð 2ð 2ð Vð Vð Vð Vðð ð ð 2ð 2ð 2ð 2ðOð Oð Oð OðEð Eð Eð Eð$ð $ð $ð $ð $ð $r   r   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚArgumentErrorz_
    Raised if an Argument instance is created with invalid or
    inconsistent arguments.
    c                 ó<   — || _         t          |¦  «        | _        d S r
   )r<   r\   Ú	option_id)r   r<   r0  s      r   r   zArgumentError.__init__%  s   € ØˆŒÝ˜V™œˆŒˆˆr   c                 óB   — | j         rd| j         ›d| j        ›�S | j        S )Nzoption r  )rp  r<   r  s    r   r   zArgumentError.__str__)  s-   € ØŒ>ð 	ð 	Ø&*¤n n n°d´h°hÐ?Ð?à”8ˆOr   N)r   r    r!   rB   r   r   r"   r   r   rn  rn    s<   € € € € € ðð ð
%ð %ð %ðð ð ð ð r   rn  c                   ó>   — e Zd ZdZeeeedœZd„ Z	d„ Z
d„ Zd„ Zd„ ZdS )	ÚArgumentzóclass that mimics the necessary behaviour of optparse.Option

    its currently a least effort implementation
    and ignoring choices and integer prefixes
    https://docs.python.org/3/library/optparse.html#optparse-standard-option-types
    )ÚintÚstringÚfloatÚcomplexc                 óÄ  — || _         g | _        g | _        |                     d¦  «        | _        d|                     d¦  «        pdv rt          j        dt          d¬¦  «         	 |d         }t          |t          j
        j        ¦  «        rŽ|d	k    rBt          j        d
|›d|›d�t          d¬¦  «         t          |d         d         ¦  «        |d<   n8t          j        d
|›d|›d�t          d¬¦  «         t          j        |         |d<   |d         | _        n|| _        n# t          $ r Y nw xY w	 |d         | _        n# t          $ r Y nw xY w|                      |¦  «         | j        sr| j        r0| j        d         dd…                              dd¦  «        | _        dS 	 | j        d         dd…         | _        dS # t&          $ r t)          d| ¦  «        ‚w xY wdS )z3store parms in private vars for use in add_argumentr/  ú%defaultrg  r   zHpytest now uses argparse. "%default" should be changed to "%(default)s" r  )Ú
stacklevelrh  Úchoicez)type argument to addoption() is a string zO. For parsearg this is optional and when supplied  should be a type. (options: ú)Úchoicesr   z0. For parsearg this should be a type. (options: ri  r   Nú-Ú_rT   zneed a long or short option)Ú_attrsÚ_short_optsÚ
_long_optsr�   r/  Úwarningsri   ÚDeprecationWarningrZ   r.   re   rf   rh  rs  Ú_typ_maprâ   ri  Ú_set_opt_stringsÚreplaceÚ
IndexErrorrn  )r   rQ  r<  Útyps       r   r   zArgument.__init__>  sV  € àˆŒØˆÔØˆŒØ—I’I˜fÑ%Ô%ˆŒ	Ø˜%Ÿ)š) FÑ+Ô+Ð1¨rÐ2Ð2ÝŒMð-å"Øð	ñ ô ð ð
	 Ø˜”-ˆCõ
 ˜#�rœzÔ5Ñ6Ô6ð  Ø˜(’?�?Ý”M�Mð -0¨C¨C°°°ð8õ +Ø#$ð&ñ &ô &ð &õ %)¨¨yÔ)9¸!Ô)<Ñ$=Ô$=�E˜&‘M�Må”M�Mð -0¨C¨C°°°ð8õ +Ø#$ð&ñ &ô &ð &õ %-Ô$5°cÔ$:�E˜&‘Mà! &œM�”	�	à�”	�	øõ7 ð 	ð 	ð 	ØˆDð	øøøð8	à  Ô+ˆDŒLˆLøÝð 	ð 	ð 	ØˆDð	øøøà×Ò˜eÑ$Ô$Ð$ØŒyð 	=ØŒð =Ø œO¨AÔ.¨q¨r¨rÔ2×:Ò:¸3ÀÑDÔD�”	�	�	ð=Ø $Ô 0°Ô 3°A°B°BÔ 7�D”I�I�IøÝ!ð =ð =ð =Ý'Ø5°tñ=ô =ð =ð=øøøð	=ð 	=s0   Á&D# Ä#
D0Ä/D0Ä4E Å
EÅEÆ&G ÇGc                 ó    — | j         | j        z   S r
   )r�  r‚  r  s    r   rQ  zArgument.namesx  s   € ØÔ $¤/Ñ1Ð1r   c                 ód  — d                      ¦   «         }| j        r|                     | j        ¦  «         |D ]+}	 t          | |¦  «        | j        |<   Œ# t
          $ r Y Œ(w xY w| j                             d¦  «        r-| j        d         }|                     dd¦  «        }|| j        d<   | j        S )Nzdefault dest helprg  ry  z%(default)s)ra   r/  rF   r‚   r€  rî   r�   r‡  )r   r<  r  rY  s       r   r<  zArgument.attrs{  sÇ   € à#×)Ò)Ñ+Ô+ˆØŒ9ð 	$Ø�LŠL˜œÑ#Ô#Ð#Øð 	ð 	ˆDðÝ$+¨D°$Ñ$7Ô$7�”˜DÑ!Ð!øÝ!ð ð ð Ø�ðøøøàŒ;�?Š?˜6Ñ"Ô"ð 	$Ø”˜FÔ#ˆAØ—	’	˜* mÑ4Ô4ˆAà"#ˆDŒK˜ÑØŒ{Ðs   »AÁ
A!Á A!c                 óœ  — |D ]È}t          |¦  «        dk     rt          d|z  | ¦  «        ‚t          |¦  «        dk    rF|d         dk    r|d         dk    st          d|z  | ¦  «        ‚| j                             |¦  «         Œ�|dd…         dk    r|d         dk    st          d|z  | ¦  «        ‚| j                             |¦  «         ŒÉd	S )
z]directly from optparse

        might not be necessary as this is passed to argparse later onr   z>invalid option string %r: must be at least two characters longr   r~  rT   zMinvalid short option string %r: must be of the form -x, (x any non-dash char)ú--zGinvalid long option string %r: must start with --, followed by non-dashN)Úlenrn  r�  rF   r‚  )r   r¨   Úopts      r   r†  zArgument._set_opt_stringsŒ  s  € ð ð 	,ð 	,ˆCÝ�3‰xŒx˜!Š|ˆ|Ý#ð;Ø=@ñAØBFñHô Hð Hõ �S‘”˜Q’�Ø˜Aœ #š˜¨#¨a¬&°Cª-¨-Ý'ðHØJMñNàñô ð ð Ô ×'Ò'¨Ñ,Ô,Ð,Ð,à˜A˜a˜Cœ DÒ(Ð(¨S°¬V°sª]¨]Ý'ðCØEHñIàñô ð ð ”×&Ò& sÑ+Ô+Ð+Ð+ð%	,ð 	,r   c                 óÀ  — g }| j         r|dt          | j         ¦  «        z   gz  }| j        r|dt          | j        ¦  «        z   gz  }|dt          | j        ¦  «        z   gz  }t	          | d¦  «        r|dt          | j        ¦  «        z   gz  }t	          | d¦  «        r|dt          | j        ¦  «        z   gz  }d                     d	                     |¦  «        ¦  «        S )
Nz_short_opts: z_long_opts: zdest: rh  ztype: ri  z	default: zArgument({0})ú, )	r�  r   r‚  r/  r¥   rh  ri  Úformatr   )r   r7   s     r   Ú__repr__zArgument.__repr__¤  sç   € ØˆØÔð 	?Ø�_¥t¨DÔ,<Ñ'=Ô'=Ñ=Ð>Ñ>ˆDØŒ?ð 	=Ø�^¥d¨4¬?Ñ&;Ô&;Ñ;Ð<Ñ<ˆDØ��D ¤™OœOÑ+Ð,Ñ,ˆÝ�4˜Ñ Ô ð 	1Ø�X¥ T¤Y¡¤Ñ/Ð0Ñ0ˆDÝ�4˜Ñ#Ô#ð 	7Ø�[¥4¨¬Ñ#5Ô#5Ñ5Ð6Ñ6ˆDØ×%Ò% d§i¢i°¡o¤oÑ6Ô6Ð6r   N)r   r    r!   rB   rt  r\   rv  rw  r…  r   rQ  r<  r†  r“  r"   r   r   rs  rs  0  s„   € € € € € ðð ð ØØØð	ð €Hð8=ð 8=ð 8=ðt2ð 2ð 2ðð ð ð",ð ,ð ,ð07ð 7ð 7ð 7ð 7r   rs  c                   ó*   — e Zd Zdd„Zd„ Zd„ Zd	d„ZdS )
r$  r   Nc                 ó>   — || _         || _        g | _        || _        d S r
   )r¦   r5  rO  r#  )r   r¦   r5  r#  s       r   r   zOptionGroup.__init__³  s#   € ØˆŒ	Ø&ˆÔØˆŒØˆŒˆˆr   c                 óÖ   — t          |¦  «                             d„ | j        D ¦   «         ¦  «        }|rt          d|z  ¦  «        ‚t	          |i |¤Ž}|                      |d¬¦  «         dS )aE   add an option to this group.

        if a shortened version of a long option is specified it will
        be suppressed in the help. addoption('--twowords', '--two-words')
        results in help showing '--two-words' only, but --twowords gets
        accepted **and** the automatic destination is in args.twowords
        c              3   óH   K  — | ]}|                      ¦   «         D ]}|V — ŒŒd S r
   )rQ  )rB  r�  r¦   s      r   ú	<genexpr>z(OptionGroup.addoption.<locals>.<genexpr>Á  sZ   è è € ð .Bð .BØ°S·Y²Y±[´[ð.Bð .BØ-1ˆDð.Bð .Bð .Bð .Bð .Bð .Bð .Br   zoption names %s already addedF©Ú
shortupperN)rv   ÚintersectionrO  r_   rs  Ú_addoption_instance)r   Úoptnamesr<  Úconflictr0  s        r   r;  zOptionGroup.addoption¹  s’   € õ �x‘=”=×-Ò-ð .Bð .BØ œLð.Bñ .Bô .Bñ Bô Bˆàð 	IÝÐ<¸xÑGÑHÔHÐHÝ˜8Ð- uÐ-Ð-ˆØ× Ò  °EÐ Ñ:Ô:Ð:Ð:Ð:r   c                 óL   — t          |i |¤Ž}|                      |d¬¦  «         d S )NTr™  )rs  rœ  )r   r�  r<  r0  s       r   Ú
_addoptionzOptionGroup._addoptionÈ  s3   € Ý˜8Ð- uÐ-Ð-ˆØ× Ò  °DÐ Ñ9Ô9Ð9Ð9Ð9r   Fc                 óþ   — |s?|j         D ]7}|d         dk    r)|d                              ¦   «         rt          d¦  «        ‚Œ8| j        r| j                             |¦  «         | j                             |¦  «         d S )Nr   r~  rT   zlowercase shortoptions reserved)r�  Úislowerr_   r#  r1  rO  rF   )r   r0  rš  r�  s       r   rœ  zOptionGroup._addoption_instanceÌ  sŠ   € Øð 	HØÔ)ð Hð H�Ø�q”6˜S’=�= S¨¤V§^¢^Ñ%5Ô%5�=Ý$Ð%FÑGÔGÐGøØŒ;ð 	.ØŒK×%Ò% fÑ-Ô-Ð-ØŒ×Ò˜FÑ#Ô#Ð#Ð#Ð#r   rl  )F)r   r    r!   r   r;  r   rœ  r"   r   r   r$  r$  ²  sZ   € € € € € ðð ð ð ð;ð ;ð ;ð:ð :ð :ð$ð $ð $ð $ð $ð $r   r$  c                   ó   — e Zd Zdd„Zdd„ZdS )rN  Nc                 ó„   — |si }|| _         t          j                             | |j        dt
          ¬¦  «         || _        d S )NF)r,  Úadd_helpÚformatter_class)Ú_parserÚargparseÚArgumentParserr   r(  ÚDropShorterLongHelpFormatterr+  )r   r#  r+  s      r   r   zMyOptionParser.__init__×  sR   € Øð 	ØˆJØˆŒÝÔ×(Ò(¨°V´]ØÕ,Hð 	)ñ 	Jô 	Jð 	Jð %ˆŒˆˆr   c                 óÂ  — |                       ||¦  «        \  }}|rÃ|D ]˜}|r”|d         dk    rˆdd                     |¦  «        z  g}t          | j                             ¦   «         ¦  «        D ] \  }}|                     d|›d|›�¦  «         Œ!|                      d                     |¦  «        ¦  «         Œ™t          |t          ¦  «         	                    |¦  «         |S )z'allow splitting of positional argumentsr   r~  zunrecognized arguments: %sú z  r  r   )
ra  r   Úsortedr+  rø   rF   Úerrorr‚   rS  Úextend)r   r7   rÔ   rY   r  ÚlinesÚkÚvs           r   rH  zMyOptionParser.parse_argsá  sê   € à×*Ò*¨4°Ñ;Ô;‰
ˆˆdØð 	4Øð 1ð 1�Øð 1˜3˜qœ6 Sš=˜=Ø9¸S¿XºXÀd¹^¼^ÑLÐM�EÝ & t¤×'<Ò'<Ñ'>Ô'>Ñ ?Ô ?ð :ð :™˜˜1ØŸš˜°1°1°1°a°aÐ%8Ñ9Ô9Ð9Ð9Ø—J’J˜tŸyšy¨Ñ/Ô/Ñ0Ô0Ð0øÝ�D�+Ñ&Ô&×-Ò-¨dÑ3Ô3Ð3Øˆr   r
   rk  )r   r    r!   r   rH  r"   r   r   rN  rN  Ö  s<   € € € € € ð%ð %ð %ð %ðð ð ð ð ð r   rN  c                   ó   — e Zd ZdZd„ ZdS )rª  aƒ  shorten help for long options that differ only in extra hyphens

    - collapse **long** options that are the same except for extra hyphens
    - special action attribute map_long_option allows surpressing additional
      long options
    - shortcut if there are only two options and one of them is a short one
    - cache result on action object as this is called at least 2 times
    c                 ód  — t           j                             | |¦  «        }|r|d         dk    r|S t          |dd ¦  «        }|r|S |                     d¦  «        }t          |¦  «        dk    r;t          |d         ¦  «        dk    st          |d         ¦  «        dk    r	||_        |S g }t          |di ¦  «        }|€i }i }|D ]µ}t          |¦  «        dk    s|d         dk    rŒ"|                     d	¦  «        st          d
|z  | ¦  «        ‚|dd …         }	|	                     ¦   «         d         |vrE|	 	                    dd¦  «        }
|
|vs&t          ||
         ¦  «        t          |	¦  «        k     r|	||
<   Œ¶|D ]”}t          |¦  «        dk    s|d         dk    r| 
                    |¦  «         |dd …         |                     | 	                    dd¦  «        ¦  «        k    r)| 
                    | 	                    dd¦  «        ¦  «         Œ•d                     |¦  «        |_        |j        S )Nr   r~  Ú_formatted_action_invocationr‘  r   rT   Úmap_long_optionr¬  r�  z)long optional argument without "--": [%s]r   ú=)r¨  ÚHelpFormatterÚ_format_action_invocationr‚   ra   rŽ  rµ  r¢   rn  r‡  rF   r�   r   )r   ÚactionÚorgstrÚresrO  Úreturn_listÚ
option_mapÚ
short_longr0  ÚxxoptionÚ	shorteneds              r   r¹  z6DropShorterLongHelpFormatter._format_action_invocationø  sZ  € ÝÔ'×AÒAÀ$ÈÑOÔOˆØð 	�f˜Q”i 3Ò&Ð&ØˆMÝ�fÐ<¸dÑCÔCˆØð 	ØˆJØ—,’,˜tÑ$Ô$ˆÝˆw‰<Œ<˜1ÒÐ¥# g¨a¤j¡/¤/°QÒ"6Ð"6½#¸gÀa¼j¹/¼/ÈQÒ:NÐ:Nà28ˆFÔ/ØˆMØˆÝ˜fÐ&7¸Ñ<Ô<ˆ
ØÐØˆJØˆ
Øð 	5ð 	5ˆFÝ�6‰{Œ{˜aÒÐ 6¨!¤9°Ò#3Ð#3ØØ×$Ò$ TÑ*Ô*ð 6Ý#Ð$OØ'-ñ%/Ø04ñ6ô 6ð 6à˜a˜b˜b”zˆHØ�~Š~ÑÔ Ô"¨*Ð4Ð4Ø$×,Ò,¨S°"Ñ5Ô5�	Ø JÐ.Ð.Ý�z )Ô,Ñ-Ô-µ°H±´Ò=Ð=Ø,4�J˜yÑ)øð ð 	=ð 	=ˆFÝ�6‰{Œ{˜aÒÐ 6¨!¤9°Ò#3Ð#3Ø×"Ò" 6Ñ*Ô*Ð*Ø�a�b�bŒz˜ZŸ^š^¨F¯NªN¸3ÀÑ,CÔ,CÑDÔDÒDÐDØ×"Ò" 6§>¢>°#°sÑ#;Ô#;Ñ<Ô<Ð<øØ.2¯iªi¸Ñ.DÔ.DˆÔ+ØÔ2Ð2r   N)r   r    r!   rB   r¹  r"   r   r   rª  rª  ï  s-   € € € € € ðð ð%3ð %3ð %3ð %3ð %3r   rª  c                 óD   — 	 t           j        | = d S # t          $ r Y d S w xY wr
   )r1   rï   râ   )r  s    r   ró   ró   !  s9   € ðÝŒK˜Ð Ð Ð øÝð ð ð Øˆˆðøøøs   ‚ ‘
žc                   ó&   — e Zd ZdZdd„Zd„ Zd„ ZdS )Ú
CmdOptionsz% holds cmdline options as attributes.r"   c                 ó:   — | j                              |¦  «         d S r
   )r[  Úupdate)r   Úvaluess     r   r   zCmdOptions.__init__)  s   € ØŒ×Ò˜VÑ$Ô$Ð$Ð$Ð$r   c                 ó   — d| j         ›d�S )Nz<CmdOptions ú>)r[  r  s    r   r“  zCmdOptions.__repr__+  s   € € Ø#'¤= = =Ð2Ð2r   c                 ó*   — t          | j        ¦  «        S r
   )rÄ  r[  r  s    r   ÚcopyzCmdOptions.copy-  s   € Ý˜$œ-Ñ(Ô(Ð(r   N)r"   )r   r    r!   rB   r   r“  rË  r"   r   r   rÄ  rÄ  '  sL   € € € € € Ø/Ð/ð%ð %ð %ð %ð3ð 3ð 3ð)ð )ð )ð )ð )r   rÄ  c                   ó   — e Zd Zd„ ZdS )ÚNotsetc                 ó   — dS )Nz<NOTSET>r"   r  s    r   r“  zNotset.__repr__1  s   € Øˆzr   N)r   r    r!   r“  r"   r   r   rÍ  rÍ  0  s#   € € € € € ðð ð ð ð r   rÍ  rÐ   c                   óô   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd d„Zd„ Z	d	„ Z
d d
„Zd„ Zed„ ¦   «         Zd„ Z ed¬¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zd!d„Zd„ Zd!d„Zd„ Zd„ Zd„ Zd„ Zd„ Zedfd„Zd d„Zd d„Z dS )"rM   zB access to configuration values, pluginmanager and plugin hooks.  c                 ó<  — t          ¦   «         | _        t          }t          d|›d|›d�| j        ¬¦  «        | _        || _        | j        j        j         	                    d¦  «        | _        | j        j
        | _
        i | _        i | _        g | _        | j        j        | _        | j                             | d¦  «         d| _        d„ }| j
        j                             |i ¦  «         | j
        j                             t)          | j        ¬	¦  «        ¬
¦  «         d S )Nz%(prog)s [options] [z] [z] [...])r,  r-  r%   ÚpytestconfigFc                 ó.   — dd l }t          || ¦  «         d S rJ   )r   Úsetns)Údicr   s     r   Údo_setnsz!Config.__init__.<locals>.do_setnsM  s!   € ØˆMˆMˆMÝ�&˜#ÑÔÐÐÐr   r"  r·   )rÄ  r0  rS  r   r'  r§  r)   r„   r…   r�   r+   Ú	_inicacheÚ	_opt2destÚ_cleanupr˜   rh   Ú_configuredÚpytest_namespacerº   Úpytest_addoptionr”   )r   r)   Ú_arÕ  s       r   r   zConfig.__init__:  s  € õ !‘l”lˆŒÝˆÝ�vØ;=¸2¸2¸r¸r¸rÐBØÔ'ð
ñ 
ô 
ˆŒð
 +ˆÔØÔ'Ô-Ô2×6Ò6°xÑ@Ô@ˆŒ
ØÔ&Ô+ˆŒ	ØˆŒØˆŒØˆŒØÔ'Ô-ˆŒ
ØÔ×#Ò# D¨.Ñ9Ô9Ð9Ø ˆÔð	ð 	ð 	ð 	Œ	Ô"×0Ò0°¸2Ñ>Ô>Ð>ØŒ	Ô"×0Ò0½ÀDÄLÐ8QÑ8QÔ8QÐ0ÑRÔRÐRÐRÐRr   c                 ó:   — | j                              |¦  «         dS )zz Add a function to be called when the config object gets out of
        use (usually coninciding with pytest_unconfigure).N)rØ  rF   )r   Úfuncs     r   Úadd_cleanupzConfig.add_cleanupS  s    € ð 	Œ×Ò˜TÑ"Ô"Ð"Ð"Ð"r   c                 ó‚   — | j         rJ ‚d| _         | j        j                             t	          | ¬¦  «        ¬¦  «         d S )NTr$   r·   )rÙ  r+   rÆ   rº   r”   r  s    r   Ú_do_configurezConfig._do_configureX  sF   € ØÔ#Ð#Ð#Ð#ØˆÔØŒ	Ô"×0Ò0½ÀDÐ8IÑ8IÔ8IÐ0ÑJÔJÐJÐJÐJr   c                 óà   — | j         r3d| _         | j                             | ¬¦  «         g | j        j        _        | j        r,| j                             ¦   «         } |¦   «          | j        °*d S d S )NFr$   )rÙ  r+   Úpytest_unconfigurerÆ   Ú_call_historyrØ  rK   )r   Úfins     r   r-   zConfig._ensure_unconfigure]  sƒ   € ØÔð 	:Ø$ˆDÔØŒI×(Ò(°Ð(Ñ5Ô5Ð5Ø79ˆDŒIÔ&Ô4ØŒmð 	Ø”-×#Ò#Ñ%Ô%ˆCØˆC‰EŒEˆEð Œmð 	ð 	ð 	ð 	ð 	r   Nc                 óh   — | j         j                             t          |||d¬¦  «        ¬¦  «         dS )z+ generate a warning for this test session. NrÈ   r·   )r+   rÉ   rº   r”   )r   r�   r“   r‘   s       r   ri   zConfig.warnf  sG   € àŒ	Ô#×1Ò1½Ø˜wØ!¨$ð:0ñ :0ô :0Ð1ñ 	1ô 	1ð 	1ð 	1ð 	1r   c                 ó@   — | j                              d¦  «        j        S )NÚterminalreporter)r)   r½   Ú_twr  s    r   Úget_terminal_writerzConfig.get_terminal_writerl  s   € ØÔ!×,Ò,Ð-?Ñ@Ô@ÔDÐDr   c                 ó0   — |                       |¦  «         | S r
   )rI  )r   r)   r7   s      r   rj   zConfig.pytest_cmdline_parseo  s   € à�
Š
�4ÑÔÐØˆr   c                 ó´  — |r
|j         rd}nd}|                     dt          |dd¦  «        |¬¦  «        }| j                             ||¬¦  «        }t
          j                             |¦  «        set          |¦  «         	                    d¦  «        D ]D}t          j                             d	|z  ¦  «         t          j                             ¦   «          ŒCd S d S )
NÚlongÚnativeTÚ
showlocalsF)Úfuncargsrï  Ústyle)Úexcreprr   r   zINTERNALERROR> %s
)Ú	fulltraceÚgetreprr‚   r+   Úpytest_internalerrorr.   re   Úanyr\   ra   r1   r2   r8   Úflush)r   r   r0  rñ  rò  r¼  r4   s          r   Únotify_exceptionzConfig.notify_exceptiont  sï   € Øð 	�fÔ&ð 	ØˆEˆEàˆEØ—/’/¨4Ý˜v |°UÑ;Ô;Øð "ñ 
ô 
ˆð Œi×,Ò,°WØ5<ð -ñ >ô >ˆåŒz�~Š~˜cÑ"Ô"ð 	#Ý˜G™œ×*Ò*¨4Ñ0Ô0ð #ð #�Ý”
× Ò Ð!6¸Ñ!<Ñ=Ô=Ð=Ý”
× Ò Ñ"Ô"Ð"Ð"ð	#ð 	#ð#ð #r   c                 óŽ   — | j         | j        k    r4| j                             |¦  «        }| j                              |¦  «        }|S r
   )Úinvocation_dirÚrootdirr   Úbestrelpath)r   r’   Úfullpaths      r   Úcwd_relative_nodeidzConfig.cwd_relative_nodeid„  sB   € àÔ $¤,Ò.Ð.Ø”|×(Ò(¨Ñ0Ô0ˆHØÔ(×4Ò4°XÑ>Ô>ˆFØˆr   c                 óà   — t          ¦   «         }|j        j                             |¦  «         |                     |d¬¦  «         |j        j        D ]}|j                             |¦  «         Œ|S )z' constructor useable for subprocesses. F©Úaddopts)rG   r0  r[  rÆ  rI  r9   r)   rg   )ÚclsÚoption_dictr7   r%   rà   s        r   ÚfromdictargszConfig.fromdictargs‹  so   € õ ‘”ˆØŒÔ×%Ò% kÑ2Ô2Ð2Ø�Š�T 5ˆÑ)Ô)Ð)Ø”Ô&ð 	7ð 	7ˆAØÔ ×3Ò3°AÑ6Ô6Ð6Ð6Øˆr   c                 óö   — |j         |j        z   D ]}|j        | j        |<   Œt	          |d¦  «        rC|j        r>t	          | j        |j        ¦  «        s&t          | j        |j        |j        ¦  «         d S d S d S d S )Nri  )r�  r‚  r/  r×  r¥   r0  r  ri  )r   r�  r¦   s      r   r'  zConfig._processopt•  s˜   € Ø”O c¤nÑ4ð 	,ð 	,ˆDØ#&¤8ˆDŒN˜4Ñ Ð å�3˜	Ñ"Ô"ð 	< s¤xð 	<Ý˜4œ;¨¬Ñ1Ô1ð <Ý˜œ S¤X¨s¬{Ñ;Ô;Ð;Ð;Ð;ð	<ð 	<ð 	<ð 	<ð<ð <r   T)rŸ   c                 óD   — | j                              |j        ¦  «         d S r
   )r)   rÚ   Úknown_args_namespace)r   Úearly_configs     r   Úpytest_load_initial_conftestsz$Config.pytest_load_initial_conftests�  s"   € àÔ×1Ò1°,Ô2SÑTÔTÐTÐTÐTr   c                 óè  — | j                              || j                             ¦   «         ¬¦  «        \  }}t	          |j        |j        |z   | j        ¬¦  «        }|\  | _        | _	        | _
        | j        | j         j        d<   | j	        | j         j        d<   t          j                             ¦   «         | _        | j                              ddd¦  «         | j                              dd	¦  «         d S )
NrD  ©Úwarnfuncrû  Úinifiler  zextra command line optionsr7   Ú
minversionz!minimally required pytest version)r§  r`  r0  rË  Údetermine_setupÚinifilenamerÐ   ri   rû  r  Úinicfgr+  r.   r   r[   rú  rj  )r   r7   ÚnsÚunknown_argsÚrs        r   Ú_initinizConfig._initini¡  sÒ   € Øœ<×DÒDÀTÐUYÔU`×UeÒUeÑUgÔUgÐDÑhÔhÑˆˆLÝ˜BœN¨B¬N¸\Ñ,IÐTXÔT]Ð^Ñ^Ô^ˆØ23Ñ/ˆŒ�d”l D¤KØ-1¬\ˆŒÔ 	Ñ*Ø-1¬\ˆŒÔ 	Ñ*Ý œgŸmšm™oœoˆÔØŒ×Ò˜IÐ'CÀVÑLÔLÐLØŒ×Ò˜LÐ*MÑNÔNÐNÐNÐNr   c                 óT  — | j                              |¦  «        \  }}|j        }|dk    �rg	 t          j                             | ¦  «        }ddl}|| j        _        | 	                    d¦  «        D �]}dD �]}	|j
                             |	¦  «        D ]è}
|
                     d¦  «        d         }t          j        |vo|                     d¦  «        }|                     t          j        ¦  «        dk    o|                     d	¦  «        }|r8t          j                             |¦  «        \  }}|                     |¦  «         Œ²|r4t          j                             |¦  «        }|                     |¦  «         Œé�Œ�Œn# t*          $ r d
}Y nw xY w|                      |¦  «         dS )zñInstall the PEP 302 import hook if using assertion re-writing.

        Needs to parse the --assert=<mode> option from the commandline
        and find all the installed plugins to mark them for re-writing
        by the importhook.
        Úrewriter   NÚpytest11)ÚRECORDzSOURCES.txtr  z.pyrT   z__init__.pyÚplain)r§  r`  Ú
assertmoderc   rˆ   Úinstall_importhookÚpkg_resourcesr)   rŠ   Úiter_entry_pointsÚdistÚ_get_metadatara   r   ÚsepÚendswithÚcountr   Úsplitextr  ÚdirnameÚSystemErrorÚ_warn_about_missing_assertion)r   r7   Úentrypoint_namer  r  Úmoder+   r  Ú
entrypointÚmetadataÚentryÚfnÚis_simple_moduleÚ
is_packageÚmodule_nameÚextÚpackage_names                    r   Ú_consider_importhookzConfig._consider_importhook«  sÕ  € ð  œ<×DÒDÀTÑJÔJÑˆˆLØŒ}ˆØ�9ÒÑð@ÝÔ(×;Ò;¸DÑAÔA�ð %Ð$Ð$Ð$Ø26�Ô"Ô/Ø"/×"AÒ"AÀ*Ñ"MÔ"Mð @ñ @�Jð
 %>ð 
@ñ 
@˜Ø%/¤_×%BÒ%BÀ8Ñ%LÔ%Lð 	@ð 	@˜EØ!&§¢¨SÑ!1Ô!1°!Ô!4˜BÝ/1¬v¸RÐ/?Ð/VÀBÇKÂKÐPUÑDVÔDVÐ,Ø)+¯ªµ"´&Ñ)9Ô)9¸QÒ)>Ð)]À2Ç;Â;È}ÑC]ÔC]˜JØ/ð @Ý35´7×3CÒ3CÀBÑ3GÔ3GÑ 0 ¨SØ $× 1Ò 1°+Ñ >Ô >Ð >Ð >Ø!+ð @Ý/1¬w¯ª¸rÑ/BÔ/B Ø $× 1Ò 1°,Ñ ?Ô ?Ð ?øñ	@ñ
@ð@øõ ð ð ð Ø���ðøøøð* 	×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0s   ­F ÆFÆFc                 ó*   — 	 J ‚# t          $ r Y d S w xY wr
   )r1   r2   r8   ÚAssertionError)r   r)  s     r   r'  z$Config._warn_about_missing_assertionÎ  s/   € ð	AØˆLøÝð 	ð 	ð 	ØˆDˆDð	øøøs   ‚ „
‘c                 óÊ  — |                       |¦  «         |rWt          j        t          j                             dd¦  «        ¦  «        |z   |d d …<   |                      d¦  «        |z   |d d …<   |                      ¦   «          d}|                      ||¦  «         | j	         
                    |¦  «         | j	                             |¦  «         | j	                             ¦   «          | j                             || j                             ¦   «         ¬¦  «        x| _        }| j        j        €<| j        r5t(          j                             | j        ¦  «        j        }|| j        _        	 | j                             | || j        ¬¦  «         d S # t4          $ rI t7          j        ¦   «         d         }|j        s|j        r |                      d|j        z  ¦  «         Y d S ‚ w xY w)	NÚPYTEST_ADDOPTSr   r  r  rD  )r  r7   r#  rT   z&could not load initial conftests (%s)
) r  r`   ra   r   r€   r�   ÚgetiniÚ_checkversionr3  r)   r   Úload_setuptools_entrypointsr  r§  ra  r0  rË  r  rÎ   r  r.   r   r[   r%  r+   r	  r   r1   rö   rg  Úversionr˜   )r   r7   r  r(  r  rÎ   r:   s          r   Ú	_preparsezConfig._preparseß  sÜ  € Ø�Š�dÑÔÐØð 	4Ý”k¥"¤*§.¢.Ð1AÀ2Ñ"FÔ"FÑGÔGÈ$ÑNˆD���‰GØ—k’k )Ñ,Ô,¨tÑ3ˆD���‰GØ×ÒÑÔÐØ$ˆØ×!Ò! $¨Ñ8Ô8Ð8ØÔ×,Ò,¨TÑ2Ô2Ð2ØÔ×6Ò6°ÑGÔGÐGØÔ×'Ò'Ñ)Ô)Ð)Ø)-¬×)FÒ)FÀtÐW[ÔWb×WgÒWgÑWiÔWiÐ)FÑ)jÔ)jÐjˆÔ! BØÔ$Ô/Ð7¸D¼LÐ7ÝœŸš t¤|Ñ4Ô4Ô<ˆJØ3=ˆDÔ%Ô0ð
	ØŒI×3Ò3ÀØ d¤lð 4ñ 4ô 4ð 4ð 4ð 4øå$ð 	ð 	ð 	Ý”‘”˜qÔ!ˆAØŒwð ˜"œ*ð ð —
’
ÐDÀqÄvÑMÑNÔNÐNÐNÐNÐNàð	øøøs   Å+"F ÆAG"Ç G"c                 óF  — dd l }| j                             dd ¦  «        }|r}|                     d¦  «        }|j                             d¦  «        }||k     rJ|                     d| j        j        j        | j                             d¦  «        ||j        fz  ¦  «        ‚d S d S )Nr   r  ú.z,%s:%d: requires pytest-%s, actual pytest-%s')	r   r  r�   ra   Ú__version__r6   r%   r   Úlineof)r   r   ÚminverÚverÚmyvers        r   r9  zConfig._checkversionú  s´   € ØˆˆˆØ”—’ ¨tÑ4Ô4ˆØð 	1Ø—,’,˜sÑ#Ô#ˆCØÔ&×,Ò,¨SÑ1Ô1ˆEØ�sŠ{ˆ{Ø×'Ò'ØBØ”KÔ&Ô+¨T¬[×-?Ò-?ÀÑ-MÔ-MØ˜FÔ.ðE0ñ 0ñ1ô 1ð 1ð		1ð 	1ð ˆ{r   c                 óä  — t          | d¦  «        r
J d¦   «         ‚|| _        | j        j                             t          | j        ¬¦  «        ¬¦  «         |                      ||¬¦  «         | j                             | |¬¦  «         | j	         
                    || j        | j        ¬¦  «        }|s8t          j        ¦   «         }|| j        k    r|                      d¦  «        }|s|g}|| _        d S )	Nr7   z:can only parse cmdline args at most once per Config object)r)   r·   r   )r%   r7   rD  rÖ   )r¥   Ú	_origargsr+   Úpytest_addhooksrº   r”   r)   r<  Úpytest_cmdline_preparser§  r^  r0  r   Úgetcwdrû  r8  r7   )r   r7   r  Úcwds       r   rI  zConfig.parse  s	  € å˜4 Ñ(Ô(ð 	Nð 	NØLñ	Nô 	Nð 	NàˆŒØŒ	Ô!×/Ò/Ý)-¸DÔ<NÐ)OÑ)OÔ)Oð 	0ñ 	Qô 	Qð 	Qà�Š�t WˆÑ-Ô-Ð-àŒ	×)Ò)°¸DÐ)ÑAÔAÐAØŒ|×+Ò+¨D°$´+ÈÌÐ+ÑUÔUˆØð 	Ý”)‘+”+ˆCØ�d”lÒ"Ð"Ø—{’{ ;Ñ/Ô/�Øð Ø�u�ØˆŒ	ˆ	ˆ	r   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
        the first line in its value. N)r8  rZ   r^   rF   )r   r¦   r4   rà   s       r   rÅ   zConfig.addinivalue_line  s>   € ð �KŠK˜ÑÔˆÝ˜!�TÑ"Ô"Ð"Ð"Ð"Ø	�Š�‰Œˆˆˆr   c                 ó€   — 	 | j         |         S # t          $ r$ |                      |¦  «        x| j         |<   }|cY S w xY w)a   return configuration value from an :ref:`ini file <inifiles>`. If the
        specified name hasn't been registered through a prior
        :py:func:`parser.addini <pytest.config.Parser.addini>`
        call (usually from a plugin), a ValueError is raised. )rÖ  râ   Ú_getini)r   r¦   Úvals      r   r8  zConfig.getini!  sU   € ð
	Ø”> $Ô'Ð'øÝð 	ð 	ð 	Ø)-¯ª°dÑ);Ô);Ð;ˆDŒN˜4Ñ  3ØˆJˆJˆJð	øøøs   ‚ �+=¼=c                 ó  — 	 | j         j        |         \  }}}n # t          $ r t          d|›�¦  «        ‚w xY w|                      |¦  «        }|€,	 | j        |         }n# t          $ r |�|cY S |€Y dS g cY S w xY w|dk    r…t          j                             | j        j	        j        ¦  «         
                    ¦   «         }g }t          j        |¦  «        D ],}|                     |                     |d¬¦  «        ¦  «         Œ-|S |dk    rt          j        |¦  «        S |dk    r.d„ t          d	„ |                     d
¦  «        ¦  «        D ¦   «         S |dk    r.t!          t#          |                     ¦   «         ¦  «        ¦  «        S |�J ‚|S )Nzunknown configuration value: r   re  TrË   r7   rf  c                 ó   — g | ]}|¯|‘ŒS r"   r"   )rB  Úts     r   rC  z"Config._getini.<locals>.<listcomp>D  s   € ÐPÐPÐP˜!ÈaÐP�AÐPÐPÐPr   c                 ó*   — |                       ¦   «         S r
   )Ústrip)rà   s    r   ú<lambda>z Config._getini.<locals>.<lambda>D  s   € ¨Q¯WªW©Y¬Y€ r   r   rÁ   )r§  r)  râ   r_   Ú_get_override_ini_valuer  r.   r   r[   r%   rä   r`   ra   rF   r   ÚmaprÁ   Ú
_strtoboolrR  )	r   r¦   r5  rh  ri  r]  ÚdpÚlÚrelpaths	            r   rL  zConfig._getini,  sÁ  € ð	IØ)-¬Ô)>¸tÔ)DÑ&ˆK˜˜w˜wøÝð 	Ið 	Ið 	IÝ�*ÀÀÐGÑHÔHÐHð	Iøøøà×,Ò,¨TÑ2Ô2ˆØˆ=ðØœ DÔ)��øÝð ð ð ØÐ&Ø"�N�N�NØ�<Ø˜2˜2Ø�	�	�	ðøøøð �:ÒÐÝ”—’˜tœ{Ô1Ô6Ñ7Ô7×?Ò?ÑAÔAˆBØˆAÝ œ; uÑ-Ô-ð 5ð 5�Ø—’˜Ÿš ¨d˜Ñ3Ô3Ñ4Ô4Ð4Ð4ØˆHØ�VŠ^ˆ^Ý”;˜uÑ%Ô%Ð%Ø�ZÒÐØPÐP�sÐ#6Ð#6¸¿ºÀDÑ8IÔ8IÑJÔJÐPÑPÔPÐPØ�VŠ^ˆ^Ý�
 5§;¢;¡=¤=Ñ1Ô1Ñ2Ô2Ð2à�<�<�<ØˆLs&   ‚ ™6ÁA ÁA9Á/A9Á4A9Á8A9c                 óÌ  — 	 | j                              ||¦  «        \  }}n# t          $ r Y d S w xY wt          j                             |j        ¦  «                             ¦   «         }g }|D ]w}t          |t          j        j        ¦  «        sA| 	                    dt          j        j        j
        ¦  «        }|                     |d¬¦  «        }|                     |¦  «         Œx|S )Nú/TrË   )r)   rð   râ   r.   r   r[   r  rä   rZ   r‡  r!  r   rF   )r   r¦   r   rë   ÚrelrootsÚmodpathrX  Úrelroots           r   Ú_getconftest_pathlistzConfig._getconftest_pathlistK  sÛ   € ð	Ø Ô.×AÒAÀ$ÈÑMÔM‰MˆC��øÝð 	ð 	ð 	Ø�4�4ð	øøøå”'—-’- ¤Ñ-Ô-×5Ò5Ñ7Ô7ˆØˆØð 	ð 	ˆGÝ˜g¥r¤w¤}Ñ5Ô5ð :Ø!Ÿ/š/¨#­r¬w¬}Ô/@ÑAÔA�Ø!Ÿ,š, w°D˜,Ñ9Ô9�Ø�HŠH�WÑÔÐÐØˆs   ‚! ¡
/®/c                 ó    — d }|                       dd ¦  «        r5| j        j        D ](}|D ]#}|                     dd¦  «        \  }}||k    r|}Œ$Œ)|S )NÚoverride_inir·  rT   )Ú	getoptionr0  ra  ra   )r   r¦   r]  Úini_config_listÚ
ini_configÚkeyÚuser_ini_values          r   rT  zConfig._get_override_ini_valueY  sw   € Øˆð
 �>Š>˜.¨$Ñ/Ô/ð 	/Ø#'¤;Ô#;ð /ð /�Ø"1ð /ð /�JØ,6×,<Ò,<¸SÀ!Ñ,DÔ,DÑ)�S˜.Ø˜d’{�{Ø .˜øð/ð ˆr   Fc                 ó&  — | j                              ||¦  «        }	 t          | j        |¦  «        }|€|rt	          |¦  «        ‚|S # t          $ r? |t
          ur|cY S |rddl}|                     d|›d�¦  «         t          d|›�¦  «        ‚w xY w)ac   return command line option value.

        :arg name: name of the option.  You may also specify
            the literal ``--OPT`` option instead of the "dest" option name.
        :arg default: default value if no option of that name exists.
        :arg 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×  r�   r‚   r0  rî   Únotsetr   r  r_   )r   r¦   ri  r  rM  r   s         r   rb  zConfig.getoptiong  s½   € ð Œ~×!Ò! $¨Ñ-Ô-ˆð	=Ý˜$œ+ tÑ,Ô,ˆCØˆ{˜tˆ{Ý$ TÑ*Ô*Ð*ØˆJøÝð 	=ð 	=ð 	=Ø�fÐ$Ð$Ø���Øð ;Ø���Ø—’�°4°4°4Ð9Ñ:Ô:Ð:Ý�*°T°TÐ;Ñ<Ô<Ð<ð	=øøøs   �)A ÁBÁ2Bc                 ó,   — |                       |¦  «        S )z (deprecated, use getoption()) ©rb  ©r   r¦   r   s      r   ÚgetvaluezConfig.getvalue~  s   € à�~Š~˜dÑ#Ô#Ð#r   c                 ó0   — |                       |d¬¦  «        S )z( (deprecated, use getoption(skip=True)) T)r  rj  rk  s      r   ÚgetvalueorskipzConfig.getvalueorskip‚  s   € à�~Š~˜d¨ˆ~Ñ.Ô.Ð.r   r
   )T)!r   r    r!   rB   r   rß  rá  r-   ri   rê  rj   rø  rþ  Úclassmethodr  r'  Úhookimplr	  r  r3  r'  r<  r9  rI  rÅ   r8  rL  r_  rT  rh  rb  rl  rn  r"   r   r   rM   rM   7  s  € € € € € ØLÐLðSð Sð Sð2#ð #ð #ð
Kð Kð Kð
ð ð ð1ð 1ð 1ð 1ðEð Eð Eðð ð ð
#ð #ð #ð #ð ð ð ð ðð ñ „[ðð<ð <ð <ð €X�dÐÑÔðUð Uñ ÔðUðOð Oð Oð!1ð !1ð !1ðFAð Að Að"ð ð ð ð6
1ð 
1ð 
1ðð ð ð ð&ð ð ð	ð 	ð 	ðð ð ð>ð ð ðð ð ð '-°5ð =ð =ð =ð =ð.$ð $ð $ð $ð/ð /ð /ð /ð /ð /r   rM   c                 óD   — 	 |                       ¦   «         S # |$ r Y dS w xY w)NF)rÞ   )r   Úignores     r   rÒ   rÒ   †  s7   € ðØ�zŠz‰|Œ|ÐøØð ð ð Øˆuˆuðøøøs   ‚ –žc                 ó<  — ddl m} g d¢}d„ | D ¦   «         } | st          j                             ¦   «         g} | D ]á}t          j                             |¦  «        }|                     d¬¦  «        D ]©}|D ]¤}|                     |¦  «        }t          |¦  «        r~t          j         	                    |¦  «        }d|j
        v r%|dk    r|r |d	|¦  «         |||d         fc c c S |dk    rd
|j
        v r|||d
         fc c c S |dk    r||i fc c c S Œ¥ŒªŒâdS )aY  
    Search the list of arguments for a valid ini-file for pytest,
    and return a tuple of (rootdir, inifile, cfg-dict).

    note: warnfunc is an optional function used to warn
        about ini-files that use deprecated features.
        This parameter should be removed when pytest
        adopts standard deprecation warnings (#1804).
    r   )ÚSETUP_CFG_PYTEST)ú
pytest.iniztox.iniú	setup.cfgc                 óV   — g | ]&}t          |¦  «                             d ¦  «        °$|‘Œ'S )r~  )r\   r¢   rA  s     r   rC  zgetcfg.<locals>.<listcomp>˜  s1   € Ð:Ð:Ð:�!¥3 q¡6¤6×#4Ò#4°SÑ#9Ô#9Ð:ˆAÐ:Ð:Ð:r   T©Úreverser   rv  rX   ztool:pytestru  )NNN)Ú_pytest.deprecatedrt  r.   r   r[   rå   r   rÒ   Ú	iniconfigÚ	IniConfigÚsections)	r7   r  rt  Úinibasenamesr  ÚbaseÚinibasenameÚpr{  s	            r   Úgetcfgr‚  Œ  s�  € ð 4Ð3Ð3Ð3Ð3Ð3Ø9Ð9Ð9€LØ:Ð:�tÐ:Ñ:Ô:€DØð !Ý”—’‘”Ð ˆØð +ð +ˆÝŒg�mŠm˜CÑ Ô ˆØ—I’I d�IÑ+Ô+ð 	+ð 	+ˆDØ+ð +ð +�Ø—I’I˜kÑ*Ô*�Ý˜!‘9”9ð 
+Ý "¤× 6Ò 6°qÑ 9Ô 9�IØ 9Ô#5Ð5Ð5Ø&¨+Ò5Ð5¸(Ð5Ø$˜H TÐ+;Ñ<Ô<Ð<Ø# Q¨	°(Ô(;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ø" kÒ1Ð1°mÀyÔGYÐ6YÐ6YØ# Q¨	°-Ô(@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø$¨Ò4Ð4à# Q¨˜{Ð*Ð*Ð*Ð*Ð*Ð*Ð*øð+ð	+ð Ðr   c                 óæ  — d }| D ]¢}t          |¦  «        d         dk    rŒt          j                             |¦  «        }|                     ¦   «         sŒP|€|}ŒU|                     |¦  «        s||k    rŒq|                     |¦  «        r|}Œ‰|                     |¦  «        }|�|}Œ£|€t          j                             ¦   «         }n(|                     ¦   «         r|                     ¦   «         }|S )Nr   r~  )	r\   r.   r   r[   rÒ   ræ   Úcommonrã   rä   )r7   Úcommon_ancestorr  r�  Úshareds        r   Úget_common_ancestorr‡  ®  s   € ð €OØð -ð -ˆÝˆs‰8Œ8�AŒ;˜#ÒÐØÝŒG�MŠM˜#ÑÔˆØ�xŠx‰zŒzð 	ØØÐ"ØˆOˆOà�wŠw�Ñ'Ô'ð -¨1°Ò+?Ð+?ØØ ×&Ò& qÑ)Ô)ð -Ø"#��àŸš /Ñ2Ô2�ØÐ%Ø&,�OøØÐÝœ'Ÿ-š-™/œ/ˆˆØ	×	Ò	Ñ	!Ô	!ð 4Ø)×1Ò1Ñ3Ô3ˆØÐr   c                 ó.   — d„ d„ | D ¦   «         D ¦   «         S )Nc                 ó:   — g | ]}|                      ¦   «         ¯|‘ŒS r"   )rÒ   )rB  Úds     r   rC  z&get_dirs_from_args.<locals>.<listcomp>Ë  s4   € ð ð ð �!à�xŠx‰zŒzðˆAð ð ð r   c              3   ó˜   K  — | ]E}t          |¦  «                             d ¦  «        °$t          j                             |¦  «        V — ŒFdS )r~  N)r\   r¢   r.   r   r[   rA  s     r   r˜  z%get_dirs_from_args.<locals>.<genexpr>Ë  s\   è è € ð 7ð 7¨QÝ" 1™vœv×0Ò0°Ñ5Ô5ð7�œŸš aÑ(Ô(ð 7ð 7ð 7ð 7ð 7ð 7r   r"   )r7   s    r   Úget_dirs_from_argsrŒ  Ê  s;   € ðð ð 7ð 7°$ð 7ñ 7ô 7ð ñ ô ð r   c                 óª  — t          |¦  «        }| rKt          j                             | ¦  «        }	 |d         }n# t          $ r d }Y nw xY wt          |¦  «        }nñt          |¦  «        }t          |g|¬¦  «        \  }} }|€Ê|                     d¬¦  «        D ]+}|                     d¦  «         	                    ¦   «         r n‰Œ,t          ||¬¦  «        \  }} }|€qt          t          j
                             ¦   «         |g¦  «        }t          j
                             t          |¦  «        ¦  «        d         t          j        k    }|r|}|| |pi fS )Nr   r  Trx  zsetup.pyrT   )rŒ  r.   r{  r|  râ   r‡  r‚  rå   r   rÒ   r   r[   r   Ú
splitdriver\   r!  )	r  r7   r  Údirsr{  r  rû  ÚancestorÚ
is_fs_roots	            r   r  r  Ð  se  € Ý˜dÑ#Ô#€DØð +Ý”L×*Ò*¨7Ñ3Ô3ˆ	ð	Ø˜xÔ(ˆFˆFøÝð 	ð 	ð 	ØˆFˆFˆFð	øøøå% dÑ+Ô+ˆˆå& tÑ,Ô,ˆÝ#)¨8¨*¸xÐ#HÑ#HÔ#HÑ ˆ�˜&Øˆ?Ø#Ÿ>š>°$˜>Ñ7Ô7ð 	+ð 	+�Ø—<’< 
Ñ+Ô+×2Ò2Ñ4Ô4ð Ø�Eðõ ,2°$ÀÐ+JÑ+JÔ+JÑ(�˜ &Ø�?Ý1µ2´7·=²=±?´?ÀHÐ2MÑNÔN�GÝ!#¤×!3Ò!3µC¸±L´LÑ!AÔ!AÀ!Ô!DÍÌÒ!N�JØ!ð +Ø"*˜Ø�G˜V˜\ rÐ)Ð)s   ²; »A
Á	A
c                 óà  — dd l }|                     ¦   «         D ]Ô\  }}t          |t          ¦  «        r~t	          | |d ¦  «        }|€@d|z  }t          j        |¦  «        }|t          j        |<   g |_	        t          | ||¦  «         | j	                             |¦  «         t          ||¦  «         Œ˜t          | ||¦  «         | j	                             |¦  «         t          |||¦  «         ŒÕd S )Nr   z	pytest.%s)r   rø   rZ   r”   r‚   ÚtypesÚ
ModuleTyper1   rï   Ú__all__r  rF   rÓ  )ÚobjrÔ  r   r¦   r]  rë   r  s          r   rÓ  rÓ  ê  sÿ   € Ø€M€M€MØ—y’y‘{”{ð )ð )‰ˆˆeÝ�e�TÑ"Ô"ð 	)Ý˜#˜t TÑ*Ô*ˆCØˆ{Ø%¨Ñ,�ÝÔ& wÑ/Ô/�Ø'*•”˜GÑ$Ø �”Ý˜˜T 3Ñ'Ô'Ð'ØŒK×Ò˜tÑ$Ô$Ð$Ý�#�uÑÔÐÐå�C˜˜uÑ%Ô%Ð%ØŒK×Ò˜tÑ$Ô$Ð$õ �F˜D %Ñ(Ô(Ð(Ð(ð!)ð )r   c                 óŽ   — t          j        j        |i |¤Ž}| j        j        dk    rd|_        | 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.
    ÚyesTÚnoF)r.   r/   r0   r0  ÚcolorÚ	hasmarkup)r%   r7   r¸   r;   s       r   Úcreate_terminal_writerrœ  ÿ  sN   € õ
 
ŒÔ	˜tÐ	. vÐ	.Ð	.€BØ„}Ô˜eÒ#Ð#ØˆŒØ„}Ô˜dÒ"Ð"ØˆŒØ€Ir   c                 óf   — |                       ¦   «         } | dv rdS | dv rdS t          d| ›�¦  «        ‚)a  Convert a string representation of truth to true (1) or false (0).

    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˜  rP  ÚtrueÚonÚ1rT   )rX  r™  ÚfÚfalseÚoffÚ0r   zinvalid truth value )Úlowerr_   )rM  s    r   rV  rV    sH   € ð �)Š)‰+Œ+€CØ
Ð2Ð2Ð2ØˆqØ	Ð5Ð	5Ð	5Øˆqåˆj°S°SÐ:Ñ;Ô;Ð;r   rk  r
   );rB   r¨  r`   r   r“  rƒ  r.   r1   r   Ú_pytest._coderc   Ú_pytest.hookspecÚ_pytest.assertionÚ_pytest._pluggyr   r   r   rp  r~   r   r   r=   r?   r6   rE   ra   rN   rv   r  r÷   rH   rG   rR   r(   rL   r   rn  rs  r$  r©  rN  r¸  rª  ró   ÚobjectrÄ  rÍ  rh  rS  rM   ÚEnvironmentErrorrÒ   r‚  r‡  rŒ  r  rÓ  rœ  rV  r"   r   r   ú<module>r­     sG  ðØ BÐ BØ €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€à 	€	€	€	à €€€€€€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Iàˆ>˜(Ñ#Ô#€Øˆ>˜(Ñ#Ô#€ð
<ð 
<ð 
<ð 
<ð 
<˜Iñ 
<ô 
<ð 
<ðð ð ð ð8ð ð ð ð ñ ô ð ð/ð /ð /ð /ð /�ñ /ô /ð /ð €ð÷ "šE™GœGð	 ð �#�oÑ&Ô&€Ø × Ò �JÑ Ô Ð ð"ð "ð "ðð ð ð	&ð 	&ð 	&ðð ð ð ð<]&ð ]&ð ]&ð ]&ð ]&˜-ñ ]&ô ]&ð ]&ð@	s$ð s$ð s$ð s$ð s$ñ s$ô s$ð s$ðlð ð ð ð �Iñ ô ð ð"7ð 7ð 7ð 7ð 7ñ 7ô 7ð 7ðD!$ð !$ð !$ð !$ð !$ñ !$ô !$ð !$ðHð ð ð ð �XÔ,ñ ô ð ð2.3ð .3ð .3ð .3ð .3 8Ô#9ñ .3ô .3ð .3ðdð ð ð)ð )ð )ð )ð )�ñ )ô )ð )ðð ð ð ð ñ ô ð ð 
ˆ‰Œ€Ø€ðM/ð M/ð M/ð M/ð M/ˆVñ M/ô M/ð M/ð^
 )ð ð ð ð ðð ð ð ðDð ð ð8ð ð ð*ð *ð *ð *ð4)ð )ð )ð*
ð 
ð 
ð<ð <ð <ð <ð <r   