
    yIf                        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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 diagrams.    )annotationsN)defaultdict)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        | j         j	                  | _
        i | _        d S )N )r   r   output_formatprinter_class	file_namemax_color_depthdepth	itertoolscyclecolor_paletteavailable_colorsused_colors)selfr   s     K/var/www/piapp/venv/lib/python3.11/site-packages/pylint/pyreverse/writer.py__init__zDiagramWriter.__init__    s\    5dk6OPP[0
 )0I J J+-    diadefs'Iterable[ClassDiagram | PackageDiagram]c                2   |D ]}|j                                                             dd                              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)r%   r)   diagrambasenamer   s        r&   writezDiagramWriter.write*   s     
	 
	G}**,,44S#>>FFsCPPH#AAdk&?AAIw~~dk:;; RGLL)EyQQ	Y111'>22 ,##G,,,,""7+++IIKKKK
	 
	r(   r=   r   c           
     H   i }t          |                                d           D ]j                                        _        | j        j        r/t          fd|                    d          D                       s[| j	        
                    j        t          j        |                                          ddd|j        <   |                    d          D ]m}|j        j        }|j        j        }| j	                            ||t"          j                   ||         d	xx         d
z  cc<   ||         dxx         d
z  cc<   n|                    d          D ]m}|j        j        }|j        j        }| j	                            ||t"          j                   ||         d	xx         d
z  cc<   ||         dxx         d
z  cc<   nt)          dt+          |           dt-          d |                                D                        d           dS )zWrite a package diagram.c                    | j         S Nr0   xs    r&   <lambda>z.DiagramWriter.write_packages.<locals>.<lambda>=   s    ag r(   keyc              3  8   K   | ]}|j         |j        fv V  d S rB   )from_object	to_object).0relmodules     r&   	<genexpr>z/DiagramWriter.write_packages.<locals>.<genexpr>@   sE       5 5 3?CM::5 5 5 5 5 5r(   dependstype_
propertiesr   )importsimportedrR   rT      rU   type_dependsz	Analysed z modules with a total of c              3  &   K   | ]}|d          V  dS )rT   N )rL   mods     r&   rO   z/DiagramWriter.write_packages.<locals>.<genexpr>n   s&      EEc)nEEEEEEr(   z importsN)sortedmodulesnodeqnamefig_idr   no_standaloneanyget_relationshipsprinter	emit_noder   PACKAGEget_package_propertiesrJ   rK   	emit_edger   USESTYPE_DEPENDENCYprintlensumvalues)r%   r=   module_inforM   from_idto_idrN   s         @r&   r:   zDiagramWriter.write_packages8   s   13 W__..4E4EFFF 	 	F"K--//FM{(  5 5 5 5"44Y??5 5 5 2 2  L""&66v>> #    * *K&& ,,Y77 	0 	0Co,GM(EL""m #     +++q0+++z***a/****,,^<< 	0 	0Co,GM(EL"". #     +++q0+++z***a/****PK(( P PEE0B0B0D0DEEEEEP P P	
 	
 	
 	
 	
r(   r   c                   t          j        d           D ]j                                        _        | j        j        rt          fddD                       sI| j        	                    j        t          j        |                                                              d          D ]=}| j                            |j        j        |j        j        t"          j                   >t'          t(                    }                    d          D ]r}||j        j                                     |j        j                   | j                            |j        j        |j        j        |j        t"          j        	           s                    d
          D ]b}|j        j        ||j        j                 v r!| j                            |j        j        |j        j        |j        t"          j        	           cdS )zWrite a class diagram.c                    | j         S rB   rC   rD   s    r&   rF   z-DiagramWriter.write_classes.<locals>.<lambda>t   s     r(   rG   c              3  h   K   | ],}                     |          D ]}|j        |j        fv V  -d S rB   )rc   rJ   rK   )rL   rel_typerM   r=   objs      r&   rO   z.DiagramWriter.write_classes.<locals>.<genexpr>v   sj       5 5"44X>>5 5  775 5 5 5 5 5 5r(   )specializationassociationaggregationrQ   rw   rV   rx   )labelrR   ry   N)r\   objectsr^   r_   r`   r   ra   rb   rd   re   r   CLASSget_class_propertiesrc   rh   rJ   rK   r   INHERITSr   setaddnameASSOCIATIONAGGREGATION)r%   r=   rM   associationsrv   s    `  @r&   r;   zDiagramWriter.write_classesq   s5    '//@/@AAA 	 	C))CJ{(  5 5 5 5 5 P5 5 5 2 2 
 L""
n44S99 #     ,,-=>> 	 	CL""&$' #    
 -8,<,<,,];; 	 	C/044S]5IJJJL""&$h*	 #     ,,];; 	 	C}#|CO4J'KKKL""&$h*	 #    	 	r(   r   strr>   c                H    |                      |          | _        || _        dS )zSet printer.N)r   rd   r   )r%   r   r>   s      r&   r8   zDiagramWriter.set_printer   s"    ))(33"r(   rv   r   r   c                p    t          |j        | j        j        r|                     |          nd          S )z!Get label and shape for packages.black)rz   color)r   r0   r   	colorizedget_shape_color)r%   rv   s     r&   rg   z$DiagramWriter.get_package_properties   s>    )/3{/DQ$&&s+++'
 
 
 	
r(   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   )rz   attrsmethods	fontcolorr   )
r   r0   r   only_classnamesr   r   r   r^   r   r   )r%   rv   rS   s      r&   r}   z"DiagramWriter.get_class_properties   s    #)#';#>H#))D'+{'BLCKK+CH55Bee7/3{/DQ$&&s+++'
 
 

 r(   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/   rW   )maxsplitr   grey   N)r^   r_   r   is_stdlib_modulesplitr9   r   ClassDefrsplitpackager7   r   r$   nextr#   )r%   rv   qualified_namer   	base_names        r&   r   zDiagramWriter.get_shape_color   s   ))$^%9%9#%9%J%J1%MNN 	6ch// 	@$++C!+<<Q?GGX 	@$GG$++C!+<<Q?GHHW]]3
;;LdjLIJJ	D,,,*.t/D*E*EDY'	**r(   c                D    | j                             | j                   dS )zWrite to disk.N)rd   generater   )r%   s    r&   r<   zDiagramWriter.save   s     dn-----r(   N)r   r   r   r   )r)   r*   r   r   )r=   r   r   r   )r=   r   r   r   )r   r   r>   r   r   r   )rv   r   r   r   )rv   r	   r   r   )rv   r
   r   r   )r   r   )__name__
__module____qualname____doc__r'   r?   r:   r;   r8   rg   r}   r   r<   rZ   r(   r&   r   r      s        22. . . .   7
 7
 7
 7
r+ + + +Z# # # #

 
 
 
	 	 	 	+ + + + . . . . . .r(   r   )r   
__future__r   argparser    r3   collectionsr   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   rZ   r(   r&   <module>r      sF  
 ' & " " " " " "      				 # # # # # # $ $ $ $ $ $ # # # # # # # #              Q P P P P P P P P P P P E E E E E E / / / / / /j. j. j. j. j. j. j. j. j. j.r(   