
    jb+                       U d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlZddlmZ ddgZd	Z  ej!        e"          Z#e#$                    d
            G d d          Z% G d de%          Z& G d de          Z'd3dZ(d4dZ)d5dZ*d6dZ+d7d Z,d7d!Z-d7d"Z.d8d$Z/d8d%Z0d9d&Z1d:d'Z2d;d)Z3d<d+Z4 G d, d-          Z5d=d0Z6e5j7        Z8d1e9d2<   dS )>a  Graphviz's dot language parser.

The dotparser parses GraphViz files in
dot and dot files and transforms them
into a class representation defined by `pydot`.

Author: Michael Krause <michael@krause-software.de>
Fixes by: Ero Carrera <ero.carrera@gmail.com>
    )annotationsN)Any)CaselessLiteralCombineDelimitedListForwardGroupLiteral	OneOrMoreOptionalParseExceptionParserElementParseResultsQuotedStringTokenWordautoname_elementscStyleCommentlinenonums
restOfLineunicode)
FrozenDictzMichael KrausezEro CarreraMITz$pydot dot_parser module initializingc                      e Zd Zd	dZd
dZdS )
P_AttrListtoksr   returnNonec                   i | _         d}|t          |          k     rd||         }|dz   t          |          k     r ||dz            dk    r||dz            }|dz  }nd }|dz  }|| j         |<   |t          |          k     bd S d S )Nr         =   )attrslen)selfr   iattrname	attrvalues        W/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/pydot/dot_parser.py__init__zP_AttrList.__init__7   s    
#d))mmAwH1us4yy  T!a%[C%7%7 QK	Q 	Q#,DJx  #d))mmmmmm    strc                4    | j         j        }| d| j        dS )N())	__class____name__r%   r'   names     r+   __repr__zP_AttrList.__repr__F   s%    ~&((((((r-   N)r   r   r   r   r   r.   r3   
__module____qualname__r,   r6    r-   r+   r   r   6   s<        - - - -) ) ) ) ) )r-   r   c                      e Zd Zd
dZddZd	S )DefaultStatementdefault_typer.   r%   r   r   r   c                "    || _         || _        d S N)r>   r%   )r'   r>   r%   s      r+   r,   zDefaultStatement.__init__L   s    (


r-   c                D    | j         j        }| d| j         d| j        dS )Nr0   z, r1   )r2   r3   r>   r%   r4   s     r+   r6   zDefaultStatement.__repr__P   s0    ~&==*==dj====r-   N)r>   r.   r%   r   r   r   r7   r8   r;   r-   r+   r=   r=   K   s<           > > > > > >r-   r=   c                  0     e Zd ZdZd fdZ	 dddZ xZS )HTMLzParsing for HTML-like strings.r   r   c                H    t                                                       d S r@   )superr,   )r'   r2   s    r+   r,   zHTML.__init__X   s    r-   Tinstringr.   locint
do_actionsbooltuple[int, str]c           
        |}|t          |          k     r||         dk    st          ||d|           d}|dz  }|t          |          k     rM||         dk    r|dz  }n||         dk    r|dz  }|dz  }|dk    r||||         fS |t          |          k     Mt          ||ddt          ||           z   |           )N<z
expected <r"   >r   z HTML: expected '>' to match '<' zon line )r&   r   r   )r'   rF   rG   rI   open_locnum_opens         r+   	parseImplzHTML.parseImpl[   s     c(mm##(<(< 3dCCCqCMM!!}##A##%%A1HC1}}HXc\222 CMM!! .5(33556
 
 	
r-   )r   r   )T)rF   r.   rG   rH   rI   rJ   r   rK   )r3   r9   r:   __doc__r,   rQ   __classcell__)r2   s   @r+   rC   rC   U   sa        ((      ;?
 
 
 
 
 
 
 
 
r-   rC   r   r   r   list[pydot.core.Dot]c                   g }| j         D ]}t          |t                    sJ |j        }d|v }t	          |j                  }t          j                            |||          }|	                    |           t          |j
        t                    rt          ||j
                   t          |           |                    |           |S )Nstrict)
graph_typerV   )graphs
isinstancer   gtyper.   idpydotcoreDotset_parent_graphcontentsadd_elementsupdate_parent_graph_hierarchyappend)r   
top_graphsresultrZ   rV   id_gs          r+   push_top_graph_stmtrh   t   s    J+  &,/////V#&)nnJNN35N@@	1fo|44 	-FO,,,%a(((!r-   rg   pydot.core.Dotr   c                4   | j                             di                                           D ]i}|D ]d}t          |t                    sJ |                    dg           }|D ]2}t          |t
                    r|d                             |            3ejd S )Nedgespointsparent_graph)obj_dictgetvaluesrY   dictr   r_   )rg   edge_groupsedge	endpointseps        r+   rb   rb      s    z~~gr2299;; ; ; 	; 	;DdD)))))2..I ; ;b*-- ;~&77:::;	;; ;r-   r   c                   |D ]b}t          |t          j        j        t          j        j        f          r|                     |           It          |t          j        j                  r|                     |           ~t          |t          j        j                  r| 	                    |           t          |t                    rt          | |           t          |t                    r8t          j        j        |j        fi |j        }|                     |           &t          |t                    sJ | j        d                             |j                   dd S )N
attributes)rY   r\   r]   SubgraphClusteradd_subgraphNodeadd_nodeEdgeadd_edger   ra   r=   r>   r%   r   rn   update)rg   r   elementdefault_nodes       r+   ra   ra      sT    ; ;g
 3UZ5GHII 	;NN7####11 	;JJw11 	;JJw.. 		;G$$$$!122 	; :?$ (/ L JJ|$$$$gz22222J|$++GM::::!; ;r-   attr_ldict[str, Any]c                v    t          | t                    si S i }| D ]}|                    |j                   |S r@   )rY   r   r   r%   )r   r%   alists      r+   expand_attr_listsr      sI    fl++ 	E " "U[!!!!Lr-   r.   c                    d| v rt          | j        t                    sJ | j        }d|v r*|                    dd                              dd          }|S )N
dbl_quoted\z\
 z\
)rY   r   r.   replace)r   ss     r+   push_dbl_quotedr      s\    4Jt$D$DDAqyyIIh##++FB77Hr-   c                   d| v r*d                     d | j        D                       }d| dS d| v rt          | j                  S d| v rt          | j                  S d| v rt          | j        t                    sJ | j        S )z4Join multiple string pieces into a single ID string.concatr   c              3  *   K   | ]}|d d         V  dS )r"   Nr;   ).0r   s     r+   	<genexpr>zpush_ID.<locals>.<genexpr>   s*      33!a"g333333r-   "r   identhtml)joinr   r.   r   r   rY   r   )r   outs     r+   push_IDr      s    4gg33t{333333zzzt4?###$4:T>>jC88>>89r-   c                    g }| D ]/}d|v sJ |                     t          |j                             0d                    |          S )Nid_part:)rc   r.   r   r   )r   r   groups      r+   push_node_idr      sV    
C ' 'E!!!!

3u}%%&&&&88C==r-   pydot.core.Subgraphc                x    t           j                            d          }d|j        d<   t	          ||            |S )Nr   Fshow_keyword)r\   r]   rx   rn   ra   )r   rg   s     r+   push_graph_stmtr      s8    
BA!&AJ~DHr-   c                    d| v sJ t          | j                  }d| v }t          j                            |          }||j        d<   t          | j        t                    rt          || j                   |S )Nkeywordr   )
r.   r[   r\   r]   rx   rn   rY   r`   r   ra   )r   rf   show_kwrg   s       r+   push_subgraph_stmtr      sv    
dg,,C4G
C  A!(AJ~$-.. 'Q&&&Hr-   c                r    | j         }t          | j                  }t          t	          |          |          S r@   )dtyper   r   r=   r.   )r   r>   r%   s      r+   push_default_stmtr      s0    :Ldk**EC--u555r-   c                $    t          |           }|S r@   )r   )r   ps     r+   push_attr_listr      s    4AHr-   list[pydot.core.Edge]c                   t          | j                  }t          | j                  }dd}g } ||d                   }|dd          D ]:} ||          }|                    t          j        j        ||fi |           |};|S )	Nru   #pydot.core.Common | list[Any] | strr   FrozenDict | strc                    t          | t          j        j                  rt	          | j                  S t          |           S r@   )rY   r\   r]   rx   r   rn   r.   )ru   s    r+   make_endpointz%push_edge_stmt.<locals>.make_endpoint   s6     b%*-.. 	+bk***2wwr-   r   r"   )ru   r   r   r   )listrt   r   r   rc   r\   r]   r}   )r   rt   r%   r   rk   n_prevendpointn_nexts           r+   push_edge_stmtr      s    T^$$Idk**E    E]9Q<((FabbM  x((UZ_VV==u==>>>Lr-   pydot.core.Nodec                    | j         }t          | j                  }t          j        j        t          |          fi |S r@   )r5   r   r   r\   r]   r{   r.   )r   	node_namer%   s      r+   push_node_stmtr      s8    	Idk**E:?3y>>33U333r-   c            
      P
   e Zd ZdZ ed          Z ed          Z ed          Z ed          Z ed          Z	 ed          Z
 ed          Z ed	          Z ed
          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z eej        j        dz             Z edddd                              d                              e          Z eeddd          Z  e d          ez   ed          z   e!                                d          z                      e"          Z# e$ e%e           e& ee'dz                       z             Z(e(e#z  Z) e e* e#d                    dd d!d"                              e+          Z, e&e# e%e
e)z             z    e%e-                                          z             Z. e&e-                                 e%e.          z   e	-                                z             Z/ e,d#           e% e/d$                    z    e%e-                                          z   Z0eez  ez  Z1 e1d%           e/d$          z   Z2 e3            Z4 e*e-                                 e%e4          z   e-                                z    e%e-                                          z             Z5 ed&           e% e#d'                    z    e5d(          z   Z6 ed)           ed*          z  Z7e6e5z  e,z  Z8  ee8e7d+          d,           e% e/d$                    z   Z9e#e
z   e)z   Z:e:e9z  e2z  e6z  e5z  e0z  Z;e4 e&e; e%e-                                          z             z  Z4eez  Z< e& e* e% ed                     e<d-          z    e% e#d'                    z    e5d(          z                                           d.          Z= e*d/e>z              e*d0e>z             z  Z?e=@                    e?           e=@                    eA           e=B                                 e:C                    eD           e.C                    eD           e9C                    eE           e0C                    eF           e2C                    eG           e6C                    eH           e5C                    eI           e=C                    eJ            eK             d1S )2GraphParserz,Pyparsing grammar for graphviz 'dot' syntax.r   {}[]r#   ,;-rV   graphdigraphsubgraphnoders   z_.r   TFr   )	multilineunquote_resultsesc_charr   +r!   )delimmincombiner   r   r   .r   r"   r$   )r   r   maxr   r5   r   r   r   r[   r`   z--z->)r   r   rt   rZ   rX   z//#N)Lr3   r9   r:   rR   r
   colonlbracerbracelbrackrbrackequalscommasemiminusr   strict_graph_digraph_	subgraph_node_edge_r   r   BasicMultilingualPlane	alphanums
identifierr   set_results_nameset_parse_actionr   double_quotedr   concat_stringrC   r   IDr   r   r   r   float_numberrighthand_idr	   r   node_idsuppressa_list	attr_list	node_stmtr>   default_stmtr   	stmt_list
graph_stmtr   edgeop
edge_point	edge_stmt
assignmentstmtrW   parserr   singleLineCommentignorer   parse_with_tabssetParseActionr   r   r   r   r   r   rh   r   r;   r-   r+   r   r     sd       66 GCLLEWS\\FWS\\FWS\\FWS\\FWS\\FGCLLE73<<DGCLLE oh''G_W%%Fy))H
++IOF##EOF##E g4>EFFJ 	SD%$OOO		,	'	'		/	*	*  "MSa  M
 	h
	
*W

	 $&&
!
!&
)
)	* w  788E??YYttD3J7G7G-H-HHIIL"$LmbbmmCQAu  |$$  Y
XXf|+,,,xx8H8H/I/II F 	HHV,,,v/@/@@ I 	
(99X&&
'
'	(
(4==??
#
#	$  E>E)L<((99X+>+>>L		I
(9

	
//

	 (4==??
#
#	$ J 		)xx4111JJz4J4JJ  WT]]WWT]]*FJ&0J>jA>>> 8$$%%&I f|+J 	
	
	 	 		
 	 	 ))D88DMMOO#<#<<===IF"JYHWWX&&''j!!"hrr$xx  ! j$$%	
 	
  x    dZ/0055z9I3J3JJ MM#$$$
MM-   
n---
.)))^,,,^,,, 1222.///o...
-...r-   r   r   list[pydot.core.Dot] | Nonec                   	 t           j                            |           }t          |          S # t          $ rK}t          |j                   t          d|j        dz
  z  dz              t          |           Y d}~dS d}~ww xY w)zParse DOT description in (unicode) string `s`.

    This function is NOT thread-safe due to the internal use of `pyparsing`.
    Use a lock if needed.

    @return: Graphs that result from parsing.
    @rtype: `list` of `pydot.core.Dot`
     r"   ^N)r   r   parse_stringr   r   printlinecolumn)r   tokenserrs      r+   parse_dot_datar    s    #0033F||   chcSZ!^$s*+++c


ttttt	s   -0 
BA B  Br   graphparser)r   r   r   rT   )rg   ri   r   r   )rg   r   r   r   r   r   )r   r   r   r   )r   r   r   r.   )r   r   r   r   )r   r   r   r=   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r.   r   r   ):rR   
__future__r   loggingtypingr   	pyparsingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
pydot.corer\   pydot.classesr   
__author____license__	getLoggerr3   _loggerdebugr   r=   rC   rh   rb   ra   r   r   r   r   r   r   r   r   r   r   r   r  r   r	  __annotations__r;   r-   r+   <module>r     sV  
   # " " " " "                                                  .     $ $ $ $ $ $.
 '
H
%
% 4 5 5 5) ) ) ) ) ) ) )*> > > > >z > > >
 
 
 
 
5 
 
 
>   &; ; ; ;; ; ; ;(                  6 6 6 6   
   (4 4 4 4{ { { { { { { {|   ( )/ / / / / / /r-   