
    ިsgS                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	Z	d dl
Zd dlmZmZ  G d d      Zed        Z G d	 d
      Ze	j$                  j'                  dg df      d        Zy)    N)literal_eval)contextmanager)dedent)literal_destringizerliteral_stringizerc                       e Zd Zed        Zd Zd Zd Zd Zd Z	e
j                  j                  ddef      d	        Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)	TestGraphc                     d| _         y )Na2  Creator "me"
Version "xx"
graph [
 comment "This is a sample graph"
 directed 1
 IsPlanar 1
 pos  [ x 0 y 1 ]
 node [
   id 1
   label "Node 1"
   pos [ x 1 y 1 ]
 ]
 node [
    id 2
    pos [ x 1 y 2 ]
    label "Node 2"
    ]
  node [
    id 3
    label "Node 3"
    pos [ x 1 y 3 ]
  ]
  edge [
    source 1
    target 2
    label "Edge from node 1 to node 2"
    color [line "blue" thickness 3]

  ]
  edge [
    source 2
    target 3
    label "Edge from node 2 to node 3"
  ]
  edge [
    source 3
    target 1
    label "Edge from node 3 to node 1"
  ]
]
)simple_data)clss    T/var/www/html/venv/lib/python3.12/site-packages/networkx/readwrite/tests/test_gml.pysetup_classzTestGraph.setup_class   s    (    c                 2    d}t        j                  |       y )Nas  
Creator "Cytoscape"
Version 1.0
graph   [
    node    [
        root_index  -3
        id  -3
        graphics    [
            x   -96.0
            y   -67.0
            w   40.0
            h   40.0
            fill    "#ff9999"
            type    "ellipse"
            outline "#666666"
            outline_width   1.5
        ]
        label   "node2"
    ]
    node    [
        root_index  -2
        id  -2
        graphics    [
            x   63.0
            y   37.0
            w   40.0
            h   40.0
            fill    "#ff9999"
            type    "ellipse"
            outline "#666666"
            outline_width   1.5
        ]
        label   "node1"
    ]
    node    [
        root_index  -1
        id  -1
        graphics    [
            x   -31.0
            y   -17.0
            w   40.0
            h   40.0
            fill    "#ff9999"
            type    "ellipse"
            outline "#666666"
            outline_width   1.5
        ]
        label   "node0"
    ]
    edge    [
        root_index  -2
        target  -2
        source  -1
        graphics    [
            width   1.5
            fill    "#0000ff"
            type    "line"
            Line    [
            ]
            source_arrow    0
            target_arrow    3
        ]
        label   "DirectedEdge"
    ]
    edge    [
        root_index  -1
        target  -1
        source  -3
        graphics    [
            width   1.5
            fill    "#0000ff"
            type    "line"
            Line    [
            ]
            source_arrow    0
            target_arrow    3
        ]
        label   "DirectedEdge"
    ]
]
)nx	parse_gml)selfcytoscape_examples     r   test_parse_gml_cytoscape_bugz&TestGraph.test_parse_gml_cytoscape_bug;   s    Pb 	&'r   c                 2   t        j                  | j                  d      }t        |j	                               g dk(  sJ t        |j                               g dk(  sJ t        |j                  d            ddd	d
dddfddddifddddifgk(  sJ y )Nlabelr   Node 1Node 2Node 3))r   r   )r   r   )r   r   Tdatar   r   blue   )line	thicknesszEdge from node 1 to node 2)colorr   r   zEdge from node 2 to node 3zEdge from node 3 to node 1)r   r   r   sortednodesedgesr   Gs     r   test_parse_gmlzTestGraph.test_parse_gml   s    LL))9aggi $BBBBaggi  %
 
 	
 
 agg4g()&,1=9 x'+G!HIx'+G!HI.
 
 	
 
r   c                    |dz  }t        |d      5 }|j                  | j                         d d d        t        j                  |d      }t        j
                  | j                  d      }t        |j                  d            t        |j                  d            k(  sJ t        |j                  d            t        |j                  d            k(  sJ y # 1 sw Y   xY w)Ntest.gmlwr   r   Tr   )	openwriter   r   read_gmlr   r$   r%   r&   )r   tmp_pathfnamefhGinr(   s         r   test_read_gmlzTestGraph.test_read_gml   s    :%% 	'HHT%%&	'kk%w/LL))9agg4g()VCII4I4H-IIIIagg4g()VCII4I4H-IIII	' 	's   C!!C*c                     d}t        j                         }|j                  d       dj                  t        j                  |t
                    }||k(  sJ y )Nz0graph [
  node [
    id 0
    label "1203"
  ]
]i  

stringizer)r   Graphadd_nodejoingenerate_gmlr   )r   answerr(   r   s       r   test_labels_are_stringsz!TestGraph.test_labels_are_strings   sH     HHJ	

4yy7IJKv~~r   c                     d}t        j                  |j                  d            }|j                  d       t	        j
                  t        j                  t        j                  |d       y )Nz
graph
[
        label   ""
        directed        1
        node
        [
                id      0
                label   "same"
        ]
        node
        [
                id      1
                label   "same"
        ]
]
zUTF-8r   r   r   )	ioBytesIOencodeseekpytestraisesr   NetworkXErrorr/   )r   r   r2   s      r   test_relabel_duplicatez TestGraph.test_relabel_duplicate   sI    " ZZG,-

b&&RwGr   r8   Nc                     t        j                         }|j                  dd       dj                  t        j                  ||            }d}||k(  sJ y )N)r      )rI   r   r6   r7   zgraph [
  node [
    id 0
    label "(0,1)"
  ]
  node [
    id 1
    label "(1,0)"
  ]
  edge [
    source 0
    target 1
  ]
])r   r9   add_edger;   r<   )r   r8   r(   r   r=   s        r   test_tuplelabelszTestGraph.test_tuplelabels   sK     HHJ	

66"yyzBC v~~r   c                 ~   t        j                  d      }d|_        dt        d      z   }||j                  d   d<   t        |dz  d      5 }t        j                  ||       |j                  d       |j                         j                         j                  d	      }d d d        d
}|k(  sJ y # 1 sw Y   xY w)NrI   zpath_graph(1)z*This is "quoted" and this is a copyright:    r   demor+   w+basciizgraph [
  name "path_graph(1)"
  node [
    id 0
    label "0"
    demo "This is &#34;quoted&#34; and this is a copyright: &#169;"
  ]
])r   
path_graphnamechrr%   r-   	write_gmlrC   readstripdecode)r   r0   r(   attrfobjr   r=   s          r   test_quoteszTestGraph.test_quotes   s     MM! ;c#hF!
6(Z'/ 	74LLD!IIaL99;$$&--g6D		7
 v~~	7 	7s   AB33B<c                 l   dt        d      z   }t        j                         }|j                  |       t	        |dz  d      5 }t        j
                  ||       |j                  d       |j                         j                         j                  d      }d d d        d}|k(  sJ y # 1 sw Y   xY w)NnoderM   r+   rO   r   rP   z6graph [
  node [
    id 0
    label "node&#169;"
  ]
])
rS   r   r9   r:   r-   rT   rC   rU   rV   rW   r   r0   r\   r(   rY   r   r=   s          r   test_unicode_nodezTestGraph.test_unicode_node   s    C HHJ	

4(Z'/ 	74LLD!IIaL99;$$&--g6D		7
 v~~	7 	7s   AB**B3c                 T   d}t        j                         }|j                  |       t        |dz  d      5 }t        j                  ||       |j                  d       |j                         j                         j                  d      }d d d        d}|k(  sJ y # 1 sw Y   xY w)Ng      ?r+   rO   r   rP   z/graph [
  node [
    id 0
    label "1.0"
  ]
])	r   r9   r:   r-   rT   rC   rU   rV   rW   r]   s          r   test_float_labelzTestGraph.test_float_label  s    HHJ	

4(Z'/ 	74LLD!IIaL99;$$&--g6D		7
 v~~	7 	7s   ABB'c                    t        d      t        d      t        d      g}	 dd l}||j                  |j                  |j                  dz  gz  }t        j                  t        |            }t        t        |            }t        j                  ||d       t        |j                        }t        |      D ci c]  \  }}||   | }}}t        j                  ||d       t        |dz  d	      5 }	t        j                  ||	       |	j!                  d       |	j#                         j%                         j'                  d
      }
d}|
|k(  sJ |	j!                  d       t        j(                  |	      }t        |      D ]  \  }}|j*                  t-        |         d   }t/        j0                  |      rt/        j0                  |      s	J ||k(  sJ ||   }t-        |d         t-        |d         f}|j                  |   d   }t/        j0                  |      rt/        j0                  |      rJ ||k(  rJ  	 d d d        y # t        $ r	 ||z  }Y w xY wc c}}w # 1 sw Y   y xY w)Nnanz+infz-infr   	nodefloat	edgefloatr+   rO   rP   a  graph [
  node [
    id 0
    label "0"
    nodefloat NAN
  ]
  node [
    id 1
    label "1"
    nodefloat +INF
  ]
  node [
    id 2
    label "2"
    nodefloat -INF
  ]
  node [
    id 3
    label "3"
    nodefloat NAN
  ]
  node [
    id 4
    label "4"
    nodefloat +INF
  ]
  node [
    id 5
    label "5"
    nodefloat -INF
  ]
  edge [
    source 0
    target 1
    edgefloat NAN
  ]
  edge [
    source 0
    target 5
    edgefloat +INF
  ]
  edge [
    source 1
    target 2
    edgefloat -INF
  ]
  edge [
    source 2
    target 3
    edgefloat NAN
  ]
  edge [
    source 3
    target 4
    edgefloat +INF
  ]
  edge [
    source 4
    target 5
    edgefloat -INF
  ]
]rI   )floatnumpyrb   infImportErrorr   cycle_graphlendict	enumerateset_node_attributeslistr&   set_edge_attributesr-   rT   rC   rU   rV   rW   r/   r%   strmathisnan)r   r0   special_floatsnpr(   attrsr&   ivaluerY   r   r=   graphindx
node_valueedgestring_edge
edge_values                     r   test_special_float_labelz"TestGraph.test_special_float_label!  s1   ,fuV}E	-rvvrvvrvv{;;N NN3~./Y~./
q%5QWW1:>1JKXQq5KK
q%5(Z'/ T	/4LLD!IIaL99;$$&--g6D=F| 6>!>IIaLKK%E(8 /e"[[T3K@
::e$::j111%...T{"47|Sa\:"[[5kB
::e$::j111%.../OT	/ T	/  	-n,N	- LT	/ T	/s0   -I
 ;I4E I%5I%=I%
II%I.c                     t        j                  d      }d|j                  d   k(  sJ t        j                  d      }d|j                  k(  sJ d|j                  vsJ y )Nz*graph [ name "x" node [ id 0 label "x" ] ]xrR   z!graph [ node [ id 0 label "x" ] ] )r   r   ry   rR   r'   s     r   	test_namezTestGraph.test_name  sX    LLEFaggfo%%%LL<=QVV||QWW$$$r   c           	         dD ]  }dD ]  }d}||dt        t        |            z   z  }||dt        t        |            z   z  }|dz  }|dz  }|dz  }t        j                  |      }t	        |      |j                         k(  sJ t	        |      |j                         k(  sJ d}|d	u r|d
z  }|d	u r|dz  }|dz  }|r|dz  }|dz  }|dj                  t        j                  |            k(  rJ   y )N)NFTzgraph [z
 directed z multigraph z node [ id 0 label "0" ]z edge [ source 0 target 0 ]z ]zgraph [
Tz  directed 1
z  multigraph 1
zG  node [
    id 0
    label "0"
  ]
  edge [
    source 0
    target 0
z
    key 0
z  ]
]r6   )	rq   intr   r   boolis_directedis_multigraphr;   r<   )r   directed
multigraphgmlr(   s        r   test_graph_typeszTestGraph.test_graph_types  s2   + 	<H1 <
'<#c(m*<<<C)>CJ,@@@C1144tLL%H~888J'1??+<<<<!t#++C%--C   =(Cxdii(:;;;;9<	<r   c                    ddddddddt        d	      d
idgg}|j                  t        d             |j                  t        d             t        j                         }||_        ||j                  d<   |j                  ddd|i       |j                  ddd|       dj                  t        j                  |t                    }t        j                  |t              }||j
                  k(  sJ ||d|j                  k(  sJ t        |j                  d            ddd|idfgk(  sJ t        |j!                  d            ddd|dfgk(  sJ t        j                         }d|j                  d<   t        j                  t        j                  |      t              }|j                  d   dk(  sJ y )NTFl      Fx:^V gF"'z"&&amp;&&#34;")   DD  )rI      )r   3iDD z{2.3j, 1 - 2.3j, ()}r   r   rc   )r   r   g      )rf   r   r6   r7   destringizer)rR   r   r   frozenset([1, 2, 3]))rS   appendr   r   r9   rR   ry   r:   rJ   r;   r<   r   r   r   ro   r%   r&   )r   r   r(   r   s       r   test_data_typeszTestGraph.test_data_types  s   &#f+v6A
 	CL!L!789HHJ	

1"FD>
2	

1at$
/ii6HIJLL+?@qvv~~d+qww666AGGG&'QVTN0S,T+UUUUAGGG&'QT43P,Q+RRRRHHJ0LL+,Gwwv"8888r   c                     d}t        j                  |      }dt        d      z   dz   |j                  k(  sJ dj	                  t        j
                  |            }d}d|z   dz   }||k(  sJ y )	NzTgraph [
  name "&amp;&#34;&#xf;&#x4444;&#1234567890;&#x1234567890abcdef;&unknown;"
]z&"r   z*&#1234567890;&#x1234567890abcdef;&unknown;r6   z##1234567890;&#38;#x1234567890abcdefz,graph [
  name "&#38;&#34;&#15;&#17476;&#38;z;&#38;unknown;"
])r   r   rS   rR   r;   r<   )r   r   r(   alnur=   s        r   test_escape_unescapezTestGraph.test_escape_unescape  s     LLs6{"%QQvv	
 ii*+4( 	 }}r   c                 ^   t        j                  t        t        d       t        j                  t        t        d       t        j                  t        t        t               t        j                  t        t        t        g d             t        j                  t        t        t               t        |dz  d      5 }|j                  t        j                  dz          |j                  d       t        j                  t        j                  t        j                  |       d d d        d } |d	d
g        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d        |d       t        j                  dd        |d        |d        |d        |d       t        j                  d        |d        |d         |d!       t        j                  d"       t        j                  d#       t        j                  d$        |d%       t        j                  d&       t        j                  d'       t        j                  d(        |d)       d* }t        j                         }d+|j                   d+<    ||       t        j                         }d+|j                   d,<    ||       t        j                         }t        g d      |j                   d-<    ||t        .       y # 1 sw Y   xY w)/N(r   rI   r   r    r+   rO   s   graph[]r   c                 j    t        j                  t        j                  t        j                  |        y N)rD   rE   r   rF   r   )r   s    r   assert_parse_errorz5TestGraph.test_exceptions.<locals>.assert_parse_error  s    MM"**BLL#>r   z	graph [

]r   z
Creator ""0zgraph ]zgraph [ 1 ]zgraph [ 1.E+2 ]zgraph [ "A" ]zgraph [ ] graph ]zgraph [ ] graph [ ]zgraph [ data [1, 2, 3] ]zgraph [ node [ ] ]zgraph [ node [ id 0 ] ]zgraph [ node [ id "a" ] ]idr   z5graph [ node [ id 0 label 0 ] node [ id 0 label 1 ] ]z5graph [ node [ id 0 label 0 ] node [ id 1 label 0 ] ]z(graph [ node [ id 0 label 0 ] edge [ ] ]z1graph [ node [ id 0 label 0 ] edge [ source 0 ] ]z9graph [edge [ source 0 target 0 ] node [ id 0 label 0 ] ]z:graph [ node [ id 0 label 0 ] edge [ source 1 target 0 ] ]z:graph [ node [ id 0 label 0 ] edge [ source 0 target 1 ] ]zkgraph [ node [ id 0 label 0 ] node [ id 1 label 1 ] edge [ source 0 target 1 ] edge [ source 1 target 0 ] ]zvgraph [ node [ id 0 label 0 ] node [ id 1 label 1 ] edge [ source 0 target 1 ] edge [ source 1 target 0 ] directed 1 ]zwgraph [ node [ id 0 label 0 ] node [ id 1 label 1 ] edge [ source 0 target 1 ] edge [ source 0 target 1 ]multigraph 1 ]z}graph [ node [ id 0 label 0 ] node [ id 1 label 1 ] edge [ source 0 target 1 key 0 ] edge [ source 0 target 1 ]multigraph 1 ]zgraph [ node [ id 0 label 0 ] node [ id 1 label 1 ] edge [ source 0 target 1 key 0 ] edge [ source 0 target 1 key 0 ]multigraph 1 ]zgraph [ node [ id 0 label 0 ] node [ id 1 label 1 ] edge [ source 0 target 1 key 0 ] edge [ source 1 target 0 key 0 ]directed 1 multigraph 1 ]z9graph [edge [ source a target a ] node [ id a label b ] ]zgraph [ node [ id n42 label 0 ] node [ id x43 label 1 ]edge [ source n42 target x43 key 0 ]edge [ source x43 target n42 key 0 ]directed 1 multigraph 1 ]uE   graph [edge [ source '䈀' target '䈀' ] node [ id '䈀' label b ] ]c                  X     t        j                  t        j                   fd       y )Nc                  @    t        t        j                   i       S r   )ro   r   r<   argskwargss   r   <lambda>zJTestGraph.test_exceptions.<locals>.assert_generate_error.<locals>.<lambda>.  s    $r/O/O*P r   )rD   rE   r   rF   r   s   ``r   assert_generate_errorz8TestGraph.test_exceptions.<locals>.assert_generate_error,  s    MM  "Pr   r    r   r   r7   )rD   rE   
ValueErrorr   r   	frozensetr-   r.   codecsBOM_UTF8rC   r   rF   r/   r   r9   ry   )r   r0   fr   r   r(   s         r   test_exceptionszTestGraph.test_exceptions  s   j"6<j"68NOj"68LMj"4i	6JKj"46HI(Z'/ 	<1GGFOOj01FF1IMM"**BKK;	<
	? 	M3/02<(39%=),-?+./0156/045
0=RSRSEFNO
PQWXWXF	
 		

 		

 		

 		

 	(	
 	PQ
(	
 	/	

	
 HHJ
a HHJa HHJ#I.a,>?k	< 	<s   >A'L""L,c                    t        j                  | j                  d      }t        |j                        g dk(  sJ t        |j                        D cg c]  }|j                  |   d    }}|g dk(  sJ t        j                  | j                  d       }t        |j                        g dk(  sJ t        |j                        D cg c]  }|j                  |   d    }}|g dk(  sJ y c c}w c c}w )Nr   r   r   r   r   )r   r   r   r$   r%   )r   r(   nlabelss       r   test_label_kwargzTestGraph.test_label_kwarg;  s    LL))6agg)+++/5agg?!!''!*W%??7777LL))6agg)+++/5agg?!!''!*W%??7777 @
 @s   C2C7c                 t   t        j                         }dddddddd} |j                  di | |d
z  }t        j                  ||       t        j                  |      }|j
                  d	   j                         D ]8  \  }}|dk(  s|dk(  rt        |      t        k(  r#J t        |      t        k(  r8J  y )Nl    i   r      il        )toosmallsmallmed1med2med3bigtoobigNoder+   r   r   )r   )
r   r9   r:   rT   r/   r%   itemstyperq   r   )r   r0   r(   numbersr1   G2rX   rx   s           r   test_outofrange_integersz"TestGraph.test_outofrange_integersF  s     HHJ '
 	

%W%:%
Q[[88F+113 	*KD%z!TX%5E{c)))E{c)))		*r   c                 `    d}t        j                  |      }|j                  d   dddk(  sJ y )Nz
graph
[
    node
    [
	    id 0
	    label "multiline node"
	    label2 "multiline1
    multiline2
    multiline3"
	    alt_name "id 0"
    ]
]
zmultiline nodez multiline1 multiline2 multiline3zid 0)label2alt_name)r   r   r%   )r   multiline_exampler(   s      r   test_multilinezTestGraph.test_multilinea  sB     LL*+ww'(8-
 
 	
 
r   )__name__
__module____qualname__classmethodr   r   r)   r4   r>   rG   rD   markparametrizer   rK   rZ   r^   r`   r   r   r   r   r   r   r   r   r    r   r   r	   r	      s    ) )VS(j
,JH, [[\D2D+EF G,,""d/L%<@98([@z	8*6
r   r	   c               #   ^   K   t        j                         } |  | j                  d       y w)Nr   )r@   rA   rC   )_file_handles    r   	byte_filer   x  s%     ::<L
as   +-c                   $    e Zd Zd Zd Zd Zd Zy)TestPropertyListsc                    t        j                         }|j                  dg d       t               5 }t        j                  ||       d d d        j                         j                         }|t        d      k(  sJ y # 1 sw Y   8xY w)Nn1)elementr   rI         @TF
propertiesa7              graph [
              node [
                id 0
                label "n1"
                properties "element"
                properties 0
                properties 1
                properties 2.5
                properties 1
                properties 0
              ]
            ]
        r   r9   r:   r   rT   rU   rW   r   r   gr   results       r   3test_writing_graph_with_multi_element_property_listzETestPropertyLists.test_writing_graph_with_multi_element_property_list  sx    HHJ	

4$G
H[ 	ALLA	"
 
 	
 
		 	s   BBc                    t        j                         }|j                  ddg       t               5 }t        j                  ||       d d d        j                         j                         }|t        d      k(  sJ y # 1 sw Y   8xY w)Nr   r   r   z            graph [
              node [
                id 0
                label "n1"
                properties "_networkx_list_start"
                properties "element"
              ]
            ]
        r   r   s       r   1test_writing_graph_with_one_element_property_listzCTestPropertyLists.test_writing_graph_with_one_element_property_list  sy    HHJ	

4YK
0[ 	ALLA	"	
 
 	
 
		 	s   BB
c                    t               5 }|j                  t        d      j                  d             |j	                  d       t        j                  |      }d d d        j                  d      d   dg dik(  sJ y # 1 sw Y   (xY w)	Na  
              graph [
                node [
                  id 0
                  label "n1"
                  properties "element"
                  properties 0
                  properties 1
                  properties 2.5
                ]
              ]
            rP   r   Tr   r   r   )r   r   rI   r   r   r.   r   rB   rC   r   r/   r%   r   r   ry   s      r   %test_reading_graph_with_list_propertyz7TestPropertyLists.test_reading_graph_with_list_property  s    [ 	#AGG &/  FF1IKKNE%	#& {{{%d+>T/UUUU'	# 	#s   ABBc                    t               5 }|j                  t        d      j                  d             |j	                  d       t        j                  |      }d d d        j                  d      d   ddgik(  sJ y # 1 sw Y   'xY w)	Nz
              graph [
                node [
                  id 0
                  label "n1"
                  properties "_networkx_list_start"
                  properties "element"
                ]
              ]
            rP   r   Tr   r   r   r   r   r   s      r   4test_reading_graph_with_single_element_list_propertyzFTestPropertyLists.test_reading_graph_with_single_element_list_property  s    [ 	#AGG	 &/ FF1IKKNE!	#" {{{%d+yk/JJJJ#	# 	#s   ABB
N)r   r   r   r   r   r   r   r   r   r   r   r     s    
0
(V,Kr   r   collr   c                 2   t        j                  d      }| |j                  d   d<   t        j                         }t        j
                  ||       |j                  d       t        j                  |      }|j                  d   d   | k(  sJ t        j                  |ddd      }t         j                  j                  ||      sJ |j                  d       t        j                  |t              }t         j                  j                  ||      sJ y )Nr   r   testr   rI   )r   1r   )r   rQ   r%   r@   rA   rT   rC   r/   relabel_nodesutilsgraphs_equalr   )r   r(   r   Hs       r   test_stringize_empty_list_tupler     s    
aAAGGAJv


ALLAFF1I
AA773<4''' 	!!,-A88  A&&& FF1I
AC(A88  A&&&r   )r   r@   rr   astr   
contextlibr   textwrapr   rD   networkxr   networkx.readwrite.gmlr   r   r	   r   r   r   r   r   r   r   r   <module>r      sy     	   %    Kg	
 g	
T  UK UKp "b*' +'r   