Ë
    V.jõ ã                  ó˜  — d Z ddlmZ ddlZddlZddlZddlZddlZddl	m
Z
 ddlZddlZddlZddlZddlZddlZddlZddlZddl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&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/m0Z0 ddl/m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6Z4ddl6m7Z7 dd l6m8Z8 dd!l9m:Z: dd"l;m<Z< dd#l=m>Z> dd$l=m?Z? ddl@Z4ddlAZ4dd%lBmCZC dd&lBmDZD dd'lEmFZF dd(lEmGZG dd)lEmHZH dd*lEmIZI dd+lEmJZJ dd,lEmKZK dd-lLmMZM dd.lNmOZO dd/lNmPZP e%rdd0lQmRZR dd1lSmTZT eUZV	  e(d2«      ZW e*d2«      ZXe G d3„ d4ej²                  «      «       ZZ G d5„ d6e[«      Z\	 	 	 	 dpd7„Z]	 	 dq	 	 	 	 	 drd8„Z^dsd9„Z_ G d:„ d;«      Z`dtd<„Zadtd=„Zbd>Zcg ec¢d?‘d@‘dA‘dB‘dC‘dD‘dE‘dF‘dG‘dH‘dI‘dJ‘dK‘dL‘dM‘dN‘dO‘dP‘dQ‘dR‘dS‘dT‘dU‘dV‘dW‘dX‘­Zd eeed«      ZfefjÏ                  dY«       efjÏ                  dZ«       	 	 dq	 	 	 	 	 dud\„Zhdvd^„Zi	 	 dq	 	 	 	 	 dwd_„Zjdxd`„Zk	 	 	 	 	 	 	 	 dyda„Zle G db„ d]e,«      «       Zm	 	 	 	 dzdc„Zn G dd„ de«      Zo eo«       Zpd{df„Zqe G dg„ d[«      «       Zrd|dh„Zs	 d}	 	 	 	 	 d~di„Ztddj„Zu e
dk¬l«      	 	 	 	 	 	 d€dm„«       Zvd�dn„Zw	 	 	 	 	 	 d‚do„Zxy)ƒz:Command line options, ini-file and conftest.py processing.é    )ÚannotationsN)Ú	lru_cache)Údedent)ÚFunctionType)ÚAny)ÚCallable)Úcast)ÚFinal)Úfinal)Ú	Generator)ÚIO)ÚIterable)ÚIterator)ÚSequence)ÚTextIO)ÚType)ÚTYPE_CHECKING)ÚHookimplMarker)ÚHookimplOpts)ÚHookspecMarker)ÚHookspecOpts)ÚPluginManageré   )ÚPathAwareHookProxy)Ú	PrintHelp)Ú
UsageError)Údetermine_setup)Ú__version__)ÚExceptionInfo)Úfilter_traceback)ÚTracebackStyle)ÚTerminalWriter)ÚArgument©ÚParser)Úfail)ÚSkipped)Úabsolutepath)Úbestrelpath)Úimport_path)Ú
ImportMode)Úresolve_package_path)Úsafe_exists)ÚStash)ÚPytestConfigWarning)Úwarn_explicit_for)ÚCache)ÚTerminalReporterÚpytestc                  ó(   — e Zd ZdZdZdZdZdZdZdZ	y)	ÚExitCodez�Encodes the valid exit codes by pytest.

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

    .. versionadded:: 5.0
    r   r   é   é   é   é   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚOKÚTESTS_FAILEDÚINTERRUPTEDÚINTERNAL_ERRORÚUSAGE_ERRORÚNO_TESTS_COLLECTED© ó    úYC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\_pytest/config/__init__.pyr5   r5   [   s(   „ ñð 
€Bà€Là€Kà€Nà€KàÑrE   r5   c                  ó(   — e Zd Z	 	 	 	 	 	 dd„Zdd„Zy)ÚConftestImportFailurec               ó    — || _         || _        y ©N)ÚpathÚcause)ÚselfrK   rL   s      rF   Ú__init__zConftestImportFailure.__init__s   s   € ð ˆŒ	Øˆ�
rE   c                óz   — t        | j                  «      j                  › d| j                  › d| j                  › d�S )Nú: z (from Ú))ÚtyperL   r:   rK   ©rM   s    rF   Ú__str__zConftestImportFailure.__str__|   s3   € Ü�t—z‘zÓ"×+Ñ+Ð,¨B¨t¯z©z¨l¸'À$Ç)Á)ÀÈAÐNÐNrE   N)rK   úpathlib.PathrL   Ú	ExceptionÚreturnÚNone)rW   Ústr)r:   r;   r<   rN   rT   rD   rE   rF   rH   rH   r   s)   „ ðàðð ð	ð
 
óôOrE   rH   c                ó„   — t        | «      xr4 dt        | j                  «      j                  t        j
                  «      vS )zÓFilter tracebacks entries which point to pytest internals or importlib.

    Make a special case for importlib because we use it to import test modules and conftest files
    in _pytest.pathlib.import_path.
    Ú	importlib)r    rY   rK   ÚsplitÚosÚsep)Úentrys    rF   Ú,filter_traceback_for_conftest_import_failurer`   €   s3   € ô ˜EÓ"ÒW {¼#¸e¿j¹j»/×:OÑ:OÔPR×PVÑPVÓ:WÐ'WÐWrE   c                ó„  — t         j                  j                  d«      }	 t        t         j                  d<   	 t	        | |«      }	 |j
                  j                  |¬«      }	 t        |«      |j                  «        |€!t         j                  j                  dd«       S |t         j                  d<   S # t        $ rK |cY |j                  «        |€!t         j                  j                  dd«       S |t         j                  d<   S w xY w# |j                  «        w xY w# t        $ �r=}t        j                  |j                  «      }t        t         j"                  «      }|j%                  d|j&                  › d�d¬«       |j(                  j+                  t,        «      |_        |j(                  r|j/                  dd	¬
«      n|j1                  «       }t3        |«      }	|	j5                  «       D ]#  }
|j%                  |
j7                  «       d¬«       Œ% t        j8                  cY d}~|€!t         j                  j                  dd«       S |t         j                  d<   S d}~ww xY w# t:        $ r‘}t        t         j"                  «      }|j<                  D ]  }|j%                  d|› d�d¬«       Œ t        j8                  cY d}~|€!t         j                  j                  dd«       S |t         j                  d<   S d}~ww xY w# |€!t         j                  j                  dd«       w |t         j                  d<   w xY w)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: Ú
)r]   ÚenvironÚgetr   Ú_prepareconfigÚhookÚpytest_cmdline_mainr5   Ú_ensure_unconfigureÚpopÚ
ValueErrorrH   r   Úfrom_exceptionrL   r"   ÚsysÚstderrÚlinerK   Ú	tracebackÚfilterr`   ÚgetreprÚexconlyrY   Ú
splitlinesÚrstriprB   r   Úargs)r|   ÚpluginsÚold_pytest_versionrd   ÚretÚeÚexc_infoÚtwÚexc_reprÚformatted_tbru   Úmsgs               rF   Úmainr†   ‹   s¦  € ô Ÿ™Ÿ™Ð(8Ó9Ðð&>Ü'2Œ�
‰
Ð#Ñ$ð	-Ü# D¨'Ó2ˆFð$-Ø&,§k¡k×&EÑ&EÈVÐ&EÓ&T�ðÜ# C›=ð ×*Ñ*Ô,ð Ð%Ü�J‰J�N‰NÐ+¨TÕ2à+=ŒB�J‰JÐ'Ò(øô "ò Ø‘Jà×*Ñ*Ô,ð Ð%Ü�J‰J�N‰NÐ+¨TÕ2à+=ŒB�J‰JÐ'Ò(ðûð ×*Ñ*Õ,ûô1 %ó 	(Ü$×3Ñ3°A·G±GÓ<ˆHÜ¤§
¡
Ó+ˆBØ�G‰GÐ:¸1¿6¹6¸(À"ÐEÈ4ˆGÔPØ!)×!3Ñ!3×!:Ñ!:Ü<ó"ˆHÔð
 ×%Ò%ð × Ñ  w°eÐ Ô<à×%Ñ%Ó'ð ô
 ˜x›=ˆLØ$×/Ñ/Ö1�Ø—‘˜Ÿ™›¨4�Õ0ð 2ä×'Ñ'Ô'ð  Ð%Ü�J‰J�N‰NÐ+¨TÕ2à+=ŒB�J‰JÐ'Ò(ûðE	(ûô2 ò $ÜœCŸJ™JÓ'ˆØ—6”6ˆCØ�G‰G�g˜c˜U "Ð%¨4ˆGÕ0ð ä×#Ñ#Ô#àÐ%Ü�J‰J�N‰NÐ+¨TÕ2à+=ŒB�J‰JÐ'Ò(ûð$ûð Ð%Ü�J‰J�N‰NÐ+¨TÕ2à+=ŒB�J‰JÐ'Ò(ús–   ¡I* ¹D  ÁD Á#
B4 Á-I* Â4DÂ?D Ã I* ÄDÄD ÄDÄI* Ä 
I'Ä*C<I"È&I'È'I* É"I'É'I* É*	LÉ3AK?ËLËL Ë?LÌL Ì8L?c                 ó>  — 	 t        «       } t        j                  j                  «        | S # t        $ rg t        j                  t
        j                  t
        j                  «      }t        j                  |t        j                  j                  «       «       Y yw xY w)zoThe CLI entry point of pytest.

    This function is not meant for programmable use; use `main()` instead.
    r   )r†   rs   ÚstdoutÚflushÚBrokenPipeErrorr]   ÚopenÚdevnullÚO_WRONLYÚdup2Úfileno)ÚcoderŒ   s     rF   Úconsole_mainr‘   Â   sj   € ð	Ü‹vˆÜ�
‰
×ÑÔØˆøÜò ô —'‘'œ"Ÿ*™*¤b§k¡kÓ2ˆÜ
�‰�œŸ™×*Ñ*Ó,Ô-Ùðús   ‚), ¬A-BÂBc                  ó   — e Zd Z ee«      Zy)ÚcmdlineN)r:   r;   r<   Ústaticmethodr†   rD   rE   rF   r“   r“   Ô   s   „ Ù˜Ó�DrE   r“   c                ód   — t         j                  j                  | «      rt        |› d| › �«      ‚| S )ztArgparse type validator for filename arguments.

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

    :path: Path of directory.
    :optname: Name of the option.
    z must be a directory, given: r–   r˜   s     rF   Údirectory_argrœ   ã   s0   € ô �7‰7�=‰=˜ÔÜ˜G˜9Ð$AÀ$ÀÐHÓIÐIØ€KrE   )Ú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        j                  | xs d|t        j                  j                  «       ¬«      ¬«      }| �|j                  | d¬«       t        D ]  }|j                  |«       Œ |S )NrD   ©r|   r}   Údir©Úinvocation_paramsT©Úexclude_only)	ÚPytestPluginManagerr½   ÚInvocationParamsÚpathlibÚPathÚcwdÚconsider_preparseÚdefault_pluginsÚimport_plugin)r|   r}   Úpluginmanagerrd   Úspecs        rF   Ú
get_configrÏ     s€   € ô
 (Ó)€MÜØÜ ×1Ñ1Ø’˜ØÜ—‘× Ñ Ó"ð 2ó 
ô€Fð Ðà×'Ñ'¨¸4Ð'Ô@çˆØ×#Ñ# DÕ)ð  ð €MrE   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Í   rD   rE   rF   Úget_plugin_managerrÑ   3  s   € ô ‹<×%Ñ%Ð%rE   c                ó   — | €t         j                  dd  } ngt        | t        j                  «      rt        j
                  | «      g} n6t        | t        «      s&d}t        |j                  | t        | «      «      «      ‚t        | |«      }|j                  }	 |r:|D ]5  }t        |t        «      r|j                  |«       Œ%|j                  |«       Œ7 |j                  j!                  || ¬«      }|S # t"        $ r |j%                  «        ‚ w xY w)Nr   zG`args` parameter expected to be a list of strings, got: {!r} (type: {}))rÍ   r|   )rs   ÚargvÚ
isinstancer]   ÚPathLikeÚfspathÚlistÚ	TypeErrorÚformatrR   rÏ   rÍ   rY   Úconsider_pluginargÚregisterrm   Úpytest_cmdline_parseÚBaseExceptionro   )r|   r}   r…   rd   rÍ   Úplugins         rF   rl   rl   >  sú   € ð €|Ü�x‰x˜˜ˆ|‰Ü	�Dœ"Ÿ+™+Ô	&Ü—	‘	˜$“Ð ‰Ü˜œdÔ#àUð 	ô ˜Ÿ
™
 4¬¨d«Ó4Ó5Ð5ä˜˜gÓ&€FØ×(Ñ(€MðÙÛ!�Ü˜f¤cÔ*Ø!×4Ñ4°VÕ<à!×*Ñ*¨6Õ2ð	 "ð
 ×#Ñ#×8Ñ8Ø'¨dð 9ó 
ˆð ˆøÜò Ø×"Ñ"Ô$Øðús   ÂAC2 Ã2Dc                ó>   — | j                  «       r| j                  S | S )z<Get the directory of a path - itself if already a directory.)Úis_fileÚparent)rK   s    rF   Ú_get_directoryrâ   ^  s   € à‡|�|„~Ø�{‰{ÐàˆrE   c                ó  — t         rt        j                  | «      sJ ‚t        | dg «      D �ch c]  }|j                  ’Œ }}g }i }|D ]Z  }t        | |t
        «      }|t
        ur|j                  |› d|› �«       d||<   Œ8||v r|j                  |› d�«       d||<   ŒVd||<   Œ\ |radj                  |«      }	t        j                  j                  j                  || j                  |	¬«      }
t        t        t        | «      |
«       |S c c}w )NÚ
pytestmarkÚ=Tz=TrueFú, )rR   ÚfullnameÚ	hook_opts)r   ÚinspectÚ	isroutineÚgetattrÚnameÚAttributeErrorÚappendÚjoinÚ_pytestÚ
deprecatedÚHOOK_LEGACY_MARKINGrÙ   r<   r0   r	   r   )ÚmethodÚ	hook_typeÚ	opt_namesÚmÚknown_marksÚ	must_warnÚoptsÚopt_nameÚopt_attrrè   Úmessages              rF   Ú_get_legacy_hook_marksrý   f  s  € õ
 ä× Ñ  Ô(Ð(Ð(Ü-4°V¸\È2Ô-NÓOÑ-N¨˜QŸV›VÐ-N€KÐOØ€IØ€DÛˆÜ˜6 8¬^Ó<ˆØœ>Ñ)Ø×Ñ ˜z¨¨8¨*Ð5Ô6Ø!ˆD�ŠNØ˜Ñ$Ø×Ñ ˜z¨Ð/Ô0Ø!ˆD�ŠNà"ˆD�ŠNð ñ Ø—I‘I˜iÓ(ˆ	Ü×$Ñ$×8Ñ8×?Ñ?ØØ×(Ñ(Øð @ó 
ˆô
 	œ$œ|¨VÓ4°gÔ>Ø€Kùò+ Ps   ­D
c                  ó„  ‡ — e Zd ZdZdˆ fd„Z	 	 	 	 	 	 dˆ fd„Zdˆ fd„Zddˆ fd„Zdd„Zd d„Z	d!d„Z
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d"d	„Zd#d
„Z	 	 	 	 	 	 	 	 	 	 d$d„Z	 	 	 	 	 	 	 	 	 	 d%d„Zd&d„Z	 	 	 	 	 	 d'd„Z	 	 	 	 	 	 	 	 	 	 d(d„Z	 	 	 	 	 	 d)d„Zddœ	 	 	 	 	 d*d„Zd+d„Z	 	 	 	 	 	 d,d„Zdd„Zd-d„Z	 	 	 	 d.d„Zd/d0d„Zˆ xZS )1rÅ   a;  A :py:class:`pluggy.PluginManager <pluggy.PluginManager>` with
    additional pytest-specific functionality:

    * Loading plugins from the command line, ``PYTEST_PLUGINS`` env variable and
      ``pytest_plugins`` global variables found in plugins being loaded.
    * ``conftest.py`` loading during start-up.
    c                óä  •— dd l }t        ‰| �	  d«       t        «       | _        i | _        d | _        d| _         t        d«      t        «      | _	        g | _
        | j                  |j                  «       | j                  | «       t        j                  j!                  d«      r—t"        j$                  }t'        |dd«      }	 t)        t        j*                  |j-                  «       «      |j.                  d|¬	«      }| j2                  j4                  j7                  |j8                  «       | j;                  «        |j<                  j?                  «       | _         d| _!        y # t0        $ r Y Œqw xY w)
Nr   r3   Fé   ÚPYTEST_DEBUGÚencodingÚutf8r   )ÚmodeÚ	bufferingr  )"Ú_pytest.assertionÚsuperrN   ÚsetÚ_conftest_pluginsÚ_dirpath2confmodsÚ_confcutdirÚ_noconftestr   râ   Úskipped_pluginsÚadd_hookspecsÚhookspecrÛ   r]   rj   rk   rs   rt   rë   r‹   Údupr�   r  rV   ÚtraceÚrootÚ	setwriterÚwriteÚenable_tracingr¬   ÚDummyRewriteHookÚrewrite_hookÚ_configured)rM   rð   Úerrr  Ú	__class__s       €rF   rN   zPytestPluginManager.__init__�  s,  ø€ Û ä‰Ñ˜Ô"ô 9<»ˆÔð NPˆÔà04ˆÔà ˆÔð
 -œi¨›n¬^Ó<ˆÔð 79ˆÔà×Ñ˜7×+Ñ+Ô,Ø�‰�dÔÜ�:‰:�>‰>˜.Ô)ÜŸ:™:ˆCÜ# C¨°VÓ<ˆHðÜÜ—F‘F˜3Ÿ:™:›<Ó(ØŸ™ØØ%ô	�ð �J‰J�O‰O×%Ñ% c§i¡iÔ0Ø×ÑÔ!ð $×-Ñ-×>Ñ>Ó@ˆÔà ˆÕøô ò Ùðús   Ã:E# Å#	E/Å.E/c                óº   •— |j                  d«      sy|dk(  ryt        ‰| �	  ||«      }|�|S t        ||«      }t	        j
                  |«      syt        |dd«      S )ú:meta private:Úpytest_NÚpytest_pluginsÚimpl)ÚtryfirstÚtrylastÚoptionalhookÚhookwrapper)Ú
startswithr  Úparse_hookimpl_optsrë   ré   rê   rý   )rM   rÞ   rì   rù   ró   r  s        €rF   r%  z'PytestPluginManager.parse_hookimpl_optsÃ  sn   ø€ ð �‰˜yÔ)ØàÐ#Ò#Øä‰wÑ*¨6°4Ó8ˆØÐØˆKä˜ Ó&ˆä× Ñ  Ô(Øä%Ø�FÐRó
ð 	
rE   c                ó€   •— t         ‰| �  ||«      }|€*t        ||«      }|j                  d«      rt	        |dd«      }|S )r  r  rÎ   )ÚfirstresultÚhistoric)r  Úparse_hookspec_optsrë   r$  rý   )rM   Úmodule_or_classrì   rù   ró   r  s        €rF   r)  z'PytestPluginManager.parse_hookspec_optsÝ  sK   ø€ ä‰wÑ*¨?¸DÓAˆØˆ<Ü˜_¨dÓ3ˆFØ�‰˜yÔ)Ü-ØØØ/ó�ð
 ˆrE   c           
     óš  •— |t         j                  j                  v r>t        j                  t        dj                  |j                  dd«      «      «      «       y t        ‰| �%  ||«      }|�]| j                  j                  j                  t        ||| ¬«      ¬«       t        |t        j                   «      r| j#                  |«       |S )NzQ{} plugin has been merged into the core, please remove it from your requirements.Ú_Ú-)rÞ   Úplugin_nameÚmanager©Úkwargs)rð   rñ   ÚDEPRECATED_EXTERNAL_PLUGINSr´   Úwarnr/   rÙ   Úreplacer  rÛ   rm   Úpytest_plugin_registeredÚcall_historicÚdictrÔ   ÚtypesÚ
ModuleTypeÚconsider_module)rM   rÞ   rì   r.  r  s       €rF   rÛ   zPytestPluginManager.registerê  s¹   ø€ Ø”7×%Ñ%×AÑAÑAÜ�M‰MÜ#ð?ß?E¹vØŸ™ S¨#Ó.ó@óôð Ü‘gÑ& v¨tÓ4ˆØÐ"Ø�I‰I×.Ñ.×<Ñ<ÜØ!Ø +Ø ôð =ô ô ˜&¤%×"2Ñ"2Ô3Ø×$Ñ$ VÔ,ØÐrE   c                ó(   — | j                  |«      }|S rJ   )Ú
get_plugin)rM   rì   rÞ   s      rF   Ú	getpluginzPytestPluginManager.getplugin  s   € à'+§¡°tÓ'<ˆØˆrE   c                ó6   — t        | j                  |«      «      S )z:Return whether a plugin with the given name is registered.)Úboolr<  )rM   rì   s     rF   Ú	haspluginzPytestPluginManager.hasplugin  s   € ä�D—O‘O DÓ)Ó*Ð*rE   c                óZ   — |j                  dd«       |j                  dd«       d| _        y)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  )rM   rd   s     rF   Úpytest_configurez$PytestPluginManager.pytest_configure  s>   € ð 	×ÑØðGô	
ð 	×ÑØðFô	
ð  ˆÕrE   c               ó>  — |rt        ||z  «      nd| _        || _        || _        d}	|D ]Y  }
t	        |
«      }|j                  d«      }|dk7  r|d| }t        ||z  «      }t        |«      sŒC| j                  ||||¬«       d}	Œ[ |	s| j                  ||||¬«       yy)a`  Load initial conftest files given a preparsed "namespace".

        As conftest files may add their own command line options which have
        arguments ('--my-opt somepath') we might get some false positives.
        All builtin and 3rd party plugins will have been loaded, however, so
        common options will not confuse our logic here.
        NFú::éÿÿÿÿ©Úconsider_namespace_packagesT)r(   r  r  Ú_using_pyargsrY   Úfindr-   Ú_try_load_conftest)rM   r|   ÚpyargsÚ
noconftestÚrootpathÚ
confcutdirÚinvocation_dirÚ
importmoderI  ÚfoundanchorÚinitial_pathrK   ÚiÚanchors                 rF   Ú_set_initial_conftestsz*PytestPluginManager._set_initial_conftests!  sÐ   € ñ( :DŒL˜¨*Ñ4Ô5Èð 	Ôð &ˆÔØ#ˆÔØˆÛ ˆLÜ�|Ó$ˆDà—	‘	˜$“ˆAØ�BŠwØ˜B˜Q�x�Ü! .°4Ñ"7Ó8ˆFô ˜6Õ"Ø×'Ñ'ØØØØ0Kð	 (ô ð #‘ð# !ñ$ Ø×#Ñ#ØØØØ,Gð	 $õ ð rE   c                óL   — | j                   €y|| j                   j                  vS )z:Whether to consider the given path to load conftests from.T)r  Úparents)rM   rK   s     rF   Ú_is_in_confcutdirz%PytestPluginManager._is_in_confcutdirT  s*   € à×ÑÐ#Øð ˜4×+Ñ+×3Ñ3Ð3Ð3rE   c               óÈ   — | j                  ||||¬«       |j                  «       r=|j                  d«      D ](  }|j                  «       sŒ| j                  ||||¬«       Œ* y y )NrH  ztest*)Ú_loadconftestmodulesÚis_dirÚglob)rM   rV  rR  rO  rI  Úxs         rF   rL  z&PytestPluginManager._try_load_conftestc  sn   € ð 	×!Ñ!ØØØØ(Cð	 	"ô 	
ð �=‰=Œ?Ø—[‘[ Ö)�Ø—8‘8•:Ø×-Ñ-ØØ"Ø Ø4Oð	 .õ ñ *ð rE   c               óX  — | j                   ry | j                  |«      }|| j                  v ry g }t        |g|j                  ¢­«      D ]P  }| j                  |«      sŒ|dz  }|j                  «       sŒ+| j                  ||||¬«      }	|j                  |	«       ŒR || j                  |<   y )Nzconftest.pyrH  )	r  râ   r
  ÚreversedrY  rZ  rà   Ú_importconftestrî   )
rM   rK   rR  rO  rI  Ú	directoryÚclistrá   ÚconftestpathÚmods
             rF   r\  z(PytestPluginManager._loadconftestmodules|  s»   € ð ×ÒØà×'Ñ'¨Ó-ˆ	ð ˜×.Ñ.Ñ.ØàˆÜ 	Ð>¨I×,=Ñ,=Ñ>Ö?ˆFØ×%Ñ% fÕ-Ø%¨Ñ5�Ø×'Ñ'Õ)Ø×.Ñ.Ø$Ø"Ø Ø4Oð	 /ó �Cð —L‘L Õ%ð @ð -2ˆ×Ñ˜yÒ)rE   c                ó\   — | j                  |«      }| j                  j                  |d«      S )NrD   )râ   r
  rk   )rM   rK   rc  s      rF   Ú_getconftestmodulesz'PytestPluginManager._getconftestmodulesœ  s+   € Ø×'Ñ'¨Ó-ˆ	Ø×%Ñ%×)Ñ)¨)°RÓ8Ð8rE   c                ó˜   — | j                  |«      }t        |«      D ]  }	 |t        ||«      fc S  t	        |«      ‚# t        $ r Y Œ+w xY wrJ   )rh  ra  rë   rí   ÚKeyError)rM   rì   rK   Úmodulesrf  s        rF   Ú_rget_with_confmodz&PytestPluginManager._rget_with_confmod   sZ   € ð
 ×*Ñ*¨4Ó0ˆÜ˜GÖ$ˆCðØœG C¨Ó.Ð.Ò.ð %ô
 �t‹nÐøô "ò Ùðús   ¡=½	A	ÁA	c          
     ó  — t        |«      }| j                  |«      }|�t        t        j                  |«      S t        |«      }|€	 t        j                  |j                  = 	 t        ||||¬«      }| j                  ||«       | j                  j!                  |«       |j"                  }
|
| j$                  v rj| j$                  j'                  «       D ]M  \  }}|
|j(                  v s||
k(  sŒ||v rt+        d|›d|› d|j,                  › d�«      ‚|j/                  |«       ŒO | j1                  d|›�«       | j3                  ||¬«       |S # t        $ r Y Œõw xY w# t        $ r!}	|	j                  €J ‚t        ||	¬«      |	‚d }	~	ww xY w)	N)r  r  rI  )rL   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)rY   r<  r	   r8  r9  r,   rs   rk  Ústemrj  r*   rV   Ú__traceback__rH   Ú_check_non_top_pytest_pluginsr	  Úaddrá   r
  ÚitemsrY  ÚAssertionErrorÚ__file__rî   r  Úconsider_conftest)rM   re  rR  rO  rI  Úconftestpath_plugin_nameÚexistingÚpkgpathrf  r€   ÚdirpathrK   Úmodss                rF   rb  z#PytestPluginManager._importconftest­  s¯  € ô $' |Ó#4Ð Ø—?‘?Ð#;Ó<ˆØÐÜœ×(Ñ(¨(Ó3Ð3ô ' |Ó4ˆØˆ?ðÜ—K‘K × 1Ñ 1Ð2ð		FÜØØØØ,Gô	ˆCð 	×*Ñ*¨3°Ô=à×Ñ×"Ñ" 3Ô'Ø×%Ñ%ˆØ�d×,Ñ,Ñ,Ø"×4Ñ4×:Ñ:Ö<‘
��dØ˜dŸl™lÑ*¨d°g«oØ˜d‘{Ü,ØAÀ,ÐAQð R5Ø58°EÐ9VÐWZ×WcÑWcÐVdð ebðbóð ð
 —K‘K Õ$ð =ð 	�
‰
Ð,¨S¨GÐ4Ô5Ø×Ñ˜sÐ6NÐÔOØˆ
øô= ò Ùðûô ò 	FØ—?‘?Ð.Ð.Ð.Ü'¨¸AÔ>ÀAÐEûð	Fús*   ÁE Á#E Å	EÅEÅ	FÅ$F Æ Fc                ó¤   — t        |d«      rD| j                  r7| j                  s*d}t        |j	                  || j
                  «      d¬«       y y y y )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  rJ  r&   rÙ   r  )rM   rf  re  r…   s       rF   rq  z1PytestPluginManager._check_non_top_pytest_pluginsâ  sX   € ô �CÐ)Ô*Ø× Ò Ø×&Ò&ðwð ô �—‘˜L¨$×*:Ñ*:Ó;ÀUÖKð 'ð !ð +rE   FrÃ   c               óD  — d}t        |«      }||k  r||   }|dz  }t        |t        «      r^|dk(  r	 ||   }|dz  }n|j	                  d«      r|dd }nŒH|j                  «       }|r|j	                  d«      sŒl| j                  |«       ||k  rŒ~yy# t        $ r Y yw xY w)r  r   r   z-pNr6   úno:)ÚlenrÔ   rY   Ú
IndexErrorr$  ÚstriprÚ   )rM   r|   rÄ   rU  ÚnÚoptÚpargs          rF   rÊ   z%PytestPluginManager.consider_preparseü  s¶   € ð ˆÜ�‹IˆØ�!ŠeØ�q‘'ˆCØ�‰FˆAÜ˜#œsÔ#Ø˜$’;ðØ# A™w˜ð ˜‘F‘AØ—^‘^ DÔ)Ø˜q˜r˜7‘DàØ—z‘z“|�Ù¨¯©¸Ô(>ØØ×'Ñ'¨Ô-ð# �!�eøô &ò Ùðús   ³B Â	BÂBc                ó²  — |j                  d«      r{|dd }|t        v rt        d|› d�«      ‚|dk(  r"| j                  d«       | j                  d«       | j                  |«       |j                  d	«      s| j                  d	|z   «       yy|}| j	                  |«       |j                  d	«      s| j	                  d	|z   «       | j                  |d
¬«       y)r  r€  r7   Nzplugin z cannot be disabledr¯   r³   Úpytest_stepwiser  T)Úconsider_entry_points)r$  Úessential_pluginsr   Úset_blockedÚunblockrÌ   )rM   Úargrì   s      rF   rÚ   z&PytestPluginManager.consider_pluginarg  sÓ   € à�>‰>˜%Ô Ø�q�r�7ˆDØÔ(Ñ(Ü  7¨4¨&Ð0CÐ!DÓEÐEð �Ò&Ø× Ñ  Ô,Ø× Ñ Ð!2Ô3à×Ñ˜TÔ"Ø—?‘? 9Ô-Ø× Ñ  ¨TÑ!1Õ2ð .ð ˆDà�L‰L˜ÔØ—?‘? 9Ô-Ø—‘˜Y¨Ñ-Ô.Ø×Ñ˜s¸$ÐÕ?rE   c                ó*   — | j                  ||¬«       y)r  ©rì   N)rÛ   )rM   Úconftestmodulern  s      rF   rv  z%PytestPluginManager.consider_conftest,  s   € ð 	�‰�nÐ+<ˆÕ=rE   c                ó`   — | j                  t        j                  j                  d«      «       y)r  ÚPYTEST_PLUGINSN)Ú_import_plugin_specsr]   rj   rk   rS   s    rF   Úconsider_envz PytestPluginManager.consider_env2  s   € à×!Ñ!¤"§*¡*§.¡.Ð1AÓ"BÕCrE   c                ó<   — | j                  t        |dg «      «       y)r  r  N)r“  rë   )rM   rf  s     rF   r:  z#PytestPluginManager.consider_module6  s   € à×!Ñ!¤'¨#Ð/?ÀÓ"DÕErE   c                óJ   — t        |«      }|D ]  }| j                  |«       Œ y rJ   )Ú_get_plugin_specs_as_listrÌ   )rM   rÎ   r}   Úimport_specs       rF   r“  z(PytestPluginManager._import_plugin_specs:  s&   € ô ,¨DÓ1ˆÛ"ˆKØ×Ñ˜{Õ+ñ #rE   c                ón  — t        |t        «      s
J d|›�«       ‚| j                  |«      s| j                  |«      �y|t        v rd|z   n|}| j
                  j                  |«       |r| j                  d|¬«      }|ry	 t        |«       t        j                  |   }| j                  ||«       y# t        $ r=}t        d|› d|j                  d   › �«      j                  |j                  «      |‚d}~wt         $ r5}| j"                  j%                  ||j&                  xs d	f«       Y d}~yd}~ww xY w)
z™Import a plugin with ``modname``.

        If ``consider_entry_points`` is True, entry point names are also
        considered to find a plugin.
        z"module name as text required, got Nz_pytest.Úpytest11r�  zError importing plugin "z": r   Ú )rÔ   rY   Ú
is_blockedr<  Úbuiltin_pluginsr  Úmark_rewriteÚload_setuptools_entrypointsÚ
__import__rs   rk  rÛ   ÚImportErrorr|   Úwith_tracebackrp  r'   r  rî   r…   )rM   Úmodnamer‰  Ú
importspecÚloadedrf  r€   s          rF   rÌ   z!PytestPluginManager.import_pluginA  s1  € ô Ø”Sô
ð 	<à/°¨{Ð;ó	<ð 
ð �?‰?˜7Ô# t§¡°wÓ'?Ð'KØà-4¼Ñ-G�Z 'Ò)ÈWˆ
Ø×Ñ×&Ñ& zÔ2á Ø×5Ñ5°jÀwÐ5ÓOˆFÙØð	(Ü�zÔ"ô —+‘+˜jÑ)ˆCØ�M‰M˜#˜wÕ'øô ò 	5ÜØ*¨7¨)°3°q·v±v¸a±y°kÐBóç‰n˜QŸ_™_Ó-°1ð5ûô ò 	@Ø× Ñ ×'Ñ'¨°!·%±%²+¸2Ð(>×?Ñ?ûð	@ús$   ÂB2 Â2	D4Â;8C3Ã3D4Ã?+D/Ä/D4©rW   rX   )rÞ   Ú_PluggyPluginrì   rY   rW   zHookimplOpts | None)rì   rY   rW   zHookspecOpts | NonerJ   )rÞ   r§  rì   ú
str | NonerW   r¨  ©rì   rY   )rì   rY   rW   r?  )rd   r½   rW   rX   )r|   zSequence[str | pathlib.Path]rM  r?  rN  r?  rO  rU   rP  úpathlib.Path | NonerQ  rU   rR  zImportMode | strrI  r?  rW   rX   )rK   rU   rW   r?  )
rV  rU   rR  ústr | ImportModerO  rU   rI  r?  rW   rX   )
rK   rU   rR  r«  rO  rU   rI  r?  rW   rX   )rK   rU   rW   zSequence[types.ModuleType])rì   rY   rK   rU   rW   ztuple[types.ModuleType, Any])
re  rU   rR  r«  rO  rU   rI  r?  rW   útypes.ModuleType)rf  r¬  re  rU   rW   rX   )r|   úSequence[str]rÄ   r?  rW   rX   )r�  rY   rW   rX   )r�  r¬  rn  rY   rW   rX   )rf  r¬  rW   rX   )rÎ   ú-None | types.ModuleType | str | Sequence[str]rW   rX   )F)r£  rY   r‰  r?  rW   rX   )r:   r;   r<   r=   rN   r%  r)  rÛ   r=  r@  rD  rW  rZ  rL  r\  rh  rl  rb  rq  rÊ   rÚ   rv  r”  r:  r“  rÌ   Ú__classcell__)r  s   @rF   rÅ   rÅ   †  s  ø„ ñõ1!ðf
Ø#ð
Ø+.ð
à	õ
õ4öó2ó
+ó ð*1à*ð1ð ð1ð ð	1ð
 ð1ð (ð1ð %ð1ð %ð1ð &*ð1ð 
ó1óf4ðàðð %ðð ð	ð &*ðð 
óð22àð2ð %ð2ð ð	2ð &*ð2ð 
ó2ó@9ðàðð ðð 
&ó	ð3à"ð3ð %ð3ð ð	3ð &*ð3ð 
ó3ðjLàðLð #ðLð 
ó	Lð6 <Añ.Ø!ð.Ø48ð.à	ó.ó2@ð.>Ø.ð>ØCFð>à	ó>óDóFð,ØAð,à	ó,÷#(ð #(rE   c                ó  — | €g S t        | t        j                  «      rg S t        | t        «      r| r| j	                  d«      S g S t        | t
        j                  j                  «      rt        | «      S t        d| ›�«      ‚)z:Parse a plugins specification into a list of plugin names.Ú,zWPlugins may be specified as a sequence or a ','-separated string of plugin names. Got: )
rÔ   r8  r9  rY   r\   ÚcollectionsÚabcr   r×   r   )Úspecss    rF   r—  r—  g  sz   € ð
 €}Øˆ	ä�%œ×)Ñ)Ô*Øˆ	ä�%œÔÙ#(ˆu�{‰{˜3ÓÐ0¨bÐ0ä�%œŸ™×1Ñ1Ô2Ü�E‹{ÐÜ
Ø
aÐbgÐajÐkóð rE   c                  ó   — e Zd Zd„ Zy)ÚNotsetc                 ó   — y)Nz<NOTSET>rD   rS   s    rF   Ú__repr__zNotset.__repr__}  s   € ØrE   N)r:   r;   r<   r¸  rD   rE   rF   r¶  r¶  |  s   „ órE   r¶  c              #  ó@  K  — t        | «      } d}| D ]«  }d|vxr |j                  d«      }|j                  d«      dk(  xr |j                  d«      }|rAt        j                  j                  |«      \  }}|dk7  sŒk|j                  d«      rŒ}d}|–— Œ„|sŒ‡t        j                  j                  |«      }d}|–— Œ­ |sYg }| D ];  }|j                  d«      }	dj                  |	dd	 «      }
|
sŒ+|j                  |
«       Œ= |rt        |«      E d	{  –—†  y	y	y	7 Œ­w)
aM  Given an iterable of file names in a source distribution, return the "names" that should
    be marked for assertion rewrite.

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

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

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

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

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

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

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

    More information:
        https://github.com/pytest-dev/pytest-mock/issues/167
    FÚ/z.pyr   z__init__.pyÚsetupÚ__editable__TN)r×   ÚendswithÚcountr]   rK   Úsplitextr$  Údirnamer\   rï   rî   Ú_iter_rewritable_modules)Úpackage_filesÚ	seen_someÚfnÚis_simple_moduleÚ
is_packageÚmodule_namer,  Úpackage_nameÚnew_package_filesÚpartsÚnew_fns              rF   rÁ  rÁ  „  s$  è ø€ ô@ ˜Ó'€MØ€IÛˆØ b˜=Ò?¨R¯[©[¸Ó-?ÐØ—X‘X˜c“] aÑ'ÒF¨B¯K©K¸Ó,Fˆ
ÙÜŸW™W×-Ñ-¨bÓ1‰NˆK˜ð ˜gÓ%¨k×.DÑ.DÀ^Õ.TØ �	Ø!Ó!ÚÜŸ7™7Ÿ?™?¨2Ó.ˆLØˆIØÓð ñ ð ÐÛˆBØ—H‘H˜S“MˆEØ—X‘X˜e A B˜iÓ(ˆFÚØ!×(Ñ(¨Õ0ð	  ñ
 Ü/Ð0AÓB×BÑBð ð ð Cús+   ‚A:DÁ=DÂ	DÂADÃ1#DÄDÄDc                  óÆ  — e Zd ZU dZe ej                  d¬«       G d„ d«      «       «       Z G d„ dej                  «      Z
ded	<   d
dœ	 	 	 	 	 d?d„Zed@d„«       ZedAd„«       ZdBd„ZdCd„ZdCd„ZdDd„Z	 	 	 	 	 	 dEd„Z	 dF	 	 	 	 	 dGd„ZdHd„ZedId„«       ZdJd„Z ed¬«      dKd„«       ZdLd„ZdLd„ZdCd„ZdMd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 dNd„Z dOdPd„Z! ed¬ «      dQd!„«       Z"dCd"„Z#dCd#„Z$dCd$„Z%dRd%„Z&dSd&„Z'dOdPd'„Z(dTd(„Z)dUd)„Z*dVd*„Z+dWd+„Z,dVd,„Z-	 	 	 	 	 	 dXd-„Z.dYd.„Z/e0d/fdZd0„Z1dFdVd1„Z2dFdVd2„Z3d3Z4d4ed5<   d6Z5d4ed7<   d8Z6d4ed9<   dFd[d:„Z7e8d\d;„«       Z9e8d]d<„«       Z:d^d=„Z;dCd>„Z<y
)_r½   a  Access to configuration values, pluginmanager and plugin hooks.

    :param PytestPluginManager pluginmanager:
        A pytest PluginManager.

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

        The object attributes are read-only.

        .. versionadded:: 5.1

        .. note::

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

            Plugins accessing ``InvocationParams`` must be aware of that.
        útuple[str, ...]r|   ú$Sequence[str | _PluggyPlugin] | Noner}   rU   rÀ   c               ó    — t         j                  | dt        |«      «       t         j                  | d|«       t         j                  | d|«       y )Nr|   r}   rÀ   )ÚobjectÚ__setattr__Útuple)rM   r|   r}   rÀ   s       rF   rN   z Config.InvocationParams.__init__é  s>   € ô ×Ñ˜t V¬U°4«[Ô9Ü×Ñ˜t Y°Ô8Ü×Ñ˜t U¨CÕ0rE   N)r|   úIterable[str]r}   rÑ  rÀ   rU   rW   rX   )r:   r;   r<   r=   Ú__annotations__rN   rD   rE   rF   rÆ   rÏ  Ñ  sQ   … ñ	ð ÓØJØ5Ó5Ø-ØÓØ[ð		1ð  ð		1ð :ð			1ð
 ð		1ð ô		1rE   rÆ   c                  óz   — e Zd ZdZ ej
                  «       Z ej
                  «       ZeZ ej
                  «       Z	y)úConfig.ArgsSourcezSIndicates the source of the test arguments.

        .. versionadded:: 7.2
        N)
r:   r;   r<   r=   ÚenumÚautoÚARGSÚINVOCATION_DIRÚINCOVATION_DIRÚ	TESTPATHSrD   rE   rF   Ú
ArgsSourcerÙ  ô  s5   „ ñ	ð ˆt�y‰y‹{ˆà"˜Ÿ™›ˆØ'ˆà�D—I‘I“K‰	rE   rà  r1   ÚcacheNrÁ   c               ó`  — ddl m} ddl m} |€0| j                  dd t        j
                  j                  «       ¬«      }t        j                  «       | _	        	 || _
        	 |} |d|› d|› d�| j                  d	¬
«      | _        || _        	 t        «       | _        	 | j                  | _        | j                  j"                  j$                  j'                  d«      | _        t)        | j                  j*                  «      | _        i | _        d| _        i | _        g | _        | j                  j5                  | d«       d| _        | j*                  j8                  j;                  t=        | j                  | j                  ¬«      ¬«       t>        j@                  jB                  | _"        g | _#        y )Nr   )ÚFILE_OR_DIRr$   rD   r¿   z%(prog)s [options] [z] [z] [...]T)ÚusageÚ
processoptÚ	_ispytestrd   ÚpytestconfigF)ÚparserrÍ   r0  )$Ú
argparsingrã  r%   rÆ   rÇ   rÈ   rÉ   ÚargparseÚ	NamespaceÚoptionrÂ   Ú_processoptÚ_parserrÍ   r.   ÚstashÚ_storer  r  rk   r   rm   Ú	_inicacheÚ_override_iniÚ	_opt2destÚ_cleanuprÛ   r  Úpytest_addoptionr6  r7  r½   rà  rÜ  Úargs_sourcer|   )rM   rÍ   rÂ   rã  r%   Ú_as         rF   rN   zConfig.__init__  s‚  € õ 	,Ý&àÐ$Ø $× 5Ñ 5Ø ¬7¯<©<×+;Ñ+;Ó+=ð !6ó !Ðô ×(Ñ(Ó*ˆŒð	ð
 "3ˆÔð	ð
 ˆÙØ(¨¨¨C°¨t°7Ð;Ø×'Ñ'Øô
ˆŒð
 +ˆÔð	ô
 “WˆŒ
ð	ð —j‘jˆŒà×'Ñ'×-Ñ-×2Ñ2×6Ñ6°xÓ@ˆŒ
Ü&8¸×9KÑ9K×9PÑ9PÓ&QˆŒ	Ø)+ˆŒØ,.ˆÔØ)+ˆŒØ24ˆŒØ×Ñ×#Ñ# D¨.Ô9Ø ˆÔØ�	‰	×"Ñ"×0Ñ0Ü˜tŸ|™|¸4×;MÑ;MÔNð 	1ô 	
ô "×,Ñ,×1Ñ1ˆÔØ!ˆ�	rE   c                ó   — | j                   S )znThe path to the :ref:`rootdir <rootdir>`.

        :type: pathlib.Path

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

        .. versionadded:: 6.1
        )Ú_inipathrS   s    rF   ÚinipathzConfig.inipathL  s   € ð �}‰}ÐrE   c                ó:   — | j                   j                  |«       y)zxAdd a function to be called when the config object gets out of
        use (usually coinciding with pytest_unconfigure).N)rô  rî   )rM   Úfuncs     rF   Úadd_cleanupzConfig.add_cleanupT  s   € ð 	�‰×Ñ˜TÕ"rE   c                ó
  — | j                   rJ ‚d| _         t        j                  «       5  t        j                  d«       | j                  j
                  j                  t        | ¬«      ¬«       d d d «       y # 1 sw Y   y xY w)NTÚdefaultrc   r0  )r  r´   Úcatch_warningsÚsimplefilterrm   rD  r6  r7  rS   s    rF   Ú_do_configurezConfig._do_configureY  s_   € Ø×#Ò#Ð#Ð#ØˆÔÜ×$Ñ$Õ&Ü×!Ñ! )Ô,Ø�I‰I×&Ñ&×4Ñ4¼DÈÔ<MÐ4ÔN÷ '×&Ñ&ús   ªAA9Á9Bc                ó  — | j                   r>d| _         | j                  j                  | ¬«       g | j                  j                  _        | j
                  r/| j
                  j                  «       } |«        | j
                  rŒ.y y )NFrc   )r  rm   Úpytest_unconfigurerD  Ú_call_historyrô  rp   )rM   Úfins     rF   ro   zConfig._ensure_unconfigure`  sa   € Ø×ÒØ$ˆDÔØ�I‰I×(Ñ(°Ð(Ô5Ø79ˆD�I‰I×&Ñ&Ô4Ø�mŠmØ—-‘-×#Ñ#Ó%ˆCÙŒEð �m�mrE   c                óX   — | j                   j                  d«      }|€J ‚|j                  S )NÚterminalreporter)rÍ   r<  Ú_tw)rM   r
  s     rF   Úget_terminal_writerzConfig.get_terminal_writeri  s6   € Ø48×4FÑ4F×4QÑ4QØó5
Ðð  Ð+Ð+Ð+Ø×#Ñ#Ð#rE   c                óf  — 	 | j                  |«       | S # t        $ r’ t        | j                  dd«      sd|v rddlm}  || «       ‚ t        | j                  dd«      sd|v sd|v rG| j                  j                  «       j                  «        t        j                  j                  d	«       ‚ w xY w)
NÚversionFz	--versionr   )ÚshowversionÚhelpz--helpz-hz8
NOTE: displaying only minimal help due to UsageError.

)Úparser   rë   rì  Ú_pytest.helpconfigr  rî  Ú
_getparserÚ
print_helprs   rˆ   r  )rM   rÍ   r|   r  s       rF   rÜ   zConfig.pytest_cmdline_parsep  s§   € ð	Ø�J‰J�tÔð& ˆøô% ò 	ô �t—{‘{ I¨uÔ5¸ÈÑ9LÝ:á˜DÔ!ð ô ˜Ÿ™ V¨UÔ3°xÀ4Ñ7GÈ4ÐSWÉ<à—‘×'Ñ'Ó)×4Ñ4Ô6Ü—
‘
× Ñ ØQôð ð!	ús
   ‚ •BB0c                ó|  — |rt        |dd«      rd}nd}|j                  dt        |dd«      |¬«      }| j                  j                  ||¬«      }t	        |«      sat        |«      j                  d	«      D ]C  }t        j                  j                  d
|› d	�«       t        j                  j                  «        ŒE y y )NÚ	fulltraceFÚlongÚnativeTÚ
showlocals)Úfuncargsr  rg   )ÚexcreprÚexcinfori   zINTERNALERROR> )rë   rx   rm   Úpytest_internalerrorÚanyrY   r\   rs   rt   r  r‰   )rM   r  rì  rg   r  Úresru   s          rF   Únotify_exceptionzConfig.notify_exception‰  s«   € ñ
 ”g˜f k°5Ô9Ø$*‰EàˆEØ—/‘/Ø¤g¨f°lÀEÓ&JÐRWð "ó 
ˆð �i‰i×,Ñ,°WÀgÐ,ÓNˆÜ�3ŒxÜ˜G›×*Ñ*¨4Ö0�Ü—
‘
× Ñ  ?°4°&¸Ð!;Ô<Ü—
‘
× Ñ Õ"ñ 1ð rE   c                óø   — | j                   j                  | j                  k7  rV|j                  d«      ^}}| j                  |z  }t	        | j                   j                  |«      }dj                  |g|¢«      }|S )NrF  )rÂ   rÀ   rO  r\   r)   rï   )rM   ÚnodeidÚbase_path_partÚnodeid_partÚfullpathÚrelative_paths         rF   Úcwd_relative_nodeidzConfig.cwd_relative_nodeid›  sn   € à×!Ñ!×%Ñ%¨¯©Ò6Ø+1¯<©<¸Ó+=Ð(ˆN˜[à—}‘} ~Ñ5ˆHÜ'¨×(>Ñ(>×(BÑ(BÀHÓMˆMà—Y‘Y Ð<°Ð<Ó=ˆFØˆrE   c                óø   — t        |«      }|j                  j                  j                  |«       |j	                  |d¬«       |j                  j
                  D ]  }|j                  j                  |«       Œ |S )z$Constructor usable for subprocesses.F©Úaddopts)rÏ   rì  Ú__dict__Úupdater  r}   rÍ   rÚ   )ÚclsÚoption_dictr|   rd   r_  s        rF   ÚfromdictargszConfig.fromdictargs¦  sc   € ô ˜DÓ!ˆØ�‰×Ñ×%Ñ% kÔ2Ø�‰�T 5ˆÔ)Ø—‘×&Ô&ˆAØ× Ñ ×3Ñ3°AÕ6ð 'àˆrE   c                ó$  — |j                   |j                  z   D ]  }|j                  | j                  |<   Œ t	        |d«      rMt	        | j
                  |j                  «      s,t        | j
                  |j                  |j                  «       y y y )Nr  )Ú_short_optsÚ
_long_optsÚdestró  r~  rì  Úsetattrr  )rM   r…  rì   s      rF   rí  zConfig._processopt°  sk   € Ø—O‘O c§n¡nÔ4ˆDØ#&§8¡8ˆD�N‰N˜4Ò ð 5ô �3˜	Ô"Ü˜4Ÿ;™;¨¯©Ô1Ü˜Ÿ™ S§X¡X¨s¯{©{Õ;ð 2ð #rE   )r!  c                ó"  — |j                  |j                  j                  |j                  j                  |j	                  d«      |j
                  j                  |j                  d¬«      \  }}| j                  j                  ||j                  j                  |j                  j                  |j                  |j                  j                  |j
                  j                  |j                  j                  |j	                  d«      ¬«       y )NÚ	testpathsF©r|   rM  r6  rQ  rO  r3  rI  )r|   rM  rN  rO  rP  rQ  rR  rI  )Ú_decide_argsÚknown_args_namespaceÚfile_or_dirrM  ÚgetinirÂ   rÀ   rO  rÍ   rW  rN  rP  rR  )rM   Úearly_configr|   rö  s       rF   Úpytest_load_initial_conftestsz$Config.pytest_load_initial_conftests¸  sè   € ð )×5Ñ5Ø×2Ñ2×>Ñ>Ø×4Ñ4×;Ñ;Ø"×)Ñ)¨+Ó6Ø'×9Ñ9×=Ñ=Ø!×*Ñ*Øð 6ó 
Ñˆˆkð 	×Ñ×1Ñ1ØØ×4Ñ4×;Ñ;Ø#×8Ñ8×CÑCØ!×*Ñ*Ø#×8Ñ8×CÑCØ'×9Ñ9×=Ñ=Ø#×8Ñ8×CÑCØ(4×(;Ñ(;Ø-ó)ð 	2õ 	
rE   c                óÊ  — | j                   j                  |t        j                  | j                  «      ¬«      \  }}t	        |j
                  |j                  |z   |j                  xs d | j                  j                  ¬«      \  }}}|| _
        || _        || _        t        | j                  «      | j                   j                  d<   t        | j                   «      | j                   j                  d<   | j                   j#                  ddd«       | j                   j#                  dd	«       | j                   j#                  d
ddg ¬«       |j$                  xs d| _        y )N©Ú	namespace)Úinifiler|   Úrootdir_cmd_argrQ  ÚrootdirrA  r*  zExtra command line optionsr|   Ú
minversionz!Minimally required pytest versionÚrequired_pluginsz.Plugins that must be present for pytest to run)rR   r  rD   )rî  Úparse_known_and_unknown_argsÚcopyrì  r   Úinifilenamer:  rC  rÂ   rÀ   rù  rû  ÚinicfgrY   rO  Ú
extra_inforü  ÚaddiniÚoverride_inirò  )rM   r|   ÚnsÚunknown_argsrO  rü  rI  s          rF   Ú_initinizConfig._initiniÓ  s'  € ØŸ<™<×DÑDØœDŸI™I d§k¡kÓ2ð Eó 
ÑˆˆLô %4Ø—N‘NØ—‘ ,Ñ.ØŸJ™JÒ.¨$Ø×1Ñ1×5Ñ5ô	%
Ñ!ˆ�'˜6ð "ˆŒØˆŒØˆŒÜ-0°·±Ó-?ˆ�‰×Ñ 	Ñ*Ü-0°·±Ó->ˆ�‰×Ñ 	Ñ*Ø�‰×Ñ˜IÐ'CÀVÔLØ�‰×Ñ˜LÐ*MÔNØ�‰×ÑØØ<ØØð	 	ô 	
ð  Ÿ_™_Ò2°ˆÕrE   c                ó
  — | j                   j                  |«      \  }}t        |dd«      }|dk(  r1ddl}	 |j                  j                  | «      }| j                  |«       | j                  |«       y# t        $ r d}Y Œw xY w)zïInstall the PEP 302 import hook if using assertion rewriting.

        Needs to parse the --assert=<mode> option from the commandline
        and find all the installed plugins to mark them for rewriting
        by the importhook.
        Ú
assertmodeÚplainÚrewriter   N)	rî  rF  rë   r  r¬   Úinstall_importhookÚ_mark_plugins_for_rewriteÚSystemErrorÚ_warn_about_missing_assertion)rM   r|   rM  rN  r  rð   rm   s          rF   Ú_consider_importhookzConfig._consider_importhookì  s…   € ð  Ÿ<™<×DÑDÀTÓJÑˆˆLÜ�r˜<¨Ó1ˆØ�9ÒÛ$ð5Ø×(Ñ(×;Ñ;¸DÓA�ð ×.Ñ.¨tÔ4Ø×*Ñ*¨4Õ0øô	 ò Ø’ðús   ¶A4 Á4BÂBc                óò   — || j                   _        t        j                  j	                  d«      ryd„ t
        j                  j                  «       D «       }t        |«      D ]  }|j                  |«       Œ y)z‹Given an importhook, mark for rewrite any top-level
        modules or packages in the distribution package for
        all pytest plugins.ÚPYTEST_DISABLE_PLUGIN_AUTOLOADNc              3  ó”   K  — | ]@  }t        d „ |j                  D «       «      r"|j                  xs g D ]  }t        |«      –— Œ ŒB y­w)c              3  ó:   K  — | ]  }|j                   d k(  –— Œ y­w)rš  N)Úgroup)Ú.0Úeps     rF   Ú	<genexpr>z=Config._mark_plugins_for_rewrite.<locals>.<genexpr>.<genexpr>  s   è ø€ ÐFÑ4E¨b�2—8‘8˜zÕ)Ñ4Eùs   ‚N)r  Úentry_pointsÚfilesrY   )r^  ÚdistÚfiles      rF   r`  z3Config._mark_plugins_for_rewrite.<locals>.<genexpr>  sK   è ø€ ð 
á:�ÜÑF°D×4EÒ4EÓFÔFØŸ
™
Ò( bÒ(�ô ��Ið )ð Ù:ùs   ‚AA)
rÍ   r  r]   rj   rk   r[   ÚmetadataÚdistributionsrÁ  rž  )rM   rm   rÂ  rì   s       rF   rU  z Config._mark_plugins_for_rewrite   se   € ð +/ˆ×ÑÔ'ä�:‰:�>‰>Ð:Ô;ð ñ
ä!×*Ñ*×8Ñ8Ô:ó
ˆô -¨]Ö;ˆDØ×Ñ˜dÕ#ñ <rE   c                óØ   — || j                   _        	 | j                   j                  |t        j                  | j                  «      ¬«       | j                   `|S # | j                   `w xY w)zValidate known args.r?  )rî  Ú_config_source_hintrF  rG  rì  )rM   r|   Úvias      rF   Ú_validate_argszConfig._validate_args  s[   € à+.ˆ�‰Ô(ð	1Ø�L‰L×5Ñ5Ø¤§	¡	¨$¯+©+Ó 6ð 6ô ð —‘Ð0àˆøð —‘Ñ0ús   “:A ÁA)c          	     ó¤  — |r t         j                  j                  }|}||fS ||k(  r|t         j                  j                  }|r|}n_g }|D ]1  }	|j	                  t        t        j                  |	d¬«      «      «       Œ3 |r%|s#|r!d}
| j                  t        |
«      d¬«       ng }|s&t         j                  j                  }t        |«      g}|fS )zÑDecide the args (initial paths/nodeids) to use given the relevant inputs.

        :param warn: Whether can issue warnings.

        :returns: The args and the args source. Guaranteed to be non-empty.
        T)Ú	recursivez˜No files were found in testpaths; consider removing or adjusting your testpaths configuration. Searching recursively from the current directory instead.r7   ©Ú
stacklevel)r½   rà  rÜ  rß  ÚextendÚsortedr^  ÚiglobÚissue_config_time_warningr/   rÝ  rY   )rM   r|   rM  r6  rQ  rO  r3  ÚsourceÚresultrK   Úwarning_texts              rF   r8  zConfig._decide_args!  sÛ   € ñ  Ü×&Ñ&×+Ñ+ˆFØˆFð2 �vˆ~Ðð/  Ò)Ü×*Ñ*×4Ñ4�ÙØ&‘Fà�FÛ )˜ØŸ™¤f¬T¯Z©Z¸ÈÔ-MÓ&NÕOð !*á ©Ùð!\ð )ð
 !×:Ñ:Ü 3°LÓ AÈað ;õ ð �ÙÜ×*Ñ*×9Ñ9�Ü˜nÓ-Ð.�Ø�vˆ~ÐrE   c                ó„  — |rVt         j                  j                  dd«      }t        |«      r+| j	                  t        j                  |«      d«      |z   |d d  | j                  |«       |r'| j	                  | j                  d«      d«      |z   |d d  | j                  j                  |t        j                  | j                  «      ¬«      | _        | j                  «        | j                  |«       | j                   j#                  |d¬«       t         j                  j                  d	«      s| j                   j%                  d
«       | j                   j'                  «        | j                  j                  |t        j                  | j                  «      ¬«      | _        | j)                  «        | j+                  «        | j                  j,                  €R| j.                  � t1        | j.                  j2                  «      }nt1        | j4                  «      }|| j                  _        	 | j6                  j9                  | || j                  ¬«       y # t:        $ ra}| j                  j<                  s| j                  j>                  r*| jA                  tC        d|jD                  › �«      d¬«       n‚ Y d }~y d }~ww xY w)NÚPYTEST_ADDOPTSr›  zvia PYTEST_ADDOPTSr*  zvia addopts configr?  FrÃ   rZ  rš  )r<  r|   rè  z"could not load initial conftests: r6   rm  )#r]   rj   rk   r�  rj  Úshlexr\   rO  r;  rî  Úparse_known_argsrG  rì  r9  Ú_checkversionrX  rÍ   rÊ   rŸ  r”  Ú_validate_pluginsÚ_warn_about_skipped_pluginsrP  rü  rY   rá   rO  rm   r=  rH   r  r  rr  r/   rK   )rM   r|   r*  Úenv_addoptsrP  r€   s         rF   Ú	_preparsezConfig._preparseN  sI  € ÙÜŸ*™*Ÿ.™.Ð)9¸2Ó>ˆKÜ�;Ôà×'Ñ'¬¯©°KÓ(@ÐBVÓWØñð ‘Q�ð 	�‰�dÔÙà×#Ñ# D§K¡K°	Ó$:Ð<PÓQÐTXÑXð ‘ˆGð %)§L¡L×$AÑ$AØœDŸI™I d§k¡kÓ2ð %Bó %
ˆÔ!ð 	×ÑÔØ×!Ñ! $Ô'Ø×Ñ×,Ñ,¨TÀÐ,ÔFÜ�z‰z�~‰~Ð>Ô?ð ×Ñ×:Ñ:¸:ÔFØ×Ñ×'Ñ'Ô)à$(§L¡L×$AÑ$AØœDŸI™I d×&?Ñ&?Ó@ð %Bó %
ˆÔ!ð 	×ÑÔ Ø×(Ñ(Ô*à×$Ñ$×/Ñ/Ð7Ø�|‰|Ð'Ü  §¡×!4Ñ!4Ó5‘
ä  §¡Ó/�
Ø3=ˆD×%Ñ%Ô0ð	Ø�I‰I×3Ñ3Ø!¨°T·\±\ð 4õ øô %ò 		Ø×(Ñ(×-Ò-°×1JÑ1J×1RÒ1Rð ×.Ñ.Ü'Ð*LÈQÏVÉVÈHÐ(UÓVØ ð /õ ð
 ôûð			ús   È,(I É	J?ÉAJ:Ê:J?)Úwrapperc              #  ó^   K  — 	 d –—| j                  «        S # | j                  «        w xY w­wrJ   )Ú_validate_config_optionsrS   s    rF   Úpytest_collectionzConfig.pytest_collection„  s&   è ø€ ð	,Úà×)Ñ)Õ+øˆD×)Ñ)Õ+üs   ‚-„ ‡-˜*ª-c                óD  — dd l }| j                  j                  dd «      }|r~ddlm} t        |t        «      s|j                  | j                  › d�«      ‚ ||«       ||j                  «      kD  r.|j                  | j                  › d|› d|j                  › d�«      ‚y y )Nr   rD  ©ÚVersionz%: 'minversion' must be a single valuez: 'minversion' requires pytest-z, actual pytest-Ú')
r3   rI  rk   Úpackaging.versionr…  rÔ   rY   r   rü  r   )rM   r3   Úminverr…  s       rF   rz  zConfig._checkversion�  s¦   € Ûà—‘—‘ ¨tÓ4ˆÙå1ä˜f¤cÔ*Ø×'Ñ'Ø—|‘|�nÐ$IÐJóð ñ �v‹¡¨×);Ñ);Ó!<Ò<Ø×'Ñ'Ø—|‘|�nÐ$CÀFÀ8ÐK[Ð\b×\nÑ\nÐ[oÐopÐqóð ð =ð rE   c                ój   — t        | j                  «       «      D ]  }| j                  d|› d�«       Œ y )NzUnknown config option: ri   )rp  Ú_get_unknown_ini_keysÚ_warn_or_fail_if_strict)rM   Úkeys     rF   r�  zConfig._validate_config_optionsŸ  s2   € Ü˜$×4Ñ4Ó6Ö7ˆCØ×(Ñ(Ð+BÀ3À%ÀrÐ)JÕKñ 8rE   c                ój  — t        | j                  d«      «      }|sy ddlm} ddlm} ddlm} | j                  j                  «       }|D ��ci c]  \  }}|j                  |j                  “Œ }}}g }	|D ]m  }
	  ||
«      }|j                  |vr|	j                  |
«       Œ,|j                  j                   |||j                     «      d¬«      rŒ]|	j                  |
«       Œo |	r)t        dj!                  d	j#                  |	«      «      «      ‚y c c}}w # |$ r |	j                  |
«       Y Œºw xY w)
NrE  r   )ÚInvalidRequirement)ÚRequirementr„  T)ÚprereleaseszMissing required plugins: {}ræ   )rp  r;  Úpackaging.requirementsrŽ  r�  r‡  r…  rÍ   Úlist_plugin_distinfoÚproject_namer  rî   rì   Ú	specifierÚcontainsr   rÙ   rï   )rM   rE  rŽ  r�  r…  Úplugin_infor,  rc  Úplugin_dist_infoÚmissing_pluginsÚrequired_pluginÚreqs               rF   r{  zConfig._validate_plugins£  s0  € Ü! $§+¡+Ð.@Ó"AÓBÐÙØõ 	>Ý6Ý-à×(Ñ(×=Ñ=Ó?ˆÙKVÔWÉ;ÁÀÀ4˜D×-Ñ-¨t¯|©|Ñ;È;ÐÑWàˆÛ/ˆOðÙ! /Ó2�ð
 �x‰xÐ/Ñ/Ø×&Ñ& Õ7Ø—]‘]×+Ñ+ÙÐ(¨¯©Ñ2Ó3Àð ,õ ð  ×&Ñ& Õ7ð  0ñ ÜØ.×5Ñ5°d·i±iÀÓ6PÓQóð ð ùó# Xøð &ò Ø×&Ñ& Ô7Ùðús   Á!DÁ;DÄD2Ä1D2c                ó~   — | j                   j                  rt        |«      ‚| j                  t	        |«      d¬«       y )Nr7   rm  )r9  Ústrict_configr   rr  r/   )rM   rü   s     rF   r‹  zConfig._warn_or_fail_if_strictÄ  s6   € Ø×$Ñ$×2Ò2Ü˜WÓ%Ð%à×&Ñ&Ô':¸7Ó'CÐPQÐ&ÕRrE   c                óv   — | j                   j                  }| j                  D �cg c]	  }||vsŒ|‘Œ c}S c c}w rJ   )rî  Ú_inidictrI  )rM   Úparser_inicfgrì   s      rF   rŠ  zConfig._get_unknown_ini_keysÊ  s4   € ØŸ™×-Ñ-ˆØ!%§¢ÓJ¡˜°¸MÒ0I’ ÑJÐJùÒJs   ¥	6¯6c                ó:  — | j                   g k(  sJ d«       ‚| j                  j                  j                  t	        | j
                  ¬«      ¬«       | j                  ||¬«       d| j                  _        	 | j                  j                  || j                  | j                  ¬«      }| j                  || j                  j                  | j                  d«      | j                  j                   | j"                  d¬«      \  | _         | _        y # t&        $ r Y y w xY w)	Nz:can only parse cmdline args at most once per Config object)rÍ   r0  r)  Tr?  r6  r7  )r|   rm   Úpytest_addhooksr6  r7  rÍ   r~  rî  Úafter_preparseÚparse_setoptionrì  r8  r9  rM  r;  rÂ   rÀ   rO  rö  r   )rM   r|   r*  s      rF   r  zConfig.parseÎ  s  € ð �I‰I˜ŠOð	HàGó	HØà�	‰	×!Ñ!×/Ñ/Ü d×&8Ñ&8Ô9ð 	0ô 	
ð 	�‰�t WˆÔ-Ø&*ˆ�‰Ô#ð	Ø—<‘<×/Ñ/Ø�d—k‘k¨T¯[©[ð 0ó ˆDð +/×*;Ñ*;ØØ×0Ñ0×7Ñ7ØŸ+™+ kÓ2Ø#×5Ñ5×9Ñ9ØŸ™Øð +<ó +Ñ'ˆDŒI�tÕ'øô ò 	Ùð	ús   Á6BD Ä	DÄDc                ó|  — | j                   j                  d«      ry| j                  j                  xs g }| j	                  d«      }t        j                  d¬«      5 }t        j                  dt        |«      «       t        ||«       t        j                  ||¬«       ddd«       r†t        j                  |dz
  «      }|j                  j                  |j                  |j                  j                   f}| j"                  j$                  j'                  t)        |d	   d
d|¬«      ¬«       yy# 1 sw Y   Œ’xY w)a  Issue and handle a warning during the "configure" stage.

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

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

        :param warning: The warning instance.
        :param stacklevel: stacklevel forwarded to warnings.warn.
        r´   NÚfilterwarningsT)ÚrecordÚalwaysrm  r   r   rd   r›  )Úwarning_messageÚwhenr"  Úlocationr0  )rÍ   rœ  r9  Úpythonwarningsr;  r´   r  r  rR   Úapply_warning_filtersr3  rs   Ú	_getframeÚf_codeÚco_filenameÚf_linenoÚco_namerm   Úpytest_warning_recordedr6  r7  )rM   Úwarningrn  Úcmdline_filtersÚconfig_filtersÚrecordsÚframerª  s           rF   rr  z Config.issue_config_time_warningç  sÿ   € ð ×Ñ×(Ñ(¨Ô4Øà×3Ñ3×BÑBÒHÀbˆØŸ™Ð%5Ó6ˆä×$Ñ$¨DÕ1°WÜ×!Ñ! (¬D°«MÔ:Ü! .°/ÔBÜ�M‰M˜'¨jÕ9÷ 2ñ
 Ü—M‘M *¨q¡.Ó1ˆEØ—|‘|×/Ñ/°·±ÀÇÁ×AUÑAUÐUˆHØ�I‰I×-Ñ-×;Ñ;ÜØ$+¨A¡JØ!ØØ%ô	ð <õ ð ÷ 2Ð1ús   ÁAD2Ä2D;c                ól   — | j                  |«      }t        |t        «      sJ ‚|j                  |«       y)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)r;  rÔ   r×   rî   )rM   rì   ru   r_  s       rF   rC  zConfig.addinivalue_line
  s-   € ð �K‰K˜ÓˆÜ˜!œTÔ"Ð"Ð"Ø	�‰��rE   c                ó„   — 	 | j                   |   S # t        $ r% | j                  |«      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ñ  rj  Ú_getini)rM   rì   Úvals      rF   r;  zConfig.getini  sF   € ð8	Ø—>‘> $Ñ'Ð'øÜò 	Ø)-¯©°dÓ);Ð;ˆD�N‰N˜4Ñ  3ØŠJð	ús   ‚ ‘+?¾?c                ó$   — d|› �}t        ||«      ‚)Nzunknown configuration type: )rq   )rM   rì   rR   Úvaluer…   s        rF   Ú_getini_unknown_typezConfig._getini_unknown_type6  s   € Ø,¨T¨FÐ3ˆÜ˜˜eÓ$Ð$rE   c                óX  — 	 | j                   j                  |   \  }}}| j	                  |«      }|€	 | j
                  |   }n|}|dk(  rr| j                  �| j                  j                  n| j                  j                  }t        |t        «      rt        j                  |«      n|}	|	D �
cg c]  }
||
z  ‘Œ	 c}
S |dk(  r't        |t        «      rt        j                  |«      S |S |dk(  r?t        |t        «      r-t        d„ |j                  d«      «      D �cg c]  }|sŒ|‘Œ	 c}S |S |dk(  r"t        t        |«      j!                  «       «      S |dk(  r|S |€|S | j#                  |||«      S # t        $ r}t        d|›�«      |‚d }~ww xY w# t        $ r |cY S w xY wc c}
w c c}w )	Nzunknown configuration value: Úpathsr|   Úlinelistc                ó"   — | j                  «       S rJ   ©rƒ  )r_  s    rF   Ú<lambda>z Config._getini.<locals>.<lambda>b  s
   € °·±´rE   ri   r?  Ústring)rî  rž  rj  rq   Ú_get_override_ini_valuerI  rü  rá   rÂ   rÀ   rÔ   rY   rx  r\   ÚmapÚ
_strtoboolrƒ  r¾  )rM   rì   ÚdescriptionrR   r  r€   Úoverride_valuer½  ÚdpÚinput_valuesr_  Úts               rF   rº  zConfig._getini:  s»  € ð	NØ)-¯©×)>Ñ)>¸tÑ)DÑ&ˆK˜˜wð ×5Ñ5°dÓ;ˆØÐ!ðØŸ™ DÑ)‘ð #ˆEð  �7Š?ð —<‘<Ð+ð —‘×#Ò#à×+Ñ+×/Ñ/ð ô
 2<¸EÄ3Ô1Gœ5Ÿ;™; uÔ-ÈUˆLÙ$0Ó1¡L˜q�B˜“F LÑ1Ð1Ø�VŠ^Ü)3°E¼3Ô)?”5—;‘;˜uÓ%ÐJÀUÐJØ�ZÒÜ˜%¤Ô%Ü#&Ñ':¸E¿K¹KÈÓ<MÔ#NÓTÑ#N˜aÒRSšÐ#NÑTÐTà�Ø�VŠ^Üœc %›j×.Ñ.Ó0Ó1Ð1Ø�XÒØˆLØˆ\ØˆLà×,Ñ,¨T°4¸Ó?Ð?øô_ ò 	NÜÐ<¸T¸HÐEÓFÈAÐMûð	Nûô ò Ø’ðüò4 2ùò
 Us:   ‚E1 ³F Â-F"ÄF'Ä#F'Å1	FÅ:F	Æ	FÆFÆFc                óÂ  — 	 | j                   j                  ||«      \  }}|j                  €J ‚t	        j
                  |j                  «      j                  }g }|D ]q  }t        |t        j                  «      rt	        j
                  |«      }n.|j                  dt        j                  «      }t        ||z  «      }|j                  |«       Œs |S # t        $ r Y y w xY w)Nrº  )rÍ   rl  rj  ru  rÇ   rÈ   rá   rÔ   r]   rÕ   r4  r^   r(   rî   )rM   rì   rK   rf  ÚrelrootsÚmodpathÚvaluesÚrelroots           rF   Ú_getconftest_pathlistzConfig._getconftest_pathlistn  sÂ   € ð	Ø ×.Ñ.×AÑAÀ$ÈÓM‰MˆC�ð �|‰|Ð'Ð'Ð'Ü—,‘,˜sŸ|™|Ó,×3Ñ3ˆØ%'ˆÛˆGÜ˜'¤2§;¡;Ô/Ü!Ÿ,™, wÓ/‘à!Ÿ/™/¨#¬r¯v©vÓ6�Ü& w°Ñ'8Ó9�Ø�M‰M˜'Õ"ð  ð ˆøô ò 	Ùð	ús   ‚C Ã	CÃCc                óª   — d }| j                   D ]   }	 |j                  dd«      \  }}||k(  sŒ|}Œ" |S # t        $ r}t        d|›d�«      |‚d }~ww xY w)Nrå   r   z3-o/--override-ini expects option=value style (got: z).)rò  r\   rq   r   )rM   rì   r½  Ú
ini_configrŒ  Úuser_ini_valuer€   s          rF   rÆ  zConfig._get_override_ini_value�  sy   € Øˆð ×,Ô,ˆJð+Ø&0×&6Ñ&6°s¸AÓ&>Ñ#��^ð ˜$“;Ø*‘Eð -ð ˆøô ò Ü ØIÈ*ÈÐWYÐZóàðûðús   “4´	A½AÁAFc                ó  — | j                   j                  ||«      }	 t        | j                  |«      }|€|rt	        |«      ‚|S # t        $ r>}|t
        ur|cY d}~S |rddl}|j                  d|›d�«       t        d|›�«      |‚d}~ww xY w)as  Return command line option value.

        :param name: Name of the option. You may also specify
            the literal ``--OPT`` option instead of the "dest" option name.
        :param default: Fallback value if no option of that name is **declared** via :hook:`pytest_addoption`.
            Note this parameter will be ignored when the option is **declared** even if the option's value is ``None``.
        :param skip: If ``True``, raise :func:`pytest.skip` if option is undeclared or has a ``None`` value.
            Note that even if ``True``, if a default was specified it will be returned instead of a skip.
        Nr   zno z option foundzno option named )	ró  rk   rë   rì  rí   Únotsetr3   Úskiprq   )rM   rì   r  rÙ  r»  r€   r3   s          rF   Ú	getoptionzConfig.getoption’  s–   € ð �~‰~×!Ñ! $¨Ó-ˆð	AÜ˜$Ÿ+™+ tÓ,ˆCØˆ{™tÜ$ TÓ*Ð*ØˆJøÜò 	AØœfÑ$Ø•ÙÛà—‘˜c $ ¨Ð7Ô8ÜÐ/°¨xÐ8Ó9¸qÐ@ûð	Aús#   ž&A Á	BÁ	BÁBÁ*BÂBc                ó$   — | j                  |«      S )z$Deprecated, use getoption() instead.©rÚ  ©rM   rì   rK   s      rF   ÚgetvaluezConfig.getvalue«  s   € à�~‰~˜dÓ#Ð#rE   c                ó(   — | j                  |d¬«      S )z-Deprecated, use getoption(skip=True) instead.T)rÙ  rÜ  rÝ  s      rF   ÚgetvalueorskipzConfig.getvalueorskip¯  s   € à�~‰~˜d¨ˆ~Ó.Ð.rE   Ú
assertionsr
   ÚVERBOSITY_ASSERTIONSÚ
test_casesÚVERBOSITY_TEST_CASESrÛ  Ú_VERBOSITY_INI_DEFAULTc                ó  — | j                  dd¬«      }t        |t        «      sJ ‚|€|S t        j	                  |«      }|| j
                  j                  vr|S | j                  |«      }|t        j                  k(  r|S t        |«      S )a5  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
        Úverboser   )r  )	rÚ  rÔ   Úintr½   Ú_verbosity_ini_namerî  rž  r;  rå  )rM   Úverbosity_typeÚglobal_levelÚini_nameÚlevels        rF   Úget_verbosityzConfig.get_verbosity¹  s†   € ð> —~‘~ i¸�~Ó;ˆÜ˜,¬Ô,Ð,Ð,ØÐ!ØÐä×-Ñ-¨nÓ=ˆØ˜4Ÿ<™<×0Ñ0Ñ0ØÐà—‘˜HÓ%ˆØ”F×1Ñ1Ò1ØÐä�5‹zÐrE   c                ó   — d| › �S )NÚ
verbosity_rD   )rê  s    rF   ré  zConfig._verbosity_ini_nameç  s   € à˜NÐ+Ð,Ð,rE   c                óp   — | j                  t        j                  |«      |dt        j                  ¬«       y)a£  Add a output verbosity configuration option for the given output type.

        :param parser: Parser for command line arguments and 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  rR   r  N)rK  r½   ré  rå  )rè  rê  r  s      rF   Ú_add_verbosity_inizConfig._add_verbosity_inië  s2   € ð 	�‰Ü×&Ñ& ~Ó6ØØÜ×1Ñ1ð	 	õ 	
rE   c                óf   — t        «       s'|dk(  rd}nd}| j                  t        |«      d¬«       y y )NrR  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?)
r7   rm  )Ú_assertion_supportedrr  r/   )rM   r  ru  s      rF   rW  z$Config._warn_about_missing_assertioný  sH   € Ü#Ô%Ø�wŠð(ñ ð3ð ð ×*Ñ*Ü# LÓ1Øð +õ ð &rE   c           	     ó„   — | j                   j                  D ]'  \  }}| j                  t        d|›d|› �«      d¬«       Œ) y )Nzskipped plugin rP   r6   rm  )rÍ   r  rr  r/   )rM   rÇ  r…   s      rF   r|  z"Config._warn_about_skipped_plugins  sI   € Ø $× 2Ñ 2× BÔ BÑˆK˜Ø×*Ñ*Ü# o°k°_ÀBÀsÀeÐ$LÓMØð +õ ñ !CrE   )rÍ   rÅ   rÂ   zInvocationParams | NonerW   rX   )rW   rU   )rW   rª  )rþ  zCallable[[], None]rW   rX   r¦  )rW   r"   )rÍ   rÅ   r|   ú	list[str]rW   r½   rJ   )r  zExceptionInfo[BaseException]rì  zargparse.Namespace | NonerW   rX   )r"  rY   rW   rY   )rW   r½   )r…  r#   rW   rX   )r<  r½   rW   rX   )r|   r­  rW   rX   )r|   rö  ri  rY   rW   rö  )r|   rö  rM  r?  r6  rö  rQ  rU   rO  rU   r3  r?  rW   ztuple[list[str], ArgsSource])T)r|   rö  r*  r?  rW   rX   )rW   zGenerator[None, object, object])rü   rY   rW   rX   )rW   rö  )r³  ÚWarningrn  rè  rW   rX   )rì   rY   ru   rY   rW   rX   r©  )rì   rY   rR   rY   r½  zstr | list[str])rì   rY   rK   rU   rW   zlist[pathlib.Path] | None)rì   rY   rW   r¨  )rì   rY   rÙ  r?  )rê  r¨  rW   rè  )rê  rY   rW   rY   )rè  r%   rê  rY   r  rY   rW   rX   )r  rY   rW   rX   )=r:   r;   r<   r=   r   ÚdataclassesÚ	dataclassrÆ   rÚ  ÚEnumrà  r×  rN   ÚpropertyrO  rü  rÿ  r  ro   r  rÜ   r   r'  Úclassmethodr/  rí  Úhookimplr=  rO  rX  rU  rj  r8  r~  r‚  rz  r�  r{  r‹  rŠ  r  rr  rC  r;  r¾  rº  rÓ  rÆ  rØ  rÚ  rÞ  rà  râ  rä  rå  rî  r”   ré  rò  rW  r|  rD   rE   rF   r½   r½   Å  s}  … ñð Ø€[×Ñ $Ô'÷1ð 1ó (ó ð1ôB �T—Y‘Yô  ð ƒLð 6:ñ	;"à*ð;"ð 3ð	;"ð
 
ó;"ðz òó ðð òó ðó#ó
Oóó$ðØ0ðØ8Aðà	óð8 -1ð#à-ð#ð *ð#ð 
ó	#ó$	ð òó ðó<ñ �dÔò
ó ð
ó43ó21ó($ó*
ð+ð ð+ð ð	+ð
 ð+ð %ð+ð ð+ð ð+ð 
&ó+ôZ4ñl �dÔò,ó ð,óó$LóóBSóKôó2!óFó óH%ó2@ðhØðØ+ðà	"óó&ð" ,2Àô Aô2$ô/ð
 #/Ð˜%Ó.à".Ð˜%Ó.Ø$*Ð˜EÓ*ô,ð\ ò-ó ð-ð ò
ó ð
ó"ô*rE   c                 ó&   — 	 J ‚# t         $ r Y yw xY w)NT)rt  rD   rE   rF   rô  rô    s   € ðØˆuøÜò Ùðús   ‚ „	�c                ó$  — t        |¬«      }| j                  j                  dk(  rd|_        n | j                  j                  dk(  rd|_        | j                  j                  dk(  r	d|_        |S | j                  j                  dk(  rd|_        |S )zÚCreate a TerminalWriter instance configured according to the options
    in the config object.

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

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

    .. note:: Copied from distutils.util.
    )Úyr   rÍ  ÚtrueÚonÚ1T)r„  r  ÚfÚfalseÚoffÚ0Fzinvalid truth value )Úlowerrq   )r»  s    rF   rÈ  rÈ  ;  s:   € ð �)‰)‹+€CØ
Ð2Ñ2ØØ	Ð5Ñ	5ØäÐ/°¨wÐ7Ó8Ð8rE   é2   )Úmaxsizec          	     óÎ  — d}t        d| › d�«      }| j                  d«      }t        |«      dkD  r8d}t        dt        |«      › d|› d	�«      }t        |j	                  |¬
«      «      ‚t        |«      dk  r |j                  d«       t        |«      dk  rŒ d„ |D «       \  }}}	}
}	 t        j                  |«      }	 t        |	«      }|r|rt        j                   |«      }|
r|rt        j                   |
«      dz   }
|r	 t#        |«      }|dk  rt%        d«      ‚nd}||||
|fS # t        j                  $ r*}t        |j	                  t        |«      ¬
«      «      d‚d}~ww xY w# t        $ rC t        j                  «       }|j                  d¬«      }t        |j	                  |¬
«      «      d‚w xY w# t$        $ r'}t        |j	                  d|›d|› �¬
«      «      d‚d}~ww xY w)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}
        Ú:r9   zJhttps://docs.python.org/3/library/warnings.html#describing-warning-filtersz            Too many fields (z�), expected at most 5 separated by colons:

              action:message:category:module:line

            For more information please consult: z
            )Úerrorr›  c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrJ   rÃ  )r^  Úss     rF   r`  z'parse_warning_filter.<locals>.<genexpr>x  s   è ø€ Ð3MÁuÀ!°A·G±G·IÁuùs   ‚Nr  )rg   z\Zr   znumber is negativezinvalid lineno rP   )r   r\   r�  r   rÙ   rî   r´   Ú
_getactionÚ_OptionErrorrY   Ú_resolve_warning_categoryrV   r   Úfrom_currentrx   ÚreÚescaperè  rq   )r�  r  Ú__tracebackhide__Úerror_templaterÊ  Údoc_urlr  Úaction_rü   Ú	category_ÚmoduleÚlineno_Úactionr€   Úcategoryr�   Úexception_textÚlinenos                     rF   Úparse_warning_filterr(  M  s*  € ð ÐÜðð ˆ%ð 	ð	ó
€Nð �I‰I�c‹N€EÜ
ˆ5ƒz�A‚~àXð 	ô ðÜ! %›j˜\ð *2ð 3:°ð ;ðó
ˆô ˜×.Ñ.°UÐ.Ó;Ó<Ð<ä
ˆe‹*�qŠ.Ø�‰�RÔô ˆe‹*�q‹.á3MÁuÓ3MÑ0€GˆW�i ¨ðHÜ'/×':Ñ':¸7Ó'CˆðPÜ";¸IÓ"Fˆñ
 ‘6Ü—)‘)˜GÓ$ˆÙ‘&Ü—‘˜6Ó" UÑ*ˆÙð	Ü˜“\ˆFØ˜ŠzÜ Ð!5Ó6Ð6ð ð ˆØ�7˜H f¨fÐ4Ð4øô/ × Ñ ò HÜ˜×.Ñ.´S¸³VÐ.Ó<Ó=À4ÐGûðHûô ò PÜ ×-Ñ-Ó/ˆØ!×)Ñ)°Ð)Ó9ˆÜ˜×.Ñ.°^Ð.ÓDÓEÈ4ÐOðPûô ò 	ÜØ×%Ñ%¨o¸g¸[ÈÈ1È#Ð,NÐ%ÓOóàðûð	ús=   Â'D% Â=E% Ä F4 Ä%E"Ä8%EÅE"Å%AF1Æ4	G$Æ="GÇG$c                óö   — d}| st         S d| vrddl}| }n$| j                  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"  r,  Úcats          rF   r  r  •  s…   € ð
 ÐÙÜˆà
�(ÑÛà‰à#×.Ñ.¨sÓ3Ñˆ��5Ü�v˜t T¨E¨7Ó3ˆÜ
�!�UÓ
€CÜ�cœ7Ô#Ü˜C˜5Ð :Ð;Ó<Ð<Ü””W‘˜sÓ#Ð#rE   c                ó”   — | D ]  }t        j                  t        |d¬«      Ž  Œ! |D ]  }t        j                  t        |d¬«      Ž  Œ! y)z8Applies pytest-configured filters to the warnings moduleF)r  TN)r´   r¥  r(  )rµ  r´  r�  s      rF   r¬  r¬  «  sF   € ó ˆÜ×ÑÔ!5°cÀ%Ô!HÒIð ó ˆÜ×ÑÔ!5°cÀ$Ô!GÒHñ rE   )r_   z_pytest._code.TracebackEntryrW   r?  )NN)r|   ú#list[str] | os.PathLike[str] | Noner}   rÑ  rW   zint | ExitCode)rW   rè  )rK   rY   r™   rY   rW   rY   )r|   zlist[str] | Noner}   rÑ  rW   r½   )rW   rÅ   )r|   r1  r}   rÑ  rW   r½   )rK   rU   rW   rU   )ró   r   rô   rY   rõ   rÐ  rW   zdict[str, bool])r´  r®  rW   rö  )rÂ  rÖ  rW   zIterator[str])rW   r?  rJ   )rd   r½   rd  zTextIO | NonerW   r"   )r»  rY   rW   r?  )r�  rY   r  r?  rW   z9tuple[warnings._ActionKind, str, type[Warning], str, int])r%  rY   rW   ztype[Warning])rµ  rÖ  r´  rÖ  rW   rX   )yr=   Ú
__future__r   rê  Úcollections.abcr²  rG  rø  rÚ  Ú	functoolsr   r^  Úimportlib.metadatar[   ré   r]   rÇ   r  rx  rs   Útextwrapr   r8  r   Útypingr   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._code.coder!   Ú_pytest._ior"   Ú_pytest.config.argparsingr#   r%   Ú_pytest.deprecatedÚ_pytest.hookspecÚ_pytest.outcomesr&   r'   Ú_pytest.pathlibr(   r)   r*   r+   r,   r-   Ú_pytest.stashr.   Ú_pytest.warning_typesr/   r0   Ú_pytest.cacheproviderr1   Ú_pytest.terminalr2   rÓ  r§  rý  r  ÚIntEnumr5   rV   rH   r`   r†   r‘   r“   rš   rœ   rŠ  rË   r  r�  rr  rÏ   rÑ   rl   râ   rý   rÅ   r—  r¶  rØ  rÁ  r½   rô  r  rÈ  r(  r  r¬  rD   rE   rF   Ú<module>rI     s1  ðá @å "ã Û Û Û Û Ý Û Û Û Û 	Û Û 	Û Û 
Ý Û Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý  Û ã Ý !Ý Ý !Ý Ý  å &Ý .Ý 0Ý &Ý Û Ý 'Ý *Ý -Ý &Ý .Ý ,Û Û Ý !Ý $Ý (Ý 'Ý 'Ý &Ý 0Ý 'Ý Ý 5Ý 3ñ Ý+Ý1ð €ðñ ˜(Ó#€Ù˜(Ó#€ð ôˆt�|‰|ó ó ðô,O˜Iô OðXØ'ðXà	óXð 15Ø48ð4>Ø
-ð4>à1ð4>ð ó4>ón÷$ñ óóðÐ ðØðàðð ðð ð	ð
 ðð ðð ðð ðð ðð ðð ðð ðð ðð ðð ðð  ð!ð" ð#ð$ ð%ð& ð'ð( ð)ð* ð+ð, ð-ð. ð/ð0 ð1ð2 ð3ð4 ð5ð6 ñ7€ñ< �oÓ&€Ø × Ñ �JÔ Ø × Ñ Ð)Ô *ð "Ø48ðØ
ðà1ðð óó2&ð 15Ø48ðØ
-ðà1ðð óó@ðØðàðð ðð ó	ð@ ô](˜-ó ](ó ð](ð@Ø8ðàó÷*ñ ñ
 
‹€ó>CðB ÷Qð Qó ðQóhð +/ðØðØ'ðàóó09ñ$ �2ÔðD5Ø	ðD5ØðD5à>òD5ó ðD5óN$ð,
IØ!ð
IØ4Að
Ià	ô
IrE   