
    -Ph"]                       d 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mZ ddlmZ ddlmZ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" er(ddl#m$Z$m%Z% ddlm&Z&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0  ej1        e2          Z3 ej4        dej5                  Z6 ej4        dej5                  Z7d5dZ8 G d de           Z9 G d d e9          Z: G d! d"e9          Z; G d# d$e9          Z< G d% d&e9          Z= G d' d(e9          Z> ej?                    Z@ G d) d*          ZA G d+ d,          ZB G d- d.ejC                  ZD G d/ d0e          ZEd6d4ZFdS )7zfMimic doctest in Sphinx.

The extension automatically execute code snippets and checks their results.
    )annotationsN)StringIO)TYPE_CHECKING)nodes)
directives)InvalidSpecifierSpecifierSet)Version)bold)Builder)__)logging)SphinxDirective)relpath)CallableSet)AnyClassVar)ElementNodeTextElement)Sphinx)ExtensionMetadata
OptionSpecz^\s*<BLANKLINE>z[ \t]*#\s*doctest:.+$specstrversionreturnboolc                >    t          |          t          |           v S )aY  Check `spec` satisfies `version` or not.

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

    Some examples:

        >>> is_allowed_version('<=3.5', '3.3')
        True
        >>> is_allowed_version('<=3.2', '3.3')
        False
        >>> is_allowed_version('>3.2, <4.0', '3.3')
        True
    )r
   r	   )r   r   s     R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/ext/doctest.pyis_allowed_versionr"   -   s     7|D1111    c                  *    e Zd ZdZdZdZdZdZd	dZdS )
TestDirectivez*Base class for doctest-related directives.Tr      r   
list[Node]c                   d                     | j                  }d }| j        dk    rcd|v r|}t                              d|          }t
                              |          r(d| j        vr|s|}t
                              d|          }t          j	        }| j        dv s	d| j        v rt          j
        }| j        r+d | j        d	                             d
          D             }ndg} |||| j        |          }|                     |           |||d<   | j        dk    rd|d<   n!| j        dk    rd|d<   n| j        dk    rd|d<   i |d<   | j        dv rd| j        v r| j        d                             d
d                                          }|D ]}|d	         |dd          }	}|dvr<| j        j        j                            t'          d          |z  | j                   T|	t*          j        vr<| j        j        j                            t'          d          |	z  | j                   t*          j        |dd                   }
|d	         dk    |d         |
<   | j        dk    rd| j        v r	 | j        d         }d                     t/          t0          t2          j        d d                             }t7          ||          st*          j        d          }
d!|d         |
<   nK# t8          $ r> | j        j        j                            t'          d"          |z  | j                   Y nw xY wd#| j        v r| j        d#         |d#<   d$| j        v rd!|d%<   nd| j        v rd&|d%<   |gS )'N
doctestz<BLANKLINE> no-trim-doctest-flags>   	testsetuptestcleanuphidec                6    g | ]}|                                 S  )strip).0xs     r!   
<listcomp>z%TestDirective.run.<locals>.<listcomp>_   s     FFFAaggiiFFFr#   r   ,default)testnodetypegroupstestpyconlanguagetestcodepython
testoutputnoneoptions>   r*   r?    r&   z+-z"missing '+' or '-' in '%s' option.)linez'%s' is not a valid option.+	pyversion.   SKIPTz$'%s' is not a valid pyversion optionskipiftrim-doctest-flags
trim_flagsF)joincontentnameblankline_resubdoctestopt_researchrA   r   literal_blockcomment	argumentssplitset_source_inforeplacestatedocumentreporterwarningr   linenor*   OPTIONFLAGS_BY_NAMEmapr   sysversion_infor"   r   )selfcoder:   nodetyper9   nodeoption_stringsoptionprefixoption_nameflagr   python_versions                r!   runzTestDirective.runJ   s    yy&&9	!!$$#''D11$$T**3+4<??  D$((T22&+&99444$,8N8N}H> 	!FF):)@)@)E)EFFFFF[Fxd6JJJT"""DL9	!!&DY*$$'DY,&&%DY9111i4<6O6O!\)4<<S#FFLLNNN( 9 9&,Qi%%J'088?@@6I![ 9    g&AAAJ'088899KG![ 9    26!"":>(.q	S(8Y%%9	!!kT\&A&A	|K0!$#c33CBQB3G*H*H!I!I)$?? 1"6v>D,0DOD)#   
#,44=>>EDK 5      t|##!\(3DN4<//!%D$44!&Dvs   =A4K2 2AL:9L:N)r   r'   )	__name__
__module____qualname____doc__has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacerl   r1   r#   r!   r%   r%   B   sK        44K $I I I I I Ir#   r%   c                  ,    e Zd ZU dej        iZded<   dS )TestsetupDirectiverI   ClassVar[OptionSpec]option_specNrm   rn   ro   r   unchanged_requiredrx   __annotations__r1   r#   r!   rv   rv      9         */)K      r#   rv   c                  ,    e Zd ZU dej        iZded<   dS )TestcleanupDirectiverI   rw   rx   Nry   r1   r#   r!   r~   r~      r|   r#   r~   c                  h    e Zd ZU ej        ej        ej        ej        ej        ej        dZded<   dS )DoctestDirectiver/   r,   rA   rE   rI   rJ   rw   rx   N	rm   rn   ro   r   rj   	unchangedrz   rx   r{   r1   r#   r!   r   r      W         !+'2/(o) )K      r#   r   c                  \    e Zd ZU ej        ej        ej        ej        ej        dZded<   dS )TestcodeDirective)r/   r,   rE   rI   rJ   rw   rx   N)rm   rn   ro   r   rj   rz   rx   r{   r1   r#   r!   r   r      sQ         !+2/(o) )K      r#   r   c                  h    e Zd ZU ej        ej        ej        ej        ej        ej        dZded<   dS )TestoutputDirectiver   rw   rx   Nr   r1   r#   r!   r   r      r   r#   r   c                  (    e Zd ZddZdddZddZdS )	TestGrouprN   r   r   Nonec                >    || _         g | _        g | _        g | _        d S N)rN   setuptestscleanup)rb   rN   s     r!   __init__zTestGroup.__init__   s"    	%'
CE
')r#   Frc   TestCodeprependr   c                J   |j         dk    r;|r| j                            d|           d S | j                            |           d S |j         dk    r| j                            |           d S |j         dk    r| j                            |g           d S |j         dk    r| j                            |d f           d S |j         dk    r?| j        r4| j        d         }t          |          dk    r|d         |g| j        d<   d S d S d S t          t          d	                    )
Nr-   r   r.   r*   r=   r?      zinvalid TestCode type)	typer   insertappendr   r   lenRuntimeErrorr   )rb   rc   r   latest_tests       r!   add_codezTestGroup.add_code   sH   9## (
!!!T*****
!!$'''''Y-''L%%%%%Y)##Jtf%%%%%Y*$$JtTl+++++Y,&&z <"jn{##q((&1!nd%;DJrNNN< <(( r"9::;;;r#   c           	     H    d| j         d| j        d| j        d| j        d	S )NzTestGroup(name=z, setup=z
, cleanup=z, tests=))rN   r   r   r   rb   s    r!   __repr__zTestGroup.__repr__   sK    ?di ? ?4: ? ?|? ?/3z? ? ?	
r#   N)rN   r   r   r   )F)rc   r   r   r   r   r   r   r   )rm   rn   ro   r   r   r   r1   r#   r!   r   r      sU        * * * *< < < < <*
 
 
 
 
 
r#   r   c                  "    e Zd Z	 dddZddZdS )r   Nrc   r   r   filenamer]   intrA   dict[int, bool] | Noner   r   c                P    || _         || _        || _        || _        |pi | _        d S r   rc   r   r   r]   rA   )rb   rc   r   r   r]   rA   s         r!   r   zTestCode.__init__   s/     		 (/2r#   c                X    d| j         d| j        d| j        d| j        d| j        dS )Nz	TestCode(z, z, filename=z	, lineno=z
, options=r   r   r   s    r!   r   zTestCode.__repr__   se    A	 A Aty A At} A AkA A/3|A A A	
r#   r   )rc   r   r   r   r   r   r]   r   rA   r   r   r   r   )rm   rn   ro   r   r   r1   r#   r!   r   r      sF         +/6 6 6 6 6
 
 
 
 
 
r#   r   c                  0     e Zd Z	 dd fdZ	 dddZ xZS )SphinxDocTestRunnerNoutCallable[[str], None]verbosebool | Noner   tuple[int, int]c                   t                      }t          j        }|t          _        	 t                                          |          }|t          _        n# |t          _        w xY w ||                                           |S r   )r   r`   stdoutsuper	summarizegetvalue)rb   r   r   	string_io
old_stdoutres	__class__s         r!   r   zSphinxDocTestRunner.summarize  su     JJ	Z

	$''##G,,C#CJJCJ####I  !!!
s   !A A%r   r   module_globalsr   c                f   | j                             |          }|r|                    d          | j        j        k    r]	 | j        j        t          |                    d                             }|j                            d          S # t          $ r Y nw xY w| 
                    ||          S )NrN   
examplenumT)%_DocTestRunner__LINECACHE_FILENAME_REmatchgroupr:   rN   examplesr   source
splitlines
IndexErrorsave_linecache_getlines)rb   r   r   mexamples        r!   *_DocTestRunner__patched_linecache_getlinesz>SphinxDocTestRunner._DocTestRunner__patched_linecache_getlines  s     6<<XFF 		7DIN227),S1F1F-G-GH ~00666     ++HnEEEs   2B 
BBr   )r   r   r   r   r   r   )r   r   r   r   r   r   )rm   rn   ro   r   r   __classcell__)r   s   @r!   r   r     sl        AE       48F F F F F F F F Fr#   r   c                      e Zd ZdZdZ ed          Zd+dZd+dZd,d
Z	d,dZ
d-d.dZd/dZd+dZd0dZd1dZed2d            Zd3dZd4d Zd5d'Zd6d*ZdS )7DocTestBuilderz(Runs test snippets in the documentation.r*   zZTesting of doctests in the sources finished, look at the results in %(outdir)s/output.txt.r   r   c                   | j         j        | _        | j        t          _        | j         j        t          j        dd<   d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        t          j        d          }| j                            d          }|                    dd          | _        dt+          |          z  }| j                            d	| d
| d           d S )Nr   singlez%Y-%m-%d %H:%M:%Sz
output.txtwzutf-8)encoding=z"Results of doctest builder run on z#
==================================r)   )configdoctest_default_flagsoptcompiler*   doctest_pathr`   pathr   total_failurestotal_triessetup_failuressetup_triescleanup_failurescleanup_triestimestrftimeoutdirjoinpathopenoutfiler   write)rb   dateoutpathrC   s       r!   initzDocTestBuilder.init-  s    ;4 ,01	 !}011+&&|44||C'|::SYY: : :15: : :	
 	
 	
 	
 	
r#   c                \    t          | d          r| j                                         d S d S )Nr   )hasattrr   closer   s    r!   __del__zDocTestBuilder.__del__M  s:     4## 	!L     	! 	!r#   textr   c                r    t                               |d           | j                            |           d S NT)nonl)loggerinfor   r   rb   r   s     r!   _outzDocTestBuilder._outS  s4    Dt$$$4     r#   c                    | j         j        rt                              |           nt                              |d           | j                            |           d S r   )appquietr   r\   r   r   r   r   s     r!   	_warn_outzDocTestBuilder._warn_outW  sU    8> 	)NN4    KK4K(((4     r#   Ndocnametyp
str | Nonec                    dS )Nr+   r1   )rb   r   r   s      r!   get_target_urizDocTestBuilder.get_target_uri^  s    rr#   set[str]c                    | j         j        S r   )env
found_docsr   s    r!   get_outdated_docsz DocTestBuilder.get_outdated_docsa  s    x""r#   c                   dd}|                      d| j        dd || j                   d	| j        dd
 || j                   d| j        dd
 || j                   d| j        dd
 || j                   d           | j                                         | j        s| j        s| j        rd| j        _        d S d S )Nvr   r   r   c                    | dk    rdndS )Nr&   sr+   r1   )r  s    r!   r  z DocTestBuilder.finish.<locals>.sf  s    q&&33b(r#   z!
Doctest summary
===============
5z testr)   z failurez
 in tests
z in setup code
z in cleanup code
r&   )r  r   r   r   )	r   r   r   r   r   r   r   r   
statuscode)rb   r  s     r!   finishzDocTestBuilder.finishd  sS   	) 	) 	) 	) 			    !D,--  	   !"$"5 6 6	 
   
 !"$"5 6 6     #$!D$9":":  		
 		
 		
 	 	$$"5 	$9N 	$"#DH	$ 	$r#   docnamesSet[str]c                    t                               t          d                     t          |          D ]2}| j                            |          }|                     ||           3d S )Nzrunning tests...)r   r   r   sortedr   get_doctreetest_doc)rb   r  r   doctrees       r!   write_documentszDocTestBuilder.write_documentsx  sj    D+,,---h'' 	, 	,Gh**733GMM'7++++	, 	,r#   re   r   c                    	 t          |j        | j        j                  }|                    dd          d         S # t
          $ r+ t          | j                            |d                    cY S w xY w)z|Try to get the file which actually contains the doctest, not the
        filename of the document it's included in.
        :docstring of r&   )maxsplitr   F)r   r   r   srcdirrsplit	Exceptionr   doc2path)rb   re   r   r   s       r!   get_filename_for_nodez$DocTestBuilder.get_filename_for_node  sy    	:t{DHO<<H??#3a?@@CC 	: 	: 	:tx((%8899999	:s   ;> 2A32A3
int | Nonec                |    dt           j                            | j        pd          v rdS | j        
| j        dz
  S dS )z0Get the real line number or admit we don't know.r  r+   Nr&   )osr   basenamer   rC   re   s    r!   get_line_numberzDocTestBuilder.get_line_number  sF    
 rw//0ArBBBB
 49 9q= tr#   r   r   c                    d|vrdS |d         }i }| j         j        rt          | j         j        |           t          ||          }| j         j        rt          | j         j        |           |S )NrI   F)r   doctest_global_setupexecevaldoctest_global_cleanup)rb   re   	conditioncontextshould_skips        r!   skippedzDocTestBuilder.skipped  s{    45XI&(G{/ @T[5w???y'22K{1 BT[7AAAr#   r  c           
     H   i }g }t          d| j                  | _        t          d| j                  | _        t          d| j                  | _        | j        j        | j        _        | j        j        | j        _        | j        j        rdd}ndd}|                    |          D ]G}| 	                    |          rd	|v r|d	         n|
                                }|                     ||          }|                     |          }	|s>t                              t          d
          |                    dd          ||	           t#          ||                    dd          ||	|                    d                    }
|                    ddg          }d|v r|                    |
           |D ]3}||vrt'          |          ||<   ||                             |
           4I|D ].}
|                                D ]}|                    |
           /| j        j        rKt#          | j        j        ddd          }
|                                D ]}|                    |
d           | j        j        rIt#          | j        j        ddd          }
|                                D ]}|                    |
           |sd S | j        j        }|r,|                     d| ddt5          |          z   d           |                                D ]}|                     |           | j                            | j        d          \  }}| xj        |z  c_        | xj        |z  c_        | j        j        rD| j                            | j        |          \  }}| xj         |z  c_         | xj!        |z  c_!        | j        j        rF| j                            | j        |          \  }}| xj"        |z  c_"        | xj#        |z  c_#        d S d S ) NF)r   optionflagsre   r   r   r   c                    t          | t          j        t          j        z            od| v pt          | t          j                  S Nr8   )
isinstancer   rS   rT   doctest_blockr  s    r!   r"  z*DocTestBuilder.test_doc.<locals>.condition  sB    tU%85=%HII /&$.;  e&9::;r#   c                X    t          | t          j        t          j        z            od| v S r)  )r*  r   rS   rT   r  s    r!   r"  z*DocTestBuilder.test_doc.<locals>.condition  s+    tU%85=%HII /&$.r#   r:   z#no code/output in %s block at %s:%sr8   r*   rA   )r   r   r]   rA   r9   r7   *r-   z<global_setup>r   )r   r]   T)r   r.   z<global_cleanup>z
Document: z
-----------r)   )r   )re   r   r   r   )$r   r   setup_runnertest_runnercleanup_runner_fakeoutr   doctest_test_doctest_blocksfindallr%  astextr  r  r   r\   r   getr   r   r   r   valuesr  r!  doctest_show_successesr   r   
test_groupr   r   r   triesr   r   r   r   )rb   r   r  r9   add_to_all_groupsr"  re   r   r   line_numberrc   node_groups	groupnamer   show_successesres_fres_ts                    r!   r  zDocTestBuilder.test_doc  s   ')/48TTT.u$(SSS1%TXVVV$($5$>!'+'8'A$;2 	; ; ; ; ;    OOI.. 	1 	1D||D!! %+t^^T&\\F11$@@H..t44K <==HH^Y77	   XXni88!"++  D ((8i[99Kk!!!((...( 1 1	F**(1)(<(<F9%y!**400001 & 	% 	%D % %t$$$$%;+ 	30)	  D   3 3tT2222;- 	%2+	  D   % %t$$$$ 	F; 	RIIPWPP#G:LPPPQQQ]]__ 	# 	#EOOE""""(2249e2LLuu$E!! 	&+55di5XXLE55(%$ 	(.88	> 9  LE5 !!U*!!%'	( 	(r#   rc   rN   r   flagsr   dont_inheritc                2    t          ||| j        ||          S r   )r   r   )rb   rc   rN   r   rB  rC  s         r!   r   zDocTestBuilder.compile	  s     tT49e\BBBr#   r   r   c           	         i d fd} | j         j        d	          sd S j        D ]}t          |          d
k    r	 t                              |d         j        i j        |d         j        |d         j	                  }n]# t          $ rP t                              t          d          |d         j        |d         j        |d         j	        f           Y w xY w|j        s|j        D ]B}|d         j                                        }|                    |j                   ||_        Cd _        n|d
         r|d
         j        nd}|d
         r|d
         j        ni }d|t&          j        <   t          j                            |          }	|	r|	                    d          }
nd }
t'          j        |d         j        ||
|d         j	        |          }t'          j        |gi j        |d         j        |d         j	        d           }d _        |_         j                            | j        d            | j        j        d           d S )Nrunnerr   	testcodeslist[TestCode]whatr   r   c                ^   g }|D ]8}t          j        |j        d|j                  }|                    |           9|sdS t          j        |i j         d| d|d         j        dd           }	|_        | j	        }d
_
        |                     |
j        d	           | j	        |k    S )
Nr+   )r]   Tz (z code)r   r  Fr   clear_globs)r*   Examplerc   r]   r   DocTestrN   r   globsfailuresr   rl   r   )rF  rG  rI  r   r=   r   sim_doctestold_fr   nsrb   s           r!   run_setup_cleanupz4DocTestBuilder.test_group.<locals>.run_setup_cleanup  s     H% ) )!/(-HOTTT(((( t!/:-----!% K !#KOEDIJJ{EJJJJ?e++r#   r   r&   r   z!ignoring invalid doctest code: %r)locationr   r+   Tmsg)exc_msgr]   rA   r  FrK  r   )rF  r   rG  rH  rI  r   r   r   ) r/  r   r   r   parserget_doctestrc   rN   r   r]   r  r   r\   r   r   rA   copyupdater   r*   DONT_ACCEPT_BLANKLINE_EXCEPTION_REr   r   rM  rN  rO  r0  rl   r   r1  r   )rb   r   rT  rc   r:   r   new_optoutputrA   r   rW  rS  s   ``         @r!   r9  zDocTestBuilder.test_group  s   	, 	, 	, 	, 	, 	, 	, 	,2 ! !2EKII 	F K 5	N 5	ND4yyA~~
!--Qb%*d1g6FQ DD !   NN>??Q"&q'"2DGN!C #   
 H } #} . .G"1go2244GNN7?333&-GOO$		 *.a8ab-1!W<$q'//"9=56(..v66 #ggennGG"G!/GL#7>#   IJG$GN  #	DJ  4>u MMMM 	$-u}iHHHHHs   AB

AC$#C$)r   r   )r   r   r   r   r   )r   r   r   r   r   r   )r   r   )r  r  r   r   )re   r   r   r   r   r   )re   r   r   r  )re   r   r   r   )r   r   r  r   r   r   )rc   r   rN   r   r   r   rB  r   rC  r   r   r   )r   r   r   r   )rm   rn   ro   rp   rN   r   epilogr   r   r   r   r   r   r  r  r  staticmethodr  r%  r  r   r9  r1   r#   r!   r   r   $  st       22DR	, F

 
 
 
@! ! ! !! ! ! !! ! ! !    # # # #$ $ $ $(, , , ,: : : :    \   a( a( a( a(FC C C C
YI YI YI YI YI YIr#   r   r   r   r   c           	        |                      dt                     |                      dt                     |                      dt                     |                      dt                     |                      dt
                     |                     t                     |                     dddt          t          h          	           |                     d
ddt          t          t          h          	           |                     dddt          t          h          	           |                     dddt          t          h          	           |                     dddt          t          h          	           |                     dt          j        t          j        z  t          j        z  dt          t$          h          	           t&          j        ddS )Nr-   r.   r*   r=   r?   r8  Tr+   )typesr   r1   r3  r7   r  r!  r   )r   parallel_read_safe)add_directiverv   r~   r   r   r   add_builderr   add_config_value	frozensetr   listtupler   r*   DONT_ACCEPT_TRUE_FOR_1ELLIPSISIGNORE_EXCEPTION_DETAILr   sphinx__display_version__)r   s    r!   r   r   j  s   k#5666m%9:::i!1222j"3444l$7888OON###149dVCTCTUUURy$7O7OPPP%y"Ise<L<L     /Ry#?O?OPPP12rC5AQAQRRR&

	

)	* 	     -"  r#   )r   r   r   r   r   r   )r   r   r   r   )Grp   
__future__r   r*   os.pathr  rer`   r   ior   typingr   docutilsr   docutils.parsers.rstr   packaging.specifiersr   r	   packaging.versionr
   rn  sphinx._cli.util.colourr   sphinx.buildersr   sphinx.localer   sphinx.utilr   sphinx.util.docutilsr   sphinx.util.osutilr   collections.abcr   r   r   r   docutils.nodesr   r   r   sphinx.applicationr   sphinx.util.typingr   r   	getLoggerrm   r   r   	MULTILINErO   rQ   r"   r%   rv   r~   r   r   r   DocTestParserrX  r   r   DocTestRunnerr   r   r   r1   r#   r!   <module>r     s   
 # " " " " "   				 



                          + + + + + + ? ? ? ? ? ? ? ? % % % % % %  ( ( ( ( ( ( # # # # # #             0 0 0 0 0 0 & & & & & & A--------$$$$$$$$9999999999))))))@@@@@@@@ 
	8	$	$rz,bl;;
3R\BB2 2 2 2*Q Q Q Q QO Q Q Qh           =       }              -    
		 	  
  
  
  
  
  
  
  
F
 
 
 
 
 
 
 
,F F F F F'/ F F FFCI CI CI CI CIW CI CI CIL
     r#   