ó ŸÃÒYc @s©ddlmZmZddlZddlZddlmZmZddl m Z ddgZ e ddddd d d d d d ƒZ dd„Zeedd„ZdS(iÿÿÿÿ(tchaintcountN(tmake_strtto_tuple(tNamedTemporaryFiletnode_link_datatnode_link_graphtsourcettargettnametidtkeytlinktlinksc sã|jƒ}ˆdkr!t‰n#ˆj‡fd†tjƒDƒƒˆd}ˆd}ˆd}ˆd}|sxdnˆd}t|||hƒdkr¯tjdƒ‚ni|jƒd 6|d 6|j d 6g|D]1}t t |j |jƒ||fgƒƒ^q×d 6} |r†g|j d tdtƒD]H\} } } } t t | jƒ|| f|| f|| fgƒƒ^q1| |>> from networkx.readwrite import json_graph >>> G = nx.Graph([('A', 'B')]) >>> data1 = json_graph.node_link_data(G) >>> H = nx.gn_graph(2) >>> data2 = json_graph.node_link_data(H, {'link': 'edges', 'source': 'from', 'target': 'to'}) To serialize with json >>> import json >>> s1 = json.dumps(data1) >>> s2 = json.dumps(data2, default={'link': 'edges', 'source': 'from', 'target': 'to'}) Notes ----- Graph, node, and link attributes are stored in this format. Note that attribute keys will be converted to strings in order to comply with JSON. Attribute 'key' is only used for multigraphs. See Also -------- node_link_graph, adjacency_data, tree_data cs+i|]!\}}|ˆkr||“qS(((t.0tktv(tattrs(s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/readwrite/json_graph/node_link.pys Rs R RRR R isAttribute names are not unique.tdirectedt multigraphtgraphtnodestkeystdataN(t is_multigraphtNonet_attrstupdatetitemstlentnxt NetworkXErrort is_directedRtdictRRtedgestTrue(tGRRR RRR R tnRtuRRtd((Rs}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/readwrite/json_graph/node_link.pyRs&7   #    !BkVcsWˆdkrt‰n#ˆj‡fd†tjƒDƒƒ|jd|ƒ}|jd|ƒ}|rqtjƒ}n tjƒ}|r’|jƒ}nˆd‰ˆd‰ˆd‰ˆd}|sÆdnˆd‰|jd iƒ|_ t ƒ}xb|d D]V}t |jˆt |ƒƒƒ}t ‡fd †|jƒDƒƒ} |j|| qùWxý||D]ñ}t|ˆtƒr‡t|ˆƒn|ˆ} t|ˆtƒr´t|ˆƒn|ˆ} |sÿt ‡‡fd †|jƒDƒƒ} |j| | | q^|jˆdƒ} t ‡‡‡fd †|jƒDƒƒ} |j| | | | q^W|S(sHReturn graph from node-link data format. Parameters ---------- data : dict node-link formatted graph data directed : bool If True, and direction not specified in data, return a directed graph. multigraph : bool If True, and multigraph not specified in data, return a multigraph. attrs : dict A dictionary that contains five keys 'source', 'target', 'name', 'key' and 'link'. The corresponding values provide the attribute names for storing NetworkX-internal graph data. Default value: dict(source='source', target='target', name='id', key='key', link='links') Returns ------- G : NetworkX graph A NetworkX graph object Examples -------- >>> from networkx.readwrite import json_graph >>> G = nx.Graph([('A', 'B')]) >>> data = json_graph.node_link_data(G) >>> H = json_graph.node_link_graph(data) Notes ----- Attribute 'key' is only used for multigraphs. See Also -------- node_link_data, adjacency_data, tree_data cs+i|]!\}}|ˆkr||“qS(((RRR(R(s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/readwrite/json_graph/node_link.pys ˜s RRR RRR R RRc3s3|])\}}|ˆkrt|ƒ|fVqdS(N(R(RRR(R (s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/readwrite/json_graph/node_link.pys «sc3s?|]5\}}|ˆkr|ˆkrt|ƒ|fVqdS(N(R(RRR(RR(s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/readwrite/json_graph/node_link.pys ±s c3sK|]A\}}|ˆkr|ˆkr|ˆkrt|ƒ|fVqdS(N(R(RRR(R RR(s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/readwrite/json_graph/node_link.pys ¶s N(RRRRtgetRt MultiGraphtGrapht to_directedRRRtnextR!tadd_nodet isinstancetlistttupletadd_edge(RRRRRR tcR'tnodetnodedatatsrcttgttedgedatatky((RR R RRs}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/readwrite/json_graph/node_link.pyRjs>+  #      "--%((t itertoolsRRtjsontnetworkxRtnetworkx.utilsRRttempfileRt__all__R!RRRtFalseR#R(((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/readwrite/json_graph/node_link.pyt s    T