ó
    Eñi’ ã            
      óð  • S r SSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKJ	r	  SSKJ
r
  SS	KJr  SS
KJr  SSKJr  SSKrSSKrSSKrSSKJr  SSKrSSKrSSKrSSKJr  SSKrSSKrSSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSKJ!r!  SSK"r"SSK#r#SSK#J$r$  SSK#J%r%  SSK&J'r'  SSK&J(r(  SSK)J*r*  SSK)J+r+  SSK)J,r,  SSK-J.r.  SSK/J0r0  SSK/J1r1  SSK/J2r2  SSK/J3r3  SS K/J4r4  SS!K/J5r5  SS"K/J6r6  SS#K/J7r7  SS$K/J8r8  SS%K9J:r:  SS&K9J;r;  SS'K<J=r=  SS(K>J?r?  SS)K@JArA  SS*K@JBrB  SS+K@JCrC  SS,K@JDrD  SS-KEJFrF  SS.KGJHrH  SS/KIJJrJ  SS0KIJKrK  SS1KIJLrL  SS2KIJMrM  SS3KIJNrN  SS4KIJOrO  SS5KPJQrQ  SS6KPJRrR  SS7KSJTrT  SS8KSJUrU  SS9KSJVrV  SS:KSJWrW  SS;KXJYrY  SS<KXJZrZ  SS=K[J\r\  SS>K]J^r^  SS?K]J_r_  \!(       a  SS@K`Jara  SnSA jrbSoSC jrcSpSD jrdSqSE jre\;" SFSG9SrSI j5       rf      SsSJ jrgStSK jrhSuSL jriSvSN jrj\;" SFSG9        SwSO j5       rk " SP SQ\%RØ                  5      rm " SR SS5      rn\oRá                  \o" 5       \q" \Rä                  " ST5      5      1 SUk\q" \n5      \q" \n" 5       5      5      rsCn " SV SW\m\%Rè                  \Rê                  5      rv    SxSX jrw " SY SM\%Rð                  \v5      ry " SZ S[\%Rô                  5      r{SyS\ jr|SzS] jr} " S^ S_\v5      r~S{S` jrS{Sa jr€\\GR                  " SFSb9 " Sc Sd5      5       5       r‚\\GR                  " SFSb9 " Se Sf5      5       5       rƒS|Sg jr„\\\…\†\A\   4      " 5       r‡\ " Sh SB5      5       rˆ        S}Si jr‰S~Sj jrŠ " Sk SH\m\%GR                  5      rŒ " Sl Sm\Œ5      r�g)z7Python test discovery, setup and run of test functions.é    )ÚannotationsN)ÚCounter)Údefaultdict)ÚCallable)Ú	Generator)ÚIterable)ÚIterator)ÚMapping)ÚSequence)Úpartial)ÚPath)ÚAny)Úcast)Úfinal)ÚLiteral)ÚNoReturn)ÚTYPE_CHECKING)Úfixtures)Únodes)Úfilter_traceback)Úgetfslineno)ÚExceptionInfo)ÚTerminalRepr)Ú	Traceback)Úsaferepr)Úascii_escaped)Úget_default_arg_names)Úget_real_func)Ú	getimfunc)Úis_async_function)ÚLEGACY_PATH)ÚNOTSET©Úsafe_getattr)Úsafe_isclass)ÚConfig)Úhookimpl)ÚParser)Úcheck_ispytest)Ú
FixtureDef)ÚFixtureRequest)ÚFuncFixtureInfo)Úget_scope_node)ÚSession)ÚParameterSet)Ú_HiddenParam)Úget_unpacked_marks©ÚHIDDEN_PARAM)ÚMark)ÚMarkDecorator)Únormalize_mark_list©Úfail)Úskip©Ú
fnmatch_ex)Úimport_path)ÚImportPathMismatchError)Úscandir)Ú
_ScopeName)ÚScope)ÚStashKey)ÚPytestCollectionWarning)ÚPytestReturnNotNoneWarning)ÚSelfc                óÀ   • U R                  SSSS/SS9  U R                  SSS/S	S9  U R                  S
SS/SS9  U R                  SSSSS9  U R                  SSS SS9  g )NÚpython_filesÚargsz	test_*.pyz	*_test.pyz9Glob-style file patterns for Python test module discovery)ÚtypeÚdefaultÚhelpÚ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ÚboolFzcDisable string escape non-ASCII characters, might cause unwanted side effects(use at your own risk)Ústrict_parametrization_idsz:Emit an error if non-unique parameter set IDs are detected)Úaddini)Úparsers    ÚK/home/mande/repo/quber/.venv/lib/python3.13/site-packages/_pytest/python.pyÚpytest_addoptionrU   U   s¦   € Ø
‡M�MØØà˜kÐ*ØHð ñ ð ‡M�MØØØ�ØEð	 ñ ð ‡M�MØØØ�ØSð	 ñ ð ‡M�MØNØØð-ð	 ñ ð ‡M�MØ$ØàØIð ò ó    ÚMetafuncc                ó˜   • U R                   R                  SS9 H-  nU R                  " UR                  0 UR                  DSU0D6  M/     g )NÚparametrize©ÚnameÚ_param_mark)Ú
definitionÚiter_markersrY   rG   Úkwargs)ÚmetafuncÚmarkers     rT   Úpytest_generate_testsrb   y   sA   € Ø×%Ñ%×2Ñ2¸Ð2ÓFˆØ×Ò˜fŸk™kÐO¨V¯]©]ÑOÈÕOò GrV   c                óL   • U R                  SS5        U R                  SS5        g )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_line)Úconfigs    rT   Úpytest_configurerg   ~   s1   € Ø
×ÑØð	ô
ð ×ÑØð	SõrV   c                ó   • Sn[        USS9  g )NzÑasync def functions are not natively supported.
You need to install a suitable plugin for your async framework, for example:
  - anyio
  - pytest-asyncio
  - pytest-tornasync
  - pytest-trio
  - pytest-twistedF©Úpytracer7   )ÚnodeidÚmsgs     rT   Ú
async_failrm   ’   s   € ð	ð ô 	ˆ�eÓrV   T)ÚtrylastÚFunctionc           
     óÒ  • U R                   n[        U5      (       a  [        U R                  5        U R                  nU R
                  R                   Vs0 s H  o3X#   _M	     nnU" S0 UD6n[        US5      (       d  [        US5      (       a  [        U R                  5        gUb:  [        R                  " [        SU R                   S[        U5      < S35      5        gs  snf )NÚ	__await__Ú	__aiter__z'Test functions should return None, but z
 returned z’.
Did you mean to use `assert` instead of `return`?
See https://docs.pytest.org/en/stable/how-to/assert.html#return-not-none for more information.T© )Úobjr    rm   rk   ÚfuncargsÚ_fixtureinfoÚargnamesÚhasattrÚwarningsÚwarnrC   rH   )Ú
pyfuncitemÚtestfunctionru   ÚargÚtestargsÚresults         rT   Úpytest_pyfunc_callr€   Ÿ   sß   € à—>‘>€LÜ˜×&Ñ&Ü�:×$Ñ$Ô%Ø×"Ñ"€HØ.8×.EÑ.E×.NÒ.NÓOÒ.N s�X‘]Ò"Ñ.N€HÐOÙÑ%˜HÑ%€FÜˆv�{×#Ñ#¤w¨v°{×'CÑ'CÜ�:×$Ñ$Ô%ð ð 
Ñ	Ü�ŠÜ&Ø9¸*×:KÑ:KÐ9LÈJÔW[Ð\bÓWcÑVfð gqð qóô	
ð ùò Ps   ÁC$c                ó„   • U S-  n UR                  5       nU(       a  [        R                  XS9$ g ! [         a     g f = f)Nú__init__.py©Úpath)Úis_fileÚPermissionErrorÚPackageÚfrom_parent)r„   ÚparentÚpkginitÚhas_pkginits       rT   Úpytest_collect_directoryrŒ   ´   sO   € ð �]Ñ"€GðØ—o‘oÓ'ˆö Ü×"Ñ" 6Ð"Ð5Ð5Øøô ó áðús   ‡2 ²
?¾?c                ó  • U R                   S:X  av  UR                  R                  U 5      (       d*  [        XR                  R                  S5      5      (       d  g UR                  R                  U 5      nUR                  XS9nU$ g )Nz.pyrF   ©Úmodule_pathr‰   )ÚsuffixÚsessionÚ
isinitpathÚpath_matches_patternsrf   ÚgetiniÚgethookproxyÚpytest_pycollect_makemodule)Ú	file_pathr‰   ÚihookÚmodules       rT   Úpytest_collect_filerš   Â   s   € Ø×Ñ˜5Ó Ø�~‰~×(Ñ(¨×3Ñ3Ü(ØŸ=™=×/Ñ/°Ó?÷ñ ð Ø—‘×+Ñ+¨IÓ6ˆØ×:Ñ:Ø!ð ;ð 
ˆð ˆØrV   c                ó.   ^ • [        U 4S jU 5       5      $ )zKReturn whether path matches any of the patterns in the list of globs given.c              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7f©Nr:   )Ú.0Úpatternr„   s     €rT   Ú	<genexpr>Ú(path_matches_patterns.<locals>.<genexpr>Ó   s   øé € ÐAº¨WŒz˜' 4×(Ð(ºùs   ƒ)Úany)r„   Úpatternss   ` rT   r“   r“   Ñ   s   ø€ äÔA¹ÓAÓAÐArV   ÚModulec                ó(   • [         R                  XS9$ )Nrƒ   )r¤   rˆ   rŽ   s     rT   r–   r–   Ö   s   € Ü×Ñ˜fÐÐ7Ð7rV   c                óÂ  • [        U [        [        -  5      (       d   [        U 5      5       e[	        U5      (       a,  U R                  X!5      (       a  [        R                  XUS9$  g U R                  X!5      (       aá  [        USU5      n[        R                  " U5      (       dc  [        R                  " [        U5      5      (       d?  [        U5      u  p4[        R                  " [        SU< S35      S [!        U5      US-   S9  g [        USS5      (       aC  [        R"                  " U5      (       a  [%        S	U S
3SS9  ['        U R)                  X5      5      $ g g )N)r[   rt   Ú__func__zcannot collect z because it is not a function.é   )ÚmessageÚcategoryÚfilenameÚlinenoÚ__test__Tz:'yield' keyword is allowed in fixtures, but not in tests (Ú)Fri   )Ú
isinstanceÚClassr¤   rH   r%   Úistestclassrˆ   ÚistestfunctionÚgetattrÚinspectÚ
isfunctionr   r   ry   Úwarn_explicitrB   ÚstrÚisgeneratorfunctionr8   ÚlistÚ_genfunctions)Ú	collectorr[   rt   r«   r¬   s        rT   Úpytest_pycollect_makeitemr¼   Ú   sK  € ô �i¤¬¡×0Ñ0ÐA´$°y³/ÓAÐ0ä�C×ÑØ× Ñ  ×+Ñ+Ü×$Ñ$ Y¸sÐ$ÐCÐCð ,ð4 ð1 
×	!Ñ	! #×	,Ñ	,ä�c˜: sÓ+ˆô ×"Ò" 3×'Ñ'¬7×+=Ò+=¼mÈCÓ>P×+QÑ+QÜ*¨3Ó/ÑˆHÜ×"Ò"Ü/Ø% d¡XÐ-KÐLóð Ü˜X›Ø ‘zòð ô �S˜* d×+Ñ+Ü×*Ò*¨3×/Ñ/ÜØPÐQUÐPVÐVWÐXØ!òô ˜	×/Ñ/°Ó:Ó;Ð;ØØrV   c                  óž   • \ rS rSrSrSr\S 5       r\S 5       r\S 5       r	\S 5       r
\
R                  S 5       r
S	 rSSS
 jjrSS jrSrg)Ú
PyobjMixinéþ   z™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                óN   • U R                  [        5      nUb  UR                  $ S$ )z@Python module object this node was collected from (can be None).N)Ú	getparentr¤   rt   ©ÚselfÚnodes     rT   r™   ÚPyobjMixin.module  s&   € ð �~‰~œfÓ%ˆØÑ+ˆt�x‰xÐ5°Ð5rV   c                óN   • U R                  [        5      nUb  UR                  $ S$ )z?Python class object this node was collected from (can be None).N)rÁ   r°   rt   rÂ   s     rT   ÚclsÚPyobjMixin.cls  s&   € ð �~‰~œeÓ$ˆØÑ+ˆt�x‰xÐ5°Ð5rV   c                ó   • g)z�Python instance object the function is bound to.

Returns None if not a test method, e.g. for a standalone test function,
a class or a module.
Nrs   ©rÃ   s    rT   ÚinstanceÚPyobjMixin.instance  s   € ð rV   c                ó*  • [        U SS5      nUc‚  U R                  5       =U l        nU R                  (       aZ  U R                  R                  [        U R                  5      5        U R                  R                  S U R                   5       5        U$ )zUnderlying Python object.Ú_objNc              3  ó<   #   • U  H  oR                   U4v •  M     g 7fr�   rZ   ©rž   Úmarks     rT   r    Ú!PyobjMixin.obj.<locals>.<genexpr>(  s   é € Ð$TÒCS¸4§i¡i°Õ%6ÒCSùó   ‚)
r³   Ú_getobjrÎ   Ú_ALLOW_MARKERSÚown_markersÚextendr1   rt   ÚkeywordsÚupdate©rÃ   rt   s     rT   rt   ÚPyobjMixin.obj  sw   € ô �d˜F DÓ)ˆØ‰;Ø"Ÿl™l›nÐ,ˆDŒI˜ð ×"×"Ø× Ñ ×'Ñ'Ô(:¸4¿8¹8Ó(DÔEð —‘×$Ñ$Ñ$TÀ4×CSÒCSÓ$TÔTØˆ
rV   c                ó   • Xl         g r�   ©rÎ   )rÃ   Úvalues     rT   rt   rÛ   +  s   € à�	rV   c                óv   • U R                   c   eU R                   R                  n[        XR                  5      $ )zCGet the underlying Python object. May be overwritten by subclasses.)r‰   rt   r³   r[   rÚ   s     rT   rÔ   ÚPyobjMixin._getobj/  s0   € ð �{‰{Ñ&Ð&Ð&Ø�k‰k�o‰oˆÜ�sŸI™IÓ&Ð&rV   c                ó`  • / nU R                  5        Hx  nUR                  n[        U[        5      (       aC  [        R
                  R                  U5      S   nU(       a  U(       a  UR                  U5          OUR                  U5        Mz     UR                  5         SR                  U5      $ )z5Return Python path relative to the containing module.r   Ú.)
Úiter_parentsr[   r¯   r¤   Úosr„   ÚsplitextÚappendÚreverseÚjoin)rÃ   ÚstopatmoduleÚincludemoduleÚpartsrÄ   r[   s         rT   Ú
getmodpathÚPyobjMixin.getmodpath6  sƒ   € àˆØ×%Ñ%Ö'ˆDØ—9‘9ˆDÜ˜$¤×'Ñ'Ü—w‘w×'Ñ'¨Ó-¨aÑ0�ÞÞ$ØŸ™ TÔ*ÙØ�L‰L˜Öñ (ð 	�‰ŒØ�x‰x˜‹ÐrV   c                óX   • [        U R                  5      u  pU R                  5       nXU4$ r�   )r   rt   rì   )rÃ   r„   r¬   Úmodpaths       rT   Ú
reportinfoÚPyobjMixin.reportinfoE  s)   € ä" 4§8¡8Ó,‰ˆØ—/‘/Ó#ˆØ˜WÐ$Ð$rV   rÝ   N)TF)ré   rP   rê   rP   Úreturnr·   )rò   z.tuple[os.PathLike[str] | str, int | None, str])Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rÕ   Úpropertyr™   rÇ   rË   rt   ÚsetterrÔ   rì   rð   Ú__static_attributes__rs   rV   rT   r¾   r¾   þ   sƒ   † ñ-ð
 €Nàñ6ó ð6ð
 ñ6ó ð6ð
 ñó ðð ñó ðð 	‡Z�Zñó ðò'ö÷%rV   r¾   c                  ó   • \ rS rSrSrg)Ú_EmptyClassiP  rs   N)ró   rô   rõ   rö   rú   rs   rV   rT   rü   rü   P  s   † ’4rV   rü   Úempty_module>   Ú__file__Ú
__cached__Ú__builtins__c                  ód   • \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrS
rg)ÚPyCollectori`  c                ó&   • U R                  SU5      $ )NrM   ©Ú_matches_prefix_or_glob_option©rÃ   r[   s     rT   ÚfuncnamefilterÚPyCollector.funcnamefiltera  s   € Ø×2Ñ2Ð3EÀtÓLÐLrV   c                ó    • [        USS5      SL $ )zWLook for the __test__ attribute, which is applied by the
@nose.tools.istest decorator.
r­   FTr#   rÚ   s     rT   Ú
isnosetestÚPyCollector.isnosetestd  s   € ô ˜C ¨UÓ3°tÐ;Ð;rV   c                ó&   • U R                  SU5      $ )NrK   r  r  s     rT   ÚclassnamefilterÚPyCollector.classnamefilterm  s   € Ø×2Ñ2Ð3CÀTÓJÐJrV   c                ó  • U R                  U5      (       d  U R                  U5      (       aS  [        U[        [        -  5      (       a  [        USS5      n[        U5      =(       a    [        R                  " U5      S L $ g)Nr§   F)	r  r
  r¯   ÚstaticmethodÚclassmethodr$   Úcallabler   Úgetfixturemarker©rÃ   rt   r[   s      rT   r²   ÚPyCollector.istestfunctionp  sc   € Ø×Ñ˜t×$Ñ$¨¯©¸×(<Ñ(<Ü˜#œ|¬kÑ9×:Ñ:ä" 3¨
°EÓ:�Ü˜C“=×K¤X×%>Ò%>¸sÓ%CÀtÐ%KÐKàrV   c                ó–   • U R                  U5      (       d  U R                  U5      (       d  g[        R                  " U5      (       a  gg)NFT)r  r
  r´   Ú
isabstractr  s      rT   r±   ÚPyCollector.istestclassy  s;   € Ø×$Ñ$ T×*Ñ*¨d¯o©o¸c×.BÑ.BØÜ×Ò˜c×"Ñ"ØØrV   c                óÚ   • U R                   R                  U5       HL  nUR                  U5      (       a    gSU;   d  SU;   d  SU;   d  M/  [        R                  " X#5      (       d  ML    g   g)zTCheck if the given name matches the prefix or glob-pattern defined
in configuration.TÚ*Ú?Ú[F)rf   r”   Ú
startswithÚfnmatch)rÃ   Úoption_namer[   Úoptions       rT   r  Ú*PyCollector._matches_prefix_or_glob_option€  sc   € ð —k‘k×(Ñ(¨Ö5ˆFØ�‰˜v×&Ñ&Ùð ˜“- 3¨&£=°C¸6µMÄwÇÂØ÷Hó Hñ ñ 6ð rV   c                ó@  • [        U R                  SS5      (       d  / $ [        U R                  S0 5      /n[        U R                  [        5      (       a8  U R                  R                   H  nUR                  UR                  5        M      [        5       n/ nU R                  R                  R                  S5      nU R                  nU GH'  n/ n[        UR                  5       5       Hó  u  pšU	[        ;   a  M  X“;   a  M  UR                  U	5        U(       du  [        U [         5      (       a`  ["        R$                  " U
5      (       d  ["        R&                  " U
5      (       a*  U
R(                  U R+                  5       R,                  :w  a  M¥  UR/                  X	U
S9nUc  Mº  [        U[        5      (       a  UR1                  U5        Mâ  UR                  U5        Mõ     UR                  U5        GM*     / n[3        U5       H  nUR1                  U5        M     U$ )Nr­   TÚ__dict__Úcollect_imported_tests)r»   r[   rt   )r³   rt   r¯   rH   Ú__mro__ræ   r#  Úsetr‘   rf   r”   r˜   r¹   ÚitemsÚIGNORED_ATTRIBUTESÚaddr¤   r´   rµ   Úisclassrô   rÔ   ró   r¼   r×   Úreversed)rÃ   ÚdictsÚbaseclsÚseenÚdict_valuesr$  r˜   ÚdicÚvaluesr[   rt   Úresr   s                rT   ÚcollectÚPyCollector.collect�  s«  € Ü�t—x‘x ¨T×2Ñ2ØˆIô ˜Ÿ™ :¨rÓ2Ð3ˆÜ�d—h‘h¤×%Ñ%ØŸ8™8×+Ô+�Ø—‘˜W×-Ñ-Ö.ñ ,ô
 ›ˆØ@BˆØ!%§¡×!4Ñ!4×!;Ñ!;Ð<TÓ!UÐØ—
‘
ˆÜˆCØ9;ˆFô " #§)¡)£+Ö.‘	�ØÔ-Ó-ÙØ“<ÙØ—‘˜”æ-´*¸TÄ6×2JÑ2Jä×)Ò)¨#×.Ñ.´'·/²/À#×2FÑ2FØŸ>™>¨T¯\©\«^×-DÑ-DÓDÙ$à×5Ñ5Ø"°3ð 6ð �ð ‘;ÙÜ ¤T×*Ñ*Ø—M‘M #Ö&à—M‘M #Ö&ñ+ /ð, ×Ñ˜v×&ñ5 ð< ˆÜ˜{Ö+ˆFØ�M‰M˜&Ö!ñ ,àˆrV   c           
   #  ó˜  #   • U R                  [        5      nUc   eUR                  nU R                  [        5      nU=(       a    UR                  =(       d    S n[        R                  XUS9nUR                  n[        UUU R                  UUSS9n	/ n
[        US5      (       a  U
R                  UR                  5        Ub1  [        US5      (       a   U
R                  U" 5       R                  5        U R                  R                  R                  U
[        U	S95        U	R                  (       d  [         R                  XUS9v •  g U	R#                  5         UR%                  5         U	R                   HN  nUR&                  (       a  U SUR(                   S3OUn[         R                  U UUUUR(                  S0US	9v •  MP     g 7f)
N)r[   ÚcallobjT)r]   Úfixtureinforf   rÇ   r™   Ú	_ispytestrb   )r`   )r[   r7  r  Ú])r[   Úcallspecr7  rØ   Úoriginalname)rÁ   r¤   rt   r°   ÚFunctionDefinitionrˆ   rv   rW   rf   rx   ræ   rb   r˜   Ú
call_extraÚdictÚ_callsro   Ú _recompute_direct_params_indicesÚprune_dependency_treeÚ_idlistÚid)rÃ   r[   ÚfuncobjÚ	modulecolr™   ÚclscolrÇ   r]   r7  r`   Úmethodsr:  Úsubnames                rT   rº   ÚPyCollector._genfunctionsÂ  s�  é € Ø—N‘N¤6Ó*ˆ	ØÑ$Ð$Ð$Ø—‘ˆØ—‘¤Ó&ˆØ×$˜&Ÿ*™*×-¨ˆä'×3Ñ3°DÈWÐ3ÐUˆ
Ø ×-Ñ-ˆô Ø!Ø#Ø—;‘;ØØØñ
ˆð ˆÜ�6Ð2×3Ñ3Ø�N‰N˜6×7Ñ7Ô8Ø‰?œw sÐ,C×DÑDØ�N‰N™3›5×6Ñ6Ô7Ø�
‰
×(Ñ(×3Ñ3°G¼TÈ8Ñ=TÔUà��Ü×&Ñ& tÀKÐ&ÐPÓPà×5Ñ5Ô7ð ×-Ñ-Ô/à$ŸOœO�Ø6>×6F×6F˜T˜F ! H§K¡K =°Ñ2ÈD�Ü×*Ñ*ØØ Ø%Ø +Ø&Ÿk™k¨4Ð0Ø!%ð +ð ô ò ,ùs   ‚GG
rs   N)r[   r·   rò   rP   ©rt   Úobjectrò   rP   )rt   rK  r[   r·   rò   rP   )r  r·   r[   r·   rò   rP   ©rò   z&Iterable[nodes.Item | nodes.Collector])r[   r·   rò   zIterator[Function])ró   rô   rõ   rö   r  r
  r  r²   r±   r  r3  rº   rú   rs   rV   rT   r  r  `  s-   † ôMô<ôKôôôô1÷f/rV   r  c                óÞ  • UR                  S5      n [        U UUR                  UR                  S5      S9nUR0                  R3                  U5        U$ ! [         aE  n[
        R                  R                  [        R                  " 5       R                  SS95      UeS nAf[         a<  n[
        R                  R                  SR                  " UR                  6 5      UeS nAf[         a³  n[        R                  " 5       nUR                  5       S:  a$  UR                   R#                  [$        5      Ul        UR                   (       a  UR                  SS9OUR'                  5       n[)        U5      n[
        R                  R                  SU  S	U 35      UeS nAf[*        R,                   a7  nUR.                  (       a  e [
        R                  R                  S
5      UeS nAff = f)Nz--import-modeÚconsider_namespace_packages)ÚmodeÚrootrN  Úshort©Ústylezêimport file mismatch:
imported module {!r} has this __file__ attribute:
  {}
which is not the same as the test file we want to collect:
  {}
HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modulesé   z)ImportError while importing test module 'zR'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
zï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.)Ú	getoptionr<   Úrootpathr”   ÚSyntaxErrorr   Ú	CollectorÚCollectErrorr   Úfrom_currentÚgetreprr=   ÚformatrG   ÚImportErrorÚget_verbosityÚ	tracebackÚfilterr   Úexconlyr·   r9   Ú	ExceptionÚallow_module_levelÚpluginmanagerÚconsider_module)r„   rf   Ú
importmodeÚmodÚeÚexc_infoÚexc_reprÚformatted_tbs           rT   Úimporttestmodulerl  ô  sÚ  € ð
 ×!Ñ! /Ó2€Jð-ÜØØØ—‘Ø(.¯©Ð6SÓ(Tñ	
ˆðZ ×Ñ×(Ñ(¨Ô-Ø€JøôQ ó Ü�o‰o×*Ñ*Ü×&Ò&Ó(×0Ñ0°wÐ0Ð?ó
àð	ûô #ó 	Ü�o‰o×*Ñ*ð9÷ :@¹ð@ð BCÇÁðIó
ð ð	ûô ó Ü ×-Ò-Ó/ˆØ×ÑÓ! AÓ%Ø!)×!3Ñ!3×!:Ñ!:Ô;KÓ!LˆHÔð ×!×!ð ×Ñ 7ÐÑ+à×!Ñ!Ó#ð 	ô
 ˜8“}ˆÜ�o‰o×*Ñ*Ø7¸°vð >ð ˆnðó
ð
 ð	ûô �>‰>ó Ø××ØÜ�o‰o×*Ñ*ðKó
ð
 ð	ûðús=   “%A Á
G,ÁA BÂG,Â,7C#Ã#G,Ã0B.FÆG,Æ52G'Ç'G,c                  óJ   ^ • \ rS rSrSrS rSU 4S jjrS	S jrS	S jrSr	U =r
$ )
r¤   i,  z<Collector for test classes and functions in a Python module.c                óB   • [        U R                  U R                  5      $ r�   )rl  r„   rf   rÊ   s    rT   rÔ   ÚModule._getobj/  s   € Ü §	¡	¨4¯;©;Ó7Ð7rV   c                óª   >• U R                  5         U R                  5         U R                  R                  R	                  U 5        [
        TU ]  5       $ r�   )Ú_register_setup_module_fixtureÚ _register_setup_function_fixturer‘   Ú_fixturemanagerÚparsefactoriesÚsuperr3  ©rÃ   Ú	__class__s    €rT   r3  ÚModule.collect2  s@   ø€ Ø×+Ñ+Ô-Ø×-Ñ-Ô/Ø�‰×$Ñ$×3Ñ3°DÔ9Ü‰w‰Ó Ð rV   c                ó  ^^• [        U R                  S5      m[        U R                  S5      mTc  Tc  gS	UU4S jjnU R                  R                  R	                  SU R                  R
                   3UU R                  SSS9  g)
a  Register an autouse, module-scoped fixture for 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).
©ÚsetUpModuleÚsetup_module©ÚtearDownModuleÚteardown_moduleNc              3  ól   >#   • U R                   nTb  [        TU5        S v •  Tb  [        TU5        g g 7fr�   )r™   Ú_call_with_optional_argument)Úrequestr™   r|  r  s     €€rT   Úxunit_setup_module_fixtureÚIModule._register_setup_module_fixture.<locals>.xunit_setup_module_fixtureI  s7   øé € Ø—^‘^ˆFØÑ'Ü,¨\¸6ÔBÛØÑ*Ü,¨_¸fÕEð +ùs   ƒ14Ú_xunit_setup_module_fixture_r™   T©r[   Úfuncrk   ÚscopeÚautouse©rò   zGenerator[None]©Ú_get_first_non_fixture_funcrt   r‘   rs  Ú_register_fixtureró   rk   )rÃ   rƒ  r|  r  s     @@rT   rq  Ú%Module._register_setup_module_fixture8  s�   ù€ ô 3Ø�H‰HÐ5ó
ˆô 6Ø�H‰HÐ;ó
ˆð Ñ OÑ$;Ø÷	Fð 	Fð 	�‰×$Ñ$×6Ñ6à/°·±×0AÑ0AÐ/BÐCØ+Ø—;‘;ØØð 	7ò 	
rV   c                ó  ^^• [        U R                  S5      m[        U R                  S5      mTc  Tc  gS	UU4S jjnU R                  R                  R	                  SU R                  R
                   3UU R                  SSS9  g)
a
  Register an autouse, function-scoped fixture for 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_functionNc              3  ó�   >#   • U R                   b  S v •  g U R                  nTb  [        TU5        S v •  Tb  [        TU5        g g 7fr�   )rË   Úfunctionr�  )r‚  r“  r�  r‘  s     €€rT   Úxunit_setup_function_fixtureÚMModule._register_setup_function_fixture.<locals>.xunit_setup_function_fixtureh  sN   øé € Ø×ÑÑ+ó ØØ×'Ñ'ˆHØÑ)Ü,¨^¸XÔFÛØ Ñ,Ü,Ð->ÀÕIð -ùs   ƒAAÚ_xunit_setup_function_fixture_r“  Tr†  rŠ  r‹  )rÃ   r”  r�  r‘  s     @@rT   rr  Ú'Module._register_setup_function_fixtureZ  sŒ   ù€ ô 5°T·X±XÐ?RÓSˆÜ7Ø�H‰HÐ,ó
Ðð Ñ!Ð&7Ñ&?Ø÷	Jð 	Jð 	�‰×$Ñ$×6Ñ6à1°$·(±(×2CÑ2CÐ1DÐEØ-Ø—;‘;ØØð 	7ò 	
rV   rs   rL  ©rò   ÚNone)ró   rô   rõ   rö   r÷   rÔ   r3  rq  rr  rú   Ú__classcell__©rw  s   @rT   r¤   r¤   ,  s    ø† ÙFò8÷!ô 
÷D"
ò "
rV   c                  ó^   ^ • \ rS rSrSr    S       SU 4S jjjrS	S jrS
S jrSrU =r	$ )r‡   i  a\  Collector for files and directories in a Python packages -- directories
with an `__init__.py` file.

.. note::

    Directories without an `__init__.py` file are instead collected by
    :class:`~pytest.Dir` by default. Both are :class:`~pytest.Directory`
    collectors.

.. versionchanged:: 8.0

    Now inherits from :class:`~pytest.Directory`.
c           	     óB   >• UR                   n[        TU ]	  UUUUUUS9  g )N)Úfspathr„   r‰   rf   r‘   rk   )r‘   ru  Ú__init__)rÃ   rž  r‰   rf   r‘   rk   r„   rw  s          €rT   rŸ  ÚPackage.__init__Ž  s2   ø€ ð —.‘.ˆÜ‰ÑØØØØØØð 	ò 	
rV   c                óà   • [        U R                  S-  U R                  5      n[        US5      nUb  [	        X!5        [        US5      nUb"  [        [        X15      nU R                  U5        g g )Nr‚   rz  r}  )rl  r„   rf   rŒ  r�  r   Úaddfinalizer)rÃ   Úinit_modr|  r  r‡  s        rT   ÚsetupÚPackage.setup¤  su   € Ü# D§I¡I°Ñ$=¸t¿{¹{ÓKˆô 3ØÐ5ó
ˆð Ñ#Ü(¨Ô@ä5ØÐ;ó
ˆð Ñ&ÜÔ7¸ÓSˆDØ×Ñ˜dÕ#ð 'rV   c              #  ól  #   • SS jnU R                   nU R                  n[        U R                  U5       H÷  nUR	                  5       (       ad  [        UR                  5      nU R                  R                  USS9(       d  UR                  XRS9(       a  Mb  UR                  XPS9nUb  Uv •  Mz  M|  UR                  5       (       d  M“  [        UR                  5      nU R                  R                  U5      (       d  UR                  XRS9(       a  MÞ  UR                  XPS9nU S h  v•N   Mù     g  N	7f)Nc                ó8   • U R                   S:g  U R                   4$ )Nr‚   rZ   )Úentrys    rT   Úsort_keyÚ!Package.collect.<locals>.sort_key¸  s   € Ø—J‘J -Ñ/°·±Ð<Ð<rV   T)Úwith_parents)Úcollection_pathrf   )r„   r‰   )r—   r‰   )r¨  zos.DirEntry[str]rò   rK  )rf   r˜   r>   r„   Úis_dirr   r‘   r’   Úpytest_ignore_collectrŒ   r…   rš   )rÃ   r©  rf   r˜   Údirentryr„   ÚcolÚcolss           rT   r3  ÚPackage.collect¶  s  é € ô	=ð —‘ˆð —
‘
ˆÜ §	¡	¨8Ö4ˆHØ�‰× Ñ Ü˜HŸM™MÓ*�Ø—|‘|×.Ñ.¨tÀ$Ð.ÖGØ×2Ñ2À4Ð2ÖWÙ Ø×4Ñ4¸$Ð4ÐL�Ø‘?Ø”Iñ #ð ×!Ñ!×#Ó#Ü˜HŸM™MÓ*�Ø—|‘|×.Ñ.¨t×4Ñ4Ø×2Ñ2À4Ð2ÖWÙ Ø×0Ñ0¸4Ð0ÐM�Ø—’ò! 5ñ   ùs   ‚CD4Ã	AD4Ä(D2Ä)
D4rs   )NNNN)rž  zLEGACY_PATH | Noner‰   únodes.Collectorr„   zPath | Nonerò   r™  r˜  rL  )
ró   rô   rõ   rö   r÷   rŸ  r¤  r3  rú   rš  r›  s   @rT   r‡   r‡     sU   ø† ñð& ØØØ ð
à"ð
ð  ð
ð ð
ð 
÷
ð 
ô,$÷$ ò  rV   r‡   c                óž   • U R                   R                  n[        R                  " U 5      (       a  US-  nU(       a	  U " U5        gU " 5         g)zuCall 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      rT   r�  r�  Ò  s<   € ð —‘×)Ñ)€IÜ×Ò˜×ÑØ�Q‰ˆ	ÞÙˆS�	á�rV   c                ón   • U H/  n[        XS5      nUc  M  [        R                  " U5      b  M-  Us  $    g)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³   r   r  )rt   Únamesr[   Úmeths       rT   rŒ  rŒ  Þ  s:   € ó ˆÜ% c°Ó6ˆØÓ¤× 9Ò 9¸$Ó ?Ó GØŠKñ ð rV   c                  ól   ^ • \ rS rSrSr\SS.SU 4S jjj5       rS rSU 4S jjrSS jr	SS	 jr
S
rU =r$ )r°   ié  zBCollector for test methods (and nested classes) in a Python class.N©rt   c               ó(   >• [         TU ]  " SX!S.UD6$ )úThe public constructor.)r[   r‰   rs   ©ru  rˆ   )rÇ   r‰   r[   rt   Úkwrw  s        €rT   rˆ   ÚClass.from_parentì  s   ø€ ô ‰wÒ"ÐB¨ÑB¸rÑBÐBrV   c                ó"   • U R                  5       $ r�   r½  rÊ   s    rT   ÚnewinstanceÚClass.newinstanceñ  s   € Ø�x‰x‹zÐrV   c           	     óì  >• [        U R                  SS5      (       d  / $ [        U R                  5      (       a[  U R                  c   eU R	                  [        SU R                  R                  < SU R                  R                   S35      5        / $ [        U R                  5      (       a[  U R                  c   eU R	                  [        SU R                  R                  < SU R                  R                   S35      5        / $ U R                  5         U R                  5         U R                  R                  R                  U R                  5       U R                  5        [        TU ]A  5       $ )Nr­   Tzcannot collect test class z. because it has a __init__ constructor (from: r®   z- because it has a __new__ constructor (from: )r$   rt   Úhasinitr‰   rz   rB   ró   rk   ÚhasnewÚ_register_setup_class_fixtureÚ_register_setup_method_fixturer‘   rs  rt  rÄ  ru  r3  rv  s    €rT   r3  ÚClass.collectô  s;  ø€ Ü˜DŸH™H j°$×7Ñ7ØˆIÜ�4—8‘8×ÑØ—;‘;Ñ*Ð*Ð*Ø�I‰IÜ'Ø0°·±×1BÑ1BÑ0Eð F3Ø37·;±;×3EÑ3EÐ2FÀaðIóôð ˆIÜ�D—H‘H×ÑØ—;‘;Ñ*Ð*Ð*Ø�I‰IÜ'Ø0°·±×1BÑ1BÑ0Eð F2Ø26·+±+×2DÑ2DÐ1EÀQðHóôð ˆIà×*Ñ*Ô,Ø×+Ñ+Ô-à�‰×$Ñ$×3Ñ3°D×4DÑ4DÓ4FÈÏÉÔTä‰w‰Ó Ð rV   c                ó  ^^• [        U R                  S5      m[        U R                  S5      mTc  Tc  gS	UU4S jjnU R                  R                  R	                  SU R                  R
                   3UU R                  SSS9  g)
a  Register an 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_classNc              3  ó”   >#   • U R                   nTb  [        T5      n[        X!5        S v •  Tb  [        T5      n[        X!5        g g 7fr�   )rÇ   r   r�  )r‚  rÇ   r‡  rÍ  rÎ  s      €€rT   Úxunit_setup_class_fixtureÚFClass._register_setup_class_fixture.<locals>.xunit_setup_class_fixture  sG   øé € Ø—+‘+ˆCØÑ&Ü  Ó-�Ü,¨TÔ7ÛØÑ)Ü  Ó0�Ü,¨TÕ7ð *ùs   ƒAAÚ_xunit_setup_class_fixture_ÚclassTr†  rŠ  ©rŒ  rt   r‘   rs  r�  rõ   rk   )rÃ   rÐ  rÍ  rÎ  s     @@rT   rÉ  Ú#Class._register_setup_class_fixture  sƒ   ù€ ô 2°$·(±(Ð<LÓMˆÜ4°T·X±XÐ?RÓSˆØÑ >Ñ#9Ø÷	8ð 	8ð 	�‰×$Ñ$×6Ñ6à.¨t¯x©x×/DÑ/DÐ.EÐFØ*Ø—;‘;ØØð 	7ò 	
rV   c                ó$  ^^^^• Sm[        U R                  T45      mSm[        U R                  T45      mTc  Tc  gS	UUUU4S jjnU R                  R                  R	                  SU R                  R
                   3UU R                  SSS9  g)
a  Register an 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).
Úsetup_methodÚteardown_methodNc              3  ó°   >#   • U R                   nU R                  nTb  [        UT5      n[        X25        S v •  Tb  [        UT5      n[        X25        g g 7fr�   )rË   r“  r³   r�  )r‚  rË   Úmethodr‡  r×  Ú
setup_namerØ  Úteardown_names       €€€€rT   Úxunit_setup_method_fixtureÚHClass._register_setup_method_fixture.<locals>.xunit_setup_method_fixture>  sX   øé € Ø×'Ñ'ˆHØ×%Ñ%ˆFØÑ'Ü˜x¨Ó4�Ü,¨TÔ:ÛØÑ*Ü˜x¨Ó7�Ü,¨TÕ:ð +ùs   ƒAAÚ_xunit_setup_method_fixture_r“  Tr†  rŠ  rÔ  )rÃ   rÝ  r×  rÛ  rØ  rÜ  s     @@@@rT   rÊ  Ú$Class._register_setup_method_fixture0  s�   û€ ð $ˆ
Ü2°4·8±8¸j¸]ÓKˆØ)ˆÜ5°d·h±hÀÐ@PÓQˆØÑ OÑ$;Ø÷		;ò 		;ð 	�‰×$Ñ$×6Ñ6à/°·±×0EÑ0EÐ/FÐGØ+Ø—;‘;ØØð 	7ò 	
rV   rs   ©rò   rD   rL  r˜  )ró   rô   rõ   rö   r÷   r  rˆ   rÄ  r3  rÉ  rÊ  rú   rš  r›  s   @rT   r°   r°   é  s<   ø† ÙLàØ.2÷ Cñ Có ðCò÷!ô:
÷> 
ò  
rV   r°   c                óR   • [        U SS 5      nU(       a  U[        R                  :g  $ g)NrŸ  F)r³   rK  rŸ  )rt   Úinits     rT   rÇ  rÇ  S  s%   € Ü˜3 
¨DÓ1€DÞØ”v—‘Ñ&Ð&ØrV   c                óR   • [        U SS 5      nU(       a  U[        R                  :g  $ g)NÚ__new__F)r³   rK  rå  )rt   Únews     rT   rÈ  rÈ  Z  s%   € Ü˜#˜y¨$Ó/€CÞ
Ø”f—n‘nÑ$Ð$ØrV   )Úfrozenc                  óÜ   • \ rS rSr% SrSrS\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'   S\S'   SS jrSS jrS S jr	S!S jr
S"S jrS#S jrS$S jrS%S jr\S&S j5       rS'S jrS(S jrSrg))ÚIdMakeria  zMake IDs for a parametrization.)rw   rf   Ú	func_nameÚidfnÚidsrk   ÚparametersetsúSequence[str]rw   úSequence[ParameterSet]rí  z%Callable[[Any], object | None] | Nonerë  zSequence[object | None] | Nonerì  úConfig | Nonerf   ú
str | Nonerk   rê  c                óŒ  • [        U R                  5       5      n[        U5      [        [        U5      5      :w  Ga×  [	        U5      nU R                  5       (       aþ  SR                  U R                  5      nSR                  U R                   Vs/ s H!  n[        [        UR                  5      5      PM#     sn5      nSR                  S U 5       5      nSR                  S UR                  5        5       5      n[        R                  " SU R                   SU SU SU SU S	35      R                  5       n[         R"                  R%                  U5      e['        [(        5      n	[+        U5       H›  u  p«X+   S
:”  d  M  U[,        L a  U R/                  5         SnU(       a  US   R1                  5       (       a  SnU U X›    3nU[        U5      ;   a'  X›==   S
-  ss'   U U X›    3nU[        U5      ;   a  M'  XÑU
'   X›==   S
-  ss'   M�     [        U5      [        [        U5      5      :X  d   SU< 35       eU$ s  snf )a  Make a unique identifier for each ParameterSet, that may be used to
identify the parametrization in a node ID.

If strict_parametrization_ids is enabled, and duplicates are detected,
raises CollectError. Otherwise makes the IDs unique as follows:

Format is <prm_1_token>-...-<prm_n_token>[counter], where prm_x_token is
- user-provided id, if given
- else an id derived from the value, applicable for certain types
- else <argname><parameterset index>
The counter suffix is appended only in case a string wouldn't be unique
otherwise.
z, c              3  ó:   #   • U  H  o[         La  UOS v •  M     g7f)ú<hidden>Nr2   )rž   rC  s     rT   r    Ú7IdMaker.make_unique_parameterset_ids.<locals>.<genexpr>�  s   é € ð  ÚKWÀR¤LÒ0‘B°jÔ@Ê<ùs   ‚c              3  óP   #   • U  H  u  pUS :”  d  M  U[         La  UOSv •  M     g7f)r¨   rô  Nr2   )rž   rC  Úcounts      rT   r    rõ     s/   é € ð 'â%6™	˜Ø˜q‘yó A˜"¤LÒ0‘B°jÔ@Ú%6ùs   ‚&’&z‰
                    Duplicate parametrization IDs detected, but strict_parametrization_ids is set.

                    Test name:      z%
                    Parameters:     z%
                    Parameter sets: z%
                    IDs:            z%
                    Duplicates:     zŽ

                    You can fix this problem using `@pytest.mark.parametrize(..., ids=...)` or `pytest.param(..., id=...)`.
                r¨   Ú éÿÿÿÿÚ_zInternal error: resolved_ids=)r¹   Ú_resolve_idsÚlenr&  r   Ú#_strict_parametrization_ids_enabledrè   rw   rí  r   r1  r'  ÚtextwrapÚdedentrk   Ústripr   rX  rY  r   ÚintÚ	enumerater3   Ú(_complain_multiple_hidden_parameter_setsÚisdigit)rÃ   Úresolved_idsÚ	id_countsÚ
parametersÚparamrí  rì  Ú
duplicatesrl   Úid_suffixesÚindexrC  r�   Únew_ids                 rT   Úmake_unique_parameterset_idsÚ$IdMaker.make_unique_parameterset_ids„  sD  € ô ˜D×-Ñ-Ó/Ó0ˆäˆ|Ó¤¤C¨Ó$5Ó 6Ô6ä Ó-ˆIà×7Ñ7×9Ñ9Ø!ŸY™Y t§}¡}Ó5�
Ø $§	¡	Ø?C×?QÒ?QÓRÒ?Q°e”Xœd 5§<¡<Ó0Ö1Ñ?QÑRó!�ð —i‘iñ  ÙKWó ó �ð "ŸY™Yñ 'à%.§_¡_Ô%6ó'ó �
ô
 —o’oð +%ð &*§[¡[ Mð 2%Ø%/ Lð 1%Ø%2 Oð 4%Ø%( Eð *%Ø%/ Lð 1ð
'ó 
÷ ‘U“Wð ô —o‘o×2Ñ2°3Ó7Ð7ô +6´cÓ*:ˆKä& |Ö4‘	�Ø‘= 1Õ$Øœ\Ò)Ø×EÑEÔGØ�FÞ˜b ™fŸn™n×.Ñ.Ø!$˜Ø "˜t F 8¨K©OÐ+<Ð=�FØ ¤C¨Ó$5Ó5Ø#›¨1Ñ,›Ø$& 4¨ x°±Ð/@Ð!A˜ð !¤C¨Ó$5Õ5ð +1 Ñ'Ø“O qÑ(•Oñ 5ô �<Ó ¤C¬¨LÓ(9Ó$:Ó:ð 	
Ø,˜|™oÐ.ó	
Ð:ð ÐùòU Ss   Â(Ic                ó°   • U R                   c  gU R                   R                  S5      nUc  U R                   R                  S5      n[        [        U5      $ )NFrQ   Ústrict)rf   r”   r   rP   )rÃ   rQ   s     rT   rý  Ú+IdMaker._strict_parametrization_ids_enabledÇ  sN   € Ø�;‰;ÑØØ%)§[¡[×%7Ñ%7Ð8TÓ%UÐ"Ø%Ñ-Ø)-¯©×);Ñ);¸HÓ)EÐ&Ü”DÐ4Ó5Ð5rV   c           
   #  ó^  ^ ^#   • [        T R                  5       GH  u  mnUR                  bA  UR                  [        L a
  [        v •  M1  [	        UR                  T R
                  5      v •  MU  T R                  (       al  T[        T R                  5      :  aS  T R                  T   bC  T R                  T   [        L a
  [        v •  M¯  T R                  T R                  T   T5      v •  MÒ  SR                  UU 4S j[        UR                  T R                  SS9 5       5      v •  GM     g7f)z;Resolve IDs for all ParameterSets (may contain duplicates).NÚ-c              3  óL   >#   • U  H  u  pTR                  XT5      v •  M     g 7fr�   )Ú_idval)rž   ÚvalÚargnameÚidxrÃ   s      €€rT   r    Ú'IdMaker._resolve_ids.<locals>.<genexpr>à  s,   øé € ð ò)™˜ð —K‘K ¨c×2Ð2ò)ùs   ƒ!$T©r  )r  rí  rC  r3   Ú_ascii_escaped_by_configrf   rì  rü  Ú_idval_from_value_requiredrè   Úzipr1  rw   )rÃ   Úparametersetr  s   ` @rT   rû  ÚIdMaker._resolve_idsÏ  sÛ   ùé € ä!*¨4×+=Ñ+=×!>ÑˆC�Ø�‰Ñ*à—?‘?¤lÒ2Ü&Ô&ä2°<·?±?ÀDÇKÁKÓPÔPØ——˜c¤C¨¯©£MÓ1°d·h±h¸s±mÑ6Oà—8‘8˜C‘=¤LÒ0Ü&Ô&à×9Ñ9¸$¿(¹(À3¹-ÈÓMÔMð —h‘hõ ä(+Ø$×+Ñ+¨T¯]©]À4ò)óó õ ò "?ùs   „D)D-c                óª   • U R                  XU5      nUb  U$ U R                  X5      nUb  U$ U R                  U5      nUb  U$ U R                  X#5      $ )z-Make an ID for a parameter in a ParameterSet.)Ú_idval_from_functionÚ_idval_from_hookÚ_idval_from_valueÚ_idval_from_argname)rÃ   r  r  r  Úidvals        rT   r  ÚIdMaker._idvalç  sf   € à×)Ñ)¨#¸Ó<ˆØÑØˆLØ×%Ñ% cÓ3ˆØÑØˆLØ×&Ñ& sÓ+ˆØÑØˆLØ×'Ñ'¨Ó5Ð5rV   c                ó  • U R                   c  g U R                  U5      nUc  gU R                  U5      $ ! [         aD  nU R                  b  U R                   S3OSnSnXgR                  X#5      -   n[	        U5      UeSnAff = f)zbTry to make an ID for a parameter in a ParameterSet using the
user-provided id callable, if given.Nú: rø  zJerror raised while trying to determine id of parameter '{}' at position {})rë  rb  rk   r\  Ú
ValueErrorr#  )rÃ   r  r  r  rC  rh  Úprefixrl   s           rT   r!  ÚIdMaker._idval_from_functionô  s�   € ð �9‰9ÑØð	)Ø—‘˜3“ˆBð ‰:ØØ×%Ñ% bÓ)Ð)øô ó 	)Ø+/¯;©;Ñ+B˜Ÿ™�} BÑ'ÈˆFØ^ˆCØŸ:™: gÓ3Ñ3ˆCÜ˜S“/ qÐ(ûð		)ús   �6 ¶
BÁ ?A?Á?Bc                ó†   • U R                   (       a0  U R                   R                  R                  U R                   XS9nU$ g)zkTry to make an ID for a parameter in a ParameterSet by calling the
:hook:`pytest_make_parametrize_id` hook.)rf   r  r  N)rf   ÚhookÚpytest_make_parametrize_id)rÃ   r  r  rC  s       rT   r"  ÚIdMaker._idval_from_hook  s>   € ð �;�;Ø!Ÿ[™[×-Ñ-×HÑHØ—{‘{¨ð Ið ˆBð ˆIØrV   c                ó  • [        U[        [        -  5      (       a  [        XR                  5      $ Ub*  [        U[
        [        -  [        -  [        -  5      (       a  [        U5      $ [        U[        R                  5      (       a  [        UR                  5      $ U[        L a   g[        U[        R                  5      (       a  [        U5      $ [        [!        USS5      [        5      (       a  [!        US5      nU$ g)zcTry to make an ID for a parameter in a ParameterSet from its value,
if the value type is supported.Nró   )r¯   r·   Úbytesr  rf   Úfloatr  rP   ÚcomplexÚreÚPatternr   rŸ   r"   ÚenumÚEnumr³   )rÃ   r  r[   s      rT   r#  ÚIdMaker._idval_from_value  sÁ   € ô �cœ3¤™;×'Ñ'Ü+¨C·±Ó=Ð=Ø‰[œJ s¬E´C©K¼$Ñ,>ÄÑ,H×IÑIÜ�s“8ˆOÜ˜œRŸZ™Z×(Ñ(Ü  §¡Ó-Ð-Ø”FŠ]àð ô ˜œTŸY™Y×'Ñ'Ü�s“8ˆOÜœ  Z°Ó6¼×<Ñ<ä  ZÓ0ˆDØˆKØrV   c                ó¦   • U R                  U5      nUb  U$ U R                  5       nU S[        U5       S[        U5      < SU S3n[	        USS9  g)zALike _idval_from_value(), but fails if the type is not supported.Nzids 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__.Fri   )r#  Ú_make_error_prefixr   rH   r8   )rÃ   r  r  rC  r*  rl   s         rT   r  Ú"IdMaker._idval_from_value_required"  sn   € à×#Ñ# CÓ(ˆØ‰>ØˆIð ×(Ñ(Ó*ˆàˆhÐ5´h¸s³m°_ÀHÌTÐRUËYÉMÐYdÐehÐdið jsð sð 	ô 	ˆS˜%Ó rV   c                ó0   • [        U 5      [        U5      -   $ )zfMake an ID for a parameter in a ParameterSet from the argument name
and the index of the ParameterSet.)r·   )r  r  s     rT   r$  ÚIdMaker._idval_from_argname0  s   € ô �7‹|œc #›hÑ&Ð&rV   c                ó<   • [        U R                  5        S35        g )Nzzmultiple instances of HIDDEN_PARAM cannot be used in the same parametrize call, because the tests names need to be unique.)r8   r:  rÊ   s    rT   r  Ú0IdMaker._complain_multiple_hidden_parameter_sets6  s#   € ÜØ×&Ñ&Ó(Ð)ð *9ð 9õ	
rV   c                óx   • U R                   b  SU R                    S3$ U R                  b  SU R                   S3$ g)NúIn r(  rø  )rê  rk   rÊ   s    rT   r:  ÚIdMaker._make_error_prefix=  s@   € Ø�>‰>Ñ%Ø˜Ÿ™Ð(¨Ð+Ð+Ø�[‰[Ñ$Ø˜Ÿ™˜ RÐ(Ð(àrV   rs   N)rò   úlist[str | _HiddenParam])rò   rP   )rò   zIterable[str | _HiddenParam])r  rK  r  r·   r  r  rò   r·   )r  rK  r  r·   r  r  rò   rñ  )r  rK  r  r·   rò   rñ  )r  rK  rò   rñ  )r  rK  r  r  rò   r·   )r  r·   r  r  rò   r·   )rò   r   ©rò   r·   )ró   rô   rõ   rö   r÷   Ú	__slots__Ú__annotations__r  rý  rû  r  r!  r"  r#  r  r  r$  r  r:  rú   rs   rV   rT   ré  ré  a  sŠ   ‡ ñ *ð€Ið Óà)Ó)ð 0Ó/à	'Ó'ð Óð Óð ÓôAôF6ôô06ô*ô ôô(!ð ó'ó ð'ô

÷rV   ré  c                  ó4  • \ rS rSr% Sr\R                  " \S9rS\	S'   \R                  " \S9r
S\	S'   \R                  " \S9rS\	S	'   \R                  " \S9rS
\	S'   \R                  " \S9rS\	S'                   SS jrSS jr\SS j5       rSrg)Ú	CallSpec2iF  zÜ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_factoryzdict[str, object]Úparamszdict[str, int]ÚindiceszMapping[str, Scope]Ú
_arg2scoperî  rB  z
list[Mark]Úmarksc          
     ó´  • U R                   R                  5       nU R                  R                  5       n	[        U R                  5      n
[        XSS9 H;  u  p¼X¸;   a%  [        R                  R                  U SU< 35      eXÈU'   XiU'   XZU'   M=     [        UU	U
U[        L a  U R                  O/ U R                  QUP/ U R                  Q[        U5      QS9$ )NTr  z: duplicate parametrization of )rJ  rK  rL  rB  rM  )rJ  ÚcopyrK  r>  rL  r  r   rX  rY  rH  r3   rB  rM  r6   )rÃ   rw   ÚvalsetrC  rM  rˆ  Úparam_indexrk   rJ  rK  Ú	arg2scoper}   r  s                rT   ÚsetmultiÚCallSpec2.setmulti]  sÙ   € ð —‘×!Ñ!Ó#ˆØ—,‘,×#Ñ#Ó%ˆÜ˜Ÿ™Ó)ˆ	Ü˜H°TÔ:‰HˆCØ‹}Ü—o‘o×2Ñ2Ø�hÐ=¸c¹WÐEóð ð �3‰KØ&�C‰LØ"�c‹Nñ ;ô ØØØ Ø$&¬,Ò$6�D—L’LÐ<O¸d¿l¹lÐ<OÈBÐ<OØ<�D—J‘JÐ<Ô!4°UÓ!;Ð<ñ
ð 	
rV   c                ó^   •  U R                   U   $ ! [         a  n[        U5      UeS nAff = fr�   )rJ  ÚKeyErrorr)  )rÃ   r[   rh  s      rT   ÚgetparamÚCallSpec2.getparam{  s3   € ð	*Ø—;‘;˜tÑ$Ð$øÜó 	*Ü˜TÓ"¨Ð)ûð	*ús   ‚ ‘
,›'§,c                ó8   • SR                  U R                  5      $ )Nr  )rè   rB  rÊ   s    rT   rC  ÚCallSpec2.id�  s   € à�x‰x˜Ÿ™Ó%Ð%rV   rs   N)rw   úIterable[str]rP  zIterable[object]rC  zstr | _HiddenParamrM  zIterable[Mark | MarkDecorator]rˆ  r@   rQ  r  rk   r·   rò   rH  )r[   r·   rò   rK  rD  )ró   rô   rõ   rö   r÷   ÚdataclassesÚfieldr>  rJ  rF  rK  rL  ÚtuplerB  r¹   rM  rS  rW  rø   rC  rú   rs   rV   rT   rH  rH  F  sä   ‡ ñð !,× 1Ò 1À$Ñ G€FÐÓGà)×/Ò/ÀÑE€Gˆ^ÓEð '2×&7Ò&7ÈÑ&M€JÐ#ÓMà(×.Ò.¸uÑE€Gˆ]ÓEà#×)Ò)¸$Ñ?€Eˆ:Ó?ð
ð  ð
ð !ð	
ð
 ð
ð .ð
ð ð
ð ð
ð ð
ð 
ô
ô<*ð ó&ó ó&rV   rH  c                ó   • U R                   $ r�   )r  )r‚  s    rT   Úget_direct_param_fixture_funcr`  †  s   € Ø�=‰=ÐrV   c                  óè   • \ rS rSrSr  SSS.         SS jjjr   SSS.             SS jjjr          SS	 jr        SS
 jr      SS jr	      SS jr
SS jrSrg)rW   iŽ  zã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©r8  c               óÌ   • [        U5        Xl        X0l        XPl        UR                  U l        UR                  U l        X@l        UR                  U l
        / U l        0 U l        g r�   )r)   r]   rf   r™   rt   r“  Únames_closureÚfixturenamesrÇ   Úname2fixturedefsÚ_arg2fixturedefsr?  Ú_params_directness)rÃ   r]   r7  rf   rÇ   r™   r8  s          rT   rŸ  ÚMetafunc.__init__—  sd   € ô 	�yÔ!ð %Œð Œð Œð #Ÿ™ˆŒð (×5Ñ5ˆÔð Œà +× <Ñ <ˆÔð (*ˆŒàLNˆÕrV   )r\   c               ó>  • U R                   R                  n[        R                  " UUU R                  U R
                  U R                   R                  S9u  pASU;   a  [        U S3SS9  Ub-  [        R                  " USU R                  R                   3S9n	O[        XR                  U5      n	U R                  X5        U(       a,  UR                  (       a  UR                  R                  n
U
b  U
nU R                  XX€R                   R                  S9nU(       a5  UR                  (       a$  W
c!  [         R#                  UR                  S	U5        U R%                  X5      nU R&                  R)                  U5        SnU	[        R*                  L a  SnO¢U R                   R,                  nUc   e[/        Xé5      nUcW  U	[        R0                  L a  [3        U[4        5      (       d   eUnO*U	[        R6                  L a  UR8                  nO
 S
U 35       e0 nUR:                  R=                  [>        U5      nU HS  nUU   S:X  a  M  Ub  UU;   a  UU   nO&[A        U R
                  SU[B        U	SSSS9nUb  UUU'   U/U R                  U'   MU     / nU RD                  =(       d    [G        5       / H]  n[I        [K        XHSS95       HC  u  nu  nnURM                  UURN                  UURP                  U	UUS9nURS                  U5        ME     M_     UU l"        g)a¯
  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 at test setup time instead.

Can be called multiple times per test function (but only on different
argument names), 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.

    .. versionadded:: 8.4
        :ref:`hidden-param` means to hide the parameter set
        from the test name. Can only be used at most 1 time, as
        test names need to be unique.

    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.
)rk   r‚  zM: 'request' is a reserved name and cannot be used in @pytest.mark.parametrizeFri   Nzparametrize() call in )ÚdescrÚ_param_ids_generatedzUnhandled missing scope: Úindirectrø  T)rf   Úbaseidr  r‡  rˆ  rJ  rì  r8  r  )rw   rP  rC  rM  rˆ  rQ  rk   )*r]   rk   r/   Ú_for_parametrizer“  rf   r8   r@   Ú	from_userró   Ú_find_parametrized_scoperg  Ú_validate_if_using_arg_namesÚ_param_ids_fromrl  Ú_resolve_parameter_set_idsrK  Ú__setattr__Ú_resolve_args_directnessrh  rÙ   ro   r‰   r-   r°   r¯   r¤   r‡   r‘   ÚstashÚ
setdefaultÚname2pseudofixturedef_keyr*   r`  r?  rH  r  r  rS  r1  rM  ræ   )rÃ   rw   Ú	argvaluesrm  rì  rˆ  r\   rk   rí  Úscope_Úgenerated_idsÚarg_directnessrÄ   Úname2pseudofixturedefr»   rI   r  Ú
fixturedefÚnewcallsr:  rQ  Úparam_idÚ	param_setÚnewcallspecs                           rT   rY   ÚMetafunc.parametrize¼  s  € ðZ —‘×'Ñ'ˆä".×"?Ò"?ØØØ�M‰MØ�K‰KØ—?‘?×)Ñ)ñ#
Ñˆð à˜Ó ÜØ�(ÐgÐhØòð
 ÑÜ—_’_ØÐ5°d·m±m×6LÑ6LÐ5MÐNñ‰Fô .¨h×8MÑ8MÈxÓXˆFà×)Ñ)¨(Ô=ö ˜;×6×6Ø'×7Ñ7×LÑLˆMØÑ(Ø#�à×-Ñ-Ø˜=·±×1GÑ1Gð .ð 
ˆö
 ˜;×6×6¸=Ñ;PÜ×Ñ˜{×:Ñ:Ð<RÐTWÔXð ×6Ñ6°xÓJˆØ×Ñ×&Ñ& ~Ô6ð
 ˆð ”U—^‘^Ò#Ø$(Ñ!àŸ™×.Ñ.ˆIØÑ(Ð(Ð(Ü! )Ó4ˆDØ‰|ð œUŸ[™[Ò(Ü% i´×8Ñ8Ð8Ð8Ø$‘Dð œuŸ}™}Ò,Ø$×,Ñ,‘DàEÐ$=¸e¸WÐ"EÓE˜5Ø24ˆGØ$(§J¡J×$9Ñ$9Ü)¨7ó%Ð!ó  ˆGØ˜gÑ&¨*Ó4ÙØ$Ñ0°WÐ@UÓ5UØ2°7Ñ;‘
ä'ØŸ;™;ØØ#Ü6Ø ØØØ"ñ	�
ð )Ñ4Ø5?Ð)¨'Ñ2Ø.8¨\ˆD×!Ñ! 'Ó*ñ%  ð. ˆØŸ™×4¬	« }Ò4ˆHÜ6?Ü�C¨tÑ4ö7Ñ2�Ñ2˜h¨	ð '×/Ñ/Ø%Ø$×+Ñ+ØØ#Ÿ/™/Ø Ø +Ø!ð 0ð �ð —‘ Ö,ó7ñ 5ð ˆ�rV   c           
     ó  • Uc  SnSnO=[        U5      (       a  UnSnO(SnU R                  X#U R                  R                  5      n[	        UUUUU R
                  UU R                  R                  S9nUR                  5       $ )aÒ  Resolve the actual ids for the given parameter sets.

:param argnames:
    Argument names passed to ``parametrize()``.
:param ids:
    The `ids` parameter of the ``parametrize()`` call (see docs).
:param parametersets:
    The parameter sets, each containing a set of values corresponding
    to ``argnames``.
:param nodeid str:
    The nodeid of the definition item that generated this
    parametrization.
:returns:
    List with ids for each parameter set given.
N)rk   rê  )r  Ú_validate_idsr“  ró   ré  rf   r  )rÃ   rw   rì  rí  rk   rë  Úids_Úid_makers           rT   rt  Ú#Metafunc._resolve_parameter_set_idsz  s…   € ð, ‰;ØˆDØ‰DÜ�c�]‰]ØˆDØ‰DàˆDØ×%Ñ% c¸$¿-¹-×:PÑ:PÓQˆDÜØØØØØ�K‰KØØ—m‘m×,Ñ,ñ
ˆð ×4Ñ4Ó6Ð6rV   c                óZ  •  [        U5      nU[        U5      :w  a,  US:w  a&  Sn[        UR	                  U[        U5      U5      SS9  [        [        R                  " X5      5      $ ! [         a9     [        U5        O! [         a  n[        S5      UeS nAff = f[        U5      n Nœf = f)Nz%ids must be a callable or an iterabler   zDIn {}: {} parameter sets specified, with different number of ids: {}Fri   )rü  Ú	TypeErrorÚiterr8   r\  r¹   Ú	itertoolsÚislice)rÃ   rì  rí  rê  Únum_idsrh  rl   s          rT   r†  ÚMetafunc._validate_ids¤  s¤   € ð	)Ü˜#“hˆGð ”c˜-Ó(Ó(¨W¸«\ØXˆCÜ�—‘˜I¤s¨=Ó'9¸7ÓCÈUÒSä”I×$Ò$ SÓ2Ó3Ð3øô ó 	)ðPÜ�S•	øÜó PÜÐ GÓHÈaÐOûðPúä˜-Ó(ŠGð	)ús5   ‚A' Á'
B*Á2A>Á=B*Á>
BÂBÂBÂB*Â)B*c                ó¦  • [        U[        5      (       a   [        R                  X(       a  SOS5      nU$ [        U[        5      (       aO  [        R                  US5      nU H1  nXA;  a%  [        SU R                  R                   SU S3SS9  SX4'   M3     U$ [        SU R                  R                   S[        U5      R                   3SS9  W$ )	aÆ  Resolve if each parametrized argument must be considered an indirect
parameter to a fixture of the same name, or a direct parameter to the
parametrized function, based on the ``indirect`` parameter of the
parametrized() call.

:param argnames:
    List of argument names passed to ``parametrize()``.
:param indirect:
    Same as the ``indirect`` parameter of ``parametrize()``.
:returns
    A dict mapping each arg name to either "indirect" or "direct".
rm  ÚdirectrA  z: indirect fixture 'z' doesn't existFri   z1: expected Sequence or boolean for indirect, got )	r¯   rP   r>  Úfromkeysr   r8   r“  ró   rH   )rÃ   rw   rm  r}  r}   s        rT   rv  Ú!Metafunc._resolve_args_directnessº  sÜ   € ô$ �h¤×%Ñ%Ü!Ÿ]™]Ø­™*°hóˆNð$ Ðô ˜¤(×+Ñ+Ü!Ÿ]™]¨8°XÓ>ˆNÛ�ØÓ&ÜØ˜dŸm™m×4Ñ4Ð5Ð5IÈ#ÈÈoÐ^Ø %òð '1�Ó#ñ  ð Ðô Ø�d—m‘m×,Ñ,Ð-ð .&Ü&*¨8£n×&=Ñ&=Ð%>ð@àòð
 ÐrV   c           
     óL  • [        [        U R                  5      5      nU R                  R                  nU Hj  nXPR                  ;  d  M  XS;   a  [        SU SU S3SS9  M,  [        U[        5      (       a
  XR;   a  SOSnOU(       a  SOSn[        SU SU S	U S
3SS9  Ml     g)a  Check 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.
rA  z&: function already takes an argument 'z' with a default valueFri   ÚfixtureÚargumentz: function uses no z 'Ú'N)r&  r   r“  ró   re  r8   r¯   r   )rÃ   rw   rm  Údefault_arg_namesrê  r}   r[   s          rT   rr  Ú%Metafunc._validate_if_using_arg_namesá  sª   € ô  Ô 5°d·m±mÓ DÓEÐØ—M‘M×*Ñ*ˆ	ÛˆCØ×+Ñ+Õ+ØÓ+ÜØ˜i˜[Ð(NÈsÈeÐSiÐjØ %ôô
 " (¬H×5Ñ5Ø,/«O™yÀ™æ,4™y¸*˜ÜØ˜i˜[Ð(;¸D¸6ÀÀCÀ5ÈÐJØ %ôò rV   c                ó²   • U R                   R                  5        H9  u  pUS:X  d  M  [        U R                  5       H  u  p4X4R                  U'   M     M;     g )Nr’  )rh  r'  r  r?  rK  )rÃ   r  Ú
param_typeÚir:  s        rT   r@  Ú)Metafunc._recompute_direct_params_indicesÿ  sJ   € Ø#'×#:Ñ#:×#@Ñ#@Ö#BÑˆGØ˜XÕ%Ü#,¨T¯[©[Ö#9‘K�AØ01×$Ñ$ WÓ-ó $:ò $CrV   )	rg  r?  rh  rÇ   rf   r]   re  r“  r™   )NN)
r]   r<  r7  zfixtures.FuncFixtureInforf   r&   r8  rP   rò   r™  )FNN)rw   zstr | Sequence[str]rz  z2Iterable[ParameterSet | Sequence[object] | object]rm  úbool | Sequence[str]rì  ú?Iterable[object | None] | Callable[[Any], object | None] | Nonerˆ  z_ScopeName | Noner\   zMark | Nonerò   r™  )
rw   rî  rì  r   rí  rï  rk   r·   rò   rC  )rì  zIterable[object | None]rí  rï  rê  r·   rò   zlist[object | None])rw   rî  rm  rŸ  rò   z(dict[str, Literal['indirect', 'direct']])rw   rî  rm  rŸ  rò   r™  r˜  )ró   rô   rõ   rö   r÷   rŸ  rY   rt  r†  rv  rr  r@  rú   rs   rV   rT   rW   rW   Ž  sj  † ñð Øð#Oð  ñ#Oà&ð#Oð .ð#Oð ð	#Oð ð#Oð 
ö#OðR */ØOSØ#'ð|ð $(ñ|à%ð|ð Fð|ð 'ð	|ð
 Mð|ð !ð|ð !ð|ð 
ö|ð|(7àð(7ð Mð(7ð .ð	(7ð
 ð(7ð 
"ô(7ðT4à$ð4ð .ð4ð ð	4ð
 
ô4ð,%àð%ð 'ð%ð 
2ô	%ðNàðð 'ðð 
ô	÷<2rV   c                ób  • [        U[        5      (       a  [        U5      [        U 5      :H  nO[        U5      nU(       a[  U=(       d    0 nUR	                  5        VVs/ s H  u  pVXP;   d  M  US   R
                  PM     nnn[        U[        R                  S9$ [        R                  $ s  snnf )ai  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.
rù  )rI   )	r¯   r   rü  rP   r'  Ú_scopeÚminr@   ro   )rw   Úarg2fixturedefsrm  Úall_arguments_are_fixturesÚfixturedefsr[   r  Úused_scopess           rT   rq  rq    s�   € ô �(œH×%Ñ%Ü%(¨£]´c¸(³mÑ%CÑ"ä%)¨(£^Ð"æ!Ø%×+¨ˆð %0×$5Ñ$5Ô$7ô
â$7Ñ �ØÑó "ˆJ�r‰N×!Ô!Ù$7ð 	ñ 
ô �;¬¯©Ñ7Ð7ä�>‰>Ðùó
s   ÁB+Á-B+c                óX   • Uc  SnOUR                  S5      nU(       a  U $ [        U 5      $ )NFrO   )r”   r   )r  rf   Úescape_options      rT   r  r  &  s1   € Ø�~Ø‰àŸ™ØRó
ˆö  ˆ3Ð7¤]°3Ó%7Ð7rV   c                  óô   ^ • \ rS rSrSrSrSS\SSSS4               SU 4S jjjr\SU 4S jj5       r	SS jr
\S 5       r\S	 5       rS
 rS r\S 5       rSS jrSS jrSS jr    SS jrSrU =r$ )ro   i3  aH  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 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]``).
FNc
                ó
  >• [         TU ]  XX7S9  U[        La  XPl        [	        USS 5      U l        U	=(       d    UU l        U R                  R                  [        U R                  5      5        U(       a+  X@l        U R                  R                  UR                  5        U R                  R                  S U R                   5       5        U R                  R                  U R                  R                  5        U(       a  U R                  R                  U5        Uc<  U R                   R"                  n
U
R%                  X R                  U R&                  5      nX€l        UR*                  U l        U R/                  5         g )N)rf   r‘   Ú__self__c              3  ó<   #   • U  H  oR                   U4v •  M     g 7fr�   rZ   rÐ   s     rT   r    Ú$Function.__init__.<locals>.<genexpr>z  s   é € ÐLÒ;K°4Ÿi™i¨Õ.Ò;KùrÓ   )ru  rŸ  r"   rÎ   r³   Ú	_instancer;  rÖ   r×   r1   rt   r:  rM  rØ   rÙ   r#  r‘   rs  ÚgetfixtureinforÇ   rv   rd  re  Ú_initrequest)rÃ   r[   r‰   rf   r:  r6  rØ   r‘   r7  r;  Úfmrw  s              €rT   rŸ  ÚFunction.__init__S  s#  ø€ ô 	‰Ñ˜¨fÐÑFàœ&Ò ØŒIÜ$ W¨j¸$Ó?ˆDŒNð )×0¨DˆÔð
 	×Ñ×ÑÔ 2°4·8±8Ó <Ô=ÞØ$ŒMØ×Ñ×#Ñ# H§N¡NÔ3ð 	�‰×ÑÑL¸4×;KÒ;KÓLÔLØ�‰×Ñ˜TŸX™X×.Ñ.Ô/ÞØ�M‰M× Ñ  Ô*àÑØ—‘×-Ñ-ˆBØ×+Ñ+¨D·(±(¸D¿H¹HÓEˆKØ-8ÔØ'×5Ñ5ˆÔØ×ÑÕrV   c                ó(   >• [         TU ]  " SSU0UD6$ )r¿  r‰   rs   rÀ  )rÇ   r‰   rÁ  rw  s      €rT   rˆ   ÚFunction.from_parent‡  s   ø€ ô ‰wÒ"Ñ7¨&Ð7°BÑ7Ð7rV   c                óF   • 0 U l         [        R                  " U SS9U l        g )NTrb  )ru   r   Ú
TopRequestÚ_requestrÊ   s    rT   r±  ÚFunction._initrequestŒ  s   € Ø+-ˆŒÜ ×+Ò+¨D¸DÑAˆ�rV   c                ó,   • [        U R                  5      $ )z$Underlying python 'function' object.)r   rt   rÊ   s    rT   r“  ÚFunction.function�  s   € ô ˜Ÿ™Ó"Ð"rV   c                óâ   •  U R                   $ ! [         aV    [        U R                  [        5      (       a"  U R                  5       U l          U R                   $ S U l          U R                   $ f = fr�   )r¯  ÚAttributeErrorr¯   r‰   r°   Ú_getinstancerÊ   s    rT   rË   ÚFunction.instance•  s`   € ð	&Ø—>‘>Ð!øÜó 	&Ü˜$Ÿ+™+¤u×-Ñ-à!%×!2Ñ!2Ó!4�•ð �~‰~Ðð "&�•Ø�~‰~Ðð	&ús   ‚ Ž>A.ÁA.Á-A.c                óv   • [        U R                  [        5      (       a  U R                  R                  5       $ g r�   )r¯   r‰   r°   rÄ  rÊ   s    rT   r¾  ÚFunction._getinstance¡  s)   € Ü�d—k‘k¤5×)Ñ)à—;‘;×*Ñ*Ó,Ð,àrV   c                óš   • U R                   nUb  UnO%U R                  c   eU R                  R                  n[        X R                  5      $ r�   )rË   r‰   rt   r³   r;  )rÃ   rË   Ú
parent_objs      rT   rÔ   ÚFunction._getobj¨  sD   € Ø—=‘=ˆØÑØ!‰Jà—;‘;Ñ*Ð*Ð*ØŸ™Ÿ™ˆJÜ�z×#4Ñ#4Ó5Ð5rV   c                ó   • U $ )zA(compatonly) for code expecting pytest-2.2 style request objects.rs   rÊ   s    rT   Ú_pyfuncitemÚFunction._pyfuncitem±  s	   € ð ˆrV   c                ó6   • U R                   R                  U S9  g)z%Execute the underlying test function.)r{   N)r˜   r€   rÊ   s    rT   ÚruntestÚFunction.runtest¶  s   € à�
‰
×%Ñ%°Ð%Ò6rV   c                ó8   • U R                   R                  5         g r�   )r¸  Ú_fillfixturesrÊ   s    rT   r¤  ÚFunction.setupº  s   € Ø�‰×#Ñ#Õ%rV   c                ó’  • [        U S5      (       Ga*  U R                  R                  SS5      (       Gd  [        R                  R
                  R                  [        U R                  5      5      nUR                  UR                  pCUR                  nUR                  X4S9nXe:X  a2  UR                  US9nXe:X  a  UR                  [        5      nU(       d  UnUR                  U5      nU R                  R                  SS5      S:X  a0  [        U5      S:”  a!  [!        US	   /S
 USS  5       QUS   P75      nU$ UR                  $ )NrÎ   Ú	fulltraceF)r„   Úfirstlinenorƒ   ÚtbstyleÚautorT  r   c              3  óB   #   • U  H  oR                  S 5      v •  M     g7f)rQ  N)Úwith_repr_style)rž   Úts     rT   r    Ú-Function._traceback_filter.<locals>.<genexpr>Ò  s   é € ÐSÒBR¸Q×/Ñ/°×8Ð8ÒBRùs   ‚r¨   rù  )rx   rf   rU  Ú_pytestÚ_codeÚCodeÚfrom_functionr   rt   r„   rÐ  r_  Úcutr`  r   rü  r   )rÃ   ÚexcinfoÚcoder„   rÐ  r_  Ú
ntracebacks          rT   Ú_traceback_filterÚFunction._traceback_filter½  s,  € Ü�4˜× Ò ¨¯©×)>Ñ)>¸{ÈE×)RÒ)RÜ—=‘=×%Ñ%×3Ñ3´MÀ$Ç(Á(Ó4KÓLˆDØ $§	¡	¨4×+;Ñ+;�+Ø×)Ñ)ˆIØ"Ÿ™¨D˜ÐJˆJØÓ&Ø'Ÿ^™^°˜^Ð6�
ØÓ*Ø!+×!2Ñ!2Ô3CÓ!D�JÞ%Ø%.˜
Ø#×*Ñ*¨7Ó3ˆJð �{‰{×$Ñ$ Y°Ó7¸6ÓAÜ�z“? QÓ&Ü!*à& q™MðáSÀ*ÈQÈrÑBRÓSðð ' r™Nñó"�Jð ÐØ× Ñ Ð rV   c                óh   • U R                   R                  SS5      nUS:X  a  SnU R                  XS9$ )NrÑ  rÒ  ÚlongrR  )rf   rU  Ú_repr_failure_py)rÃ   rÜ  rS  s      rT   Úrepr_failureÚFunction.repr_failureÛ  s:   € ð —‘×%Ñ% i°Ó8ˆØ�F‹?ØˆEØ×$Ñ$ WÐ$Ð:Ð:rV   )rv   r¯  rÎ   r¸  r:  re  ru   r;  )r[   r·   rf   rð  r:  zCallSpec2 | NonerØ   zMapping[str, Any] | Noner‘   zSession | Noner7  zFuncFixtureInfo | Noner;  rñ  rò   r™  rá  r˜  )rÜ  úExceptionInfo[BaseException]rò   r   )rÜ  ræ  rò   zstr | TerminalRepr)ró   rô   rõ   rö   r÷   rÕ   r"   rŸ  r  rˆ   r±  rø   r“  rË   r¾  rÔ   rÆ  rÉ  r¤  rß  rä  rú   rš  r›  s   @rT   ro   ro   3  s
  ø† ñð: €Nð !%Ø%)ØØ-1Ø"&Ø.2Ø#'ð1àð1ð ð	1ð
 #ð1ð +ð1ð  ð1ð ,ð1ð !ð1ð 
÷1ð 1ðh ö8ó ð8ôBð ñ#ó ð#ð ñ	ó ð	òò6ð ñó ðô7ô&ô!ð<;à-ð;ð 
÷;ò ;rV   c                  ó&   • \ rS rSrSrSS jr\rSrg)r<  iå  z�This class is a stop gap solution until we evolve to have actual function
definition nodes and manage to get rid of ``metafunc``.c                ó   • [        S5      e)Nz8function definitions are not supposed to be run as tests)ÚRuntimeErrorrÊ   s    rT   rÉ  ÚFunctionDefinition.runtesté  s   € ÜÐUÓVÐVrV   rs   Nr˜  )ró   rô   rõ   rö   r÷   rÉ  r¤  rú   rs   rV   rT   r<  r<  å  s   † ñ?ôWð ƒErV   r<  )rS   r(   rò   r™  )r`   rW   rò   r™  )rf   r&   rò   r™  )rk   r·   rò   r™  )r{   ro   rò   úobject | None)r„   r   r‰   r³  rò   znodes.Collector | None)r—   r   r‰   r³  rò   zModule | None)r„   r   r£   r[  rò   rP   )r�   r   rò   r¤   )r»   zModule | Classr[   r·   rt   rK  rò   zHNone | nodes.Item | nodes.Collector | list[nodes.Item | nodes.Collector])r„   r   rf   r&   r˜  )rt   rK  rº  r[  rò   rë  rJ  )r‚  r+   rò   r   )rw   rî  r¤  z3Mapping[str, Sequence[fixtures.FixtureDef[object]]]rm  rŸ  rò   r@   )r  zstr | bytesrf   rð  rò   r·   )Žr÷   Ú
__future__r   ÚabcÚcollectionsr   r   Úcollections.abcr   r   r   r	   r
   r   r\  r6  r  Ú	functoolsr   r´   r�  rä   Úpathlibr   r4  rþ  ÚtypesÚtypingr   r   r   r   r   r   ry   r×  r   r   Ú_pytest._coder   r   Ú_pytest._code.coder   r   r   Ú_pytest._io.safereprr   Ú_pytest.compatr   r   r   r   r    r!   r"   r$   r%   Ú_pytest.configr&   r'   Ú_pytest.config.argparsingr(   Ú_pytest.deprecatedr)   Ú_pytest.fixturesr*   r+   r,   r-   Ú_pytest.mainr.   Ú_pytest.markr/   Ú_pytest.mark.structuresr0   r1   r3   r4   r5   r6   Ú_pytest.outcomesr8   r9   Ú_pytest.pathlibr;   r<   r=   r>   Ú_pytest.scoper?   r@   Ú_pytest.stashrA   Ú_pytest.warning_typesrB   rC   Útyping_extensionsrD   rU   rb   rg   rm   r€   rŒ   rš   r“   r–   r¼   ÚNoder¾   rü   Ú	frozensetÚunionÚdirÚ
ModuleTyper(  rX  ÚABCr  rl  ÚFiler¤   Ú	Directoryr‡   r�  rŒ  r°   rÇ  rÈ  Ú	dataclassré  rH  r`  r>  r·   ry  rW   rq  r  ÚItemro   r<  rs   rV   rT   Ú<module>r     sF  ðá =å "ã 
Ý Ý #Ý $Ý %Ý $Ý $Ý #Ý $Û Û Û Ý Û Û Û 	Ý Û 	Û Û Ý Ý Ý Ý Ý Ý  Û ã Ý Ý Ý *Ý %Ý ,Ý +Ý (Ý )Ý (Ý 0Ý (Ý $Ý ,Ý &Ý !Ý 'Ý 'Ý !Ý #Ý ,Ý -Ý 'Ý +Ý ,Ý +Ý  Ý %Ý 0Ý 6Ý 0Ý (Ý 1Ý 7Ý !Ý !Ý &Ý 'Ý 3Ý #Ý $Ý Ý "Ý 9Ý <ö Ý&ô!ôHPô
ô(
ñ 
�$Ñóó ðð(Ø
ðØ'ðàôôôBô
8ñ 
�$Ñð Øð Ø%(ð Ø/5ð àMó ó ð ôFK%�—‘ô K%÷d Ñ Ø—_‘_ÙƒKáˆ×Ò˜Ó(Ó)â.áˆÓá‰‹Óó
Ð ð ôQ�*˜eŸo™o¨s¯w©wô Qðh5Ø
ð5àô5ôpP
ˆU�Z‰Z˜ô P
ôfP ˆe�o‰oô P ôf	ôôg
ˆKô g
ôTôð Ø×Ó˜dÑ#÷`ð `ó $ó ð`ðF Ø×Ó˜dÑ#÷;&ð ;&ó $ó ð;&ô|ð
 % T¨#¨z¸#©Ð*>Ñ%?Ò@ÓBÐ ð ÷t2ð t2ó ðt2ðnØðàHðð #ðð ô	ô@
8ôo;ˆz˜5Ÿ:š:ô o;ôd˜õ rV   