
    t]eN                        d Z ddlmZ ddlZddlZddlZddlmZ ddl	m
Z
mZ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 dd
lmZ ddlmZ ddlmZ ddl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+m,Z, ddl-m.Z. ddl/m0Z0m1Z1  e#ej2                  Z3 e
            Z4ej5        6                    dd ed           edd           e             e             ed          g          ej5        6                    d eddgg d d!d"gd!d"gd#                    d$                         Z7d% Z8d& Z9d' Z:d( Z;d) Z<d* Z=d+ Z>d, Z?dJd.Z@d/ ZAd0 ZBd1 ZCd2 ZDd3 ZEd4 ZFd5 ZGd6 ZH G d7 d8e          ZIej5        J                    d9          ej5        6                    d:d; e1            d<f e0 ed=>          ?          d<f e,            d@f e+            d@fg          dA                         ZKej5        6                    dBd!d"g          dC             ZLdD ZMej5        N                    e3 e#dE          k     dFG          dH             ZOdI ZPdS )Kz%Test the module ensemble classifiers.    )CounterN)KMeans)	load_irismake_classificationmake_hastie_10_2)DummyClassifier)SelectKBest)LogisticRegression
Perceptron)GridSearchCVParameterGridtrain_test_split)KNeighborsClassifier)SVC)DecisionTreeClassifier)assert_allcloseassert_array_almost_equalassert_array_equal)parse_version)FunctionSampler)make_imbalance)BalancedBaggingClassifier)SMOTERandomOverSampler)make_pipeline)ClusterCentroidsRandomUnderSampler	estimatorprior)strategy  MbP?max_itertolscalegammaparams      ?      ?)         TF)max_samplesmax_features	bootstrapbootstrap_featuresc                    t          t          j        t          j        ddddd          \  }}t	          ||d          \  }}}}t          d
| dd|                    ||          }|                    |           |                    |           |	                    ||           t          | d	          r|                    |           d S d S )N      2   r   r,   r-   r   sampling_strategyrandom_stater:   r   r:   decision_function )r   irisdatatargetr   r   fitpredictpredict_probascorehasattrr=   )	r   r)   XyX_trainX_testy_trainy_testbags	            Dlib/python3.11/site-packages/imblearn/ensemble/tests/test_bagging.py test_balanced_bagging_classifierrO   &   s    0 	 RB//	  DAq (811'M'M'M$GVWf
#
Ria
R
R6
R
R
V
V C KKfIIffy-.. &f%%%%%& &    c                  d   t          t          j        t          j        ddddd          \  } }t	          | |d          \  }}}}t                                          ||          }t          t                      dd	d
i d                              ||          }|                    ||          |                    ||          k    sJ t          t                      ddd                              ||          }|                    ||          |                    ||          k     sJ d S )Nr4   r5   r6   r7   r   r8   r;   r+   F
   )r   r/   r1   n_estimatorsr9   r:   T)r   r/   r1   r:   )	r   r?   r@   rA   r   r   rB   r   rE   )rG   rH   rI   rJ   rK   rL   r   ensembles           rN   test_bootstrap_samplesrU   P   sP   	 RB//	  DAq (811'M'M'M$GVWf&((,,Wg>>I )(**   
c'7  >>'7++yw/P/PPPPP )(**	  
 
c'7  >>'7++ioogw.O.OOOOOOOrP   c                  <   t          t          j        t          j        ddddd          \  } }t	          | |d          \  }}}}t          t                      dd	d
                              ||          }|j        D ]2}t          j
        |          j        d         | j        d         k    sJ 3t          t                      ddd
                              ||          }d |j        D             }t          j        |          | j        d         k     sJ d S )Nr4   r5   r6   r7   r   r8   r;   r+   F)r   r0   r2   r:   r,   Tc                 L    g | ]!}t          j        |          j        d          "S )r   )npuniqueshape).0featuress     rN   
<listcomp>z+test_bootstrap_features.<locals>.<listcomp>   s7       )1	(!!$  rP   )r   r?   r@   rA   r   r   r   rB   estimators_features_rX   rY   rZ   median)	rG   rH   rI   rJ   rK   rL   rT   r\   unique_featuress	            rN   test_bootstrap_featuresra   t   sQ   	 RB//	  DAq (811'M'M'M$GVWf((** 	  
 
c'7  1 : :y""(+qwqz99999((**	  
 
c'7  5=5R  O 9_%%
222222rP   c            	      6   t          t          j        t          j        ddddd          \  } }t	          | |d          \  }}}}t          j        dd	          5  t          t                      d
          	                    ||          }t          t          j        |                    |          d          t          j        t          |                               t          |                    |          t          j        |                    |                               t          t#          dd          dd          }|	                    ||           t          t          j        |                    |          d          t          j        t          |                               t          |                    |          t          j        |                    |                               d d d            d S # 1 swxY w Y   d S )Nr4   r5   r6   r7   r   r8   r;   ignore)divideinvalidr<   r,   )axislbfgsautosolvermulti_class   )r   r:   r/   )r   r?   r@   rA   r   rX   errstater   r   rB   r   sumrD   oneslenexppredict_log_probar
   rG   rH   rI   rJ   rK   rL   rT   s          rN   test_probabilityrt      sK   	 RB//	  DAq (811'M'M'M$GVWf	Hh	7	7	7  
  
,,..Q
 
 

#gw

 	 	"F8))&11:::GCKK  	
 	
 	

 	"""6**F8--f5566	
 	
 	
 -(VLLL
 
 

 	Wg&&&!F8))&11:::GCKK  	
 	
 	

 	"""6**F8--f5566	
 	
 	
; 
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
s   F%HHHc            	      :   t          t          j        t          j        ddddd          \  } }t	          | |d          \  }}}}t                      t          d	          fD ]}t          |d
ddd                              ||          }|	                    ||          }t          ||j        z
            dk     sJ t          j        t                    5  t          |dddd                              ||           d d d            n# 1 swxY w Y   d S )Nr4   r5   r6   r7   r   r8   r;   r&   r'   d   T)r   rS   r1   	oob_scorer:   g?r,   )r   r?   r@   rA   r   r   r   r   rB   rE   abs
oob_score_pytestwarnsUserWarning)	rG   rH   rI   rJ   rK   rL   r   clf
test_scores	            rN   test_oob_score_classificationr      s    	 RB//	  DAq (811'M'M'M$GVWf,..'0B0B0BC $ $	'
 
 
 #gw

 	 YYvv..
:.//#5555 \+&& 	$ 	$%#   c'7###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$$ $s   )DD	D	c                  "   t          t          j        t          j        ddddd          \  } }t	          | |d          \  }}}}t          t                      dd	d	d
                              ||          }t          t          |j
        d         j        d         d         j                  t                                                    ||          }t          |                    |          |                    |                     d S )Nr4   r5   r6   r7   r   r8   r;   r,   F)r   rS   r1   r2   r:   )r   r?   r@   rA   r   r   r   rB   r   r   estimators_stepsr:   r   rC   )rG   rH   rI   rJ   rK   rL   clf1clf2s           rN   test_single_estimatorr      s   	 RB//	  DAq (811'M'M'M$GVWf$&((    
c'7 	 (8(;(A!(DQ(G(TUUU  
c'7 	
 t||F++T\\&-A-ABBBBBrP   c                      t           j        t           j                                        }} d||dk    <   ddd}t	          t          t          d                    |dd	                              | |           d S )
Nr,   r-   )r,   r-   )rS   estimator__Cr&   r'      roc_auc)cvscoring)r?   r@   rA   copyr   r   r   rB   )rG   rH   
parameterss      rN   test_gridsearchr      s     9dk&&((qAAa1fI #)&AAJ!#G"4"4"455	  
 
c!QiiiiirP   c                     t          t          j        t          j        ddddd          \  } }t	          | |d          \  }}}}t          d dd	                              ||          }t          |j        j	        d
         d         t                    sJ t          t                      dd	                              ||          }t          |j        j	        d
         d         t                    sJ t          t          dd          dd	                              ||          }t          |j        j	        d
         d         t                    sJ d S )Nr4   r5   r6   r7   r   r8   r;   r   )n_jobsr:   r,   r!   r"   r#   )r   r?   r@   rA   r   r   rB   
isinstance
estimator_r   r   r   rs   s          rN   test_estimatorr     si   	 RB//	  DAq (811'M'M'M$GVWf(aaHHHLL H h)/3A68NOOOOO(    	c'7  h)/3A68NOOOOO(Dd+++AA  	c'7  h)/3A6
CCCCCCCrP   c                  &   t          t          j        t          j        ddddd          \  } }t	          t          t          d          t                                d	
          }|                    | |          	                    |            d S )Nr4   r5   r6   r7   r   r8   r,   )kr-   )r0   )
r   r?   r@   rA   r   r   r	   r   rB   rC   rG   rH   r   s      rN   test_bagging_with_pipeliner   -  s    	 RB//	  DAq *kA&&&(>(@(@AA  I MM!Q"""""rP   *   c                 p   t          dd          \  }}d }dD ]X}|t          || d          }n|                    |           |                    ||           t	          |          |k    sJ Yt          d| d	          }|                    ||           d
 |D             d |D             k    sJ d S )Nr4   r,   	n_samplesr:   )rl   rR   T)rS   r:   
warm_startrS   rR   Fc                 >    h | ]}|j         d          d         j        S r   r,   r   r:   r[   pipes     rN   	<setcomp>z"test_warm_start.<locals>.<setcomp>R  s&    >>>tDJrN1*>>>rP   c                 >    h | ]}|j         d          d         j        S r   r   r   s     rN   r   z"test_warm_start.<locals>.<setcomp>R  s9     C C C+/
2q&C C CrP   )r   r   
set_paramsrB   rp   )r:   rG   rH   clf_wsrS   	clf_no_wss         rN   test_warm_startr   ;  s    bq999DAqF 
+ 
+>.))  FF <888

1a6{{l*****)lu  I MM!Q>>v>>> C C3<C C C      rP   c                  8   t          dd          \  } }t          dd          }|                    | |           |                    d           t	          j        t                    5  |                    | |           d d d            d S # 1 swxY w Y   d S )	Nr4   r,   r   rl   T)rS   r   r.   r   )r   r   rB   r   rz   raises
ValueErrorrG   rH   r}   s      rN   $test_warm_start_smaller_n_estimatorsr   W  s    bq999DAq
#t
D
D
DCGGAqMMMNNN"""	z	"	"  1                 s   +BBBc                     t          dd          \  } }t          | |d          \  }}}}t          ddd	          }|                    ||           |                    |          }|d
z  }d}t          j        t          |          5  |                    ||           d d d            n# 1 swxY w Y   t          ||                    |                     d S )Nr4   r,   r   +   r;   rl   TS   rS   r   r:   r+   z;Warm-start fitting without increasing n_estimators does notmatch)	r   r   r   rB   rC   rz   r{   r|   r   )	rG   rH   rI   rJ   rK   rL   r}   y_predwarn_msgs	            rN   "test_warm_start_equal_n_estimatorsr   a  s   bq999DAq'712'N'N'N$GVWf
#tRT
U
U
UCGGGW[[  FsNGLH	k	2	2	2 " "!!!" " " " " " " " " " " " " " "vs{{62233333s   B..B25B2c                     t          dd          \  } }t          | |d          \  }}}}t          ddd	          }|                    ||           |                    d
           |                    ||           |                    |          }t          d
dd	          }|                    ||           |                    |          }	t          ||	           d S )Nr4   r,   r   r   r;   rl   TiE  r   rR   r   F)r   r   r   rB   r   rC   r   )
rG   rH   rI   rJ   rK   rL   r   y1r}   y2s
             rN   test_warm_start_equivalencer   s  s     bq999DAq'712'N'N'N$GVWf&4d  F JJw   
2&&&
JJw   			B
#E  C GGGW	V		Bb"%%%%%rP   c                      t          dd          \  } }t          ddd          }t          j        t                    5  |                    | |           d d d            d S # 1 swxY w Y   d S )Nr4   r,   r   rl   T)rS   r   rw   )r   r   rz   r   r   rB   r   s      rN   $test_warm_start_with_oob_score_failsr     s    bq999DAq
#tt
T
T
TC	z	"	"  1                 s    A$$A(+A(c                  \   t          dd          \  } }t          dd          }|                    | |           |                    ddd	           |                    | |           t	          j        t                    5  t          |d
           d d d            d S # 1 swxY w Y   d S )Ni  r,   r   r6   T)rS   rw   Frv   )r   rw   rS   ry   )r   r   rB   r   rz   r   AttributeErrorgetattrr   s      rN   $test_oob_score_removed_on_warm_startr     s    d;;;DAq
#t
D
D
DCGGAqMMMNNde#NFFFGGAqMMM	~	&	& # #\"""# # # # # # # # # # # # # # # # # #s   B!!B%(B%c                      t          dd          \  } }t          t                      dddd          }|                    | |          j        |                    | |          j        k    sJ d S )N   r,   r   r*   T)r/   r0   rw   r:   )r   r   r   rB   ry   )rG   rH   baggings      rN   test_oob_score_consistencyr     s~     c:::DAq'  G ;;q!'7;;q!+<+<+GGGGGGGrP   c                     t          dd          \  } }t          t          dd          dddd	          }|                    | |           |j        }|j        }|j        }t          |          t          |          k    sJ t          |d
                   t          |           dz  k    sJ |d
         j        j	        dk    sJ d
}||         }||         }||         }	| |         d d |f         }
||         }|	j
        d         d         j        }|	                    |
|           |	j
        d         d         j        }t          ||           d S )Nr   r,   r   rg   rh   ri   r*   F)r/   r0   r:   r1   r   r-   ir   )r   r   r
   rB   estimators_samples_r^   r   rp   dtypekindr   coef_r   )rG   rH   r   estimators_samplesestimators_features
estimatorsestimator_indexestimator_samplesestimator_featuresr   rI   rK   
orig_coefs	new_coefss                 rN   test_estimators_samplesr     s    c:::DAq ('v>>>  G KK1 !4!6$J !""c*oo5555!!$%%Q14444a &+s2222 O*?;,_=?+I"#QQQ(:%:;G!"G$Q'-JMM'7####A&,IJ	*****rP   c                      d} t          d| z  d          \  }}t          t                      | dd          }|                    ||           |j        | k    sJ d S )Nrv   r-   r,   r   r*   )r/   r0   r:   )r   r   r   rB   _max_samples)r/   rG   rH   r   s       rN   test_max_samples_consistencyr     sy     Ka+oAFFFDAq'	  G KK1;......rP   c                   $     e Zd ZdZd fd	Z xZS )CountDecisionTreeClassifierzPDecisionTreeClassifier that will memorize the number of samples seen
    at fit.Nc                 t    t          |          | _        t                                          |||          S )N)sample_weight)r   class_counts_superrB   )selfrG   rH   r   	__class__s       rN   rB   zCountDecisionTreeClassifier.fit  s-    $QZZww{{1a}{===rP   )N)__name__
__module____qualname____doc__rB   __classcell__)r   s   @rN   r   r     sG         > > > > > > > > > >rP   r   z"ignore:Number of distinct clusterszsampler, n_samples_bootstrap)N   r   r,   )n_init)r   (   c                    t          t          j        t          j        ddddd          \  }}t	          ||d          \  }}}}t          t                      d| d	          }|                    ||           |                    |           t          t          |j        d         d
         j                                                  |           d S )Nr4   r5   r6   r7   r   r8   r;   r-   r   rS   samplerr:   r   )r   r?   r@   rA   r   r   r   rB   rC   r   listr   r   values)	r   n_samples_bootstraprG   rH   rI   rJ   rK   rL   r}   s	            rN   )test_balanced_bagging_classifier_samplersr     s      	 RB//	  DAq (811'M'M'M$GVWf
#-//	  C GGGWKK S_Q#188::;;=P    rP   replacec           	      ,   t          dddddgd          \  }}dd	}t          t          d
          dt          |d| i          d          }|                    ||           |j        D ]&}|d         j        }|d         |d         z  dk    sJ 'd S )Nr!   rR   r-   g333333?gffffff?r   )r   
n_features	n_classesweightsr:   Fc                    t          |          }t          ||j                  }t          ||j                  }||         }t          j                            |d          }t          j                            t	          j        ||k              ||          }t          j                            t	          j        ||k              ||          }	t	          j	        ||	g          }
| |
         ||
         fS )z>Implementation of Roughly Balanced Bagging for binary problem.)keyr*   )np)sizer   )
r   maxgetminrX   randomnegative_binomialchoiceflatnonzerohstack)rG   rH   r   class_countsmajority_classminority_classn_minority_classn_majority_resampledmajority_indicesminority_indicesindicess              rN   roughly_balanced_baggingzXtest_balanced_bagging_classifier_with_function_sampler.<locals>.roughly_balanced_bagging"  s     qzz\|/?@@@\|/?@@@ (7!y::=MQT:UU 9++N1.//% , 
 

 9++N1.//! , 
 

 )-/?@AAz1W:%%rP   r;   r   )funckw_argsr   r   r,   g(\?)F)r   r   r   r   rB   r   r   )r   rG   rH   r	  rbbr   r  s          rN   6test_balanced_bagging_classifier_with_function_samplerr    s     c
  DAq& & & &8 $-1===)Iw3G
 
 
   C GGAqMMM_ : :	 }2Q,q/1T99999: :rP   c                      t          d          \  } }t                                          | |          }t          j        t
          d          5  |j         ddd           dS # 1 swxY w Y   dS )zACheck that we raise a FutureWarning when accessing `n_features_`.T
return_X_yz`n_features_` was deprecatedr   N)r   r   rB   rz   r{   FutureWarningn_features_r   s      rN   +test_balanced_bagging_classifier_n_featuresr  M  s    %%%DAq)++//155I	m+I	J	J	J                      A&&A*-A*z1.2zrequires scikit-learn>=1.2)reasonc                      t          d          \  } }t                                          | |          }t          j        t
          d          5  |j         ddd           dS # 1 swxY w Y   dS )zECheck that we raise a FutureWarning when accessing `base_estimator_`.Tr  z `base_estimator_` was deprecatedr   N)r   r   rB   rz   r{   r  base_estimator_r   s      rN   /test_balanced_bagging_classifier_base_estimatorr  U  s    
 %%%DAq)++//155I	m+M	N	N	N " "!!" " " " " " " " " " " " " " " " " "r  c                     t          d          \  } }d}t          j        t          |          5  t	          t                      t                                                    | |           ddd           dS # 1 swxY w Y   dS )zXCheck that we raise a ValueError when setting both `estimator` and
    `base_estimator`.Tr  zEBoth `estimator` and `base_estimator` were set. Only set `estimator`.r   )r   base_estimatorN)r   rz   r   r   r   r   rB   )rG   rH   err_msgs      rN   Ftest_balanced_bagging_classifier_set_both_estimator_and_base_estimatorr  `  s     %%%DAqUG	z	1	1	1  !*,,=Q=S=S	
 	
 	

#a)))                 s   >A<<B B )r   )Qr   collectionsr   numpyrX   rz   sklearnsklearn.clusterr   sklearn.datasetsr   r   r   sklearn.dummyr   sklearn.feature_selectionr	   sklearn.linear_modelr
   r   sklearn.model_selectionr   r   r   sklearn.neighborsr   sklearn.svmr   sklearn.treer   sklearn.utils._testingr   r   r   sklearn.utils.fixesr   imblearnr   imblearn.datasetsr   imblearn.ensembler   imblearn.over_samplingr   r   imblearn.pipeliner   imblearn.under_samplingr   r   __version__sklearn_versionr?   markparametrizerO   rU   ra   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   filterwarningsr   r  r  skipifr  r  r>   rP   rN   <module>r7     sJ   + +
              " " " " " " M M M M M M M M M M ) ) ) ) ) ) 1 1 1 1 1 1 ? ? ? ? ? ? ? ? Q Q Q Q Q Q Q Q Q Q 2 2 2 2 2 2       / / / / / /         
 . - - - - - $ $ $ $ $ $ , , , , , , 7 7 7 7 7 7 ; ; ; ; ; ; ; ; + + + + + + H H H H H H H H- 344y{{ )))
Dd+++  '
 
 M:%II#'-		
 	
 
 
& &
 

 
,&(!P !P !PH3 3 3B*
 *
 *
Z $  $  $FC C C4  "D D D:# # #   8  4 4 4$& & &.  
# 
# 
#H H H(+ (+ (+V/ / /> > > > >"8 > > > @AA"				r"vvQ'7'7'7888	
 
			b!	"	    BA2 T5M222: 2: 322:j   mmE***3O   " " "    rP   