o
    3ήc                     @   s&   d dl Zd dlmZ G dd dZdS )    N)nodes_equalc                   @   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dd Zdd ZdS )TestCorec                 C   s~   t t  d}t |d}t ||}|g d |d || _g d}t |}ddddd	d
dd}t ||| _	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   )
nxconvert_node_labels_to_integerstetrahedral_graphunionadd_edges_fromadd_nodeGhavel_hakimi_graphrelabel_nodesH)clst1t2r   degseqr!   mapping r'   J/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/tests/test_core.pysetup_class   s   	

zTestCore.setup_classc                 C   s   t  }t |i ksJ dS )zEmpty graphN)r   Graphcore_number)selfr   r'   r'   r(   test_trivial2   s   zTestCore.test_trivialc                    s|   t | j  fddtdD }t|d dgsJ t|d g ds&J t|d g d	s1J t|d
 g ds<J d S )Nc                    $   g | ] t  fd dD qS )c                 3        | ]} | kr|V  qd S Nr'   .0ncorevalr'   r(   	<genexpr>9       z7TestCore.test_core_number.<locals>.<listcomp>.<genexpr>sortedr2   r5   r6   r(   
<listcomp>9      $ z-TestCore.test_core_number.<locals>.<listcomp>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   ranger   r,   nodes_by_corer'   r<   r(   test_core_number7   s   zTestCore.test_core_numberc                    sf   t | j  fddtdD }t|d dgsJ t|d ddgs&J t|d g ds1J d S )Nc                    r.   )c                 3   r/   r0   r'   r1   r4   r'   r(   r7   A   r8   z8TestCore.test_core_number2.<locals>.<listcomp>.<genexpr>r9   r;   r<   r=   r(   r>   A   r?   z.TestCore.test_core_number2.<locals>.<listcomp>r   r   r   r   r   r   r   r   )r   r+   r!   rB   r   rC   r'   r<   r(   test_core_number2?   s
   zTestCore.test_core_number2c                 C   sl   t  }g d}|| t |dddddksJ g d}|| t |dddddddks4J dS )z>core number had a bug for directed graphs found in issue #1959))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   N)r   DiGraphr   r+   )r,   r   edges
more_edgesr'   r'   r(   test_directed_core_numberF   s   

$z"TestCore.test_directed_core_numberc                 C   (   t | j}t| g dksJ d S NrF   r   k_corer!   r:   nodes)r,   main_core_subgraphr'   r'   r(   test_main_coreR      zTestCore.test_main_corec                 C   s   t j| jdd}t| t| j ksJ t j| jdd}t| g dks+J t j| jdd}t| g dks?J d S )Nr   kr   rH   r   rF   rO   )r,   k_core_subgraphr'   r'   r(   test_k_coreV   s   zTestCore.test_k_corec                 C   rM   )Nr   r   r   r   k_crustr!   r:   rQ   )r,   main_crust_subgraphr'   r'   r(   test_main_crusta   rT   zTestCore.test_main_crustc                 C   s   t j| jdd}t| t| j ksJ t j| jdd}t| g dks+J t j| jdd}t| dgks>J d S )Nr   rU   r   rY   r   rZ   )r,   k_crust_subgraphr'   r'   r(   test_k_cruste   s   zTestCore.test_k_crustc                 C   rM   rN   r   k_shellr!   r:   rQ   )r,   main_shell_subgraphr'   r'   r(   test_main_shellp   rT   zTestCore.test_main_shellc                 C   sz   t j| jdd}t| g dksJ t j| jdd}t| ddgks(J t j| jdd}t| dgks;J d S )Nr   rU   rF   r   r   r   r`   )r,   k_shell_subgraphr'   r'   r(   test_k_shellt   s   zTestCore.test_k_shellc                 C   sx   t j| jdd}t| g dksJ t j| jdd}t| dgks'J t j| jdd}t| dgks:J d S )Nr   rU   rF   r   r   )r   k_coronar!   r:   rQ   )r,   k_corona_subgraphr'   r'   r(   test_k_corona   s   zTestCore.test_k_coronac                 C   s.  t | jd}t| ttddksJ t | jd}t| ttddks,J t | jd}t| ttddksBJ t | jd}t| ttddksXJ t | jd}t| ttddksnJ t | jd}t| ttdd	ksJ t | jd
}t| g ksJ d S )Nr   r   r   r   r   r   r   r   r   )r   k_trussr   r:   rQ   listrB   )r,   k_truss_subgraphr'   r'   r(   test_k_truss   s   zTestCore.test_k_trussc                    s   t | j  fddtddD }t|d dgsJ t|d g ds'J t|d g d	s2J t|d
 ddgs=J t|d g dsHJ t|d d
dgsSJ d S )Nc                    r.   )c                 3   r/   r0   r'   r1   )layersr6   r'   r(   r7      r8   z8TestCore.test_onion_layers.<locals>.<listcomp>.<genexpr>r9   r;   rn   r=   r(   r>      s    z.TestCore.test_onion_layers.<locals>.<listcomp>r   r   r   r   r@   r   )r   r
   r   r   r   r   r   r   r	   r   )r   r   r   r   r   rA   r   )r   onion_layersr   rB   r   )r,   nodes_by_layerr'   ro   r(   test_onion_layers   s   
zTestCore.test_onion_layersN)__name__
__module____qualname__classmethodr)   r-   rE   rG   rL   rS   rX   r]   r_   rc   re   rh   rm   rr   r'   r'   r'   r(   r      s     
+r   )networkxr   networkx.utilsr   r   r'   r'   r'   r(   <module>   s    