§ |<ˆjóãóž —dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddl mZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddl!Z!ddl!m"Z"ddl!m#Z#ddl$m%Z%ddl$m&Z&ddl'm(Z(ddl'm)Z)ddl'm*Z*ddl+m,Z,ddl-m.Z.ddl/m0Z0dd l/m1Z1dd!l/m2Z2dd"l/m3Z3dd#l/m4Z4dd$l/m5Z5dd%l/m6Z6dd&l/m7Z7dd'l/m8Z8dd(l/m9Z9dd)l/m:Z:dd*l/m;Z;dd+l/mm?Z?dd.l>m@Z@dd/l>mAZAdd0lBmCZCdd1lDmEZEdd2lDmFZFdd3lDmGZGdd4lHmIZIdd5lJmKZKdd6lLmMZMdd7lLmNZNdd8lOmPZPdd9lOmQZQdd:lOmRZRdd;lOmSZSddlWmXZXdd?lWmYZYdd@lWmZZZddAlWm[Z[ddBlWm\Z\ddClWm]Z]ddDl^m_Z_ddEl`maZaddFl`mbZbddGl`mcZcer ddHldmeZeddIl^mfZfee!jg¦«jhZidJeCdKdfdL„ZjdMe?dKee eke@ffdN„Zld—dQ„ZmdMe?dKdfdR„ZndSeodKdfdT„ZpeAdU¬V¦«dWdXdKeeqfdY„¦«ZrdZed[e#jsdKed\fd]„Ztd^ed_eeodKeufd`„ZvdaedKd\fdb„ZweAdU¬V¦«dce dddeeodfeqdKe de#jxe#jsee e#jxe#jsfffdg„¦«ZyGdh„die#jz¦«Z{Gdj„dk¦«Z|e} ~e}¦«eej€dl¦«¦«hdm£ee|¦«ee|¦«¦«¦«Z�[|Gdn„doe{e#js¦«Z‚Gdp„d\e#jƒe‚¦«Z„Gdq„dre„¦«Z…d˜ds„Z†dfeqdteeodKeeqfdu„Z‡Gdv„dwe‚¦«ZˆGdx„dy¦«Z‰deeodKeqfdz„ZŠdfeqdKeufd{„Z‹dfeqdKeufd|„ZŒe2ej�dU¬}¦«Gd~„d¦«¦«¦«ZŽe2ej�dU¬}¦«Gd€„d�¦«¦«¦«Z�e2Gd‚„dP¦«¦«Z�dƒeeod„eeoee"j‘eqfd…e eueeofdKe_fd†„Z’d‡e eoe“fdMee?dKeofdˆ„Z”dKeofd‰„Z•dŠ„Z–dMe?d‹eKdKdfdŒ„Z—dMe?dKe eke@ffd�„Z˜dMe?d‹eKdKdfdŽ„Z™d™d�e,d‘eod’eodKdfd“„ZšGd”„dXe{e#jx¦«Z›Gd•„d–e›¦«ZœdS)šz7Python test discovery, setup and run of test functions.éN)ÚCounter)Ú defaultdict)Úpartial)ÚPath)ÚAny)ÚCallable)ÚDict)Ú Generator)ÚIterable)ÚIterator)ÚList)ÚMapping)ÚOptional)ÚPattern)ÚSequence)ÚSet)ÚTuple)Ú TYPE_CHECKING)ÚUnion)Úfixtures)Únodes)Úfilter_traceback)Ú getfslineno)Ú ExceptionInfo)Ú TerminalRepr)Ú Traceback)ÚTerminalWriter)Úsaferepr)Ú ascii_escaped)Ú assert_never)Úfinal)Úget_default_arg_names)Ú get_real_func)Ú getimfunc)Ú getlocation)Úis_async_function)Ú is_generator)Ú LEGACY_PATH)ÚNOTSET©Ú safe_getattr)Ú safe_isclass)Ú STRING_TYPES)ÚConfig)ÚExitCode)Úhookimpl)ÚParser)Úcheck_ispytest)ÚINSTANCE_COLLECTOR)ÚNOSE_SUPPORT_METHOD)ÚFuncFixtureInfo)ÚSession)ÚMARK_GEN)Ú ParameterSet)Úget_unpacked_marks)ÚMark)Ú MarkDecorator)Únormalize_mark_list)Úfail)Úskip)Ú bestrelpath©Ú fnmatch_ex)Ú import_path)ÚImportPathMismatchError)Úparts)Úvisit)ÚScope)ÚPytestCollectionWarning)ÚPytestReturnNotNoneWarning)ÚPytestUnhandledCoroutineWarning)ÚLiteral)Ú _ScopeNameÚparserÚreturncój—| d¦«}| dddddd¬¦«| d dd dd ¬¦«| d d ddgd¬¦«| dd dgd¬¦«| dd dgd¬¦«| dddd¬¦«dS)NÚgeneralz --fixturesz --funcargsÚ store_trueÚ showfixturesFziShow available fixtures, sorted by plugin appearance (fixtures with leading '_' are only shown with '-v'))ÚactionÚdestÚdefaultÚhelpz--fixtures-per-testÚshow_fixtures_per_testzShow fixtures per testÚ python_filesÚargsz test_*.pyz *_test.pyz9Glob-style file patterns for Python test module discovery)ÚtyperTrUÚpython_classesÚTestz6Prefixes or glob names for Python test class discoveryÚpython_functionsÚtestzDPrefixes or glob names for Python test function and method discoveryÚDdisable_test_id_escaping_and_forfeit_all_rights_to_community_supportÚboolzcDisable string escape non-ASCII characters, might cause unwanted side effects(use at your own risk))ÚgetgroupÚ addoptionÚaddini)rLÚgroups ú`/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib/python3.11/site-packages/_pytest/python.pyÚpytest_addoptionre\s'€Ø �OŠO˜IÑ &Ô &€EØ ‡O‚OØØØØ Øð?ð ñôðð ‡O‚OØØØ %ØØ %ð ñôðð ‡M‚MØØ à˜kÐ*Ø Hð ñôðð ‡M‚MØØ Ø�Ø Eð ñôðð  ‡M‚MØØ Ø�Ø Sð ñôðð  ‡M‚MØNØ Øð-ð ñôðððóÚconfigcóz—|jjrt|¦«dS|jjrt|¦«dSdS)Nr)ÚoptionrQrV©rgs rdÚpytest_cmdline_mainrkŠsG€Ø „}Ô!ðÝ�VÑÔÐØˆqØ „}Ô+ðݘvÑ&Ô&Ð&؈qØ ˆ4rfÚmetafuncÚMetafunccóx—|j d¬¦«D]}|j|ji|j¤d|i¤ŽŒdS)NÚ parametrize©ÚnameÚ _param_mark)Ú definitionÚ iter_markersrorXÚkwargs)rlÚmarkers rdÚpytest_generate_testsrw”s]€ØÔ%×2Ò2¸ Ð2ÑFÔFðPðPˆØˆÔ˜fœkÐO¨V¬]ÐOÐOÈÐOÐOÐOÐOÐOðPðPrfcó^—| dd¦«| dd¦«dS)NÚmarkersaåparametrize(argnames, argvalues): call a test function multiple times passing in different arguments in turn. argvalues generally needs to be a list of values if argnames specifies only one name or a list of tuples of values if argnames specifies multiple names. Example: @parametrize('arg1', [1,2]) would lead to two calls of the decorated test function, one with arg1=1 and another with arg1=2.see https://docs.pytest.org/en/stable/how-to/parametrize.html for more info and examples.z¯usefixtures(fixturename1, fixturename2, ...): mark tests as needing all of the specified fixtures. see https://docs.pytest.org/en/stable/explanation/fixtures.html#usefixtures )Úaddinivalue_linerjs rdÚpytest_configurer{™sO€Ø ×ÒØð ñ ô ð ð ×ÒØð SñôðððrfÚnodeidcóΗd}|dz }|dz }|dz }|dz }|dz }|dz }tjt| |¦«¦«¦«t d¬ ¦«dS) NzFasync def functions are not natively supported and have been skipped. zMYou need to install a suitable plugin for your async framework, for example: z - anyio z - pytest-asyncio z - pytest-tornasync z - pytest-trio z - pytest-twistedz?async def function and no async plugin installed (see warnings))Úreason)ÚwarningsÚwarnrIÚformatr>)r|Úmsgs rdÚasync_warn_and_skiprƒ­s‰€Ø S€CØØXñ€Cðˆ=Ñ€CØÐ !Ñ!€CØÐ #Ñ#€CØÐ Ñ€CØÐ Ñ€CÝ „MÕ1°#·*²*¸VÑ2DÔ2DÑEÔEÑFÔFÐFÝÐQÐRÑRÔRÐRÐRÐRrfT)ÚtrylastÚ pyfuncitemÚFunctionc ór‡—|j}t|¦«rt|j¦«|jŠˆfd„|jjD¦«}|di|¤Ž}t|d¦«st|d¦«rt|j¦«n/|�-tj td|j›d|›d�¦«¦«dS) Ncó"•—i|] }|‰|“Œ S©r‰)Ú.0ÚargÚfuncargss €rdú z&pytest_pyfunc_call..Ásø€ÐOÐOÐO s��X˜c”]ÐOÐOÐOrfÚ __await__Ú __aiter__zExpected None, but z returned zj, which will be an error in a future version of pytest. Did you mean to use `assert` instead of `return`?Tr‰) Úobjr&rƒr|rŒÚ _fixtureinfoÚargnamesÚhasattrrr€rH)r…Ú testfunctionÚtestargsÚresultrŒs @rdÚpytest_pyfunc_callr—»s÷ø€à”>€LݘÑ&Ô&ð/ݘJÔ-Ñ.Ô.Ð.ØÔ"€HØOÐOÐOÐO¨jÔ.EÔ.NÐOÑOÔO€HØ ˆ\Ð %Ð %˜HÐ %Ð %€F݈v�{Ñ#Ô#ð ¥w¨v°{Ñ'CÔ'Cð ݘJÔ-Ñ.Ô.Ð.Ð.Ø Ð ÝŒ Ý &ð_ jÔ&7ð_ð_À6ð_ð_ð_ñ ô ñ ô ð ð ˆ4rfÚ file_pathÚparentÚModulecó—|jdkr{|j |¦«s.t||j d¦«dgz¦«sdS|j |¦«}| ||¬¦«}|SdS)Nz.pyrWú __init__.py)Ú module_pathr™)ÚsuffixÚsessionÚ isinitpathÚpath_matches_patternsrgÚgetiniÚ gethookproxyÚpytest_pycollect_makemodule)r˜r™ÚihookÚmodules rdÚpytest_collect_filer§Ïs�€ØÔ˜5Ò Ð ØŒ~×(Ò(¨Ñ3Ô3ð Ý(ؘ6œ=×/Ò/°Ñ?Ô?À=À/ÑQñôð ð�tØ”×+Ò+¨IÑ6Ô6ˆØ×:Ò:Ø!¨&ð;ñ ô ˆðˆ Ø ˆ4rfÚpathÚpatternscó:‡—tˆfd„|D¦«¦«S)zKReturn whether path matches any of the patterns in the list of globs given.c3ó8•K—|]}t|‰¦«V—ŒdS©Nr@)rŠÚpatternr¨s €rdú z(path_matches_patterns..às-øèè€ÐAÐA¨W�z˜' 4Ñ(Ô(ÐAÐAÐAÐAÐAÐArf)Úany)r¨r©s` rdr¡r¡Þs&ø€å ÐAÐAÐAÐA¸ÐAÑAÔAÑ AÔ AÐArfr�có�—|jdkrt ||¬¦«}|St ||¬¦«}|S)Nrœ©r¨)rqÚPackageÚ from_parentrš)r�r™ÚpkgÚmods rdr¤r¤ãsJ€ØÔ˜=Ò(Ð(Ý×*Ò*¨6¸ Ð*ÑDÔDˆØˆ Ý×$Ò$ V°+Ð$Ñ>Ô>€CØ €JrfÚ collector)ršÚClassrqr�cóÌ—t|ttf¦«sJt|¦«¦«‚t |¦«r7| ||¦«rt |||¬¦«}|S�nj| ||¦«�rSt|d|¦«}tj |¦«sltj t|¦«¦«sKt|¦«\}}tjtd|z¦«dt!|¦«|dz¬¦«nÂt|dd¦«r±t#|¦«rt$ ||¬¦«}d  |¬¦«}| t+jd |¬ ¦«¦«| t|¦«¦«|St1| ||¦«¦«SdS) N)rqr�Ú__func__z/cannot collect %r because it is not a function.é)ÚmessageÚcategoryÚfilenameÚlinenoÚ__test__Trpz?yield tests were removed in pytest 4.0 - {name} will be ignoredF)Úrunr~)Ú isinstancer·ršrYr,Ú istestclassr³ÚistestfunctionÚgetattrÚinspectÚ isfunctionr#rrÚ warn_explicitrGÚstrr'r†r�Ú add_markerr7Úxfailr€ÚlistÚ _genfunctions)r¶rqr�Úklassr½r¾Úresr~s rdÚpytest_pycollect_makeitemrÏësõ€õ �i¥%­ Ñ 1Ô 1ÐBÐBµ4¸ ±?´?ÑBÔBÐ 1å�CÑÔð@Ø × Ò   dÑ +Ô +ð Ý ×,Ò,¨Y¸TÀsÐ,ÑKÔKˆE؈Lñ ð × !Ò ! # tÑ ,Ô ,ñ@å�c˜: sÑ+Ô+ˆõÔ" 3Ñ'Ô'ð @­7Ô+=½mÈCÑ>PÔ>PÑ+QÔ+Qð @Ý*¨3Ñ/Ô/Ñ ˆH�fÝ Ô "Ý/ØEÈÑLñôðݘX™œØ ‘zð  ñ ô ð ð õ�S˜* dÑ +Ô +ð @ݘCÑ Ô ð @Ý (× 4Ò 4°YÀTÐ 4Ñ JÔ J�ØZ×aÒaØðbñô�ð—’�xœ~°%ÀÐGÑGÔGÑHÔHÐHØ—’Õ0°Ñ8Ô8Ñ9Ô9Ð9Ø� å˜I×3Ò3°D¸#Ñ>Ô>Ñ?Ô?Ð?Ø ˆ4rfcóä—eZdZdZdZed„¦«Zed„¦«Zed„¦«Zed„¦«Z e j d„¦«Z d„Z dd e d e d e fd „Zd eede feee ffd„ZdS)Ú PyobjMixinz¡this mix-in inherits from Node to carry over the typing information as its intended to always mix in before a node its position in the mro is unaffectedTcóL—| t¦«}|�|jndS)z@Python module object this node was collected from (can be None).N)Ú getparentršr�©ÚselfÚnodes rdr¦zPyobjMixin.modules&€ð�~Š~�fÑ%Ô%ˆØÐ+ˆtŒxˆx°Ð5rfcóL—| t¦«}|�|jndS)z?Python class object this node was collected from (can be None).N)rÓr·r�rÔs rdÚclszPyobjMixin.cls!s&€ð�~Š~�eÑ$Ô$ˆØÐ+ˆtŒxˆx°Ð5rfcój—| t¦«}|�t|jdd¦«ndS)z·Python instance object the function is bound to. Returns None if not a test method, e.g. for a standalone test function, a staticmethod, a class or a module. NÚ__self__)rÓr†rÄr�rÔs rdÚinstancezPyobjMixin.instance's3€ð�~Š~�hÑ'Ô'ˆØ6:Ð6F�w�t”x ¨TÑ2Ô2Ð2ÈDÐPrfcó—t|dd¦«}|€w| ¦«x|_}|jrU|j t |j¦«¦«|j  d„|jD¦«¦«|S)zUnderlying Python object.Ú_objNc3ó(K—|] }|j|fV—ŒdSr¬rp©rŠÚmarks rdr®z!PyobjMixin.obj..=s)èè€Ð$TÐ$T¸4 d¤i°Ð%6Ð$TÐ$TÐ$TÐ$TÐ$TÐ$Trf) rÄÚ_getobjrÝÚ_ALLOW_MARKERSÚ own_markersÚextendr9r�ÚkeywordsÚupdate©rÕr�s rdr�zPyobjMixin.obj1s�€õ�d˜F DÑ)Ô)ˆØ ˆ;Ø"Ÿlšl™nœnÐ ,ˆDŒI˜ðÔ"ð UØÔ ×'Ò'Õ(:¸4¼8Ñ(DÔ(DÑEÔEÐEð” ×$Ò$Ð$TÐ$TÀ4ÔCSÐ$TÑ$TÔ$TÑTÔTÐT؈ rfcó—||_dSr¬)rÝ)rÕÚvalues rdr�zPyobjMixin.obj@s €àˆŒ ˆ ˆ rfcóV—|j€J‚|jj}t||j¦«S)zCGet the underlying Python object. May be overwritten by subclasses.)r™r�rÄrqrçs rdrázPyobjMixin._getobjDs-€ðŒ{Ð&Ð&Ð&ØŒkŒoˆÝ�s˜DœIÑ&Ô&Ð&rfFÚ stopatmoduleÚ includemodulerMcóv—| ¦«}| ¦«g}|D]i}|j}t|t¦«r;t j |¦«d}|r|r|j|¦«n|j|¦«Œj|j¦«d  |¦«S)z5Return Python path relative to the containing module.rú.) Ú listchainÚreverserqrÁršÚosr¨ÚsplitextÚappendÚjoin)rÕrërìÚchainrDrÖrqs rdÚ getmodpathzPyobjMixin.getmodpathKs¾€à—’Ñ Ô ˆØ � Š ‰ŒˆØˆØð ð ˆDØ”9ˆDݘ$¥Ñ'Ô'ð Ý”w×'Ò'¨Ñ-Ô-¨aÔ0�ØðØ$ð+Ø$˜œ  TÑ*Ô*Ð*Ø�EØ ˆEŒL˜Ñ Ô Ð Ð ØˆŒ ‰ŒˆØ�xŠx˜‰ŒÐrfzos.PathLike[str]cóh—|j}t|dd¦«}t|t¦«rDtj|jj}|€J‚| d¦«r |dd…}|}|}nt|¦«\}}|  ¦«}t|t¦«sJ‚|||fS)NÚcompat_co_firstlinenoz.pycéÿÿÿÿ) r�rÄrÁÚintÚsysÚmodulesÚ __module__Ú__file__Úendswithrrö)rÕr�rør˜r¨r¾Úmodpaths rdÚ reportinfozPyobjMixin.reportinfo\s¾€àŒhˆÝ '¨Ð-DÀdÑ KÔ KÐÝ Ð+­SÑ 1Ô 1ð ,åœ  C¤NÔ3Ô<ˆIØÐ(Ð(Ð(Ø×!Ò! &Ñ)Ô)ð +Ø% c r cœN� Ø3<ˆDØ*ˆFˆFå& sÑ+Ô+‰LˆD�&Ø—/’/Ñ#Ô#ˆÝ˜&¥#Ñ&Ô&Ð&Ð&Ð&Ø�V˜WÐ$Ð$rfN)TF)Ú__name__rýÚ __qualname__Ú__doc__râÚpropertyr¦rØrÛr�Úsetterrár_rÈrörrrrúrr‰rfrdrÑrÑs$€€€€€ð-ð-ð €Nà ð6ð6ñ„Xð6ð ð6ð6ñ„Xð6ð ðQðQñ„XðQðð ð ñ„Xð ð „Zððñ„Zðð'ð'ð'ðð tðÀ4ðÐTWððððð"%˜E %Ð(:¸CÐ(?Ô"@À(È3Ä-ÐQTÐ"TÔUð%ð%ð%ð%ð%ð%rfrÑcó—eZdZdS)Ú _EmptyClassN)rrýrr‰rfrdrrss€€€€€€€rfrÚ empty_module>rþÚ __cached__Ú __builtins__cóÒ—eZdZdedefd„Zdedefd„Zdedefd„Zdededefd„Z dededefd„Z d ededefd „Z de e ejejffd „Zdeded fd „ZdS)Ú PyCollectorrqrMcó.—| d|¦«S)Nr\©Ú_matches_prefix_or_glob_option©rÕrqs rdÚfuncnamefilterzPyCollector.funcnamefilter„s€Ø×2Ò2Ð3EÀtÑLÔLÐLrfr�có(—t|dd¦«duS)zgLook for the __test__ attribute, which is applied by the @nose.tools.istest decorator. r¿FTr*rçs rdÚ isnosetestzPyCollector.isnosetest‡s€õ˜C ¨UÑ3Ô3°tÐ;Ð;rfcó.—| d|¦«S)NrZrrs rdÚclassnamefilterzPyCollector.classnamefilter�s€Ø×2Ò2Ð3CÀTÑJÔJÐJrfcóþ—| |¦«s| |¦«rRt|ttf¦«rt |dd¦«}t |¦«otj|¦«duSdS)Nr¹F) rrrÁÚ staticmethodÚ classmethodr+ÚcallablerÚgetfixturemarker©rÕr�rqs rdrÃzPyCollector.istestfunction“sy€Ø × Ò ˜tÑ $Ô $𠨯ª¸Ñ(<Ô(<ð ݘ#¥ ­kÐ:Ñ;Ô;ð ;å" 3¨ °EÑ:Ô:�ݘC‘=”=ÐK¥XÔ%>¸sÑ%CÔ%CÀtÐ%KÐ Kà�5rfcóV—| |¦«p| |¦«Sr¬)rrrs rdrÂzPyCollector.istestclassœs'€Ø×#Ò# DÑ)Ô)ÐA¨T¯_ª_¸SÑ-AÔ-AÐArfÚ option_namecó¸—|j |¦«D]>}| |¦«rdSd|vsd|vsd|vrtj||¦«rdSŒ?dS)z`Check if the given name matches the prefix or glob-pattern defined in ini configuration.TÚ*ú?ú[F)rgr¢Ú startswithÚfnmatch)rÕrrqris rdrz*PyCollector._matches_prefix_or_glob_optionŸs€ð”k×(Ò(¨Ñ5Ô5ð ð ˆFØ�Š˜vÑ&Ô&ð Ø�t�tð˜�-�- 3¨& = =°C¸6°M°MÅwÄØ�fñHôH°Mð�t�tøØˆurfcóî—t|jdd¦«sgSt|jdi¦«g}t|jt¦«r)|jjD]}| |j¦«Œt¦«}g}|j}|D]¿}g}t|  ¦«¦«D]„\}} |tvrŒ||vrŒ|  |¦«|  ||| ¬¦«} | €ŒDt| t¦«r| | ¦«Œo| | ¦«Œ…| |¦«ŒÀg} t|¦«D]}|  |¦«Œ| S)Nr¿TÚ__dict__)r¶rqr�)rÄr�rÁrYÚ__mro__rór&Úsetr¥rËÚitemsÚIGNORED_ATTRIBUTESÚaddrÏräÚreversed) rÕÚdictsÚbaseclsÚseenÚ dict_valuesr¥ÚdicÚvaluesrqr�rÎr–s rdÚcollectzPyCollector.collect®s¥€Ý�t”x ¨TÑ2Ô2ð ØˆIõ˜œ :¨rÑ2Ô2Ð3ˆÝ �d”h¥Ñ %Ô %ð /Øœ8Ô+ð /ð /�Ø— ’ ˜WÔ-Ñ.Ô.Ð.Ð.õ™œˆØFHˆ Ø” ˆØð 'ð 'ˆCØ?AˆFõ" #§)¢)¡+¤+Ñ.Ô.ð 'ð '‘ ��cØÕ-Ð-Ð-ØØ˜4�<�<ØØ—’˜‘”�Ø×5Ò5Ø"¨°3ð6ñô�ð�;ØÝ ¥TÑ*Ô*ð'Ø—M’M #Ñ&Ô&Ð&Ð&à—M’M #Ñ&Ô&Ð&Ð&Ø × Ò ˜vÑ &Ô &Ð &Ð &ðˆÝ˜{Ñ+Ô+ð "ð "ˆFØ �MŠM˜&Ñ !Ô !Ð !Ð !؈ rfr†c #órK—| t¦«}|€J‚|j}| t¦«}|r|jpd}t |||¬¦«}|j}t|||j||d¬¦«} g} t|d¦«r|   |j ¦«|�2t|d¦«r"|   |¦«j ¦«|j j   | t| ¬¦«¦«| js!t  |||¬¦«V—dS|jj} t'j|| | ¦«| ¦«| jD]8} |›d| j›d�} t  || | || jdi|¬ ¦«V—Œ9dS) N)rqÚcallobjT)rsÚ fixtureinforgrØr¦Ú _ispytestrw)rl)rqr6r"ú])rqÚcallspecr6råÚ originalname)rÓršr�r·ÚFunctionDefinitionr³r‘rmrgr“rórwr¥Ú call_extraÚdictÚ_callsr†rŸÚ_fixturemanagerrÚadd_funcarg_pseudo_fixture_defÚprune_dependency_treeÚid)rÕrqÚfuncobjÚ modulecolr¦ÚclscolrØrsr6rlÚmethodsÚfmr9Úsubnames rdrÌzPyCollector._genfunctionsÙsúèè€Ø—N’N¥6Ñ*Ô*ˆ ØÐ$Ð$Ð$Ø”ˆØ—’¥Ñ&Ô&ˆØÐ#˜œÐ+ tˆå'×3Ò3°D¸tÈWÐ3ÑUÔUˆ Ø Ô-ˆ õØ!Ø#Ø”;ØØØð  ñ ô ˆðˆÝ �6Ð2Ñ 3Ô 3ð 9Ø �NŠN˜6Ô7Ñ 8Ô 8Ð 8Ø ˆ?�w sÐ,CÑDÔDˆ?Ø �NŠN˜3˜3™5œ5Ô6Ñ 7Ô 7Ð 7Ø Œ Ô(×3Ò3°G½TÈ8Ð=TÑ=TÔ=TÑUÔUÐUàŒð Ý×&Ò& t°$ÀKÐ&ÑPÔPÐ PÐ PÐ PÐ PÐ Pð”Ô-ˆBÝ Ô 3°D¸(ÀBÑ GÔ GÐ Gð × -Ò -Ñ /Ô /Ð /à$œOð ð �Ø!Ð2Ð2 H¤KÐ2Ð2Ð2�Ý×*Ò*ØØ Ø%Ø +Ø&œk¨4Ð0Ø!%ð +ñôððððð ð rfN)rrýrrÈr_rÚobjectrrrÃrÂrr rrÚItemÚ Collectorr3r rÌr‰rfrdr r ƒs^€€€€€ðM 3ðM¨4ðMðMðMðMð<˜fð<¨ð<ð<ð<ð<ðK CðK¨DðKðKðKðKð &ð°ð¸ðððððB˜vðB¨SðB°TðBðBðBðBð ¸#ð ÀSð ÈTð ð ð ð ð)˜ %¨¬ °E´OÐ(CÔ"DÔEð)ð)ð)ð)ðV0 #ð0°8¸JÔ3Gð0ð0ð0ð0ð0ð0rfr cót‡—eZdZdZd„Zdeeejej ffˆfd„ Z d d„Z d d„Z d„Z ˆxZS) ršz)Collector for test classes and functions.có*—| ¦«Sr¬)Ú_importtestmodule©rÕs rdrázModule._getobjs€Ø×%Ò%Ñ'Ô'Ð'rfrMcóÒ•—| ¦«| ¦«|jj |¦«t ¦« ¦«Sr¬)Ú_inject_setup_module_fixtureÚ_inject_setup_function_fixturerŸr?ÚparsefactoriesÚsuperr3©rÕÚ __class__s €rdr3zModule.collectsTø€Ø ×)Ò)Ñ+Ô+Ð+Ø ×+Ò+Ñ-Ô-Ð-Ø Œ Ô$×3Ò3°DÑ9Ô9Ð9݉wŒw�ŠÑ Ô Ð rfNcó䇇—|jj d¦«}t|jd¦«Š‰€(|r&t|jd¦«Št ‰¦«sdŠt|jd¦«Š‰€(|r&t|jd¦«Št ‰¦«sdЉ€‰€dSt jddd |jj›�¬ ¦«d td fˆˆfd „ ¦«}||j_ dS)a'Inject a hidden autouse, module scoped fixture into the collected module object that invokes setUpModule/tearDownModule if either or both are available. Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with other fixtures (#517). Únose©Ú setUpModuleÚ setup_moduleN)Úsetup©ÚtearDownModuleÚteardown_module)ÚteardownTr¦Ú_xunit_setup_module_fixture_©ÚautouseÚscoperqrM©NNNc3ót•K—‰�t‰|j¦«dV—‰�t‰|j¦«dSdSr¬)Ú_call_with_optional_argumentr¦)Úrequestr[r_s €€rdÚxunit_setup_module_fixturezGModule._inject_setup_module_fixture..xunit_setup_module_fixture4sPøèè€ðÐ'Ý,¨\¸7¼>ÑJÔJÐJØ ˆEˆEˆEØÐ*Ý,¨_¸g¼nÑMÔMÐMÐMÐMð+Ð*rf) rgÚ pluginmanagerÚ has_pluginÚ_get_first_non_fixture_funcr�rrÚfixturerr Ú_Module__pytest_setup_module)rÕÚhas_noserir[r_s @@rdrQz#Module._inject_setup_module_fixturesBøø€ð”;Ô,×7Ò7¸Ñ?Ô?ˆÝ2Ø ŒHÐ5ñ ô ˆ ð Ð  HÐ å6°t´xÀÑLÔLˆLݘLÑ)Ô)ð $Ø#� Ý5Ø ŒHÐ;ñ ô ˆð Ð " xÐ "Ý9¸$¼(ÀMÑRÔRˆOå˜OÑ,Ô,ð 'Ø"&�à Ð  OÐ$;Ø ˆFå Ô ØØàC°´Ô0AÐCÐCð  ñ ô ð  Nµ9Ð=MÔ3Nð Nð Nð Nð Nð Nð Nñ  ô ð  Nð*DˆŒÔ&Ð&Ð&rfcóþ‡‡—t|jd¦«Št|jd¦«Š‰€‰€dStjddd|jj›�¬¦«dt d fˆˆfd „ ¦«}||j_dS) a/Inject a hidden autouse, function scoped fixture into the collected module object that invokes setup_function/teardown_function if either or both are available. Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with other fixtures (#517). )Úsetup_function)Úteardown_functionNTÚfunctionÚ_xunit_setup_function_fixture_rbrMrec3óŽ•K—|j�dV—dS‰�t‰|j¦«dV—‰�t‰|j¦«dSdSr¬)rÛrgrs)rhrqrrs €€rdÚxunit_setup_function_fixturezKModule._inject_setup_function_fixture..xunit_setup_function_fixtureQsløèè€ðÔÐ+ð���Ø�ØÐ)Ý,¨^¸WÔ=MÑNÔNÐNØ ˆEˆEˆEØ Ð,Ý,Ð->ÀÔ@PÑQÔQÐQÐQÐQð-Ð,rf)rlr�rrmrr Ú_Module__pytest_setup_function)rÕrvrqrrs @@rdrRz%Module._inject_setup_function_fixtureCsÃøø€õ5°T´XÐ?RÑSÔSˆÝ7Ø ŒHÐ,ñ ô Ðð Ð !Ð&7Ð&?Ø ˆFå Ô ØØàE°$´(Ô2CÐEÐEð  ñ ô ð RµYÐ?OÔ5Pð Rð Rð Rð Rð Rð Rñ  ô ð Rð,HˆŒÔ(Ð(Ð(rfcó´—|j d¦«} t|j||jj¬¦«}�nz#t $r@}| tj¦«  d¬¦«¦«|‚d}~wt$r#}| d|j z¦«|‚d}~wt$rÊ}tj¦«}|j d¦«dkr$|j  t¦«|_ |j r|  d¬¦«n| ¦«}t#|¦«}| d |j|¬ ¦«¦«|‚d}~wt&j$r#}|jr‚| d ¦«|‚d}~wwxYw|jj |¦«|S) Nz --import-mode)ÚmodeÚrootÚshort©Ústylezèimport file mismatch: imported module %r has this __file__ attribute: %s which is not the same as the test file we want to collect: %s HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modulesÚverboseézŒImportError while importing test module '{path}'. Hint: make sure your test modules/packages have valid Python names. Traceback: {traceback})r¨Ú tracebackzïUsing pytest.skip outside of a test will skip the entire module. If that's your intention, pass `allow_module_level=True`. If you want to skip a specific test or an entire class, use the @pytest.mark.skip or @pytest.mark.skipif decorators.)rgÚ getoptionrBr¨ÚrootpathÚ SyntaxErrorÚ CollectErrorrÚ from_currentÚgetreprrCrXÚ ImportErrorr€ÚfilterrÚexconlyrÈr�r>Ú ExceptionÚallow_module_levelrjÚconsider_module)rÕÚ importmoderµÚeÚexc_infoÚexc_reprÚ formatted_tbs rdrNzModule._importtestmodulees€à”[×*Ò*¨?Ñ;Ô;ˆ ð( ݘdœi¨j¸t¼{Ô?SÐTÑTÔTˆC‰CøÝð ð ð Ø×#Ò#ÝÔ*Ñ,Ô,×4Ò4¸7Ð4ÑCÔCñôàð øøøøõ'ð ð ð Ø×#Ò#ð=ð @A¼vñ Fñôðð øøøøõð ð ð Ý$Ô1Ñ3Ô3ˆHØŒ{×$Ò$ YÑ/Ô/°!Ò3Ð3Ø%-Ô%7×%>Ò%>Õ?OÑ%PÔ%P�Ô"ðÔ%ð(�× Ò  wÐ Ñ/Ô/Ð/à×%Ò%Ñ'Ô'ð õ ˜x™=œ=ˆLØ×#Ò#ð÷%šf¨$¬)¸|˜fÑLÔLñ ôð ð  øøøøõ Œ~ð ð ð ØÔ#ð ØØ×#Ò#ðOñôð ð  øøøøð øøøð Œ Ô!×1Ò1°#Ñ6Ô6Ð6؈ s:œ!?¿ F6Á ;B F6ÂB/Â/ F6Â.ðsQøèè€ððàõ�J‘” 6Ð)ÐP¨j¸=Ñ.HÈDÒ.Pððððððrf)r¨r™r¡rgr¢ršr³r(rErÈr£rr§rqrDr¯r­r¨Újoinpathr+)rÕÚ this_pathÚ pkg_prefixesr�r³r¨s @@rdr3zPackage.collectßs©øøèè€Ø”IÔ$ˆ õ ! ¤¨D¬K×,>Ò,>¸~Ñ,NÔ,NÑ OÔ Oð ;Ý×$Ò$ T°´ Ð$Ñ:Ô:Ð :Ð :Ð :å"%¡%¤%ˆ Ý�c )™nœn°d´mÐDÑDÔDð 'ð 'ˆHݘœ Ñ&Ô&ˆDð×ÒÑ!Ô!ð Ø”= MÒ1Ð1°d´kÀYÒ6NÐ6NØå˜8œ=Ñ)Ô)ˆFÝðððððà".ðñôñôð ðà×ÒÑ!Ô!ð 'Ø×,Ò,¨TÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø—_’_Ñ&Ô&ð 'àØ—’˜}Ñ-Ô-×5Ò5Ñ7Ô7ð 'Ø× Ò  Ñ&Ô&Ð&øð+ 'ð 'rf)NNNNr’)T)rrýrrr(rrKrr™r\r_r£rr­r rrJr3r‰rfrdr²r²•s€€€€€ð ØØØ#ð*ð*à˜Ô%ð*ð”ð*ð�tŒnð*ð ð*ð*ð*ð*ð0$ð$ð$ð$ð Ð!3ð¸ððððð26ðHðHØðHØ*.ðHà �%”/Ô "ðHðHðHðHð0'˜ %¨¬ °E´OÐ(CÔ"DÔEð'ð'ð'ð'ð'ð'rfr²có‚—|jj}tj|¦«r|dz}|r ||¦«dS|¦«dS)zyCall the given function with the given argument if func accepts one argument, otherwise calls func without arguments.rºN)Ú__code__Ú co_argcountrÅÚismethod)rœr‹Ú arg_counts rdrgrgÿsR€ð” Ô)€IÝÔ˜ÑÔðØ�Q‰ˆ ØðØ ˆˆS‰ Œ ˆ ˆ ˆ à ˆ‰ŒˆˆˆrfÚnamescóf—|D]-}t||d¦«}|�tj|¦«€|cSŒ.dS)z§Return the attribute from the given object to be used as a setup/teardown xunit-style function, but only if not marked as a fixture to avoid calling it twice. N)rÄrr)r�r¼rqÚmeths rdrlrl sI€ðððˆÝ!(¨¨d°DÑ!9Ô!9ˆØ Ð ¥Ô 9¸$Ñ ?Ô ?Ð G؈KˆKˆKøØ ˆ4rfc󎇗eZdZdZeddœˆfd„ ¦«Zd„Zdeee j e j ffˆfd„ Z d d„Z d d „ZˆxZS) r·zCollector for test methods.N©r�c ó<•—t¦«jd||dœ|¤ŽS)úThe public constructor.)rqr™r‰©rTr³)rØr™rqr�ÚkwrVs €rdr³zClass.from_parents)ø€ð#�u‰wŒwÔ"ÐB¨°VÐBÐB¸rÐBÐBÐBrfcó*—| ¦«Sr¬rÀrOs rdÚ newinstancezClass.newinstances€Ø�xŠx‰zŒzÐrfrMc 󢕗t|jdd¦«sgSt|j¦«rH|j€J‚| t d|jj›d|jj›d�¦«¦«gSt|j¦«rH|j€J‚| t d|jj›d|jj›d�¦«¦«gS|  ¦«|  ¦«|j j   | ¦«|j¦«t¦« ¦«S)Nr¿Tzcannot collect test class z. because it has a __init__ constructor (from: ú)z- because it has a __new__ constructor (from: )r+r�Úhasinitr™r€rGrr|ÚhasnewÚ_inject_setup_class_fixtureÚ_inject_setup_method_fixturerŸr?rSrÆrTr3rUs €rdr3z Class.collect!s]ø€Ý˜DœH j°$Ñ7Ô7ð ØˆIÝ �4”8Ñ Ô ð Ø”;Ð*Ð*Ð*Ø �IŠIÝ'Ð'ð”xÔ(Ð(Ð(¨$¬+Ô*<Ð*<Ð*<ð>ñôñ ô ð ðˆIÝ �D”HÑ Ô ð Ø”;Ð*Ð*Ð*Ø �IŠIÝ'Ð'ð”xÔ(Ð(Ð(¨$¬+Ô*<Ð*<Ð*<ð>ñôñ ô ð ðˆIà ×(Ò(Ñ*Ô*Ð*Ø ×)Ò)Ñ+Ô+Ð+à Œ Ô$×3Ò3°D×4DÒ4DÑ4FÔ4FÈÌ ÑTÔTÐTå‰wŒw�ŠÑ Ô Ð rfc󇇇—t‰jd¦«Št‰jd¦«Š‰€‰€dStjddd‰jj›�¬¦«dt d fˆˆˆfd „ ¦«}|‰j_dS) a%Inject a hidden autouse, class scoped fixture into the collected class object that invokes setup_class/teardown_class if either or both are available. Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with other fixtures (#517). )Ú setup_class)Úteardown_classNTÚclassÚ_xunit_setup_class_fixture_rbrMrec3ó°•K—‰�$t‰¦«}t|‰j¦«dV—‰�&t‰¦«}t|‰j¦«dSdSr¬)r$rgr�)rØrœrÕrÎrÏs €€€rdÚxunit_setup_class_fixturezDClass._inject_setup_class_fixture..xunit_setup_class_fixtureLsjøèè€ðÐ&Ý  Ñ-Ô-�Ý,¨T°4´8Ñ<Ô<Ð<Ø ˆEˆEˆEØÐ)Ý  Ñ0Ô0�Ý,¨T°4´8Ñ<Ô<Ð<Ð<Ð<ð*Ð)rf)rlr�rrmrr Ú_Class__pytest_setup_class)rÕrÓrÎrÏs` @@rdrËz!Class._inject_setup_class_fixture@s¸øøø€õ2°$´(ÐÐ#9Ø ˆFå Ô ØØàF¨t¬xÔ/DÐFÐFð  ñ ô ð  =­iÐ8HÔ.Ið =ð =ð =ð =ð =ð =ð =ñ  ô ð  =ð)BˆŒÔ%Ð%Ð%rfc󨇇‡‡‡‡—|jj d¦«}dŠt|j‰f¦«ŠdЉ€|rdŠdŠt|j‰f¦«ŠdŠt|j‰f¦«ŠdЉ€|rdŠdŠt|j‰f¦«Š‰€‰€dSt jdd d |jj›�¬ ¦«d td fˆˆˆˆˆˆfd„ ¦«}||j_ dS)a+Inject a hidden autouse, function scoped fixture into the collected class object that invokes setup_method/teardown_method if either or both are available. Using a fixture to invoke these methods ensures we play nicely and unsurprisingly with other fixtures (#517). rXÚ setup_methodFNr\TÚteardown_methodr`rsÚ_xunit_setup_method_fixture_rbrMrec3óŠ•K—|j}‰�Vt|‰¦«}t||¦«‰r4tjt j|jjd¬¦«d¬¦«dV—‰�Xt|‰ ¦«}t||¦«‰r8tjt j|jjd¬¦«d¬¦«dSdSdS)Nr\)r|Úmethodr)Ú stacklevelr`) rsrÄrgrr€r4r�rÖr|) rÕrhrÚrœÚemit_nose_setup_warningÚemit_nose_teardown_warningrÖÚ setup_namer×Ú teardown_names €€€€€€rdÚxunit_setup_method_fixturezFClass._inject_setup_method_fixture..xunit_setup_method_fixturevs øèè€ðÔ%ˆFØÐ'ݘt ZÑ0Ô0�Ý,¨T°6Ñ:Ô:Ð:Ø*ðÝ”MÝ+Ô2Ø#*¤<Ô#6¸wðñôð$%ð ñôðð ˆEˆEˆEØÐ*ݘt ]Ñ3Ô3�Ý,¨T°6Ñ:Ô:Ð:Ø-ðÝ”MÝ+Ô2Ø#*¤<Ô#6¸zðñôð$%ð ñôðððð +Ð*ððrf) rgrjrkrlr�rrmrr Ú_Class__pytest_setup_method) rÕroràrÜrÝrÖrÞr×rßs @@@@@@rdrÌz"Class._inject_setup_method_fixture]sNøøøøøø€ð”;Ô,×7Ò7¸Ñ?Ô?ˆØ#ˆ Ý2°4´8¸j¸]ÑKÔKˆ Ø"'ÐØ Ð  HÐ Ø ˆJØ&*Ð #Ý6°t´xÀ*ÀÑOÔOˆLØ)ˆ Ý5°d´hÀÐ@PÑQÔQˆØ%*Ð"Ø Ð " xÐ "Ø&ˆMØ)-Ð &Ý9¸$¼(À]ÐDTÑUÔUˆOØ Ð  OÐ$;Ø ˆFå Ô ØØàG°´Ô0EÐGÐGð  ñ ô ð  ½ÐCSÔ9Tð ð ð ð ð ð ð ð ð ð ñ  ô ð  ð0*DˆŒÔ&Ð&Ð&rfr’)rrýrrrr³rÆr rrrJrKr3rËrÌr“r”s@rdr·r·s×ø€€€€€Ø%Ð%àØ.2ðCðCðCðCðCðCñ„[ðCðððð!˜ %¨¬ °E´OÐ(CÔ"DÔEð!ð!ð!ð!ð!ð!ð>BðBðBðBð:7Dð7Dð7Dð7Dð7Dð7Dð7Dð7Drfr·có—eZdZdZdS)Ú InstanceDummyzùInstance used to be a node type between Class and Function. It has been removed in pytest 7.0. Some plugins exist which reference `pytest.Instance` only to ignore it; this dummy class keeps them working. This will be removed in pytest 8.N)rrýrrr‰rfrdrãrã—s€€€€€ððððrfrãcó„—|dkr!tjtd¦«tSt dt ›d|›�¦«‚)NÚInstancerzmodule z has no attribute )rr€r3rãÚAttributeErrorrrps rdÚ __getattr__rçžsE€Ø ˆzÒÐÝŒ Õ(¨!Ñ,Ô,Ð,ÝÐÝ ÐE¥8ÐEÐE¸tÐEÐEÑ FÔ FÐFrfcóL—t|dd¦«}|r|tjkSdS)Nr™F)rÄrIr™)r�Úinits rdrÉrÉ¥s-€Ý˜3  ¨DÑ1Ô1€DØ ð'Ø•v”Ò&Ð&Ø ˆ5rfcóL—t|dd¦«}|r|tjkSdS)NÚ__new__F)rÄrIrë)r�Únews rdrÊrʬs-€Ý˜#˜y¨$Ñ/Ô/€CØ ð%Ø•f”nÒ$Ð$Ø ˆ5rf)Úfrozenc óÈ—eZdZUdZdZeeed<eeed<e e e ge e fed<e ee e ed<e e ed<e eed<e eed <d eefd „Zd eefd „Zd e deded efd„Zd e deded e efd„Zd e ded e efd„Zd e d e efd„Zd e ded efd„Zededed efd„¦«ZdS)ÚIdMakerzMake IDs for a parametrization.)r’Ú parametersetsÚidfnÚidsrgr|Ú func_namer’rðrñròrgr|rórMcóh—t| ¦«¦«}t|¦«tt|¦«¦«krct |¦«}t t ¦«}t|¦«D]0\}}||dkr|›||›�||<||xxdz cc<Œ1|S)aÐMake a unique identifier for each ParameterSet, that may be used to identify the parametrization in a node ID. Format is -...-[counter], where prm_x_token is - user-provided id, if given - else an id derived from the value, applicable for certain types - else The counter suffix is appended only in case a string wouldn't be unique otherwise. rº)rËÚ _resolve_idsÚlenr(rrrúÚ enumerate)rÕÚ resolved_idsÚ id_countsÚ id_suffixesÚindexrBs rdÚmake_unique_parameterset_idsz$IdMaker.make_unique_parameterset_idsÖsº€õ˜D×-Ò-Ñ/Ô/Ñ0Ô0ˆ å ˆ|Ñ Ô ¥¥C¨ Ñ$5Ô$5Ñ 6Ô 6Ò 6Ð 6å  Ñ-Ô-ˆIå*5µcÑ*:Ô*:ˆKå& |Ñ4Ô4ð )ð )‘ ��rؘR”= 1Ò$Ð$Ø-/Ð*B°¸R´Ð*BÐ*B�L Ñ'Ø �O�O”O qÑ(�O�O‘OøØÐrfc#ó|‡‡K—t‰j¦«D]¢\Š}|j� |jV—Œ‰jrI‰t ‰j¦«kr1‰j‰�$‰ ‰j‰‰¦«V—Œfd ˆˆfd„t|j‰j ¦«D¦«¦«V—Œ£dS)z;Resolve IDs for all ParameterSets (may contain duplicates).Nú-c3óL•K—|]\}}‰ ||‰¦«V—ŒdSr¬)Ú_idval)rŠÚvalÚargnameÚidxrÕs €€rdr®z'IdMaker._resolve_ids..úsKøèè€ððá$˜˜Wð—K’K  W¨cÑ2Ô2ððððððrf) r÷rðrBròröÚ_idval_from_value_requiredrôÚzipr2r’)rÕÚ parametersetrs` @rdrõzIdMaker._resolve_idsïs÷øøèè€å!*¨4Ô+=Ñ!>Ô!>ð ð Ñ ˆC�ØŒÐ*à"”oÐ%Ð%Ð%Ð%Ø”ð ˜c¥C¨¬¡M¤MÒ1Ð1°d´h¸s´mÐ6Oà×5Ò5°d´h¸s´mÀSÑIÔIÐIÐIÐIÐIð—h’hðððððå(+¨LÔ,?ÀÄÑ(OÔ(Oðñôñôððððð ð rfrrrcóÊ—| |||¦«}|�|S| ||¦«}|�|S| |¦«}|�|S| ||¦«S)z-Make an ID for a parameter in a ParameterSet.)Ú_idval_from_functionÚ_idval_from_hookÚ_idval_from_valueÚ_idval_from_argname)rÕrrrÚidvals rdrzIdMaker._idvalÿsx€à×)Ò)¨#¨w¸Ñ<Ô<ˆØ Р؈LØ×%Ò% c¨7Ñ3Ô3ˆØ Р؈LØ×&Ò& sÑ+Ô+ˆØ Р؈LØ×'Ò'¨°Ñ5Ô5Ð5rfcó—|j€dS | |¦«}nP#t$rC}|j� |j›d�nd}d}|| ||¦«z}t |¦«|‚d}~wwxYw|€dS| |¦«S)zjTry to make an ID for a parameter in a ParameterSet using the user-provided id callable, if given.Nú: ÚzJerror raised while trying to determine id of parameter '{}' at position {})rñrŠr|r�Ú ValueErrorr )rÕrrrrBrŽÚprefixr‚s rdrzIdMaker._idval_from_function s­€ð Œ9Ð Ø�4ð )Ø—’˜3‘”ˆBˆBøÝð )ð )ð )Ø+/¬;Ð+B˜œ Ð'Ð'Ð'Ð'ȈFØ^ˆCؘ3Ÿ:š: g¨sÑ3Ô3Ñ3ˆCݘS‘/”/ qÐ (øøøøð  )øøøð ˆ:Ø�4Ø×%Ò% bÑ)Ô)Ð)s‹!¡ A.«>A)Á)A.cóf—|jr)|jj |j||¬¦«}|SdS)zsTry to make an ID for a parameter in a ParameterSet by calling the :hook:`pytest_make_parametrize_id` hook.)rgrrN)rgÚhookÚpytest_make_parametrize_id)rÕrrrBs rdr zIdMaker._idval_from_hooksC€ð Œ;ð Ø $¤ Ô 0× KÒ KØ”{¨°Wð!Lñ!ô!ˆBðˆI؈trfcóð—t|t¦«rt||j¦«S|�(t|tt t tf¦«rt|¦«St|t¦«rt|j ¦«S|turn_t|tj¦«rt|¦«Stt|dd¦«t¦«rt|d¦«}|SdS)zkTry to make an ID for a parameter in a ParameterSet from its value, if the value type is supported.Nr)rÁr-Ú_ascii_escaped_by_configrgÚfloatrúr_ÚcomplexrÈrrr­r)ÚenumÚEnumrÄ)rÕrrqs rdr zIdMaker._idval_from_value(sÓ€õ �c�<Ñ (Ô (ð Ý+¨C°´Ñ=Ô=Ð =Ø ˆ[�J s­UµC½½wÐ,GÑHÔHˆ[Ý�s‘8”8ˆOÝ ˜�WÑ %Ô %ð Ý  ¤Ñ-Ô-Ð -Ø •Fˆ]ˆ]à Ý ˜�TœYÑ 'Ô 'ð Ý�s‘8”8ˆOÝ �  Z°Ñ6Ô6½Ñ <Ô <ð å  ZÑ0Ô0ˆD؈K؈trfcóú—| |¦«}|�|S|j� d|j›d�}n|j� d|j›d�}nd}|›dt|¦«›dt |¦«›d|›d�}t |d ¬ ¦«dS) zALike _idval_from_value(), but fails if the type is not supported.NúIn rrzids contains unsupported value z (type: z ) at index zf. Supported types are: str, bytes, int, float, complex, bool, enum, regex or anything with a __name__.F©Úpytrace)r rór|rrYr=)rÕrrrBrr‚s rdrz"IdMaker._idval_from_value_required<sË€à × #Ò # CÑ (Ô (ˆØ ˆ>؈Ið Œ>Ð %Ø-˜4œ>Ð-Ð-Ð-ˆFˆFØ Œ[Ð $Ø*˜4œ;Ð*Ð*Ð*ˆFˆFàˆFàð sð sµh¸s±m´mð sð sÍTÐRUÉYÌYð sð sÐehð sð sð sð õ ˆS˜%Ð Ñ Ô Ð Ð Ð rfcó@—t|¦«t|¦«zS)znMake an ID for a parameter in a ParameterSet from the argument name and the index of the ParameterSet.r±)rrs rdr zIdMaker._idval_from_argnameOs€õ�7‰|Œ|�c #™hœhÑ&Ð&rfN)rrýrrÚ __slots__rrÈÚ__annotations__r8rrrrIr.r rür rõrúrrr r rrr r‰rfrdrïrï³s€€€€€€ð*Ð)ð€Ið�sŒmÐÐÑà˜LÔ)Ð)Ð)Ñ)ð �8˜S˜E 8¨FÔ#3Ð3Ô4Ô 5Ð5Ð5Ñ5à �(˜8 FÔ+Ô,Ô -Ð-Ð-Ñ-ð �VÔ ÐÐÑð �SŒMÐÐÑð˜Œ}ÐÐÑð¨d°3¬iððððð2˜h sœmððððð 6˜&ð 6¨3ð 6°Sð 6¸Sð 6ð 6ð 6ð 6ð*Øð*Ø$'ð*Ø.1ð*à �#Œð*ð*ð*ð*ð$ Fð°Sð¸XÀc¼]ððððð Vð°¸´ ððððð(!¨fð!¸3ð!À3ð!ð!ð!ð!ð&ð' Sð'¨sð'°sð'ð'ð'ñ„\ð'ð'ð'rfrïcó —eZdZUdZeje¬¦«Zee e fe d<eje¬¦«Z ee e fe d<eje¬¦«Z ee efe d<eje¬¦«Zee efe d<eje¬¦«Zee e d<eje¬¦«Zeee d<d ee d fd ee d ee d e deeeefdededdfd„Zde de fd„Zede fd„¦«ZdS)Ú CallSpec2zìA planned parameterized invocation of a test function. Calculated during collection for a given test function's Metafunc. Once collection is over, each callspec is turned into a single Item and stored in item.callspec. )Údefault_factoryrŒÚparamsÚindicesÚ _arg2scopeÚ_idlistÚmarksÚvaltypesúLiteral['params', 'funcargs']r’ÚvalsetrBrdÚ param_indexrMc ó—|j ¦«}|j ¦«} |j ¦«} |j ¦«} t ||¦«D]X\} } | | vs| |vrt d| ›�¦«‚|| }|dkr| | | <n|dkr| || <nt|¦«|| | <|| | <ŒYt|| | | g|j ¢|‘g|j ¢t|¦«¢¬¦«S)Nz duplicate r%rŒ)rŒr%r&r'r(r)) rŒÚcopyr%r&r'rrr r#r(r)r<)rÕr*r’r,rBr)rdr-rŒr%r&Ú arg2scoper‹rÚvaltype_for_args rdÚsetmultizCallSpec2.setmultios6€ð”=×%Ò%Ñ'Ô'ˆØ”×!Ò!Ñ#Ô#ˆØ”,×#Ò#Ñ%Ô%ˆØ”O×(Ò(Ñ*Ô*ˆ ݘH fÑ-Ô-ð #ð #‰HˆC�Ø�fˆ}ˆ}  x  Ý Ð!5¨cÐ!5Ð!5Ñ6Ô6Ð6Ø& sœmˆOØ (Ò*Ð*Ø!��s‘ � Ø  JÒ.Ð.Ø #�˜‘ � å˜_Ñ-Ô-Ð-Ø&ˆG�C‰LØ"ˆI�c‰NˆNÝØØØØ Ø'�d”lÐ' BÐ'Ø<�D”JÐ<Õ!4°UÑ!;Ô!;Ð<ð  ñ ô ð rfrqcób— |j|S#t$r}t|¦«|‚d}~wwxYwr¬)r%ÚKeyErrorr)rÕrqrŽs rdÚgetparamzCallSpec2.getparam“sC€ð *Ø”;˜tÔ$Ð $øÝð *ð *ð *ݘTÑ"Ô"¨Ð )øøøøð *øøøs‚ � .™)©.có6—d |j¦«S)Nrþ)rôr(rOs rdrBz CallSpec2.id™s€à�xŠx˜œ Ñ%Ô%Ð%rfN)rrýrrÚ dataclassesÚfieldr=rŒr rÈrIr!r%r&rúr'rFrËr(r r)r:rr rr;r2r5rrBr‰rfrdr#r#Vsà€€€€€€ððð#4 +Ô"3ÀDÐ"IÑ"IÔ"I€Hˆd�3˜�;ÔÐIÐIÑIð!2  Ô 1À$Ð GÑ GÔ G€FˆD��f�Ô ÐGÐGÑGà/˜kÔ/ÀÐEÑEÔE€GˆT�#�s�(Œ^ÐEÐEÑEà#4 ;Ô#4ÀTÐ#JÑ#JÔ#J€J��S˜%�ZÔ ÐJÐJÑJà*˜Ô*¸4Ð@Ñ@Ô@€GˆT�#ŒYÐ@Ð@Ñ@à)˜ Ô)¸$Ð?Ñ?Ô?€Eˆ4�Œ:Ð?Ð?Ñ?ð" ð˜#Ð>Ð>Ô?ð" ð˜3”-ð " ð ˜Ô ð " ð ð " ð˜˜d MÐ1Ô2Ô3ð" ðð" ðð" ð ð" ð" ð" ð" ðH*˜Sð* Vð*ð*ð*ð*ð ð&�Cð&ð&ð&ñ„Xð&ð&ð&rfr#có¤—eZdZdZ dddœdddejded ed df d „Z ddd œd e e e e fde e e e eefde ee e fdee e eeeegeeffdddeed dfd„Zd e e dee e eeeegeeffde e de d ee f d„Zde eede e de d eeefd„Zd e e de ee e fd ee dffd„Zd e e de ee e fd dfd„ZdS)rmzóObjects passed to the :hook:`pytest_generate_tests` hook. They help to inspect a test function and to generate tests according to test configuration or values specified in the class or module where a test function is defined. NF©r7rsr;r6rgr7rMcó²—t|¦«||_||_||_|j|_|j|_||_|j |_ g|_ dSr¬) r2rsrgr¦r�rsÚ names_closureÚ fixturenamesrØÚname2fixturedefsÚ_arg2fixturedefsr>)rÕrsr6rgrØr¦r7s rdr™zMetafunc.__init__§sf€õ �yÑ!Ô!Ð!ð%ˆŒðˆŒ ðˆŒ ð#œˆŒ ð(Ô5ˆÔðˆŒà +Ô <ˆÔð(*ˆŒ ˆ ˆ rf)rrr’Ú argvaluesÚindirectròrdzOptional[_ScopeName]rrc ó8—tj|||j|j|jj¬¦«\}}~d|vrt dd¬¦«|�$tj|d|jj ›�¬¦«}nt||j |¦«}|  ||¦«|  ||¦«} |r|jr|jj} | �| }| ||||jj¬¦«}|r*|jr#| €!t" |jd |¦«g} |jpt)¦«gD]c} t+t-||¦«¦«D]C\} \}}|  | ||j||j|| ¬ ¦«}|  |¦«ŒDŒd| |_dS) a9 Add new invocations to the underlying test function using the list of argvalues for the given argnames. Parametrization is performed during the collection phase. If you need to setup expensive resources see about setting indirect to do it rather than at test setup time. Can be called multiple times, in which case each call parametrizes all previous parametrizations, e.g. :: unparametrized: t parametrize ["x", "y"]: t[x], t[y] parametrize [1, 2]: t[x-1], t[x-2], t[y-1], t[y-2] :param argnames: A comma-separated string denoting one or more argument names, or a list/tuple of argument strings. :param argvalues: The list of argvalues determines how often a test is invoked with different argument values. If only one argname was specified argvalues is a list of values. If N argnames were specified, argvalues must be a list of N-tuples, where each tuple-element specifies a value for its respective argname. :param indirect: A list of arguments' names (subset of argnames) or a boolean. If True the list contains all names from the argnames. Each argvalue corresponding to an argname in this list will be passed as request.param to its respective argname fixture function so that it can perform more expensive setups during the setup phase of a test rather than at collection time. :param ids: Sequence of (or generator for) ids for ``argvalues``, or a callable to return part of the id for each argvalue. With sequences (and generators like ``itertools.count()``) the returned ids should be of type ``string``, ``int``, ``float``, ``bool``, or ``None``. They are mapped to the corresponding index in ``argvalues``. ``None`` means to use the auto-generated id. If it is a callable it will be called for each entry in ``argvalues``, and the return value is used as part of the auto-generated id for the whole set (where parts are joined with dashes ("-")). This is useful to provide more specific ids for certain items, e.g. dates. Returning ``None`` will use an auto-generated id. If no ids are provided they will be generated automatically from the argvalues. :param scope: If specified it denotes the scope of the parameters. The scope is used for grouping tests by parameter instances. It will also override any fixture-function defined scope, allowing to set a dynamic scope using test context or configuration. )r|rhzK'request' is a reserved name and cannot be used in @pytest.mark.parametrizeFrNzparametrize() call in )ÚdescrÚ_param_ids_generated)r*r’r,rBr)rdr-)r8Ú_for_parametrizersrgrsr|r=rFÚ from_userrÚ_find_parametrized_scoper?Ú_validate_if_using_arg_namesÚ_resolve_arg_value_typesÚ_param_ids_fromrDÚ_resolve_parameter_set_idsrIÚ __setattr__r>r#r÷rr2r2r)ró)rÕr’r@rAròrdrrrðÚscope_Úarg_values_typesÚ generated_idsÚnewcallsr9r-Úparam_idÚ param_setÚ newcallspecs rdrozMetafunc.parametrizeÊs€õR#/Ô"?Ø Ø Ø ŒMØ ŒKØ”?Ô)ð # ñ# ô# ш�-ð à ˜Ð Ð Ý Ø]Øð ñ ô ð ð Ð Ý”_ØÐN°d´mÔ6LÐNÐNðñôˆFˆFõ.¨h¸Ô8MÈxÑXÔXˆFà ×)Ò)¨(°HÑ=Ô=Ð=à×8Ò8¸À8ÑLÔLÐð ð $˜;Ô6ð $Ø'Ô7ÔLˆMØÐ(Ø#�à×-Ò-Ø �c˜=°´Ô1Gð.ñ ô ˆð ð Y˜;Ô6ð Y¸=Ð;PÝ × Ò ˜{Ô:И(˜(°JñBôBˆHˆHõ˜¥(Ñ +Ô +ð Ý—}’} X¨zÑ:Ô:ˆHØð )ð )�ؘhÐ&Ð&ÝØD×KÒKØ œMÔ2°Cñôð!&ð ñôðð !)�˜‘ � ð )õ ØR×YÒYݘh™œÔ0°t´}Ô7MðZñôðð  ñ ô ð ð ˆrfc óN—tt|j¦«¦«}|jj}|D]t}||jvri||vr&t d ||¦«d¬¦«Œ5t|t¦«r ||vrdnd}n|rdnd}t d|›d|›d|›d �d¬¦«Œud S) a4Check if all argnames are being used, by default values, or directly/indirectly. :param List[str] argnames: List of argument names passed to ``parametrize()``. :param indirect: Same as the ``indirect`` parameter of ``parametrize()``. :raises ValueError: If validation fails. zCIn {}: function already takes an argument '{}' with a default valueFrrmÚargumentrz: function uses no z 'ú'N) r(r"rsrr=r=r�rÁr)rÕr’rAÚdefault_arg_namesrór‹rqs rdrHz%Metafunc._validate_if_using_arg_names¹s€õ Õ 5°d´mÑ DÔ DÑEÔEÐØ”MÔ*ˆ Øð ð ˆCؘ$Ô+Ð+Ð+ØÐ+Ð+Ð+ÝØ]×dÒdØ% sñôð!&ð ñôððõ" (­HÑ5Ô5ðEØ,/°8¨O¨O˜y˜yÀ˜˜à,4ÐD˜y˜y¸*˜ÝØJ˜iÐJÐJ¸DÐJÐJÀCÐJÐJÐJØ %ðñôðøð ð rf)NN)FNN)rrýrrrr5r.r_r™rrÈrr r8rIrrrr:ror rKrUr rIrHr‰rfrdrmrmžsÏ€€€€€ððð Øð !*ð ð!*ð!*ð!*à(ð!*ðÔ-ð!*ðð !*ðð!*ð ð!*ð!*ð!*ð!*ðN05ð Ø(,ðCð'+ðCðCðCà˜˜X cœ]Ð*Ô+ðCð˜E ,°¸Ô0@À&Ð"HÔIÔJðCð˜˜h sœmÐ+Ô,ð Cð Ø �(˜8 FÔ+Ô,¨h¸°u¸hÀvÔ>NÐ7NÔ.OÐOÔ Pô ð Cð&ðCð˜d”^ðCð ðCðCðCðCðJ*7à˜3”-ð*7ðØ �(˜8 FÔ+Ô,¨h¸°u¸hÀvÔ>NÐ7NÔ.OÐOÔ Pô ð*7ð    Ô-ð *7ðð*7ð ˆcŒð*7ð*7ð*7ð*7ðX4à �h˜vÔ&Ô 'ð4ð   Ô-ð4ðð 4ð ˆh�vÔÔ ð 4ð4ð4ð4ð,&à˜3”-ð&ð˜˜h sœmÐ+Ô,ð&ð ˆcÐ2Ð2Ô 3ð &ð&ð&ð&ðPà˜3”-ðð˜˜h sœmÐ+Ô,ðð ð ðððððrfr’Úarg2fixturedefsrAcó(‡—t|t¦«r!t|¦«t‰¦«k}nt|¦«}|r?|pi}ˆfd„| ¦«D¦«}t |t j¬¦«St jS)a}Find the most appropriate scope for a parametrized call based on its arguments. When there's at least one direct argument, always use "function" scope. When a test function is parametrized and all its arguments are indirect (e.g. fixtures), return the most narrow scope based on the fixtures used. Related to issue #1832, based on code posted by @Kingdread. có8•—g|]\}}|‰v¯ |dj‘ŒS)r)Ú_scope)rŠrqÚ fixturedefr’s €rdú z,_find_parametrized_scope..ïs9ø€ð ð ð á ��jØ�xÐÐð �qŒMÔ àÐÐrf)rT)rÁrrör_r)ÚminrFr†)r’rdrAÚall_arguments_are_fixturesÚ fixturedefsÚ used_scopess` rdrGrGÚs¢ø€õ�(�HÑ%Ô%ð4Ý%(¨¡]¤]µc¸(±m´mÒ%CÐ"Ð"å%)¨(¡^¤^Ð"à!ð8Ø%Ð+¨ˆ ð ð ð ð à$/×$5Ò$5Ñ$7Ô$7ð ñ ô ˆ õ �;­¬Ð7Ñ7Ô7Ð7å Œ>Ðrfrcó\—|€d}n| d¦«}|r|nt|¦«S)NFr^)r¢r)rrgÚ escape_options rdrrús=€Ø €~؈ ˆ àŸ š Ø Rñ ô ˆ ð  Ð 7ˆ3ˆ3¥]°3Ñ%7Ô%7Ð7rfcó2—tj¦«}tt|t|¦«¦«¦«}tdd¦«} t|| t ¦«z ¦«S#t $rt||¦«cYSwxYw)Nz...Ú_pytest)rÚcwdr%rÈÚ relative_toÚ _PYTEST_DIRrr?)rœrrÚlocrs rdÚ_pretty_fixture_pathrvsŽ€Ý Œ(‰*Œ*€CÝ �{˜4¥ S¡¤Ñ*Ô*Ñ +Ô +€CÝ �%˜Ñ #Ô #€Fð%Ý�6˜CŸOšO­KÑ8Ô8Ñ8Ñ9Ô9Ð9øÝ ð%ð%ð%ݘ3 Ñ$Ô$Ð$Ð$Ð$ð%øøøsÁ)A9Á9BÂBcó0—ddlm}||t¦«S©Nr)Ú wrap_session)Ú _pytest.mainryÚ_show_fixtures_per_test©rgrys rdrVrVs'€Ø)Ð)Ð)Ð)Ð)Ð)à ˆ<˜Õ 7Ñ 8Ô 8Ð8rfrŸcót‡‡‡‡‡ —ddl}| ¦«tj¦«Š|j |¦«Š| d¦«Šdtfˆfd„ Šdtj tddfˆˆfd„ Š dtj ddfˆˆˆ fd„ }|j D] }||¦«ŒdS) Nrr~rMcóx•—t|t‰¦«¦«}t‰t|¦«¦«Sr¬)r%rÈr?r)rœruÚcurdirs €rdÚget_best_relpathz1_show_fixtures_per_test..get_best_relpaths.ø€Ý˜$¥ F¡ ¤ Ñ,Ô,ˆÝ˜6¥4¨¡9¤9Ñ-Ô-Ð-rfÚ fixture_defcóЕ—|j}‰dkr| d¦«rdSt|j¦«}‰ |›d¬¦«‰ d|›�d¬¦«‰ d¦«t j|j¦«}|r3t‰‰dkr| d¦«dn|¦«dS‰  d d¬ ¦«dS) NrÚ_T©Úgreenú -- ©Úyellowú ú ú no docstring available©Úred) rr#rvrœÚwriterÅÚgetdocÚwrite_docstringÚsplitÚline)r�rÚ prettypathÚ fixture_docÚtwr~s €€rdÚ write_fixturez._show_fixtures_per_test..write_fixture#sûø€ØÔ%ˆØ �aŠ<ˆ<˜G×.Ò.¨sÑ3Ô3ˆ<Ø ˆFÝ)¨+Ô*:Ñ;Ô;ˆ Ø �Š�G� TˆÑ*Ô*Ð*Ø �ŠÐ$˜ Ð$Ð$¨TˆÑ2Ô2Ð2Ø �Š�‰ŒˆÝ”n [Ô%5Ñ6Ô6ˆ Ø ð <Ý Ø°G¸q²L°L�K×%Ò% fÑ-Ô-¨aÔ0Ð0Àkñ ô ð ð ð ð �GŠGÐ0°dˆGÑ ;Ô ;Ð ;Ð ;Ð ;rfÚitemcó|•—t|dd¦«}|�|jsdS‰ ¦«‰ dd|j›�¦«‰ dd‰|j¦«›d�¦«t |j ¦«¦«D]\}}|€J‚|sŒ ‰|d¦«ŒdS)Nr‘rþzfixtures used by ú(rÈrù)rÄr>r’ÚseprqrsÚsortedr))r—Úinforƒrlr€r•r–s €€€rdÚ write_itemz+_show_fixtures_per_test..write_item3sáø€å*1°$¸ÈÑ*MÔ*MˆØ ˆ<˜tÔ4ˆ<à ˆFØ �Љ Œ ˆ Ø �ŠˆsÐ3¨¬ Ð3Ð3Ñ4Ô4Ð4à �ŠˆsÐ:Ð(Ð(¨¬Ñ7Ô7Ð:Ð:Ð:Ñ;Ô;Ð;å$ TÔ%:×%@Ò%@Ñ%BÔ%BÑCÔCð +ð +‰NˆAˆ{ØÐ*Ð*Ð*Øð Øà ˆM˜+ bœ/Ñ *Ô *Ð *Ð *ð  +ð +rf)Ú_pytest.configÚperform_collectrrrrgÚcreate_terminal_writerÚgetvaluerÈrÚ FixtureDefrIrrJr)) rgrŸrqr�Ú session_itemrr€r•r~r–s @@@@@rdr{r{søøøøø€ØÐÐÐà ×ÒÑÔÐÝ ŒX‰ZŒZ€FØ Œ× .Ò .¨vÑ 6Ô 6€BØ�oŠo˜iÑ(Ô(€Gð.¥#ð.ð.ð.ð.ð.ð.ð<¥8Ô#6µvÔ#>ð<À4ð<ð<ð<ð<ð<ð<ð<ð +�œð+¨ð+ð+ð+ð+ð+ð+ð+ð+ð$ œ ð!ð!ˆ ؈ �<Ñ Ô Ð Ð ð!ð!rfcó0—ddlm}||t¦«Srx)rzryÚ_showfixtures_mainr|s rdrQrQIs'€Ø)Ð)Ð)Ð)Ð)Ð)à ˆ<˜Õ 2Ñ 3Ô 3Ð3rfc óP—ddl}| ¦«tj¦«}|j |¦«}| d¦«}|j}g}t¦«}|j   ¦«D]¨\} } | €J‚| sŒ | D]™} t| j t|¦«¦«} | j| f|vrŒ0| | j| f¦«| t#| j¦«| j jt)| j ¦«| j| f¦«ŒšŒ©| ¦«d} |D�]X\}}}} } | |krD| d¦«s/| ¦«| dd|›�¦«|} |dkr|  d¦«rŒo| | ›d¬¦«| jd kr| d | jzd¬ ¦«| d |›�d¬ ¦«| d¦«t7j| j ¦«}|r2t;||dkr| d¦«dn|¦«n| dd¬¦«| ¦«�ŒZdS)Nrr~z_pytest.rþzfixtures defined from rƒTr„rsz [%s scope])Úcyanr†r‡r‰rŠr‹rŒ)ržrŸrrrrgr r¡r?r(r?r)r%rœrÈrr+róröÚbaseidrýrvÚsortr#r’ršrŽrdrÅr�r�r‘)rgrŸrqrr•r~rGÚ availabler/rrlrhruÚ currentmoduler¨r¦r“Údocs rdr¥r¥OsÕ€ØÐÐÐà ×ÒÑÔÐÝ ŒX‰ZŒZ€FØ Œ× .Ò .¨vÑ 6Ô 6€BØ�oŠo˜iÑ(Ô(€Gà Ô €Bà€IÝ!$¡¤€Dà "Ô 3× 9Ò 9Ñ ;Ô ;ððш�ØÐ&Ð&Ð&Øð Ø Ø%ð ð ˆJݘjœo­s°6©{¬{Ñ;Ô;ˆCØÔ" CÐ(¨DÐ0Ð0ØØ �HŠH�jÔ(¨#Ð.Ñ /Ô /Ð /Ø × Ò å˜ Ô)Ñ*Ô*Ø”OÔ.Ý(¨¬Ñ9Ô9ØÔ&Øð ñ ô ð ð ð ð‡N‚NÑÔÐØ€MØ;DðñÑ7ˆ�˜  G¨ZØ ˜FÒ "Ð "Ø×$Ò$ ZÑ0Ô0ð 'Ø—’‘ ” � Ø—’�sÐ=°VÐ=Ð=Ñ>Ô>Ð>Ø &� Ø �aŠ<ˆ<˜G×.Ò.¨sÑ3Ô3ˆ<Ø Ø �Š�G� TˆÑ*Ô*Ð*Ø Ô ˜zÒ )Ð )Ø �HŠH�] ZÔ%5Ñ5¸DˆHÑ AÔ AÐ AØ �ŠÐ$˜ Ð$Ð$¨TˆÑ2Ô2Ð2Ø �Š�‰ŒˆÝŒn˜Zœ_Ñ-Ô-ˆØ ð <Ý ˜B¸À1º ¸  § ¢ ¨&Ñ 1Ô 1°!Ô 4Ð 4È#Ñ NÔ NÐ NÐ Nà �GŠGÐ0°dˆGÑ ;Ô ;Ð ;Ø �Љ Œ ˆ ‰ ð%ðrfú r•r¬Úindentcóf—| d¦«D]}| ||z¦«ŒdS)Nr‰)r‘r’)r•r¬r®r’s rdr�r�†s>€Ø— ’ ˜$‘”ððˆØ �Š�˜‘ ÑÔÐÐððrfcó\‡—eZdZdZdZddeddddfdedeedee dee ee fdee d ee d eed dfˆfd „ Zeˆfd „¦«Zdd„Zed„¦«Zd„Zed„¦«Zdd„Zdd„Zdeed efd„Zdeed eeeffd„ZˆxZS)r†a²An Item responsible for setting up and executing a Python test function. :param name: The full function name, including any decorations like those added by parametrization (``my_func[my_param]``). :param parent: The parent Node. :param config: The pytest Config object. :param callspec: If given, this is function has been parametrized and the callspec contains meta information about the parametrization. :param callobj: If given, the object which will be called when the Function is invoked, otherwise the callobj will be obtained from ``parent`` using ``originalname``. :param keywords: Keywords bound to the function object for "-k" matching. :param session: The pytest Session object. :param fixtureinfo: Fixture information already resolved at this fixture node.. :param originalname: The attribute name to use for accessing the underlying function object. Defaults to ``name``. Set this if name is different from the original name, for example when it contains decorations like those added by parametrization (``my_func[my_param]``). FNrqrgr9rårŸr6r:rMc 󪕗t¦« ||||¬¦«|tur||_| p||_|j t|j¦«¦«|r&||_|j |j ¦«|j   d„|jD¦«¦«|j   |jj ¦«|r|j   |¦«|€-|j j ||j|jd¬¦«}||_|j|_| ¦«dS)N)rgrŸc3ó(K—|] }|j|fV—ŒdSr¬rprßs rdr®z$Function.__init__..Ñs)èè€ÐLÐL°4˜dœi¨Ð.ÐLÐLÐLÐLÐLÐLrfT)rŒ)rTr™r)r�r:rãrär9r9r)rårær&rŸr?ÚgetfixtureinforØr‘r<r=Ú _initrequest) rÕrqr™rgr9r5rårŸr6r:rVs €rdr™zFunction.__init__«sVø€õ ‰Œ×Ò˜˜v¨f¸gÐÑFÔFÐFà �&РР؈DŒHð)Ð0¨DˆÔð Ô×ÒÕ 2°4´8Ñ <Ô <Ñ=Ô=Ð=Ø ð 4Ø$ˆDŒMØ Ô × #Ò # H¤NÑ 3Ô 3Ð 3ð Œ ×ÒÐLÐL¸4Ô;KÐLÑLÔLÑLÔLÐLØ Œ ×Ò˜TœXÔ.Ñ/Ô/Ð/Ø ð +Ø ŒM× Ò  Ñ *Ô *Ð *à Ð Øœ,Ô6×EÒEØ�d”h ¤°4ðFñôˆKð.9ˆÔØ'Ô5ˆÔØ ×ÒÑÔÐÐÐrfc ó:•—t¦«jdd|i|¤ŽS)rÂr™r‰rÃ)rØr™rÄrVs €rdr³zFunction.from_parentÞs'ø€ð#�u‰wŒwÔ"Ð7Ð7¨&Ð7°BÐ7Ð7Ð7rfcóJ—i|_tj|d¬¦«|_dS)NTr:)rŒrÚFixtureRequestÚ_requestrOs rdr´zFunction._initrequestãs$€Ø+-ˆŒ Ý Ô/°ÀÐEÑEÔEˆŒ ˆ ˆ rfcó*—t|j¦«S)z$Underlying python 'function' object.)r$r�rOs rdrszFunction.functionçs€õ˜œÑ"Ô"Ð"rfcó¾—|j€J‚t|jt¦«r|j ¦«}n |jj}t ||j¦«Sr¬)r™rÁr·rÆr�rÄr:)rÕÚ parent_objs rdrázFunction._getobjìsU€ØŒ{Ð&Ð&Ð&Ý �d”k¥5Ñ )Ô )ð )àœ×0Ò0Ñ2Ô2ˆJˆJàœœˆJÝ�z 4Ô#4Ñ5Ô5Ð5rfcó—|S)zA(compatonly) for code expecting pytest-2.2 style request objects.r‰rOs rdÚ _pyfuncitemzFunction._pyfuncitemõs €ðˆ rfcó<—|j |¬¦«dS)z%Execute the underlying test function.)r…N)r¥r—rOs rdÚruntestzFunction.runtestús!€à Œ ×%Ò%°Ð%Ñ6Ô6Ð6Ð6Ð6rfcó8—|j ¦«dSr¬)r¸Ú _fillfixturesrOs rdr\zFunction.setupþs€Ø Œ ×#Ò#Ñ%Ô%Ð%Ð%Ð%rfÚexcinfocó’‡—t|d¦«�r/|j dd¦«�stjj t|j¦«¦«}|j |j }}|j }|  ||¬¦«Š‰|kr:‰  |¬¦«Š‰|kr‰  t¦«Š‰s|Љ  |¦«Š|j dd¦«dkr;t‰¦«dkr(t!ˆfd „t#‰¦«D¦«¦«Š‰S|j S) NrÝÚ fulltraceF)r¨Ú firstlinenor±ÚtbstyleÚautorc3ó„•K—|]:\}}|dks|t‰¦«dz kr|n| d¦«V—Œ;dS)rrºr{N)röÚwith_repr_style)rŠÚiÚentryÚ ntracebacks €rdr®z-Function._traceback_filter..spøèè€ð+ð+ñ%˜A˜uð š6˜6 Q­#¨j©/¬/¸AÑ*=Ò%=Ð%=ð˜à"×2Ò2°7Ñ;Ô;ð+ð+ð+ð+ð+ð+rf)r“rgr�rqÚ_codeÚCodeÚ from_functionr#r�r¨rÅr€Úcutrˆrrörr÷)rÕrÂÚcoder¨rÅr€rÌs @rdÚ_traceback_filterzFunction._traceback_filtersXø€Ý �4˜Ñ Ô ñ ¨¬×)>Ò)>¸{ÈEÑ)RÔ)Rñ Ý”=Ô%×3Ò3µMÀ$Ä(Ñ4KÔ4KÑLÔLˆDØ $¤ ¨4Ô+;�+ˆDØÔ)ˆIØ"Ÿš¨D¸k˜ÑJÔJˆJؘYÒ&Ð&Ø'Ÿ^š^°˜^Ñ6Ô6� Ø Ò*Ð*Ø!+×!2Ò!2Õ3CÑ!DÔ!D�JØ%ð/Ø%.˜ Ø#×*Ò*¨7Ñ3Ô3ˆJðŒ{×$Ò$ Y°Ñ7Ô7¸6ÒAÐAÝ�z‘?”? QÒ&Ð&Ý!*ð+ð+ð+ð+õ)2°*Ñ(=Ô(=ð +ñ+ô+ñ"ô"�JðÐ ØÔ Ð rfcóv—|j dd¦«}|dkrd}| ||¬¦«S)NrÆrÇÚlongr|)rgr�Ú_repr_failure_py)rÕrÂr}s rdÚ repr_failurezFunction.repr_failuresB€ð” ×%Ò% i°Ñ8Ô8ˆØ �FŠ?ˆ?؈EØ×$Ò$ W°EÐ$Ñ:Ô:Ð:rfr’) rrýrrrâr)rÈrr.r#rrr6r5r™rr³r´rrsrár½r¿r\rÚ BaseExceptionrrÒrrrÖr“r”s@rdr†r†‹såø€€€€€ððð:€Nð $(Ø(,ØØ04Ø%)Ø15Ø&*ð1ð1àð1ð˜Ô ð 1ð ˜9Ô%ð 1ð˜7 3¨ 8Ô,Ô-ð1ð˜'Ô"ð1ð˜oÔ.ð1ð˜s”mð1ð ð1ð1ð1ð1ð1ð1ðfð8ð8ð8ð8ñ„[ð8ðFðFðFðFðð#ð#ñ„Xð#ð6ð6ð6ðððñ„Xðð7ð7ð7ð7ð&ð&ð&ð&ð!¨°}Ô)Eð!È)ð!ð!ð!ð!ð:;à˜}Ô-ð;ð ˆs�LÐ Ô !ð;ð;ð;ð;ð;ð;ð;ð;rfcó—eZdZdZdd„ZeZdS)r;z� This class is a step gap solution until we evolve to have actual function definition nodes and manage to get rid of ``metafunc``. rMNcó —td¦«‚)Nz8function definitions are not supposed to be run as tests)Ú RuntimeErrorrOs rdr¿zFunctionDefinition.runtest.s€ÝÐUÑVÔVÐVrfr’)rrýrrr¿r\r‰rfrdr;r;(s7€€€€€ððð WðWðWðWð €E€E€Erfr;)rlrmrMNr’)r­)�rr7rr$rÅr[rñrûÚtypesrÚ collectionsrrÚ functoolsrÚpathlibrÚtypingrrr r r r r rrrrrrrrrqrrÚ _pytest._coderrÚ_pytest._code.coderrrÚ _pytest._iorÚ_pytest._io.safereprrÚ_pytest.compatrr r!r"r#r$r%r&r'r(r)r+r,r-ržr.r/r0Ú_pytest.config.argparsingr1Ú_pytest.deprecatedr2r3r4Ú_pytest.fixturesr5rzr6Ú _pytest.markr7r8Ú_pytest.mark.structuresr9r:r;r<Ú_pytest.outcomesr=r>Ú_pytest.pathlibr?rArBrCrDrEÚ _pytest.scoperFÚ_pytest.warning_typesrGrHrIÚtyping_extensionsrJrKrþr™rtrerúrkrwr{rÈrƒrIr—rKr§r_r¡r¤rJrÏÚNoderÑrÚ frozensetÚunionÚdirÚ ModuleTyper*r ÚFileršr²rgrlr·rãrçrÉrÊÚ dataclassrïr#rmr¢rGÚbytesrrvrVr{rQr¥r�r†r;r‰rfrdúr÷s¹ ðØ=Ð=ØÐÐÐØ € € € Ø€€€Ø€€€ØÐÐÐØ € € € Ø € € € Ø € € € Ø€€€ØÐÐÐÐÐØ#Ð#Ð#Ð#Ð#Ð#ØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØ Ð Ð Ð Ð Ð ØÐÐÐÐÐà€€€ØÐÐÐÐÐØÐÐÐÐÐØ*Ð*Ð*Ð*Ð*Ð*Ø%Ð%Ð%Ð%Ð%Ð%Ø,Ð,Ð,Ð,Ð,Ð,Ø+Ð+Ð+Ð+Ð+Ð+Ø(Ð(Ð(Ð(Ð(Ð(Ø&Ð&Ð&Ð&Ð&Ð&Ø)Ð)Ð)Ð)Ð)Ð)Ø(Ð(Ð(Ð(Ð(Ð(Ø'Ð'Ð'Ð'Ð'Ð'Ø Ð Ð Ð Ð Ð Ø0Ð0Ð0Ð0Ð0Ð0Ø(Ð(Ð(Ð(Ð(Ð(Ø$Ð$Ð$Ð$Ð$Ð$Ø&Ð&Ð&Ð&Ð&Ð&Ø,Ð,Ð,Ð,Ð,Ð,Ø'Ð'Ð'Ð'Ð'Ð'Ø&Ð&Ð&Ð&Ð&Ð&Ø!Ð!Ð!Ð!Ð!Ð!Ø'Ð'Ð'Ð'Ð'Ð'Ø'Ð'Ð'Ð'Ð'Ð'Ø'Ð'Ð'Ð'Ð'Ð'Ø!Ð!Ð!Ð!Ð!Ð!Ø#Ð#Ð#Ð#Ð#Ð#Ø#Ð#Ð#Ð#Ð#Ð#Ø,Ð,Ð,Ð,Ð,Ð,Ø-Ð-Ð-Ð-Ð-Ð-Ø1Ð1Ð1Ð1Ð1Ð1Ø2Ð2Ð2Ð2Ð2Ð2Ø,Ð,Ð,Ð,Ð,Ð,Ø Ð Ð Ð Ð Ð Ø!Ð!Ð!Ð!Ð!Ð!Ø%Ð%Ð%Ð%Ð%Ð%Ø6Ð6Ð6Ð6Ð6Ð6Ø(Ð(Ð(Ð(Ð(Ð(Ø1Ð1Ð1Ð1Ð1Ð1Ø7Ð7Ð7Ð7Ð7Ð7Ø!Ð!Ð!Ð!Ð!Ð!Ø!Ð!Ð!Ð!Ð!Ð!Ø'Ð'Ð'Ð'Ð'Ð'Ø&Ð&Ð&Ð&Ð&Ð&Ø'Ð'Ð'Ð'Ð'Ð'Ø3Ð3Ð3Ð3Ð3Ð3Ø!Ð!Ð!Ð!Ð!Ð!Ø!Ð!Ð!Ð!Ð!Ð!ØÐÐÐÐÐØ9Ð9Ð9Ð9Ð9Ð9Ø<Ð<Ð<Ð<Ð<Ð<ØAÐAÐAÐAÐAÐAàð)Ø)Ð)Ð)Ð)Ð)Ð)à(Ð(Ð(Ð(Ð(Ð(ðˆd�7Ô#Ñ$Ô$Ô+€ ð+˜Vð+¨ð+ð+ð+ð+ð\ ð¨8°E¸#¸x¸-Ô4HÔ+IðððððPðPðPðPð ˜Vð¨ððððð( S ð S¨ð Sð Sð Sð Sð €�$ÐÑÔð :ð°(¸6Ô2BðððñÔðð&  4ð °´ð ÀXÈhÔEWð ð ð ð ðB ðB°¸´ ðBÀ$ðBðBðBðBð ¨Tð¸hððððð €�$ÐÑÔð$ØÐ&Ô'ð$Ø/2ð$Ø9?ð$à ˆ4�”˜Uœ_¨d°5¸¼ÀUÄ_Ð9TÔ3UÔ.VÐ VÔWð$ð$ð$ñÔð$ðNY%ðY%ðY%ðY%ðY%�”ñY%ôY%ðY%ð@ÐÐÐÐÑÔÐØ—_’_Ø €I�K„Kà€CЈԘÑ(Ô(Ñ)Ô)à.Ð.Ð.à€Cˆ ÑÔà€Cˆ ˆ ‰ Œ ÑÔñ ô ÐððFðFðFðFðF�*˜eœoñFôFðFðRFðFðFðFðFˆUŒZ˜ñFôFðFðRg'ðg'ðg'ðg'ðg'ˆfñg'ôg'ðg'ðT ð ð ð ð Vð°H¸S´MðÀhÈvÔFVððððð~Dð~Dð~Dð~Dð~DˆKñ~Dô~Dð~DðBððððñôððG�cðG˜fðGðGðGðGð�ð˜Dððððð�ð˜4ðððððØ€Ô˜dÐ#Ñ#Ô#ð^'ð^'ð^'ð^'ð^'ñ^'ô^'ñ$Ô#ñ„ð^'ðBØ€Ô˜dÐ#Ñ#Ô#ðC&ðC&ðC&ðC&ðC&ñC&ôC&ñ$Ô#ñ„ðC&ðLðxðxðxðxðxñxôxñ„ðxðv Ø�sŒmðà˜S (¨8Ô+>¸vÔ+FÔ"GÐGÔHðð�D˜( 3œ-Ð'Ô(ðð ð ðððð@ 8 %¨¨U¨ Ô"3ð 8¸XÀfÔ=Mð 8ÐRUð 8ð 8ð 8ð 8ð% #ð%ð%ð%ð%ð9ð9ð9ð /! Fð/!°Wð/!Àð/!ð/!ð/!ð/!ðd4˜ð4 E¨#¨x¨-Ô$8ð4ð4ð4ð4ð 4˜vð4°ð4¸Dð4ð4ð4ð4ðnð˜ð¨Sð¸#ðÈ4ððððð Z;ðZ;ðZ;ðZ;ðZ;ˆz˜5œ:ñZ;ôZ;ðZ;ðz ð ð ð ð ˜ñ ô ð ð ð rf