§ |<ˆjë~ã ó4—dZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddlZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+ddl*m,Z,ddl*m-Z-ddl*m.Z.dd l/m0Z0dd!l/m1Z1dd"l2m3Z3dd#l2m4Z4erdd$l5m6Z6d%e%d&dfd'„Z7d(e8d&e8fd)„Z9d*ed+e ed,geee:e ffd&ee:e ffd-„Z;d*ed&ee:e ffd.„Zd/d,d&e?fd2„Z@d(e d&e?fd3„ZAd4e d*ed&ee?fd5„ZBd6eejCd*ed&dfd7„ZDGd8„d9¦«ZEGd:„d;eF¦«ZGGd<„d=eH¦«ZIejJGd>„d?e e e8f¦«¦«ZKeGd@„d,ejL¦«¦«ZMdAe8d&e8fdB„ZNdCdDœdEe dFe8dGe?d&ee ee8ffdH„ZOdS)JzHCore implementation of the testing process: init, session, runtest loop.éN)ÚPath)ÚCallable)ÚDict)Ú FrozenSet)ÚIterator)ÚList)ÚOptional)ÚSequence)ÚSet)ÚTuple)ÚType)Ú TYPE_CHECKING)ÚUnion)Únodes)Úfinal)Úoverload)ÚConfig)Ú directory_arg)ÚExitCode)Úhookimpl)ÚPytestPluginManager)Ú UsageError)ÚParser)ÚFixtureManager)Úexit©Ú absolutepath)Ú bestrelpath©Ú fnmatch_ex)Úvisit)Ú CollectReport)Ú TestReport)Úcollect_one_node)Ú SetupState)ÚLiteralÚparserÚreturnc ó¤—| dddgd¢¬¦«| dddg¬¦«| dd ¦«}| d d d d dd¬¦«| d¦«}| dddd¬¦«| ddd¬¦«| dddtd dd¬ ¦«| d!d"d#¬¦«| d$d"d%¬¦«| d&d"d'¬¦«| d(d)d*t d+d,¬-¦«| d.d"d/d0d1¬2¦«| d3dd4d5¬6¦«| d7d8¦«}| d9d:d;d"d<¬¦«| d=d"d>¬¦«| d?dd@dA¬B¦«| dCdd@dD¬B¦«| dEddFdG¬B¦«| dHdIddJt jtdH¬K¦«dL¬M¦«| dNd"dOd/dP¬Q¦«| dRdSd"dTd/dU¬Q¦«| dVd"dWd/dX¬Q¦«| dYdZgd[¢d\d]¬^¦«| d_d`¦«}| dadbdtdJdc¬d¦«dS)eNÚ norecursedirsz)Directory patterns to avoid for recursionÚargs) z*.eggz.*Ú_darcsÚbuildÚCVSÚdistÚ node_modulesÚvenvz{arch})ÚtypeÚdefaultÚ testpathszZDirectories to search for tests when no files or directories are given on the command lineÚgeneralzRunning and selection optionsz-xz --exitfirstÚ store_constÚmaxfailéz,Exit instantly on first error or failed test)ÚactionÚdestÚconstÚhelpzpytest-warningsz-Wz--pythonwarningsÚappendz.is_ancestorðs€à �5Š=ˆ=Ø�4ؘœ Ð$Ð$rd)ÚargparseÚArgumentTypeErrorrÚboolÚcwdÚabsoluteÚresolve)rJÚmsgrjs rbr`r`èsÚ€à c€Cð ð.ÝÔ(¨Ñ-Ô-Ð-ð%�$ð%¥tð%µð%ð%ð%ð%ð€{•4”8‘:”:�t D™zœz×2Ò2Ñ4Ô4Ñ5Ô5ð.ÝÔ(¨Ñ-Ô-Ð-ð€{•4”8‘:”:×%Ò%Ñ'Ô'­¨d©¬×);Ò);Ñ)=Ô)=Ñ>Ô>ð.ÝÔ(¨Ñ-Ô-Ð-à €KrdÚconfigÚdoitÚSessionc ó$—t |¦«}tj|_d} | ¦«d}|j |¬¦«d}|||¦«pd|_�n#t$rtj |_‚t$rtj |_Y�nØttjf$rÅtjj ¦«}tj}t)|jtj¦«rR|jj� |jj}|dkr4t.j |j›d|jj›d�¦«|j |¬¦«||_Ynÿt:$rótj|_tjj ¦«} | ||j ¦«t)|jtB¦«rt.j d ¦«nf#tj$rT}|j� |j|_t.j tE|¦«j#›d|›d�¦«Yd}~nd}~wwxYwYnwxYwd}tIj%|j&¦«|dkr‰ |j '||j¬ ¦«nf#tj$rT}|j� |j|_t.j tE|¦«j#›d|›d�¦«Yd}~nd}~wwxYw| (¦«nÃ#d}tIj%|j&¦«|dkr‰ |j '||j¬ ¦«nf#tj$rT}|j� |j|_t.j tE|¦«j#›d|›d�¦«Yd}~nd}~wwxYw| (¦«wxYw|jS) zSkeleton command line program.rr8©ÚsessionéNz: ú )Úexcinfoz(mainloop: caught unexpected SystemExit! )rwÚ exitstatus))rtÚ from_configrÚOKr{Ú _do_configureÚhookÚpytest_sessionstartrÚ USAGE_ERRORÚFailedÚ TESTS_FAILEDÚKeyboardInterruptrÚ ExceptionÚ_pytestÚ_codeÚ ExceptionInfoÚ from_currentÚ INTERRUPTEDÚ isinstanceÚvalueÚ returncodeÚsysÚstderrÚwriteÚtypenamerqÚpytest_keyboard_interruptÚ BaseExceptionÚINTERNAL_ERRORÚnotify_exceptionÚoptionÚ SystemExitr2Ú__name__ÚosÚchdirÚ startpathÚpytest_sessionfinishÚ_ensure_unconfigure)rrrsrwÚ initstaterzr{Úexcs rbÚ wrap_sessionr sc€õ×!Ò! &Ñ)Ô)€GÝ!œ€GÔØ€Ið0%ð RØ × Ò Ñ "Ô "Ð "؈IØ ŒK× +Ò +°GÐ +Ñ <Ô <Ð <؈IØ!%  f¨gÑ!6Ô!6Ð!;¸!ˆGÔ Ñ øÝð ð ð Ý!)Ô!5ˆGÔ Ø Ýð 7ð 7ð 7Ý!)Ô!6ˆGÔ Ð Ñ Ý!¥4¤>Ð2ð ,ð ,ð ,Ý”mÔ1×>Ò>Ñ@Ô@ˆGÝ/7Ô/CˆJݘ'œ-­¬Ñ8Ô8ð SØ”=Ô+Ð7Ø!(¤Ô!9�Jؘq’=�=Ý”J×$Ò$¨Ô(8Ð%QÐ%Q¸G¼MÔÒ>Ñ@Ô@ˆGð RØ×'Ò'¨°´Ñ?Ô?Ð?õ ˜gœm­ZÑ8Ô8ðRÝ”J×$Ò$Ð%PÑQÔQÐQøøõ ”>ð Cð Cð CØ”>Ð-Ø),¬�GÔ&Ý” × Ò ¥D¨¡I¤IÔ$6Ð!AÐ!A¸#Ð!AÐ!AÐ!AÑBÔBÐBÐBÐBÐBÐBÐBøøøøð Cøøøøøð RøøøðˆÝ Œ�Ô"Ñ#Ô#Ð#Ø ˜Š>ˆ>ð CØ” ×0Ò0Ø#°Ô0Bð1ñôððøõ”>ð Cð Cð CØ”>Ð-Ø),¬�GÔ&Ý” × Ò ¥D¨¡I¤IÔ$6Ð!AÐ!A¸#Ð!AÐ!AÐ!AÑBÔBÐBÐBÐBÐBÐBÐBøøøøð Cøøøð ×"Ò"Ñ$Ô$Ð$Ð$øðˆÝ Œ�Ô"Ñ#Ô#Ð#Ø ˜Š>ˆ>ð CØ” ×0Ò0Ø#°Ô0Bð1ñôððøõ”>ð Cð Cð CØ”>Ð-Ø),¬�GÔ&Ý” × Ò ¥D¨¡I¤IÔ$6Ð!AÐ!A¸#Ð!AÐ!AÐ!AÑBÔBÐBÐBÐBÐBÐBÐBøøøøð Cøøøð ×"Ò"Ñ$Ô$Ð$Ð$øøøØ Ô Ðs²°AA8Á6MÁ86JÂ.MÂ1CJÆMÆ =JÇHÇ#:JÈJÈ,A I;É6JÉ;JÊJÊMÊJÊMÊ+!K Ë L0ËA L+Ì+L0Í"PÍ+!N Î PÎ O0ÎA O+Ï&PÏ+O0Ï0Pcó,—t|t¦«S©N)r Ú_main©rrs rbÚpytest_cmdline_mainr¥<s€Ý ˜¥Ñ &Ô &Ð&rdrwcóÆ—|j |¬¦«|j |¬¦«|jr tjS|jdkr tjSdS)z[Default command line protocol for initialization, session, running tests and reporting.rvrN)rÚpytest_collectionÚpytest_runtestloopÚ testsfailedrrƒÚtestscollectedÚNO_TESTS_COLLECTED)rrrws rbr£r£@sf€ð „K×!Ò!¨'Ð!Ñ2Ô2Ð2Ø „K×"Ò"¨7Ð"Ñ3Ô3Ð3àÔð+ÝÔ$Ð$Ø Ô  1Ò $Ð $ÝÔ*Ð*Ø ˆ4rdcó.—| ¦«dSr¢)Úperform_collectrvs rbr§r§Ms€Ø ×ÒÑÔÐÐÐrdcó—|jr=|jjjs,| d|j|jdkrdndfz¦«‚|jjjrdSt |j¦«D]•\}}|dzt|j¦«kr|j|dznd}|jj   ||¬¦«|j r|  |j ¦«‚|j r| |j ¦«‚Œ–dS)Nz%d error%s during collectionr8ÚsÚT)ÚitemÚnextitem)r©rrr–rFÚ InterruptedÚ collectonlyÚ enumerateÚitemsÚlenrÚpytest_runtest_protocolÚ shouldfailr‚Ú shouldstop)rwÚir±r²s rbr¨r¨Qs$€ØÔð  7¤>Ô#8Ô#Vð Ø×!Ò!Ø *ØÔ"¨7Ô+>À!Ò+CÐ+C C CÈÐLñ Mñ ô ð ð „~ÔÔ(ð؈tå˜Wœ]Ñ+Ô+ð:ð:‰ˆˆ4Ø+,¨q©5µ3°w´}Ñ3EÔ3EÒ+EÐ+E�7”=  Q¡Ô'Ð'È4ˆØ Œ Ô×0Ò0°dÀXÐ0ÑNÔNÐNØ Ô ð 5Ø—.’. Ô!3Ñ4Ô4Ð 4Ø Ô ð :Ø×%Ò% gÔ&8Ñ9Ô9Ð 9ð :à ˆ4rdcó ‡—| tj d¦«rdnd¦«} | ¦«sdSn#t $rYdSwxYwdŠt ˆfd„| ¦«D¦«¦«S)zˆAttempt to detect if ``path`` is the root of a Virtual Environment by checking for the existence of the appropriate activate script.ÚwinÚScriptsÚbinF)Úactivatez activate.cshz activate.fishÚActivatez Activate.batz Activate.ps1c3ó*•K—|] }|j‰vV—ŒdSr¢©Úname)Ú.0ÚfnameÚ activatess €rbú z_in_venv..vs*øèè€ÐEÐE¨5ˆuŒz˜YÐ&ÐEÐEÐEÐEÐEÐErd)ÚjoinpathrŽÚplatformÚ startswithÚis_dirÚOSErrorÚanyÚiterdir)rJÚbindirrÇs @rbÚ_in_venvrÑes¦ø€ð�]Š]­¬ ×(?Ò(?ÀÑ(FÔ(FÐQ˜9˜9ÈEÑ RÔ R€FðØ�}Š}‰Œð Ø�5ð øå ððð؈uˆuðøøøð€Iõ ÐEÐEÐEÐE°F·N²NÑ4DÔ4DÐEÑEÔEÑ EÔ EÐEs¹AÁ AÁAÚcollection_pathc󚇗| d‰j|j¬¦«}|pg}| d¦«}|r| d„|D¦«¦«‰|vrdS| d‰j|j¬¦«}|pg}| d¦«}|r| d„|D¦«¦«t ˆfd „|D¦«¦«rdS| d ¦«}|st ‰¦«rdS‰ ¦«r2| d ¦«}t ˆfd „|D¦«¦«rdSdS) NÚcollect_ignore)rJÚrootpathÚignorec3ó4K—|]}t|¦«V—ŒdSr¢r©rÅÚxs rbrÈz(pytest_ignore_collect..€s(èè€Ð@Ð@°�L¨™OœOÐ@Ð@Ð@Ð@Ð@Ð@rdTÚcollect_ignore_globÚ ignore_globc3ó4K—|]}t|¦«V—ŒdSr¢rrØs rbrÈz(pytest_ignore_collect..‹s(èè€ÐDÐD°�L¨™OœOÐDÐDÐDÐDÐDÐDrdc3óv•K—|]3}tjt‰¦«t|¦«¦«V—Œ4dSr¢)Úfnmatchr])rÅÚglobrÒs €rbrÈz(pytest_ignore_collect..�s=øèè€Ð UÐ UÀ�7Œ?�3˜Ñ/Ô/µ°T±´Ñ ;Ô ;Ð UÐ UÐ UÐ UÐ UÐ UrdrQr*c3ó8•K—|]}t|‰¦«V—ŒdSr¢r)rÅÚpatrÒs €rbrÈz(pytest_ignore_collect..–s-øèè€ÐMÐM°C�z˜#˜Ñ/Ô/ÐMÐMÐMÐMÐMÐMrd) Ú_getconftest_pathlistÚparentrÕÚ getoptionÚextendrÎrÑrÌÚgetini)rÒrrÚ ignore_pathsÚ excludeoptÚ ignore_globsÚexcludegloboptÚ allow_in_venvÚnorecursepatternss` rbÚpytest_ignore_collectríys¥ø€Ø×/Ò/ؘÔ5ÀÄð0ñô€Lð Ð% 2€LØ×!Ò! (Ñ+Ô+€JØðAØ×ÒÐ@Ð@°ZÐ@Ñ@Ô@Ñ@Ô@Ð@à˜,Ð&Ð&؈tà×/Ò/Ø OÔ$:ÀVÄ_ð0ñô€Lð Ð% 2€LØ×%Ò% mÑ4Ô4€NØðEØ×ÒÐDÐD°^ÐDÑDÔDÑDÔDÐDå Ð UÐ UÐ UÐ UÈ Ð UÑ UÔ UÑUÔUð؈tà×$Ò$Ð%<Ñ=Ô=€MØ ð�X oÑ6Ô6ð؈tà×ÒÑÔðØ"ŸMšM¨/Ñ:Ô:ÐÝ ÐMÐMÐMÐMÐ;LÐMÑMÔMÑ MÔ Mð Ø�4à ˆ4rdr¶có>—t| d¦«pg¦«}|sdSg}g}|D]G}|j |¦«r| |¦«Œ2| |¦«ŒH|r$|j |¬¦«||dd…<dSdS)NÚdeselect)r¶)ÚtupleräÚnodeidrËr=rÚpytest_deselected)r¶rrÚdeselect_prefixesÚ remainingÚ deselectedÚcolitems rbÚpytest_collection_modifyitemsr÷œs̀ݘf×.Ò.¨zÑ:Ô:Ð@¸bÑAÔAÐØ ð؈à€IØ€JØð&ð&ˆØ Œ>× $Ò $Ð%6Ñ 7Ô 7ð &Ø × Ò ˜gÑ &Ô &Ð &Ð &à × Ò ˜WÑ %Ô %Ð %Ð %àðØŒ ×%Ò%¨JÐ%Ñ7Ô7Ð7؈ˆaˆaˆa‰ˆˆððrdcó*—eZdZdeddfd„Zdefd„ZdS)Ú FSHookProxyÚpmr(Ncó"—||_||_dSr¢)rúÚ remove_mods)Úselfrúrüs rbÚ__init__zFSHookProxy.__init__¯s€ØˆŒØ&ˆÔÐÐrdrÄcó\—|j ||j¬¦«}||j|<|S)N)Úremove_plugins)rúÚsubset_hook_callerrüÚ__dict__)rýrÄrÙs rbÚ __getattr__zFSHookProxy.__getattr__³s0€Ø ŒG× &Ò & t¸DÔ‡—eZdZUeZeZeed<eed<ee e fed<de ddfˆfd„ Z e de ddfd„¦«Zdefd „Zedefd „¦«Zd edefd „Zed ¬¦«d&d„¦«Zed ¬¦«deeefddfd„¦«ZeZdeedfdefd„Zd'd„Zdddefd„Z d(dededee j!fd„Z"e# d)de$eedddee j%fd „¦«Z&e# d)de$eededeee j%e j!ffd!„¦«Z& d*de$eededeee j%e j!ffd"„Z&de'ee j%e j!ffd#„Z(d$ee j%e j!fde'e j%fd%„Z)ˆxZ*S)+rtÚ _setupstateÚ_fixturemanagerr{rrr(Ncóz•—t¦« |jdd||d¬¦«d|_d|_d|_d|_|jj  d¦«|_t¦«|_ t|j¦«|_ |jj |d¬¦«dS)Nr°)rJÚfspathrãrrrwrñrFrIrwrÃ)ÚsuperrþrÕr©rªrºr¹ÚtraceÚrootÚgetÚ frozensetÚ _initialpathsr Ú_bestrelpathcacherrÚ pluginmanagerÚregister)rýrrÚ __class__s €rbrþzSession.__init__Ùs´ø€Ý ‰Œ×ÒØ”ØØØØØð ñ ô ð ðˆÔØˆÔØ,1ˆŒØ,1ˆŒØ”\Ô&×*Ò*¨<Ñ8Ô8ˆŒ Ý.7©k¬kˆÔå2DÀVÄ_Ñ2UÔ2UˆÔà Œ Ô!×*Ò*¨4°iÐ*Ñ@Ô@Ð@Ð@Ð@rdcó2—| |¬¦«}|S)Nr¤)Ú_create)Úclsrrrws rbr|zSession.from_configís€àŸ;š;¨f˜;Ñ5Ô5ˆØˆrdcóf—d|jj|jt|dd¦«|j|jfzS)Nz6<%s %s exitstatus=%r testsfailed=%d testscollected=%d>r{z)r!r˜rÄÚgetattrr©rª©rýs rbÚ__repr__zSession.__repr__òs=€ØGØ ŒNÔ #Ø ŒIÝ �D˜,¨ Ñ 2Ô 2Ø Ô Ø Ô ð K ñ ð rdcó$—|jjjS)zQThe path from which pytest was invoked. .. versionadded:: 7.0.0 )rrÚinvocation_paramsrMr's rbr›zSession.startpathûs€ð Œ{Ô,Ô0Ð0rdÚ node_pathcó—|j|Sr¢)r)rýr+s rbÚ_node_location_to_relpathz!Session._node_location_to_relpaths€àÔ% iÔ0Ð0rdT)ÚtryfirstcóŠ—|jr| |j¦«‚|jr| |j¦«‚dSr¢)r¹r‚rºr³r's rbÚpytest_collectstartzSession.pytest_collectstartsJ€à Œ?ð /Ø—+’+˜dœoÑ.Ô.Ð .Ø Œ?ð 4Ø×"Ò" 4¤?Ñ3Ô3Ð 3ð 4ð 4rdÚreportcóЗ|jrXt|d¦«sJ|xjdz c_|j d¦«}|r |j|krd|jz|_dSdSdSdSdS)NÚwasxfailr8r7zstopping after %d failures)ÚfailedÚhasattrr©rrÚgetvaluer¹)rýr1r7s rbÚpytest_runtest_logreportz Session.pytest_runtest_logreports�€ð Œ=ð T¥¨°Ñ!<Ô!<ð TØ Ð Ô  Ñ !Ð Ô Ø”k×*Ò*¨9Ñ5Ô5ˆGØð T˜4Ô+¨wÒ6Ð6Ø">À$ÔBRÑ"S�”��ð  Tð Tð Tð Tð Tð TÐ6Ð6rdrJúos.PathLike[str]có`—t|t¦«r|nt|¦«}||jvSr¢)r‹rr)rýrJÚpath_s rbÚ isinitpathzSession.isinitpaths.€å" 4­Ñ.Ô.Ð>��µD¸±J´JˆØ˜Ô*Ð*Ð*rdrcón—t|t¦«r|nt|¦«}|jj}| ||j d¦«|jj¬¦«}|j |¦«}|r ddl m }|t||¦«¦«}n |jj }|S)NrT)rÕr8)ÚPathAwareHookProxy) r‹rrrrÚ_getconftestmodulesrärÕÚ_conftest_pluginsÚ differenceÚ config.compatr=rùr)rýrrJrúÚmy_conftestmodulesrür=Úproxys rbÚ gethookproxyzSession.gethookproxysÅ€å# F­DÑ1Ô1ÐCˆvˆvµt¸F±|´|ˆØ Œ[Ô &ˆð ×3Ò3Ø Ø ŒK× !Ò ! ,Ñ /Ô /Ø”[Ô)ð4ñ ô Ðð Ô*×5Ò5Ð6HÑIÔIˆ Ø ð %à 9Ð 9Ð 9Ð 9Ð 9Ð 9à&Ð&¥{°2°{Ñ'CÔ'CÑDÔDˆEˆEð”KÔ$ˆE؈ rdÚdirentryzos.DirEntry[str]có¸—|jdkrdSt|j¦«}| |j¦«}| ||j¬¦«rdSdS)NÚ __pycache__F©rÒrrT)rÄrrJrDrãrírr)rýrErÚihooks rbÚ_recursezSession._recurse5s_€Ø Œ=˜MÒ )Ð )Ø�5Ý�h”mÑ$Ô$ˆØ×!Ò! &¤-Ñ0Ô0ˆØ × &Ò &°vÀdÄkÐ &Ñ RÔ Rð Ø�5؈trdÚ handle_dupescó(—| ¦«sVJd || ¦«| ¦«| ¦«¦«¦«‚| |¦«}| |¦«s| ||j¬¦«rdS|rH|j  d¦«}|s,|jj j }||vrdS|  |¦«|  ||¬¦«S)Nz9{!r} is not a file (isdir={!r}, exists={!r}, islink={!r})rHrrP)Ú file_pathrã)Úis_fileÚformatrÌÚexistsÚ is_symlinkrDr;rírrrärÚ_duplicatepathsÚaddÚpytest_collect_file)rýrrKrIrPÚduplicate_pathss rbÚ _collectfilezSession._collectfile>s€ð �NŠNÑ Ô ð ð à F× MÒ MØ �F—M’M‘O”O V§]¢]¡_¤_°f×6GÒ6GÑ6IÔ6Iñ ô ñ ô Ø ð×!Ò! &Ñ)Ô)ˆØ�Š˜vÑ&Ô&ð Ø×*Ò*¸6È$Ì+Ð*ÑVÔVð Ø�rà ð 0Ø!œ[×2Ò2Ð3CÑDÔDˆNØ!ð 0Ø"&¤+Ô";Ô"K�ؘ_Ð,Ð,ؘ2à#×'Ò'¨Ñ/Ô/Ð/à×(Ò(°6À$Ð(ÑGÔGÐGrd.r+Úgenitemsz Literal[True]có—dSr¢r©rýr+rWs rbr­zSession.perform_collectVó €ð ˆrdcó—dSr¢rrYs rbr­zSession.perform_collect\rZrdc ó —|€ |jj}| d||¦«|jjxjdz c_g|_g|_g|_|jj}|j} g}|D]f}t|jj j ||jj j ¬¦«\}}|j ||f¦«| |¦«Œgt|¦«|_t#|¦«} |j | ¬¦«|jjxjdzc_|jrRg} |jD]?\}} | r |  d|›d|›d| ›d �¦«Œ'|  d |›�¦«Œ@t)| Ž‚|s| j}n>| jr7| jD]/} |j | | ¦«¦«Œ0|jj ¦«| ||j|¬ ¦«| |¬ ¦«n#| |¬ ¦«wxYwt;|¦«|_|S) aƒPerform the collection phase for this session. This is called by the default :hook:`pytest_collection` hook implementation; see the documentation of this hook for more details. For testing purposes, it may also be called directly on a fresh ``Session``. This function normally recursively expands any collectors collected from the session to their items, and only items are returned. For testing purposes, this may be suppressed by passing ``genitems=False``, in which case the return value contains these collectors unexpanded, and ``session.items`` is empty. Nr­r8©Ú as_pypath©r1z not found: z (no name z in any of ú)zfound no collectors for )rwrrr¶rv)rrr+rrÚindentÚ _notfoundÚ_initial_partsr¶rÚresolve_collection_argumentr*rMr–Úpyargsr=rrr$rIÚpytest_collectreportrÚresultÚpassedrårWrÚ check_pendingr÷Úpytest_collection_finishr·rª) rýr+rWrr¶Ú initialpathsÚargrÚpartsÚrepÚerrorsÚ collectorsÚnodes rbr­zSession.perform_collectbs¢€ð ˆ<Ø”;Ô#ˆDà � Š Ð$ d¨DÑ1Ô1Ð1Ø Œ ŒÐÔ !Ñ#ÐÔàFHˆŒØ<>ˆÔØ')ˆŒ àŒ{Ôˆà>B¼jˆð% 8Ø')ˆLØð ,ð ,�Ý ;Ø”KÔ1Ô5ØØ"œkÔ0Ô7ð!ñ!ô!‘ �˜ð Ô#×*Ò*¨F°E¨?Ñ;Ô;Ð;Ø×#Ò# FÑ+Ô+Ð+Ð+Ý!*¨<Ñ!8Ô!8ˆDÔ Ý" 4Ñ(Ô(ˆCØ ŒJ× +Ò +°3Ð +Ñ 7Ô 7Ð 7Ø ŒJŒOÐ "Ô " aÑ 'Ð "Ô "ØŒ~ð *Ø�Ø'+¤~ðHðH‘O�C˜Ø!ðHØŸ š Ø[¨#Ð[Ð[¸#Ð[Ð[ÈJÐ[Ð[Ð[ñôðð🠚 Ð&FÀÐ&FÐ&FÑGÔGÐGÐGå  &Ð)Ð)Øð ?Øœ ��à”:ð?Ø #¤ ð?ð?˜Øœ ×)Ò)¨$¯-ª-¸Ñ*=Ô*=Ñ>Ô>Ð>Ð>à ŒKÔ %× 3Ò 3Ñ 5Ô 5Ð 5Ø × .Ò .Ø T¤[¸ð /ñ ô ð ð × )Ò )°$Ð )Ñ 7Ô 7Ð 7Ð 7øˆD× )Ò )°$Ð )Ñ 7Ô 7Ð 7Ð 7øøøå! %™jœjˆÔ؈ s Á)FHÈH7c#óB K—ddlm}i}i}i}i}|jD�]\}}| d||f¦«|jjxjdz c_|j dd¦«s³|jj}|g|j ¢RD]›} |  |¦«snƒ|   ¦«rn| dz } |   ¦«rU| |vrQ|  | d¬¦«} | r8t| d|¦«r | d|| <| dg|| dj<Œœ|  ¦«�r|rJd ||f›�¦«‚t!¦«} t#||j¦«D]à} |   ¦«sŒt'| j¦«}|j}|| vr_|  |¦«|dz } |  ¦«r1|  | ¦«D]}|V—t||¦«r|||<Œ||vrŒš|  |¦«D]0}t/|¦«|jf}||vr ||V—Œ'|||<|V—Œ1Œá�n¹|  ¦«sJ‚||vr ||} n9| |j|¦«}|  |d¬¦«} | r| ||<g}| |fg}|�rš| d | |¦«|jjxjdz c_| ¦«\}}|D�] }|s| |¦«Œt|t6j¦«sŒ6t/|¦«|jf}||vr ||}nt=|¦«}|||<|jr~g}|j D]R}|j!|dks*|j! "d ¦«d|dkr| |¦«ŒS|r| ||dd…f¦«Œò|j# $|¬ ¦«�Œ| d tK|¦«d¦«|jjxjdzc_|�°š|sDd &tO|¦«g|¢R¦«}|j( || f¦«�Œx|j!dkr`t|d|¦«rJ tStU|d +¦«¦«¦«V—n#tX$rYnwxYw�Œã|Ed{V—†|jjxjdzc_�ŒdS)Nr)ÚPackagezprocessing argumentr8ÚdoctestmodulesFz __init__.py)rKz invalid arg Ú matchnodesú[r_zmatchnodes finished -> rú::)-Ú_pytest.pythonrsrcrrrarrrärriÚ_is_in_confcutdirrÌrNrVr‹rJÚsetr!rJrrãrSrPr2rÚpopr=rÚ Collectorrñr$rhrgrÄÚsplitrIrfr·Újoinr]rbÚnextÚiterrHÚ StopIteration)rýrsÚ node_cache1Ú node_cache2Úmatchnodes_cacheÚ pkg_rootsÚargpathÚnamesrúrãÚpkginitÚcolÚ seen_dirsrErJÚdirpathrÙÚkey2Ú collect_rootÚmatchingÚworkruÚ matchnamesrqÚkeyrnÚ submatchnodesrÚ report_args rbrHzSession.collect©sAèè€Ø*Ð*Ð*Ð*Ð*Ð*ð>@ˆ ØQSˆ ðTVÐð*,ˆ à"Ô1ðB (ñB (‰NˆG�UØ �JŠJÐ,¨w¸Ð.>Ñ ?Ô ?Ð ?Ø ŒJŒOÐ "Ô " aÑ 'Ð "Ô "ð ”;×(Ò(Ð)9¸5ÑAÔAð DØ”[Ô.�Ø&Ð9¨¬Ð9Ð9ð Dð D�FØ×/Ò/°Ñ8Ô8ðؘà—}’}‘”ðDØ"(¨=Ñ"8˜Ø"Ÿ?š?Ñ,Ô,ðD°À Ð1KÐ1KØ"&×"3Ò"3°GÈ%Ð"3Ñ"PÔ"P˜CØ"ðDÝ#-¨c°!¬f°gÑ#>Ô#>ð!?Ø8;¸A¼ I¨fÑ$5Øš>Ñ+Ô+ð;Ø%)×%6Ò%6°wÑ%?Ô%?ð;ð; Ø&'   Ý#-¨a°Ñ#9Ô#9ð!;Ø9: I¨gÑ$6øØ )Ð+Ð+à à!×.Ò.¨tÑ4Ô4ð$ð$˜Ý $ Q¡¤¨¬Ð0˜Ø ;Ð.Ð.Ø"-¨dÔ"3Ð3Ð3Ð3Ð3à01˜K¨Ñ-Ø"#˜G˜G˜G˜Gð $ñ)$ð8—’Ñ(Ô(Ð(Ð(Ð(à˜kÐ)Ð)Ø% gÔ.�C�Cà#,§=¢=°´ÀÑ#FÔ#F�LØ&×3Ò3°GÈ%Ð3ÑPÔP�CØð3Ø/2˜  GÑ,à�ð˜5�\�Nððñ$0Ø—J’J˜|¨S°%Ñ8Ô8Ð8Ø”J”OÐ*Ô*¨aÑ/Ð*Ô*à-1¯XªX©Z¬ZÑ*�J  Ø *ðHñH˜Ø)ð%Ø$ŸOšO¨DÑ1Ô1Ð1Ø$Ý)¨$µ´Ñ@Ô@ð%Ø$Ý# D™zœz¨4¬;Ð7˜ØÐ"2Ð2Ð2Ø"2°3Ô"7˜C˜Cå"2°4Ñ"8Ô"8˜CØ47Ð,¨SÑ1Øœ:ðHØ,.˜MØ%(¤Zð<ð< ð%&¤F¨j¸¬mÒ$;Ð$;Ø'(¤v§|¢|°CÑ'8Ô'8¸Ô';¸zÈ!¼}Ò'LÐ'Là$1×$8Ò$8¸Ñ$;Ô$;Ð$;øØ,ðMØ $§ ¢ ¨]¸JÀqÀrÀr¼NÐ,KÑ LÔ LÐ Løð !œJ×;Ò;À3Ð;ÑGÔGÐGÑGà—J’JÐ8½#¸h¹-¼-ÈÑQÔQÐQØ”J”OÐ*Ô*¨aÑ/Ð*Ô*ðIñ$0ðL ðØ!%§¢­C°©L¬LÐ+A¸5Ð+AÐ+AÑ!BÔ!B�JØ”N×)Ò)¨:°sÐ*;Ñ<Ô<Ð<Ùð”< =Ò0Ð0µZÀÈÄ ÈWÑ5UÔ5UÐ0ðÝ"¥4¨°¬ ×(;Ò(;Ñ(=Ô(=Ñ#>Ô#>Ñ?Ô?Ð?Ð?Ð?Ð?øÝ(ðððð˜ð øøøñ à#Ð#Ð#Ð#Ð#Ð#Ð#Ð#à ŒJŒOÐ "Ô " aÑ 'Ð "Ô "Ñ "ðEB (ðB (sÒ26S)Ó) S6Ó5S6rqc#ó�K—| d|¦«t|tj¦«r!|j |¬¦«|V—dSt|tj¦«sJ‚t|¦«}|jr%|j D]}|  |¦«Ed{V—†Œ|j  |¬¦«dS)NrW)r±r_) rr‹rÚItemrIÚpytest_itemcollectedr|r$rhrgrWrf)rýrqrnÚsubnodes rbrWzSession.genitems;sÜèè€ð � Š �:˜tÑ$Ô$Ð$Ý �d�EœJÑ 'Ô 'ð 8Ø ŒJ× +Ò +°Ð +Ñ 6Ô 6Ð 6؈JˆJˆJˆJˆJå˜d¥E¤OÑ4Ô4Ð 4Ð 4Ð4Ý" 4Ñ(Ô(ˆCØŒzð 6Ø"œzð6ð6�GØ#Ÿ}š}¨WÑ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø ŒJ× +Ò +°3Ð +Ñ 7Ô 7Ð 7Ð 7Ð 7rd)r(N)rr8)T)..)NT)+r˜rrr³r‚r%rrrr\rrrþÚ classmethodr|r]r(Úpropertyrr›r-rr0r#r"r7rfrmr;rDrJr rr|rVrr r•r­rrHrWÚ __classcell__)r!s@rbrtrtÏsÁø€€€€€€à€KØ €FàÐÐÑà#Ð#Ð#Ñ#Ø�c˜8�mÔ$Ð$Ð$Ñ$ðA˜vðA¨$ðAðAðAðAðAðAð(ð ð¨Iðððñ„[ðð ˜#ð ð ð ð ðð1˜4ð1ð1ð1ñ„Xð1ð1°4ð1¸Cð1ð1ð1ð1ð€X�tÐÑÔð4ð4ð4ñÔð4ð €X�tÐÑÔðTؘJ¨ Ð5Ô6ðTà ðTðTðTñÔðTð4Ðð+˜u SÐ*<Ð%<Ô=ð+À$ð+ð+ð+ð+ð ðððð,Ð!3ð¸ððððð26ðHðHØðHØ*.ðHà �%”/Ô "ðHðHðHðHð0àORð ð Ø˜X cœ]Ô+ð Ø=Lð à �%”*Ô ð ð ð ñ„Xð ð àDGð ð Ø˜X cœ]Ô+ð Ø=Að à �%˜œ  E¤OÐ3Ô4Ô 5ð ð ð ñ„Xð ð FJðEðEؘX cœ]Ô+ðEØ>BðEà �%˜œ  E¤OÐ3Ô4Ô 5ðEðEðEðEðNP(˜ %¨¬ °E´OÐ(CÔ"DÔEðP(ðP(ðP(ðP(ðd 8ؘ%œ* e¤oÐ5Ô6ð 8à �%”*Ô ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8rdÚ module_namecó— tj |¦«}n#ttt f$r|cYSwxYw|�|j� |jdkr|S|jr$tj   |j¦«S|jS)zTSearch sys.path for the given a dotted module name, and return its file system path.NÚ namespace) rSÚutilÚ find_specÚAttributeErrorÚ ImportErrorÚ ValueErrorÚoriginÚsubmodule_search_locationsr™rJÚdirname)r›Úspecs rbÚ search_pypathr§Ks•€ðÝŒ~×'Ò'¨ Ñ4Ô4ˆˆøõ �K­Ð 4ðððØÐÐÐðøøøà €|�t”{Ð*¨d¬k¸[Ò.HÐ.HØÐØ Ô (ðÝŒw�Š˜tœ{Ñ+Ô+Ð+àŒ{Ðs ‚"¢>½>Fr]Úinvocation_pathrlr^cóì—t|¦« d¦«\}}}| d¦«^}}|r|d›|›|›�|d<|rt|¦«}||z }t |¦«}| ¦«s)|rdnd} t |  |¬¦«¦«‚|r=| ¦«r)|rdnd} t |  |¬¦«¦«‚||fS) a`Parse path arguments optionally containing selection parts and return (fspath, names). Command-line arguments can point to files and/or directories, and optionally contain parts for specific tests selection, for example: "pkg/tests/test_foo.py::TestClass::test_foo" This function ensures the path exists, and returns a tuple: (Path("/full/path/to/pkg/tests/test_foo.py"), ["TestClass", "test_foo"]) When as_pypath is True, expects that the command-line argument actually contains module paths instead of file-system paths: "pkg.tests.test_foo::TestClass::test_foo" In which case we search sys.path for a matching module, and then return the *path* to the found module. If the path doesn't exist, raise UsageError. If the path is a directory and selection parts are present, raise UsageError. rvrwéÿÿÿÿz9module or package not found: {arg} (missing __init__.py?)z"file or directory not found: {arg})rlz9package argument cannot contain :: selection parts: {arg}z;directory argument cannot contain :: selection parts: {arg}) r]Ú partitionr}r§rrPrrOrÌ) r¨rlr^rfÚsquacketÚrestÚstrpathrmrrqs rbrdrd\s(€õ2˜s™8œ8×-Ò-¨cÑ2Ô2Ñ€Dˆ(�DØ—j’j Ñ&Ô&€O€GˆeØ ð3ؘR”yÐ2 (Ð2¨DÐ2Ð2ˆˆb‰ Øð)Ý Ñ(Ô(ˆØ ˜wÑ &€FÝ ˜&Ñ !Ô !€FØ �=Š=‰?Œ?ð.ðð 6Ð GÐ Gà5ð õ ˜Ÿš¨˜Ñ,Ô,Ñ-Ô-Ð-Ø ð.�—’‘”ð.ðð OÐ GÐ GàNð õ ˜Ÿš¨˜Ñ,Ô,Ñ-Ô-Ð-Ø �5ˆ=Ðrd)rwrtr(N)Pr rkÚ dataclassesrÞr^rSr™rŽÚpathlibrÚtypingrrrrrr r r r r rrÚ _pytest._coder†rÚ_pytest.compatrrÚ_pytest.configrrrrrrÚ_pytest.config.argparsingrÚ_pytest.fixturesrÚ_pytest.outcomesrÚ_pytest.pathlibrrr r!Ú_pytest.reportsr"r#Ú_pytest.runnerr$r%Útyping_extensionsr&rcr]r`r\r r¥r£r§rmr¨rÑrír•r÷rùr„r³r…r‚Ú dataclassr Ú FSCollectorrtr§rdrrdrbúr¾sðØNÐNØ€€€ØÐÐÐØ€€€ØÐÐÐØÐÐÐØ € € € Ø € € € ØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØ Ð Ð Ð Ð Ð ØÐÐÐÐÐàÐÐÐØÐÐÐÐÐØ Ð Ð Ð Ð Ð Ø#Ð#Ð#Ð#Ð#Ð#Ø!Ð!Ð!Ð!Ð!Ð!Ø(Ð(Ð(Ð(Ð(Ð(Ø#Ð#Ð#Ð#Ð#Ð#Ø#Ð#Ð#Ð#Ð#Ð#Ø.Ð.Ð.Ð.Ð.Ð.Ø%Ð%Ð%Ð%Ð%Ð%Ø,Ð,Ð,Ð,Ð,Ð,Ø+Ð+Ð+Ð+Ð+Ð+Ø!Ð!Ð!Ð!Ð!Ð!Ø(Ð(Ð(Ð(Ð(Ð(Ø'Ð'Ð'Ð'Ð'Ð'Ø&Ð&Ð&Ð&Ð&Ð&Ø!Ð!Ð!Ð!Ð!Ð!Ø)Ð)Ð)Ð)Ð)Ð)Ø&Ð&Ð&Ð&Ð&Ð&Ø+Ð+Ð+Ð+Ð+Ð+Ø%Ð%Ð%Ð%Ð%Ð%ðð*Ø)Ð)Ð)Ð)Ð)Ð)ðs˜Vðs¨ðsðsðsðsðl˜Cð Cððððð28Ø ð8Ø" F¨IÐ#6¸ÀÀsÈHÀ}ÔAUÔ8VÐ#VÔWð8à ˆ3�ˆ=Ôð8ð8ð8ð8ðv' ð'¨5°°h°Ô+?ð'ð'ð'ð'ð �&ð  9ð °¸%ÀÀXÀ Ô:NÔ1Oð ð ð ð ððððð  ð¨dððððð(F�4ðF˜DðFðFðFðFð( ¨4ð ¸ð ÀHÈTÄNð ð ð ð ðF¨¨e¬jÔ)9ðÀ6ðÈdððððð$ððððñôððððððÐ#ñôðð -ð-ð-ð-ð-ˆYñ-ô-ð-ð Ôððððð˜˜d C˜iœñôñÔðððx8ðx8ðx8ðx8ðx8ˆeÔñx8ôx8ñ„ðx8ðv ˜sð sððððð$;@ð/ð/ð/Øð/Ø #ð/Ø37ð/à ˆ4��c”ˆ?Ôð/ð/ð/ð/ð/ð/rd