U
    :vf»1  ã                	   @   s°   d dl Z d dlZd dlmZmZmZmZmZ d dl	m
Z
mZ d dlmZmZmZ G dd„ dƒZe j ddd	gd d
ddifd
dddifgf¡dd„ ƒZdd„ Zdd„ Zdd„ ZdS )é    N)Úfrom_dict_of_dictsÚfrom_dict_of_listsÚto_dict_of_dictsÚto_dict_of_listsÚto_networkx_graph)Úbarbell_graphÚcycle_graph)Úedges_equalÚgraphs_equalÚnodes_equalc                   @   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   ú?/tmp/pip-unpacked-wheel-_lngutwb/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Ä   t tfttffD ]®\}}tddƒ}i |_||ƒ}||ƒ}t||ƒsFt‚t|ƒ}t||ƒs\t‚t	 
|¡}t||ƒstt‚t	 d¡}t	 d¡}	i |_i |	_||dddgd}t	 
|¡}
t|
|	ƒst‚qd S )Né
   é   é   r   é   é   ©Únodelist)r   r   r   r   r   Úgraphr
   ÚAssertionErrorr   Ú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 r-   )r.   r/   r0   Z	is_strictr   r   r   r   r'   5   s   Úar   c                   @   s   e Zd ZdZdS r-   )r.   r/   r0   Únextr   r   r   r   r'   ?   s   )ÚpytestÚraisesr"   ÚNetworkXErrorr   Ú	TypeError)r   r'   r   r   r   Útest_exceptions-   s    zTestConvert.test_exceptionsc                 C   sì  t tfttffD ]Ô\}}tdƒ}||ƒ}||ƒ}tt| ¡ ƒt| ¡ ƒƒsPt‚t	t| 
¡ ƒt| 
¡ ƒƒsnt‚t|ƒ}tt| ¡ ƒt| ¡ ƒƒs”t‚t	t| 
¡ ƒt| 
¡ ƒƒs²t‚t |¡}tt| ¡ ƒt| ¡ ƒƒsÚt‚t	t| 
¡ ƒt| 
¡ ƒƒsøt‚tdtjd}||ƒ}||tjd}t| ¡ ƒt| ¡ ƒks:t‚t| 
¡ ƒt| 
¡ ƒksXt‚t|tjd}t| ¡ ƒt| ¡ ƒks„t‚t| 
¡ ƒt| 
¡ ƒks¢t‚t |¡}t| ¡ ƒt| ¡ ƒksÊt‚t| 
¡ ƒt| 
¡ ƒkst‚qd S )Nr   ©Úcreate_using)r   r   r   r   r   r   r   Únodesr!   r	   Úedgesr   r"   r#   ÚDiGraph)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	| 
¡ ƒƒsht‚tt	| ¡ ƒt	| ¡ ƒƒs†t‚t|t jd}tt	| 
¡ ƒt	| 
¡ ƒƒs²t‚tt	| ¡ ƒt	| ¡ ƒƒsÐ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	| 
¡ ƒƒs`t‚t|t	|jddƒƒs|t‚t|t jd}tt	| 
¡ ƒt	| 
¡ ƒƒsªt‚t|t	|jddƒƒsÆt‚t  |¡}tt	| 
¡ ƒt	| 
¡ ƒƒsðt‚t|t	|jddƒƒst‚d S )	Nr   c                 s   s   | ]\}}|||fV  qd S r   r   ©r   ÚuÚvr   r   r   r   j   s     z)TestConvert.test_graph.<locals>.<genexpr>r8   c                 S   s   g | ]\}}}||i f‘qS r   r   ©r   r?   r@   Údr   r   r   Ú
<listcomp>|   s     z*TestConvert.test_graph.<locals>.<listcomp>T©Údata)r"   r   r#   Úadd_nodes_fromÚadd_weighted_edges_fromr;   r   r   r   r   r:   r!   r	   r   r   r   )	r   Úgr'   r(   r)   r*   r+   ÚdolÚenoner   r   r   Ú
test_graphf   s2    


  
 zTestConvert.test_graphc                 C   s  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
| ¡ | ¡ ƒsÒt‚t| ¡ | ¡ ƒsèt‚t|tjd}t
| ¡ | ¡ ƒst‚t| ¡ | ¡ ƒs&t‚t |¡}t
| ¡ | ¡ ƒsHt‚t| ¡ | ¡ ƒs`t‚t|ƒ}	t|	tjd}dd„ |jddD ƒ}
t
t| ¡ ƒt| ¡ ƒƒs¬t‚t|
t|jddƒƒsÈt‚t|	tjd}t
t| ¡ ƒt| ¡ ƒƒsöt‚t|
t|jddƒƒst‚t |	¡}t
t| ¡ ƒt| ¡ ƒƒs<t‚t|
t|jddƒƒsXt‚t|ƒ}t	|tjdd}t
t| ¡ ƒt| ¡ ƒƒst‚tt| ¡ ƒt| ¡ ƒƒs°t‚t|tjdd}t
t| ¡ ƒt| ¡ ƒƒsàt‚tt| ¡ ƒt| ¡ ƒƒs t‚t |¡}t
t| ¡ ƒt| ¡ ƒƒs*t‚t| ¡ ƒt| ¡ ƒksHt‚t	|tjdd}t
t| ¡ ƒt| ¡ ƒƒsxt‚t| ¡ ƒt| ¡ ƒks–t‚t |¡}t
t| ¡ ƒt| ¡ ƒƒsÀt‚tt| ¡ ƒt| ¡ ƒƒsàt‚t |¡}t
t| ¡ ƒt| ¡ ƒƒs
t‚tt| ¡ ƒt| ¡ ƒƒs*t‚t|ƒ}	t|	tjd}t
t| ¡ ƒt| ¡ ƒƒs`t‚tt| ¡ ƒt| ¡ ƒƒs€t‚t|	tjd}t
t| ¡ ƒt| ¡ ƒƒs®t‚tt| ¡ ƒt| ¡ ƒƒsÎt‚t |	¡}t
t| ¡ ƒt| ¡ ƒƒsøt‚tt| ¡ ƒt| ¡ ƒƒst‚d S )Nr   c                 s   s   | ]\}}|||fV  qd S r   r   r>   r   r   r   r   Š   s     z>TestConvert.test_with_multiedges_self_loops.<locals>.<genexpr>c                 s   s   | ]\}}|||fV  qd S r   r   r>   r   r   r   r      s     r   r   r   ©Úweightc                 s   s   | ]\}}|||fV  qd S r   r   r>   r   r   r   r   ‘   s     éd   r8   c                 S   s   g | ]\}}}||i f‘qS r   r   rA   r   r   r   rC   ¦   s     z?TestConvert.test_with_multiedges_self_loops.<locals>.<listcomp>TrD   )r9   Zmultigraph_inputF)r   r"   r#   rF   rG   r;   Ú
MultiGraphÚadd_edger   r   r   r:   r!   r	   r   r   r   r   )r   r'   ZXGZXGMZXGSr(   r)   r*   r+   rI   rJ   ZGEZGMr   r   r   Útest_with_multiedges_self_loops†   s|    



  
     
  
  
      
 z+TestConvert.test_with_multiedges_self_loopsc                 C   s’  t  d¡}dddg}t  |¡}tt| ¡ ƒt| ¡ ƒƒs<t‚tt| ¡ ƒt| ¡ ƒƒsZt‚tt|jddƒt|jddƒƒs€t‚ddi fdd	i fd	d
i fg}t  |¡}tt| ¡ ƒt| ¡ ƒƒsÄt‚tt| ¡ ƒt| ¡ ƒƒsât‚tt|jddƒt|jddƒƒs
t‚dd„ t	d
ƒD ƒ}t  |¡}tt| ¡ ƒt| ¡ ƒƒsFt‚tt| ¡ ƒt| ¡ ƒƒsft‚tt|jddƒt|jddƒƒsŽt‚d S )Nr   ©r   r   ©r   r   )r   r   TrD   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   r:   r!   r	   r;   Ú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 )NrR   rS   )r   r   ©r   r   )r   r"   r#   r<   r;   r!   rO   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Úabcr8   )r"   r#   rF   r   Úlistr:   r!   r<   )r   r'   ÚHr   r   r   Útest_attribute_dict_integrityú   s    

z)TestConvert.test_attribute_dict_integrityc                 C   s8   t  dg¡}t j|t|ƒd}t|jdd|ƒs4t‚d S )N)r   r   r   TrD   )r"   r#   Zto_edgelistr[   r	   r;   r!   )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/   r0   r   r   r   r   Úcustom_dict	  s   r_   c                       s   e Zd Z” ZdS )zBTestConvert.test_custom_node_attr_dict_safekeeping.<locals>.CustomN)r.   r/   r0   Znode_attr_dict_factoryr   ©r_   r   r   ÚCustom  s   ra   r   rL   )Údictr"   r#   Úadd_nodeÚ
isinstanceÚ_noder!   )r   ra   rH   Úhr   r`   r   Ú&test_custom_node_attr_dict_safekeeping  s    z2TestConvert.test_custom_node_attr_dict_safekeepingN)r.   r/   r0   r   r,   r7   r=   rK   rQ   rW   rY   r]   r^   rg   r   r   r   r   r      s    N	r   ÚedgelistrR   rS   r   rM   g      ð?r   g       @c                 C   sF   t  ¡ }| | ¡ ddidddœddidœ}t j|dd|ksBt‚d S )Nr   r   rX   )r   r   r   ©Ú	edge_data)r"   r#   Zadd_edges_fromr   r!   )rh   r'   Úexpectedr   r   r   Ú)test_to_dict_of_dicts_with_edgedata_param  s    

rl   c                  C   sJ   t  d¡} dddg}ddidddœddidœ}t j| |dd|ksFt‚d S )	Né   r   r   r   r   )r   r   )r   r   r   )r   rj   )r"   r$   r   r!   )r'   r   rk   r   r   r   Ú0test_to_dict_of_dicts_with_edgedata_and_nodelist-  s    

rn   c                  C   sT   t  ¡ } | jdddd | jdddd ddiddidœ}t j| dd|ksPt‚d	S )
z2Multi edge data overwritten when edge_data != Noner   r   r1   )ÚkeyÚbr   rR   ri   N)r"   rO   rP   r   r!   )r'   rk   r   r   r   Ú.test_to_dict_of_dicts_with_edgedata_multigraph4  s
    rq   c               	   C   s4   dddg} t jtjdd t | ¡ W 5 Q R X d S )Nr   r   r   zInput is not a valid edge list)Úmatch)r3   r4   r"   r5   r   )Zinvalid_edgelistr   r   r   Ú#test_to_networkx_graph_non_edgelist>  s    
rs   )r3   Znetworkxr"   Znetworkx.convertr   r   r   r   r   Znetworkx.generators.classicr   r   Znetworkx.utilsr	   r
   r   r   ÚmarkZparametrizerl   rn   rq   rs   r   r   r   r   Ú<module>   s"     üþ	
	
