
    wg""                         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y)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| j                           t        |       }t        t	        |t        dt        |      dz                     }|D ]6  }| j                  j                  |i       j                         }|j                  dd      }|j                  dd      }	 t        |j                  d||               }|||<   |j                  dd      }
dj                  t        t         |||||
f            }|j#                         D ]t  \  }}t%        |t&              r1|j)                         dk7  r|dt!        |       dt!        |       z  }Gt+        j,                  d| dt%        |t&              rdnd d       v | 9 | j/                         rd nd | j1                  d      D ]  \  }}}|j                         }|j                  dd      }dj                  t        t         ||   ||   |f            }|j#                         D ]t  \  }}t%        |t&              r1|j)                         dk7  r|dt!        |       dt!        |       z  }Gt+        j,                  d| dt%        |t&              rdnd d       v |  y
# t        $ r}	|	xj                  d	z  c_         d
}	~	ww xY ww)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                     ]/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/networkx/readwrite/pajek.pyr   r      s     	vv|vv qwwyk
""GEc%q#e*q.!9:;J  WW[[B$$&FF3FF3		RVVD*Q-01B 
1w	*HHSRAq%$89:HHJ 	DAq!S!aggi2oq1a	!~66%aS(;R\]^`cRd=N  kA  <C  CD  E		 7< 	}}''t', 1hMMOh$HHSZ]JqM5$IJKGGI 	DAq!S!aggi2oq1a	!~66%aS(;R\]^`cRd=N  kA  <C  CD  E		 5  	HH  H 	s+   B>KJ2GK2	K;KKKr   wb)modec                 n    t        |       D ]'  }|dz  }|j                  |j                  |             ) y)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.net")

    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   s6    8 q! *

4;;x()*    rbT)graphsreturns_graphc                 0    fd| D        }t        |      S )aZ  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   @   K   | ]  }|j                          y w)N)decode).0rE   rD   s     r<   	<genexpr>zread_pajek.<locals>.<genexpr>   s     4tT[["4s   )r   )rC   rD   liness    ` r<   r   r      s    < 5t4EurF   c                 &	   ddl }t        | t              rt        | j	                  d            } t        | D cg c]  }|j                  d       c}      } t        j                         }g | r	 t        |       }|j                         j                  d      r'	 |j	                  dd      \  }}||j                  d<   n@|j                         j                  d      r8i }|j	                         \  }}t        t        |            D ]	  }	t        |       }	 |j	                  t        |      j                  d            D 
cg c]  }
|
j!                  d       }}
|dd	 \  }}j%                  |       |j'                  |       |||<   ||j(                  |   d
<   	 |d	d \  }
}}|j(                  |   j+                  t-        |
      t-        |      |d       t/        |ddd	   |ddd	         }|j(                  |   j+                  |        n|j                         j                  d      s |j                         j                  d      rP|j                         j                  d      rt        j0                  |      }|j                         j                  d      r|j3                         }| D ]  }	 |j	                  t        |      j                  d            D 
cg c]  }
|
j!                  d       }}
t5        |      d	k  rX|dd	 \  }}j7                  ||      }|j7                  ||      }i }	 |d	d }|j+                  dt-        |d         i       t/        |ddd	   |ddd	         }|j+                  |        |j8                  ||fi |  nY|j                         j                  d      r:t        j:                  |      }fdt=        |       D        }|j?                  |       | r|S c c}w #  Y |S xY w# t        $ r Y w xY wc c}
w # t"        $ r |j	                  t        |            }Y w xY w#  Y yxY wc c}
w # t"        $ r |j	                  t        |            }Y w xY w#  Y &xY w)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   Nr@   z*networkr   r   z	*verticeszutf-8   r      )r   r   r      r   r   z*edge   r      z*matrixc              3      K   | ]L  \  }}t        |j                               D ]+  \  }}t        |      d k7  r|   |   dt        |      if - N yw)r   r   N)	enumeratesplitr"   )rM   rowrE   colr   labelss        r<   rN   zparse_pajek.<locals>.<genexpr>  sd      S$#,TZZ\#:  S$t9> fSkHc$i+@AAs   AA) shlexr)   r*   iterrX   rstripnxMultiDiGraphnextlower
startswithgraphr#   r   r"   rB   rL   AttributeErrorappendadd_noder   updatefloatr   
MultiGraphto_directedr   r   add_edgeDiGraphrW   add_edges_from)rO   r\   rE   r0   llabelr   
nodelabelsnnodesir   	splitliner   r   r   
extra_attruivir8   r7   	edge_datawadj_listr[   s                          @r<   r   r      s5   $  %U[[&'6$++d#67E
AF
	UA 779
+'ggdA.t
 #'WWY!!+.J	IAv3v;' 2K438;;s1v}}W?U3V!./)!I !
 &aN	Ee$

5!!&
2')t$"+Aa.KAq%GGEN))#AhU1XF
 !14a4)ADqD/B
%%j1+2, WWY!!(+qwwy/C/CG/Lwwy##G,MM!$wwy##G,MMO .438;;s1v}}W?U3V!./)!I ! y>A%"1QBNN2r*NN2r*	!!AA$$had%<=
 !14a4)ADqD/B
  , 

1a-9-7.8 WWY!!),

1A#,U#3H X&c f Hm 7	^ HW  ! & 4 %CF 3I4! & 4 %CF 3I4s   P	2P P +P*P%P*#=Q+Q!.QQ!$RP	P"!P"%P**#QQQQ!!#RRRc                 P    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'     s0     aF
axs!HHrF   )zUTF-8)__doc__r,   networkxr_   networkx.utilsr   __all__r   r   _dispatchabler   r   r'    rF   r<   <module>r      s       $
HGT 14* *@ 14T2 3 @ T2l 3l^rF   