
    -i\8              
       R   S SK Jr  S SKrS SKrS SKJr  S SKJrJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  \" 5       r\" \R:                  \R<                  S S9u  rr r!r"Sr#\!RI                  5       r%S\%\#S& SSSSS.r&\RN                  " \&RP                  5      " \%5      RS                  \*5      r+S\+\%S:H  '   S r,\RZ                  R]                  S\" 5       \" SSS S9/5      \RZ                  R]                  SSS/5      S 5       5       r/S r0S  r1S! r2\RZ                  R]                  S\" 5       \" SSS S9/5      \RZ                  R]                  S"\%\+/5      S# 5       5       r3S$ r4\RZ                  R]                  S%\5" S&S'5      5      S( 5       r6S) r7S* r8S+ r9\RZ                  R]                  S,SS-/5      S. 5       r:S/ r;S0 r<S1 r=S2 r>S3 r?\RZ                  R                  S45      \RZ                  R]                  S5/ S6Q5      S7 5       5       rAg)8    )ceilN)assert_array_equal)	load_iris
make_blobs)StackingClassifier)NotFittedError)accuracy_score)train_test_split)KNeighborsClassifier)SelfTrainingClassifier)SVC)SimpleEstimator)DecisionTreeClassifier)random_state2   ABCz-1)r         r   c                      [        [        5       SSS9n [        R                  " [        SS9   U R                  [        [        5        S S S 5        U R                  S:X  d   eg ! , (       d  f       N!= f)Nk_besti  )	criterionr   zk_best is larger thanmatchall_labeled)	r   r   pytestwarnsUserWarningfitX_trainy_train_missing_labelstermination_condition_sts    c/var/www/html/venv/lib/python3.13/site-packages/sklearn/semi_supervised/tests/test_self_training.pytest_warns_k_bestr(   &   sY    	 4 6(SW	XB	k)@	A
w./ 
B $$555 
B	As   A##
A1	estimatorscaleTgammaprobabilityr   selection_crit	thresholdr   c                 &   SnSn[        XX!S9nUR                  [        [        5        UR	                  [
        5      nUR                  [
        5      n[        XXS9nUR                  [        [        5        UR	                  [
        5      nUR                  [
        5      n	[        [        R                  " [        R                  5      " U5      U5        [        Xi5        UR                  UR                  :X  d   e[        S:g  n
[        UR                  S:H  U
5        [        [        U
   UR                  U
   5        [        R                   " UR                  5      UR"                  s=::  a  U::  d   e   e[        R                   " UR                  5      UR"                  s=::  a  U::  d   e   eUR                  R$                  UR                  R$                  :X  d   eUR                  R$                  UR                  R$                  :X  d   eg )Ng      ?
   )max_iterr/   r   )r2   r   r/   r   r   )r   r!   r"   r#   predictX_testpredict_probay_train_missing_stringsr   np	vectorizemappinggetr$   labeled_iter_transduction_maxn_iter_shape)r)   r.   r/   r2   r&   predproba	st_stringpred_stringproba_stringlabeleds              r'   test_classificationrF   .   s    IH		
B FF7*+::fDV$E&I MM'23##F+K**62Lr||GKK06Du+$$	(H(HHHH$*Gr''1,g6-g68H8H8QR 66"""#rzz=X=====66)))*i.?.?K8KKKKK !!R%5%5%;%;;;;""((I,C,C,I,IIII    c                  L   [        [        SS9SSS S9n [        R                  " [        5      nSUSS & [        R
                  S   n[        US-
  S-  5      nU R                  [        U5        U R                  U:X  d   e[        R                  " U R                  S:H  5      S:X  d   e[        SU5       H,  n[        R                  " U R                  U:H  5      S:X  a  M,   e   [        R                  " U R                  U:H  5      US-
  S-  :X  d   eU R                  S:X  d   eg )	Nr   n_neighborsr   r1   )r   r   r2   r   r   r   )r   r   r7   copyy_trainr?   r   r!   r"   r>   sumr;   ranger$   )r&   y_train_only_one_label	n_samplesn_expected_iteris        r'   test_k_bestrS   \   s   	+	
B  WWW-!#12a IIMR/0OFF7*+::((( 66"""a'(A---1o&vvb&&!+,222 '66"""o569q=B:NNNN$$555rG   c                     [        SSS9n U R                  [        [        S  [        [        S  5        [        U 5      nUR                  [        [        5        U R                  [        5      UR                  [        5      p2[        R                  " X#5      (       a   e[        U R                  [        5      [        5      n[        UR                  [        5      [        5      nXT:  d   eg )Nr*   Tr,   r-   )r   r!   r"   n_labeled_samplesrL   r   r#   r3   r4   r7   array_equalr	   y_test)r)   r&   pred1pred2score_supervisedscore_self_trainings         r'   test_sanity_classificationr]   s   s    't4IMM'+,-w7H7I/JK			*BFF7*+$$V,bjj.@5~~e++++%i&7&7&?H(F);VD111rG   c                      [        [        5       SS S9n U R                  [        [        5        U R
                  S:  d   eU R                  S:X  d   eg )Ng?)r/   r2   r1   r   )r   r   r!   r"   r#   r>   r$   r%   s    r'   test_none_iterr_      sJ     
  4 6$QU	VBFF7*+::??$$555rG   yc                    [        U SS9nUR                  [        U5        U R                  [        S [         US [         5      n[	        UR                  [        5      UR                  [        5      5        UR                  S:X  d   eg )Nr   r2   r2   )r   r!   r"   rV   r   r3   r4   r$   )r)   r`   clf1clf2s       r'   test_zero_iterationsre      sp     ")a8DHHWa==!3"34a8J9J6KLDt||F+T\\&-AB&&*444rG   c                      [        5       n U R                  [        [        5        [	        U 5      n[
        R                  " [        SS9   UR                  [        5        S S S 5        g ! , (       d  f       g = f)Nz6This SelfTrainingClassifier instance is not fitted yetr   )	r   r!   r"   rL   r   r   raisesr   r3   knnr&   s     r'   test_prefitted_throws_errorrj      sT     
 CGGGW		$B	F
 	

7	
 
 
s   	A((
A6r2   r      c                 2   [        [        5       U S9nUR                  [        [        5        [        UR                  UR                  S:H     5      nU[        :X  d   e[        R                  " UR                  5      UR                  s=::  a  U ::  d   e   eg )Nrb   r   )r   r   r!   r"   r#   lenr;   rV   r7   r=   r>   )r2   r&   amount_iter_0s      r'   test_labeled_iterro      s     
  4 6	JBFF7*+(()9)9Q)>?@M---- 66"""#rzz=X=====rG   c                     [        5       n U R                  [        [        5        [	        U 5      n[
        R                  " [        SS9   UR                  [        [        5        S S S 5        [        U R                  [        5      UR                  [        5      5        [        R                  " UR                  S:H  5      (       d   eUR                  S:X  d   eg ! , (       d  f       N}= f)Nzy contains no unlabeled samplesr   r   r   )r   r!   r"   rL   r   r   r   r    r   r3   r4   r7   allr;   r$   rh   s     r'   test_no_unlabeledrr      s     
 CGGGW		$B	k)J	K
w  
Ls{{6*BJJv,>? 66"""a'(((($$555 
L	Ks   	C
C)c                      [        SSS9n [        U 5      nS/S/S/S//n/ SQnUR                  X#5        UR                  S:X  d   eUR                  S:X  d   eg )	Nr*   TrU   r   r   g      ?)r   r   r   r   	no_change)r   r   r!   r>   r$   )svcr&   X_train_easyy_train_easys       r'   test_early_stoppingrx      se    
G
.C		$BC!qcC5)L!L FF<&::??$$333rG   c                      [        [        5       5      n [        SSSS9u  p/ SQn[        R                  " X25      n[
        R                  " [        SS9   U R                  X5        S S S 5        g ! , (       d  f       g = f)N   r   g?)rP   r   cluster_std)onetwothreedtyper   )	r   r   r   r7   taker   rg   
ValueErrorr!   )clfXr`   labels_multiclass	y_stringss        r'   test_strings_dtyper      s[    
 !5!7
8CDDA/)-I	z	1 
2	1	1s   A//
A=verboseFc                     [        [        5       US9nUR                  [        [        5        U R                  5       nU(       a  SUR                  ;   d   eg SUR                  ;  d   eg )N)r   	iteration)r   r   r!   r"   r#   
readouterrout)capsysr   r   captureds       r'   test_verboser      sV    
 !5!7
ICGGG+,  "Hhll***(,,...rG   c                    [        [        SS9SSSS S9n[        R                  " [        5      nSUSS & [        R
                  S   n[        US-
  S-  5      nUR                  [        U5        U R                  5       nS	n[        SU5       H%  nUR                  US5      UR                  ;   a  M%   e   UR                  XCS-
  S-  5      UR                  ;   d   eg )
Nr   rI   r   r1   T)r   r   r   r2   r   r   z)End of iteration {}, added {} new labels.)r   r   r7   rK   rL   r?   r   r!   r"   r   rN   formatr   )r   r&   rO   rP   rQ   r   msgrR   s           r'   test_verbose_k_bestr      s    	+
B  WWW-!#12a IIMR/0OFF7*+  "H
5C1o&zz!R HLL000 ' ::oA';<LLLrG   c                     [        SSSS9n [        U SSSS9n[        S	:g  nUR                  [        [        5        U) UR
                  S	:g  -  nU R                  [        U   [        U   5        U R                  [        U)    5      n[        R                  " USS
9n[        U)    [        R                  " U5      SS     n[        [        R                  " U5         R                  5       nUR                  5        H
  nX;   a  M
   e   g )Nr*   Tr   r+   r   r   r1   )r   r2   r   r   )axisi)r   r   r#   r!   r"   r<   r5   r7   r=   argsortwheretolist)	ru   r&   	has_label	got_labelr@   	max_probamost_confident_svcadded_by_strows	            r'   test_k_best_selects_bestr     s    
GA
>C	x!B	OB&",IFF7*+
b.."45IGGGI 6y ABWiZ01Dt!$I ),RZZ	-B34-HI"((9-.557K!((*!!! +rG   c                     [        S[        SS94S[        SS94/[        SS9SS9n [        U S5      (       d   e[        U S9nUR	                  [
        [        5        UR                  [        5        [        S[        S	S94S[        S	S94/[        S	S9SS9n [        U S5      (       a   e[        U S9n[        R                  " [        5         UR	                  [
        [        5        S S S 5        g ! , (       d  f       g = f)
Nsvc_1T)r-   svc_2r   )
estimatorsfinal_estimatorcvr5   r)   F)r   r   hasattrr   r!   r"   r#   r5   r4   r   rg   AttributeError)r)   r   s     r'   test_estimator_meta_estimatorr     s     #cd+,cd+,
 -I 9o....
 9
5CGGG+,f"ce,-ce,-
 .I y/2222
 9
5C	~	&/0 
'	&	&s   C22
D c                  R   [        SSS9n [        U 5      n[        R                  " [        SS9   UR                  [        [        5        SSS5        [        [        5       S9nSnS	n[        R                  " [        US9 nUR                  [        [        5      R                  [        5        SSS5        [        WR                  R                  [        5      (       d   eU[        UR                  R                  5      ;   d   eg! , (       d  f       N= f! , (       d  f       Np= f)
a*  Check that we raise the proper AttributeErrors when the `estimator`
does not implement the `predict_proba` method, which is called from within
`fit`, or `decision_function`, which is decorated with `available_if`.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/28108
Fr*   )r-   r,   z has no attribute 'predict_proba'r   Nr   zBThis 'SelfTrainingClassifier' has no attribute 'decision_function'zD'DecisionTreeClassifier' object has no attribute 'decision_function')r   r   r   rg   r   r!   r"   r#   r   decision_function
isinstancevalue	__cause__str)r)   self_training	outer_msg	inner_msg	exec_infos        r'   ,test_self_training_estimator_attribute_errorr   @  s     W5I*95M	~-O	P'#9: 
Q
 +5K5MNMTIVI	~Y	79'#9:LLWU 
8ioo//@@@@IOO556666 
Q	P 
8	7s   D .D
D
D&c                  <   Sn [         R                  " [        U S9   [        [	        5       S9R                  [        [        5        S S S 5        Sn[         R                  " [        US9   [        5       R                  [        [        5        S S S 5        Sn[         R                  " [        US9   [        [	        5       [	        5       S9R                  [        [        5        S S S 5        g ! , (       d  f       N= f! , (       d  f       Nv= f! , (       d  f       g = f)Nz?`base_estimator` has been deprecated in 1.6 and will be removedr   )base_estimatorz4You must pass an estimator to SelfTrainingClassifierz;You must pass only one estimator to SelfTrainingClassifier.)r   r)   )
r   r   FutureWarningr   r   r!   r"   r#   rg   r   )warn_msg	error_msgs     r'   'test_deprecation_warning_base_estimatorr   ^  s    PH	m8	4.D.FGKK+	
 
5
 GI	z	3 $$W.DE 
4 NI	z	313?U?W	

#g-
. 
4	3 
5	4 
4	3 
4	3s#   *C+)#C</3D+
C9<
D

Dz2ignore:y contains no unlabeled samples:UserWarningmethod)r   predict_log_probar5   r3   c                 |   [        [        5       S9n[        R                  " [        SS9   UR                  S/S//SS/S/SS9  SSS5        [        [        5       S9n[        R                  " [        SS9   SUl        [        X5      " S//S/SS9  SSS5        g! , (       d  f       N]= f! , (       d  f       g= f)	z}Test that the right error message is raised when metadata is passed while
not supported when `enable_metadata_routing=False`.r   z1is only supported if enable_metadata_routing=Truer   r   a)sample_weightpropNT)r   r   r   rg   r   r!   fitted_params_getattr)r   ests     r'   *test_routing_passed_metadata_not_supportedr   t  s     !?+<
=C	M
 	!qc
QF1#C@

 !?+<
=C	M
 "qcU1#C@
 

 

 
s   B7B-
B*-
B;)Bmathr   numpyr7   r   numpy.testingr   sklearn.datasetsr   r   sklearn.ensembler   sklearn.exceptionsr   sklearn.metricsr	   sklearn.model_selectionr
   sklearn.neighborsr   sklearn.semi_supervisedr   sklearn.svmr   sklearn.tests.test_pipeliner   sklearn.treer   irisdatatargetr"   r4   rL   rX   rV   rK   r#   r9   r8   r:   astypeobjectr6   r(   markparametrizerF   rS   r]   r_   re   rj   rN   ro   rr   rx   r   r   r   r   r   r   r   filterwarningsr    rG   r'   <module>r      s\      , 2 / - * 4 2 :  7 / {#3IIt{{$  &    -/ () *cct
,,,w{{34JKRR
  9; ."4 56 SwDqQR )K+BC&J D	
&JR6.26 SwDqQR 57NOP5 Q	
5 
 U1a[1
> 2
>6	4 T5M2	/ 3	/M2"(!1H7</, PQTA RArG   