§
    ÖŽ’j/f  ã                  ó^  — U d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlZddlZddlZdd	lmZ ddlZddlZddlZddlZddlZdd
lmZ ddlmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl'm)Z) ddl*m+Z+ ddl*m,Z, ddl-m.Z. ddl-m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 er
ddl8Z8ddl9m:Z: dZ;d Z<d!Z=d"Z>d#Z?e;e<e=e>e?fZ@daAdaBd$eCd%<   did*„ZDdjd+„ZEdkd1„ZFdld4„ZGdmd7„ZHdld8„ZI G d9„ d:e¦  «        ZJ G d;„ d<eK¦  «        ZLdnd>„ZM	 	 	 	 dodpdH„ZN G dI„ dJe,¦  «        ZOdqdL„ZPdrdM„ZQdsdN„ZR G dO„ dPe3¦  «        ZSdtdS„ZTdudV„ZUe
dvdX„¦   «         ZV G dY„ dZe3¦  «        ZWdwd\„ZXdxd^„ZYdyd_„ZZdyd`„Z[dyda„Z\dzdd„Z] e(de¬f¦  «        d{dh„¦   «         Z^dS )|z4Discover and run doctests in modules and test files.é    )ÚannotationsN)ÚCallable)Ú	Generator)ÚIterable)ÚSequence)Úcontextmanager)ÚPath)ÚAny)ÚTYPE_CHECKING)Úoutcomes)ÚExceptionInfo)ÚReprFileLocation)ÚTerminalRepr)ÚTerminalWriter©Úsafe_getattr)ÚConfig)ÚParser)Úfixture)Ú
TopRequest)Ú	Collector)ÚItem)ÚOutcomeException)Úskip©Ú
fnmatch_ex)ÚModule)Úapprox)ÚPytestWarning)ÚSelfÚnoneÚcdiffÚndiffÚudiffÚonly_first_failurez"type[doctest.OutputChecker] | NoneÚCHECKER_CLASSÚparserr   ÚreturnÚNonec                óº  — |                       ddddg¬¦  «         |                       ddd¬	¦  «         |                      d
¦  «        }|                     ddddd¬¦  «         |                     dt          j        ddt
          d¬¦  «         |                     ddg ddd¬¦  «         |                     ddddd¬¦  «         |                     dddd d!¬¦  «         d S )"NÚdoctest_optionflagszOption flags for doctestsÚargsÚELLIPSIS)ÚtypeÚdefaultÚdoctest_encodingzEncoding used for doctest fileszutf-8)r/   Úcollectz--doctest-modulesÚ
store_trueFzRun doctests in all .py modulesÚdoctestmodules)Úactionr/   ÚhelpÚdestz--doctest-reportr$   z9Choose another output format for diffs on doctest failureÚdoctestreport)r.   r/   r5   Úchoicesr6   z--doctest-globÚappendÚpatz2Doctests file matching pattern, default: test*.txtÚdoctestglob)r4   r/   Úmetavarr5   r6   z--doctest-ignore-import-errorsz Ignore doctest collection errorsÚdoctest_ignore_import_errorsz--doctest-continue-on-failurez<For a given doctest, continue to run after the first failureÚdoctest_continue_on_failure)ÚaddiniÚgetgroupÚ	addoptionÚstrÚlowerÚDOCTEST_REPORT_CHOICES)r'   Úgroups     ú=C:\Projects\DSCons\.venv\Lib\site-packages\_pytest\doctest.pyÚpytest_addoptionrG   F   sO  € Ø
‡M‚MØØ#ØØ�ð	 ñ ô ð ð ‡M‚MØÐ=Àwð ñ ô ð ð �OŠO˜IÑ&Ô&€EØ	‡O‚OØØØØ.Øð ñ ô ð ð 
‡O‚OØÝŒYØØHÝ&Øð ñ ô ð ð 
‡O‚OØØØØØAØð ñ ô ð ð 
‡O‚OØ(ØØØ/Ø+ð ñ ô ð ð 
‡O‚OØ'ØØØKØ*ð ñ ô ð ð ð ó    c                 ó
   — d a d S ©N)ÚRUNNER_CLASS© rH   rF   Úpytest_unconfigurerM   x   s   € ð €L€L€LrH   Ú	file_pathr	   Úparentr   ú&DoctestModule | DoctestTextfile | Nonec                ó,  — |j         }| j        dk    rT|j        j        rGt	          t          | ¦  «        t          | ¦  «        f¦  «        st                               || ¬¦  «        S n-t          || |¦  «        rt                               || ¬¦  «        S d S )Nz.py©Úpath)ÚconfigÚsuffixÚoptionr3   ÚanyÚ_is_setup_pyÚ_is_main_pyÚDoctestModuleÚfrom_parentÚ_is_doctestÚDoctestTextfile)rN   rO   rT   s      rF   Úpytest_collect_filer^   ~   s    € ð Œ]€FØÔ˜5Ò Ð ØŒ=Ô'ð 	EµÝ˜)Ñ$Ô$¥k°)Ñ&<Ô&<Ð=ñ1
ô 1
ð 	Eõ !×,Ò,¨V¸)Ð,ÑDÔDÐDøÝ	�V˜Y¨Ñ	/Ô	/ð CÝ×*Ò*¨6¸	Ð*ÑBÔBÐBØˆ4rH   rS   Úboolc                óT   — | j         dk    rdS |                      ¦   «         }d|v pd|v S )Nzsetup.pyFs
   setuptoolss	   distutils)ÚnameÚ
read_bytes)rS   Úcontentss     rF   rX   rX   �   s8   € Ø„y�JÒÐØˆuØ�ŠÑ Ô €HØ˜HÐ$Ð@¨¸Ð(@Ð@rH   rT   r   c                ó´   ‡— ‰j         dv r|j                             ‰¦  «        rdS |                      d¦  «        pdg}t	          ˆfd„|D ¦   «         ¦  «        S )N)z.txtz.rstTr;   z	test*.txtc              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S rJ   r   )Ú.0ÚglobrS   s     €rF   ú	<genexpr>z_is_doctest.<locals>.<genexpr>˜   s-   øè è € Ð8Ð8¨$�z˜$ Ñ%Ô%Ð8Ð8Ð8Ð8Ð8Ð8rH   )rU   ÚsessionÚ
isinitpathÚ	getoptionrW   )rT   rS   rO   Úglobss    `  rF   r\   r\   ”   sh   ø€ Ø„{Ð&Ð&Ð&¨6¬>×+DÒ+DÀTÑ+JÔ+JÐ&ØˆtØ×Ò˜]Ñ+Ô+Ð<°¨}€EÝÐ8Ð8Ð8Ð8°%Ð8Ñ8Ô8Ñ8Ô8Ð8rH   c                ó   — | j         dk    S )Nz__main__.py)ra   rR   s    rF   rY   rY   ›   s   € ØŒ9˜Ò%Ð%rH   c                  ó   — e Zd Zd
d„Zdd„Zd	S )ÚReprFailDoctestÚreprlocation_linesú0Sequence[tuple[ReprFileLocation, Sequence[str]]]r(   r)   c                ó   — || _         d S rJ   )rp   )Úselfrp   s     rF   Ú__init__zReprFailDoctest.__init__    s   € ð #5ˆÔÐÐrH   Útwr   c                ó~   — | j         D ]4\  }}|D ]}|                     |¦  «         Œ|                     |¦  «         Œ5d S rJ   )rp   ÚlineÚ
toterminal)rs   ru   ÚreprlocationÚlinesrw   s        rF   rx   zReprFailDoctest.toterminal¥   sZ   € Ø#'Ô#:ð 	(ð 	(ÑˆL˜%Øð ð �Ø—’˜‘”��Ø×#Ò# BÑ'Ô'Ð'Ð'ð	(ð 	(rH   N)rp   rq   r(   r)   )ru   r   r(   r)   )Ú__name__Ú
__module__Ú__qualname__rt   rx   rL   rH   rF   ro   ro   Ÿ   s<   € € € € € ð5ð 5ð 5ð 5ð
(ð (ð (ð (ð (ð (rH   ro   c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚMultipleDoctestFailuresÚfailuresú Sequence[doctest.DocTestFailure]r(   r)   c                óV   •— t          ¦   «                              ¦   «          || _        d S rJ   )Úsuperrt   r€   )rs   r€   Ú	__class__s     €rF   rt   z MultipleDoctestFailures.__init__­   s$   ø€ Ý‰Œ×ÒÑÔÐØ ˆŒˆˆrH   )r€   r�   r(   r)   )r{   r|   r}   rt   Ú__classcell__©r„   s   @rF   r   r   ¬   s=   ø€ € € € € ð!ð !ð !ð !ð !ð !ð !ð !ð !ð !rH   r   útype[doctest.DocTestRunner]c                 ó:   ‡— dd l Š G ˆfd„d‰j        ¦  «        } | S )Nr   c                  óH   •‡ — e Zd ZdZ	 	 	 	 ddˆ fd„Zdˆfd„Zdˆfd„Zˆ xZS )ú/_init_runner_class.<locals>.PytestDoctestRunnerzˆRunner to collect failures.

        Note that the out variable in this case is a list instead of a
        stdout-like object.
        Nr   TÚcheckerúdoctest.OutputChecker | NoneÚverboseúbool | NoneÚoptionflagsÚintÚcontinue_on_failurer_   r(   r)   c                ó^   •— t          ¦   «                              |||¬¦  «         || _        d S )N)r‹   r�   r�   )rƒ   rt   r‘   )rs   r‹   r�   r�   r‘   r„   s        €rF   rt   z8_init_runner_class.<locals>.PytestDoctestRunner.__init__¼   s2   ø€ õ ‰GŒG×Ò W°gÈ;ÐÑWÔWÐWØ':ˆDÔ$Ð$Ð$rH   Útestúdoctest.DocTestÚexampleúdoctest.ExampleÚgotrB   c                óh   •—  ‰j         |||¦  «        }| j        r|                     |¦  «         d S |‚rJ   )ÚDocTestFailurer‘   r9   )rs   Úoutr“   r•   r—   ÚfailureÚdoctests         €rF   Úreport_failurez>_init_runner_class.<locals>.PytestDoctestRunner.report_failureÆ   sC   ø€ ð -�gÔ,¨T°7¸CÑ@Ô@ˆGØÔ'ð Ø—
’
˜7Ñ#Ô#Ð#Ð#Ð#à�rH   Úexc_infoú>tuple[type[BaseException], BaseException, types.TracebackType]c                ó  •— t          |d         t          ¦  «        r|d         ‚t          |d         t          j        ¦  «        rt	          j        d¦  «          ‰j        |||¦  «        }| j        r|                     |¦  «         d S |‚)Né   zQuitting debugger)	Ú
isinstancer   ÚbdbÚBdbQuitr   ÚexitÚUnexpectedExceptionr‘   r9   )rs   rš   r“   r•   rž   r›   rœ   s         €rF   Úreport_unexpected_exceptionzK_init_runner_class.<locals>.PytestDoctestRunner.report_unexpected_exceptionÓ   s�   ø€ õ ˜( 1œ+Õ'7Ñ8Ô8ð "Ø˜q”kÐ!Ý˜( 1œ+¥s¤{Ñ3Ô3ð 3Ý”Ð1Ñ2Ô2Ð2Ø1�gÔ1°$¸ÀÑJÔJˆGØÔ'ð Ø—
’
˜7Ñ#Ô#Ð#Ð#Ð#à�rH   ©NNr   T)
r‹   rŒ   r�   rŽ   r�   r�   r‘   r_   r(   r)   )r“   r”   r•   r–   r—   rB   r(   r)   )r“   r”   r•   r–   rž   rŸ   r(   r)   )r{   r|   r}   Ú__doc__rt   r�   r§   r…   )r„   rœ   s   @€rF   ÚPytestDoctestRunnerrŠ   µ   s—   øø€ € € € € ð	ð 	ð 59Ø#'Ø Ø(,ð	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð	ð 	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	rH   rª   )rœ   ÚDebugRunner)rª   rœ   s    @rF   Ú_init_runner_classr¬   ²   sL   ø€ Ø€N€N€Nð-ð -ð -ð -ð -ð -ð -˜gÔ1ñ -ô -ð -ð^ ÐrH   Tr‹   rŒ   r�   rŽ   r�   r�   r‘   údoctest.DocTestRunnerc                óR   — t           €t          ¦   «         a t          | |||¬¦  «        S )N©r‹   r�   r�   r‘   )rK   r¬   r¯   s       rF   Ú_get_runnerr°   ç   s:   € õ ÐÝ)Ñ+Ô+ˆõ ØØØØ/ð	ñ ô ð rH   c                  óp   ‡ — e Zd Zdˆ fd„Zedˆ fd„¦   «         Zdd„Zdd„Zdd„Zdd„Z	dˆ fd„Z
dd„Zˆ xZS )ÚDoctestItemra   rB   rO   úDoctestTextfile | DoctestModuleÚrunnerr­   Údtestr”   r(   r)   c                ó  •— t          ¦   «                              ||¦  «         || _        || _        d | _        | j        j        }|                     | d d ¬¦  «        }|| _        |j	        | _
        |                      ¦   «          d S )N)ÚnodeÚfuncÚcls)rƒ   rt   r´   rµ   Úobjri   Ú_fixturemanagerÚgetfixtureinfoÚ_fixtureinfoÚnames_closureÚfixturenamesÚ_initrequest)rs   ra   rO   r´   rµ   ÚfmÚfixtureinfor„   s          €rF   rt   zDoctestItem.__init__ü   s…   ø€ õ 	‰Œ×Ò˜˜vÑ&Ô&Ð&ØˆŒØˆŒ
ð ˆŒØŒ\Ô)ˆØ×'Ò'¨T¸À$Ð'ÑGÔGˆØ'ˆÔØ'Ô5ˆÔØ×ÒÑÔÐÐÐrH   r    c               óN   •— t          ¦   «                              ||||¬¦  «        S )zThe public named constructor.)ra   rO   r´   rµ   )rƒ   r[   )r¹   rO   ra   r´   rµ   r„   s        €rF   r[   zDoctestItem.from_parent  s'   ø€ õ ‰wŒw×"Ò"¨°VÀFÐRWÐ"ÑXÔXÐXrH   c                ó@   — i | _         t          | d¬¦  «        | _        d S )NT)Ú	_ispytest)Úfuncargsr   Ú_request©rs   s    rF   rÀ   zDoctestItem._initrequest  s!   € Ø+-ˆŒÝ" 4°4Ð8Ñ8Ô8ˆŒˆˆrH   c                ó  — | j                              ¦   «          t          | j         j        ¬¦  «        }| j                              d¦  «                             ¦   «         D ]
\  }}|||<   Œ| j        j                             |¦  «         d S )N)Ú
getfixtureÚdoctest_namespace)rÇ   Ú_fillfixturesÚdictÚgetfixturevalueÚitemsrµ   rl   Úupdate)rs   rl   ra   Úvalues       rF   ÚsetupzDoctestItem.setup   s…   € ØŒ×#Ò#Ñ%Ô%Ð%Ý ¤Ô =Ð>Ñ>Ô>ˆØœ=×8Ò8Ð9LÑMÔM×SÒSÑUÔUð 	 ð 	 ‰KˆD�%ØˆE�$‰KˆKØŒ
Ô×Ò Ñ&Ô&Ð&Ð&Ð&rH   c                ó¾   — t          | j        ¦  «         |                      ¦   «          g }| j                             | j        |¬¦  «         |rt          |¦  «        ‚d S )N)rš   )Ú_check_all_skippedrµ   Ú$_disable_output_capturing_for_darwinr´   Úrunr   )rs   r€   s     rF   ÚruntestzDoctestItem.runtest'  se   € Ý˜4œ:Ñ&Ô&Ð&Ø×1Ò1Ñ3Ô3Ð3Ø13ˆð 	Œ�Š˜œ
¨ˆÑ1Ô1Ð1Øð 	4Ý)¨(Ñ3Ô3Ð3ð	4ð 	4rH   c                óT  — t          j        ¦   «         dk    rdS | j        j                             d¦  «        }|rm|                     d¬¦  «         |                     ¦   «         \  }}t          j         	                    |¦  «         t          j
         	                    |¦  «         dS dS )zFDisable output capturing. Otherwise, stdout is lost to doctest (#985).ÚDarwinNÚcapturemanagerT)Úin_)ÚplatformÚsystemrT   ÚpluginmanagerÚ	getpluginÚsuspend_global_captureÚread_global_captureÚsysÚstdoutÚwriteÚstderr)rs   Úcapmanrš   Úerrs       rF   rÕ   z0DoctestItem._disable_output_capturing_for_darwin1  s£   € åŒ?ÑÔ Ò(Ð(ØˆFØ”Ô*×4Ò4Ð5EÑFÔFˆØð 	"Ø×)Ò)¨dÐ)Ñ3Ô3Ð3Ø×1Ò1Ñ3Ô3‰HˆC�ÝŒJ×Ò˜SÑ!Ô!Ð!ÝŒJ×Ò˜SÑ!Ô!Ð!Ð!Ð!ð		"ð 	"rH   ÚexcinfoúExceptionInfo[BaseException]ústr | TerminalReprc                ó   •‡— dd l }d }t          |j        |j        |j        z  ¦  «        r	|j        g}n&t          |j        t
          ¦  «        r|j        j        }|€!t          ¦   «                              |¦  «        S g }|D �]î}|j	        }|j
        Š‰j        }‰j        €d }n‰j        |j        z   dz   }t          |¦  «        j        }	t          |||	¦  «        }
t!          ¦   «         }t#          | j                             d¦  «        ¦  «        }|�z|j
        j        €J ‚|j
        j                             d¦  «        }‰j        €J ‚ˆfd„t-          |¦  «        D ¦   «         }|t/          |j        dz
  d¦  «        |j        dz   …         }n>dg}d}|j                             ¦   «         D ]}|                     d	|› d
|› �¦  «         d}Œ t          ||j        ¦  «        r3||                     ||j        |¦  «                             d¦  «        z  }nGt;          j        |j        ¦  «        }|d|j        ›�gz  }|d„ tA          j!        |j        Ž D ¦   «         z  }|                     |
|f¦  «         �ŒðtE          |¦  «        S )Nr   r¡   r7   Fc                ó<   •— g | ]\  }}|‰j         z   d z   d›d|› �‘ŒS )r¡   Ú03dú )Úlineno)rf   ÚiÚxr“   s      €rF   ú
<listcomp>z,DoctestItem.repr_failure.<locals>.<listcomp>c  sF   ø€ ð ð ð Ù9?¸!¸Q�q˜4œ;‘¨Ñ*Ð4Ð4Ð4°Ð4Ð4ðð ð rH   é	   z?EXAMPLE LOCATION UNKNOWN, not showing all tests of that examplez>>>z??? rî   z...ú
zUNEXPECTED EXCEPTION: c                ó8   — g | ]}|                      d ¦  «        ‘ŒS )rô   )Ústrip)rf   rñ   s     rF   rò   z,DoctestItem.repr_failure.<locals>.<listcomp>w  s/   € ð ð ð Ø&'�A—G’G˜D‘M”Mðð ð rH   )#rœ   r¢   rÑ   r™   r¦   r   r€   rƒ   Úrepr_failurer•   r“   Úfilenamerï   r.   r{   r   Ú_get_checkerÚ_get_report_choicerT   rk   Ú	docstringÚ
splitlinesÚ	enumerateÚmaxÚsourcer9   Úoutput_differencer—   Úsplitr   Úfrom_exc_inforž   Ú	tracebackÚformat_exceptionro   )rs   rè   rœ   r€   rp   r›   r•   rø   rï   Úmessagery   r‹   Úreport_choicerz   Úindentrw   Úinner_excinfor“   r„   s                    @€rF   r÷   zDoctestItem.repr_failure=  sà  øø€ ð 	ˆˆˆð ð 	õ ØŒM˜7Ô1°GÔ4OÑOñ
ô 
ð 	.ð  œ�ˆHˆHÝ˜œÕ'>Ñ?Ô?ð 	.Ø”}Ô-ˆHàÐÝ‘7”7×'Ò'¨Ñ0Ô0Ð0àÐØð )	=ñ )	=ˆGØ”oˆGØ”<ˆDØ”}ˆHØŒ{Ð"Ø��àœ w¤~Ñ5¸Ñ9�Ý˜7‘m”mÔ,ˆGå+¨H°f¸gÑFÔFˆLÝ"‘n”nˆGÝ.¨t¬{×/DÒ/DÀ_Ñ/UÔ/UÑVÔVˆMØÐ!Ø”|Ô-Ð9Ð9Ð9ØœÔ.×9Ò9¸%Ñ@Ô@�à”{Ð.Ð.Ð.ðð ð ð ÝCLÈUÑCSÔCSðñ ô �ð �c '¤.°1Ñ"4°aÑ8Ô8¸7¼>ÈAÑ;MÐMÔN��ð Vð�ð �Ø#œN×5Ò5Ñ7Ô7ð #ð #�DØ—L’LÐ!7¨Ð!7Ð!7°Ð!7Ð!7Ñ8Ô8Ð8Ø"�F�FÝ˜' 7Ô#9Ñ:Ô:ð 	Ø˜×2Ò2Ø˜Wœ[¨-ñô ç’%˜‘+”+ñ��õ !.Ô ;¸GÔ<LÑ MÔ M�ØÐJ°=Ô3FÐJÐJÐKÑK�Øð ð Ý+4Ô+EÀwÔGWÐ+Xðñ ô ñ �ð ×%Ò% |°UÐ&;Ñ<Ô<Ð<Ñ<ÝÐ1Ñ2Ô2Ð2rH   ú.tuple[os.PathLike[str] | str, int | None, str]c                ó:   — | j         | j        j        d| j        › �fS )Nz
[doctest] )rS   rµ   rï   ra   rÈ   s    rF   Ú
reportinfozDoctestItem.reportinfo}  s!   € ØŒy˜$œ*Ô+Ð-E¸$¼)Ð-EÐ-EÐEÐErH   )
ra   rB   rO   r³   r´   r­   rµ   r”   r(   r)   )
rO   r³   ra   rB   r´   r­   rµ   r”   r(   r    ©r(   r)   )rè   ré   r(   rê   )r(   r	  )r{   r|   r}   rt   Úclassmethodr[   rÀ   rÒ   r×   rÕ   r÷   r  r…   r†   s   @rF   r²   r²   û   sø   ø€ € € € € ðð ð ð ð ð ð& ð
Yð 
Yð 
Yð 
Yð 
Yñ „[ð
Yð9ð 9ð 9ð 9ð'ð 'ð 'ð 'ð4ð 4ð 4ð 4ð	"ð 	"ð 	"ð 	"ð>3ð >3ð >3ð >3ð >3ð >3ð@Fð Fð Fð Fð Fð Fð Fð FrH   r²   údict[str, int]c                 ó¾   — dd l } t          | j        | j        | j        | j        | j        | j        t          ¦   «         t          ¦   «         t          ¦   «         ¬¦	  «	        S )Nr   )	ÚDONT_ACCEPT_TRUE_FOR_1ÚDONT_ACCEPT_BLANKLINEÚNORMALIZE_WHITESPACEr-   ÚIGNORE_EXCEPTION_DETAILÚCOMPARISON_FLAGSÚALLOW_UNICODEÚALLOW_BYTESÚNUMBER)rœ   rÍ   r  r  r  r-   r  r  Ú_get_allow_unicode_flagÚ_get_allow_bytes_flagÚ_get_number_flag©rœ   s    rF   Ú_get_flag_lookupr  �  sa   € Ø€N€N€NåØ&Ô=Ø%Ô;Ø$Ô9ØÔ!Ø 'Ô ?Ø Ô1Ý-Ñ/Ô/Ý)Ñ+Ô+ÝÑ!Ô!ð
ñ 
ô 
ð 
rH   c                óp   — |                       d¦  «        }t          ¦   «         }d}|D ]}|||         z  }Œ|S )Nr+   r   )Úgetinir  )rT   Úoptionflags_strÚflag_lookup_tableÚflag_accÚflags        rF   Úget_optionflagsr#  ‘  sK   € Ø—m’mÐ$9Ñ:Ô:€OÝ(Ñ*Ô*ÐØ€HØð ,ð ,ˆØÐ% dÔ+Ñ+ˆˆØ€OrH   c                ób   — |                       d¦  «        }|r|                       d¦  «        rd}|S )Nr>   ÚusepdbF)Úgetvalue)rT   r‘   s     rF   Ú_get_continue_on_failurer'  š  s?   € Ø &§¢Ð0MÑ NÔ NÐØð (ð �?Š?˜8Ñ$Ô$ð 	(Ø"'ÐØÐrH   c                  ó   — e Zd ZdZdd„ZdS )r]   Nr(   úIterable[DoctestItem]c              #  óø  K  — dd l }| j                             d¦  «        }| j                             |¦  «        }t          | j        ¦  «        }| j        j        }ddi}t          | j        ¦  «        }t          d|t          ¦   «         t          | j        ¦  «        ¬¦  «        } |j        ¦   «         }	|	                     ||||d¦  «        }
|
j        r't                               | |
j        ||
¬¦  «        V — d S d S )Nr   r0   r{   Ú__main__F©r�   r�   r‹   r‘   ©ra   r´   rµ   )rœ   rT   r  rS   Ú	read_textrB   ra   r#  r°   rù   r'  ÚDocTestParserÚget_doctestÚexamplesr²   r[   )rs   rœ   ÚencodingÚtextrø   ra   rl   r�   r´   r'   r“   s              rF   r1   zDoctestTextfile.collect§  s  è è € Øˆˆˆð ”;×%Ò%Ð&8Ñ9Ô9ˆØŒy×"Ò" 8Ñ,Ô,ˆÝ�t”y‘>”>ˆØŒyŒ~ˆØ˜ZÐ(ˆå% d¤kÑ2Ô2ˆåØØ#Ý ‘N”NÝ 8¸¼Ñ EÔ Eð	
ñ 
ô 
ˆð '�Ô&Ñ(Ô(ˆØ×!Ò! $¨¨t°X¸qÑAÔAˆØŒ=ð 	Ý×)Ò)Ø˜4œ9¨V¸4ð *ñ ô ð ð ð ð ð ð	ð 	rH   ©r(   r)  )r{   r|   r}   rº   r1   rL   rH   rF   r]   r]   ¤  s-   € € € € € Ø
€Cðð ð ð ð ð rH   r]   r“   r”   c                óv   ‡— ddl Št          ˆfd„| j        D ¦   «         ¦  «        }|rt          d¦  «         dS dS )zVRaise pytest.skip() if all examples in the given DocTest have the SKIP
    option set.r   Nc              3  óX   •K  — | ]$}|j                              ‰j        d ¦  «        V — Œ%dS )FN)ÚoptionsÚgetÚSKIP)rf   rñ   rœ   s     €rF   rh   z%_check_all_skipped.<locals>.<genexpr>È  s5   øè è € ÐPÐP¸Q�a”i—m’m G¤L°%Ñ8Ô8ÐPÐPÐPÐPÐPÐPrH   z!all tests skipped by +SKIP option)rœ   Úallr1  r   )r“   Úall_skippedrœ   s     @rF   rÔ   rÔ   Ã  sY   ø€ ð €N€N€NåÐPÐPÐPÐPÀ$Ä-ÐPÑPÔPÑPÔP€KØð 2ÝÐ0Ñ1Ô1Ð1Ð1Ð1ð2ð 2rH   rº   Úobjectc                ó(   — t          | dd¦  «        duS )zmReturn if an object is possibly a mock object by checking the
    existence of a highly improbable attribute.Ú1pytest_mock_example_attribute_that_shouldnt_existNr   )rº   s    rF   Ú
_is_mockedr?  Í  s!   € õ 	�SÐMÈtÑTÔTØð	ðrH   úGenerator[None]c               #  ó’   ‡K  — t           j        Šddœd
ˆfd	„} | t           _        	 dV — ‰t           _        dS # ‰t           _        w xY w)z€Context manager which replaces ``inspect.unwrap`` with a version
    that's aware of mock objects and doesn't recurse into them.N©Ústopr¸   úCallable[..., Any]rC  úCallable[[Any], Any] | Noner(   r
   c               óÒ   •‡ ‡— 	 |�	|t           u r ‰‰ t           ¬¦  «        S |Š ‰‰ ˆˆ fd„¬¦  «        S # t          $ r'}t          j        d|›d‰ ›d�t          ¦  «         ‚ d }~ww xY w)NrB  c                ó8   •— t          | ¦  «        p
 ‰‰¦  «        S rJ   )r?  )rº   Ú_stopr¸   s    €€rF   ú<lambda>zF_patch_unwrap_mock_aware.<locals>._mock_aware_unwrap.<locals>.<lambda>ã  s   ø€ µjÀ±o´oÐ6TÈÈÈtÉÌ€ rH   zGot z when unwrapping z.  This is usually caused by a violation of Python's object protocol; see e.g. https://github.com/pytest-dev/pytest/issues/5080)r?  Ú	ExceptionÚwarningsÚwarnr   )r¸   rC  ÚerH  Úreal_unwraps   `  @€rF   Ú_mock_aware_unwrapz4_patch_unwrap_mock_aware.<locals>._mock_aware_unwrapÜ  sº   øøø€ ð	Øˆ|˜t¥zÐ1Ð1Ø"�{ 4­jÐ9Ñ9Ô9Ð9ØˆEØ�;˜tÐ*TÐ*TÐ*TÐ*TÐ*TÐUÑUÔUÐUøÝð 	ð 	ð 	ÝŒMðC�qð Cð C¨Tð Cð Cð Cõ ñ	ô ð ð øøøøð	øøøs   …5 ¢5 µ
A&¿"A!Á!A&)r¸   rD  rC  rE  r(   r
   )ÚinspectÚunwrap)rO  rN  s    @rF   Ú_patch_unwrap_mock_awarerR  Ö  st   øè è € õ ”.€Kð JNðð ð ð ð ð ð ð ð" (…G„Nð%Øˆˆˆà$�Œˆˆø˜�ŒÐ$Ð$Ð$Ð$s	   ¦8 ¸Ac                  ó   — e Zd Zdd„ZdS )rZ   r(   r)  c              #  óJ  K  — dd l } G d„ d|j        ¦  «        }	 | j        }nH# t          j        $ r6 | j                             d¦  «        rt          d| j        ›�¦  «         n‚ Y nw xY w| j	        j
                             | ¦  «          |¦   «         }t          | j        ¦  «        }t          d|t          ¦   «         t          | j        ¦  «        ¬¦  «        }|                     ||j        ¦  «        D ].}|j        r%t&                               | |j        ||¬¦  «        V — Œ/d S )	Nr   c                  óÌ   ‡ — e Zd Zej        dd…         Zedk     p+edk    oej        j        dk     pedk    oej        j        dk     Zerˆ fd„Zej        dk     r	ˆ fd	„Z	ˆ xZ
S ˆ xZ
S )
ú5DoctestModule.collect.<locals>.MockAwareDocTestFinderNé   )é   é   ró   )rX  é   rX  c                óÜ   •— t          |t          ¦  «        rt          |d|¦  «        }t          |d¦  «        rt	          j        |¦  «        }t          ¦   «                              ||¦  «        S )a%  On older Pythons, doctest code does not take into account
                    `@property`. https://github.com/python/cpython/issues/61648

                    Moreover, wrapped Doctests need to be unwrapped so the correct
                    line number is returned. #8796
                    ÚfgetÚ__wrapped__)r¢   ÚpropertyÚgetattrÚhasattrrP  rQ  rƒ   Ú_find_lineno)rs   rº   Úsource_linesr„   s      €rF   ra  zBDoctestModule.collect.<locals>.MockAwareDocTestFinder._find_lineno  sm   ø€ õ " #¥xÑ0Ô0ð 8Ý% c¨6°3Ñ7Ô7˜å˜s MÑ2Ô2ð 2å%œn¨SÑ1Ô1˜õ !™7œ7×/Ò/ØØ$ñô ð rH   )rX  é   c                óŠ   •— t          |t          j        ¦  «        r|j        }t	          ¦   «                              ||¦  «        S )a>  `cached_property` objects are never considered a part
                    of the 'current module'. As such they are skipped by doctest.
                    Here we override `_from_module` to check the underlying
                    function instead. https://github.com/python/cpython/issues/107995
                    )r¢   Ú	functoolsÚcached_propertyr¸   rƒ   Ú_from_module)rs   Úmoduler<  r„   s      €rF   rg  zBDoctestModule.collect.<locals>.MockAwareDocTestFinder._from_module  s=   ø€ õ " &­)Ô*CÑDÔDð -Ø!'¤˜õ !™7œ7×/Ò/°¸Ñ?Ô?Ð?rH   )r{   r|   r}   râ   Úversion_infoÚpy_ver_info_minorÚmicroÚis_find_lineno_brokenra  rg  r…   r†   s   @rF   ÚMockAwareDocTestFinderrV  ø  sÝ   ø€ € € € € Ø #Ô 0°°!°Ô 4Ðà! GÒ+ð QØ%¨Ò0ÐO°SÔ5EÔ5KÈaÒ5OðQà%¨Ò0ÐO°SÔ5EÔ5KÈaÒ5Oð "ð
 %ð ðð ð ð ð ð( Ô 'Ò)Ð)ð
@ð 
@ð 
@ð 
@ð 
@ð 
@ð 
@ð 
@ð 
@ð *Ð)Ð)Ð)rH   rm  r=   zunable to import module Fr,  r-  )rœ   ÚDocTestFinderrº   r   ÚCollectErrorrT   r&  r   rS   ri   r»   Úparsefactoriesr#  r°   rù   r'  Úfindr{   r1  r²   r[   ra   )rs   rœ   rm  rh  Úfinderr�   r´   r“   s           rF   r1   zDoctestModule.collectõ  s�  è è € Øˆˆˆð)	@ð )	@ð )	@ð )	@ð )	@ WÔ%:ñ )	@ô )	@ð )	@ðV	Ø”XˆFˆFøÝÔ%ð 	ð 	ð 	ØŒ{×#Ò#Ð$BÑCÔCð ÝÐ=°´	Ð=Ð=Ñ>Ô>Ð>Ð>àð ?Ð>ð	øøøð 	ŒÔ$×3Ò3°DÑ9Ô9Ð9ð (Ð'Ñ)Ô)ˆÝ% d¤kÑ2Ô2ˆÝØØ#Ý ‘N”NÝ 8¸¼Ñ EÔ Eð	
ñ 
ô 
ˆð —K’K ¨¬Ñ8Ô8ð 	ð 	ˆDØŒ}ð Ý!×-Ò-Ø˜tœy°¸tð .ñ ô ð ð ð øð	ð 	s   ›# £AA(Á'A(Nr4  )r{   r|   r}   r1   rL   rH   rF   rZ   rZ   ô  s.   € € € € € ðGð Gð Gð Gð Gð GrH   rZ   útype[doctest.OutputChecker]c                 ó4   — dd l }  G d„ d| j        ¦  «        }|S )Nr   c                  ó¬   ‡ — e Zd Z ej        dej        ¦  «        Z ej        dej        ¦  «        Z ej        dej        ¦  «        Z	dˆ fd„Z
dd„Zˆ xZS )ú2_init_checker_class.<locals>.LiteralsOutputCheckerz(\W|^)[uU]([rR]?[\'\"])z(\W|^)[bB]([rR]?[\'\"])aÍ  
            (?P<number>
              (?P<mantissa>
                (?P<integer1> [+-]?\d*)\.(?P<fraction>\d+)
                |
                (?P<integer2> [+-]?\d+)\.
              )
              (?:
                [Ee]
                (?P<exponent1> [+-]?\d+)
              )?
              |
              (?P<integer3> [+-]?\d+)
              (?:
                [Ee]
                (?P<exponent2> [+-]?\d+)
              )
            )
            ÚwantrB   r—   r�   r�   r(   r_   c                óÒ  •— t          ¦   «                              |||¦  «        rdS |t          ¦   «         z  }|t          ¦   «         z  }|t	          ¦   «         z  }|s|s|sdS d	d„}|r" || j        |¦  «        } || j        |¦  «        }|r" || j        |¦  «        } || j        |¦  «        }|r|                      ||¦  «        }t          ¦   «                              |||¦  «        S )
NTFÚregexúre.Pattern[str]ÚtxtrB   r(   c                ó.   — t          j        | d|¦  «        S )Nz\1\2)ÚreÚsub)ry  r{  s     rF   Úremove_prefixeszX_init_checker_class.<locals>.LiteralsOutputChecker.check_output.<locals>.remove_prefixesk  s   € Ý”v˜e W¨cÑ2Ô2Ð2rH   )ry  rz  r{  rB   r(   rB   )rƒ   Úcheck_outputr  r  r  Ú_unicode_literal_reÚ_bytes_literal_reÚ_remove_unwanted_precision)	rs   rw  r—   r�   Úallow_unicodeÚallow_bytesÚallow_numberr  r„   s	           €rF   r€  z?_init_checker_class.<locals>.LiteralsOutputChecker.check_output`  s&  ø€ Ý‰wŒw×#Ò# D¨#¨{Ñ;Ô;ð Ø�tà'Õ*AÑ*CÔ*CÑCˆMØ%Õ(=Ñ(?Ô(?Ñ?ˆKØ&Õ)9Ñ);Ô);Ñ;ˆLà ð ¨ð ¸\ð Ø�uð3ð 3ð 3ð 3ð ð EØ&� tÔ'?ÀÑFÔF�Ø%�o dÔ&>ÀÑDÔD�àð CØ&� tÔ'=¸tÑDÔD�Ø%�o dÔ&<¸cÑBÔB�àð AØ×5Ò5°d¸CÑ@Ô@�å‘7”7×'Ò'¨¨c°;Ñ?Ô?Ð?rH   c                óð  — t          | j                             |¦  «        ¦  «        }t          | j                             |¦  «        ¦  «        }t          |¦  «        t          |¦  «        k    r|S d}t	          ||d¬¦  «        D �]o\  }}|                     d¦  «        }|                     d¦  «        }	|	€|                     d¦  «        }	|€dnt          |¦  «        }
|	�|
t          |	¦  «        z  }
t          |                     ¦   «         ¦  «        t          t          |                     ¦   «         ¦  «        d|
 z  ¬¦  «        k    rª|d | 	                    ¦   «         |z   …         |                     ¦   «         z   || 
                    ¦   «         |z   d …         z   }|| 
                    ¦   «         | 	                    ¦   «         z
  | 
                    ¦   «         | 	                    ¦   «         z
  z
  z  }�Œq|S )	Nr   T)ÚstrictÚfractionÚ	exponent1Ú	exponent2é
   )Úabs)ÚlistÚ
_number_reÚfinditerÚlenÚziprE   r�   Úfloatr   ÚstartÚend)rs   rw  r—   ÚwantsÚgotsÚoffsetÚwÚgr‰  ÚexponentÚ	precisions              rF   rƒ  zM_init_checker_class.<locals>.LiteralsOutputChecker._remove_unwanted_precision{  s¯  € Ý˜œ×1Ò1°$Ñ7Ô7Ñ8Ô8ˆEÝ˜œ×0Ò0°Ñ5Ô5Ñ6Ô6ˆDÝ�5‰zŒz�S ™YœYÒ&Ð&Ø�
ØˆFÝ˜E 4°Ð5Ñ5Ô5ð Jñ J‘��1Ø'(§w¢w¨zÑ':Ô':�Ø'(§w¢w¨{Ñ';Ô';�ØÐ#Ø Ÿwšw {Ñ3Ô3�HØ!)Ð!1˜A˜Aµs¸8±}´}�	ØÐ'Ø¥ X¡¤Ñ.�IÝ˜Ÿš™œÑ#Ô#¥v­e°A·G²G±I´IÑ.>Ô.>ÀBÈÈ
ÁNÐ'SÑ'SÔ'SÒSÐSð
 Ð0˜aŸgšg™iœi¨&Ñ0Ð0Ô1°A·G²G±I´IÑ=ÀÀAÇEÂEÁGÄGÈfÑDTÐDVÐDVÔ@WÑWð ð ˜aŸeše™gœg¨¯ª©	¬	Ñ1°Q·U²U±W´W¸q¿wºw¹y¼yÑ5HÑIÑI�FùØˆJrH   )rw  rB   r—   rB   r�   r�   r(   r_   )rw  rB   r—   rB   r(   rB   )r{   r|   r}   r}  ÚcompileÚUNICODEr�  r‚  ÚVERBOSEr�  r€  rƒ  r…   r†   s   @rF   ÚLiteralsOutputCheckerrv  B  s¦   ø€ € € € € ð
 )˜bœjÐ)CÀRÄZÑPÔPÐØ&˜BœJÐ'AÀ2Ä:ÑNÔNÐØ�R”Zðð& ŒJñ)
ô 
ˆ
ð.	@ð 	@ð 	@ð 	@ð 	@ð 	@ð6	ð 	ð 	ð 	ð 	ð 	ð 	ð 	rH   r   )rœ   ÚOutputChecker)rœ   r   s     rF   Ú_init_checker_classr¢  ?  sI   € Ø€N€N€NðOð Oð Oð Oð O Ô 5ñ Oô Oð Oðb !Ð rH   údoctest.OutputCheckerc                 óH   — t           €t          ¦   «         a t          ¦   «         S )aà  Return a doctest.OutputChecker subclass that supports some
    additional options:

    * ALLOW_UNICODE and ALLOW_BYTES options to ignore u'' and b''
      prefixes (respectively) in string literals. Useful when the same
      doctest should run in Python 2 and Python 3.

    * NUMBER to ignore floating-point differences smaller than the
      precision of the literal number in the doctest.

    An inner class is used to avoid importing "doctest" at the module
    level.
    )r&   r¢  rL   rH   rF   rù   rù   –  s   € õ ÐÝ+Ñ-Ô-ˆÝ‰?Œ?ÐrH   c                 ó*   — ddl }  | j        d¦  «        S )z+Register and return the ALLOW_UNICODE flag.r   Nr  ©rœ   Úregister_optionflagr  s    rF   r  r  ª  s   € à€N€N€Nà&ˆ7Ô& Ñ7Ô7Ð7rH   c                 ó*   — ddl }  | j        d¦  «        S )z)Register and return the ALLOW_BYTES flag.r   Nr  r¦  r  s    rF   r  r  ±  s   € à€N€N€Nà&ˆ7Ô& }Ñ5Ô5Ð5rH   c                 ó*   — ddl }  | j        d¦  «        S )z$Register and return the NUMBER flag.r   Nr  r¦  r  s    rF   r  r  ¸  s   € à€N€N€Nà&ˆ7Ô& xÑ0Ô0Ð0rH   ÚkeyrB   c           
     óˆ   — ddl }t          |j        t          |j        t
          |j        t          |j        t          di|          S )zÓReturn the actual `doctest` module flag value.

    We want to do it as late as possible to avoid importing `doctest` and all
    its dependencies when parsing options, as it adds overhead and breaks tests.
    r   N)
rœ   ÚDOCTEST_REPORT_CHOICE_UDIFFÚREPORT_UDIFFÚDOCTEST_REPORT_CHOICE_CDIFFÚREPORT_CDIFFÚDOCTEST_REPORT_CHOICE_NDIFFÚREPORT_NDIFFÚ(DOCTEST_REPORT_CHOICE_ONLY_FIRST_FAILUREÚREPORT_ONLY_FIRST_FAILUREÚDOCTEST_REPORT_CHOICE_NONE)rª  rœ   s     rF   rú   rú   ¿  sH   € ð €N€N€Nõ 	$ WÔ%9Ý# WÔ%9Ý# WÔ%9Ý0°'Ô2SÝ" Aðð 
ôð rH   ri   )Úscopeúdict[str, Any]c                 ó   — t          ¦   «         S )a€  Fixture that returns a :py:class:`dict` that will be injected into the
    namespace of doctests.

    Usually this fixture is used in conjunction with another ``autouse`` fixture:

    .. code-block:: python

        @pytest.fixture(autouse=True)
        def add_np(doctest_namespace):
            doctest_namespace["np"] = numpy

    For more details: :ref:`doctest_namespace`.
    )rÍ   rL   rH   rF   rË   rË   Ð  s   € õ ‰6Œ6€MrH   )r'   r   r(   r)   r  )rN   r	   rO   r   r(   rP   )rS   r	   r(   r_   )rT   r   rS   r	   rO   r   r(   r_   )r(   r‡   r¨   )
r‹   rŒ   r�   rŽ   r�   r�   r‘   r_   r(   r­   )r(   r  )rT   r   r(   r�   )rT   r   r(   r_   )r“   r”   r(   r)   )rº   r<  r(   r_   )r(   r@  )r(   rs  )r(   r£  )r(   r�   )rª  rB   r(   r�   )r(   r¶  )_r©   Ú
__future__r   r£   Úcollections.abcr   r   r   r   Ú
contextlibr   re  rP  ÚosÚpathlibr	   rÜ   r}  râ   r  ÚtypesÚtypingr
   r   rK  Ú_pytestr   Ú_pytest._code.coder   r   r   Ú_pytest._ior   Ú_pytest.compatr   Ú_pytest.configr   Ú_pytest.config.argparsingr   Ú_pytest.fixturesr   r   Ú_pytest.nodesr   r   Ú_pytest.outcomesr   r   Ú_pytest.pathlibr   Ú_pytest.pythonr   Ú_pytest.python_apir   Ú_pytest.warning_typesr   rœ   Útyping_extensionsr    r´  r®  r°  r¬  r²  rD   rK   r&   Ú__annotations__rG   rM   r^   rX   r\   rY   ro   rJ  r   r¬   r°   r²   r  r#  r'  r]   rÔ   r?  rR  rZ   r¢  rù   r  r  r  rú   rË   rL   rH   rF   ú<module>rÎ     s¦  ðà :Ð :Ð :à "Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ø $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø €€€à Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø /Ð /Ð /Ð /Ð /Ð /Ø +Ð +Ð +Ð +Ð +Ð +Ø &Ð &Ð &Ð &Ð &Ð &Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø !Ð !Ð !Ð !Ð !Ð !Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø $Ð $Ð $Ð $Ð $Ð $Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ø !Ð !Ð !Ð !Ð !Ð !Ø &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø %Ð %Ð %Ð %Ð %Ð %Ø /Ð /Ð /Ð /Ð /Ð /ð ð 'Ø€N€N€Nà&Ð&Ð&Ð&Ð&Ð&à#Ð Ø%Ð Ø%Ð Ø%Ð Ø+?Ð (ð ØØØØ,ðÐ ð €à48€Ð 8Ð 8Ð 8Ñ 8ð/ð /ð /ð /ðdð ð ð ðð ð ð ðAð Að Að Að9ð 9ð 9ð 9ð&ð &ð &ð &ð
(ð 
(ð 
(ð 
(ð 
(�lñ 
(ô 
(ð 
(ð!ð !ð !ð !ð !˜iñ !ô !ð !ð2ð 2ð 2ð 2ðl -1ØØØ $ð	ð ð ð ð ð(CFð CFð CFð CFð CF�$ñ CFô CFð CFðLð ð ð ð ð ð ð ðð ð ð ðð ð ð ð �fñ ô ð ð>2ð 2ð 2ð 2ðð ð ð ð ð%ð %ð %ñ „ð%ð:Hð Hð Hð Hð H�Fñ Hô Hð HðVT!ð T!ð T!ð T!ðnð ð ð ð(8ð 8ð 8ð 8ð6ð 6ð 6ð 6ð1ð 1ð 1ð 1ðð ð ð ð" 	€ˆyÐÑÔðð ð ñ Ôðð ð rH   