o
    ]Zh?                     @   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   W/var/www/auris/lib/python3.10/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s)J 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sJ |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sJ tttjf|jd t|jddddd	gks6J 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sJ |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sJ |dd |jdddd t|jdddddddifddi fgks=J t|jdddddgksLJ t|jddd	d
ddgks\J 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      *.$z*BaseMultiDiGraphTester.test_out_edges_datac                 C   s   | j }t| g dksJ t|dddgksJ tttjf|jd |ddd t| g dks:J t|jdd	d
ddgksIJ 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sJ |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sXJ d S )Nr	   r   r   r   r   r   r#   TF)r!   r(   )r   r   r2   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sJ |dd |jdddd t|jdddddddifddi fgks=J t|jdddddgksLJ t|jddd	d
ddgks\J d S )Nr   Tr    r   r   r!   )r   r   r   )r   r   Nr   r-   )r   r   r   )r   r   r2   r/   r$   r%   r   r   r   test_in_edges_datat   r1   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s0J |jd d d |jd d |jd d ksJJ |d d d d |d d d d ks`J |d d d d d |d d d d |d d d d ksJ d S NZfoor   r   r   graphappendnodesr   Hr   r   r   r   
is_shallow}        ,0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s0J |jd d d |jd d |jd d ksJJ |d d d d |d d d d ks`J |d d d d d |d d d d |d d d d ksJ d S r6   r7   r;   r   r   r   is_deep   r>   zBaseMultiDiGraphTester.is_deepc                 C   sv   | j }| | t|}zt| g dsJ W n ty.   t| g ds,J Y nw | }| || 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   *   | j }|ddsJ |ddrJ d S Nr   r   r   )r   Zhas_successorr%   r   r   r   test_has_successor      z)BaseMultiDiGraphTester.test_has_successorc                 C   :   | 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      z&BaseMultiDiGraphTester.test_successorsc                 C   rC   rD   )r   Zhas_predecessorr%   r   r   r   test_has_predecessor   rF   z+BaseMultiDiGraphTester.test_has_predecessorc                 C   rG   rH   )r   r   Zpredecessorsr   r   r   r   r   r%   r   r   r   test_predecessors   rK   z(BaseMultiDiGraphTester.test_predecessorsc                 C   s   | j }t| g dksJ t| ddddksJ |ddks&J t|tdgdgks5J |jddddd	 t|jd
dg dksLJ t|jddg dksZJ d S )N)r      )r   rO   r   rO   rO   r   r   r   r   rN   r   333333?333333?weightotherrU   rU   ))r   333333@)r   rX   rP   rV   ))r   @)r   rY   rP   )r   r   Zdegreedictlistiterr$   r%   r   r   r   test_degree   s    z"BaseMultiDiGraphTester.test_degreec                 C      | j }t| g dksJ t| ddddksJ |ddks&J t|tdgdgks5J |jddddks@J d S N)r   r   )r   r   r   rQ   r   r   rU   rW   )r   r   	in_degreerZ   r[   r\   r%   r   r   r   test_in_degree      z%BaseMultiDiGraphTester.test_in_degreec                 C   r^   r_   )r   r   
out_degreerZ   r[   r\   r%   r   r   r   test_out_degree   rb   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s)J t|jddd	dks6J d S )N   r   r   rR   rS   rT   rU   rW   r   g333333@rV   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s2J d S )Nr   r   T)Z
reciprocal)Graphr$   rA   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s(J t| ddgks4J 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sJ tt j|jdd d S )Nr
   F)copyr   r   r   )	r   rk   rl   r   r   r   r   r   r/   rm   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s)J t|jt|jks5J t|jt|jksAJ t|jt|jksMJ d S )N)	r   rp   idr2   r*   r`   rc   succpredr%   r   r   r   test_di_attributes_cached   s   
z0BaseMultiDiGraphTester.test_di_attributes_cachedN)__name__
__module____qualname__r   r"   r&   r+   r,   r0   r3   r4   r5   r=   r?   rB   rE   rJ   rL   rM   r]   ra   rd   rh   rj   ro   rq   ru   r   r   r   r   r      s2    		
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 ]!}| jD ]}||kr2q+di i}|| jj| |< || jj| |< q+q&i | j_i | jjd< i | jjd< i | jjd< d S N)r
   r   r   rQ   r   r   r   )	r   rk   ri   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sJ |jddi iii dks&J |ji ddi iidks4J |   }|jd  |jddi iii dksKJ |jddi iii dksYJ |ji ddi iidksgJ tjtdd |d d W d    d S 1 sw   Y  d S )Nr   r   r
   None cannot be a nodematch   )ri   r$   _adjr}   r~   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s!J |jdi ddidii dks2J |ji di ddididksCJ |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shJ |ji di ddiddiddididksJ |   }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sJ |jd|ii dksJ 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    d S 1 sw   Y  d S )Nr
   r   r   rU   r   r   rW   )r   r   r   r   )r   r   ))rU   r   )r   r      )r   r   s)r   r   r   r   r   )r   )r   r   r   r   rO   r   r   )Nr   )r   r   )ri   Zadd_edges_fromr   r}   r~   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s&J |jdi idi idddi iidi idi iddksCJ 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
   rQ   r   r   key)	r   r/   r}   r~   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s3J |jdi idi iddi idi iddi idi iddksSJ |jdi idi iddi idi iddi idi iddkssJ |dd |jd	di ii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	di iidi idi iddksJ ttt	j
f|jd
d d S )Nr   r   zparallel edger   r   r   r
   rQ   r   r   )r   r$   r/   r   r}   r~   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s&J |jdi idi idddi iidi idi iddksCJ |dg d S )Nr
   r   r   r   rQ   r   )r   r   )r   Zremove_edges_fromr}   r~   r%   r   r   r   test_remove_edges_from{  s   

z'TestMultiDiGraph.test_remove_edges_fromN)	rv   rw   rx   r   r   r   r   r   r   r   r   r   r   ry      s    &"ry   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< q,d|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   rO   Zedge341r8   r)   )r   rO   r   )r   rk   Zadd_pathrangereversedr:   Zadjr8   r   Zedge_subgraphr<   )r   r   ir   r   r   r     s   
zTestEdgeSubgraph.setup_methodN)rv   rw   rx   __doc__r   r   r   r   r   r     s    r   c                   @   s   e Zd ZdS )CustomDictClassN)rv   rw   rx   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)rv   rw   rx   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 ]!}| jD ]}||kr>q7di i}|| jj| |< || jj| |< q7q2| j	 | j_
| j | jj
d< | j | jj
d< | j | jj
d< d S rz   )r   ri   r{   r|   r   r   r   r}   r~   r   r   r   r   r   r   r   r     s.   




z%TestMultiDiGraphSubclass.setup_methodN)rv   rw   rx   r   r   r   r   r   r     s    r   )collectionsr   r   Znetworkxr   Znetworkx.utilsr   Ztest_multigraphr   r   Z_TestMultiGraphEdgeSubgraphr   Z_TestMultiGraphr   ry   r   rk   r   r   r   r   r   r   <module>   s     s 
