a
    hg                    @   sj  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# 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.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG ddlHmIZImJZJmKZK ddlLmMZM ddlNmOZO ddlPmQZQ ddlRmSZS ddlTmUZU ddlVmWZW ddlXmYZYmZZZ ddl[m\Z\m]Z] ddl^m_Z_m`Z`maZambZbmcZc ddldmeZe ddlfmgZgmhZh ddlimjZjmkZkmlZlmmZm ddlnmoZompZp dd lqmrZr G d!d" d"eZsG d#d$ d$esZtG d%d& d&eZuG d'd( d(euZvG d)d* d*eeZwexd+Zyezg d,Z{ezg d-Z|e}d.Z~ejd/eod0d1 Zd2d3 Zd4d5 Zd6d7 Zejd8d9d:gejd;eped<d=d>Zd?d@ ZdAdB ZdCdD ZdEdF ZdGdH ZdIdJ Zejd/eodKdL ZdMdN ZdOdP ZdQdR Zejd/eodSdT ZdUdV ZdWdX ZdYdZ Zd[d\ Zejd/eod]d^ Zd_d` Zdadb Zdcdd Zejd/eodedf Zdgdh Zdidj Zdkdl Zejd/eodmdn Zdodp Zdqdr Zdsdt Zdudv Zdwdx Zdydz Zd{d| Zd}d~ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejd;ep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jdejdgdd Zejdejdgdd ZddÄ ZejdġejdejddgddǄ Zejdġejdejddgejdd:d9gejdd9d:gdd˄ Zdd̈́ Zejdd9eddddfd:e7eedӜdԍddddfd9e7eedӜdԍddddfgddڄ Zdd܄ Zddބ Zdd Zdd Zdd ZejdeEi feFi feGdezdgdfgdd ZejdeDi feCi feBi feEi feFi feGdezdgdfged:ddd ZejdeDi feCi feBi feEi feFi feGdezdgdfged:ddd ZejdeDi feCi feBi feEi feFi feGdezdgdfged:ddd ZejdeDi feCi feBi feEi feFi feGdezdg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)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)selfrP    rT   i/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/model_selection/tests/test_validation.py__init__e   s    zMockImprovingEstimator.__init__Nc                 C   s   || _ |jd | _| S rO   rR   shaperQ   rS   rR   Zy_subsetrT   rT   rU   fitj   s    zMockImprovingEstimator.fitc                 C   s   t d S NNotImplementedErrorrS   XrT   rT   rU   predicto   s    zMockImprovingEstimator.predictc                 C   s2   |  |rdt| j| j  S t| j| j S d S )Ng       @)_is_training_datafloatrQ   rP   rS   r_   YrT   rT   rU   scorer   s    
zMockImprovingEstimator.scorec                 C   s
   || j u S r[   rR   r^   rT   rT   rU   ra   y   s    z(MockImprovingEstimator._is_training_data)N)NN	__name__
__module____qualname____doc__rV   rZ   r`   re   ra   rT   rT   rT   rU   rN   b   s   

rN   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[   )superrV   xexpected_fit_params)rS   rP   ro   	__class__rT   rU   rV      s    z*MockIncrementalImprovingEstimator.__init__c                 C   s
   | j |v S r[   rn   r^   rT   rT   rU   ra      s    z3MockIncrementalImprovingEstimator._is_training_datac              	   K   s   |  j |jd 7  _ |d | _| jrt| jt| }|rNtdt| d| D ]F\}}|| jv rVt|t|krVtd| dt| dt| dqVd S )Nr   zExpected fit parameter(s) z
 not seen.zFit parameter z has length z; expected .)	rQ   rX   rn   ro   setAssertionErrorlistitemsrM   )rS   r_   yparamsmissingkeyvaluerT   rT   rU   partial_fit   s&    
z-MockIncrementalImprovingEstimator.partial_fit)N)N)rh   ri   rj   rk   rV   ra   r}   __classcell__rT   rT   rp   rU   rl   }   s   rl   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[   )rR   param)rS   r   rT   rT   rU   rV      s    z#MockEstimatorWithParameter.__init__c                 C   s   || _ |jd | _| S rO   rW   rY   rT   rT   rU   rZ      s    zMockEstimatorWithParameter.fitc                 C   s   t d S r[   r\   r^   rT   rT   rU   r`      s    z"MockEstimatorWithParameter.predictNc                 C   s   |  |r| jS d| j S )N   )ra   r   )rS   r_   rx   rT   rT   rU   re      s    z MockEstimatorWithParameter.scorec                 C   s
   || j u S r[   rf   r^   rT   rT   rU   ra      s    z,MockEstimatorWithParameter._is_training_data)r   )NNrg   rT   rT   rT   rU   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   rm   rZ   rY   rp   rT   rU   rZ      s    z)MockEstimatorWithSingleFitCallAllowed.fitc                 C   s   t d S r[   r\   r^   rT   rT   rU   r`      s    z-MockEstimatorWithSingleFitCallAllowed.predict)rh   ri   rj   rk   rZ   r`   r~   rT   rT   rp   rU   r      s   r   c                	   @   sH   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)rS   r   r   rT   rT   rU   rV      s    zMockClassifier.__init__Nc                 C   s`  || _ || _|	| _|
dur"|
|  | jr8|t|d}|jdkrP| jsPtd|dur|jd |jd ksJ d	|jd |jd |dur|jd tt
tksJ d	|jd tt
t|durd}|jd |jd ksJ |	|jd |jd |durPd	}|jtjksPJ |	|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
ValueErrorrX   formatnpuniquerx   Pclasses_)rS   r_   rd   sample_weightclass_priorsparse_sample_weightsparse_paramr   r   r   callbackfmtrT   rT   rU   rZ      sL    

zMockClassifier.fitc                 C   s&   | j r|t|d}|d d df S )Nr   r   )r   r   r   rS   TrT   rT   rU   r`     s    zMockClassifier.predictc                 C   s   |S r[   rT   r   rT   rT   rU   predict_proba	  s    zMockClassifier.predict_probac                 C   s   ddt | j  S )N      ?r   )r   absr   rc   rT   rT   rU   re     s    zMockClassifier.scorec                 C   s   | j | jdS )Nr   r   )rS   deeprT   rT   rU   
get_params  s    zMockClassifier.get_params)r   F)	NNNNNNNNN)NN)F)
rh   ri   rj   rk   rV   rZ   r`   r   re   r   rT   rT   rT   rU   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 ]}||_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    n1 sf0    Y  d S )Ni
   r   c                 S   s
   t | tS r[   
isinstancerv   rr   rT   rT   rU   <lambda>5      z&test_cross_val_score.<locals>.<lambda>check_Xr   cvcheck_yT)r   Fraiseerror_score)r   r_   ranger   r-   y2rJ   re   r   column_stackrE   tolistnewaxispytestraisesr   )r   clfX_sparser   scoresmultioutput_y
list_checkX_3drT   rT   rU   test_cross_val_score  s0    



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.   )r_   rx   r   gridrT   rT   rU   test_cross_validate_many_jobsF  s    
r   c                  C   sT  t dd\} }t }d}tjt|d, t|| |ttttfd W d    n1 sX0    Y  tjt|d& t|| |ttfd W d    n1 s0    Y  tjt|d d  t|| |dd W d    n1 s0    Y  tjt|d d  t|| |d	d W d    n1 s"0    Y  tjt|d( t|| |ttggd W d    n1 sj0    Y  tjtd
d" t|| |t	 d W d    n1 s0    Y  tt
}dtj d}tjt|d  t|| ||d W d    n1 s0    Y  tjt|d$ t|| |d|id W d    n1 sF0    Y  d S )Nr   random_statez.*must be unique strings.*matchscoringzEmpty list.*rT   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)r_   rx   	estimatorerror_message_regexpZmulticlass_scorerwarning_messagerT   rT   rU   )test_cross_validate_invalid_scoring_paramP  s:    $4.0820r   c                  C   sf   t dd\} }tdt fdt fg}t|| |dd}|d }t|tsLJ tdd |D sbJ d S )	NTr   imputer
classifier)return_estimatorr   c                 s   s   | ]}t |tV  qd S r[   )r   r:   ).0r   rT   rT   rU   	<genexpr>  r   z7test_cross_validate_nested_estimator.<locals>.<genexpr>)r   r:   r   r   r.   r   rv   all)r_   rx   ZpipelineresultsZ
estimatorsrT   rT   rU   $test_cross_validate_nested_estimator  s    r   
use_sparseFTcsr_container)r   c              	   C   s  t  }tddd\}}tdd}tddd\}}tddd}| rP||}||}|||f|||ffD ]6\}	}
}t|dd}t|d	d}g }g }g }g }g }||	|
D ]\}}t||	| |
| }|	|||	| |
|  |	|||	| |
|  |	|||	| |
|  |	|||	| |
|  |	| qt
|}t
|}t
|}t
|}t
|}|||||f}t||	|
|| t||	|
|| qdd S )
N   r   	n_samplesr   r   linearkernelr   neg_mean_squared_errorr   r2)r&   r   r   r   r=   r   splitr	   rZ   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   r_   rx   estZ
mse_scorerZ	r2_scorertrain_mse_scorestest_mse_scorestrain_r2_scorestest_r2_scoresfitted_estimatorstraintestr   rT   rT   rU   test_cross_validate  sH    
 




r   c              	   C   sz  |\}}}}}	dD ]\}
}|
rBt | ||dd|d}t|d | nt | ||dd|d}t|tsdJ t||kstJ t|d | |
rt | ||dgd|d}t|d	 |d nt | ||dgd|d}t|tsJ t||ksJ t|d
 | qt | ||dd|d}t|d D ]b\}}|j }t|r6|	 }|	| j }t|rV|	 }t
|| t
|j|	| j qd S )N))Tr   )Fr   r   Tr   return_train_scorer   train_scoreF
test_scorer   train_r2test_r2)r   r   r   r   )r.   rI   r   r   r   	enumerateZcoef_copyr   toarrayrH   Z
intercept_)r   r_   rx   r   r   r   r   r   r   r   r   Zdict_lenZmse_scores_dictZr2_scores_dictkr   Zest_coefZfitted_est_coefrT   rT   rU   r     sh    



r   c              
   C   s  |\}}}}}	dd }
dt tdd|
f}h d}|ddh}dD ]T}|D ]H}|rt| |||d	|d
}t|d | t|d | nt| |||d|d
}t|tsJ t| |r|n|ksJ t|d | t|d | t|d t	j
sJ t|d t	j
sJ t|d t	j
s$J t|d t	j
s:J t	|d dksRJ t	|d dk sjJ t	|d dksJ t	|d dk sNJ qNqDd S )Nc                 S   s"   |  |}t||t|| dS )Nr   r   )r`   r!   r   )r   r_   rx   y_predrT   rT   rU   custom_scorer  s    

z8check_cross_validate_multi_metric.<locals>.custom_scorerr	  r   >   
score_timetest_neg_mean_squared_errorfit_timer  r  Ztrain_neg_mean_squared_error)TFTr   Fr  r  r  r  r   r   )r   r!   unionr.   rI   r   r   rt   keysr   Zndarrayr   )r   r_   rx   r   r   r   r   r   r   r   r  Zall_scoringZkeys_sans_trainZkeys_with_trainr   r   
cv_resultsrT   rT   rU   r     s^    	



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 sr0    Y  tjt|d  t
|| ||d	 W d    q:1 s0    Y  q:d S )
N   r   r   r   	n_classesr   r   r   z*The 'groups' parameter should not be None.r   )r   r_   rx   r   )r   r=   r'   r)   r$   r%   r   r   r   r-   r,   )r_   rx   r   Z	group_cvserror_messager   rT   rT   rU   #test_cross_val_score_predict_groups[  s    
.r  c                     s   t t fg} z"ddlm}m} | ||f W n ty>   Y n0 | D ]N\  tt }} fdd}fdd}t||d}t	|||dd qDd S )	Nr   	DataFrameSeriesc                    s
   t |  S r[   r   rr   InputFeatureTyperT   rU   r   ~  r   z-test_cross_val_score_pandas.<locals>.<lambda>c                    s
   t |  S r[   r  rr   
TargetTyperT   rU   r     r   r   r   r   r   )
rF   pandasr  r  r   ImportErrorr_   r   rE   r-   typesr  r  X_dfy_sercheck_dfcheck_seriesr   rT   r  r  rU   test_cross_val_score_pandasq  s    
r*  c                  C   s   t dd} t }|j|j }}td}t| |||d}td}g }|||D ]J\}}tjt	|t
d}	tjt	|t
d}
d|	|< d|
|< |||f qNt| |||d}t|| d S )Nr   r  r   r   dtyper   )r=   r   datatargetr&   r-   r   r   zerosr   boolr   rJ   )svmirisr_   rx   ZkfoldZscores_indicesZcv_masksr   r   Z
mask_trainZ	mask_testZscores_masksrT   rT   rU   test_cross_val_score_mask  s    
r3  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 s0    Y  t	
t  t| | | W d    n1 s0    Y  d S )NZprecomputedr  r   c                 S   s   t | |jS r[   )r   dotr   )rn   rx   rT   rT   rU   r     r   z2test_cross_val_score_precomputed.<locals>.<lambda>)r=   r   r-  r.  r   r4  r   r-   rI   r   r   r   r   )r1  r2  r_   rx   Zlinear_kernelZscore_precomputedZscore_linearZscore_callablerT   rT   rU    test_cross_val_score_precomputed  s     




*r5  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   rX   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_STRrT   rU   assert_fit_params  s    z:test_cross_val_score_fit_params.<locals>.assert_fit_paramsr   )r   r   r   r   r   r   r   r   ry   )r   r_   rX   r   r   r   rx   r   eyeobjectonesfullr-   r   )r   r   r   r  ZW_sparseZP_sparser9  
fit_paramsrT   r8  rU   test_cross_val_score_fit_params  s*    
$	
r@  c                     s~   t  } g   fdd}tjdd* t|}t| tt|dd}W d    n1 sR0    Y  t|g d t dkszJ d S )Nc                    s     | |f dS )Nr   )r   )y_testZ	y_predictZ_score_func_argsrT   rU   
score_func  s    z3test_cross_val_score_score_func.<locals>.score_funcTrecordr   )r   r   )r   r   r   )	r   warningscatch_warningsr   r-   r_   rx   rJ   r   )r   rC  r   re   rT   rB  rU   test_cross_val_score_score_func  s    0rH  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   rI  rI  r   r   accuracyr   Zf1_weighted)r   r=   r-   r-  r.  rI   )r2  r   r   Z	zo_scoresZ	f1_scoresrT   rT   rU   3test_cross_val_score_with_score_func_classification  s    
rK  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?rI  rI  gGz?gq=
ףp?r   r   r   r   )g(\؇gzGIgGz&qg\(qg)\G)r   r   r-   rI   r   r   r   r   )	r_   rx   r   r   Z	r2_scoresZneg_mse_scoresZexpected_neg_mser   Z	ev_scoresrT   rT   rU   /test_cross_val_score_with_score_func_regression  s    rN  c              
   C   s  t  }|j}| |}|j}tdd}td}t|||d|dd\}}}	|dksRJ t|	dd	 t|||d|dt|j	d
d\}
}}|
|ksJ ||	ksJ tdd}td}t|||d|dt|j	d
d\}
}}|
|ksJ ||	ksJ dd }t
|}t|||d||d
d\}}}	t|dd t|	dd ttt|d}t|||d|dd\}}}	|dk snJ |	dks|J d S )Nr   r  r   r   rJ  )n_permutationsr   r   g?        r   r   )rO  r   r   groupsr   c                 S   s"   | |k  | |k   | jd  S rO   )sumrX   )Zy_truer
  rT   rT   rU   custom_score?  s    z,test_permutation_score.<locals>.custom_scored   )rO  r   r   r   g(\?g{Gz?r   r   皙?)r   r-  r.  r=   r+   r0   rH   r   r=  sizer   modaranger   )r   r2  r_   r   rx   r1  r   re   r   ZpvalueZscore_group_Zpvalue_groupZ
svm_sparseZ	cv_sparserS  scorerrT   rT   rU   test_permutation_score  sd    




r[  c                  C   st   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   r+  r   r   r   r   r   r   mean)ZstrategyZmissing_valuesr   )r   rX  float64r   r   repeatrX   r:   r   r   r0   r_   rx   prT   rT   rU   &test_permutation_test_score_allow_nansT  s    rc  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 sj0    Y  d
}tjt	|d	* t|| |dt 
did W d    n1 s0    Y  t|| |dt 
did d S )NrT  r   r   r   r   TZexpected_sample_weight#Expected sample_weight to be passedr   /sample_weight.shape == \(1,\), expected \(8,\)!r   r:  )r   rX  r   r   rE   r   r   ru   r0   r   r=  r_   rx   r   err_msgrT   rT   rU   "test_permutation_test_score_paramsb  s    
*8ri  c                  C   st   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 r\  )r   rX  r_  r   r   r`  rX   r:   r   r   r-   ra  rT   rT   rU   test_cross_val_score_allow_nansq  s    rj  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   ro  r         ?)r   r   r8   r   r    r-   rH   )	r_   rx   r   Zscoring_microZscoring_macroZscoring_samplesZscore_microZscore_macroZscore_samplesrT   rT   rU   test_cross_val_score_multilabel  s4    >
rq  c                 C   s  t dd\}}t }t }t|}|||D ].\}}||| ||  ||| ||< q0t||||d}t	|| t|||}t
|t
|ksJ t }t||||d}t
|t
|ksJ | }	|	|	t|	k9 }	| |	}	t||	|}t	t
|t
| ttdd|}t
|t
|ks*J G dd d}
tt" t||||
 d W d    n1 sl0    Y  tdd\}}d}tjt|d	, ttd
d||dtdd W d    n1 s0    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   s0   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   )rS   r_   rx   rQ  irT   rT   rU   r     s    z+test_cross_val_predict.<locals>.BadCV.split)NN)rh   ri   rj   r   rT   rT   rT   rU   BadCV  s   ru  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   rZ   r`   r,   rI   r   r(   r  Zmedianr
   r   r   r   r   r   RuntimeWarningr   )r   r_   rx   r   r   Zpreds2r   r   predsZXspru  r   rT   rT   rU   test_cross_val_predict  sF    

2r}  c                  C   sp  t dddd\} }ttdd| |dd}|jd	ks6J td
d\} }ttdd| |dd}|jdkshJ | d d } |d d }d}tjt|d( tt | |dt	dd W d    n1 s0    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    n1 sb0    Y  d S )Nr   2   r   r  r   r   rv  rw  decision_functionrz  )r~  Tr      r   rT  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   ry  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   rz  )r   r,   r   rX   r   r   r   r   r   r&   r   r=   r   argsort)r_   rx   r|  r  r   indr   rT   rT   rU   .test_cross_val_predict_decision_function_shape  s8    $
r  c                  C   sl   t dddd\} }ttdd| |dd}|jd	ks6J td
d\} }ttdd| |dd}|jdkshJ d S )Nr   r~  r   r  rv  rw  r   r  r~  r   Tr   r  r   r,   r   rX   r   r_   rx   r|  rT   rT   rU   *test_cross_val_predict_predict_proba_shape
  s    r  c                  C   sl   t dddd\} }ttdd| |dd}|jd	ks6J td
d\} }ttdd| |dd}|jdkshJ d S )Nr   r~  r   r  rv  rw  predict_log_probar  r  Tr   r  r  r  rT   rT   rU   .test_cross_val_predict_predict_log_proba_shape  s    r  c                 C   sb  t  }|j|j }}| |}t||d d d g}tddd}t|||}|jdksZJ t|||}|jdkstJ t|||}t|jd t|||}t|jd dd }t	|d	}t||
 |
 }t	|d
}t|||
 }ttdd|
 |
 dd}ttdd||
 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   s
   t | tS r[   r   rr   rT   rT   rU   r   C  r   z4test_cross_val_predict_input_types.<locals>.<lambda>r   r   rv  rw  r  r  c                 S   s
   | j dkS )Nr   )r   rr   rT   rT   rU   r   Z  r   )r   r-  r.  r   r   r   r,   rX   rJ   rE   r   r   r   )r   r2  r_   rx   r   r   r   predictionsr   r   Zcheck_3drT   rT   rU   "test_cross_val_predict_input_types*  sF    


r  c                     s   t t fg} z"ddlm}m} | ||f W n ty>   Y n0 | D ]N\  tt }} fdd}fdd}t||d}t	|||dd qDd S )	Nr   r  c                    s
   t |  S r[   r  rr   r  rT   rU   r   l  r   z/test_cross_val_predict_pandas.<locals>.<lambda>c                    s
   t |  S r[   r  rr   r  rT   rU   r   m  r   r   r   r   )
rF   r!  r  r  r   r"  r_   r   rE   r,   r#  rT   r)  rU   test_cross_val_predict_pandas`  s    
r  c                  C   s   t ddddddd\} }d|d< tddd}tdd}t|| |\}}t|| ||d	d
}||d  d dkstJ t||d  d d df dksJ t||d  d d ddf dksJ t||d  dksJ t|j	ddt
|jdd d S )NrT  r   r   r   )r   rL  n_redundantrM  n_clusters_per_classr   rv  r   rx  r  r   r  Zaxis   )decimal)r   r   r+   rv   r   r,   r   r   rI   rR  r=  rX   )r_   rx   r   r   r   r   Z
yhat_probarT   rT   rU   !test_cross_val_predict_unbalancedr  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 )	Nr7  rT  r   r   r`   )rx   r   rz  r   r   )r   r   randomRandomStaterandr,   rG   )Zmock_classifierrngr_   Zy_hatZy_hat_probarT   rT   rU   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   )ry   r   )
r   r-  r.  r   r   r;  rX   r-   rJ   r=  )r   r2  r_   rx   r   r?  r   rT   rT   rU   &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 s0    Y  t|dkrt	d|d j
 |jdksJ |	jdksJ |
jdksJ |jdksJ t|tddd t|jddtddd t|	jddtddd |
jdksNJ |jdks^J tjdd	<}t|||t|| dtddd|d\}}}W d    n1 s0    Y  t|dkrt	d|d j
 t|| t||	 q:d S )Nr   r   r   r   r   r   rL  rM  r  r  r  r   FTTrD  r  皙?r   r   )r   rQ   rD   Zreturn_timesUnexpected warning: %r)r   r   r  r  ffffff?r_  r  r   )r   rQ   rD   )r   rN   rF  rG  r/   r&   r   linspacer   RuntimeErrormessagerX   rJ   rI   r^  r,  r5   )r   r  r_   rx   r   shuffle_trainwrQ   train_scorestest_scoresZ	fit_timesZscore_timesZtrain_sizes2Ztrain_scores2Ztest_scores2rT   rT   rU   test_learning_curve  sl    
	

,
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   )rx   r   rQ   r  r  )r   rN   r/   r   r  rJ   rI   r^  r_   rY  r   rQ   r  r  rT   rT   rU    test_learning_curve_unsupervised  s     
	r  c               	   C   s   t dddddddd\} }td}tj}t t_z6t|| |ddd\}}}W tj }tj  |t_ntj }tj  |t_0 d	|v sJ d S )
Nr   r   r   r   r  r  r   )r   verbosez[learning_curve])r   rN   sysstdoutr   r/   getvalueclose)r_   rx   r   Z
old_stdoutrQ   r  r  outrT   rT   rU   test_learning_curve_verbose  s.    
	




r  c               	   C   s`   t dddddddd\} }td}tt  t|| |dd W d    n1 sR0    Y  d S )Nr   r   r   r  T)exploit_incremental_learningr   rN   r   r   r   r/   r_   rx   r   rT   rT   rU   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 ]v}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  rQ   rD   r  r  r   rl   r/   r   r  rJ   rI   r^  )r_   rx   r   r  rQ   r  r  rT   rT   rU   (test_learning_curve_incremental_learning  s.    
		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   )rx   r   r  rQ   r  r  r  r  rT   rT   rU   5test_learning_curve_incremental_learning_unsupervised3  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  rU  r   r   Fmax_itertolrD   r   T)rQ   r   r  )r   rQ   r  r  )r   r   r  r   r/   rJ   rI   r^  )
r_   rx   rQ   r   train_sizes_inctrain_scores_inctest_scores_inctrain_sizes_batchtrain_scores_batchtest_scores_batchrT   rT   rU   <test_learning_curve_batch_and_incremental_learning_are_equalK  sD    
		
r  c               	   C   sj  t dddddddd\} }td}tt& t|| |dddgd W d    n1 sX0    Y  tt& t|| |dd	d
gd W d    n1 s0    Y  tt& t|| |dddgd W d    n1 s0    Y  tt& t|| |dddgd W d    n1 s0    Y  tt& t|| |dddgd W d    n1 s\0    Y  d S )Nr   r   r   r   r  r  r   r   rQ   rP  r   r  g?   r  r  rT   rT   rU   0test_learning_curve_n_sample_range_out_of_boundsr  s(    
	4446r  c                  C   s   t dddddddd\} }td}d}tjt|d2 t|| |dtdd	dd
\}}}W d    n1 sl0    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   rN   r   r   r{  r/   r   r  rJ   )r_   rx   r   r   rQ   rY  rT   rT   rU   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   rN   r&   r/   r   r  rJ   rI   r^  )r_   rx   r   r   rQ   r  r  rT   rT   rU   (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
2 t|| ||dt ddd|d!d" W d    n1 s>0    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   rr  rs     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   rQ   rQ  rD   r   r  )ro  r  Iq?)r  rp  rp  r   )r   r   rQ   rQ  r   )r   r   rQ   rQ  rD   r   r  )r   r   r   r$   r/   r  rI   r^  r   r   r   )r_   rx   rQ  r   r   r  r  r  r  r  r  rT   rT   rU    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 sn0    Y  d}tjt	|d	, t|| |d
dt 
did W d    n1 s0    Y  t|| |d
dt 
did d S )NrT  r   r   r   r   Trd  re  r   r   r   z/sample_weight.shape == \(1,\), expected \(2,\)!r   )r   ry   )r   rX  r   r   rE   r   r   ru   r/   r   r=  rg  rT   rT   rU   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	0 t|| |d
dtddddd W d    n1 sn0    Y  d}tjt|d	< t|| |d
dtdddddtd
id W d    n1 s0    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  rQ   r   z2Fit parameter sample_weight has length 3; expected)r   r  rQ   r   ry   )	r   rl   r   r   ru   r/   r   r  r=  )r_   rx   r   rh  rT   rT   rU   /test_learning_curve_incremental_learning_params  sV    
	$
$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 sd0    Y  t|dkrtd
|d j	 t
|jdd| t
|jddd|  d S )Nr   r   r   r  r   TrD  r   
param_nameparam_ranger   r  r  )r   r   r  rF  rG  r1   r   r   r  r  rI   r^  )r_   rx   r  r  r  r  rT   rT   rU   test_validation_curveD  s.    
	(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  r1   r   )r_   rx   r  rY  rT   rT   rU   %test_validation_curve_clone_estimator_  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 )NrT  r   r   r   r   r   r   )r  r  rU  rU  r  r  )r   r   r   r   r   Tr  rD   r  )
r   r1   r=   r5   rI   r   Zvsplithstackr&   r   )r   r  r_   rx   Zscores1Zscores2Zscores3rT   rT   rU   +test_validation_curve_cv_splits_consistencyu  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 sv0    Y  d}tjt	|d	4 t|| |d
g dddt 
did W d    n1 s0    Y  t|| |d
g dddt 
did d S )NrT  r   r   r   r   Trd  re  r   Z	foo_param)r   r   r   r   )r  r  r   rf  r   )r  r  r   ry   )r   rX  r   r   rE   r   r   ru   r1   r   r=  rg  rT   rT   rU   test_validation_curve_params  sB    
$	$	r  c                  C   sv   t jd} t d}| | t|ds.J tt |ddrDJ d|d< t|drZJ tt |dfdrrJ d S )Nr   rT     )r   r  r  rX  rD   r2   deleter  )r  rb  rT   rT   rU   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   r7   r=   r,   r  rI   )r   r_   rx   r   Zy_sparseZclassifr|  Zpreds_sparserT   rT   rU   (test_cross_val_predict_sparse_prediction  s    
r  c           
   	   C   s   t ddd}|jdkr6|dkr(t|fn
t|df}n|j}t|}|||D ]6\}}t| || || } t	| ||| ||< qR||d |d |
dfD ]}	tt| ||	||d| qd	S )
z@Helper for tests of cross_val_predict with binary classificationr   Fr  r   r  r   strry  N)r&   r   r   rX   r   r/  r   r	   rZ   getattrastyperG   r,   )
r   r_   rx   rz  r   	exp_shapeexpected_predictionsr   r   tgrT   rT   rU   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 ]P\}
}t
| ||
 |	|
 } t| ||| }t|	|
 }||t||< qj||d	 |d
 |dfD ]}tt| ||||d| qdS )zDHelper for tests of cross_val_predict with multiclass classificationr   Fr  r   r  r  r   r+  TZreturn_inverser   r   r  ry  N)r&   r   finfor_  minr>  r   rt   r   r   r	   rZ   r  ix_r  rG   r,   )r   r_   rx   rz  r   	float_mindefault_valuesr  rY  y_encr   r   
fold_predsZ
i_cols_fitr  rT   rT   rU   "check_cross_val_predict_multiclass  s&    r  c                    s  t ddd}ttjj}||dd} jd }g }t|D ]`}	tt dd|	f }
|
dkrt|d	krtt|f}nt||
f}|	tj
||| tjd
 q< fddt jd D }tj|dd}|||D ]\}}t| || || } t| ||| }t|D ]^}	t|| dd|	f }||	 jdkrN||	 ||	 |< nt||}||	 ||	 |< qqԈ  d  d  dfD ]T}t| ||||d}t|t|ksJ tt|D ]}t|| ||  qqd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  r+  c                    s8   g | ]0}t j d d |f ddd d d t jf qS )NTr  r   )r   r   r   )r   rt  rx   rT   rU   
<listcomp>6  s   z6check_cross_val_predict_multilabel.<locals>.<listcomp>r  r  ry  )r&   r   r  r_  r  rX   r   r   rt   r   r>  Zconcatenater   r	   rZ   r  r   r   r  r  r,   rG   )r   r_   rx   rz  r   r  r  	n_targetsZexpected_predsZi_colZn_classes_in_labelr  Z
y_enc_colsr  r   r   r  Z	fold_colsidxr  Zcv_predict_outputrt  rT   r  rU   "check_cross_val_predict_multilabel  sD    

r  c                 C   s,   t ddd\}}dD ]}t| ||| qd S )Nr   r   )r  r   r  r   r  )r   r  )r   r_   rx   rz  rT   rT   rU   *check_cross_val_predict_with_method_binaryO  s    r   c                 C   sB   t  }|j|j }}t||dd\}}dD ]}t| ||| q*d S )Nr   r   r  )r   r-  r.  rD   r  )r   r2  r_   rx   rz  rT   rT   rU   .check_cross_val_predict_with_method_multiclassW  s
    r  c                   C   s    t tdd ttdd d S )Nrv  rw  )r   r   r  rT   rT   rT   rU   "test_cross_val_predict_with_method_  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   r-  r.  rD   r   r  )r2  r_   rx   rz  r   rT   rT   rU   &test_cross_val_predict_method_checkingf  s    r  c                  C   s`   t  } | j| j }}t||dd\}}ttddddddgid	d
}dD ]}t|||| qHd S )Nr   r   r7  rv  r  r   r  r   r   r   r  )r   r-  r.  rD   r#   r   r  )r2  r_   rx   r   rz  rT   rT   rU   /test_gridsearchcv_cross_val_predict_with_methodq  s    r  c                  C   sL   d} d}t | d|ddd\}}ttddd	}d
D ]}t||||d q2d S )NrT  r   r   r   r7  r   r  r  rL  r   rv  r   )rx  r   )r   r  r  )r   r7   r   r  )Zn_sampr  r_   rx   r   rz  rT   rT   rU   1test_cross_val_predict_with_method_multilabel_ovr|  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   r6  )r   rb  rT   rT   rU   r    r   z<RFWithDecisionFunction.decision_function.<locals>.<listcomp>)r   r   rv   )rS   r_   ZprobsmsgrT   rT   rU   r    s
    
z(RFWithDecisionFunction.decision_functionN)rh   ri   rj   r  rT   rT   rT   rU   r    s   r  c               	   C   s   d} t dd| ddd\}}|d d df  |d d df 7  < d	D ]R}tddd
}t * td t||||d W d    qB1 s0    Y  qBd S )Nr   rT  r   r   r7  r  r   r   r   r  r  Zn_estimatorsr   ignorer  )r   r  rF  rG  simplefilterr  )r  r_   rx   rz  r   rT   rT   rU   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}dD ]D}t ( td	 t	|||| W d    q81 sr0    Y  q8d S )
Nr   r   )r  r   rV  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rv  rw  r	  r  )
r   r  r  normalr   r   rF  rG  r  r  )r  r_   rx   r   rz  rT   rT   rU   -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 ]R}tddd}t * td	 t	||||d
 W d    qH1 s0    Y  qHd S )Nr   r   )r   r   r  r   )r   r  r   r
  r  r  )
r   r  r  r  r   r  rF  rG  r  r  )r  r_   rx   rz  r   rT   rT   rU   ;test_cross_val_predict_with_method_multilabel_rf_rare_class  s    (

r  c                 C   s   t t||g}t||}|| |D ]|\}}	|| | ||  || |	 }
|dkrlt t|	|f}nt t|	|ft |jj	}|
|d d |j
f< |||	< q(|S )Nr   )r   r/  r   r  r   rZ   r>  r  r,  r  r   )r_   rx   r   classesr   rz  r  funcr   r   Zexpected_predictions_Zexp_pred_testrT   rT   rU   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dd}t|| |||d}	t	| |||||}
t
|
|	 t|| |||d}	t	| |||||}
t
|
|	 tt tdddd}t|| |||d}	||}t	| |||||}
t
|
|	 qTd S )Nr]  rT  r   c                 S   s   g | ]}|d  qS )r   rT   )r   rn   rT   rT   rU   r    r   z7test_cross_val_predict_class_subset.<locals>.<listcomp>r   r   r  r   r  rv  rw  ry  r   r   )r   rX  r   r   r   r&   r;   r   r,   r  rI   rD   r`  Zfit_transform)r_   rx   r  Zkfold3Zkfold4lemethodsrz  r   r  r  rT   rT   rU   #test_cross_val_predict_class_subset  s4    





r  c                     sb  t  } | j| j }}t }tjddd}|d |  tj	|j
tjdtj	|j
ddtjd zt||| fd	d
d tt( t|||fdd
d W d    n1 s0    Y  W d\ tdD ]:}zt|j
 W  q^W q ty   td Y q0 qnPd\ tdD ]<}zt|j
 W  q\W n tyV   td Y n0 q0 d S )NwbF)moder  s   Hello world!!!!!r+  rT   r)rX   r  r,  c                    s    S r[   rT   r   r_   rx   )re   rT   rU   r     r   z#test_score_memmap.<locals>.<lambda>r   c                    s    S r[   rT   r  )r   rT   rU   r     r   )NNr   r   )r   r-  r.  r   tempfileNamedTemporaryFilewriter  r   Zmemmapnamer_  r-   r   r   r   r   osunlinkOSErrorr   )r2  r_   rx   r   tfrY  rT   )re   r   rU   test_score_memmap  s4    
8r$  c                     s   t t fg} z"ddlm}m} | ||f W n ty>   Y n0 | D ]^\ t }|j|j }} || }} fdd}fdd}	t	||	d}
t
|
|| qDd S )Nr   r  c                    s
   t |  S r[   r  rr   r  rT   rU   r   *  r   z4test_permutation_test_score_pandas.<locals>.<lambda>c                    s
   t |  S r[   r  rr   r  rT   rU   r   +  r   r   )rF   r!  r  r  r   r"  r   r-  r.  rE   r0   )r$  r  r  r2  r_   rx   r%  r&  r'  r(  r   rT   r)  rU   "test_permutation_test_score_pandas  s    
r%  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f i | W d    n1 s0    Y  | 	 dksJ d S )Nr   r   r   r   r  )
r   r_   rx   rZ  r   r   r  
parametersr?  score_paramsr   r   z%Failing classifier failed as requiredr   rP  )
r6   FAILING_PARAMETERr   rX  r   r   r   r   r3   re   )failing_clfr_   r   r   fit_and_score_argsrT   rT   rU   test_fit_and_score_failing0  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f i |}|d |d ksxJ d S )Nr   r   r   r   r   rT  r  )r  r  T)r   r_   rx   rZ  r   r   r  r&  r?  r'  Zreturn_parametersr&  )r   r=   nextr*   r   r   r3   )r_   rx   r   r   r   r*  resultrT   rT   rU   test_fit_and_score_workingK  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)rS   r1  rT   rT   rU   rV   b  s    z'DataDependentFailingClassifier.__init__c                 C   s&   || j k }|r"td| dd S )NzClassifier fit failed with z values too high)r1  rR  r   )rS   r_   rx   Znum_values_too_highrT   rT   rU   rZ   e  s
    
z"DataDependentFailingClassifier.fitc                 C   s   dS )NrP  rT   rc   rT   rT   rU   re   l  s    z$DataDependentFailingClassifier.score)N)N)NN)rh   ri   rj   rV   rZ   re   rT   rT   rT   rU   r/  a  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    n1 s0    Y  d S )Nrs  r0  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   rX  r=  recompileDOTALLr   r   r   r.   )r   r)  r_   rx   cross_validate_argscross_validate_kwargsindividual_fit_error_messager   rT   rT   rU   -test_cross_validate_some_failing_fits_warningp  s"    



	r;  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    n1 s0    Y  d S )
Nr   r   r  rr  r2  z1ValueError: Failing classifier failed as requiredz4All the 7 fits failed.+your model is misconfigured.+r3  r   )r6   r(  r   rX  r=  r5  r6  r7  r   r   r   r.   )r   r)  r_   rx   r8  r9  r:  r  rT   rT   rU   *test_cross_validate_all_failing_fits_error  s    



r<  c                 C   s   t |d S r[   )r   )r   r_   rx   	error_msgrT   rT   rU   _failing_scorer  s    r>  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    q1 sp0    Y  nVd|  }tj	t
|d. t|||d	|| d
}t||  W d    n1 s0    Y  d S )NTr   r   r  "This scorer is supposed to fail!!!r=  r   r   r   )r   r   r   r   )r   r   rZ   r   r>  r   r   r   r-   r   r   rG   )r   r_   rx   r   r=  failing_scorerwarning_msgr   rT   rT   rU   #test_cross_val_score_failing_scorer  s$    &rD  r   with_multimetricc              
   C   s8  t dd\}}tdd||}d}tt|d}|rJtt}|||d}	n|}	| dkrtjt	|d	& t
|||d
|	|| d W d    n1 s0    Y  nd|  }
tjt|
d	n t
|||d
|	|| d}|D ]B}d|v rd|v r|| D ]}t|tsJ qqt|| |  qW d    n1 s*0    Y  d S )NTr   r   r?  r@  rA  )Zscore_1Zscore_2Zscore_3r   r   r   )r   r   r   r   r   r4   Z_score_2)r   r   rZ   r   r>  r   r   r   r   r   r.   r   r   r   rb   rG   )r   r   rE  r_   rx   r   r=  rB  Znon_failing_scorerr   rC  r   r{   rt  rT   rT   rU   "test_cross_validate_failing_scorer  sT    &	
rF  c                 C   s   dS )Ng;pΈ^@rT   )rt  jr  rT   rT   rU   three_params_scorer	  s    rH  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f i | |  \}}|d}t|dkrt	
||d	 sJ nt	
||d sJ d S )
Nr   r   r   r   r   )r   r_   rx   rZ  r   r   r  r&  r?  r'  r   Zsplit_progressZcandidate_progress
r   r   )r   r=   r,  r*   r   r   r3   Z
readouterrr   r5  r   )Zcapsysr  rZ  r  Z	split_prgZcdt_prgexpectedr_   rx   r   r   r   r*  r  rY  ZoutlinesrT   rT   rU   test_fit_and_score_verbosity		  s0    '
rL  c               	   C   sT   d} dd }t jt| d& td d d |d tjd W d    n1 sF0    Y  d S )Nz&scoring must return a number, got Nonec                 S   s   d S r[   rT   )r   X_testrT   rT   rU   two_params_scorerP	  s    z%test_score.<locals>.two_params_scorerr   )r   rM  rA  rZ  r'  r   )r   r   r   r4   r   r   )r  rN  rT   rT   rU   r  M	  s    r  c                  C   sj   dd } t dddd\}}tdd}||| t|||d| d	}g d
}|D ]}d||v sNJ qNd S )Nc                 S   s2   |  |}t||}|d |d |d |d dS )N)r   r   rI  )r   r   )r   r   tnfpfntp)r`   r   )r   r_   rx   r
  cmrT   rT   rU   r  _	  s    

zPtest_callable_multimetric_confusion_matrix_cross_validate.<locals>.custom_scorer(   r   r7  )r   rL  r   r   r   )r   r   rO  ztest_{})r   r>   rZ   r.   r   )r  r_   rx   r   r  Zscore_namesr  rT   rT   rU   9test_callable_multimetric_confusion_matrix_cross_validate^	  s    
rV  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.
    r7  r   Tr   )r  r   N)r   r/   r9   )r_   rx   rT   rT   rU   *test_learning_curve_partial_fit_regressorsn	  s    rW  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|0    Y  t	dD ]0}	t
||	  sJ t
||	  sJ qt	d|jd D ]0}	t
||	  rJ t
||	  rJ qd
S )zKChecks for fit failures in `learning_curve` and raises the required warningr   r   r   F)r   r  rM  rD   r   z#10 fits failed out of a total of 25r   r   r2  Nr   r   )r   r   r  r=   r   r   r   r/   r   r   isnanr   rX   any)
global_random_seedr_   rx   Z
sorted_idxZsvcr   rY  r  r  r  rT   rT   rU   -test_learning_curve_some_failing_fits_warningy	  s*    
	
,r[  c                 C   s  t dd\}}t|}t }tdd| d}t||||ddd}d|vsJJ t||||ddd}d|v sjJ |d d	 }|d d
 }t||jksJ t||jksJ tdd |D d tdd |D d t|	||D ](\}\}	}
t|| |	 t|| |
 qdS )z<Check the behaviour of `return_indices` in `cross_validate`.Tr   r   )r  rD   r   r   F)r   r   Zreturn_indicesindicesr   r   c                 S   s   g | ]
}|j qS rT   r  r   r\  rT   rT   rU   r  	  r   z6test_cross_validate_return_indices.<locals>.<listcomp>rT  c                 S   s   g | ]
}|j qS rT   r  r]  rT   rT   rU   r  	  r   r~  N)
r   r<   r   r&   r.   r   r  rJ   r  r   )rZ  r_   rx   r   r   r  Ztrain_indicesZtest_indicesZ	split_idxZexpected_train_idxZexpected_test_idxrT   rT   rU   "test_cross_validate_return_indices	  s"    r^  zfunc, extra_argsalphar   )r  r  c              	   C   s   t jtdd, | f t ttdi d| W d   n1 s@0    Y  t jtdd, | f t tti i d| W d   n1 s0    Y  dS )z2Check that we warn about deprecating `fit_params`.z`fit_params` is deprecatedr   r   )r   r_   rx   r   r?  Nz1`params` and `fit_params` cannot both be provided)r   r_   rx   r?  ry   )r   r   FutureWarningr?   r_   rx   r   r   r  
extra_argsrT   rT   rU   test_fit_param_deprecation	  s$    
$rc  )Zenable_metadata_routingc                 C   sL   t jtdd* | f t ttg d| W d   n1 s>0    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   r_   rx   rQ  N)r   r   r   r?   r_   rx   ra  rT   rT   rU   #test_groups_with_routing_validation	  s    rd  c                 C   s.   t dddd\}}| f 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
    rT  r   r   r  )r   r_   rx   N)r   r?   )r  rb  r_   rx   rT   rT   rU   test_cross_validate_params_none	  s    re  c              	   C   s\   t d}tjt|d0 | f t tttg dd| W d   n1 sN0    Y  dS )zMCheck that we raise an error when passing metadata that is not
    requested.z8but are not explicitly set as requested or not requestedr   )metadata)r   r_   rx   ry   N)	r5  escaper   r   r   r?   r_   rx   r   )r  rb  rh  rT   rT   rU    test_passed_unrequested_metadata
  s    
rh  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rNt|sNJ |D ]}t|d| jd|
|d qRt|s~J |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   rf  split_groupssplit_metadata)rQ  rf  fit_sample_weightfit_metadatar   r   rJ  )Z	my_scorerrJ  r   )rn  ro  rp  rq  )rk  rl  )r_   rx   r   ry   re   objrz  parentZsplit_paramsr   rf  r   )rs  rz  rt  rQ  rf  rZ   N)rB   r@   Zset_score_requestrA   Zset_split_requestr?   Zset_fit_requestrM   r_   r   r  r  r  randintr.   r   r-   r/   r1   r0   r,   updaterx   r   rC   rh   )r  rb  Zscorer_registryrZ  Zsplitter_registryZsplitterestimator_registryr   r   r  rk  rl  rn  ro  rp  rq  Zscoring_argsry   Z_scorerZ	_splitter
_estimatorrT   rT   rU   !test_validation_functions_routing
  s    











	



	
ry  c               
   C   s   t t} tjd}|| }|| }t }t|djddd}t	|tt
t dt||dd t|slJ |D ]}t|d	d
d||d qpdS )zTest that learning_curve routes metadata to the estimator correctly while
    partial_fitting it with `exploit_incremental_learning=True`.r   ri  rp  rq  rm  T)rp  rq  )r_   rx   r   r  ry   r}   r/   rr  N)rM   r_   r   r  r  r  rB   r?   Zset_partial_fit_requestr/   rx   rA   r   r   rC   )r   r  rp  rq  rw  r   rx  rT   rT   rU   8test_learning_curve_exploit_incremental_learning_routing
  s8    


	rz  )rk   r   r5  r  r  rF  	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   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.   r/   r0   r1   Z#sklearn.model_selection._validationr2   r3   r4   Z$sklearn.model_selection.tests.commonr5   Z)sklearn.model_selection.tests.test_searchr6   Zsklearn.multiclassr7   Zsklearn.neighborsr8   Zsklearn.neural_networkr9   Zsklearn.pipeliner:   Zsklearn.preprocessingr;   r<   Zsklearn.svmr=   r>   Z%sklearn.tests.metadata_routing_commonr?   r@   rA   rB   rC   Zsklearn.utilsrD   Zsklearn.utils._mockingrE   rF   Zsklearn.utils._testingrG   rH   rI   rJ   Zsklearn.utils.fixesrK   rL   Zsklearn.utils.validationrM   rN   rl   r   r   r   r=  r_   r   rx   r   r;  r   markZparametrizer   r   r   r   r0  r   r   r   r  r*  r3  r5  r@  rH  rK  rN  r[  rc  ri  rj  rq  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$  r%  r+  r.  r/  r   r;  r<  r>  filterwarningsrD  rF  rH  rL  r  rV  rW  r[  r^  rc  rd  re  rh  ry  rz  rT   rT   rT   rU   <module>   s   ,DX


(
47BI
#
B
84
5
	='N0.&
4(



=
$
 !
	\