§
    ÷yIfq  ã                  óz  — U d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZ ddlmZ  G d	„ d
e¦  «        Z ed¦  «        Zded<   ej        dej        diZded<   ej        dddœej        dddddœej        dddddœej        dddœej        ddddœiZ ded<    G d„ d e¦  «        Z!dS )!zNClass to generate files in dot format and image formats supported by Graphviz.é    )ÚannotationsN)ÚEnum)ÚPath)Únodes)ÚEdgeTypeÚLayoutÚNodePropertiesÚNodeTypeÚPrinter)Úget_annotation_labelc                  ó   — e Zd ZdZdS )Ú
HTMLLabelsz<br ALIGN="LEFT"/>N)Ú__name__Ú
__module__Ú__qualname__ÚLINEBREAK_LEFT© ó    úP/var/www/piapp/venv/lib/python3.11/site-packages/pylint/pyreverse/dot_printer.pyr   r      s   € € € € € Ø)€N€N€Nr   r   )úutf-8z
iso-8859-1Úlatin1zfrozenset[str]ÚALLOWED_CHARSETSÚboxÚrecordzdict[NodeType, str]ÚSHAPESÚnoneÚempty)Ú	arrowtailÚ	arrowheadÚgreenÚdiamondÚsolid)Ú	fontcolorr   r   ÚstyleÚodiamondÚopenÚdashed)r   r   r$   zdict[EdgeType, dict[str, str]]ÚARROWSc                  ój   ‡ — e Zd ZdZ	 	 d d!ˆ fd	„Zd"d„Z	 d#d$d„Zd%d„Zd&d„Z	 d#d'd„Z	d(d„Z
d"d„Zˆ xZS ))Ú
DotPrinterÚblackNÚtitleÚstrÚlayoutúLayout | NoneÚuse_automatic_namespaceúbool | Nonec                óx   •— |pt           j        }d| _        t          ¦   «                              |||¦  «         d S )Nr   )r   ÚBOTTOM_TO_TOPÚcharsetÚsuperÚ__init__)Úselfr,   r.   r0   Ú	__class__s       €r   r6   zDotPrinter.__init__9   s<   ø€ ð Ð/�6Ô/ˆØˆŒÝ‰Œ×Ò˜ Ð(?Ñ@Ô@Ð@Ð@Ð@r   ÚreturnÚNonec                óF  — |                       d| j        › d�¦  «         | j        r"|                       d| j        j        › �¦  «         | j        rR| j                             ¦   «         t          v sJ d| j        › �¦   «         ‚|                       d| j        › d�¦  «         dS dS )zEmit the header lines.z	digraph "z" {zrankdir=zunsupported charset z	charset="ú"N)Úemitr,   r.   Úvaluer4   Úlowerr   ©r7   s    r   Ú_open_graphzDotPrinter._open_graphC   s»   € à�	Š	Ð.˜dœjÐ.Ð.Ð.Ñ/Ô/Ð/ØŒ;ð 	6Ø�IŠIÐ4 ¤Ô!2Ð4Ð4Ñ5Ô5Ð5ØŒ<ð 	3à”×"Ò"Ñ$Ô$Õ(8Ð8Ð8Ð8Ø4 d¤lÐ4Ð4ñ 9Ô8Ð8à�IŠIÐ1 $¤,Ð1Ð1Ð1Ñ2Ô2Ð2Ð2Ð2ð		3ð 	3r   ÚnameÚtype_r
   Ú
propertiesúNodeProperties | Nonec                ó@  — |€t          |¬¦  «        }t          |         }|j        �|j        n| j        }|| j        k    rdnd}|                      |¦  «        }|rd|› d�nd}|j        rd|j        › d	�nd}	|                      d	|› d
|› d	|	› |› d|› d|› d�¦  «         dS )zVCreate a new node.

        Nodes can be classes, packages, participants etc.
        N)ÚlabelÚfilledr"   z	, label=<ú>Ú z, fontcolor="r<   z
" [color="z	, shape="z
", style="z"];)r	   r   ÚcolorÚDEFAULT_COLORÚ_build_label_for_noder#   r=   )
r7   rB   rC   rD   ÚshaperK   r$   rG   Ú
label_partÚfontcolor_parts
             r   Ú	emit_nodezDotPrinter.emit_nodeN   sú   € ð ÐÝ'¨dÐ3Ñ3Ô3ˆJÝ�u”ˆØ$.Ô$4Ð$@�
Ô Ð ÀdÔFXˆØ! TÔ%7Ò7Ð7��¸WˆØ×*Ò*¨:Ñ6Ô6ˆØ-2Ð:Ð) Ð)Ð)Ð)Ð)¸ˆ
à7AÔ7KÐSÐ3˜JÔ0Ð3Ð3Ð3Ð3ÐQSð 	ð 	�	Š	Øh�ÐhÐh ÐhÐh¨Ðh¸
ÐhÐhÈUÐhÐhÐ^cÐhÐhÐhñ	
ô 	
ð 	
ð 	
ð 	
r   r	   c                ó‚  — |j         sdS |j         }|j        €	|j        €|S |j        pg }t          j        j        ›                      d„ |D ¦   «         ¦  «        }d|› d|› t          j        j        › d�}|j        pg }|D ]»}d                     |                      |¦  «        ¦  «                             dd¦  «        }| 	                    ¦   «         rd|j
        › d�n|j
        › }||› d	|› d
�z  }|j        r/t          |j        ¦  «        }	|d|                      |	¦  «        z   z  }|t          j        j        › z  }Œ¼|dz  }|S )NrJ   c              3  óB   K  — | ]}|                      d d¦  «        V — ŒdS )ú|ú\|N©Úreplace)Ú.0Úattrs     r   ú	<genexpr>z3DotPrinter._build_label_for_node.<locals>.<genexpr>q   sI   è è € ð B
ð B
Ø)-ˆD�LŠL˜˜eÑ$Ô$ðB
ð B
ð B
ð B
ð B
ð B
r   Ú{rT   ú, rU   z<I>z</I>ú(ú)z: Ú})rG   ÚattrsÚmethodsr   r   r>   ÚjoinÚ_get_method_argumentsrW   Úis_abstractrB   Úreturnsr   Ú_escape_annotation_label)
r7   rD   rG   r`   Úattrs_stringra   ÚfuncÚargsÚmethod_nameÚannotation_labels
             r   rM   z DotPrinter._build_label_for_nodef   sš  € ØÔð 	Ø�2àÔ%ˆØÔÐ#¨
Ô(:Ð(BàˆLð &Ô+Ð1¨rˆÝ%Ô4Ô:Ð<×AÒAð B
ð B
Ø16ðB
ñ B
ô B
ñ 
ô 
ˆð O�eÐNÐN˜lÐN­JÔ,EÔ,KÐNÐNÐNˆð ,6Ô+=Ð+CÀˆØð 		;ð 		;ˆDØ—9’9˜T×7Ò7¸Ñ=Ô=Ñ>Ô>×FÒFÀsÈEÑRÔRˆDà)-×)9Ò)9Ñ);Ô);ÐOÐ%�d”iÐ%Ð%Ð%Ð%ÀDÄIÀð ð ˜Ð.Ð. tÐ.Ð.Ð.Ñ.ˆEØŒ|ð PÝ#7¸¼Ñ#EÔ#EÐ Ø˜ × =Ò =Ð>NÑ OÔ OÑOÑO�Ø�Ô2Ô8Ð:Ñ:ˆEˆEØ�‰ˆØˆr   rk   c                ó2   — |                      dd¦  «        }|S )NrT   rU   rV   )r7   rk   s     r   rf   z#DotPrinter._escape_annotation_label…   s    € ð ,×3Ò3°C¸Ñ?Ô?ÐàÐr   Ú	from_nodeÚto_noder   rG   ú
str | Nonec                ó  — t           |         }d„ |                     ¦   «         D ¦   «         }|r|                     d|› d�¦  «         |                      d|› d|› dd                     t          |¦  «        ¦  «        › d�¦  «         dS )	zACreate an edge from one node to another to display relationships.c                ó$   — g | ]\  }}|› d |› d�‘ŒS )z="r<   r   )rX   Úpropr>   s      r   ú
<listcomp>z(DotPrinter.emit_edge.<locals>.<listcomp>•   s-   € ÐKÐKÐK©¨¨u�DÐ$Ð$˜EÐ$Ð$Ð$ÐKÐKÐKr   zlabel="r<   z" -> "z" [r\   z];N)r(   ÚitemsÚappendr=   rb   Úsorted)r7   rm   rn   rC   rG   Ú
arrowstyler`   s          r   Ú	emit_edgezDotPrinter.emit_edgeŒ   s˜   € õ ˜E”]ˆ
ØKÐK¸
×8HÒ8HÑ8JÔ8JÐKÑKÔKˆØð 	-Ø�LŠLÐ+ 5Ð+Ð+Ð+Ñ,Ô,Ð,Ø�	Š	ÐO�iÐOÐO wÐOÐO°4·9²9½VÀE¹]¼]Ñ3KÔ3KÐOÐOÐOÑPÔPÐPÐPÐPr   Ú
outputfilec                óº  — |                       ¦   «          d}| j        }|€[d}t          j        d|¦  «        \  }}t          j        d|¦  «        \  }}t	          j        |¦  «         t	          j        |¦  «         nft          |¦  «        j                             d¦  «        }|s
d}|dz   |z   }||vr-t          j        d|¦  «        \  }}t	          j        |¦  «         n|}t          |dd¬¦  «        5 }| 
                    | j        ¦  «         d d d ¦  «         n# 1 swxY w Y   ||vr2t          j        d	d
||d|gd¬¦  «         t	          j        |¦  «         d S d S )N)ÚdotÚgvÚpngz.gvz.pngú.ÚwÚutf8)Úencodingr{   z-Tz-oT)Úcheck)Ú_close_graphr,   ÚtempfileÚmkstempÚosÚcloser   ÚsuffixÚlstripr&   Ú
writelinesÚlinesÚ
subprocessÚrunÚunlink)	r7   ry   Úgraphviz_extensionsrB   ÚtargetÚpdotÚdot_sourcepathÚppngÚoutfiles	            r   ÚgeneratezDotPrinter.generateš   s»  € Ø×ÒÑÔÐØ+ÐØŒzˆØÐØˆFÝ#+Ô#3°E¸4Ñ#@Ô#@Ñ ˆD�.Ý'Ô/°¸Ñ=Ô=ÑˆD�*ÝŒH�T‰NŒNˆNÝŒH�T‰NŒNˆNˆNå˜*Ñ%Ô%Ô,×3Ò3°CÑ8Ô8ˆFØð 7Ø�Ø'¨#Ñ-°Ñ6�
ØÐ0Ð0Ð0Ý'/Ô'7¸¸tÑ'DÔ'DÑ$��nÝ”˜‘”��à!+�Ý�. #°Ð7Ñ7Ô7ð 	+¸7Ø×Ò˜tœzÑ*Ô*Ð*ð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+àÐ,Ð,Ð,ÝŒNØ˜˜f n°d¸JÐGÈtðñ ô ð õ ŒI�nÑ%Ô%Ð%Ð%Ð%ð	 -Ð,s   Ã3DÄDÄ!Dc                ó0   — |                       d¦  «         dS )z2Emit the lines needed to properly close the graph.z}
N)r=   r@   s    r   rƒ   zDotPrinter._close_graph¶   s   € à�	Š	�%ÑÔÐÐÐr   )NN)r,   r-   r.   r/   r0   r1   )r9   r:   )N)rB   r-   rC   r
   rD   rE   r9   r:   )rD   r	   r9   r-   )rk   r-   r9   r-   )
rm   r-   rn   r-   rC   r   rG   ro   r9   r:   )ry   r-   r9   r:   )r   r   r   rL   r6   rA   rQ   rM   rf   rx   r•   rƒ   Ú__classcell__)r8   s   @r   r*   r*   6   sû   ø€ € € € € Ø€Mð
 !%Ø/3ð	Að Að Að Að Að Að Að	3ð 	3ð 	3ð 	3ð -1ð	
ð 
ð 
ð 
ð 
ð0ð ð ð ð> ð  ð  ð  ð !ðQð Qð Qð Qð Qð&ð &ð &ð &ð8ð ð ð ð ð ð ð r   r*   )"Ú__doc__Ú
__future__r   r†   rŒ   r„   Úenumr   Úpathlibr   Úastroidr   Úpylint.pyreverse.printerr   r   r	   r
   r   Úpylint.pyreverse.utilsr   r   Ú	frozensetr   Ú__annotations__ÚPACKAGEÚCLASSr   ÚINHERITSÚASSOCIATIONÚAGGREGATIONÚUSESÚTYPE_DEPENDENCYr(   r*   r   r   r   ú<module>r¨      sõ  ðð
 UÐ TÐ Tà "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð à XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ 7Ð 7Ð 7Ð 7Ð 7Ð 7ð*ð *ð *ð *ð *�ñ *ô *ð *ð $- 9Ð-NÑ#OÔ#OÐ Ð OÐ OÐ OÑ OàÔ�eØ„N�Hð€ð ð ð ñ ð Ô V¸'ÐBÐBØÔØØØØð	ð ð ÔØØØØð	ð ð „M °fÐ=Ð=ØÔØØØðð ð*€ð ð ð ñ ð.Bð Bð Bð Bð B�ñ Bô Bð Bð Bð Br   