
    \Mh֚                     >   d Z ddlZddlZddlmZmZmZmZmZ ddl	Z
ddlmZ g dZ edd          dd            ZddZ edd           e
j        dd
          dd                        Z G d d          Z G d de          Z G d de          Zd ZdS )aS  Read and write graphs in GEXF format.

.. warning::
    This parser uses the standard xml library present in Python, which is
    insecure - see :external+python:mod:`xml` for additional information.
    Only parse GEFX files you trust.

GEXF (Graph Exchange XML Format) is a language for describing complex
network structures, their associated data and dynamics.

This implementation does not support mixed graphs (directed and
undirected edges together).

Format
------
GEXF is an XML format.  See http://gexf.net/schema.html for the
specification and http://gexf.net/basic.html for examples.
    N)ElementElementTree
SubElementregister_namespacetostring)	open_file)
write_gexf	read_gexfrelabel_gexf_graphgenerate_gexf   wb)modeutf-8T1.2draftc                 ~    t          |||          }|                    |            |                    |           dS )a4  Write G in GEXF format to path.

    "GEXF (Graph Exchange XML Format) is a language for describing
    complex networks structures, their associated data and dynamics" [1]_.

    Node attributes are checked according to the version of the GEXF
    schemas used for parameters which are not user defined,
    e.g. visualization 'viz' [2]_. See example for usage.

    Parameters
    ----------
    G : graph
       A NetworkX graph
    path : file or string
       File or file name to write.
       File names ending in .gz or .bz2 will be compressed.
    encoding : string (optional, default: 'utf-8')
       Encoding for text data.
    prettyprint : bool (optional, default: True)
       If True use line breaks and indenting in output XML.
    version: string (optional, default: '1.2draft')
       The version of GEXF to be used for nodes attributes checking

    Examples
    --------
    >>> G = nx.path_graph(4)
    >>> nx.write_gexf(G, "test.gexf")

    # visualization data
    >>> G.nodes[0]["viz"] = {"size": 54}
    >>> G.nodes[0]["viz"]["position"] = {"x": 0, "y": 1}
    >>> G.nodes[0]["viz"]["color"] = {"r": 0, "g": 0, "b": 256}


    Notes
    -----
    This implementation does not support mixed graphs (directed and undirected
    edges together).

    The node id attribute is set to be the string of the node label.
    If you want to specify an id use set it as node data, e.g.
    node['a']['id']=1 to set the id of node 'a' to 1.

    References
    ----------
    .. [1] GEXF File Format, http://gexf.net/
    .. [2] GEXF schema, http://gexf.net/schema.html
    encodingprettyprintversionN)
GEXFWriter	add_graphwrite)Gpathr   r   r   writers         W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/networkx/readwrite/gexf.pyr	   r	   $   sE    d {GTTTF
Q
LL    c              #      K   t          |||          }|                    |            t          |                                          E d{V  dS )a  Generate lines of GEXF format representation of G.

    "GEXF (Graph Exchange XML Format) is a language for describing
    complex networks structures, their associated data and dynamics" [1]_.

    Parameters
    ----------
    G : graph
    A NetworkX graph
    encoding : string (optional, default: 'utf-8')
    Encoding for text data.
    prettyprint : bool (optional, default: True)
    If True use line breaks and indenting in output XML.
    version : string (default: 1.2draft)
    Version of GEFX File Format (see http://gexf.net/schema.html)
    Supported values: "1.1draft", "1.2draft"


    Examples
    --------
    >>> G = nx.path_graph(4)
    >>> linefeed = chr(10)  # linefeed=

    >>> s = linefeed.join(nx.generate_gexf(G))
    >>> for line in nx.generate_gexf(G):  # doctest: +SKIP
    ...     print(line)

    Notes
    -----
    This implementation does not support mixed graphs (directed and undirected
    edges together).

    The node id attribute is set to be the string of the node label.
    If you want to specify an id use set it as node data, e.g.
    node['a']['id']=1 to set the id of node 'a' to 1.

    References
    ----------
    .. [1] GEXF File Format, https://gephi.org/gexf/format/
    r   N)r   r   str
splitlines)r   r   r   r   r   s        r   r   r   [   sa      P {GTTTF
Q6{{%%'''''''''''r   rb)graphsreturns_graphFc                 t    t          ||          }|rt           ||                     }n ||           }|S )a|  Read graph in GEXF format from path.

    "GEXF (Graph Exchange XML Format) is a language for describing
    complex networks structures, their associated data and dynamics" [1]_.

    Parameters
    ----------
    path : file or string
       Filename or file handle to read.
       Filenames ending in .gz or .bz2 will be decompressed.
    node_type: Python type (default: None)
       Convert node ids to this type if not None.
    relabel : bool (default: False)
       If True relabel the nodes to use the GEXF node "label" attribute
       instead of the node "id" attribute as the NetworkX node label.
    version : string (default: 1.2draft)
    Version of GEFX File Format (see http://gexf.net/schema.html)
       Supported values: "1.1draft", "1.2draft"

    Returns
    -------
    graph: NetworkX graph
        If no parallel edges are found a Graph or DiGraph is returned.
        Otherwise a MultiGraph or MultiDiGraph is returned.

    Notes
    -----
    This implementation does not support mixed graphs (directed and undirected
    edges together).

    References
    ----------
    .. [1] GEXF File Format, http://gexf.net/
    )	node_typer   )
GEXFReaderr   )r   r&   relabelr   readerr   s         r   r
   r
      sH    J )W===F vvd||,,F4LLHr   c            	           e Zd Zdddd                    ddg          dddd	dd                    dd
g          dddZd ZdddddddddZd ZdS )GEXFzhttp://www.gexf.net/1.1draftz http://www.gexf.net/1.1draft/vizz)http://www.w3.org/2001/XMLSchema-instance z%http://www.gexf.net/1.1draft/gexf.xsd1.1)NS_GEXFNS_VIZNS_XSISCHEMALOCATIONVERSIONzhttp://www.gexf.net/1.2draftz http://www.gexf.net/1.2draft/vizz%http://www.gexf.net/1.2draft/gexf.xsdz1.2)z1.1draftr   c                 4   t           dft          dft          dft          dft          dft          dft           dft
          dft
          dft
          dfg
}	 d	d l}|j        df|j        df|j	        df|j
        d
f|j        d
f|j        d
f|j        d
f|j        d
f|j        d
f|j        d
f|j        d
f|j        d
f|j
        d
f|j        d
f|j        d
fg|z   }n# t*          $ r Y nw xY wt	          |          | _        t	          d |D                       | _        d S )Nintegerfloatdoublebooleanstringlong
liststringanyURIr   intc              3   4   K   | ]}t          |          V  d S N)reversed).0as     r   	<genexpr>z'GEXF.construct_types.<locals>.<genexpr>   s(      ;;;;;;;;r   )r<   r5   boollistdictr    numpyfloat64float32float16int_int8int16int32int64uint8uint16uint32uint64intcintpImportErrorxml_typepython_type)selftypesnps      r   construct_typeszGEXF.construct_types   sh   )GH988&M,(O(O
	 W%W%W%% % 5!5!5!5!E"E"E"% % %   !EE	  	 	 	D	, U;;U;;;;;s   C 
C#"C#TF)truefalseTrueFalse0r   1r   c                     | j                             |          }|t          j        d| d          |d         | _        |d         | _        |d         | _        |d         | _        |d         | _        || _	        d S )NzUnknown GEXF version .r.   r/   r0   r1   r2   )
versionsgetnxNetworkXErrorr.   r/   r0   r1   r2   r   )rX   r   ds      r   set_versionzGEXF.set_version  s~    Mg&&9"#E7#E#E#EFFF|kk 01|r   N)__name__
__module____qualname__joinrd   r[   convert_boolri    r   r   r+   r+      s         68A!hh2;  
 
 68A!hh2;  
 
 H6(< (< (<X 	 	L	 	 	 	 	r   r+   c                   h    e Zd Z	 ddZd Zd Zd Zd	 Zd
 Zd Z	d Z
d Zd Zd Zd Zd ZddZdS )r   Nr   Tr   c                 R   |                                   || _        || _        |                     |           t	          d| j        | j        | j        | j        d          | _	        t	          d          }dt          j         }|t          |d          _        |                    dt          j        d                     | j	                            |           t%          d| j                   t)          j                    | _        t)          j                    | _        t                      | _        i | _        i | j        d	<   i | j        d
<   i | j        d	         d<   i | j        d	         d<   i | j        d
         d<   i | j        d
         d<   ||                     |           d S d S )Ngexf)xmlnsz	xmlns:xsizxsi:schemaLocationr   metaz	NetworkX creatorlastmodifieddatez%Y-%m-%dviznodeedgedynamicstatic)r[   r   r   ri   r   r.   r0   r1   r2   xmlrf   __version__r   textsettimestrftimeappendr   r/   	itertoolscountedge_idattr_idall_edge_idsattrr   )rX   graphr   r   r   meta_elementsubelement_texts          r   __init__zGEXFWriter.__init__  s    	& !!!![&*&9<	 
 
 v6bn663B
<++0+T]:-F-FGGG%%%5$+... !(( ((EE		&	&')	&)$&(	&(#')	&)$&(	&(#NN5!!!!! r   c                     | j         r|                     | j                   t          | j                                      | j                  }|S r>   )r   indentr|   r   decoder   )rX   ss     r   __str__zGEXFWriter.__str__A  sE     	"KK!!!TX%%dm44r   c                 *   |                     d          D ]D\  }}}|                    d          }|'| j                            t	          |                     E|j                            d          dk    rd}nd}|                                rd}nd}|j                            d	d
          }t          d|||          }	|	| _        | 	                    ||	           | 
                    ||	           | j                            |	           d S )NTdataidr   rz   r{   directed
undirectedname r   )defaultedgetyper   r   )edgesre   r   addr    r   is_directedr   graph_element	add_nodes	add_edgesr|   r   )
rX   r   uvddeidr   defaultr   r   s
             r   r   zGEXFWriter.add_graphG  s   T** 	0 	0HAq"&&,,C!%%c#hh///7;;v)++DDD==?? 	# GG"Gw{{62&&tRVWWW*q-(((q-(((&&&&&r   c                 j   t          d          }|                    d          D ]\  }}|                                }t          |                    d|                    }d|i}t          |                    d|                    }	|	|d<   	 |                    d          }
t          |
          |d<   n# t
          $ r Y nw xY w	 |                    d          }t          |          |d<   |                     |           n# t
          $ r Y nw xY w	 |                    d          }t          |          |d<   |                     |           n# t
          $ r Y nw xY wt          di |}|j                            d
i           }| 	                    ||          }| j
        dk    r|                     ||          }n|                     ||          }|                     ||          }|                     d	|||          }|                    |           |                    |           d S )NnodesTr   r   labelpidstartendrx   node_defaultr-   )rx   )r   r   copyr    popKeyErroralter_graph_mode_timeformatr   re   add_parentsr2   
add_slices
add_spellsadd_vizadd_attributesr   )rX   r   r   nodes_elementrx   r   	node_datanode_idkwr   r   r   r   node_elementr   s                  r   r   zGEXFWriter.add_nodes^  sU   ((''t',, "	/ "	/JD$		I)--d3344GB	gt4455EBwKmmE**HH5		   !g..!%jj7007777   mmE**HH5	005555    #00R00Lgkk."55G((yAAI|u$$ OOL)DD		 OOL)DD	\9==I++FL)WUUI  ....]+++++s6   'B88
CC	<D
DD<E
E! E!c                 6     fd}t          d          } ||          D ]a\  }}}}dt          |          i}		 |                    d          }
t          |
          |	d<   n# t          $ r Y nw xY w	 |                    d          }t          |          |	d<   n# t          $ r Y nw xY w	 |                    d          }t          |          |	d<   n# t          $ r Y nw xY w	 |                    d          }t          |          |	d<                        |           n# t          $ r Y nw xY w	 |                    d          }t          |          |	d<                        |           n# t          $ r Y nw xY wt          |j        |                             d|                    }t          |j        |                             d|                    }t          d||d
|	}|j                            di           } j        dk    r 	                    ||          }n 
                    ||          }                     ||          }                     d	|||          }|                    |           c|                    |           d S )Nc              3     K   |                                  r|                     dd          D ]\  }}}}|                                }|                    |           |                    dd           }|{t          j                  }t          |          j        v r*t          j                  }t          |          j        v *j        	                    t          |                     ||||fV  d S |                     d          D ]\  }}}|                                }|                    dd           }|{t          j                  }t          |          j        v r*t          j                  }t          |          j        v *j        	                    t          |                     ||||fV  d S )NT)r   keys)keyr   r   )
is_multigraphr   r   updater   nextr   r    r   r   )r   r   r   r   r   	edge_datar   rX   s          r   edge_key_dataz+GEXFWriter.add_edges.<locals>.edge_key_data  s        3'(wwDtw'D'D 	3 	3OAq#t $		I$$$---'mmD$77G"&t|"4"4!'lld.???&*4<&8&8G "'lld.???)--c'll;;;Q22222	3 	3 #$''t'"4"4 3 3JAq$ $		I'mmD$77G"&t|"4"4!'lld.???&*4<&8&8G "'lld.???)--c'll;;;Q222223 3r   r   r   r   weighttyper   r   ry   )sourcetargetedge_defaultr-   )ry   )r   r    r   r   r   r   re   r   r2   r   r   r   r   r   )rX   r   r   r   edges_elementr   r   r   r   r   
edge_labeledge_weight	edge_typer   r   	source_id	target_idedge_elementr   s   `                  r   r   zGEXFWriter.add_edges  s   	3 	3 	3 	3 	30  (($1M!$4$4 '	/ '	/ Aq#yC!B&]]733
!*oo7   'mmH55";//8   %MM&11	 ^^6

   !g..!%jj7007777   mmE**HH5	005555   AGAJNN43344IAGAJNN43344I"T)ITTQSTTLgkk."55G|u$$ OOL)DD		 OOL)DD	\9==I++FL)WUUI  ....]+++++sY   'A##
A0/A04'B
B)(B)-'C
C"!C"&<D##
D0/D04<E11
E>=E>c                    t          d          }t          |          dk    r|S d}|                                D ]\  }}|dk    rd}t          |          }	|	| j        vrt          d|	           t          |t                    rY|D ]G\  }
}}t          |
          }	||.d}|                     |           |                     |            nH| 	                    t          |          | j        |	         |||          }|D ]\  }
}}t          d          }||j        d	<   t          |
          |j        d
<   |	t          u rS|j        d
         dk    rd|j        d
<   n7|j        d
         dk    rd|j        d
<   n|j        d
         dk    r
d|j        d
<   |t          |          |j        d<   |t          |          |j        d<   |                    |           ڐd}| 	                    t          |          | j        |	         |||          }t          d          }||j        d	<   t          |t                    r*t          |                                          |j        d
<   nst          |          |j        d
<   |	t          u rS|j        d
         dk    rd|j        d
<   n7|j        d
         dk    rd|j        d
<   n|j        d
         dk    r
d|j        d
<   |                    |           |                    |           |S )N	attvaluesr   r{   r   networkx_keyz%attribute value type is not allowed: rz   attvalueforvalueinfINFnanNaNz-infz-INFr   r   )r   lenitemsr   rV   	TypeError
isinstancerD   r   get_attr_idr    attribr5   r   rC   lower)rX   node_or_edgexml_objr   r   r   r   kr   val_typevalr   r   r   es                  r   r   zGEXFWriter.add_attributes  s@   K((	t99>>KJJLL 8	$ 8	$DAqEzz"AwwHt},, R R RSSS!T"" 1$'(  OC#CyyH(CO(88???88===	 -<
 **FFDM(3\7D  () ( (OC
++A&-AHUO(+CAHW%5((8G,5505AHW--Xg.%7705AHW--Xg.&8806AHW-(,/JJ)*-c(($$Q''''!(&  **FFDM(3\7D  J''")a&& 7(+AAHW%%(+AAHW%5((8G,5505AHW--Xg.%7705AHW--Xg.&8806AHW-  ####y!!!r   c                    	 | j         |         |         |         S # t          $ r6 t          t          | j                            }|| j         |         |         |<   |||d}t          d
i |}|                    |          }	|	8t          d          }
t          |	          |
_        |                    |
           d }| j	        
                    d          D ];}|                    d          }|                    dd          }||k    r||k    r|}<|,||d}t          di |}| j	                            d	|           |                    |           Y nw xY w|S )N)r   titler   	attributer   
attributesclassr   r{   )r   r   r   )r   )r   )r   r   r    r   r   r   re   r~   r   r   findallinsert)rX   r   	attr_typeedge_or_noder   r   new_idattr_kwargsr   default_titledefault_elementattributes_elementrA   a_classa_modes                  r   r   zGEXFWriter.get_attr_id  s   	19\*4077 	1 	1 	1dl++,,F39DIl#D)%0!'%KKK;;{;;I#KK..M("))"4"4'*='9'9$  111!%'//== + +%%..vx00l**v~~)*&!)'+lCC%,%I%I[%I%I""))!-?@@@%%i000003	14 s    D>EEc                    |                     dd          }|r2|                    d          }|;| j        dk    r}t          d| j         dt          |                    d                    t          |                    d                    t          |                    d	                    
          }nt          d| j         dt          |                    d                    t          |                    d                    t          |                    d	                    t          |                    dd                              }|                    |           |                    d          }|<t          d| j         dt          |                    }|                    |           |                    d          }|<t          d| j         dt          |                    }|                    |           |                    d          }|z|                    d          r)t          d| j         ddt          |                    }n't          d| j         dt          |                    }|                    |           |                    d          }	|	t          d| j         dt          |	                    d                    t          |	                    d                    t          |	                    d                              }|                    |           |S )Nrw   Fcolorr-   {}colorrgbr   r   r   rA   g      ?r   r   r   rA   size}size)r   	thickness
}thicknessshapehttp}shapeimage)r   uriposition	}positionxyzr  r  r  )r   re   r2   r   r/   r    r   
startswith)
rX   elementr   rw   r   r   r   r  r  r	  s
             r   r   zGEXFWriter.add_viz+  s   mmE5)) 0	"GGG$$E <5((1T[111eiinn--eiinn--eiinn--	  AA  1T[111eiinn--eiinn--eiinn--eiiS1122  A q!!!776??D4444CIIFFFq!!!,,I$9999YPPPq!!!GGG$$E ##F++ M1T[111c%jj  AA   9T[ 9 9 9ULLLAq!!!wwz**H#0000(,,s++,,(,,s++,,(,,s++,,	   q!!!r   c                     |                     dd          }|rdt          d          }|D ]=}t          d          }t          |          |j        d<   |                    |           >|                    |           |S )NparentsFparentr   )r   r   r    r   r   )rX   r   r   r  parents_elementpr   s          r   r   zGEXFWriter.add_parents`  s    --	511 	1%i00O * *H%%"%a&&&&q))))000r   c                    |                     dd          }|rmt          d          }|D ]F\  }}t          dt          |          t          |                    }|                    |           G|                    |           |S )NslicesFslice)r   r   )r   r   r    r   )rX   node_or_edge_elementnode_or_edge_datar  slices_elementr   r   r   s           r   r   zGEXFWriter.add_slicesk  s    "&&x77 	8$X..N$ ) )
sG3u::3s88DDD%%a(((( ''777  r   c                    |                     dd          }|rt          d          }|D ]\  }}t          d          }|,t          |          |j        d<   |                     |           |,t          |          |j        d<   |                     |           |                    |           |                    |           |S )NspellsFspellr   r   )r   r   r    r   r   r   )rX   r  r  r  spells_elementr   r   r   s           r   r   zGEXFWriter.add_spellsu  s    "&&x77 	8$X..N$ ) )
sG$$$(+E

AHW%44U;;;?&)#hhAHUO44S999%%a(((( ''777  r   c                 r   |t          |t                    rd}nDt          |t                    rd}n,t          |t                    rd}nt	          j        d          | j                            d|           | j                            d          dk    r| j                            dd           d S d S d S )	Ndater6   r9   z2timeformat should be of the type int, float or str
timeformatr   r{   rz   )	r   r    r5   r<   rf   rg   r   r   re   )rX   start_or_endr"  s      r   r   z&GEXFWriter.alter_graph_mode_timeformat  s    #,,, 	#

L%00 %

L#.. #

&H   ""<<<<!%%f--99"&&vy99999 $# :9r   c                     | j         r|                     | j                   t          | j                  }|                    || j        d           d S )NT)r   xml_declaration)r   r   r|   r   r   r   )rX   fhdocuments      r   r   zGEXFWriter.write  sP     	"KK!!!tx((rDM4HHHHHr   r   c                    dd|z  z   }t          |          r|j        r|j                                        s
|dz   |_        |j        r|j                                        s||_        |D ]}|                     ||dz              |j        r|j                                        s	||_        d S d S |r)|j        r|j                                        s||_        d S d S d S )N
z  r   )r   r~   striptailr   )rX   elemlevelis       r   r   zGEXFWriter.indent  s   4%<t99 	9 %DIOO$5$5 %H	9 DIOO$5$5 	 - -D%!),,,,9 DIOO$5$5 			   di ty/@/@ 			   r   )Nr   Tr   )r   )rj   rk   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ro   r   r   r   r     s        GQ)" )" )" )"V  ' ' '.%, %, %,NB, B, B,H@ @ @D  @3 3 3j	 	 	! ! !! ! ! : : :$I I I     r   r   c                   Z    e Zd ZddZd Zd ZddZd Zd Zd	 Z	d
 Z
d Zd Zd Zd ZdS )r'   Nr   c                 t    |                                   || _        d| _        |                     |           d S )NT)r[   r&   simple_graphri   )rX   r&   r   s      r   r   zGEXFReader.__init__  s=    " !!!!!r   c                 ~   t          |          | _        | j                            d| j         d          }||                     |          S | j        D ]S}|                     |           | j                            d| j         d          }||                     |          c S Tt          j        d          )N)filer   z}graphz No <graph> element in GEXF file.)	r   r|   findr.   
make_graphrd   ri   rf   rg   )rX   streamr   r   s       r   __call__zGEXFReader.__call__  s    F+++HMM4t|44455=??1%%%} 	* 	*GW%%%84<88899A}q))))) ABBBr   c                 F   |                     dd           }|dk    rt          j                    }nt          j                    }|                     dd          }|dk    r
||j        d<   |                     d          }|
||j        d<   |                     d          }|
||j        d<   |                     dd          }|dk    rd|j        d<   n
d	|j        d<   |                     d
          | _        | j        dk    rd| _        |                    d| j         d          }i }	i }
i }i }|D ]}|                     d          }|dk    rM|                     |          \  }}|		                    |           |
	                    |           |
|j        d<   j|dk    rM|                     |          \  }}|	                    |           |	                    |           ||j        d<    ddd	ddi}i }|	                    |           |	                    |           ||j        d<   |
                    d| j         d          }|8|                    d| j         d          D ]}|                     |||	           |
                    d| j         d          }|8|                    d| j         d          D ]}|                     |||           | j        r=|                                rt          j        |          }nt          j        |          }|S )Nr   r   r   r   r   r   r   rz   r{   r"  r!  r8   r   z}attributesr   rx   r   ry   r   r   r6   )r   r   r   }nodes}nodez}edgesz}edge)re   rf   MultiDiGraph
MultiGraphr   r"  r   r.   find_gexf_attributesr   r4  add_nodeadd_edger1  r   DiGraphGraph)rX   	graph_xmledgedefaultr   
graph_namegraph_start	graph_end
graph_modeattributes_elements	node_attrr   	edge_attrr   rA   
attr_classnandeaedr   node_xmlr   edge_xmls                          r   r5  zGEXFReader.make_graph  sx   mm$5t<<*$$!!AAA ]]62..
(AGFOmmG,,"*AGGMM%((	 &AGEN]]62..
""'AGFOO&AGFO $--55?f$$&DO (//0OT\0O0O0OPP		$ 	 	AwJV##22155B  $$$##B'''*6''v%%22155B  $$$##B'''*6'' 8hOOPB". "'ADL'A'A'ABB$)112Kt|2K2K2KLL 6 6a95555 "'ADL'A'A'ABB$)112Kt|2K2K2KLL 6 6a95555  	 }}  JqMMHQKKr   c                    |                      ||          }|                     ||          }| j        dk    r|                     ||          }n|                     ||          }|                     ||          }|                     ||          }|                    d          }| j        |                     |          }|                    d          }||d<   |                    d|          }|||d<   |	                    d| j
         d          }|:|                    d| j
         d          D ]}|                     ||||            |j        |fi | d S )	Nr-   r   r   r   r   r9  r:  )node_pid)decode_attr_elementsr   r2   r   r   r   add_start_endre   r&   r4  r.   r   r>  )	rX   r   rP  rI  rS  r   r   
node_labelsubnodess	            r   r>  zGEXFReader.add_node  s    ((H==h//<5  ??422DD??422D||D(++!!$11 ,,t$$>%nnW--G \\'**
"W <<x00"DK ==!;dl!;!;!;<<$,,-F$,-F-F-FGG H Ha9wGGGG
7##d#####r   c                     | j         }|                    d          }| | j        |         |          |d<   |                    d          }| | j        |         |          |d<   |S )Nr   r   )r"  re   rW   )rX   r   r|   ttype
node_startnode_ends         r   rU  zGEXFReader.add_start_end8  sp    WWW%%
!3D,U3J??DM775>>1$*51(;;DKr   c           	      `   i }|                     d| j         d          }| | j        dk    rjt          |                    d                    t          |                    d                    t          |                    d                    d|d<   nt          |                    d                    t          |                    d                    t          |                    d                    t          |                    d	d
                    d|d<   |                     d| j         d          }|%t          |                    d                    |d<   |                     d| j         d          }|%t          |                    d                    |d<   |                     d| j         d          }|<|                    d          |d<   |d         dk    r|                    d          |d<   |                     d| j         d          }|lt          |                    dd                    t          |                    dd                    t          |                    dd                    d|d<   t          |          dk    r||d<   |S )Nr   r   r-   r   r   r   r   r   rA   r   r   r  r   r   r  r  r  r  r  r  r
  r  r   r  r  r  r	  rw   )r4  r/   r2   r<   re   r5   r   )	rX   r   rP  rw   r   r   r  r  r	  s	            r   r   zGEXFReader.add_vizC  sx   74;77788|u$$UYYs^^,,UYYs^^,,UYYs^^,,   G UYYs^^,,UYYs^^,,UYYs^^,,uyya0011	   G }}5$+55566 1 122CKMM"?t{"?"?"?@@	 $Y]]7%;%;<<C74;77788 99W--CL7|w&&$yy//G==!=dk!=!=!=>>8<<Q//008<<Q//008<<Q//00 C
O s88a<<DKr   c                     |                     d| j         d          }|Vg |d<   |                    d| j         d          D ]2}|                    d          }|d                             |           3|S )Nr   z}parentsr  z}parentr   r4  r.   r   re   r   )rX   r   rP  r  r  r  s         r   r   zGEXFReader.add_parentsp  s    "--(DT\(D(D(DEE& DO$,,-H$,-H-H-HII / /uY&&v....r   c                     |                     d| j         d          }|mg |d<   |                    d| j         d          D ]I}|                    d          }|                    d          }|d                             ||f           J|S )Nr   z}slicesr  z}slicer   r   r^  )rX   r   node_or_edge_xmlr  r   r   r   s          r   r   zGEXFReader.add_slicesy  s    )../JDL/J/J/JKK%DN#++,F,F,F,FGG 4 4geeEllX%%ucl3333r   c                 ~   |                     d| j         d          }|g |d<   | j        }|                    d| j         d          D ]q} | j        |         |                    d                    } | j        |         |                    d                    }|d                             ||f           r|S )Nr   z}spellsr  z}spellr   r   )r4  r.   r"  r   rW   re   r   )rX   r   r`  r  rY  r   r   r   s           r   r   zGEXFReader.add_spells  s    )../JDL/J/J/JKK%DNOE#++,F,F,F,FGG 4 4/(/g??-d&u-aeeEll;;X%%ucl3333r   c                    |                     d          }|                                r|dk    rt          j        d          |                                s|dk    rt          j        d          |                     d          }|                     d          }| j        *|                     |          }|                     |          }|                     ||          }|                     ||          }| j        dk    r|                     ||          }n| 	                    ||          }|                     d	          }|||d	<   |
                    d
d           }	|	|	}|                     d          }
|
t          |
          |d<   |                     d          }|||d<   |                    ||          rd| _         |j        ||fd|i| |dk    r |j        ||fd|i| d S d S )Nr   r   z(Undirected edge found in directed graph.r   z(Directed edge found in undirected graph.r   r   r-   r   r   r   r   Fr   mutual)re   r   rf   rg   r&   rT  rU  r2   r   r   r   r5   has_edger1  r?  )rX   r   r   rJ  edge_directionr   r   r   r   multigraph_keyr   r   s               r   r?  zGEXFReader.add_edge  s)    &))&11==?? 	O~=="#MNNN 	O^z%A%A"#MNNN !!(++!!(++>%^^F++F^^F++F((LAA!!$55<5  ??466DD??466D
 ""4(( DJ .$77%$G!!(++"6]]DN!%%g..
!&DM::ff%% 	& %D
6677w7$777X%%AJvv;;7;d;;;;; &%r   c                 
   i }|                     d| j         d          }|_|                    d| j         d          D ]?}|                    d          }	 ||         d         }n+# t          $ r}t          j        d| d          |d }~ww xY w||         d         }	|                    d	          }
|	d
k    r| j        |
         }
n | j        |	         |
          }
||         d         dk    r| j	        } | j        |         |                    d                    } | j        |         |                    d                    }||v r ||         
                    |
||f           /|
||fg||<   :|
||<   A|S )Nr   z
}attvaluesz	}attvaluer   r   zNo attribute defined for=rc   r   r   r7   r   rz   r   r   )r4  r.   r   re   r   rf   rg   rn   rW   r"  r   )rX   	gexf_keysobj_xmlr   attr_elementrA   r   r   erratyper   rY  r   r   s                 r   rT  zGEXFReader.decode_attr_elements  s   ||$B$B$B$BCC#!))*Gt|*G*G*GHH ( (eeEllX%cN73EE X X X*+Ms+M+M+MNNTWWX!#v.gI%% -e4EE3D,U3E::ES>&)Y66 !OE3D,U3AEE'NNCCE1$*51!%%,,??C}}U**E5#+>????(-uc':&;U #(DKKs   A**
B4BBc                    i }i }|                     d          }|                    d| j         d          D ]}|                     d          }|                     d          }|                     d          }|||d||<   |                    d| j         d          }	|	9|d	k    r| j        |	j                 }
n | j        |         |	j                  }
|
||<   ||fS )
Nr   r   z
}attributer   r   r   )r   r   r   z}defaultr7   )re   r   r.   r4  rn   r~   rW   )rX   r   attrsdefaultsr   r   r   r   rl  r   r   s              r   r=  zGEXFReader.find_gexf_attributes  s    !%%f--#++,J,J,J,JKK 	( 	(AeeDkkGEE'NNEEE&MME',eTJJE'Nff9$,999::G"I%% -gl;EE3D,U3GLAAE"'hr   )Nr   r>   )rj   rk   rl   r   r7  r5  r>  rU  r   r   r   r   r?  rT  r=  ro   r   r   r'   r'     s        " " " "C C CM M M^!$ !$ !$ !$F	 	 	+ + +Z    	 	 	2< 2< 2<h     D    r   r'   c                     	  fd D             n'# t           $ r}t          j        d          |d}~ww xY wt           \  }}t	          t          |                    t	                     k    rt          j        d          t                    t          j                   } D ]}|         }||j        |         d<   |j        |         	                    d           d|j        |         v r' j        |         d                  |j        |         d<   d|j        |         v r-fd	 j        |         d         D             |j        |         d<   |S )
a  Relabel graph using "label" node keyword for node label.

    Parameters
    ----------
    G : graph
       A NetworkX graph read from GEXF data

    Returns
    -------
    H : graph
      A NetworkX graph with relabeled nodes

    Raises
    ------
    NetworkXError
        If node labels are missing or not unique while relabel=True.

    Notes
    -----
    This function relabels the nodes in a NetworkX graph with the
    "label" attribute.  It also handles relabeling the specific GEXF
    node attributes "parents", and "pid".
    c                 :    g | ]}|j         |         d          fS )r   )r   )r@   r   r   s     r   
<listcomp>z&relabel_gexf_graph.<locals>.<listcomp>  s)    777Aqwqz'*+777r   zFFailed to relabel nodes: missing node labels found. Use relabel=False.NzHFailed to relabel nodes: duplicate node labels found. Use relabel=False.r   r   r   r  c                      g | ]
}|         S ro   ro   )r@   r  mappings     r   rr  z&relabel_gexf_graph.<locals>.<listcomp>'  s    $O$O$OAWQZ$O$O$Or   )
r   rf   rg   zipr   r   rE   relabel_nodesr   r   )r   rk  r  r  Hnmrt  s   `      @r   r   r     sz   27777Q777   T
 
	 =DAq
3q66{{c!ffV
 
 	
 7mmG
G$$A P PAJ
4	
wAGAJ '
5(9 :AGAJu
""$O$O$O$OI9N$O$O$OAGAJy!Hs    
727)r   Tr   )NFr   )__doc__r   r   xml.etree.ElementTreer   r   r   r   r   networkxrf   networkx.utilsr   __all__r	   r   _dispatchabler
   r+   r   r'   r   ro   r   r   <module>r     s   &                       $ $ $ $ $ $
L
L
L 143 3 3 3l*( *( *( *(Z 14T222( ( ( 32 (V[ [ [ [ [ [ [ [|Y Y Y Y Y Y Y YxG G G G G G G GT
/ / / / /r   