U
    :vf8                     @   s>   d dl Z d dlZd dlmZ d dlmZmZ G dd dZdS )    N)empty_graph)edges_equalnodes_equalc                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
ddddddg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-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAS )BTestRelabelc                 C   s  t  }t|d}t| g ks&tt| g ks:tdD ]B}t  }tj|d|d}t| g ksltt| g ks>tq>t  }|ddddg t|}dd	 | D }d
d	 | D }t	|t	|kstt|d}dd	 | D }dd	 | D }t	|t	|ks"tt
| ddddgs>ttj|dd}dd	 | D }dd	 | D }t	|t	|kst|ddkst|ddkst|ddkst|ddksttj|dd}dd	 | D }dd	 | D }t	|t	|kst|ddks2t|ddksFt|ddksZt|ddksnttj|ddd}dd	 | D }dd	 | D }t	|t	|kst|ddkst|ddkst|ddkst|ddkst|jd d dks t|jd d d ks8t|jd d d!ksd|jd d d!ksdt|jd d d"ks|jd d d"kstd S )#Nd   )defaultsortedincreasing degreedecreasing degreeorderingABr   Cr   r   r   Dc                 s   s   | ]\}}|V  qd S N .0ndr   r   ?/tmp/pip-unpacked-wheel-_lngutwb/networkx/tests/test_relabel.py	<genexpr>   s     zCTestRelabel.test_convert_node_labels_to_integers.<locals>.<genexpr>c                 s   s   | ]\}}|V  qd S r   r   r   r   r   r   r      s     i  c                 s   s   | ]\}}|V  qd S r   r   r   r   r   r   r      s     c                 s   s   | ]\}}|V  qd S r   r   r   r   r   r   r      s     i  i  i  r	   c                 s   s   | ]\}}|V  qd S r   r   r   r   r   r   r   $   s     c                 s   s   | ]\}}|V  qd S r   r   r   r   r   r   r   %   s     r            r
   c                 s   s   | ]\}}|V  qd S r   r   r   r   r   r   r   -   s     c                 s   s   | ]\}}|V  qd S r   r   r   r   r   r   r   .   s     labelr   Zlabel_attributec                 s   s   | ]\}}|V  qd S r   r   r   r   r   r   r   8   s     c                 s   s   | ]\}}|V  qd S r   r   r   r   r   r   r   9   s     r   r   r   r   )r   nxconvert_node_labels_to_integerslistnodesAssertionErroredgesadd_edges_fromdegreer   r   )selfGHoptdegHdegGr   r   r   $test_convert_node_labels_to_integers	   sh    
  ,z0TestRelabel.test_convert_node_labels_to_integersc                 C   s   t  }|ddddg tj|dd}dd | D }d	d | D }t|t|ks^ttj|dd
d}|jd d
 dkst|jd d
 dkst|jd d
 dkst|jd d
 dkstd S )Nr   r   r   r   r   r   c                 s   s   | ]\}}|V  qd S r   r   r   r   r   r   r   J   s     z8TestRelabel.test_convert_to_integers2.<locals>.<genexpr>c                 s   s   | ]\}}|V  qd S r   r   r   r   r   r   r   K   s     r    r!   r   r   r   r   r   r   r   r   )r   r(   r"   r#   r)   r   r&   r%   )r*   r+   r,   r.   r/   r   r   r   test_convert_to_integers2F   s      z%TestRelabel.test_convert_to_integers2c              	   C   s2   t tj t }tj|dd}W 5 Q R X d S )Nzincreasing ager   )pytestraisesr"   ZNetworkXErrorGraphr#   r*   r+   r,   r   r   r   test_convert_to_integers_raiseV   s    z*TestRelabel.test_convert_to_integers_raisec                 C   sR   t  }|ddddg ddddd	}t ||}t| ddddgsNtd S 
Nr   r   r   r   aardvarkbearcatdogr   r   r   r   r"   r   r(   relabel_nodesr   r%   r&   r*   r+   mappingr,   r   r   r   test_relabel_nodes_copy[   s
    z#TestRelabel.test_relabel_nodes_copyc                 C   sL   t  }|ddddg dd }t ||}t| ddd	d
gsHtd S )Nr   r   r   r   c                 S   s   t | S r   )ord)r   r   r   r   r@   g   s    z8TestRelabel.test_relabel_nodes_function.<locals>.mappingA   B   C   D   r=   r?   r   r   r   test_relabel_nodes_functionb   s
    z'TestRelabel.test_relabel_nodes_functionc                 C   s2   t d}t |t}t|jddddgs.td S )N   0123)r"   
path_graphr>   strr   r%   r&   r5   r   r   r    test_relabel_nodes_callable_typem   s    
z,TestRelabel.test_relabel_nodes_callable_typenon_mcZ0123rI   rJ   rK   rL   c              	   C   s0   t d}tt t || W 5 Q R X dS )zWIf `mapping` is neither a Callable or a Mapping, an exception
        should be raised.rH   N)r"   rM   r2   r3   AttributeErrorr>   )r*   rP   r+   r   r   r   *test_relabel_nodes_non_mapping_or_callabler   s    
z6TestRelabel.test_relabel_nodes_non_mapping_or_callablec                 C   sJ   t ddddg}ddddd	}t ||}t| ddddgsFtd S r7   )r"   r4   r>   r   r%   r&   r?   r   r   r   test_relabel_nodes_graphz   s    z$TestRelabel.test_relabel_nodes_graphc                 C   sZ   t  }|dddg |ddg dddd	}t ||}t|jdddgksVtd S )
Nr   r   r   )r   r   r   r   abcr   r   r   )r"   r4   add_nodes_fromr(   r>   r$   r%   r&   r?   r   r   r   test_relabel_nodes_orderedgraph   s    z+TestRelabel.test_relabel_nodes_orderedgraphc                 C   sN   t ddddg}ddddd	}t j||d
d}t| ddddgsJtd S )Nr   r   r   r   r8   r9   r:   r;   r<   Fcopy)r"   DiGraphr>   r   r%   r&   r?   r   r   r   test_relabel_nodes_digraph   s    z&TestRelabel.test_relabel_nodes_digraphc                 C   sX   t ddg}ddd}t j||dd}t| ddgs>tt| ddgsTtd S N)rU   rV   r8   r9   Fr[   )r8   r9   )r"   
MultiGraphr>   r   r%   r&   r   r'   r*   r+   r@   r   r   r   test_relabel_nodes_multigraph   s
    
z)TestRelabel.test_relabel_nodes_multigraphc                 C   sX   t ddg}ddd}t j||dd}t| ddgs>tt| ddgsTtd S r_   )r"   MultiDiGraphr>   r   r%   r&   r   r'   ra   r   r   r   test_relabel_nodes_multidigraph   s
    
z+TestRelabel.test_relabel_nodes_multidigraphc                 C   sL   t  }|td ddi}t j||dd}t| ttdsHtd S )NrH   r   Fr[   )	r"   r4   rY   ranger>   r   r%   r$   r&   r?   r   r   r   #test_relabel_isolated_nodes_to_same   s
    z/TestRelabel.test_relabel_isolated_nodes_to_samec                 C   sj   t ddddg}ddi}t j||dd}t|j|js<t| }t j||d	d t|j|jsftd S )
Nr   r   r   r   r   r8   Tr[   F)r"   r4   r>   r   r%   r&   r\   )r*   r+   r@   r,   ZGGr   r   r   test_relabel_nodes_missing   s    z&TestRelabel.test_relabel_nodes_missingc                 C   s   t  }t j|i dd}|j|jks(tt j|i dd}|j|jksHtd|_t j|i dd}|j|jksntt j|i dd}|j|jkstd S )NTr[   Ffirst)r"   r4   r>   graphr&   namer5   r   r   r   test_relabel_copy_name   s    z"TestRelabel.test_relabel_copy_namec                 C   s~   t d}t d}t j|dd tdD dd}t ||sBtt d}t j|dd tdD dd}t ||sztd S )NrH   c                 S   s   i | ]}||d  qS r   r   r   ir   r   r   
<dictcomp>   s      z5TestRelabel.test_relabel_toposort.<locals>.<dictcomp>Fr[   c                 S   s   i | ]}||d  qS rl   r   rm   r   r   r   ro      s      )r"   Zcomplete_graphr>   re   Zis_isomorphicr&   )r*   ZK5r+   r   r   r   test_relabel_toposort   s    


z!TestRelabel.test_relabel_toposortc                 C   s   t dddg}t j|dddddd	}t| dddgs@tt dddg}t j|dddddd	}t| dddgstt dg}t j|d
didd	}t| dgstd S )N)r   r   )r   r   rT   ZOneZTwoZThreerX   Fr[   r   r   )r"   r]   r>   r   r%   r&   rc   )r*   r+   r   r   r   test_relabel_selfloop   s    z!TestRelabel.test_relabel_selfloopc                 C   s  t jt jfD ]}dD ]}|ddddg}d|d d d d	< d
|d d d d	< d|d d d d	< d|d d d d	< |jddddd |jddddd ddddd}t j|||d}d	di|d d  kstd	d
i|d d  kstd	di|d d  kst| r6t|d d dks@nds@td	di|d d  ks^td	di|d d  ks|td	di|d d  kst| rt|d d dksndstqqd S )NTFr   rH   r   rH   rH   r   rH   r   rU   r   rH   valuerV   r   rW   r   r   r   xekeyrw   f	   r   r   r   r   r[      )	r"   r`   rc   add_edger>   valuesr&   Zis_directedlen)r*   MGccr+   r@   r,   r   r   r   +test_relabel_multidigraph_inout_merge_nodes   s&    
,z7TestRelabel.test_relabel_multidigraph_inout_merge_nodesc                 C   s   t ddddddg}d|d d d d< d|d d	 d d< d
|d d d d< dddd}t j||dd ddi|d d  kstddi|d d  kstdd
i|d d  kstd S Nr   r   r   r   r   r   rU   r   r   rw   rV   r   rW   r   rH   rX   Fr[   r"   r`   r>   r   r&   ra   r   r   r   %test_relabel_multigraph_merge_inplace   s    z1TestRelabel.test_relabel_multigraph_merge_inplacec                 C   s   t dddg}d|d d d d< d|d d	 d d< d
|d d d d< dddd}t j||dd ddi|d d  kstddi|d d  kstdd
i|d d  kstd S r   r"   rc   r>   r   r&   ra   r   r   r   'test_relabel_multidigraph_merge_inplace   s    z3TestRelabel.test_relabel_multidigraph_merge_inplacec                 C   s  t ddddg}d|d d d d< d	|d
 d d d< d|d d d d< d|d d d d< |jddddd |jddddd ddddd}t j||dd}ddi|d d  kstdd	i|d d  kstddi|d d  kstt|d d dkstddi|d d  ks0tddi|d d  ksNtddi|d d  ksltt|d d dkstd S )Nrs   rt   ru   rv   rU   r   rH   rw   rV   r   rW   r   r   r   rx   ry   rz   r|   r}   r~   Tr[   )r"   rc   r   r>   r   r&   r   r?   r   r   r   $test_relabel_multidigraph_inout_copy   s"    z0TestRelabel.test_relabel_multidigraph_inout_copyc                 C   s   t dddg}d|d d d d< d|d d	 d d< d
|d d d d< dddd}t j||dd}ddi|d d  kstddi|d d  kstdd
i|d d  kstd S Nr   r   r   rU   r   r   rw   rV   r   rW   r   rH   rX   Tr[   r   r?   r   r   r   "test_relabel_multigraph_merge_copy  s    z.TestRelabel.test_relabel_multigraph_merge_copyc                 C   s   t dddg}d|d d d d< d|d d	 d d< d
|d d d d< dddd}t j||dd}ddi|d d  kstddi|d d  kstdd
i|d d  kstd S r   r   r?   r   r   r   $test_relabel_multidigraph_merge_copy  s    z0TestRelabel.test_relabel_multidigraph_merge_copyc                 C   s
  t jt jfD ]}dD ]}t  }|jddddd |jdddd	d |jdd
ddd dddd}t j||dd ddi|d d  kstdd	i|d d  kstddi|d d  kstd|d d kstd|d d kstd|d d kstqqd S )Nrr   r   r   IrU   rz   r   ZIIrV   r   rW   rH   rX   Fr[   rw   )r"   r`   rc   r   r>   r   r&   )r*   r   r   r+   r@   r   r   r   &test_relabel_multigraph_nonnumeric_key&  s    z2TestRelabel.test_relabel_multigraph_nonnumeric_keyc              	   C   sP   t d}ddd}t j||dd}tt j t j||dd}W 5 Q R X d S )Nr   r   r   r   Tr[   F)r"   rM   r>   r2   r3   ZNetworkXUnfeasibler?   r   r   r   test_relabel_circular6  s
    

z!TestRelabel.test_relabel_circularc                    s\   t d}t| }dddd t j| dd}t| } fdd	|D |ksXtd S )
Nr   rU   rV   rW   r   r   r   Tr[   c                    s   g | ]}  ||qS r   getrm   r@   r   r   
<listcomp>C  s     z\TestRelabel.test_relabel_preserve_node_order_full_mapping_with_copy_true.<locals>.<listcomp>)r"   rM   r$   r%   r>   r&   r*   r+   Zoriginal_orderr,   Z	new_orderr   r   r   <test_relabel_preserve_node_order_full_mapping_with_copy_true=  s    
zHTestRelabel.test_relabel_preserve_node_order_full_mapping_with_copy_truec                    sT   t d}t|}dddd t j| dd}t|} fdd	|D |ksPtd S )
Nr   rU   rV   rW   r   Fr[   c                    s   g | ]}  ||qS r   r   rm   r   r   r   r   K  s     z]TestRelabel.test_relabel_preserve_node_order_full_mapping_with_copy_false.<locals>.<listcomp>r"   rM   r$   r>   r&   r   r   r   r   =test_relabel_preserve_node_order_full_mapping_with_copy_falseE  s    
zITestRelabel.test_relabel_preserve_node_order_full_mapping_with_copy_falsec                    sR   t d}t|}ddd t j| dd}t|} fdd|D |ksNtd S )	Nr   rU   rV   r   r   Tr[   c                    s   g | ]}  ||qS r   r   rm   r   r   r   r   S  s     z_TestRelabel.test_relabel_preserve_node_order_partial_mapping_with_copy_true.<locals>.<listcomp>r   r   r   r   r   ?test_relabel_preserve_node_order_partial_mapping_with_copy_trueM  s    

zKTestRelabel.test_relabel_preserve_node_order_partial_mapping_with_copy_truec                    sR   t d}t|}ddd t j| dd}t|} fdd|D |ksNtd S )	Nr   rU   rV   r   Fr[   c                    s   g | ]}  ||qS r   r   rm   r   r   r   r   [  s     z`TestRelabel.test_relabel_preserve_node_order_partial_mapping_with_copy_false.<locals>.<listcomp>r   r   r   r   r   @test_relabel_preserve_node_order_partial_mapping_with_copy_falseU  s    

zLTestRelabel.test_relabel_preserve_node_order_partial_mapping_with_copy_falseN)#__name__
__module____qualname__r0   r1   r6   rA   rG   rO   r2   markZparametrizerR   rS   rZ   r^   rb   rd   rf   rg   rk   rp   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s<   =
	r   )	r2   Znetworkxr"   Znetworkx.generators.classicr   Znetworkx.utilsr   r   r   r   r   r   r   <module>   s   