o
    3ήc                     @   s.   d dl Z d dlZd dlmZ G dd dZdS )    N)NetworkXNotImplementedc                   @   s   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d Zdd Zdd Zdd ZejejejfZejdedd ZdS )TestStronglyConnectedc              
   C   s  g | _ t }|g d tg dtg dtdgh}| j ||f t }|g d tg dtdgh}| j ||f t }|g d tg d	h}| j ||f tdgd
dgddgddgdgg g d}tdgtdgtd
gtdgtdgtdgtdgh}| j ||f tdgg dddgdgdgd}tg dtddgh}| j ||f d S )N)      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   )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   r   r   r   r   )r   r   r   r   r   )r   r   r   )gcnxDiGraphadd_edges_from	frozensetappend)clsGC r   c/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/components/tests/test_strongly_connected.pysetup_class   s8    *	$z!TestStronglyConnected.setup_classc                 C   4   t j}| jD ]\}}dd ||D |ksJ qd S )Nc                 S      h | ]}t |qS r   r   .0gr   r   r   	<setcomp>=       z4TestStronglyConnected.test_tarjan.<locals>.<setcomp>)r   strongly_connected_componentsr   selfsccr   r   r   r   r   test_tarjan:      z!TestStronglyConnected.test_tarjanc                 C   r   )Nc                 S   r   r   r   r    r   r   r   r#   B   r$   z>TestStronglyConnected.test_tarjan_recursive.<locals>.<setcomp>)r   'strongly_connected_components_recursiver   r&   r   r   r   test_tarjan_recursive?   r*   z+TestStronglyConnected.test_tarjan_recursivec                 C   r   )Nc                 S   r   r   r   r    r   r   r   r#   G   r$   z6TestStronglyConnected.test_kosaraju.<locals>.<setcomp>)r   &kosaraju_strongly_connected_componentsr   r&   r   r   r   test_kosarajuD   r*   z#TestStronglyConnected.test_kosarajuc                 C   s.   t j}| jD ]\}}||t|ksJ qd S N)r   $number_strongly_connected_componentsr   len)r'   nccr   r   r   r   r   )test_number_strongly_connected_componentsI   s   z?TestStronglyConnected.test_number_strongly_connected_componentsc                 C   s>   | j D ]\}}t|dkrt|sJ qt|rJ qd S )Nr   )r   r1   r   is_strongly_connected)r'   r   r   r   r   r   test_is_strongly_connectedN   s
   z0TestStronglyConnected.test_is_strongly_connectedc           	      C   s   t  }|g d tt |}t ||}t |sJ t| g dks+J i }t	|D ]\}}|D ]}|||< q7q1|d |d f}|j
| sNJ |d |d f}|j
| s]J |d |d f}|j
| slJ d S )N)r   r   )r      )r      r
   )r   r   r   r   )r   r   )r   r   )r   r	   )r   	   )r   
   )r	   r8   )r8   r   )r9   r   )r6   r   )r6   r   )r6   r   )r7   r   )r7   r6   )r   r   r   r   r   r   r   )r   r   r   listr%   condensationis_directed_acyclic_graphsortednodes	enumeratehas_edge)	r'   r   r(   cGmappingi	componentnedger   r   r   test_contract_scc1U   s&   
z(TestStronglyConnected.test_contract_scc1c                 C   sh   t  }|dd |dd tt |}t ||}t| dgks(J t| g ks2J d S )Nr   r   r   )r   r   add_edger:   r%   r;   r>   edges)r'   r   r(   rA   r   r   r   test_contract_scc_isolate   s   z/TestStronglyConnected.test_contract_scc_isolatec                 C   s   t  }|dd |dd |dd |dd |dd tt |}t ||}t| ddgks;J d|d v rDd}nd}t| |gksQJ d S )Nr   r   r   r   r   )r   r   )r   r   )	r   r   rH   r:   r%   r;   r=   r>   rI   )r'   r   r(   rA   rF   r   r   r   test_contract_scc_edge   s   z,TestStronglyConnected.test_contract_scc_edgec                    s   | j d \ t tdd t}|jd }tfdd|D s%J t fdd| D s4J t fdd| D sCJ |jdd	D ]\}}t	 | |j| d
 ks\J qId S )Nr   T)keyreverserB   c                 3   s    | ]}| v V  qd S r/   r   )r!   rE   )r   r   r   	<genexpr>   s    zNTestStronglyConnected.test_condensation_mapping_and_members.<locals>.<genexpr>c                 3   (    | ]\}}| d  v rd |kV  qdS )r   Nr   r!   rE   cNr   r   r   rN         & c                 3   rO   )r   Nr   rP   rR   r   r   rN      rS   )datamembers)
r   r=   r1   r   r;   graphallitemsr>   set)r'   rA   rB   rE   dr   )r   r   r   %test_condensation_mapping_and_members   s   

 z;TestStronglyConnected.test_condensation_mapping_and_membersc                 C   sz   t  }tt |g ksJ tt |g ksJ tt |g ks%J tt |dks0J t	t j
t jt   d S )Nr   )r   r   r:   r%   r-   r+   r1   r;   pytestraisesNetworkXPointlessConceptr4   r'   r   r   r   r   test_null_graph   s   z%TestStronglyConnected.test_null_graphc                 C   s   t  }tt tt | W d    n1 sw   Y  tt tt | W d    n1 s7w   Y  tt tt | W d    n1 sSw   Y  ttt j	| tt j
t j	t   ttt j| d S r/   )r   Graphr\   r]   r   nextr%   r-   r+   r4   r^   r   r;   r_   r   r   r   test_connected_raise   s   z*TestStronglyConnected.test_connected_raiseget_componentsc                 C   sZ   t jdt jd}t ||}t }||D ]}t||@ dks!J || |  qd S )Nr   )create_usingr   )r   
path_graphr   disjoint_unionrY   r1   updateclear)r'   rd   DGr   seenrD   r   r   r   test_connected_mutability   s   

z/TestStronglyConnected.test_connected_mutabilityN)__name__
__module____qualname__classmethodr   r)   r,   r.   r3   r5   rG   rJ   rK   r[   r`   rc   r   r%   r-   r+   strong_cc_methodsr\   markparametrizerl   r   r   r   r   r      s(    
1-

r   )r\   networkxr   r   r   r   r   r   r   <module>   s    