U
    9vf?                     @   s   d dl mZ d dlZd dlZd dlmZ ddlmZ ddlm	Z
 ddlmZ G dd	 d	eZG d
d deeZG dd de
Z	G dd deZG dd dejZG dd deZdS )    )UserDictN)edges_equal   )BaseMultiGraphTester)TestEdgeSubgraph)TestMultiGraphc                   @   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d1S )2BaseMultiDiGraphTesterc                 C   s^   | j }ddddddg}t| |ks*tt|dddgksDttttjf|jd d S )	Nr   r   r      r   r   r   r   r   r   r   r   r   )	K3sortededgesAssertionErrorpytestraisesKeyErrornxNetworkXErrorselfGr    r   L/tmp/pip-unpacked-wheel-_lngutwb/networkx/classes/tests/test_multidigraph.py
test_edges   s
    z!BaseMultiDiGraphTester.test_edgesc                 C   s   | j }ddi fddi fddi fddi fddi fddi fg}t|jdd|ksRtt|jdddddi fddi fgks|ttttjf|j	d d S )Nr   r   r   Tdatar   )
r   r   r   r   r   r   r   r   r   Z	neighborsr   r   r   r   test_edges_data   s
    4*z&BaseMultiDiGraphTester.test_edges_datac                 C   sr   | j }t| ddddddgks&tt|dddgks@t|dd t| dddddddgksntd S )	Nr	   r
   r   r   r   r   r   r   )r   r   r   r   add_edger   r   r   r   r   test_edges_multi   s     
z'BaseMultiDiGraphTester.test_edges_multic                 C   sx   | j }t| ddddddgks&tt|dddgks@ttttjf|jd t|jdd	d
ddgksttd S )Nr	   r
   r   r   r   r   r   r   Tkeysr   r   r   )r   r   r   )	r   r   	out_edgesr   r   r   r   r   r   r$   r   r   r   test_out_edges+   s
     z%BaseMultiDiGraphTester.test_out_edgesc                 C   st   | j }t| ddddddgks&tt|dddgks@t|ddd	 t| dddddddgksptd S )
Nr	   r
   r   r   r   r   r   r   r   )r   r   r)   r   r#   r$   r   r   r   test_out_edges_multi2   s     
z+BaseMultiDiGraphTester.test_out_edges_multic                 C   s   | j }t|jdddddi fddi fgks0t|dd |jdddd t|jdddddddifddi fgksztt|jdddddgkstt|jddd	d
ddgkstd S )Nr   Tr    r   r   r!   )r   r   r   )r   r   Nr   r!   default)r   r   r   )r   r   r   r   remove_edger#   r$   r   r   r   test_out_edges_dataA   s    *.z*BaseMultiDiGraphTester.test_out_edges_datac                 C   s   | j }t| ddddddgks&tt|dddgks@ttttjf|jd |	dd	d
 t| dddddddgkstt|jdddddgkstd S )Nr	   r
   r   r   r   r   r   r   r   r   Tr&   )r   r   r   )r   r   r   )
r   r   in_edgesr   r   r   r   r   r   r#   r$   r   r   r   test_in_edgesJ   s     

	z$BaseMultiDiGraphTester.test_in_edgesc              
   C   s   | j }t| ddddddgks&tt|dddgks@t|ddd	 t| dddddddgksptt|jd
ddddi fddi fdd	i fddi fdd	i fd	di fd	di fgkstd S )Nr	   r
   r   r   r   r   r   r   r   TF)r!   r'   )r   r   r0   r   r#   r$   r   r   r   test_in_edges_no_keys[   s,     


z,BaseMultiDiGraphTester.test_in_edges_no_keysc                 C   s   | j }t|jdddddi fddi fgks0t|dd |jdddd t|jdddddddifddi fgksztt|jdddddgkstt|jddd	d
ddgkstd S )Nr   Tr    r   r   r!   )r   r   r   )r   r   Nr   r,   )r   r   r   )r   r   r0   r   r.   r#   r$   r   r   r   test_in_edges_datat   s    *.z)BaseMultiDiGraphTester.test_in_edges_datac                 C   s  |j d |j d kst|j d d |j d |j d ks@t|jd d |jd d ks`t|jd d d |jd d |jd d kst|d d d d |d d d d kst|d d d d d |d d d d |d d d d kstd S NZfoor   r   r   graphr   appendnodesr   Hr   r   r   r   
is_shallow}   s      ,z!BaseMultiDiGraphTester.is_shallowc                 C   s  |j d |j d kst|j d d |j d |j d ks@t|jd d |jd d ks`t|jd d d |jd d |jd d kst|d d d d |d d d d kst|d d d d d |d d d d |d d d d kstd S r4   r5   r9   r   r   r   is_deep   s      ,zBaseMultiDiGraphTester.is_deepc              	   C   s~   | j }| | t|}zt| dddgs4tW n. tk
rd   t| ddddgs`tY nX | }| || d S )Nr	   r   r   )	r   Zadd_attributesr   Z
MultiGraphr   r   r   to_undirectedr<   )r   r   r:   r   r   r   test_to_undirected   s    

 z)BaseMultiDiGraphTester.test_to_undirectedc                 C   s*   | j }|ddst|ddr&td S Nr   r   r   )r   Zhas_successorr   r$   r   r   r   test_has_successor   s    z)BaseMultiDiGraphTester.test_has_successorc                 C   s:   | j }t|dddgks ttttjf|jd d S Nr   r   r   r   )	r   r   
successorsr   r   r   r   r   r   r$   r   r   r   test_successors   s    z&BaseMultiDiGraphTester.test_successorsc                 C   s*   | j }|ddst|ddr&td S r?   )r   Zhas_predecessorr   r$   r   r   r   test_has_predecessor   s    z+BaseMultiDiGraphTester.test_has_predecessorc                 C   s:   | j }t|dddgks ttttjf|jd d S rA   )	r   r   Zpredecessorsr   r   r   r   r   r   r$   r   r   r   test_predecessors   s    z(BaseMultiDiGraphTester.test_predecessorsc                 C   s   | j }t| dddgks tt| ddddks<t|ddksNtt|tdgdgkslt|jdddd	d
 t|jdddddgkstt|jdddddgkstd S )N)r      )r   rF   )r   rF   rF   r   r   r   r   r   333333?333333?weightotherrK   rK   )r   333333@)r   rN   rL   )r   @)r   rO   )r   r   Zdegreer   dictlistiterr#   r$   r   r   r   test_degree   s    z"BaseMultiDiGraphTester.test_degreec                 C   s   | j }t| dddgks tt| ddddks<t|ddksNtt|tdgdgkslt|jddddkstd S 	Nr
   r   )r   r   r   rG   r   rK   rM   )r   r   	in_degreer   rP   rQ   rR   r$   r   r   r   test_in_degree   s    z%BaseMultiDiGraphTester.test_in_degreec                 C   s   | j }t| dddgks tt| ddddks<t|ddksNtt|tdgdgkslt|jddddkstd S rT   )r   r   
out_degreer   rP   rQ   rR   r$   r   r   r   test_out_degree   s    z&BaseMultiDiGraphTester.test_out_degreec                 C   sp   | j }| dkst| dks&t|jddddd t|jddd	d
ksRtt|jddd	dksltd S )N   r   r   rH   rI   rJ   rK   rM   r   g333333@rL   g@)r   sizer   Znumber_of_edgesr#   roundr$   r   r   r   	test_size   s    z BaseMultiDiGraphTester.test_sizec                 C   sh   |   }|dd | dds(t|jddddr@t|dd |jddddsdtd S )Nr   r   T)Z
reciprocal)Graphr#   r=   Zhas_edger   r$   r   r   r   test_to_undirected_reciprocal   s    z4BaseMultiDiGraphTester.test_to_undirected_reciprocalc                 C   sl   t ddg}| }t| ddgks.t|dd t| dgksPtt| ddgkshtd S )Nr	   r   r   r   )r   MultiDiGraphreverser   r   r   r.   r   r   Rr   r   r   test_reverse_copy   s    z(BaseMultiDiGraphTester.test_reverse_copyc                 C   sJ   t ddg}|jdd}t| ddgks2ttt j|j	dd d S )Nr	   F)copyr   r   r   )
r   r_   r`   r   r   r   r   r   r   r.   ra   r   r   r   test_reverse_nocopy   s    z*BaseMultiDiGraphTester.test_reverse_nocopyc                 C   s   | j  }t|jt|jks"tt|jt|jks:tt|jt|jksRtt|jt|jksjtt|jt|jkstt|j	t|j	kstd S )N)
r   rd   idr0   r   r)   rU   rW   succpredr$   r   r   r   test_di_attributes_cached   s    
z0BaseMultiDiGraphTester.test_di_attributes_cachedN)__name__
__module____qualname__r   r"   r%   r*   r+   r/   r1   r2   r3   r;   r<   r>   r@   rC   rD   rE   rS   rV   rX   r\   r^   rc   re   ri   r   r   r   r   r      s0   		
r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestMultiDiGraphc                 C   s   t j| _dddg| _dddg| _|  | _i i i d| j_i i i d| j_| jD ]B}| jD ]6}||krhqZdi i}|| jj| |< || jj| |< qZqPi | j_i | jjd< i | jjd< i | jjd< d S Nr	   r
   r   r   r   r   rG   )	r   r_   r]   k3edgesk3nodesr   _succ_pred_noder   uvdr   r   r   setup_method   s"    


zTestMultiDiGraph.setup_methodc              	   C   s   |   }|dd |jddi iii dks0t|jddi iii dksLt|ji ddi iidksht|   }|jd  |jddi iii dkst|jddi iii dkst|ji ddi iidksttjtdd |d d W 5 Q R X d S )Nr   r   r	   None cannot be a nodematch   )	r]   r#   _adjr   rq   rr   r   r   
ValueErrorr$   r   r   r   test_add_edge  s    
zTestMultiDiGraph.test_add_edgec              	   C   s  |   }|dddddifg |jdi ddidii dksBt|jdi ddidii dksdt|ji di ddididkst|jdddddifgdd |jdi ddiddiddidii dkst|ji di ddiddiddididkst|   }ddddifd	d
dg}|| ddiddii i d}|jd|ii dksVt|jd|ii dksptttj	|jdg ttj	|jdg tt
|jdg tjtdd |ddg W 5 Q R X d S )Nr	   r   r   rK   r|   r   rM   )r   r   r   r|   )r   r   ))rK   r   )r   r      )r   r   s)r   r   r   r   r   )r   )r   r   r   r|   rF   ry   rz   )Nr|   )r|   r   )r]   Zadd_edges_fromr}   r   rq   rr   r   r   r   r   	TypeErrorr~   )r   r   r   Zkeydictr   r   r   test_add_edges_from#  s:    """
z$TestMultiDiGraph.test_add_edges_fromc                 C   s   | j }|dd |jddi iidi idi iddi idi iddksLt|jdi idi idddi iidi idi iddksttttj	f|jdd tjttj	f|jdddd	 d S )
Nr   r   r   r
   r	   rG   r   r   key)
r   r.   rq   r   rr   r   r   r   r   r   r$   r   r   r   test_remove_edgeI  s    

z!TestMultiDiGraph.test_remove_edgec                 C   s  | j }|jdddd |jdddd |jdi idi iddi idi iddi idi iddksft|jdi idi iddi idi iddi idi iddkst|jdi idi iddi idi iddi idi iddkst|dd |jd	di iidi idi iddi idi iddks.t|jdi idi idd	di iidi idi iddksjttt	t
jf|jd
d d S )Nr   r   zparallel edger   r   r
   r	   rG   r   r   )r   r#   r.   r}   r   rq   rr   r   r   r   r   r   r$   r   r   r   test_remove_multiedgeY  s<    

z&TestMultiDiGraph.test_remove_multiedgec                 C   s   | j }|dg |jddi iidi idi iddi idi iddksLt|jdi idi idddi iidi idi iddkst|dg d S )Nr	   r   r   r
   rG   r   )r   r   )r   Zremove_edges_fromrq   r   rr   r$   r   r   r   test_remove_edges_from{  s    

z'TestMultiDiGraph.test_remove_edges_fromN)	rj   rk   rl   rx   r   r   r   r   r   r   r   r   r   rm      s   &"rm   c                   @   s   e Zd ZdZdd ZdS )r   z=Unit tests for the :meth:`MultiDiGraph.edge_subgraph` method.c                 C   s   t  }t |td t |td t |ttd t |ttd tdD ]}d| |j| d< qXd|jd d d d< d|jd d d d< d|jd	 d
 d d< d|jd	 d
 d d< d|jd< || _|	ddg| _
d S )Nr   nodenameZedge010r   r   Zedge011Zedge340r|   rF   Zedge341r6   r(   )r|   rF   r   )r   r_   Zadd_pathrangereversedr8   Zadjr6   r   Zedge_subgraphr:   )r   r   ir   r   r   rx     s    
zTestEdgeSubgraph.setup_methodN)rj   rk   rl   __doc__rx   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )CustomDictClassN)rj   rk   rl   r   r   r   r   r     s   r   c                   @   s(   e Zd ZeZeZeZeZeZeZ	eZ
dS )MultiDiGraphSubClassN)rj   rk   rl   r   node_dict_factorynode_attr_dict_factoryadjlist_outer_dict_factoryadjlist_inner_dict_factoryZedge_key_dict_factoryZedge_attr_dict_factoryZgraph_attr_dict_factoryr   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestMultiDiGraphSubclassc                 C   s   t | _dddg| _dddg| _|  | _| j| j | j | j d| j_i i i d| j_| jD ]B}| jD ]6}||krqrdi i}|| jj| |< || jj| |< qrqh| j	 | j_
| j | jj
d< | j | jj
d< | j | jj
d< d S rn   )r   r]   ro   rp   r   r   r   rq   rr   r   rs   r   rt   r   r   r   rx     s,    


z%TestMultiDiGraphSubclass.setup_methodN)rj   rk   rl   rx   r   r   r   r   r     s   r   )collectionsr   r   Znetworkxr   Znetworkx.utilsr   Ztest_multigraphr   r   Z_TestMultiGraphEdgeSubgraphr   Z_TestMultiGraphr   rm   r   r_   r   r   r   r   r   r   <module>   s    s 
