B
    ²ô`-  ã               @   sb   d dl Z d dlZd dlmZmZmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZ G dd„ dƒZdS )é    N)Úassert_nodes_equalÚassert_edges_equalÚassert_graphs_equal)Úto_networkx_graphÚto_dict_of_dictsÚfrom_dict_of_dictsÚto_dict_of_listsÚfrom_dict_of_lists)Úbarbell_graphÚcycle_graphc               @   sd   e Z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 )ÚTestConvertc             C   s$   t dd„ |D ƒƒt dd„ |D ƒƒkS )Nc             s   s   | ]}t |ƒV  qd S )N)Úsorted)Ú.0Úe© r   úJ/home/dcms/DCMS/lib/python3.7/site-packages/networkx/tests/test_convert.pyú	<genexpr>   s    z.TestConvert.edgelists_equal.<locals>.<genexpr>)r   )ÚselfÚe1Úe2r   r   r   Úedgelists_equal   s    zTestConvert.edgelists_equalc             C   s¸   x²t tfttfgD ]ž\}}tddƒ}i |_||ƒ}||ƒ}t||ƒ t|ƒ}t||ƒ t 	|¡}t||ƒ t 
d¡}t 
d¡}	i |_i |	_||dddgd}t 	|¡}
t|
|	ƒ qW d S )Né
   é   é   r   é   é   )Únodelist)r   r   r   r	   r
   Úgraphr   r   ÚnxÚGraphÚ
path_graph)r   ÚdestÚsourceÚGÚdodÚGGÚGWÚGIZP4ZP3ZGdodr   r   r   Útest_simple_graphs   s&    







zTestConvert.test_simple_graphsc             C   s„   G dd„ dƒ}t  tjt|¡ G dd„ dƒ}t  tjt|¡ ddi}t  tt|¡ G dd„ dƒ}t  tjt|¡ t  tjtd¡ d S )Nc               @   s   e Zd ZdZdS )z&TestConvert.test_exceptions.<locals>.GN)Ú__name__Ú
__module__Ú__qualname__Zadjr   r   r   r   r#   /   s   r#   c               @   s   e Zd ZdZdS )z&TestConvert.test_exceptions.<locals>.GN)r)   r*   r+   Z	is_strictr   r   r   r   r#   5   s   Úar   c               @   s   e Zd ZdZdS )z&TestConvert.test_exceptions.<locals>.GN)r)   r*   r+   Únextr   r   r   r   r#   ?   s   )ÚpytestZraisesr   ZNetworkXErrorr   Ú	TypeError)r   r#   r   r   r   Útest_exceptions-   s    zTestConvert.test_exceptionsc             C   sÚ  xÒt tfttfgD ]¼\}}tdƒ}||ƒ}||ƒ}tt| ¡ ƒt| ¡ ƒƒ tt| 	¡ ƒt| 	¡ ƒƒ t
|ƒ}tt| ¡ ƒt| ¡ ƒƒ tt| 	¡ ƒt| 	¡ ƒƒ t |¡}tt| ¡ ƒt| ¡ ƒƒ tt| 	¡ ƒt| 	¡ ƒƒ tdtjd}||ƒ}||tjd}t| ¡ ƒt| ¡ ƒks&t‚t| 	¡ ƒt| 	¡ ƒksDt‚t
|tjd}t| ¡ ƒt| ¡ ƒkspt‚t| 	¡ ƒt| 	¡ ƒksŽt‚t |¡}t| ¡ ƒt| ¡ ƒks¶t‚t| 	¡ ƒt| 	¡ ƒkst‚qW d S )Nr   )Úcreate_using)r   r   r   r	   r   r   r   Únodesr   Úedgesr   r   r   ÚDiGraphÚAssertionError)r   r!   r"   r#   r$   r%   r&   r'   r   r   r   Útest_digraphsG   s2    

zTestConvert.test_digraphsc       	      C   sÜ  t  d¡}t  ¡ }| |¡ | dd„ | ¡ D ƒ¡ t|ƒ}t|t jd}tt	| 
¡ ƒt	| 
¡ ƒƒ tt	| ¡ ƒt	| ¡ ƒƒ t|t jd}tt	| 
¡ ƒt	| 
¡ ƒƒ tt	| ¡ ƒt	| ¡ ƒƒ t  |¡}t	| 
¡ ƒt	| 
¡ ƒksæt‚t	| ¡ ƒt	| ¡ ƒkst‚t|ƒ}t|t jd}dd„ |jddD ƒ}tt	| 
¡ ƒt	| 
¡ ƒƒ t|t	|jddƒƒ t|t jd}tt	| 
¡ ƒt	| 
¡ ƒƒ t|t	|jddƒƒ t  |¡}tt	| 
¡ ƒt	| 
¡ ƒƒ t|t	|jddƒƒ d S )	Nr   c             s   s   | ]\}}|||fV  qd S )Nr   )r   ÚuÚvr   r   r   r   j   s    z)TestConvert.test_graph.<locals>.<genexpr>)r1   c             S   s   g | ]\}}}||i f‘qS r   r   )r   r7   r8   Údr   r   r   ú
<listcomp>|   s    z*TestConvert.test_graph.<locals>.<listcomp>T)Údata)r   r   r   Úadd_nodes_fromÚadd_weighted_edges_fromr3   r   r   r   r   r2   r   r   r5   r   r	   )	r   Úgr#   r$   r%   r&   r'   ÚdolÚenoner   r   r   Ú
test_graphf   s2    



zTestConvert.test_graphc             C   sx  t dƒ}t ¡ }| |¡ | dd„ | ¡ D ƒ¡ t ¡ }| |¡ | dd„ | ¡ D ƒ¡ |jdddd t ¡ }| |¡ | d	d„ | ¡ D ƒ¡ |jddd
d t|ƒ}t	|tjd}t
| ¡ | ¡ ƒ t| ¡ | ¡ ƒ t|tjd}t
| ¡ | ¡ ƒ t| ¡ | ¡ ƒ t |¡}t
| ¡ | ¡ ƒ t| ¡ | ¡ ƒ t|ƒ}	t|	tjd}dd„ |jddD ƒ}
t
t| ¡ ƒt| ¡ ƒƒ t|
t|jddƒƒ t|	tjd}t
t| ¡ ƒt| ¡ ƒƒ t|
t|jddƒƒ t |	¡}t
t| ¡ ƒt| ¡ ƒƒ t|
t|jddƒƒ t|ƒ}t	|tjdd}t
t| ¡ ƒt| ¡ ƒƒ tt| ¡ ƒt| ¡ ƒƒ t|tjdd}t
t| ¡ ƒt| ¡ ƒƒ tt| ¡ ƒt| ¡ ƒƒ t |¡}t
t| ¡ ƒt| ¡ ƒƒ t| ¡ ƒt| ¡ ƒkræt‚t	|tjdd}t
t| ¡ ƒt| ¡ ƒƒ t| ¡ ƒt| ¡ ƒks.t‚t |¡}t
t| ¡ ƒt| ¡ ƒƒ tt| ¡ ƒt| ¡ ƒƒ t |¡}t
t| ¡ ƒt| ¡ ƒƒ tt| ¡ ƒt| ¡ ƒƒ t|ƒ}	t|	tjd}t
t| ¡ ƒt| ¡ ƒƒ tt| ¡ ƒt| ¡ ƒƒ t|	tjd}t
t| ¡ ƒt| ¡ ƒƒ tt| ¡ ƒt| ¡ ƒƒ t |	¡}t
t| ¡ ƒt| ¡ ƒƒ tt| ¡ ƒt| ¡ ƒƒ d S )Nr   c             s   s   | ]\}}|||fV  qd S )Nr   )r   r7   r8   r   r   r   r   Š   s    z>TestConvert.test_with_multiedges_self_loops.<locals>.<genexpr>c             s   s   | ]\}}|||fV  qd S )Nr   )r   r7   r8   r   r   r   r      s    r   r   r   )Úweightc             s   s   | ]\}}|||fV  qd S )Nr   )r   r7   r8   r   r   r   r   ‘   s    éd   )r1   c             S   s   g | ]\}}}||i f‘qS r   r   )r   r7   r8   r9   r   r   r   r:   ¦   s    z?TestConvert.test_with_multiedges_self_loops.<locals>.<listcomp>T)r;   )r1   Zmultigraph_inputF)r   r   r   r<   r=   r3   Ú
MultiGraphZadd_edger   r   r   r2   r   r   r   r	   r   r5   )r   r#   ZXGZXGMZXGSr$   r%   r&   r'   r?   r@   ZGEZGMr   r   r   Útest_with_multiedges_self_loops†   s|    








z+TestConvert.test_with_multiedges_self_loopsc             C   sf  t  d¡}dddg}t  |¡}tt| ¡ ƒt| ¡ ƒƒ tt| ¡ ƒt| ¡ ƒƒ tt|jddƒt|jddƒƒ ddi fdd	i fd	d
i fg}t  |¡}tt| ¡ ƒt| ¡ ƒƒ tt| ¡ ƒt| ¡ ƒƒ tt|jddƒt|jddƒƒ dd„ td
ƒD ƒ}t  |¡}tt| ¡ ƒt| ¡ ƒƒ tt| ¡ ƒt| ¡ ƒƒ tt|jddƒt|jddƒƒ d S )Nr   )r   r   )r   r   )r   r   T)r;   r   r   r   r   c             s   s   | ]}||d  fV  qdS )r   Nr   )r   Únr   r   r   r   ã   s    z-TestConvert.test_edgelists.<locals>.<genexpr>)	r   r    r   r   r   r2   r   r3   Úrange)r   ÚPr   r#   r   r   r   Útest_edgelistsÕ   s     


"
"
zTestConvert.test_edgelistsc             C   s  dddg}dddg}|   t t |¡¡ ¡ |¡s4t‚|   t t |¡¡ ¡ |¡sTt‚|   t t |¡¡ ¡ |¡stt‚|   t t |¡¡ ¡ |¡s”t‚|   t t |¡¡ ¡ |¡s´t‚|   t t |¡¡ ¡ |¡sÔt‚|   t t |¡¡ ¡ |¡sôt‚|   t t |¡¡ ¡ |¡st‚d S )N)r   r   )r   r   )r   r   )r   r   )r   r   r   r4   r3   r5   rD   ZMultiDiGraph)r   Zedges1Zedges2r   r   r   Útest_directed_to_undirectedé   s    

     z'TestConvert.test_directed_to_undirectedc             C   s^   t  ¡ }| d¡ t|t jd}t|jƒt|jƒks8t‚t  |¡}t|jƒt|jƒksZt‚d S )NÚabc)r1   )r   ZOrderedGraphr<   r   Úlistr2   r5   ZOrderedDiGraph)r   r#   ÚHr   r   r   Útest_attribute_dict_integrityû   s    

z)TestConvert.test_attribute_dict_integrityc             C   s4   t  dg¡}t j|t|ƒd}t|jdd|ƒ d S )N)r   r   )r   T)r;   )r   r   Zto_edgelistrL   r   r3   )r   r#   Zelistr   r   r   Útest_to_edgelist  s    zTestConvert.test_to_edgelistc                sp   G dd„ dt ƒ‰ G ‡ fdd„dtjƒ}t ¡ }|jddd ||ƒ}t|jd t ƒsXt‚t|jd ˆ ƒslt‚d S )Nc               @   s   e Zd ZdS )zGTestConvert.test_custom_node_attr_dict_safekeeping.<locals>.custom_dictN)r)   r*   r+   r   r   r   r   Úcustom_dict
  s   rP   c                   s   e Zd Z” ZdS )zBTestConvert.test_custom_node_attr_dict_safekeeping.<locals>.CustomN)r)   r*   r+   Znode_attr_dict_factoryr   )rP   r   r   ÚCustom  s   rQ   r   )rB   )Údictr   r   Úadd_nodeÚ
isinstanceÚ_noder5   )r   rQ   r>   Úhr   )rP   r   Ú&test_custom_node_attr_dict_safekeeping	  s    z2TestConvert.test_custom_node_attr_dict_safekeepingN)r)   r*   r+   r   r(   r0   r6   rA   rE   rI   rJ   rN   rO   rW   r   r   r   r   r      s    O	r   )r.   Znetworkxr   Znetworkx.testingr   r   r   Znetworkx.convertr   r   r   r   r	   Znetworkx.generators.classicr
   r   r   r   r   r   r   Ú<module>   s
   