
    -Ph)                    f   U d Z ddlmZ d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ZddlZddlZdd
lmZ ddlmZ e
r$ddlZddlmZmZ ddlmZ ddl	mZ ddlm Z  ddl!m"Z" d,d-dZ#d.dZ$ G d  d!ej%        j&                  Z' G d" d#e'          Z(d/d$Z)d%ed&d'fiZ*d(e+d)<   d0d+Z,dS )1zSphinx test suite utilities    )annotations)SphinxTestApp#SphinxTestAppWrapperForSkipBuildingN)StringIO)MappingProxyType)TYPE_CHECKING)nodes)
directivesroles)strip_escape_sequences)additional_nodes)MappingSequence)Path)Any)ElementTree)Node noder   clsr   xpathstrkwargsreturnNonec                R   |rt          |t                    rt          | |d         fd|i| |dd          rt          |d         t                    rt          | |d         fd|i| nt          | t          j                  sJ d| d            t          |           dk    sJ d| dt          |            d            t          | d         |dd          fd|dz   i| nt          |t                    rt          | t          t          j        z            sJ d| d	            t          |           t          |          k    s-J d| dt          |            d
t          |                      t          |          D ]$\  }}|d| dz   }t          | |         |fd|i| %nRt          |t                    r| |k    sJ d|d|d|             n#t          | |          sJ d| d|d|             |rt          | t          j                  sJ d| d            |	                                D ]g\  }}|| vr4|
                    dd          x}| vrd| d|d| }	t          |	          | |         |k    sJ d| d| d|d| |                     fd S d S )Nr   r      zThe nodez does not have any childrenz has z child nodes, not onez[0]z does not have any itemsz child nodes, not []z	The node z is not z: z is not subclass of z does not have any attributes_-z does not have z attribute: z	] is not )
isinstancelistassert_nodetupler	   Elementlen	enumerater   itemsreplaceAssertionError)
r   r   r   r   inodeclspathkeyvaluemsgs
             S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/testing/util.pyr$   r$      s   
 Gc4   	Gc!f<<E<V<<<122w 
Qc!fe,, 	Qc!fDDEDVDDDD #477E ED%DDDE E E t99>>>O5OOs4yyOOO *>>  QQRRPPPPPPU## 	G4!566: :9%999: : : D		SXX%%%O%OOc$iiOO3s88OO &%%'nn D D
7x1xxx'DGWCCDCFCCCCD S!! 	G3;;; NE N NS N Nd N N;;;; 4%%G GF%FFSFFdFFG G G  tU]++	; 	;:e:::	; 	; 	; !,,.. 	 	JC$;;sC000C==VUVV3VVdVVC(---9%%%I5II3IIIIDIII &%%% 
	 	    r.   str | os.PathLike[str]r   c                $    ddl m}  ||           S )z,Parse a file into a (safe) XML element tree.r   )parse)defusedxml.ElementTreer6   )r.   	xml_parses     r2   etree_parser9   O   s"    9999999T??r3   c                       e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 d-d. fd!Zd/ fd"Zed0d$            Zed0d%            Zd1d2d'Z	d3d(Z
d4d5 fd,Z xZS )6r   ah  A subclass of :class:`~sphinx.application.Sphinx` for tests.

    The constructor uses some better default values for the initialization
    parameters and supports arbitrary keywords stored in the :attr:`extras`
    read-only mapping.

    It is recommended to use::

        @pytest.mark.sphinx('html', testroot='root')
        def test(app):
            app = ...

    instead of::

        def test():
            app = SphinxTestApp('html', srcdir=srcdir)

    In the former case, the 'app' fixture takes care of setting the source
    directory, whereas in the latter, the user must provide it themselves.
    htmlNF r   buildernamer   srcdirPath | Nonebuilddirfreshenvboolconfoverridesdict[str, Any] | NonestatusStringIO | NonewarningtagsSequence[str]docutils_conf
str | Noneparallelint	verbositywarningiserrorpdbexception_on_warningextrasr   r   r   c                  || _         |J |dk    rd}d}nd}||rd nt                      }n6t          |t                    s!dt          |           }t	          |          ||rd nt                      }n6t          |t                    s!dt          |           }t	          |          |dz  | _        |	| j                            |	d	           ||d
z  }|}|                    |          }|                    dd           |                    d          }|                    dd           |i }t          j
                                        | _        t          |          | _        	 	 t                                          |||||||||||||
||           d S # t"          $ r |                                   w xY w)NTr   Fz-'status' must be an io.StringIO object, got: z.'warning' must be an io.StringIO object, got: zdocutils.confutf8)encoding_build)parentsexist_okdoctrees)
rC   rE   rG   rA   rO   rH   rN   rL   rP   rQ   )_builder_namer   r"   type	TypeErrordocutils_conf_path
write_textjoinpathmkdirsysr.   copy_saved_pathr   rR   super__init__	Exceptioncleanup)selfr=   r>   r@   rA   rC   rE   rG   rH   rJ   rL   rN   rO   rP   rQ   rR   quieterrconfdiroutdir
doctreedir	__class__s                        r2   rf   zSphinxTestApp.__init__o   s   * )!!!??EIIE> #2TT

FFFH-- 	!P$v,,PPCC.. ? $3ddGGGX.. 	!R4==RRCC.. "(?":$#..}v.NNN(H"";//TD111&&z22
555 M8==??)9&)A)A'	GG+!-#!%9      "  	 	 	LLNNN	s   60F( ( Gc                    d| j         j        v rnCd| j         v r:| j         j        dk    r*| j         j                            dd          | j         _        t	                                                       d S )N
html_theme	alabasterbasic)config
_overridesrq   getre   _init_builder)ri   ro   s    r2   rw   zSphinxTestApp._init_builder   so     4;111T[((T[-C{-R-R%)[%;%?%?g%V%VDK"r3   r   c                H    t          | j        t                    sJ | j        S )z;The in-memory text I/O for the application status messages.)r"   _statusr   ri   s    r2   rE   zSphinxTestApp.status   s$     $,11111|r3   c                H    t          | j        t                    sJ | j        S )z<The in-memory text I/O for the application warning messages.)r"   _warningr   rz   s    r2   rG   zSphinxTestApp.warning   s$     $-22222}r3   rZ   c                    | j         t          j        d d <   t                       	 | j                            d           d S # t          $ r}|j        dk    r Y d }~d S d }~ww xY w)NT)
missing_ok   )rd   rb   r.   _clean_up_global_stater^   unlinkOSErrorerrno)ri   rZ   excs      r2   rh   zSphinxTestApp.cleanup   s    &   	#**d*;;;;; 	 	 	yB 	s   A 
A$AA$c                2    d| j         j         d| j        dS )N<z buildername=>)ro   __name__r[   rz   s    r2   __repr__zSphinxTestApp.__repr__   s#    P4>*PP9KPPPPr3   	force_all	filenamesSequence[Path]c                    | j         j                                         t                                          ||           d S N)env_pickled_doctree_cacheclearre   buildri   r   r   ro   s      r2   r   zSphinxTestApp.build   s8    '--///i+++++r3   )r;   NNFNNNr<   Nr   r   FFF) r=   r   r>   r?   r@   r?   rA   rB   rC   rD   rE   rF   rG   rF   rH   rI   rJ   rK   rL   rM   rN   rM   rO   rB   rP   rB   rQ   rB   rR   r   r   r   r   r   )r   r   )F)rZ   rB   r   r   )r   r   Fr<   r   rB   r   r   r   r   )r   
__module____qualname____doc__rf   rw   propertyrE   rG   rh   r   r   __classcell__ro   s   @r2   r   r   V   s2        6 "" $/3"&#' $($%*#V V V V V V Vp               X    X    Q Q Q Q, , , , , , , , , , ,r3   r   c                  &     e Zd ZdZdd fd
Z xZS )r   zA wrapper for SphinxTestApp.

    This class is used to speed up the test by skipping ``app.build()``
    if it has already been built and there are any output files.
    Fr<   r   rB   r   r   r   r   c                    t          | j                                                  s$t                                          ||           d S d S r   )r#   rm   iterdirre   r   r   s      r2   r   z)SphinxTestAppWrapperForSkipBuilding.build   sI    DK''))** 	0GGMM)Y/////	0 	0r3   r   r   )r   r   r   r   r   r   r   s   @r2   r   r      sL         0 0 0 0 0 0 0 0 0 0 0r3   r   c                 ^   t           j                                         t          j                                         t
          D ]} t          t          j        d| j	                    t          t          j        d| j	                    t          t          j
        d| j	                    t          t          j
        d| j	                    t          j                     t          j        j                                         t          j        j        j                                         d S )Nvisit_depart_)r
   _directivesr   r   _rolesr   delattrr	   GenericNodeVisitorr   SparseNodeVisitorsphinxlocaletranslatorspycodeModuleAnalyzercache)r   s    r2   r   r      s     """	L  D D(*B4=*B*BCCC(*CDM*C*CDDD')A$-)A)ABBB')B4=)B)BCCCC M##%%% M &,,.....r3   strip_escseqz*sphinx.util.console.strip_escape_sequences)	   r   z+dict[str, tuple[Any, str, tuple[int, int]]]_DEPRECATED_OBJECTSnamec                    | t           vrdt          d| }t          |          ddlm} t           |          \  }}} |t          | ||           |S )Nzmodule z has no attribute r   )_deprecation_warning)remove)r   r   AttributeErrorsphinx.deprecationr   )r   r1   r   deprecated_objectcanonical_namer   s         r2   __getattr__r     su    &&&>>>d>>S!!!7777770CD0I-~v4GGGGr3   )Nr   )
r   r   r   r   r   r   r   r   r   r   )r.   r4   r   r   r   )r   r   r   r   )-r   
__future__r   __all__rb   ior   typesr   typingr   docutilsr	   docutils.parsers.rstr
   r   sphinx.applicationr   sphinx.localesphinx.pycodesphinx._cli.util.errorsr   sphinx.util.docutilsr   oscollections.abcr   r   pathlibr   r   xml.etree.ElementTreer   docutils.nodesr   r$   r9   applicationSphinxr   r   r   r   __annotations__r   r<   r3   r2   <module>r      s:   ! ! ! " " " " " "
B 



       " " " " " "                   2 2 2 2 2 2 2 2             : : : : : : 1 1 1 1 1 1 $III11111111111111######, , , , ,`   W, W, W, W, W,F&- W, W, W,t
0 
0 
0 
0 
0- 
0 
0 
0/ / / /( 4D     	 	 	 	 	 	r3   