o
    ˷e>                     @   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   _/var/www/ideatree/venv/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   	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   r3   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   r3   r0   r%   r&   r   r   r   test_in_edges_datat   r2   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 N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 r7   r9   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   add_attributesr   
MultiGraphr   r   AssertionErrorto_undirectedrA   )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   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   rG   rH   )r   has_predecessorr&   r   r   r   test_has_predecessor   rK   z+BaseMultiDiGraphTester.test_has_predecessorc                 C   rL   rM   )r   r   predecessorsr   r   r   r   r   r&   r   r   r   test_predecessors   rP   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   rV   r   rV   rV   r   r   r   r   rU   r   333333?333333?weightotherr\   r\   ))r   333333@)r   r_   rW   r]   ))r   @)r   r`   rW   )r   r   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   rX   r   r   r\   r^   )r   r   	in_degreerb   rc   rd   r&   r   r   r   test_in_degree      z%BaseMultiDiGraphTester.test_in_degreec                 C   rf   rg   )r   r   
out_degreerb   rc   rd   r&   r   r   r   test_out_degree   rj   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   rY   rZ   r[   r\   r^   r   g333333@r]   g@)r   size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)
reciprocal)Graphr%   rE   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   r0   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   rv   rw   r   r   r   r   r   r0   rx   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   r{   idr3   r+   rh   rk   succpredr&   r   r   r   test_di_attributes_cached   s   
z0BaseMultiDiGraphTester.test_di_attributes_cachedN)__name__
__module____qualname__r   r#   r'   r,   r-   r1   r4   r5   r6   r?   rA   rF   rJ   rO   rR   rT   re   ri   rl   rq   ru   rz   r|   r   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   rX   r   r   r   )	r   rv   rs   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 d S )Nr   r   r
   )rs   r%   _adjr   r   r&   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 d S )Nr
   r   r   r\      r   r^   )r   r   r   r   )r   r   ))r\   r   )r   r      )r   r   s)r   r   r   r   r   )r   )r   r   r   r   rV   )
rs   add_edges_fromr   r   r   r   r   r   r   	TypeError)r   r   r   keydictr   r   r   test_add_edges_from!  s6   """
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
   rX   r   r   key)	r   r0   r   r   r   r   r   r   r   r&   r   r   r   test_remove_edgeE  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
   rX   r   r   )r   r%   r0   r   r   r   r   r   r   r   r   r&   r   r   r   test_remove_multiedgeU  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   rX   r   )r   r   )r   remove_edges_fromr   r   r&   r   r   r   test_remove_edges_fromw  s   

z'TestMultiDiGraph.test_remove_edges_fromN)	r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    $"r   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nameedge010r   r   edge011edge340r   rV   edge341r:   r*   )r   rV   r   )r   rv   add_pathrangereversedr<   adjr:   r   edge_subgraphr>   )r   r   ir   r   r   r     s   
zTestEdgeSubgraph.setup_methodN)r   r   r   __doc__r   r   r   r   r   r     s    r   c                   @   s   e Zd ZdS )CustomDictClassN)r   r   r   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)r   r   r   r   node_dict_factorynode_attr_dict_factoryadjlist_outer_dict_factoryadjlist_inner_dict_factoryedge_key_dict_factoryedge_attr_dict_factory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 r   )r   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s.   




z%TestMultiDiGraphSubclass.setup_methodN)r   r   r   r   r   r   r   r   r     s    r   )collectionsr   r   networkxr   networkx.utilsr   test_multigraphr   r   _TestMultiGraphEdgeSubgraphr   _TestMultiGraphr   r   r   rv   r   r   r   r   r   r   <module>   s     s 	
