U
    ¹mœdÁd  ã                   @   sn  d dl Z d dlZd dlZd dlmZmZ G dd„ dƒZG dd„ dƒZej	 
dejejejejf¡dd	„ ƒZej	 
d
dddœdfddiddidœdff¡dd„ ƒZej	 
dejejf¡dd„ ƒZej	 
d
dddœdfddiddidœdff¡dd„ ƒZej	 
dejejf¡dd„ ƒZej	 
d
dddœdfddiddidœdff¡dd„ ƒZdd„ Zd d!„ Zd"d#„ Zej	 
dejejejejg¡d$d%„ ƒZej	 
dejejejejg¡d&d'„ ƒZd(d)„ Zej	 
dejejg¡d*d+„ ƒZej	 
dejejg¡d,d-„ ƒZd.d/„ Zej	 
d0e ¡ e ¡ e ¡ e ¡ f¡d1d2„ ƒZej	 
d0e ¡ e ¡ f¡d3d4„ ƒZej	 
d0e ¡ e ¡ f¡d5d6„ ƒZ dS )7é    N)Ú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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/d0„ Zd1d2„ Zd3d4„ Zd5S )6ÚTestFunctionc                 C   s¾   t jdddgdddgg dœdd�| _ddddddœ| _ttd	ƒƒ| _d
dddddg| _t  dddgdddgg dœ¡| _	ddddddœ| _
ddddddœ| _ttd	ƒƒ| _d
dddddg| _d S )Né   é   é   r   )r   r   é   ZTest)Úname)r   r   r   r   r   é   ©r   r   ©r   r   ©r   r   ©r   r   ©r   r   ©r   r   )ÚnxÚGraphÚGZGdegreeÚlistÚrangeÚGnodesZGedgesÚDiGraphÚDGZDGin_degreeZDGout_degreeZDGnodesZDGedges©Úself© r   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/networkx/classes/tests/test_function.pyÚsetup_method
   s    $ zTestFunction.setup_methodc                 C   sD   t | j ¡ tt | j¡ƒƒs t‚t | j ¡ tt | j¡ƒƒs@t‚d S ©N)r   r   Únodesr   r   ÚAssertionErrorr   r   r   r   r   Ú
test_nodes   s     zTestFunction.test_nodesc                 C   s°   t | j ¡ tt | j¡ƒƒs t‚t| j ¡ ƒtt | j¡ƒksBt‚t | jjdddgd�ttj| jdddgd�ƒƒsvt‚t| jjdddgd�ƒttj| jdddgd�ƒks¬t‚d S )Nr   r   r   ©Znbunch)r   r   Úedgesr   r   r    Úsortedr   r   r   r   r   Ú
test_edges   s     " ÿÿzTestFunction.test_edgesc                 C   sú   t | j ¡ tt | j¡ƒƒs t‚t| j ¡ ƒtt | j¡ƒksBt‚t | jjddgd�ttj| jddgd�ƒƒsrt‚t| jjddgd�ƒttj| jddgd�ƒks¤t‚t | jjdd�ttj| jdd�ƒƒsÌt‚t| jjdd�ƒttj| jdd�ƒksöt‚d S )Nr   r   r"   Úweight©r&   )r   r   Zdegreer   r   r    r$   r   r   r   r   r   Útest_degree#   s      " ÿÿ
 ÿÿzTestFunction.test_degreec                 C   sP   t | j d¡ƒt t | jd¡ƒks&t‚t | j d¡ƒt t | jd¡ƒksLt‚d S ©Nr   )r   r   Ú	neighborsr   r    r   r   r   r   r   Útest_neighbors3   s    &zTestFunction.test_neighborsc                 C   s8   | j  ¡ t | j ¡kst‚| j ¡ t | j¡ks4t‚d S r   )r   Znumber_of_nodesr   r    r   r   r   r   r   Útest_number_of_nodes7   s    z!TestFunction.test_number_of_nodesc                 C   s8   | j  ¡ t | j ¡kst‚| j ¡ t | j¡ks4t‚d S r   )r   Znumber_of_edgesr   r    r   r   r   r   r   Útest_number_of_edges;   s    z!TestFunction.test_number_of_edgesc                 C   s8   | j  ¡ t | j ¡kst‚| j ¡ t | j¡ks4t‚d S r   )r   Zis_directedr   r    r   r   r   r   r   Útest_is_directed?   s    zTestFunction.test_is_directedc                 C   s  | j  ¡ }ddddg}t ||¡ t| |¡dddgƒs<t‚| j  ¡ }tj||dd	� t|j|d
d�ddddifddddifddddifgƒs’t‚| j  ¡ }dg}t ||¡ t|t| j ƒ| ƒsÆt‚| j  ¡ }g }t ||¡ t|j	| j
ƒsòt‚t|j| j jƒ�st‚d S )Né   é   é   é   ©r/   r0   )r/   r1   ©r/   r2   ç       @r'   T©Údatar&   )r   Úcopyr   Zadd_starr   r#   r    r   r   r   r   ©r   r   Únlistr   r   r   Útest_add_starC   s,    

ýþ	

zTestFunction.test_add_starc                 C   sf  | j  ¡ }ddddg}t ||¡ t| |¡dddgƒs<t‚| j  ¡ }tj||dd	� t|j|d
d�ddddifddddifddddifgƒs’t‚| j  ¡ }dg}t ||¡ t| |¡g ƒsÂt‚t|t| j ƒdg ƒsÜt‚| j  ¡ }t	dgƒ}t ||¡ t| dg¡g ƒ�st‚t|t| j ƒdg ƒ�s0t‚| j  ¡ }dg}t ||¡ t| |¡g ƒ�sbt‚t|t| j ƒdg ƒ�s~t‚| j  ¡ }t	dgƒ}t ||¡ t| dg¡g ƒ�s¶t‚t|t| j ƒdg ƒ�sÒt‚| j  ¡ }g }t ||¡ t|j| j jƒ�st‚t|t| j ƒƒ�st‚| j  ¡ }t	g ƒ}t ||¡ t|j| j jƒ�sLt‚t|t| j ƒƒ�sbt‚d S )Nr/   r0   r1   r2   r3   ©r0   r1   ©r1   r2   r5   r'   Tr6   r&   Únode)
r   r8   r   Zadd_pathr   r#   r    r   r   Úiterr9   r   r   r   Útest_add_path_   sV    

ýþ	







zTestFunction.test_add_pathc                 C   sj  | j  ¡ }ddddg}ddddgdddd	gg}t ||¡ t| |¡ƒ|ksPt‚| j  ¡ }ddd
difddd
difddd
difddd
difgddd
difddd
difddd
difddd
difgg}tj||dd� t|j|dd�ƒ|ksìt‚| j  ¡ }dg}t ||¡ t|t| j ƒ| ƒ�s"t‚| j  ¡ }g }t ||¡ t|j	| j
ƒ�sPt‚t|j| j jƒ�sft‚d S )Nr/   r0   r1   r2   r3   r4   r<   r=   )r2   r/   r&   ç      ð?r'   Tr6   )r   r8   r   Z	add_cycler$   r#   r    r   r   r   r   r   )r   r   r:   Zoklistsr   r   r   Útest_add_cycle“   s<    


þ
üüù

zTestFunction.test_add_cyclec                 C   s  | j  ddddg¡jt | j ddddg¡jks2t‚| j ddddg¡jt | jddddg¡jksdt‚| j  ddddg¡jt | j ddddg¡jks–t‚| j ddddg¡jt | jddddg¡jksÈt‚t | j  ddddg¡dddg¡}|j| j k	sút‚|j| j  dddg¡jk�st‚d S )Nr   r   r   r   )r   ZsubgraphÚadjr   r    r   Zinduced_subgraphZ_graph)r   ÚHr   r   r   Útest_subgraph¹   s    ,ÿ,ÿÿÿÿÿ"zTestFunction.test_subgraphc                 C   sX   | j  ddg¡jt | j ddg¡jks*t‚| j ddg¡jt | jddg¡jksTt‚d S )Nr   r   )r   Zedge_subgraphrC   r   r    r   r   r   r   r   Útest_edge_subgraphÍ   s    ÿÿÿÿzTestFunction.test_edge_subgraphc                 C   sÎ   t j| jdd�}t|t| jƒƒs$t‚|ji ks2t‚|ji  | j 	¡ i ¡ksNt‚|j
i  | j 	¡ i ¡ksjt‚t  | j¡}t|t| jƒƒsŠt‚|j| jjksœt‚|j| jjks®t‚|j
i  | j 	¡ i ¡ksÊt‚d S )NF)Z	with_data)r   Zcreate_empty_copyr   r   r   r    ÚgraphÚ_nodeÚfromkeysr   Z_adj©r   r   r   r   r   Útest_create_empty_copy×   s    z#TestFunction.test_create_empty_copyc                 C   s"   t  | j¡dddddgkst‚d S r)   )r   Zdegree_histogramr   r    r   r   r   r   Útest_degree_histogramã   s    z"TestFunction.test_degree_histogramc                 C   sP   t  | j¡dkst‚t  | j¡dks(t‚t  ¡ }| d¡ t  |¡dksLt‚d S )Ng      à?g333333Ó?r   ç        )r   Údensityr   r    r   r   Úadd_noderJ   r   r   r   Útest_densityæ   s
    
zTestFunction.test_densityc                 C   sH   t  ¡ }| dd¡ t  |¡dks&t‚| dd¡ t  |¡dksDt‚d S )Nr   rM   r   r5   )r   r   Úadd_edgerN   r    rJ   r   r   r   Útest_density_selfloopí   s
    z"TestFunction.test_density_selfloopc                 C   sÖ   t  | j¡}|jst‚t t j|jd¡ t t j|j	dg¡ t t j|j
d¡ t t j|jdg¡ t t j|jdd¡ t t j|jdg¡ t t j|jdd¡ t t j|jdg¡ t t j|j¡ t t j|j¡ d S )Nr   r   r   )r   Úfreezer   Úfrozenr    ÚpytestÚraisesÚNetworkXErrorrO   Úadd_nodes_fromÚremove_nodeZremove_nodes_fromrQ   Úadd_edges_fromZremove_edgeÚremove_edges_fromZclear_edgesÚclearrJ   r   r   r   Útest_freezeô   s    
zTestFunction.test_freezec                 C   s@   t  | j¡rt‚t  | j¡}|jt  | j¡ks2t‚|js<t‚d S r   )r   Ú	is_frozenr   r    rS   rT   rJ   r   r   r   Útest_is_frozen  s    zTestFunction.test_is_frozenc                 C   s6   t  t  d¡¡}|jd }d|d< |d dks2t‚d S )Nr   r   TZnode_attribute)r   rS   Ú
path_graphr   r    )r   r   r>   r   r   r   Ú6test_node_attributes_are_still_mutable_on_frozen_graph  s    
zCTestFunction.test_node_attributes_are_still_mutable_on_frozen_graphc                 C   s6   t  t  d¡¡}|jd }d|d< |d dks2t‚d S )Nr   r   TZedge_attribute)r   rS   r`   r#   r    )r   r   Úedger   r   r   Ú6test_edge_attributes_are_still_mutable_on_frozen_graph  s    
zCTestFunction.test_edge_attributes_are_still_mutable_on_frozen_graphc                 C   sÔ   t  d¡}t t|ƒd¡}tt  ||d ¡ƒ}t|ƒt|ƒd ksFt‚t  d¡}t t|ƒd¡d }tt  ||¡ƒ}|dkr–|dkr–t|ƒdks¦t‚nt|ƒdks¦t‚t  	d¡}tt  |d¡ƒ}t|ƒdksÐt‚d S )Néd   r   r   éc   r   )
r   Úcomplete_graphÚrandomÚsampler   r*   Úlenr    r`   Ú
star_graph©r   rG   ÚpopZnborsr>   r   r   r   Útest_neighbors_complete_graph  s    


z*TestFunction.test_neighbors_complete_graphc                 C   s  t  d¡}t t|ƒd¡}tt  ||d ¡ƒ}t|ƒdks>t‚t  d¡}t t|ƒd¡d }tt  ||¡ƒ}|dkrŽ|dkrŽt|ƒdksžt‚nt|ƒdksžt‚t  	d¡}tt  |d¡ƒ}t|ƒdksÈt‚t  
¡ }| tdƒ¡ tt  |d¡ƒ}t|ƒdksþt‚d S )	Nrd   r   r   re   éa   éb   é
   é	   )r   rf   rg   rh   r   Znon_neighborsri   r    r`   rj   r   rX   r   rk   r   r   r   Útest_non_neighbors)  s"    


zTestFunction.test_non_neighborsc                 C   s  t  d¡}tt  |¡ƒ}t|ƒdks(t‚t  d¡}dddg}tt  |¡ƒ}|D ]$\}}||f|ksN||f|ksNt‚qNt  d¡}dddd	d
dg}tt  |¡ƒ}|D ]$\}}||f|ks ||f|ks t‚q t  ¡ }| 	dddg¡ dddg}tt  |¡ƒ}|D ]}||ksút‚qúd S )Nr
   r   r   r   r   ©r   r   r   ©r   r   ©r   r   ©r   r   ©r   r   )r   r   )r   r   r   r   )
r   rf   r   Z	non_edgesri   r    r`   rj   r   rZ   )r   rG   ZnedgesÚexpectedÚuÚvÚer   r   r   Útest_non_edgesD  s&    




zTestFunction.test_non_edgesc                 C   sð   t  ¡ }t  |¡rt‚t  d¡}t  |¡r.t‚t  |d¡r>t‚| d¡ |jdddd� t  |¡rft‚t  |d¡svt‚t  ¡ }| dddd	d
dg¡ t  |¡s¢t‚t  |d¡s²t‚| 	¡ }t  |¡sÈt‚t  |d¡sØt‚t
 t jt j|d¡ d S )Nr   ru   r   r'   rw   ©Ú0Ú3r   ©r~   Ú1éûÿÿÿ)r�   r~   r‚   ©r~   Ú2r   )r�   r„   r   ©r„   r   r   ©r�   r~   r   )r   r   Zis_weightedr    r`   rO   rQ   r   Úadd_weighted_edges_fromZto_undirectedrU   rV   rW   rJ   r   r   r   Útest_is_weighted^  s2    

úÿ
zTestFunction.test_is_weightedc                 C   s4  t  ¡ }t  |¡rt‚| d¡ | ddddg¡ t  |¡r@t‚|jdddd� t  |d¡r`t‚| dd	d
g¡ d|d d d< t  |¡rŽt‚t  |d¡ržt‚d|d d d< t  |d	¡s¾t‚t  |¡sÌt‚t  ¡ }| 	ddddddg¡ t  |¡søt‚t  |d¡�r
t‚t  |d¡�st‚t
 t jt j|d¡ d S )Nr   r   r   r   r
   r'   r   rs   rv   )r   é   ÚblueÚcoloréþÿÿÿr&   r}   r€   )r�   r~   rŒ   rƒ   )r�   r„   éýÿÿÿr…   )r~   r   r†   rt   )r   r   Zis_negatively_weightedr    rO   rX   rQ   rZ   r   r‡   rU   rV   rW   rJ   r   r   r   Útest_is_negatively_weighted  s8    
úÿ
z(TestFunction.test_is_negatively_weightedN)Ú__name__Ú
__module__Ú__qualname__r   r!   r%   r(   r+   r,   r-   r.   r;   r@   rB   rE   rF   rK   rL   rP   rR   r]   r_   ra   rc   rm   rr   r|   rˆ   rŽ   r   r   r   r   r   	   s4   
4&
!r   c                   @   sP   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S )ÚTestCommonNeighborsc                    s&   t tjƒˆ _‡ fdd„}t |ƒˆ _d S )Nc                    s"   t ˆ  | ||¡ƒ}||kst‚d S r   )r$   Úfuncr    )r   ry   rz   rx   Úresult©Úclsr   r   Ú	test_funcª  s    z2TestCommonNeighbors.setup_class.<locals>.test_func)Ústaticmethodr   Úcommon_neighborsr“   Útest)r–   r—   r   r•   r   Úsetup_class¦  s    zTestCommonNeighbors.setup_classc                 C   s$   t  d¡}|  |dddddg¡ d S )Nr
   r   r   r   r   r   ©r   rf   rš   rJ   r   r   r   Útest_K5°  s    
zTestCommonNeighbors.test_K5c                 C   s    t  d¡}|  |dddg¡ d S )Nr   r   r   r   )r   r`   rš   rJ   r   r   r   Útest_P3´  s    
zTestCommonNeighbors.test_P3c                 C   s    t  d¡}|  |dddg¡ d S )Nr   r   r   r   )r   rj   rš   rJ   r   r   r   Útest_S4¸  s    
zTestCommonNeighbors.test_S4c              	   C   s@   t  tj¡�* t ¡ }| ddg¡ |  |dd¡ W 5 Q R X d S )Nr   r   r   r   )rU   rV   r   ZNetworkXNotImplementedr   rZ   r“   rJ   r   r   r   Útest_digraph¼  s    z TestCommonNeighbors.test_digraphc                 C   sP   t  d¡}t t jt j|dd¡ t t jt j|dd¡ t t jt j|dd¡ d S )Nr
   r   r‰   )r   rf   rU   rV   rW   r™   rJ   r   r   r   Útest_nonexistent_nodesÂ  s    
z*TestCommonNeighbors.test_nonexistent_nodesc                 C   s*   t  ¡ }| ddg¡ |  |ddg ¡ dS )zCase of no common neighbors.r   r   N)r   r   rX   rš   rJ   r   r   r   Útest_custom1È  s    z TestCommonNeighbors.test_custom1c                 C   s$   t  d¡}|  |dddddg¡ dS )zCase of equal nodes.r   r   r   r   r   Nrœ   rJ   r   r   r   Útest_custom2Î  s    
z TestCommonNeighbors.test_custom2N)r�   r�   r‘   Úclassmethodr›   r�   rž   rŸ   r    r¡   r¢   r£   r   r   r   r   r’   ¥  s   
	r’   Ú
graph_typec                 C   sl  t jd| d�}d}d}t  |||¡ |jd | |ks:t‚|jd | |ksPt‚|jd | |ksft‚t jd| d�}ttt| ¡ ƒtt	|ƒƒƒƒ}d}t  |||¡ |jd | dksºt‚|jd | dksÐt‚|jd | dksæt‚t jd| d�}dd	d
œ}t 
| ¡ |¡}| d¡ t  ||¡ |jd i k�s8t‚|jd d dk�sPt‚|jd d d	k�sht‚d S )Nr   ©Zcreate_usingrd   Úhellor   r   r   ÚhiéÈ   ©r¨   r§   )r   r`   Úset_node_attributesr   r    ÚdictÚzipr$   r   ri   rI   rl   )r¥   r   ÚvalsÚattrÚdr   r   r   Útest_set_node_attributesÔ  s,    

r±   )Úvaluesr	   ÚredrŠ   r   r‹   c                 C   sH   t  ¡ }| d¡ t  || |¡ |jd d dks6t‚d|jksDt‚dS )z…
    When `values` is a dict or dict-of-dict keyed by nodes, ensure that keys
    that correspond to nodes not in G are ignored.
    r   r‹   r³   r   N)r   r   rO   r«   r   r    ©r²   r	   r   r   r   r   Ú,test_set_node_attributes_ignores_extra_nodesõ  s
    
rµ   c                 C   sF  t jd| d�}d}d}t  |||¡ |d d | |ks<t‚|d d | |ksTt‚t jd| d�}d}dd	g}tt|tt|ƒƒƒƒ}t  |||¡ |d d | dksªt‚|d d | dksÂt‚t jd| d�}dd
dœ}dg}t ||¡}t  ||¡ |d d d dk�st‚|d d d d
k�s,t‚|d d i k�sBt‚d S )Nr   r¦   r§   r   r   r   r¨   r   r   r©   rª   ©	r   r`   Úset_edge_attributesr    r¬   r­   r   ri   rI   ©r¥   r   r¯   r®   r#   r°   r   r   r   Útest_set_edge_attributes  s*    
r¹   rA   r5   )r   r   r&   c                 C   sD   t  dg¡}t  || |¡ |d d d dks2t‚d|jks@t‚dS )ú†If `values` is a dict or dict-of-dicts containing edges that are not in
    G, data associate with these edges should be ignored.
    r   r   r   r&   rA   r   N)r   r   r·   r    r#   r´   r   r   r   Ú,test_set_edge_attributes_ignores_extra_edges&  s    r»   c                 C   sb  t jd| d�}d}d}t  |||¡ |d d d | |ks@t‚|d d d | |ks\t‚t jd| d�}d}dd	g}tt|tt|ƒƒƒƒ}t  |||¡ |d d d | dks¶t‚|d d d | dksÒt‚t jd| d�}dd
dœ}dg}t ||¡}t  ||¡ |d d d d dk�s&t‚|d d d d d
k�sDt‚|d d d i k�s^t‚d S )Nr   r¦   r§   r   r   r   r¨   ©r   r   r   ©r   r   r   r©   rª   r¶   r¸   r   r   r   Útest_set_edge_attributes_multi7  s*    
r¾   )r¼   ©r   r   r   c                 C   sd   t  ddg¡}t  || |¡ |d d d d dks8t‚|d d d i ksPt‚d| ¡ ks`t‚dS )	rº   r¼   ©r   r   r   r   r   r&   rA   r   N)r   Ú
MultiGraphr·   r    r#   r´   r   r   r   Ú2test_set_edge_attributes_multi_ignores_extra_edgesU  s
    rÂ   c                  C   sŠ   t  ¡ t  ¡ t  ¡ t  ¡ g} | D ]d}t jd|d�}d}d}t  |||¡ t  ||¡}|d |ksdt‚|d |kstt‚|d |ks t‚q d S )Nr   r¦   r§   rd   r   r   r   )	r   r   r   rÁ   ÚMultiDiGraphr`   r«   Zget_node_attributesr    )Úgraphsr   r¯   r®   Úattrsr   r   r   Útest_get_node_attributesg  s    rÆ   c            	   
   C   s0  t  ¡ t  ¡ t  ¡ t  ¡ g} | D �]}t jd|d�}d}d}t  |||¡ t  ||¡}t|ƒdksft	‚| 
¡ rÎddg}|D ]P\}}}z||||f dksœt	‚W qz tk
rÈ   ||||f dksÄt	‚Y qzX qzq dd	g}|D ]N\}}z|||f dksøt	‚W qÚ tk
�r&   |||f dk�s"t	‚Y qÚX qÚq d S )
Nr   r¦   r§   rd   r   r¼   r½   r   r   )r   r   r   rÁ   rÃ   r`   r·   Zget_edge_attributesri   r    Zis_multigraphÚKeyError)	rÄ   r   r¯   r®   rÅ   Úkeysry   rz   Úkr   r   r   Útest_get_edge_attributest  s*    
 rÊ   c                  C   sp   t  ¡ t  ¡ t  ¡ t  ¡ g} | D ]J}t  |¡s2t‚| tdƒ¡ t  |¡sNt‚| 	ddg¡ t  |¡r t‚q d S )Nr
   r   rw   )
r   r   r   rÁ   rÃ   Zis_emptyr    rX   r   rZ   )rÄ   r   r   r   r   Útest_is_emptyŽ  s    rË   c                 C   s|   t jd| d�}| dd¡ tt  |¡dgƒs0t‚tt  |¡dgƒsFt‚tt j|dd�ddi fgƒsft‚t  |¡dksxt‚d S )Nr   r¦   r   ©r   r   Tr6   r   )	r   rf   rQ   r   Znodes_with_selfloopsr    r   Úselfloop_edgesZnumber_of_selfloops©r¥   r   r   r   r   Útest_selfloops˜  s     rÏ   c                 C   sv   t jd| d�}| dd¡ |jdddd� tt j|dd�ddi fddd	difgƒsVt‚tt j|d	d�d
dgƒsrt‚d S )Nr   r¦   r   r   r   r'   Tr6   r&   )r   r   N)r   r   r   )r   rf   rQ   r   rÍ   r    rÎ   r   r   r   Útest_selfloop_edges_attr¤  s     ÿrÐ   c                  C   sR   t jdt jd�} | jdddd� | jdddd� tt j| ddd	�d
dgƒsNt‚d S )Nr   r¦   r   rp   r'   rd   r&   T©r7   rÈ   )r   r   r   rp   )r   r   r   rd   )r   rf   rÁ   rQ   r   rÍ   r    )r   r   r   r   Ú,test_selfloop_edges_multi_with_data_and_keys±  s     ÿrÒ   c                 C   st   t jd| d�}| dd¡ | t j|dd�¡ | dd¡ | t j|dd�¡ | dd¡ | t j|ddd�¡ d S )Nr   r¦   r   T©rÈ   r6   )rÈ   r7   )r   rf   rQ   r[   rÍ   rÎ   r   r   r   Útest_selfloops_removalº  s    rÔ   c              	   C   s  t jd| d�}| dd¡ | dd¡ | t  |¡¡ d| ¡ ksFt‚| dd¡ | dd¡ t t	¡� | t j|dd�¡ W 5 Q R X | dd¡ | dd¡ t t
¡� | t j|dd�¡ W 5 Q R X | dd¡ | dd¡ t t	¡� | t j|ddd�¡ W 5 Q R X d	S )
z[test removing selfloops behavior vis-a-vis altering a dict while iterating.
    cf. gh-4068r   r¦   r   rÌ   TrÓ   r6   rÑ   N)r   rf   rQ   r[   rÍ   r#   r    rU   rV   ÚRuntimeErrorÚ	TypeErrorrÎ   r   r   r   Útest_selfloops_removal_multiÅ  s"    r×   c                  C   s¸   dddg} dddg}t  ¡ t  ¡ t  ¡ t  ¡ g}dddddœfdddddœfdddddœfg}|D ]P}| |¡ t  || d¡dks†t‚t  || d	¡dksœt‚t 	t j
t j||d¡ qbd S )
Nr   r   r   r
   r‰   )ÚcostÚdistr   rØ   rÙ   )r   r   r   rÁ   rÃ   rZ   Zpath_weightr    rU   rV   ZNetworkXNoPath)Ú
valid_pathÚinvalid_pathrÄ   r#   rG   r   r   r   Útest_pathweightà  s    

ý
rÜ   r   c                 C   sl   |   ddddg¡ ddddg}ddddg}dddddg}t | |¡sHt‚t | |¡rXt‚t | |¡rht‚d S )	Nr   ru   rw   r   r   r   r   r
   )rZ   r   Zis_pathr    )r   rÚ   rÛ   Zanother_invalid_pathr   r   r   Útest_ispathð  s    rÝ   c                 C   sl   |   ddddddg¡ |  d¡ t | dd	d
gddg¡}t| ¡ ƒdddhksRt‚t| ¡ ƒdhksht‚d S )Nr   r   r   r   r   r   r   r   r   r
   rw   r   r   ©rZ   rO   r   Zrestricted_viewÚsetr   r    r#   ©r   rD   r   r   r   Útest_restricted_viewý  s
    
rá   c              	   C   sn   |   dddddddg¡ |  d¡ t | d	d
dgddg¡}t| ¡ ƒdddhksTt‚t| ¡ ƒdhksjt‚d S )Nr¼   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   r   Útest_restricted_view_multi  s    ÿ
râ   )!rg   rU   Znetworkxr   Znetworkx.utilsr   r   r   r’   ÚmarkZparametrizer   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   Ú<module>   s„      / ÿ
þþ

þþ


þþ

 ÿ
	 ÿ

	


 ÿ


