
    Wima                        d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZmZmZmZmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl Z ddl!m"Z" ddl#Z#dZ$ edd      \  Z%Z& ee%e&d      \  Z%Z& e       jO                  e%      Z%e%jQ                         Z)ejT                  dge)d<   ejT                  ejT                  ge)d<   d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d  Z3d! Z4d" Z5d# Z6d$ Z7d% Z8d& Z9d' Z:d( Z;d) Z<d* Z=d+ Z>d, Z?d- Z@d. ZAd/ ZBd0 ZCd1 ZDd2 ZEd3 ZFd4 ZGd5 ZHd6 ZId7 ZJd8 ZKd9 ZLd: ZMd; ZNd< ZOd= ZPd> ZQd? ZRd@ ZSdA ZTe j                  j                  dBC      dD        ZWy)Ezi
Tests for HDBSCAN clustering algorithm
Shamelessly based on (i.e. ripped off from) the DBSCAN test code
    N)distance)sparse)stats)check_estimator)assert_array_equalassert_array_almost_equal)HDBSCANhdbscanvalidity_indexapproximate_predictapproximate_predict_scoresmembership_vectorall_points_membership_vectors)
make_blobs)shuffle)StandardScaler)mode)mkdtempwraps)datasets      
   )	n_samplesrandom_state   )r         c                     t               j                  t              } | j                  d   dk(  sJ | j                  d   dk(  sJ | j                  d   dk(  sJ | j                  d   dk(  sJ | j                  d   dk(  sJ t        t        dd            t        t        dd            z   }t               j                  t        |         }t        j                  |j                  | j                  |         sJ y)zcTests if nan data are treated as infinite distance from all other points and assigned to -1 clusterr   r   r      r   N)	r	   fitX_missing_datalabels_probabilities_listrangenpallclose)modelclean_indicesclean_models      f/home/sietch6/trending-topics-pipeline/venv/lib/python3.12/site-packages/hdbscan/tests/test_hdbscan.pytest_missing_datar/   1   s    IMM.)E==r!!!==r!!!"a'''"a'''"a'''q!%U1c](;;M)--} =>K;;{**EMM-,HIII    c                 .     t                fd       }|S )zhTest decorator that skips test if matplotlib not installed.

    Parameters
    ----------
    func
    c                      	 dd l }|j                  d       dd lm} |j	                           | i |S # t
        $ r t        j                  d       Y y w xY w)Nr   AggzMatplotlib not available.)
matplotlibusematplotlib.pyplotpyplotfigureImportErrorpytestskip)argskwargsr4   pltfuncs       r.   run_testzif_matplotlib.<locals>.run_testF   sS    	)NN5!+JJL (((  	5KK34	5s   +6 AAr   r?   r@   s   ` r.   if_matplotlibrB   >   s"     4[) ) Or0   c                 .     t                fd       }|S )z7Test decorator that skips test if pandas not installed.c                  f    	 dd l } | i |S # t        $ r t        j                  d       Y y w xY w)Nr   zPandas not available.)pandasr9   r:   r;   )r<   r=   rE   r?   s      r.   r@   zif_pandas.<locals>.run_test[   s;    	) (((  	1KK/0	1    00r   rA   s   ` r.   	if_pandasrG   X   "     4[) ) Or0   c                 .     t                fd       }|S )z9Test decorator that skips test if networkx not installed.c                  f    	 dd l } | i |S # t        $ r t        j                  d       Y y w xY w)Nr   zNetworkX not available.)networkxr9   r:   r;   )r<   r=   rK   r?   s      r.   r@   zif_networkx.<locals>.run_testj   s;    	) (((  	3KK12	3rF   r   rA   s   ` r.   if_networkxrL   g   rH   r0   c                  
   t        j                  dddgdd      \  } }t        j                  ddd      \  }}t        j                  j                  d	      }|j                  d
dd      }t        j                  | ||g      S )Nr   )g      g      @)      ?       @g      ?*   r   centerscluster_stdr   g?)r   noiser   )seed            @)2      )r   r   
make_moonsr)   randomdefault_rnguniformvstack)blobs_moonsrngrT   s        r.   generate_noisy_datarc   v   s~    ""z:[]HE1 ""S2NHE1
))

R

(CKKc7+E99eUE*++r0   c                    d}t        |       D ]9  }|| |k(     }	 t        |d      \  }}|t        j                  ||d   k7        z  }; t        |      D ]9  }| ||k(     }	 t        |d      \  }}|t        j                  ||d   k7        z  }; |dz  S #  t        |      \  }}Y ~xY w#  t        |      \  }}Y LxY w)N        T)keepdimsr   rO   )setr   r)   sum)labels1labels2
num_missedlabelmatches
match_mode
mode_counts          r.   homogeneityrp      s    JW 7'U*+	3%)'D%A"J
 	bffW
1566
7 W 7'U*+	3%)'D%A"J
 	bffW
1566
7 	3%)']"J
	3%)']"J
s   B!B+B(+B=c                     t        j                  t        j                  t                    } | t	        j
                  |       z  } t        | d      \  }}}}}}t        t        |            t        d|v       z
  }|t        k(  sJ t        d      j                  |       j                  }t        t        |            t        d|v       z
  }|t        k(  sJ t        | |dd      }	|	dk\  sJ y )Nprecomputedmetricr!   rY   )rt   dg333333?)r   
squareformpdistXr)   maxr
   lenrg   int
n_clustersr	   r#   r%   r   )
Dlabelsppersistctreeltreemtreen_clusters_1n_clusters_2validitys
             r.   test_hdbscan_distance_matrixr      s    HNN1-.ANA.5a.N+FAwues6{#c",&77L:%%%M*..q199Fs6{#c",&77L:%%%aCHs??r0   c                  V   t        j                  t        j                  t                    } | t	        j
                  |       z  } t        j                  | j                         d      }d| | |k\  <   t        j                  |       } | j                          t        | d      \  }}}}}}t        t        |            t        d|v       z
  }|t         k(  sJ t#        dd      j%                  |       j&                  }t        t        |            t        d|v       z
  }	|	t         k(  sJ y )NrX   re   rr   rs   r!   T)rt   gen_min_span_tree)r   rv   rw   rx   r)   ry   r   scoreatpercentileflattenr   
csr_matrixeliminate_zerosr
   rz   rg   r{   r|   r	   r#   r%   )
r}   	thresholdr~   r   r   r   r   r   r   r   s
             r.   #test_hdbscan_sparse_distance_matrixr      s    HNN1-.ANA''		R8IAa9n!A.5a.N+FAwues6{#c",&77L:%%%MTBFFqIQQFs6{#c",&77L:%%%r0   c                  `   t        t              \  } }}}}}t        t        |             t	        d| v       z
  }|t
        k(  sJ t               j                  t              j                  } t        t        |             t	        d| v       z
  }|t
        k(  sJ t        t        |       }|dk\  sJ y )Nr!   皙?)
r
   rx   rz   rg   r{   r|   r	   r#   r%   r   )	r~   r   r   r   r   r   r   r   r   s	            r.   test_hdbscan_feature_vectorr      s    .5aj+FAwues6{#c",&77L:%%%Y]]1%%Fs6{#c",&77L:%%%a(Hs??r0   c                     t        t        d      \  } }}}}}t        t        |             t	        d| v       z
  }|t
        k(  sJ t        dd      j                  t              j                  } t        t        |             t	        d| v       z
  }|t
        k(  sJ t        j                  t              5  t        t        dd       d d d        y # 1 sw Y   y xY w)Nprims_kdtree	algorithmr!   Tr   r   	russelraor   rt   r
   rx   rz   rg   r{   r|   r	   r#   r%   r:   raises
ValueErrorr~   r   r   r   r   r   r   r   s           r.   test_hdbscan_prims_kdtreer      s    .5a>.R+FAwues6{#c",&77L:%%%~FJJ1MUUFs6{#c",&77L:%%%	z	" A^K@A A A   6CCc                     t        t        d      \  } }}}}}t        t        |             t	        d| v       z
  }|t
        k(  sJ t        dd      j                  t              j                  } t        t        |             t	        d| v       z
  }|t
        k(  sJ t        j                  t              5  t        t        dd       d d d        y # 1 sw Y   y xY w)Nprims_balltreer   r!   Tr   cosiner   r   r   s           r.   test_hdbscan_prims_balltreer      s    .5aCS.T+FAwues6{#c",&77L:%%%/4HLLQOWWFs6{#c",&77L:%%%	z	" @-h?@ @ @r   c                     t        t        d      \  } }}}}}t        t        |             t	        d| v       z
  }|t
        k(  sJ t        dd      j                  t              j                  } t        t        |             t	        d| v       z
  }|t
        k(  sJ t        j                  t              5  t        t        dd       d d d        y # 1 sw Y   y xY w)Nboruvka_kdtreer   r!   Tr   r   r   r   r   s           r.   test_hdbscan_boruvka_kdtreer      s    .5aCS.T+FAwues6{#c",&77L:%%%/4HLLQOWWFs6{#c",&77L:%%%	z	" C-kBC C Cr   c                     t        t        d      \  } }}}}}t        t        |             t	        d| v       z
  }|t
        k(  sJ t        dd      j                  t              j                  } t        t        |             t	        d| v       z
  }|t
        k(  sJ t        j                  t              5  t        t        dd       d d d        y # 1 sw Y   y xY w)Nboruvka_balltreer   r!   Tr   r   r   r   r   s           r.   test_hdbscan_boruvka_balltreer      s    .5aCU.V+FAwues6{#c",&77L:%%% 	,EII!LTT  s6{#c",&77L:%%%	z	" B/AB B Br   c                  <   t        t        d      \  } }}}}}t        t        |             t	        d| v       z
  }|t
        k(  sJ t        dd      j                  t              j                  } t        t        |             t	        d| v       z
  }|t
        k(  sJ y )Ngenericr   r!   Tr   )	r
   rx   rz   rg   r{   r|   r	   r#   r%   r   s           r.   test_hdbscan_genericr      s    .5a9.M+FAwues6{#c",&77L:%%%yDAEEaHPPFs6{#c",&77L:%%%r0   c                      t               j                  t              } | j                  d      }t	        t        |            t        d|v       z
  }t        |k(  sJ y )Ng333333?r!   )r	   r#   rx   dbscan_clusteringrz   rg   r{   r|   )	clustererr~   r   s      r.   test_hdbscan_dbscan_clusteringr     sL    	a I((-Fs6{#c",&77L%&%r0   c                     t        ddd      \  } }t               j                  |       } t        |       \  }}}}}}t	        t        |            t        d|v       z
  }|t        k(  sJ t        ddt        j                  | j                  d         	      j                  |       j                  }t	        t        |            t        d|v       z
  }	|	t        k(  sJ y )
NrX   r   @   r   r   
n_featuresr!   best
seuclideanr   )r   rt   V)r   r   fit_transformr
   rz   rg   r{   r|   r	   r)   onesshaper#   r%   )
Hyr~   r   r   r   r   r   r   r   s
             r.   test_hdbscan_high_dimensionalr     s    rBDAq&&q)A.5aj+FAwues6{#c",&77L:%%% 	&9LM	Q	 
 s6{#c",&77L:%%%r0   c                     t        t        dt        j                  t        j                  d               \  } }}}}}t        t        |             t        d| v       z
  }|t        k(  sJ t        dt        j                  t        j                  d               j                  t              j                  } t        t        |             t        d| v       z
  }|t        k(  sJ y )Nr   r   )rt   r   r!   )r
   rx   r)   r   r   rz   rg   r{   r|   r	   r#   r%   r   s           r.   !test_hdbscan_best_balltree_metricr     s    .5	,"''!''!*"5/+FAwue s6{#c",&77L:%%%LBGGAGGAJ,?@DDQGOOFs6{#c",&77L:%%%r0   c                  j   t        t        t        t              dz         \  } }}}}}t        t        |             t	        d| v       z
  }|dk(  sJ t        t        t              dz         j                  t              j                  } t        t        |             t	        d| v       z
  }|dk(  sJ y )Nr   min_cluster_sizer!   r   )r
   rx   rz   rg   r{   r	   r#   r%   r   s           r.   test_hdbscan_no_clustersr   *  s    .5a#a&ST*.U+FAwues6{#c",&77L1c!fqj155a8@@Fs6{#c",&77L1r0   c                      t        dt        t              dz   d      D ]  } t        t        |       \  }}}}}}|D cg c]
  }|dk7  s	| }}t        |      dk7  r-t	        j
                  t	        j                  |            | k\  sJ t        |       j                  t              j                  }|D cg c]
  }|dk7  s	| }}t        |      dk7  st	        j
                  t	        j                  |            | k\  rJ  y c c}w c c}w )NrY   r   r   r!   r   )
r(   rz   rx   r
   r)   minbincountr	   r#   r%   )	r   r~   r   r   r   r   r   rl   true_labelss	            r.   test_hdbscan_min_cluster_sizer   4  s    !!SVaZ3 H29 03
/7E5% +1@ERKu@@{q 66"++k237GGGG*:;??BJJ*0@ERKu@@{q 66"++k237GGGGH A
 As   
DD6
DDc                  Z   t         j                  } t        t        |       \  }}}}}}t	        t        |            t        d|v       z
  }|t        k(  sJ t        |       j                  t              j                  }t	        t        |            t        d|v       z
  }|t        k(  sJ y )Nrs   r!   )r   	euclideanr
   rx   rz   rg   r{   r|   r	   r#   r%   )	rt   r~   r   r   r   r   r   r   r   s	            r.   test_hdbscan_callable_metricr   C  s    F.5a.G+FAwues6{#c",&77L:%%%F#''*22Fs6{#c",&77L:%%%r0   c                  F    ddgddgg} t               j                  |        y )NrN   rO   rW   g      @)r	   r#   rx   s    r.   test_hdbscan_input_listsr   P  s"    
sc3Z AIMM!r0   c                     t               } t        | d      \  }}}}}}t        | d      \  }}}}}}t        ||      }|t        | j                  d         z  dk  sJ t        d      j                  |       }t        d      j                  |       }t        ||      }|t        | j                  d         z  dk  sJ y )Nr   r   r   r   333333?rc   r
   rp   floatr   r	   fit_predict	datalabels_primsr   r   r   r   r   labels_boruvkanum_mismatchess	            r.   #test_hdbscan_boruvka_kdtree_matchesr   U  s     D4;DI4V1L!WeUE6=(73NAwue !~>NU4::a=11T999Y/;;DAL'78DDTJN ~>NU4::a=11T999r0   c                     t               } t        | d      \  }}}}}}t        | d      \  }}}}}}t        ||      }|t        | j                  d         z  dk  sJ t        d      j                  |       }t        d      j                  |       }t        ||      }|t        | j                  d         z  dk  sJ y )Nr   r   r   r   r   r   r   s	            r.   %test_hdbscan_boruvka_balltree_matchesr   j  s     D4;DI4V1L!WeUE6=*73NAwue !~>NU4::a=11T999Y/;;DAL'9:FFtLN ~>NU4::a=11T999r0   c                      t        d      j                  t              }  t        | j                  j
                        dddd        t        | j                  j
                        ddd       y )	NTr   )rgbReds)select_clusterslabel_clustersselection_palettecmapFnone)log_sizecolorbarr   )r	   r#   rx   rB   condensed_tree_plotr   s    r.   test_condensed_tree_plotr     sb    $/33A6I1M)++001)	 2M)++001Fr0   c                      t        d      j                  t              }  t        | j                  j
                        d        t        | j                  j
                        ddddd	       y )
NTr   r   )r   Flastpr   r   )vary_line_widthtruncate_moder   r   r   )r	   r#   rx   rB   single_linkage_tree_r   r   s    r.   test_single_linkage_tree_plotr     sY    $/33A6I6M)00556FC6M)00556WRWr0   c                  B   t        d      j                  t              }  t        | j                  j
                        d       t        ddd      \  }}t               j                  |      }t        d      j                  |      }  t        | j                  j
                        dd	d	
       t        ddd      \  }}t               j                  |      }t        d      j                  |      }  t        | j                  j
                        dd	d	
       y )NTr   r   )	edge_cmaprX   r   r   r   F)r   r   r   (   )	r	   r#   rx   rB   minimum_spanning_tree_r   r   r   r   )r   r   r   s      r.   test_min_span_tree_plotr     s    $/33A6I8M)227786JrBDAq&&q)A$/33A6I8M)22778%% rBDAq&&q)A$/33A6I8M)22778%%r0   c                      t        d      j                  t              } | j                  j	                          | j
                  j	                          | j                  j	                          y NTr   )r	   r#   rx   r   to_numpyr   r   r   s    r.   test_tree_numpy_output_formatsr     sM    $/33A6I""++-&&($$--/r0   c                     t        d      j                  t              }  t        | j                  j
                                 t        | j                  j
                                 t        | j                  j
                                y r   )r	   r#   rx   rG   r   	to_pandasr   r   r   s    r.   test_tree_pandas_output_formatsr     sb    $/33A6I2Ii''11247Ii,,66799Ii..889;r0   c                     t        d      j                  t              }  t        | j                  j
                                 t        | j                  j
                                 t        | j                  j
                                y r   )r	   r#   rx   rL   r   to_networkxr   r   r   s    r.   !test_tree_networkx_output_formatsr    sb    $/33A6I6K	))5568;K	..::;==K	00<<=?r0   c                  b    t        d      j                  t              } | j                  }|J y r   )r	   r#   rx   outlier_scores_)r   scoress     r.   test_hdbscan_outliersr    s.    $/33A6I&&Fr0   c                  J   t        d      j                  t              } t        | t	        j
                  ddgg            \  }}|dk(  sJ t        | t	        j
                  ddgg            \  }}|dk(  sJ t        | t	        j
                  ddgg            \  }}|d	k(  sJ y )
NTprediction_datag      rV   rY         ?r   re   r!   )r	   r#   rx   r   r)   array)r   clusterprobs      r.    test_hdbscan_approximate_predictr    s    -11!4I'	288dD\N3KLMGTa<<'	288c4[M3JKMGTa<<'	288c3ZL3IJMGTb==r0   c                  \   t        d      j                  t              } t        j                  t
              5  t        | t               d d d        | j                          t        j                  t
              5  t        | t        j                  g dg             d d d        t        j                  d      5 }t        j                  d       t        | t        j                  ddgg             d	t        |d
   j                        v sJ 	 d d d        t        d      j                  t              } t        | t              }t        || j                          |j#                         dk\  sJ |j%                         dk  sJ y # 1 sw Y   AxY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr   r   )r   rY   r   T)recordalwaysr	  rV   z,Clusterer does not have any defined clustersr!   r  r   r   )r	   r#   rx   r:   r   r   r   generate_prediction_datar)   r
  warningscatch_warningssimplefilterstrmessager   r  r   ry   )r   wr  s      r.   &test_hdbscan_approximate_predict_scorer    sN   -11!4I	z	" 1"9a01&&(	z	" E"9bhh	{.CDE		 	 	- Th'"9bhhd}.EF=QrU]]ASSSS	T
 -11!4I'	15Ffi&?&?@::<1::<11 1E ET Ts$   F	;#F<AF"	FF"F+c                      t        dd      j                  t              } t        |       }t	        |t        j                  | j                  j                  j                  d                y )NTr   )r  r   r   )
r	   r#   rx   r   r   r)   zerosprediction_data_raw_datar   )r   vectss     r.   *test_hdbscan_all_points_membership_vectorsr     sN    sCGGJI))4Eubhhy'A'A'J'J'P'PQR'STUr0   c                     t        j                  t              5  t        d       d d d        t        j                  t              5  t        d        d d d        t        j                  t              5  t        t        d       d d d        t        j                  t              5  t        t        d       d d d        t        j                  t              5  t        t        d       d d d        t        j                  t              5  t        t        d       d d d        t        j                  t              5  t        t        d        d d d        t        j                  t              5  t        t        dd	       d d d        t        j                  t              5  t        t        ddd
       d d d        t        j                  t              5  t        t        ddd       d d d        t        j                  t              5  t        t        ddd       d d d        t        j                  t              5  t        t        dd       d d d        t        j                  t              5  t        t        dd
       d d d        t        j                  t              5  t        t        dd       d d d        t        j                  t              5  t        t        dd       d d d        t        j                  t              5  t        t        d       d d d        t        j                  t              5  t        t        d       d d d        t        j                  t
              5  t        t        d       d d d        t        j                  t              5  t        t        dd 	       d d d        t        j                  t              5  t        t        d       d d d        t        j                  t              5  t        t        d       d d d        t        j                  t              5  t        t        d       d d d        t        j                  t              5  t        t        d       d d d        y # 1 sw Y   txY w# 1 sw Y   SxY w# 1 sw Y   -xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   FxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ZxY w# 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   OxY w# 1 sw Y   y xY w)Nfailr   r   )min_samplesr!   imperialrs   	minkowski)rt   r   r   )rt   r   r   r   r   rr   r   )rt   r   )alphasomething_elser   r   )	leaf_size)cluster_selection_epsilon)cluster_selection_persistence)cluster_selection_epsilon_max)r:   r   r   r
   rx   	Exception	TypeError r0   r.   test_hdbscan_badargsr-  &  s   	z	" &	z	" $	z	" ,F+,	z	" 'v&'	z	" #r"#	z	" &*%&	z	"  $ 	z	" -+,-	z	" G+~FG	z	" I+7GHI	z	" K+7IJK	z	" E-3CDE	z	" C->BC	z	" E-3CDE	z	" G-3EFG	z	" 	z	" ! !	y	! /-./	y	! /+./	z	"  Q 	z	" 1R01	z	" 545	z	" 545 5Y  , ,' '# #& &   - -G GI IK KE EC CE EG G ! !/ // /   1 15 55 5s  RR&6R3)S SSS'5S4)TTTT(<T50U$UUU)>U61V%VVV*>V7R#&R03R= S
SS$'S14S>TTT%(T25T?UUU&)U36V VVV'*V47W c                      t        j                  t              } t               j	                  |       j
                  }t        t        |            t        d|v       z
  }|dk(  sJ y )Nr!   r   )	r   r   rx   r	   r#   r%   rz   rg   r{   )sparse_Xr~   r|   s      r.   test_hdbscan_sparser0  W  sP      #HY]]8$,,FS[!Cf$55J??r0   c                  X   t               } t        | d      j                  t              j                  }t        | dd      j                  t              j                  }t        t        |            t        d|v       z
  }t        t        |            t        d|v       z
  }||k(  sJ y )Nr   )memoryr!  r"   )r2  r!  r   r!   )r   r	   r#   rx   r%   rz   rg   r{   )cachedirri   rj   n_clusters1n_clusters2s        r.   test_hdbscan_cachingr6  `  s    yHX1599!<DDGX1qIMMaPXXGc'l#c"-&88Kc'l#c"-&88K+%%%r0   c                     ddg} t        dd| d      \  }}t               j                  |      }t        |       D ]C  \  }}|j	                  |      }t        ||d       |j                  |      }t        ||d       E y )	N)re   re   )rW   rW   i  r         ?)r   r   rR   rS   r   )decimal)r   r	   r#   	enumerateweighted_cluster_centroidr   weighted_cluster_medoid)rR   r   r   r   idxcentercentroidmedoids           r.   test_hdbscan_centroids_medoidsrA  j  s    :&G1gSVWDAq	a I ) =V66s;!(FA>2237!&&!<=r0   c                  :   t               j                  t              } t        j                  t
              5  | j                  d       d d d        t        j                  t
              5  | j                  d       d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nr!   )r	   r#   rx   r:   r   r   r;  r<  r   s    r.   )test_hdbscan_no_centroid_medoid_for_noiserC  w  su    	a I	z	" 0++B/0	z	" .))"-. .0 0. .s   B*BBBc                     t         j                  j                  d       t         j                  j                  dd      } t	        dddd      j                  |       }t        j                  |d	      \  }}t        |      dk(  sJ ||d
k(     dk(  sJ t	        dddd      j                  |       }t        j                  |d	      \  }}t        |      dk(  sJ ||d
k(     dk(  sJ y )Nr      rY   r   re   eomT)r   r'  cluster_selection_methodallow_single_cluster)return_countsr!   .   皙?r)   r[   rU   randr	   r   uniquerz   )no_structurer~   unique_labelscountss       r.   .test_hdbscan_allow_single_cluster_with_epsilonrR    s    IINN199>>#q)L"%!&!	
 k,  IIfDAM6}"""-2%&",,, "%!&!	
 k,  IIfDAM6}"""-2%&!+++r0   c                     t         j                  j                  d       t         j                  j                  dd      } t	        ddd      j                  |       }t        j                  |      }t        |      dk(  sJ y )	Nr   rE  rY   r   r8  rF  )r   r(  rG  r   rL  )rO  r~   rP  s      r.   "test_hdbscan_persistence_thresholdrT    sk    IINN199>>#q)L&)!& k,	 
 IIf%M}"""r0   c                     t        dg ddd      \  } }t        dd      }|j                  |        t        t	        j
                  |j                        t	        j                  d	d
g             t        dd      }|j                  |        t        t	        j
                  |j                        t	        j                  g d             y)z{Test that reducing the cluster_selection_epsilon_max parameter
    results in more clusters with smaller sizes being found.rX   )r   r   )r!   r   )r!   r   )r   r   rK  rP   rQ   rO   T)r)  rH  r   r   rN   )r!   r   r   rY   r   N)r   r	   r#   r   r)   rN  r%   r
  r_   r`   r   s      r.   *test_hdbscan_cluster_selection_epsilon_maxrX    s     B"D&)')+HE1
 c-13IMM%ryy!2!23RXXq!f5EFc-13IMM%ryy!2!23RXX>N5OPr0   c                      t        dg ddd      \  } }t        dd      }|j                  |        	 t        d	d
d      }|j                  |        y )NrX   rV  rK  rP   rQ   r   T)max_cluster_sizerH  g=
ףp=?r   )r)  r'  rH  )r   r	   r#   rW  s      r.   -test_hdbscan_parameters_do_not_trigger_errorsr[    s`    B"D&)')+HE1 -13I MM%d25-13I
 MM%r0   z(need to refactor to meet newer standards)reasonc                  "    t        t               y )N)r   r	   r,  r0   r.   !test_hdbscan_is_sklearn_estimatorr^    s
    Gr0   )X__doc__numpyr)   scipy.spatialr   scipyr   r   sklearn.utils.estimator_checksr   sklearn.utils._testingr   r   r
   r	   r   r   r   r   r   sklearn.datasetsr   sklearn.utilsr   sklearn.preprocessingr   scipy.statsr   tempfiler   	functoolsr   r:   sklearnr   r  r|   rx   r   r   copyr$   nanr/   rB   rG   rL   rc   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r-  r0  r6  rA  rC  rR  rT  rX  r[  markr;   r^  r,  r0   r.   <module>ro     s    "   :   ( ! 0      
Cb11q!!$1""1%VVQKq VVRVV$q 
J4,*"&(

A
@
CB&'&"	&H
&
:*:*
*0<@J^V.5b&
=.,6	#Q** CD Er0   