
    FeD                       d Z ddlmZ ddlZddlZddlZddlmc 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mZ dd	lmZ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 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r6ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=  e#j|                  e?      Z@ G d de      ZA G d d      ZB G d  d!ej                  ej                  ej                        ZFd4d"ZGd5d#ZH G d$ d%e%      ZI G d& d'e%      ZJ	 	 	 	 d6d(ZK	 d7	 	 	 	 	 	 	 	 	 	 	 d8d)ZL	 	 d9	 	 	 	 	 	 	 	 	 d:d*ZMd;d+ZN	 d7	 	 	 	 	 	 	 d<d,ZOd=d-ZP	 d>	 	 	 	 	 d?d.ZQd@d/ZRdAd0ZSdBd1ZTdCd2ZUdDd3ZVy)EzNAllow graphviz-formatted graphs to be included inline in generated documents.
    )annotationsN)sha1)chain)path)CalledProcessError)TYPE_CHECKINGAny)urlsplit
urlunsplit)nodes)	Directive
directives)SphinxError)___)logging)SphinxDirective)search_image_for_language)set_source_info)	ensuredir)Node)Sphinx)Config)
OptionSpec)HTML5Translator)LaTeXTranslator)ManualPageTranslator)TexinfoTranslator)TextTranslatorc                      e Zd ZdZy)GraphvizErrorzGraphviz errorN)__name__
__module____qualname__category     5/usr/lib/python3/dist-packages/sphinx/ext/graphviz.pyr!   r!   ,   s    Hr'   r!   c                  r    e Zd ZdZ ej
                  d      Z ej
                  d      Zdd	dZd
dZ	ddZ
y)ClickableMapDefinitionz1A manipulator for clickable map file of graphviz.z<map id="(.*?)"z
href=".*?"c                |    d | _         || _        |j                         | _        g | _        | j                  |       y )Ndot)idfilename
splitlinescontent	clickableparse)selfr/   r1   r-   s       r(   __init__zClickableMapDefinition.__init__5   s5    " ))+$&

s
r'   c                :   | j                   j                  | j                  d         }|st        d| j                  z        |j                  d      | _        | j                  dk(  rlt        |j                         d      j                         }d|dd  z  | _        | j                  d   j                  d| j                        | j                  d<   | j                  D ]9  }| j                  j                  |      s| j                  j                  |       ; y )	Nr   z$Invalid clickable map file found: %s   z%3Fusedforsecurityz	grapviz%si)	maptag_rematchr1   r!   r/   groupr.   r   encode	hexdigestreplacehref_researchr2   append)r4   r-   matchedhashedlines        r(   r3   zClickableMapDefinition.parse=   s    ..&&t||A7 F VWW--"77d? #**,>HHJF!F34L0DG"ll1o55dDGGDDLLOLL 	,D||""4(%%d+	,r'   c                    | j                   r=dj                  | j                  d   g| j                   z   | j                  d   gz         S y)zvGenerate clickable map tags if clickable item exists.

        If not exists, this only returns empty string.
        
r    )r2   joinr1   )r4   s    r(   generate_clickable_mapz-ClickableMapDefinition.generate_clickable_mapN   sC    
 >>99dll1o.?4<<PRCSBTTUUr'   N)rI   )r/   strr1   rL   r-   rL   returnNone)r-   rL   rM   rN   )rM   rL   )r"   r#   r$   __doc__recompiler:   r@   r5   r3   rK   r&   r'   r(   r*   r*   0   s5    ;

,-Ibjj&G,"r'   r*   c                      e Zd ZygraphvizN)r"   r#   r$   r&   r'   r(   rT   rT   Y   s    r'   rT   c                :   t        j                  d|      }d|v r|j                  j                  d      |d<   | j                  j                  || j                        \  }}t        j                  |dg| }|j                  |       t        | |       ||z  }|S )NrI   align)
r   figure
attributespopstateinline_textlinenocaptionextendr   )	directivenoder]   figure_nodeinodesmessagescaption_nodes          r(   figure_wrapperre   ]   s    ,,r4(K$#227;G 227I<L<LMFH=="6v6L!I|,<Kr'   c                .    t        j                  | d      S )N)leftcenterright)r   choice)arguments    r(   
align_specrl   j   s    X'B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ded<   dd	Zy
)Graphviz3
    Directive to insert arbitrary dot markup.
    Tr   r7   FaltrV   r]   layoutgraphviz_dotnameclassr   option_specc                   | j                   r| j                  j                  }| j                  r1|j                  j                  t        d      | j                        gS t        | j                   d   | j                        }| j                  j                  |      \  }}| j                  j                  |       	 t        |d      5 }|j                         }d d d        nhdj                  | j                        }d }|j!                         s;| j"                  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| j+                  |       |gS t-        | || j(                  d         }| j+                  |       |gS # 1 sw Y   xY w# t        $ r7 |j                  j                  t        d      |z  | j                        gcY S w xY w)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optionsrs   rr   rq   rV   ru   classesr/   r]   )	argumentsrZ   documentr1   reporterwarningr   r\   r   env
relfn2pathnote_dependencyopenreadOSErrorrJ   stripstate_machinerT   r|   r}   add_namere   )	r4   r   rk   rel_filenamer/   fpdotcoder`   rW   s	            r(   runzGraphviz.run   s   >>zz**H|| ))11 - .48KK 2 A B B 11BDHHMH%)XX%8%8%B"L(HH$$\2C(W5 ( ggiG( ii-GL==?**33;;GH < & ' ' zV$dhh&6&67YT\\).2ll>.JDON+t||#.2ll8.DDON+DLL ,,u-DKdll" LL1DMdll""ll73DO+DDLL(MM$6M#D$Y0GHFMM&!8OI( ( C ))11 # $&./59[[ 2 B C CCs*   =J  
I3J  3I=8J   =K ?K NrM   z
list[Node]r"   r#   r$   rO   has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer   	unchangedrl   class_optionrv   __annotations__r   r&   r'   r(   rn   rn   n   sl     K %##''&&",,$$((K /r'   rn   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ded<   dd	Zy
)GraphvizSimplero   Tr7   r   Frp   r   rv   c                   t               }| j                  d| j                  d   ddj                  | 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| j                  |       |gS t        | || j                  d         }| j                  |       |gS )N r   z {
rG   z
}
r{   r|   r}   rs   rr   rq   rV   ru   r~   r]   )
rT   rt   r   rJ   r1   r   r|   r}   r   re   )r4   r`   rW   s      r(   r   zGraphvizSimple.run   s7   z		4>>!#4dii6MOV$dhh&6&67YT\\).2ll>.JDON+t||#.2ll8.DDON+DLL ,,u-DKdll" LL1DMdll""ll73DODLL(MM$6M#D$Y0GHFMM&!8Or'   Nr   r   r&   r'   r(   r   r      sl     K %##''&&",,$$((K r'   r   c                   t        j                  |      }|j                         }ddd}d}d}t        |j	                  d|      |j	                  d|            D ]  }t        |j                  |         \  }}	}
}}|	r$| j                  j                  j                  | j                  d         }|Y| j                  j                  j                  j                  |      j                         j                  }||
z  }|| j                  j                   z  }t#        j$                  ||
      }t'        ||	|||f      }|j)                  ||       d} |r|j+                  |       y	y	)zGChange relative links in generated svg files to be relative to imgpath.zhttp://www.w3.org/2000/svgzhttp://www.w3.org/1999/xlink)svgxlinkz"{http://www.w3.org/1999/xlink}hrefFz.//svg:image[@xlink:href]z.//svg:a[@xlink:href]sourceN)startT)ETr3   getrootr   findallr
   attribbuilderr   path2docr   appoutdirjoinpathresolveparentimgpathr   relpathr   setwrite)r4   filepathtreerootns	href_namemodifiedelementschemehostnamerel_uriqueryfragmentr|   doc_dirold_pathimg_pathnew_pathmodified_urls                      r(   fix_svg_relative_pathsr      sP    88HD<<>D-8V	WB4IH0"5,b1  6>gnnY>W5X2'5(,,""++DMM(,CD?,,""))227;CCELLW$T\\111<<9!68Xuh"OPI|,+. 

8 r'   c                p   |j                  d| j                  j                  j                        }|st	        t        d      |z        |t        |      z   t        |      z   t        | j                  j                  j                        z   j                         }| dt        |d      j                          d| }t        j                  | j                  j                  |      }	t        j                  | j                  j                  | j                  j                   |      }
t        j"                  |
      r|	|
fS t%        | j                  d      r&| j                  j&                  j                  |      ryt)        t        j*                  |
             |g}|j-                  | j                  j                  j                         |j-                  d	|z   d
|
z   g       |j                  dd      }|r>t        j*                  t        j                  | j                  j.                  |            }n=t        j*                  t        j                  | j                  j.                  |            }|dk(  r|j-                  dd|
z  g       	 t1        j2                  ||j                         d|d      }t        j"                  |
      s-t	        t        d      |j<                  |j>                  fz        |dk(  rtA        | |
       |	|
fS # t4        $ rb t6        j9                  t        d      |       t%        | j                  d      si | j                  _        d| j                  j&                  |<   Y yt:        $ r3}t	        t        d      |j<                  |j>                  fz        |d}~ww xY w)z3Render graphviz code into a PNG or PDF output file.rs   z,graphviz_dot executable path must be set! %r-Fr8   ._graphviz_warned_dot)NNz-Tz-or|   indexpngz-Tcmapxz-o%s.mapT)inputcapture_outputcwdcheckzYdot command %r cannot be run (needed for graphviz output), check the graphviz_dot settingz.dot exited with error:
[stderr]
%r
[stdout]
%rNz;dot did not produce an output file:
[stderr]
%r
[stdout]
%rr   )!getr   configrs   r!   r   rL   graphviz_dot_argsr=   r   r>   	posixpathrJ   r   r   r   imagedirisfilehasattrr   r   dirnamer^   srcdir
subprocessr   r   loggerr   r   stderrstdoutr   )r4   r{   r}   formatprefixr/   rs   hashkeyfnamerelfnoutfndot_argsr|   r   retexcs                   r(   
render_dotr     s   
 ;;~t||/B/B/O/OPL=>M
 	
 c'l"S%664<<&&889:;A68  haWe<FFHI6(SENN4<<//7EIIdll))4<<+@+@%HE{{5e|45||((,,\:dll5!"~HOODLL''99:OOTF]D5L12kk)W-Gll499T\\%8%8(CDll499T\\%8%8'BCJ$678TnnXT[[]4!$D2 ;;uB  . /25**cjj1IJ K 	K tU+%<#  r D EFR	Tt||%;<02DLL-:>)),7 TB  . /25**cjj1IJ KPS	TTs   (L A(N5:N5.N00N5c                   | j                   j                  j                  }	 |dvrt        t	        d      |z        t        | |||||      \  }	}
|dg|j                  dg       z   }dj                  t        d |            }|	:| j                  j                  | j                  |             t        j                  |/|j                  d| j                  |      j!                               }d|v r(| j                  j                  d	|d   d
|d   d       |dk(  rx| j                  j                  d       | j                  j                  d|	d|d       | j                  j                  d|z         | j                  j                  d       n5|
J t#        |
dz   d      5 }t%        |
dz   |j'                         |      }|j(                  r| j                  j                  d       | j                  j                  d|	d|d|j*                  d|d	       | j                  j                  d       | j                  j                  |j-                                n[| j                  j                  d       | j                  j                  d|	d|d|d       | j                  j                  d       d d d        d|v r| j                  j                  d       t        j                  # t        $ r6}t        j                  t	        d      ||       t        j                  |d }~ww xY w# 1 sw Y   zxY w)N)r   r   z=graphviz_output_format must be one of 'png', 'svg', but is %rdot code %r: %srT   r~   r   rq   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.maprx   ry   r,   z
<img src="z" alt="z" usemap="#z	" class="z" />z</div>
)r   r   graphviz_output_formatr!   r   r   r   r   r   SkipNoder   rJ   filterbodyrB   r=   r   r   r*   r   r2   r.   rK   )r4   r`   r{   r}   r   imgclsrq   r/   r   r   r   r   r~   mapfileimgmaps                  r(   render_dot_htmlr   ?  s    \\  77F&' $6 !79?!@ A A!$gvvxPu
 z"TXXi%<<GXXfT7+,F}		T*+B ..? ;((5$++d"3"9"9";<Cd?II"7mT']< =U?II56II#V- .II83>?II01$$$efnw7 17/TXY##II$$%=>II$$&+S&))V&E FII$$Z0II$$V%B%B%DE II$$%=>II$$&+S&&: ;II$$Z01 d?IIZ(
..S  &r+,dC8nn#%&.1 1s$   .K< ,DL><	L;1L66L;>Mc           	     N    t        | ||d   |d   |j                  d             y Nr{   r}   r/   )r/   )r   r   r4   r`   s     r(   html_visit_graphvizr   u  s$    D$Vd9oQ[H\]r'   c                   	 t        | ||d||      \  }}| j                  |      }	|	sLd}
d}d|v r&|d   dk(  rd}
d}n|d   dk(  rd	}
d
}n|d   dk(  rd}
d}| j                  j                  d|
z         | j                  j                  d|z         |	s| j                  j                  dz         t
        j                  # t        $ r6}t        j                  t	        d      ||       t
        j                  |d }~ww xY w)Npdfr   rI   rV   rg   {z\hspace*{\fill}}ri   z{\hspace*{\fill}}rh   z{\hfillz
%sz\sphinxincludegraphics[]{%s}z%s
)
r   r!   r   r   r   r   r   	is_inliner   rB   )r4   r`   r{   r}   r   r/   r   r   r   r   preposts               r(   render_dot_latexr   y  s
   &!$gufhOu
 t$Id?G}&*g'))g(* *		#&II4u<=		$'
..5  &r+,dC8nn#%&s   C 	D1C<<Dc           	     N    t        | ||d   |d   |j                  d             y r   )r   r   r   s     r(   latex_visit_graphvizr     s$    T4ftIR\I]^r'   c                   	 t        | ||d|      \  }}|!| j                  j                  d|d d z         t
        j                  # t        $ r6}t        j                  t	        d      ||       t
        j                  |d }~ww xY w)Nr   r   z@image{%s,,,[graphviz],png}
)	r   r!   r   r   r   r   r   r   rB   )r4   r`   r{   r}   r   r   r   r   s           r(   render_dot_texinfor     s    &!$gufEu 		85":EF
..  &r+,dC8nn#%&s   A 	B1BBc                ,    t        | ||d   |d          y )Nr{   r}   )r   r   s     r(   texinfo_visit_graphvizr     s    tT4<iAr'   c                    d|j                   v r0| j                  t        d      |d   z         t        j                  | j                  t        d             t        j                  Nrq   z[graph: %s]z[graph])rX   add_textr   r   r   r   s     r(   text_visit_graphvizr    sP    a&e45 .. 	a	l#
..r'   c                    d|j                   v r:| j                  j                  t        d      |d   z         t        j
                  | j                  j                  t        d             t        j
                  r  )rX   r   rB   r   r   r   r   s     r(   man_visit_graphvizr    s\    		=)DK78 .. 			9&
..r'   c                    t        j                  t        j                  ddd      }|j                  j                  |       y )N	templatesrT   graphviz.css)r   rJ   sphinxpackage_dirhtml_static_pathrB   )_appr   css_paths      r(   on_config_initedr    s0    yy++[*nUH
""8,r'   c           	        | j                  t        t        d ft        d ft        d ft
        d ft        d f       | j                  dt               | j                  dt               | j                  dt               | j                  ddd       | j                  dg d       | j                  d	d
d       | j                  d       | j                  dt               t        j                  ddS )N)htmllatextexinfotextmanrT   graphdigraphrs   r-   r  r   r   r   r	  zconfig-initedT)versionparallel_read_safe)add_noderT   r   r   r   r  r  add_directivern   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 j(+g~.i07,b&915&A^$KK!1211NNr'   )r_   r   r`   rT   r]   rL   rM   znodes.figure)rk   r	   rM   rL   )r4   5HTML5Translator | LaTeXTranslator | TexinfoTranslatorr   rL   rM   rN   rS   )r4   r!  r{   rL   r}   dictr   rL   r   rL   r/   
str | NonerM   ztuple[str | None, str | None])rT   NNN)r4   r   r`   rT   r{   rL   r}   r"  r   rL   r   r#  rq   r#  r/   r#  rM   ztuple[str, str])r4   r   r`   rT   rM   rN   )r4   r   r`   rT   r{   rL   r}   r"  r   rL   r/   r#  rM   rN   )r4   r   r`   rT   rM   rN   )rT   )r4   r   r`   rT   r{   rL   r}   r"  r   rL   rM   rN   )r4   r   r`   rT   rM   rN   )r4   r   r`   rT   rM   rN   )r4   r   r`   rT   rM   rN   )r  r   r   r   rM   rN   )r   r   rM   zdict[str, Any])WrO   
__future__r   r   rP   r   xml.etree.ElementTreeetreeElementTreer   hashlibr   	itertoolsr   osr   r   typingr   r	   urllib.parser
   r   docutilsr   docutils.parsers.rstr   r   r
  sphinx.errorsr   sphinx.localer   r   sphinx.utilr   sphinx.util.docutilsr   sphinx.util.i18nr   sphinx.util.nodesr   sphinx.util.osutilr   docutils.nodesr   sphinx.applicationr   sphinx.configr   sphinx.util.typingr   sphinx.writers.htmlr   sphinx.writers.latexr   sphinx.writers.manpager   sphinx.writers.texinfor   sphinx.writers.textr   	getLoggerr"   r   r!   r*   GeneralInlineElementrT   re   rl   rn   r   r   r   r   r   r   r   r   r   r  r  r  r   r&   r'   r(   <module>rC     s   #  	  " "    ) % -  6  %   0 6 - (#)$-34;82			8	$ K  & &R	u}}ellEMM 	
DA AH(_ (V!%(!-1!L AE;;#';14;;3=; 2;~ DHCG336@3#36@3 )3l^
 VZ",/HRD_
 5?	 $	.1	CG	B-
Or'   