
    g8'                    V   U d dl mZ d dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZ d dlZd dlmZmZ d dlmZmZmZ d	d
lmZ erd	dlmZ dZdZ	 ed   Z	 ddedddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ ddZ!	 	 	 	 	 	 ddZ"	 	 	 	 	 	 	 	 ddZ# G d ded      Z$dZ%de&d<   y)     )annotationsN)IterableSequence)Path)indent)TYPE_CHECKING	AnnotatedAnyLiteral)GeLe)	TypeAlias	TypedDictUnpack   )BaseNode)Graph)	NodeIdentDEFAULT_HIGHLIGHT_CSSgenerate_codeMermaidConfigrequest_image
save_imageStateDiagramDirectionzfill:#fdff32)TBLRRLBTT)
start_nodehighlighted_nodeshighlight_csstitleedge_labelsnotesc                 t        t        |xs d            }|D ]  }	|	| j                  vst        d|	 d       g }
|rdd| dg}
|
j	                  d       ||
j	                  d|        | j                  j                         D ]e  \  }	}|	|v r|
j	                  d|	        |j                  r)| j                  D ]  }|
j	                  d	|	 d
|         n[|j                  j                         D ]>  \  }}d	|	 d
| }|r|j                  r|d|j                   z  }|
j	                  |       @ |j                  x}r7d	|	 d}|r|j                  r|d|j                   z  }|
j	                  |       |s|j                  s|
j	                  d|	        t        j                  dd|j                        }|
j	                  t        |d             |
j	                  d       h |rg|
j	                  d       |
j	                  d|        t        |      D ]4  }	|	| j                  vrt        d|	 d      |
j	                  d|	 d       6 dj                  |
      S )ad  Generate [Mermaid state diagram](https://mermaid.js.org/syntax/stateDiagram.html) code for a graph.

    Args:
        graph: The graph to generate the image for.
        start_node: Identifiers of nodes that start the graph.
        highlighted_nodes: Identifiers of nodes to highlight.
        highlight_css: CSS to use for highlighting nodes.
        title: The title of the diagram.
        edge_labels: Whether to include edge labels in the diagram.
        notes: Whether to include notes in the diagram.
        direction: The direction of flow.


    Returns:
        The Mermaid code for the graph.
     zStart node "z" is not in the graph.z---ztitle: zstateDiagram-v2z  direction z
  [*] --> z  z --> z: z --> [*]z  note right of z
{2,}
z    z
  end note zclassDef highlighted zHighlighted node "zclass z highlighted)set	_node_ids	node_defsLookupErrorappenditemsreturns_base_nodenext_node_edgeslabelend_edgenoteresubr   join)graphr   r    r!   r"   r#   r$   	directionstart_node_idsnode_idlinesnode_defnext_node_idedgeliner2   
clean_docss                    K/var/www/openai/venv/lib/python3.12/site-packages/pydantic_graph/mermaid.pyr   r   )   se   8 :#345N!%//)WI5KLMM " E'%)51	LL"#|I;/0"__224n$LL:gY/0%% %r'%~>? !0 '/&>&>&D&D&F"dG9E,84::b--DT"	 'G
  (((8(y)Dx~~"X^^,--LLX]]LL+G956$>JLL
F34LL&1 54 R,]O<= !23Geoo-!$6wi?U"VWWLL6',78 4
 99U    c              #     K   t        | t              r| f}nt        | t              r| }n| f}|D ])  }t        |t              r| |j                          + yw)z5Get the node IDs from a sequence of node identifiers.N)
isinstancestrr   get_id)node_idents	node_iternodes      rA   r*   r*   u   sR     +s# N		K	*	 N	dC J++-	 s   AAc                  t        | |j                  d      |j                  d      |j                  dt              |j                  d      |j                  dd      |j                  dd      |j                  d      	      }t        j                  |j                               j                         }i }|j                  d
      dk(  rJd| }|j                  d      rd|d<   |j                  d      rd|d<   |j                  d      x}r=||d<   n7|j                  d
      dk(  rd| }nd| }|j                  d
      x}r||d<   |j                  d      x}r||d<   |j                  d      x}	r|	|d<   |j                  d      x}
r|
|d<   |j                  d      x}r||d<   |j                  d      x}r||d<   |j                  d      xs t        j                         }|j                  ||      }|j                  s;t        j                  |j                   d |j                   |j                  |!      |j                  S )"a	  Generate an image of a Mermaid diagram using [mermaid.ink](https://mermaid.ink).

    Args:
        graph: The graph to generate the image for.
        **kwargs: Additional parameters to configure mermaid chart generation.

    Returns:
        The image data.
    r   r    r!   r"   r#   Tr$   r8   )r   r    r!   r"   r#   r$   r8   
image_typepdfzhttps://mermaid.ink/pdf/pdf_fitr(   fitpdf_landscape	landscape	pdf_paperpapersvgzhttps://mermaid.ink/svg/zhttps://mermaid.ink/img/typebackground_colorbgColorthemewidthheightscalehttpx_client)paramsz error generating image:
)requestresponse)r   getr   base64	b64encodeencodedecodehttpxClient
is_successHTTPStatusErrorstatus_codetextr]   content)r7   kwargscodecode_base64r\   urlrQ   rK   rU   rW   rX   rY   rZ   r[   r^   s                  rA   r   r      sQ    ::l+ **%89jj2GHjj!JJ}d3jj$'**[)	D ""4;;=188:K%'Fzz,5((6::i F5M::o&"$F;

;//9/'F7O	L	!U	*(6(6L11:1'F6N!::&8999,y

7##u#w

7##u#wH%%v%!x

7##u#w::n-?LF3H####$$>x}}oN$$
 	

 rB   c                   t        | t              rt        |       } d|vr&| j                  j	                         dd }|dv r||d<   t        |fi |}| j                  |       y)a,  Generate an image of a Mermaid diagram using [mermaid.ink](https://mermaid.ink) and save it to a local file.

    Args:
        path: The path to save the image to.
        graph: The graph to generate the image for.
        **kwargs: Additional parameters to configure mermaid chart generation.
    rK   r   N)pngwebprS   rL   )rD   rE   r   suffixlowerr   write_bytes)pathr7   rk   ext
image_datas        rA   r   r      sh     $Dz6!kk!!"%//#&F< u//JZ rB   c                      e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 d	ed
<   	 d	ed<   	 ded<   	 d	ed<   	 d	ed<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   y)r   z1Parameters to configure mermaid chart generation.Sequence[NodeIdent] | NodeIdentr   r    rE   r!   
str | Noner"   boolr#   r$   z,Literal['jpeg', 'png', 'webp', 'svg', 'pdf']rK   rM   rO   zYLiteral['letter', 'legal', 'tabloid', 'ledger', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6']rQ   rU   z/Literal['default', 'neutral', 'dark', 'forest']rW   intrX   rY   zAnnotated[float, Ge(1), Le(3)]rZ   zhttpx.Clientr[   r   r8   N)__name__
__module____qualname____doc____annotations__r&   rB   rA   r   r      s    ;//466,,#8KM<<WMR ihA ;::J#K$)) K$$-rB   r   F)totalz=type[BaseNode[Any, Any, Any]] | BaseNode[Any, Any, Any] | strr   r   )r7   Graph[Any, Any, Any]r   &Sequence[NodeIdent] | NodeIdent | Noner    r   r!   rE   r"   rz   r#   r{   r$   r{   r8   zStateDiagramDirection | NonereturnrE   )rG   ry   r   zIterable[str])r7   r   rk   Unpack[MermaidConfig]r   bytes)ru   z
Path | strr7   r   rk   r   r   None)'
__future__r   _annotationsr`   r4   collections.abcr   r   pathlibr   textwrapr   typingr   r	   r
   r   rd   annotated_typesr   r   typing_extensionsr   r   r   nodesr   r7   r   __all__r   r   r   r*   r   r   r   r   r   r&   rB   rA   <module>r      sB   2  	 .   9 9  " : :  '  4 67  :>@D.II 7	I
 >I I I I I ,I 	IX  >> $> 	>B!
!! $	!
 
!4/.IU /.d W	9 VrB   