
    e!hU              	          d 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	 ddl
mZmZ ddl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 ddlmZ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&m'Z'm(Z(m)Z)m*Z* ejV                  jY                  d      Z-ddgddgddgddgddgddggZ.g dZ/g dZ0ddgddgddggZ1g dZ2g dZ3 ejh                         Z5e-jm                  e5jn                  jp                        Z9 ee5jt                  e5jn                  e-      \  e5_:        e5_7         ejv                         Z< ee<jt                  e<jn                  e-      \  e<_:        e<_7        d Z=d Z>d Z?d Z@d ZAej                  j                  dg d       d!        ZDd" ZEd# ZFd$ ZGd% ZHd& ZId' ZJd( ZKej                  j                  d) eLg e'e(e*e&e)e'd*e(z  z               d+        ZMej                  j                  d) eLg e'e(e*e&e)e'd*e(z  z               d,        ZNd- ZOd. ZPd/ ZQd0 ZRd1 ZSej                  j                  d2 e       e5jt                  e5jn                  f e       e<jt                  e<jn                  fg      d3        ZTd4 ZUd5 ZVd6 ZWy)7z6Testing for the boost module (sklearn.ensemble.boost).    N)datasets)BaseEstimatorclone)DummyClassifierDummyRegressor)AdaBoostClassifierAdaBoostRegressor)_samme_proba)LinearRegression)GridSearchCVtrain_test_split)SVCSVR)DecisionTreeClassifierDecisionTreeRegressor)shuffle)NoSampleWeightWrapper)assert_allcloseassert_array_almost_equalassert_array_equal)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS      )foor    r    r   r   r   )r   r   r   r   r   r      )r    r   r   )r   r   r   random_statec                  >   t        j                  g dg dg dg dg      t        j                  j                  d            d d t         j                  f   z   G fdd      }  |        }t        |d	t        j                              }t        |j                  j                         t        j                  |      j                         sJ t        t        j                  |d      g d
       t        t        j                  |d      g d       y )N)r   ư>r   )gRQ?g333333?皙?)igRQ?g      ?)r%   r   g&.>r   axisc                       e Zd Z fdZy)'test_samme_proba.<locals>.MockEstimatorc                 H    t        |j                  j                         S N)r   shape)selfXprobss     s/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/sklearn/ensemble/tests/test_weight_boosting.pypredict_probaz5test_samme_proba.<locals>.MockEstimator.predict_probaC   s    qww4L    N)__name__
__module____qualname__r2   )r0   s   r1   MockEstimatorr*   B   s    	r3   r7   r!   )r   r   r   r   )r   r   r   r   )nparrayabssumnewaxisr
   	ones_liker   r-   isfiniteallargminargmax)r7   mocksamme_probar0   s      @r1   test_samme_probarD   7   s     HH	'):OLE 
RVVEII1I%&q"**}55E 
 ?DtQU(;<K{((%++6;;{#''))) ryy15|Dryy15|Dr3   c                     t        j                  t        t                    } t	               j                  t        |       }t        |j                  t              t        j                  t        t              df             y )Nr   )r8   oneslenr/   r   fitr   r2   )y_tclfs     r1   test_oneclass_adaboost_probarK   T   sP     ''#a&/C


"
"1c
*Cc//2BGGSVQK4HIr3   c                     t        d      } | j                  t        t               t	        | j                  t              t               t	        t        j                  t        j                  t                    | j                         | j                  t              j                  t        t              dfk(  sJ | j                  t              j                  t        t              fk(  sJ y )Nr   r"   r   )r   rH   r/   y_classr   predictT	y_t_classr8   uniqueasarrayclasses_r2   r-   rG   decision_functionrJ   s    r1   test_classification_toyrV   ]   s    
!
,CGGAws{{1~y1ryyI!67FQ%%#a&!444  #))c!fY666r3   c                      t        d      } | j                  t        t               t	        | j                  t              t               y Nr   r"   )r	   rH   r/   y_regrr   rN   rO   y_t_regrrU   s    r1   test_regression_toyr[   g   s,    

+CGGAvs{{1~x0r3   c                     t        j                  t        j                        } t	               }|j                  t        j                  t        j                         t        | |j                         |j                  t        j                        }|j                  d   t        |       k(  sJ |j                  t        j                        j                  d   t        |       k(  sJ |j                  t        j                  t        j                        }|dkD  s
J d|       t        |j                        dkD  sJ t        t        d |j                  D                    t        |j                        k(  sJ y )Nr   g?zFailed with score = c              3   4   K   | ]  }|j                     y wr,   r"   .0ests     r1   	<genexpr>ztest_iris.<locals>.<genexpr>        ?3##?   )r8   rQ   iristargetr   rH   datar   rS   r2   r-   rG   rT   scoreestimators_set)classesrJ   probarg   s       r1   	test_irisrl   n   s   ii$G

CGGDIIt{{#w-dii(E;;q>S\)))  +11!4GDDDIIdii-E3;1/uj11; s!###s?s??@CDXXXXr3   loss)linearsquareexponentialc                    t        | d      }|j                  t        j                  t        j                         |j                  t        j                  t        j                        }|dkD  sJ t        |j                        dkD  sJ t        t        d |j                  D                    t        |j                        k(  sJ y )Nr   )rm   r#   g?r   c              3   4   K   | ]  }|j                     y wr,   r"   r^   s     r1   ra   z test_diabetes.<locals>.<genexpr>   rb   rc   )	r	   rH   diabetesrf   re   rg   rG   rh   ri   )rm   regrg   s      r1   test_diabetesru      s     A
6CGGHMM8??+IIhmmX__5E4<< s!###s?s??@CDXXXXr3   c                     t         j                  j                  d      } | j                  dt        j
                  j                        }| j                  dt        j
                  j                        }t        d      }|j                  t        j                  t        j
                  |       |j                  t        j                        }|j                  t        j                        D cg c]  }| }}|j                  t        j                        }|j                  t        j                        D cg c]  }| }}|j                  t        j                  t        j
                  |      }	|j!                  t        j                  t        j
                  |      D 
cg c]  }
|
 }}
t#        |      dk(  sJ t%        ||d          t#        |      dk(  sJ t%        ||d          t#        |      dk(  sJ t%        |	|d          t'        dd      }|j                  t        j                  t        j
                  |       |j                  t        j                        }|j                  t        j                        D cg c]  }| }}|j                  t        j                  t        j
                  |      }	|j!                  t        j                  t        j
                  |      D 
cg c]  }
|
 }}
t#        |      dk(  sJ t%        ||d          t#        |      dk(  sJ t%        |	|d          y c c}w c c}w c c}
w c c}w c c}
w )Nr   
   sizen_estimatorssample_weightr   r{   r#   )r8   randomRandomStaterandintrd   re   r-   rs   r   rH   rf   rN   staged_predictr2   staged_predict_probarg   staged_scorerG   r   r	   )rngiris_weightsdiabetes_weightsrJ   predictionspstaged_predictionsrk   staged_probasrg   sstaged_scoress               r1   test_staged_predictr      s   
))


"C;;r(9(9;:L{{2HOO,A,A{B
"
-CGGDIIt{{,G?++dii(K%(%7%7		%BC!CCdii(E # 8 8 CD1QDMDIIdiiLIIE##DIIt{{,#WM  !"b(((k+=b+AB}###e]2%67}###e]2%67 !
<CGGHMM8??:JGK++hmm,K%(%7%7%FG!GGIIhmmX__DTIUE !!MM8??:J " 
 	
M  !"b(((k+=b+AB}###e]2%67A DD  Hs   2	M=	M*	M	M<	Mc                  R   t        t                     } ddd}t        | |      }|j                  t        j
                  t        j                         t        t               d      } ddd}t        | |      }|j                  t        j
                  t        j                         y )N	estimator)r   r   )r{   estimator__max_depthr   r   r#   )
r   r   r   rH   rd   rf   re   r	   r   rs   )boost
parametersrJ   s      r1   test_gridsearchr      s     )?)ABE &J uj
)CGGDIIt{{# (=(?aPE"(&IJ
uj
)CGGHMM8??+r3   c                  l   dd l } t               }|j                  t        j                  t        j
                         |j                  t        j                  t        j
                        }| j                  |      }| j                  |      }t        |      |j                  k(  sJ |j                  t        j                  t        j
                        }||k(  sJ t        d      }|j                  t        j                  t        j
                         |j                  t        j                  t        j
                        }| j                  |      }| j                  |      }t        |      |j                  k(  sJ |j                  t        j                  t        j
                        }||k(  sJ y rX   )pickler   rH   rd   rf   re   rg   dumpsloadstype	__class__r	   rs   )r   objrg   r   obj2score2s         r1   test_pickler      s!    
CGGDIIt{{#IIdii-ESA<<?D:&&&ZZ		4;;/FF?? 
+CGGHMM8??+IIhmmX__5ESA<<?D:&&&ZZx7FF??r3   c            	         t        j                  ddddddd      \  } }t               }|j                  | |       |j                  }|j
                  d   dk(  sJ |d dt        j                  f   |dd  k\  j                         sJ y )Ni  rw   r!   r   Fr   )	n_samples
n_featuresn_informativen_redundant
n_repeatedr   r#   )	r   make_classificationr   rH   feature_importances_r-   r8   r<   r?   )r/   yrJ   importancess       r1   test_importancesr      s    ''DAq 
CGGAqM**KQ2%%%BJJ';qr?:??AAAr3   c                     t               } t        j                  d      }t        j                  t
        |      5  | j                  t        t        t        j                  dg             d d d        y # 1 sw Y   y xY w)Nz*sample_weight.shape == (1,), expected (6,)matchr   r|   )r   reescapepytestraises
ValueErrorrH   r/   rM   r8   rR   )rJ   msgs     r1   ,test_adaboost_classifier_sample_weight_errorr     sY    

C
))@
AC	z	- <7"**bT*:;< < <s   1A55A>c                  N   ddl m}  t         |              }|j                  t        t
               t        t                     }|j                  t        t               ddl m} t         |       d      }|j                  t        t
               t        t               d      }|j                  t        t
               ddgddgddgddgg}g d}t        t                     }t        j                  t        d      5  |j                  ||       d d d        y # 1 sw Y   y xY w)	Nr   )RandomForestClassifier)RandomForestRegressorr"   r   )r    barr   r   zworse than randomr   )sklearn.ensembler   r   rH   r/   rY   r   rM   r   r	   r   r   r   r   )r   rJ   r   X_faily_fails        r1   test_estimatorr   	  s    7 35
6CGGAv
SU
#CGGAw6
13!
DCGGAv
CE
2CGGAv !fq!fq!fq!f-F!F
SU
#C	z)<	=       s   ?DD$c                      d} t        dd      }t        j                  t        |       5  |j	                  t
        j                  t
        j                         d d d        y # 1 sw Y   y xY w)Nz+Sample weights have reached infinite values   g      7@)r{   learning_rater   )r   r   warnsUserWarningrH   rd   rf   re   )r   rJ   s     r1   test_sample_weights_infiniter   %  sL    
7C
"D
AC	k	- (		4;;'( ( (s   /A##A,z(sparse_container, expected_internal_type   c                     G d dt               }t        j                  dddd      \  }}t        j                  |      }t        ||d	      \  }}}} | |      }	 | |      }
t         |d
      d      j                  |	|      }t         |d
      d      j                  ||      }|j                  |
      }|j                  |      }t        ||       |j                  |
      }|j                  |      }t        ||       |j                  |
      }|j                  |      }t        ||       |j                  |
      }|j                  |      }t        ||       |j                  |
|      }|j                  ||      }t        ||       |j                  |
      }|j                  |      }t!        ||      D ]  \  }}t        ||        |j#                  |
      }|j#                  |      }t!        ||      D ]  \  }}t        ||        |j%                  |
      }|j%                  |      }t!        ||      D ]  \  }}t        ||        |j'                  |
|      }|j'                  ||      }t!        ||      D ]  \  }}t        ||        |j(                  D cg c]  }|j*                   }}t-        |D cg c]  }||k(  	 c}      sJ y c c}w c c}w )Nc                   $     e Zd ZdZd fd	Z xZS )-test_sparse_classification.<locals>.CustomSVCz8SVC variant that records the nature of the training set.c                 L    t         |   |||       t        |      | _        | S z<Modification on fit caries data type for later verification.r|   superrH   r   
data_type_r.   r/   r   r}   r   s       r1   rH   z1test_sparse_classification.<locals>.CustomSVC.fit?  %    GK1MK:"1gDOKr3   r,   r4   r5   r6   __doc__rH   __classcell__r   s   @r1   	CustomSVCr   <      F	 	r3   r   r         *   )	n_classesr   r   r#   r   r"   T)probabilityr   )r   r   make_multilabel_classificationr8   ravelr   r   rH   rN   r   rT   r   predict_log_probar2   rg   staged_decision_functionzipr   r   r   rh   r   r?   )sparse_containerexpected_internal_typer   r/   r   X_trainX_testy_trainy_testX_train_sparseX_test_sparsesparse_classifierdense_classifiersparse_clf_resultsdense_clf_resultssparse_clf_resdense_clf_resitypests                       r1   test_sparse_classificationr   ,  s&    C  22rabDAq 	A'711'M$GVWf%g.N$V,M +- 
c.'"  *- 
c'7  +22=A(008)+<= +<<]K(::6B02CD +<<]K(::6B02CD +88G(66v>02CD +00G(..vv>02CD +CCMR(AA&I),-?AR)S A%!.-@A +99-H(77?),-?AR)S :%>=9: +??N(==fE),-?AR)S A%!.-@A +77vN(55ffE),-?AR)S :%>=9: $5#@#@AaQ\\AEAU;++;<<< B;s   ,K 
K%c                     G d dt               }t        j                  dddd      \  }}t        ||d	      \  }}}} | |      }	 | |      }
t	         |       d
      j                  |	|      }t	         |       d
      j                  ||      }|j                  |
      }|j                  |      }t        ||       |j                  |
      }|j                  |      }t        ||      D ]  \  }}t        ||        |j                  D cg c]  }|j                   }}t        |D cg c]  }||k(  	 c}      sJ y c c}w c c}w )Nc                   $     e Zd ZdZd fd	Z xZS ))test_sparse_regression.<locals>.CustomSVRz8SVR variant that records the nature of the training set.c                 L    t         |   |||       t        |      | _        | S r   r   r   s       r1   rH   z-test_sparse_regression.<locals>.CustomSVR.fit  r   r3   r,   r   r   s   @r1   	CustomSVRr     r   r3   r   r   2   r   r   )r   r   	n_targetsr#   r   r"   r   )r   r   make_regressionr   r	   rH   rN   r   r   r   rh   r   r?   )r   r   r   r/   r   r   r   r   r   r   r   sparse_regressordense_regressorsparse_regr_resultsdense_regr_resultssparse_regr_resdense_regr_resr   r   r   s                       r1   test_sparse_regressionr     s_    C  ##qrDAq (811'M$GVWf%g.N$V,M )9;QOSS
 ()+ANRRO
 +22=A(00813EF +99-H(77?+./BDV+W C'!/>BC $4#?#?@aQ\\@E@U;++;<<< A;s   E/E
c                       G d dt               } t         |        d      }|j                  t        t               t        |j                        t        |j                        k(  sJ y)z
    AdaBoostRegressor should work without sample_weights in the base estimator
    The random weighted sampling is done internally in the _boost method in
    AdaBoostRegressor.
    c                       e Zd Zd Zd Zy)=test_sample_weight_adaboost_regressor.<locals>.DummyEstimatorc                      y r,    )r.   r/   r   s      r1   rH   zAtest_sample_weight_adaboost_regressor.<locals>.DummyEstimator.fit  s    r3   c                 F    t        j                  |j                  d         S )Nr   )r8   zerosr-   )r.   r/   s     r1   rN   zEtest_sample_weight_adaboost_regressor.<locals>.DummyEstimator.predict  s    88AGGAJ''r3   N)r4   r5   r6   rH   rN   r  r3   r1   DummyEstimatorr    s    		(r3   r  r!   rz   N)r   r	   rH   r/   rY   rG   estimator_weights_estimator_errors_)r  r   s     r1   %test_sample_weight_adaboost_regressorr
    sQ    ( ( n.Q?E	IIau''(C0G0G,HHHHr3   c                     t         j                  j                  d      } | j                  ddd      }| j	                  ddgd      }| j                  d      }t        t        d            }|j                  ||       |j                  |       |j                  |       t        t                     }|j                  ||       |j                  |       y)zX
    Check that the AdaBoost estimators can work with n-dimensional
    data matrix
    r   3   r!   r   most_frequent)strategyN)r8   r   r   randnchoicer   r   rH   rN   r2   r	   r   )r   r/   ycyrr   s        r1   test_multidimensional_Xr    s    
 ))


"C		"aA	QFB	B	2BHIE	IIa	MM!	n./E	IIa	MM!r3   c                  P   t         j                  t         j                  }} t        t	                     }t        |      }dj                  |j                  j                        }t        j                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY w)Nr   z {} doesn't support sample_weightr   )rd   rf   re   r   r   r   formatr   r4   r   r   r   rH   )r/   r   r   rJ   err_msgs        r1   -test_adaboostclassifier_without_sample_weightr    sv    99dkkqA%o&78I
y
1C077	8K8K8T8TUG	z	1 1  s    BB%c                     t         j                  j                  d      } t        j                  ddd      }d|z  dz   | j	                  |j
                  d         dz  z   }|j                  d	d
      }|d	xx   dz  cc<   d|d	<   t        t               d
d      }t        |      }t        |      }|j                  ||       |j                  |d d	 |d d	        t        j                  |      }d|d	<   |j                  |||       |j                  |d d	 |d d	       }|j                  |d d	 |d d	       }|j                  |d d	 |d d	       }	||k  sJ ||	k  sJ |t        j                  |	      k(  sJ y )Nr   r   d     )numg?r&   g-C6?r   r   rw   i'  r   r{   r#   r|   )r8   r   r   linspacerandr-   reshaper	   r   r   rH   r=   rg   r   approx)
r   r/   r   regr_no_outlierregr_with_weightregr_with_outlierr}   score_with_outlierscore_no_outlierscore_with_weights
             r1   $test_adaboostregressor_sample_weightr'     s    ))


#C
As%A	q3388AGGAJ/&89A			"aA bERKEAbE ("$11O _-o. !Q#2#2'LLOMM"A];*003B3B@&,,QsVQsV<(..q"vq"v> 0000 1111v}}->????r3   c                     t        t        j                  d      ddi\  } }}}t        d      }|j	                  | |       t        t        j                  |j                  |      d      |j                  |             y )NT)
return_X_yr#   r   r"   r   r'   )
r   r   load_digitsr   rH   r   r8   rA   r2   rN   )r   r   r   r   models        r1    test_adaboost_consistent_predictr,  &  ss     (8				.(=?($GVWf B/E	IIgw
		%%%f-A6f8Mr3   zmodel, X, yc                     t        j                  |      }d|d<   d}t        j                  t        |      5  | j                  |||       d d d        y # 1 sw Y   y xY w)Nir   z1Negative values in data passed to `sample_weight`r   r|   )r8   r=   r   r   r   rH   )r+  r/   r   r}   r  s        r1   #test_adaboost_negative_weight_errorr.  5  sU     LLOMM"AG	z	1 5		!Qm	45 5 5s   AAc                     t         j                  j                  d      } | j                  d      }| j	                  ddgd      }t        j
                  |      dz  }t        dd	
      }t        |dd	      }|j                  |||       t        j                  |j                        j                         dk(  sJ y)zCheck that we don't create NaN feature importance with numerically
    instable inputs.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20320
    r   )r  rw   rx   r   r   r  gtDS 'T	rw      )	max_depthr#      r  r|   N)r8   r   r   normalr  r=   r   r   rH   isnanr   r;   )r   r/   r   r}   tree	ada_models         r1   Ftest_adaboost_numerically_stable_feature_importance_with_small_weightsr7  E  s     ))


#C



#A

Aq6
%ALLOf,M!BR@D"TQSTIMM!QmM488I223779Q>>>r3   c                    d}t        j                  |d|       \  }}t        d|       j                  ||      }|j	                  |      }t        |j                  d      dd       t        t        j                  |            dd	|dz
  z  hk(  sJ |j                  |      D ]K  }t        |j                  d      dd       t        t        j                  |            dd	|dz
  z  hk(  rKJ  |j                  d
      j                  ||       |j	                  |      }t        |j                  d      dd       |j                  |      D ]   }t        |j                  d      dd       " y)zCheck that the decision function respects the symmetric constraint for weak
    learners.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/26520
    r!   r   )r   n_clusters_per_classr#   r~   r'   r   g:0yE>)atolr   r   rz   N)r   r   r   rH   rT   r   r;   ri   r8   rQ   r   
set_params)global_random_seedr   r/   r   rJ   y_scores         r1   test_adaboost_decision_functionr>  V  sl    I''!BTDAq !:L
M
Q
QRSUV
WC##A&GGKKQK'6 ryy!"q"	A*>&???? //2 D+QT: 299W%&1bIM.B*CCCCD NNN"&&q!,##A&GGKKQK'6//2 ;+QT:;r3   c                      t        dd      } t        j                  t        d      5  | j	                  t
        t               d d d        y # 1 sw Y   y xY w)Nr   SAMME)r{   	algorithmz'The parameter 'algorithm' is deprecatedr   )r   r   r   FutureWarningrH   r/   rM   )adaboost_clfs    r1   test_deprecated_algorithmrD  |  sB    %1HL	m+T	U %G$% % %s   AA)Xr   r   numpyr8   r   sklearnr   sklearn.baser   r   sklearn.dummyr   r   r   r   r	   !sklearn.ensemble._weight_boostingr
   sklearn.linear_modelr   sklearn.model_selectionr   r   sklearn.svmr   r   sklearn.treer   r   sklearn.utilsr   sklearn.utils._mockingr   sklearn.utils._testingr   r   r   sklearn.utils.fixesr   r   r   r   r   r   r   r   r/   rM   rY   rO   rP   rZ   	load_irisrd   permutationre   ry   permrf   load_diabetesrs   rD   rK   rV   r[   rl   markparametrizeru   r   r   r   r   r   r   r   r   r   r   r
  r  r  r'  r,  r.  r7  r>  rD  r  r3   r1   <module>rX     s    < 	    - 9 B : 1 B   F ! 8 
  	iiA 	"XBx"bAq6Aq6Aq6:
(	"X1v1v	 x
t{{''( DKKcJ 	4; "8!!#!(MM8??" x
E:J71Y, !DE
Y F
Y*8Z,$6B*< 8( .	
	
	
 	
 		

 	
 	^++	W=W=t .	
	
	
 	
 		

 	
 	^++	,=,=^I&*#@L 		tyy$++6		hmmX__=55?"";L%r3   