
    Pic                       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)ee          Z G d* d+eg          Z ej        d,d,gd-d,gd.d.gd/d.gg          Z ej        g d0          Zd1 Zej                            d2eL e	eMd34          g          ej                            d5ded6fd7dgidged8fd7died9fg          d:                         Zd; Zd< Zd= Zej                            d>eEeNg          d?             Zd@ ZdA ZdB ZdC ZdD ZdE ZdF ZdG ZdH ZdI Zej                            dJe          dK             Zej                            dJe          dL             ZdM ZdN Z G dO dPe          Zej                            dQ          dR             ZdS ZdT Zej                            dUd,d/g          ej                            dVeNeEg          dW                         ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` ZddbZdc Zdd Zej                            deeEdfdgd.d3giifeNdgd.d3gid/dhfg          di             Zdj Zdk Zdl Zdm Zej                            dV eN em            dndod3gip           eE em            dndod3giq          g          dr             Zds Zej                            dt eE e7            dgg duiq           eN e8            dvg dwip          g          dx             Zej                            dV eN e\dyz          d{dod3gid|}           eE e\dyz          d{dod3gid|~          g          d             Zd Zd Zej                            d          d             Zd Zd Zd Zd Zd Z G d de          Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej        j        d             Zd Zej                            dddyg          ej                            deeEdfdng diifeNdng diddhfg          d                         Zd Zd Zd Zd Zd Zd Zd Zej                            ddydg          d             Zd Zd Zej                            deEdddgifeNd ed.d          ifg          d             Zej                            deEdvddgifeNdv edd          ifg          d             Zej                            d          ej                            d>eEeNg          ej                            dewevg          d                                     Zej                            ddydg          d             Zej                            deEdffeNdfeHdffg          d             Zej        j        d             Zd Zej                            deEdffeNdfg           edy          d                         Zej                            deEdffeNdfeHdffg          d             Zd Zd Zd Zej                            d eq            ep          ej                            d>eEeNg          d                         Z ea            Z eb            Zej                             ej        d/          dye𬿦          Zded<   ded.<   ej                            d ej        d7d.id7d/igdej                             ej        d.d/g                    fgdĬŦ           ej        d.ddƜd/ddƜd7digdej                             ej        g dǢ                    fdej                             ej        g dɢ          g dʢ˦          fgd̬Ŧ           ej        d7d.gd/gdggid7d.gd/ggigdej                            d.gd/gdggd.gd/gggeͦ          fgdάŦ           ej        d7did7digdefgdϬŦ           ej        d7eid7eigdej                            eegeͦ          fgdЬŦ          g          dф             Zd҄ 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                   T    e Zd ZdZddZd Zd Zd Zd ZeZ	eZ
eZdd	ZddZd ZdS )MockClassifierz8Dummy classifier to test the parameter search algorithmsr   c                     || _         d S N	foo_param)selfra   s     }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/model_selection/tests/test_search.py__init__zMockClassifier.__init__p       "    c                 |    t          |          t          |          k    sJ t          j        |          | _        | S r_   )lennpuniqueclasses_rb   XYs      rc   fitzMockClassifier.fits   s3    1vvQ	!rf   c                     |j         d         S Nr   shape)rb   Ts     rc   predictzMockClassifier.predictx   s    wqzrf   c                     || j         z   S r_   r`   rb   rm   s     rc   	transformzMockClassifier.transform{       4>!!rf   c                     || j         z
  S r_   r`   rw   s     rc   inverse_transformz MockClassifier.inverse_transform~   ry   rf   Nc                 &    | j         dk    rd}nd}|S )N         ?        r`   )rb   rm   rn   scores       rc   r   zMockClassifier.score   s     >AEEErf   Fc                     d| j         iS Nra   r`   )rb   deeps     rc   
get_paramszMockClassifier.get_params   s    T^,,rf   c                      |d         | _         | S r   r`   )rb   paramss     rc   
set_paramszMockClassifier.set_params   s    ,rf   )r   NN)F)__name__
__module____qualname____doc__rd   ro   ru   rx   r{   predict_probapredict_log_probadecision_functionr   r   r    rf   rc   r]   r]   m   s        BB# # # #  
  " " "" " " M   - - - -    rf   r]   c                   (    e Zd ZdZed             ZdS )LinearSVCNoScorez0A LinearSVC classifier that has no score method.c                     t           r_   )AttributeErrorrb   s    rc   r   zLinearSVCNoScore.score   s    rf   N)r   r   r   r   propertyr   r   rf   rc   r   r      s3        ::  X  rf   r   r}      )r}   r}   r   r   c                 ~     t                      fdt          t                               D             k    sJ d S )Nc                      g | ]
}|         S r   r   ).0igrids     rc   
<listcomp>z3assert_grid_iter_equals_getitem.<locals>.<listcomp>   s    <<<a$q'<<<rf   )listrangerh   )r   s   `rc   assert_grid_iter_equals_getitemr      sC    ::<<<<5T+;+;<<<<<<<<<rf   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                 z    t          j        ||          5   | |           d d d            d S # 1 swxY w Y   d S )Nmatch)pytestraises)r   input
error_typeerror_messages       rc   test_validate_parameter_inputr      s     
z	7	7	7  e                 s   044c            
         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    sJ t          d          D ]T}t          d	 |D                       }|t          d
 t          |d         |d                   D                       k    sJ Ut          |           t          i           }t	          |          dk    sJ t          |          i gk    sJ t          |           t          j        t                    5  |d          d d d            n# 1 swxY w Y   t          dddgii ddgig          }t	          |          dk    sJ t          |          ddiddii ddigk    sJ t          |           d S )Nr   r}   r      r      r   )hamspameggsr   bar   c           	   3      K   | ]9}t          t          t          |                                                     V  :d S r_   )tupler   sorteditemsr   ps     rc   	<genexpr>z&test_parameter_grid.<locals>.<genexpr>   s?      GGAU56!''))#4#4677GGGGGGrf   c              3   (   K   | ]\  }}d |d|fV  dS )r   r   Nr   )r   xys      rc   r   z&test_parameter_grid.<locals>.<genexpr>   s@       
 
%)QUAua 
 
 
 
 
 
rf   r   r}   Cr         ?)r1   
isinstancer   r   rh   r   r   setr   r   r   r   
IndexError)params1grid1params2grid2r   pointsempty	has_emptys           rc   test_parameter_gridr      sm   iii G'""EeX&&&&&eU#####u::????#E***!f%<%<%<==G'""Eu::???? 1XX 
 
GGGGGGG 
 
-4WU^WU^-T-T
 
 
 
 
 
 
 
 
 
 $E*** "Eu::????;;2$#E***	z	"	"  a               aW~rC#<@AAIy>>Q	??Qx#rBc
CCCCC#I.....s   *	E??FFc                     t                      } t          | dg di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%          j        t(                    5  |                    t          t                     d d d            d S # 1 swxY w Y   d S )Nra   r   r   r   cvverboseparam_foo_paramsklearn)r]   r*   sysstdoutr   ro   rm   r   best_estimator_ra   rW   cv_results_datar   r   r   rx   scoringr   r   
ValueError)clfgrid_search
old_stdouts      rc   test_grid_searchr      sv   


Cs[)))$<ANNNKJCJOOAqCJ&0A5555{./@AF			RRR aa   !!!$$$! $K	z	"	"  1                 s   8!E&&E*-E*c                     t          dt                      fg          } dt                      t                      gi}t          | |d          }|                    t
          t                     |j        d         }t          |d         t                    sJ t          |d         t                    sJ t          |d         d          rJ t          |d         d          rJ |d         |j
        usJ |d         |j
        usJ t          |d         d         d          rJ t          |d         d         d          rJ d S )N	regressorr   r   param_regressorr   r}   coef_)r>   r   r    r*   ro   rm   r   r   r   hasattrr   )pipe
param_gridr   regressor_resultss       rc   test_grid_search_pipeline_stepsr      sX   k#3#5#56788D 0 2 2EGG<=JtZA666KOOAq#/0AB'*,<====='*E22222(+W55555(+W55555Q{'BBBBBQ{'BBBBBz+.q17;;;;;z+.q17;;;;;;;rf   SearchCVc           	         t          j        d                              dd          }t          j        dgdz  dgdz  z             }t	          ddg          } | |d	g d
idd          }d}t          j        t          |          5  |                    ||t          j	        d                     d d d            n# 1 swxY w Y   d}t          j        t          |          5  |                    ||t          j	        d          t          j
        d                     d d d            n# 1 swxY w Y   |                    ||t          j	        d          t          j
        d                     d S )Nd   r   r      r}   r   r   )expected_fit_paramsra   r   r   raiser   error_scorez0Expected fit parameter\(s\) \['eggs'\] not seen.r   )r   z)Fit parameter spam has length 1; expected)r   r   )ri   arangereshapearrayrM   r   r   AssertionErrorro   oneszeros)r   rm   r   r   searchererr_msgs         rc   test_SearchCV_with_fit_paramsr     s   
	#r2&&A
!qA37"##A
&&1A
B
B
BCxk9995!QQQH BG	~W	5	5	5 - -Q,,,- - - - - - - - - - - - - - - :G	~W	5	5	5 ? ?Q

">>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?LLABGBKKbhrllL;;;;;s$   
+CCC)>D33D7:D7c                  \   t          d          } t          dd          \  }}g d}t          d          }t          | d|id          }|                    ||           t          |d|id          }|                    ||           |j        |j        k    sJ |                    ||          |                    ||          k    sJ t          |d|i          }t          j        t          d	
          5  |                    dgg           d d d            d S # 1 swxY w Y   d S )Nr   random_stater   r   centers皙?r}   r   r   accuracyr   z
no scoringr   r}   )
rE   r   r   r*   ro   best_params_r   r   r   	TypeError)r   rm   r   Csclf_no_scorer   grid_search_no_scores          rc   test_grid_search_no_scorer    s   

#
#
#C1a000DAq	B#333LsS"IzBBBKOOAq'sBiTTTQ"""  ,0HHHHHQ""&:&@&@A&F&FFFFF (sBi@@	y	5	5	5 ( (  1#'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   <D!!D%(D%c                     t          dddd          \  } }t          d          }ddgi}t          ||d 	                              | |          }t          ||d
	                              | |          }t          t	                      |d	                              | |          }t          ||d	                              | |          }|                    | |          }|                    | |          }	|                    | |          }
|                    | |          }|dk     sJ |	dk     sJ ||	k    sJ t          |	|           t          ||
           d S )Nr   r   皙?r   	n_samples	n_classesflip_yr   r   r   r  r  r  roc_aucr~   )r   rE   r*   ro   r   r   rU   )rm   r   r   r   search_no_scoringsearch_accuracysearch_no_score_method_auc
search_aucscore_no_scoringscore_accuracyscore_no_score_auc	score_aucs               rc   test_grid_search_score_methodr  1  s   #TUVVVDAq

#
#
#C#<D$S$===AA!QGG"3jAAAEEaKKO!-D)" " "	c!Qii  c4;;;??1EEJ )..q!44$**1a00N399!Q??  A&&I s????C&&&&(8999	#566666rf   c                     t           j                            d          } t          ddd          \  }}|                     ddd          }t          d          }ddgi}t                      t          d          t          d	          t                      g}d
}|D ]u}t          |||          }	t          j        t          |          5  |	                    ||           d d d            n# 1 swxY w Y   |	                    |||           vt                      t!                      g}
|
D ]*}t          |||          }	|	                    ||           +d S )Nr      r   )r  r  r   r   r   r   r}   n_splitsz*The 'groups' parameter should not be None.r   r   groups)ri   randomRandomStater   randintrE   r/   r0   r+   r,   r*   r   r   r   ro   r4   r5   )rngrm   r   r"  r   r   	group_cvs	error_msgr   gsnon_group_cvss              rc   test_grid_search_groupsr+  M  s    )


"
"CqqIIIDAq[[Ar""F

#
#
#C!:D 	A	I =I $ $#t+++]:Y777 	 	FF1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
q!F####$&&(>(@(@AM  #t+++
q! s   C00C4	7C4	c                     t          j        d                              dd          } t          j        dgdz  dgdz  z             }g d}t	          t          d          d|i          }|                    | |           t          |j        j	        |j	                   t	          t                      d	d
dgi          }|                    | |           t          |d          rJ t	          t          d          d|i          }t          |d          rJ t	          t          d          d|id          }|                    | |           t          |d          rJ d S )Nr   r   r   r   r}   r  r   r   alphar~          @rk   F)refit)ri   r   r   r   r*   rE   ro   rW   r   rk   r    r   )rm   r   r	  r   s       rc   test_classes__propertyr0  l  sf   
	#r2&&A
!qA37"##A	Bya8883)DDKOOAq{2;[=QRRR uww3*(=>>KOOAq{J///// ya8883)DDK{J///// ya8883)5QQQKOOAq{J///////rf   c                  @   t                      } t          | ddgid          }|                    t          t                     t          |d          sJ t          | ddgidd          }|                    t          t                     t          |d          sJ d S )Nra   r}   r   r   r   r   )r   r   )r]   r*   ro   rm   r   r   r3   )r   r   random_searchs      rc   test_trivial_cv_results_attrr3    s    


Cs[1#$61===KOOAq;.....&s[1#,>qQOOOMa=-0000000rf   c            
      &   t                      } d ddgfD ]}t          | dg didd          }|                    t          t                     t          |d          s t          |d	          rt          |d
          sJ dD ]}d| d}d| d}t          j        t          |          5 } t          ||          t                     d d d            n# 1 swxY w Y   t          |j        j        t                    sJ |t          |j        j                  v sJ d}dD ]i}t          j        t          |          5  t          | i |ddd                              t          t                     d d d            n# 1 swxY w Y   jd S )Nr  	precisionra   r   Fr   r/  r   r   best_index_r  )ru   r   r   rx   r{   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*   ro   rm   r   r   r   r   r   getattrr   value	__cause__strr   )	r   r   r   fn_name	outer_msg	inner_msg	exec_infor(  r/  s	            rc   test_no_refitrD    sd   


C:{34 ? ?"3iii(@RSTTT1%677	
]33	
 ^44	
 	
5
 	? 	?G 8W777I3' 3 3 3  ~Y??? 19-W--a0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 io7HHHHHIO$= > >>>>>>!	?( 	T  .  ]:Y777 	 	Ruj+.V.V  c!Qiii	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s$   ,CCC5FF		F		c                     t          ddd          \  } }t                      }t          |dddgi          }t          j        t
                    5  |                    | d d         |           d d d            d S # 1 swxY w Y   d S )	N   r   r   r  
n_featuresr   r   r  r~      )r   rE   r*   r   r   r   ro   )X_y_r   r   s       rc   test_grid_search_errorrL    s     33QOOOFB
++C	cC#s,	-	-B	z	"	"  
r$3$x                 s   A==BBc                  <   t          ddd          \  } }dgdgdgd}t          d	
          }t          ||          }|                    | |           t          ddd          }|                    | |           t	          |j        |j        j                   d S )NrF  r   r   rG  r~   rbfr  )r   kernelgammaautorP  )r   rD   r*   ro   rW   
dual_coef_r   )rJ  rK  
param_dictr   r   s        rc   test_grid_search_one_grid_pointrU    s     33QOOOFBu3%@@J
F


C	c:	&	&BFF2rNNN
E
-
-
-CGGBOOOs~r'9'DEEEEErf   c                      t                      } d }t          | dt          dd          id          }|                    t          t
                     |j        j        dk    sJ d S )Nra   r}   r   r   r   )r]   r*   r   ro   rm   r   r   ra   )r   r   s     rc   /test_grid_search_when_param_grid_includes_rangerW    sd    


CKs[%1++$>1EEEKOOAq&0A555555rf   c                  *   t          ddd          \  } }ddi}t          d          }t          j        d	          }t	          ||          }t          j        t          |
          5  |                    | |           d d d            n# 1 swxY w Y   dg i}t                      }t          j        d          }t	          ||          }t          j        t          |
          5  |                    | |           d d d            n# 1 swxY w Y   ddi}t          d          }t          j        d          }t	          ||          }t          j        t          |
          5  |                    | |           d d d            n# 1 swxY w Y   dt          j        d          i}t                      }t	          ||          }t          j        t                    5  |                    | |           d d d            d S # 1 swxY w Y   d S )Nr   r   r   rG  r   r}   rQ  rR  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   rD   reescaper*   r   r   r  ro   r   ri   r   )rm   r   rT  r   r(  searchs         rc   test_grid_search_bad_param_gridr\    s   JJJDAqqJ
F


C		@ I
 #z**F	y		2	2	2  

1a               rJ
%%C	S I #z**F	z	3	3	3  

1a               wJ
F


C		. I
 #z**F	y		2	2	2  

1a               rwv'J
%%C#z**F	z	"	"  

1a                 sH   )BBB(DDD)FFF$HHHcsr_containerc                 z   t          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          j	        ||k              d	k    sJ ||k    sJ d S )
NrF  r   r   rG  r   r  r~   rI  g?)
r   rE   r*   ro   ru   r   r   tocoori   mean)	r]  rJ  rK  r   r   y_predr   y_pred2C2s	            rc   test_grid_search_sparserd    s8    !33QOOOFB
++C	cC#s,	-	-BFF2dsd8RXZZ344!!F
A	r		B
++C	cC#s,	-	-BFF2dsd8>>RX&&&jjCDD""G			B76W$%%,,,,777777rf   c                 d   t          ddd          \  }}t                      }t          |dddgid	          }|                    |d d
         |d d
                    |                    |d
d                    }|j        j        } | |          }t                      }t          |dddgid	          }|                    |d d
         |d d
                    |                    |d
d                    }|j        j        }t          ||           ||k    sJ d }	t          |	d          }
t          |dddgi|
	          }|                    |d d
         |d d
                    |                    |d
d                    }|j        j        }||k    sJ t          ||           d S )NrF  r   r   rG  r   r  r~   f1r  rI  c                 $    t          | |           S r_   )r$   )y_true_y_pred_s     rc   f1_lossz0test_grid_search_sparse_scoring.<locals>.f1_loss3  s    '****rf   F)greater_is_better)	r   rE   r*   ro   ru   r   r   rW   r%   )r]  rJ  rK  r   r   ra  r   rb  rc  rj  F1Lossy_pred3C3s                rc   test_grid_search_sparse_scoringro    s    33QOOOFB
++C	cC#s,d	;	;	;BFF2dsd8RXZZ344!!F
A	r		B
++C	cC#s,d	;	;	;BFF2dsd8RXjjCDD""G			Bvw'''7777+ + + E:::F	cC#s,f	=	=	=BFF2dsd8RXjjCDD""G			B7777vw'''''rf   c                     t          ddd          \  } }t          j        | d d         | d d         j                  }|d d         }t	          d          }t          |dd	d
gi          }|                    ||           |j        dk    sJ t          j        | dd          | d d         j                  }|dd          }|                    |          }t          j	        ||k              dk    sJ t          j        t                    5  |                    |                                |           d d d            d S # 1 swxY w Y   d S )NrF  r   r   rG  rI  precomputedrO  r   r  r~   )r   ri   dotrt   rD   r*   ro   best_score_ru   r`  r   r   r   tolist)	rJ  rK  K_trainy_trainr   r   K_testy_testra  s	            rc   #test_grid_search_precomputed_kernelrz  @  s    !33QOOOFB fRXr$3$xz**G#hG
]
#
#
#C	cC#s,	-	-BFF7G>Q VBsttHb#hj))FXFZZF76V#$$)))) 
z	"	" * *
w~~)))* * * * * * * * * * * * * * * * * *s   )EEEc                  .   t          j        d          } t          j        d          }t          d          }t	          |dddgi          }t          j        t                    5  |                    | |           d d d            d S # 1 swxY w Y   d S )N)r      )r   rq  rr  r   r  r~   )	ri   r   r   rD   r*   r   r   r   ro   )rv  rw  r   r   s       rc   3test_grid_search_precomputed_kernel_error_nonsquarer}  ]  s     hx  GgennG
]
#
#
#C	cC#s,	-	-B	z	"	" ! !
w   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   &B

BBc                   &    e Zd ZdZddZd Zd ZdS )BrokenClassifierz*Broken classifier that cannot be fit twiceNc                     || _         d S r_   	parameterrb   r  s     rc   rd   zBrokenClassifier.__init__k  re   rf   c                 8    t          | d          rJ d| _        d S )Nhas_been_fit_T)r   r  rb   rm   r   s      rc   ro   zBrokenClassifier.fitn  s&    411111!rf   c                 @    t          j        |j        d                   S rq   ri   r   rs   rw   s     rc   ru   zBrokenClassifier.predictr      x
###rf   r_   )r   r   r   r   rd   ro   ru   r   rf   rc   r  r  h  sL        44# # # #" " "$ $ $ $ $rf   r  z1ignore::sklearn.exceptions.UndefinedMetricWarningc                     t          j        d                              dd          } t          j        dgdz  dgdz  z             }t	          t                      dddgigdd	          }|                    | |           d S )
Nr   r   r   r   r}   r  r5  Tr   r/  )ri   r   r   r   r*   r  ro   )rm   r   r   s      rc   
test_refitr  v  s    
 		#r2&&A
!qA37"##A
kAq623[PT  C GGAqMMMMMrf   c                      d } t          ddd          \  }}t          t          d          dg did	| 
          }|                    ||           |j        dk    sJ t          |d          rJ dS )z^
    Test refit=callable, which adds flexibility in identifying the
    "best" estimator.
    c                 4   t          ddd          \  }}t          t          d          dg didd	
          }|                    ||           |j        dk    sJ |j                                        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_score`.
        r   r   *   rG  r   r   {Gz?r  r}   r5  Tr  r   mean_test_score)r   r*   rE   ro   r7  r   keysargmin)
cv_resultsrm   r   r   keys        rc   refit_callablez+test_refit_callable.<locals>.refit_callable  s     #SQRPPP12&&&...!	
 
 
 	1!#### ?'')) 	% 	%C*$$$$$+,33555rf   r   r   r  rG  r   r   r  r5  r  r   rt  N)r   r*   rE   ro   r7  r   )r  rm   r   r   s       rc   test_refit_callabler    s    6 6 62 LLLDAq
r"""	nnn	  C GGAqMMM?asM*******rf   c                     d } t          ddd          \  }}t          t          d          ddd	gid
|           }t          j        t
          d          5  |                    ||           ddd           dS # 1 swxY w Y   dS )zb
    Test implementation catches the errors when 'best_index_' returns an
    invalid result.
    c                     dS )zT
        A dummy function tests when returned 'best_index_' is not integer.
        Nr   r  s    rc   refit_callable_invalid_typezEtest_refit_callable_invalid_type.<locals>.refit_callable_invalid_type  s	     trf   r   r   r  rG  r   r   r  r}   r5  r  z&best_index_ returned is not an integerr   N)r   r*   rE   r   r   r  ro   )r  rm   r   r   s       rc    test_refit_callable_invalid_typer    s       LLLDAq
r"""	sAh)	  C 
y(P	Q	Q	Q  1                 s   A==BBout_bound_value	search_cvc                      fd}t          ddd          \  }} |t          d          ddd	gid
|          }t          j        t          d          5  |                    ||           ddd           dS # 1 swxY w Y   dS )zg
    Test implementation catches the errors when 'best_index_' returns an
    out of bound result.
    c                     S )zV
        A dummy function tests when returned 'best_index_' is out of bounds.
        r   )r  r  s    rc   refit_callable_out_boundz?test_refit_callable_out_bound.<locals>.refit_callable_out_bound  s     rf   r   r   r  rG  r   r   r  r}   r5  r  zbest_index_ index out of ranger   N)r   rE   r   r   r   ro   )r  r  r  rm   r   r   s   `     rc   test_refit_callable_out_boundr    s         LLLDAq
)r"""	sAh&	  C 
z)I	J	J	J  1                 s   A<<B B c                     d } t          ddd          \  }}t          t                    dd}t          t	          d          d	g d
i||           }|                    ||           |j        dk    sJ t          |d          rJ dS )zC
    Test refit=callable in multiple metric evaluation setting
    c                 B    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)r  r  s    rc   r  z8test_refit_callable_multi_metric.<locals>.refit_callable  s-      :----*+22444rf   r   r   r  rG  r5  )Accuracyr;  r   r   r  r  r   rt  N)r   r%   r"   r*   rE   ro   r7  r   )r  rm   r   r   r   s        rc    test_refit_callable_multi_metricr    s    
5 5 5 LLLDAq&~66LLG
r"""	nnn	  C GGAqMMM?asM*******rf   c                     t          j        d                              dddd          } t          j        d                              ddd          }d	 }d
 }t          ||dg          }t	          |dg di          }|                    | |                              t          t                     t          |d          sJ d S )N,  r   r   r   r   i        c                 (    | j         dd          dk    S )Nr}   )r   r   r   rr   r   s    rc   check_Xz#test_gridsearch_nd.<locals>.check_X  s    wqrr{i''rf   c                 (    | j         dd          dk    S )Nr}   )r  r  rr   r  s    rc   check_yz#test_gridsearch_nd.<locals>.check_y  s    wqrr{g%%rf   ro   )r  r  methods_to_checkra   r   r   )
ri   r   r   rM   r*   ro   r   rm   r   r   )X_4dy_3dr  r  r   r   s         rc   test_gridsearch_ndr     s    9^$$,,RAq99D9[!!))"a44D( ( (& & &   C
 s[)))$<==KOOD$%%a+++;.......rf   c                     t          j        d                              dd          } t          j        dgdz  dgdz  z             }t	          d dg          }t          d	
          }t          |dg di|          }|                    |                                 |          	                    | |           t          |d          sJ d S )Nr   r   r   r   r}   c                 ,    t          | t                    S r_   r   r   r  s    rc   <lambda>z test_X_as_list.<locals>.<lambda>      *Q-- rf   ro   )r  r  r   r  ra   r   r   r   ri   r   r   r   rM   r.   r*   ro   ru  r   r   rm   r   r   r   r   s        rc   test_X_as_listr    s    
	#r2&&A
!qA37"##A
--  C 
			Bs[)))$<DDDKOOAHHJJ""((A...;.......rf   c                     t          j        d                              dd          } t          j        dgdz  dgdz  z             }t	          d dg          }t          d	
          }t          |dg di|          }|                    | |                                          	                    | |           t          |d          sJ d S )Nr   r   r   r   r}   c                 ,    t          | t                    S r_   r  r  s    rc   r  z test_y_as_list.<locals>.<lambda>*  r  rf   ro   )r  r  r   r  ra   r   r   r   r  r  s        rc   test_y_as_listr  $  s    
	#r2&&A
!qA37"##A
--  C 
			Bs[)))$<DDDKOOAqxxzz""((A...;.......rf   c                  T   t           t           fg} 	 ddlm}m} |                     ||f           n# t
          $ r Y nw xY wt          j        d                              dd          }t          j	        dgdz  dgdz  z             }| D ]\   |           |          }}fd}fd}t          ||	          }	t          |	d
g di          }
|
                    ||                              ||           |
                    |           t          |
d          sJ d S )Nr   )	DataFrameSeriesr   r   r   r}   c                 $    t          |           S r_   r   )r   InputFeatureTypes    rc   check_dfz#test_pandas_input.<locals>.check_dfD  s    a!1222rf   c                 $    t          |           S r_   r  )r   
TargetTypes    rc   check_seriesz'test_pandas_input.<locals>.check_seriesG  s    a,,,rf   )r  r  ra   r   r   )rN   pandasr  r  appendImportErrorri   r   r   r   rM   r*   ro   r   ru   r   )typesr  r  rm   r   X_dfy_serr  r  r   r   r  r  s              @@rc   test_pandas_inputr  3  s   ]+,E,,,,,,,,i())))    		#r2&&A
!qA37"##A(- 3 3$*&&q))::a==e	3 	3 	3 	3 	3	- 	- 	- 	- 	- !<HHH"3iii(@AAe$$**4777D!!!{M2222223 3s   3 
A A c                  $   t          dd          \  } }t          ddd          }ddg}d	D ]N}t          |t          g d
          ||          }|                    | |           |j        d         dk    sJ Ot          |t          g d
          d          }|                    | |           |j        d         dk    sJ t          |t          g d
                    }|                    |            |j        d         dk    sJ d S )N2   r   r  r   r#  r}   )r   init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*   dictro   r  )rm   r   kmr   r/  r   s         rc   test_unsupervised_grid_searchr  R  sV   333DAq	QXa	8	8	8B %&=>GA ; ;"4999555we
 
 
 	1'5::::: 
tyyy111;R  K OOAq#L1Q6666 rdiii.H.H.HIIIKOOA#L1Q666666rf   c                     d } t          ddddgddgddgg          \  }}t          t                      t          g d          |           }|                    |           |j        d	         dk    sJ |j        d
k    sJ d S )Nc                      | j         dk    rdndS )Nr  r  r   	bandwidth)	estimatorrm   s     rc   custom_scoringz2test_gridsearch_no_predict.<locals>.custom_scoringq  s    (C//rrQ6rf   r  r}   r   )cluster_stdr   r  r  r  r  r  r  )r   r*   r;   r  ro   r  rt  )r  rm   _r[  s       rc   test_gridsearch_no_predictr  n  s    7 7 7 #AAAQRTUPV?WXXXDAq...111  F
 JJqMMM{+s2222######rf   c                     ddgt          dd          d} t          | dd          }d |D             }t          |          dk    sJ |D ]%}|d	         d
v sJ d|d         cxk    rdk    sn J &dg di} t          | dd          }d |D             d |D             k    sJ dt          dd          i} t          | dd          }d |D             d |D             k    sJ d S )NrN  linearr   r}   )rO  r   r   )param_distributionsr   r   c                     g | ]}|S r   r   r   r   s     rc   r   z&test_param_sampler.<locals>.<listcomp>  s    """Qq"""rf   rO  )rN  r  r   )r   r}   r   r   r   r   r   r     	   r   r   c                     g | ]}|S r   r   r  s     rc   r   z&test_param_sampler.<locals>.<listcomp>      !Arf   c                     g | ]}|S r   r   r  s     rc   r   z&test_param_sampler.<locals>.<listcomp>      #7#7#7!A#7#7#7rf   c                     g | ]}|S r   r   r  s     rc   r   z&test_param_sampler.<locals>.<listcomp>  r  rf   c                     g | ]}|S r   r   r  s     rc   r   z&test_param_sampler.<locals>.<listcomp>  r  rf   )r   r2   rh   )r  samplersamplessamples       rc   test_param_samplerr    sy   &+X%6WQ]]KK/  G #"'"""Gw<<2 % %h#44444F3K$$$$1$$$$$$$  B B BC/  G  w#7#7w#7#7#777771./  G  w#7#7w#7#7#7777777rf   c                 |   | j         t          fd|D                       sJ fd|D             |k    sJ t          fd|D                       rJ t          fd|D                       sJ | j        r| j                                        ndg}|D ]"}d|z           j        t          j        k    sJ #d S )Nc              3   b   K   | ])}t          |         t          j        j                  V  *d S r_   r   ri   maMaskedArray)r   paramr  s     rc   r   z/check_cv_results_array_types.<locals>.<genexpr>  s7      XXEz*U+RU->??XXXXXXrf   c                 6    i | ]}||         j         j        S r   )dtypekindr   r  r  s     rc   
<dictcomp>z0check_cv_results_array_types.<locals>.<dictcomp>  s2       ,/Z_"'  rf   c              3   b   K   | ])}t          |         t          j        j                  V  *d S r_   r  r  s     rc   r   z/check_cv_results_array_types.<locals>.<genexpr>  s6      XXc:joru/@AAXXXXXXrf   c              3   x   K   | ]4}|                     d           |         j        t          j        k    V  5dS )rankN)
startswithr  ri   float64r  s     rc   r   z/check_cv_results_array_types.<locals>.<genexpr>  sW        ~~f%%3+     rf   r   zrank_test_%s)	r   allanymultimetric_scorer_r  r  ri   int32)r[  
param_keys
score_keysexpected_cv_results_kindsscorer_keysr  r  s         @rc   check_cv_results_array_typesr    sD    #JXXXXZXXXXXXXX   3=  	"# # # # XXXXZXXXXXXXX            ,2+>M&.%%'''WIK B B.3./5AAAAAB Brf   r   c                      ||z   |z   }t          t                                                     t          |dz                        t           fd||z   D                       sJ d S )N)r   c              3   <   K   | ]}|         j         fk    V  d S r_   rr   )r   r  r  n_cands     rc   r   z(check_cv_results_keys.<locals>.<genexpr>  s1      UUcz#$	1UUUUUUrf   )rW   r   r  r  )r  r  r  r  
extra_keysall_keyss   `  `  rc   check_cv_results_keysr    sy    J&3Hvjoo//00&K9O2P2PQQQUUUUUZ*=TUUUUUUUUUUrf   c                     t          ddd          \  } }d}t          dgddgd	dg
          t          dgddg          g}d}d}|}t          t                      d|d          }|                    | |           |j        t          d         dk              sJ fd|D             sJ fd|D             sJ ddddd}t          ||||           t          |||           |j        fdt          |          D             }	t          |	          sJ t          |	          dk    sJ fdt          |          D             }
t          |
          sJ t          |
          dk    sJ d S )Nr  r   r  rG  r   rN  r}   r   r  rO  r   rP  polyr   rO  degreeparam_Cparam_degreeparam_gammaparam_kernelr  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_timer   T)r   r   return_train_scorer$  c              3   V   K   | ]#}|d k    t          |         dk              V  $dS )r$  r   Nr  r   kr  s     rc   r   z.test_grid_search_cv_results.<locals>.<genexpr>  s?      RR1@Q;Q;QC
1"##;Q;Q;Q;QRRrf   c              3   ^   K   | ]'}d |v|dk    t          |         dk              V  (dS )timer$  r}   Nr3  r4  s     rc   r   z.test_grid_search_cv_results.<locals>.<genexpr>  sT        ??q$555 	JqMQ5555 rf   r   fOc                     g | ]N}d          |         dk    d         j         |         o&d         j         |         od         j         |          OS )r!  r  r  r   r  maskr   r   r  s     rc   r   z/test_grid_search_cv_results.<locals>.<listcomp>  sv        n%a(F22 y!&q) 7=).q17~.3A66 322rf   c                     g | ]O}d          |         dk    d         j         |          o&d         j         |          od         j         |         PS )r!  rN  r  r   r  r;  r=  s     rc   r   z/test_grid_search_cv_results.<locals>.<listcomp>  sy        n%a(E11 9%*1-- 3}-21553>*/2 211rf   )r   r  r*   rD   ro   r   r  r  r  r   rh   )rm   r   n_grid_pointsr   r  r  n_candidatesr[  r  poly_resultsrbf_resultsr  s              @rc   test_grid_search_cv_resultsrC    sU   KKKDAqM "g(	
 	
 	
 	 q6		
 	
 	
F  LJJ" !L#%%A&TRRRF
JJq!#Jz+,122222RRRRZRRRRRR         	! ! !
J(A   *j*lKKK#J    |$$  L ||!!!!    |$$  K {{q      rf   c                    	 t          ddd          \  } }d}dgt          d          t          d	          d
dgddgdg}d}d}|}t          t                      |d|d          }|                    | |           |j        	ddddd}t          ||||           t          	|||           t          	fdt          |          D                       sJ t          	fdt          |          D                       sJ d S )Nr  r   r  rG     rN  r   )scaler  r  r  r   r   r  r  r"  T)r   r   r  r1  r8  r   r9  c              3      K   | ]P}d          |         dk    d         j         |         o&d         j         |         od         j         |          V  QdS )r!  r  r  r   r  Nr;  r=  s     rc   r   z0test_random_search_cv_results.<locals>.<genexpr>A  s         n%a(F22 y!&q) 7=).q17~.3A66 3222 rf   c              3      K   | ]Q}d          |         dk    d         j         |          o&d         j         |          od         j         |         V  RdS )r!  rN  r  r   r  Nr;  r=  s     rc   r   z0test_random_search_cv_results.<locals>.<genexpr>J  s         n%a(E11 9%*1-- 3}-21553>*/2 2111 rf   )
r   r   r3   rD   ro   r   r  r  r  r   )
rm   r   n_search_iterr   r  r  r@  r[  r  r  s
            @rc   test_random_search_cv_resultsrJ    s   KKKDAqM 7R5s;K;K;KLL81v..F LJJ" !L"  F JJq!#J 	! ! !
J(A   *j*lKKK     |$$             |$$         rf   zSearchCV, specialized_paramsr   r   )r  r   c                    t          ddgddgddgddggdddd          \  }}t          j        |j        d         t                    }d|t          j        |dk              d         d d d         <   d|t          j        |dk              d         d d d         <   || g| |gg}t                      |d	d
} | di ||                    ||           t          j        fdt          j
                  D                       }j        d         d         }j        d         d         }	t          j        fdt          j
                  D                       }
j        d         d         }j        d         d         }j        d         d         dk    sJ t          |ddg           t          |
ddg           |t          j        t          j        |                    k    sJ |	t          j        t          j        |                    k    sJ |t          j        d          k    sJ |t          j        d          k    sJ d S )Nr   r}   r  FP   )r  r   r  shuffler  r  r   T)r  r   r1  c                 <    g | ]}j         d |z           d         S )split%d_test_scorer   r   r   sr[  s     rc   r   z+test_search_default_iid.<locals>.<listcomp>u  s<     	
 	
 	
 3a78;	
 	
 	
rf   r  r+  c                 <    g | ]}j         d |z           d         S )zsplit%d_train_scorer   rQ  rR  s     rc   r   z+test_search_default_iid.<locals>.<listcomp>~  s<     	
 	
 	
 4q89!<	
 	
 	
rf   r#  r,  r  gUUUUUU?r   )r   ri   r   rs   boolwhererD   ro   r   r   	n_splits_r   rS   r   approxr`  std)r   specialized_paramsrm   r   r<  r   common_paramstest_cv_scores	test_meantest_stdtrain_cv_scores
train_mean	train_stdr[  s                @rc   test_search_default_iidrb  U  s    Q!Q!Q!Q0  DAq 7171:T***D%&D!q&		!	SSqS	!"%&D!q&		!	SSqS	!" $-4%	'B"%%%rNNMX<<<);<<F
JJq!X	
 	
 	
 	
6+,,	
 	
 	
 N "#45a8I!"23A6Hh	
 	
 	
 	
6+,,	
 	
 	
 O #$67:J"#45a8Ii(+q0000NQ	N333OaV,,,bgn&=&=>>>>>>v}RVN%;%;<<<<<< q))))))a((((((((rf   c                     t          ddd          \  } }d}t          dgddgd	dg
          t          dgddg          g}g }t          t                    t          t                    dddfD ]M}t          t                      |||d          }|                    | |           |                    |           Nt          |  d S )Nr  r   r  rG  r   rN  r}   r   r  r  r  r   r  r  r9  r  r9  F)r   r   r   r/  )
r   r  r%   r"   r'   r*   rD   ro   r  *compare_cv_results_multimetric_with_single)rm   r   r   r   grid_searchesr   r   s          rc   'test_grid_search_cv_results_multimetricrg    s   KKKDAqH "g(	
 	
 	
 	 q6		
 	
 	
F  M 00K<U<UVV 	* 	*
 #EEh67%
 
 
 	1[)))).>>>>rf   c                     t          ddd          \  } }d}d}t          t          j        ddd          	          }d
D ]}g }dD ]l}|rt	          |t
                    rd}t          d          }t          ||||||d          }	|	                    | |           |	                    |	           mt          |  t          |d         |d         |           d S )Nr  r   r  rG  r   rE  r}   r   TF)rd  r  r9  r  r   r   )r   r   r  r   r/  r   )r   r  ri   logspacer   r   r   r3   ro   r  re  )compare_refit_methods_when_refit_with_acc)
rm   r   r   rI  r   r/  random_searchesr   r   r2  s
             rc   )test_random_search_cv_results_multimetricro    s(   KKKDAqHMBKAq))***F 
 
E 	2 	2G #GU33 #"$"555C.$$*  M a###""=11112ODD1A 2E	
 	
 	
 	
)
 
rf   c                    | j         sJ t          t          | j                  d           | j        d |j                                        D             }|                    d |j                                        D                        t          fddD                       sJ t          j	        
                    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 searchrd  c                 B    i | ]\  }}t          j        d d|          |S )_score$	_accuracyrY  subr   r5  vs      rc   r  z>compare_cv_results_multimetric_with_single.<locals>.<dictcomp>  s9       15Ay+q))1  rf   c                 B    i | ]\  }}t          j        d d|          |S )rr  _recallrt  rv  s      rc   r  z>compare_cv_results_multimetric_with_single.<locals>.<dictcomp>  s,    WWW1	9a	(	(!WWWrf   c              3   T   K   | ]"}t          j        |         d k              V  #dS )r}   N)ri   r  )r   r5  cv_results_multis     rc   r   z=compare_cv_results_multimetric_with_single.<locals>.<genexpr>  sL       	
 	
 F#A&!+,,	
 	
 	
 	
 	
 	
rf   )r/  r0  r-  r.  c                 D    i | ]\  }}|                     d           ||S _timeendswithrv  s      rc   r  z>compare_cv_results_multimetric_with_single.<locals>.<dictcomp>  s/    NNN$!Q!**W:M:MNANNNrf   c                 D    i | ]\  }}|                     d           ||S r}  r  rv  s      rc   r  z>compare_cv_results_multimetric_with_single.<locals>.<dictcomp>  s/    PPP$!QAJJw<O<OPAPPPrf   N)r
  rW   r   r  r   r   updater  ri   testingassert_equal)search_multi
search_acc
search_reccv_results_acc_recr{  s       @rc   re  re    sI    $$$$vl2335KLLL#/ 9C9O9U9U9W9W   WW
8N8T8T8V8VWWW   	
 	
 	
 	
	
 	
 	

 
 
 
 
 JNN*0022NNNPP,2244PPP    rf   c           	         |j         |k    sJ |r| j         dk    sJ n| j         rJ dS t          ddd          \  }}dD ]@}t           t          | |          |           t          ||          |                     At          |                     ||          |                    ||                     dD ]&}t          | |          t          ||          k    sJ 'dS )	zDCompare refit multi-metric search methods with single metric methodsr  Nr   r   r  rG  )ru   r   r   )r7  rt  r  )r/  r   rU   r<  r   )r  r  r/  rm   r   methodr  s          rc   rm  rm    s,   u$$$$ !Z/////%%%%CCCDAqC 
 
)GL&))!,,.Igj&.I.I!.L.L	
 	
 	
 	
 **1a00*2B2B1a2H2HIII= F F|S))WZ-E-EEEEEEF Frf   	max_depthr   )r  r  r  r   c                    t          ddd          \  }}t          |           } |                     ||           d| j        j         d}d}t          j        t          |          5 }|                     |           d d d            n# 1 swxY w Y   t          |j
        j        t                    sJ |t          |j
        j                  k    sJ d S )	Nr   r   r  rG  r8  z"' has no attribute 'score_samples'z@'DecisionTreeClassifier' object has no attribute 'score_samples'r   )r   r   ro   	__class__r   r   r   r   score_samplesr   r=  r>  r?  )r  rm   r   rA  rB  rC  s         rc   "test_search_cv_score_samples_errorr    s    CCCDAqi  IMM!Q UI'0TTTIRI	~Y	7	7	7 #9"""# # # # # # # # # # # # # # #io/@@@@@IO566666666s   (B

BBc                  &   d } t          |           }t          ddd          \  }}t          j        |          }t	          t                      dddgi          }|                    | 	           t          j        t          d
          5  |
                    |||           ddd           n# 1 swxY w Y   |                    |	           t          j        t          d
          5  |
                    |||           ddd           n# 1 swxY w Y   |                    t          |d          d           t          j        t          d          5  |
                    |||           ddd           dS # 1 swxY w Y   dS )zhChecks that fitting with sample_weight raises a warning if the scorer does not
    support sample_weightc                     dS )z9Fake scoring function that does not support sample_weightr   r   )y_truera  s     rc   fake_score_funcz>test_unsupported_sample_weight_scorer.<locals>.fake_score_func0  s    srf   r   r   r  rG  r   r}   r  r  zdoes not support sample_weightr   sample_weightNr  )faker  Fr  z2The scoring fake=.* does not support sample_weight)r%   r   ri   	ones_liker*   r   r   r   warnsUserWarningro   r  )r  fake_scorerrm   r   swr  s         rc   %test_unsupported_sample_weight_scorerr  ,  sk      o..KKKKDAq	aB'9';';qRTgWWWI111	k)I	J	J	J . .a"---. . . . . . . . . . . . . . . ---	k)I	J	J	J . .a"---. . . . . . . . . . . . . . . +
;;;5     
P
 
 
 . . 	a"---. . . . . . . . . . . . . . . . . .s6   B33B7:B7/DDD FF
F
r  )r}   r   r   r-  )r}   r  r  c                    t          |           }t          |           }t          |d           t          |d           t          j                            d          }d}d}d}||z  }|                    ||dz            }|                    d||          }	|                    dd	|          }
t          j        t          j        |          |          }|}|	}|}t          t                                          ||
                    }|                    |           |                    |
d          }|                    |
          }|                    |
          }t          t                                          ||
                    }|                    |           t          ||          }t          ||          }|                    ||d            |                    |||
           d |j        D             }|D ]3}|j        |         }|j        |         }| d}t#          |||           4dD ]9}t%          ||          }t%          ||          }| d}t'          |||           :dD ]\}t)          | |          rJ t%          ||          |          } t%          ||          |          }d| d}t+          |||           ]d S )Nr   r   r  r   rE  r   r   )sizer   r!  r   )repeatsaxis)r  )r   r  c                 <    g | ]}|                     d           |S )r   r  )r   r  s     rc   r   z<test_search_cv_sample_weight_equivalence.<locals>.<listcomp>{  s9       g9N9N  rf   z4 values are not equal for weighted/repeated datasetsr   )rt  r7  )r   r   ru   rx   zComparing the output of zn revealed that fitting with `sample_weight` is not equivalent to fitting with removed or repeated data points.)r   rX   ri   r#  r$  randr%  tiler   r   r/   splitr   repeatrY   ro   r   rS   r<  rU   r   rT   )r  estimator_weightedestimator_repeatedr&  r  n_samples_per_groupn_groupsr  rm   r   r  r"  
X_weighted
y_weightedgroups_weightedsplits_weighted
X_repeated
y_repeatedgroups_repeatedsplits_repeatedr  r  s1s2r   r  s                             rc   (test_search_cv_sample_weight_equivalencer  L  s^    y))y))'a8888'a8888
)


#
#CIH..IIM**AAyy11A	Q		*	*B WRYx((*=>>FJJO+--33J3WWXXO!!_!555""2A"66J""2"..J%,,R,88O+--33J3WWXXO!!_!555*+=zJJJ*+=zJJJ:4HHH:2FFF )5  J  1 1+C0+C0NNNB00000- 5 5'--'--NNNBG44444P 	B 	B9f%% 	B4+V44Q77B4+V44Q77B+6 + + + 
 )RAAAA	B 	Brf   T)noveltyn_neighborsr5  )r  r  r   )r  r   r   c           	         t          |           } t          j                            d          }d}d}t	          ||z            }||z
  }t          |dddgddggdd          d         }t          j        ||                    dd	|df
          gd          }t          j        dg|z            }d|| d <   | 	                    ||           t          |                     |          | j                            |                     d S )Nr  r  g333333?r   r   r   )r  rH  r  r  r   ir   )lowhighr  r  r}   r   )r   ri   r#  r$  intr   concatenater   r   ro   rS   r  r   )r  r&  r  outliers_fraction
n_outliers	n_inliersrm   r  s           rc   #test_search_cv_score_samples_methodr    s;     i  I
)


#
#CI&233JJ&I 	Q!Q 	 	 	 		A 	3;;2AZO;LLMTUVVVA XqcIo&&FFJ;<< MM!V ""I$=$K$KA$N$N    rf   c                     t          dd          \  } }dg di}t          t                      |d          }t          t                      d|d	          }||fD ]}|                    | |           |j        }t          |d
         d         |d
         d                    t          |d         d         |d         d                    t          j        |d
         d         |d
         d                   rJ t          j        |d         d         |d         d                   rJ t          |j        d         g d           d S )Nr  r  r  r   )r}   gjt?MbP?T)r   r1  r   )r   r  r1  r  r   r}   r#  r   r$  )r}   r}   r   )	r   r*   rD   r3   ro   r   rU   ri   allclose)rm   r   r   r   r2  r[  r  s          rc   (test_search_cv_results_rank_tie_breakingr    s   444DAq ((()JsuuPTUUUK&aZD  M . N N

1a'
 	()!,j9J.KA.N	
 	
 	
 	)*1-z:L/Ma/P	
 	
 	
 ;()!,j9J.KA.N
 
 	
 	
 
 ;)*1-z:L/Ma/P
 
 	
 	
 
 	F./@A999MMMM'N Nrf   c                     dgdgdgdgdggg d}} t                      t                      f}ddd gi}t                      }|D ]E}t          |||	                              | |          }t          |j        d
         dd g           Fd S )Nr}   r   r   r   r   )r   r   r   r   r}   r   r   r   param_random_state)rJ   rI   r.   r*   ro   rW   r   )rm   r   
estimatorsest_parametersr   estr   s          rc   !test_search_cv_results_none_paramr    s    C!qcA3$oooqA'))+A+C+CDJ$q$i0N	B U U"
 
 
 #a))	 	
 	;23GH1d)TTTTU Urf   z+ignore::sklearn.exceptions.FitFailedWarningc                     t          d          } dgdgdgdgg}g d}t          | dddgidd	          }t          | dddgiddd
          }||fD ]}|                    ||           dD ]L}t	          j        |j        |         dk              sJ t	          j        |j        |         dk               sJ MdD ]Y}|j        |         d         dk    sJ |j        |         d         dk    sJ t	          j        |j        |         dk               sJ Zt          |d          sJ t          |j	        t                    sJ |j	        dk    sJ d S )Nr   r   r}   r   r   r   )r   r}   r}   r   r   r   )r   r   r   )r-  r.  )r/  r0  r   refit_time_)rE   r*   r3   ro   ri   r  r   r   r   r  float)svcrm   r   r)  rsr[  r  s          rc   test_search_cv_timingr    s   

#
#
#C 	
 	
 	
 	
	A 	A	cC!Q=QA	>	>	>B	C#1v1!A	N	N	NBr( ' '

1a4 	7 	7C 6&,S1Q6777776&,S1A56666668 	7 	7C%c*1-2222%c*1-44446&,S1A5666666v}-----&,e44444!Q&&&&&' 'rf   c            
      .   d} t          d          }t          dd          \  }}g d}dD ]}t          |d|i|| 	                              ||          j        }t          |                                          }d
t          d t          |           D                       z   }t          t          j        ||                    sJ t          |           }	j        } t          |          D ]\  }
|                    |
           t          j        fdt          |           D                       }t          |	                    ||                    D ]\  }\  }}|                    ||         ||                    |dk    r0t%          ||         |                    ||                             }n7|dk    r1|                    ||                   }t+          ||         |          }t-          |||                    d S )Nr   r   r   r   r  r  )rf  r  r   )r   r   )r  r$  c              3       K   | ]	}d |z  V  
dS )rP  Nr   )r   cv_is     rc   r   z9test_grid_search_correct_score_results.<locals>.<genexpr>-  sA       G
 G
,0 4'G
 G
 G
 G
 G
 G
rf   r  rj  c                 <    g | ]}j         d |z                    S rP  rQ  )r   rS  candidate_ir   s     rc   r   z:test_grid_search_correct_score_results.<locals>.<listcomp>7  s<         +,@1,DEkR  rf   rf  r  )rE   r   r*   ro   r   r   r  r   r   r  ri   isinr4   rW  	enumerater   r   r  r$   ru   r   r(   rU   )r   r   rm   r   r	  r   r  result_keysexpected_keysr   r   	cv_scoresr   traintestcorrect_scoredecr  r   s                    @@rc   &test_grid_search_correct_score_resultsr  !  sZ   H

#
#
#C1a000DAq	B" A A"3b	5XNNN __Q**6
 :??,,--> G
 G
49(OOG
 G
 G
 B
 B
 
 27=+6677777h///('mm 	A 	ANKNNQN    "8__   I %.bhhq!nn$=$= A A =E4%!E(+++D==$,QtWckk!D'6J6J$K$KMMi''//$88C$1!D'3$?$?M#M9Q<@@@@A	AA Arf   c                     t                      } t          | dg didd          }|                    t          t                     t          j        t          j        |                    }t          |	                    t                    |	                    t                               t          | dg diddd          }|                    t          t                     t          j        t          j        |                    }t          |	                    t                    |	                    t                               d S )Nra   r   Tr   r6  r   )r/  r   r   )r]   r*   ro   rm   r   pickleloadsdumpsrV   ru   r3   )r   r   grid_search_pickledr2  random_search_pickleds        rc   test_pickler  F  s    


Cs[)))$<DQOOOKOOAq ,v|K'@'@AAk11!446I6Q6QRS6T6TUUU&k999%T!  M a"Lm)D)DEEa  "7"?"?"B"B    rf   c            	         t          dd          \  } }dg di}t                      }t          d          t          d          g}|D ]}t	          |||          }|                    | |           |j        d         }t          t          |                    D ]} |j	        di ||          t          |                    | |                    D ]p\  }	\  }
}|                    | |
         ||
                    |                    | |         ||                   }t          ||j        d	|	z           |                    q|D ]}t          |||d
          }|                    | |           |j        d         }t          t          |                    D ]} |j	        di ||          t          |                    | |                    D ]p\  }	\  }
}|                    | |
         ||
                    |                    | |         ||                   }t          ||j        d	|	z           |                    qd S )NTr   )return_indicatorr   r  )r}   r   r   r   r   r   r   rP  r   )r   r   r   )r   r.   rJ   rI   r*   ro   r   r   rh   r   r  r  r   rU   r3   )rm   r   r  r   r  r  r   
res_paramscand_ir   r  r  r  r2  s                 rc   &test_grid_search_with_multioutput_datar  X  s    *4aPPPDAq!<<<0N	B 	1---A...J   "32>>>1 ,X6
C
OO,, 		 		FCN00Z/000$-bhhq!nn$=$=   =E4%!E(+++ #		!D'1T7 ; ;#!+,@1,DEfM   		   *32aPPP!Q".x8
C
OO,, 		 		FCN00Z/000$-bhhq!nn$=$=   =E4%!E(+++ #		!D'1T7 ; ;#!!-.BQ.FGO   			 rf   c                      t          j        d                              dd          } g d}t          d          }t	          |i d                              | |          }t          |d	          rJ d S )
Nr|  r   r   r   r   r}   r}   r}   F)probabilityr   r   r   )ri   r   r   rD   r*   ro   r   rm   r   r   r)  s       rc   test_predict_proba_disabledr    sx    
	"a$$AA
%
 
 
 C	c2!	$	$	$	(	(A	.	.Br?+++++++rf   c                  d   t          j        dt           j                                      dd          } t           j        | dd d f<   g d}t          dt          dt           j        	          fd
t                      fg          }t          |dg did          	                    | |           d S )Nr|  rN  r   r   r   r  imputerr`  )strategymissing_values
classifierclassifier__foo_paramr   r   )
ri   r   r  r   nanr>   r   r]   r*   ro   )rm   r   r   s      rc   test_grid_search_allows_nansr    s    
	"BJ'''//266AfAadGAvbfMMMN>++,	
	 	A ,iii8Q???CCAqIIIIIrf   c                   4    e Zd ZdZdZddZddZd Zd	dZdS )
FailingClassifierz,Classifier that raises a ValueError on fit()r   Nc                     || _         d S r_   r  r  s     rc   rd   zFailingClassifier.__init__  re   rf   c                 N    | j         t          j        k    rt          d          d S )Nz%Failing classifier failed as required)r  r  FAILING_PARAMETERr   r  s      rc   ro   zFailingClassifier.fit  s+    >.@@@DEEE A@rf   c                 @    t          j        |j        d                   S rq   r  rw   s     rc   ru   zFailingClassifier.predict  r  rf   c                     dS )Nr   r   rl   s      rc   r   zFailingClassifier.score  s    srf   r_   r   )	r   r   r   r   r   rd   ro   ru   r   r   rf   rc   r  r    so        66# # # #F F F F$ $ $     rf   r  c            	      (   t          ddd          \  } }t                      }t          |dg digddd	
          t          j        dt          j                  }t          j        t          |          5  	                    | |           d d d            n# 1 swxY w Y   t          j        d                   }fdt          fdt          |          D                       sJ t          |dg digddt          d          
          t          j        dt          j                  }t          j        t          |          5  	                    | |           d d d            n# 1 swxY w Y   t          j        d                   }t          fdt          |          D                       sJ j        d         }|d         dk    r|d         dk    sJ ||j                 dk    sJ j        |j        k    sJ d S )Nr|  r   r   rG  r  r   r}   r   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   r   c                 l     t          j         fdt          j                  D                       S )Nc                 <    g | ]}j         d |z                    S r  rQ  )r   rS  r)  r   s     rc   r   zPtest_grid_search_failing_classifier.<locals>.get_cand_scores.<locals>.<listcomp>  s+    VVVQR^0145a8VVVrf   )ri   r   r   rW  )r   r)  s   `rc   get_cand_scoresz<test_grid_search_failing_classifier.<locals>.get_cand_scores  s<    xVVVVV%BUBUVVV
 
 	
rf   c              3      K   | ]F}j         d          |         t          j        k    #t          j         |          dk              V  GdS )param_parameterr   N)r   r  r   ri   r  r   r  r
  r)  s     rc   r   z6test_grid_search_failing_classifier.<locals>.<genexpr>  sp       	
 	
~/08 23 3 F??6**c1223 3 3 3	
 	
rf   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      K   | ]T}j         d          |         t          j        k    #t          j        t          j         |                              V  UdS )r  N)r   r  r   ri   r  isnanr  s     rc   r   z6test_grid_search_failing_classifier.<locals>.<genexpr>  su        >+,V4./ / 	rx//0011/ / / / rf   r$  r   r}   r   )r   r  r*   rY  compileDOTALLr   r  r   ro   rh   r   r  r   r  r   r7  )rm   r   r   warning_messager@  ranksr
  r)  s         @@rc   #test_grid_search_failing_classifierr    s    KKKDAq


C 

yyy	!"
 
 
B j	 i  O 
&o	>	>	>  
q!              r~h/00L
 
 
 
 

 	
 	
 	
 	
 	
--	
 	
 	
     

yyy	!"%LL
 
 
B j	 i  O 
&o	>	>	>  
q!              r~h/00L     L))        N,-E 8q==U1X]]]*&'1,,,,>S2222222s$   :BB!$B!E66E:=E:c                  f   t          ddd          \  } }t                      }t          |dt          j        gdz  igd          }t	          j        d	t          j        
          }t          j        t          |          5  |
                    | |           d d d            d S # 1 swxY w Y   d S )Nr|  r   r   rG  r  r   r   r   zrAll the 15 fits failed.+15 fits failed with the following error.+ValueError.+Failing classifier failed as requiredr  r   r   r  r*   r   rY  r  r  r   r   r   ro   )rm   r   r   r)  r  s        rc   )test_grid_search_classifier_all_fits_failr    s   KKKDAq


C	
);<q@	AB
 
 
B jH i  O 
z	9	9	9  
q!                 s   B&&B*-B*c                     t          ddd          \  } }t                      }t          |dg digddd	
          }t          j        t
                    5  |                    | |           d d d            d S # 1 swxY w Y   d S )Nr|  r   r   rG  r  r  r  Fr   r  )r   r  r*   r   r   r   ro   r  s       rc   )test_grid_search_failing_classifier_raiser    s     KKKDAq


C 

yyy	!"
 
 
B 
z	"	"  
q!                 s   A::A>A>c                  x   ddgg dddddgig} t          | d	          }d}d
}d|||fz  }t          j        t          |          5  t	          |           d d d            n# 1 swxY w Y   t          | d
	          }t	          |          }t          |          d
k    sJ t          |           D ]}||v sJ 	t          t          | d	                    d
k    sJ t          d          t          d          t          d          d} t          | dd          }t	          |          }t          |          dk    sJ d |D             }t          t          |                    dk    sJ t          d          g dd}t          |d	          }t	          |          }t          |          dk    sJ 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     r   c   r  )r   r   c                 B    g | ]}d |d         |d         |d         fz  S )z	a%db%dc%dr  r  r  r   r   s     rc   r   z7test_parameters_sampler_replacement.<locals>.<listcomp>J  s0    PPP1qvqvqv&>>PPPrf   r   r  )
r2   r   r  r  r   rh   r1   r   r   r
   )	r   r  r   	grid_sizeexpected_warningr  r#  hashable_samplesparams_distributions	            rc   #test_parameters_sampler_replacementr+  ,  sG    a&OOO44	5(#$F va000GFI	14=vy3Q	R 
 
k)9	:	:	:  W               va000G7mmGw<<1'' ! !     t44455:::: 99599599==FvbrBBBG7mmGw<<2PPPPPs#$$%%++++ %.cNNoooNN21===G7mmGw<<1s   A$$A(+A(c                  
   ddgi} t          j        d                              dd          }g d}t          t	          d          | d	
          }t          |d          rJ |                    ||           |                    |           |                    |           ddgi} t          t	          d          | d	
          }t          |d          rJ |                    ||           t          |d          rJ d S )Nlosslog_loss   r   r   r   r   r   r}   r}   r}   hinge)r-  r   r  r   r   r   )	ri   r   r   r*   r!   r   ro   r   r   )r   rm   r   r   s       rc   #test_stochastic_gradient_loss_paramr3  T  s0    	J 		"a$$AA
W---*  C sO,,,,,GGAqMMMa!
 		J W---*  C sO,,,,,GGAqMMMsO,,,,,,,rf   c                      t          j        d                              dd          } g d}t          d          }t	          |dddgid	
          }|                    | |           d S )Nr   r   r0  r   r   r   r  r  r   )r   r   )ri   r   r   rE   r*   ro   r  s       rc   %test_search_train_scores_set_to_falser5  t  sl    
	!Q##AA

#
#
#C	csS#J&7A	>	>	>BFF1aLLLLLrf   c            	        	
 d} d}t          | d          \  }}t          t          d          dg dit          ||           d	
          		                    ||           t          t          d          dg dit          |          d	
          }|                    ||           t          t          |d	d                              ||          t                    sJ t          t          d          dg dit          |d	d                              ||          d	
          }|                    ||           t          t          d          dg dit          |d	d          d	
          }|                    ||           d }t          j
                             ||j                   ||j                             t          j
                            d 	j                                        D             d |j                                        D                        t          t          d          dg dit          |d	          d	
          		                    ||           dD ]ni }t          d          D ]"
	
fdt          d          D             |
<   #t          |d         |d                    t          |d         |d                    od S )Nr   r   r   r  r   r   )r  r  g333333?)r   r  T)r   r   r1  r  )r   rM  r   c                 :    dD ]}|                      |           | S )N)r-  r.  r/  r0  )pop)r  r  s     rc   _pop_time_keysz>test_grid_search_cv_splits_consistency.<locals>._pop_time_keys  s0    
 	  	 C NN3rf   c                 D    i | ]\  }}|                     d           ||S r}  r  rv  s      rc   r  z:test_grid_search_cv_splits_consistency.<locals>.<dictcomp>  s/    LLL$!Q

78K8KLALLLrf   c                 D    i | ]\  }}|                     d           ||S r}  r  rv  s      rc   r  z:test_grid_search_cv_splits_consistency.<locals>.<dictcomp>  s/    MMM$!QG9L9LMAMMMrf   )r  r  r  r  )r   rM  )r  r  r   c                 @    g | ]}j         d |fz                    S )zsplit%d_%s_scorerQ  )r   rS  r)  param_i
score_types     rc   r   z:test_grid_search_cv_splits_consistency.<locals>.<listcomp>  s?     ) ) ) 1Q
OCDWM) ) )rf   r}   r   r   )r   r*   rE   r9   ro   r.   r   r  r	   ri   r  r  r   r   r   rV   )r  r   rm   r   gs2gs3gs4r9  per_param_scoresr)  r=  r>  s            @@@rc   &test_grid_search_cv_splits_consistencyrC  }  s   IHCCCDAq	q!!!)H	BBB	
 
 
B FF1aLLL
q!!!)(###	  C GGAqMMM xA>>>DDQJJ     q!!!)(DqAAAGG1MM	  C GGAqMMM
q!!!)(DqAAA	  C GGAqMMM   Js'')H)H   JLL"...00LLLMM#///11MMM   
q!!!---.(D111	
 
 
B FF1aLLL ( 	L 	L
Qxx 	 	G) ) ) ) ) )q) ) )W%%
 	""21"57G7JKKK!"21"57G7JKKKK	L 	Lrf   c                     t                      } t          | dg didd          }|                    t          t                     |                    |                    t                              }t          t          |           d S )Nra   r   r   r   r   )r]   r*   ro   rm   r   r{   rx   rW   )r   r   X_round_trips      rc   +test_transform_inverse_transform_round_triprF    sw    


Cs[)))$<ANNNKOOAq001F1Fq1I1IJJLq,'''''rf   c                    	 d 	fd G fddt                     } t          d          t          ddd	          \  	 | d
                              	          } dddgidddgig          }|j        } ||           t          |          D ]]}|d                                         rA|dd          dk    r3|dvr/t          ||          t          ||          k    sJ d|z              ^d S )Nc                    |j         }t          |                                           t          |          k    sJ | D ]}|                    d          svt	          j        | |                   | |<   | |         j        j        dk    r"t          ||         | |         d|z              lt          ||         | |         d|z              d S )Nr~  r9  z	Checking r  )
r   r   r  r  ri   
asanyarrayr  r   rW   rS   )resultsgscvexp_resultsr5  s       rc   check_resultsz-test_custom_run_search.<locals>.check_results  s    &gllnn%%)<)<<<<< 		Y 		YA::g&& Y]71:66
1:#(C//&#A
K!O     $KNGAJVWXXXX		Y 		Yrf   c                 P    t          | d                                        S )NTr1  )r*   ro   )r   rm   r   r   s    rc   fit_gridz(test_custom_run_search.<locals>.fit_grid  s(    CEEEII!QOOOrf   c                   ,     e Zd Z fdZfdZ xZS ).test_custom_run_search.<locals>.CustomSearchCVc                 <     t                      j        |fi | d S r_   superrd   rb   r  kwargsr  s      rc   rd   z7test_custom_run_search.<locals>.CustomSearchCV.__init__  (    EGGY11&11111rf   c           	           |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}   r   min_samples_splitr   r   r   )rb   evaluaterJ  rM  rP  s      rc   _run_searchz:test_custom_run_search.<locals>.CustomSearchCV._run_search  s    ha 0;2BCDDGM'88[1a&,A#B#BCCCh!4a 8;NPR:STUUGM;A/2E2w1OPQQ    rf   )r   r   r   rd   r\  __classcell__)r  rM  rP  s   @rc   CustomSearchCVrR    sW        	2 	2 	2 	2 	2	 	 	 	 	 	 	 	 	 	rf   r^  r   r   r   r   )r  n_informativer   TrO  r  r}   r   rZ  r   r   r   r  >   r  rk   r   r  r   zAttribute %s not equal)r7   rJ   r   ro   r   dirislowerr<  )
r^  mycvrK  rJ  attrrm   rM  r   rP  r   s
        @@@@@rc   test_custom_run_searchrd    s   Y Y YP P P P P P P            Q
/
/
/CAANNNDAq>#$777;;AqAAD8kAq6*-@1b',JKLLDGM'4   D		  GOO	RSS	S    4&&'$*=*====(4/ >== rf   c                      G d dt                     }  | t                                                    t          t                      G d dt                     }t          j        t          d          5   |t                                                    t          t                     d d d            d S # 1 swxY w Y   d S )Nc                   &     e Zd Z fdZddZ xZS );test__custom_fit_no_run_search.<locals>.NoRunSearchSearchCVc                 <     t                      j        |fi | d S r_   rT  rV  s      rc   rd   zDtest__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.__init__   rX  rf   Nc                     | S r_   r   )rb   rm   r   r"  
fit_paramss        rc   ro   z?test__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.fit#  s    Krf   r   )r   r   r   rd   ro   r]  r  s   @rc   NoRunSearchSearchCVrg    sL        	2 	2 	2 	2 	2	 	 	 	 	 	 	 	rf   rl  c                        e Zd Z fdZ xZS )3test__custom_fit_no_run_search.<locals>.BadSearchCVc                 <     t                      j        |fi | d S r_   rT  rV  s      rc   rd   z<test__custom_fit_no_run_search.<locals>.BadSearchCV.__init__*  rX  rf   )r   r   r   rd   r]  rk  s   @rc   BadSearchCVrn  )  s8        	2 	2 	2 	2 	2 	2 	2 	2 	2rf   rp  z_run_search not implemented.r   )r7   rD   ro   rm   r   r   r   NotImplementedError)rl  rp  s     rc   test__custom_fit_no_run_searchrr    s       l    ""1a(((2 2 2 2 2l 2 2 2 
*2P	Q	Q	Q % %CEEq!$$$% % % % % % % % % % % % % % % % % %s   76B::B>B>c                     t          d                              t                    } d | D              d}t          t	                      dg di| d          }t          j        t          d	
          5  |                    t          d |         t          d |                    d d d            d S # 1 swxY w Y   d S )Nr   r  c                     g | ]}|S r   r   )r   us     rc   r   z0test_empty_cv_iterator_error.<locals>.<listcomp><  s    OOO1QOOOrf   r   r-  r  r  r  r   r   n_jobszNNo fits were performed. Was the CV iterator empty\? Were there no candidates\?r   )
r.   r  rm   r3   r    r   r   r   ro   r   )r   
train_sizeridges      rc   test_empty_cv_iterator_errorr{  4  s   
 
				 	 	#	#B OOOOO Juww2D2D2D(E"UVWWWE 
*
 
 
 2 2 			!KZK.!KZK.1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   51B33B7:B7c                  V    G d dt                     }  | d          }d}t          t                      dg di|d	          }t          j        t
          d
          5  |                    t          d |         t          d |                    d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS ).test_random_search_bad_cv.<locals>.BrokenKFoldc                     dS )Nr}   r   )rb   argskws      rc   get_n_splitsz;test_random_search_bad_cv.<locals>.BrokenKFold.get_n_splitsT  s    1rf   N)r   r   r   r  r   rf   rc   BrokenKFoldr~  S  s#        	 	 	 	 	rf   r  r   r  r   r-  rv  r   rw  zXcv.split and cv.get_n_splits returned inconsistent results. Expected \d+ splits, got \d+r   )	r.   r3   r    r   r   r   ro   rm   r   )r  r   ry  rz  s       rc   test_random_search_bad_cvr  P  s       e   
 
a	 	 	 BJuww2D2D2D(E"UVWWWE 

 
 
 2 2 			!KZK.!KZK.1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s    1BB"%B"r1  F)r   r   r   r  r   c                    t          dd          \  }} G d d          } | t                      f |            d|d|}t          j        t                    5 }|                    ||           d d d            n# 1 swxY w Y   |rdd	gndg}t          |          t          |          k    sJ t          ||          D ]!\  }	}
d
|
 dt          |	j	                  v sJ "|j
        d                                         }t          j        |j
        d                   }t          |j
        d         |         |           t          j        |j
        d         |          |k               sJ d S )Nr   r   )r  r   c                       e Zd ZdZd Zd ZdS )Htest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorerz1Scorer that will fail for some split but not all.c                     d| _         d S rq   )n_countsr   s    rc   rd   zQtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorer.__init__  s    DMMMrf   c                 Z    | xj         dz  c_         | j         dz  dk    rt          j        S dS )Nr}   r   r   )r  ri   r  )rb   r  rm   r   s       rc   __call__zQtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorer.__call__  s0    MMQMM}q A%%v1rf   N)r   r   r   r   rd   r  r   rf   rc   FailingScorerr  }  s8        ??	 	 		 	 	 	 	rf   r  r   )r   r   r1  r  r  zOne or more of the z scores are non-finiter$  r  )r   rI   r   r  r  ro   rh   zipr?  messager   maxri   r  rW   r  )r   rZ  r1  rm   r   r  r   warn_msgset_with_warningmsgdataset	last_ranknon_finite_masks                rc   1test_searchcv_raise_warning_with_non_finite_scorer  i  s   $ ;;;DAq
 
 
 
 
 
 
 
 8  -	 
  D 
k	"	" hA               -?L((VHx==C 0111111H&677 Y YWDWDDDCKHXHXXXXXX  !237799Iht/0ABCCOt'(9:?KYWWW6$"#456FG)STTTTTTTs   A??BBc                     d } t          ddd          \  }}t          d          }t          |ddd	gi| d
          }|                    ||           g d}|D ] }d                    |          |j        v sJ !|                    |          }t          ||          }|                    ||          t          j
        |d                   k    sJ d S )Nc                     |                      |          }t          ||          }|d         |d         |d         |d         dS )N)r   r   r   r}   )r}   r   r}   r}   tnfpfntp)ru   r#   )r   rm   r   ra  cms        rc   custom_scorerzAtest_callable_multimetric_confusion_matrix.<locals>.custom_scorer  sB    Qa((hbhbhbhOOOrf   (   r   r  rG  r   r   r  r}   r  r  r  zmean_test_{}r  )r   rE   r*   ro   formatr   ru   r#   r   r   rX  )	r  rm   r   r  r[  score_namesnamera  r  s	            rc   *test_callable_multimetric_confusion_matrixr    s   P P P
 KKKDAq

$
$
$C#c1XTRRRF
JJq!***K A A$$T**f.@@@@@@^^AF	!V	$	$B<<1r$x!8!8888888rf   c                     d } t          ddd          \  }}t          d          }t          |ddd	gi| d
          }t          |ddd	gid
dgd
          }|                    ||           |                    ||           |j        t          j        |j                  k    sJ |j        |j        k    sJ |                    ||          t          j        |                    ||                    k    sJ d S )Nc                 n    |                      |          }t          ||          t          ||          dS )N)r9  r  )ru   r'   r"   r  rm   r   ra  s       rc   r  zHtest_callable_multimetric_same_as_list_of_strings.<locals>.custom_scorer  s:    Q"1f--&q&11
 
 	
rf   r  r   r  rG  r   r   r  r}   r9  r  r  	r   rE   r*   ro   rt  r   rX  r7  r   )r  rm   r   r  search_callable
search_strs         rc   1test_callable_multimetric_same_as_list_of_stringsr    s1   
 
 
 KKKDAq

$
$
$C"cC8_m8  O cC8_x&<H  J 1NN1a&&-
8N*O*OOOOO&**@@@@@  A&&&-
8H8HA8N8N*O*OOOOOOOrf   c                  F   d } t          ddd          \  }}t          d          }t          |ddd	gi| d
          }t          |ddd	gidd          }t          |ddd	gidgd          }|                    ||           |                    ||           |                    ||           |j        t          j        |j                  k    sJ |j        |j        k    sJ |                    ||          t          j        |                    ||                    k    sJ |j        t          j        |j                  k    sJ |j        |j        k    sJ |                    ||          t          j        |                    ||                    k    sJ d S )Nc                 L    |                      |          }t          ||          S r_   )ru   r'   r  s       rc   r  zHtest_callable_single_metric_same_as_single_string.<locals>.custom_scorer  s!    QAv&&&rf   r  r   r  rG  r   r   r  r}   Tr  r9  r  )r  rm   r   r  r  r  search_list_strs          rc   1test_callable_single_metric_same_as_single_stringr    s   ' ' ' KKKDAq

$
$
$C"cC8_m4  O cC#q?HHUUUJ"cC8_xj  O 1NN1a1&&-
8N*O*OOOOO&**@@@@@  A&&&-
8H8HA8N8N*O*OOOOO&&-
8N*O*OOOOO&**@@@@@  A&&&-
8H8HA8N8N*O*OOOOOOOrf   c                     d } t          ddd          \  }}t          t          d          ddd	gi| d
          }d}t          j        t
          |          5  |                    ||           d d d            d S # 1 swxY w Y   d S )Nc                 
    ddiS )Nbad_namer}   r   r  rm   r   s      rc   
bad_scorerzBtest_callable_multimetric_error_on_invalid_key.<locals>.bad_scorer  s    Arf   r  r   r  rG  r   r   r  r}   	good_namer  z`For multi-metric scoring, the parameter refit must be set to a scorer key or a callable to refitr   )r   r*   rE   r   r   r   ro   )r  rm   r   r   r  s        rc   .test_callable_multimetric_error_on_invalid_keyr    s       KKKDAq
r"""	sAh	  C	,  
z	-	-	-  1                 s   A??BBc                     d } t          ddd          \  }}t                      }t          |dg dig| dd	
          }t          j        dt          j                  }t          j        t          |          5  |	                    ||           d d d            n# 1 swxY w Y   t          |j        d         g d           d S )Nc                 
    ddiS Nr:  r}   r   r  s      rc   r  zBtest_callable_multimetric_error_failing_clf.<locals>.custom_scorer	      qzrf   r|  r   r   rG  r  r  Fr  r  zm5 fits failed.+total of 15.+The score on these train-test partitions for these parameters will be set to 0\.1r  r   mean_test_acc)r}   r}   r  )r   r  r*   rY  r  r  r   r  r   ro   rS   r   )r  rm   r   r   r)  r  s         rc   +test_callable_multimetric_error_failing_clfr  	  s)      KKKDAq


C	
yyy	!"
 
 
B j	Ki  O
 
&o	>	>	>  
q!               BN?3[[[AAAAAs   ;BB"%B"c                  z   d } t          ddd          \  }}t                      }t          |dt          j        gdz  ig| dd	
          }d}t	          j        d| t          j                  }t          j        t          |          5  |
                    ||           d d d            d S # 1 swxY w Y   d S )Nc                 
    ddiS r  r   r  s      rc   r  zBtest_callable_multimetric_clf_all_fits_fail.<locals>.custom_scorer!	  r  rf   r|  r   r   rG  r  r   Fr  r  z1ValueError: Failing classifier failed as requiredz5All the 15 fits failed.+your model is misconfigured.+r  r   r  )r  rm   r   r   r)  individual_fit_error_messager   s          rc   +test_callable_multimetric_clf_all_fits_failr  	  s1      KKKDAq


C	
);<q@	AB
 
 
B $W J.+. . i  M 
z	7	7	7  
q!                 s   B00B47B4c                  p   d} t          |           \  }}t                      }dddgi}t          ||          }t          ||d          }t	          |d          rJ t	          |d          rJ |                    ||           |                    ||           |j        | k    sJ |j        | k    sJ d S )Nr   rH  max_iterr   r}   r   n_features_in_)r   r   r*   r3   r   ro   r  )rH  rm   r   gbdtr   r)  r  s          rc   test_n_features_inr  =	  s     J*555DAq)++Dq!f%J	dJ	'	'B	D*Q	7	7	7Br+,,,,,r+,,,,,FF1aLLLFF1aLLL
****
******rf   pairwisec                       G  f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                   "     e Zd Z fdZ xZS )Stest_search_cv_pairwise_property_delegated_to_base_estimator.<locals>.TestEstimatorc                 `    t                                                      }|j        _        |S r_   )rU  __sklearn_tags__
input_tagsr  )rb   tagsr  r  s     rc   r  zdtest_search_cv_pairwise_property_delegated_to_base_estimator.<locals>.TestEstimator.__sklearn_tags__Y	  s'    77++--D'/DO$Krf   )r   r   r   r  r]  )r  r  s   @rc   TestEstimatorr  X	  s>        	 	 	 	 	 	 	 	 	 	rf   r  z.BaseSearchCV pairwise tag must match estimatorr  r   N)r   r*   r  r  r  )r  r  r  attr_messager   s   `    rc   <test_search_cv_pairwise_property_delegated_to_base_estimatorr  N	  s              -//CCL	cMB40	1	1Br**,,7@@@@,@@@@@rf   c                       G d dt                     }  |             }d}dD ]W}|                    |           t          |ddgi          }||                                j        j        k    s
J |            Xd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                   &     e Zd ZddZ fdZ xZS )Xtest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwiseTc                     || _         d S r_   r  )rb   r  s     rc   rd   zatest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise.__init__n	  s    $DMMMrf   c                 j    t                                                      }| j        |j        _        |S r_   )rU  r  r  r  )rb   r  r  s     rc   r  zitest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise.__sklearn_tags__q	  s)    77++--D'+}DO$Krf   )T)r   r   r   rd   r  r]  rk  s   @rc   EstimatorPairwiser  m	  sL        	% 	% 	% 	%	 	 	 	 	 	 	 	 	rf   r  z4BaseSearchCV _pairwise property must match estimatorrk  r  r  r   N)r   r   r*   r  r  r  )r  r  r  _pairwise_settingr   s        rc   =test_search_cv__pairwise_property_delegated_to_base_estimatorr  d	  s        M    


CIL* 
 
 1222#t455 B$7$7$9$9$D$MMMM NMMM
 
rf   c                     d} d}t          | d          \  }}ddgi}t                      }t          |||          }|                    ||           |                    |          }t          |          }t          d	          }t          |||          }|                    ||           |                    |          }	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 ensures the equivalence of 'precomputed'.

    Non-regression test for issue #13920.
    r  r   r   r  r  r   r   rq  )metricz2GridSearchCV not identical with precomputed metricN)r   r<   r*   ro   ru   r)   r  )r  r   rm   r   grid_paramsr   r   preds_originalX_precomputedpreds_precomputedr  s              rc   ;test_search_cv_pairwise_property_equivalence_of_precomputedr  	  s     IHCCCDAq 2$'K 
 
 C	c;8	4	4	4BFF1aLLLZZ]]N (**M
m
4
4
4C	c;8	4	4	4BFF=!

=11GL//4466DDDD6DDrf   zSearchCV, param_searchr  r  r  r   c                      G d dt           t                    } |  |            |          }t          d          \  }}|                    ||d           |j        j        dk    sJ d S )Nc                   $    e Zd ZddZddZd ZdS ),test_scalar_fit_param.<locals>.TestEstimatorNc                     || _         d S r_   )r  )rb   r  s     rc   rd   z5test_scalar_fit_param.<locals>.TestEstimator.__init__	  s    DFFFrf   c                     || _         d S r_   )r_)rb   rm   r   rs       rc   ro   z0test_scalar_fit_param.<locals>.TestEstimator.fit	  s    DGGGrf   c                 F    t          j        t          |                    S )Nrr   )ri   r   rh   rw   s     rc   ru   z4test_scalar_fit_param.<locals>.TestEstimator.predict	  s    83q66++++rf   r_   )r   r   r   rd   ro   ru   r   rf   rc   r  r  	  sK        	 	 	 		 	 	 		, 	, 	, 	, 	,rf   r  r  r   )r  )r   r   r   ro   r   r  )r   param_searchr  modelrm   r   s         rc   test_scalar_fit_paramr  	  s    , , , , , , , , H]]__l33EB///DAq	IIabI #r))))))rf   c                     t          t          d          ddi\  }}}} G d dt                    }d } |  |            |          }||f|dd}	 |j        ||fi |	 d S )Nr  r   r   c                   (     e Zd Z	 	 	 	 d fd	Z xZS )9test_scalar_fit_param_compat.<locals>._FitParamClassifierNc                     t                                          |||           |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   r}   )rU  ro   callabler   r   ndim)rb   rm   r   r  tuple_of_arraysscalar_paramcallable_paramr  s          rc   ro   z=test_scalar_fit_param_compat.<locals>._FitParamClassifier.fit	  s     GGKK1MK:::!####N+++++ ou55555"1%*a////"1%*a////Krf   NNNN)r   r   r   ro   r]  rk  s   @rc   _FitParamClassifierr  	  sK        
  	 	 	 	 	 	 	 	 	 	rf   r  c                      d S r_   r   r   rf   rc   _fit_param_callablez9test_scalar_fit_param_compat.<locals>._fit_param_callable	  s    rf   )r  r  r  )r6   r   r!   ro   )
r   r  X_trainX_validrw  y_validr  r  r  rj  s
             rc   test_scalar_fit_param_compatr  	  s     *:	"	-	-	-*<>* *&GWgw    m   (   H((**L99E $W-- J
 EIgw--*-----rf   z)ignore:The total space of parameters 4 is	Predictorc                 \   t           j                            d          }|                    dd          t          j        dgdz  dgdz  z             }}t          dt                      fd |            fg          }dd	gdd	gd
} | ||d          }|                    ||           |j        	                                |	                                k    sJ |
                    |          }t          |          rNt          |d           |                    ||          t          j        t!          ||                    k    sJ d S t#          ||                                           |                    ||          t          j        t'          ||                    k    sJ d S )Nr      r   r   r}   r|  transformer	predictorr   )transformer__parampredictor__paramar   r  )ri   r#  r$  randnr   r>   rQ   ro   r  r  ru   r   rW   r   r   rX  r"   rS   r`  r&   )	r   r   r&  rm   r   r  r   r[  ra  s	            rc   1test_search_cv_using_minimal_compatible_estimatorr  	  s    )


"
"C99RRXqcAgb&899qA
+--	.iikk0JK E
  !"gW F XeV999F
JJq!##%%6666^^AFV H61%%%||Aq!!V]>!V3L3L%M%MMMMMMM)))||Aq!!V]8Av3F3F%G%GGGGGGGrf   c                 d   t          dddd          \  }}t          d          }ddgi}t          ||d	d
d
|                              ||           |                                 j        }|rt          j        d|          }nt          j        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   r1  z$score=\(train=[\d\.]+, test=[\d.]+\)zscore=[\d\.]+N)	r   rE   r*   ro   
readouterroutrY  findallrh   )capsysr1  rm   r   r   r   capturedr   s           rc   test_search_cv_verbose_3r  
  s     #TUVVVDAq

#
#
#C#<D-   
c!Qiii  ""&H 7
BHMM
+X66u::??????rf   r  c                 l   t          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    sJ d S )Nr  r   r  )r   clf__Cr   r   trs)r   NTr   r  r/  r   r   )r   rE   r   r>   rQ   ro   r   named_steps)	r   r  rm   r   r   orig_Cr   param_grid_searchr)  s	            rc   test_search_estimator_paramr  (
  s     B///DAqkk]tf55FE]1Fe/112MBCCD%v.	$	Rdq*	R	R@Q	R	R	V	V	1
 
B
 %='''')%02d::::::rf   c            	      ~   ddd} t          dt                      fdt                      fg          }t          || dddd	d
          }g d}g d}|                    ||           |j        d         }t          j        dt                    }g d|d d <   t          j	        
                    |j        |           d S )N)r  r}   r   )l1l2)vect__ngram_range
vect__normvectr   r   r   r   r}   )r  r  r   r   rx  r   r   )oner"  threefourfive)r   r   r}   r   r}   param_vect__ngram_rangerN  )r  r  r  )r>   r   r:   r3   ro   r   ri   r   objectr  rW   r   )parameter_gridpipeliner2  
data_traindata_targetresultexpected_datas          rc   test_search_with_2d_arrayr+  F
  s     ." N _&&'LNN#	
 H '*  M 988J!//Kj+...&'@AFHQf---M///M!!!J!!&+}=====rf   c                     t          d          \  } }t          dt                      fdt                      fg          }dt                      t	                      gi}t          ||d          }t          d          5  |                                }d	|v sJ 	 d
d
d
           n# 1 swxY w Y   |                    | |           t          d          5  |                                }d	|v sJ 	 d
d
d
           n# 1 swxY w Y   t          ||d          }|                    | |           t          d          5  |                                }d	|vsJ d|v sJ 	 d
d
d
           d
S # 1 swxY w Y   d
S )z5Test different HTML representations for GridSearchCV.r  r   rF  r   F)r   r/  diagram)displayz<div>DummyClassifier</div>NTz<div>LogisticRegression</div>)	r   r>   rC   r   r   r*   r   _repr_html_ro   )rm   r   r&  r   r  	repr_htmls         rc   test_search_html_reprr1  d
  sq   B///DAq'>#3#34uo>O>O6PQRRH/++-?-A-ABCJ X*EJJJI			*	*	* 9 9))++	+y888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9
 MM!Q			*	*	* 9 9))++	+y888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9
 X*DIIIIMM!Q			*	*	* < <))++	+9<<<<.);;;;;< < < < < < < < < < < < < < < < < <s6   B))B-0B-DD	D!E44E8;E8)enable_metadata_routingc           	      ,   t          d          \  }}t          |          }t          j                            d          }|                    |          }|                    |          }t                      }|ddgii}	t                      }
t          |
          	                    dd	          }t          |d
          } | |fd
d|d|	                    ||||           t          |
          sJ |
D ]}t          |ddd	||           dS )zMTest that *SearchCV forwards metadata correctly when passed multiple metrics.r  r   r   r   r}   )registryscore_weightsscore_metadata)r  metadatar  )	my_scorerr  r   r  )r5  r6  r   _score)objr  parentsplit_paramsr  r7  N)r   r[   ri   r#  r$  r  rE   rG   rF   set_score_requestr  ro   rh   rH   )r   r  rm   r   r  r&  r5  r6  r  r  scorer_registryscorerr   _scorers                 rc   *test_multi_metric_search_forwards_metadatarA  
  s]    B///DAqQI
)


"
"CHHY''MXXi((N
++C%aSz2kkOo666HH%0@ I  F Vj999GHSO
q'OO=NOOSS	1M. T    " 
 
6'#	
 	
 	
 	
 	

 
rf   c                 ,   t          d          \  }}t                      }|ddgii} | |fddi|                    ||          }t          j        t
          d          5  |                    ||d	           d
d
d
           d
S # 1 swxY w Y   d
S )z{*SearchCV should reject **params when metadata routing is not enabled
    since this is added only when routing is enabled.r  r   r   r}   r   r   zis only supported ifr   )r7  N)r   rE   ro   r   r   r   r   )r   r  rm   r   r  r  r)  s          rc   1test_score_rejects_params_with_no_routing_enabledrC  
  s     B///DAq
++C%aSz2	#	1	1!	10	1	1	5	5a	;	;B	z)?	@	@	@ # #
A"""# # # # # # # # # # # # # # # # # #s   #B		BBc                  P    G 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          }t	          d          \  }}|                    ||           |D ]"}|j        d|          j        t          k    sJ #dS )zQNon-regression test for https://github.com/scikit-learn/scikit-learn/issues/29074c                   ,    e Zd Z	 	 	 	 ddZddZd ZdS )8test_cv_results_dtype_issue_29074.<locals>.MetaEstimatorNc                 L    || _         || _        || _        || _        || _        d S r_   )base_clf
parameter1
parameter2
parameter3
parameter4)rb   rH  rI  rJ  rK  rL  s         rc   rd   zAtest_cv_results_dtype_issue_29074.<locals>.MetaEstimator.__init__
  s+     %DM(DO(DO(DO(DOOOrf   c                 <    | j                             ||           | S r_   )rH  ro   r  s      rc   ro   z<test_cv_results_dtype_issue_29074.<locals>.MetaEstimator.fit
  s    Ma###Krf   c                 8    | j                             ||          S r_   )rH  r   r  s      rc   r   z>test_cv_results_dtype_issue_29074.<locals>.MetaEstimator.score
  s    =&&q!,,,rf   r  r_   )r   r   r   rd   ro   r   r   rf   rc   MetaEstimatorrF  
  sY         	) 	) 	) 	)	 	 	 		- 	- 	- 	- 	-rf   rO  NoptionABr}   r   r  str1str2)rI  rJ  rK  rL  r   r2  r   r   param_)	r   r   r*   r   r   ro   r   r  r$  )rO  r   r   rm   r   r  s         rc   !test_cv_results_dtype_issue_29074rV  
  s	   - - - - - - - -2 h_xo>aVnQxjv&	 J - 2 4 455  K 1%%%DAqOOAq I I&'7'7'78>&HHHHHI Irf   c                     t          j        d          } |                     g dg dg dd          }|                    dd          }|d         }t	          d	t          d
          dgfgd          }t          d	|fdt                      fg          }dt          d
          t                      gi}t          ||d          }|
                    ||           |j        d         j        t          k    sJ dS )zNCheck cv_results_ for estimators with a `dtype` parameter, e.g. OneHotEncoder.r  )r}   r   r   r   r   )r  r  r  r  r  )r~   gffffff@r.  g      @r~   )	numeric_1object_1targetrZ  r}   r  encF)sparse_outputrY  passthrough)	remainderr   enc__encr   r   param_enc__encN)r   importorskipr  dropr   r@   r>   r   rA   r*   ro   r   r  r$  )pddfrm   r   r[  r   r  r   s           rc   'test_search_with_estimators_issue_29157re  
  s:   		X	&	&B	(111///	
 	

 
B 	q!!A
8A

U333j\	BC  C CL*,,-	
 D 	...
K t[Q777KOOAq"#34:fDDDDDDrf   c                  J   dt          d          \  } }t          t          d          t                                }fddD             }fd|D             }t	          |d|i	          }|                    | |           |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  periodic)extrapolationc                     g | ]}|z  S r   r   )r   r   rH  s     rc   r   z4test_cv_results_multi_size_array.<locals>.<listcomp>  s    999qJN999rf   )r   r     c                     g | ]:}t          j        d t           j        dz  |                              df          ;S )r   r   r   )ri   linspacepir   )r   n_knotsrH  s     rc   r   z4test_cv_results_multi_size_array.<locals>.<listcomp>   sP        	Aruqy'**22B
3CDD  rf   splinetransformer__knotsr  param_splinetransformer__knotsN)	r   r?   rB   r   r*   ro   r   r  r$  )rm   r   spline_reg_pipen_knots_list
knots_listspline_reg_pipe_cvrH  s         @rc    test_cv_results_multi_size_arrayru    s    
 J"---DAq#
333 O
 :999L999L   #  J &!&

   1a   &'GHNRXXXXXXXrf   zarray_namespace, device, dtype)idsc                     t          ||          }t          j        d                              d          }|                    |          }|                    ||          }t          j        dgdz  dgdz  z             }|                    ||          }	t          d          5   | t                      d	g d
idd          }
|
	                    ||	           |

                    ||	           d d d            d S # 1 swxY w Y   d S )Nr   )r   r   )devicer   r   r}   T)array_api_dispatchtol)r  r  g-C6?gh㈵>gư>gHz>r   r   r   )rR   ri   r   r   astypeasarrayr   r   r   ro   r   )r   array_namespacerx  r  xprm   X_npX_xpy_npy_xpr   s              rc   #test_array_api_search_cv_classifierr  1  s\    
ov	6	6B
	#x((A88E??D::d6:**D 8QC!GqcAg%&&D::d6:**D	4	0	0	0 # #8&((8889	
 
 
 	T4   tT"""# # # # # # # # # # # # # # # # # #s   *ADD
D)r<  r  r  )r   r   )candidate_paramsexpected	param_foozsimple numeric, single param)idr   r   	param_bar)r   r   r   )FFTr;  z1simple numeric, one param is missing in one roundrN  zlists of different lengthszlists tuplesr  c                 >   t          t          |                     }t          ||          D ]o\  \  }}\  }}||k    sJ |j        |j        k    sJ t          j                            ||           t          j                            |j        |j                   pd S r_   )r   r8   r  r  ri   r  rW   r<  )r  r  r)  r  r=  expected_keyexpected_values          rc   &test_yield_masked_array_for_each_paramr  Y  s    l 45EFFGGF8;FH8M8M G G4e4|^l""""{n22222

%%e^<<<

%%ej.2EFFFF	G Grf   c                      d t          d          D             } t          j                    5  t          j        dt                     t          t          |                      d d d            d S # 1 swxY w Y   d S )Nc                     g | ]}d |iS )r  r   )r   r   s     rc   r   z>test_yield_masked_array_no_runtime_warning.<locals>.<listcomp>  s    :::!:::rf   r$  error)r   warningscatch_warningssimplefilterRuntimeWarningr   r8   )r  s    rc   *test_yield_masked_array_no_runtime_warningr    s    ::eDkk:::		 	"	" C Cg~666/0@AABBBC C C C C C C C C C C C C C C C C Cs   7A11A58A5)r   )r   r  rY  r   r  collections.abcr   r   	functoolsr   ior   	itertoolsr   r   r  r	   numpyri   r   scipy.statsr
   r   r   r   r   sklearn.baser   r   r   r   sklearn.clusterr   sklearn.composer   sklearn.datasetsr   r   r   sklearn.discriminant_analysisr   sklearn.dummyr   sklearn.ensembler   sklearn.exceptionsr   sklearn.experimentalr   sklearn.feature_extraction.textr   sklearn.imputer   sklearn.linear_modelr   r   r    r!   sklearn.metricsr"   r#   r$   r%   r&   r'   r(   sklearn.metrics.pairwiser)   sklearn.model_selectionr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   sklearn.model_selection._searchr7   r8   $sklearn.model_selection.tests.commonr9   sklearn.naive_bayesr:   sklearn.neighborsr;   r<   r=   sklearn.pipeliner>   r?   sklearn.preprocessingr@   rA   rB   rC   sklearn.svmrD   rE   %sklearn.tests.metadata_routing_commonrF   rG   rH   sklearn.treerI   rJ   sklearn.utils._array_apirK   rL   sklearn.utils._mockingrM   rN   sklearn.utils._testingrO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   sklearn.utils.estimator_checksrY   sklearn.utils.fixesrZ   sklearn.utils.validationr[   r]   r   r   rm   r   r   markparametrizer  r   r   r   r   r   r  r  r+  r0  r3  rD  rL  rU  rW  r\  rd  ro  rz  r}  r  filterwarningsr  r  r  r  r  r  r  r  r  r  r  r  r  r  rC  rJ  rb  rg  ro  re  rm  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r3  r5  rC  rF  rd  rr  thread_unsafer{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r1  rA  rC  rV  re  ru  r  one_hot_encoderordinal_encoderr  r  r   r$  ma_with_tuplesr  r  r  r   rf   rc   <module>r     s      				 



  + + + + + + + +             $ $ $ $ $ $ $ $            1 1 1 1 1 1 1 1 1 1 " " " " " " M M M M M M M M M M M M " " " " " " - - - - - -         
 E D D D D D ) ) ) ) ) ) ; ; ; ; ; ; / / / / / / 9 9 9 9 9 9 ; ; ; ; ; ; ( ( ( ( ( (                             9 8 8 8 8 8                                     A @ @ @ @ @ , , , , , , U U U U U U U U U U 4 4 4 4 4 4 4 4            ' & & & & & & &         
 G F F F F F F F        E D D D D D D D                        E D D D D D . . . . . . 1 1 1 1 1 1
$ $ $ $ $_m $ $ $N    y    BHr2hR1a&1a&122BH\\\= = = ='':JSU2V2V2V"WXX&	
IKL1#,	I'JKAJF	
	    YX
!/ !/ !/H  2< < <$ l4F%GHH< < IH<$( ( (07 7 78  >0 0 02	1 	1 	1( ( (V  F F F6 6 6% % %P .99  :9* .99!( !( :9!(H* * *:! ! !$ $ $ $ $} $ $ $ OPP
 
 QP
*+ *+ *+Z  0 *RG44'9<&HII  JI 540+ + +:/ / /*/ / // / /3 3 3>7 7 78$ $ $"8 8 84B B B,V V V VW! W! W!tB B BJ "	sQGn56	cAr7^qQQR 5) 5) 5)p ?  ?  ?F
 
 
@# # #LF F F& ,,..!,q"g 6	
 	
 	
 	,,..K!R;Q	
 	
 	
 7 7 7 . . .@ 1133lll@STTTeggG^^^3L	
 	
 	
 >B >B >BB ((666!.B 8	
 	
 	

 	((666%2w/	
 	
 	
   DN N NDU U U IJJ%' %' KJ%'P"A "A "AJ  $+ + +\, , ,J J J       &N3 N3 N3b  ,  *% % %P- - -@  \L \L \L~( ( (6 6 6r% % %, 2 2 262 2 22 -t}=="	{LLL&ABC%0,,,$?1MM	
	 	*U *U	 	 >=*UZ9 9 9.P P P4P P P8  *B B B8  <+ + +" dE]33O O 43O*
 
 
:E E E< S3+&'*<sGGAqMM>R)ST * *	 *( 	#t-.	gwwtS'9'9:; .. .. ..f GHHl4F%GHH'79J&KLLH H ML IH IHH8 -e}==  >=. 	|$	23	l+ ; ; ;, > > >:< < <@ 	|$	23  ---
 
 .- 
> 	|$	23	l+ 
# 
# 
#"*I *I *IZE E EB  > $--//'   
 l4F%GHH# # IH #0  -// ."" ""828A;;T"HHq q  $QZ%$be//!Q0@0@AAB .	
 	
 	
 	q!!1Q#7#7%Dbe//0C0CDDEE%%hbhyyy&9&9@T@T@T%UU C
	
 
	
 
	
 	qcA3_%aSz':;  E%%aS1#!qc
&C6%RR ,		
 		
 		
 	V_ufo.  " 		
 		
 		
 	_%'?@  E%%&HPV%WW 		
 		
 		
O14 4jG Gk4 4jGC C C C Crf   