o
    &?e/,                     @   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   sR  t jg ddddd} | jd }|h dh dh d	gksJ t| d
ks'J tt|  d
ks3J t g ddd} | jd }|h dh dh d	gksPJ t| d
ksXJ tt|  dksdJ t jg ddddd} | jd }|h dh dh d	gksJ t| d
ksJ tt|  dksJ t jg ddddd} | jd }|h dh dh d	gksJ t| d
ksJ tt|  dksJ t g ddd} | jd }|dhddhh dh dh dgksJ t| dksJ t j}tt j|g ddd tt j|g ddd tt j|g ddd tt j|g ddd d S )N)   r   r      r   *   seed	partition>   r   r      >   r         >            	      Tdirected   6   )r   r   r   r	   r
         ?皙?r   >   r   r   r   r   >   
                  )r   r   r   皙?皙)	nxZrandom_partition_graphgraphlenlistedgespytestraisesNetworkXError)GCZrpg r(   i/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/networkx/generators/tests/test_community.pytest_random_partition_graph   s:   




(r*   c                  C   s4  t jdddddd} | jd }t|dksJ t| dksJ tt|  dks+J t dddd} | jd }t|dks@J t| dksHJ tt|  d	ksTJ t jd
ddddd} | jd }t|d
kskJ t| dkssJ t jdddddd} | jd }t|dksJ t| dksJ tt|  dksJ t jdddddd} | jd }t|dksJ t| dksJ tt|  dksJ t jd
dddddd} | jd }t|d
ksJ t| dksJ 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'   Zppgr(   r(   r)   test_planted_partition_graph+   sB   





r.   c                  C   s   t ddd} t| dksJ t ddd} t| dksJ t ddd} t| dks-J t jddddd} t| dks>J d S )	Nr	   r   r   r   r   r   r   r   )r   Zrelaxed_caveman_graphr    r&   r(   r(   r)   test_relaxed_caveman_graphU   s   r0   c                  C   sf   t dd} t| dksJ t dd} t d}|dd t | |s'J tt jt jdd d S )Nr	   r   r   r   r
   )	r   Zconnected_caveman_graphr    complete_graphZremove_edgeis_isomorphicr#   r$   r%   )r&   K5r(   r(   r)   test_connected_caveman_graph`   s   
r4   c                  C   sl   t dd} t| dksJ t dd} t d}t | |s!J t dd} t d}t | |s4J d S )Nr	   r   r   r
   r   )r   Zcaveman_graphr    Zempty_graphr2   r1   )r&   ZE5r3   r(   r(   r)   test_caveman_graphm   s   

r5   c               	   C   s   t ddddd} t| dksJ t jddddddd} t| dks$J t jdddddddd	} t| dks8J t| t jr@J t jdddddddd	} t| dksTJ t| t js\J tt jt jdd
ddd t jddddddd} t| dks|J d S )Nd   r   g333333?{Gz?Tr   Fr   )r   r   e   r   r   r   r   )r   Zgaussian_random_partition_graphr    
isinstanceZDiGraphr#   r$   r%   r/   r(   r(   r)   $test_gaussian_random_partition_graphz   s&   r:   c                  C   s  t dddD ]F} t dddD ]=}t| |}| | | ks J | dks(|dkr5| ||d  d d  }n| ||d  d d  d }| |ksKJ qqtjtjdd tdd W d    n1 sfw   Y  tjtjdd tdd	 W d    d S 1 sw   Y  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_nodesnumber_of_edgesr#   r$   r%   )ijr&   Zexpected_num_edgesr(   r(   r)   test_ring_of_cliques   s&   	"rD   c                  C   s.  t dddD ]Q} t dddD ]H}t| |}| |d |  d ks$J | | | |d  d ks4J |d| d ksAJ t d| D ]}|||d ksUJ qHqqtjtjdd tdd W d    n1 sqw   Y  tjtjdd tdd W d    d S 1 sw   Y  d S )	Nr   r;   r   r   r   z/A windmill graph must have at least two cliquesr<   r>   )	r?   r   Zwindmill_graphr@   rA   Zdegreer#   r$   r%   )nkr&   rB   r(   r(   r)   test_windmill_graph   s(    "rG   c                  C   s  g d} g dg dg dg}t j| |dd}|jd }t|dks$J t|d	ks,J | d
ks4J t j| |td	dd}|j|jksGJ t j}ttd}g dg dg dg}g dg dg dg}g dg dg}	ddgddgddgg}
g dg dg d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sJ t j| |ddd}|j|jksJ t j| |ddd}|j|jksJ d S )N)K   rH   i,  )      ?皙?{Gz?)rJ   gffffff?Q?)rK   rL   g?r   r   r   r   i  iV  i  )rI   rJ   gRQ?)rJ   ffffffֿrL   rI   rJ   rM   rK   rL   )rI   rJ   r7   Tr   Fi  )r   	selfloops)rN   r   )r   sparse)r   Zstochastic_block_modelr   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<   
rS   c               	      sd   d} d}d}d}t j| |||dddd t dksJ  fd	d
 D }t j  |s0J d S )N   r         ?r   r
   r;   r   )average_degreemin_communityr   c                       h | ]}t  j| d  qS 	community	frozensetrQ   .0vr/   r(   r)   	<setcomp>       z!test_generator.<locals>.<setcomp>r   LFR_benchmark_graphr    rZ   Zis_partitionrQ   rE   tau1tau2mur'   r(   r/   r)   test_generator   s   rh   c                  C   sZ   t jtjdd d} d}d}d}tj| |||dd W d    d S 1 s&w   Y  d S )Nztau2 must be greater than oner<   r6   r   r   r   
min_degreer#   r$   r   r%   rc   rE   re   rf   rg   r(   r(   r)   test_invalid_tau1      "rm   c                  C   sZ   t jtjdd d} d}d}d}tj| |||dd W d    d S 1 s&w   Y  d S )Nztau1 must be greater than oner<   r6   r   r   r   ri   rk   rl   r(   r(   r)   test_invalid_tau2   rn   ro   c                  C   Z   t jtjdd d} d}d}d}tj| |||dd W d    d S 1 s&w   Y  d S )N#mu must be in the interval \[0, 1\]r<   r6   r   r   ri   rk   rl   r(   r(   r)   test_mu_too_large   rn   rr   c                  C   rp   )Nrq   r<   r6   r   ri   rk   rl   r(   r(   r)   test_mu_too_small  rn   rt   c                  C   sV   t jtjdd d} d}d}d}t| ||| W d    d S 1 s$w   Y  d S )N8Must assign exactly one of min_degree and average_degreer<   r6   r   r   rk   rl   r(   r(   r)   test_both_degrees_none  s   "rv   c               	   C   \   t jtjdd d} d}d}d}tj| |||ddd W d    d S 1 s'w   Y  d S )Nru   r<   r6   r   r   r
   )rj   rV   rk   rl   r(   r(   r)   test_neither_degrees_none  s   "rx   c               
   C   s^   t jtjdd d} d}d}d}tj| |||dddd W d    d S 1 s(w   Y  d S )Nz:Could not assign communities; try increasing min_communityr<   r   r   r   r   )rj   	max_itersr   r#   r$   r   ExceededMaxIterationsrc   rl   r(   r(   r)   test_max_iters_exceeded(  s   "r|   c               
   C   sb   t jtjdd d} d}d}d}tj| |||| d ddd W d    d S 1 s*w   Y  d S )Nz+max_degree must be in the interval \(0, n\]r<   r   r   r   r   )
max_degreery   r   rk   rl   r(   r(   r)   test_max_deg_out_of_range4  s   "r~   c                     sh   d} d}d}d}t j| |||ddddd	d
	 t dksJ  fdd D }t j  |s2J d S )NrT   r   rU   r   r
   r6   2      r   )rV   r}   rW   Zmax_communityr   c                    rX   rY   r[   r]   r/   r(   r)   r`   R  ra   z%test_max_community.<locals>.<setcomp>rb   rd   r(   r/   r)   test_max_communityA  s$   r   c               	   C   rw   )Nz#Could not create power law sequencer<   r6   r   r   r   )rj   ry   rz   rl   r(   r(   r)   !test_powerlaw_iterations_exceededV  s   "r   c                  C   s*   d} t | tjjddd dk sJ d S )NgSbQ?r   r   g-C6?r7   )absr   
generatorsrZ   Z_hurwitz_zeta)Zzeta2r(   r(   r)   test_no_scipy_zetaa  s   &r   c                   C   sL   t jtjdd tjjddddd W d    d S 1 sw   Y  d S )NzCould not match average_degreer<   r   r   r7   r   )r#   r$   r   r{   r   rZ   Z_generate_min_degreer(   r(   r(   r)   test_generate_min_degree_itrf  s
   "r   )r#   Znetworkxr   r*   r.   r0   r4   r5   r:   rD   rG   rS   rh   rm   ro   rr   rt   rv   rx   r|   r~   r   r   r   r   r(   r(   r(   r)   <module>   s0    %*&				