HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/sphinx/ext/__pycache__/doctest.cpython-310.pyc
o

�$�a$Y�@s dZddlZddlZddlZddlZddlmZddlmZddl	m
Z
mZmZm
Z
mZmZmZmZmZmZddlmZddlmZmZmZddlmZdd	lmZmZdd
lm Z ddl!Z!ddl"m#Z#ddl$m%Z%dd
l&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-ddl.m/Z/e
r�ddl0m1Z1e'�2e3�Z4e�5dej6�Z7e�5dej6�Z8de9de9de:fdd�Z;Gdd�de+�Z<Gdd�de<�Z=Gdd�de<�Z>Gd d!�d!e<�Z?Gd"d#�d#e<�Z@Gd$d%�d%e<�ZAe�B�ZCGd&d'�d'�ZDGd(d)�d)�ZEGd*d+�d+ejF�ZGGd,d-�d-e#�ZHd.d/de
e9effd0d1�ZIdS)2z�
    sphinx.ext.doctest
    ~~~~~~~~~~~~~~~~~~

    Mimic doctest by automatically executing code snippets and checking
    their results.

    :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
�N)�StringIO)�path)
�
TYPE_CHECKING�Any�Callable�Dict�Iterable�List�Sequence�Set�Tuple�Type)�nodes)�Element�Node�TextElement)�
directives)�InvalidSpecifier�SpecifierSet)�Version)�Builder)�__)�logging)�bold)�SphinxDirective)�relpath)�
OptionSpec)�Sphinxz^\s*<BLANKLINE>z#\s*doctest:.+$�spec�version�returncCst|�t|�vS)aaCheck `spec` satisfies `version` or not.

    This obeys PEP-440 specifiers:
    https://www.python.org/dev/peps/pep-0440/#version-specifiers

    Some examples:

        >>> is_allowed_version('3.3', '<=3.5')
        True
        >>> is_allowed_version('3.3', '<=3.2')
        False
        >>> is_allowed_version('3.3', '>3.2, <4.0')
        True
    )rr)rr�r!�4/usr/lib/python3/dist-packages/sphinx/ext/doctest.py�is_allowed_version.sr#c@s2eZdZdZdZdZdZdZdee	fdd�Z
dS)	�
TestDirectivez4
    Base class for doctest-related directives.
    Tr�r c
Cs�d�|j�}d}|jdkr-d|vr|}t�d|�}t�|�r-d|jvr-|s'|}t�d|�}tj	}|jdvs:d|jvr=tj
}|jrNdd	�|jd
�d�D�}ndg}||||j|d
�}|�
|�|durg||d<|jdkr||jjdvrwd|d<n#d|d<n|jdkr�|jjdvr�d|d<nd|d<n	|jdkr�d|d<i|d<|jdvr�d|jvr�|jd�dd���}|D]I}|d
|dd�}}	|dvr�|jjjjtd�||jd�q�|	tjvr�|jjjjtd�|	|jd�q�tj|dd�}
|d
d k|d|
<q�|jdk�rLd!|jv�rLz'|jd!}d"�d#d	�tjdd$�D��}t||��s1tjd%}
d&|d|
<Wnt�yK|jjjjtd'�||jd�Ynwd(|jv�rY|jd(|d(<d)|jv�rfd&|d*<|gSd|jv�rpd+|d*<|gS),N�
�doctestz<BLANKLINE>��no-trim-doctest-flags)�	testsetup�testcleanup�hidecSsg|]}|���qSr!)�strip)�.0�xr!r!r"�
<listcomp>^�z%TestDirective.run.<locals>.<listcomp>r�,�default)�testnodetype�groups�test)�py�python�pycon�language�pycon3�testcoder8�python3�
testoutput�none�options)r'r>� r%z+-z"missing '+' or '-' in '%s' option.)�linez'%s' is not a valid option.�+�	pyversion�.cSsg|]}t|��qSr!)�str)r.�vr!r!r"r0�r1��SKIPTz$'%s' is not a valid pyversion option�skipif�trim-doctest-flags�
trim_flagsF)�join�content�name�blankline_re�sub�
doctestopt_re�searchr@r�
literal_block�comment�	arguments�split�set_source_info�config�highlight_language�replace�state�document�reporter�warningr�linenor'�OPTIONFLAGS_BY_NAME�sys�version_infor#r)
�self�coder6�nodetyper5�node�option_strings�option�prefix�option_name�flagr�python_versionr!r!r"�runLs�










�


�

�


���zTestDirective.runN)�__name__�
__module__�__qualname__�__doc__�has_content�required_arguments�optional_arguments�final_argument_whitespacer	rrnr!r!r!r"r$Bsr$c@� eZdZUdejiZeed<dS)�TestsetupDirectiverJ�option_specN�rorprqr�unchanged_requiredryr�__annotations__r!r!r!r"rx��
�rxc@rw)�TestcleanupDirectiverJryNrzr!r!r!r"r~�r}r~c@�4eZdZUejejejejejejd�Zee	d<dS)�DoctestDirective�r,r)r@rDrJrKryN�
rorprqrrl�	unchangedr{ryrr|r!r!r!r"r���
�r�c@s0eZdZUejejejejejd�Zeed<dS)�TestcodeDirective)r,r)rDrJrKryN)	rorprqrrlr{ryrr|r!r!r!r"r��s
�r�c@r)�TestoutputDirectiver�ryNr�r!r!r!r"r��r�r�c@sDeZdZdeddfdd�Zdddd	eddfd
d�Zdefdd
�ZdS)�	TestGrouprOr NcCs||_g|_g|_g|_dS�N)rO�setup�tests�cleanup)rdrOr!r!r"�__init__�s
zTestGroup.__init__Fre�TestCode�prependcCs�|jdkr|r|j�d|�dS|j�|�dS|jdkr%|j�|�dS|jdkr3|j�|g�dS|jdkrB|j�|dg�dS|jdkr`|jr\t|jd�dkr^||jdd	<dSdSdSttd
���)Nr*rr+r'r<r>����r%zinvalid TestCode type)	�typer��insert�appendr�r��len�RuntimeErrorr)rdrer�r!r!r"�add_code�s




�zTestGroup.add_codecCsd|j|j|j|jfS)Nz2TestGroup(name=%r, setup=%r, cleanup=%r, tests=%r))rOr�r�r��rdr!r!r"�__repr__�s�zTestGroup.__repr__)F)rorprqrFr��boolr�r�r!r!r!r"r��sr�c
@s@eZdZ	ddedededededdfdd	�Zdefd
d�ZdS)
r�Nrer��filenamer`r@r cCs&||_||_||_||_|pi|_dSr��rer�r�r`r@)rdrer�r�r`r@r!r!r"r��s
zTestCode.__init__cCsd|j|j|j|j|jfS)Nz4TestCode(%r, %r, filename=%r, lineno=%r, options=%r)r�r�r!r!r"r��s�zTestCode.__repr__r�)rorprqrF�intrr�r�r!r!r!r"r��s���
�r�c	sNeZdZddededeeeff�fdd�
Z	ddede	de	fd	d
�Z
�ZS)�SphinxDocTestRunnerN�out�verboser csBt�}tj}|t_zt��|�}W|t_n|t_w||���|Sr�)rrb�stdout�super�	summarize�getvalue)rdr�r��	string_io�
old_stdout�res��	__class__r!r"r��szSphinxDocTestRunner.summarizer��module_globalscCsh|j�|�}|r.|�d�|jjkr.z
|jjt|�d��}Wn	ty'Ynw|j�	d�S|�
||�S)NrO�
examplenumT)�%_DocTestRunner__LINECACHE_FILENAME_RE�match�groupr6rO�examplesr��
IndexError�source�
splitlines�save_linecache_getlines)rdr�r��m�exampler!r!r"�*_DocTestRunner__patched_linecache_getliness�z>SphinxDocTestRunner._DocTestRunner__patched_linecache_getlinesr�)rorprqrr�rr�r�rFrr��
__classcell__r!r!r�r"r��s
�
���r�c@s,eZdZdZdZed�Zd/dd�Zdeddfd	d
�Z	deddfdd�Z
d0d
ededefdd�Zdeefdd�Z
d/dd�Z	d1deedeededdfdd�Zded
edefdd�Zededefdd��Zdedefd d!�Zd
ed"eddfd#d$�Zd%ed&ed'ed(ed)edefd*d+�Zd,eddfd-d.�ZdS)2�DocTestBuilderz2
    Runs test snippets in the documentation.
    r'zZTesting of doctests in the sources finished, look at the results in %(outdir)s/output.txt.r NcCs�|jj|_|jt_|jjtjdd�<d|_d|_	d|_
d|_d|_d|_
d|_t�d�}tt�|jd�ddd�|_|j�d|d	t|�f�dS)
Nr�singlez%Y-%m-%d %H:%M:%Sz
output.txt�wzutf-8)�encodingzJResults of doctest builder run on %s
==================================%s
�=)rY�doctest_default_flags�opt�compiler'�doctest_pathrbrr��total_failures�total_tries�setup_failures�setup_tries�cleanup_failures�
cleanup_tries�time�strftime�openrM�outdir�outfile�writer�)rd�dater!r!r"�inits


�zDocTestBuilder.init�textcCstj|dd�|j�|�dS�NT)�nonl)�logger�infor�r��rdr�r!r!r"�_out;szDocTestBuilder._outcCs:|jjs|jjrt�|�ntj|dd�|j�|�dSr�)�app�quiet�warningiserrorr�r_r�r�r�r�r!r!r"�	_warn_out?szDocTestBuilder._warn_out�docname�typcCsdS)Nr(r!)rdr�r�r!r!r"�get_target_uriFszDocTestBuilder.get_target_uricCs|jjSr�)�env�
found_docsr�r!r!r"�get_outdated_docsIsz DocTestBuilder.get_outdated_docsc	Cs�dtdtfdd�}|j||j�|j||j�|j||j�|j||j�f}|�d|�|j��|js8|js8|jr>d|j	_
dSdS)NrGr cSs|dkrdSdS)Nr%�sr(r!)rGr!r!r"r�Nsz DocTestBuilder.finish.<locals>.sz}
Doctest summary
===============
%5d test%s
%5d failure%s in tests
%5d failure%s in setup code
%5d failure%s in cleanup code
r%)r�rFr�r�r�r�r�r��closer��
statuscode)rdr��replr!r!r"�finishLs��
�zDocTestBuilder.finish�update�build_docnames�updated_docnames�methodcCsH|dur
t|jj�}t�td��|D]}|j�|�}|�||�qdS)Nzrunning tests...)�sortedr��all_docsr�r�r�get_doctree�test_doc)rdr�r�r�r��doctreer!r!r"r�as�zDocTestBuilder.writergcCsJzt|j|jj�jddd�d}W|Sty$|jj|dd�}Y|Sw)zsTry to get the file which actually contains the doctest, not the
        filename of the document it's included in.�:docstring of r%)�maxsplitrN)�base)rr�r��srcdir�rsplit�	Exception�doc2path)rdrgr�r�r!r!r"�get_filename_for_nodels����z$DocTestBuilder.get_filename_for_nodecCs0dt�|jpd�vrdS|jdur|jdSdS)z0Get the real line number or admit we don't know.r�r(Nr%)r�basenamer�rB�rgr!r!r"�get_line_numbervs


zDocTestBuilder.get_line_numbercCsRd|vrdS|d}i}|jjrt|jj|�t||�}|jjr't|jj|�|S)NrJF)rY�doctest_global_setup�exec�eval�doctest_global_cleanup)rdrg�	condition�context�should_skipr!r!r"�skipped�s
zDocTestBuilder.skippedr�c	Cs�i}g}td|jd�|_td|jd�|_td|jd�|_|jj|j_|jj|j_|jjr6dtdt	fdd�}n	dtdt	fdd�}|�
|�D]f}|�|�rLqDd|vrT|dn|��}|�
||�}|�|�}	|sst�td	�|�d
d�||	�t||�d
d�||	|�d�d
�}
|�ddg�}d|vr�|�|
�qD|D]}||vr�t|�||<||�|
�q�qD|D]}
|��D]}
|
�|
�q�q�|jjr�t|jjdddd�}
|��D]	}
|
j|
dd�q�|jjr�t|jjdddd�}
|��D]}
|
�|
�q�|s�dS|�d|dt|�f�|��D]}
|�|
��q|jj|jdd�\}}|j|7_|j|7_|jj �rG|jj|jdd�\}}|j!|7_!|j"|7_"|jj �rg|jj|jdd�\}}|j#|7_#|j$|7_$dSdS)NF)r��optionflagsrgr cSs&t|tjtjf�r
d|vpt|tj�S�Nr4)�
isinstancerrTrU�
doctest_blockr�r!r!r"r��s
�
�z*DocTestBuilder.test_doc.<locals>.conditioncSst|tjtjf�od|vSr)rrrTrUr�r!r!r"r��s�r6z#no code/output in %s block at %s:%sr4r'r@)r�r�r`r@r5r3�*r*r)r�r`T)r�r+z
Document: %s
----------%s
�-)r�)%r�r��setup_runner�test_runner�cleanup_runner�_fakeoutrY�doctest_test_doctest_blocksrr��traverser��astextr�r�r�r_r�getr�r�r�r��valuesr�r�r�r��
test_groupr�r�r��triesr�r�r�r�)rdr�r�r5�add_to_all_groupsr�rgr�r��line_numberre�node_groups�	groupnamer��res_f�res_tr!r!r"r��s����



��
�����



��zDocTestBuilder.test_docrerOr��flags�dont_inheritcCst|||j||�Sr�)r�r�)rdrerOr�rrr!r!r"r��szDocTestBuilder.compiler�c
s�i�dtdttdtdtf���fdd�}|�j�jd�sdS�jD]�}t|�dkr|zt�	|d	j
i�j|d	j|d	j
�}Wnty]tjtd
�|d	j
|d	j|d	j
fd�Yq"w|jsbq"|jD]}|d	j��}|�|j�||_qed�_nP|dr�|dj
nd
}|dr�|djni}d|tj<tj�|�}	|	r�|	�d�}
nd}
tj|d	j
||
|d	j
|d�}t�|gi�j|d	j|d	j
d�}d�_�|_�jj |�j!dd�q"|�j"�j#d�dS)N�runner�	testcodes�whatr cs�g}|D]}tj|jd|jd�}|�|�q|sdSt�|id�j|f|djdd�}�|_|j	}d�_
|j|�jdd�|j	|krEdSdS)	Nr()r`Tz%s (%s code)rr�F�r��clear_globs)
r'�Examplerer`r��DocTestrOr��globs�failuresr�rnr�)rrrr�r<r��sim_doctest�old_f�r��nsrdr!r"�run_setup_cleanup�s"�
z4DocTestBuilder.test_group.<locals>.run_setup_cleanupr�r%rz!ignoring invalid doctest code: %r)�locationr�r(T�msg)�exc_msgr`r@r�Frr�)$rr	r�r�rr�r�r��parser�get_doctestrerOr�r`r�r�r_rr�r@�copyr�r�r'�DONT_ACCEPT_BLANKLINE�
_EXCEPTION_REr�r�rrr rrnr�rr�)rdr�r&rer6r��new_opt�outputr@r�r)r!r$r"r�sP&
���


��zDocTestBuilder.test_group)r Nr�)r�)rorprqrrrOr�epilogr�rFr�r�r�rr�r�rr
r�rr��staticmethodr�r�rr�r�r�rr�r�rr!r!r!r"r�s.

��
�

"Nr�r�rcCs�|�dt�|�dt�|�dt�|�dt�|�dt�|�t�|�dgd�|�dd	d�|�d
dd�|�ddd�|�d
t	j
t	jBt	jBd�t
jdd�S)Nr*r+r'r<r>r�Fr
r3r�r(r�r�T)r�parallel_read_safe)�
add_directiverxr~r�r�r��add_builderr��add_config_valuer'�DONT_ACCEPT_TRUE_FOR_1�ELLIPSIS�IGNORE_EXCEPTION_DETAIL�sphinx�__display_version__)r�r!r!r"r�,s 
�r�)Jrrr'�rerbr��ior�osr�typingrrrrrr	r
rrr
�docutilsr�docutils.nodesrrr�docutils.parsers.rstr�packaging.specifiersrr�packaging.versionrr:�sphinx.buildersr�
sphinx.localer�sphinx.utilr�sphinx.util.consoler�sphinx.util.docutilsr�sphinx.util.osutilr�sphinx.util.typingr�sphinx.applicationr�	getLoggerror�r��	MULTILINErPrRrFr�r#r$rxr~r�r�r��
DocTestParserr*r�r��
DocTestRunnerr�r�r�r!r!r!r"�<module>sR0
W