U
    ¹mœdVQ  ã                   @   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
   úZ/home/sam/Atlas/atlas_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sˆt‚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s�t‚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   z€graph [
  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Úasciizˆgraph [
  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sît‚| d¡ t |¡}t	|ƒD ]¢\}	}
|jt|	ƒ d }t |
¡�rBt |¡�sPt‚n||
k�sPt‚ˆ |	 }t|d ƒt|d ƒf}|j| d	 }t |
¡�rœt |¡�sªt‚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s‚t‚t|ƒ| ¡ ks–t‚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s¬t‚||dœ|jksÀt‚t|jdd�ƒddd|idœfgksèt‚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      Fµx:^V gœÉF"ã¦ØÆú'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 ]zƒgraph [ 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 ]zŽgraph [ 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 ] ]z˜graph [ 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s¤t‚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r„t|ƒtks”t‚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
 ||¡s¤t‚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