o
    h$                     @   s<   d dl Z d dlZd dlmZ G dd dZG dd dZdS )    N)convert_node_labels_to_integersc                   @   sl   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S )TestCliquesc                 C   sl   g d}t tj|dd| _tt| j| _td}t	|dd t
dD }|g d || _d S )N)      r   r      r   r      r   r   r   r   )first_label   c                 S   s   i | ]}||d  qS r    ).0ir   r   Y/var/www/vscode/kcb/lib/python3.10/site-packages/networkx/algorithms/tests/test_clique.py
<dictcomp>   s    z,TestCliques.setup_method.<locals>.<dictcomp>))r   r	   )r      )r   r   )r   r   )r   r   )cnltinx
generatorshavel_hakimi_graphGlistfind_cliquesclcomplete_graphrelabel_nodesrangeremove_edges_fromH)selfzr   r   r   r   setup_method   s   

zTestCliques.setup_methodc                 C   s   t t| j}t| j}g dg dg dddgddgg}ttt|ttt|ks/J ttt|ttt|ks?J d S )Nr   r	   r   r   r   r	   r   )r   r         	   
      )r   r   r   r   find_cliques_recursivesortedmapr   r   rclexpectedr   r   r   test_find_cliques1   s
   " $zTestCliques.test_find_cliques1c                    s   | j dd tt| j }tt| j }ttt|ttt|ks'J h dh dh dddhddhg t	 t	|ksBJ t
 fd	d
|D sOJ d S )Nr   >   r   r   r   r	   >   r   r   r	   >   r   r   r#   r$   r%   r&   r'   c                 3   s    | ]	}t | v V  qd S N)set)r   canswerr   r   	<genexpr>   s    z-TestCliques.test_selfloops.<locals>.<genexpr>)r   add_edger   r   r   r(   r0   r*   	frozensetlenall)r   r   r,   r   r2   r   test_selfloops   s    "zTestCliques.test_selfloopsc                 C   sB   t t| j}ttt|ddgg dddgg dgksJ d S )Nr   r   )r   r   r   r	   r   )r   r   r	   )r   r   r   r   r)   r*   )r   hclr   r   r   test_find_cliques2!   s   2zTestCliques.test_find_cliques2c                 C   sT  t t| jdg}t| jdg}g dg dg}ttt|ttt|ks*J ttt|ttt|ks:J t t| jddg}t| jddg}g dg}ttt|ttt|kscJ ttt|ttt|kssJ t t| jg d}t| jg d}g dg}ttt|ttt|ksJ ttt|ttt|ksJ t t| jg d}t| jg d}g dg}ttt|ttt|ksJ ttt|ttt|ksJ tt	 t t| jg d W d    n	1 sw   Y  tt	 t t| jg d W d    d S 1 s#w   Y  d S )Nr   r!   r"   r   )r   r	   r   r   )
r   r   r   r   r(   r)   r*   pytestraises
ValueErrorr+   r   r   r   test_find_cliques3%   s4     
  
  
  $zTestCliques.test_find_cliques3c                 C   sx  | j }t|ddksJ tt|dg dgksJ tt|ddg ddgks/J t|ddgdddks>J t|ddksHJ t|ddddddddddddks]J tj|t|dddddddddddddksvJ tj|g ddddddksJ tj|| jdddddddddddddksJ tj|t|| jdddddddddddddksJ d S )Nr   r   r   r   r   r   r   r   r   r	   r#   r$   r%   r&   r'   )nodes)r   r   r   cliques)r   r   number_of_cliquesr   valuesr   r   r   r   r   r   test_number_of_cliquesF   sv    $"z"TestCliques.test_number_of_cliquesc                 C   s,  | j }t|ddksJ tt|dg dgksJ tt|ddg ddgks/J t|ddgdddks>J t|ddksHJ t|ddddddddddddks]J tj|| jdddddddddddddksuJ tj|ddg| jddddksJ tj|d| jddksJ d S )Nr   r   r   r@   r   rA   rC   )r   r   node_clique_numberr   rF   r   rG   r   r   r   test_node_clique_number   sD    $$z#TestCliques.test_node_clique_numberc                 C   s   | j }t|}t|g dksJ t|tdd}|j|jks#J t|tdd}t|dd tddD }t|g d	ksDJ d S )
N)r   r   r   r   r   r	   r#   r$   r%   r&   r'   r      rK   r   c                 S   s   i | ]}| |qS r   r   r   vr   r   r   r      s    z:TestCliques.test_make_clique_bipartite.<locals>.<dictcomp>r	   )r   r   r   r   r   )r   r   make_clique_bipartiter)   projected_graphr   adjr   )r   r   Br   H1r   r   r   test_make_clique_bipartite   s   
z&TestCliques.test_make_clique_bipartitec                 C   s\   | j }t|}t|tdd}t|dd tddD }t|}|j|jks,J dS )zTests that the maximal clique graph is the same as the bipartite
        clique graph after being projected onto the nodes representing the
        cliques.

        rK   r   c                 S   s   i | ]}| |d  qS r
   r   rQ   r   r   r   r      s    z:TestCliques.test_make_max_clique_graph.<locals>.<dictcomp>r   r	   N)r   r   rS   rT   r   r   make_max_clique_graphrU   )r   r   rV   rW   H2r   r   r   test_make_max_clique_graph   s   

z&TestCliques.test_make_max_clique_graphc                 C   sD   t tj ttt  W d    d S 1 sw   Y  d S r/   )r<   r=   r   NetworkXNotImplementednextr   DiGraph)r   r   r   r   test_directed   s   "zTestCliques.test_directedc                 C   s8   t  }tt |g ksJ tt |g ksJ d S r/   )r   Graphr)   r   r(   rG   r   r   r   test_find_cliques_trivial   s   z%TestCliques.test_find_cliques_trivialc                 C   sF   t g d}t g d}|d t t j|t jd|s!J d S )N)r@   )r   r   )r   r   )r   r	   ))r   r   )r   r   r@   r   )create_using)r   r`   add_nodeis_isomorphicrY   )r   r   Er   r   r   'test_make_max_clique_graph_create_using   s   
 z3TestCliques.test_make_max_clique_graph_create_usingN)__name__
__module____qualname__r    r.   r9   r;   r?   rH   rJ   rX   r[   r_   ra   rf   r   r   r   r   r      s    		!=$r   c                   @   s   e Zd Zdd ZdS )TestEnumerateAllCliquesc                 C   s  t  }g d}|| tt |}ttt|}t||ks#J g dgdgdgdgdgdgdgddgg d	g d
g dddgg dg dg dddgg dddgddgg dg dg dg dddgg dddgddgddgg dg dg dddgg dddgg dddgddgg dddgddgddgg dg dg dg d}ttt|ttt|ksJ d S )N))ab)rk   r1   )rk   d)rk   e)rl   r1   )rl   rm   )rl   rn   )r1   rm   )r1   rn   )rm   rn   )frl   )ro   r1   )ro   g)rp   ro   )rp   r1   )rp   rm   )rp   rn   rk   rl   r1   rm   rn   ro   rp   )rk   rl   rm   )rk   rl   rm   rn   )rk   rl   rn   )rk   r1   rm   )rk   r1   rm   rn   )rk   r1   rn   )rk   rm   rn   )rl   r1   rm   )rl   r1   rm   rn   )rl   r1   rn   )rl   r1   ro   )rl   rm   rn   )r1   rm   rn   )r1   rm   rn   rp   )r1   rm   rp   )r1   rn   rp   )r1   ro   rp   )rm   rn   rp   )rk   rl   r1   )rk   rl   r1   rm   )rk   rl   r1   rm   rn   )rk   rl   r1   rn   )r   r`   add_edges_fromr   enumerate_all_cliquesr*   r7   r)   )r   r   edges_fig_4rD   clique_sizesexpected_cliquesr   r   r   test_paper_figure_4   s   
	
 !"#$%&'()*+,-$0z+TestEnumerateAllCliques.test_paper_figure_4N)rg   rh   ri   rv   r   r   r   r   rj      s    rj   )r<   networkxr   r   r   r   rj   r   r   r   r   <module>   s     N