o
    ]Zh$                     @   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   )Zfirst_label   c                 S   s   i | ]}||d  qS r    ).0ir
   r
   T/var/www/auris/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
generatorsZhavel_hakimi_graphGlistfind_cliquesclZcomplete_graphrelabel_nodesrangeZ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Zanswerr
   r   	<genexpr>   s    z-TestCliques.test_selfloops.<locals>.<genexpr>)r   Zadd_edger   r   r   r$   r,   r&   	frozensetlenall)r   r   r(   r
   r.   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   Z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   Z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   r9   r   r:   r<   )r   r   Znode_clique_numberr   r>   r   r?   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      rB   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.

        rB   r   c                 S   s   i | ]}| |d  qS r	   r
   rH   r
   r
   r   r      s    z:TestCliques.test_make_max_clique_graph.<locals>.<dictcomp>r   r   N)r   r   rJ   rK   r   r   make_max_clique_graphrL   )r   r   rM   rN   Z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+   )r5   r6   r   ZNetworkXNotImplementednextr   Z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$   r?   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)r9   )r   r   )r   r   )r   r   ))r   r   )r   r   r9   r   )Zcreate_using)r   rT   add_nodeZis_isomorphicrP   )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*   r3   r4   r8   r@   rA   rO   rQ   rS   rU   rX   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)r]   r-   )r]   d)r]   e)r^   r-   )r^   r_   )r^   r`   )r-   r_   )r-   r`   )r_   r`   )fr^   )ra   r-   )ra   g)rb   ra   )rb   r-   )rb   r_   )rb   r`   r]   r^   r-   r_   r`   ra   rb   )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-   ra   )r^   r_   r`   )r-   r_   r`   )r-   r_   r`   rb   )r-   r_   rb   )r-   r`   rb   )r-   ra   rb   )r_   r`   rb   )r]   r^   r-   )r]   r^   r-   r_   )r]   r^   r-   r_   r`   )r]   r^   r-   r`   )r   rT   Zadd_edges_fromr   Zenumerate_all_cliquesr&   r1   r%   )r   r   Zedges_fig_4r=   Zclique_sizesZexpected_cliquesr
   r
   r   test_paper_figure_4   s   
	
 !"#$%&'()*+,-$0z+TestEnumerateAllCliques.test_paper_figure_4N)rY   rZ   r[   rc   r
   r
   r
   r   r\      s    r\   )r5   Znetworkxr   r   r   r   r\   r
   r
   r
   r   <module>   s     N