a
    h?                     @   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   sV   | j }g d}t| |ks"J t|dddgks<J tttjf|jd d S )Nr   r   r      r   r   r   r   r   r   r   r   r   r
   r   )K3sortededgespytestraisesKeyErrornxNetworkXErrorselfGr    r   V/var/www/auris/lib/python3.9/site-packages/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sRJ t|jdddddi fddi fgks|J tttjf|jd d S )Nr   r   r   Tdatar   )	r   r   r   r   r   r   r   r   Z	neighborsr   r   r   r   test_edges_data   s
    4*z&BaseMultiDiGraphTester.test_edges_datac                 C   s`   | j }t| g dksJ t|dddgks8J |dd t| g dks\J d S )Nr	   r   r
   r   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   sp   | j }t| g dksJ t|dddgks8J tttjf|jd t|jddddd	gkslJ d S )
Nr	   r   r
   r   r   Tkeysr   r   r   )r   r   r   )r   r   	out_edgesr   r   r   r   r   r%   r   r   r   test_out_edges+   s
    z%BaseMultiDiGraphTester.test_out_edgesc                 C   sb   | j }t| g dksJ t|dddgks8J |ddd t| g dks^J d S )Nr	   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s0J |dd |jdddd t|jdddddddifddi fgkszJ t|jdddddgksJ t|jddd	d
ddgksJ d S )Nr   Tr    r   r   r!   )r   r   r   )r   r   Nr   r!   default)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| g dksJ t|dddgks8J tttjf|jd |ddd t| g dkstJ t|jdd	d
ddgksJ d S )Nr	   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   test_in_edgesJ   s    	z$BaseMultiDiGraphTester.test_in_edgesc              
   C   s   | j }t| g dksJ t|dddgks8J |ddd t| g dks^J 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sJ d S )Nr	   r   r   r   r   r   r#   TF)r!   r(   )r   r   r1   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s0J |dd |jdddd t|jdddddddifddi fgkszJ t|jdddddgksJ t|jddd	d
ddgksJ d S )Nr   Tr    r   r   r!   )r   r   r   )r   r   Nr   r-   )r   r   r   )r   r   r1   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J |j d d |j d |j d ks@J |jd d |jd d ks`J |jd d d |jd d |jd d ksJ |d d d d |d d d d ksJ |d d d d d |d d d d |d d d d ksJ d S NZfoor   r   r   graphappendnodesr   Hr   r   r   r   
is_shallow}   s      ,z!BaseMultiDiGraphTester.is_shallowc                 C   s  |j d |j d ksJ |j d d |j d |j d ks@J |jd d |jd d ks`J |jd d d |jd d |jd d ksJ |d d d d |d d d d ksJ |d d d d d |d d d d |d d d d ksJ d S r5   r6   r:   r   r   r   is_deep   s      ,zBaseMultiDiGraphTester.is_deepc                 C   sv   | j }| | t|}zt| g ds2J W n( ty\   t| g dsXJ Y n0 | }| || d S )N)r
   r   r   )r
   r   r   r   )	r   Zadd_attributesr   Z
MultiGraphr   r   AssertionErrorto_undirectedr=   )r   r   r;   r   r   r   test_to_undirected   s    

z)BaseMultiDiGraphTester.test_to_undirectedc                 C   s*   | j }|ddsJ |ddr&J d S Nr   r   r   )r   Zhas_successorr%   r   r   r   test_has_successor   s    z)BaseMultiDiGraphTester.test_has_successorc                 C   s:   | j }t|dddgks J tttjf|jd d S Nr   r   r   r   )r   r   
successorsr   r   r   r   r   r%   r   r   r   test_successors   s    z&BaseMultiDiGraphTester.test_successorsc                 C   s*   | j }|ddsJ |ddr&J d S rA   )r   Zhas_predecessorr%   r   r   r   test_has_predecessor   s    z+BaseMultiDiGraphTester.test_has_predecessorc                 C   s:   | j }t|dddgks J tttjf|jd d S rC   )r   r   Zpredecessorsr   r   r   r   r   r%   r   r   r   test_predecessors   s    z(BaseMultiDiGraphTester.test_predecessorsc                 C   s   | j }t| g dksJ t| ddddks:J |ddksLJ t|tdgdgksjJ |jddddd	 t|jd
dg dksJ t|jddg dksJ d S )N)r      )r   rI   r   rI   rI   r   r   r   r   rH   r   333333?333333?weightotherrO   rO   ))r   333333@)r   rR   rJ   rP   ))r   @)r   rS   rJ   )r   r   Zdegreedictlistiterr$   r%   r   r   r   test_degree   s    z"BaseMultiDiGraphTester.test_degreec                 C   s   | j }t| g dksJ t| ddddks:J |ddksLJ t|tdgdgksjJ |jddddksJ d S N)r   r   )r   r   r   rK   r   r   rO   rQ   )r   r   	in_degreerT   rU   rV   r%   r   r   r   test_in_degree   s    z%BaseMultiDiGraphTester.test_in_degreec                 C   s   | j }t| g dksJ t| ddddks:J |ddksLJ t|tdgdgksjJ |jddddksJ d S rX   )r   r   
out_degreerT   rU   rV   r%   r   r   r   test_out_degree   s    z&BaseMultiDiGraphTester.test_out_degreec                 C   sp   | j }| dksJ | dks&J |jddddd t|jddd	d
ksRJ t|jddd	dkslJ d S )N   r   r   rL   rM   rN   rO   rQ   r   g333333@rP   g@)r   sizeZnumber_of_edgesr$   roundr%   r   r   r   	test_size   s    z BaseMultiDiGraphTester.test_sizec                 C   sh   |   }|dd | dds(J |jddddr@J |dd |jddddsdJ d S )Nr   r   T)Z
reciprocal)Graphr$   r?   Zhas_edger%   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.J |dd t| dgksPJ t| ddgkshJ d S )Nr
   r   r   r   )r   MultiDiGraphreverser   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s2J tt j|jdd d S )Nr
   F)copyr   r   r   )	r   rc   rd   r   r   r   r   r   r/   re   r   r   r   test_reverse_nocopy   s    z*BaseMultiDiGraphTester.test_reverse_nocopyc                 C   s   | j  }t|jt|jks"J t|jt|jks:J t|jt|jksRJ t|jt|jksjJ t|jt|jksJ t|jt|jksJ d S )N)	r   rh   idr1   r*   rY   r[   succpredr%   r   r   r   test_di_attributes_cached   s    
z0BaseMultiDiGraphTester.test_di_attributes_cachedN)__name__
__module____qualname__r   r"   r&   r+   r,   r0   r2   r3   r4   r<   r=   r@   rB   rE   rF   rG   rW   rZ   r\   r`   rb   rg   ri   rm   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| _g d| _g d| _|  | _i i i d| j_i i i d| j_| jD ]B}| jD ]6}||krdqVdi i}|| jj| |< || jj| |< qVqLi | j_i | jjd< i | jjd< i | jjd< d S N)r
   r   r   rK   r   r   r   )	r   rc   ra   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s0J |jddi iii dksLJ |ji ddi iidkshJ |   }|jd  |jddi iii dksJ |jddi iii dksJ |ji ddi iidksJ tjtdd |d d W d    n1 s0    Y  d S )Nr   r   r
   None cannot be a nodematch   )ra   r$   _adjru   rv   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sBJ |jdi ddidii dksdJ |ji di ddididksJ |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sJ |ji di ddiddiddididksJ |   }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sVJ |jd|ii dkspJ 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 d    n1 s0    Y  d S )Nr
   r   r   rO   r   r   rQ   )r   r   r   r   )r   r   ))rO   r   )r   r      )r   r   s)r   r   r   r   r   )r   )r   r   r   r   rI   r}   r~   )Nr   )r   r   )ra   Zadd_edges_fromr   ru   rv   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sLJ |jdi idi idddi iidi idi iddksJ 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
   rK   r   r   key)	r   r/   ru   rv   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sfJ |jdi idi iddi idi iddi idi iddksJ |jdi idi iddi idi iddi idi iddksJ |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.J |jdi idi idd	di iidi idi iddksjJ ttt	j
f|jd
d d S )Nr   r   zparallel edger   r   r   r
   rK   r   r   )r   r$   r/   r   ru   rv   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sLJ |jdi idi idddi iidi idi iddksJ |dg d S )Nr
   r   r   r   rK   r   )r   r   )r   Zremove_edges_fromru   rv   r%   r   r   r   test_remove_edges_from{  s    

z'TestMultiDiGraph.test_remove_edges_fromN)	rn   ro   rp   r|   r   r   r   r   r   r   r   r   r   rq      s   &"rq   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   rI   Zedge341r7   r)   )r   rI   r   )r   rc   Zadd_pathrangereversedr9   Zadjr7   r   Zedge_subgraphr;   )r   r   ir   r   r   r|     s    
zTestEdgeSubgraph.setup_methodN)rn   ro   rp   __doc__r|   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )CustomDictClassN)rn   ro   rp   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)rn   ro   rp   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 | _g d| _g d| _|  | _| j| j | j | j d| j_i i i d| j_| jD ]B}| jD ]6}||kr|qndi i}|| jj| |< || jj| |< qnqd| j	 | j_
| j | jj
d< | j | jj
d< | j | jj
d< d S rr   )r   ra   rs   rt   r   r   r   ru   rv   r   rw   r   rx   r   r   r   r|     s,    




z%TestMultiDiGraphSubclass.setup_methodN)rn   ro   rp   r|   r   r   r   r   r     s   r   )collectionsr   r   Znetworkxr   Znetworkx.utilsr   Ztest_multigraphr   r   Z_TestMultiGraphEdgeSubgraphr   Z_TestMultiGraphr   rq   r   rc   r   r   r   r   r   r   <module>   s    s 
