
    Vh                        d dl Z d dlZd dlmc mZ ddZe j                  j                  dd      e j                  j                  d e
dd            e j                  j                  dd	      d
                      Ze j                  j                  dd	      d        Zd Zd ZddZd Zd Zd Ze j                  j                  dd      d        Zy)    Nc                    t        j                  |      }t        j                  | |      }t        j                  |gt	        |      D cg c]  }| c}z         }| |z  | |z   z  }||t        |j                        fS c c}w )z
    Hard example from Harb, Elfarouk, Kent Quanrud, and Chandra Chekuri.
    "Faster and scalable algorithms for densest subgraph and decomposition."
    Advances in Neural Information Processing Systems 35 (2022): 26966-26979.
    )nxcomplete_graphcomplete_bipartite_graphdisjoint_union_allrangesetnodes)	dDhkKhKdD_Gbest_densitys	            d/home/dcms/DCMS/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_density.pyclose_cliques_exampler      sw     
		1	B

%
%a
+C
se58&<ar&<<=Aq5AE?LlC		N** '=s   
	A?

iterations)      n      method)greedy++fistac                 *   |dk(  rt        j                  d       t        j                  |       }t	        j
                  |||      \  }}|t        j                  |j                         |j                         z        k(  sJ |t        |      k(  sJ y )Nr   numpyr   r   )	pytestimportorskipr   
star_graphapproxdensest_subgraphnumber_of_edgesnumber_of_nodesr	   )r   r   r   r   r   Ss         r   	test_starr*      s     G$
aA ""1FKDAqa//1A4E4E4GGHHHHA;;    c                     | dk(  rt        j                  d       t        j                  d      }t	        j
                  |d|       \  }}|t        j                  d      k(  sJ |h dk(  sJ y )Nr   r    r   r   r!   g      ?>   r   r      r   )r"   r#   r   r   r%   r&   )r   r   r   r)   s       r   $test_greedy_plus_plus_complete_graphr.   %   sg    G$
!A ""16BDAqe$$$$r+   c                      t               \  } }}t        j                  | dd      \  }}|t        j                  |      k(  sJ ||k(  sJ y )N   r   r!   )r   r%   r&   r"   )r   r   densest_set	greedy_ppS_pps        r   #test_greedy_plus_plus_close_cliquesr4   4   sN    #8#: A|[--aC
SOItl3333;r+   c                      t        j                  d       t               \  } }}t        j                  | dd      \  }}|t        j                  |      k(  sJ ||k(  sJ y )Nr       r   r!   r"   r#   r   r%   r&   )r   r   best_setdensity	dense_sets        r   test_fista_close_cliquesr;   =   s]    
  5 7A|X00r'RGYfmmL1111   r+   c                 p   t        j                  | |      }t        |      D cg c]  }t        j                  | dz          }}t        j                  |g|z         }| |z  | |z   z  }d| z  |z  | dz   | dz   z  |z  z   d| z  d|z  z   d|z  | dz   z  z   z  }t        |j                        }	|||	|fS c c}w )a  
    Hard example from: Boob, Digvijay, Yu Gao, Richard Peng, Saurabh Sawlani,
    Charalampos Tsourakakis, Di Wang, and Junxing Wang. "Flowless: Extracting
    densest subgraphs without flow computations." In Proceedings of The Web
    Conference 2020, pp. 573-583. 2020.
    r-   r   )r   r   r   r   r   r	   r
   )
r   r   r   Br   Hr   r   correct_one_round_densitybest_subgraphs
             r   bipartite_and_clique_examplerA   G   s     	##Aq)A+084a		1q5	!4A4
qcAg&Aq5AE?L!"Qa!eA->-B!B	AAAQ'! LMlM+DDD 	5s   B3c                  8   t               \  } }}}t        j                  | dd      \  }}|t        j                  |      k(  sJ |t	        | j
                        k(  sJ t        j                  | dd      \  }}|t        j                  |      k(  sJ ||k(  sJ y )Nr   r   r!   
   )rA   r%   r&   r"   r	   r
   )r   r   r@   correct_one_iter_densityone_round_densityS_oneten_round_densityS_tens           r   *test_greedy_plus_plus_bipartite_and_cliquerI   Z   s    $& =A|]$<  &66	a
 u .F GGGGCL   %66	b u l ;;;;M!!!r+   c                      t        j                  d       t               \  } }}}t        j                  | dd      \  }}|t        j                  |      k(  sJ ||k(  sJ y )Nr    rC   r   r!   )r"   r#   rA   r%   r&   )r   r   r@   r   rG   rH   s         r   test_fista_bipartite_and_cliquerK   k   sa    
 (D(F%A|]A%66qRPWXul ;;;;M!!!r+   c                      t        j                  d       t        dddd      \  } }}t        j                  | dd	      \  }}|t        j                  |      k(  sJ ||k(  sJ y )
Nr       i  <      )r   r   r   r   r6   r   r!   r7   )r   r   r@   r9   r:   s        r   test_fista_big_datasetrP   t   sh    
 %:R42QS%T"A|]  00r'RGYfmmL1111%%%r+   c                     t        j                         }t        j                  || d      dt	               fk(  sJ |j                  t        d             t        j                  || d      dt	               fk(  sJ y )Nr   r!   r   r   )r   Graphr%   r&   r	   add_nodes_fromr   )r   r   s     r   )test_greedy_plus_plus_edgeless_cornercaserT      s    

A""1JO	T    U1X""1JO	T   r+   )   i,     r-   )      r-   )r"   networkxr   !networkx.algorithms.approximation
algorithmsapproximationr%   r   markparametrizer   r*   r.   r4   r;   rA   rI   rK   rP   rT    r+   r   <module>r`      s      2 2
+ v.eAqk*#89 : + / #89 :!E&"""& v.
 /
r+   