
 ,[c           @   s  d  Z  d d l Z d d l Z d d l Z d d l m Z m Z y& d d l m	 Z	 m
 Z
 m Z m Z WnK e k
 r y& d d l m	 Z	 m
 Z
 m Z m Z Wn e k
 r n Xn Xd d d d g Z e d	 d
 d d e d d   Z d e d d  Z e d d
 d e e d d   Z d e f d     YZ d e f d     YZ d e f d     YZ d   Z d   Z d   Z d S(   s  Read and write graphs in GEXF format.

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 https://gephi.org/gexf/format/schema.html for the
specification and https://gephi.org/gexf/format/basic.html for examples.
iN(   t	   open_filet   make_str(   t   Elementt   ElementTreet
   SubElementt   tostringt
   write_gexft	   read_gexft   relabel_gexf_grapht   generate_gexfi   t   modet   wbs   utf-8s   1.2draftc         C   s9   t  d | d | d |  } | j |   | j |  d S(   s  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.

    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, https://gephi.org/gexf/format/
    .. [2] GEXF viz schema 1.1, https://gephi.org/gexf/1.1draft/viz
    t   encodingt   prettyprintt   versionN(   t
   GEXFWritert	   add_grapht   write(   t   Gt   pathR   R   R   t   writer(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR   &   s    0	c         c   sN   t  d | d | d |  } | j |   x t |  j   D] } | Vq; Wd S(   s  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 https://gephi.org/gexf/format/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))  # doctest: +SKIP
    >>> 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   R   R   N(   R   R   t   strt
   splitlines(   R   R   R   R   R   t   line(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR	   \   s
    (	i    t   rbc         C   s@   t  d | d |  } | r0 t | |    } n | |   } | S(   s  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
       File or file name to write.
       File names ending in .gz or .bz2 will be compressed.
    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 https://gephi.org/gexf/format/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, https://gephi.org/gexf/format/
    t	   node_typeR   (   t
   GEXFReaderR   (   R   R   t   relabelR   t   readerR   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR      s
    $t   GEXFc        	   B   s  e  Z i  Z i d  d 6d d 6d d 6d j d  d g  d 6d	 d
 6Z e e d <i d d 6d d 6d d 6d j d d g  d 6d d
 6Z e e d <e d f e d f e d f e d f e d f e	 d f g Z
 yA e d  Z e
 j e d f e d f e d f e d f g  Wn] e k
 rle
 j e d f e d f e d f e d f e d f e d f e d f g  n Xe	 e
  Z e	 d   e
 D  Z i e d 6e d 6e d 6e d 6e d 6e d  6e d! 6e d" 6Z d#   Z RS($   s   http://www.gexf.net/1.1draftt   NS_GEXFs    http://www.gexf.net/1.1draft/vizt   NS_VIZs)   http://www.w3.org/2001/XMLSchema-instancet   NS_XSIt    s%   http://www.gexf.net/1.1draft/gexf.xsdt   SCHEMALOCATIONs   1.1t   VERSIONs   1.1drafts   http://www.gexf.net/1.2drafts    http://www.gexf.net/1.2draft/vizs%   http://www.gexf.net/1.2draft/gexf.xsds   1.2s   1.2draftt   integert   floatt   doublet   booleant   stringi  t   longt
   liststringt   anyURIc         c   s   |  ] } t  |  Vq d  S(   N(   t   reversed(   t   .0t   a(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pys	   <genexpr>   s    t   truet   falset   Truet   Falset   0i    t   1i   c         C   s   |  j  j |  } | d  k r4 t j d |   n  | d |  _ | d |  _ | d |  _ | d |  _ | d |  _	 | |  _
 d  S(   Ns   Unknown GEXF version %s.R   R   R    R#   (   t   versionst   gett   Nonet   nxt   NetworkXErrorR   R   R    R"   R#   R   (   t   selfR   t   d(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyt   set_version   s    (   t   __name__t
   __module__R5   t   joinR;   t   intR%   t   boolt   listt   dictt   typest   chrt   blurbt   extendR   t
   ValueErrorR)   t   unicodet   xml_typet   python_typeR1   R2   t   convert_boolR<   (    (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR      sZ   
	


	

														R   c           B   s   e  Z d d  e 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   Z d d  Z RS(   s   utf-8s   1.2draftc         C   sG  y d d  l  j j } Wn t k
 r5 t d   n X| |  _ | |  _ |  j |  t d i |  j d 6|  j	 d 6|  j
 d 6|  j d 6 |  _ | j d |  j  t j   |  _ t j   |  _ i  |  _ i  |  j d	 <i  |  j d
 <i  |  j d	 d <i  |  j d	 d <i  |  j d
 d <i  |  j d
 d <| d  k	 rC|  j |  n  d  S(   Nis0   GEXF writer requires xml.elementtree.ElementTreet   gexft   xmlnss	   xmlns:xsis   xsi:schemaLocationR   t   vizt   nodet   edget   dynamict   static(   t   xml.etree.ElementTreet   etreeR   t   ImportErrorR   R   R<   R   R   R    R"   R#   t   xmlt   register_namespaceR   t	   itertoolst   countt   edge_idt   attr_idt   attrR7   R   (   R:   t   graphR   R   R   t   ET(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyt   __init__   s0    		

	c         C   s;   |  j  r |  j |  j  n  t |  j  j |  j  } | S(   N(   R   t   indentRW   R   t   decodeR   (   R:   t   s(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyt   __str__  s    	c         C   s   | j  j d  d k r! d } n d } | j   r< d } n d } | j  j d d  } t d d	 | d | d | } | |  _ |  j | |  |  j | |  |  j | |  |  j j	 |  d  S(
   NR
   RR   RS   t   directedt
   undirectedt   namet    R^   t   defaultedgetype(
   R^   R6   t   is_directedR   t   graph_elementt   add_metat	   add_nodest	   add_edgesRW   t   append(   R:   R   R
   t   defaultRg   Rk   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR   !  s    				c         C   sV   t  d  } d j t j  t | d  _ t j d  t | d  _ | j |  d  S(   Nt   metas   NetworkX {}t   creators   %d/%m/%Yt   lastmodified(	   R   t   formatR8   t   __version__R   t   textt   timet   strftimeRo   (   R:   R   Rk   t   meta_element(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyRl   5  s    c         C   s  t  d  } x| j d t  D]\ } } | j   } t | j d |   } i | d 6} t | j d |   }	 |	 | d <y# | j d  }
 t |
  | d <Wn t k
 r n Xy0 | j d  } t |  | d <|  j |  Wn t k
 r n Xy0 | j d  } t |  | d <|  j |  Wn t k
 r<n Xt  d |  } | j j	 d	 i   } |  j
 | |  } |  j d
 k r|  j | |  } n |  j | |  } |  j | |  } |  j d | | |  } | j |  q W| j |  d  S(   Nt   nodest   datat   idt   labelt   pidt   startt   endRP   t   node_defaults   1.1(   R   Rz   R1   t   copyR   t   popt   KeyErrort   alter_graph_mode_timeformatR^   R6   t   add_parentsR   t
   add_slicest
   add_spellst   add_vizt   add_attributesRo   (   R:   R   Rk   t   nodes_elementRP   R{   t	   node_datat   node_idt   kwR}   R~   R   R   t   node_elementRp   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyRm   <  sF    
c            s3    f d   } t  d  } x| |  D]\ } } } } i t |  d 6}	 y# | j d  }
 t |
  |	 d <Wn t k
 r n Xy# | j d  } t |  |	 d <Wn t k
 r n Xy0 | j d  } t |  |	 d <  j |  Wn t k
 r n Xy0 | j d  } t |  |	 d <  j |  Wn t k
 rBn Xt | j | j d |   } t | j | j d |   } t  d d	 | d
 | |	 } | j j d i   }   j d k r  j	 | |  } n   j
 | |  }   j | |  }   j d | | |  } | j |  q( W| j |  d  S(   Nc         3   s  |  j    r x |  j d t d t  D]o \ } } } } | j   } | j d |  | j d d   } | d  k r t   j  } n  | | | | f Vq% Wns xp |  j d t  D]\ \ } } } | j   } | j d d   } | d  k r t   j  } n  | | | | f Vq Wd  S(   NR{   t   keyst   keyR|   (	   t   is_multigrapht   edgesR1   R   t   updateR   R7   t   nextR[   (   R   t   ut   vR   R{   t	   edge_dataR[   (   R:   (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyt   edge_key_datae  s    +"R   R|   t   weightt   typeR   R   RQ   t   sourcet   targett   edge_defaults   1.1(   R   R   R   R   R   Rz   R6   R^   R   R   R   R   R   Ro   (   R:   R   Rk   R   t   edges_elementR   R   R   R   R   t   edge_weightt	   edge_typeR   R   t	   source_idt	   target_idt   edge_elementRp   (    (   R:   s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyRn   d  sN    	c         C   s<  t  d  } t |  d k r" | Sd } x | j   D]\ } } | d k rV d } n  t |  }	 t | t  rx_ | D]W \ }
 } } t |
  }	 | d  k	 s | d  k	 rx d } |  j |  |  j |  Pqx qx W|  j t	 |  |  j
 |	 | | |  } x)| D] \ }
 } } t  d  } | | j d <t	 |
  | j d	 <| d  k	 r_t	 |  | j d
 <n  | d  k	 rt	 |  | j d <n  | j |  qWq5 d } |  j t	 |  |  j
 |	 | | |  } t  d  } | | j d <t | t  rt	 |  j   | j d	 <n t	 |  | j d	 <| j |  q5 W| j |  | S(   Nt	   attvaluesi    RS   R   t   networkx_keyRR   t   attvaluet   fort   valueR   R   (   R   t   lent   itemsR   t
   isinstanceRB   R7   R   t   get_attr_idR   RJ   t   attribRo   RA   t   lower(   R:   t   node_or_edget   xml_objR{   Rp   R   R
   t   kR   t   val_typet   valR   R   R\   t   e(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR     sL    	c         C   s  y |  j  | | | SWnbt k
 r{t t |  j   } | |  j  | | | <i | d 6| d 6| d 6} t d |  } | j |  }	 |	 d  k	 r t d  }
 t |	  |
 _	 | j
 |
  n  d  } x\ |  j j d  D]H } | j d  } | j d d	  } | | k r | | k r | } q q W| d  k rki | d 6| d 6} t d |  } |  j j d
 |  n  | j
 |  n X| S(   NR|   t   titleR   t	   attributeRp   t
   attributest   classR
   RS   i    (   R]   R   R   R   R\   R   R6   R7   R   Rv   Ro   Rk   t   findallt   insert(   R:   R   t	   attr_typet   edge_or_nodeRp   R
   t   new_idt   attr_kwargsR   t   default_titlet   default_elementt   attributes_elementR.   t   a_classt   a_mode(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR     s0    c   
      C   s  | j  d t  } | r| j d  } | d  k	 r|  j d k r t d |  j d t | j d   d t | j d   d t | j d   } ng t d |  j d t | j d   d t | j d   d t | j d   d t | j d   } | j |  n  | j d	  } | d  k	 rXt d
 |  j d t |  } | j |  n  | j d  } | d  k	 rt d |  j d t |  } | j |  n  | j d  } | d  k	 r#| j	 d  rt d |  j d d d t |  } n t d |  j d t |  } | j |  n  | j d  }	 |	 d  k	 rt d |  j d t |	 j d   d t |	 j d   d t |	 j d   } | j |  qn  | S(   NRO   t   colors   1.1s	   {%s}colort   rt   gt   bR.   t   sizes   {%s}sizeR   t	   thicknesss   {%s}thicknesst   shapet   https	   {%s}shapet   imaget   urit   positions   {%s}positiont   xt   yt   z(
   R   R2   R6   R7   R#   R   R   R   Ro   t
   startswith(
   R:   t   elementR   RO   R   R   R   R   R   R   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR     sL    c         C   su   | j  d t  } | rq t d  } x: | D]2 } t d  } t |  | j d <| j |  q+ W| j |  n  | S(   Nt   parentst   parentR   (   R   R2   R   R   R   Ro   (   R:   R   R   R   t   parents_elementt   pR   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR     s    c         C   s   | j  d t  } | r| t d  } xE | D]= \ } } t d d t |  d t |  } | j |  q+ W| j |  n  | S(   Nt   slicest   sliceR   R   (   R   R2   R   R   Ro   (   R:   t   node_or_edge_elementt   node_or_edge_dataR   t   slices_elementR   R   R   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR   %  s    $c         C   s   | j  d t  } | r t d  } x | D] \ } } t d  } | d  k	 rr t |  | j d <|  j |  n  | d  k	 r t |  | j d <|  j |  n  | j |  q+ W| j |  n  | S(   Nt   spellst   spellR   R   (   R   R2   R   R7   R   R   R   Ro   (   R:   R   R   R   t   spells_elementR   R   R   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR   /  s    c         C   s   |  j  j d  d k r | d  k	 r t | t  r< d } n? t | t  rT d } n' t | t  rl d } n t j d   |  j  j	 d |  |  j  j	 d d  q n  d  S(	   NR
   RS   t   dateR&   R)   s2   timeformat should be of the type int, float or strt
   timeformatRR   (
   Rk   R6   R7   R   R   R%   R@   R8   R9   t   set(   R:   t   start_or_endR   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR   ?  s    				c         C   sK   |  j  r |  j |  j  n  t |  j  } | j | d |  j d t d  S(   NR   t   xml_declaration(   R   Ra   RW   R   R   R   R1   (   R:   t   fht   document(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR   O  s    	i    c         C   s   d d | } t  |  r | j s4 | j j   rD | d | _ n  | j s^ | j j   rj | | _ n  x" | D] } |  j | | d  qq W| j s | j j   r | | _ q n, | r | j s | j j   r | | _ n  d  S(   Ns   
s     i   (   R   Rv   t   stript   tailRa   (   R:   t   elemt   levelt   i(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyRa   V  s     N(   R=   R>   R7   R1   R`   Rd   R   Rl   Rm   Rn   R   R   R   R   R   R   R   R   Ra   (    (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR      s    	 				(	:	.	 	.		
			R   c           B   s}   e  Z d 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 RS(   s   1.2draftc         C   sS   y d d  l  } Wn t k
 r/ t d   n X| |  _ t |  _ |  j |  d  S(   Nis1   GEXF reader requires xml.elementtree.ElementTree.(   RT   RV   R   R1   t   simple_graphR<   (   R:   R   R   RW   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR`   j  s    		c         C   s   t  d |  |  _ |  j j d |  j  } | d  k	 rD |  j |  SxP |  j D]E } |  j |  |  j j d |  j  } | d  k	 rN |  j |  SqN Wt j	 d   d  S(   Nt   files	   {%s}graphs    No <graph> element in GEXF file.(
   R   RW   t   findR   R7   t
   make_graphR5   R<   R8   R9   (   R:   t   streamR   R   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyt   __call__u  s    c         C   sJ  | j  d d   } | d k r- t j   } n t j   } | j  d d  } | d k rg | | j d <n  | j  d  } | d  k	 r | | j d <n  | j  d  } | d  k	 r | | j d <n  | j  d d  } | d k r d | j d <n d	 | j d <| j  d
  |  _ |  j d k r%d |  _ n  | j d |  j  } i  }	 i  }
 i  } i  } x | D] } | j  d  } | d k r|  j	 |  \ } } |	 j
 |  |
 j
 |  |
 | j d <qZ| d k r|  j	 |  \ } } | j
 |  | j
 |  | | j d <qZ  qZWi i d d 6d	 d 6d d 6d 6} i  } | j
 |  | j
 |  | | j d <| j d |  j  } | d  k	 rx4 | j d |  j  D] } |  j | | |	  qWn  | j d |  j  } | d  k	 rx4 | j d |  j  D] } |  j | | |  qWn  |  j rF| j   r4t j |  } qFt j |  } n  | S(   NRi   Re   Rg   Rh   R   R   R
   RR   RS   R   R   R(   s   {%s}attributesR   RP   R   RQ   R   R&   R   R   R   s	   {%s}nodess   {%s}nodes	   {%s}edgess   {%s}edge(   R6   R7   R8   t   MultiDiGrapht
   MultiGraphR^   R   R   R   t   find_gexf_attributesR   R   t   add_nodet   add_edgeR   Rj   t   DiGrapht   Graph(   R:   t	   graph_xmlt   edgedefaultR   t
   graph_namet   graph_startt	   graph_endt
   graph_modet   attributes_elementst	   node_attrR   t	   edge_attrR   R.   t
   attr_classt   nat   ndt   eat   edR   t   node_xmlR   t   edge_xml(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR     sp    "	c   	      C   se  |  j  | |  } |  j | |  } |  j d k rH |  j | |  } n |  j | |  } |  j | |  } |  j | |  } | j d  } |  j d  k	 r |  j |  } n  | j d  } | | d <| j d |  } | d  k	 r | | d <n  | j
 d |  j  } | d  k	 rQx: | j d |  j  D] } |  j | | | d | q+Wn  | j | |  d  S(   Ns   1.1R|   R}   R~   s	   {%s}nodess   {%s}nodet   node_pid(   t   decode_attr_elementsR   R   R   R   R   t   add_start_endR6   R   R7   R   R   R   R   (	   R:   R   R  R  R
  R{   R   t
   node_labelt   subnodes(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR     s(    
 c         C   sw   |  j  } | j d  } | d  k	 r> |  j | |  | d <n  | j d  } | d  k	 rs |  j | |  | d <n  | S(   NR   R   (   R   R6   R7   RK   (   R:   R{   RW   t   ttypet
   node_startt   node_end(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR    s    	c   	      C   se  i  } | j  d |  j  } | d  k	 r |  j d k r i t | j d   d 6t | j d   d 6t | j d   d 6| d <q i t | j d   d 6t | j d   d 6t | j d   d 6t | j d d   d 6| d <n  | j  d	 |  j  } | d  k	 r,t | j d
   | d <n  | j  d |  j  } | d  k	 rjt | j d
   | d <n  | j  d |  j  } | d  k	 r| j d  | d <| d d k r| j d  | d <qn  | j  d |  j  } | d  k	 rBi t | j d d   d 6t | j d d   d 6t | j d d   d 6| d <n  t |  d k ra| | d <n  | S(   Ns	   {%s}colors   1.1R   R   R   R   R.   i   s   {%s}sizeR   R   s   {%s}thicknessR   s	   {%s}shapeR   R   R   s   {%s}positionR   i    R   R   R   RO   (   R   R   R7   R#   R@   R6   R%   R   (	   R:   R{   R  RO   R   R   R   R   R   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR     s<     ##c         C   st   | j  d |  j  } | d  k	 rp g  | d <xA | j d |  j  D]& } | j d  } | d j |  qC Wn  | S(   Ns   {%s}parentsR   s
   {%s}parentR   (   R   R   R7   R   R6   Ro   (   R:   R{   R  R   R   R   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR   &  s    
c         C   s   | j  d |  j  } | d  k	 r g  | d <xV | j d |  j  D]; } | j d  } | j d  } | d j | | f  qC Wn  | S(   Ns
   {%s}slicesR   s	   {%s}sliceR   R   (   R   R   R7   R   R6   Ro   (   R:   R{   t   node_or_edge_xmlR   Rc   R   R   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR   /  s    
c         C   s   | j  d |  j  } | d  k	 r g  | d <|  j } xp | j d |  j  D]U } |  j | | j d   } |  j | | j d   } | d j | | f  qL Wn  | S(   Ns
   {%s}spellsR   s	   {%s}spellR   R   (   R   R   R7   R   R   RK   R6   Ro   (   R:   R{   R  R   R  Rc   R   R   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR   9  s    
	c         C   s  | j  d  } | j   r9 | d k r9 t j d   n  | j   rd | d k rd t j d   n  | j  d  } | j  d  } |  j d  k	 r |  j |  } |  j |  } n  |  j | |  } |  j | |  } |  j d k r |  j	 | |  } n |  j
 | |  } | j  d	  } | d  k	 r4| | d	 <n  | j d
 d   }	 |	 d  k	 r[|	 } n  | j  d  }
 |
 d  k	 rt |
  | d <n  | j  d  } | d  k	 r| | d <n  | j | |  rt |  _ n  | j | | d | | | d k r| j | | d | | n  d  S(   NR   Rf   s(   Undirected edge found in directed graph.Re   s(   Directed edge found in undirected graph.R   R   s   1.1R|   R   R   R}   R   t   mutual(   R6   Rj   R8   R9   R   R7   R  R  R   R   R   R   R%   t   has_edgeR2   R   R   (   R:   R   R   R  t   edge_directionR   R   R{   R[   t   multigraph_keyR   t
   edge_label(    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR   D  sD    	c         C   s  i  } | j  d |  j  } | d  k	 rxV| j d |  j  D];} | j d  } y | | d } Wn$ t k
 r t j d |   n X| | d } | j d  }	 | d k r |  j |	 }	 n |  j	 | |	  }	 | | d	 d
 k rp|  j
 }
 |  j	 |
 | j d   } |  j	 |
 | j d   } | | k rW| | j |	 | | f  qz|	 | | f g | | <q? |	 | | <q? Wn  | S(   Ns   {%s}attvaluess   {%s}attvalueR   R   s   No attribute defined for=%s.R   R   R'   R
   RR   R   R   (   R   R   R7   R   R6   R   R8   R9   RL   RK   R   Ro   (   R:   t	   gexf_keyst   obj_xmlR]   t   attr_elementR.   R   R   t   atypeR   R  R   R   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR  z  s.    	c         C   s   i  } i  } | j  d  } x | j d |  j  D] } | j  d  } | j  d  } | j  d  } i | d 6| d 6| d 6| | <| j d |  j  }	 |	 d  k	 r2 | d k r |  j |	 j }
 n |  j | |	 j  }
 |
 | | <q2 q2 W| | f S(   NR
   s   {%s}attributeR|   R   R   s   {%s}defaultR'   (   R6   R   R   R   R7   RL   Rv   RK   (   R:   R   t   attrst   defaultsR
   R   R\   R   R  Rp   R   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR     s    N(   R=   R>   R7   R`   R   R   R   R  R   R   R   R   R   R  R   (    (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR   g  s   		O#		'			
		6	"c   	      C   st  y. g  |  D] } | |  j  | d f ^ q
 } Wn  t k
 rP t j d   n Xt |   \ } } t t |   t |   k r t j d   n  t |  } t j |  |  } x |  D] } | | } | | j  | d <| j  | j	 d  d | j  | k r#| |  j  | d | j  | d <n  d | j  | k r g  |  j  | d D] } | | ^ qH| j  | d <q q W| S(   s  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 relabed 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".
    R}   sF   Failed to relabel nodes: missing node labels found. Use relabel=False.sH   Failed to relabel nodes: duplicate node labels found. Use relabel=False.R|   R~   R   (
   Rz   R   R8   R9   t   zipR   R   RC   t   relabel_nodesR   (	   R   R   t   mappingR   R   t   Ht   nt   mR   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyR     s$    .
#:c         C   s:   d d l  m } y d d  l } Wn | d   n Xd  S(   Ni(   t   SkipTests%   xml.etree.cElementTree not available.(   t   noseR$  t   xml.etree.cElementTree(   t   moduleR$  RW   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyt   setup_module  s
    c         C   s+   d d  l  } y | j d  Wn n Xd  S(   Nis	   test.gexf(   t   ost   unlink(   R'  R)  (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyt   teardown_module  s
    (   t   __doc__RY   Rw   t   networkxR8   t   networkx.utilsR    R   R&  R   R   R   R   RV   RT   t   __all__R1   R   R	   R7   R2   R   t   objectR   R   R   R   R(  R+  (    (    (    s6   lib/python2.7/site-packages/networkx/readwrite/gexf.pyt   <module>   s2   &&5/+@ q K	3		