
    }c=                        d Z ddlZddlZddlZddlmZ ddlmZmZ ddlm	Z	m
Z
mZ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mZ dd
lmZ ddlmZmZ ddlmZm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l*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5  ej6        e7          Z8 G d de          Z9 G d d          Z: G d dej;        ej<        ej=                  Z>dede>d e?d!ej@        fd"ZAd#e	d!e?fd$ZB G d% d&e           ZC G d' d(e           ZD	 d>d)e!d*e?d+e
d,e?d-e?d.e?d!ee?e?f         fd/ZE	 	 d?d)e-de>d*e?d+e
d-e?d0e?d1e?d.e?d!ee?e?f         fd2ZFd)e-de>d!dfd3ZG	 d>d)e/de>d*e?d+e
d-e?d.e?d!dfd4ZHd)e/de>d!dfd5ZI	 d@d)e3de>d*e?d+e
d-e?d!dfd6ZJd)e3de>d!dfd7ZKd)e5de>d!dfd8ZLd)e1de>d!dfd9ZMd:ed;eNd!dfd<ZOd:ed!e
e?e	f         fd=ZPdS )AzNAllow graphviz-formatted graphs to be included inline in generated documents.
    N)path)PIPECalledProcessError)AnyDictListTuple)nodes)Node)	Directive
directives)Sphinx)SphinxError)___)loggingsha1)SphinxDirectiveSphinxTranslator)
copy_asset)search_image_for_language)set_source_info)	ensuredir)
OptionSpec)HTMLTranslator)LaTeXTranslator)ManualPageTranslator)TexinfoTranslator)TextTranslatorc                       e Zd ZdZdS )GraphvizErrorzGraphviz errorN)__name__
__module____qualname__category     3lib/python3.11/site-packages/sphinx/ext/graphviz.pyr!   r!   #   s        HHHr'   r!   c            	           e Zd ZdZ ej        d          Z ej        d          Zddedededd	fd
Z	ddedd	fdZ
defdZd	S )ClickableMapDefinitionz1A manipulator for clickable map file of graphviz.z<map id="(.*?)"z
href=".*?" filenamecontentdotreturnNc                     d | _         || _        |                                | _        g | _        |                     |           d S )Nr.   )idr,   
splitlinesr-   	clickableparse)selfr,   r-   r.   s       r(   __init__zClickableMapDefinition.__init__,   sD     ))++$&

s
r'   c                 .   | j                             | j        d                   }|st          d| j        z            |                    d          | _        | j        dk    rst          |                                          	                                }d|dd          z  | _        | j        d         
                    d| j                  | j        d<   | j        D ]6}| j                            |          r| j                            |           7d S )Nr   z$Invalid clickable map file found: %s   z%3z	grapviz%si)	maptag_rematchr-   r!   r,   groupr2   r   encode	hexdigestreplacehref_researchr4   append)r6   r.   matchedhashedlines        r(   r5   zClickableMapDefinition.parse4   s   .&&t|A77 	X F VWWW--""7d? 	E #**,,''1133F!F344L0DG"l1o55dDGDDDLOL 	, 	,D|""4(( ,%%d+++	, 	,r'   c                     | j         r8d                    | j        d         g| j         z   | j        d         gz             S dS )zvGenerate clickable map tags if clickable item exists.

        If not exists, this only returns empty string.
        
r   r+   )r4   joinr-   )r6   s    r(   generate_clickable_mapz-ClickableMapDefinition.generate_clickable_mapE   sE    
 > 	99dl1o.?4<PRCSBTTUUU2r'   )r+   )N)r"   r#   r$   __doc__recompiler:   r@   strr7   r5   rJ   r&   r'   r(   r*   r*   '   s        ;;
,--Ibj&&G  s  d    , , , , , , ,"      r'   r*   c                       e Zd ZdS graphvizN)r"   r#   r$   r&   r'   r(   rQ   rQ   P   s        Dr'   rQ   	directivenodecaptionr/   c                 2   t          j        d|          }d|v r|j                            d          |d<   | j                            || j                  \  }}t          j        |dg|R  }|                    |           t          | |           ||z  }|S )Nr+   align)
r
   figure
attributespopstateinline_textlinenorT   extendr   )rR   rS   rT   figure_nodeinodesmessagescaption_nodes          r(   figure_wrapperrb   T   s    ,r4((K$ <#227;;G 227I<LMMFH="6v666L!!!I|,,,<Kr'   argumentc                 ,    t          j        | d          S )N)leftcenterright)r   choice)rc   s    r(   
align_specri   a   s    X'BCCCr'   c                       e Zd ZU dZdZdZdZdZej	        e
ej	        ej	        ej	        ej	        ej        dZeed<   dee         fd	Zd
S )Graphviz3
    Directive to insert arbitrary dot markup.
    Tr   r9   FaltrV   rT   layoutgraphviz_dotnameclassoption_specr/   c                     | j         r| j        j        }| j        r/|j                            t          d          | j                  gS t          | j         d         | j	                  }| j	        
                    |          \  }}| j	                            |           	 t          |d          5 }|                                }d d d            n# 1 swxY w Y   n# t          $ r5 |j                            t          d          |z  | j                  gcY S w xY wd                    | j                  }d }|                                s4| j        j                            t          d          | j                  gS t%                      }||d	<   d
| j	        j        i|d<   d| j        v r| j        d         |d         d<   d| j        v r| j        d         |d         d<   d| j        v r| j        d         |d<   d| j        v r| j        d         |d<   d| j        v r| j        d         |d<   |r||d<   d| j        vr|                     |           |gS t-          | || j        d                   }|                     |           |gS )NzCGraphviz directive cannot have both content and a filename argument)rE   r   utf-8encodingz8External Graphviz file %r not found or reading it failedrG   z.Ignoring "graphviz" directive without content.codedocnameoptionsrp   ro   rn   rV   rr   classesr,   rT   )	argumentsrZ   documentr-   reporterwarningr   r\   r   env
relfn2pathnote_dependencyopenreadOSErrorrI   stripstate_machinerQ   ry   rz   add_namerb   )	r6   r}   rc   rel_filenamer,   fpdotcoderS   rW   s	            r(   runzGraphviz.runw   s3   > 	'z*H| B )11 - . .48K 2 A A B B 11BDHMMH%)X%8%8%B%B"L(H$$\222C(W555 ( ggiiG( ( ( ( ( ( ( ( ( ( ( ( ( ( ( C C C )11 # $ $&./59[ 2 B B C C C CC
 ii--GL==?? '*3;;GHH < & & ' ' zzV$dh&67YT\) 	K.2l>.JDON+t|# 	E.2l8.DDON+DL  	.,u-DKdl" 	2 L1DMdl" 	4"l73DO 	,+DDL( 	MM$6M#D$Y0GHHFMM&!!!8Os6   #C! 4C	C! CC! CC! !<D D Nr"   r#   r$   rK   has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer   	unchangedri   class_optionrs   r   __annotations__r   r   r   r&   r'   r(   rk   rk   e   s           K %#'&",$( K   /T$Z / / / / / /r'   rk   c                       e Zd ZU dZdZdZdZdZej	        e
ej	        ej	        ej	        ej	        ej        dZeed<   dee         fd	Zd
S )GraphvizSimplerl   Tr9   r   Frm   rs   r/   c                 h   t                      }| j        d| j        d         dd                    | j                  d|d<   d| j        j        i|d<   d	| j        v r| j        d	         |d         d	<   d
| j        v r| j        d
         |d         d	<   d| j        v r| j        d         |d<   d| j        v r| j        d         |d<   d| j        v r| j        d         |d<   d| j        vr|                     |           |gS t          | || j        d                   }|                     |           |gS )N r   z {
rG   z
}
rx   ry   rz   rp   ro   rn   rV   rr   r{   rT   )
rQ   rq   r|   rI   r-   r   ry   rz   r   rb   )r6   rS   rW   s      r(   r   zGraphvizSimple.run   sX   zz			4>!#4#4#4dii6M6M6M6MOV$dh&67YT\) 	K.2l>.JDON+t|# 	E.2l8.DDON+DL  	.,u-DKdl" 	2 L1DMdl" 	4"l73DODL( 	MM$6M#D$Y0GHHFMM&!!!8Or'   Nr   r&   r'   r(   r   r      s           K %#'&",$( K   T$Z      r'   r   r6   rx   rz   formatprefixr,   c                    |                     d| j        j        j                  }|t	          |          z   t	          |          z   t	          | j        j        j                  z                                   }|dt          |                                          d|}t          j
        | j        j        |          }	t          j
        | j        j        | j        j        |          }
t          j        |
          r|	|
fS t!          | j        d          r!| j        j                             |          rdS t%          t          j        |
                     |g}|                    | j        j        j                   |                    d|z   d|
z   g           |                     dd	          }|r2t          j        t          j
        | j        j        |                    }n1t          j        t          j
        | j        j        |                    }|d
k    r|                    dd|
z  g           	 t-          j        ||                                t0          t0          |d          }t          j        |
          s+t3          t5          d          |j        |j        fz            |	|
fS # t:          $ r\ t<                              t5          d          |           t!          | j        d          si | j        _        d| j        j        |<   Y dS t@          $ r1}t3          t5          d          |j        |j        fz            |d}~ww xY w)z3Render graphviz code into a PNG or PDF output file.rp   -._graphviz_warned_dot)NNz-Tz-ory   indexpngz-Tcmapxz-o%s.mapT)inputstdoutstderrcwdcheckz;dot did not produce an output file:
[stderr]
%r
[stdout]
%rzYdot command %r cannot be run (needed for graphviz output), check the graphviz_dot settingz.dot exited with error:
[stderr]
%r
[stdout]
%rN)!getbuilderconfigrp   rN   graphviz_dot_argsr=   r   r>   	posixpathrI   imgpathr   outdirimagedirisfilehasattrr   r   dirnamer]   srcdir
subprocessr   r   r!   r   r   r   r   loggerr   r   )r6   rx   rz   r   r   r,   rp   hashkeyfnamerelfnoutfndot_argsry   r   retexcs                   r(   
render_dotr      sJ    ;;~t|/B/OPPLc'll"S%6%664<&899:;A688  !&&$w--"9"9";";";";VVDEN4</77EIdl)4<+@%HHE{5 e|455 |(,,\::zdl5!!"""~HOODL'9:::OOTF]D5L1222kk)W--G Dl49T\%8(CCDDl49T\%8'BBCC 9J$67888TnXT[[]]4PT!$D2 2 2{5!! 	O $2 !3 !369j#*5M!N O O Oe|   r D E EFR	T 	T 	Tt|%;<< 	302DL-:>),7zz T T TB  . / /25*cj1IJ K KPS	TTs    :A8J3 3A"M	M!,MMimgclsrn   c                    | j         j        j        }	 |dvrt          t	          d          |z            t          | |||||          \  }	}
nH# t          $ r;}t                              t	          d          ||           t          j	        |d }~ww xY w|dg|
                    dg           z   }d                    t          d |                    }|	/| j                            |                     |                     nE|;|
                    d|                     |                                                    }d|v r-| j                            d	|d         d
|d         d           |dk    rt| j                            d           | j                            d|	d|d           | j                            d|z             | j                            d           n?t#          |
dz   d          5 }t%          |
dz   |                                |          }|j        r| j                            d           | j                            d|	d|d|j        d|d	           | j                            d           | j                            |                                           nX| j                            d           | j                            d|	d|d|d           | j                            d           d d d            n# 1 swxY w Y   d|v r| j                            d           t          j	        )N)r   svgz=graphviz_output_format must be one of 'png', 'svg', but is %rdot code %r: %srQ   r{   r   rn   rV   z<div align="z" class="align-z">r   z<div class="graphviz">z<object data="z" type="image/svg+xml" class="z">
z<p class="warning">%s</p>z</object></div>
z.mapru   rv   r1   z
<img src="z" alt="z" usemap="#z	" class="z" />z</div>
)r   r   graphviz_output_formatr!   r   r   r   r   r
   SkipNoder   rI   filterbodyrB   r=   r   r   r*   r   r4   r2   rJ   )r6   rS   rx   rz   r   r   rn   r,   r   r   r   r   r{   mapfileimgmaps                  r(   render_dot_htmlr     s    \ 7F&' 	A $6 !7 !79?!@ A A A!$gvvxPPuu & & &r+,,dC888n#%& z"TXXi%<%<<GXXfT7++,,F )	T**++++ 	=((5$++d"3"3"9"9";";<<Cd? 	=I"7mmmT']]]< = = =U? 	1I5666I#eeVVV- . . .I83>???I01111efnw777 17/TXYYY# 1I$$%=>>>I$$$&+eeSSS&)))VVV&E F F FI$$Z000I$$V%B%B%D%DEEEE I$$%=>>>I$$$&+eeSSS&&&&: ; ; ;I$$Z0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 d? 	)IZ(((
.s*   :A 
B6BBDL!!L%(L%c           	      l    t          | ||d         |d         |                    d                     d S Nrx   rz   r,   )r,   )r   r   r6   rS   s     r(   html_visit_graphvizr   <  s6    D$Vd9oQ[H\H\]]]]]]r'   c                 0   	 t          | ||d||          \  }}nH# t          $ r;}t                              t	          d          ||           t
          j        |d }~ww xY w|                     |          }	|	sWd}
d}d|v r2|d         dk    rd}
d}n!|d         dk    rd	}
d
}n|d         dk    rd}
d}| j        	                    d|
z             | j        	                    d|z             |	s| j        	                    d|z             t
          j        )Npdfr   r+   rV   re   {z\hspace*{\fill}}rg   z{\hspace*{\fill}}rf   z{\hfillz
%sz\sphinxincludegraphics[]{%s}z%s
)
r   r!   r   r   r   r
   r   	is_inliner   rB   )r6   rS   rx   rz   r   r,   r   r   r   r   preposts               r(   render_dot_latexr   @  sR   &!$gufhOOuu & & &r+,,dC888n#%& t$$I 'd? 		+G}& +*g') +)g(* + *	#&&&I4u<=== (	$'''
.s    
A6AAc           	      l    t          | ||d         |d         |                    d                     d S r   )r   r   r   s     r(   latex_visit_graphvizr   b  s6    T4ftIR\I]I]^^^^^^r'   c                 (   	 t          | ||d|          \  }}nH# t          $ r;}t                              t	          d          ||           t
          j        |d }~ww xY w|%| j                            d|d d         z             t
          j        )Nr   r   z@image{%s,,,[graphviz],png}
)	r   r!   r   r   r   r
   r   r   rB   )r6   rS   rx   rz   r   r   r   r   s           r(   render_dot_texinfor   f  s    &!$gufEEuu & & &r+,,dC888n#%&  G	85":EFFF
.s    
A6AAc                 B    t          | ||d         |d                    d S )Nrx   rz   )r   r   s     r(   texinfo_visit_graphvizr   r  s$    tT4<iAAAAAr'   c                     d|j         v r,|                     t          d          |d         z             n"|                     t          d                     t          j        Nrn   z[graph: %s]z[graph])rX   add_textr   r
   r   r   s     r(   text_visit_graphvizr   v  sW     $a&&e45555a	ll###
.r'   c                     d|j         v r1| j                            t          d          |d         z             n'| j                            t          d                     t          j        r   )rX   r   rB   r   r
   r   r   s     r(   man_visit_graphvizr   ~  s_     '	=))DK78888	9&&&
.r'   appr   c                     |]| j         j        dk    rOt          j        t          j        ddd          }t          j        | j        d          }t          ||           d S d S d S )Nhtml	templatesrQ   graphviz.css_static)r   r   r   rI   sphinxpackage_dirr   r   )r   r   srcdsts       r(   on_build_finishedr     sp    
 s{)V3 i*K^TTi
I..3   r'   c           	      2   |                      t          t          d ft          d ft          d ft
          d ft          d f           |                     dt                     |                     dt                     |                     dt                     | 
                    ddd           | 
                    dg d           | 
                    d	d
d           |                     d           |                     dt                     t          j        ddS )N)r   latextexinfotextmanrQ   graphdigraphrp   r.   r   r   r   r   r   zbuild-finishedT)versionparallel_read_safe)add_noderQ   r   r   r   r   r   add_directiverk   r   add_config_valueadd_css_fileconnectr   r   __display_version__)r   s    r(   setupr     s   LL*D1,d30$7*D1($/  1 1 1 j(+++g~...i000777,b&99915&AAA^$$$KK "34441NNNr'   rP   )rQ   NNN)rQ   )QrK   r   rL   r   osr   r   r   typingr   r   r   r	   docutilsr
   docutils.nodesr   docutils.parsers.rstr   r   r   sphinx.applicationr   sphinx.errorsr   sphinx.localer   r   sphinx.utilr   r   sphinx.util.docutilsr   r   sphinx.util.fileutilr   sphinx.util.i18nr   sphinx.util.nodesr   sphinx.util.osutilr   sphinx.util.typingr   sphinx.writers.htmlr   sphinx.writers.latexr   sphinx.writers.manpager   sphinx.writers.texinfor   sphinx.writers.textr   	getLoggerr"   r   r!   r*   GeneralInlineElementrQ   rN   rW   rb   ri   rk   r   r   r   r   r   r   r   r   r   r   	Exceptionr   r   r&   r'   r(   <module>r     s        				           / / / / / / / / ) ) ) ) ) ) ) ) ) ) ) )             6 6 6 6 6 6 6 6  % % % % % % % % % % % %         % % % % % % % % B B B B B B B B + + + + + + 6 6 6 6 6 6 - - - - - - ( ( ( ( ( ( ) ) ) ) ) ) . . . . . . 0 0 0 0 0 0 7 7 7 7 7 7 4 4 4 4 4 4 . . . . . .		8	$	$         K      & & & & & & & &R	 	 	 	 	u}elEM 	 	 	
i 
x 
# 
%, 
 
 
 
D D D D D DA A A A A A A AH( ( ( ( (_ ( ( (X :>1T 1T% 1TS 1T4 1T 1T1T361TBGS/1T 1T 1T 1Tj NR$(1 1. 1 1 1d 11691GJ1!1-238_1 1 1 1h^n ^H ^ ^ ^ ^ ^
 OS ? ( # ",/HK   D_ _h _4 _ _ _ _
 5?	 	. 	h 	c 	 $	.1	CG	 	 	 	B!2 B( Bt B B B Bn H     1  d    6 	 d    Ov O$sCx. O O O O O Or'   