o
    i_i                    @   sn  d Z ddlZddlZddl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Zddl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 dd
lmZmZmZmZmZmZ ddl m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH ddlImJZJmKZKmLZL ddlMmNZN ddlOmPZP ddlQmRZR ddlSmTZT ddlUmVZV ddlWmXZX ddlYmZZZm[Z[ ddl\m]Z]m^Z^ ddl_m`Z`maZambZbmcZcmdZd ddlemfZf ddlgmhZhmiZi ddljmkZkmlZlmmZmmnZn ddlompZpmqZq dd lrmsZs G d!d" d"eZtG d#d$ d$etZuG d%d& d&eZvG d'd( d(evZwG d)d* d*eeZxeyd+Zze{g d,Z|e{g d-Z}e~d.Zejd/epd0d1 Zd2d3 Zd4d5 Zd6d7 Zejd8d9d:gejd;eqd8efd<d=Zd>d? Zd@dA ZdBdC ZdDdE ZdFdG ZdHdI Zejd/epdJdK ZdLdM ZdNdO ZdPdQ Zejd/epdRdS ZdTdU ZdVdW ZdXdY ZdZd[ Zejd/epd\d] Zd^d_ Zd`da Zdbdc Zejd/epddde Zdfdg Zdhdi Zdjdk Zejd/epdldm Zdndo Zdpdq Zdrds Zdtdu Zdvdw Zdxdy Zdzd{ Zd|d} Zd~d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejd;eqdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZG dd de!Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZG dd deZejdejdgdd Zejdejdgdd Zdd ZejdáejdejddgddƄ Zejdáejdejddgejdd:d9gejdd9d:gddʄ Zdd̄ Zejdd9eddddfd:e8eedҜdӍddddfd9e8eedҜdӍddddfgddل Zddۄ Zdd݄ Zdd߄ Zdd Zdd ZejdeFi feGi feHde{dgdfgdd ZejdeEi feDi feCi feFi feGi feHde{dgdfged:ddd ZejdeEi feDi feCi feFi feGi feHde{dgdfged:ddd ZejdeEi feDi feCi feFi feGi feHde{dgdfged:ddd ZejdeEi feDi feCi feFi feGi feHde{dgdfged:ddd Zed:ddd ZdS )zTest the validation module    N)partial)StringIO)sleep)issparse)config_context)BaseEstimatorClassifierMixinclone)KMeans)load_diabetesload_digits	load_irismake_classificationmake_multilabel_classificationmake_regression)RandomForestClassifier)FitFailedWarningUnsetMetadataPassedError)SimpleImputer)LogisticRegressionPassiveAggressiveClassifierRidgeRidgeClassifierSGDClassifier)	accuracy_scorecheck_scoringconfusion_matrixexplained_variance_scoremake_scorermean_squared_errorprecision_recall_fscore_supportprecision_scorer2_score)_MultimetricScorer)GridSearchCV
GroupKFoldGroupShuffleSplitKFoldLeaveOneGroupOutLeaveOneOutLeavePGroupsOutShuffleSplitStratifiedKFoldcross_val_predictcross_val_scorecross_validatelearning_curvepermutation_test_scorevalidation_curve)_check_is_permutation_fit_and_score_score)OneTimeSplitter)FailingClassifier)OneVsRestClassifier)KNeighborsClassifier)MLPRegressor)Pipeline)LabelEncoderscale)SVC	LinearSVC)ConsumingClassifierConsumingScorerConsumingSplitter	_Registrycheck_recorded_metadata)shuffle)CheckingClassifierMockDataFrame)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)COO_CONTAINERSCSR_CONTAINERS)_num_samplesc                   @   s<   e Zd ZdZdd ZdddZdd Zdd	d
Zdd ZdS )MockImprovingEstimatorz+Dummy classifier to test the learning curvec                 C   s   || _ d| _d | _d S Nr   )n_max_train_sizestrain_sizesX_subset)selfrQ    rU   g/home/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/model_selection/tests/test_validation.py__init__e   s   
zMockImprovingEstimator.__init__Nc                 C      || _ |jd | _| S rP   rS   shaperR   rT   rS   Zy_subsetrU   rU   rV   fitj      zMockImprovingEstimator.fitc                 C      t NNotImplementedErrorrT   XrU   rU   rV   predicto      zMockImprovingEstimator.predictc                 C   s.   |  |rdt| j| j  S t| j| j S )Ng       @)_is_training_datafloatrR   rQ   rT   rc   YrU   rU   rV   scorer   s   
zMockImprovingEstimator.scorec                 C   
   || j u S r_   rS   rb   rU   rU   rV   rf   y      
z(MockImprovingEstimator._is_training_datar_   NN	__name__
__module____qualname____doc__rW   r\   rd   rj   rf   rU   rU   rU   rV   rO   b   s    

rO   c                       s4   e Zd ZdZd	 fdd	Zdd Zd	ddZ  ZS )
!MockIncrementalImprovingEstimatorz*Dummy classifier that provides partial_fitNc                    s   t  | d | _|| _d S r_   )superrW   xexpected_fit_params)rT   rQ   rw   	__class__rU   rV   rW      s   
z*MockIncrementalImprovingEstimator.__init__c                 C   s
   | j |v S r_   rv   rb   rU   rU   rV   rf      rm   z3MockIncrementalImprovingEstimator._is_training_datac              	   K   s   |  j |jd 7  _ |d | _| jrOt| jt| }|r'tdt| d| D ]%\}}|| jv rNt|t|krNtd| dt| dt| dq+d S d S )Nr   zExpected fit parameter(s) z
 not seen.zFit parameter z has length z; expected .)	rR   rZ   rv   rw   setAssertionErrorlistitemsrN   )rT   rc   yparamsmissingkeyvaluerU   rU   rV   partial_fit   s,   
z-MockIncrementalImprovingEstimator.partial_fitr_   )rp   rq   rr   rs   rW   rf   r   __classcell__rU   rU   rx   rV   rt   }   s
    rt   c                   @   s<   e Zd ZdZdddZdd Zdd Zdd
dZdd Zd	S )MockEstimatorWithParameterz-Dummy classifier to test the validation curve      ?c                 C   s   d | _ || _d S r_   )rS   param)rT   r   rU   rU   rV   rW         
z#MockEstimatorWithParameter.__init__c                 C   rX   rP   rY   r[   rU   rU   rV   r\      r]   zMockEstimatorWithParameter.fitc                 C   r^   r_   r`   rb   rU   rU   rV   rd      re   z"MockEstimatorWithParameter.predictNc                 C   s   |  |r| jS d| j S )N   )rf   r   )rT   rc   r   rU   rU   rV   rj      s   z MockEstimatorWithParameter.scorec                 C   rk   r_   rl   rb   rU   rU   rV   rf      rm   z,MockEstimatorWithParameter._is_training_data)r   rn   ro   rU   rU   rU   rV   r      s    

r   c                       s(   e Zd ZdZ fddZdd Z  ZS )%MockEstimatorWithSingleFitCallAllowedz<Dummy classifier that disallows repeated calls of fit methodc                    s&   t | dr	J dd| _t ||S )Nfit_called_zfit is called the second timeT)hasattrr   ru   r\   r[   rx   rU   rV   r\      s   z)MockEstimatorWithSingleFitCallAllowed.fitc                 C   r^   r_   r`   rb   rU   rU   rV   rd      re   z-MockEstimatorWithSingleFitCallAllowed.predict)rp   rq   rr   rs   r\   rd   r   rU   rU   rx   rV   r      s    r   c                   @   sZ   e Zd ZdZdddZ									dddZd	d
 Zdd ZdddZdddZ	dS )MockClassifierz-Dummy classifier to test the cross-validationr   Fc                 C   s   || _ || _d S r_   aallow_nd)rT   r   r   rU   rU   rV   rW      r   zMockClassifier.__init__Nc                 C   sX  || _ || _|	| _|
dur|
|  | jr|t|d}|jdkr(| js(td|durD|jd |jd ksDJ d	|jd |jd |durd|jd tt
tksdJ d	|jd tt
t|durd}|jd |jd ksJ |	|jd |jd |durd	}|jtjksJ |	|jd |jd
 tjd tjd
 t
t| _| S )zThe dummy arguments are to test that this fit function can
        accept non-array arguments through cross-validation, such as:
            - int
            - str (this is actually array-like)
            - object
            - function
        N   zX cannot be dr   zKMockClassifier extra fit_param sample_weight.shape[0] is {0}, should be {1}zIMockClassifier extra fit_param class_prior.shape[0] is {0}, should be {1}zRMockClassifier extra fit_param sparse_sample_weight.shape[0] is {0}, should be {1}zUMockClassifier extra fit_param sparse_param.shape is ({0}, {1}), should be ({2}, {3})r   )	dummy_int	dummy_str	dummy_objr   reshapelenndim
ValueErrorrZ   formatnpuniquer   Pclasses_)rT   rc   ri   sample_weightclass_priorsparse_sample_weightsparse_paramr   r   r   callbackfmtrU   rU   rV   r\      sL   zMockClassifier.fitc                 C   s&   | j r|t|d}|d d df S )Nr   r   )r   r   r   rT   TrU   rU   rV   rd     s   zMockClassifier.predictc                 C   s   |S r_   rU   r   rU   rU   rV   predict_proba	  re   zMockClassifier.predict_probac                 C   s   ddt | j  S )N      ?r   )r   absr   rh   rU   rU   rV   rj     s   zMockClassifier.scorec                 C   s   | j | jdS )Nr   r   )rT   deeprU   rU   rV   
get_params  s   zMockClassifier.get_params)r   F)	NNNNNNNNNrn   )F)
rp   rq   rr   rs   rW   r\   rd   r   rj   r   rU   rU   rU   rV   r      s"    

@
r   )      )r   r   r   r   r   r   r   r      r      r      r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   coo_containerc                 C   st  t  }| t}tddD ]M}||_t|tt}t||tt t	ttd d d g}t|||}t|||| t||t}t|||t t|||}t|||| qdd }t
|d}t|t t dd}t
|d	}t|tt dd}td d d d tjf }t d
d}t||t}t dd}tt t||tdd W d    d S 1 sw   Y  d S )Ni
   r   c                 S   
   t | tS r_   
isinstancer~   rz   rU   rU   rV   <lambda>5     
 z&test_cross_val_score.<locals>.<lambda>check_Xr   cvcheck_yT)r   Fraiseerror_score)r   rc   ranger   r.   y2rK   rj   r   column_stackrF   tolistnewaxispytestraisesr   )r   clfX_sparser   scoresmultioutput_y
list_checkX_3drU   rU   rV   test_cross_val_score  s2   



"r   c                  C   s@   t dd\} }tdd}t|dddgid}t|| |d	d
 d S )NTZ
return_X_yauto)gammaCr   r   )Z
param_gridr   )n_jobs)r   r>   r$   r/   )rc   r   r   gridrU   rU   rV   test_cross_validate_many_jobsF  s   
r   c                  C   sN  t dd\} }t }d}tjt|d t|| |ttttfd W d    n1 s,w   Y  tjt|d t|| |ttfd W d    n1 sNw   Y  tjt|d d t|| |dd W d    n1 sow   Y  tjt|d d t|| |d	d W d    n1 sw   Y  tjt|d t|| |ttggd W d    n1 sw   Y  tjtd
d t|| |t	 d W d    n1 sw   Y  tt
}dtj d}tjt|d t|| ||d W d    n1 sw   Y  tjt|d t|| |d|id W d    d S 1 s w   Y  d S )Nr   random_statez.*must be unique strings.*matchscoringzEmpty list.*rU   zDuplicate.*)f1_micror   zAn empty dict[Scoring failed. The score on this train-test partition for these parameters will be set to z. Details: 
Zfoo)r   r   r   r   r   r/   r   r!   r   dictr    r   nanwarnsUserWarning)rc   r   	estimatorerror_message_regexpZmulticlass_scorerwarning_messagerU   rU   rV   )test_cross_validate_invalid_scoring_paramP  sJ   $r   c                  C   sf   t dd\} }tdt fdt fg}t|| |dd}|d }t|ts&J tdd |D s1J d S )	NTr   imputer
classifier)return_estimatorr   c                 s   s    | ]}t |tV  qd S r_   )r   r;   ).0r   rU   rU   rV   	<genexpr>  s    z7test_cross_validate_nested_estimator.<locals>.<genexpr>)r   r;   r   r   r/   r   r~   all)rc   r   ZpipelineresultsZ
estimatorsrU   rU   rV   $test_cross_validate_nested_estimator  s   r   
use_sparseFTcsr_containerc              	   C   s  t  }tddd\}}tdd}tddd\}}tddd}| r(||}||}|||f|||ffD ]\}	}
}t|dd}t|d	d}g }g }g }g }g }||	|
D ]I\}}t||	| |
| }|	|||	| |
|  |	|||	| |
|  |	|||	| |
|  |	|||	| |
|  |	| qSt
|}t
|}t
|}t
|}t
|}|||||f}t||	|
|| t||	|
|| q2d S )
N   r   	n_samplesr   r   linearkernelr   neg_mean_squared_errorr   r2)r'   r   r   r   r>   r   splitr	   r\   appendr   array"check_cross_validate_single_metric!check_cross_validate_multi_metric)r   r   r   ZX_regZy_regregZX_clfZy_clfr   rc   r   estZ
mse_scorerZ	r2_scorertrain_mse_scorestest_mse_scorestrain_r2_scorestest_r2_scoresfitted_estimatorstraintestr   rU   rU   rV   test_cross_validate  sJ   





r  c              	   C   st  |\}}}}}	dD ]o\}
}|
r!t | ||dd|d}t|d | n
t | ||dd|d}t|ts2J t||ks:J t|d | |
rWt | ||dgd|d}t|d	 |d nt | ||dgd|d}t|tsiJ t||ksqJ t|d
 | q	t | ||dd|d}t|d D ].\}}|j }t|r|	 }|	| j }t|r|	 }t
|| t
|j|	| j qd S )N))Tr   )Fr   r   Tr   return_train_scorer   train_scoreF
test_scorer   train_r2test_r2)r   r   r   r   )r/   rJ   r   r   r   	enumerateZcoef_copyr   toarrayrI   Z
intercept_)r   rc   r   r   r   r  r  r  r  r  r
  Zdict_lenZmse_scores_dictZr2_scores_dictkr   Zest_coefZfitted_est_coefrU   rU   rV   r     sj   

r   c              
   C   s  |\}}}}}	dd }
dt tdd|
f}h d}|ddh}dD ]}|D ]}|rCt| |||d	|d
}t|d | t|d | n
t| |||d|d
}t|tsTJ t| |r]|n|ksbJ t|d | t|d | t|d t	j
szJ t|d t	j
sJ t|d t	j
sJ t|d t	j
sJ t	|d dksJ t	|d dk sJ t	|d dksJ t	|d dk sJ q&q"d S )Nc                 S   s"   |  |}t||t|| dS )Nr   r   )rd   r"   r   )r   rc   r   y_predrU   rU   rV   custom_scorer  s   

z8check_cross_validate_multi_metric.<locals>.custom_scorerr  r   >   r  test_neg_mean_squared_error
score_timefit_timer  Ztrain_neg_mean_squared_error)TFTr	  Fr  r  r  r  r   r   )r   r"   unionr/   rJ   r   r   r|   keysr   Zndarrayr   )r   rc   r   r   r   r  r  r  r  r  r  Zall_scoringZkeys_sans_trainZkeys_with_trainr
  r   
cv_resultsrU   rU   rV   r     sb   	

r   c               	   C   s   t dddd\} }tdd}t tdt t g}d}|D ]@}tjt|d t	|| ||d	 W d    n1 s9w   Y  tjt|d t
|| ||d	 W d    n1 sXw   Y  qd S )
N   r   r   r   	n_classesr   r   r   z*The 'groups' parameter should not be None.r   )r   rc   r   r   )r   r>   r(   r*   r%   r&   r   r   r   r.   r-   )rc   r   r   Z	group_cvserror_messager   rU   rU   rV   #test_cross_val_score_predict_groups[  s"   
r!  c                        t t fg} zddlm}m} | ||f W n	 ty   Y nw | D ]'\  tt}} fdd}fdd}t||d}t	|||dd q"d S )	Nr   	DataFrameSeriesc                    
   t |  S r_   r   rz   InputFeatureTyperU   rV   r   ~  r   z-test_cross_val_score_pandas.<locals>.<lambda>c                    r&  r_   r'  rz   
TargetTyperU   rV   r     r   r   r   r   r   )
rG   pandasr$  r%  r   ImportErrorrc   r   rF   r.   typesr$  r%  X_dfy_sercheck_dfcheck_seriesr   rU   r)  r+  rV   test_cross_val_score_pandasq  s   
r6  c                  C   s   t dd} t }|j|j}}td}t| |||d}td}g }|||D ]%\}}tjt	|t
d}	tjt	|t
d}
d|	|< d|
|< |||f q't| |||d}t|| d S )Nr   r  r   r   dtyper   )r>   r   datatargetr'   r.   r   r   zerosr   boolr   rK   )svmirisrc   r   ZkfoldZscores_indicesZcv_masksr  r  Z
mask_trainZ	mask_testZscores_masksrU   rU   rV   test_cross_val_score_mask  s   
r?  c                  C   s   t dd} t }|j|j}}t||j}t| ||}t dd} t| ||}t|| t dd d} t| ||}t|| t dd} t	
t t| || W d    n1 sYw   Y  t	
t t| | | W d    d S 1 sww   Y  d S )NZprecomputedr  r   c                 S   s   t | |jS r_   )r   dotr   )rv   r   rU   rU   rV   r     s    z2test_cross_val_score_precomputed.<locals>.<lambda>)r>   r   r9  r:  r   r@  r   r.   rJ   r   r   r   r   )r=  r>  rc   r   Zlinear_kernelZscore_precomputedZscore_linearZscore_callablerU   rU   rV    test_cross_val_score_precomputed  s$   




"rA  c              	      s   t  }tjd }ttt}| tdgtdgtdgffdd}| td}d dt	  fdd	}t
|t|d
| || |d}t|tt|d d S )Nr   r   )r   r   rZ   r   *   Z42c                    s.   | j  ksJ | jksJ | jksJ d S r_   )r   r   r   )r   Z	DUMMY_INTZ	DUMMY_OBJZ	DUMMY_STRrU   rV   assert_fit_params  s   z:test_cross_val_score_fit_params.<locals>.assert_fit_paramsr   )r   r   r   r   r   r   r   r   r   )r   rc   rZ   r   r   r   r   r   eyeobjectonesfullr.   r   )r   r   r   r  ZW_sparseZP_sparserE  
fit_paramsrU   rD  rV   test_cross_val_score_fit_params  s*   
$	
rL  c                     s~   t  } g   fdd}tjdd t|}t| tt|dd}W d    n1 s)w   Y  t|g d t dks=J d S )Nc                    s     | |f dS )Nr   )r   )y_testZ	y_predictZ_score_func_argsrU   rV   
score_func  s   z3test_cross_val_score_score_func.<locals>.score_funcTrecordr   )r   r   )r   r   r   )	r   warningscatch_warningsr   r.   rc   r   rK   r   )r   rO  r   rj   rU   rN  rV   test_cross_val_score_score_func  s   rT  c                  C   s|   t  } tdd}t|| j| j}t|g dd t|| j| jdd}t|g dd t|| j| jdd}t|g dd d S )Nr   r  )
ףp=
?r   rU  rU  r   r   accuracyr   Zf1_weighted)r   r>   r.   r9  r:  rJ   )r>  r   r   Z	zo_scoresZ	f1_scoresrU   rU   rV   3test_cross_val_score_with_score_func_classification  s   
rW  c            	      C   s   t ddddd\} }t }t|| |}t|g dd t|| |dd	}t|g dd t|| |d
d	}tg d}t||d tt}t|| ||d	}t|g dd d S )Nr   r  r   r   )r   
n_featuresn_informativer   )gGz?rU  rU  gGz?gq=
ףp?r   r   r   r   )g(\؇gzGIgGz&qg\(qg)\G)r   r   r.   rJ   r   r   r   r   )	rc   r   r   r   Z	r2_scoresZneg_mse_scoresZexpected_neg_mser   Z	ev_scoresrU   rU   rV   /test_cross_val_score_with_score_func_regression  s   rZ  c              
   C   s|  t  }|j}| |}|j}tdd}td}t|||d|dd\}}}	|dks)J t|	dd	 t|||d|dt|j	d
d\}
}}|
|ksHJ ||	ksNJ tdd}td}t|||d|dt|j	d
d\}
}}|
|kspJ ||	ksvJ dd }t
|}t|||d||d
d\}}}	t|dd t|	dd ttt|d}t|||d|dd\}}}	|dk sJ |	dksJ d S )Nr   r  r   r   rV  )n_permutationsr   r   g?        r   r   )r[  r   r   groupsr   c                 S   s"   | |k  | |k   | jd  S rP   )sumrZ   )Zy_truer  rU   rU   rV   custom_score?  s   "z,test_permutation_score.<locals>.custom_scored   )r[  r   r   r   g(\?g{Gz?r   r   皙?)r   r9  r:  r>   r,   r1   rI   r   rI  sizer   modaranger   )r   r>  rc   r   r   r=  r   rj   r   ZpvalueZscore_group_Zpvalue_groupZ
svm_sparseZ	cv_sparser_  scorerrU   rU   rV   test_permutation_score  sd   




rg  c                  C   t   t jdt jddd} t j| dd d f< t ddg| jd d }tdtd	t jd
fdt	 fg}t
|| | d S N   r7  r   r   r   r   r   r   mean)ZstrategyZmissing_valuesr   )r   rd  float64r   r   repeatrZ   r;   r   r   r1   rc   r   prU   rU   rV   &test_permutation_test_score_allow_nansT     rp  c               	   C   s   t ddd} t dgd dgd  }tdd}d}tjt|d	 t|| | W d    n1 s5w   Y  d
}tjt	|d	 t|| |dt 
did W d    n1 s[w   Y  t|| |dt 
did d S )Nr`  r   r   r   r   TZexpected_sample_weight#Expected sample_weight to be passedr   /sample_weight.shape == \(1,\), expected \(8,\)!r   rF  )r   rd  r   r   rF   r   r   r}   r1   r   rI  rc   r   r   err_msgrU   rU   rV   "test_permutation_test_score_paramsb  s   
rw  c                  C   rh  ri  )r   rd  rl  r   r   rm  rZ   r;   r   r   r.   rn  rU   rU   rV   test_cross_val_score_allow_nansq  rq  rx  c            	      C   s  t ddgddgddgddgddgddgddgddgddgddgg
} t ddgddgddgddgddgddgddgddgddgddgg
}tdd	}ttd
d}ttdd}ttdd}t|| ||d}t|| ||d}t|| ||d}t|g d t|g d t|g d d S )Nr   r   r   r   r   r   )Zn_neighborsmicro)ZaveragemacroZsamplesr   )r   r         ?r   gUUUUUU?)r   r   r}  r         ?)r   r   r9   r   r!   r.   rI   )	rc   r   r   Zscoring_microZscoring_macroZscoring_samplesZscore_microZscore_macroZscore_samplesrU   rU   rV   test_cross_val_score_multilabel  s4   >
r  c                 C   s  t dd\}}t }t }t|}|||D ]\}}||| ||  ||| ||< qt||||d}t	|| t|||}t
|t
|ksMJ t }t||||d}t
|t
|ksbJ | }	|	|	t|	k9 }	| |	}	t||	|}t	t
|t
| ttdd|}t
|t
|ksJ G dd d}
tt t||||
 d W d    n1 sw   Y  tdd\}}d}tjt|d	 ttd
d||dtdd W d    d S 1 sw   Y  d S )NTr   r   r   )Zn_initc                   @   s   e Zd ZdddZdS )z%test_cross_val_predict.<locals>.BadCVNc                 s   s2    t dD ]}tg dtg dfV  qd S )Nr   )r   r   r   r   )r   r   r         )r   r   r   )rT   rc   r   r]  irU   rU   rV   r     s    z+test_cross_val_predict.<locals>.BadCV.splitrn   )rp   rq   rr   r   rU   rU   rU   rV   BadCV  s    r  zNumber of classes in training fold \(2\) does not match total number of classes \(3\). Results may not be appropriate for your use case.r   	liblinear)solverr   r   methodr   )r   r'   r   r   Z
zeros_liker   r\   rd   r-   rJ   r   r)   r  Zmedianr
   r   r   r   r   r   RuntimeWarningr   )r   rc   r   r   r   Zpreds2r  r  predsZXspr  r   rU   rU   rV   test_cross_val_predict  sJ   

"r  c                  C   sf  t dddd\} }tt | |dd}|jdksJ tdd	\} }tt | |dd}|jd
ks0J | d d } |d d }d}tjt|d tt | |dt	dd W d    n1 s\w   Y  t
dd	\} }tddd}t|| |dd}|jdks}J t|}| | || } }d}tjt|d t|| |t	dddd W d    d S 1 sw   Y  d S )Nr   2   r   r  r   r   decision_functionr  )r  Tr      r   r`  zOnly 1 class/es in training fold, but 2 in overall dataset. This is not supported for decision_function with imbalanced folds. To fix this, use a cross-validation technique resulting in properly stratified foldsr   r  r   Zovo)r   Zdecision_function_shape)i  -   zOutput shape \(599L?, 21L?\) of decision_function does not match number of classes \(7\) in fold. Irregular decision_function .*r   n_splitsr   r  )r   r-   r   rZ   r   r   r   r   r   r'   r   r>   r   argsort)rc   r   r  r   r   indr   rU   rU   rV   .test_cross_val_predict_decision_function_shape  s4   
"r  c                  C   d   t dddd\} }tt | |dd}|jdksJ tdd	\} }tt | |dd}|jd
ks0J d S )Nr   r  r   r  r   r  r  r   Tr   r  r   r-   r   rZ   r   rc   r   r  rU   rU   rV   *test_cross_val_predict_predict_proba_shape     r  c                  C   r  )Nr   r  r   r  predict_log_probar  r  Tr   r  r  r  rU   rU   rV   .test_cross_val_predict_predict_log_proba_shape  r  r  c                 C   sZ  t  }|j|j}}| |}t||d d d g}tddd}t|||}|jdks-J t|||}|jdks:J t|||}t|jd t|||}t|jd dd }t	|d	}t||
 |
 }t	|d
}t|||
 }tt |
 |
 dd}tt ||
 dd}|d d d d tjf }	dd }
t	|
d	}t||	|}t|jd d S )Nr   Fr   )Zfit_interceptr   )r  )r  r   c                 S   r   r_   r   rz   rU   rU   rV   r   7  r   z4test_cross_val_predict_input_types.<locals>.<lambda>r   r   r  r  c                 S   s
   | j dkS )Nr   )r   rz   rU   rU   rV   r   N  r   )r   r9  r:  r   r   r   r-   rZ   rK   rF   r   r   r   )r   r>  rc   r   r   r   r   predictionsr   r   Zcheck_3drU   rU   rV   "test_cross_val_predict_input_types  sF   


r  c                     r"  )	Nr   r#  c                    r&  r_   r'  rz   r(  rU   rV   r   `  r   z/test_cross_val_predict_pandas.<locals>.<lambda>c                    r&  r_   r'  rz   r*  rU   rV   r   a  r   r,  r   r   )
rG   r-  r$  r%  r   r.  rc   r   rF   r-   r/  rU   r5  rV   test_cross_val_predict_pandasT  s   
r  c                  C   s   t ddddddd\} }d|d< tdd}tdd}t|| |\}}t|| ||dd	}||d  d dks9J t||d  d d df dksLJ t||d  d d ddf dksaJ t||d  dksnJ t|j	dd
t
|jdd d S )Nr`  r   r   r   )r   rX  n_redundantrY  n_clusters_per_classr   r   r  r   r  Zaxis   )decimal)r   r   r,   r~   r   r-   r   r   rJ   r^  rI  rZ   )rc   r   r   r   r  r  Z
yhat_probarU   rU   rV   !test_cross_val_predict_unbalancedf  s$   
	

&*"r  c                  C   sf   t  } tjd}|dd}t| |d ddd}t|d d df | t| |d ddd}t|| d S )	NrC  r`  r   r   rd   )r   r   r  r   r   )r   r   randomRandomStaterandr-   rH   )Zmock_classifierrngrc   Zy_hatZy_hat_probarU   rU   rV   test_cross_val_predict_y_none|  s   
r  c                 C   sX   t  }|j|j}}t }d| t|jd i}t||||dd}t|t	d d S )Nr   r   r   )r   r   )
r   r9  r:  r   r   rG  rZ   r.   rK   rI  )r   r>  rc   r   r   rK  r   rU   rU   rV   &test_cross_val_score_sparse_fit_params  s   r  c                  C   s  d} d}t | ddddddd\}}t| |d |  }dD ]}tjdd	 }t|||t|d
tddd|dd\}}}	}
}W d    n1 sHw   Y  t|dkr\t	d|d j
 |jdkscJ |	jdksjJ |
jdksqJ |jdksxJ t|tddd t|jddtddd t|	jddtddd |
jdksJ |jdksJ tjdd	}t|||t|| dtddd|d\}}}W d    n1 sw   Y  t|dkrt	d|d j
 t|| t||	 qd S )Nr   r   r   r   r   r   rX  rY  r  r  r  r   FTTrP  r  皙?r   r   )r   rR   rE   Zreturn_timesUnexpected warning: %r)r   r   r  r  ffffff?rl  r  r   )r   rR   rE   )r   rO   rR  rS  r0   r'   r   linspacer   RuntimeErrormessagerZ   rK   rJ   rk  r8  r6   )r   r  rc   r   r   shuffle_trainwrR   train_scorestest_scoresZ	fit_timesZscore_timesZtrain_sizes2Ztrain_scores2Ztest_scores2rU   rU   rV   test_learning_curve  sp   
	
	
r  c               
   C   s   t dddddddd\} }td}t|| d dtdd	d
d\}}}t|tddd
 t|jddtdd	d
 t|jddtdd	d
 d S )Nr   r   r   r   r  r  r   r  r   r   )r   r   rR   r  r  )r   rO   r0   r   r  rK   rJ   rk  rc   re  r   rR   r  r  rU   rU   rV    test_learning_curve_unsupervised  s    
	 r  c               	   C   s   t dddddddd\} }td}tj}t t_zt|| |ddd\}}}W tj }tj  |t_ntj }tj  |t_w d	|v sHJ d S )
Nr   r   r   r   r  r  r   )r   verbosez[learning_curve])r   rO   sysstdoutr   r0   getvalueclose)rc   r   r   Z
old_stdoutrR   r  r  outrU   rU   rV   test_learning_curve_verbose  s.   
	




r  c               	   C   sb   t dddddddd\} }td}tt t|| |dd W d    d S 1 s*w   Y  d S )Nr   r   r   r  T)exploit_incremental_learningr   rO   r   r   r   r0   rc   r   r   rU   rU   rV   5test_learning_curve_incremental_learning_not_possible  s   

"r  c                  C   s   t dddddddd\} }td}dD ];}t|| |dd	td
dd|d\}}}t|tddd t|jddtddd t|jddtd
dd qd S )Nr   r   r   r   r  r  r  r   Tr  r   r   )r   r  rR   rE   r  r  r   rt   r0   r   r  rK   rJ   rk  )rc   r   r   r  rR   r  r  rU   rU   rV   (test_learning_curve_incremental_learning  s0   
		r  c                  C   s   t dddddddd\} }td}t|| d ddtd	d
dd\}}}t|tddd t|jddtdd
d t|jddtd	d
d d S )Nr   r   r   r   r  r  r   Tr  r   r   )r   r   r  rR   r  r  r  r  rU   rU   rV   5test_learning_curve_incremental_learning_unsupervised'  s*   
	 r  c            
   	   C   s   t dddddddd\} }tddd}tdd d	d
}t|| ||ddd\}}}t|| |d|d	d\}}}	t|| t|jdd|jdd t|jdd|	jdd d S )Nr   r   r   r   r  ra  r   r   Fmax_itertolrE   r   T)rR   r   r  )r   rR   r  r  )r   r   r  r   r0   rK   rJ   rk  )
rc   r   rR   r   train_sizes_inctrain_scores_inctest_scores_inctrain_sizes_batchtrain_scores_batchtest_scores_batchrU   rU   rV   <test_learning_curve_batch_and_incremental_learning_are_equal?  sD   
	
	r  c               	   C   sh  t dddddddd\} }td}tt t|| |dddgd W d    n1 s,w   Y  tt t|| |dd	d
gd W d    n1 sLw   Y  tt t|| |dddgd W d    n1 slw   Y  tt t|| |dddgd W d    n1 sw   Y  tt t|| |dddgd W d    d S 1 sw   Y  d S )Nr   r   r   r   r  r  r   r   rR   r\  r   r  g?   r  r  rU   rU   rV   0test_learning_curve_n_sample_range_out_of_boundsf  s2   
	"r  c                  C   s   t dddddddd\} }td}d}tjt|d t|| |dtdd	dd
\}}}W d    n1 s6w   Y  t|ddg d S )Nr   r   r   r   r  zzRemoved duplicate entries from 'train_sizes'. Number of ticks will be less than the size of 'train_sizes': 2 instead of 3.r   gQ?r   r  )	r   rO   r   r   r  r0   r   r  rK   )rc   r   r   r   rR   re  rU   rU   rV   1test_learning_curve_remove_duplicate_sample_sizes}  s$   
	r  c               
   C   s   t dddddddd\} }td}tdd}t|| ||td	d
dd\}}}t|tddd t|jddtdd
d t|jddtd	d
d d S )Nr   r   r   r   r  r  r   r  r  r   r   r  r  r  )	r   rO   r'   r0   r   r  rK   rJ   rk  )rc   r   r   r   rR   r  r  rU   rU   rV   (test_learning_curve_with_boolean_indices  s"   
	
 r  c                  C   s  t ddgddgddgddgd	d
gddgddgddgddgddgddgd	d
gddgddgddgg} t g d}t g d}tdd dd}tdd}t|| ||dt ddd|ddd	\}}}t|jddt g d t|jddt g d  t	t
 t|| ||dt ddd|d!d" W d    n1 sw   Y  t|| ||dt ddd|dddd#
\}}	}
t|	jdd|jdd t|
jdd|jdd d S )$Nr   r   r   r   r   r   r  r     r        r               r  	   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Fr  r  333333?r   T)r   r   rR   r]  rE   r   r  )r}  r  Iq?)r  r~  r~  r   )r   r   rR   r]  r   )r   r   rR   r]  rE   r   r  )r   r   r   r%   r0   r  rJ   rk  r   r   r   )rc   r   r]  r   r   r  r  r  r  r  r  rU   rU   rV    test_learning_curve_with_shuffle  s   
r  c               
   C   s   t ddd} t dgd dgd  }tdd}d}tjt|d	 t|| |d
d W d    n1 s7w   Y  d}tjt	|d	 t|| |d
dt 
did W d    n1 s^w   Y  t|| |d
dt 
did d S )Nr`  r   r   r   r   Trr  rs  r   r   r   z/sample_weight.shape == \(1,\), expected \(2,\)!r   )r   r   )r   rd  r   r   rF   r   r   r}   r0   r   rI  ru  rU   rU   rV   test_learning_curve_params  s    

r  c                  C   s  t dddddddd\} }tddg}d}tjt|d	 t|| |d
dtddddd W d    n1 s7w   Y  d}tjt|d	 t|| |d
dtdddddtd
id W d    n1 sfw   Y  t|| |d
dtdddddtdid d S )Nr   r   r   r   r  r  r   z9Expected fit parameter\(s\) \['sample_weight'\] not seen.r   r   Tr  r   r   r   )r   r  rR   r   z2Fit parameter sample_weight has length 3; expected)r   r  rR   r   r   )	r   rt   r   r   r}   r0   r   r  rI  )rc   r   r   rv  rU   rU   rV   /test_learning_curve_incremental_learning_params  sZ   
	
r  c               	   C   s   t dddddddd\} }tddd}tjdd}tt | |d|dd	\}}W d    n1 s2w   Y  t|dkrFtd
|d j	 t
|jdd| t
|jddd|  d S )Nr   r   r   r  r   TrP  r   
param_nameparam_ranger   r  r  )r   r   r  rR  rS  r2   r   r   r  r  rJ   rk  )rc   r   r  r  r  r  rU   rU   rV   test_validation_curve8  s0   
		r  c               	   C   sF   t dddddddd\} }tddd}tt | |d|dd\}}d S )Nr   r   r   r  r   r   r  )r   r   r  r2   r   )rc   r   r  re  rU   rU   rV   %test_validation_curve_clone_estimatorS  s$   

r  c               
   C   s   d} d}t ddd\}}ttddd||dg dt|| d	d
}ttt|dd d f d  ttddd||dg dt|ddd
}ttt|dd d f d  ttddd||dg dt|dd
}tt	|t	| d S )Nr`  r   r   r   r   r   r   )r  r  ra  ra  r  r  )r   r   r   r   r   Tr  rE   r  )
r   r2   r>   r6   rJ   r   Zvsplithstackr'   r   )r   r  rc   r   Zscores1Zscores2Zscores3rU   rU   rV   +test_validation_curve_cv_splits_consistencyi  s<   

"

"

r  c                  C   s   t ddd} t dgd dgd  }tdd}d}tjt|d	 t|| |d
g ddd W d    n1 s;w   Y  d}tjt	|d	 t|| |d
g dddt 
did W d    n1 sfw   Y  t|| |d
g dddt 
did d S )Nr`  r   r   r   r   Trr  rs  r   Z	foo_param)r   r   r   r   )r  r  r   rt  r   )r  r  r   r   )r   rd  r   r   rF   r   r   r}   r2   r   rI  ru  rU   rU   rV   test_validation_curve_params  sF   



r  c                  C   sv   t jd} t d}| | t|dsJ tt |ddr"J d|d< t|dr-J tt |dfdr9J d S )Nr   r`     )r   r  r  rd  rE   r3   deleter  )r  ro  rU   rU   rV   test_check_is_permutation  s   

r  c                 C   sj   t dddddd\}}| |}| |}ttdd}t|||dd	}t|||dd	}| }t|| d S )
Nr   r   FT)r  n_labelsZallow_unlabeledZreturn_indicatorr   r   r  r   r   )r   r8   r>   r-   r  rJ   )r   rc   r   r   Zy_sparseZclassifr  Zpreds_sparserU   rU   rV   (test_cross_val_predict_sparse_prediction  s   
r  c           
   	   C   s   t ddd}|jdkr|dkrt|fnt|df}n|j}t|}|||D ]\}}t| || || } t	| ||| ||< q)||d |d |
dfD ]}	tt| ||	||d| qRd	S )
z@Helper for tests of cross_val_predict with binary classificationr   Fr  r   r  r   strr  N)r'   r   r   rZ   r   r;  r   r	   r\   getattrastyperH   r-   )
r   rc   r   r  r   	exp_shapeexpected_predictionsr  r  tgrU   rU   rV   check_cross_val_predict_binary  s   
 
r  c              	   C   s   t ddd}ttjj}||dd}tjt|tt|f|| tjd}tj|dd\}}	|	||	D ](\}
}t
| ||
 |	|
 } t| ||| }t|	|
 }||t||< q5||d	 |d
 |dfD ]}tt| ||||d| qkdS )zDHelper for tests of cross_val_predict with multiclass classificationr   Fr  r   r  r  r   r7  TZreturn_inverser   r   r  r  N)r'   r   finforl  minrJ  r   r|   r   r   r	   r\   r  ix_r  rH   r-   )r   rc   r   r  r   	float_mindefault_valuesr  re  y_encr  r  
fold_predsZ
i_cols_fitr  rU   rU   rV   "check_cross_val_predict_multiclass  s(   r  c                    s  t ddd}ttjj}||dd} jd }g }t|D ]0}	tt dd|	f }
|
dkr:|d	kr:t|f}nt||
f}|	tj
||| tjd
 q fddt jd D }tj|dd}|||D ]K\}}t| || || } t| ||| }t|D ]-}	t|| dd|	f }||	 jdkr||	 ||	 |< qt||}||	 ||	 |< qqj  d  d  dfD ]'}t| ||||d}t|t|ksJ tt|D ]}t|| ||  qqdS )zCheck the output of cross_val_predict for 2D targets using
    Estimators which provide a predictions as a list with one
    element per class.
    r   Fr  r   r  r   Nr   r  r7  c                    s8   g | ]}t j d d |f ddd d d t jf qS )NTr  r   )r   r   r   )r   r  r   rU   rV   
<listcomp>*  s    *z6check_cross_val_predict_multilabel.<locals>.<listcomp>r  r  r  )r'   r   r   rl  r  rZ   r   r   r|   r   rJ  Zconcatenater   r	   r\   r  r   r   r  r  r-   rH   )r   rc   r   r  r   r  r  Z	n_targetsZexpected_predsZi_colZn_classes_in_labelr  Z
y_enc_colsr  r  r  r  Z	fold_colsidxr  Zcv_predict_outputr  rU   r  rV   "check_cross_val_predict_multilabel  sJ   


r  c                 C   s,   t ddd\}}dD ]	}t| ||| q
d S )Nr   r   )r  r   r  r   r  )r   r  )r   rc   r   r  rU   rU   rV   *check_cross_val_predict_with_method_binaryC  s   r  c                 C   sB   t  }|j|j}}t||dd\}}dD ]	}t| ||| qd S )Nr   r   r  )r   r9  r:  rE   r  )r   r>  rc   r   r  rU   rU   rV   .check_cross_val_predict_with_method_multiclassK  s   r  c                   C   s   t t  tt  d S r_   )r  r   r  rU   rU   rU   rV   "test_cross_val_predict_with_methodS  s   
r  c                  C   sN   t  } | j| j}}t||dd\}}dD ]}tddd}t|||| qd S )Nr   r   r  Zlog_lossr   )Zlossr   )r   r9  r:  rE   r   r  )r>  rc   r   r  r   rU   rU   rV   &test_cross_val_predict_method_checkingX  s   r  c                  C   s^   t  } | j| j}}t||dd\}}ttdddddgidd}d	D ]	}t|||| q#d S )
Nr   r   rC  r   r  r   r   r   r  )r   r9  r:  rE   r$   r   r  )r>  rc   r   r   r  rU   rU   rV   /test_gridsearchcv_cross_val_predict_with_methodc  s   r  c                  C   sL   d} d}t | d|ddd\}}ttddd	}d
D ]
}t||||d qd S )Nr`  r   r   r   rC  r   r  r  rX  r   r  r   )r  r   )r   r  r  )r   r8   r   r  )Zn_sampr  rc   r   r   r  rU   rU   rV   1test_cross_val_predict_with_method_multilabel_ovrl  s   

r  c                   @   s   e Zd Zdd ZdS )RFWithDecisionFunctionc                 C   s2   |  |}d}t|tsJ |dd |D }|S )Nz?This helper should only be used on multioutput-multiclass tasksc                 S   s.   g | ]}|j d  dkr|dddf n|qS )r   r   Nr   rB  )r   ro  rU   rU   rV   r	    s   . z<RFWithDecisionFunction.decision_function.<locals>.<listcomp>)r   r   r~   )rT   rc   ZprobsmsgrU   rU   rV   r  ~  s
   
z(RFWithDecisionFunction.decision_functionN)rp   rq   rr   r  rU   rU   rU   rV   r  z  s    r  c               	   C   s   d} t dd| ddd\}}|d d df  |d d df 7  < d	D ])}tddd
}t  td t||||d W d    n1 sEw   Y  q!d S )Nr   r`  r   r   rC  r  r   r   r   r  r  Zn_estimatorsr   ignorer  )r   r  rR  rS  simplefilterr  )r  rc   r   r  r   rU   rU   rV   0test_cross_val_predict_with_method_multilabel_rf  s   

$

r  c               	   C   s~   t jd} | jdddd}t g d}t }dD ]"}t  td t	|||| W d    n1 s7w   Y  qd S )Nr   r   )r  r   rb  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  )
r   r  r  normalr   r   rR  rS  r  r  )r  rc   r   r   r  rU   rU   rV   -test_cross_val_predict_with_method_rare_class  s   

r  c               	   C   s   t jd} | jdddd}t ddgddgddgddgddgg}dD ])}tddd}t  td	 t	||||d
 W d    n1 sHw   Y  q$d S )Nr   r   )r   r   r  r   )r   r  r   r  r  r  )
r   r  r  r  r   r  rR  rS  r  r  )r  rc   r   r  r   rU   rU   rV   ;test_cross_val_predict_with_method_multilabel_rf_rare_class  s   (

r  c                 C   s   t t||g}t||}|| |D ]>\}}	|| | ||  || |	 }
|dkr6t t|	|f}nt t|	|ft |jj	}|
|d d |j
f< |||	< q|S )Nr   )r   r;  r   r  r   r\   rJ  r   r8  r  r   )rc   r   r   classesr   r  r  funcr  r  Zexpected_predictions_Zexp_pred_testrU   rU   rV   get_expected_predictions  s   

r!  c                  C   s  t ddd} t dd tdD }d}tdd}td	d}t }g d
}|D ][}t }t|| |||d}	t	| |||||}
t
|
|	 t|| |||d}	t	| |||||}
t
|
|	 tt tdddd}t|| |||d}	||}t	| |||||}
t
|
|	 q*d S )Nrj  r`  r   c                 S   s   g | ]}|d  qS )r   rU   )r   rv   rU   rU   rV   r	    s    z7test_cross_val_predict_class_subset.<locals>.<listcomp>r   r   r  r   r  r  r   r   )r   rd  r   r   r   r'   r<   r   r-   r!  rJ   rE   rm  Zfit_transform)rc   r   r  Zkfold3Zkfold4lemethodsr  r   r  r  rU   rU   rV   #test_cross_val_predict_class_subset  s6   




r$  c                     sL  t  } | j| j}}t }tjddd}|d |  tj	|j
tjdtj	|j
ddtjd zRt||| fd	d
d tt t|||fdd
d W d    n1 sZw   Y  W d\ tdD ]}z
t|j
 W  d S  ty   td Y qhw d S d\ tdD ]}z	t|j
 W  w  ty   td Y qw w )NwbF)moder  s   Hello world!!!!!r7  rU   r)rZ   r&  r8  c                        S r_   rU   r   rc   r   )rj   rU   rV   r         z#test_score_memmap.<locals>.<lambda>r   c                    r(  r_   rU   r)  )r   rU   rV   r     r*  rn   r   r   )r   r9  r:  r   tempfileNamedTemporaryFilewriter  r   Zmemmapnamerl  r.   r   r   r   r   osunlinkOSErrorr   )r>  rc   r   r   tfre  rU   )rj   r   rV   test_score_memmap  s@   
r3  c                     s   t t fg} zddlm}m} | ||f W n	 ty   Y nw | D ]/\ t }|j|j}} ||}} fdd}fdd}	t	||	d}
t
|
|| q"d S )Nr   r#  c                    r&  r_   r'  rz   r(  rU   rV   r     r   z4test_permutation_test_score_pandas.<locals>.<lambda>c                    r&  r_   r'  rz   r*  rU   rV   r     r   r,  )rG   r-  r$  r%  r   r.  r   r9  r:  rF   r1   )r0  r$  r%  r>  rc   r   r1  r2  r3  r4  r   rU   r5  rV   "test_permutation_test_score_pandas  s    
r4  c                  C   s   t t j} tdd}tddtdd}}t| |d t ||dd d d d
}d|d< tjtd	d
 tdi | W d    n1 sDw   Y  | 	 dksQJ d S )Nr   r   r   r   r  )
r   rc   r   rf  r  r  r  
parametersrK  score_paramsr   r   z%Failing classifier failed as requiredr   r\  rU   )
r7   FAILING_PARAMETERr   rd  r   r   r   r   r4   rj   )failing_clfrc   r  r  fit_and_score_argsrU   rU   rV   test_fit_and_score_failing   s(   
r:  c                  C   s|   t ddd\} }tddd}tt | \}}t|| |t ||ddddd d d	d
}tdi |}|d |d ks<J d S )Nr   r   r   r   r   r`  r  )r  r  T)r   rc   r   rf  r  r  r  r5  rK  r6  Zreturn_parametersr5  rU   )r   r>   nextr+   r   r   r4   )rc   r   r   r  r  r9  resultrU   rU   rV   test_fit_and_score_working;  s$   r=  c                   @   s*   e Zd ZdddZdddZd	ddZdS )
DataDependentFailingClassifierNc                 C   s
   || _ d S r_   max_x_value)rT   r@  rU   rU   rV   rW   R  rm   z'DataDependentFailingClassifier.__init__c                 C   s&   || j k }|rtd| dd S )NzClassifier fit failed with z values too high)r@  r^  r   )rT   rc   r   Znum_values_too_highrU   rU   rV   r\   U  s   
z"DataDependentFailingClassifier.fitc                 C      dS )Nr\  rU   rh   rU   rU   rV   rj   \  re   z$DataDependentFailingClassifier.scorer_   rn   )rp   rq   rr   rW   r\   rj   rU   rU   rU   rV   r>  Q  s    

r>  r   c                 C   s   t dd}tdd}td}|||g}d| d}d}tjd	|d
  d| tjd}tjt	|d t
|i | W d    d S 1 sFw   Y  d S )Nr  r?  r   r   r  r   r   r   z8ValueError: Classifier fit failed with 1 values too highzh2 fits failed.+total of 3.+The score on these train-test partitions for these parameters will be set to r   z.+flagsr   )r>  r   rd  rI  recompileDOTALLr   r   r   r/   )r   r8  rc   r   cross_validate_argscross_validate_kwargsindividual_fit_error_messager   rU   rU   rV   -test_cross_validate_some_failing_fits_warning`  s$   



	"rK  c                 C   s   t t j}tdd}td}|||g}d| d}d}tjd| tjd}tj	t
|d	 t|i | W d    d S 1 sAw   Y  d S )
Nr   r   r  r  rB  z1ValueError: Failing classifier failed as requiredz4All the 7 fits failed.+your model is misconfigured.+rC  r   )r7   r7  r   rd  rI  rE  rF  rG  r   r   r   r/   )r   r8  rc   r   rH  rI  rJ  r   rU   rU   rV   *test_cross_validate_all_failing_fits_error|  s   



"rL  c                 C   s   t |r_   )r   )r   rc   r   	error_msgrU   rU   rV   _failing_scorer  s   rN  zignore:lbfgs failed to converger   c              	   C   s   t dd\}}tdd||}d}tt|d}| dkr@tjt|d t|||d	|| d
 W d    d S 1 s9w   Y  d S d|  }tj	t
|d t|||d	|| d
}t||  W d    d S 1 sgw   Y  d S )NTr   r   r  "This scorer is supposed to fail!!!rM  r   r   r   )r   r   r   r   )r   r   r\   r   rN  r   r   r   r.   r   r   rH   )r   rc   r   r   rM  failing_scorerwarning_msgr   rU   rU   rV   #test_cross_val_score_failing_scorer  s(   ""rT  r
  with_multimetricc              
   C   s:  t dd\}}tdd||}d}tt|d}|r%tt}|||d}	n|}	| dkrPtjt	|d	 t
|||d
|	|| d W d    d S 1 sIw   Y  d S d|  }
tjt|
d	7 t
|||d
|	|| d}|D ] }d|v rd|v r|| D ]	}t|tsJ qxqjt|| |  qjW d    d S 1 sw   Y  d S )NTr   r   rO  rP  rQ  )Zscore_1Zscore_2Zscore_3r   r   r   )r   r   r
  r   r   r5   Z_score_2)r   r   r\   r   rN  r   r   r   r   r   r/   r   r   r   rg   rH   )r   r
  rU  rc   r   r   rM  rR  Znon_failing_scorerr   rS  r   r   r  rU   rU   rV   "test_cross_validate_failing_scorer  s^   "	"rV  c                 C   rA  )Ng;pΈ^@rU   )r  jr  rU   rU   rV   three_params_scorer  re   rX  z:train_score, scorer, verbose, split_prg, cdt_prg, expectedr   )r   r   r   r   zS\[CV\] END .................................................... total time=   0.\ds)Zsc1Zsc2)Zscorersr   ze\[CV 2/3\] END  sc1: \(train=3.421, test=3.421\) sc2: \(train=3.421, test=3.421\) total time=   0.\dsr   zW\[CV 2/3; 1/1\] END ....... sc1: \(test=3.421\) sc2: \(test=3.421\) total time=   0.\dsc                 C   s   t ddd\}}tddd}	tt |\}
}t|	||||
||d d d |||d}td
i | |  \}}|d}t|dkrMt	
||d	 sKJ d S t	
||d sWJ d S )Nr   r   r   r   r   )r   rc   r   rf  r  r  r  r5  rK  r6  r
  Zsplit_progressZcandidate_progress
r   r   rU   )r   r>   r;  r+   r   r   r4   Z
readouterrr   rE  r   )Zcapsysr  rf  r  Z	split_prgZcdt_prgexpectedrc   r   r   r  r  r9  r  re  ZoutlinesrU   rU   rV   test_fit_and_score_verbosity  s0   '
r\  c               	   C   sV   d} dd }t jt| d td d d |d tjd W d    d S 1 s$w   Y  d S )Nz&scoring must return a number, got Nonec                 S   s   d S r_   rU   )r   X_testrU   rU   rV   two_params_scorer@	  re   z%test_score.<locals>.two_params_scorerr   )r   r]  rM  rf  r6  r   )r   r   r   r5   r   r   )r   r^  rU   rU   rV   r  =	  s   "r  c                  C   sj   dd } t dddd\}}tdd}||| t|||d| d	}g d
}|D ]}d||v s2J q'd S )Nc                 S   s2   |  |}t||}|d |d |d |d dS )N)r   r   rY  )r   r   )r   r   tnfpfntp)rd   r   )r   rc   r   r  cmrU   rU   rV   r  O	  s   

zPtest_callable_multimetric_confusion_matrix_cross_validate.<locals>.custom_scorer(   r   rC  )r   rX  r   r   r   )r   r   r_  ztest_{})r   r?   r\   r/   r   )r  rc   r   r   r  Zscore_namesr.  rU   rU   rV   9test_callable_multimetric_confusion_matrix_cross_validateN	  s   
rf  c                  C   s&   t dd\} }tt | |ddd dS )z^Check that regressors with partial_fit is supported.

    Non-regression test for #22981.
    rC  r   Tr   )r  r   N)r   r0   r:   )rc   r   rU   rU   rV   *test_learning_curve_partial_fit_regressors^	  s   rg  c           
      C   s  t dddd| d\}}t|}|| || }}t }d}tjt|d t|||dtjd	^}}}}W d
   n1 s>w   Y  t	dD ]}	t
||	  sTJ t
||	  s_J qGt	d|jd D ]}	t
||	  ruJ t
||	  rJ qhd
S )zKChecks for fit failures in `learning_curve` and raises the required warningr   r   r   F)r   r  rY  rE   r   z#10 fits failed out of a total of 25r   r   rB  Nr   r   )r   r   r  r>   r   r   r   r0   r   r   isnanr   rZ   any)
global_random_seedrc   r   Z
sorted_idxZsvcr   re  r  r  r
  rU   rU   rV   -test_learning_curve_some_failing_fits_warningi	  s.   

	rk  c                 C   s  t dd\}}t|}t }tdd| d}t||||ddd}d|vs%J t||||ddd}d|v s5J |d d	 }|d d
 }t||jksJJ t||jksSJ tdd |D d tdd |D d t|	||D ]\}\}	}
t|| |	 t|| |
 qodS )z<Check the behaviour of `return_indices` in `cross_validate`.Tr   r   )r  rE   r   r   F)r   r   Zreturn_indicesindicesr  r  c                 S      g | ]}|j qS rU   r  r   rl  rU   rU   rV   r	  	      z6test_cross_validate_return_indices.<locals>.<listcomp>r`  c                 S   rm  rU   r  rn  rU   rU   rV   r	  	  ro  r  N)
r   r=   r   r'   r/   r   r  rK   r  r   )rj  rc   r   r   r   r  Ztrain_indicesZtest_indicesZ	split_idxZexpected_train_idxZexpected_test_idxrU   rU   rV   "test_cross_validate_return_indices	  s$   rp  zfunc, extra_argsalphar   )r  r  c              	   C   s   t jtdd | dt ttdi d| W d   n1 s w   Y  t jtdd | dt tti i d| W d   dS 1 sFw   Y  dS )	z2Check that we warn about deprecating `fit_params`.z`fit_params` is deprecatedr   r   )r   rc   r   r   rK  Nz1`params` and `fit_params` cannot both be provided)r   rc   r   rK  r   rU   )r   r   FutureWarningr@   rc   r   r   r   r   
extra_argsrU   rU   rV   test_fit_param_deprecation	  s(   
"ru  )Zenable_metadata_routingc                 C   sN   t jtdd | dt ttg d| W d   dS 1 s w   Y  dS )zCheck that we raise an error if `groups` are passed to the cv method instead
    of `params` when metadata routing is enabled.
    z`groups` can only be passed ifr   )r   rc   r   r]  NrU   )r   r   r   r@   rc   r   rs  rU   rU   rV   #test_groups_with_routing_validation	  s   "rv  c                 C   s.   t dddd\}}| dt ||d| dS )zTest that no errors are raised when passing `params=None`, which is the
    default value.
    Non-regression test for: https://github.com/scikit-learn/scikit-learn/issues/30447
    r`  r   r   r  )r   rc   r   NrU   )r   r@   )r   rt  rc   r   rU   rU   rV   test_cross_validate_params_none	  s   rw  c              	   C   s   t d}tjt|d | dt tttg dd| W d   n1 s'w   Y  | t	kr2dS t d}tjt|d! | dt j
ddjddtttg dd| W d   dS 1 sbw   Y  dS )	zMCheck that we raise an error when passing metadata that is not
    requested.z[metadata] are passed but are not explicitly set as requested or not requested for ConsumingClassifier.fit, which is used withinr   )metadata)r   rc   r   r   Nz[metadata] are passed but are not explicitly set as requested or not requested for ConsumingClassifier.score, which is used withinTrU   )rE  escaper   r   r   r@   rc   r   r   r-   set_fit_requestset_partial_fit_request)r   rt  rv  rU   rU   rV    test_passed_unrequested_metadata	  s@   
"r|  c                 C   s  t  }t|djddd}t  }t|djddd}t  }t|djdd	d}tt}t	j
d
}	|	|}
|	|}|	d
d|}|	|}|	|}|	|}ttt|dddtt|dtt|dtt|dtt|dtt i}t||||d}| tur|j|
|d | |ftt|d||  |d|i | turt|sJ |D ]}t|d| jd|
|d qt|sJ |D ]}t|d| j||d qt|sJ |D ]}t|d| jd||d qdS )z]Check that the respective cv method is properly dispatching the metadata
    to the consumer.registryscore_weightsscore_metadatar   rx  split_groupssplit_metadata)r]  rx  fit_sample_weightfit_metadatar   r   rV  )Z	my_scorerrV  r   )r  r  r  r  )r  r  )rc   r   r   r   rj   objr  parentZsplit_paramsr   rx  r   )r  r  r  r]  rx  r\   N)rC   rA   Zset_score_requestrB   Zset_split_requestr@   rz  rN   rc   r   r  r  r  randintr/   r   r.   r0   r2   r1   r-   updater   r   rD   rp   )r   rt  Zscorer_registryrf  Zsplitter_registrysplitterestimator_registryr   r   r  r  r  r  r  r  r  Zscoring_argsr   Z_scorerZ	_splitter
_estimatorrU   rU   rV   !test_validation_functions_routing$
  s   











	
	r  c               
   C   s   t t} tjd}|| }|| }t }t|djddd}t	|tt
t dt||dd t|s6J |D ]}t|d	d
d||d q8dS )zTest that learning_curve routes metadata to the estimator correctly while
    partial_fitting it with `exploit_incremental_learning=True`.r   r}  r  r  r  T)r  r  )rc   r   r   r  r   r   r0   r  N)rN   rc   r   r  r  r  rC   r@   r{  r0   r   rB   r   r   rD   )r   r  r  r  r  r   r  rU   rU   rV   8test_learning_curve_exploit_incremental_learning_routing
  s<   


	r  )rs   r/  rE  r  r+  rR  	functoolsr   ior   timer   numpyr   r   Zscipy.sparser   Zsklearnr   Zsklearn.baser   r   r	   Zsklearn.clusterr
   Zsklearn.datasetsr   r   r   r   r   r   Zsklearn.ensembler   Zsklearn.exceptionsr   r   Zsklearn.imputer   Zsklearn.linear_modelr   r   r   r   r   Zsklearn.metricsr   r   r   r   r   r   r    r!   r"   Zsklearn.metrics._scorerr#   Zsklearn.model_selectionr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   Z#sklearn.model_selection._validationr3   r4   r5   Z$sklearn.model_selection.tests.commonr6   Z)sklearn.model_selection.tests.test_searchr7   Zsklearn.multiclassr8   Zsklearn.neighborsr9   Zsklearn.neural_networkr:   Zsklearn.pipeliner;   Zsklearn.preprocessingr<   r=   Zsklearn.svmr>   r?   Z%sklearn.tests.metadata_routing_commonr@   rA   rB   rC   rD   Zsklearn.utilsrE   Zsklearn.utils._mockingrF   rG   Zsklearn.utils._testingrH   rI   rJ   rK   Zsklearn.utils.fixesrL   rM   Zsklearn.utils.validationrN   rO   rt   r   r   r   rI  rc   r   r   r   rG  r   markZparametrizer   r   r   r   r<  r  r   r   r!  r6  r?  rA  rL  rT  rW  rZ  rg  rp  rw  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r$  r3  r4  r:  r=  r>  r   rK  rL  rN  filterwarningsrT  rV  rX  r\  r  rf  rg  rk  rp  ru  rv  rw  r|  r  r  rU   rU   rU   rV   <module>   s    ,D
X

(
47BI
#
B
80
5
	='N0.&
4	(



=

$ !
	%\