
    c                        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	m
Z
 ddlmZmZmZmZmZ ddlmZmZmZmZ ddlmZ dd	lmZ  G d
 d          ZdS )z,Utilities for creating VCG and Dot diagrams.    )annotationsN)Iterable)modutilsnodes)ClassDiagramClassEntityDiagramEntityPackageDiagramPackageEntity)EdgeTypeNodePropertiesNodeTypePrinter)get_printer_for_filetype)is_exceptionc                  Z    e Zd ZdZddZdd	ZddZd dZd!dZd"dZ	d#dZ
d$dZd%dZdS )&DiagramWriterz(Base class for writing project diagrams.configargparse.NamespacereturnNonec                    || _         t          | j         j                  | _        |  d| _        | j         j        | _        t          j        g d          | _	        i | _
        d S )N )	aliceblueantiquewhite
aquamarine	burlywood	cadetblue
chartreuse	chocolatecoralcornflowerbluecyandarkgoldenroddarkseagreen
dodgerblueforestgreengoldhotpinkmediumspringgreen)r   r   output_formatprinter_class	file_namemax_color_depthdepth	itertoolscycleavailable_colorsused_colors)selfr   s     7lib/python3.11/site-packages/pylint/pyreverse/writer.py__init__zDiagramWriter.__init__   sj    5dk6OPP[0
 )  !
 !
* ,.    diadefs'Iterable[ClassDiagram | PackageDiagram]c                   |D ]}|j                                                             dd          }| d| j        j         }t
          j                            | j        j                  r*t
          j        	                    | j        j        |          }| 
                    ||           t          |t                    r|                     |           n|                     |           |                                  dS )z1Write files for <project> according to <diadefs>. _.N)titlestripreplacer   r+   ospathexistsoutput_directoryjoinset_printer
isinstancer
   write_packageswrite_classessave)r4   r8   diagrambasenamer-   s        r5   writezDiagramWriter.write<   s     
	 
	G}**,,44S#>>H#AAdk&?AAIw~~dk:;; RGLL)EyQQ	Y111'>22 ,##G,,,,""7+++IIKKKK
	 
	r7   rK   r
   c                   t          |                                d           D ]_}|j                                        |_        | j                            |j        t          j        | 	                    |                     `|
                    d          D ]=}| j                            |j        j        |j        j        t          j                   >dS )zWrite a package diagram.c                    | j         S Nr>   xs    r5   <lambda>z.DiagramWriter.write_packages.<locals>.<lambda>M   s    ag r7   keytype_
propertiesdependsrX   N)sortedmodulesnodeqnamefig_idprinter	emit_noder   PACKAGEget_package_propertiesget_relationships	emit_edgefrom_object	to_objectr   USES)r4   rK   modulerels       r5   rH   zDiagramWriter.write_packagesJ   s     W__..4E4EFFF 	 	F"K--//FML""&66v>> #     ,,Y77 	 	CL""&$m #    	 	r7   r   c                   t          |j        d           D ]x}|j                                        |_        |j        dk    rt          j        nt          j        }| j	        
                    |j        ||                     |                     y|                    d          D ]=}| j	                            |j        j        |j        j        t           j                   >|                    d          D ]=}| j	                            |j        j        |j        j        t           j                   >|                    d          D ]C}| j	                            |j        j        |j        j        |j        t           j        	           D|                    d
          D ]C}| j	                            |j        j        |j        j        |j        t           j        	           DdS )zWrite a class diagram.c                    | j         S rP   rQ   rR   s    r5   rT   z-DiagramWriter.write_classes.<locals>.<lambda>_   s     r7   rU   	interfacerW   specializationr[   
implementsassociation)labelrX   aggregationN)r\   objectsr^   r_   r`   shaper   	INTERFACECLASSra   rb   get_class_propertiesre   rf   rg   rh   r   INHERITS
IMPLEMENTSnameASSOCIATIONAGGREGATION)r4   rK   objrX   rk   s        r5   rI   zDiagramWriter.write_classes\   s    '//@/@AAA 	 	C))CJ*-){*BVH&&EL""
%D4M4Mc4R4R #     ,,-=>> 	 	CL""&$' #     ,,\:: 	 	CL""&$) #     ,,];; 	 	CL""&$h*	 #     ,,];; 	 	CL""&$h*	 #    	 	r7   r-   strrL   c                H    |                      |          | _        || _        dS )zSet printer.N)r,   ra   r-   )r4   r-   rL   s      r5   rF   zDiagramWriter.set_printer   s"    ))(33"r7   r~   r   r   c                p    t          |j        | j        j        r|                     |          nd          S )z!Get label and shape for packages.black)rr   color)r   r>   r   	colorizedget_shape_color)r4   r~   s     r5   rd   z$DiagramWriter.get_package_properties   s>    )/3{/DQ$&&s+++'
 
 
 	
r7   r   c           	         t          |j        | j        j        s|j        nd| j        j        s|j        ndt          |j                  rdnd| j        j        r| 	                    |          nd          }|S )z Get label and shape for classes.Nredr   )rr   attrsmethods	fontcolorr   )
r   r>   r   only_classnamesr   r   r   r^   r   r   )r4   r~   rY   s      r5   rx   z"DiagramWriter.get_class_properties   s    #)#';#>H#))D'+{'BLCKK+CH55Bee7/3{/DQ$&&s+++'
 
 

 r7   r	   c                B   |j                                         }t          j        |                    dd          d                   rdS t          |j         t          j                  r|                    dd          d         }n,|j         j	        r|}n|                    dd          d         }d
                    |                    d| j                  d| j                           }|| j        vrt          | j                  | j        |<   | j        |         S )zGet shape color.r=      )maxsplitr   grey   N)r^   r_   r   is_standard_modulesplitrG   r   ClassDefrsplitpackagerE   r/   r3   nextr2   )r4   r~   qualified_namer   	base_names        r5   r   zDiagramWriter.get_shape_color   s   ))&~';';C!';'L'LQ'OPP 	6ch// 	@$++C!+<<Q?GGX 	@$GG$++C!+<<Q?GHHW]]3
;;LdjLIJJ	D,, 	F*.t/D*E*EDY'	**r7   c                D    | j                             | j                   dS )zWrite to disk.N)ra   generater-   )r4   s    r5   rJ   zDiagramWriter.save   s     dn-----r7   N)r   r   r   r   )r8   r9   r   r   )rK   r
   r   r   )rK   r   r   r   )r-   r   rL   r   r   r   )r~   r   r   r   )r~   r   r   r   )r~   r	   r   r   )r   r   )__name__
__module____qualname____doc__r6   rM   rH   rI   rF   rd   rx   r   rJ    r7   r5   r   r      s        22. . . .:      $& & & &P# # # #

 
 
 
	 	 	 	+ + + + . . . . . .r7   r   )r   
__future__r   argparser0   rA   collections.abcr   astroidr   r   pylint.pyreverse.diagramsr   r   r	   r
   r   pylint.pyreverse.printerr   r   r   r    pylint.pyreverse.printer_factoryr   pylint.pyreverse.utilsr   r   r   r7   r5   <module>r      s4  
 3 2 " " " " " "      				 $ $ $ $ $ $ # # # # # # # #              Q P P P P P P P P P P P E E E E E E / / / / / /Q. Q. Q. Q. Q. Q. Q. Q. Q. Q.r7   