o
    3ήc                     @   s|   d Z ddlZddlZddlmZ ddlmZmZmZm	Z	 ddl
mZ G dd dZG dd	 d	Zd
d Zdd Zdd ZdS )zIUnit tests for the :mod:`networkx.algorithms.community.quality`
module.

    N)barbell_graph)coverage
modularitypartition_qualityperformance)inter_community_edgesc                   @       e Zd ZdZdd Zdd ZdS )TestPerformancez0Unit tests for the :func:`performance` function.c                 C   Z   t dd}h dh dg}dtjt||ddksJ dtjt||d ddks+J d	S )
z:Tests that a poor partition has a low performance measure.   r      r               r      g?Hz>absr   Nr   pytestapproxr   r   selfG	partition r   W/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/community/tests/test_quality.pytest_bad_partition      
$z"TestPerformance.test_bad_partitionc                 C   r
   )
z;Tests that a good partition has a high performance measure.r   r      r   r   r      r   r   r   g?r   r   r   Nr   r   r   r   r   test_good_partition   r   z#TestPerformance.test_good_partitionN__name__
__module____qualname____doc__r   r"   r   r   r   r   r	          r	   c                   @   r   )TestCoveragez-Unit tests for the :func:`coverage` function.c                 C   Z   t dd}h dh dg}dtjt||ddksJ dtjt||d ddks+J dS )	z7Tests that a poor partition has a low coverage measure.r   r   r   r   ۶m۶m?r   r   Nr   r   r   r   r   r   r   r   r   r   '   r   zTestCoverage.test_bad_partitionc                 C   r*   )	z8Tests that a good partition has a high coverage measure.r   r   r    r!   ۶m۶m?r   r   Nr,   r   r   r   r   r"   .   r   z TestCoverage.test_good_partitionNr#   r   r   r   r   r)   $   r(   r)   c                  C   sZ  t dd} h dh dg}dtjt| |ddksJ h dh d	g}d
tjt| |ddks2J d}t j|dddd} tt|d tt|d |g}dtjt| |ddks\J t d} | 	 d }t
| j}t|d | t||d  g}dtjt| |ddksJ t  } | g d ddhddhg}dtjt| |ddksJ d S )Nr   r   r   r   g9/崿r   r   r    r!   gm۶m?i  g
ףp=
?*   T)seeddirectedr   g_]|&?
   gp=
ף?))r   r   )r   r   )r   r   r   r   gqq?)nxr   r   r   r   erdos_renyi_graphsetrangemargulis_gabber_galil_graphnumber_of_nodeslistnodesDiGraphadd_edges_from)r   Cn	mid_valuer9   r   r   r   test_modularity6   s$   "

  r?   c                  C   s"  t dd} h dh dg}t| |tdksJ d}t| ||d}|td|d	 d
  ks2J d}t| ||d}|td|d	 d
  ksJJ h dh dg}t| |tdks^J d}t| ||d}|td|d d
  ksvJ d}t| ||d}|td|d d
  ksJ t dd} ttdttddttddg}d}t| ||d}|td|d  ksJ d}t| ||d}|td|d  ksJ d}t| ||d}|td|d  ksJ h dh dh ddhdhg}d}t| ||d}|td|d  ksJ d}t| ||d}|td|d  ks&J d}t| ||d}|td|d  ks=J ttdttddg}d}t| ||d}|td|d  ksaJ d}t| ||d}|td|d  ksxJ d }t| ||d}|td|d  ksJ d S )!Nr   r   r   r   g</崿r   )
resolutionr+   d      g?r    r!   gm۶m?r-   b   r         r   gUUUUUU?g     ?>   r   r   r   r   >   	   r1         >   r         r   g?gqq?g      @g?g     @?g333333?)r2   r   r   r   r   	frozensetr5   )r   r<   gammaresultr   r   r   test_modularity_resolutionN   s`   & rN   c                  C   s   t jdt  d} dhdhg}t| |dksJ t jdt  d} dhddhh dh dg}t| |dks7J t jd	t  d} ddhdd
hg}t| |dksQJ d S )Nr   )create_usingr   r   r1   r!   >   rI   rJ   rD   rF   F   r   r   )r2   complete_graphr:   r   cycle_graph)r   r   r   r   r   (test_inter_community_edges_with_digraphs   s   rS   )r'   r   networkxr2   r   networkx.algorithms.communityr   r   r   r   %networkx.algorithms.community.qualityr   r	   r)   r?   rN   rS   r   r   r   r   <module>   s    :