ó
 ,µ[c           @   su   d  Z  d Z d d g Z d d l Z d d l m Z d d l m Z m	 Z	 e d d	 d
 ƒd d „ ƒ Z
 d „  Z d S(   sÑ   
Read graphs in LEDA format.

LEDA is a C++ class library for efficient data types and algorithms.

Format
------
See http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html

s   Aric Hagberg (hagberg@lanl.gov)t	   read_ledat
   parse_ledaiÿÿÿÿN(   t   NetworkXError(   t	   open_filet   is_string_likei    t   modet   rbs   UTF-8c            s&   ‡  f d †  |  Dƒ } t  | ƒ } | S(   s±  Read graph in LEDA format from path.

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

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

    Examples
    --------
    G=nx.read_leda('file.leda')

    References
    ----------
    .. [1] http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html
    c         3   s   |  ] } | j  ˆ  ƒ Vq d  S(   N(   t   decode(   t   .0t   line(   t   encoding(    s6   lib/python2.7/site-packages/networkx/readwrite/leda.pys	   <genexpr>2   s    (   R   (   t   pathR
   t   linest   G(    (   R
   s6   lib/python2.7/site-packages/networkx/readwrite/leda.pyR       s    c         C   s  t  |  ƒ r$ t |  j d ƒ ƒ }  n  t g  |  D]? } | j d ƒ p[ | j d ƒ p[ | d k s. | j d ƒ ^ q. ƒ }  x t d ƒ D] } t |  ƒ qƒ Wt t |  ƒ ƒ } | d k rÄ t j	 ƒ  } n t j
 ƒ  } t t |  ƒ ƒ } i  } x[ t d | d ƒ D]F } t |  ƒ j ƒ  j d ƒ } | d k r8t | ƒ } n  | | | <qü W| j g  | j ƒ  D] \ } } | ^ qYƒ t t |  ƒ ƒ }	 x… t |	 ƒ D]w } y" t |  ƒ j ƒ  \ } }
 } } Wn t d | d ƒ ‚ n X| j | t | ƒ | t |
 ƒ d	 | d
 d !ƒq‘W| S(   s|  Read graph in LEDA format from string or iterable.

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

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

    Examples
    --------
    G=nx.parse_leda(string)

    References
    ----------
    .. [1] http://www.algorithmic-solutions.info/leda_guide/graphs/leda_native_graph_fileformat.html
    s   
t   #t    i   iÿÿÿÿi   s   |{}|  s$   Too few fields in LEDA.GRAPH edge %dt   labeli   iþÿÿÿ(   R   t   itert   splitt
   startswitht   rstript   ranget   nextt   intt   nxt   DiGrapht   Grapht   stript   strt   add_nodes_fromt   itemsR   t   add_edge(   R   R	   t   it   duR   t   nt   nodet   symbolt   st   mt   tt   reversalR   (    (    s6   lib/python2.7/site-packages/networkx/readwrite/leda.pyR   7   s4    B,"5(   t   __doc__t
   __author__t   __all__t   networkxR   t   networkx.exceptionR   t   networkx.utilsR   R   R    R   (    (    (    s6   lib/python2.7/site-packages/networkx/readwrite/leda.pyt   <module>
   s   