ó
|£*^c           @   sª   d  Z  d d l Z d d l m Z m Z m Z d Z d d d d g Z d	 „  Z	 e d
 d d ƒd d „ ƒ Z
 e d d d ƒd d „ ƒ Z d „  Z d „  Z d „  Z d S(   s	  
*****
Pajek
*****
Read graphs in Pajek format.

This implementation handles directed and undirected graphs including
those with self loops and parallel edges.

Format
------
See http://vlado.fmf.uni-lj.si/pub/networks/pajek/doc/draweps.htm
for format information.
iÿÿÿÿN(   t   is_string_liket	   open_filet   make_strs%   Aric Hagberg <aric.hagberg@gmail.com>t
   read_pajekt   parse_pajekt   generate_pajekt   write_pajekc      	   c   s/  |  j  d k r d } n	 |  j  } d |  j ƒ  V|  j ƒ  } t t | t d t | ƒ d ƒ ƒ ƒ } xè | D]à } |  j j | i  ƒ } | j d d ƒ } | j d d ƒ } t	 | j d | | ƒ ƒ } | | | <| j d	 d
 ƒ }	 d j
 t t | | | | |	 f ƒ ƒ }
 x: | j ƒ  D], \ } } |
 d t | ƒ t | ƒ f 7}
 qW|
 Vqk W|  j ƒ  rcd Vn d VxÀ |  j d t ƒ D]¬ \ } } } | j ƒ  } | j d d ƒ } d j
 t t | | | | | f ƒ ƒ }
 xN | j ƒ  D]@ \ } } |
 d t | ƒ t | ƒ f 7}
 |
 d | | f 7}
 qÞW|
 Vq{Wd S(   sð   Generate lines in Pajek graph format.

    Parameters
    ----------
    G : graph
       A Networkx graph

    References
    ----------
    See http://vlado.fmf.uni-lj.si/pub/networks/pajek/doc/draweps.htm
    for format information.
    t    t   NetworkXs   *vertices %si   t   xg        t   yt   idt   shapet   ellipset    s    %s %ss   *arcss   *edgest   datat   weightg      ð?N(   t   namet   ordert   nodest   dictt   zipt   ranget   lent   nodet   gett   intt   joint   mapt	   make_qstrt   itemst   is_directedt   edgest   Truet   copyt   pop(   t   GR   R   t
   nodenumbert   nt   naR	   R
   R   R   t   st   kt   vt   ut   edgedatat   dt   value(    (    sl   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/readwrite/pajek.pyR      s8    		(
'$	") i   t   modet   wbs   UTF-8c         C   s;   x4 t  |  ƒ D]& } | d 7} | j | j | ƒ ƒ q Wd S(   sÂ  Write graph in Pajek format to path.

    Parameters
    ----------
    G : graph
       A Networkx graph
    path : file or string
       File or filename to write.
       Filenames ending in .gz or .bz2 will be compressed.

    Examples
    --------
    >>> G=nx.path_graph(4)
    >>> nx.write_pajek(G, "test.net")

    References
    ----------
    See http://vlado.fmf.uni-lj.si/pub/networks/pajek/doc/draweps.htm
    for format information.
    s   
N(   R   t   writet   encode(   R$   t   patht   encodingt   line(    (    sl   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/readwrite/pajek.pyR   N   s    
i    t   rbc            s    ‡  f d †  |  Dƒ } t  | ƒ S(   sT  Read graph in Pajek format from path.

    Parameters
    ----------
    path : file or string
       File or filename to write.
       Filenames ending in .gz or .bz2 will be uncompressed.

    Returns
    -------
    G : NetworkX MultiGraph or MultiDiGraph.

    Examples
    --------
    >>> G=nx.path_graph(4)
    >>> nx.write_pajek(G, "test.net")
    >>> G=nx.read_pajek("test.net")

    To create a Graph instead of a MultiGraph use

    >>> G1=nx.Graph(G)

    References
    ----------
    See http://vlado.fmf.uni-lj.si/pub/networks/pajek/doc/draweps.htm
    for format information.
    c         3   s   |  ] } | j  ˆ  ƒ Vq d  S(   N(   t   decode(   t   .0R5   (   R4   (    sl   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/readwrite/pajek.pys	   <genexpr>…   s    (   R   (   R3   R4   t   lines(    (   R4   sl   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/readwrite/pajek.pyR   h   s    c         C   s:  d d l  } t |  ƒ r0 t |  j d ƒ ƒ }  n  t g  |  D] } | j d ƒ ^ q: ƒ }  t j ƒ  } xÏ|  r5y t |  ƒ } Wn Pn X| j ƒ  j	 d ƒ r× y | j ƒ  \ } } Wn t
 k
 rÆ q2X| | j d <qg | j ƒ  j	 d ƒ rki  } | j ƒ  \ } } x+t t | ƒ ƒ D]M}	 t |  ƒ } y> g  | j t | ƒ j d ƒ ƒ D] }
 |
 j d ƒ ^ qK} Wn& t k
 r�| j t | ƒ ƒ } n X| d d	 !\ } } | j | ƒ | | | <i | d
 6| j | <yO | d	 d !\ }
 } } | j | j i t |
 ƒ d 6t | ƒ d 6| d 6ƒ Wn n Xt | d d d	 … | d d d	 … ƒ } | j | j | ƒ qWqg | j ƒ  j	 d ƒ s•| j ƒ  j	 d ƒ rg | j ƒ  j	 d ƒ r¼t j | ƒ } n  | j ƒ  j	 d ƒ rà| j ƒ  } n  xO|  D]D} y> g  | j t | ƒ j d ƒ ƒ D] }
 |
 j d ƒ ^ q} Wn& t k
 rS| j t | ƒ ƒ } n Xt | ƒ d	 k  rlqçn  | d d	 !\ } } | j | | ƒ } | j | | ƒ } i  } y/ | d	 d !} | j i t | d ƒ d 6ƒ Wn n Xt | d d d	 … | d d d	 … ƒ } | j | ƒ | j | | | � qçWqg qg W| S(   sî   Parse Pajek format graph from string or iterable.

    Parameters
    ----------
    lines : string or iterable
       Data in Pajek format.

    Returns
    -------
    G : NetworkX graph

    See Also
    --------
    read_pajek()

    iÿÿÿÿNs   
s   *networkR   s	   *verticess   utf-8i    i   R   i   R	   R
   R   i   s   *edgess   *arcss   *edgei   R   i   (   t   shlexR    t   itert   splitt   rstript   nxt   MultiDiGrapht   nextt   lowert
   startswitht
   ValueErrort   graphR   R   R   R2   R7   t   AttributeErrort   strt   add_nodeR   t   updatet   floatR   t
   MultiGrapht   to_directedR   R   t   add_edge(   R9   R:   R5   R$   t   lt   labelR   t
   nodelabelst   nnodest   iR	   t	   splitlineR   R
   R   t
   extra_attrt   uit   viR+   R*   t	   edge_datat   w(    (    sl   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/readwrite/pajek.pyR   ˆ   s‚     (	;
)*;")c         C   s8   t  |  ƒ s t |  ƒ }  n  d |  k r4 d |  }  n  |  S(   sb   Return the string representation of t.
    Add outer double-quotes if the string has a space.
    R   s   "%s"(   R    RF   (   t   t(    (    sl   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/readwrite/pajek.pyR   è   s
    c         C   s   d d  l  } | j d ƒ d  S(   Niÿÿÿÿs   test.net(   t   ost   unlink(   t   moduleRY   (    (    sl   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/readwrite/pajek.pyt   teardown_moduleô   s    (   t   __doc__t   networkxR>   t   networkx.utilsR    R   R   t
   __author__t   __all__R   R   R   R   R   R\   (    (    (    sl   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/readwrite/pajek.pyt   <module>   s   	4	`	