§
    øÛg•ë  ã                   ót  — d Z ddlZddlZddlZddlZddlZddlmZ ddlZddl	Z	ddl
mZ ddlZddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZ ej                              ej!        ¦  «         "                    ¦   «         Z#ej                              ej!         $                    d¦  «        ¦  «        Z%d„ Z&d	„ Z'd
„ Z(d„ Z)d„ Z*d„ Z+ e	j,        d¬¦  «        d„ ¦   «         Z- e	j,        d¬¦  «        d„ ¦   «         Z.d„ Z/d„ Z0 e	j,        d¬¦  «        d„ ¦   «         Z1d„ Z2 G d„ de3¦  «        Z4 G d„ de4¦  «        Z5 G d„ de5e	j6        ¦  «        Z7d„ Z8d„ Z9 G d„ d e	j:        e7¦  «        Z;dBd!„Z<d"„ Z= G d#„ d$e7¦  «        Z> G d%„ d&e7¦  «        Z? G d'„ d(e5¦  «        Z@ G d)„ d*e@e7¦  «        ZAd+„ ZBd,„ ZC G d-„ d.e3¦  «        ZD G d/„ d0ejE        ¦  «        ZFd1„ ZGdBd2„ZHdBd3„ZIdCd4„ZJd5„ ZKd6„ ZLd7„ ZMd8„ ZNd9„ ZO G d:„ d;e3¦  «        ZP G d<„ d=e3¦  «        ZQ G d>„ d?e3¦  «        ZR G d@„ dAe@e	jS        ejE        ¦  «        ZTdS )Dz9 Python test discovery, setup and run of test functions. é    N©Úcount)ÚMarkerError)Úfixtures)ÚisclassÚ
isfunctionÚis_generatorÚ_escape_stringsÚ
REGEX_TYPEÚSTRING_TYPESÚNoneTypeÚNOTSETÚget_real_funcÚgetfslinenoÚsafe_getattrÚgetlocationÚenumÚocc                 óÚ   — | j         j        j        j        }d|v od|v }|rdS t          j                             | j        ¦  «        }|t          k    o|                     t          ¦  «         S )Nú<ú>F)
ÚframeÚcodeÚrawÚco_filenameÚpyÚpathÚlocalÚcutdir1ÚreltoÚcutdir2)ÚentryÚraw_filenameÚis_generatedÚps       úD/granary/edev/quantum/lib/python3.11/site-packages/_pytest/python.pyÚfilter_tracebackr'      sj   € ð ”;Ô#Ô'Ô3€LØ˜,Ð&Ð>¨3°,Ð+>€LØð Øˆuõ 	Œ�Š�e”jÑ!Ô!€AØ•Š<Ð0 §¢­Ñ 0Ô 0Ð0Ð0ó    c                 ób   ‡ — ˆ fd„}d‰                       ¦   «         ›d�}t          |d d |¦  «        S )Nc                 ój   •— |                       t          t          ‰¦  «        ¦  «        }|�|j        S d S ©N)Ú	getparentÚgetattrÚpytestÚobj)ÚselfÚnodeÚnames     €r&   Úgetzpyobj_property.<locals>.get-   s3   ø€ Ø�~Š~�g¥f¨dÑ3Ô3Ñ4Ô4ˆØÐØ”8ˆOð Ðr(   zpython z3 object this node was collected from (can be None).)ÚlowerÚproperty)r2   r3   Údocs   `  r&   Úpyobj_propertyr7   ,   sM   ø€ ðð ð ð ð ð ð
 �*Š*‰,Œ,ˆ,ˆ,ð€Cå�C˜˜t SÑ)Ô)Ð)r(   c                 ó¢  — |                       d¦  «        }|                     dddddd¬¦  «         |                     d	dd
dd¬¦  «         |                      ddg d¬¦  «         |                      ddddgd¬¦  «         |                      dddgd¬¦  «         |                      dddgd¬¦  «         |                     ddddgdd¬¦  «         d S ) NÚgeneralz
--fixturesz
--funcargsÚ
store_trueÚshowfixturesFz4show available fixtures, sorted by plugin appearance)ÚactionÚdestÚdefaultÚhelpz--fixtures-per-testÚshow_fixtures_per_testzshow fixtures per testÚusefixturesÚargsz5list of default fixtures to be used with this project)Útyper>   r?   Úpython_filesz	test_*.pyz	*_test.pyz9glob-style file patterns for Python test module discoveryÚpython_classesÚTestz6prefixes or glob names for Python test class discoveryÚpython_functionsÚtestzDprefixes or glob names for Python test function and method discoveryú--import-modeÚprependÚappendÚ
importmodezNprepend/append to sys.path when importing test modules, default is to prepend.)r>   Úchoicesr=   r?   )ÚgetgroupÚ	addoptionÚaddini)ÚparserÚgroups     r&   Úpytest_addoptionrS   6   sP  € Ø�OŠO˜IÑ&Ô&€EØ	‡O‚O�L ,Ø"¨ÀØJð ñ Lô Lð Lð 
‡O‚OØØØ%ØØ%ð ñ ô ð ð ‡M‚M�- f°bØDð ñ Fô Fð Fà
‡M‚M�. vØ˜kÐ*ØHð ñ Jô Jð Jð ‡M‚MÐ"¨¸&¸ØEð ñ Gô Gð Gà
‡M‚MÐ$¨6¸F¸9ð ð ñ !ô !ð !ð 
‡O‚O�O¨YØ˜HÐ%¨Lð&ð ñ 'ô 'ð 'ð 'ð 'r(   c                 óz   — | j         j        rt          | ¦  «         dS | j         j        rt          | ¦  «         dS d S ©Nr   )Úoptionr;   r@   ©Úconfigs    r&   Úpytest_cmdline_mainrY   S   sL   € Ø„}Ô!ð Ý�VÑÔÐØˆqØ„}Ô+ð Ý˜vÑ&Ô&Ð&Øˆqðð r(   c                 ó  — g d¢}|D ]F}t          | j        |¦  «        r/d}t          |                     | j        j        |¦  «        ¦  «        ‚ŒG	 | j        j        }n# t          $ r Y d S w xY w|D ]} | j        |j        i |j        ¤Ž Œd S )N)ÚparameterizeÚparametriseÚparameterisez/{0} has '{1}', spelling should be 'parametrize')	ÚhasattrÚfunctionr   ÚformatÚ__name__ÚparametrizeÚAttributeErrorrB   Úkwargs)ÚmetafuncÚalt_spellingsÚattrÚmsgÚmarkersÚmarkers         r&   Úpytest_generate_testsrk   \   sÐ   € ð DÐCÐC€MØð Lð LˆÝ�8Ô$ dÑ+Ô+ð 	LØCˆCÝ˜cŸjšj¨Ô):Ô)CÀTÑJÔJÑKÔKÐKð	LðØÔ#Ô/ˆˆøÝð ð ð Øˆˆðøøøàð <ð <ˆØˆÔ˜fœkÐ;¨V¬]Ð;Ð;Ð;Ð;ð<ð <s   ÁA Á
A*Á)A*c                 ó^   — |                       dd¦  «         |                       dd¦  «         d S )Nri   aÕ  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 http://pytest.org/latest/parametrize.html for more info and examples.z™usefixtures(fixturename1, fixturename2, ...): mark tests as needing all of the specified fixtures. see http://pytest.org/latest/fixture.html#usefixtures )Úaddinivalue_linerW   s    r&   Úpytest_configurern   k   sM   € Ø
×Ò˜Ið	ñ	ô 	ð 	ð ×Ò˜Ið	`ñô ð ð ð r(   T)Útrylastc                  ó–   — t           j        j        t          _        t          t          t
          t          t          t          t          dœdœS )N)ÚModuleÚClassÚInstanceÚFunctionÚ	Generator)ÚraisesÚapproxÚcollect)
r.   ÚfailÚ	Exceptionrv   rw   rq   rr   rs   rt   ru   © r(   r&   Úpytest_namespacer|   {   s=   € å”{Ô,…FÔåÝåÝÝ Ý Ý"ð
ð 
ð
ð 
ð 
r(   c                 ó¨   — | j         }|                      ¦   «         r || j        Ž  n+| j        }i }| j        j        D ]}||         ||<   Œ |di |¤Ž dS )NTr{   )r/   Ú_isyieldedfunctionÚ_argsÚfuncargsÚ_fixtureinfoÚargnames)Ú
pyfuncitemÚtestfunctionr€   ÚtestargsÚargs        r&   Úpytest_pyfunc_callr‡   ‹   s|   € à”>€LØ×$Ò$Ñ&Ô&ð !Øˆ�jÔ&Ð'Ð'Ð'àÔ&ˆØˆØÔ*Ô3ð 	*ð 	*ˆCØ$ SœMˆH�S‰MˆMØˆÐ Ð �xÐ Ð Ð Øˆ4r(   c                 ó"  — | j         }|dk    r�|j                             | ¦  «        s6|j                             d¦  «        D ]}|                      |¦  «        r nŒd S |j                             | ¦  «        }|                     | |¬¦  «        S d S )Nú.pyrD   ©r   Úparent)ÚextÚsessionÚ
isinitpathrX   ÚgetiniÚfnmatchÚgethookproxyÚpytest_pycollect_makemodule)r   r‹   rŒ   ÚpatÚihooks        r&   Úpytest_collect_filer•   ˜   s£   € Ø
Œ(€CØ
ˆe‚|€|ØŒ~×(Ò(¨Ñ.Ô.ð 	Ø”}×+Ò+¨NÑ;Ô;ð ð �Ø—<’< Ñ$Ô$ð Ø�Eðð ˆvØ”×+Ò+¨DÑ1Ô1ˆØ×0Ò0°dÀ6Ð0ÑJÔJÐJð €|r(   c                 ó"   — t          | |¦  «        S r+   )rq   rŠ   s     r&   r’   r’   ¤   s   € Ý�$˜ÑÔÐr(   )Úhookwrapperc              #   óÀ  K  — d V —}|                      ¦   «         }|�t          ‚t          |¦  «        rO|                      ||¦  «        r7|                      d¦  «        }|                      ||| ¬¦  «        ¦  «         d S d S |                      ||¦  «        rÄt          |d|¦  «        }t          |¦  «        s8t          t          |¦  «        ¦  «        s|  
                    dd|z  ¬¦  «         d S t          |dd¦  «        r]t          |¦  «        rt          || ¬¦  «        }n#t          |                      ||¦  «        ¦  «        }|                     |¦  «         d S d S d S )	Nrr   )r‹   Ú__func__ÚC2z/cannot collect %r because it is not a function.)r   ÚmessageÚ__test__T)Ú
get_resultÚStopIterationr   ÚistestclassÚ_getcustomclassÚforce_resultÚistestfunctionr-   r   r   Úwarnr	   ru   ÚlistÚ_genfunctions)Ú	collectorr2   r/   ÚoutcomeÚresrr   s         r&   Úpytest_pycollect_makeitemr©   §   s£  è è € àˆeˆe€GØ
×
Ò
Ñ
Ô
€CØ
€ÝÐåˆs�|„|ð &Ø× Ò   dÑ+Ô+ð 	@Ø×-Ò-¨gÑ6Ô6ˆEØ× Ò    t°IÐ!>Ñ!>Ô!>Ñ?Ô?Ð?Ð?Ð?ð	@ð 	@ð 
×	!Ò	! # tÑ	,Ô	,ð &å�c˜: sÑ+Ô+ˆõ ˜3‘”ð 		&¥:­m¸CÑ.@Ô.@Ñ#AÔ#Að 		&Ø�NŠN ØAØñð ñ ô ð ð ð õ �S˜* dÑ+Ô+ð 	&Ý˜CÑ Ô ð ?Ý ¨YÐ7Ñ7Ô7��å˜9×2Ò2°4¸Ñ=Ô=Ñ>Ô>�Ø× Ò  Ñ%Ô%Ð%Ð%Ð%ð&ð &ð	&ð 	&r(   c                 ó   — d S r+   r{   ©rX   Úvals     r&   Úpytest_make_parametrize_idr­   Ã   s   € Øˆ4r(   c                   óP   — e Zd Z ed¦  «        Z ed¦  «        Z ed¦  «        ZdS )ÚPyobjContextrq   rr   rs   N)ra   Ú
__module__Ú__qualname__r7   ÚmoduleÚclsÚinstancer{   r(   r&   r¯   r¯   È   s;   € € € € € Øˆ^˜HÑ%Ô%€FØ
ˆ.˜Ñ
!Ô
!€CØˆ~˜jÑ)Ô)€H€H€Hr(   r¯   c                   óB   — e Zd Zd„ Z e¦   «         Zd„ Zd	d„Zd„ Zd„ ZdS )
Ú
PyobjMixinc                  ó2   — d„ } d„ }t          | |d d¦  «        S )Nc                 ób   — t          | dd ¦  «        }|€|                      ¦   «         x| _        }|S ©NÚ_obj)r-   Ú_getobjrº   ©r0   r/   s     r&   ÚfgetzPyobjMixin.obj.<locals>.fgetÏ   s1   € Ý˜$ ¨Ñ-Ô-ˆCØˆ{Ø"&§,¢,¡.¤.Ð0�”	˜CØˆJr(   c                 ó   — || _         d S r+   )rº   )r0   Úvalues     r&   ÚfsetzPyobjMixin.obj.<locals>.fsetÔ   s   € ØˆDŒIˆIˆIr(   zunderlying python object)r5   )r½   rÀ   s     r&   r/   zPyobjMixin.objÎ   s5   € ð	ð 	ð 	ð
	ð 	ð 	å˜˜d DÐ*DÑEÔEÐEr(   c                 ó@   — t          | j        j        | j        ¦  «        S r+   )r-   r‹   r/   r2   ©r0   s    r&   r»   zPyobjMixin._getobjÙ   s   € Ý�t”{”¨¬	Ñ2Ô2Ð2r(   TFc                 óä  — |                       ¦   «         }|                     ¦   «          g }|D ]…}t          |t          ¦  «        rŒ|j        }t          |t
          ¦  «        r<|                     d¦  «        sJ ‚|dd…         }|r|r|                     |¦  «          n|                     |¦  «         Œ†|                     ¦   «          d                     |¦  «        }| 	                    dd¦  «        S )z7 return python path relative to the containing module. r‰   Néýÿÿÿú.z.[ú[)
Ú	listchainÚreverseÚ
isinstancers   r2   rq   ÚendswithrK   ÚjoinÚreplace)r0   ÚstopatmoduleÚincludemoduleÚchainÚpartsr1   r2   Úss           r&   Ú
getmodpathzPyobjMixin.getmodpathÜ   sñ   € à—’Ñ Ô ˆØ�Š‰ŒˆØˆØð 	ð 	ˆDÝ˜$¥Ñ)Ô)ð ØØ”9ˆDÝ˜$¥Ñ'Ô'ð Ø—}’} UÑ+Ô+Ð+Ð+Ð+Ø˜C˜R˜C”y�Øð Ø$ð +ØŸš TÑ*Ô*Ð*Ø�EØ�LŠL˜ÑÔÐÐØ�Š‰ŒˆØ�HŠH�U‰OŒOˆØ�yŠy˜˜sÑ#Ô#Ð#r(   c                 ó*   — t          | j        ¦  «        S r+   )r   r/   rÂ   s    r&   Ú_getfslinenozPyobjMixin._getfslinenoñ   s   € Ý˜4œ8Ñ$Ô$Ð$r(   c                 ó\  — | j         }t          |dd ¦  «        }t          |t          ¦  «        r>t          j        |j                 j        }|                     d¦  «        r
|d d…         }|}nt          |¦  «        \  }}|  
                    ¦   «         }t          |t          ¦  «        sJ ‚|||fS )NÚcompat_co_firstlinenoz.pycéÿÿÿÿ)r/   r-   rÉ   ÚintÚsysÚmodulesr°   Ú__file__rÊ   r   rÒ   )r0   r/   rÖ   ÚfspathÚlinenoÚmodpaths         r&   Ú
reportinfozPyobjMixin.reportinfoô   s«   € àŒhˆÝ '¨Ð-DÀdÑ KÔ KÐÝÐ+­SÑ1Ô1ð 	.å”[ ¤Ô0Ô9ˆFØ�Š˜vÑ&Ô&ð %Ø   œ�Ø*ˆFˆFå(¨Ñ-Ô-‰NˆF�FØ—/’/Ñ#Ô#ˆÝ˜&¥#Ñ&Ô&Ð&Ð&Ð&Ø�v˜wÐ&Ð&r(   N)TF)ra   r°   r±   r/   r»   rÒ   rÔ   rß   r{   r(   r&   r¶   r¶   Í   st   € € € € € ðFð Fð Fð ˆ#‰%Œ%€Cð3ð 3ð 3ð$ð $ð $ð $ð*%ð %ð %ð'ð 'ð 'ð 'ð 'r(   r¶   c                   óD   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚPyCollectorc                 ó.   — |                       d|¦  «        S )NrG   ©Ú_matches_prefix_or_glob_option©r0   r2   s     r&   ÚfuncnamefilterzPyCollector.funcnamefilter  s   € Ø×2Ò2Ð3EÀtÑLÔLÐLr(   c                 ó(   — t          |dd¦  «        du S )zg Look for the __test__ attribute, which is applied by the
        @nose.tools.istest decorator
        rœ   FT)r   r¼   s     r&   Ú
isnosetestzPyCollector.isnosetest	  s   € õ ˜C ¨UÑ3Ô3°tÐ;Ð;r(   c                 ó.   — |                       d|¦  «        S )NrE   rã   rå   s     r&   ÚclassnamefilterzPyCollector.classnamefilter  s   € Ø×2Ò2Ð3CÀTÑJÔJÐJr(   c                 ó¤   — |                       |¦  «        s|                      |¦  «        o&t          |dd¦  «        ot          j        |¦  «        d u S )NÚ__call__F)ræ   rè   r   r   Úgetfixturemarker©r0   r/   r2   s      r&   r¢   zPyCollector.istestfunction  sX   € à× Ò  Ñ&Ô&Ð>¨$¯/ª/¸#Ñ*>Ô*>ð \Ý˜˜j¨%Ñ0Ô0ð\Ý5=Ô5NÈsÑ5SÔ5SÐW[Ð5[ð	
r(   c                 óV   — |                       |¦  «        p|                      |¦  «        S r+   )rê   rè   rî   s      r&   rŸ   zPyCollector.istestclass  s'   € Ø×#Ò# DÑ)Ô)ÐA¨T¯_ª_¸SÑ-AÔ-AÐAr(   c                 ó¸   — | j                              |¦  «        D ]>}|                     |¦  «        r dS d|v sd|v sd|v rt          j        ||¦  «        r dS Œ?dS )zs
        checks if the given name matches the prefix or glob-pattern defined
        in ini configuration.
        TÚ*ú?rÆ   F)rX   r�   Ú
startswithr�   )r0   Úoption_namer2   rV   s       r&   rä   z*PyCollector._matches_prefix_or_glob_option  s{   € ð
 ”k×(Ò(¨Ñ5Ô5ð 	ð 	ˆFØ�Š˜vÑ&Ô&ð Ø�t�tð ˜�-�- 3¨& = =°C¸6°M°MÝ”O D¨&Ñ1Ô1ð 5Bà�t�tøØˆur(   c                 ó  — t          | j        dd¦  «        sg S t          | j        di ¦  «        g}t          j        | j        j        ¦  «        D ]}|                     |j        ¦  «         Œi }g }|D ]y}t          |                     ¦   «         ¦  «        D ]U\  }}||v rŒ
d||<   |  	                    ||¦  «        }|€Œ(t          |t          ¦  «        s|g}|                     |¦  «         ŒVŒz|                     d„ ¬¦  «         |S )Nrœ   TÚ__dict__c                 ó:   — |                       ¦   «         d d…         S )Né   )rß   )Úitems    r&   ú<lambda>z%PyCollector.collect.<locals>.<lambda>D  s   €  §¢Ñ 1Ô 1°"°1°"Ô 5€ r(   )Úkey)r-   r/   ÚinspectÚgetmroÚ	__class__rK   rö   r¤   ÚitemsÚmakeitemrÉ   ÚextendÚsort)	r0   ÚdictsÚbaseclsÚseenÚlÚdicr2   r/   r¨   s	            r&   rx   zPyCollector.collect.  s%  € Ý�t”x ¨TÑ2Ô2ð 	ØˆIõ ˜œ :¨rÑ2Ô2Ð3ˆÝ”~ d¤hÔ&8Ñ9Ô9ð 	+ð 	+ˆGØ�LŠL˜Ô)Ñ*Ô*Ð*Ð*ØˆØˆØð 
	ð 
	ˆCÝ! #§)¢)¡+¤+Ñ.Ô.ð 	ð 	‘	��cØ˜4�<�<ØØ!��T‘
Ø—m’m D¨#Ñ.Ô.�Ø�;ØÝ! #¥tÑ,Ô,ð  Ø˜%�CØ—’˜‘”��ð	ð 	
�ŠÐ5Ð5ˆÑ6Ô6Ð6Øˆr(   c                 ó<   — | j                              | ||¬¦  «        S )N)r¦   r2   r/   )r”   r©   )r0   r2   r/   s      r&   r   zPyCollector.makeitemG  s(   € àŒz×3Ò3Ø ¨3ð 4ñ 0ô 0ð 	0r(   c           
   #   ól  K  — |                       t          ¦  «        j        }|                       t          ¦  «        }|r|j        pd }t	          |||¦  «         | j        j        }|                     | ||¦  «        }t          ||| j	        ||¬¦  «        }g }	t          |d¦  «        r|	                     |j        ¦  «         t          |d¦  «        r"|	                      |¦   «         j        ¦  «         |	r/| j        j                             |	t          |¬¦  «        ¦  «         n| j                             |¬¦  «         |                      d¦  «        }
|j        s |
|| |¬¦  «        V — d S t%          j        | ||¦  «         |j        D ]*}|›d|j        ›d�} |
|| ||||j        di|¬	¦  «        V — Œ+d S )
N)r³   r²   rk   )re   rt   )r‹   ÚfixtureinforÆ   ú]T)r2   r‹   ÚcallspecÚcallobjr
  ÚkeywordsÚoriginalname)r,   rq   r/   rr   Útransfer_markersr�   Ú_fixturemanagerÚgetfixtureinfoÚMetafuncrX   r^   rK   rk   r”   Ú
call_extraÚdictr    Ú_callsr   Úadd_funcarg_pseudo_fixture_defÚid)r0   r2   Úfuncobjr²   Úclscolr³   Úfmr
  re   Úmethodsrt   r  Úsubnames                r&   r¥   zPyCollector._genfunctionsL  s  è è € Ø—’¥Ñ'Ô'Ô+ˆØ—’¥Ñ&Ô&ˆØÐ#˜œÐ+ tˆÝ˜ # vÑ.Ô.Ð.ØŒ\Ô)ˆØ×'Ò'¨¨g°sÑ;Ô;ˆÝ˜G [°$´+Ø #¨Fð4ñ 4ô 4ˆàˆÝ�6Ð2Ñ3Ô3ð 	9Ø�NŠN˜6Ô7Ñ8Ô8Ð8Ý�3Ð/Ñ0Ô0ð 	8Ø�NŠN˜3˜3™5œ5Ô6Ñ7Ô7Ð7Øð 	@ØŒJÔ,×7Ò7¸Ý8<ÀhÐ8OÑ8OÔ8OñQô Qð Qð Qð ŒJ×,Ò,°hÐ,Ñ?Ô?Ð?à×'Ò'¨
Ñ3Ô3ˆØŒð 	!Ø�(˜4¨¸+ÐFÑFÔFÐFÐFÐFÐFÐFõ Ô3°D¸(ÀBÑGÔGÐGà$œOð !ð !�Ø&* d d¨H¬K¨K¨KÐ8�Ø�h G°DØ(0¸'Ø+6Ø)1¬°TÐ(:Ø,0ð	!ñ !ô !ð !ð !ð !ð !ð!ð !r(   N)ra   r°   r±   ræ   rè   rê   r¢   rŸ   rä   rx   r   r¥   r{   r(   r&   rá   rá     s¤   € € € € € ðMð Mð Mð<ð <ð <ðKð Kð Kð
ð 
ð 
ðBð Bð Bðð ð ð ð ð ð20ð 0ð 0ð
"!ð "!ð "!ð "!ð "!r(   rá   c                 ó’   — 	 t          | |j        ¦  «        }n# t          $ r Y dS w xY w|j        |j        k    o|j        |j        k    S )z¯ Returns True if :func: is already marked with :mark:, False otherwise.
    This can happen if marker is applied to class and the test file is
    invoked more than once.
    F)r-   r2   rc   rB   rd   )ÚfuncÚmarkÚ	func_marks      r&   Ú_markedr"  q  sZ   € ð
Ý˜D $¤)Ñ,Ô,ˆ	ˆ	øÝð ð ð ØˆuˆuðøøøàŒ9˜	œÒ&ÐJ¨4¬;¸)Ô:JÒ+JÐJs   ‚ ˜
&¥&c                 óè   — ||fD ]l}	 |j         }n# t          $ r Y Œw xY wt          |t          ¦  «        r!|D ]}t	          | |¦  «        s || ¦  «         ŒŒQt	          | |¦  «        s || ¦  «         Œmd S r+   )Ú
pytestmarkrc   rÉ   r¤   r"  )r  r³   ÚmodÚholderr$  r   s         r&   r  r  }  s»   € ð ˜�*ð $ð $ˆð	ØÔ*ˆJˆJøÝð 	ð 	ð 	ØˆHð	øøøå�j¥$Ñ'Ô'ð 	$Ø"ð "ð "�Ý˜w¨Ñ-Ô-ð "Ø�D˜‘M”M�Møð"õ ˜7 JÑ/Ô/ð $Ø�
˜7Ñ#Ô#Ð#øð$ð $s   ˆ�
œc                   ó4   ‡ — e Zd ZdZd„ Zˆ fd„Zd„ Zd„ Zˆ xZS )rq   z+ Collector for test classes and functions. c                 ó8   — |                       d| j        ¦  «        S r¹   )Ú_memoizedcallÚ_importtestmodulerÂ   s    r&   r»   zModule._getobj�  s   € Ø×!Ò! &¨$Ô*@ÑAÔAÐAr(   c                 ó�   •— | j         j                             | ¦  «         t          t          | ¦  «                             ¦   «         S r+   )r�   r  ÚparsefactoriesÚsuperrq   rx   ©r0   rþ   s    €r&   rx   zModule.collect’  s8   ø€ ØŒÔ$×3Ò3°DÑ9Ô9Ð9Ý•V˜TÑ"Ô"×*Ò*Ñ,Ô,Ð,r(   c                 óÐ  — | j                              d¦  «        }	 | j                             |¬¦  «        }�n# t          $ rF |                      t          j                             ¦   «          	                    d¬¦  «        ¦  «        ‚| j        j
        $ r7 t          j        ¦   «         d         }|                      d|j        z  ¦  «        ‚t          $ r; t          j        ¦   «         \  }}}|                      d| j        ›d|p|›d	�¦  «        ‚t          j        j        $ r"}|j        r‚ |                      d
¦  «        ‚d }~ww xY w| j         j                             |¦  «         |S )NrI   )ÚensuresyspathÚshort©Ústyleé   zèimport file mismatch:
imported module %r has this __file__ attribute:
  %s
which is not the same as the test file we want to collect:
  %s
HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modulesz)ImportError while importing test module 'z'.
Original error message:
'z?'
Make sure your test modules/packages have valid Python names.zŽUsing @pytest.skip outside of a test (e.g. as a test function decorator) is not allowed. Use @pytest.mark.skip or @pytest.mark.skipif instead.)rX   Ú	getoptionrÜ   ÚpyimportÚSyntaxErrorÚCollectErrorÚ_pytestÚ_codeÚExceptionInfoÚgetreprÚImportMismatchErrorrÙ   Úexc_inforB   ÚImportErrorÚrunnerÚSkippedÚallow_module_levelÚpluginmanagerÚconsider_module)r0   rL   r%  ÚeÚ	exc_classÚexcÚ_s          r&   r*  zModule._importtestmodule–  s§  € à”[×*Ò*¨?Ñ;Ô;ˆ
ð 	Ø”+×&Ò&°ZÐ&Ñ@Ô@ˆC‰CøÝð 	Fð 	Fð 	FØ×#Ò#Ý”×+Ò+Ñ-Ô-×5Ò5¸GÐ5ÑDÔDñFô Fð FàŒ{Ô.ð 	ð 	ð 	Ý”‘”˜qÔ!ˆAØ×#Ò#ð=ð ”6ññ	ô 	ð 	õ ð 	ð 	ð 	Ý #¤¡¤ÑˆI�s˜AØ×#Ò#Ð#ð ”;�;�; Ð 0 yÐ 0Ð 0ð2ñô ð õ Œ~Ô%ð 	ð 	ð 	ØÔ#ð ØØ×#Ò#ð/ñô ð øøøøð	øøøð 	ŒÔ!×1Ò1°#Ñ6Ô6Ð6Øˆ
s   œ9 ¹C)EÄ"D?Ä?Ec                 ó   — t          | j        d¦  «        }|€t          | j        d¦  «        }|�
 |¦   «          t          | j        d¦  «        }|€t          | j        d¦  «        }|�|                      |¦  «         d S d S )NÚsetUpModuleÚsetup_moduleÚtearDownModuleÚteardown_module)Ú_get_xunit_setup_teardownr/   Úaddfinalizer)r0   rK  rM  s      r&   ÚsetupzModule.setup½  s�   € Ý0°´¸=ÑIÔIˆØÐÝ4°T´X¸~ÑNÔNˆLØÐ#ØˆL‰NŒNˆNå3°D´HÐ>NÑOÔOˆØÐ"Ý7¸¼ÐBSÑTÔTˆOØÐ&Ø×Ò˜oÑ.Ô.Ð.Ð.Ð.ð 'Ð&r(   )	ra   r°   r±   Ú__doc__r»   rx   r*  rP  Ú__classcell__©rþ   s   @r&   rq   rq   �  so   ø€ € € € € Ø5Ð5ðBð Bð Bð-ð -ð -ð -ð -ð%ð %ð %ðN/ð /ð /ð /ð /ð /ð /r(   rq   c                 ó˜   ‡‡— ‰�‰n| Št          | |¦  «        Š‰�/‰j        j        }t          j        ‰¦  «        r|dz  }|rˆˆfd„S ‰S dS )a^  
    Return a callable to perform xunit-style setup or teardown if
    the function exists in the ``holder`` object.
    The ``param_obj`` parameter is the parameter which will be passed to the function
    when the callable is called without arguments, defaults to the ``holder`` object.
    Return ``None`` if a suitable callable is not found.
    Nr4  c                  ó   •—  ‰‰ ¦  «        S r+   r{   )Ú	param_objÚresults   €€r&   rú   z+_get_xunit_setup_teardown.<locals>.<lambda>Ú  s   ø€ ˜6˜6 )Ñ,Ô,€ r(   )Ú_get_xunit_funcÚ__code__Úco_argcountrü   Úismethod)r&  Ú	attr_namerV  Ú	arg_countrW  s     ` @r&   rN  rN  Ë  sv   øø€ ð 'Ð2�	�	¸€IÝ˜V YÑ/Ô/€FØÐØ”OÔ/ˆ	ÝÔ˜FÑ#Ô#ð 	Ø˜‰NˆIØð 	Ø,Ð,Ð,Ð,Ð,Ð,àˆMð Ðr(   c                 óT   — t          | |d¦  «        }t          j        |¦  «        €|S dS )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í   )r/   r2   Úmeths      r&   rX  rX  ß  s3   € õ
 �3˜˜dÑ#Ô#€DÝÔ  Ñ&Ô&Ð.Øˆð /Ð.r(   c                   ó   — e Zd ZdZd„ Zd„ ZdS )rr   z Collector for test methods. c                 ó(  — t          | j        ¦  «        r%|                      dd| j        j        z  ¦  «         g S t	          | j        ¦  «        r%|                      dd| j        j        z  ¦  «         g S  |                      d¦  «        d| ¬¦  «        gS )NÚC1zBcannot collect test class %r because it has a __init__ constructorzAcannot collect test class %r because it has a __new__ constructorrs   z())r2   r‹   )Úhasinitr/   r£   ra   Úhasnewr    rÂ   s    r&   rx   zClass.collectë  s®   € Ý�4”8ÑÔð 	Ø�IŠI�dð 'Ø)-¬Ô):ñ;ñ <ô <ð <àˆIÝ�D”HÑÔð 	Ø�IŠI�dð 2Ø48´HÔ4EñFñ Gô Gð GàˆIØ0�×$Ò$ ZÑ0Ô0°dÀ4ÐHÑHÔHÐIÐIr(   c                 óF  ‡ ‡— t          ‰ j        d¦  «        }|�2t          |d|¦  «        }t          |d|¦  «        } |‰ j        ¦  «         t          ‰ j        dd ¦  «        Š‰�=t          ‰d‰¦  «        Št          ‰d‰¦  «        Š‰                      ˆˆ fd„¦  «         d S d S )NÚsetup_classÚim_funcr™   Úteardown_classc                  ó$   •—  ‰ ‰j         ¦  «        S r+   )r/   )Ú	fin_classr0   s   €€r&   rú   zClass.setup.<locals>.<lambda>  s   ø€  i i°´Ñ&9Ô&9€ r(   )rX  r/   r-   rO  )r0   rf  rj  s   ` @r&   rP  zClass.setupö  sº   øø€ Ý% d¤h°Ñ>Ô>ˆØÐ"Ý! +¨y¸+ÑFÔFˆKÝ! +¨z¸;ÑGÔGˆKØˆK˜œÑ!Ô!Ð!å˜DœHÐ&6¸Ñ=Ô=ˆ	ØÐ Ý 	¨9°iÑ@Ô@ˆIÝ 	¨:°yÑAÔAˆIØ×ÒÐ9Ð9Ð9Ð9Ð9Ñ:Ô:Ð:Ð:Ð:ð !Ð r(   N)ra   r°   r±   rQ  rx   rP  r{   r(   r&   rr   rr   é  s;   € € € € € Ø'Ð'ð	Jð 	Jð 	Jð;ð ;ð ;ð ;ð ;r(   rr   c                   ó*   ‡ — e Zd Zd„ Zˆ fd„Zd„ Zˆ xZS )rs   c                 ó4   — | j                              ¦   «         S r+   )r‹   r/   rÂ   s    r&   r»   zInstance._getobj  s   € ØŒ{�ŠÑ Ô Ð r(   c                 ó�   •— | j         j                             | ¦  «         t          t          | ¦  «                             ¦   «         S r+   )r�   r  r,  r-  rs   rx   r.  s    €r&   rx   zInstance.collect  s8   ø€ ØŒÔ$×3Ò3°DÑ9Ô9Ð9Ý•X˜tÑ$Ô$×,Ò,Ñ.Ô.Ð.r(   c                 óB   — |                       ¦   «         | _        | j        S r+   )r»   r/   rÂ   s    r&   ÚnewinstancezInstance.newinstance  s   € Ø—<’<‘>”>ˆŒØŒxˆr(   )ra   r°   r±   r»   rx   ro  rR  rS  s   @r&   rs   rs     sV   ø€ € € € € ð!ð !ð !ð/ð /ð /ð /ð /ðð ð ð ð ð ð r(   rs   c                   ó8   ‡ — e Zd ZdZd„ Zd„ Zdˆ fd„	Zd	d„Zˆ xZS )
ÚFunctionMixinz: mixin for the code common to Function and Generator.
    c                 óÒ  — t          | d¦  «        r| j        }nYt          | j        t          ¦  «        r3| j                             ¦   «         }|                      ¦   «         | _        n| j        j        }t          j	        | j        ¦  «        rd}d}nd}d}t          ||| j        ¬¦  «        }|�
 |¦   «          t          ||| j        ¬¦  «        }|�|                      |¦  «         dS dS )z' perform setup for this test function. Ú_preservedparentÚsetup_methodÚteardown_methodÚsetup_functionÚteardown_function)rV  N)r^   rs  rÉ   r‹   rs   ro  r»   r/   rü   r[  rN  rO  )r0   r/   Ú
setup_nameÚteardown_nameÚsetup_func_or_methodÚteardown_func_or_methods         r&   rP  zFunctionMixin.setup  sû   € å�4Ð+Ñ,Ô,ð 	"ØÔ'ˆCˆCÝ˜œ¥XÑ.Ô.ð 	"Ø”+×)Ò)Ñ+Ô+ˆCØ—|’|‘~”~ˆDŒHˆHà”+”/ˆCÝÔ˜DœHÑ%Ô%ð 	0Ø'ˆJØ-ˆMˆMà)ˆJØ/ˆMÝ8¸¸jÐTXÔT\Ð]Ñ]Ô]ÐØÐ+Ø Ð Ñ"Ô"Ð"Ý";¸CÀÐZ^ÔZbÐ"cÑ"cÔ"cÐØ"Ð.Ø×ÒÐ5Ñ6Ô6Ð6Ð6Ð6ð /Ð.r(   c                 óp  — t          | d¦  «        �r| j        j        j        �st          j                             t          | j        ¦  «        ¦  «        }|j	        |j
        }}|j        }|                     ||¬¦  «        }||k    r:|                     |¬¦  «        }||k    r|                     t          ¦  «        }|s|}|                     ¦   «         |_        | j        j        j        dk    rCt!          |j        ¦  «        dk    r-|j        dd…         D ]}|                     d¦  «         Œd S d S d S d S d S )	Nrº   )r   Úfirstlineno)r   Úautorø   r4  r×   r1  )r^   rX   rV   Ú	fulltracer9  r:  ÚCoder   r/   r   r}  Ú	tracebackÚcutÚfilterr'   ÚtbstyleÚlenÚset_repr_style)r0   Úexcinfor   r   r}  r�  Ú
ntracebackr"   s           r&   Ú_prunetracebackzFunctionMixin._prunetraceback)  sT  € Ý�4˜Ñ Ô ñ 	6¨¬Ô);Ô)Eñ 	6Ý”=×%Ò%¥m°D´HÑ&=Ô&=Ñ>Ô>ˆDØ $¤	¨4Ô+;�+ˆDØÔ)ˆIØ"Ÿš¨D¸k˜ÑJÔJˆJØ˜YÒ&Ð&Ø'Ÿ^š^°˜^Ñ6Ô6�
Ø Ò*Ð*à!+×!2Ò!2Õ3CÑ!DÔ!D�JØ%ð /Ø%.˜
à *× 1Ò 1Ñ 3Ô 3ˆGÔð Œ{Ô!Ô)¨VÒ3Ð3Ý�wÔ(Ñ)Ô)¨AÒ-Ð-Ø!(Ô!2°1°R°4Ô!8ð 6ð 6˜Ø×,Ò,¨WÑ5Ô5Ð5Ð5ð'	6ð 	6ð 	6ð 	6ð  4Ð3Ø-Ð-ð6ð 6r(   Úlongc                 ó   •— |                      t          j        j        ¦  «        r0|j        j        s$t          j                             |j        ¦  «        S t          t          | ¦  «                             ||¬¦  «        S )Nr2  )Úerrisinstancer.   ry   rz   r¿   Úpytracer   Ú_builtinÚ_totextr-  rq  Ú_repr_failure_py)r0   r‡  r3  rþ   s      €r&   r�  zFunctionMixin._repr_failure_py?  so   ø€ Ø× Ò ¥¤Ô!6Ñ7Ô7ð 	:Ø”=Ô(ð :Ý”{×*Ò*¨7¬=Ñ9Ô9Ð9Ý•] DÑ)Ô)×:Ò:¸7Øð ;ñ ô ð 	r(   Nc                 óz   — |�
J d¦   «         ‚| j         j        j        }|dk    rd}|                      ||¬¦  «        S )NzXXX outerr usage is deprecatedr~  rŠ  r2  )rX   rV   r„  r�  )r0   r‡  Úouterrr3  s       r&   Úrepr_failurezFunctionMixin.repr_failureF  sF   € Øˆ~ˆ~Ð?‰~Œ~ˆ~Ø”Ô"Ô*ˆØ�FŠ?ˆ?ØˆEØ×$Ò$ W°EÐ$Ñ:Ô:Ð:r(   )rŠ  r+   )	ra   r°   r±   rQ  rP  r‰  r�  r“  rR  rS  s   @r&   rq  rq    sy   ø€ € € € € ðð ð7ð 7ð 7ð,6ð 6ð 6ð,ð ð ð ð ð ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;r(   rq  c                   ó   — e Zd Zd„ Zd„ ZdS )ru   c           	      óD  — ddl m} | j        j                             | ¦  «         | j        j        | _        g }i }t          |                      ¦   «         ¦  «        D ]Ã\  }}|  	                    |¦  «        \  }}}t          |¦  «        st          | j        ›d|›�¦  «        ‚|€d|z  }nd|z  }||v rt          | ›d|›�¦  «        ‚d||<   |                     |                      || ||¬¦  «        ¦  «         | j                             d	|j        | j        ¬
¦  «         ŒÄ|S )Nr   )Ú
deprecatedz yielded non callable test z[%d]z['%s']z& generated tests with non-unique name T)rB   r  rb  )Ú
fslocation)r9  r–  r�   Ú_setupstateÚpreparer‹   r/   rs  Ú	enumerateÚgetcallargsÚcallableÚ	TypeErrorÚ
ValueErrorrK   rt   rX   r£   ÚYIELD_TESTSrÜ   )	r0   r–  r  r  ÚiÚxr2   ÚcallrB   s	            r&   rx   zGenerator.collectO  sG  € ð 	'Ð&Ð&Ð&Ð&Ð&ØŒÔ ×(Ò(¨Ñ.Ô.Ð.à $¤¤ˆÔØˆØˆÝ˜dŸhšh™jœjÑ)Ô)ð 	Sð 	S‰DˆAˆqØ#×/Ò/°Ñ2Ô2ÑˆD�$˜Ý˜D‘>”>ð VÝÀDÄHÀHÀHÈdÈdÐ TÑUÔUÐUØˆ|Ø ‘z��à $‘�Ø�tˆ|ˆ|Ý ÐPTÐPTÐPTÐVZÐVZÐ![Ñ\Ô\Ð\ØˆD�‰JØ�HŠH�T—]’] 4¨°DÀ$�]ÑGÔGÑHÔHÐHØŒK×Ò˜T :Ô#9ÀdÄkÐÑRÔRÐRÐRØˆr(   c                 óâ   — t          |t          t          f¦  «        s|f}t          |d         t          j        j        ¦  «        r|d         }|dd …         }nd }|d         |dd …         }}|||fS )Nr   r4  )rÉ   Útupler¤   r   ÚbuiltinÚ_basestring)r0   r/   r2   r¢  rB   s        r&   r›  zGenerator.getcallargsh  sy   € Ý˜#¥¥t˜}Ñ-Ô-ð 	Ø�&ˆCå�c˜!”f�bœjÔ4Ñ5Ô5ð 	Ø�q”6ˆDØ�a�b�b”'ˆCˆCàˆDØ˜”V˜S   œWˆdˆØ�T˜4ÐÐr(   N)ra   r°   r±   rx   r›  r{   r(   r&   ru   ru   N  s2   € € € € € ðð ð ð2
 ð 
 ð 
 ð 
 ð 
 r(   ru   c                 óL   — t          | dd ¦  «        }|r|t          j        k    S d S )NÚ__init__)r-   Úobjectr¨  )r/   Úinits     r&   rc  rc  u  s2   € Ý�3˜
 DÑ)Ô)€DØð 'Ø•v”Ò&Ð&ð'ð 'r(   c                 óL   — t          | dd ¦  «        }|r|t          j        k    S d S )NÚ__new__)r-   r©  r¬  )r/   Únews     r&   rd  rd  {  s2   € Ý
�#�y $Ñ
'Ô
'€CØ
ð %Ø•f”nÒ$Ð$ð%ð %r(   c                   óH   — e Zd Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Zd„ Z	d„ Z
dS )	Ú	CallSpec2c                 ó¾   — || _         i | _        g | _        i | _        t          | _        t          ¦   «         | _        t          | _        i | _	        i | _
        i | _        d S r+   )re   r€   Ú_idlistÚparamsr   Ú	_globalidÚsetÚ_globalid_argsÚ_globalparamÚ_arg2scopenumr  Úindices)r0   re   s     r&   r¨  zCallSpec2.__init__‚  sS   € Ø ˆŒØˆŒØˆŒØˆŒÝˆŒÝ!™eœeˆÔÝ"ˆÔØˆÔØˆŒØˆŒˆˆr(   c                 óÞ  — t          | j        ¦  «        }|j                             | j        ¦  «         |j                             | j        ¦  «         |j                             | j        ¦  «         |j                             | j        ¦  «         |j                             | j        ¦  «         t          | j	        ¦  «        |_	        | j
        |_
        | j        |_        | j        |_        |S r+   )r¯  re   r€   Úupdater²  r  r¸  r·  r¤   r±  r³  rµ  r¶  )r0   re   Úcss      r&   ÚcopyzCallSpec2.copyŽ  s¿   € Ý�t”}Ñ%Ô%ˆØ
Œ×Ò˜4œ=Ñ)Ô)Ð)Ø
Œ	×Ò˜œÑ%Ô%Ð%Ø
Œ×Ò˜4œ=Ñ)Ô)Ð)Ø
Œ
×Ò˜$œ,Ñ'Ô'Ð'Ø
Ô×Ò Ô 2Ñ3Ô3Ð3Ý˜$œ,Ñ'Ô'ˆŒ
Ø”~ˆŒØ Ô/ˆÔØÔ+ˆŒØˆ	r(   c                 óN   — || j         v s	|| j        v rt          d|›�¦  «        ‚d S )Nz
duplicate )r²  r€   rž  )r0   r†   s     r&   Ú_checkargnotcontainedzCallSpec2._checkargnotcontained›  s8   € Ø�$”+ÐÐ ¨¬Ð!5Ð!5Ý�*¨c¨cÐ3Ñ4Ô4Ð4ð "6Ð!5r(   c                 ó†   — 	 | j         |         S # t          $ r' | j        t          u rt	          |¦  «        ‚| j        cY S w xY wr+   )r²  ÚKeyErrorr¶  r   rž  rå   s     r&   ÚgetparamzCallSpec2.getparamŸ  sZ   € ð	%Ø”;˜tÔ$Ð$øÝð 	%ð 	%ð 	%ØÔ ¥FÐ*Ð*Ý  Ñ&Ô&Ð&ØÔ$Ð$Ð$Ð$ð	%øøøs   ‚ �.A ¿A c           	      óx   — d                      t          t          t          d | j        ¦  «        ¦  «        ¦  «        S )Nú-)rË   ÚmapÚstrrƒ  r±  rÂ   s    r&   r  zCallSpec2.id§  s*   € à�xŠx��C¥¨¨d¬lÑ!;Ô!;Ñ<Ô<Ñ=Ô=Ð=r(   c                 ó"  — t          ||¦  «        D ]I\  }}	|                      |¦  «         ||         }
|	t          | |
¦  «        |<   || j        |<   || j        |<   ŒJ| j                             |¦  «         | j                             |¦  «         d S r+   )	Úzipr¾  r-   r¸  r·  r±  rK   r  rº  )r0   Úvaltypesr‚   Úvalsetr  r  ÚscopenumÚparam_indexr†   r¬   Úvaltype_for_args              r&   ÚsetmultizCallSpec2.setmulti«  sž   € å˜8 VÑ,Ô,ð 	/ð 	/‰GˆC�Ø×&Ò& sÑ+Ô+Ð+Ø& sœmˆOØ25�G�D˜/Ñ*Ô*¨3Ñ/Ø +ˆDŒL˜ÑØ&.ˆDÔ˜sÑ#Ð#ØŒ×Ò˜BÑÔÐØŒ×Ò˜XÑ&Ô&Ð&Ð&Ð&r(   c                 ó&  — |D ]}|                       |¦  «         Œ| j                             |¦  «         |t          ur| j                             |¦  «         |t          ur| j        t          u sJ ‚|| _        |D ]}t          j        | j	        |<   Œd S r+   )
r¾  r€   rº  r   r±  rK   r¶  r   Úscopenum_functionr·  )r0   r€   r  Úparamr¡  r†   s         r&   ÚsetallzCallSpec2.setall¶  s¶   € Øð 	*ð 	*ˆAØ×&Ò& qÑ)Ô)Ð)Ð)ØŒ×Ò˜XÑ&Ô&Ð&Ø•VÐÐØŒL×Ò Ñ#Ô#Ð#Ø�ÐÐØÔ$­Ð.Ð.Ð.Ð.Ø %ˆDÔØð 	Að 	AˆCÝ&.Ô&@ˆDÔ˜sÑ#Ð#ð	Að 	Ar(   N)ra   r°   r±   r¨  r¼  r¾  rÁ  r5   r  rÍ  rÑ  r{   r(   r&   r¯  r¯  �  sŽ   € € € € € ð
ð 
ð 
ðð ð ð5ð 5ð 5ð%ð %ð %ð ð>ð >ñ „Xð>ð	'ð 	'ð 	'ð
Að 
Að 
Að 
Að 
Ar(   r¯  c                   ó4   — e Zd ZdZdd„Z	 	 dd„Zdeefd„ZdS )	r  a   
    Metafunc objects are passed to the ``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.
    Nc                 óÂ   — || _         || _        || _        |j        | _        || _        g | _        t          j         	                    ¦   «         | _
        |j        | _        d S r+   )rX   r²   r_   Únames_closureÚfixturenamesr³   r  r   r¥  r´  Ú_idsÚname2fixturedefsÚ_arg2fixturedefs)r0   r_   r
  rX   r³   r²   s         r&   r¨  zMetafunc.__init__Ê  s\   € àˆŒð ˆŒð !ˆŒð (Ô5ˆÔð ˆŒàˆŒÝ”J—N’NÑ$Ô$ˆŒ	Ø +Ô <ˆÔÐÐr(   Fc                 ó²  — ddl m} ddlm} ddlm} g }	g }
|D ]:} ||¦  «        \  }}|	                     |¦  «         |
                     |¦  «         Œ;|	}t          |t          t          f¦  «        s>d„ | 
                    d¦  «        D ¦   «         }t          |¦  «        dk    rd„ |D ¦   «         }|skt          ft          |¦  «        z  g}t          | j        ¦  «        \  }}t          j                             d	|| j        j        ||fz  ¬
¦  «        }|j        |ig}
|€t)          || j        |¦  «        } ||d                     | j        ¦  «        ¬¦  «        }i }|D ]R}|| j        vrGt          |t          t          f¦  «        r	||v rdnd}n|rdnd}t3          | j        ›d|›d|›�¦  «        ‚ŒS|du rt4                               |d¦  «        }n€|du rt4                               |d¦  «        }n`t          |t          t          f¦  «        rDt4                               |d¦  «        }|D ]&}||vrt3          d| j        ›d|›d�¦  «        ‚d||<   Œ'd}t9          |¦  «        r|}d}|r¥t          |¦  «        t          |¦  «        k    r.t3          dt          |¦  «        t          |¦  «        fz  ¦  «        ‚|D ]T}|�Pt          |t:          j        j        ¦  «        s1d}t3          | ||¦  «        tA          |¦  «        j        fz  ¦  «        ‚ŒUtC          ||||| j"        ¦  «        }g }| j#        ptI          | ¦  «        gD ]‘}tK          |||
tM          ¦   «         ¦  «        }|D ]n\  }}}}t          |¦  «        t          |¦  «        k    sJ ‚| '                    | ¦  «        }| (                    |||||||¦  «         |                     |¦  «         ŒoŒ’|| _#        dS )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 rather at test setup time.

        :arg argnames: a comma-separated string denoting one or more argument
                       names, or a list/tuple of argument strings.

        :arg 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.

        :arg indirect: The list of argnames or boolean. A list of arguments'
            names (subset of argnames). 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.

        :arg ids: list of string ids, or a callable.
            If strings, each is corresponding to the argvalues so that they are
            part of the test id. If None is given as id of specific test, the
            automatically generated id for that argument will be used.
            If callable, it should take one argument (a single argvalue) and return
            a string or return None. If None, the automatically generated id for that
            argument will be used.
            If no ids are provided they will be generated automatically from
            the argvalues.

        :arg scope: if specified it denotes the scope of the parameters.
            The scope is used for grouping tests by parameter instances.
            It will also override any fixture-function defined scope, allowing
            to set a dynamic scope using test context or configuration.
        r   )Úscope2index)Úextract_argvalue)Úsafereprc                 ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r{   )Ústrip©Ú.0r¡  s     r&   ú
<listcomp>z(Metafunc.parametrize.<locals>.<listcomp>  s-   € ÐLÐLÐL aÀ!Ç'Â'Á)Ä)ÐL˜Ÿš™	œ	ÐLÐLÐLr(   ú,r4  c                 ó   — g | ]}|f‘ŒS r{   r{   )rà  r¬   s     r&   rá  z(Metafunc.parametrize.<locals>.<listcomp>  s   € Ð9Ð9Ð9¨˜c˜VÐ9Ð9Ð9r(   z0got empty parameter set %r, function %s at %s:%d)ÚreasonNzcall to {0})ÚdescrÚfixtureÚargumentz	 uses no ú Tr²  Fr€   zindirect given to z
: fixture z doesn't existz%d tests specified with %d idsz1ids must be list of strings, found: %s (type: %s)))Ú_pytest.fixturesrÚ  Ú_pytest.markrÛ  Úpy.iorÜ  rK   rÉ   r¤  r¤   Úsplitr…  r   r   r_   r.   r   Úskipra   ÚmarknameÚ_find_parametrized_scoperØ  r`   rb   rÕ  rž  r  Úfromkeysrœ  r   r¥  r¦  rC   ÚidmakerrX   r  r¯  rÇ  r   r¼  rÍ  ) r0   r‚   Ú	argvaluesÚindirectÚidsÚscoperÚ  rÛ  rÜ  Úunwrapped_argvaluesÚnewkeywordsÚmaybe_marked_argsÚargvalÚnewmarksÚfsrÝ   ÚnewmarkrÊ  rÈ  r†   r2   ÚidfnÚid_valuerh   Únewcallsr  ÚelementsÚa_idrÉ  r  rË  Únewcallspecs                                    r&   rb   zMetafunc.parametrizeÞ  s±  € ðN 	1Ð0Ð0Ð0Ð0Ð0Ø1Ð1Ð1Ð1Ð1Ð1Ø"Ð"Ð"Ð"Ð"Ð"à ÐØˆØ!*ð 	)ð 	)ÐØ/Ð/Ð0AÑBÔBÑˆF�HØ×&Ò& vÑ.Ô.Ð.Ø×Ò˜xÑ(Ô(Ð(Ð(Ø'ˆ	å˜(¥U­D MÑ2Ô2ð 	:ØLÐL¨8¯>ª>¸#Ñ+>Ô+>ÐLÑLÔLˆHÝ�8‰}Œ} Ò!Ð!Ø9Ð9¨yÐ9Ñ9Ô9�	Øð 	8Ý ˜¥S¨¡]¤]Ñ2Ð3ˆIõ % T¤]Ñ3Ô3‰JˆB�Ý”k×&Ò&ØIØ˜dœmÔ4°b¸&ðMBñ Bð 'ñ Cô CˆGð $Ô,¨gÐ6Ð7ˆKàˆ=Ý,¨X°tÔ7LÈhÑWÔWˆEà�;Ø˜×-Ò-¨dÔ.>Ñ?Ô?ðAñ Aô AˆàˆØð 	7ð 	7ˆCØ˜$Ô+Ð+Ð+Ý˜h­µ¨Ñ6Ô6ð AØ(+¨x¨¨˜9˜9¸Z�D�Dà(0Ð@˜9˜9°j�DÝ à œM˜M˜M¨4¨4¨4°°ð6ñ7ô 7ð 7ð ,ð �tÐÐÝ—}’} X¨xÑ8Ô8ˆHˆHØ˜ÐÐÝ—}’} X¨zÑ:Ô:ˆHˆHÝ˜¥5­$ -Ñ0Ô0ð 	)Ý—}’} X¨zÑ:Ô:ˆHØð )ð )�Ø˜hÐ&Ð&Ý$˜*Ø%)¤] ] ]°C°C°Cð&9ñ :ô :ð :à (�˜‘�ØˆÝ�C‰=Œ=ð 	ØˆDØˆCØð 	ZÝ�3‰xŒx�3˜y™>œ>Ò)Ð)Ý Ð!AÝ!$ Y¡¤µ°S±´ðD;ñ ";ñ <ô <ð <àð Zð Z�ØÐ'µ
¸8ÅRÄZÔE[Ñ0\Ô0\Ð'ØM�CÝ$ S¨H¨H°XÑ,>Ô,>ÅÀXÁÄÔ@WÐ+XÑ%XÑYÔYÐYøÝ�h 	¨4°°d´kÑBÔBˆØˆØœÐ8­	°$©¬Ð'8ð 	-ð 	-ˆHÝ˜3 	¨;½¹¼Ñ@Ô@ˆHØ7?ð -ð -Ñ3��f˜h¨Ý˜6‘{”{¥c¨(¡m¤mÒ3Ð3Ð3Ð3Ø&Ÿmšm¨DÑ1Ô1�Ø×$Ò$ X¨x¸ÀØ%-¨x¸ñFô Fð Fà—’ Ñ,Ô,Ð,Ð,ð-ð ˆŒˆˆr(   c                 óð  — |�t          |t          ¦  «        sJ ‚|�&|D ]"}|| j        vrt          j        d|z  ¦  «         Œ#ni }|€t          d¦  «        ‚|t          u rt          | j        ¦  «        }t          |¦  «        }|| j
        v rt          d|z  ¦  «        ‚| j
                             |¦  «         t          | ¦  «        }|                     |||¦  «         | j                             |¦  «         dS )a   (deprecated, use parametrize) Add a new call to the underlying
        test function during the collection phase of a test run.  Note that
        request.addcall() is called during the test collection phase prior and
        independently to actual test execution.  You should only use addcall()
        if you need to specify multiple arguments of a test function.

        :arg funcargs: argument keyword dictionary used when invoking
            the test function.

        :arg id: used for reporting and identification purposes.  If you
            don't supply an `id` an automatic unique id will be generated.

        :arg param: a parameter which will be exposed to a later fixture function
            invocation through the ``request.param`` attribute.
        Nz%funcarg %r not used in this function.zid=None not allowedzduplicate id %r)rÉ   r  rÕ  r.   ry   rž  r   r…  r  rÅ  rÖ  Úaddr¯  rÑ  rK   )r0   r€   r  rÐ  r2   r»  s         r&   ÚaddcallzMetafunc.addcallR  s  € ð  Ð¥:¨h½Ñ#=Ô#=ÐÐÐØÐØ ð Pð P�Ø˜tÔ0Ð0Ð0Ý”KÐ GÈ$Ñ NÑOÔOÐOøðPð ˆHØˆ:ÝÐ2Ñ3Ô3Ð3Ø•ˆ<ˆ<Ý�T”[Ñ!Ô!ˆBÝ�‰WŒWˆØ�”ˆ?ˆ?ÝÐ.°Ñ3Ñ4Ô4Ð4ØŒ	�Š�bÑÔÐå�t‰_Œ_ˆØ
�	Š	�(˜B Ñ&Ô&Ð&ØŒ×Ò˜2ÑÔÐÐÐr(   ©NN)FNN)ra   r°   r±   rQ  r¨  rb   r   r  r{   r(   r&   r  r  Ã  sr   € € € € € ðð ð=ð =ð =ð =ð( DHØðrð rð rð rðh  $¨°fð "ð "ð "ð "ð "ð "r(   r  c                 óü   — ddl m} t          |t          t          f¦  «        }|du p|ot          |¦  «        | k    }|r>|pi }d„ |                     ¦   «         D ¦   «         }|rt          |¦  «        D ]
}||v r|c S ŒdS )a}  Find the most appropriate scope for a parametrized call based on its arguments.

    When there's at least one direct argument, always use "function" scope.

    When a test function is parametrized and all its arguments are indirect
    (e.g. fixtures), return the most narrow scope based on the fixtures used.

    Related to issue #1832, based on code posted by @Kingdread.
    r   )ÚscopesTc                 ó.   — g | ]\  }}|d          j         ‘ŒS )r   )rõ  )rà  r2   Ú
fixturedefs      r&   rá  z,_find_parametrized_scope.<locals>.<listcomp>‡  s$   € ÐWÐWÐWÑ/?¨t°Z�z !”}Ô*ÐWÐWÐWr(   r_   )ré  r  rÉ   r¤   r¤  r…  rÿ   Úreversed)	r‚   Úarg2fixturedefsró  r  Úindirect_as_listÚall_arguments_are_fixturesÚfixturedefsÚused_scopesrõ  s	            r&   rï  rï  w  sÀ   € ð (Ð'Ð'Ð'Ð'Ð'Ý! (­Tµ5¨MÑ:Ô:ÐØ!)¨TÐ!1ð "PØ!1Ð!Oµc¸(±m´mÀxÒ6Oð à!ð !Ø%Ð+¨ˆØWÐWÀ;×CTÒCTÑCVÔCVÐWÑWÔWˆØð 	!å! &Ñ)Ô)ð !ð !�Ø˜KÐ'Ð'Ø �L�L�Lð (ð ˆ:r(   c                 ó˜  — |r.	  || ¦  «        }|rt          |¦  «        S n# t          $ r Y nw xY w|r |j                             || ¬¦  «        }|r|S t	          | t
          ¦  «        rt          | ¦  «        S t	          | t          t          t          t          f¦  «        rt          | ¦  «        S t	          | t          ¦  «        rt          | j        ¦  «        S t          �)t	          | t          j        ¦  «        rt          | ¦  «        S t          | ¦  «        rt!          | d¦  «        r| j        S t          |¦  «        t          |¦  «        z   S )Nr«   ra   )r
   rz   Úhookr­   rÉ   r   ÚfloatrØ   Úboolr   rÅ  r   Úpatternr   ÚEnumr   r^   ra   )r¬   ÚargnameÚidxrý  rX   rÑ   Úhook_ids          r&   Ú_idvalr  ‘  sP  € Øð ð	Ø��S‘	”	ˆAØð *Ý& qÑ)Ô)Ð)ð*øåð 	ð 	ð 	ØˆDð	øøøð ð Ø”+×8Ò8ÀÈCÐ8ÑPÔPˆØð 	ØˆNå�#•|Ñ$Ô$ð 	Ý˜sÑ#Ô#Ð#Ý	�C�%¥¥d­HÐ5Ñ	6Ô	6ð Ý�3‰xŒxˆÝ	�C�Ñ	$Ô	$ð Ý˜sœ{Ñ+Ô+Ð+Ý	Ð	�j¨­d¬iÑ8Ô8Ð	Ý�3‰xŒxˆÝ	�‰Œð �' # zÑ2Ô2ð ØŒ|ÐÝˆw‰<Œ<�˜C™œÑ Ð s   „! ¡
.­.c                 óÒ   ‡ ‡‡— |�‰ t          |¦  «        k    s|‰          €3ˆˆˆ fd„t          ||¦  «        D ¦   «         }d                     |¦  «        S t          |‰          ¦  «        S )Nc           	      ó<   •— g | ]\  }}t          ||‰‰‰¦  «        ‘ŒS r{   )r  )rà  r¬   r  rX   rý  r  s      €€€r&   rá  z_idvalset.<locals>.<listcomp>­  s=   ø€ ð >ð >ð >Ù#�s˜Gõ ˜#˜w¨¨T°6Ñ:Ô:ð >ð >ð >r(   rÃ  )r…  rÇ  rË   r
   )r  rÉ  r‚   rý  rô  rX   Úthis_ids   `  ` ` r&   Ú	_idvalsetr  «  s�   øøø€ Ø
€{�s�c #™hœh’�¨#¨c¬(Ð*:ð>ð >ð >ð >ð >ð >Ý'*¨6°8Ñ'<Ô'<ð>ñ >ô >ˆà�xŠx˜Ñ Ô Ð å˜s 3œxÑ(Ô(Ð(r(   c                 ór  ‡ ‡‡‡— ˆ ˆˆˆfd„t          |¦  «        D ¦   «         Št          t          ‰¦  «        ¦  «        t          ‰¦  «        k    rgˆfd„‰D ¦   «         }t          j        d„ ¦  «        }t          ‰¦  «        D ]4\  }}||v r+|t          ||         ¦  «        z   ‰|<   ||xx         dz  cc<   Œ5‰S )Nc           
      ó>   •— g | ]\  }}t          ||‰‰‰‰¦  «        ‘ŒS r{   )r  )rà  ÚvalindexrÉ  r‚   rX   rý  rô  s      €€€€r&   rá  zidmaker.<locals>.<listcomp>´  s?   ø€ ð 9ð 9ð 9Ùˆx˜õ �X˜v x°°s¸FÑCÔCð 9ð 9ð 9r(   c                 óF   •— g | ]}‰                      |¦  «        d k    ¯|‘ŒS )r4  r   )rà  Útestidrô  s     €r&   rá  zidmaker.<locals>.<listcomp>¸  s/   ø€ ÐHÐHÐH °#·)²)¸FÑ2CÔ2CÀaÒ2GÐ2G�fÐ2GÐ2GÐ2Gr(   c                  ó   — dS rU   r{   r{   r(   r&   rú   zidmaker.<locals>.<lambda>¹  s   € °1€ r(   r4  )rš  r…  r´  ÚcollectionsÚdefaultdictrÅ  )	r‚   rò  rý  rô  rX   Ú
duplicatesÚcountersÚindexr#  s	   ` ```    r&   rñ  rñ  ³  sî   øøøø€ ð9ð 9ð 9ð 9ð 9ð 9ð 9Ý#,¨YÑ#7Ô#7ð9ñ 9ô 9€Cå
�3ˆs‰8Œ8�}„}�˜C™œÒ Ð àHÐHÐHÐH¨3ÐHÑHÔHˆ
ÝÔ*¨9¨9Ñ5Ô5ˆÝ& s™^œ^ð 	&ð 	&‰MˆE�6Ø˜Ð#Ð#Ø#¥c¨(°6Ô*:Ñ&;Ô&;Ñ;��E‘
Ø˜Ð Ð Ô  AÑ%Ð Ð Ñ øØ€Jr(   c                 ó0   — ddl m}  || t          ¦  «        S ©Nr   )Úwrap_session)Ú_pytest.mainr,  Ú_show_fixtures_per_test©rX   r,  s     r&   r@   r@   Á  s'   € Ø)Ð)Ð)Ð)Ð)Ð)Øˆ<˜Õ 7Ñ8Ô8Ð8r(   c                 ó*  ‡‡‡‡‡	— dd l }|                     ¦   «          t          j                             ¦   «         Š|j                             | ¦  «        Š|                      d¦  «        Šˆfd„Šˆˆˆfd„Š	ˆˆˆ	fd„}|j        D ]} ||¦  «         Œd S )Nr   Úverbosec                 óN   •— t          | ‰¦  «        }‰                     |¦  «        S r+   )r   Úbestrelpath)r  ÚlocÚcurdirs     €r&   Úget_best_relz-_show_fixtures_per_test.<locals>.get_best_relÍ  s&   ø€ Ý˜$ Ñ'Ô'ˆØ×!Ò! #Ñ&Ô&Ð&r(   c                 ó  •— | j         }‰	dk    r|                     d¦  «        rd S ‰	dk    r' ‰| j        ¦  «        }d                     ||¦  «        }n|}‰                     |d¬¦  «         d}| j        j        }|rf|                     ¦   «                              d¦  «        D ]<}‰                     |                     |                     ¦   «         ¦  «        ¦  «         Œ=d S ‰                     |                     d¦  «        d¬	¦  «         d S )
Nr   rH  z
{0} -- {1}T©Úgreenz    {0}ú
zno docstring available©Úred)r  ró   r  r`   ÚlinerQ  rÞ  rì  )
Úfixture_defr  ÚbestrelÚfuncargspecÚINDENTÚfixture_docr=  r6  Útwr1  s
          €€€r&   Úwrite_fixturez._show_fixtures_per_test.<locals>.write_fixtureÑ  s  ø€ ØÔ%ˆà�aŠ<ˆ<˜G×.Ò.¨sÑ3Ô3ˆ<ØˆFØ�QŠ;ˆ;Ø"�l ;Ô#3Ñ4Ô4ˆGØ&×-Ò-¨g°wÑ?Ô?ˆKˆKà!ˆKØ
�Š� 4ˆÑ(Ô(Ð(àˆØ!Ô&Ô.ˆàð 	GØ#×)Ò)Ñ+Ô+×1Ò1°$Ñ7Ô7ð 5ð 5�Ø—’˜Ÿš d§j¢j¡l¤lÑ3Ô3Ñ4Ô4Ð4Ð4ð5ð 5ð �GŠG�F—M’MÐ":Ñ;Ô;ÀˆGÑFÔFÐFÐFÐFr(   c                 óœ  •— | j         j        }|sd S  ‰| j        ¦  «        }‰                     ¦   «          ‰                     dd                     | j        ¦  «        ¦  «         ‰                     dd                     |¦  «        ¦  «         t          |                     ¦   «         ¦  «        D ]\  }}|€J ‚|sŒ ‰|d         ¦  «         Œd S )NrÃ  zfixtures used by {0}z({0})r×   )	r�   r×  r_   r=  Úsepr`   r2   Úsortedrÿ   )rù   r×  r?  r  Úfixture_defsr6  rC  rD  s        €€€r&   Ú
write_itemz+_show_fixtures_per_test.<locals>.write_itemæ  sã   ø€ ØÔ,Ô=Ðàð 	àˆFØ�,˜tœ}Ñ-Ô-ˆà
�Š‰	Œ	ˆ	Ø
�ŠˆsÐ*×1Ò1°$´)Ñ<Ô<Ñ=Ô=Ð=Ø
�Šˆs�G—N’N 7Ñ+Ô+Ñ,Ô,Ð,Ý%+Ð,<×,BÒ,BÑ,DÔ,DÑ%EÔ%Eð 	,ð 	,Ñ!ˆG�\ØÐ+Ð+Ð+Øð Øð ˆM˜, rÔ*Ñ+Ô+Ð+Ð+ð	,ð 	,r(   )	Ú_pytest.configÚperform_collectr   r   r   rX   Úcreate_terminal_writerÚgetvaluerÿ   )
rX   r�   r9  rI  rù   r5  r6  rC  r1  rD  s
        @@@@@r&   r.  r.  Æ  sð   øøøøø€ ØÐÐÐØ×ÒÑÔÐÝŒW�]Š]‰_Œ_€FØ	Œ×	.Ò	.¨vÑ	6Ô	6€BØ�oŠo˜iÑ(Ô(€Gð'ð 'ð 'ð 'ð 'ðGð Gð Gð Gð Gð Gð Gð*,ð ,ð ,ð ,ð ,ð ,ð ,ð& ”ð ð ˆØˆ
�4ÑÔÐÐðð r(   c                 ó0   — ddl m}  || t          ¦  «        S r+  )r-  r,  Ú_showfixtures_mainr/  s     r&   r;   r;   ý  s'   € Ø)Ð)Ð)Ð)Ð)Ð)Øˆ<˜Õ 2Ñ3Ô3Ð3r(   c           	      óä  — dd l }|                     ¦   «          t          j                             ¦   «         }|j                             | ¦  «        }|                      d¦  «        }|j        }g }t          ¦   «         }|j
                             ¦   «         D ]œ\  }	}
|
€J ‚|
sŒ|
D ]�}t          |j        |¦  «        }|j        |f|v rŒ#|                     |j        |f¦  «         |                     t#          |j        ¦  «        |j        j        |                     |¦  «        |j        |f¦  «         ŒŽŒ�|                     ¦   «          d }|D �]#\  }}}}	}||k    rD|                     d¦  «        s/|                     ¦   «          |                     dd|›�¦  «         |}|dk    r|	d         dk    rŒf|dk    r|	›d|›�}n|	}|                     |d¬	¦  «         t          |j        |¦  «        }|j        j        pd
}|rV|                     ¦   «                              d¦  «        D ],}|                     d|                     ¦   «         z   ¦  «         Œ-�Œ|                     d|›d�d¬¦  «         �Œ%d S )Nr   r1  z_pytest.rÃ  zfixtures defined from rH  z -- Tr8  Ú r:  z    z: no docstring availabler;  )rJ  rK  r   r   r   rX   rL  rM  r  r´  rØ  rÿ   r   r  r  r  rK   r…  Úbaseidr°   r3  r  ró   r=  rF  rQ  rÞ  rì  )rX   r�   r9  r5  rC  r1  r  Ú	availabler  r  r  r
  r4  ÚcurrentmodulerR  r²   r?  r@  r6   r=  s                       r&   rO  rO    sÇ  € ØÐÐÐØ×ÒÑÔÐÝŒW�]Š]‰_Œ_€FØ	Œ×	.Ò	.¨vÑ	6Ô	6€BØ�oŠo˜iÑ(Ô(€Gà	Ô	 €Bà€IÝ‰5Œ5€Dà "Ô 3× 9Ò 9Ñ ;Ô ;ð ?ð ?Ñˆ�ØÐ&Ð&Ð&Øð 	ØØ%ð 	?ð 	?ˆJÝ˜jœo¨vÑ6Ô6ˆCØÔ" CÐ(¨DÐ0Ð0ØØ�HŠH�jÔ(¨#Ð.Ñ/Ô/Ð/Ø×Ò�c *Ô"3Ñ4Ô4Ø(œoÔ8Ø$×0Ò0°Ñ5Ô5Ø(Ô0°*ð>ñ ?ô ?ð ?ð ?ð	?ð ‡N‚NÑÔÐØ€MØ8Að ñ Ñ4ˆ�˜ ¨*Ø˜FÒ"Ð"Ø×$Ò$ ZÑ0Ô0ð 'Ø—’‘	”	�	Ø—’�s�s¸¸ÐAÑBÔBÐBØ &�Ø�aŠ<ˆ<˜G AœJ¨#Ò-Ð-ØØ�QŠ;ˆ;Ø'. w w°°Ð9ˆKˆKà!ˆKØ
�Š� 4ˆÑ(Ô(Ð(Ý˜*œ/¨6Ñ2Ô2ˆØŒoÔ%Ð+¨ˆØð 	ØŸ	š	™œ×)Ò)¨$Ñ/Ô/ð /ð /�Ø—’˜ §¢¡¤Ñ-Ñ.Ô.Ð.Ð.ñ/ð �GŠGˆG°s°s°sÐ<Øð ñ ô ð ñ ð'ð r(   c                 ó<  — d}| t           u rddlm}  d}t          | t          ¦  «        r4| D ]0}t          |¦  «        st          |t          |¦  «        z  ¦  «        ‚Œ1n.t          | ¦  «        st          |t          | ¦  «        z  ¦  «        ‚d                     | ¦  «        }|s)d|v r| 	                    d¦  «        }t          | |¦  «        S t          |d         t          ¦  «        rß|\  }t          |t          ¦  «        sJ ‚t          j        d¦  «        }|j                             ¦   «         }	|	                     |¦  «         	 t"          j                             |¦  «                             ¦   «         }t*          j                             ||j        |	¦  «         nl# | $ r! t"          j                             ¦   «         cY S w xY w|d         }
	  |
|dd…         i |¤Ž n)# | $ r! t"          j                             ¦   «         cY S w xY wt5          j        |¦  «         dS )	a±  
    Assert that a code block/function call raises ``expected_exception``
    and raise a failure exception otherwise.

    This helper produces a ``ExceptionInfo()`` object (see below).

    If using Python 2.5 or above, you may use this function as a
    context manager::

        >>> with raises(ZeroDivisionError):
        ...    1/0

    .. versionchanged:: 2.10

    In the context manager form you may use the keyword argument
    ``message`` to specify a custom failure message::

        >>> with raises(ZeroDivisionError, message="Expecting ZeroDivisionError"):
        ...    pass
        ... Failed: Expecting ZeroDivisionError


    .. note::

       When using ``pytest.raises`` as a context manager, it's worthwhile to
       note that normal context manager rules apply and that the exception
       raised *must* be the final line in the scope of the context manager.
       Lines of code after that, within the scope of the context manager will
       not be executed. For example::

           >>> with raises(OSError) as exc_info:
                   assert 1 == 1  # this will execute as expected
                   raise OSError(errno.EEXISTS, 'directory exists')
                   assert exc_info.value.errno == errno.EEXISTS  # this will not execute

       Instead, the following approach must be taken (note the difference in
       scope)::

           >>> with raises(OSError) as exc_info:
                   assert 1 == 1  # this will execute as expected
                   raise OSError(errno.EEXISTS, 'directory exists')

               assert exc_info.value.errno == errno.EEXISTS  # this will now execute

    Or you can specify a callable by passing a to-be-called lambda::

        >>> raises(ZeroDivisionError, lambda: 1/0)
        <ExceptionInfo ...>

    or you can specify an arbitrary callable with arguments::

        >>> def f(x): return 1/x
        ...
        >>> raises(ZeroDivisionError, f, 0)
        <ExceptionInfo ...>
        >>> raises(ZeroDivisionError, f, x=0)
        <ExceptionInfo ...>

    A third possibility is to use a string to be executed::

        >>> raises(ZeroDivisionError, "f(0)")
        <ExceptionInfo ...>

    .. autoclass:: _pytest._code.ExceptionInfo
        :members:

    .. note::
        Similar to caught exception objects in Python, explicitly clearing
        local references to returned ``ExceptionInfo`` objects can
        help the Python interpreter speed up its garbage collection.

        Clearing those references breaks a reference cycle
        (``ExceptionInfo`` --> caught exception --> frame stack raising
        the exception --> current frame stack --> local variables -->
        ``ExceptionInfo``) which makes Python keep all objects referenced
        from that cycle (including all local variables in the current
        frame) alive until the next cyclic garbage collection run. See the
        official Python ``try`` statement documentation for more detailed
        information.

    Tr   )ÚBuiltinAssertionErrorzJexceptions must be old-style classes or derived from BaseException, not %szDID NOT RAISE {0}r›   r4  N)ÚAssertionErrorÚ_pytest.assertion.utilrV  rÉ   r¤  r   r�  rC   r`   ÚpopÚRaisesContextrÅ  rÙ   Ú	_getframeÚf_localsr¼  rº  r9  r:  ÚSourceÚcompiler   r¥  Úexec_Ú	f_globalsr;  r.   ry   )Úexpected_exceptionrB   rd   Ú__tracebackhide__rh   rG  r›   r   r   r4  r  s              r&   rv   rv   6  sc  € ðd ÐØ�^Ð+Ð+ð	"ð 	"ð 	"ð 	"ð 	"ð 	"ð1€CåÐ$¥eÑ,Ô,ð 8Ø%ð 	1ð 	1ˆCÝ˜3‘<”<ð 1Ý ¥d¨3¡i¤i¡Ñ0Ô0Ð0ð1ð	1õ Ð'Ñ(Ô(ð 8Ý˜�dÐ#5Ñ6Ô6Ñ6Ñ7Ô7Ð7à!×(Ò(Ð);Ñ<Ô<€Gàð 1Ø˜ÐÐØ—j’j Ñ+Ô+ˆGÝÐ/°Ñ9Ô9Ð9Ý	�D˜”G�SÑ	!Ô	!ð 1Ø‰ˆÝ˜$¥Ñ$Ô$Ð$Ð$Ð$Ý”˜aÑ Ô ˆØŒn×!Ò!Ñ#Ô#ˆØ�
Š
�6ÑÔÐð	1Ý”=×'Ò'¨Ñ-Ô-×5Ò5Ñ7Ô7ˆDÝŒJ×Ò˜T 5¤?°CÑ8Ô8Ð8Ð8øð "ð 	1ð 	1ð 	1Ý”=×.Ò.Ñ0Ô0Ð0Ð0Ð0ð	1øøøð �AŒwˆð	1ØˆD�$�q�r�r”(Ð%˜fÐ%Ð%Ð%Ð%øØ!ð 	1ð 	1ð 	1Ý”=×.Ò.Ñ0Ô0Ð0Ð0Ð0ð	1øøøå
„K�ÑÔÐÐÐs%   ÅAF Æ#GÇGÇG Ç#HÈHc                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )rZ  c                 ó0   — || _         || _        d | _        d S r+   )ra  r›   r‡  )r0   ra  r›   s      r&   r¨  zRaisesContext.__init__µ  s   € Ø"4ˆÔØˆŒØˆŒˆˆr(   c                 ól   — t                                t          j        j        ¦  «        | _        | j        S r+   )r©  r¬  r9  r:  r;  r‡  rÂ   s    r&   Ú	__enter__zRaisesContext.__enter__º  s"   € Ý—~’~¥g¤mÔ&AÑBÔBˆŒØŒ|Ðr(   c                 ó8  — d}|d         €t          j        | j        ¦  «         t          j        dk     r/t          |d         t          ¦  «        s|\  }}}| ||¦  «        |f}| j                             |¦  «         t          | j        j
        | j        ¦  «        S )NTr   )rø   é   r4  )r.   ry   r›   rÙ   Úversion_inforÉ   ÚBaseExceptionr‡  r¨  Ú
issubclassrC   ra  )r0   Útprb  Úexc_typer¿   r�  s         r&   Ú__exit__zRaisesContext.__exit__¾  s—   € Ø ÐØˆaŒ5ˆ=ÝŒK˜œÑ%Ô%Ð%ÝÔ˜fÒ$Ð$õ ˜b œe¥]Ñ3Ô3ð :Ø-/Ñ*�˜% Ø˜x˜x¨™œ°	Ð9�ØŒ×Ò˜bÑ!Ô!Ð!Ý˜$œ,Ô+¨TÔ-DÑEÔEÐEr(   N)ra   r°   r±   r¨  rf  rn  r{   r(   r&   rZ  rZ  ´  sF   € € € € € ðð ð ð
ð ð ðFð Fð Fð Fð Fr(   rZ  c                   óf   — e Zd ZdZd	d„Zd„ Zd„ ZdZd„ Ze	d„ ¦   «         Z
e
j        d„ ¦   «         Z
dS )
rw   a[  
    Assert that two numbers (or two sets of numbers) are equal to each other
    within some tolerance.

    Due to the `intricacies of floating-point arithmetic`__, numbers that we
    would intuitively expect to be equal are not always so::

        >>> 0.1 + 0.2 == 0.3
        False

    __ https://docs.python.org/3/tutorial/floatingpoint.html

    This problem is commonly encountered when writing tests, e.g. when making
    sure that floating-point values are what you expect them to be.  One way to
    deal with this problem is to assert that two floating-point numbers are
    equal to within some appropriate tolerance::

        >>> abs((0.1 + 0.2) - 0.3) < 1e-6
        True

    However, comparisons like this are tedious to write and difficult to
    understand.  Furthermore, absolute comparisons like the one above are
    usually discouraged because there's no tolerance that works well for all
    situations.  ``1e-6`` is good for numbers around ``1``, but too small for
    very big numbers and too big for very small ones.  It's better to express
    the tolerance as a fraction of the expected value, but relative comparisons
    like that are even more difficult to write correctly and concisely.

    The ``approx`` class performs floating-point comparisons using a syntax
    that's as intuitive as possible::

        >>> from pytest import approx
        >>> 0.1 + 0.2 == approx(0.3)
        True

    The same syntax also works on sequences of numbers::

        >>> (0.1 + 0.2, 0.2 + 0.4) == approx((0.3, 0.6))
        True

    By default, ``approx`` considers numbers within a relative tolerance of
    ``1e-6`` (i.e. one part in a million) of its expected value to be equal.
    This treatment would lead to surprising results if the expected value was
    ``0.0``, because nothing but ``0.0`` itself is relatively close to ``0.0``.
    To handle this case less surprisingly, ``approx`` also considers numbers
    within an absolute tolerance of ``1e-12`` of its expected value to be
    equal.  Infinite numbers are another special case.  They are only
    considered equal to themselves, regardless of the relative tolerance.  Both
    the relative and absolute tolerances can be changed by passing arguments to
    the ``approx`` constructor::

        >>> 1.0001 == approx(1)
        False
        >>> 1.0001 == approx(1, rel=1e-3)
        True
        >>> 1.0001 == approx(1, abs=1e-3)
        True

    If you specify ``abs`` but not ``rel``, the comparison will not consider
    the relative tolerance at all.  In other words, two numbers that are within
    the default relative tolerance of ``1e-6`` will still be considered unequal
    if they exceed the specified absolute tolerance.  If you specify both
    ``abs`` and ``rel``, the numbers will be considered equal if either
    tolerance is met::

        >>> 1 + 1e-8 == approx(1)
        True
        >>> 1 + 1e-8 == approx(1, abs=1e-12)
        False
        >>> 1 + 1e-8 == approx(1, rel=1e-6, abs=1e-12)
        True

    If you're thinking about using ``approx``, then you might want to know how
    it compares to other good ways of comparing floating-point numbers.  All of
    these algorithms are based on relative and absolute tolerances and should
    agree for the most part, but they do have meaningful differences:

    - ``math.isclose(a, b, rel_tol=1e-9, abs_tol=0.0)``:  True if the relative
      tolerance is met w.r.t. either ``a`` or ``b`` or if the absolute
      tolerance is met.  Because the relative tolerance is calculated w.r.t.
      both ``a`` and ``b``, this test is symmetric (i.e.  neither ``a`` nor
      ``b`` is a "reference value").  You have to specify an absolute tolerance
      if you want to compare to ``0.0`` because there is no tolerance by
      default.  Only available in python>=3.5.  `More information...`__

      __ https://docs.python.org/3/library/math.html#math.isclose

    - ``numpy.isclose(a, b, rtol=1e-5, atol=1e-8)``: True if the difference
      between ``a`` and ``b`` is less that the sum of the relative tolerance
      w.r.t. ``b`` and the absolute tolerance.  Because the relative tolerance
      is only calculated w.r.t. ``b``, this test is asymmetric and you can
      think of ``b`` as the reference value.  Support for comparing sequences
      is provided by ``numpy.allclose``.  `More information...`__

      __ http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.isclose.html

    - ``unittest.TestCase.assertAlmostEqual(a, b)``: True if ``a`` and ``b``
      are within an absolute tolerance of ``1e-7``.  No relative tolerance is
      considered and the absolute tolerance cannot be changed, so this function
      is not appropriate for very large or very small numbers.  Also, it's only
      available in subclasses of ``unittest.TestCase`` and it's ugly because it
      doesn't follow PEP8.  `More information...`__

      __ https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertAlmostEqual

    - ``a == pytest.approx(b, rel=1e-6, abs=1e-12)``: True if the relative
      tolerance is met w.r.t. ``b`` or if the absolute tolerance is met.
      Because the relative tolerance is only calculated w.r.t. ``b``, this test
      is asymmetric and you can think of ``b`` as the reference value.  In the
      special case that you explicitly specify an absolute tolerance but not a
      relative tolerance, only the absolute tolerance is considered.
    Nc                 ó0   — || _         || _        || _        d S r+   ©ÚexpectedÚabsÚrel©r0   rr  rt  rs  s       r&   r¨  zapprox.__init__@  ó   € Ø ˆŒØˆŒØˆŒˆˆr(   c                 óJ   — d                      d„ | j        D ¦   «         ¦  «        S )Nz, c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r+   )Úreprrß  s     r&   ú	<genexpr>z"approx.__repr__.<locals>.<genexpr>F  s(   è è € Ð8Ð8 Q�˜a™œÐ8Ð8Ð8Ð8Ð8Ð8r(   )rË   rr  rÂ   s    r&   Ú__repr__zapprox.__repr__E  s%   € Ø�yŠyÐ8Ð8¨$¬-Ð8Ñ8Ô8Ñ8Ô8Ð8r(   c                 óÚ   — ddl m} t          ||¦  «        s|g}t          |¦  «        t          | j        ¦  «        k    rdS t          d„ t          || j        ¦  «        D ¦   «         ¦  «        S )Nr   ©ÚIterableFc              3   ó(   K  — | ]\  }}||k    V — Œd S r+   r{   )rà  Úar¡  s      r&   rz  z approx.__eq__.<locals>.<genexpr>N  s*   è è € ÐAÐA™d˜a �1˜’6ÐAÐAÐAÐAÐAÐAr(   )r%  r~  rÉ   r…  rr  ÚallrÇ  )r0   Úactualr~  s      r&   Ú__eq__zapprox.__eq__H  sv   € Ø(Ð(Ð(Ð(Ð(Ð(Ý˜& (Ñ+Ô+ð 	Ø�XˆFÝˆv‰;Œ;�#˜dœmÑ,Ô,Ò,Ð,Ø�5ÝÐAÐA¥c¨&°$´-Ñ&@Ô&@ÐAÑAÔAÑAÔAÐAr(   c                 ó   — || k     S r+   r{   ©r0   r‚  s     r&   Ú__ne__zapprox.__ne__R  ó   € Ø˜d’NÐ#Ð#r(   c                 óŽ   ‡ ‡— ddl m} ˆ fd„Št          ‰ j        |¦  «        rˆfd„‰ j        D ¦   «         S  ‰‰ j        ¦  «        gS )Nr   r}  c                 ó:   •— t          | ‰j        ‰j        ¦  «        S r+   )ÚApproxNonIterablert  rs  )r¡  r0   s    €r&   rú   z!approx.expected.<locals>.<lambda>[  s   ø€ Õ$5°a¸¼À4Ä8Ñ$LÔ$L€ r(   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r{   r{   )rà  r¡  Úapprox_non_iters     €r&   rá  z#approx.expected.<locals>.<listcomp>]  s#   ø€ Ð?Ð?Ð?¨1�O�O AÑ&Ô&Ð?Ð?Ð?r(   )r%  r~  rÉ   Ú	_expected)r0   r~  rŒ  s   ` @r&   rr  zapprox.expectedU  sk   øø€ ð
 	)Ð(Ð(Ð(Ð(Ð(ØLÐLÐLÐLˆÝ�d”n hÑ/Ô/ð 	5Ø?Ð?Ð?Ð?°´Ð?Ñ?Ô?Ð?à#�O D¤NÑ3Ô3Ð4Ð4r(   c                 ó   — || _         d S r+   )r�  )r0   rr  s     r&   rr  zapprox.expecteda  s   € à!ˆŒˆˆr(   r  )ra   r°   r±   rQ  r¨  r{  rƒ  Ú__hash__r†  r5   rr  Úsetterr{   r(   r&   rw   rw   Î  s¤   € € € € € ðoð oðbð ð ð ð
9ð 9ð 9ðBð Bð Bð €Hð$ð $ð $ð ð	5ð 	5ñ „Xð	5ð „_ð"ð "ñ „_ð"ð "ð "r(   rw   c                   óF   — e Zd ZdZdd„Zd„ Zd„ ZdZd„ Ze	d„ ¦   «         Z
dS )	rŠ  a5  
    Perform approximate comparisons for single numbers only.

    In other words, the ``expected`` attribute for objects of this class must
    be some sort of number.  This is in contrast to the ``approx`` class, where
    the ``expected`` attribute can either be a number of a sequence of numbers.
    This class is responsible for making comparisons, while ``approx`` is
    responsible for abstracting the difference between numbers and sequences of
    numbers.  Although this class can stand on its own, it's only meant to be
    used within ``approx``.
    Nc                 ó0   — || _         || _        || _        d S r+   rq  ru  s       r&   r¨  zApproxNonIterable.__init__s  rv  r(   c                 óH  — t          j        | j        ¦  «        rt          | j        ¦  «        S 	 d                     | j        ¦  «        }n# t          $ r d}Y nw xY wd                     | j        |¦  «        }t          j        d         dk    r| 	                    d¦  «        S |S )Nz{:.1e}z???u
   {0} Â± {1}r   rø   zutf-8)
ÚmathÚisinfrr  rÅ  r`   Ú	tolerancerž  rÙ   ri  Úencode)r0   Úvetted_toleranceÚ
plus_minuss      r&   r{  zApproxNonIterable.__repr__x  s´   € õ Œ:�d”mÑ$Ô$ð 	&Ý�t”}Ñ%Ô%Ð%ð	%Ø'Ÿš¨t¬~Ñ>Ô>ÐÐøÝð 	%ð 	%ð 	%Ø$ÐÐÐð	%øøøð '×-Ò-¨d¬mÐ=MÑNÔNˆ
õ Ô˜AÔ !Ò#Ð#Ø×$Ò$ WÑ-Ô-Ð-àÐs   ¯A
 Á
AÁAc                 ó¬   — || j         k    rdS t          j        t          | j         ¦  «        ¦  «        rdS t          | j         |z
  ¦  «        | j        k    S )NTF)rr  r”  r•  rs  r–  r…  s     r&   rƒ  zApproxNonIterable.__eq__�  sU   € à�T”]Ò"Ð"Ø�4õ Œ:•c˜$œ-Ñ(Ô(Ñ)Ô)ð 	Ø�5õ �4”= 6Ñ)Ñ*Ô*¨d¬nÒ<Ð<r(   c                 ó   — || k     S r+   r{   r…  s     r&   r†  zApproxNonIterable.__ne__£  r‡  r(   c                 óâ  — d„ } || j         d¦  «        }|dk     r"t          d                     |¦  «        ¦  «        ‚t          j        |¦  «        rt          d¦  «        ‚| j        €	| j         �|S  || j        d¦  «        t          | j        ¦  «        z  }|dk     r"t          d                     |¦  «        ¦  «        ‚t          j        |¦  «        rt          d¦  «        ‚t          ||¦  «        S )	Nc                 ó   — | �| n|S r+   r{   )r¡  r>   s     r&   rú   z-ApproxNonIterable.tolerance.<locals>.<lambda>¨  s   € ¨a¨m¨¨À€ r(   gê-�™—q=r   z(absolute tolerance can't be negative: {}z absolute tolerance can't be NaN.g�íµ ÷Æ°>z(relative tolerance can't be negative: {}z relative tolerance can't be NaN.)rs  rž  r`   r”  Úisnanrt  rr  Úmax)r0   Úset_defaultÚabsolute_toleranceÚrelative_tolerances       r&   r–  zApproxNonIterable.tolerance¦  s	  € àHÐHˆð )˜[¨¬°5Ñ9Ô9Ðà Ò!Ð!ÝÐG×NÒNÐOaÑbÔbÑcÔcÐcÝŒ:Ð(Ñ)Ô)ð 	AÝÐ?Ñ@Ô@Ð@ð Œ8ÐØŒxÐ#Ø)Ð)ð )˜[¨¬°4Ñ8Ô8½3¸t¼}Ñ;MÔ;MÑMÐà Ò!Ð!ÝÐG×NÒNÐOaÑbÔbÑcÔcÐcÝŒ:Ð(Ñ)Ô)ð 	AÝÐ?Ñ@Ô@Ð@õ Ð%Ð'9Ñ:Ô:Ð:r(   r  )ra   r°   r±   rQ  r¨  r{  rƒ  r�  r†  r5   r–  r{   r(   r&   rŠ  rŠ  f  s�   € € € € € ð
ð 
ðð ð ð ð
ð ð ð0=ð =ð =ð" €Hð$ð $ð $ð ð;ð ;ñ „Xð;ð ;ð ;r(   rŠ  c                   ó†   ‡ — e Zd ZdZdZdddeddddfˆ fd„	Zd„ Zed„ ¦   «         Z	d„ Z
ed„ ¦   «         Zd„ Zd	„ Zˆ fd
„Zˆ xZS )rt   z] a Function Item is responsible for setting up and executing a
    Python test function.
    Nc                 óH  •— t          t          | ¦  «                             ||||¬¦  «         || _        |t          ur|| _        | j                             | j        j        ¦  «         |r&|| _	        | j                             |j        ¦  «         |r| j                             |¦  «         |	€E| j
        j                             | j        | j        | j        |                      ¦   «          ¬¦  «        }	|	| _        |	j        | _        |                      ¦   «          |
| _        d S )N)rX   r�   )r€   )r-  rt   r¨  r   r   r/   r  rº  rö   r  r�   r  r  r‹   r³   r~   r�   rÔ  rÕ  Ú_initrequestr  )r0   r2   r‹   rB   rX   r  r  r  r�   r
  r  rþ   s              €r&   r¨  zFunction.__init__Ò  s+  ø€ õ 	�h˜ÑÔ×&Ò& t¨V¸FØ/6ð 	'ñ 	8ô 	8ð 	8àˆŒ
Ø�&Ð Ð ØˆDŒHàŒ×Ò˜TœXÔ.Ñ/Ô/Ð/Øð 	4Ø$ˆDŒMØŒM× Ò  Ô!2Ñ3Ô3Ð3Øð 	+ØŒM× Ò  Ñ*Ô*Ð*àÐØœ,Ô6×EÒEØ”˜TœX t¤xØ!×4Ò4Ñ6Ô6Ð6ð Fñ 8ô 8ˆKð (ˆÔØ'Ô5ˆÔØ×ÒÑÔÐð )ˆÔÐÐr(   c                 ó4  — i | _         |                      ¦   «         rt          | d¦  «        r
J d¦   «         ‚nHt          | d¦  «        r8| j        }|j         rJ ‚|j        | _        t          |d¦  «        r|j        | _        t          j        | ¦  «        | _	        d S )Nr  z3yielded functions (deprecated) cannot have funcargsrÐ  )
r€   r~   r^   r  r  Ú_genidrÐ  r   ÚFixtureRequestÚ_request)r0   r  s     r&   r¥  zFunction._initrequestð  sµ   € ØˆŒØ×"Ò"Ñ$Ô$ð 		0Ý˜t ZÑ0Ô0ð Gð GØEñGô Gð Gð Gõ �t˜ZÑ(Ô(ð 0Øœ=�Ø#Ô,Ð,Ð,Ð,Ø&œk�”Ý˜8 WÑ-Ô-ð 0Ø!)¤�D”JÝ Ô/°Ñ5Ô5ˆŒˆˆr(   c                 ó8   — t          | j        d| j        ¦  «        S )z#underlying python 'function' objectrg  )r-   r/   rÂ   s    r&   r_   zFunction.functionþ  s   € õ �t”x ¨D¬HÑ5Ô5Ð5r(   c                 óŽ   — | j         }|                     d¦  «        }|dk    r
|d |…         }t          | j        j        |¦  «        S )NrÆ   r×   )r2   Úfindr-   r‹   r/   )r0   r2   r   s      r&   r»   zFunction._getobj  sB   € ØŒyˆØ�IŠI�c‰NŒNˆØ�Š7ˆ7Ø˜˜˜”8ˆDÝ�t”{”¨Ñ-Ô-Ð-r(   c                 ó   — | S )z@(compatonly) for code expecting pytest-2.2 style request objectsr{   rÂ   s    r&   Ú_pyfuncitemzFunction._pyfuncitem
  s	   € ð ˆr(   c                 ó(   — t          | dd ¦  «        d uS )Nr   )r-   rÂ   s    r&   r~   zFunction._isyieldedfunction  s   € Ý�t˜W dÑ+Ô+°4Ð7Ð7r(   c                 ó<   — | j                              | ¬¦  «         dS )z' execute the underlying test function. )rƒ   N)r”   r‡   rÂ   s    r&   ÚruntestzFunction.runtest  s!   € àŒ
×%Ò%°Ð%Ñ6Ô6Ð6Ð6Ð6r(   c                 ó~   •— t          t          | ¦  «                             ¦   «          t          j        | ¦  «         d S r+   )r-  rt   rP  r   Úfillfixturesr.  s    €r&   rP  zFunction.setup  s6   ø€ Ý�h˜ÑÔ×#Ò#Ñ%Ô%Ð%ÝÔ˜dÑ#Ô#Ð#Ð#Ð#r(   )ra   r°   r±   rQ  r§  r   r¨  r¥  r5   r_   r»   r®  r~   r±  rP  rR  rS  s   @r&   rt   rt   Í  sì   ø€ € € € € ðð ð €FØ*.°tØ¨¸ÀtØ!°ð)ð )ð )ð )ð )ð )ð<6ð 6ð 6ð ð6ð 6ñ „Xð6ð.ð .ð .ð ðð ñ „Xðð8ð 8ð 8ð7ð 7ð 7ð$ð $ð $ð $ð $ð $ð $ð $ð $r(   rt   r+   )NNN)UrQ  r�   rü   rÙ   r%  r”  Ú	itertoolsr   r   r.   rê  r   r9  Ú_pytest._pluggyÚ_pluggyÚpluggyr   Ú_pytest.compatr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   rÛ   Údirpathr!   Úrstripr   r'   r7   rS   rY   rk   rn   Úhookimplr|   r‡   r•   r’   r©   r­   r©  r¯   r¶   Ú	Collectorrá   r"  r  ÚFilerq   rN  rX  rr   rs   rq  ru   rc  rd  r¯  ÚFuncargnamesCompatAttrr  rï  r  r  rñ  r@   r.  r;   rO  rv   rZ  rw   rŠ  ÚItemrt   r{   r(   r&   ú<module>rÀ     s6  ðØ ?Ð ?à €€€Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à 	€	€	€	Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $ð €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Œ'�-Š-˜Ô(Ñ
)Ô
)×
1Ò
1Ñ
3Ô
3€Ø
Œ'�-Š-˜œ×.Ò.¨tÑ4Ô4Ñ
5Ô
5€ð1ð 1ð 1ð*ð *ð *ð'ð 'ð 'ð:ð ð ð<ð <ð <ðð ð ð  €„˜ÐÑÔðð ñ Ôðð €„˜ÐÑÔð
ð 
ñ Ôð
ð
Kð 
Kð 
Kð ð  ð  ð €„˜TÐ"Ñ"Ô"ð&ð &ñ #Ô"ð&ð6ð ð ð
*ð *ð *ð *ð *�6ñ *ô *ð *ð
5'ð 5'ð 5'ð 5'ð 5'�ñ 5'ô 5'ð 5'ðnj!ð j!ð j!ð j!ð j!�*˜fÔ.ñ j!ô j!ð j!ðZ	Kð 	Kð 	Kð$ð $ð $ð ;/ð ;/ð ;/ð ;/ð ;/ˆVŒ[˜+ñ ;/ô ;/ð ;/ð|ð ð ð ð(ð ð ð;ð ;ð ;ð ;ð ;ˆKñ ;ô ;ð ;ð4
ð 
ð 
ð 
ð 
ˆ{ñ 
ô 
ð 
ð<;ð <;ð <;ð <;ð <;�Jñ <;ô <;ð <;ð~$ ð $ ð $ ð $ ð $ �˜{ñ $ ô $ ð $ ðN'ð 'ð 'ð%ð %ð %ð?Að ?Að ?Að ?Að ?A�ñ ?Aô ?Að ?AðDqð qð qð qð qˆxÔ.ñ qô qð qðhð ð ð4!ð !ð !ð !ð4)ð )ð )ð )ðð ð ð ð9ð 9ð 9ð
4ð 4ð 4ðn4ð 4ð 4ð0ð 0ð 0ðj|ð |ð |ð|Fð Fð Fð Fð F�Fñ Fô Fð Fð4U"ð U"ð U"ð U"ð U"ˆVñ U"ô U"ð U"ðp`;ð `;ð `;ð `;ð `;˜ñ `;ô `;ð `;ðNK$ð K$ð K$ð K$ð K$ˆ}˜fœk¨8Ô+Jñ K$ô K$ð K$ð K$ð K$r(   