U
    ?h-,                     @   s   d dl Z d dl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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 ).    Nc               
   C   s  t jdddgdddd} | jd }|dddhddd	hd
ddhgksFtt| dksVttt|  dksntt dddgdd} | jd }|dddhddd	hd
ddhgkstt| dksttt|  dkstt jdddgdddd} | jd }|dddhddd	hd
ddhgks tt| dks2ttt|  dksLtt jdddgdddd} | jd }|dddhddd	hd
ddhgkstt| dksttt|  dkstt ddddd	gdd} | jd }|dhddhddd	hd
dddhdddddhgkstt| dks*tt j}tt j	|dddgdd tt j	|dddgdd tt j	|dddgdd tt j	|dddgdd d S )N      r   *   seed	partition                  	      Tdirected   6         ?皙?
                  皙?皙)
nxZrandom_partition_graphgraphAssertionErrorlenlistedgespytestraisesNetworkXError)GCZrpg r)   Z/var/www/html/venv/lib/python3.8/site-packages/networkx/generators/tests/test_community.pytest_random_partition_graph   s:    
$
$
&
&
6r+   c                  C   sD  t jdddddd} | jd }t|dks.tt| dks>ttt|  dksVtt dddd} | jd }t|dkstt| dksttt|  d	kstt jd
ddddd} | jd }t|d
kstt| dkstt jdddddd} | jd }t|dkstt| dks(ttt|  dksBtt jdddddd} | jd }t|dksrtt| dksttt|  dkstt jd
dddddd} | jd }t|d
kstt| dkstt j}tt j	|dddd tt j	|dddd tt j	|dddd tt j	|dddd d S )Nr	   r   r   r   r   r   r   r   r   r   r   r   (   Tr      l   )r   r   r   r   )
r   Zplanted_partition_graphr   r!   r    r"   r#   r$   r%   r&   )r'   r(   Zppgr)   r)   r*   test_planted_partition_graph+   sB    





r/   c                  C   s   t ddd} t| dkstt ddd} t| dks<tt ddd} t| dksZtt jddddd} t| dks|td S )	Nr	   r   r   r   r   r   r   r   )r   Zrelaxed_caveman_graphr!   r    r'   r)   r)   r*   test_relaxed_caveman_graphU   s    r1   c                  C   sf   t dd} t| dkstt dd} t d}|dd t | |sNttt j	t jdd d S )Nr	   r   r   r   r
   )
r   Zconnected_caveman_graphr!   r    complete_graphZremove_edgeis_isomorphicr$   r%   r&   )r'   K5r)   r)   r*   test_connected_caveman_graph`   s    
r5   c                  C   sl   t dd} t| dkstt dd} t d}t | |sBtt dd} t d}t | |shtd S )Nr	   r   r   r
   r   )r   Zcaveman_graphr!   r    Zempty_graphr3   r2   )r'   ZE5r4   r)   r)   r*   test_caveman_graphm   s    

r6   c               	   C   s   t ddddd} t| dks"tt jddddddd} t| dksHtt jdddddddd	} t| dksptt| t jrtt jdddddddd	} t| dkstt| t jsttt jt jdd
ddd t jddddddd} t| dkstd S )Nd   r   g333333?{Gz?Tr   Fr   )r   r   e   r   r   r   r   )	r   Zgaussian_random_partition_graphr!   r    
isinstanceZDiGraphr$   r%   r&   r0   r)   r)   r*   $test_gaussian_random_partition_graphz   sJ                      r;   c               	   C   s   t dddD ]} t dddD ]z}t| |}| | | ks@t| dksP|dkrj| ||d  d d  }n| ||d  d d  d }| |kstqqtjtjdd tdd W 5 Q R X tjtjdd tdd	 W 5 Q R X d S )
Nr      r   r   z0A ring of cliques must have at least two cliquesmatchr
   (The cliques must have at least two nodesr   )	ranger   Zring_of_cliquesnumber_of_nodesr    number_of_edgesr$   r%   r&   )ijr'   Zexpected_num_edgesr)   r)   r*   test_ring_of_cliques   s$      rE   c               	   C   s  t dddD ]} t dddD ]}t| |}| |d |  d ksHt| | | |d  d ksht|d| d kstt d| D ]}|||d kstqqqtjtj	dd tdd W 5 Q R X tjtj	dd tdd W 5 Q R X d S )	Nr   r<   r   r   r   z/A windmill graph must have at least two cliquesr=   r?   )
r@   r   Zwindmill_graphrA   r    rB   Zdegreer$   r%   r&   )nkr'   rC   r)   r)   r*   test_windmill_graph   s$       rH   c                  C   s6  dddg} dddgdddgdddgg}t j| |d	d
}|jd }t|dksPtt|dks`t| dksptt j| |tdd	d
}|j|jkstt j}ttd}dddgdddgdddgg}dddgdddgdddgg}dddgdddgg}	ddgddgddgg}
dddgdddgdddgg}t	
t j|| | t	
t j|| | t	j
t j|| |	dd t	j
t j|| |
dd t	j
t j|| |dd t	
t j|| || d	gttd }t	
t j|| || t j| |d	dd}|j|jkstt j| |ddd}|j|jkstt j| |d	dd}|j|jks2td S )NK   i,  g      ?g?g{Gz?gffffff?gQ?g?r   r   r   r   i  iV  i  gRQ?gffffffֿr8   Tr   Fi  )r   	selfloops)rJ   r   )r   sparse)r   Zstochastic_block_modelr   r!   r    sizer@   nodesr"   r$   r%   ZNetworkXException)sizesZprobsr'   r(   ZGGZsbmZbadnodelistZ	badprobs1Z	badprobs2Zprobs_rect1Zprobs_rect2Z	asymprobsZnodelistr)   r)   r*   test_stochastic_block_model   s<    

rO   c               	      sd   d} d}d}d}t j| |||dddd t dks8t fd	d
 D }t j  |s`td S )N   r         ?r   r
   r<   r   )average_degreemin_communityr   c                    s   h | ]}t  j| d  qS 	community	frozensetrM   .0vr0   r)   r*   	<setcomp>   s     z!test_generator.<locals>.<setcomp>r   LFR_benchmark_graphr!   r    rU   Zis_partitionrM   rF   tau1tau2mur(   r)   r0   r*   test_generator   s           rb   c               	   C   sD   t jtjdd* d} d}d}d}tj| |||dd W 5 Q R X d S )Nztau2 must be greater than oner=   r7   r   r   r   
min_degreer$   r%   r   r&   r]   rF   r_   r`   ra   r)   r)   r*   test_invalid_tau1   s    rg   c               	   C   sD   t jtjdd* d} d}d}d}tj| |||dd W 5 Q R X d S )Nztau1 must be greater than oner=   r7   r   r   r   rc   re   rf   r)   r)   r*   test_invalid_tau2   s    rh   c               	   C   sD   t jtjdd* d} d}d}d}tj| |||dd W 5 Q R X d S )N#mu must be in the interval \[0, 1\]r=   r7   r   r   rc   re   rf   r)   r)   r*   test_mu_too_large   s    rj   c               	   C   sD   t jtjdd* d} d}d}d}tj| |||dd W 5 Q R X d S )Nri   r=   r7   r   rc   re   rf   r)   r)   r*   test_mu_too_small  s    rl   c               	   C   s@   t jtjdd& d} d}d}d}t| ||| W 5 Q R X d S )N8Must assign exactly one of min_degree and average_degreer=   r7   r   r   re   rf   r)   r)   r*   test_both_degrees_none  s    rn   c               	   C   sF   t jtjdd, d} d}d}d}tj| |||ddd W 5 Q R X d S )Nrm   r=   r7   r   r   r
   )rd   rR   re   rf   r)   r)   r*   test_neither_degrees_none  s    ro   c               
   C   sH   t jtjdd. d} d}d}d}tj| |||dddd W 5 Q R X d S )Nz:Could not assign communities; try increasing min_communityr=   r   r   r   r   )rd   	max_itersr   r$   r%   r   ExceededMaxIterationsr]   rf   r)   r)   r*   test_max_iters_exeded(  s    rs   c               
   C   sL   t jtjdd2 d} d}d}d}tj| |||| d ddd W 5 Q R X d S )Nz+max_degree must be in the interval \(0, n\]r=   r   r   r   r   )
max_degreerp   r   re   rf   r)   r)   r*   test_max_deg_out_of_range4  s"           ru   c                     sh   d} d}d}d}t j| |||ddddd	d
	 t dks<t fdd D }t j  |sdtd S )NrP   r   rQ   r   r
   r7   2      r   )rR   rt   rS   Zmax_communityr   c                    s   h | ]}t  j| d  qS rT   rV   rX   r0   r)   r*   r[   R  s     z%test_max_community.<locals>.<setcomp>r\   r^   r)   r0   r*   test_max_communityA  s$    rx   c               	   C   sF   t jtjdd, d} d}d}d}tj| |||ddd W 5 Q R X d S )Nz#Could not create power law sequencer=   r7   r   r   r   )rd   rp   rq   rf   r)   r)   r*   !test_powerlaw_iterations_exceededV  s     ry   c                  C   s*   d} t | tjjddd dk s&td S )NgSbQ?r   r   g-C6?r8   )absr   
generatorsrU   Z_hurwitz_zetar    )Zzeta2r)   r)   r*   test_no_scipy_zetaa  s    r|   c                	   C   s6   t jtjdd tjjddddd W 5 Q R X d S )NzCould not match average_degreer=   r   r   r8   r   )r$   r%   r   rr   r{   rU   Z_generate_min_degreer)   r)   r)   r*   test_generate_min_degree_itrf  s
     r}   )r$   Znetworkxr   r+   r/   r1   r5   r6   r;   rE   rH   rO   rb   rg   rh   rj   rl   rn   ro   rs   ru   rx   ry   r|   r}   r)   r)   r)   r*   <module>   s.   %*&				