o
    ˷e)                     @   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                   @   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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   \/var/www/ideatree/venv/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(   r3   r*   	frozensetlenall)r   r   r,   r   r6   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   s4   | j }t|dksJ tj|| jddksJ d S )Nr   cliques)r   r   graph_clique_numberr   r   r   r   r   r   test_clique_numberF   s   zTestCliques.test_clique_numberc                 C   s,   t  }|g d t |dksJ d S )N)r   r   r   r   )r   Graphadd_nodes_fromrF   rG   r   r   r   test_clique_number2K   s   zTestCliques.test_clique_number2c                 C   s   t  }t |dksJ d S )Nr   )r   rI   rF   rG   r   r   r   test_clique_number3P   s   zTestCliques.test_clique_number3c                 C   s  | j }t|dksJ tj|| jddksJ t|ddks"J tt|dg dgks2J tt|ddg ddgksDJ t|ddgdddksSJ t|ddks]J t|ddddddddddddksrJ tj|t|dddddddddddddksJ 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   rD   r   r   r   r   r   r   r   r   r   r	   r#   r$   r%   r&   r'   )nodes)r   r   r   )r   r   graph_number_of_cliquesr   number_of_cliquesr   valuesrG   r   r   r   test_number_of_cliquesT   sz    $"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   rM   r   rN   rD   )r   r   node_clique_numberr   rR   r   rG   r   r   r   test_node_clique_number   sD    $$z#TestCliques.test_node_clique_numberc                 C   s~  | j }t|dg dgksJ tt|dg g dggks#J dd tt|ddg D g dgg dg dggksCJ t|ddg}| D ]
\}}t|||< qO|g dgg dg dgdkslJ t|dg dgksyJ h dh d	g}d
d t|dD }||tt|fv sJ dd tj|d| jdD }||tt|fv sJ t	t|dksJ d S )Nr   r!   c                 S      g | ]}t |qS r   )r)   r4   r   r   r   
<listcomp>   s    z<TestCliques.test_cliques_containing_node.<locals>.<listcomp>r   r"   rM   r/   r0   c                 S   rV   r   r2   r4   r   r   r   rW          c                 S   rV   r   r2   r4   r   r   r   rW      rX   rD   r'   )
r   r   cliques_containing_noder   rR   itemsr)   reversedr   r;   )r   r   resultkvr-   r7   r   r   r   test_cliques_containing_node   s&   &$z(TestCliques.test_cliques_containing_nodec                 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      r`   r   c                 S   s   i | ]}| |qS r   r   r   r^   r   r   r   r      rX   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.

        r`   r   c                 S   s   i | ]}| |d  qS r
   r   rf   r   r   r   r      s    z:TestCliques.test_make_max_clique_graph.<locals>.<dictcomp>r   r	   N)r   r   rg   rh   r   r   make_max_clique_graphri   )r   r   rj   rk   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 r1   )r@   rA   r   NetworkXNotImplementednextr   DiGraph)r   r   r   r   test_directed   s   "zTestCliques.test_directedN)__name__
__module____qualname__r    r.   r=   r?   rC   rH   rK   rL   rS   rU   r_   rl   ro   rs   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)rx   r5   )rx   d)rx   e)ry   r5   )ry   rz   )ry   r{   )r5   rz   )r5   r{   )rz   r{   )fry   )r|   r5   )r|   g)r}   r|   )r}   r5   )r}   rz   )r}   r{   rx   ry   r5   rz   r{   r|   r}   )rx   ry   rz   )rx   ry   rz   r{   )rx   ry   r{   )rx   r5   rz   )rx   r5   rz   r{   )rx   r5   r{   )rx   rz   r{   )ry   r5   rz   )ry   r5   rz   r{   )ry   r5   r{   )ry   r5   r|   )ry   rz   r{   )r5   rz   r{   )r5   rz   r{   r}   )r5   rz   r}   )r5   r{   r}   )r5   r|   r}   )rz   r{   r}   )rx   ry   r5   )rx   ry   r5   rz   )rx   ry   r5   rz   r{   )rx   ry   r5   r{   )r   rI   add_edges_fromr   enumerate_all_cliquesr*   r;   r)   )r   r   edges_fig_4rE   clique_sizesexpected_cliquesr   r   r   test_paper_figure_4   s   
	
 !"#$%&'()*+,-$0z+TestEnumerateAllCliques.test_paper_figure_4N)rt   ru   rv   r   r   r   r   r   rw      s    rw   )r@   networkxr   r   r   r   rw   r   r   r   r   <module>   s     g