Your IP : 216.73.216.213


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.opt-1.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_paramZparamr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)rrrrr@)rr7rArBrrr
�	emit_node�szDotBackend.emit_node)NNNrrN)NNN)�__name__�
__module__�__qualname__�__doc__r!r#�propertyr2r9rrCrDrrrr
rs

<rcCsd|S)z)Returns a suitable DOT node id for `nid`.z"%s"r)Znidr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
rPc	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:rK�add�KeyError�pop)	rM�pathZvisitedrNrO�cycleZnodeZ
start_fromrSrrr
rK�s*


rK)N)
rHZos.pathrWrr-r3r+r/rrrrPrKrrrr
�<module>s|