U
    ¹mœdµ8  ã                   @   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sÜt‚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�s†t‚| d¡dk�sšt‚| d¡dk�s®t‚| d¡dk�sÂt‚| d¡dk�sÖt‚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�s¸t‚| d¡dk�sÌt‚| d¡dk�sàt‚| d¡dk�sôt‚| 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�s�t‚d S )#Néd   )Ú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   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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s„t‚|jd d
 dksšt‚|jd d
 dks°t‚|jd d
 dksÆt‚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>.mappingéA   é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sŽt‚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ƒs€t‚t  dg¡}t j|d
didd	�}t| ¡ dgƒs´t‚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sÚt‚d	d
i|d d  ¡ ksöt‚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�sšt‚| ¡ �rºt|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sŠt‚ddi|d d  ¡ ks¦t‚dd
i|d d  ¡ ksÂt‚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s„t‚ddi|d d  ¡ ks t‚dd
i|d d  ¡ ks¼t‚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sÀt‚dd	i|d d  ¡ ksÜt‚ddi|d d  ¡ ksøt‚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�s†t‚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s„t‚ddi|d d  ¡ ks t‚dd
i|d d  ¡ ks¼t‚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s„t‚ddi|d d  ¡ ks t‚dd
i|d d  ¡ ks¼t‚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sŽt‚dd	i|d d  ¡ ksªt‚ddi|d d  ¡ ksÆt‚d|d d ksÚt‚d|d d ksît‚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   