ó ŸÃÒYc@sèdZddlZddlZddlZddlZddddddd gZdd „Zd „Z d „Z d „Z dddd„Z dddd„Z ejjddƒdddddd„ƒZdddd„Zd„ZdS(s  *************** Graphviz AGraph *************** Interface to pygraphviz AGraph class. Examples -------- >>> G = nx.complete_graph(5) >>> A = nx.nx_agraph.to_agraph(G) >>> H = nx.nx_agraph.from_agraph(A) See Also -------- Pygraphviz: http://pygraphviz.github.io/ iÿÿÿÿNt from_agrapht to_agrapht write_dottread_dottgraphviz_layouttpygraphviz_layouttview_pygraphvizc Csþ|d krl|jƒrB|jƒr3tjƒ}qitjƒ}ql|jƒr]tjƒ}qltjƒ}ntjd|ƒ}d|_ |j d k r¥|j |_ n|j j |j ƒxC|j ƒD]5}d„|jjƒDƒ}|jt|ƒ|qÅWx·|jƒD]©}t|dƒt|dƒ}}t|jƒ}d„|jƒDƒ}|jƒs˜|j d k r‚|j |d>> K5 = nx.complete_graph(5) >>> A = nx.nx_agraph.to_agraph(K5) >>> G = nx.nx_agraph.from_agraph(A) >>> G = nx.nx_agraph.from_agraph(A) Notes ----- The Graph G will have a dictionary G.graph_attr containing the default graphviz attributes for graphs, nodes and edges. Default node attributes will be in the dictionary G.node_attr which is keyed by node. Edge attributes will be returned as edge data in G. With edge_attr=False the edge data will be the Graphviz edge weight attribute or the value 1 if no edge weight attribute is found. itcSs%i|]\}}|t|ƒ“qS((tstr(t.0tktv((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pys ]s icSs%i|]\}}|t|ƒ“qS((R(R R R ((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pys ds tkeytgraphtnodetedgeN(tNonet is_directedt is_stricttnxtDiGrapht MultiDiGraphtGrapht MultiGrapht empty_graphtnameR tupdatet graph_attrtnodestattrtitemstadd_nodeRtedgestdictt is_multigraphtadd_edget node_attrt edge_attr( tAt create_usingtNtntstr_attrtetuR R((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pyR&s:     !  c Csëyddl}Wn tk r2tddƒ‚nX|jƒ}tj|ƒdko^|jƒ }|jd|jd|d|ƒ}|jj |j j d iƒƒ|j j |j j d iƒƒ|j j |j j d iƒƒ|jj |j ƒx0|jd tƒD]\}}|j||qW|jƒr˜x³|jd td tƒD]G\}}} } d„| jƒDƒ} |j||dt| ƒ| qJWnOxL|jd tƒD]8\}}} d„| jƒDƒ} |j||| q«W|S(sÂReturn a pygraphviz graph from a NetworkX graph N. Parameters ---------- N : NetworkX graph A graph created with NetworkX Examples -------- >>> K5 = nx.complete_graph(5) >>> A = nx.nx_agraph.to_agraph(K5) Notes ----- If N has an dict N.graph_attr an attempt will be made first to copy properties attached to the graph (see from_agraph) and then updated with the calling arguments if any. iÿÿÿÿNsrequires pygraphviz shttp://pygraphviz.github.io/iRtstricttdirectedR RRtdatatkeyscSs1i|]'\}}|dkrt|ƒ|“qS(R (R(R R R ((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pys  s R cSs%i|]\}}t|ƒ|“qS((R(R R R ((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pys ¤s (t pygraphvizt ImportErrorRRtnumber_of_selfloopsR"tAGraphRRRR tgetR$R%RtTrueRR RR#R( R(R1R.R-R&R)tnodedataR,R R tedgedatat str_edatat str_edgedata((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pyRts,   "! +&"cCsZyddl}Wn tk r2tddƒ‚nXt|ƒ}|j|ƒ|jƒdS(s¼Write NetworkX graph G to Graphviz dot format on path. Parameters ---------- G : graph A networkx graph path : filename Filename or file handle to write iÿÿÿÿNsrequires pygraphviz shttp://pygraphviz.github.io/(R1R2Rtwritetclear(tGtpathR1R&((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pyRªs      cCsOyddl}Wn tk r2tddƒ‚nX|jd|ƒ}t|ƒS(s—Return a NetworkX graph from a dot file on path. Parameters ---------- path : file or string File name or file handle to read. iÿÿÿÿNsread_dot() requires pygraphviz shttp://pygraphviz.github.io/tfile(R1R2R4R(R>R1R&((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pyR¿s  tneatoRcCst|d|d|d|ƒS(sCreate node positions for G using Graphviz. Parameters ---------- G : NetworkX graph A graph created with NetworkX prog : string Name of Graphviz layout program root : string, optional Root node for twopi layout args : string, optional Extra arguments to Graphviz layout program Returns : dictionary Dictionary of x, y, positions keyed by node. Examples -------- >>> G = nx.petersen_graph() >>> pos = nx.nx_agraph.graphviz_layout(G) >>> pos = nx.nx_agraph.graphviz_layout(G, prog='dot') Notes ----- This is a wrapper for pygraphviz_layout. tprogtroottargs(R(R=RARBRC((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pyRÐsc Csúyddl}Wn tk r2tddƒ‚nX|dk rP|d|7}nt|ƒ}|jd|d|ƒi}x{|D]s}|j||ƒ}y<|jdjd ƒ\} } t| ƒt| ƒf||>> G = nx.petersen_graph() >>> pos = nx.nx_agraph.graphviz_layout(G) >>> pos = nx.nx_agraph.graphviz_layout(G, prog='dot') iÿÿÿÿNsrequires pygraphviz shttp://pygraphviz.github.io/s -Groot=%sRARCtpost,sno position for nodeg(gg( R1R2RRtlayouttNodeRtsplittfloat( R=RARBRCR1R&tnode_posR)Rtxxtyy((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pyRïs&       itwtdotcs’tˆƒstjdƒ‚nddl}dddg}x-|D]%}|ˆjkr@iˆj|RARC(tlenRtNetworkXExceptionR1R RRthasattrR"R R6tget_edgeRRttempfiletNamedTemporaryFiletFalsetdisplay_pygraphvizR(R=R`RARCRdR>R1RZRt edge_attrst node_attrst graph_attrsR\R]R&RaR,R R R/Rtext((R=R`sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pyRsT(               + "   cCs{|dkr8|j}tjj|ƒdjƒd}n|sGd}n|j||||ƒ|jƒtj j |ƒdS(sýInternal function to display a graph in OS dependent manner. Parameters ---------- graph : PyGraphviz graph A PyGraphviz AGraph instance. path : file object An already opened file object that will be closed. format : str, None An attempt is made to guess the output format based on the extension of the filename. If that fails, the value of `format` is used. prog : string Name of Graphviz layout program. args : str Additional arguments to pass to the Graphviz layout program. Notes ----- If this function is called in succession too quickly, sometimes the image is not displayed. So you might consider time.sleep(.5) between calls if you experience problems. iN( RRtosR>tsplitexttlowertdrawtcloseRtutilstdefault_opener(R R>tformatRARCtfilename((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pyRms  #  cCs:ddlm}yddl}Wn|dƒ‚nXdS(Niÿÿÿÿ(tSkipTestspygraphviz not available(tnoseR{R1(tmoduleR{R1((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pyt setup_moduleÄs (t__doc__RrtsysRjtnetworkxRt__all__RRRRRRRRwt open_fileRRmR~(((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/drawing/nx_agraph.pyts(      N 6  - '