Your IP : 216.73.216.196


Current Path : /opt/alt/python37/lib/python3.7/site-packages/pylint/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib/python3.7/site-packages/pylint/__pycache__/graph.cpython-37.pyc

B

A!p\��@sddZddlmZddlZddlZddlZddlZdd�ZGdd�d�Z	dd�Z
d
d	d
�Zdd�ZdS)z^Graph manipulation utilities.

(dot generation adapted from pypy/translator/tool/make_dot.py)
�NcCs2t�|�}t�t�|��}|�d�d}|||fS)zDTransforms /some/path/foo.png into ('/some/path', 'foo.png', 'png').�.���)�osp�basename�dirname�abspath�split)�filenamer�storedir�target�r�=/opt/alt/python37/lib/python3.7/site-packages/pylint/graph.py�target_info_from_filenames
rc@sLeZdZdZddd�Zdd�Zee�Zdd	d
�Zdd�Z	d
d�Z
dd�ZdS)�
DotBackendzDot File backend.N�utf-8�dotc	Cs�|dkri}||_||_g|_d|_|�dt|��|rH|�d|�|rZ|�d|�|rl|�d|�|r�|��dks�td|��|�d|�x |��D]}|�d�	|��q�WdS)	Nzdigraph %s {z
rankdir=%szratio=%sz	size="%s")zutf-8z
iso-8859-1�latin1zunsupported charset %szcharset="%s"�=)
�	graphname�renderer�lines�_source�emit�normalize_node_id�lower�AssertionError�items�join)	�selfrZrankdir�sizeZratio�charsetrZadditional_param�paramrrr
�__init__ s&

zDotBackend.__init__cCs,|jdkr&|�d�d�|j�|_|`|jS)zreturns self._sourceNz}
�
)rrrr)rrrr
�
get_source?s


zDotBackend.get_sourcec

Cs:ddl}|j}|s.|r&|�d�r&|}nd|}|dk	rvt|�\}}}|dkrht�d|�\}	}
t�|	�q�t�	||�}
n8d}t�d|�\}	}
t�d|�\}}t�|	�t�|�t
j|
dd	d
�}	|	�|j
�|	��|dk�r6tjdk}|�r|j|jdd
|d||
d
|g	|d�n|j|jd||
d
|g|d�t�|
�|S)a)Generates a graph file.

        :param str outputfile: filename and path [defaults to graphname.png]
        :param str dotfile: filename and path [defaults to graphname.dot]
        :param str mapfile: filename and path

        :rtype: str
        :return: a path to the generated file
        rNz.dotz%s.dotrZpngz.png�w�utf8)�encoding�win32z-Tcmapxz-oz-T)�shell)�
subprocessr�endswithr�tempfile�mkstemp�os�closerr�codecs�open�write�source�sys�platform�callr�unlink)
rZ
outputfileZdotfileZmapfiler*�namer
�_rZpdotZdot_sourcepathZppngZ	use_shellrrr
�generateIsN






zDotBackend.generatecCs|j�|�dS)zAdds <line> to final output.N)r�append)r�linerrr
r�szDotBackend.emitc	KsFdd�|��D�}t|�t|�}}|�d||d�t|��f�dS)zwemit an edge from <name1> to <name2>.
        edge properties: see http://www.graphviz.org/doc/info/attrs.html
        cSsg|]\}}d||f�qS)z%s="%s"r)�.0�prop�valuerrr
�
<listcomp>�sz(DotBackend.emit_edge.<locals>.<listcomp>z%s -> %s [%s];z, N)rrrr�sorted)rZname1Zname2�props�attrsZn_fromZn_torrr
�	emit_edge�szDotBackend.emit_edgecKs6dd�|��D�}|�dt|�d�t|��f�dS)ztemit a node with given properties.
        node properties: see http://www.graphviz.org/doc/info/attrs.html
        cSsg|]\}}d||f�qS)z%s="%s"r)r=r>r?rrr
r@�sz(DotBackend.emit_node.<locals>.<listcomp>z%s [%s];z, N)rrrrrA)rr8rBrCrrr
�	emit_node�szDotBackend.emit_node)NNNrrN)NNN)�__name__�
__module__�__qualname__�__doc__r"r$�propertyr3r:rrDrErrrr
rs

<rcCsd|S)z)Returns a suitable DOT node id for `nid`.z"%s"r)�nidrrr
r�srcCs@|sdSg}|dkr|��}x|D]}t|gt�||�q"W|S)z�given a dictionary representing an ordered graph (i.e. key are vertices
    and values is a list of destination vertices representing edges), return a
    list of detected cycles
    rN)�keys�_get_cycles�set)�
graph_dictZvertices�result�verticerrr
�
get_cycles�s
rRc	Cs�||kr||g}x,|ddd�D]}||kr,P|�d|�qWt|�}|�|�}||d�|d|�}||krx|�|�dS|�|�y8x2||D]&}||kr�t|||||�|�|�q�WWntk
r�YnX|��dS)z5recursive function doing the real work for get_cyclesNrr)�insert�min�indexr;rM�add�KeyError�pop)	rO�path�visitedrPrQ�cycle�nodeZ
start_fromrUrrr
rM�s*


rM)N)
rI�os.pathrYrr.r4r,r0rrrrRrMrrrr
�<module>s|