o
    i                    @   s  d Z ddlZddlZddlZddlZddlmZmZ ddl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mZmZ dd	lmZ dd
lmZmZmZm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* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZC ddlDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ ddlRmSZSmTZT ddlUmVZV ddlWmXZX ddlYmZZZm[Z[m\Z\ ddl]m^Z^m_Z_ ddl`maZambZbmcZcmdZd ddlemfZfmgZg dd lhmiZimjZjmkZk dd!llmmZmmnZn dd"lompZpmqZq dd#lrmsZsmtZt dd$lumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZ dd%lmZ dd&lmZ dd'lmZ G d(d) d)eeZG d*d+ d+egZed,d,gd-d,gd.d.gd/d.ggZeg d0Zd1d2 Zejd3eLe	eMd4d5gejd6ded7fd8dgidged9fd8died:fgd;d< Zd=d> Zd?d@ ZdAdB ZejdCeEeNgdDdE ZdFdG ZdHdI ZdJdK ZdLdM ZdNdO ZdPdQ ZdRdS ZdTdU ZdVdW ZdXdY ZejdZed[d\ ZejdZed]d^ Zd_d` Zdadb ZG dcdd ddeZejdedfdg Zdhdi Zdjdk Zejdld,d/gejdmeNeEgdndo Zdpdq Zdrds Zdtdu Zdvdw Zdxdy Zdzd{ Zd|d} Zd~d Zdd Zd.ddZdd Zdd ZejdeEddd.d4giifeNdd.d4gid/dfgdd Zdd Zdd Zdd Zdd ZejdmeNem ddd4gideEem ddd4gidgdd Zdd ZejdeEe7 dg dideNe8 dg didgdd ZejdmeNe\ddddd4giddeEe\ddddd4giddgdd Zdd Zdd Zejddd Zdd Zdd Zdd Zdd Zdd ZG dd deZdd ZddÄ Zddń ZddǄ ZddɄ Zdd˄ Zdd̈́ Zddτ Zddф Zddӄ ZddՄ Zddׄ ZejdddgejdeEddg dڢiifeNdg dڢiddfgdd݄ Zdd߄ Zdd Zdd Zdd Zdd Zdd Zdd Zejdddgdd Zdd Zdd ZejdeEdddgifeNded.difgdd ZejdeEdddgifeNdeddifgdd ZejdejdCeEeNgejdewevgdd Zejdddgd d ZejdeEdfeNdfeHdfgdd Zdd Zdd ZejdeEdfeNdfgedd	d
d ZejdeEdfeNdfeHdfgdd Zdd Zdd Zdd Zejjdeq epdejdCeEeNgdd Zea Zeb Zejjed/dedZded< ded.< ejdejd8d.id8d/igdejed.d/gfgddejd.ddd/dېdd8digdejeg d fd!ejjeg d"g d#d$fgd%dejd8d.gd/gdggid8d.gd/ggigdejjd.gd/gdggd.gd/ggged&fgd'dejd8did8digdefgd(dejd8eid8eigdejjeeged&fgd)dgd*d+ Zd,d- ZdS (/  zTest the search module    N)IterableSized)partial)StringIO)chainproduct)GeneratorType)	bernoulliexponuniform)config_context)BaseEstimatorClassifierMixincloneis_classifier)KMeans)ColumnTransformer)
make_blobsmake_classificationmake_multilabel_classification)LinearDiscriminantAnalysis)DummyClassifier)HistGradientBoostingClassifier)FitFailedWarning)enable_halving_search_cv)TfidfVectorizer)SimpleImputer)LinearRegressionLogisticRegressionRidgeSGDClassifier)accuracy_scoreconfusion_matrixf1_scoremake_scorerr2_scorerecall_scoreroc_auc_score)euclidean_distances)GridSearchCV
GroupKFoldGroupShuffleSplitHalvingGridSearchCVKFoldLeaveOneGroupOutLeavePGroupsOutParameterGridParameterSamplerRandomizedSearchCVStratifiedKFoldStratifiedShuffleSplittrain_test_split)BaseSearchCV"_yield_masked_array_for_each_param)OneTimeSplitter)ComplementNB)KernelDensityKNeighborsClassifierLocalOutlierFactor)Pipelinemake_pipeline)OneHotEncoderOrdinalEncoderSplineTransformerStandardScaler)SVC	LinearSVC)ConsumingScorer	_Registrycheck_recorded_metadata)DecisionTreeClassifierDecisionTreeRegressor)_get_namespace_device_dtype_ids)yield_namespace_device_dtype_combinations)CheckingClassifierMockDataFrame)
MinimalClassifierMinimalRegressorMinimalTransformer_array_api_for_testsassert_allcloseassert_allclose_dense_sparseassert_almost_equalassert_array_almost_equalassert_array_equalset_random_state)_enforce_estimator_tags_y)CSR_CONTAINERS)_num_samplesc                   @   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)selfr_    ra   c/home/kim/smarthome/.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 r]   )lennpuniqueclasses_r`   XYra   ra   rb   fits   s   zMockClassifier.fitc                 C   s
   |j d S Nr   shape)r`   Tra   ra   rb   predictx   rd   zMockClassifier.predictc                 C   s
   || j  S r]   r^   r`   rj   ra   ra   rb   	transform{   rd   zMockClassifier.transformc                 C   s
   || j  S r]   r^   rr   ra   ra   rb   inverse_transform~   rd   z MockClassifier.inverse_transformNc                 C   s   | j dkr	d}|S d}|S )N         ?        r^   )r`   rj   rk   scorera   ra   rb   rx      s
   
zMockClassifier.scoreFc                 C   s
   d| j iS Nr_   r^   )r`   deepra   ra   rb   
get_params   rd   zMockClassifier.get_paramsc                 K   s   |d | _ | S ry   r^   )r`   paramsra   ra   rb   
set_params   s   
zMockClassifier.set_params)r   NN)F)__name__
__module____qualname____doc__rc   rl   rq   rs   rt   predict_probapredict_log_probadecision_functionrx   r{   r}   ra   ra   ra   rb   r[   m   s    


r[   c                   @   s   e Zd ZdZedd ZdS )LinearSVCNoScorez0A LinearSVC classifier that has no score method.c                 C   s   t r]   )AttributeErrorr`   ra   ra   rb   rx         zLinearSVCNoScore.scoreN)r   r   r   r   propertyrx   ra   ra   ra   rb   r      s    r   ru      )ru   ru   r   r   c                    s*   t   fddtt D ksJ d S )Nc                    s   g | ]} | qS ra   ra   .0igridra   rb   
<listcomp>       z3assert_grid_iter_equals_getitem.<locals>.<listcomp>)listrangere   r   ra   r   rb   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   inputZ
error_typeerror_messagera   ra   rb   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   ru   r      r      r   )Zhamspameggsr   bar   c                 s   s$    | ]}t tt|  V  qd S r]   )tupler   sorteditemsr   pra   ra   rb   	<genexpr>   s   " z&test_parameter_grid.<locals>.<genexpr>c                 s   s     | ]\}}d |d|fV  qdS )r   r   Nra   )r   xyra   ra   rb   r      s    
r   ru   Cr         ?)r0   
isinstancer   r   re   r   r   setr   r   r   r   
IndexError)Zparams1Zgrid1Zparams2Zgrid2r   ZpointsemptyZ	has_emptyra   ra   rb   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 )Nr_   r   r   r   cvverboseZparam_foo_paramsklearn)r[   r)   sysstdoutr   rl   rj   r   best_estimator_r_   rV   cv_results_datarx   r   r   rs   scoringr   r   
ValueError)clfgrid_searchZ
old_stdoutra   ra   rb   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	regressorr   r   Zparam_regressorr   ru   Zcoef_)r=   r   r   r)   rl   rj   r   r   r   hasattrr   )pipe
param_gridr   Zregressor_resultsra   ra   rb   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      ru   r   r   )Zexpected_fit_paramsr_   r   r   raiser   error_scorez0Expected fit parameter\(s\) \['eggs'\] not seen.r   )r   z)Fit parameter spam has length 1; expected)r   r   )rf   arangereshapearrayrL   r   r   AssertionErrorrl   oneszeros)r   rj   r   r   searchererr_msgra   ra   rb   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_stater   r   centers皙?ru   r   r   accuracyr   z
no scoringr   ru   )
rD   r   r   r)   rl   best_params_rx   r   r   	TypeError)r   rj   r   CsZclf_no_scorer   Zgrid_search_no_scorera   ra   rb   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   r   皙?r   	n_samples	n_classesZflip_yr   r   r   r   r   r   roc_aucrv   )r   rD   r)   rl   r   rx   rT   )rj   r   r   r   Zsearch_no_scoringZsearch_accuracyZsearch_no_score_method_aucZ
search_aucZscore_no_scoringZscore_accuracyZscore_no_score_aucZ	score_aucra   ra   rb   test_grid_search_score_method1  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      r   )r   r   r   r   r   r   ru   n_splitsz*The 'groups' parameter should not be None.r   r   groups)rf   randomRandomStater   randintrD   r.   r/   r*   r+   r)   r   r   r   rl   r3   r4   )rngrj   r   r   r   r   Z	group_cvs	error_msgr   gsZnon_group_cvsra   ra   rb   test_grid_search_groupsM  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   ru   r   r   r   alpharv          @rh   F)refit)rf   r   r   r   r)   rD   rl   rV   r   rh   r   r   )rj   r   r   r   ra   ra   rb   test_classes__propertyl  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 )Nr_   ru   r   r   r   r   )r   r   )r[   r)   rl   rj   r   r   r2   )r   r   random_searchra   ra   rb   test_trivial_cv_results_attr  s   r  c            	   
   C   s@  t  } d ddgfD ]g}t| dg diddd}|tt t|ds,t|d	r,t|d
s.J dD ]?}d| d}d| d}tjt|d}t	||t W d    n1 sWw   Y  t
|jjtseJ |t|jjv soJ q0q	d}dD ](}tjt|d t| i |ddddtt W d    n1 sw   Y  qud S )Nr   	precisionr_   r   Fr   r   r   r   best_index_r   )rq   r   r   rs   rt   zhas no attribute ''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)Trecallr   )accprec)r   r   )r[   r)   rl   rj   r   r   r   r   r   getattrr   value	__cause__strr   )	r   r   r   fn_name	outer_msg	inner_msg	exec_infor   r   ra   ra   rb   test_no_refit  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   rv      )r   rD   r)   r   r   r   rl   )X_y_r   r   ra   ra   rb   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  rv   rbfr   )r   kernelgammaautor  )r   rC   r)   rl   rV   Z
dual_coef_r   )r  r  
param_dictr   r   ra   ra   rb   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 )Nr_   ru   r   r   r   )r[   r)   r   rl   rj   r   r   r_   )r   r   ra   ra   rb   /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   ru   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   r   )r   rC   reescaper)   r   r   r   rl   r   rf   r   )rj   r   r  r   r   searchra   ra   rb   test_grid_search_bad_param_grid  sD   





"r$  csr_containerc           	      C   s   t dddd\}}t }t|dddgi}||d d |d d  ||dd  }|jj}| |}t }t|dddgi}||d d  |d d  ||dd  }|jj}t	||kd	kshJ ||ksnJ d S )
Nr  r   r   r  r   r   rv   r  g?)
r   rD   r)   rl   rq   r   r   Ztocoorf   mean)	r%  r  r  r   r   y_predr   y_pred2C2ra   ra   rb   test_grid_search_sparse  s    r*  c                 C   sN  t dddd\}}t }t|dddgidd	}||d d
 |d d
  ||d
d  }|jj}| |}t }t|dddgidd	}||d d
 |d d
  ||d
d  }|jj}t|| ||ksjJ 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   rv   f1r   r  c                 S   s   t | | S r]   )r#   )Zy_true_Zy_pred_ra   ra   rb   f1_loss3  s   z0test_grid_search_sparse_scoring.<locals>.f1_lossF)Zgreater_is_better)	r   rD   r)   rl   rq   r   r   rV   r$   )r%  r  r  r   r   r'  r   r(  r)  r,  ZF1LossZy_pred3ZC3ra   ra   rb   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   rv   )r   rf   dotrp   rC   r)   rl   best_score_rq   r&  r   r   r   tolist)	r  r  K_trainy_trainr   r   ZK_testZy_testr'  ra   ra   rb   #test_grid_search_precomputed_kernel@  s   

"r5  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.  r/  r   r   rv   )	rf   r   r   rC   r)   r   r   r   rl   )r3  r4  r   r   ra   ra   rb   3test_grid_search_precomputed_kernel_error_nonsquare]  s   


"r7  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   r\   r]   	parameterr`   r:  ra   ra   rb   rc   k  rd   zBrokenClassifier.__init__c                 C   s   t | drJ d| _d S )Nhas_been_fit_T)r   r<  r`   rj   r   ra   ra   rb   rl   n  s   
zBrokenClassifier.fitc                 C      t |jd S rm   rf   r   ro   rr   ra   ra   rb   rq   r     zBrokenClassifier.predictr]   )r   r   r   r   rc   rl   rq   ra   ra   ra   rb   r8  h  s
    
r8  z1ignore::sklearn.exceptions.UndefinedMetricWarningc                  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   ru   r:  r  Tr   r   )rf   r   r   r   r)   r8  rl   )rj   r   r   ra   ra   rb   
test_refitv  s   rB  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   ru   r  TrA  r   mean_test_score)r   r)   rD   rl   r  r   keysargmin)
cv_resultsrj   r   r   keyra   ra   rb   refit_callable  s   
z+test_refit_callable.<locals>.refit_callabler   r   rC  r  r   r   rD  r  rA  r   r1  N)r   r)   rD   rl   r  r   )rK  rj   r   r   ra   ra   rb   test_refit_callable  s   
rL  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.
        Nra   rI  ra   ra   rb   refit_callable_invalid_type     zEtest_refit_callable_invalid_type.<locals>.refit_callable_invalid_typer   r   rC  r  r   r   r   ru   r  rA  z&best_index_ returned is not an integerr   N)r   r)   rD   r   r   r   rl   )rO  rj   r   r   ra   ra   rb    test_refit_callable_invalid_type  s   
"rQ  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.
        ra   rN  rR  ra   rb   refit_callable_out_bound  rP  z?test_refit_callable_out_bound.<locals>.refit_callable_out_boundr   r   rC  r  r   r   r   ru   r  rA  zbest_index_ index out of ranger   N)r   rD   r   r   r   rl   )rR  rS  rU  rj   r   r   ra   rT  rb   test_refit_callable_out_bound  s   
"rV  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`.
        Zmean_test_prec)rH  rN  ra   ra   rb   rK    s   z8test_refit_callable_multi_metric.<locals>.refit_callabler   r   rC  r  r  )ZAccuracyr  r   r   rD  rA  r   r1  N)r   r$   r!   r)   rD   rl   r  r   )rK  rj   r   r   r   ra   ra   rb    test_refit_callable_multi_metric  s   	
rW  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   r   i        c                 S      | j dd  dkS )Nru   )r   r   r   rn   r   ra   ra   rb   check_X     z#test_gridsearch_nd.<locals>.check_Xc                 S   r[  )Nru   )rY  rZ  rn   r\  ra   ra   rb   check_y  r^  z#test_gridsearch_nd.<locals>.check_yrl   )r]  r_  methods_to_checkr_   r   r   )
rf   r   r   rL   r)   rl   rx   rj   r   r   )ZX_4dZy_3dr]  r_  r   r   ra   ra   rb   test_gridsearch_nd   s   ra  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   ru   c                 S   
   t | tS r]   r   r   r\  ra   ra   rb   <lambda>     
 z test_X_as_list.<locals>.<lambda>rl   )r]  r`  r   r   r_   r   r   r   rf   r   r   r   rL   r-   r)   rl   r2  rx   r   rj   r   r   r   r   ra   ra   rb   test_X_as_list     
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   ru   c                 S   rb  r]   rc  r\  ra   ra   rb   rd  *  re  z test_y_as_list.<locals>.<lambda>rl   )r_  r`  r   r   r_   r   r   r   rf  rg  ra   ra   rb   test_y_as_list$  ri  rj  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   )	DataFrameSeriesr   r   r   ru   c                    
   t |  S r]   r   r\  )InputFeatureTypera   rb   check_dfD  rd   z#test_pandas_input.<locals>.check_dfc                    rm  r]   rn  r\  )
TargetTypera   rb   check_seriesG  rd   z'test_pandas_input.<locals>.check_series)r]  r_  r_   r   r   )rM   pandasrk  rl  appendImportErrorrf   r   r   r   rL   r)   rl   rx   rq   r   )typesrk  rl  rj   r   ZX_dfZy_serrp  rr  r   r   ra   )ro  rq  rb   test_pandas_input3  s&   

rw  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   ru   )r   initZn_initadjusted_rand_scorefowlkes_mallows_score)r{  r|  )r   r   r   )
n_clusters)r   r   r   r}  r   r   r   r   r   )r   r   r)   dictrl   r   )rj   r   kmr   r   r   ra   ra   rb   test_unsupervised_grid_searchR  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   rC  r   	bandwidth)	estimatorrj   ra   ra   rb   custom_scoringq  r^  z2test_gridsearch_no_predict.<locals>.custom_scoringr   ru   r   )cluster_stdr   r   rD  r  r~  r  rC  )r   r)   r:   r  rl   r   r1  )r  rj   _r#  ra   ra   rb   test_gridsearch_no_predictn  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   ru   )r  r   r   )param_distributionsr   r   c                 S      g | ]}|qS ra   ra   r   r   ra   ra   rb   r         z&test_param_sampler.<locals>.<listcomp>r  )r  r  r   )r   ru   r   r   r   r   r   rY     	   r   r   c                 S   r  ra   ra   r  ra   ra   rb   r     r  c                 S   r  ra   ra   r  ra   ra   rb   r     r  )r   r1   re   )r  samplersamplessamplera   ra   rb   test_param_sampler  s&   " $r  c                    s   | j  t fdd|D sJ  fdd|D |k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 r]   r   rf   maMaskedArray)r   paramrN  ra   rb   r          z/check_cv_results_array_types.<locals>.<genexpr>c                    s   i | ]	}| | j jqS ra   )dtypekindr   rJ  rN  ra   rb   
<dictcomp>  s    z0check_cv_results_array_types.<locals>.<dictcomp>c                 3   r  r]   r  r  rN  ra   rb   r     r  c                 3   s*    | ]}| d s | jtjkV  qdS )ZrankN)
startswithr  rf   float64r  rN  ra   rb   r     s    
rx   zrank_test_%s)	r   allanymultimetric_scorer_rG  r  rf   Zint32)r#  
param_keys
score_keysexpected_cv_results_kindsZscorer_keysrJ  ra   rN  rb   check_cv_results_array_types  s   
r  ra   c                    sJ   || | }t t  t|d  t fdd|| D s#J d S )N)r|   c                 3   s     | ]} | j fkV  qd S r]   rn   r  rI  n_candra   rb   r     s    z(check_cv_results_keys.<locals>.<genexpr>)rV   r   rG  r  )rI  r  r  r  Z
extra_keysall_keysra   r  rb   check_cv_results_keys  s   $r  c                     sH  t 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d}|| | |j t d dksBJ  fdd|D sMJ  fdd|D sXJ ddddd}t|||| t ||| |j  fddt	|D }	t|	sJ t
|	dksJ  fddt	|D }
t|
sJ t
|
dksJ d S )Nrx  r   rC  r  r   r  ru   r   r   r  r   r  polyr   r  Zdegreeparam_Cparam_degreeparam_gammaparam_kernelrF  mean_train_scorerank_test_scoreZsplit0_test_scoreZsplit1_test_scoreZsplit2_test_scoreZsplit0_train_scoreZsplit1_train_scoreZsplit2_train_scorestd_test_scorestd_train_scoremean_fit_timestd_fit_timemean_score_timestd_score_timer   T)r   r   return_train_scorer  c                 3   s(    | ]}|d krt  | dkV  qdS )r  r   Nr  r   krN  ra   rb   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  ru   Nr  r  rN  ra   rb   r     s    r   fOc                    sH   g | ] } d  | dkr d j | o! d j | o! d j |  qS )r  r  r  r  r  maskr   rN  ra   rb   r     s    z/test_grid_search_cv_results.<locals>.<listcomp>c                    sJ   g | ]!} d  | dkr d j |  o" d j |  o" d j | qS )r  r  r  r  r  r  r   rN  ra   rb   r     s    )r   r  r)   rC   rl   r   r  r  r  r   re   )rj   r   Zn_grid_pointsr|   r  r  n_candidatesr#  r  Zpoly_resultsZrbf_resultsra   rN  rb   test_grid_search_cv_results  sZ   


	
	r  c            	         s   t 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d}|| | |j ddddd}t|||| t ||| t fddt	|D s]J t fddt	|D slJ d S )Nrx  r   rC  r     r  r   )scaler   r  r  r   r   r  r  r  T)r   r   r  r  r  r   r  c                 3   sL    | ]!} d  | dkr d j | o! d j | o! d j |  V  qdS )r  r  r  r  r  Nr  r   rN  ra   rb   r   A  s    z0test_random_search_cv_results.<locals>.<genexpr>c                 3   sN    | ]"} d  | dkr d j |  o" d j |  o" d j | V  qdS )r  r  r  r  r  Nr  r   rN  ra   rb   r   J  s    )
r   r
   r2   rC   rl   r   r  r  r  r   )	rj   r   n_search_iterr|   r  r  r  r#  r  ra   rN  rb   test_random_search_cv_results  s@   	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   ru   r   FP   )r   r   r  shuffler   r  r   T)r  r   r  c                       g | ]} j d |  d qS )split%d_test_scorer   r   r   sr#  ra   rb   r   u      z+test_search_default_iid.<locals>.<listcomp>rF  r  c                    r  )zsplit%d_train_scorer   r  r  r  ra   rb   r   ~  r  r  r  r  gUUUUUU?ra   )r   rf   r   ro   boolwhererC   rl   r   r   	n_splits_r   rR   r   approxr&  Zstd)r   specialized_paramsrj   r   r  r   Zcommon_paramsZtest_cv_scoresZ	test_meanZtest_stdZtrain_cv_scoresZ
train_meanZ	train_stdra   r  rb   test_search_default_iidU  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 )Nrx  r   rC  r  r   r  ru   r   r   r  r  r   r  r   r  r   r  F)r   r   r   r   )
r   r  r$   r!   r&   r)   rC   rl   rt  *compare_cv_results_multimetric_with_single)rj   r   r   r|   Zgrid_searchesr   r   ra   ra   rb   '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 )Nrx  r   rC  r  r   r  ru   r   r   )base)r   r  TF)r  r   r  Tr   F)probabilityr   )r   r   r  r   r   r   )r   r  rf   Zlogspacer   r   rC   r2   rl   rt  r  )compare_refit_methods_when_refit_with_acc)rj   r   r   r  r|   r   Zrandom_searchesr   r  r   r   ra   ra   rb   )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$Z	_accuracyr!  subr   r  vra   ra   rb   r    s    z>compare_cv_results_multimetric_with_single.<locals>.<dictcomp>c                 S   r  )r  Z_recallr  r  ra   ra   rb   r         c                 3   s"    | ]}t  | d kV  qdS )ru   N)rf   r  r  Zcv_results_multira   rb   r     s
    
z=compare_cv_results_multimetric_with_single.<locals>.<genexpr>)r  r  r  r  c                 S       i | ]\}}| d s||qS _timeendswithr  ra   ra   rb   r    r  c                 S   r  r  r  r  ra   ra   rb   r    r  N)r  rV   r   r  r   r   updater  rf   testingassert_equal)search_multi
search_accZ
search_recZcv_results_acc_recra   r  rb   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   rC  r  )rq   r   r   )r  r1  r   )r   r   rT   r	  rx   )r  r  r   rj   r   methodrJ  ra   ra   rb   r    s   
r  	max_depthr   )r  r  r  r   c                 C   s   t dddd\}}| || d| jj d}d}tjt|d}| | W d    n1 s0w   Y  t|j	j
ts>J |t|j	j
ksHJ d S )	Nr   r   rC  r  r  z"' has no attribute 'score_samples'z@'DecisionTreeClassifier' object has no attribute 'score_samples'r   )r   rl   	__class__r   r   r   r   score_samplesr   r
  r  r  )rS  rj   r   r  r  r  ra   ra   rb   "test_search_cv_score_samples_error  s   r  c                  C   s0  dd } t | }tdddd\}}t|}tt dddgid	}|j| d
 tjt	dd |j
|||d W d   n1 sAw   Y  |j|d
 tjt	dd |j
|||d W d   n1 sfw   Y  |jt|dddd tjt	dd |j
|||d W d   dS 1 sw   Y  dS )zhChecks that fitting with sample_weight raises a warning if the scorer does not
    support sample_weightc                 S   rM  )z9Fake scoring function that does not support sample_weightr   ra   )y_truer'  ra   ra   rb   fake_score_func3  r   z>test_unsupported_sample_weight_scorer.<locals>.fake_score_funcr   r   rC  r  r   ru   r  r   zdoes not support sample_weightr   sample_weightNr   )Zfaker   FrA  z2The scoring fake=.* does not support sample_weight)r$   r   rf   Z	ones_liker)   r   r}   r   warnsUserWarningrl   r  )r   Zfake_scorerrj   r   swrS  ra   ra   rb   %test_unsupported_sample_weight_scorer/  s*   
"r  r  )ru   r   r   r   )ru   r   rE  c                 C   s  t | }t | }t|dd t|dd tjd}d}d}d}|| }|||d }|jd||d}	|jdd	|d}
tt||}|}|	}|}t	t
 j||d
}|j|d |j|
dd}|j|
d}|j|
d}t	t
 j||d
}|j|d t||}t||}|j||d d |j|||
d dd |jD }|D ]}|j| }|j| }| d}t|||d qdD ]}t||}t||}| d}t|||d qdD ]"}t| |rt|||}t|||}d| d}t|||d qd S )Nr   r   rC  r   r  r   r   )sizer   r   r   )repeatsaxis)r  )r   r  c                 S   s   g | ]	}| d r|qS )rx   r  r  ra   ra   rb   r   ~  s
    
z<test_search_cv_sample_weight_equivalence.<locals>.<listcomp>z4 values are not equal for weighted/repeated datasetsr   )r1  r  )r   r   rq   rs   zComparing the output of zn revealed that fitting with `sample_weight` is not equivalent to fitting with removed or repeated data points.)r   rW   rf   r   r   randr   Ztiler   r   r.   splitr}   repeatrX   rl   r   rR   r	  rT   r   rS   )r  Zestimator_weightedZestimator_repeatedr   r   Zn_samples_per_groupZn_groupsr   rj   r   r  r   Z
X_weightedZ
y_weightedZgroups_weightedZsplits_weightedZ
X_repeatedZ
y_repeatedZgroups_repeatedZsplits_repeatedr  rJ  s1s2r   r  ra   ra   rb   (test_search_cv_sample_weight_equivalenceO  sb   










r  T)Z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 )NrC  rX  g333333?r   r   r   )r   r  r   r  r   ir   )lowhighr  r	  ru   r   )rf   r   r   intr   Zconcatenater   r   rl   rR   r  r   )rS  r   r   Zoutliers_fractionZ
n_outliersZ	n_inliersrj   r  ra   ra   rb   #test_search_cv_score_samples_method  s*   "r  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 )Nrx  rC  ry  r   )ru   gjt?MbP?T)r   r  r   )r   r  r  rF  r   ru   r  r   r  )ru   ru   r   )	r   r)   rC   r2   rl   r   rT   rf   Zallclose)rj   r   r   r   r   r#  rI  ra   ra   rb   (test_search_cv_results_rank_tie_breaking  s.   
r  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 )Nru   r   r   r   r   )r   r   r   r   ru   r   r   r   Zparam_random_state)rI   rH   r-   r)   rl   rV   r   )rj   r   
estimatorsest_parametersr   estr   ra   ra   rb   !test_search_cv_results_none_param  s   "r  z+ignore::sklearn.exceptions.FitFailedWarningc                  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   ru   r   r   r   )r   ru   ru   r   r   r   )r   r   r   )r  r  )r  r  rw   refit_time_)rD   r)   r2   rl   rf   r  r   r   r   r  float)Zsvcrj   r   r   rsr#  rJ  ra   ra   rb   test_search_cv_timing  s4   
r   c               	      sb  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
 fddt| D }t|	||D ]:\}\}}||| ||  |dkrt|| ||| }n|dkr||| }t|| |}t|||  qrqQqd S )Nr   r   r   r   r   r   )r+  r   r   )r   r   )rF  r  c                 s   s    | ]}d | V  qdS )r  Nra   )r   Zcv_ira   ra   rb   r   /  s    
z9test_grid_search_correct_score_results.<locals>.<genexpr>r   )r   c                    s   g | ]}j d |    qS r  r  r  Zcandidate_ir   ra   rb   r   9  r  z:test_grid_search_correct_score_results.<locals>.<listcomp>r+  r   )rD   r   r)   rl   r   r   rG  r   r   r  rf   isinr3   r  	enumerater}   r   r  r#   rq   r   r'   rT   )r   r   rj   r   r   rx   rI  Zresult_keysZexpected_keysr   r   Z	cv_scoresr   traintestcorrect_scoredecra   r"  rb   &test_grid_search_correct_score_results#  s@   



r)  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 )Nr_   r   Tr   r  r   )r   r   r   )r[   r)   rl   rj   r   pickleloadsdumpsrU   rq   r2   )r   r   Zgrid_search_pickledr   Zrandom_search_pickledra   ra   rb   test_pickleH  s   r-  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   )Zreturn_indicatorr   r  )ru   r   r   r   r   r   r|   r  r   )r   r   ra   )r   r-   rI   rH   r)   rl   r   r   re   r}   r$  r  rx   rT   r2   )rj   r   r  r   r  r  r   Z
res_paramscand_ir   r%  r&  r'  r   ra   ra   rb   &test_grid_search_with_multioutput_dataZ  sJ   

r/  c                  C   sL   t ddd} g d}tdd}t|i dd| |}t|d	r$J d S )
Nr6  r   r   r   r   ru   ru   ru   F)r  r   r   r   )rf   r   r   rC   r)   rl   r   rj   r   r   r   ra   ra   rb   test_predict_proba_disabled  s
   
r2  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 )Nr6  r  r   r   r   r0  Zimputerr&  )ZstrategyZmissing_valuesZ
classifierZclassifier__foo_paramr   r   )
rf   r   r  r   nanr=   r   r[   r)   rl   )rj   r   r   ra   ra   rb   test_grid_search_allows_nans  s   "r4  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()r   Nc                 C   r\   r]   r9  r;  ra   ra   rb   rc     rd   zFailingClassifier.__init__c                 C   s   | j tjkr
tdd S )Nz%Failing classifier failed as required)r:  r5  FAILING_PARAMETERr   r=  ra   ra   rb   rl     s   zFailingClassifier.fitc                 C   r>  rm   r?  rr   ra   ra   rb   rq     r@  zFailingClassifier.predictc                 C   rM  )Nrw   ra   ri   ra   ra   rb   rx        zFailingClassifier.scorer]   r~   )	r   r   r   r   r6  rc   rl   rq   rx   ra   ra   ra   rb   r5    s    

r5  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 )Nr6  r   r   r  r:  r   ru   r   r   Frw   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   r|   c                    s    t  fddtjD S )Nc                    s   g | ]} j d |   qS r!  r  r  )r   r   ra   rb   r     s    zPtest_grid_search_failing_classifier.<locals>.get_cand_scores.<locals>.<listcomp>)rf   r   r   r  r   )r   r<  rb   get_cand_scores  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_parameterrw   N)r   r5  r6  rf   r  r   r.  r=  r   ra   rb   r     s    z6test_grid_search_failing_classifier.<locals>.<genexpr>r3  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 )r>  N)r   r5  r6  rf   r  isnanr?  r@  ra   rb   r     s    r  r   ru   r   )r   r5  r)   r!  compileDOTALLr   r  r   rl   re   r   r  r   r  r6  r  )rj   r   r   warning_messager  Zranksra   r@  rb   #test_grid_search_failing_classifier  sZ   	
rE  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 )Nr6  r   r   r  r:  r   rw   r   zrAll the 15 fits failed.+15 fits failed with the following error.+ValueError.+Failing classifier failed as requiredr:  r   r   r5  r)   r6  r!  rB  rC  r   r   r   rl   )rj   r   r   r   rD  ra   ra   rb   )test_grid_search_classifier_all_fits_fail  s   "rH  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 )Nr6  r   r   r  r:  r8  r   Fr   r9  )r   r5  r)   r   r   r   rl   r1  ra   ra   rb   )test_grid_search_failing_classifier_raise  s   	"rI  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   ru   )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     r   c   rC  )r   r   c                 S   s&   g | ]}d |d |d |d f qS )z	a%db%dc%drJ  rK  rL  ra   r   ra   ra   rb   r   L  s   & z7test_parameters_sampler_replacement.<locals>.<listcomp>r   rY  )
r1   r   r  r  r   re   r0   r   r   r	   )	r|   r  r   Z	grid_sizeZexpected_warningr  rQ  Zhashable_samplesZparams_distributionra   ra   rb   #test_parameters_sampler_replacement.  s:   

rT  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lossZlog_loss   r   r   r   r   r   ru   ru   ru   Zhinge)rU  r   r  r   r   r   )	rf   r   r   r)   r    r   rl   r   r   )r   rj   r   r   ra   ra   rb   #test_stochastic_gradient_loss_paramV  s&   

rY  c                  C   sJ   t ddd} g d}tdd}t|dddgid	d
}|| | d S )Nr   r   rW  r   r   r   r   r   r   )r   r   )rf   r   r   rD   r)   rl   r1  ra   ra   rb   %test_search_train_scores_set_to_falsev  s
   
rZ  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 ] fddtdD |< qt|d |d  t|d |d  qd S )Nr   r   r   ry  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)rI  rJ  ra   ra   rb   _pop_time_keys  s   z>test_grid_search_cv_splits_consistency.<locals>._pop_time_keysc                 S   r  r  r  r  ra   ra   rb   r    r  z:test_grid_search_cv_splits_consistency.<locals>.<dictcomp>c                 S   r  r  r  r  ra   ra   rb   r    r  )r   r   r   r   )r   r  )r%  r&  r   c                    s"   g | ]} j d |f   qS )zsplit%d_%s_scorer  r  r   Zparam_iZ
score_typera   rb   r     s    z:test_grid_search_cv_splits_consistency.<locals>.<listcomp>ru   r   r   )r   r)   rD   r8   rl   r-   r   r  r   rf   r  r  r   r   r   rU   )	r   r   rj   r   Zgs2Zgs3Zgs4r\  Zper_param_scoresra   r]  rb   &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 )Nr_   r   r   r   r   )r[   r)   rl   rj   r   rt   rs   rV   )r   r   ZX_round_tripra   ra   rb   +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  r  z	Checking r
  )
r   r   rG  r  rf   Z
asanyarrayr  r  rV   rR   )resultsgscvZexp_resultsr  ra   ra   rb   check_results  s   
z-test_custom_run_search.<locals>.check_resultsc                    s   t | dd S )NTr  )r)   rl   r  )rj   r   r   ra   rb   fit_grid  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 r]   superrc   r`   r  kwargsr  ra   rb   rc        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  ru   r   min_samples_splitr   r   ra   )r`   evaluater`  rb  rd  ra   rb   _run_search  s   z:test_custom_run_search.<locals>.CustomSearchCV._run_search)r   r   r   rc   ro  __classcell__ra   rn  rj  rb   CustomSearchCV  s    rq  r   r   r   r   )r   Zn_informativer   Trc  r  ru   r   rl  r   r   r   r  >   r  r   r  r   rh   zAttribute %s not equal)r6   rI   r   rl   r   dirislowerr	  )rq  Zmycvra  r`  attrra   )rj   rb  r   rd  r   rb   test_custom_run_search  s*   


	ru  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                    re  r]   rf  rh  rj  ra   rb   rc   "  rk  zDtest__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.__init__Nc                 [   s   | S r]   ra   )r`   rj   r   r   
fit_paramsra   ra   rb   rl   %  r7  z?test__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.fitr~   )r   r   r   rc   rl   rp  ra   ra   rj  rb   NoRunSearchSearchCV!  s    rw  c                       s   e Zd Z fddZ  ZS )z3test__custom_fit_no_run_search.<locals>.BadSearchCVc                    re  r]   rf  rh  rj  ra   rb   rc   ,  rk  z<test__custom_fit_no_run_search.<locals>.BadSearchCV.__init__)r   r   r   rc   rp  ra   ra   rj  rb   BadSearchCV+  s    rx  z_run_search not implemented.r   )r6   rC   rl   rj   r   r   r   NotImplementedError)rw  rx  ra   ra   rb   test__custom_fit_no_run_search   s   "rz  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  ra   ra   )r   ura   ra   rb   r   ;  r  z0test_empty_cv_iterator_error.<locals>.<listcomp>r   r   r  rE  r   r   r   n_jobszNNo fits were performed. Was the CV iterator empty\? Were there no candidates\?r   )
r-   r  rj   r2   r   r   r   r   rl   r   )r   
train_sizeridgera   ra   rb   test_empty_cv_iterator_error4  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                 _   rM  )Nru   ra   )r`   argskwra   ra   rb   get_n_splitsQ  r7  z;test_random_search_bad_cv.<locals>.BrokenKFold.get_n_splitsN)r   r   r   r  ra   ra   ra   rb   BrokenKFoldP  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-   r2   r   r   r   r   rl   rj   r   )r  r   r  r  ra   ra   rb   test_random_search_bad_cvM  s   
"r  r  F)r   r   r   r  r   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 qP|j
d  }t|j
d }t|j
d | | t|j
d |  |k sJ d S )Nr   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 rm   )n_countsr   ra   ra   rb   rc   }  rd   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 )Nru   r   r   )r  rf   r3  )r`   r  rj   r   ra   ra   rb   __call__  s   zQtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorer.__call__N)r   r   r   r   rc   r  ra   ra   ra   rb   FailingScorerz  s    r  r   )r   r   r  r&  r%  zOne or more of the z scores are non-finiter  rF  )r   rH   r   r  r  rl   re   zipr  messager   maxrf   rA  rV   r  )r   r  r  rj   r   r  r   Zwarn_msgZset_with_warningmsgZdatasetZ	last_rankZnon_finite_maskra   ra   rb   1test_searchcv_raise_warning_with_non_finite_scoref  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   ru   )ru   r   ru   ru   tnfpfntp)rq   r"   )r   rj   r   r'  cmra   ra   rb   custom_scorer  s   

zAtest_callable_multimetric_confusion_matrix.<locals>.custom_scorer(   r   rC  r  r   r   r   ru   r  rA  r  zmean_test_{}r  )r   rD   r)   rl   formatr   rq   r"   rx   r   r  )	r  rj   r   r  r#  Zscore_namesnamer'  r  ra   ra   rb   *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   )rq   r&   r!   r  rj   r   r'  ra   ra   rb   r    s   
zHtest_callable_multimetric_same_as_list_of_strings.<locals>.custom_scorerr  r   rC  r  r   r   r   ru   r  rA  r   	r   rD   r)   rl   r1  r   r  r  rx   )r  rj   r   r  search_callable
search_strra   ra   rb   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 r]   )rq   r&   r  ra   ra   rb   r    s   

zHtest_callable_single_metric_same_as_single_string.<locals>.custom_scorerr  r   rC  r  r   r   r   ru   TrA  r  r  )r  rj   r   r  r  r  Zsearch_list_strra   ra   rb   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 )NZbad_nameru   ra   r  rj   r   ra   ra   rb   
bad_scorer     zBtest_callable_multimetric_error_on_invalid_key.<locals>.bad_scorerr  r   rC  r  r   r   r   ru   Z	good_namerA  z`For multi-metric scoring, the parameter refit must be set to a scorer key or a callable to refitr   )r   r)   rD   r   r   r   rl   )r  rj   r   r   r  ra   ra   rb   .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  ru   ra   r  ra   ra   rb   r  	  r  zBtest_callable_multimetric_error_failing_clf.<locals>.custom_scorerr6  r   r   r  r:  r8  Fr   r9  zm5 fits failed.+total of 15.+The score on these train-test partitions for these parameters will be set to 0\.1r:  r   Zmean_test_acc)ru   ru   r   )r   r5  r)   r!  rB  rC  r   r  r   rl   rR   r   )r  rj   r   r   r   rD  ra   ra   rb   +test_callable_multimetric_error_failing_clf 	  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  ra   r  ra   ra   rb   r  	  r  zBtest_callable_multimetric_clf_all_fits_fail.<locals>.custom_scorerr6  r   r   r  r:  r   Fr   r9  z1ValueError: Failing classifier failed as requiredz5All the 15 fits failed.+your model is misconfigured.+r:  r   rG  )r  rj   r   r   r   Zindividual_fit_error_messager   ra   ra   rb   +test_callable_multimetric_clf_all_fits_fail	  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  Zmax_iterr   ru   r   n_features_in_)r   r   r)   r2   r   rl   r  )r  rj   r   Zgbdtr   r   r  ra   ra   rb   test_n_features_in:	  s   
r  pairwisec                    sJ   G  fdddt }| }d}t|ddgi} | jj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  ZS )zStest_search_cv_pairwise_property_delegated_to_base_estimator.<locals>.TestEstimatorc                    s   t   }|j_|S r]   )rg  __sklearn_tags__
input_tagsr  r`   tags)r  r  ra   rb   r  V	  s   
zdtest_search_cv_pairwise_property_delegated_to_base_estimator.<locals>.TestEstimator.__sklearn_tags__)r   r   r   r  rp  ra   r  rj  rb   TestEstimatorU	  s    r  z.BaseSearchCV pairwise tag must match estimatorr  r   N)r   r)   r  r  r  )r  r  r  attr_messager   ra   r  rb   <test_search_cv_pairwise_property_delegated_to_base_estimatorK	  s
   
r  c                  C   s\   G dd dt } |  }d}dD ]}|j|d t|ddgi}|| jj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 fddZ  ZS )zXtest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwiseTc                 S   r\   r]   r  )r`   r  ra   ra   rb   rc   k	  rd   zatest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise.__init__c                    s   t   }| j|j_|S r]   )rg  r  r  r  r  rj  ra   rb   r  n	  s   

zitest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise.__sklearn_tags__)T)r   r   r   rc   r  rp  ra   ra   rj  rb   EstimatorPairwisej	  s    
r  z4BaseSearchCV _pairwise property must match estimatorr  r  r  r   N)r   r}   r)   r  r  r  )r  r  r  Z_pairwise_settingr   ra   ra   rb   =test_search_cv__pairwise_property_delegated_to_base_estimatora	  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.
    rx  r   r   ry  r  r   r   r.  )Zmetricz2GridSearchCV not identical with precomputed metricN)r   r;   r)   rl   rq   r(   r  )r   r   rj   r   grid_paramsr   r   Zpreds_originalZX_precomputedZpreds_precomputedr  ra   ra   rb   ;test_search_cv_pairwise_property_equivalence_of_precomputed~	  s   



r  zSearchCV, param_searchrJ  r   rE  r   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   r\   r]   )rJ  )r`   rJ  ra   ra   rb   rc   	  rd   z5test_scalar_fit_param.<locals>.TestEstimator.__init__c                 S   s
   || _ d S r]   )r_)r`   rj   r   rra   ra   rb   rl   	  rd   z0test_scalar_fit_param.<locals>.TestEstimator.fitc                 S   s   t jt|dS )Nrn   )rf   r   re   rr   ra   ra   rb   rq   	  r@  z4test_scalar_fit_param.<locals>.TestEstimator.predictr]   )r   r   r   rc   rl   rq   ra   ra   ra   rb   r  	  s    

r  rC  r   )r  )r   r   r   rl   r   r  )r   param_searchr  modelrj   r   ra   ra   rb   test_scalar_fit_param	  s
   
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 )	NrC  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 )Nr  r   r   ru   )rg  rl   callabler   r   ndim)r`   rj   r   r  tuple_of_arraysscalar_paramcallable_paramrj  ra   rb   rl   	  s   	z=test_scalar_fit_param_compat.<locals>._FitParamClassifier.fitNNNN)r   r   r   rl   rp  ra   ra   rj  rb   _FitParamClassifier	  s    r  c                   S   s   d S r]   ra   ra   ra   ra   rb   _fit_param_callable	  r7  z9test_scalar_fit_param_compat.<locals>._fit_param_callable)r  r  r  )r5   r   r    rl   )
r   r  ZX_trainZX_validr4  Zy_validr  r  r  rv  ra   ra   rb   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      r   r   ru   r6  ZtransformerZ	predictorr   )Ztransformer__paramZpredictor__paramar   rF  )rf   r   r   Zrandnr   r=   rP   rl   r   rG  rq   r   rV   rx   r   r  r!   rR   r&  r%   )	r   r  r   rj   r   r  r|   r#  r'  ra   ra   rb   1test_search_cv_using_minimal_compatible_estimator	  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   r   r   r   r   r   r   r   r   r   )r   r   r   r  z$score=\(train=[\d\.]+, test=[\d.]+\)zscore=[\d\.]+N)	r   rD   r)   rl   Z
readouterroutr!  findallre   )Zcapsysr  rj   r   r   r   Zcapturedr   ra   ra   rb   test_search_cv_verbose_3
  s"   



r  r  c           	      C   s   t dd\}}t gdgd}|d d j}tdt fdg}||i}| |fd	d
dd|||}|d d j|ks>J |jjd jdksIJ d S )NrC  r   rE  )r   Zclf__Cr   r   Ztrs)r   NTr   r   r   r   r   )r   rD   r   r=   rP   rl   r   Znamed_steps)	r   r  rj   r   r|   Zorig_Cr   param_grid_searchr   ra   ra   rb   test_search_estimator_param%
  s   
r  c               	   C   s   ddd} t dt fdt fg}t|| dddd	dd
}g d}g d}||| |jd }tjdtd}g d|d d < tj	
|j| d S )N)r  ru   r   )l1l2)Zvect__ngram_rangeZ
vect__normZvectr   r   r   r   ru   )r  r  r   r   r~  r   r   )onerP  threefourfive)r   r   ru   r   ru   Zparam_vect__ngram_ranger  )r  r  r  )r=   r   r9   r2   rl   r   rf   r   objectr  rV   r   )Zparameter_gridpipeliner   Z
data_trainZdata_targetresultZexpected_datara   ra   rb   test_search_with_2d_arrayA
  s0   	
r  c                  C   s6  t dd\} }tdt fdt fg}dt t gi}t||dd}tdd | }d	|v s2J W d
   n1 s<w   Y  || | tdd | }d	|v sWJ W d
   n1 saw   Y  t||dd}|| | tdd | }d	|vsJ d|v sJ W d
   d
S 1 sw   Y  d
S )z5Test different HTML representations for GridSearchCV.rC  r   r  r   F)r   r   Zdiagram)displayz<div>DummyClassifier</div>NTz<div>LogisticRegression</div>)	r   r=   rB   r   r   r)   r   Z_repr_html_rl   )rj   r   r  r   rS  Z	repr_htmlra   ra   rb   test_search_html_repr^
  s(   "r  )Zenable_metadata_routingc              	   C   s   t dd\}}t|}tjd}||}||}t }|ddgii}	t }
t|
dj	ddd	}t
|d
d}| |fd
d|d|	j||||d t|
sQJ |
D ]}t|ddd	||d qSdS )zMTest that *SearchCV forwards metadata correctly when passed multiple metrics.rC  r   r   r   ru   )registryscore_weightsscore_metadata)r  metadatar   )Z	my_scorerr   r   r  )r  r  rx   Z_score)objr  parentZsplit_paramsr  r  N)r   rZ   rf   r   r   r  rD   rF   rE   Zset_score_requestr  rl   re   rG   )r   r  rj   r   r   r   r  r  r  r  Zscorer_registryZscorerr   Z_scorerra   ra   rb   *test_multi_metric_search_forwards_metadata~
  s4   



r  c                 C   s   t dd\}}t }|ddgii}| |fddi|||}tjtdd |j||dd	 W d
   d
S 1 s:w   Y  d
S )z{*SearchCV should reject **params when metadata routing is not enabled
    since this is added only when routing is enabled.rC  r   r   ru   r   r   zis only supported ifr   )r  N)r   rD   rl   r   r   r   rx   )r   r  rj   r   r  r  r   ra   ra   rb   1test_score_rejects_params_with_no_routing_enabled
  s   "r  c                  C   s   G dd dt t} dddiddigdddggd	digd
dgd}t| t |dd}tdd\}}||| |D ]}|jd|  jtksHJ q9dS )zQNon-regression test for https://github.com/scikit-learn/scikit-learn/issues/29074c                   @   s0   e Zd Z				dddZd	ddZdd ZdS )
z8test_cv_results_dtype_issue_29074.<locals>.MetaEstimatorNc                 S   s"   || _ || _|| _|| _|| _d S r]   )base_clf
parameter1
parameter2
parameter3
parameter4)r`   r  r  r  r  r  ra   ra   rb   rc   
  s
   
zAtest_cv_results_dtype_issue_29074.<locals>.MetaEstimator.__init__c                 S   s   | j || | S r]   )r  rl   r=  ra   ra   rb   rl   
  s   z<test_cv_results_dtype_issue_29074.<locals>.MetaEstimator.fitc                 S   s   | j ||S r]   )r  rx   r=  ra   ra   rb   rx   
  s   z>test_cv_results_dtype_issue_29074.<locals>.MetaEstimator.scorer  r]   )r   r   r   rc   rl   rx   ra   ra   ra   rb   MetaEstimator
  s    

r  NoptionABru   r   rJ  Zstr1Zstr2)r  r  r  r  r   rX  r   r   Zparam_)	r   r   r)   r   r   rl   r   r  r  )r  r   r   rj   r   r  ra   ra   rb   !test_cv_results_dtype_issue_29074
  s    
r  c                  C   s   t d} | g dg dg dd}|jddd}|d }td	td
ddgfgdd}td	|fdt fg}dtd
dt gi}t	||dd}|
|| |jd jtksYJ dS )zNCheck cv_results_ for estimators with a `dtype` parameter, e.g. OneHotEncoder.rs  )ru   r   r   r   r   )rJ  rJ  rJ  rJ  rJ  )rv   gffffff@r   g      @rv   )Z	numeric_1object_1targetr  ru   r  encF)Zsparse_outputr  Zpassthrough)	remainderr   Zenc__encr   r   Zparam_enc__encN)r   Zimportorskiprk  Zdropr   r?   r=   r   r@   r)   rl   r   r  r  )pdZdfrj   r   r  r   r  r   ra   ra   rb   'test_search_with_estimators_issue_29157
  s4   
r  c                     s|   d t dd\} }ttddt } fdddD } fdd|D }t|d	|id
}|| | |jd jtks<J dS )zwCheck that GridSearchCV works with params that are arrays of different sizes.

    Non-regression test for #29277.
    r   r  Zperiodic)Zextrapolationc                    s   g | ]} | qS ra   ra   r   r  ra   rb   r     r   z4test_cv_results_multi_size_array.<locals>.<listcomp>)r   rZ     c                    s*   g | ]}t d t jd |d fqS )r   r   r   )rf   Zlinspacepir   )r   Zn_knotsr  ra   rb   r     s    Zsplinetransformer__knotsr  Zparam_splinetransformer__knotsN)	r   r>   rA   r   r)   rl   r   r  r  )rj   r   Zspline_reg_pipeZn_knots_listZ
knots_listZspline_reg_pipe_cvra   r  rb    test_cv_results_multi_size_array  s"   
r  zarray_namespace, device, dtype)Zidsc                 C   s   t ||}tdd}||}|j||d}tdgd dgd  }|j||d}	tdd" | t d	g d
iddd}
|
	||	 |

||	 W d    d S 1 sWw   Y  d S )Nr   )r   r   )devicer   r   ru   T)Zarray_api_dispatchZtol)rE  r  g-C6?gh㈵>gư>gHz>r   r   r   )rQ   rf   r   r   ZastypeZasarrayr   r   r   rl   rx   )r   Zarray_namespacer  r  Zxprj   ZX_npZX_xpZy_npZy_xpr   ra   ra   rb   #test_array_api_search_cv_classifier+  s    


"r  )r  r  r  )r   r   )candidate_paramsexpectedZ	param_foozsimple numeric, single param)idr   r   Z	param_bar)r   r   r   )FFTr  z1simple numeric, one param is missing in one roundr  zlists of different lengthszlists tuplesr  c                 C   sh   t t| }t||D ]&\\}}\}}||ksJ |j|jks!J tj|| tj|j|j qd S r]   )r   r7   r  r  rf   r  rV   r  )r  r  r  rJ  r
  Zexpected_keyZexpected_valuera   ra   rb   &test_yield_masked_array_for_each_paramS  s   6r  c                  C   sX   dd t dD } t  tdt tt|  W d    d S 1 s%w   Y  d S )Nc                 S   s   g | ]}d |iqS )r  ra   r   ra   ra   rb   r     r   z>test_yield_masked_array_no_runtime_warning.<locals>.<listcomp>rR  error)r   warningscatch_warningssimplefilterRuntimeWarningr   r7   )r  ra   ra   rb   *test_yield_masked_array_no_runtime_warning  s
   
"r  )ra   )r   r*  r!  r   r   collections.abcr   r   	functoolsr   ior   	itertoolsr   r   rv  r   numpyrf   r   Zscipy.statsr	   r
   r   r   r   Zsklearn.baser   r   r   r   Zsklearn.clusterr   Zsklearn.composer   Zsklearn.datasetsr   r   r   Zsklearn.discriminant_analysisr   Zsklearn.dummyr   Zsklearn.ensembler   Zsklearn.exceptionsr   Zsklearn.experimentalr   Zsklearn.feature_extraction.textr   Zsklearn.imputer   Zsklearn.linear_modelr   r   r   r    Zsklearn.metricsr!   r"   r#   r$   r%   r&   r'   Zsklearn.metrics.pairwiser(   Zsklearn.model_selectionr)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   Zsklearn.model_selection._searchr6   r7   Z$sklearn.model_selection.tests.commonr8   Zsklearn.naive_bayesr9   Zsklearn.neighborsr:   r;   r<   Zsklearn.pipeliner=   r>   Zsklearn.preprocessingr?   r@   rA   rB   Zsklearn.svmrC   rD   Z%sklearn.tests.metadata_routing_commonrE   rF   rG   Zsklearn.treerH   rI   Zsklearn.utils._array_apirJ   rK   Zsklearn.utils._mockingrL   rM   Zsklearn.utils._testingrN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   Zsklearn.utils.estimator_checksrX   Zsklearn.utils.fixesrY   Zsklearn.utils.validationrZ   r[   r   r   rj   r   r   markZparametrizer   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r$  r*  r-  r5  r7  r8  filterwarningsrB  rL  rQ  rV  rW  ra  rh  rj  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r)  r-  r/  r2  r4  r5  rE  rH  rI  rT  rY  rZ  r^  r_  ru  rz  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  Zone_hot_encoderZordinal_encoderr  r  r   r  Zma_with_tuplesr  r  r  ra   ra   ra   rb   <module>   sR   $	<0'"$
+
	(

$

-ZE
8#$&

 
	A


!"

(%.	Q( 	_	9
-
 


3 
-!

""(

5	