a
    hVS                     @   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ejdg df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	e
jddef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
   O/var/www/auris/lib/python3.9/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)selfZ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 t| g dks@J t|jddddd	d
dddfddddifddddifgksJ d S )Nlabelr   Node 1Node 2Node 3))r   r   )r   r   )r   r   Tdatar   r   Zblue   )lineZ	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slJ t	|jddt	|jddksJ t| t| d S )Nwr   r   Tr   )tempfilemkstempopenwriter   closer   read_gmlr   r   r   r   osunlink)r   fdfnamefhZGinr    r
   r
   r   test_read_gml   s    
$$
zTestGraph.test_read_gmlc                 C   s:   d}t  }|d dt j|td}||ks6J 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   NetworkXErrorr(   )r   r   r-   r
   r
   r   test_relabel_duplicate   s    
z TestGraph.test_relabel_duplicater1   Nc                 C   s<   t  }|dd dt j||d}d}||ks8J d S )N)r      )r@   r   r/   r0   zgraph [
  node [
    id 0
    label "(0,1)"
  ]
  node [
    id 1
    label "(1,0)"
  ]
  edge [
    source 0
    target 1
  ]
])r   r2   add_edger4   r5   )r   r1   r    r   r6   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sjJ d S )	Nr@   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_gmlr;   readstripdecode)r   r    attrfobjr   r6   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noderC   r   rE   z6graph [
  node [
    id 0
    label "node&#169;"
  ]
])rH   r   r2   r3   r#   rI   rJ   r;   rK   rL   rM   r   rQ   r    rO   r   r6   r
   r
   r   test_unicode_node  s    

zTestGraph.test_unicode_nodec                 C   sZ   d}t  }|| t }t || |d |  	d}d}||ksVJ d S )Ng      ?r   rE   z/graph [
  node [
    id 0
    label "1.0"
  ]
])
r   r2   r3   r#   rI   rJ   r;   rK   rL   rM   rR   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yT   ||7 }Y n0 tt|}tt	|}t
||d t|j  fddt	|D }t||d	 t }t|| |d |  d
}d}||ksJ |d t|}t	|D ]\}	}
|jt|	 d }t|
r@t|sNJ n||
ksNJ  |	 }t|d t|d f}|j| d	 }t|
rt|sJ n||
ksJ qd S )Nnanz+infz-infr   Z	nodefloatc                    s   i | ]\}} | |qS r
   r
   ).0ivaluer   r
   r   
<dictcomp>3      z6TestGraph.test_special_float_label.<locals>.<dictcomp>Z	edgefloatrE   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
  ]
]r@   )floatnumpyrU   infImportErrorr   Zcycle_graphlendict	enumerateZset_node_attributeslistr   Zset_edge_attributesr#   rI   rJ   r;   rK   rL   rM   r(   r   strmathisnan)r   Zspecial_floatsnpr    attrsrO   r   r6   graphZindxrY   Z
node_valueZedgeZstring_edgeZ
edge_valuer
   rZ   r   test_special_float_label&  s>    

>

z"TestGraph.test_special_float_labelc                 C   sF   t d}d|jd ksJ t d}d|jks4J d|jvsBJ d S )Nz*graph [ name "x" node [ id 0 label "x" ] ]xrG   z!graph [ node [ id 0 label "x" ] ] )r   r   rj   rG   r   r
   r
   r   	test_name  s
    

zTestGraph.test_namec                 C   s   dD ]}dD ]}d}|d ur0|dt t| 7 }|d urL|dt t| 7 }|d7 }|d7 }|d7 }t|}t|| ksJ t|| ksJ d}|d	u r|d
7 }|d	u r|d7 }|d7 }|r|d7 }|d7 }|dt|ksJ 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  ]
]r/   )	re   intr   r   boolZis_directedZis_multigraphr4   r5   )r   ZdirectedZ
multigraphgmlr    r
   r
   r   test_graph_types  s.    
zTestGraph.test_graph_typesc              
   C   sN  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d|id |jddd|d d	tj
|td}tj|td}||jksJ ||d|jksJ t|jddddd|idfgksJ t|jddddd|dfgksJ t }d|jd< tjt
|td}|jd dksJJ d S )NTFl      Fx:^V gF"'z"&&amp;&&#34;")   DD  )r@      )rw   3iDD z{2.3j, 1 - 2.3j, ()}r   r   rV   )ro   r   g      )r]   r   r/   r0   Zdestringizer)rG   r   r   frozenset([1, 2, 3]))rH   appendr   r   r2   rG   rj   r3   rA   r4   r5   r   r   r   rd   r   r   )r   r   r    rq   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sTJ d S )	NzTgraph [
  name "&amp;&#34;&#xf;&#x4444;&#1234567890;&#x1234567890abcdef;&unknown;"
]z&"rv   z*&#1234567890;&#x1234567890abcdef;&unknown;r/   z##1234567890;&#38;#x1234567890abcdefz,graph [
  name "&#38;&#34;&#15;&#17476;&#38;z;&#38;unknown;"
])r   r   rH   rG   r4   r5   )r   rq   r    Zalnur6   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 s0    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. d S )/N(rz   r@   rw   r   s   graph[]r   c                 S   s   t tjtj|  d S N)r<   r=   r   r>   r   )rq   r
   r
   r   assert_parse_error  s    z5TestGraph.test_exceptions.<locals>.assert_parse_errorz	graph [

]rm   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   )rd   r   r5   r
   argskwargsr
   r   <lambda>3  r\   zJTestGraph.test_exceptions.<locals>.assert_generate_error.<locals>.<lambda>)r<   r=   r   r>   r   r
   r   r   assert_generate_error1  s    z8TestGraph.test_exceptions.<locals>.assert_generate_errorr   rx   r   r0   )r<   r=   
ValueErrorr   r   	frozensetr#   TemporaryFiler&   codecsBOM_UTF8r;   r   r>   r(   r   r2   rj   )r   fr   r   r    r
   r
   r   test_exceptions  s    

0



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sNJ t j| jd d t jg dkstJ  fddt jD }|g dksJ d S )Nr   r   r   c                    s   g | ]} j | d  qS r   r   rW   nr    r
   r   
<listcomp>C  r\   z.TestGraph.test_label_kwarg.<locals>.<listcomp>r   c                    s   g | ]} j | d  qS r   r   r   r   r
   r   r   H  r\   )r   r   r   r   r   )r   labelsr
   r   r   test_label_kwarg@  s    zTestGraph.test_label_kwargc              	   C   s   t  }dddddddd}|jdi | t \}}zxt || t |}|jd	  D ]:\}}|d
ksv|dkrt	|t
ksJ q^t	|tks^J q^W t| t| nt| t| 0 d S )Nl    i   r      il        )toosmallsmallZmed1Zmed2Zmed3bigtoobigNoder   r   )r   )r   r2   r3   r#   r$   rJ   r(   r   itemstypere   ro   r)   r'   r*   )r   r    Znumbersr+   r,   ZG2rN   rY   r
   r
   r   test_outofrange_integersK  s,    	


z"TestGraph.test_outofrange_integersc                 C   s*   d}t |}|jd dddks&J d S )Nz
graph
[
    node
    [
	    id 0
	    label "multiline node"
	    label2 "multiline1
    multiline2
    multiline3"
	    alt_name "id 0"
    ]
]
zmultiline nodez multiline1 multiline2 multiline3zid 0)label2Zalt_name)r   r   r   )r   Zmultiline_exampler    r
   r
   r   test_multilinej  s    
zTestGraph.test_multiline)__name__
__module____qualname__classmethodr   r   r!   r.   r7   r?   r<   markparametrizer   rB   rP   rS   rT   rk   rn   rr   r|   r}   r   r   r   r   r
   r
   r
   r   r      s*   
+U
f ]r   c                  c   s   t  } | V  | d d S )Nr   )r8   r9   r;   )Z_file_handler
   r
   r   	byte_file  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 sB0    Y  |  }|tdkshJ d S )Nn1)elementr   r@         @TF
propertiesa7              graph [
              node [
                id 0
                label "n1"
                properties "element"
                properties 0
                properties 1
                properties 2.5
                properties 1
                properties 0
              ]
            ]
        r   r2   r3   r   rJ   rK   rM   r   r   gr   resultr
   r
   r   3test_writing_graph_with_multi_element_property_list  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@0    Y  |  }|tdksfJ 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  8}|tdd |d t|}W d    n1 sD0    Y  |jddd dg diksnJ d S )	Na  
              graph [
                node [
                  id 0
                  label "n1"
                  properties "element"
                  properties 0
                  properties 1
                  properties 2.5
                ]
              ]
            rE   r   Tr   r   r   )r   r   r@   r   r   r&   r   r:   r;   r   r(   r   r   r   rj   r
   r
   r   %test_reading_graph_with_list_property  s    
(z7TestPropertyLists.test_reading_graph_with_list_propertyc                 C   sp   t  8}|tdd |d t|}W d    n1 sD0    Y  |jddd ddgikslJ d S )	Nz
              graph [
                node [
                  id 0
                  label "n1"
                  properties "_networkx_list_start"
                  properties "element"
                ]
              ]
            rE   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     s   r   collr
   c                 C   s   t d}| |jd d< t }t || |d t |}|jd d | ksVJ t |ddd}t j	
||szJ |d t j|td}t j	
||sJ d S )Nrw   r   testr   r@   )r   1ry   )r   rF   r   r8   r9   rJ   r;   r(   Zrelabel_nodesutilsZgraphs_equalro   )r   r    r   Hr
   r
   r   test_stringize_empty_list_tuple  s    



r   )r   r8   rf   r)   r#   astr   
contextlibr   textwrapr   r<   Znetworkxr   Znetworkx.readwrite.gmlr   r   r   r   r   r   r   r   r
   r
   r
   r   <module>   s(       u
X