
    Vhp                    Z   d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	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mZ dd
ZddZddZef	 	 	 	 	 	 	 	 	 ddZddZeeef	 	 	 	 	 	 	 	 	 ddZej<                  d    ej<                  dd ej>                  ee f	 	 	 	 	 	 	 	 	 	 	 ddZ!y)    )annotationsNwraps)CallableIterator   )	AutomatonInputOutputState)findMachines)MethodicalMachine)TypeMachineInputProtocolCorec                D    dj                  | j                  dd            S )Nz"{}""z\")formatreplacess    B/home/dcms/DCMS/lib/python3.12/site-packages/automat/_visualize.py_gvquoter      s    ==3.//    c                $    dj                  |       S )Nz<{}>)r   r   s    r   _gvhtmlr      s    ==r   c                    dj                  d t        |j                               D              }dj                  |      }dj                  | ||      S )z?
    Construct a string from the HTML element description.
     c           	   3  j   K   | ]+  \  }}d j                  |t        t        |                   - yw)z{}={}N)r   r   str).0keyvalues      r   	<genexpr>zelementMaker.<locals>.<genexpr>   s0      C 	sHSZ01s   13 z#<{name} {attrs}>{children}</{name}>)nameattrschildren)joinsorteditemsr   )r&   r(   r'   formattedAttrsformattedChildrens        r   elementMakerr.      s[     XX  / N )0772C 8  r   c                   i }|rt        t        |            |d<    |d |d| d      fd|d|}dd	i}|D cg c]  } |d |d|fi |d
       }} |d|      g}	|r|	j                   |dg|         |dg|	 S c c}w )z>
    Construct an HTML table to label a state transition.
    colspantdfontzmenlo-italic)facepurple)colorportz
point-size9pink)r5   trtable)r    lenappend)

inputLabeloutputLabelsr6   _Er0   inputLabelCell	pointSizeoutputLabeloutputLabelCellsrowss
             r   
tableMakerrE   &   s     G \!23	
6:N3 	
 N s#I ( 	4FK595VD 
 t^$%DBt/./0gs   Bc                0     t               d fd       }|S )Nc                T     |       j                  dd      j                  dd      S )N<z&lt;>z&gt;)r   )txs    r   implzescapify.<locals>.implJ   s%    t||C(00f==r   )rJ   r   returnr    r   )rK   rL   s   ` r   escapifyrN   I   s     
1X> > Kr   c           
        t        |      }t        |      }t        |      }t        j                  dddddiddi      }| j                         D ]5  }|| j                  u rd}d}nd	}d}|j                   ||      |d
|d       7 t        | j                               D ]  \  }}	|	\  }
}}}dj                  |      } ||      }d}t        ||D cg c]
  } ||       c}|      }|j                  |t        |      dd       |j                   ||
      dj                  ||      d       |j                  dj                  ||       ||              |S c c}w )zA
    Produce a L{graphviz.Digraph} object from an automaton.
    true100)packdpifontnameMenlo)
graph_attr	node_attr	edge_attrboldz
Menlo-Boldr%   ellipseblue)fontameshapestyler5   zt{}	tableport)r6   z0.2none)labelmarginr]   z{}:{}:w)	arrowheadz{}:{}:e)rN   graphvizDigraphstatesinitialStatenode	enumerateallTransitionsr   rE   r   edge)	automatoninputAsStringoutputAsStringstateAsStringdigraphstate
stateShapefontNameneachTransitioninStateinputSymboloutStateoutputSymbolsthisTransitionr=   r6   outputSymbolr:   s                      r   makeDigraphr|   Q   s    ]+Mn-N]+M"51w'w'G !!# 
I***J#HJH%  	 	

 'y'?'?'AB V>8F5ha";/
>KLl^L)L
 	^75>%vV'"^T2 	 	

 	Y%%nd;]8=TU'V* N Ms   E c                   d}d}|d   r|j                  dd       t        j                  | ||      }|j                  dd       |j                  d	d
ddd       |j                  dddd       |j                  dddd       |j                  dddt        j
                  d       |j                  ddddd       |j                  |      }|j                  xr( |j                   xs |j                  |j                  k7  }	|j                  rd } ||j                        D ]  \  }
} ||
d        |j                         }|	r@|j                  d!j                  |
      |j                  "        ||
d#|j                         |j                  sn|j                   xs |	}|j                  |_        |j                  d!j                  |
      |j                  |j                   |$       |rd%}nd&} ||
||j                          y')(z/
    Entry point for command line utility.
    zB
    Visualize automat.MethodicalMachines as graphviz graphs.
    zz
    You must have the graphviz tool suite installed.  Please visit
    http://www.graphviz.org for more information.
    r   r%   )progdescriptionepilogfqpnz@A Fully Qualified Path name representing where to find machines.)helpz--quietz-qzsuppress outputF
store_true)r   defaultactionz--dot-directoryz-dzWhere to write out .dot files.z.automat_visualize)r   r   z--image-directoryz-izWhere to write out image files.z--image-typez-tzThe image format.png)r   choicesr   z--viewz-vz.View rendered graphs with default image viewerc                      y )N )argss    r   _printztool.<locals>._print   s    r   z...discoveredz{}.dot)filename	directoryz...wrote dot into)r   r   viewcleanupz...wrote image intoz...wrote image and dot intoN)insertargparseArgumentParseradd_argumentrd   FORMATS
parse_argsdot_directoryimage_directoryquietr   	asDigraphsaver   
image_typerenderr   )	_progname_argv_syspath_findMachinesr   DESCRIPTIONEPILOGargumentParserr   explicitlySaveDotr   machinerp   	deleteDotmsgs                  r   toolr      sC   KF {2,,KN R    4/|    -$	    .$	           @    $$U+D**    ND$8$8D<N<N$N  zz	 'tyy1 4gt_%##%LL(//$"74CUCULV4,d.@.@A ...C2CI!__GNNN!...YY!	   +34d223-4r   )r   r    rM   r    )r&   r    r(   r    r'   r    rM   r    )
r=   r    r>   	list[str]r6   r    r?   zCallable[..., str]rM   r    )rK   Callable[[State], str]rM   r   )
rl   zAutomaton[State, Input, Output]rm   zCallable[[Input], str]rn   zCallable[[Output], str]ro   r   rM   zgraphviz.Digraph)r   r    r   r   r   r   r   z[Callable[[str], Iterator[tuple[str, MethodicalMachine | TypeMachine[InputProtocol, Core]]]]r   zCallable[..., None]rM   None)"
__future__r   r   sys	functoolsr   typingr   r   rd   _corer	   r
   r   r   	_discoverr   _methodicalr   _typedr   r   r   r   r   r.   rE   rN   reprr|   argvpathprintr   r   r   r   <module>r      s"   "  
  %  2 2 # * 4 40$ *	      		 
 	 F -1.2,0	7.7)7 ,7 *	7
 7v XXa[xx|(( 	"'[4[4[4 [4	[4  [4 
[4r   