
    7 fD                       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jC        ejD        ejE                  ZFdWd)ZGdXd,ZH G d- d.e%          ZI G d/ d0e%          ZJdYd5ZK	 dZd[d>ZL	 	 d\d]dCZMd^dDZN	 dZd_dFZOd`dGZP	 dadbdIZQdcdJZRdddLZSdedNZTdfdSZUdgdVZVdS )hzNAllow 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dS )GraphvizErrorzGraphviz errorN)__name__
__module____qualname__category     I/var/www/equiseq/venv/lib/python3.11/site-packages/sphinx/ext/graphviz.pyr!   r!   ,   s        HHHr'   r!   c                  l    e Zd ZdZ ej        d          Z ej        d          ZdddZddZ	ddZ
dS )ClickableMapDefinitionz1A manipulator for clickable map file of graphviz.z<map id="(.*?)"z
href=".*?" filenamestrcontentdotreturnNonec                    d | _         || _        |                                | _        g | _        |                     |           d S )Nr/   )idr,   
splitlinesr.   	clickableparse)selfr,   r.   r/   s       r(   __init__zClickableMapDefinition.__init__5   sD    " ))++$&

s
r'   c                2   | j                             | j        d                   }|st          d| j        z            |                    d          | _        | j        dk    rut          |                                d          	                                }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%3Fusedforsecurityz	grapviz%si)	maptag_rematchr.   r!   r,   groupr4   r   encode	hexdigestreplacehref_researchr6   append)r8   r/   matchedhashedlines        r(   r7   zClickableMapDefinition.parse=   s   .&&t|A77 	X F VWWW--""7d?? #**,,>>>HHJJF!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+   )r6   joinr.   )r8   s    r(   generate_clickable_mapz-ClickableMapDefinition.generate_clickable_mapN   sE    
 > 	99dl1o.?4<PRCSBTTUUU2r'   N)r+   )r,   r-   r.   r-   r/   r-   r0   r1   )r/   r-   r0   r1   )r0   r-   )r"   r#   r$   __doc__recompiler>   rD   r9   r7   rN   r&   r'   r(   r*   r*   0   s~        ;;
,--Ibj&&G    , , , ,"     r'   r*   c                      e Zd ZdS graphvizN)r"   r#   r$   r&   r'   r(   rT   rT   Y   s        Dr'   rT   	directiver   nodecaptionr-   r0   nodes.figurec                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linenorW   extendr   )rU   rV   rW   figure_nodeinodesmessagescaption_nodes          r(   figure_wrapperrf   ]   s    ,r4((K$#227;;G 227I<LMMFH="6v666L!!!I|,,,<Kr'   argumentr	   c                ,    t          j        | d          S )N)leftcenterright)r   choice)rg   s    r(   
align_specrm   j   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ded<   ddZdS )Graphviz3
    Directive to insert arbitrary dot markup.
    Tr   r;   FaltrZ   rW   layoutgraphviz_dotnameclassr   option_specr0   
list[Node]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)rI   r   utf-8encodingz8External Graphviz file %r not found or reading it failedrK   z.Ignoring "graphviz" directive without content.codedocnameoptionsrt   rs   rr   rZ   rv   classesr,   rW   )	argumentsr^   documentr.   reporterwarningr   r`   r   env
relfn2pathnote_dependencyopenreadOSErrorrM   stripstate_machinerT   r~   r   add_namerf   )	r8   r   rg   rel_filenamer,   fpdotcoderV   r[   s	            r(   runzGraphviz.run   s%   > 	'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\)).2l>.JDON+t|##.2l8.DDON+DL  ,u-DKdl"" L1DMdl"""l73DO 	,+DDL((MM$6M#D$Y0GHHFMM&!!!8Os6   #C! 4C	C! CC! CC! !<D D Nr0   rx   r"   r#   r$   rO   has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer   	unchangedrm   class_optionrw   __annotations__r   r&   r'   r(   ro   ro   n   s           K %#'&",$( K    / / / / / /r'   ro   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dS )GraphvizSimplerp   Tr;   r   Frq   r   rw   r0   rx   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 {
rK   z
}
r}   r~   r   rt   rs   rr   rZ   rv   r   rW   )
rT   ru   r   rM   r.   r   r~   r   r   rf   )r8   rV   r[   s      r(   r   zGraphvizSimple.run   sJ   zz			4>!#4#4#4dii6M6M6M6MOV$dh&67YT\)).2l>.JDON+t|##.2l8.DDON+DL  ,u-DKdl"" L1DMdl"""l73DODL((MM$6M#D$Y0GHHFMM&!!!8Or'   Nr   r   r&   r'   r(   r   r      s           K %#'&",$( K         r'   r   r8   5HTML5Translator | LaTeXTranslator | TexinfoTranslatorfilepathr1   c                   t          j        |          }|                                }ddd}d}d}t          |                    d|          |                    d|                    D ]}t          |j        |                   \  }}	}
}}|	r%| j        j        	                    | j
        d                   }|R| j        j        j                            |                                          j        }||
z  }|| j        j        z  }t#          j        ||
          }t'          ||	|||f          }|                    ||           d}|r|                    |           d	S d	S )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)ETr7   getrootr   findallr
   attribbuilderr   path2docr   appoutdirjoinpathresolveparentimgpathr   relpathr   setwrite)r8   r   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      s|    8HD<<>>D-8V	W	WB4IH0"55,b11    6>gnY>W5X5X2'5( 	,"++DM(,CDD?,")227;;CCEELW$T\11<999!68Xuh"OPPI|,,, 

8 r'   r}   r   dictformatprefixr,   
str | Nonetuple[str | None, str | None]c                   |                     d| j        j        j                  }|st	          t          d          |z            |t          |          z   t          |          z   t          | j        j        j                  z                                   }| dt          |d          
                                 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           	 t1          j        ||                                d|d          }n# t4          $ r\ t6                              t          d          |           t%          | j        d          si | j        _        d| j        j        |<   Y dS t:          $ r1}t	          t          d          |j        |j        fz            |d}~ww xY wt          j        |
          s+t	          t          d          |j        |j        fz            |dk    rtA          | |
           |	|
fS )z3Render graphviz code into a PNG or PDF output file.rt   z,graphviz_dot executable path must be set! %r-Fr<   ._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   configrt   r!   r   r-   graphviz_dot_argsrA   r   rB   	posixpathrM   r   r   r   imagedirisfilehasattrr   r   dirnamera   srcdir
subprocessr   r   loggerr   r   stderrstdoutr   )r8   r}   r   r   r   r,   rt   hashkeyfnamerelfnoutfndot_argsr~   r   retexcs                   r(   
render_dotr     s   
 ;;~t|/B/OPPL 
=>>M
 
 	
 c'll"S%6%664<&899:;A688  SSWe<<<FFHHSS6SSE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J$67888TnXT[[]]4!$D2 2 2   r D E EFR	T 	T 	Tt|%;<< 	302DL-:>),7zz T T TB  . / /25*cj1IJ K KPS	TT ;u KB  . / /25*cj1IJ K K 	K tU+++%<s   +J	 	A"L(.	L(7,L##L(r   imgclsrr   tuple[str, str]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                            |                     |                     nI|;|
                    d|                     |                                                    }d|v r-| j                            d	|d         d
|d         d           |dk    rt| j                            d           | j                            d|	d|d           | j                            d|z             | j                            d           nC|
J 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   r   z=graphviz_output_format must be one of 'png', 'svg', but is %rdot code %r: %srT   r   r   rr   rZ   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.maprz   r{   r3   z
<img src="z" alt="z" usemap="#z	" class="z" />z</div>
)r   r   graphviz_output_formatr!   r   r   r   r   r   SkipNoder   rM   filterbodyrF   rA   r   r   r*   r   r6   r4   rN   )r8   rV   r}   r   r   r   rr   r,   r   r   r   r   r   mapfileimgmaps                  r(   render_dot_htmlr   ?  s    \ 7F&'' $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??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 Nr}   r   r,   )r,   )r   r   r8   rV   s     r(   html_visit_graphvizr   u  s6    D$Vd9oQ[H\H\]]]]]]r'   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+   rZ   ri   {z\hspace*{\fill}}rk   z{\hspace*{\fill}}rj   z{\hfillz
%sz\sphinxincludegraphics[]{%s}z%s
)
r   r!   r   r   r   r   r   	is_inliner   rF   )r8   rV   r}   r   r   r,   r   r   r   r   preposts               r(   render_dot_latexr   y  sI   &!$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    s6    T4ftIR\I]I]^^^^^^r'   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   rF   )r8   rV   r}   r   r   r   r   r   s           r(   render_dot_texinfor    s    &!$gufEEuu & & &r+,,dC888n#%& 	85":EFFF
.s    
A6AAc                B    t          | ||d         |d                    d S )Nr}   r   )r  r   s     r(   texinfo_visit_graphvizr    s$    tT4<iAAAAAr'   r   c                    d|j         v r,|                     t          d          |d         z             n"|                     t          d                     t          j        Nrr   z[graph: %s]z[graph])r\   add_textr   r   r   r   s     r(   text_visit_graphvizr    sU    a&&e45555a	ll###
.r'   r   c                    d|j         v r1| j                            t          d          |d         z             n'| j                            t          d                     t          j        r	  )r\   r   rF   r   r   r   r   s     r(   man_visit_graphvizr    s]    	=))DK78888	9&&&
.r'   _appr   r   r   c                |    t          j        t          j        ddd          }|j                            |           d S )N	templatesrT   graphviz.css)r   rM   sphinxpackage_dirhtml_static_pathrF   )r  r   css_paths      r(   on_config_initedr    s7    y+[*nUUH
""8,,,,,r'   r   dict[str, Any]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)htmllatextexinfotextmanrT   graphdigraphrt   r/   r  r   r   r   r  zconfig-initedT)versionparallel_read_safe)add_noderT   r   r  r  r  r  add_directivero   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!12221NNNr'   )rU   r   rV   rT   rW   r-   r0   rX   )rg   r	   r0   r-   )r8   r   r   r-   r0   r1   rS   )r8   r   r}   r-   r   r   r   r-   r   r-   r,   r   r0   r   )rT   NNN)r8   r   rV   rT   r}   r-   r   r   r   r-   r   r   rr   r   r,   r   r0   r   )r8   r   rV   rT   r0   r1   )r8   r   rV   rT   r}   r-   r   r   r   r-   r,   r   r0   r1   )r8   r   rV   rT   r0   r1   )rT   )r8   r   rV   rT   r}   r-   r   r   r   r-   r0   r1   )r8   r   rV   rT   r0   r1   )r8   r   rV   rT   r0   r1   )r8   r   rV   rT   r0   r1   )r  r   r   r   r0   r1   )r   r   r0   r  )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   rf   rm   ro   r   r   r   r   r   r   r  r  r  r  r  r  r(  r&   r'   r(   <module>rH     s    # " " " " "     				     " " " " " " " " "                   ) ) ) ) ) ) % % % % % % % % - - - - - - - -       6 6 6 6 6 6 6 6  % % % % % %               0 0 0 0 0 0 6 6 6 6 6 6 - - - - - - ( ( ( ( ( ( 
3######))))))$$$$$$------333333444444;;;;;;888888222222		8	$	$         K      & & & & & & & &R	 	 	 	 	u}elEM 	 	 	
 
 
 
D D D DA A A A A A A AH( ( ( ( (_ ( ( (V! ! ! !L AE; ; ; ; ;~ DHCG3 3 3 3 3l^ ^ ^ ^
 VZ    D_ _ _ _
 5?	 	 	 	 	B B B B      - - - -
O O O O O Or'   