
    \Mh*"                         d Z ddlZddlZddlmZ g dZd Z edd          dd
            Z edd           ej	        dd          dd                        Z
 ej	        dd          d             Zd ZdS )a
  
*****
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.

    N)	open_file)
read_pajekparse_pajekgenerate_pajekwrite_pajekc              #     K   | j         dk    rd}n| j         }d|                                  V  t          |           }t          t	          |t          dt          |          dz                                 }|D ]}| j                            |i           	                                }|
                    dd          }|
                    dd          }	 t          |
                    d||                             }n## t          $ r}	|	xj        d	z  c_         d
}	~	ww xY w|||<   |
                    dd          }
d                    t          t           |||||
f                    }|                                D ]\  }}t%          |t&                    r>|                                dk    r&|dt!          |           dt!          |           z  }Xt+          j        d| dt%          |t&                    rdnd d           |V  |                                 rdV  ndV  |                     d          D ]\  }}}|	                                }|
                    dd          }d                    t          t           ||         ||         |f                    }|                                D ]\  }}t%          |t&                    r>|                                dk    r&|dt!          |           dt!          |           z  }Xt+          j        d| dt%          |t&                    rdnd d           |V  d
S )zGenerate 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.
     NetworkXz
*vertices    xg        yid)zSPajek format requires 'id' to be an int(). Refer to the 'Relabeling nodes' section.Nshapeellipse zNode attribute z is not processed. zEmpty attributezNon-string attribute.*arcs*edgesT)dataweightg      ?zEdge attribute )nameorderlistdictziprangelennodesgetcopypopint
ValueErrorargsjoinmap	make_qstritems
isinstancestrstripwarningswarnis_directededges)Gr   r   
nodenumbernnar   r   r   errr   skvuedgedatadvalues                     X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/networkx/readwrite/pajek.pyr   r      s      	v||v #qwwyy
"
""""GGEc%q#e**q.!9!9::;;J   W[[B$$&&FF3FF3		RVVD*Q-0011BB 	 	 	HH  HH 	 
1w	**HHSRAq%$899::HHJJ 	 	DAq!S!! aggii2oo6166	!666 Ea  E  ER\]^`cRdRd  >A=N=N  kA  E  E  E     	}} ''t',,  1hMMOOh$$HHSZ]JqM5$IJJKKGGII 	 	DAq!S!! aggii2oo6166	!666 Ea  E  ER\]^`cRdRd  >A=N=N  kA  E  E  E     s   )D
D$DD$r   wb)modeUTF-8c                     t          |           D ]/}|dz  }|                    |                    |                     0dS )a  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.netP4")

    Warnings
    --------
    Optional node attributes and edge attributes must be non-empty strings.
    Otherwise it will not be written into the file. You will need to
    convert those attributes to strings if you want to keep them.

    References
    ----------
    See http://vlado.fmf.uni-lj.si/pub/networks/pajek/doc/draweps.htm
    for format information.
    
N)r   writeencode)r0   pathencodinglines       r<   r   r   c   sO    8 q!! * *

4;;x(())))* *    rbT)graphsreturns_graphc                 >    fd| D             }t          |          S )a`  Read graph in Pajek format from path.

    Parameters
    ----------
    path : file or string
       Filename or file handle to read.
       Filenames ending in .gz or .bz2 will be decompressed.

    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   B   K   | ]}|                               V  d S )Ndecode).0rF   rE   s     r<   	<genexpr>zread_pajek.<locals>.<genexpr>   s/      44tT[[""444444rG   )r   )rD   rE   liness    ` r<   r   r      s,    < 5444t444EurG   c                 `
   ddl }t          | t                    r"t          |                     d                    } t          d | D                       } t          j                    }g | r	 t          |           }n#  Y nxY w|                                	                    d          r7	 |                    dd          \  }}||j
        d<   nW# t          $ r Y nJw xY w|                                	                    d          ri }|                                \  }}t          t          |                    D ]h}t          |           }	 d	 |                    t          |                              d
                    D             }	n2# t          $ r% |                    t          |                    }	Y nw xY w|	dd         \  }
}                    |           |                    |           |||
<   |
|j        |         d<   	 |	dd         \  }}}|j        |                             t)          |          t)          |          |d           n#  Y nxY wt+          |	ddd         |	ddd                   }|j        |                             |           jn}|                                	                    d          s(|                                	                    d          r|                                	                    d          rt          j        |          }|                                	                    d          r|                                }| D ]H}	 d |                    t          |                              d
                    D             }	n2# t          $ r% |                    t          |                    }	Y nw xY wt1          |	          dk     r|	dd         \  }}|                    ||          }|                    ||          }i }	 |	dd         }|                    dt)          |d                   i           n#  Y nxY wt+          |	ddd         |	ddd                   }|                    |            |j        ||fi | Jnk|                                	                    d          rDt          j        |          }fdt9          |           D             }|                    |           | |S )zParse Pajek format graph from string or iterable.

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

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

    See Also
    --------
    read_pajek

    r   NrA   c                 8    g | ]}|                     d           S )rA   )rstrip)rO   rF   s     r<   
<listcomp>zparse_pajek.<locals>.<listcomp>   s$    666$++d##666rG   z*networkr   r   z	*verticesc                 8    g | ]}|                     d           S utf-8rM   rO   r   s     r<   rU   zparse_pajek.<locals>.<listcomp>   1     ! ! !./))! ! !rG   rX      r      )r   r   r      r   r   z*edgec                 8    g | ]}|                     d           S rW   rM   rY   s     r<   rU   zparse_pajek.<locals>.<listcomp>   rZ   rG      r      z*matrixc              3      K   | ]a\  }}t          |                                          D ]:\  }}t          |          d k    |         |         dt          |          ifV  ;bdS )r   r   N)	enumeratesplitr"   )rO   rowrF   colr   labelss        r<   rP   zparse_pajek.<locals>.<genexpr>  s        S$#,TZZ\\#:#:   S$t99>> fSkHc$ii+@A ">>>>	 rG   )shlexr)   r*   iterrc   nxMultiDiGraphnextlower
startswithgraphr#   r   r"   rC   AttributeErrorappendadd_noder   updatefloatr   
MultiGraphto_directedr   r   add_edgeDiGraphrb   add_edges_from)rQ   rg   r0   llabelr   
nodelabelsnnodesi	splitliner   r   r   r   
extra_attruivir8   r7   	edge_datawadj_listrf   s                         @r<   r   r      sj   $ LLL % (U[[&&''6666677E
AF
 Q'	UAA	E7799
++ L	''ggdA..t
 #'	    
 WWYY!!+.. D	'J		IAv3v;;'' 2 2KK4! !38;;s1vv}}W?U?U3V3V! ! !II & 4 4 4 %CFF 3 3III4%acN	Ee$$$

5!!!!&
2')t$"+AaC.KAq%GEN))#AhhU1XXFF   D 14a4)ADqD/BB
%%j1111+2, WWYY!!(++ +	'qwwyy/C/CG/L/L +	'wwyy##G,, %M!$$wwyy##G,, $MMOO . .4! !38;;s1vv}}W?U?U3V3V! ! !II & 4 4 4 %CFF 3 3III4 y>>A%%"1Q3BNN2r**NN2r**	!!A#A$$had%<====D !14a4)ADqD/BB
  ,,, 
1a--9----7.8 WWYY!!),, 	'
1A   #,U#3#3  H X&&&c  Q'f Hs[   /A? ?B/C 
C"!C"?F,GGAI!!I%9?N99,O('O(;4Q00Q4c                 b    t          | t                    st          |           } d| v rd|  d} | S )zcReturns the string representation of t.
    Add outer double-quotes if the string has a space.
    r   ")r)   r*   )ts    r<   r'   r'     s<     a FF
axxHHHHrG   )r?   )__doc__r,   networkxri   networkx.utilsr   __all__r   r   _dispatchabler   r   r'    rG   r<   <module>r      s           $ $ $ $ $ $
H
H
HG G GT 14* * * *@ 14T222   32 @ T222l l 32l^    rG   