o
    tBh9                 	   @   s  d Z ddlmZmZ ddlmZ ddlmZmZ ddl	m
Z
 ddlZddlZddlmZ ddlZddlZddlmZ ddlZddlmZmZmZmZmZmZmZmZ dd	lm Z m!Z! dd
l"m#Z#m$Z$m%Z% ddl&m'Z'm(Z( ddl&m)Z) ddl*m+Z+ ddl*m,Z, ddl*m-Z- ddl.m/Z/ ddl.m0Z0 ddl.m1Z1 ddl.m2Z2 ddl.m3Z3 ddl.m4Z4 ddl.m5Z5 ddl.m6Z6 ddl.m7Z7 ddl.m8Z8 ddl.m9Z9 ddl.m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@mAZA ddlBmCZC dd lBmDZD dd!lEmFZF dd"lGmHZH dd#lGmIZI dd$lGmJZJ dd%lKmLZL dd&lKmMZM dd'lKmNZN dd(lKmOZO dd)lKmPZP dd*lKmQZQ dd+lKmRZR dd,lSmTZT dd-lUmVZV dd.lWmXZX dd/lYmZZZm[Z[m\Z\ dd0l]m^Z^ dd1l_m`Z` G d2d3 d3ZaG d4d5 d5e@Zbecd6d6gd7d6gd8d8gd9d8ggZdecg d:Zed;d< Zfejghd=e9e
e:d>d?gejghd@deidAfdBdgidgeidCfdBdieidDfgdEdF ZjdGdH ZkdIdJ ZldKdL ZmejghdMe7e8gdNdO ZnedPdQ ZodRdS ZpdTdU ZqdVdW ZrdXdY ZsdZd[ Ztd\d] Zud^d_ Zvd`da Zwdbdc Zxddde Zydfdg Zzdhdi Z{djdk Z|G dldm dme'Z}edndo Z~dpdq Zdrds Zejghdtd6d9gejghdue8e7gdvdw Zdxdy Zdzd{ Zd|d} Zd~d Zedd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejghde7ddd8d>giife8dd8d>gid9dfgdd Zdd Zdd Zdd Zdd Zejghdue8eD ddd>gide7eD ddd>gidgdd Zejghdue8eIddddd>gidde7eIddddd>giddgdd Zdd Zdd Ze dd Zdd Zdd Zdd Zdd Zdd ZG dd de'Zdd Zdd ZddÄ Zddń ZddǄ ZddɄ Zdd˄ Zdd̈́ Zddτ Zddф Zddӄ ZddՄ Zejghdddgejghde7ddd9dgiife8dd9dgid9dfgddڄ Zdd܄ Zddބ Zdd Zdd Zdd Zdd Zdd Zejghdddgdd Zdd Zdd Zejghde7dddgife8de%d8d؃ifgdd Zejghde7dddgife8de%ddifgdd ZejgdejghdMe7e8gejghdeegdd Zejghdddgdd ZdS )zTest the search module    )IterableSized)StringIO)chainproduct)partialN)GeneratorType)assert_array_equalassert_array_almost_equalassert_allcloseassert_almost_equalignore_warningsMinimalClassifierMinimalRegressorMinimalTransformer)CheckingClassifierMockDataFrame)	bernoulliexponuniform)BaseEstimatorClassifierMixin)is_classifier)make_classification)
make_blobs)make_multilabel_classification)train_test_split)KFold)StratifiedKFold)StratifiedShuffleSplit)LeaveOneGroupOut)LeavePGroupsOut)
GroupKFold)GroupShuffleSplit)GridSearchCV)RandomizedSearchCV)ParameterGrid)ParameterSampler)BaseSearchCV)FitFailedWarning)	LinearSVCSVC)DecisionTreeRegressor)DecisionTreeClassifier)KMeans)KernelDensity)LocalOutlierFactor)KNeighborsClassifierf1_score)recall_score)accuracy_score)make_scorer)roc_auc_score)confusion_matrix)r2_score)euclidean_distances)SimpleImputer)Pipeline)RidgeSGDClassifierLinearRegression)HistGradientBoostingClassifier)OneTimeSplitterc                   @   sb   e Zd ZdZdddZdd Zdd Zd	d
 Zdd ZeZ	eZ
eZdddZdddZdd ZdS )MockClassifierz8Dummy classifier to test the parameter search algorithmsr   c                 C   
   || _ d S N	foo_param)selfrF    rH   /var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/model_selection/tests/test_search.py__init__P      
zMockClassifier.__init__c                 C   s$   t |t |ks
J t|| _| S rD   )lennpuniqueclasses_rG   XYrH   rH   rI   fitS   s   zMockClassifier.fitc                 C   s
   |j d S Nr   shape)rG   TrH   rH   rI   predictX   rK   zMockClassifier.predictc                 C   s
   || j  S rD   rE   rG   rQ   rH   rH   rI   	transform[   rK   zMockClassifier.transformc                 C   s
   || j  S rD   rE   rY   rH   rH   rI   inverse_transform^   rK   z MockClassifier.inverse_transformNc                 C   s   | j dkr	d}|S d}|S )N         ?        rE   )rG   rQ   rR   scorerH   rH   rI   r_   e   s
   
zMockClassifier.scoreFc                 C   
   d| j iS NrF   rE   )rG   deeprH   rH   rI   
get_paramsl   rK   zMockClassifier.get_paramsc                 K   s   |d | _ | S ra   rE   )rG   paramsrH   rH   rI   
set_paramso   s   
zMockClassifier.set_params)r   NN)F)__name__
__module____qualname____doc__rJ   rS   rX   rZ   r[   predict_probapredict_log_probadecision_functionr_   rc   re   rH   rH   rH   rI   rB   M   s    


rB   c                   @   s   e Zd ZdZedd ZdS )LinearSVCNoScorez1An LinearSVC classifier that has no score method.c                 C   s   t rD   )AttributeErrorrG   rH   rH   rI   r_   w   s   zLinearSVCNoScore.scoreN)rg   rh   ri   rj   propertyr_   rH   rH   rH   rI   rn   t   s    rn   r\      )r\   r\   rt   rt   c                    s*   t   fddtt D ksJ d S )Nc                    s   g | ]} | qS rH   rH   .0igridrH   rI   
<listcomp>   s    z3assert_grid_iter_equals_getitem.<locals>.<listcomp>)listrangerL   rx   rH   rx   rI   assert_grid_iter_equals_getitem   s   *r}   klass
   n_iterz input, error_type, error_messagez1Parameter .* a dict or a list, got: 0 of type intfooz Parameter .* is not a dict \(0\)z}Parameter (grid|distribution) for parameter 'foo' (is not|needs to be) (a list or a numpy array|iterable or a distribution).*c                 C   s<   t j||d | | W d    d S 1 sw   Y  d S )Nmatch)pytestraises)r~   input
error_typeerror_messagerH   rH   rI   test_validate_parameter_input   s   
"r   c                  C   s  dg di} t | }t|tsJ t|tsJ t|dks J t| ddgg dd}t |}t|dks9J tdD ]}td	d
 |D }|tdd
 t|d |d D ks\J q=t| t i }t|dksmJ t	|i gksvJ t| t
t |d  W d    n1 sw   Y  t dddgii ddgig}t|dksJ t	|ddiddii ddigksJ t| d S )Nr   r\   rt      r      rt   )hamspameggs)r   bar   c                 s   s$    | ]}t tt|  V  qd S rD   )tupler   sorteditemsrv   prH   rH   rI   	<genexpr>   s   " z&test_parameter_grid.<locals>.<genexpr>c                 s   s     | ]\}}d |d|fV  qdS )r   r   NrH   )rv   xyrH   rH   rI   r      s    
r   r\   Cr         ?)r&   
isinstancer   r   rL   r}   r|   setr   r{   r   r   
IndexError)params1grid1params2grid2rw   pointsempty	has_emptyrH   rH   rI   test_parameter_grid   s4   

$r   c                  C   s   t  } t| dg diddd}tj}t t_|tt |t_|jj	dks'J t
|jd jg d |tt |t |t |t d|_tt |tt W d    d S 1 saw   Y  d S )NrF   r   r   cvverbosert   param_foo_paramsklearn)rB   r$   sysstdoutr   rS   rQ   r   best_estimator_rF   r	   cv_results_datar_   rk   rm   rZ   scoringr   r   
ValueError)clfgrid_search
old_stdoutrH   rH   rI   test_grid_search   s    


"r   c                  C   s   t dt fg} dt t gi}t| |dd}|tt |jd }t|d ts+J t|d ts4J t	|d dr=J t	|d drFJ |d |j
usOJ |d |j
usXJ t	|d d drcJ t	|d d drnJ d S )N	regressorrt   r   param_regressorr   r\   coef_)r<   r?   r=   r$   rS   rQ   r   r   r   hasattrr   )pipe
param_gridr   regressor_resultsrH   rH   rI   test_grid_search_pipeline_steps   s   
r   SearchCVc                 C   s  t ddd}t dgd dgd  }tddgd}| |d	g d
iddd}d}tjt|d |j||t 	dd W d    n1 sHw   Y  d}tjt|d |j||t 	dt 
dd W d    n1 spw   Y  |j||t 	dt 
dd d S )Nd   r   r      r\   r   r   )expected_fit_paramsrF   r   rt   raiser   error_scorez0Expected fit parameter\(s\) \['eggs'\] not seen.r   )r   z)Fit parameter spam has length 1; expected)r   r   )rM   arangereshapearrayr   r   r   AssertionErrorrS   oneszeros)r   rQ   r   r   searchererr_msgrH   rH   rI   test_SearchCV_with_fit_params   s    "r   c                  C   s   t dd} tddd\}}g d}tdd}t| d|idd}||| t|d|idd}||| |j|jks<J ||||||ksJJ t|d|i}tjt	d	d
 |dgg W d    d S 1 skw   Y  d S )Nr   random_statert   r   centers皙?r\   r   r   accuracyr   z
no scoringr   r\   )
r*   r   rn   r$   rS   best_params_r_   r   r   	TypeError)r   rQ   r   Csclf_no_scorer   grid_search_no_scorerH   rH   rI   test_grid_search_no_score   s   

"r   c                  C   s   t ddddd\} }tdd}ddgi}t||d d	| |}t||d
d	| |}tt |dd	| |}t||dd	| |}|| |}|| |}	|| |}
|| |}|dk s_J |	dk seJ ||	kskJ t|	| t||
 d S )Nr   rt   皙?r   	n_samples	n_classesflip_yr   r   r   r   r   r   roc_aucr]   )r   r*   r$   rS   rn   r_   r   )rQ   r   r   ry   search_no_scoringsearch_accuracysearch_no_score_method_auc
search_aucscore_no_scoringscore_accuracyscore_no_score_auc	score_aucrH   rH   rI   test_grid_search_score_method  s(   


r   c               	   C   s   t jd} tdddd\}}| ddd}tdd}ddgi}t tdtdd	t	 g}d
}|D ].}t
|||d}	tjt|d |	|| W d    n1 sRw   Y  |	j|||d q1t t g}
|
D ]}t
|||d}	|	|| qhd S )Nr      rt   )r   r   r   r   r   r   r\   n_splitsz*The 'groups' parameter should not be None.r   r   )groups)rM   randomRandomStater   randintr*   r    r!   r"   r#   r$   r   r   r   rS   r   r   )rngrQ   r   r   r   ry   	group_cvs	error_msgr   gsnon_group_cvsrH   rH   rI   test_grid_search_groups/  s,   

r   c                  C   s   t ddd} t dgd dgd  }g d}ttddd|i}|| | t|jj	|j	 tt
 d	d
dgi}|| | t|drIJ ttddd|i}t|drZJ ttddd|idd}|| | t|drsJ d S )Nr   r   r   r   r\   r   r   r   alphar]   g       @rO   F)refit)rM   r   r   r   r$   r*   rS   r	   r   rO   r=   r   )rQ   r   r   r   rH   rH   rI   test_classes__propertyN  s   r   c                  C   sh   t  } t| ddgidd}|tt t|dsJ t| ddgiddd}|tt t|ds2J d S )NrF   r\   r   r   r   r   )r   r   )rB   r$   rS   rQ   r   r   r%   )r   r   random_searchrH   rH   rI   test_trivial_cv_results_attrg  s   r   c               
   C   s  t  } d ddgfD ]N}t| dg diddd}|tt t|ds,t|d	r,t|d
s.J dD ]&}d| d}tjt|d t	||t W d    n1 sQw   Y  q0q	d}dD ](}tjt
|d t| i |ddddtt W d    n1 sw   Y  q\d S )Nr   	precisionrF   r   Fr   r   r   r   best_index_r   )rX   rk   rl   rZ   r[   z`refit=False`. z9 is available only after refitting on the best parametersr   zIFor multi-metric scoring, the parameter refit must be set to a scorer key) r   Trecallr   )accprec)r   r   )rB   r$   rS   rQ   r   r   r   r   ro   getattrr   )r   r   r   fn_namer   r   rH   rH   rI   test_no_refits  s:   
r	  c                  C   sn   t dddd\} }t }t|dddgi}tt || d d | W d    d S 1 s0w   Y  d S )	N   r   r   r   
n_featuresr   r   r   r]      )r   r*   r$   r   r   r   rS   )X_y_r   r   rH   rH   rI   test_grid_search_error  s   "r  c                  C   sr   t dddd\} }dgdgdgd}td	d
}t||}|| | tdddd}|| | t|j|jj d S )Nr
  r   r   r  r]   rbfr   )r   kernelgammaautor  )r   r+   r$   rS   r	   
dual_coef_r   )r  r  
param_dictr   r   rH   rH   rI   test_grid_search_one_grid_point  s   

r  c                  C   sB   t  } d }t| dtddidd}|tt |jjdksJ d S )NrF   r\   r   r   r   rt   )rB   r$   r|   rS   rQ   r   r   rF   )r   r   rH   rH   rI   /test_grid_search_when_param_grid_includes_range  s
   r  c                  C   s  t dddd\} }ddi}tdd}td	}t||}tjt|d
 || | W d    n1 s4w   Y  dg i}t }td}t||}tjt	|d
 || | W d    n1 sbw   Y  ddi}tdd}td}t||}tjt|d
 || | W d    n1 sw   Y  dt
di}t }t||}tt	 || | W d    d S 1 sw   Y  d S )Nr   r   r   r  r   r\   r  r  zParameter grid for parameter 'C' needs to be a list or a numpy array, but got 1 (of type int) instead. Single values need to be wrapped in a list with one element.r   zIParameter grid for parameter 'C' need to be a non-empty sequence, got: []z1,2,3zParameter grid for parameter 'C' needs to be a list or a numpy array, but got '1,2,3' (of type str) instead. Single values need to be wrapped in a list with one element.)r   rt   )r   r+   reescaper$   r   r   r   rS   r   rM   r   )rQ   r   r  r   r   searchrH   rH   rI   test_grid_search_bad_param_grid  sD   





"r  c                  C   s   t dddd\} }t }t|dddgi}|| d d |d d  || dd  }|jj}t| } t }t|dddgi}|| d d 	 |d d  || dd  }|jj}t
||kd	ksiJ ||ksoJ d S )
Nr
  r   r   r  r   r   r]   r  g?)r   r*   r$   rS   rX   r   r   sp
csr_matrixtocoorM   mean)r  r  r   r   y_predr   y_pred2C2rH   rH   rI   test_grid_search_sparse  s   
 r%  c                  C   sP  t dddd\} }t }t|dddgidd	}|| d d
 |d d
  || d
d  }|jj}t| } t }t|dddgidd	}|| d d
 |d d
  || d
d  }|jj}t	|| ||kskJ dd }t
|dd}	t|dddgi|	d	}|| d d
 |d d
  || d
d  }
|jj}||ksJ t	||
 d S )Nr
  r   r   r  r   r   r]   f1r   r  c                 S   s   t | | S rD   r2   )y_true_y_pred_rH   rH   rI   f1_loss  s   z0test_grid_search_sparse_scoring.<locals>.f1_lossF)greater_is_better)r   r*   r$   rS   rX   r   r   r  r  r	   r6   )r  r  r   r   r"  r   r#  r$  r)  F1Lossy_pred3C3rH   rH   rI   test_grid_search_sparse_scoring  s,   

r.  c            	      C   s   t dddd\} }t| d d | d d j}|d d }tdd}t|dd	d
gi}||| |jdks9J t| dd  | d d j}|dd  }||}t	||kdks^J t
t || | W d    d S 1 sww   Y  d S )Nr
  r   r   r  r  precomputedr  r   r   r]   )r   rM   dotrW   r+   r$   rS   best_score_rX   r!  r   r   r   tolist)	r  r  K_trainy_trainr   r   K_testy_testr"  rH   rH   rI   #test_grid_search_precomputed_kernel  s   

"r8  c                  C   sl   t d} t d}tdd}t|dddgi}tt || | W d    d S 1 s/w   Y  d S )N)r      )r   r/  r0  r   r   r]   )	rM   r   r   r+   r$   r   r   r   rS   )r4  r5  r   r   rH   rH   rI   3test_grid_search_precomputed_kernel_error_nonsquare9  s   


"r:  c                   @   s*   e Zd ZdZd	ddZdd Zdd ZdS )
BrokenClassifierz*Broken classifier that cannot be fit twiceNc                 C   rC   rD   	parameterrG   r=  rH   rH   rI   rJ   G  rK   zBrokenClassifier.__init__c                 C   s   t | drJ d| _d S )Nhas_been_fit_T)r   r?  rG   rQ   r   rH   rH   rI   rS   J  s   
zBrokenClassifier.fitc                 C      t |jd S rT   rM   r   rV   rY   rH   rH   rI   rX   N     zBrokenClassifier.predictrD   )rg   rh   ri   rj   rJ   rS   rX   rH   rH   rH   rI   r;  D  s
    
r;  c                  C   sX   t ddd} t dgd dgd  }tt dddgigddd	}|| | d S )
Nr   r   r   r   r\   r=  r   Tr   r   )rM   r   r   r   r$   r;  rS   )rQ   r   r   rH   rH   rI   
test_refitR  s   rE  c                  C   sd   dd } t dddd\}}ttdddg d	id
| d}||| |jdks)J t|dr0J dS )z^
    Test refit=callable, which adds flexibility in identifying the
    "best" estimator.
    c                 S   sr   t dddd\}}ttdddg didd	d
}||| |jdks%J |j D ]}|| v s2J q*| d  S )z
        A dummy function tests `refit=callable` interface.
        Return the index of a model that has the least
        `mean_test_score`.
        r   r   *   r  r   r   {Gz?r   r\   r   TrD  r   mean_test_score)r   r$   r*   rS   r  r   keysargmin)
cv_resultsrQ   r   r   keyrH   rH   rI   refit_callablef  s   
z+test_refit_callable.<locals>.refit_callabler   r   rF  r  r   r   rG  r   rD  r   r2  N)r   r$   r*   rS   r  r   )rN  rQ   r   r   rH   rH   rI   test_refit_callable`  s   
rO  c                  C   sx   dd } t dddd\}}ttdddd	d
gid| d}tjtdd ||| W d   dS 1 s5w   Y  dS )zb
    Test implementation catches the errors when 'best_index_' returns an
    invalid result.
    c                 S      dS )zT
        A dummy function tests when returned 'best_index_' is not integer.
        NrH   rL  rH   rH   rI   refit_callable_invalid_type     zEtest_refit_callable_invalid_type.<locals>.refit_callable_invalid_typer   r   rF  r  r   r   r   r\   r   rD  z&best_index_ returned is not an integerr   N)r   r$   r*   r   r   r   rS   )rR  rQ   r   r   rH   rH   rI    test_refit_callable_invalid_type  s   
"rT  out_bound_value	search_cvc                    s|    fdd}t dddd\}}|tdddd	d
gid|d}tjtdd ||| W d   dS 1 s7w   Y  dS )zg
    Test implementation catches the errors when 'best_index_' returns an
    out of bound result.
    c                    s    S )zV
        A dummy function tests when returned 'best_index_' is out of bounds.
        rH   rQ  rU  rH   rI   refit_callable_out_bound  rS  z?test_refit_callable_out_bound.<locals>.refit_callable_out_boundr   r   rF  r  r   r   r   r\   r   rD  zbest_index_ index out of ranger   N)r   r*   r   r   r   rS   )rU  rV  rX  rQ   r   r   rH   rW  rI   test_refit_callable_out_bound  s   
"rY  c                  C   sr   dd } t dddd\}}ttdd}ttdd	d
g di|| d}||| |jdks0J t|dr7J dS )zC
    Test refit=callable in multiple metric evaluation setting
    c                 S   s   d| v sJ | d   S )z
        A dummy function tests `refit=callable` interface.
        Return the index of a model that has the least
        `mean_test_prec`.
        mean_test_prec)rK  rQ  rH   rH   rI   rN    s   z8test_refit_callable_multi_metric.<locals>.refit_callabler   r   rF  r  r   )Accuracyr  r   r   rG  rD  r   r2  N)r   r6   r5   r$   r*   rS   r  r   )rN  rQ   r   r   r   rH   rH   rI    test_refit_callable_multi_metric  s   	
r\  c                  C   s   t ddddd} t dddd}d	d
 }dd }t||dgd}t|dg di}|| |tt t	|ds?J d S )N,  r   r   r   rt   i        c                 S      | j dd  dkS )Nr\   )r   r   rt   rU   r   rH   rH   rI   check_X     z#test_gridsearch_nd.<locals>.check_Xc                 S   r`  )Nr\   )r^  r_  rU   ra  rH   rH   rI   check_y  rc  z#test_gridsearch_nd.<locals>.check_yrS   )rb  rd  methods_to_checkrF   r   r   )
rM   r   r   r   r$   rS   r_   rQ   r   r   )X_4dy_3drb  rd  r   r   rH   rH   rI   test_gridsearch_nd  s   rh  c                  C   s   t ddd} t dgd dgd  }tdd dgd	}td
d}t|dg di|d}||  |	| | t
|dsBJ d S )Nr   r   r   r   r\   c                 S   
   t | tS rD   r   r{   ra  rH   rH   rI   <lambda>     
 z test_X_as_list.<locals>.<lambda>rS   )rb  re  r   r   rF   r   r   r   rM   r   r   r   r   r   r$   rS   r3  r_   r   rQ   r   r   r   r   rH   rH   rI   test_X_as_list     
ro  c                  C   s   t ddd} t dgd dgd  }tdd dgd	}td
d}t|dg di|d}|| | 	| | t
|dsBJ d S )Nr   r   r   r   r\   c                 S   ri  rD   rj  ra  rH   rH   rI   rk    rl  z test_y_as_list.<locals>.<lambda>rS   )rd  re  r   r   rF   r   r   r   rm  rn  rH   rH   rI   test_y_as_list   rp  rq  c                     s   t t fg} zddlm}m} | ||f W n	 ty   Y nw tddd}t	dgd dgd  }| D ]>\  ||}} fdd}fd	d
}t
||d}	t|	dg di}
|
|||| |
| t|
dsvJ q8d S )Nr   )Series	DataFramer   r   r   r\   c                    
   t |  S rD   r   ra  )InputFeatureTyperH   rI   check_df!  rK   z#test_pandas_input.<locals>.check_dfc                    rt  rD   ru  ra  )
TargetTyperH   rI   check_series$  rK   z'test_pandas_input.<locals>.check_series)rb  rd  rF   r   r   )r   pandasrr  rs  appendImportErrorrM   r   r   r   r   r$   rS   r_   rX   r   )typesrr  rs  rQ   r   X_dfy_serrw  ry  r   r   rH   )rv  rx  rI   test_pandas_input  s&   

r  c                  C   s   t ddd\} }tdddd}ddg}d	D ]}t|tg d
d||d}|| | |jd dks3J qt|tg d
ddd}|| | |jd dksOJ t|tg d
dd}||  |jd dkshJ d S )N2   r   r   r   r   r\   )r   initn_initadjusted_rand_scorefowlkes_mallows_score)r  r  )rt   r   r   )
n_clusters)r   r   r   r  r   r   r   r   r   )r   r.   r$   dictrS   r   )rQ   r   kmr   r   r   rH   rH   rI   test_unsupervised_grid_search/  s"   
r  c                  C   st   dd } t ddddgddgddggd\}}tt tg dd| d	}|| |jd
 dks1J |jdks8J d S )Nc                 S   s   | j dkrdS dS )Nr   rF  r   	bandwidth)	estimatorrQ   rH   rH   rI   custom_scoringN  rc  z2test_gridsearch_no_predict.<locals>.custom_scoringr   r\   r   )cluster_stdr   r   rG  r  r  r  rF  )r   r$   r/   r  rS   r   r2  )r  rQ   _r  rH   rH   rI   test_gridsearch_no_predictK  s   $
r  c                  C   s   ddgt ddd} t| ddd}dd	 |D }t|dks J |D ]}|d
 dv s,J d|d   kr9dks<J  J q"dg di} t| ddd}dd	 |D dd	 |D ksZJ dt ddi} t| ddd}dd	 |D dd	 |D ksxJ d S )Nr  linearr   r\   )r  r   r   )param_distributionsr   r   c                 S      g | ]}|qS rH   rH   rv   r   rH   rH   rI   rz   b      z&test_param_sampler.<locals>.<listcomp>r  )r  r  r   )r   r\   rt   r   r   r   r   r^     	   r   r   c                 S   r  rH   rH   r  rH   rH   rI   rz   m  r  c                 S   r  rH   rH   r  rH   rH   rI   rz   s  r  )r   r'   rL   )r  samplersamplessamplerH   rH   rI   test_param_sampler\  s&   " $r  c                    s   | j  t fdd|D sJ t fdd|D sJ t fdd|D r*J t fdd|D s7J | jr?| j ndg}|D ]} d|  jtjksRJ qDd S )Nc                 3   "    | ]}t  | tjjV  qd S rD   r   rM   maMaskedArray)rv   paramrQ  rH   rI   r   y       z/check_cv_results_array_types.<locals>.<genexpr>c                 3   s    | ]
} | j tkV  qd S rD   )dtypeobjectrv   rM  rQ  rH   rI   r   z  s    c                 3   r  rD   r  r  rQ  rH   rI   r   {  r  c                 3   s*    | ]}| d s | jtjkV  qdS )rankN)
startswithr  rM   float64r  rQ  rH   rI   r   |  s    
r_   zrank_test_%s)	r   allanymultimetric_scorer_rJ  r  rM   int32)r  
param_keys
score_keysscorer_keysrM  rH   rQ  rI   check_cv_results_array_typesv  s   r  c                    sB   t t  t|| d  t fdd|| D sJ d S )N)rd   c                 3   s     | ]} | j fkV  qd S rD   rU   r  rL  n_candrH   rI   r     s    z(check_cv_results_keys.<locals>.<genexpr>)r	   r   rJ  r  )rL  r  r  r  rH   r  rI   check_cv_results_keys  s   $r  c            	         s"  t dddd\} }d}d}tdgdd	gd
dgdtdgddgdg}d}d}|}tt ||dd}|| | |j t d dksDJ  fdd|D sOJ  fdd|D sZJ t||| t ||| |j t	|jd }t fddt
|D sJ t fddt
|D sJ d S )Nr  r   rF  r  r   r   r  r\   r   r   r  r   r  polyrt   r  degreeparam_Cparam_degreeparam_gammaparam_kernelrI  mean_train_scorerank_test_scoresplit0_test_scoresplit1_test_scoresplit2_test_scoresplit0_train_scoresplit1_train_scoresplit2_train_scorestd_test_scorestd_train_scoremean_fit_timestd_fit_timemean_score_timestd_score_timeT)r   r   return_train_scorer  c                 3   s(    | ]}|d krt  | dkV  qdS )r  r   Nr  rv   krQ  rH   rI   r     s   & z.test_grid_search_cv_results.<locals>.<genexpr>c                 3   s0    | ]}d |vr|dkrt  | dkV  qdS )timer  r\   Nr  r  rQ  rH   rI   r     s    rd   c                 3   L    | ]!} d  | dkr d j | o! d j | o! d j |  V  qdS r  r  r  r  r  Nmaskru   rQ  rH   rI   r         c                 3   N    | ]"} d  | dkr d j |  o" d j |  o" d j | V  qdS r  r  r  r  r  Nr  ru   rQ  rH   rI   r         )r   r  r$   r+   rS   r   r  r  r  rL   r|   )	rQ   r   r   n_grid_pointsrd   r  r  n_candidatesr  rH   rQ  rI   test_grid_search_cv_results  sL   


	r  c            
         s   t dddd\} }d}d}dgtdd	td
d	ddgddgdg}d}d}|}tt |||dd}|| | |j t||| t ||| t|jd }	t	 fddt
|	D s^J t	 fddt
|	D smJ d S )Nr  r   rF  r  r      r  r   )scaler   r  r  rt   r  r  r  T)r   r   r  r  rd   c                 3   r  r  r  ru   rQ  rH   rI   r     r  z0test_random_search_cv_results.<locals>.<genexpr>c                 3   r  r  r  ru   rQ  rH   rI   r     r  )r   r   r%   r+   rS   r   r  r  rL   r  r|   )
rQ   r   r   n_search_iterrd   r  r  r  r  r  rH   rQ  rI   test_random_search_cv_results  s6   	r  zSearchCV, specialized_paramsr   r   )r  r   c                    s  t ddgddgddgddggddddd\}}tj|jd td}d|t|dkd d d d < d|t|dkd d d d < || g| |gg}t |d	d
}| di ||  || t fddt	 j
D } jd d } jd d }	t fddt	 j
D }
 jd d } jd d } jd d dksJ t|ddg t|
ddg |tt|ksJ |	tt|ksJ |tdksJ |tdksJ d S )Nr   r\   r   FP   )r   r   r  shuffler   r  rt   T)r  r   r  c                       g | ]} j d |  d qS )split%d_test_scorer   r   rv   sr  rH   rI   rz   ?      z+test_search_default_iid.<locals>.<listcomp>rI  r  c                    r  )zsplit%d_train_scorer   r  r  r  rH   rI   rz   H  r  r  r  r  gUUUUUU?rH   )r   rM   r   rV   boolwherer+   rS   r   r|   	n_splits_r   r   r   approxr!  std)r   specialized_paramsrQ   r   r  r   common_paramstest_cv_scores	test_meantest_stdtrain_cv_scores
train_mean	train_stdrH   r  rI   test_search_default_iid  sF   

	  

r  c                  C   s   t dddd\} }d}tdgddgd	dgd
tdgddgdg}g }ttttdddfD ]}tt |||dd}|| | || q.t	|  d S )Nr  r   rF  r  r   r  r\   r   r   r  r  rt   r  r   r  r   r  F)r   r   r   r   )
r   r  r6   r5   r4   r$   r+   rS   r{  *compare_cv_results_multimetric_with_single)rQ   r   r   rd   grid_searchesr   r   rH   rH   rI   'test_grid_search_cv_results_multimetric^  s2   r  c                  C   s   t dddd\} }d}d}ttdddtjd	d
dddd}dD ]C}g }dD ].}|r7d}t|tr4dn|}nd}t|dd}	t|	|||||d
d}
|
| | |	|
 q't
|  t|d
 |d | q!d S )Nr  r   rF  r  r   r  r\   r   r   )base)r   r  TF)r  r   r  Tr   F)probabilityr   )r   r   r  r   r   r   )r   r  rM   logspacer   r   r+   r%   rS   r{  r  )compare_refit_methods_when_refit_with_acc)rQ   r   r   r  rd   r   random_searchesr   r  r   r   rH   rH   rI   )test_random_search_cv_results_multimetric  s8   $	r  c                    s   | j sJ tt| jd | j dd |j D }|dd |j D  t fdddD s4J tj	
dd   D d	d | D  d
S )zCompare multi-metric cv_results with the ensemble of multiple
    single metric cv_results from single metric grid/random searchr  c                 S       i | ]\}}t d d||qS )_score$	_accuracyr  subrv   r  vrH   rH   rI   
<dictcomp>  s    z>compare_cv_results_multimetric_with_single.<locals>.<dictcomp>c                 S   r  )r	  _recallr  r  rH   rH   rI   r         c                 3   s"    | ]}t  | d kV  qdS )r\   N)rM   r  r  cv_results_multirH   rI   r     
    
z=compare_cv_results_multimetric_with_single.<locals>.<genexpr>)r  r  r  r  c                 S       i | ]\}}| d s||qS _timeendswithr  rH   rH   rI   r    r  c                 S   r  r  r  r  rH   rH   rI   r    r  N)r  r	   r   r  r   r   updater  rM   testingassert_equal)search_multi
search_acc
search_reccv_results_acc_recrH   r  rI   r    s$   

r  c                 C   s   |j |ksJ |r| j dksJ n| j rJ dS tdddd\}}dD ]}tt| ||t||| q#t| ||||| dD ]}t| |t||ksRJ qDdS )	zDCompare refit multi-metric search methods with single metric methodsr   Nr   r   rF  r  )rX   rk   rl   )r  r2  r   )r   r   r   r  r_   )r  r  r   rQ   r   methodrM  rH   rH   rI   r    s   
r  	max_depthr   )r  r  )r  r   c                 C   s`   t dddd\}}| || d}tjt|d | | W d    d S 1 s)w   Y  d S )Nr   r   rF  r  z@'DecisionTreeClassifier' object has no attribute 'score_samples'r   )r   rS   r   r   ro   score_samples)rV  rQ   r   r   rH   rH   rI   "test_search_cv_score_samples_error  s   "r$  T)noveltyn_neighborsr   )r  r  r   )r  r   r   c                 C   s   t jd}d}d}t|| }|| }t|dddgddggdddd }t j||jdd	|dfd
gdd}t dg| }d|| d < | || t	| 
|| j
| d S )NrF  r]  g333333?rt   r   r   )r   r  r   r  r   ir   )lowhighsize)axisr\   rr   )rM   r   r   intr   concatenater   r   rS   r   r#  r   )rV  r   r   outliers_fraction
n_outliers	n_inliersrQ   y_truerH   rH   rI   #test_search_cv_score_samples_method  s*   "r1  c                  C   s   t ddd\} }dg di}tt |dd}tt d|dd	}||fD ]O}|| | |j}t|d
 d |d
 d  t|d d |d d  t|d
 d |d
 d rXJ t|d d |d d rhJ t|jd g d q#d S )Nr  rF  r  r   )r\   gjt?MbP?T)r   r  r   )r   r  r  rI  r   r\   r  rt   r  )r\   r\   r   )	r   r$   r+   r%   rS   r   r   rM   allclose)rQ   r   r   r   r   r  rL  rH   rH   rI   (test_search_cv_results_rank_tie_breaking&  s.   
r4  c                  C   sx   dgdgdgdgdggg d} }t  t f}ddd gi}t }|D ]}t|||d	| |}t|jd
 dd g q"d S )Nr\   rt   r   r   r   )r   r   r   r   r\   r   r   r   param_random_state)r,   r-   r   r$   rS   r	   r   )rQ   r   
estimatorsest_parametersr   estr   rH   rH   rI   !test_search_cv_results_none_paramH  s   "r9  c                  C   s*  t dd} dgdgdgdgg}g d}t| dddgiddd	}t| dddgidddd
}||fD ]b}||| dD ]}t|j| dksHJ t|j| dk sTJ q:dD ]$}|j| d dksdJ |j| d dksoJ t|j| dk s{J qWt|dsJ t|j	t
sJ |j	dksJ q0d S )Nr   r   r\   rt   r   r   )r   r\   r\   r   r   r   )r   r   r   )r  r  )r  r  r^   refit_time_)r*   r$   r%   rS   rM   r  r   r   r   r:  float)svcrQ   r   r   rsr  rM  rH   rH   rI   test_search_cv_timingW  s4   
r>  c               	      sf  d} t dd}tddd\}}g d}dD ]}t|d|i|| d	||j}t| }d
tdd t| D  }t	t
||sEJ t| d}	j} t|D ]^\ }
|j|
d t
t fddt| D }t|	||D ]:\}\}}||| ||  |dkrt|| ||| }n|dkr||| }t|| |}t|||  qtqQqd S )Nr   r   r   rt   r   r   )r&  r   r   )r   r   )rI  r  c                 s   s    | ]}d | V  qdS r  NrH   )rv   cv_irH   rH   rI   r     s    
z9test_grid_search_correct_score_results.<locals>.<genexpr>r   )r   c                 3   s"    | ]}j d |    V  qdS r?  r  r  candidate_ir   rH   rI   r     r  r&  r   )r*   r   r$   rS   r   r{   rJ  r   r|   r  rM   in1dr   r  	enumeratere   r   splitr3   rX   rm   r7   r   )r   r   rQ   r   r   r_   rL  result_keysexpected_keysr   r   	cv_scoresrw   traintestcorrect_scoredecrH   rA  rI   &test_grid_search_correct_score_results  s@   



rM  c                  C   s   t  } t| dg diddd}|tt tt|}t|	t|	t t
| dg didddd}|tt tt|}t|	t|	t d S )NrF   r   Tr   r  )r   r   r   )rB   r$   rS   rQ   r   pickleloadsdumpsr
   rX   r%   )r   r   grid_search_pickledr   random_search_pickledrH   rH   rI   test_pickle  s   rS  c                  C   s  t ddd\} }dg di}t }tddtddg}|D ]V}t|||d}|| | |jd }tt|D ];}|j	di ||  t
|| |D ]&\}	\}
}|| |
 ||
  || | || }t||jd	|	  |  qKq7q|D ]W}t|||d
d}|| | |jd }tt|D ];}|j	di ||  t
|| |D ]&\}	\}
}|| |
 ||
  || | || }t||jd	|	  |  qqqvd S )NTr   )return_indicatorr   r"  )r\   rt   r   r   r   r   rd   r  r   )r   r   rH   )r   r   r,   r-   r$   rS   r   r|   rL   re   rD  rE  r_   r   r%   )rQ   r   r7  r   r6  r8  r   
res_paramscand_irw   rI  rJ  rK  r   rH   rH   rI   &test_grid_search_with_multioutput_data  sJ   

rW  c                  C   sL   t ddd} g d}tdd}t|i dd| |}t|d	r$J d S )
Nr9  r   rr   r   r   r\   r\   r\   F)r  rt   r   rk   )rM   r   r   r+   r$   rS   r   rQ   r   r   r   rH   rH   rI   test_predict_proba_disabled  s
   
rZ  c                  C   st   t jdt jddd} t j| dd d f< g d}tdtdt jd	fd
t fg}t|dg didd	| | d S )Nr9  r  r   rr   rt   rX  imputerr!  )strategymissing_values
classifierclassifier__foo_paramr   r   )
rM   r   r  r   nanr<   r;   rB   r$   rS   )rQ   r   r   rH   rH   rI   test_grid_search_allows_nans  s   "ra  c                   @   s:   e Zd ZdZdZdddZdddZdd	 Zdd
dZdS )FailingClassifierz,Classifier that raises a ValueError on fit()rt   Nc                 C   rC   rD   r<  r>  rH   rH   rI   rJ     rK   zFailingClassifier.__init__c                 C   s   | j tjkr
tdd S )Nz%Failing classifier failed as required)r=  rb  FAILING_PARAMETERr   r@  rH   rH   rI   rS     s   zFailingClassifier.fitc                 C   rA  rT   rB  rY   rH   rH   rI   rX     rC  zFailingClassifier.predictc                 C   rP  )Nr^   rH   rP   rH   rH   rI   r_        zFailingClassifier.scorerD   rf   )	rg   rh   ri   rj   rc  rJ   rS   rX   r_   rH   rH   rH   rI   rb    s    

rb  c                     s  t dddd\} }t }t|dg digddd	d
tjdtjd}tjt|d 	| | W d    n1 s:w   Y  t
jd }fdd t fddt|D s\J t|dg digddtdd
tjdtjd}tjt|d 	| | W d    n1 sw   Y  t
jd }t fddt|D sJ jd }|d dkr|d dksJ ||j dksJ j|jksJ d S )Nr9  r   r   r  r=  r   r\   rt   r   Fr^   r   r   r   z5 fits failed.+total of 15.+The score on these train-test partitions for these parameters will be set to 0\.0.+5 fits failed with the following error.+ValueError.+Failing classifier failed as requiredflagsr   rd   c                    s$   t t fddtjD S )Nc                 3   s"    | ]} j d |   V  qdS r?  r  r  )r   rw   rH   rI   r   3  s    
zOtest_grid_search_failing_classifier.<locals>.get_cand_scores.<locals>.<genexpr>)rM   r   r{   r|   r  rw   )r   ri  rI   get_cand_scores1  s
   z<test_grid_search_failing_classifier.<locals>.get_cand_scoresc                 3   s6    | ]}j d  | tjkrt |dkV  qdS )param_parameterr^   N)r   rb  rc  rM   r  rv   rV  rj  r   rH   rI   r   9  s    z6test_grid_search_failing_classifier.<locals>.<genexpr>r`  z5 fits failed.+total of 15.+The score on these train-test partitions for these parameters will be set to nan.+5 fits failed with the following error.+ValueError.+Failing classifier failed as requiredc                 3   s8    | ]}j d  | tjkrtt |V  qdS )rk  N)r   rb  rc  rM   r  isnanrl  rm  rH   rI   r   R  s    r  rt   r\   r   )r   rb  r$   r  compileDOTALLr   warnsr)   rS   rL   r   r  r|   r;  rc  r  )rQ   r   r   warning_messager  ranksrH   rm  rI   #test_grid_search_failing_classifier  sZ   	
rt  c                  C   s   t dddd\} }t }t|dtjgd igdd}tjd	tjd
}tjt	|d |
| | W d    d S 1 s;w   Y  d S )Nr9  r   r   r  r=  r   r^   r   zrAll the 15 fits failed.+15 fits failed with the following error.+ValueError.+Failing classifier failed as requiredrg  r   r   rb  r$   rc  r  ro  rp  r   r   r   rS   )rQ   r   r   r   rr  rH   rH   rI   )test_grid_search_classifier_all_fits_failb  s   "rw  c                  C   sp   t dddd\} }t }t|dg digddd	d
}tt || | W d    d S 1 s1w   Y  d S )Nr9  r   r   r  r=  re  r   Fr   rf  )r   rb  r$   r   r   r   rS   rY  rH   rH   rI   )test_grid_search_failing_classifier_raisew  s   	"rx  c            	      C   sf  ddgg dddddgig} t | dd	}d}d
}d|||f }tjt|d t| W d    n1 s6w   Y  t | d
d	}t|}t|d
ksMJ t| D ]}||v sYJ qQtt | dd	d
ksfJ tdtdtdd} t | ddd}t|}t|dksJ dd |D }tt|dksJ t	dg dd}t |dd	}t|}t|dksJ d S )Nr   r\   )abc)firstsecondthirdtwovaluesr  r   r  z}The total space of parameters %d is smaller than n_iter=%d. Running %d iterations. For exhaustive searches, use GridSearchCV.r   i  r   c   rF  )r   r   c                 S   s&   g | ]}d |d |d |d f qS )z	a%db%dc%dry  rz  r{  rH   r   rH   rH   rI   rz     s   & z7test_parameters_sampler_replacement.<locals>.<listcomp>r   r^  )
r'   r   rq  UserWarningr{   rL   r&   r|   r   r   )	rd   r  r   	grid_sizeexpected_warningr  r  hashable_samplesparams_distributionrH   rH   rI   #test_parameters_sampler_replacement  s:   

r  c                  C   s   ddgi} t ddd}g d}ttdd| d	d
}t|dr#J ||| || || ddgi} ttdd| d	d
}t|drIJ ||| t|drVJ d S )Nlosslog_loss   r   rr   r   r   r   r\   r\   r\   hinge)r  r   )r  r   r   rk   )	rM   r   r   r$   r>   r   rS   rk   rl   )r   rQ   r   r   rH   rH   rI   #test_stochastic_gradient_loss_param  s&   

r  c                  C   sJ   t ddd} g d}tdd}t|dddgid	d
}|| | d S )Nr   rr   r  r   r   r   r   r   r   )r   r   )rM   r   r   r*   r$   rS   rY  rH   rH   rI   %test_search_train_scores_set_to_false  s
   
r  c            	         s  d} d}t | dd\}}ttdddg dit|| dd	d
  || ttdddg dit|dd	d
}||| tt|d	dd||tsMJ ttdddg dit|d	dd||d	d
}||| ttdddg dit|d	ddd	d
}||| dd }t	j
||j||j t	j
dd  j D dd |j D  ttdddg dit|d	dd	d
  || dD ].i }tdD ]t fddtdD |< qt|d |d  t|d |d  qd S )Nr   r   r   r  r   r   )r   r   g333333?)r   r   T)r   r   r  r   )r   r  r   c                 S   s   dD ]}|  | q| S )N)r  r  r  r  )pop)rL  rM  rH   rH   rI   _pop_time_keys  s   z>test_grid_search_cv_splits_consistency.<locals>._pop_time_keysc                 S   r  r  r  r  rH   rH   rI   r    r  z:test_grid_search_cv_splits_consistency.<locals>.<dictcomp>c                 S   r  r  r  r  rH   rH   rI   r     r  )r   r   r   r   )r   r  )rI  rJ  r   c                 3   s&    | ]} j d |f   V  qdS )zsplit%d_%s_scoreNr  r  r   param_i
score_typerH   rI   r   3  s
    
z9test_grid_search_cv_splits_consistency.<locals>.<genexpr>r\   rt   r   )r   r$   r*   rA   rS   r   r   rE  r   rM   r  r  r   r   r|   r{   r
   )	r   r   rQ   r   gs2gs3gs4r  per_param_scoresrH   r  rI   &test_grid_search_cv_splits_consistency  sv   







r  c                  C   sH   t  } t| dg diddd}|tt ||t}tt| d S )NrF   r   r   r   )rB   r$   rS   rQ   r   r[   rZ   r	   )r   r   X_round_triprH   rH   rI   +test_transform_inverse_transform_round_trip<  s
   r  c                     s   dd  fddG fdddt } tddtd	d
dd\ | dd }dddgidddgig}|j}|| t|D ]$}|d  rm|dd  dkrm|dvrmt||t||ksmJ d| qId S )Nc                 S   s   |j }t|  t|ksJ | D ]3}|dsDt| | | |< | | jjdkr7t|| | | d| d qt	|| | | d| d qd S )Nr  Oz	Checking )r   )
r   r   rJ  r  rM   
asanyarrayr  kindr	   r   )resultsgscvexp_resultsr  rH   rH   rI   check_resultsF  s   
z-test_custom_run_search.<locals>.check_resultsc                    s   t | dd S )NTr  )r$   rS   r  )rQ   r   r   rH   rI   fit_gridT  s   z(test_custom_run_search.<locals>.fit_gridc                       s*   e Zd Z fddZfddZ  ZS )z.test_custom_run_search.<locals>.CustomSearchCVc                       t  j|fi | d S rD   superrJ   rG   r  kwargs	__class__rH   rI   rJ   X     z7test_custom_run_search.<locals>.CustomSearchCV.__init__c                    sd   |ddiddig} |dddgi |ddiddig} |dddgidddgig d S )Nr"  r\   rt   min_samples_splitr   r   rH   )rG   evaluater  r  r  rH   rI   _run_search[  s   z:test_custom_run_search.<locals>.CustomSearchCV._run_search)rg   rh   ri   rJ   r  __classcell__rH   r  r  rI   CustomSearchCVW  s    r  r   r   r   r   )r   n_informativer   Tr  r"  r\   rt   r  r   r   rr   r  >   rO   r   r:  r   zAttribute %s not equal)r(   r,   r   rS   r   dirislowerr  )r  mycvr  r  attrrH   )rQ   r  r   r  r   rI   test_custom_run_searchE  s*   


r  c                  C   sx   G dd dt } | t tt G dd dt }tjtdd |t tt W d    d S 1 s5w   Y  d S )Nc                       s&   e Zd Z fddZdddZ  ZS )z;test__custom_fit_no_run_search.<locals>.NoRunSearchSearchCVc                    r  rD   r  r  r  rH   rI   rJ   z  r  zDtest__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.__init__Nc                 [   s   | S rD   rH   )rG   rQ   r   r   
fit_paramsrH   rH   rI   rS   }  rd  z?test__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.fitrf   )rg   rh   ri   rJ   rS   r  rH   rH   r  rI   NoRunSearchSearchCVy  s    r  c                       s   e Zd Z fddZ  ZS )z3test__custom_fit_no_run_search.<locals>.BadSearchCVc                    r  rD   r  r  r  rH   rI   rJ     r  z<test__custom_fit_no_run_search.<locals>.BadSearchCV.__init__)rg   rh   ri   rJ   r  rH   rH   r  rI   BadSearchCV  s    r  z_run_search not implemented.r   )r(   r+   rS   rQ   r   r   r   NotImplementedError)r  r  rH   rH   rI   test__custom_fit_no_run_searchx  s   "r  c                  C   s   t ddt} dd | D  d}tt dg di| dd	}tjtd
d |td | t	d |  W d    d S 1 s?w   Y  d S )Nr   r   c                 S   r  rH   rH   )rv   urH   rH   rI   rz     r  z0test_empty_cv_iterator_error.<locals>.<listcomp>r   r   r2  rH  r   r   r   n_jobszNNo fits were performed. Was the CV iterator empty\? Were there no candidates\?r   )
r   rE  rQ   r%   r=   r   r   r   rS   r   )r   
train_sizeridgerH   rH   rI   test_empty_cv_iterator_error  s   "r  c                  C   s   G dd dt } | dd}d}tt dg di|dd	}tjtd
d |td | td |  W d    d S 1 s=w   Y  d S )Nc                   @   s   e Zd Zdd ZdS )z.test_random_search_bad_cv.<locals>.BrokenKFoldc                 _   rP  )Nr\   rH   )rG   argskwrH   rH   rI   get_n_splits  rd  z;test_random_search_bad_cv.<locals>.BrokenKFold.get_n_splitsN)rg   rh   ri   r  rH   rH   rH   rI   BrokenKFold  s    r  r   r   r   r   r  r   r  zXcv.split and cv.get_n_splits returned inconsistent results. Expected \d+ splits, got \d+r   )	r   r%   r=   r   r   r   rS   rQ   r   )r  r   r  r  rH   rH   rI   test_random_search_bad_cv  s   
"r  r  Fr   c                 C   s   t ddd\}}G dd d}| t f| d|d|}tt}||| W d    n1 s3w   Y  |r>dd	gndg}t|t|ksKJ t||D ]\}	}
d
|
 dt|	j	v saJ qPd S )Nrt   r   )r   r   c                   @   s    e Zd ZdZdd Zdd ZdS )zHtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorerz1Scorer that will fail for some split but not all.c                 S   s
   d| _ d S rT   )n_countsrp   rH   rH   rI   rJ     rK   zQtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorer.__init__c                 S   s&   |  j d7  _ | j d dkrtjS dS )Nr\   r   r   )r  rM   r`  )rG   r  rQ   r   rH   rH   rI   __call__  s   zQtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorer.__call__N)rg   rh   ri   rj   rJ   r  rH   rH   rH   rI   FailingScorer  s    r  r   )r   r   r  rJ  rI  zOne or more of the z scores are non-finite)
r   r-   r   rq  r  rS   rL   zipstrmessage)r   r  r  rQ   r   r  ry   warn_msgset_with_warningmsgdatasetrH   rH   rI   1test_searchcv_raise_warning_with_non_finite_score  s&   r  c            	      C   s   dd } t dddd\}}tdd}t|dd	d
gi| dd}||| g d}|D ]}d||jv s6J q*||}t||}|||t	
|d ksPJ d S )Nc                 S   s2   |  |}t||}|d |d |d |d dS )N)r   r   r   r\   )r\   r   )r\   r\   tnfpfntp)rX   r8   )r   rQ   r   r"  cmrH   rH   rI   custom_scorer  s   

zAtest_callable_multimetric_confusion_matrix.<locals>.custom_scorer(   r   rF  r  r   r   r   r\   r  rD  r  zmean_test_{}r  )r   r*   r$   rS   formatr   rX   r8   r_   r   r  )	r  rQ   r   r8  r  score_namesnamer"  r  rH   rH   rI   *test_callable_multimetric_confusion_matrix  s   


"r  c                  C   s   dd } t dddd\}}tdd}t|dd	d
gi| dd}t|dd	d
giddgdd}||| ||| |jt|jksCJ |j|jksKJ |||t|||ks\J d S )Nc                 S   s    |  |}t||t||dS )N)r  r   )rX   r4   r5   r8  rQ   r   r"  rH   rH   rI   r    s   
zHtest_callable_multimetric_same_as_list_of_strings.<locals>.custom_scorerr  r   rF  r  r   r   r   r\   r  rD  r   	r   r*   r$   rS   r2  r   r  r  r_   )r  rQ   r   r8  search_callable
search_strrH   rH   rI   1test_callable_multimetric_same_as_list_of_strings  s   
&r  c                  C   s&  dd } t dddd\}}tdd}t|dd	d
gi| dd}t|dd	d
giddd}t|dd	d
gidgdd}||| ||| ||| |jt|jksTJ |j|jks\J |||t|||ksmJ |jt|jksxJ |j|jksJ |||t|||ksJ d S )Nc                 S   s   |  |}t||S rD   )rX   r4   r  rH   rH   rI   r  "  s   

zHtest_callable_single_metric_same_as_single_string.<locals>.custom_scorerr  r   rF  r  r   r   r   r\   TrD  r  r  )r  rQ   r   r8  r  r  search_list_strrH   rH   rI   1test_callable_single_metric_same_as_single_string   s&   
"&r  c                  C   s|   dd } t dddd\}}ttdddd	d
gi| dd}d}tjt|d ||| W d    d S 1 s7w   Y  d S )Nc                 S      ddiS )Nbad_namer\   rH   r8  rQ   r   rH   rH   rI   
bad_scorer>     zBtest_callable_multimetric_error_on_invalid_key.<locals>.bad_scorerr  r   rF  r  r   r   r   r\   	good_namerD  z`For multi-metric scoring, the parameter refit must be set to a scorer key or a callable to refitr   )r   r$   r*   r   r   r   rS   )r  rQ   r   r   r  rH   rH   rI   .test_callable_multimetric_error_on_invalid_key<  s   
"r  c                  C   s   dd } t dddd\}}t }t|dg dig| d	d
d}tjdtjd}tjt|d |	|| W d    n1 s>w   Y  t
|jd g d d S )Nc                 S   r  Nr  r\   rH   r  rH   rH   rI   r  T  r  zBtest_callable_multimetric_error_failing_clf.<locals>.custom_scorerr9  r   r   r  r=  re  Fr   rf  zm5 fits failed.+total of 15.+The score on these train-test partitions for these parameters will be set to 0\.1rg  r   mean_test_acc)r\   r\   r   )r   rb  r$   r  ro  rp  r   rq  r)   rS   r   r   )r  rQ   r   r   r   rr  rH   rH   rI   +test_callable_multimetric_error_failing_clfQ  s$   r  c                  C   s   dd } t dddd\}}t }t|dtjgd ig| d	d
d}d}tjd| tjd}tjt	|d |
|| W d    d S 1 sFw   Y  d S )Nc                 S   r  r  rH   r  rH   rH   rI   r  o  r  zBtest_callable_multimetric_clf_all_fits_fail.<locals>.custom_scorerr9  r   r   r  r=  r   Fr   rf  z1ValueError: Failing classifier failed as requiredz5All the 15 fits failed.+your model is misconfigured.+rg  r   rv  )r  rQ   r   r   r   individual_fit_error_messager   rH   rH   rI   +test_callable_multimetric_clf_all_fits_failm  s(   "r  c                  C   s   d} t | d\}}t }dddgi}t||}t||dd}t|dr%J t|dr,J ||| ||| |j| ks?J |j| ksFJ d S )Nr   )r  max_iterr   r\   r   n_features_in_)r   r@   r$   r%   r   rS   r  )r  rQ   r   gbdtr   r   r=  rH   rH   rI   test_n_features_in  s   
r  pairwisec                    sJ   G  fdddt }| }d}t|ddgi} | d ks#J |dS )z
    Test implementation of BaseSearchCV has the pairwise tag
    which matches the pairwise tag of its estimator.
    This test make sure pairwise tag is delegated to the base estimator.

    Non-regression test for issue #13920.
    c                       s   e Zd Z fddZdS )zStest_search_cv_pairwise_property_delegated_to_base_estimator.<locals>.TestEstimatorc                    s   d iS Nr  rH   rp   r  rH   rI   
_more_tags  r  z^test_search_cv_pairwise_property_delegated_to_base_estimator.<locals>.TestEstimator._more_tagsN)rg   rh   ri   r  rH   r  rH   rI   TestEstimator  s    r  z.BaseSearchCV pairwise tag must match estimatorr&  r   r  N)r   r$   	_get_tags)r  r  r8  attr_messager   rH   r  rI   <test_search_cv_pairwise_property_delegated_to_base_estimator  s
   
r  c                  C   s\   G dd dt } |  }d}dD ]}|j|d t|ddgi}|| d ks+J |qd	S )
z
    Test implementation of BaseSearchCV has the pairwise property
    which matches the pairwise tag of its estimator.
    This test make sure pairwise tag is delegated to the base estimator.

    Non-regression test for issue #13920.
    c                   @   s   e Zd ZdddZdd ZdS )zXtest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwiseTc                 S   rC   rD   r  )rG   r  rH   rH   rI   rJ     rK   zatest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise.__init__c                 S   r`   r  r  rp   rH   rH   rI   r    rK   zctest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise._more_tagsN)T)rg   rh   ri   rJ   r  rH   rH   rH   rI   EstimatorPairwise  s    
r   z4BaseSearchCV _pairwise property must match estimatorr  r  r&  r   r  N)r   re   r$   r  )r   r8  r  _pairwise_settingr   rH   rH   rI   =test_search_cv__pairwise_property_delegated_to_base_estimator  s   	r  c                  C   s   d} d}t | dd\}}ddgi}t }t|||d}||| ||}t|}tdd	}t|||d}||| ||}	d
}
||	k sMJ |
dS )z
    Test implementation of BaseSearchCV has the pairwise tag
    which matches the pairwise tag of its estimator.
    This test ensures the equivalence of 'precomputed'.

    Non-regression test for issue #13920.
    r  rt   r   r  r&  r   r   r/  )metricz2GridSearchCV not identical with precomputed metricN)r   r1   r$   rS   rX   r:   r  )r   r   rQ   r   grid_paramsr   r   preds_originalX_precomputedpreds_precomputedr  rH   rH   rI   ;test_search_cv_pairwise_property_equivalence_of_precomputed  s   



r  zSearchCV, param_searchry  r   rH  c                 C   sP   G dd dt t}| | |}tdd\}}|j||dd |jjdks&J d S )Nc                   @   s(   e Zd ZdddZdddZdd ZdS )	z,test_scalar_fit_param.<locals>.TestEstimatorNc                 S   rC   rD   )ry  )rG   ry  rH   rH   rI   rJ     rK   z5test_scalar_fit_param.<locals>.TestEstimator.__init__c                 S   s
   || _ d S rD   )r_)rG   rQ   r   rrH   rH   rI   rS     rK   z0test_scalar_fit_param.<locals>.TestEstimator.fitc                 S   s   t jt|dS )NrU   )rM   r   rL   rY   rH   rH   rI   rX     rC  z4test_scalar_fit_param.<locals>.TestEstimator.predictrD   )rg   rh   ri   rJ   rS   rX   rH   rH   rH   rI   r    s    

r  rF  r   )r
  )r   r   r   rS   r   r	  )r   param_searchr  modelrQ   r   rH   rH   rI   test_scalar_fit_param  s
   
r  r   c           
      C   sh   t tddddi\}}}}G dd dt}dd }| | |}||f|dd}	|j||fi |	 d S )	NrF  r   r   c                       s&   e Zd Z				d fdd	Z  ZS )z9test_scalar_fit_param_compat.<locals>._FitParamClassifierNc                    s`   t  j|||d |dksJ t|sJ t|tsJ |d jdks%J |d jdks.J | S )N)sample_weightr   rt   r\   )r  rS   callabler   r   ndim)rG   rQ   r   r  tuple_of_arraysscalar_paramcallable_paramr  rH   rI   rS   	  s   	z=test_scalar_fit_param_compat.<locals>._FitParamClassifier.fit)NNNN)rg   rh   ri   rS   r  rH   rH   r  rI   _FitParamClassifier	  s    r  c                   S   s   d S rD   rH   rH   rH   rH   rI   _fit_param_callable#	  rd  z9test_scalar_fit_param_compat.<locals>._fit_param_callable)r  r  r  )r   r   r>   rS   )
r   r  X_trainX_validr5  y_validr  r  r  r  rH   rH   rI   test_scalar_fit_param_compat  s   r  z)ignore:The total space of parameters 4 is	Predictorc           	      C   s   t jd}|ddt dgd dgd  }}tdt fd| fg}dd	gdd	gd
}| ||dd}||| |j	 |	 ksGJ |
|}t|rgt|d |||tt||kseJ d S t||  |||tt||ks~J d S )Nr      rt   r   r\   r9  transformer	predictorr   )transformer__parampredictor__paramar   ru  )rM   r   r   randnr   r<   r   rS   r   rJ  rX   r   r	   r_   r   r  r5   r   r!  r9   )	r   r  r   rQ   r   r  rd   r  r"  rH   rH   rI   1test_search_cv_using_minimal_compatible_estimator7	  s"   (

$$r!  c                 C   s   t ddddd\}}tdd}ddgi}t||d	d
d
|d|| |  j}|r0td|}ntd|}t|d
ks>J dS )zkCheck that search cv with verbose>2 shows the score for single
    metrics. non-regression test for #19658.r   rt   r   r   r   r   r   r   r   r   )r   r   r   r  z$score=\(train=[\d\.]+, test=[\d.]+\)zscore=[\d\.]+N)	r   r*   r$   rS   
readouterroutr  findallrL   )capsysr  rQ   r   r   ry   capturedr   rH   rH   rI   test_search_cv_verbose_3V	  s"   



r'  )rj   collections.abcr   r   ior   	itertoolsr   r   	functoolsr   rN  r   r}  r   r  numpyrM   scipy.sparsesparser  r   sklearn.utils._testingr	   r
   r   r   r   r   r   r   sklearn.utils._mockingr   r   scipy.statsr   r   r   sklearn.baser   r   r   sklearn.datasetsr   r   r   sklearn.model_selectionr   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   sklearn.model_selection._searchr(   #sklearn.model_selection._validationr)   sklearn.svmr*   r+   sklearn.treer,   r-   sklearn.clusterr.   sklearn.neighborsr/   r0   r1   sklearn.metricsr3   r4   r5   r6   r7   r8   r9   sklearn.metrics.pairwiser:   sklearn.imputer;   sklearn.pipeliner<   sklearn.linear_modelr=   r>   r?   sklearn.ensembler@   $sklearn.model_selection.tests.commonrA   rB   rn   r   rQ   r   r}   markparametrizer   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r  r%  r.  r8  r:  r;  rE  rO  rT  rY  r\  rh  ro  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r1  r4  r9  r>  rM  rS  rW  rZ  ra  rb  rt  rw  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  filterwarningsr!  r'  rH   rH   rH   rI   <module>   s   (
'"%

'
	($
-
P?
8#$&




!"
(%.	S( 	_	3
&
 


3