§
    øÛg›.  ã                   ól  — d Z ddlmZ ddlZddlZddlmZmZmZ ddl	m
Z
 dZdZdZd	Zd
ZeeeeefZd„ Zd„ Zd„ Z G d„ de¦  «        Z G d„ dej        ¦  «        Zd„ Zd„ Z G d„ dej        ¦  «        Zd„ Z G d„ dej        ¦  «        Zd„ Zd„ Zd„ Zd„ Z d„ Z! ej"        d¬¦  «        d „ ¦   «         Z#dS )!z5 discover and run doctests in modules and test files.é    )Úabsolute_importN)ÚExceptionInfoÚReprFileLocationÚTerminalRepr)ÚFixtureRequestÚnoneÚcdiffÚndiffÚudiffÚonly_first_failurec                 óV  — |                       ddddg¬¦  «         |                      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 S )NÚdoctest_optionflagszoption flags for doctestsÚargsÚELLIPSIS)ÚtypeÚdefaultÚ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   r   Úchoicesr   z--doctest-globÚappendÚpatz2doctests file matching pattern, default: test*.txtÚdoctestglob)r   r   Úmetavarr   r   z--doctest-ignore-import-errorszignore doctest ImportErrorsÚdoctest_ignore_import_errors)ÚaddiniÚgetgroupÚ	addoptionÚstrÚlowerÚDOCTEST_REPORT_CHOICES)ÚparserÚgroups     úE/granary/edev/quantum/lib/python3.11/site-packages/_pytest/doctest.pyÚpytest_addoptionr)      sö   € Ø
‡M‚MÐ'Ð)DØ˜j˜\ð ñ +ô +ð +à�OŠO˜IÑ&Ô&€EØ	‡O‚OÐ'Ø UØ.Øð ñ ô ð ð 
‡O‚OÐ&ÝŒY ØHÝ&Øð	 ñ ô ð ð
 
‡O‚OÐ$Ø ¨UØAØð ñ ô ð ð 
‡O‚OÐ4Ø UØ*Ø+ð ñ -ô -ð -ð -ð -ó    c                 ó¨   — |j         }| j        dk    r|j        j        rt	          | |¦  «        S d S t          || |¦  «        rt          | |¦  «        S d S )Nz.py)ÚconfigÚextÚoptionr   ÚDoctestModuleÚ_is_doctestÚDoctestTextfile)ÚpathÚparentr,   s      r(   Úpytest_collect_filer4   0   sk   € ØŒ]€FØ„x�5ÒÐØŒ=Ô'ð 	/Ý   vÑ.Ô.Ð.ð	/ð 	/å	�V˜T 6Ñ	*Ô	*ð -Ý˜t VÑ,Ô,Ð,ð-ð -r*   c                 ó¼   — |j         dv r|j                             |¦  «        rdS |                      d¦  «        pdg}|D ]}|                     |¬¦  «        r dS ŒdS )N)z.txtz.rstTr   z	test*.txt)ÚfnmatchF)r-   ÚsessionÚ
isinitpathÚ	getoptionÚcheck)r,   r2   r3   ÚglobsÚglobs        r(   r0   r0   9   sz   € Ø„xÐ#Ð#Ð#¨¬×(AÒ(AÀ$Ñ(GÔ(GÐ#ØˆtØ×Ò˜]Ñ+Ô+Ð<°¨}€EØð ð ˆØ�:Š:˜dˆ:Ñ#Ô#ð 	Ø�4�4ð	àˆ5r*   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚReprFailDoctestc                 ó"   — || _         || _        d S ©N)ÚreprlocationÚlines)ÚselfrA   rB   s      r(   Ú__init__zReprFailDoctest.__init__E   s   € Ø(ˆÔØˆŒ
ˆ
ˆ
r*   c                 óx   — | j         D ]}|                     |¦  «         Œ| j                             |¦  «         d S r@   )rB   ÚlinerA   Ú
toterminal)rC   ÚtwrF   s      r(   rG   zReprFailDoctest.toterminalI   sA   € Ø”Jð 	ð 	ˆDØ�GŠG�D‰MŒMˆMˆMØÔ×$Ò$ RÑ(Ô(Ð(Ð(Ð(r*   N)Ú__name__Ú
__module__Ú__qualname__rD   rG   © r*   r(   r>   r>   C   s2   € € € € € ðð ð ð)ð )ð )ð )ð )r*   r>   c                   ó<   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zˆ fd„Zd„ Zˆ xZS )ÚDoctestItemNc                 ó’   •— t          t          | ¦  «                             ||¦  «         || _        || _        d | _        d | _        d S r@   )ÚsuperrN   rD   ÚrunnerÚdtestÚobjÚfixture_request)rC   Únamer3   rQ   rR   Ú	__class__s        €r(   rD   zDoctestItem.__init__P   sF   ø€ Ý�k˜4Ñ Ô ×)Ò)¨$°Ñ7Ô7Ð7ØˆŒØˆŒ
ØˆŒØ#ˆÔÐÐr*   c                 ó   — | j         �†t          | ¦  «        | _        t          | j        j        ¬¦  «        }| j                             d¦  «                             ¦   «         D ]
\  }}|||<   Œ| j         j                             |¦  «         d S d S )N)Ú
getfixtureÚdoctest_namespace)rR   Ú_setup_fixturesrT   ÚdictÚgetfixturevalueÚitemsr;   Úupdate)rC   r;   rU   Úvalues       r(   ÚsetupzDoctestItem.setupW   s“   € ØŒ:Ð!Ý#2°4Ñ#8Ô#8ˆDÔ Ý DÔ$8Ô$HÐIÑIÔIˆEØ#Ô3×CÒCÐDWÑXÔX×^Ò^Ñ`Ô`ð $ð $‘��eØ#��d‘�ØŒJÔ×#Ò# EÑ*Ô*Ð*Ð*Ð*ð "Ð!r*   c                 ól   — t          | j        ¦  «         | j                             | j        ¦  «         d S r@   )Ú_check_all_skippedrR   rQ   Úrun©rC   s    r(   ÚruntestzDoctestItem.runtest_   s.   € Ý˜4œ:Ñ&Ô&Ð&ØŒ�Š˜œ
Ñ#Ô#Ð#Ð#Ð#r*   c                 ó8  •‡— dd l }|                     |j        |j        f¦  «        �rË|j        }|j        }|j        Š‰j        }‰j        €d }n‰j        |j        z   dz   }|j	        j
        }t          |||¦  «        }t          ¦   «         }	t          | j                             d¦  «        ¦  «        }
|�U|j        j                             d¦  «        }ˆfd„t%          |¦  «        D ¦   «         }||j        dz
  |j        dz   …         }n>dg}d}|j                             ¦   «         D ]}|                     d	|›d
|›�¦  «         d}Œ |                     |j        ¦  «        r3||	                     ||j        |
¦  «                             d¦  «        z  }nOt1          |j        j        ¦  «        }|dt5          |j        ¦  «        z  gz  }|t7          j        |j        j        Ž z  }t;          ||¦  «        S t=          t>          | ¦  «                              |¦  «        S )Nr   é   r   Fc                 ó:   •— g | ]\  }}d |‰j         z   dz   |fz  ‘ŒS )z%03d %srg   )Úlineno)Ú.0ÚiÚxÚtests      €r(   ú
<listcomp>z,DoctestItem.repr_failure.<locals>.<listcomp>v   sB   ø€ ð 9ð 9ð 9Ù#˜a ð # a¨$¬+¡o¸Ñ&9¸1Ð%=Ñ=ð 9ð 9ð 9r*   é	   z?EXAMPLE LOCATION UNKNOWN, not showing all tests of that examplez>>>z??? ú z...ú
zUNEXPECTED EXCEPTION: %s)!ÚdoctestÚerrisinstanceÚDocTestFailureÚUnexpectedExceptionr_   Úexamplerm   Úfilenameri   r   rI   r   Ú_get_checkerÚ_get_report_choicer,   r9   Ú	docstringÚ
splitlinesÚ	enumerateÚsourcer   Úoutput_differenceÚgotÚsplitr   Úexc_infoÚreprÚ	tracebackÚformat_exceptionr>   rP   rN   Úrepr_failure)rC   Úexcinforr   Údoctestfailurerv   rw   ri   ÚmessagerA   ÚcheckerÚreport_choicerB   ÚindentrF   Úinner_excinform   rV   s                  @€r(   r…   zDoctestItem.repr_failurec   sE  øø€ ØˆˆˆØ× Ò  'Ô"8Ø")Ô"=ð"?ñ @ô @ñ %	Bà$œ]ˆNØ$Ô,ˆGØ!Ô&ˆDØ”}ˆHØŒ{Ð"Ø��àœ w¤~Ñ5¸Ñ9�Ø”lÔ+ˆGÝ+¨H°f¸gÑFÔFˆLÝ"‘n”nˆGÝ.¨t¬{×/DÒ/DÀ_Ñ/UÔ/UÑVÔVˆMØÐ!Ø&Ô+Ô5×@Ò@ÀÑGÔG�ð9ð 9ð 9ð 9Ý'0°Ñ'7Ô'7ð9ñ 9ô 9�ð ˜gœn¨qÑ0°´À!Ñ1CÐCÔD��àZÐ[�Ø�Ø#œN×5Ò5Ñ7Ô7ð #ð #�DØ—L’L�L°°°¸¸Ð!=Ñ>Ô>Ð>Ø"�F�FØ×$Ò$ WÔ%;Ñ<Ô<ð MØ˜×2Ò2°7Ø&Ô*¨Mñ;ô ;ß;@º5À¹;¼;ñG��õ !.¨g¬mÔ.DÑ EÔ E�ØÐ4Ý  Ô!4Ñ5Ô5ñ6ð 7ñ 7�à�Ô3°W´]Ô5KÐLÑL�Ý" <°Ñ7Ô7Ð7å� dÑ+Ô+×8Ò8¸ÑAÔAÐAr*   c                 ó&   — | j         d d| j        z  fS )Nz[doctest] %s)ÚfspathrU   rd   s    r(   Ú
reportinfozDoctestItem.reportinfoŒ   s   € ØŒ{˜D .°4´9Ñ"<Ð<Ð<r*   )NN)	rI   rJ   rK   rD   r`   re   r…   r�   Ú__classcell__)rV   s   @r(   rN   rN   O   s‰   ø€ € € € € ð$ð $ð $ð $ð $ð $ð+ð +ð +ð$ð $ð $ð'Bð 'Bð 'Bð 'Bð 'BðR=ð =ð =ð =ð =ð =ð =r*   rN   c                  ó¤   — dd l } t          | j        | j        | j        | j        | j        | j        t          ¦   «         t          ¦   «         ¬¦  «        S )Nr   )ÚDONT_ACCEPT_TRUE_FOR_1ÚDONT_ACCEPT_BLANKLINEÚNORMALIZE_WHITESPACEr   ÚIGNORE_EXCEPTION_DETAILÚCOMPARISON_FLAGSÚALLOW_UNICODEÚALLOW_BYTES)
rr   r[   r’   r“   r”   r   r•   r–   Ú_get_allow_unicode_flagÚ_get_allow_bytes_flag©rr   s    r(   Ú_get_flag_lookuprœ   �   sW   € Ø€N€N€NÝ wÔ'EØ&-Ô&CØ%,Ô%AØ Ô)Ø(/Ô(GØ!(Ô!9Ý5Ñ7Ô7Ý1Ñ3Ô3ðñ ô ð r*   c                 óz   — | j                              d¦  «        }t          ¦   «         }d}|D ]}|||         z  }Œ|S )Nr   r   )r,   Úgetinirœ   )r3   Úoptionflags_strÚflag_lookup_tableÚflag_accÚflags        r(   Úget_optionflagsr£   �   sO   € Ø”m×*Ò*Ð+@ÑAÔA€OÝ(Ñ*Ô*ÐØ€HØð ,ð ,ˆØÐ% dÔ+Ñ+ˆˆØ€Or*   c                   ó   — e Zd ZdZd„ ZdS )r1   Nc              #   ó�  K  — dd l }| j                             ¦   «         }t          | j        ¦  «        }| j        j        }ddi}t          | ¦  «        }|                     d|t          ¦   «         ¬¦  «        }|                     ¦   «         }| 	                    ||||d¦  «        }	|	j
        rt          |	j        | ||	¦  «        V — d S d S )Nr   rI   Ú__main__©ÚverboseÚoptionflagsr‰   )rr   rŽ   Úreadr#   Úbasenamer£   ÚDebugRunnerrx   ÚDocTestParserÚget_doctestÚexamplesrN   rU   )
rC   rr   Útextrw   rU   r;   r©   rQ   r&   rm   s
             r(   r   zDoctestTextfile.collect©   sß   è è € Øˆˆˆð Œ{×ÒÑ!Ô!ˆÝ�t”{Ñ#Ô#ˆØŒ{Ô#ˆØ˜ZÐ(ˆõ & dÑ+Ô+ˆØ×$Ò$¨Q¸KÝ-9©^¬^ð %ñ =ô =ˆð ×&Ò&Ñ(Ô(ˆØ×!Ò! $¨¨t°X¸qÑAÔAˆØŒ=ð 	=Ý˜dœi¨¨v°tÑ<Ô<Ð<Ð<Ð<Ð<Ð<ð	=ð 	=r*   )rI   rJ   rK   rS   r   rL   r*   r(   r1   r1   ¦   s(   € € € € € Ø
€Cð=ð =ð =ð =ð =r*   r1   c                 ó€   ‡— ddl Št          ˆfd„| j        D ¦   «         ¦  «        }|rt          j        d¦  «         dS dS )z\raises 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)rj   rl   rr   s     €r(   ú	<genexpr>z%_check_all_skipped.<locals>.<genexpr>Ã   s5   øè è € ÐPÐP¸Q�a”i—m’m G¤L°%Ñ8Ô8ÐPÐPÐPÐPÐPÐPr*   z!all tests skipped by +SKIP option)rr   Úallr¯   ÚpytestÚskip)rm   Úall_skippedrr   s     @r(   rb   rb   ¾   s[   ø€ ð €N€N€NÝÐPÐPÐPÐPÀ$Ä-ÐPÑPÔPÑPÔP€KØð 9ÝŒÐ7Ñ8Ô8Ð8Ð8Ð8ð9ð 9r*   c                   ó   — e Zd Zd„ ZdS )r/   c              #   óL  K  — dd l }| j        j        dk    r%| j        j                             | j        ¦  «        }nc	 | j                             ¦   «         }nH# t          $ r; | j                             d¦  «        rt          j
        d| j        z  ¦  «         n‚ Y nw xY w|                     ¦   «         }t          | ¦  «        }|                     d|t          ¦   «         ¬¦  «        }|                     ||j        ¦  «        D ]"}|j        rt%          |j        | ||¦  «        V — Œ#d S )Nr   zconftest.pyr   zunable to import module %rr§   )rr   rŽ   r«   r,   ÚpluginmanagerÚ_importconftestÚpyimportÚImportErrorÚgetvaluer¸   r¹   ÚDocTestFinderr£   r¬   rx   ÚfindrI   r¯   rN   rU   )rC   rr   ÚmoduleÚfinderr©   rQ   rm   s          r(   r   zDoctestModule.collectÉ   sJ  è è € ØˆˆˆØŒ;Ô =Ò0Ð0Ø”[Ô.×>Ò>¸t¼{ÑKÔKˆFˆFðØœ×-Ò-Ñ/Ô/��øÝð ð ð Ø”;×'Ò'Ð(FÑGÔGð Ý”KÐ <¸t¼{Ñ JÑKÔKÐKÐKàð LÐKðøøøð ×&Ò&Ñ(Ô(ˆÝ% dÑ+Ô+ˆØ×$Ò$¨Q¸KÝ-9©^¬^ð %ñ =ô =ˆà—K’K ¨¬Ñ8Ô8ð 	Að 	AˆDØŒ}ð AÝ! $¤)¨T°6¸4Ñ@Ô@Ð@Ð@Ð@øð	Að 	As   ½A ÁABÂBN)rI   rJ   rK   r   rL   r*   r(   r/   r/   È   s(   € € € € € ðAð Að Að Að Ar*   r/   c                 ó´   — d„ }i | _         | j        j        }|                     | |dd¬¦  «        | _        t          | ¦  «        }|                     ¦   «          |S )zO
    Used by DoctestTextfile and DoctestItem to setup fixture information.
    c                  ó   — d S r@   rL   rL   r*   r(   Úfuncz_setup_fixtures.<locals>.funcã   s   € Øˆr*   NF)ÚnoderÈ   ÚclsÚfuncargs)rË   r7   Ú_fixturemanagerÚgetfixtureinfoÚ_fixtureinfor   Ú_fillfixtures)Údoctest_itemrÈ   ÚfmrT   s       r(   rZ   rZ   ß   ss   € ðð ð ð €LÔØ	Ô	Ô	-€BØ "× 1Ò 1°|È$Ø6:ÀUð !2ñ !Lô !L€LÔå$ \Ñ2Ô2€OØ×!Ò!Ñ#Ô#Ð#ØÐr*   c                  óè   ‡‡— t          t          d¦  «        rt                               ¦   «         S ddlŠddlŠ G ˆˆfd„d‰j        ¦  «        } | t          _        t                               ¦   «         S )aJ  
    Returns a doctest.OutputChecker subclass that takes in account the
    ALLOW_UNICODE option to ignore u'' prefixes in strings and ALLOW_BYTES
    to strip b'' prefixes.
    Useful when the same doctest should run in Python 2 and Python 3.

    An inner class is used to avoid importing "doctest" at the module
    level.
    ÚLiteralsOutputCheckerr   Nc                   óŒ   •— e Zd ZdZ”                     d”j        ¦  «        Z”                     d”j        ¦  «        Zˆ ˆfd„ZdS )ú+_get_checker.<locals>.LiteralsOutputCheckerz­
        Copied from doctest_nose_plugin.py from the nltk project:
            https://github.com/nltk/nltk

        Further extended to also support byte literals.
        z(\W|^)[uU]([rR]?[\'\"])z(\W|^)[bB]([rR]?[\'\"])c                 ón  •— ‰j                              | |||¦  «        }|rdS |t          ¦   «         z  }|t          ¦   «         z  }|s|sdS ˆ	fd„}|r" || j        |¦  «        } || j        |¦  «        }|r" || j        |¦  «        } || j        |¦  «        }‰j                              | |||¦  «        }|S )NTFc                 ó2   •— ‰                      | d|¦  «        S )Nz\1\2)Úsub)ÚregexÚtxtÚres     €r(   Úremove_prefixeszQ_get_checker.<locals>.LiteralsOutputChecker.check_output.<locals>.remove_prefixes  s   ø€ ØŸ6š6 %¨°#Ñ6Ô6Ð6r*   )ÚOutputCheckerÚcheck_outputr™   rš   Ú_unicode_literal_reÚ_bytes_literal_re)
rC   Úwantr   r©   ÚresÚallow_unicodeÚallow_bytesrÜ   rr   rÛ   s
           €€r(   rÞ   z8_get_checker.<locals>.LiteralsOutputChecker.check_output
  s  ø€ ØÔ'×4Ò4°T¸4ÀØ5@ñBô BˆCàð Ø�tà'Õ*AÑ*CÔ*CÑCˆMØ%Õ(=Ñ(?Ô(?Ñ?ˆKØ ð ¨ð Ø�uð7ð 7ð 7ð 7ð 7ð !ð IØ*˜?¨4Ô+CÀTÑJÔJ�DØ)˜/¨$Ô*BÀCÑHÔH�CØð GØ*˜?¨4Ô+AÀ4ÑHÔH�DØ)˜/¨$Ô*@À#ÑFÔF�CØÔ+×8Ò8¸¸tÀSØ9DñFô F�à�
r*   N)	rI   rJ   rK   Ú__doc__ÚcompileÚUNICODErß   rà   rÞ   )rr   rÛ   s   €€r(   rÓ   rÕ   ÿ   sm   ø€ € € € € ð	ð 	ð !ŸjšjÐ)CÀRÄZÑPÔPÐØŸJšJÐ'AÀ2Ä:ÑNÔNÐð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r*   )Úhasattrrx   rÓ   rr   rÛ   rÝ   )rÓ   rr   rÛ   s    @@r(   rx   rx   ï   s–   øø€ õ �|Ð4Ñ5Ô5ð 4Ý×1Ò1Ñ3Ô3Ð3à€N€N€NØ€I€I€Ið"ð "ð "ð "ð "ð "ð "ð " Ô 5ñ "ô "ð "ðH *?…LÔ&Ý×-Ò-Ñ/Ô/Ð/r*   c                  ó4   — ddl } |                      d¦  «        S )z7
    Registers and returns the ALLOW_UNICODE flag.
    r   Nr—   ©rr   Úregister_optionflagr›   s    r(   r™   r™   '  s!   € ð €N€N€NØ×&Ò& Ñ7Ô7Ð7r*   c                  ó4   — ddl } |                      d¦  «        S )z5
    Registers and returns the ALLOW_BYTES flag.
    r   Nr˜   rê   r›   s    r(   rš   rš   /  s!   € ð €N€N€NØ×&Ò& }Ñ5Ô5Ð5r*   c           
      óˆ   — ddl }t          |j        t          |j        t
          |j        t          |j        t          di|          S )zâ
    This function returns 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)
rr   Ú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)Úkeyrr   s     r(   ry   ry   7  sH   € ð
 €N€N€Nõ 	$ WÔ%9Ý# WÔ%9Ý# WÔ%9Ý0°'Ô2SÝ" Aðð 
ôð r*   r7   )Úscopec                  ó   — t          ¦   «         S )z2
    Inject names into the doctest namespace.
    )r[   rL   r*   r(   rY   rY   F  s   € õ
 ‰6Œ6€Mr*   )$rå   Ú
__future__r   rƒ   r¸   Ú_pytest._code.coder   r   r   Ú_pytest.fixturesr   rö   rð   rò   rî   rô   r%   r)   r4   r0   r>   ÚItemrN   rœ   r£   ÚModuler1   rb   r/   rZ   rx   r™   rš   ry   ÚfixturerY   rL   r*   r(   ú<module>r      s-  ðØ ;Ð ;Ø &Ð &Ð &Ð &Ð &Ð &à Ð Ð Ð à €€€Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ +Ð +Ð +Ð +Ð +Ð +ð $Ð Ø%Ð Ø%Ð Ø%Ð Ø+?Ð (ð ØØØØ,ðÐ ð-ð -ð -ð.-ð -ð -ðð ð ð	)ð 	)ð 	)ð 	)ð 	)�lñ 	)ô 	)ð 	)ð>=ð >=ð >=ð >=ð >=�&”+ñ >=ô >=ð >=ðB
ð 
ð 
ðð ð ð=ð =ð =ð =ð =�f”mñ =ô =ð =ð09ð 9ð 9ðAð Að Að Að A�F”Mñ Aô Að Að.ð ð ð 50ð 50ð 50ðp8ð 8ð 8ð6ð 6ð 6ðð ð ð €„�iÐ Ñ Ô ðð ñ !Ô ðð ð r*   