B
    ,[R                 @   sV   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dZ
dd ZdS )z
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

zAric Hagberg (hagberg@lanl.gov)	read_leda
parse_leda    N)NetworkXError)	open_fileis_string_likerb)modeUTF-8c                s    fdd| D }t |}|S )a  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   | ]}|  V  qd S )N)decode).0line)encoding 6lib/python3.7/site-packages/networkx/readwrite/leda.py	<genexpr>2   s    zread_leda.<locals>.<genexpr>)r   )pathr   linesGr   )r   r   r      s    c             C   sR  t | rt| d} tdd | D } xtdD ]}t|  q2W tt| }|dkr`t }nt }tt| }i }x@td|d D ].}t| 	 
d}|dkrt|}|||< qW |d	d | D  tt| }xnt|D ]b}yt|  \}}	}
}W n   td
|d  Y nX |j|t| |t|	 |dd d qW |S )a|  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
    
c             S   s2   g | ]*}| d s| ds|dks|dqS )#r    )
startswithrstrip)r   r   r   r   r   
<listcomp>M   s    zparse_leda.<locals>.<listcomp>      z|{}|  r   c             S   s   g | ]\}}|qS r   r   )r   isr   r   r   r   a   s    z$Too few fields in LEDA.GRAPH edge %d   )label)r   itersplitrangenextintnxZDiGraphZGraphr   stripstrZadd_nodes_fromitemsr   Zadd_edge)r   r   Zdur   nZnodeZsymbolmr   tZreversalr!   r   r   r   r   7   s2    
,)r	   )__doc__
__author____all__Znetworkxr'   Znetworkx.exceptionr   Znetworkx.utilsr   r   r   r   r   r   r   r   <module>
   s   
