o
    ˷eN                     @   s   d dl Z d dlZ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 dZedd	 ZG d
d dZdS )    N)literal_eval)contextmanager)dedent)literal_destringizerliteral_stringizerc                   @   s   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&	TestGraphc                 C   s
   d| _ d S )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)cls r
   X/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/readwrite/tests/test_gml.pysetup_class   s   
zTestGraph.setup_classc                 C   s   d}t | d S )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_exampler
   r
   r   test_parse_gml_cytoscape_bug=   s   Qz&TestGraph.test_parse_gml_cytoscape_bugc                 C   s   t j| jdd}t| g dksJ dd t| D g dks%J dd t|jdd	D d
ddddddfddddifdd
ddifgksLJ d S )Nlabelr   Node 1Node 2Node 3c                 S      g | ]}|qS r
   r
   .0er
   r
   r   
<listcomp>       z,TestGraph.test_parse_gml.<locals>.<listcomp>))r   r   )r   r   )r   r   c                 S   r   r
   r
   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   Gr
   r
   r   test_parse_gml   s   "zTestGraph.test_parse_gmlc                 C   s   t  \}}t|d}|| j |  tj|dd}tj| jdd}t	|j
ddt	|j
ddks6J t	|jddt	|jddksHJ t| t| d S )Nwr   r   Tr   )tempfilemkstempopenwriter   closer   read_gmlr   r%   r&   r'   osunlink)r   fdfnamefhGinr)   r
   r
   r   test_read_gml   s   
$$
zTestGraph.test_read_gmlc                 C   s:   d}t  }|d dt j|td}||ksJ d S )Nz0graph [
  node [
    id 0
    label "1203"
  ]
]i  

stringizer)r   Graphadd_nodejoingenerate_gmlr   )r   answerr)   r   r
   r
   r   test_labels_are_strings   s
   
z!TestGraph.test_labels_are_stringsc                 C   s8   d}t |d}|d tjtjtj|dd d S )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   NetworkXErrorr1   )r   r   r6   r
   r
   r   test_relabel_duplicate   s   
z TestGraph.test_relabel_duplicatec                 C   s<   t  }|dd dt j|td}d}||ksJ d S )N)r      )rJ   r   r9   r:   zgraph [
  node [
    id 0
    label "(0,1)"
  ]
  node [
    id 1
    label "(1,0)"
  ]
  edge [
    source 0
    target 1
  ]
])r   OrderedGraphadd_edger>   r?   r   )r   r)   r   r@   r
   r
   r   test_tuplelabels   s
   zTestGraph.test_tuplelabelsc                 C   sn   t d}d|_dtd }||jd d< t }t || |d |	 
 d}d}||ks5J d S )	NrJ   zpath_graph(1)z*This is "quoted" and this is a copyright:    r   demo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,   NamedTemporaryFile	write_gmlrE   readstripdecode)r   r)   attrfobjr   r@   r
   r
   r   test_quotes   s   

zTestGraph.test_quotesc                 C   sb   dt d }t }|| t }t|| |d | 	 
d}d}||ks/J d S )NnoderN   r   rP   z6graph [
  node [
    id 0
    label "node&#169;"
  ]
])rS   r   r<   r=   r,   rT   rU   rE   rV   rW   rX   r   r\   r)   rZ   r   r@   r
   r
   r   test_unicode_node  s   

zTestGraph.test_unicode_nodec                 C   sZ   d}t  }|| t }t || |d |  	d}d}||ks+J d S )Ng      ?r   rP   z/graph [
  node [
    id 0
    label "1.0"
  ]
])
r   r<   r=   r,   rT   rU   rE   rV   rW   rX   r]   r
   r
   r   test_float_label  s   

zTestGraph.test_float_labelc                    s  t dt dt dg}zdd l}||j|j|jd g7 }W n ty*   ||7 }Y nw tt|}tt	|}t
||d t|j  fddt	|D }t||d	 t }t|| |d |  d
}d}||ksvJ |d t|}t	|D ]J\}	}
|jt|	 d }t|
rt|sJ n||
ksJ  |	 }t|d t|d f}|j| d	 }t|
rt|sJ q||
ksJ qd S )Nnanz+infz-infr   	nodefloatc                    s   i | ]	\}} | |qS r
   r
   )r   ivaluer'   r
   r   
<dictcomp>2      z6TestGraph.test_special_float_label.<locals>.<dictcomp>	edgefloatrP   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
  ]
]rJ   )floatnumpyr`   infImportErrorr   cycle_graphlendict	enumerateset_node_attributeslistr'   set_edge_attributesr,   rT   rU   rE   rV   rW   rX   r1   r&   strmathisnan)r   special_floatsnpr)   attrsrZ   r   r@   graphindxrd   
node_valueedgestring_edge
edge_valuer
   re   r   test_special_float_label%  sB   

>



z"TestGraph.test_special_float_labelc                 C   sF   t d}d|jd ksJ t d}d|jksJ d|jvs!J d S )Nz*graph [ name "x" node [ id 0 label "x" ] ]xrR   z!graph [ node [ id 0 label "x" ] ] )r   r   rz   rR   r(   r
   r
   r   	test_name  s
   

zTestGraph.test_namec                 C   s   dD ]v}dD ]q}d}|d ur|dt t| 7 }|d ur&|dt t| 7 }|d7 }|d7 }|d7 }t|}t|| ksAJ t|| ksKJ d}|d	u rU|d
7 }|d	u r]|d7 }|d7 }|rg|d7 }|d7 }|dt|kswJ qqd S )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  ]
]r9   )	rt   intr   r   boolis_directedis_multigraphr>   r?   )r   directed
multigraphgmlr)   r
   r
   r   test_graph_types  s2   
zTestGraph.test_graph_typesc              
   C   sR  ddddddddt d	d
idgg}|t d |td t }||_||jd< |jddt|dd |j	ddd|d d
tj|td}tj|td}||jksWJ ||d|jksaJ t|jdddtdt|ddfgkswJ t|jddddtd|dfgksJ t }d|jd< tjt|td}|jd dksJ d S )NTFl      Fx:^V gF"'z"&&amp;&&#34;")   DD  )rJ      )r   3iDD z{2.3j, 1 - 2.3j, ()}r   r   ra   r   )r   r   g      )ri   r   r9   r:   )destringizer)rR   r   frozenset([1, 2, 3]))rS   appendr   r   r<   rR   rz   r=   ro   rL   r>   r?   r   r   r   rr   r&   r'   )r   r   r)   r   r
   r
   r   test_data_types  s2   	
,(
zTestGraph.test_data_typesc                 C   sX   d}t |}dtd d |jksJ dt |}d}d| d }||ks*J d S )	NzTgraph [
  name "&amp;&#34;&#xf;&#x4444;&#1234567890;&#x1234567890abcdef;&unknown;"
]z&"r   z*&#1234567890;&#x1234567890abcdef;&unknown;r9   z##1234567890;&#38;#x1234567890abcdefz,graph [
  name "&#38;&#34;&#15;&#17476;&#38;z;&#38;unknown;"
])r   r   rS   rR   r>   r?   )r   r   r)   alnur@   r
   r
   r   test_escape_unescape  s   
zTestGraph.test_escape_unescapec                 C   s>  t ttd t ttd t ttt t tttg d t ttt t }|t	j
d  |d t tjtj| W d    n1 sLw   Y  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 |d td |d |d |d  td! td" td# |d$ td% td& td' |d( d)d* }t }d+|jd+< || t }d+|jd,< || t }tg d|jd-< ||td. t }g |jd-< || ||td. d S )/N(r   rJ   r   r!   s   graph[]r   c                 S   s   t tjtj|  d S N)rF   rG   r   rH   r   )r   r
   r
   r   assert_parse_error  s   z5TestGraph.test_exceptions.<locals>.assert_parse_errorz	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 ]uK   graph [edge [ source u'uĐ0' target u'uĐ0' ] node [ id u'uĐ0' label b ] ]c                     s   t tj fdd d S )Nc                      s   t tj i S r   )rr   r   r?   r
   argskwargsr
   r   <lambda>2  s    zJTestGraph.test_exceptions.<locals>.assert_generate_error.<locals>.<lambda>)rF   rG   r   rH   r   r
   r   r   assert_generate_error0  s   z8TestGraph.test_exceptions.<locals>.assert_generate_errorr!   r   r   r:   )rF   rG   
ValueErrorr   r   	frozensetr,   TemporaryFiler/   codecsBOM_UTF8rE   r   rH   r1   r   r<   rz   rn   )r   fr   r   r)   r
   r
   r   test_exceptions  s   






zTestGraph.test_exceptionsc                    s   t j| jdd t jg dksJ  fddt jD }|g dks'J t j| jd d t jg dks:J  fddt jD }|g dksNJ d S )Nr   r   r   c                       g | ]	} j | d  qS r   r&   r   nr)   r
   r   r   F  rg   z.TestGraph.test_label_kwarg.<locals>.<listcomp>r   c                    r   r   r   r   r   r
   r   r   K  rg   )r   r   r   r%   r&   )r   labelsr
   r   r   test_label_kwargC  s   zTestGraph.test_label_kwargc              	   C   s   t  }dddddddd}|jdi | t \}}z=t || t |}|jd	  D ]\}}|d
ks;|dkrDt	|t
ksCJ q/t	|tksLJ q/W t| t| d S t| t| w )Nl    i   r      il        )toosmallsmallmed1med2med3bigtoobigNoder   r   )r   )r   r<   r=   r,   r-   rU   r1   r&   itemstypert   r   r2   r0   r3   )r   r)   numbersr4   r5   G2rY   rd   r
   r
   r   test_outofrange_integersN  s.   	


z"TestGraph.test_outofrange_integersN)__name__
__module____qualname__classmethodr   r   r*   r8   rA   rI   rM   r[   r^   r_   r   r   r   r   r   r   r   r   r
   r
   r
   r   r      s(    
+Uf ar   c                  c   s    t  } | V  | d d S )Nr   )rB   rC   rE   )_file_handler
   r
   r   	byte_filen  s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestPropertyListsc                 C   sl   t  }|jdg dd t }t || W d    n1 s!w   Y  |  }|tdks4J d S )Nn1)elementr   rJ         @TF
propertiesa7              graph [
              node [
                id 0
                label "n1"
                properties "element"
                properties 0
                properties 1
                properties 2.5
                properties 1
                properties 0
              ]
            ]
        r   r<   r=   r   rU   rV   rX   r   r   gr   resultr
   r
   r   3test_writing_graph_with_multi_element_property_listv  s   zETestPropertyLists.test_writing_graph_with_multi_element_property_listc                 C   sj   t  }|jddgd t }t || W d    n1 s w   Y  |  }|tdks3J d S )Nr   r   r   z            graph [
              node [
                id 0
                label "n1"
                properties "_networkx_list_start"
                properties "element"
              ]
            ]
        r   r   r
   r
   r   1test_writing_graph_with_one_element_property_list  s   zCTestPropertyLists.test_writing_graph_with_one_element_property_listc                 C   sr   t  }|tdd |d t|}W d    n1 s"w   Y  |jddd dg diks7J d S )	Na  
              graph [
                node [
                  id 0
                  label "n1"
                  properties "element"
                  properties 0
                  properties 1
                  properties 2.5
                ]
              ]
            rP   r   Tr   r   r   )r   r   rJ   r   r   r/   r   rD   rE   r   r1   r&   r   r   rz   r
   r
   r   %test_reading_graph_with_list_property  s   
$z7TestPropertyLists.test_reading_graph_with_list_propertyc                 C   sp   t  }|tdd |d t|}W d    n1 s"w   Y  |jddd ddgiks6J d S )	Nz
              graph [
                node [
                  id 0
                  label "n1"
                  properties "_networkx_list_start"
                  properties "element"
                ]
              ]
            rP   r   Tr   r   r   r   r   r   r
   r
   r   4test_reading_graph_with_single_element_list_property  s   
"zFTestPropertyLists.test_reading_graph_with_single_element_list_propertyN)r   r   r   r   r   r   r   r
   r
   r
   r   r   u  s
    r   )r   rB   ru   r2   r,   astr   
contextlibr   textwrapr   rF   networkxr   networkx.readwrite.gmlr   r   r   r   r   r
   r
   r
   r   <module>   s&        b
