o
    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   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   皙?皙)	nxrandom_partition_graphgraphlenlistedgespytestraisesNetworkXError)GCrpg r*   \/var/www/vscode/kcb/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   planted_partition_graphr    r!   r"   r#   r$   r%   r&   )r'   r(   ppgr*   r*   r+   test_planted_partition_graph+   sB   





r2   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   relaxed_caveman_graphr!   r'   r*   r*   r+   test_relaxed_caveman_graphU   s   r5   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   connected_caveman_graphr!   complete_graphremove_edgeis_isomorphicr$   r%   r&   )r'   K5r*   r*   r+   test_connected_caveman_graph`   s   
r;   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   caveman_graphr!   empty_graphr9   r7   )r'   E5r:   r*   r*   r+   test_caveman_graphm   s   

r?   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   gaussian_random_partition_graphr!   
isinstanceDiGraphr$   r%   r&   r4   r*   r*   r+   $test_gaussian_random_partition_graphz   s&   rF   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   ring_of_cliquesnumber_of_nodesnumber_of_edgesr$   r%   r&   )ijr'   expected_num_edgesr*   r*   r+   test_ring_of_cliques   s&   	"rR   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   rG   r   r   r   z/A windmill graph must have at least two cliquesrH   rJ   )	rK   r   windmill_graphrM   rN   degreer$   r%   r&   )nkr'   rO   r*   r*   r+   test_windmill_graph   s(    "rW   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   rX   i,  )      ?皙?{Gz?)rZ   gffffff?Q?)r[   r\   g?r   r   r   r   i  iV  i  )rY   rZ   gRQ?)rZ   ffffffֿr\   rY   rZ   r]   r[   r\   )rY   rZ   rA   Tr   Fi  )r   	selfloops)r^   r   )r   sparse)r   stochastic_block_modelr    r!   sizerK   nodesr"   r$   r%   NetworkXException)sizesprobsr'   r(   GGsbmbadnodelist	badprobs1	badprobs2probs_rect1probs_rect2	asymprobsnodelistr*   r*   r+   test_stochastic_block_model   s<   
ro   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
   rG   r   )average_degreemin_communityr   c                       h | ]}t  j| d  qS 	community	frozensetrb   .0vr4   r*   r+   	<setcomp>       z!test_generator.<locals>.<setcomp>r   LFR_benchmark_graphr!   rv   is_partitionrb   rU   tau1tau2mur(   r*   r4   r+   test_generator   s   r   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 onerH   r@   r   r   r   
min_degreer$   r%   r   r&   r   rU   r   r   r   r*   r*   r+   test_invalid_tau1      "r   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 onerH   r@   r   r   r   r   r   r   r*   r*   r+   test_invalid_tau2   r   r   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\]rH   r@   r   r   r   r   r   r*   r*   r+   test_mu_too_large   r   r   c                  C   r   )Nr   rH   r@   r   r   r   r   r*   r*   r+   test_mu_too_small  r   r   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_degreerH   r@   r   r   r   r   r*   r*   r+   test_both_degrees_none  s   "r   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 )Nr   rH   r@   r   r   r
   )r   rr   r   r   r*   r*   r+   test_neither_degrees_none  s   "r   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_communityrH   r   r   r   r   )r   	max_itersr   r$   r%   r   ExceededMaxIterationsr   r   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\]rH   r   r   r   r   )
max_degreer   r   r   r   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 )Nrp   r   rq   r   r
   r@   2      r   )rr   r   rs   max_communityr   c                    rt   ru   rw   ry   r4   r*   r+   r|   R  r}   z%test_max_community.<locals>.<setcomp>r~   r   r*   r4   r+   test_max_communityA  s$   r   c               	   C   r   )Nz#Could not create power law sequencerH   r@   r   r   r   )r   r   r   r   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?rA   )absr   
generatorsrv   _hurwitz_zeta)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_degreerH   r   r   rA   r   )r$   r%   r   r   r   rv   _generate_min_degreer*   r*   r*   r+   test_generate_min_degree_itrf  s
   "r   )r$   networkxr   r,   r2   r5   r;   r?   rF   rR   rW   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   <module>   s0    %*&				