U
    -eVQ                     @   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	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
   b/var/www/html/Darija-Ai-Train/env/lib/python3.8/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| dddgks*tt| dddgksDt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std S )Nlabelr   Node 1Node 2Node 3)r   r   )r   r   )r   r   Tdatablue   )lineZ	thicknesszEdge from node 1 to node 2)colorr   zEdge from node 2 to node 3zEdge from node 3 to node 1)r   r   r   sortednodesAssertionError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sltt	|jddt	|jddkstt| t| d S )Nwr   r   Tr   )tempfilemkstempopenwriter   closer   read_gmlr   r   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s6td S )Nz0graph [
  node [
    id 0
    label "1203"
  ]
]i  
Z
stringizer)r   Graphadd_nodejoingenerate_gmlr   r   )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_duplicatec                 C   s<   t  }|dd dt j|td}d}||ks8td S )N)r      )r@   r   r0   r1   zgraph [
  node [
    id 0
    label "(0,1)"
  ]
  node [
    id 1
    label "(1,0)"
  ]
  edge [
    source 0
    target 1
  ]
])r   r2   add_edger4   r5   r   r   )r   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sjtd S )	Nr@   zpath_graph(1)z*This is "quoted" and this is a copyright:    r   Z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decoder   )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^td S )NnoderC   r   rD   z6graph [
  node [
    id 0
    label "node&#169;"
  ]
])rG   r   r2   r3   r$   rH   rI   r;   rJ   rK   rL   r   r   rP   r!   rN   r   r6   r
   r
   r   test_unicode_node  s    

zTestGraph.test_unicode_nodec                 C   sZ   d}t  }|| t }t || |d |  	d}d}||ksVt
d S )Ng      ?r   rD   z/graph [
  node [
    id 0
    label "1.0"
  ]
])r   r2   r3   r$   rH   rI   r;   rJ   rK   rL   r   rQ   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k
rV   ||7 }Y nX tt|}tt	|}t
||d t|j  fddt	|D }t||d	 t }t|| |d |  d
}d}||kst|d t|}t	|D ]\}	}
|jt|	 d }t|
rBt|sPtn||
ksPt |	 }t|d t|d f}|j| d	 }t|
rt|stn||
ks
tq
d S )Nnanz+infz-infr   Z	nodefloatc                    s   i | ]\}} | |qS r
   r
   ).0ivaluer   r
   r   
<dictcomp>2  s      z6TestGraph.test_special_float_label.<locals>.<dictcomp>Z	edgefloatrD   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numpyrT   infImportErrorr   Zcycle_graphlendict	enumerateZset_node_attributeslistr   Zset_edge_attributesr$   rH   rI   r;   rJ   rK   rL   r   r)   r   strmathisnan)r   Zspecial_floatsnpr!   attrsrN   r   r6   graphZindxrX   Z
node_valueedgeZstring_edgeZ
edge_valuer
   rY   r   test_special_float_label%  s>    

>

z"TestGraph.test_special_float_labelc                 C   sF   t d}d|jd kstt d}d|jks4td|jksBtd S )Nz*graph [ name "x" node [ id 0 label "x" ] ]xrF   z!graph [ node [ id 0 label "x" ] ] )r   r   rh   r   rF   r    r
   r
   r   	test_name  s
    

zTestGraph.test_namec                 C   s   dD ]}dD ]}d}|d k	r0|dt t| 7 }|d k	rL|dt t| 7 }|d7 }|d7 }|d7 }t|}t|| kstt|| kstd}|d	kr|d
7 }|d	kr|d7 }|d7 }|r|d7 }|d7 }|dt	|kst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  ]
]r0   )
rc   intr   r   boolZis_directedr   Z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st||d|jkstt|jddddd|idfgkstt|jddddd|dfgkstt }d|jd< tjt
|td}|jd dksJtd S )NTFl      Fx:^V gF"'z"&&amp;&&#34;")   DD  )r@      )rv   3iDD z{2.3j, 1 - 2.3j, ()}r   r   rU   )rn   r   g      )r[   r   r0   r1   Zdestringizer)rF   r   r   frozenset([1, 2, 3]))rG   appendr   r   r2   rF   rh   r3   rA   r4   r5   r   r   r   r   rb   r   r   )r   r   r!   rp   r
   r
   r   test_data_types  s2    	
((
zTestGraph.test_data_typesc                 C   sX   d}t |}dtd d |jks(tdt |}d}d| d }||ksTtd S )	NzTgraph [
  name "&amp;&#34;&#xf;&#x4444;&#1234567890;&#x1234567890abcdef;&unknown;"
]z&"ru   z*&#1234567890;&#x1234567890abcdef;&unknown;r0   z##1234567890;&#38;#x1234567890abcdefz,graph [
  name "&#38;&#34;&#15;&#17476;&#38;z;&#38;unknown;"
])r   r   rG   rF   r   r4   r5   )r   rp   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dddg t ttt t 2}|t	j
d  |d t tjtj| W 5 Q R X 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dddg|jd.< ||td/ d S )0N(ry   r@   rv   r   s   graph[]r   c                 S   s   t tjtj|  d S N)r<   r=   r   r>   r   )rp   r
   r
   r   assert_parse_error  s    z5TestGraph.test_exceptions.<locals>.assert_parse_errorz	graph [

]rl   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 S r~   )rb   r   r5   r
   argskwargsr
   r   <lambda>2      zJTestGraph.test_exceptions.<locals>.assert_generate_error.<locals>.<lambda>)r<   r=   r   r>   r   r
   r   r   assert_generate_error0  s     z8TestGraph.test_exceptions.<locals>.assert_generate_errorrw   r   r1   )r<   r=   
ValueErrorr   r   	frozensetr$   TemporaryFiler'   codecsBOM_UTF8r;   r   r>   r)   r   r2   rh   )r   fr   r   r!   r
   r
   r   test_exceptions  s    





zTestGraph.test_exceptionsc                    s   t j| jdd t jdddgks(t fddt jD }|dd	d
gksRtt j| jd d t jdddgkszt fddt jD }|dd	d
gkstd S )Nr   r   r@   rv   r   c                    s   g | ]} j | d  qS r   r   rV   nr!   r
   r   
<listcomp>B  s     z.TestGraph.test_label_kwarg.<locals>.<listcomp>r   r   r   c                    s   g | ]} j | d  qS r   r   r   r   r
   r   r   G  s     )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| t \}}zdt || t 	|}|j
d	  D ]:\}}|d
ksr|dkrt|tkstqZt|tksZtqZW 5 t| t| X d S )Nl    i   r      il        )toosmallZsmallZmed1Zmed2Zmed3bigtoobigNoder   r   )r   )r   r2   r3   r$   r%   r*   r(   r+   rI   r)   r   itemstyperc   r   rn   )r   r!   numbersr,   r-   ZG2rM   rX   r
   r
   r   test_outofrange_integersJ  s(    	

z"TestGraph.test_outofrange_integersN)__name__
__module____qualname__classmethodr   r   r"   r/   r7   r?   rB   rO   rR   rS   rj   rm   rq   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_filej  s    r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestPropertyListsc              	   C   s`   t  }|jdddddddgd t }t || W 5 Q R X |  }|td	ks\t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   rI   rJ   rL   r   r   r   gr   resultr
   r
   r   3test_writing_graph_with_multi_element_property_listr  s    zETestPropertyLists.test_writing_graph_with_multi_element_property_listc              	   C   sV   t  }|jddgd t }t || W 5 Q R X |  }|tdksRt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   sb   t  .}|tdd |d t|}W 5 Q R X |jddd dddd	d
giks^td S )Na  
              graph [
                node [
                  id 0
                  label "n1"
                  properties "element"
                  properties 0
                  properties 1
                  properties 2.5
                ]
              ]
            rD   r   Tr   r   r   r   r@   r   	r   r'   r   r:   r;   r   r)   r   r   r   r   rh   r
   r
   r   %test_reading_graph_with_list_property  s    
z7TestPropertyLists.test_reading_graph_with_list_propertyc              	   C   s\   t  .}|tdd |d t|}W 5 Q R X |jddd ddgiksXtd S )	Nz
              graph [
                node [
                  id 0
                  label "n1"
                  properties "_networkx_list_start"
                  properties "element"
                ]
              ]
            rD   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   q  s   r   collr
   c                 C   s   t d}| |jd d< t }t || |d t |}|jd d | ksVtt 	|ddd}t j
||szt|d t j|td}t j
||std S )Nrv   r   testr   r@   )r   1rx   )r   rE   r   r8   r9   rI   r;   r)   r   Zrelabel_nodesutilsZgraphs_equalrn   )r   r!   r   Hr
   r
   r   test_stringize_empty_list_tuple  s    



r   )r   r8   rd   r*   r$   astr   
contextlibr   textwrapr   r<   Znetworkxr   Znetworkx.readwrite.gmlr   r   r   r   r   markZparametrizer   r
   r
   r
   r   <module>   s(       ^
X