
    sg\8              	       d   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	 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j:                  ej<                  d       \  ZZ Z!Z"dZ#e!jI                         Z%de%e#d dddddZ&  ejN                  e&jP                        e%      jS                  e*      Z+de+e%dk(  <   d Z,ejZ                  j]                  d e        eddd       g      ejZ                  j]                  dddg      d               Z/d Z0d  Z1d! Z2ejZ                  j]                  d e        eddd       g      ejZ                  j]                  d"e%e+g      d#               Z3d$ Z4ejZ                  j]                  d% e5d&d'            d(        Z6d) Z7d* Z8d+ Z9ejZ                  j]                  d,dd-g      d.        Z:d/ Z;d0 Z<d1 Z=d2 Z>d3 Z?ejZ                  j                  d4      ejZ                  j]                  d5g d6      d7               ZAy)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                      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    c/var/www/html/venv/lib/python3.12/site-packages/sklearn/semi_supervised/tests/test_self_training.pytest_warns_k_bestr(   &   s^    	 4 6(SW	XB	k)@	A 0
w./0 $$5550 0s   A''A0	estimatorscaleTgammaprobabilityr   selection_crit	thresholdr   c                 (   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#   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	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& 3vvb&&!+,222366"""o569q=B:NNNN$$555rG   c                     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 )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.@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_iterr_      sJ     
  4 6$QU	VBFF7*+::??$$555rG   yc                    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"   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                      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_errorrj      sY     
 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 )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                     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$   rh   s     r'   test_no_unlabeledrr      s     
 CGGGW		$B	k)J	K !
w !s{{6*BJJv,>? 66"""a'((($$555! !s   CCc                      t        dd      } 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*   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      sg    
G
.C		$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   rg   
ValueErrorr!   )clfXr`   labels_multiclass	y_stringss        r'   test_strings_dtyper      sj    
 !5!7
8CDDAq/)1-I	z	1 9  s   A66A?verboseFc                     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& 1zz!R HLL0001 ::o	A';<LLLrG   c                     t        dd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*   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!((* "k!!!"rG   c                  "   t        dt        d      fdt        d      fgt        d      d      } t        | d      sJ t        |       }|j	                  t
        t               |j                  t               t        dt        d	      fdt        d	      fgt        d	      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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
 9
5C	~	& 1/01 1 1s   !DDc                  D   t        d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
    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:;
 +5K5MNMTIVI	~Y	7 V9'#9:LLWUVioo//@@@IOO556666; ;V Vs   D

.D
DDc                  6   d} t        j                  t        |       5  t        t	                     j                  t        t               d d d        d}t        j                  t        |      5  t               j                  t        t               d d d        d}t        j                  t        |      5  t        t	               t	                     j                  t        t               d d d        y # 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   y xY w)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+	


 GI	z	3 F $$W.DEF NI	z	3 /13?U?W	

#g-
./ /
 
F F/ /s#   -C70#D86D7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   rg   r   r!   fitted_params_getattr)r   ests     r'   *test_routing_passed_metadata_not_supportedr   t  s     !?+<
=C	M
 A 	!qc
QF1#C@A
 !?+<
=C	M
 A "VqcU1#C@A AA AA As   B- B9-B69C)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
,3,",,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   