U
    |hp,                  	   @   s  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 e Zeejejd d\ZZZZdZe  Z!de!ed< dddddZ"e#e"j$e!%e&Z'de'e!dk< dd Z(ej)*de eddd dgej)*dddgdd Z+dd  Z,d!d" Z-d#d$ Z.ej)*de eddd dgej)*d%e!e'gd&d' Z/d(d) Z0ej)*d*e1d+d,d-d. Z2d/d0 Z3d1d2 Z4d3d4 Z5ej)*d5dd6gd7d8 Z6d9d: Z7d;d< Z8d=d> Z9d?d@ Z:dS )A    )ceilN)assert_array_equal)	load_iris
make_blobs)StackingClassifier)NotFittedError)accuracy_score)train_test_split)KNeighborsClassifier)SelfTrainingClassifier)SVC)random_state2   ABCz-1)r         r   c               	   C   sH   t t ddd} tjtdd | tt W 5 Q R X | jdksDt	d S )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_AssertionErrorst r$   T/tmp/pip-unpacked-wheel-ig1s1lm8/sklearn/semi_supervised/tests/test_self_training.pytest_warns_k_best$   s    r&   base_estimatorscaleTgammaprobabilityr   selection_crit	thresholdr   c                 C   s@  d}d}t | |||d}|tt |t}|t}t | |||d}|tt |t}|t}	tt	
tj|| t||	 |j|jksttdk}
t|jdk|
 tt|
 |j|
  t	|j|j  kr|ksn tt	|j|j  kr
|ksn t|jj|jjks&t|jj|jjks<td S )Ng      ?
   )max_iterr-   r   )r/   r   r-   r   r   )r   r   r   r   predictX_testpredict_probay_train_missing_stringsr   np	vectorizemappinggetr    r!   labeled_iter_transduction_maxn_iter_shape)r'   r,   r-   r/   r#   predZprobaZ	st_stringZpred_stringZproba_stringZlabeledr$   r$   r%   test_classification,   s<    	   

   


$(r>   c                  C   s   t tddddd d} tt}d|dd < tjd }t|d d }| t| | j	|ks`t
t| jdkdksxt
td|D ]}t| j|kdkst
qt| j|k|d d kst
| jdkst
d S )	Nr   Zn_neighborsr   r.   )r   r   r/   r   r   r   )r   r
   r4   copyy_trainr<   r   r   r   r;   r!   sumr8   ranger    )r#   y_train_only_one_label	n_samplesn_expected_iterir$   r$   r%   test_k_bestZ   s"    

 rH   c                  C   s   t ddd} | ttd  ttd   t| }|tt | t|t }}t	
||rbtt| tt}t|tt}||kstd S )Nr(   Tr*   r+   )r   r   r   n_labeled_samplesrA   r   r   r0   r1   r4   Zarray_equalr!   r   y_test)r'   r#   Zpred1Zpred2Zscore_supervisedZscore_self_trainingr$   r$   r%   test_sanity_classificationq   s    rL   c                  C   s<   t t dd d} | tt | jdk s*t| jdks8td S )Ng?)r-   r/   r.   r   )r   r
   r   r   r   r;   r!   r    r"   r$   r$   r%   test_none_iter   s    rM   yc                 C   s\   t | dd}|t| | td t |d t }t|t|t |jdksXtd S )Nr   r/   r/   )	r   r   r   rJ   r   r0   r1   r    r!   )r'   rN   Zclf1Zclf2r$   r$   r%   test_zero_iterations   s
    rP   c               	   C   sB   t  } | tt t| }tjtdd |t W 5 Q R X d S )Nz6This SelfTrainingClassifier instance is not fitted yetr   )	r
   r   r   rA   r   r   raisesr   r0   Zknnr#   r$   r$   r%   test_prefitted_throws_error   s    rS   r/   r      c                 C   sb   t t | d}|tt t|j|jdk }|tks:tt	
|j|j  krX| ks^n td S )NrO   r   )r   r
   r   r   r   lenr8   rJ   r!   r4   r:   r;   )r/   r#   Zamount_iter_0r$   r$   r%   test_labeled_iter   s
    rV   c               	   C   s|   t  } | tt t| }tjtdd |tt W 5 Q R X t| 	t
|	t
 t|jdksjt|jdksxtd S )Nzy contains no unlabeled samplesr   r   r   )r
   r   r   rA   r   r   r   r   r   r0   r1   r4   allr8   r!   r    rR   r$   r$   r%   test_no_unlabeled   s    rX   c                  C   s`   t ddd} t| }dgdgdgdgg}ddddg}||| |jdksNt|jdks\td S )	Nr(   TrI   r   r   g      ?r   Z	no_change)r   r   r   r;   r!   r    )svcr#   ZX_train_easyZy_train_easyr$   r$   r%   test_early_stopping   s    rZ   c               	   C   s\   t t } tdddd\}}dddg}t||}tjtdd	 | || W 5 Q R X d S )
N   r   g?)rE   r   Zcluster_stdZoneZtwoZthreeZdtyper   )	r   r
   r   r4   Ztaker   rQ   
ValueErrorr   )clfXrN   Zlabels_multiclassZ	y_stringsr$   r$   r%   test_strings_dtype   s    

r_   verboseFc                 C   sH   t t |d}|tt |  }|r6d|jksDtnd|jksDtd S )N)r`   	iteration)r   r
   r   r   r   
readouterroutr!   )capsysr`   r]   capturedr$   r$   r%   test_verbose   s    rf   c                 C   s   t tdddddd d}tt}d|dd < tjd }t|d d }|t| | 	 }d	}t
d|D ]}||d|jksjtqj|||d d |jkstd S )
Nr   r?   r   r.   T)r   r   r`   r/   r   r   z)End of iteration {}, added {} new labels.)r   r
   r4   r@   rA   r<   r   r   r   rb   rC   formatrc   r!   )rd   r#   rD   rE   rF   re   msgrG   r$   r$   r%   test_verbose_k_best   s"    

ri   c            	      C   s   t dddd} t| dddd}td	k}|tt | |jd	k@ }| t| t|  | t|  }tj|dd
}t|  t	|dd   }tt
|  }| D ]}||kstqd S )Nr(   Tr   r)   r   r   r.   )r   r/   r   r   )Zaxisi)r   r   r   r   r   r9   r2   r4   r:   Zargsortwheretolistr!   )	rY   r#   Z	has_labelZ	got_labelr=   Z	max_probaZmost_confident_svcZadded_by_strowr$   r$   r%   test_k_best_selects_best  s    rm   c               	   C   s   t dtddfdtddfgtdddd} t| ds:tt| d}|tt |t	 t dtd	dfdtd	dfgtd	ddd} t| drtt| d}t
t |tt W 5 Q R X d S )
NZsvc_1T)r+   Zsvc_2r   )Z
estimatorsZfinal_estimatorZcvr2   )r'   F)r   r   hasattrr!   r   r   r   r   r2   r1   r   rQ   AttributeError)r'   r]   r$   r$   r%   "test_base_estimator_meta_estimator  s,    	

	
rp   c               	   C   s>   t ddd} t| }tjtdd |tt W 5 Q R X d S )NFr(   )r+   r*   zpredict_proba is not availabler   )r   r   r   rQ   ro   r   r   r   )r'   Zself_trainingr$   r$   r%   test_missing_predict_proba>  s    rq   );mathr   Znumpyr4   r   Znumpy.testingr   Zsklearn.datasetsr   r   Zsklearn.ensembler   Zsklearn.exceptionsr   Zsklearn.metricsr   Zsklearn.model_selectionr	   Zsklearn.neighborsr
   Zsklearn.semi_supervisedr   Zsklearn.svmr   Zirisdatatargetr   r1   rA   rK   rJ   r@   r   r6   r5   r7   Zastypeobjectr3   r&   markZparametrizer>   rH   rL   rM   rP   rS   rC   rV   rX   rZ   r_   rf   ri   rm   rp   rq   r$   r$   r$   r%   <module>   sj     )


$