
    Q3j5              
          d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z!  e       Z" ee"jF                  e"jH                  d       \  Z%Z&Z'Z(dZ)e'jU                         Z+de+e)d dddddZ,  ejZ                  e,j\                        e+      j_                  e0      Z1de1e+dk(  <   d Z2ejf                  ji                  d e        e       g      ejf                  ji                  dddg      d               Z5d Z6d  Z7d! Z8ejf                  ji                  d e        e
 ed"d #      d$%      g      ejf                  ji                  d&e+e1g      d'               Z9d( Z:ejf                  ji                  d) e;d*d+            d,        Z<d- Z=d. Z>d/ Z?ejf                  ji                  d0d1d$g      d2        Z@d3 ZAd4 ZBd5 ZCd6 ZDejf                  j                  d7      ejf                  ji                  d8g d9      d:               ZFy);    )ceilN)assert_array_equal)clone)CalibratedClassifierCV)	load_iris
make_blobs)StackingClassifier)NotFittedError)LogisticRegression)accuracy_score)train_test_split)KNeighborsClassifier)SelfTrainingClassifier)SVC)SimpleEstimator)DecisionTreeClassifierrandom_state2   ABCz-1)r         r   c                      t        t               dd      } t        j                  t        d      5  | j                  t        t               d d d        | j                  dk(  sJ y # 1 sw Y   xY w)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    ]/DATA/.local/lib/python3.12/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''A0	estimatorselection_crit	thresholdr   c                 >   t        |       } d}d}t        | |||      }|j                  t        t               |j                  t              }|j                  t              }t        | |||      }|j                  t        t               |j                  t              }|j                  t              }	t         t        j                  t        j                        |      |       t        ||	       |j                  |j                  k(  sJ t        dk7  }
t        |j                  dk(  |
       t        t        |
   |j                   |
          t        j"                  |j                        |j$                  cxk  r|k  sJ  J t        j"                  |j                        |j$                  cxk  r|k  sJ  J |j                  j&                  |j                   j&                  k(  sJ |j                  j&                  |j                   j&                  k(  sJ y )Ng      ?
   )max_iterr/   r   )r2   r   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   1   s    i I IH	H	^
B FF7*+::fDV$E&H)I MM'23##F+K**62L0r||GKK06Dul+$$	(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                  B   t        t        d      ddd       } t        j                  t              }d|dd  t        j
                  d   }t        |dz
  dz        }| j                  t        |       | j                  |k(  sJ t        j                  | j                  dk(        dk(  sJ t        d|      D ])  }t        j                  | j                  |k(        dk(  r)J  t        j                  | j                  |k(        |dz
  dz  k(  sJ | j                  dk(  sJ y )	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                     t        t        d      d      } | j                  t        t        d  t
        t        d         t        |       }|j                  t        t               | j                  t              |j                  t              }}t        j                  ||      rJ t        | j                  t              t              }t        |j                  t              t              }||kD  sJ y )NscalegammaFensemble)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_classificationra   w   s    &s'9EJIMM'+,-w7H7I/JK			*BFF7*+$$V,bjj.@5E~~eU+++%i&7&7&?H(F);VD!1111rG   c                      t        t               dd       } | j                  t        t               | j
                  dk  sJ | j                  dk(  sJ y )Ng?)r/   r2   r1   r!   )r   r   r%   r&   r'   r>   r(   r)   s    r+   test_none_iterrc      sJ     
  4 6$QU	VBFF7*+::??$$555rG   rU   )rW   r   FrX   yc                 .   t        |       } t        | d      }|j                  t        |       | j                  t        d t         |d t               }t        |j                  t              |j                  t                     |j                  dk(  sJ y )Nr   r2   r2   )	r   r   r%   r&   rZ   r   r3   r4   r(   )r-   rd   clf1clf2s       r+   test_zero_iterationsri      s|     i I ")a8DHHWa==!3"34a8J9J6KLDt||F+T\\&-AB&&*444rG   c                      t               } | j                  t        t               t	        |       }t        j                  t        d      5  |j                  t               d d d        y # 1 sw Y   y xY w)Nz6This SelfTrainingClassifier instance is not fitted yetr   )	r   r%   r&   rL   r   r"   raisesr
   r3   knnr*   s     r+   test_prefitted_throws_errorrn      sT     
 CGGGW		$B	F
 	

7	
 
 
s   A**A3r2   r      c                 0   t        t               |       }|j                  t        t               t        |j                  |j                  dk(           }|t        k(  sJ t        j                  |j                        |j                  cxk  r| k  sJ  J y )Nrf   r   )r   r   r%   r&   r'   lenr;   rZ   r7   r=   r>   )r2   r*   amount_iter_0s      r+   test_labeled_iterrs      s     
  4 6	JBFF7*+(()9)9Q)>?@M---- 66"""#rzz=X=====rG   c                     t               } | j                  t        t               t	        |       }t        j                  t        d      5  |j                  t        t               d d d        t        | j                  t              |j                  t                     t        j                  |j                  dk(        sJ |j                  dk(  sJ y # 1 sw Y   qxY w)Nzy contains no unlabeled samplesr   r   r!   )r   r%   r&   rL   r   r"   r#   r$   r   r3   r4   r7   allr;   r(   rl   s     r+   test_no_unlabeledrv      s     
 CGGGW		$B	k)J	K
w  
Ls{{6*BJJv,>? 66"""a'((($$555 
L	Ks   CCc                      t               } t        |       }dgdgdgdgg}g d}|j                  ||       |j                  dk(  sJ |j                  dk(  sJ y )Nr   r   g      ?)r   r   r   r   	no_change)r   r   r%   r>   r(   )lrr*   X_train_easyy_train_easys       r+   test_early_stoppingr|      sc    		B		#BC!qcC5)L!L FF<&::??$$333rG   c                     t        t                     } t        ddd      \  }}g d}t        j                  ||      }t        j                  t        d      5  | j                  ||       d d d        y # 1 sw Y   y xY w)N   r   g?)rP   r   cluster_std)onetwothreedtyper   )	r   r   r   r7   taker"   rk   
ValueErrorr%   )clfXrd   labels_multiclass	y_stringss        r+   test_strings_dtyper      sa    
 !5!7
8CDDAq/)1-I	z	19 
2	1	1s   A66A?verboseTc                     t        t               |      }|j                  t        t               | j                         }|rd|j                  v sJ y d|j                  vsJ y )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                    t        t        d      dddd       }t        j                  t              }d|dd  t        j
                  d   }t        |dz
  dz        }|j                  t        |       | j                         }d	}t        d|      D ]"  }|j                  |d      |j                  v r"J  |j                  ||dz
  dz        |j                  v sJ y )
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 ' ::o	A';<LLLrG   c                     t        d      } t        | ddd      }t        dk7  }|j                  t        t               | |j
                  dk7  z  }| j                  t        |   t        |          | j                  t        |          }t        j                  |d      }t        |    t        j                  |      d	d     }t        t        j                  |         j                         }|j                         D ]  }||v rJ  y )
Nr   r   r   r   r1   )r   r2   r   r   )axisi)r   r   r'   r%   r&   r<   r5   r7   r=   argsortwheretolist)	estr*   	has_label	got_labelr@   	max_probamost_confident_estadded_by_strows	            r+   test_k_best_selects_bestr     s    
!
,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!((*k!!! +rG   c                  
   t        dt               fdt               fgt               d      } t        | d      sJ t        |       }|j	                  t
        t               |j                  t               t        dt               fdt               fgt               d      } t        | d      rJ t        |       }t        j                  t              5  |j	                  t
        t               d d d        y # 1 sw Y   y xY w)	Nclf_1clf_2r   )
estimatorsfinal_estimatorcvr5   r-   svc_1svc_2)r	   r   hasattrr   r%   r&   r'   r5   r4   r   r"   rk   AttributeError)r-   r   s     r+   test_estimator_meta_estimatorr   $  s     #(*+(*+
 +,I 9o...
 9
5CGGG+,f"cece
 I y/222
 9
5C	~	&/0 
'	&	&s   C99Dc                  B   t        d      } t        |       }t        j                  t        d      5  |j                  t        t               ddd       t        t                     }d}d}t        j                  t        |      5 }|j                  t        t              j                  t               ddd       t        j                  j                  t              sJ |t        |j                  j                        v sJ y# 1 sw Y   xY w# 1 sw Y   _xY w)	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
    rU   rV   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"   rk   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   H  s     '"I*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z2ignore:y contains no unlabeled samples:UserWarningmethod)r   predict_log_probar5   r3   c                    t        t                     }t        j                  t        d      5  |j                  dgdggddgdgd       ddd       t        t                     }t        j                  t        d      5  d|_         t        ||       dggdgd       ddd       y# 1 sw Y   axY w# 1 sw Y   yxY w)	zTest 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"   rk   r   r%   fitted_params_getattr)r   r   s     r+   *test_routing_passed_metadata_not_supportedr   i  s     !?+<
=C	M
 	!qc
QF1#C@

 !?+<
=C	M
 "VqcU1#C@
 

 

 
s   B- B9-B69C)Gmathr   numpyr7   r"   numpy.testingr   sklearn.baser   sklearn.calibrationr   sklearn.datasetsr   r   sklearn.ensembler	   sklearn.exceptionsr
   sklearn.linear_modelr   sklearn.metricsr   sklearn.model_selectionr   sklearn.neighborsr   sklearn.semi_supervisedr   sklearn.svmr   sklearn.tests.test_pipeliner   sklearn.treer   irisdatatargetr&   r4   rL   r\   rZ   rK   r'   r9   r8   r:   astypeobjectr6   r,   markparametrizerF   rS   ra   rc   ri   rn   rN   rs   rv   r|   r   r   r   r   r   r   filterwarningsr    rG   r+   <module>r      sh      ,  6 2 / - 3 * 4 2 :  7 / {#3IIt{{$  &    -/ () *cct
,3,",,w{{34JKRR
  9; ."4 56 /12 )K+BC'J D	
'JT6.26 sqAER 57NOP5 Q5"
 U1a[1
> 2
>6	4 T5M2	/ 3	/M2"(!1H7B PQTA RArG   