
    ZPhDI                        d Z ddlm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(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.  e	            Z/ej0        1                    dd ed           edd           e             e             ed          g          ej0        1                    d eddgg dd d!gd d!gd"                    d#                         Z2d$ Z3d% Z4d& Z5d' Z6d( Z7d) Z8d* Z9d+ Z:dCd-Z;d. Z<d/ Z=d0 Z>d1 Z?d2 Z@d3 ZAd4 ZBd5 ZC G d6 d7e          ZDej0        E                    d8          ej0        1                    d9d: e.            d;f e- ed<=          >          d;f e)            d?f e(            d?fg          d@                         ZFej0        1                    dAd d!g          dB             ZGdS )Dz%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)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r9   r   r9   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	            d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/imblearn/ensemble/tests/test_bagging.py test_balanced_bagging_classifierrN   #   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 )Nr3   r4   r5   r6   r   r7   r:   r*   F
   )r   r.   r0   n_estimatorsr8   r9   T)r   r.   r0   r9   )	r   r>   r?   r@   r   r   rA   r   rD   )rF   rG   rH   rI   rJ   rK   r   ensembles           rM   test_bootstrap_samplesrT   M   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OrO   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 )Nr3   r4   r5   r6   r   r7   r:   r*   F)r   r/   r1   r9   r+   Tc                 L    g | ]!}t          j        |          j        d          "S )r   )npuniqueshape).0featuress     rM   
<listcomp>z+test_bootstrap_features.<locals>.<listcomp>   s7       )1	(!!$  rO   )r   r>   r?   r@   r   r   r   rA   estimators_features_rW   rX   rY   median)	rF   rG   rH   rI   rJ   rK   rS   r[   unique_featuress	            rM   test_bootstrap_featuresr`   q   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2rO   c            	      4   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          }|	                    ||           t          t          j        |                    |          d          t          j        t          |                               t          |                    |          t          j        |                    |                               d d d            d S # 1 swxY w Y   d S )Nr3   r4   r5   r6   r   r7   r:   ignore)divideinvalidr;   r+   )axislbfgs)solver   )r   r9   r.   )r   r>   r?   r@   r   rW   errstater   r   rA   r   sumrC   oneslenexppredict_log_probar
   rF   rG   rH   rI   rJ   rK   rS   s          rM   test_probabilityrp      sI   	 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	
 	
 	
 -(888
 
 

 	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 )Nr3   r4   r5   r6   r   r7   r:   r%   r&   d   T)r   rR   r0   	oob_scorer9   g?r+   )r   r>   r?   r@   r   r   r   r   rA   rD   abs
oob_score_pytestwarnsUserWarning)	rF   rG   rH   rI   rJ   rK   r   clf
test_scores	            rM   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 )Nr3   r4   r5   r6   r   r7   r:   r+   F)r   rR   r0   r1   r9   )r   r>   r?   r@   r   r   r   rA   r   r   estimators_stepsr9   r   rB   )rF   rG   rH   rI   rJ   rK   clf1clf2s           rM   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BrO   c                      t           j        t           j                                        }} d||dk    <   ddd}t	          t          t          d                    |dd	                              | |           d S )
Nr+   r,   )r+   r,   )rR   estimator__Cr%   r&      roc_auc)cvscoring)r>   r?   r@   copyr   r   r   rA   )rF   rG   
parameterss      rM   test_gridsearchr      s     9dk&&((qAAa1fI #)&AAJ!#G"4"4"455	  
 
c!QiiiiirO   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 )Nr3   r4   r5   r6   r   r7   r:   r   )n_jobsr9   r+   r    r!   r"   )r   r>   r?   r@   r   r   rA   
isinstance
estimator_r~   r   r   ro   s          rM   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CrO   c                  &   t          t          j        t          j        ddddd          \  } }t	          t          t          d          t                                d	
          }|                    | |          	                    |            d S )Nr3   r4   r5   r6   r   r7   r+   )kr,   )r/   )
r   r>   r?   r@   r   r   r	   r   rA   rB   )rF   rG   r   s      rM   test_bagging_with_pipeliner   *  s    	 RB//	  DAq *kA&&&(>(@(@AA  I MM!Q"""""rO   *   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 )Nr3   r+   	n_samplesr9   )rh   rQ   T)rR   r9   
warm_startrR   rQ   Fc                 >    h | ]}|j         d          d         j        S r   r+   r~   r9   rZ   pipes     rM   	<setcomp>z"test_warm_start.<locals>.<setcomp>O  s&    >>>tDJrN1*>>>rO   c                 >    h | ]}|j         d          d         j        S r   r   r   s     rM   r   z"test_warm_start.<locals>.<setcomp>O  s9     C C C+/
2q&C C CrO   )r   r   
set_paramsrA   rl   )r9   rF   rG   clf_wsrR   	clf_no_wss         rM   test_warm_startr   8  s    bq999DAqF 
+ 
+>.))  FF <888

1a6{{l*****)lu  I MM!Q>>v>>> C C3<C C C      rO   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 )	Nr3   r+   r   rh   T)rR   r   r-   r   )r   r   rA   r   rv   raises
ValueErrorrF   rG   ry   s      rM   $test_warm_start_smaller_n_estimatorsr   T  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 )Nr3   r+   r   +   r:   rh   TS   rR   r   r9   r*   z;Warm-start fitting without increasing n_estimators does not)match)	r   r   r   rA   rB   rv   rw   rx   r   )	rF   rG   rH   rI   rJ   rK   ry   y_predwarn_msgs	            rM   "test_warm_start_equal_n_estimatorsr   ^  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 )Nr3   r+   r   r   r:   rh   TiE  r   rQ   r   F)r   r   r   rA   r   rB   r   )
rF   rG   rH   rI   rJ   rK   r   y1ry   y2s
             rM   test_warm_start_equivalencer   p  s     bq999DAq'712'N'N'N$GVWf&4d  F JJw   
2&&&
JJw   			B
#E  C GGGW	V		Bb"%%%%%rO   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 )Nr3   r+   r   rh   T)rR   r   rs   )r   r   rv   r   r   rA   r   s      rM   $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   r5   T)rR   rs   Frr   )r   rs   rR   ru   )r   r   rA   r   rv   r   AttributeErrorgetattrr   s      rM   $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.   r/   rs   r9   )r   r   r   rA   ru   )rF   rG   baggings      rM   test_oob_score_consistencyr     s~     c:::DAq'  G ;;q!'7;;q!+<+<+GGGGGGGrO   c                     t          dd          \  } }t          t                      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   r)   F)r.   r/   r9   r0   r   r,   ir   )r   r   r
   rA   estimators_samples_r]   r}   rl   dtypekindr~   coef_r   )rF   rG   r   estimators_samplesestimators_features
estimatorsestimator_indexestimator_samplesestimator_featuresr   rH   rJ   
orig_coefs	new_coefss                 rM   test_estimators_samplesr     s|    c:::DAq (  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	*****rO   c                      d} t          d| z  d          \  }}t          t                      | dd          }|                    ||           |j        | k    sJ d S )Nrr   r,   r+   r   r)   )r.   r/   r9   )r   r   r   rA   _max_samples)r.   rF   rG   r   s       rM   test_max_samples_consistencyr     sy     Ka+oAFFFDAq'	  G KK1;......rO   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_superrA   )selfrF   rG   r   	__class__s       rM   rA   zCountDecisionTreeClassifier.fit  s-    $QZZww{{1a}{===rO   )N)__name__
__module____qualname____doc__rA   __classcell__)r   s   @rM   r   r     sG         > > > > > > > > > >rO   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 )Nr3   r4   r5   r6   r   r7   r:   r,   r   rR   samplerr9   r   )r   r>   r?   r@   r   r   r   rA   rB   r   listr}   r   values)	r   n_samples_bootstraprF   rG   rH   rI   rJ   rK   ry   s	            rM   )test_balanced_bagging_classifier_samplersr     s      	 RB//	  DAq (811'M'M'M$GVWf
#-//	  C GGGWKK S_Q#188::;;=P    rO   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    rQ   r,   g333333?gffffff?r   )r   
n_features	n_classesweightsr9   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minrW   randomnegative_binomialchoiceflatnonzerohstack)rF   rG   r   class_countsmajority_classminority_classn_minority_classn_majority_resampledmajority_indicesminority_indicesindicess              rM   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:%%rO   r:   r   )funckw_argsr   r   r+   g(\?)F)r   r   r   r   rA   r}   r   )r   rF   rG   r  rbbr   r   s          rM   6test_balanced_bagging_classifier_with_function_samplerr    s     c
  DAq& & & &8 $-1===)Iw3G
 
 
   C GGAqMMM_ : :	 }2Q,q/1T99999: :rO   )r   )Hr   collectionsr   numpyrW   rv   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   imblearnr   imblearn.datasetsr   imblearn.ensembler   imblearn.over_samplingr   r   imblearn.pipeliner   imblearn.under_samplingr   r   r>   markparametrizerN   rT   r`   rp   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   filterwarningsr   r  r=   rO   rM   <module>r     s   + +
             " " " " " " 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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: 2: 2:rO   