
    0Pht                    D   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 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.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZB ddlCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP ddlQmRZRmSZS ddlTmUZU ddlVmWZW ddlXmYZYmZZZm[Z[ ddl\m]Z]m^Z^ ddl_m`Z`maZambZbmcZc ddldmeZemfZf dd lgmhZhmiZimjZj dd!lkmlZlmmZm dd"lnmoZo dd#lpmqZqmrZr dd$lsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{ dd%l|m}Z} dd&l~mZ  G d' d(ee          Z G d) d*ef          Z ej        d+d+gd,d+gd-d-gd.d-gg          Z ej        g d/          Zd0 Zej                            d1eK e	eLd23          g          ej                            d4ded5fd6dgidged7fd6died8fg          d9                         Zd: Zd; Zd< Zej                            d=eDeMg          d>             Zd? Zd@ ZdA ZdB ZdC ZdD ZdE ZdF ZdG ZdH Zej                            dIe}          dJ             Zej                            dIe}          dK             ZdL ZdM Z G dN dOe          Zej                            dP          dQ             ZdR ZdS Zej                            dTd+d.g          ej                            dUeMeDg          dV                         ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ ZddaZdb Zdc Zej                            ddeDdedfd-d2giifeMdfd-d2gid.dgfg          dh             Zdi Zdj Zdk Zdl Zej                            dU eM el            dmdnd2gio           eD el            dmdnd2gip          g          dq             Zej                            dU eM e[drs          dtdnd2giduv           eD e[drs          dtdnd2giduw          g          dx             Zdy Zdz Zej                            d{          d|             Zd} Zd~ Zd Zd Zd Z G d de          Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                            dddrg          ej                            ddeDdedmg diifeMdmg diddgfg          d                         Zd Zd Zd Zd Zd Zd Zd Zej                            ddrdg          d             Zd Zd Zej                            deDdddgifeMd ed-d          ifg          d             Zej                            deDdddgifeMd edd          ifg          d             Zej                            d          ej                            d=eDeMg          ej                            deuetg          d                                     Zej                            ddrdg          d             Zej                            deDdefeMdfeGdefg          d             Zd Zd Zej                            d=eDeMg          d             Zej                            deDdefeMdfg           edr          d                         Zej                            deDdefeMdfeGdefg          d             Zd Zd Zd Zej                            d eo                      ej                            d=eDeMg          d                         Z e`            Z ea            Zej                             ej        d.          dre謹          Zded<   ded-<   ej                            d ej        d6d-id6d.igdej                             ej        d-d.g                    fgd           ej        d-ddd.ddd6digdej                             ej        g d                    fdej                             ej        g dâ          g dĢŦ          fgdƬ           ej        d6d-gd.gdggid6d-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        d6did6digdefgdɬ           ej        d6eid6ei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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))yield_namespace_device_dtype_combinations)CheckingClassifierMockDataFrame)MinimalClassifierMinimalRegressorMinimalTransformer_array_api_for_testsassert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)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)selfr\   s     i/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/model_selection/tests/test_search.py__init__zMockClassifier.__init__j       "    c                 |    t          |          t          |          k    sJ t          j        |          | _        | S rZ   )lennpuniqueclasses_r]   XYs      r^   fitzMockClassifier.fitm   s3    1vvQ	!ra   c                     |j         d         S Nr   shape)r]   Ts     r^   predictzMockClassifier.predictr   s    wqzra   c                     || j         z   S rZ   r[   r]   rh   s     r^   	transformzMockClassifier.transformu       4>!!ra   c                     || j         z
  S rZ   r[   rr   s     r^   inverse_transformz MockClassifier.inverse_transformx   rt   ra   Nc                 &    | j         dk    rd}nd}|S )N         ?        r[   )r]   rh   ri   scores       r^   r{   zMockClassifier.score   s     >AEEEra   Fc                     d| j         iS Nr\   r[   )r]   deeps     r^   
get_paramszMockClassifier.get_params   s    T^,,ra   c                      |d         | _         | S r}   r[   )r]   paramss     r^   
set_paramszMockClassifier.set_params   s    ,ra   )r   NN)F)__name__
__module____qualname____doc__r_   rj   rp   rs   rv   predict_probapredict_log_probadecision_functionr{   r   r    ra   r^   rX   rX   g   s        BB# # # #  
  " " "" " " M   - - - -    ra   rX   c                   (    e Zd ZdZed             ZdS )LinearSVCNoScorez0A LinearSVC classifier that has no score method.c                     t           rZ   )AttributeErrorr]   s    r^   r{   zLinearSVCNoScore.score   s    ra   N)r   r   r   r   propertyr{   r   ra   r^   r   r      s3        ::  X  ra   r   rx      )rx   rx   r   r   c                 ~     t                      fdt          t                               D             k    sJ d S )Nc                      g | ]
}|         S r   r   ).0igrids     r^   
<listcomp>z3assert_grid_iter_equals_getitem.<locals>.<listcomp>   s    <<<a$q'<<<ra   )listrangerc   )r   s   `r^   assert_grid_iter_equals_getitemr      sC    ::<<<<5T+;+;<<<<<<<<<ra   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       r^   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   rx   r      r      r   )hamspameggsr   bar   c           	   3      K   | ]9}t          t          t          |                                                     V  :d S rZ   )tupler   sorteditemsr   ps     r^   	<genexpr>z&test_parameter_grid.<locals>.<genexpr>   s?      GGAU56!''))#4#4677GGGGGGra   c              3   (   K   | ]\  }}d |d|fV  dS )r   r   Nr   )r   xys      r^   r   z&test_parameter_grid.<locals>.<genexpr>   s@       
 
%)QUAua 
 
 
 
 
 
ra   r   rx   Cr         ?)r0   
isinstancer   r   rc   r   r   setr   r   r   r   
IndexError)params1grid1params2grid2r   pointsempty	has_emptys           r^   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 )Nr\   r   r   r   cvverboseparam_foo_paramsklearn)rX   r)   sysstdoutr   rj   rh   r   best_estimator_r\   rT   cv_results_datar{   r   r   rs   scoringr   r   
ValueError)clfgrid_search
old_stdouts      r^   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   rx   coef_)r=   r   r   r)   rj   rh   r   r   r   hasattrr   )pipe
param_gridr   regressor_resultss       r^   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;;;;;;;ra   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      rx   r   r   )expected_fit_paramsr\   r   r   raiser   error_scorez0Expected fit parameter\(s\) \['eggs'\] not seen.r   )r   z)Fit parameter spam has length 1; expected)r   r   )rd   arangereshapearrayrK   r   r   AssertionErrorrj   oneszeros)r   rh   r   r   searchererr_msgs         r^   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皙?rx   r   r   accuracyr   z
no scoringr   rx   )
rD   r   r   r)   rj   best_params_r{   r   r   	TypeError)r   rh   r   Csclf_no_scorer   grid_search_no_scores          r^   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_aucry   )r   rD   r)   rj   r   r{   rR   )rh   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               r^   test_grid_search_score_methodr  +  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6ra   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   rx   n_splitsz*The 'groups' parameter should not be None.r   r   )groups)rd   randomRandomStater   randintrD   r.   r/   r*   r+   r)   r   r   r   rj   r3   r4   )rngrh   r   r  r   r   	group_cvs	error_msgr   gsnon_group_cvss              r^   test_grid_search_groupsr%  G  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   rx   r   r   r   alphary          @rf   F)refit)rd   r   r   r   r)   rD   rj   rT   r   rf   r   r   )rh   r   r  r   s       r^   test_classes__propertyr*  f  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///////ra   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 )Nr\   rx   r   r   r   r   )r   r   )rX   r)   rj   rh   r   r   r2   )r   r   random_searchs      r^   test_trivial_cv_results_attrr-    s    


Cs[1#$61===KOOAq;.....&s[1#,>qQOOOMa;.......ra   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   	precisionr\   r   Fr   r)  r   r   best_index_r  )rp   r   r   rs   rv   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   )rX   r)   rj   rh   r   r   r   r   r   getattrr   value	__cause__strr   )	r   r   r   fn_name	outer_msg	inner_msg	exec_infor"  r)  s	            r^   test_no_refitr>    sd   


C:{34 ? ?"3iii(@RSTTT1%677	
]33	
 ^44	
 	
 	

 	? 	?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   ry      )r   rD   r)   r   r   r   rj   )X_y_r   r   s       r^   test_grid_search_errorrF    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 )Nr@  r   r   rA  ry   rbfr   )r   kernelgammaautorJ  )r   rC   r)   rj   rT   
dual_coef_r   )rD  rE  
param_dictr   r   s        r^   test_grid_search_one_grid_pointrO    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Era   c                      t                      } d }t          | dt          dd          id          }|                    t          t
                     |j        j        dk    sJ d S )Nr\   rx   r   r   r   )rX   r)   r   rj   rh   r   r   r\   )r   r   s     r^   /test_grid_search_when_param_grid_includes_rangerQ    sd    


CKs[%1++$>1EEEKOOAq&0A555555ra   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   rA  r   rx   rK  rL  zParameter grid for parameter 'C' needs to be a list or a numpy array, but got 1 (of type int) instead. Single values need to be wrapped in a list with one element.r   zIParameter grid for parameter 'C' need to be a non-empty sequence, got: []z1,2,3zParameter grid for parameter 'C' needs to be a list or a numpy array, but got '1,2,3' (of type str) instead. Single values need to be wrapped in a list with one element.)r   r   )r   rC   reescaper)   r   r   r  rj   r   rd   r   )rh   r   rN  r   r"  searchs         r^   test_grid_search_bad_param_gridrV    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 )
Nr@  r   r   rA  r   r   ry   rC  g?)
r   rD   r)   rj   rp   r   r   tocoord   mean)	rW  rD  rE  r   r   y_predr   y_pred2C2s	            r^   test_grid_search_sparser^    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$%%,,,,777777ra   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 )Nr@  r   r   rA  r   r   ry   f1r  rC  c                 $    t          | |           S rZ   )r#   )y_true_y_pred_s     r^   f1_lossz0test_grid_search_sparse_scoring.<locals>.f1_loss-  s    '****ra   F)greater_is_better)	r   rD   r)   rj   rp   r   r   rT   r$   )rW  rD  rE  r   r   r[  r   r\  r]  rd  F1Lossy_pred3C3s                r^   test_grid_search_sparse_scoringri    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'''''ra   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 )Nr@  r   r   rA  rC  precomputedrI  r   r   ry   )r   rd   dotro   rC   r)   rj   best_score_rp   rZ  r   r   r   tolist)	rD  rE  K_trainy_trainr   r   K_testy_testr[  s	            r^   #test_grid_search_precomputed_kernelrt  :  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   rk  rl  r   r   ry   )	rd   r   r   rC   r)   r   r   r   rj   )rp  rq  r   r   s       r^   3test_grid_search_precomputed_kernel_error_nonsquarerw  W  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 rZ   	parameterr]   r|  s     r^   r_   zBrokenClassifier.__init__e  r`   ra   c                 8    t          | d          rJ d| _        d S )Nhas_been_fit_T)r   r  r]   rh   r   s      r^   rj   zBrokenClassifier.fith  s&    411111!ra   c                 @    t          j        |j        d                   S rl   rd   r   rn   rr   s     r^   rp   zBrokenClassifier.predictl      x
###ra   rZ   )r   r   r   r   r_   rj   rp   r   ra   r^   ry  ry  b  sL        44# # # #" " "$ $ $ $ $ra   ry  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   rx   r|  r/  Tr   r)  )rd   r   r   r   r)   ry  rj   )rh   r   r   s      r^   
test_refitr  p  s    
 		#r2&&A
!qA37"##A
kAq623[PT  C GGAqMMMMMra   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   *   rA  r   r   {Gz?r   rx   r/  Tr  r   mean_test_score)r   r)   rD   rj   r1  r   keysargmin)
cv_resultsrh   r   r   keys        r^   refit_callablez+test_refit_callable.<locals>.refit_callable  s     #SQRPPP12&&&...!	
 
 
 	1!#### ?'')) 	% 	%C*$$$$$+,33555ra   r   r   r  rA  r   r   r  r/  r  r   rn  N)r   r)   rD   rj   r1  r   )r  rh   r   r   s       r^   test_refit_callabler  ~  s    6 6 62 LLLDAq
r"""	nnn	  C GGAqMMM?asM*******ra   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    r^   refit_callable_invalid_typezEtest_refit_callable_invalid_type.<locals>.refit_callable_invalid_type  s	     tra   r   r   r  rA  r   r   r   rx   r/  r  z&best_index_ returned is not an integerr   N)r   r)   rD   r   r   r  rj   )r  rh   r   r   s       r^    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    r^   refit_callable_out_boundz?test_refit_callable_out_bound.<locals>.refit_callable_out_bound  s     ra   r   r   r  rA  r   r   r   rx   r/  r  zbest_index_ index out of ranger   N)r   rD   r   r   r   rj   )r  r  r  rh   r   r   s   `     r^   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    r^   r  z8test_refit_callable_multi_metric.<locals>.refit_callable  s-      :----*+22444ra   r   r   r  rA  r/  )Accuracyr5  r   r   r  r  r   rn  N)r   r$   r!   r)   rD   rj   r1  r   )r  rh   r   r   r   s        r^    test_refit_callable_multi_metricr    s    
5 5 5 LLLDAq&~66LLG
r"""	nnn	  C GGAqMMM?asM*******ra   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 )Nrx   )r   r   r   rm   r   s    r^   check_Xz#test_gridsearch_nd.<locals>.check_X  s    wqrr{i''ra   c                 (    | j         dd          dk    S )Nrx   )r  r  rm   r  s    r^   check_yz#test_gridsearch_nd.<locals>.check_y  s    wqrr{g%%ra   rj   )r  r  methods_to_checkr\   r   r   )
rd   r   r   rK   r)   rj   r{   rh   r   r   )X_4dy_3dr  r  r   r   s         r^   test_gridsearch_ndr    s    9^$$,,RAq99D9[!!))"a44D( ( (& & &   C
 s[)))$<==KOOD$%%a+++;.......ra   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   rx   c                 ,    t          | t                    S rZ   r   r   r  s    r^   <lambda>z test_X_as_list.<locals>.<lambda>      *Q-- ra   rj   )r  r  r   r  r\   r   r   r   rd   r   r   r   rK   r-   r)   rj   ro  r{   r   rh   r   r   r   r   s        r^   test_X_as_listr    s    
	#r2&&A
!qA37"##A
--  C 
			Bs[)))$<DDDKOOAHHJJ""((A...;.......ra   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   rx   c                 ,    t          | t                    S rZ   r  r  s    r^   r  z test_y_as_list.<locals>.<lambda>$  r  ra   rj   )r  r  r   r  r\   r   r   r   r  r  s        r^   test_y_as_listr    s    
	#r2&&A
!qA37"##A
--  C 
			Bs[)))$<DDDKOOAqxxzz""((A...;.......ra   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   rx   c                 $    t          |           S rZ   r   )r   InputFeatureTypes    r^   check_dfz#test_pandas_input.<locals>.check_df>  s    a!1222ra   c                 $    t          |           S rZ   r  )r   
TargetTypes    r^   check_seriesz'test_pandas_input.<locals>.check_seriesA  s    a,,,ra   )r  r  r\   r   r   )rL   pandasr  r  appendImportErrorrd   r   r   r   rK   r)   rj   r{   rp   r   )typesr  r  rh   r   X_dfy_serr  r  r   r   r  r  s              @@r^   test_pandas_inputr  -  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  rx   )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)   dictrj   r  )rh   r   kmr   r)  r   s         r^   test_unsupervised_grid_searchr  L  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6ra   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)	estimatorrh   s     r^   custom_scoringz2test_gridsearch_no_predict.<locals>.custom_scoringk  s    (C//rrQ6ra   r   rx   r   )cluster_stdr   r   r  r  r  r  r  )r   r)   r:   r  rj   r  rn  )r  rh   _rU  s       r^   test_gridsearch_no_predictr  h  s    7 7 7 #AAAQRTUPV?WXXXDAq...111  F
 JJqMMM{+s2222######ra   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 )NrH  linearr   rx   )rI  r   r   )param_distributionsr   r   c                     g | ]}|S r   r   r   r   s     r^   r   z&test_param_sampler.<locals>.<listcomp>  s    """Qq"""ra   rI  )rH  r  r   )r   rx   r   r   r   r   r   r     	   r   r   c                     g | ]}|S r   r   r  s     r^   r   z&test_param_sampler.<locals>.<listcomp>      !Ara   c                     g | ]}|S r   r   r  s     r^   r   z&test_param_sampler.<locals>.<listcomp>      #7#7#7!A#7#7#7ra   c                     g | ]}|S r   r   r  s     r^   r   z&test_param_sampler.<locals>.<listcomp>  r  ra   c                     g | ]}|S r   r   r  s     r^   r   z&test_param_sampler.<locals>.<listcomp>  r  ra   )r   r1   rc   )r  samplersamplessamples       r^   test_param_samplerr  y  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7ra   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 rZ   r   rd   maMaskedArray)r   paramr  s     r^   r   z/check_cv_results_array_types.<locals>.<genexpr>  s7      XXEz*U+RU->??XXXXXXra   c                 6    i | ]}||         j         j        S r   )dtypekindr   r  r  s     r^   
<dictcomp>z0check_cv_results_array_types.<locals>.<dictcomp>  s2       ,/Z_"'  ra   c              3   b   K   | ])}t          |         t          j        j                  V  *d S rZ   r  r  s     r^   r   z/check_cv_results_array_types.<locals>.<genexpr>  s6      XXc:joru/@AAXXXXXXra   c              3   x   K   | ]4}|                     d           |         j        t          j        k    V  5dS )rankN)
startswithr  rd   float64r  s     r^   r   z/check_cv_results_array_types.<locals>.<genexpr>  sW        ~~f%%3+     ra   r{   zrank_test_%s)	r   allanymultimetric_scorer_r  r  rd   int32)rU  
param_keys
score_keysexpected_cv_results_kindsscorer_keysr  r  s         @r^   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ra   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 rZ   rm   )r   r  r  n_cands     r^   r   z(check_cv_results_keys.<locals>.<genexpr>  s1      UUcz#$	1UUUUUUra   )rT   r   r  r  )r  r  r  r  
extra_keysall_keyss   `  `  r^   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Ura   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  rA  r   rH  rx   r   r   rI  r   rJ  polyr   rI  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     r^   r   z.test_grid_search_cv_results.<locals>.<genexpr>  s?      RR1@Q;Q;QC
1"##;Q;Q;Q;QRRra   c              3   ^   K   | ]'}d |v|dk    t          |         dk              V  (dS )timer  rx   Nr-  r.  s     r^   r   z.test_grid_search_cv_results.<locals>.<genexpr>  sT        ??q$555 	JqMQ5555 ra   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     r^   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2ra   c                     g | ]O}d          |         dk    d         j         |          o&d         j         |          od         j         |         PS )r  rH  r  r  r  r5  r7  s     r^   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1ra   )r   r  r)   rC   rj   r   r  r  r  r   rc   )rh   r   n_grid_pointsr   r  r  n_candidatesrU  r	  poly_resultsrbf_resultsr  s              @r^   test_grid_search_cv_resultsr=    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      ra   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  rA     rH  r   )scaler   r  r  r   r   r  r  r  T)r   r   r  r+  r2  r   r3  c              3      K   | ]P}d          |         dk    d         j         |         o&d         j         |         od         j         |          V  QdS )r  r  r  r  r  Nr5  r7  s     r^   r   z0test_random_search_cv_results.<locals>.<genexpr>;  s         n%a(F22 y!&q) 7=).q17~.3A66 3222 ra   c              3      K   | ]Q}d          |         dk    d         j         |          o&d         j         |          od         j         |         V  RdS )r  rH  r  r  r  Nr5  r7  s     r^   r   z0test_random_search_cv_results.<locals>.<genexpr>D  s         n%a(E11 9%*1-- 3}-21553>*/2 2111 ra   )
r   r   r2   rC   rj   r   r  r  r  r   )
rh   r   n_search_iterr   r  r  r:  rU  r	  r  s
            @r^   test_random_search_cv_resultsrD  
  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     |$$             |$$         ra   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   rx   r   FP   )r   r   r  shuffler  r  r   T)r  r   r+  c                 <    g | ]}j         d |z           d         S )split%d_test_scorer   r   r   srU  s     r^   r   z+test_search_default_iid.<locals>.<listcomp>o  s<     	
 	
 	
 3a78;	
 	
 	
ra   r  r%  c                 <    g | ]}j         d |z           d         S )zsplit%d_train_scorer   rK  rL  s     r^   r   z+test_search_default_iid.<locals>.<listcomp>x  s<     	
 	
 	
 4q89!<	
 	
 	
ra   r  r&  r  gUUUUUU?r   )r   rd   r   rn   boolwhererC   rj   r   r   	n_splits_r   rQ   r   approxrZ  std)r   specialized_paramsrh   r   r6  r   common_paramstest_cv_scores	test_meantest_stdtrain_cv_scores
train_mean	train_stdrU  s                @r^   test_search_default_iidr\  O  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((((((((ra   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  rA  r   rH  rx   r   r   r  r  r   r  r   r3  r   r3  F)r   r   r   r)  )
r   r  r$   r!   r&   r)   rC   rj   r  *compare_cv_results_multimetric_with_single)rh   r   r  r   grid_searchesr   r   s          r^   'test_grid_search_cv_results_multimetricra    s   KKKDAqH "g(	
 	
 	
 	 q6		
 	
 	
F  M 00K<U<UVV 	* 	*
 #EEh67%
 
 
 	1[)))).>>>>ra   c                     t          ddd          \  } }d}d}t          t          j        ddd          t          j        d	d
dd                    }dD ]}g }dD ]t}|rd}t	          |t
                    rdn|}nd}t          |d          }	t          |	|||||d
          }
|
                    | |           |	                    |
           ut          |  t          |d
         |d         |           d S )Nr  r   r  rA  r   r?  rx   r   r   )base)r   rJ  TF)r^  r   r3  Tr   F)probabilityr   )r   r   r  r   r)  r   )r   r  rd   logspacer   r   rC   r2   rj   r  r_  )compare_refit_methods_when_refit_with_acc)rh   r   r  rC  r   r)  random_searchesr   rg  r   r,  s              r^   )test_random_search_cv_results_multimetricrk    sO   KKKDAqHM BKAq))RAC1P1P1PQQQF 
 
E 	2 	2G $"&0%&@&@K

e#+B???C.$$*  M a###""=11112ODD1A 2E	
 	
 	
 	
/
 
ra   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 searchr^  c                 B    i | ]\  }}t          j        d d|          |S )_score$	_accuracyrS  subr   r/  vs      r^   r  z>compare_cv_results_multimetric_with_single.<locals>.<dictcomp>  s9       15Ay+q))1  ra   c                 B    i | ]\  }}t          j        d d|          |S )rn  _recallrp  rr  s      r^   r  z>compare_cv_results_multimetric_with_single.<locals>.<dictcomp>  s,    WWW1	9a	(	(!WWWra   c              3   T   K   | ]"}t          j        |         d k              V  #dS )rx   N)rd   r  )r   r/  cv_results_multis     r^   r   z=compare_cv_results_multimetric_with_single.<locals>.<genexpr>  sL       	
 	
 F#A&!+,,	
 	
 	
 	
 	
 	
ra   )r)  r*  r'  r(  c                 D    i | ]\  }}|                     d           ||S _timeendswithrr  s      r^   r  z>compare_cv_results_multimetric_with_single.<locals>.<dictcomp>  s/    NNN$!Q!**W:M:MNANNNra   c                 D    i | ]\  }}|                     d           ||S ry  r{  rr  s      r^   r  z>compare_cv_results_multimetric_with_single.<locals>.<dictcomp>  s/    PPP$!QAJJw<O<OPAPPPra   N)r  rT   r   r  r   r   updater  rd   testingassert_equal)search_multi
search_acc
search_reccv_results_acc_recrw  s       @r^   r_  r_    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    ra   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  rA  )rp   r   r   )r1  rn  r  )r)  r   rR   r6  r{   )r  r  r)  rh   r   methodr  s          r^   ri  ri    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ra   	max_depthr   )r  r  r  r   c                    t          ddd          \  }}|                     ||           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  rA  r2  z"' has no attribute 'score_samples'z@'DecisionTreeClassifier' object has no attribute 'score_samples'r   )r   rj   	__class__r   r   r   r   score_samplesr   r7  r8  r9  )r  rh   r   r;  r<  r=  s         r^   "test_search_cv_score_samples_errorr    s    CCCDAq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   A;;A?A?T)noveltyn_neighborsr/  )r  r  r   )r  r   r   c           	         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  rB  r   r  r   ir   )lowhighsizeaxisrx   r   )rd   r  r  intr   concatenater   r   rj   rQ   r  r   )r  r   r  outliers_fraction
n_outliers	n_inliersrh   y_trues           r^   #test_search_cv_score_samples_methodr  )  s.   " )


#
#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    ra   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   )rx   gjt?MbP?T)r   r+  r   )r   r  r+  r  r   rx   r  r   r  )rx   rx   r   )	r   r)   rC   r2   rj   r   rR   rd   allclose)rh   r   r   r   r,  rU  r  s          r^   (test_search_cv_results_rank_tie_breakingr  Y  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ra   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 )Nrx   r   r   r   r   )r   r   r   r   rx   r   r   r   param_random_state)rI   rH   r-   r)   rj   rT   r   )rh   r   
estimatorsest_parametersr   estr   s          r^   !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ra   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   rx   r   r   r   )r   rx   rx   r   r   r   )r   r   r   )r'  r(  )r)  r*  rz   refit_time_)rD   r)   r2   rj   rd   r  r   r   r   r  float)svcrh   r   r#  rsrU  r  s          r^   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&&&&&' 'ra   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   )r`  r  r   )r   r   )r  r  c              3       K   | ]	}d |z  V  
dS )rJ  Nr   )r   cv_is     r^   r   z9test_grid_search_correct_score_results.<locals>.<genexpr>  sA       G
 G
,0 4'G
 G
 G
 G
 G
 G
ra   r  )r   c                 <    g | ]}j         d |z                    S rJ  rK  )r   rM  candidate_ir   s     r^   r   z:test_grid_search_correct_score_results.<locals>.<listcomp>  s<         +,@1,DEkR  ra   r`  r  )rD   r   r)   rj   r   r   r  r   r   r  rd   isinr3   rQ  	enumerater   r   splitr#   rp   r   r'   rR   )r  r   rh   r   r  r{   r  result_keysexpected_keysr   r   	cv_scoresr   traintestcorrect_scoredecr  r   s                    @@r^   &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ra   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 )Nr\   r   Tr   r0  r   )r)  r   r   )rX   r)   rj   rh   r   pickleloadsdumpsrS   rp   r2   )r   r   grid_search_pickledr,  random_search_pickleds        r^   test_pickler    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    ra   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  )rx   r   r   r   r   r   r   rJ  r   )r   r   r   )r   r-   rI   rH   r)   rj   r   r   rc   r   r  r  r{   rR   r2   )rh   r   r  r   r  r  r   
res_paramscand_ir   r  r  r  r,  s                 r^   &test_grid_search_with_multioutput_datar    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   			 ra   c                      t          j        d                              dd          } g d}t          d          }t	          |i d                              | |          }t          |d	          rJ d S )
Nrv  r   r   r   r   rx   rx   rx   F)rg  r   r   r   )rd   r   r   rC   r)   rj   r   rh   r   r   r#  s       r^   test_predict_proba_disabledr    sx    
	"a$$AA
%
 
 
 C	c2!	$	$	$	(	(A	.	.Br?+++++++ra   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 )Nrv  rH  r   r   r   r  imputerrZ  )strategymissing_values
classifierclassifier__foo_paramr   r   )
rd   r   r  r   nanr=   r   rX   r)   rj   )rh   r   r   s      r^   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Ira   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 rZ   r{  r}  s     r^   r_   zFailingClassifier.__init__4  r`   ra   c                 N    | j         t          j        k    rt          d          d S )Nz%Failing classifier failed as required)r|  r  FAILING_PARAMETERr   r  s      r^   rj   zFailingClassifier.fit7  s+    >.@@@DEEE A@ra   c                 @    t          j        |j        d                   S rl   r  rr   s     r^   rp   zFailingClassifier.predict;  r  ra   c                     dS )Nrz   r   rg   s      r^   r{   zFailingClassifier.score>  s    sra   rZ   r   )	r   r   r   r   r  r_   rj   rp   r{   r   ra   r^   r  r  /  so        66# # # #F F F F$ $ $     ra   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 )Nrv  r   r   rA  r|  r   rx   r   r   Frz   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  rK  )r   rM  r#  r   s     r^   r   zPtest_grid_search_failing_classifier.<locals>.get_cand_scores.<locals>.<listcomp>f  s+    VVVQR^0145a8VVVra   )rd   r   r   rQ  )r   r#  s   `r^   get_cand_scoresz<test_grid_search_failing_classifier.<locals>.get_cand_scoresd  s<    xVVVVV%BUBUVVV
 
 	
ra   c              3      K   | ]F}j         d          |         t          j        k    #t          j         |          dk              V  GdS )param_parameterrz   N)r   r  r  rd   r  r   r  r  r#  s     r^   r   z6test_grid_search_failing_classifier.<locals>.<genexpr>j  sp       	
 	
~/08 23 3 F??6**c1223 3 3 3	
 	
ra   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  rd   r  isnanr  s     r^   r   z6test_grid_search_failing_classifier.<locals>.<genexpr>  su        >+,V4./ / 	rx//0011/ / / / ra   r  r   rx   r   )r   r  r)   rS  compileDOTALLr   warnsr   rj   rc   r   r  r   r  r  r1  )rh   r   r   warning_messager:  ranksr  r#  s         @@r^   #test_grid_search_failing_classifierr  B  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 )Nrv  r   r   rA  r|  r   rz   r   zrAll the 15 fits failed.+15 fits failed with the following error.+ValueError.+Failing classifier failed as requiredr  r   r   r  r)   r  rS  r  r  r   r   r   rj   )rh   r   r   r#  r  s        r^   )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 )Nrv  r   r   rA  r|  r  r   Fr   r  )r   r  r)   r   r   r   rj   r  s       r^   )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   rx   )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     r^   r   z7test_parameters_sampler_replacement.<locals>.<listcomp>  s0    PPP1qvqvqv&>>PPPra   r   r  )
r1   r   r  UserWarningr   rc   r0   r   r   r
   )	r   r  r   	grid_sizeexpected_warningr  r  hashable_samplesparams_distributions	            r^   #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   rx   rx   rx   hinge)r  r   r  r   r   r   )	rd   r   r   r)   r    r   rj   r   r   )r   rh   r   r   s       r^   #test_stochastic_gradient_loss_paramr    s0    	J 		"a$$AA
W---*  C sO,,,,,GGAqMMMa!
 		J W---*  C sO,,,,,GGAqMMMsO,,,,,,,ra   c                      t          j        d                              dd          } g d}t          d          }t	          |dddgid	
          }|                    | |           d S )Nr   r   r  r   r   r   r   r	  r   )r   r   )rd   r   r   rD   r)   rj   r  s       r^   %test_search_train_scores_set_to_falser    sl    
	!Q##AA

#
#
#C	csS#J&7A	>	>	>BFF1aLLLLLra   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   r+  r  )r  rG  r   c                 :    dD ]}|                      |           | S )N)r'  r(  r)  r*  )pop)r  r  s     r^   _pop_time_keysz>test_grid_search_cv_splits_consistency.<locals>._pop_time_keys:  s0    
 	  	 C NN3ra   c                 D    i | ]\  }}|                     d           ||S ry  r{  rr  s      r^   r  z:test_grid_search_cv_splits_consistency.<locals>.<dictcomp>Q  s/    LLL$!Q

78K8KLALLLra   c                 D    i | ]\  }}|                     d           ||S ry  r{  rr  s      r^   r  z:test_grid_search_cv_splits_consistency.<locals>.<dictcomp>R  s/    MMM$!QG9L9LMAMMMra   )r   r   r	  r	  )r  rG  )r  r  r   c                 @    g | ]}j         d |fz                    S )zsplit%d_%s_scorerK  )r   rM  r#  param_i
score_types     r^   r   z:test_grid_search_cv_splits_consistency.<locals>.<listcomp>e  s?     ) ) ) 1Q
OCDWM) ) )ra   rx   r   r   )r   r)   rD   r8   rj   r-   r   r  r	   rd   r  r  r   r   r   rS   )r  r  rh   r   gs2gs3gs4r  per_param_scoresr#  r  r  s            @@@r^   &test_grid_search_cv_splits_consistencyr    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ra   c                     t                      } t          | dg didd          }|                    t          t                     |                    |                    t                              }t          t          |           d S )Nr\   r   r   r   r   )rX   r)   rj   rh   r   rv   rs   rT   )r   r   X_round_trips      r^   +test_transform_inverse_transform_round_tripr!  n  sw    


Cs[)))$<ANNNKOOAq001F1Fq1I1IJJLq,'''''ra   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 )Nrz  r3  z	Checking )r   )
r   r   r  r|  rd   
asanyarrayr  r  rT   rQ   )resultsgscvexp_resultsr/  s       r^   check_resultsz-test_custom_run_search.<locals>.check_resultsx  s    &gllnn%%)<)<<<<< 		Y 		YA::g&& Y]71:66
1:#(C//&#A
K!O     $KNGAJVWXXXX		Y 		Yra   c                 P    t          | d                                        S )NTr+  )r)   rj   )r   rh   r   r   s    r^   fit_gridz(test_custom_run_search.<locals>.fit_grid  s(    CEEEII!QOOOra   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 rZ   superr_   r]   r  kwargsr  s      r^   r_   z7test_custom_run_search.<locals>.CustomSearchCV.__init__  (    EGGY11&11111ra   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  rx   r   min_samples_splitr   r   r   )r]   evaluater%  r(  r+  s      r^   _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    ra   )r   r   r   r_   r7  __classcell__)r  r(  r+  s   @r^   CustomSearchCVr-    sW        	2 	2 	2 	2 	2	 	 	 	 	 	 	 	 	 	ra   r9  r   r   r   r   )r  n_informativer   Tr*  r  rx   r   r5  r   r   r   r  >   r  rf   r   r  r   zAttribute %s not equal)r6   rI   r   rj   r   dirislowerr6  )
r9  mycvr&  r%  attrrh   r(  r   r+  r   s
        @@@@@r^   test_custom_run_searchr?  w  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/ >== ra   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 rZ   r/  r1  s      r^   r_   zDtest__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.__init__  r3  ra   Nc                     | S rZ   r   )r]   rh   r   r  
fit_paramss        r^   rj   z?test__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.fit  s    Kra   r   )r   r   r   r_   rj   r8  r  s   @r^   NoRunSearchSearchCVrB    sL        	2 	2 	2 	2 	2	 	 	 	 	 	 	 	ra   rG  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 rZ   r/  r1  s      r^   r_   z<test__custom_fit_no_run_search.<locals>.BadSearchCV.__init__  r3  ra   )r   r   r   r_   r8  rF  s   @r^   BadSearchCVrI    s8        	2 	2 	2 	2 	2 	2 	2 	2 	2ra   rK  z_run_search not implemented.r   )r6   rC   rj   rh   r   r   r   NotImplementedError)rG  rK  s     r^   test__custom_fit_no_run_searchrM    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     r^   r   z0test_empty_cv_iterator_error.<locals>.<listcomp>  s    OOO1QOOOra   r   r'  r  r  r   r   r   n_jobszNNo fits were performed. Was the CV iterator empty\? Were there no candidates\?r   )
r-   r  rh   r2   r   r   r   r   rj   r   )r   
train_sizeridges      r^   test_empty_cv_iterator_errorrV    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 )Nrx   r   )r]   argskws      r^   get_n_splitsz;test_random_search_bad_cv.<locals>.BrokenKFold.get_n_splits  s    1ra   N)r   r   r   r]  r   ra   r^   BrokenKFoldrY    s#        	 	 	 	 	ra   r^  r   r  r   r'  rQ  r   rR  zXcv.split and cv.get_n_splits returned inconsistent results. Expected \d+ splits, got \d+r   )	r-   r2   r   r   r   r   rj   rh   r   )r^  r   rT  rU  s       r^   test_random_search_bad_cvr_    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"r+  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 rl   )n_countsr   s    r^   r_   zQtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorer.__init__  s    DMMMra   c                 Z    | xj         dz  c_         | j         dz  dk    rt          j        S dS )Nrx   r   r   )rd  rd   r  )r]   r  rh   r   s       r^   __call__zQtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorer.__call__  s0    MMQMM}q A%%v1ra   N)r   r   r   r   r_   rf  r   ra   r^   FailingScorerrb  
  s8        ??	 	 		 	 	 	 	ra   rg  r   )r   r   r+  r  r  zOne or more of the z scores are non-finiter  r  )r   rH   r   r  r  rj   rc   zipr9  messager   maxrd   r  rT   r  )r   rT  r+  rh   r   rg  r   warn_msgset_with_warningmsgdataset	last_ranknon_finite_masks                r^   1test_searchcv_raise_warning_with_non_finite_scorerq    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   rx   )rx   r   rx   rx   tnfpfntp)rp   r"   )r   rh   r   r[  cms        r^   custom_scorerzAtest_callable_multimetric_confusion_matrix.<locals>.custom_scorer1  sB    Qa((hbhbhbhOOOra   (   r   r  rA  r   r   r   rx   rx  r  rv  zmean_test_{}rt  )r   rD   r)   rj   formatr   rp   r"   r{   r   rR  )	r|  rh   r   r  rU  score_namesnamer[  r{  s	            r^   *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8ra   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)r3  r   )rp   r&   r!   r  rh   r   r[  s       r^   r|  zHtest_callable_multimetric_same_as_list_of_strings.<locals>.custom_scorerG  s:    Q"1f--&q&11
 
 	
ra   r}  r   r  rA  r   r   r   rx   r3  r  r   	r   rD   r)   rj   rn  r   rR  r1  r{   )r|  rh   r   r  search_callable
search_strs         r^   1test_callable_multimetric_same_as_list_of_stringsr  E  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Ora   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 rZ   )rp   r&   r  s       r^   r|  zHtest_callable_single_metric_same_as_single_string.<locals>.custom_scorera  s!    QAv&&&ra   r}  r   r  rA  r   r   r   rx   Tr  r3  r  )r|  rh   r   r  r  r  search_list_strs          r^   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Ora   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_namerx   r   r  rh   r   s      r^   
bad_scorerzBtest_callable_multimetric_error_on_invalid_key.<locals>.bad_scorer}  s    Ara   r}  r   r  rA  r   r   r   rx   	good_namer  z`For multi-metric scoring, the parameter refit must be set to a scorer key or a callable to refitr   )r   r)   rD   r   r   r   rj   )r  rh   r   r   rm  s        r^   .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 Nr4  rx   r   r  s      r^   r|  zBtest_callable_multimetric_error_failing_clf.<locals>.custom_scorer      qzra   rv  r   r   rA  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)rx   rx   r   )r   r  r)   rS  r  r  r   r  r   rj   rQ   r   )r|  rh   r   r   r#  r  s         r^   +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      r^   r|  zBtest_callable_multimetric_clf_all_fits_fail.<locals>.custom_scorer  r  ra   rv  r   r   rA  r|  r   Fr   r  z1ValueError: Failing classifier failed as requiredz5All the 15 fits failed.+your model is misconfigured.+r  r   r  )r|  rh   r   r   r#  individual_fit_error_messager   s          r^   +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   rB  max_iterr   rx   r   n_features_in_)r   r   r)   r2   r   rj   r  )rB  rh   r   gbdtr   r#  r  s          r^   test_n_features_inr    s     J*555DAq)++Dq!f%J	dJ	'	'B	D*Q	7	7	7Br+,,,,,r+,,,,,FF1aLLLFF1aLLL
****
******ra   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 rZ   )r0  __sklearn_tags__
input_tagsr  )r]   tagsr  r  s     r^   r  zdtest_search_cv_pairwise_property_delegated_to_base_estimator.<locals>.TestEstimator.__sklearn_tags__  s'    77++--D'/DO$Kra   )r   r   r   r  r8  )r  r  s   @r^   TestEstimatorr    s>        	 	 	 	 	 	 	 	 	 	ra   r  z.BaseSearchCV pairwise tag must match estimatorr  r   N)r   r)   r  r  r  )r  r  r  attr_messager   s   `    r^   <test_search_cv_pairwise_property_delegated_to_base_estimatorr    s              -//CCL	cMB40	1	1Br**,,7@@@@,@@@@@ra   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 rZ   r  )r]   r  s     r^   r_   zatest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise.__init__  s    $DMMMra   c                 j    t                                                      }| j        |j        _        |S rZ   )r0  r  r  r  )r]   r  r  s     r^   r  zitest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise.__sklearn_tags__  s)    77++--D'+}DO$Kra   )T)r   r   r   r_   r  r8  rF  s   @r^   EstimatorPairwiser    sL        	% 	% 	% 	%	 	 	 	 	 	 	 	 	ra   r  z4BaseSearchCV _pairwise property must match estimatorrf  r  r  r   N)r   r   r)   r  r  r  )r  r  r  _pairwise_settingr   s        r^   =test_search_cv__pairwise_property_delegated_to_base_estimatorr    s        M    


CIL*   1222#t455!4!4!6!6!A!JJJJ KJJJ	 ra   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   rk  )metricz2GridSearchCV not identical with precomputed metricN)r   r;   r)   rj   rp   r(   r  )r  r  rh   r   grid_paramsr   r   preds_originalX_precomputedpreds_precomputedr  s              r^   ;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DDDra   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 rZ   )r  )r]   r  s     r^   r_   z5test_scalar_fit_param.<locals>.TestEstimator.__init__5	  s    DFFFra   c                     || _         d S rZ   )r_)r]   rh   r   rs       r^   rj   z0test_scalar_fit_param.<locals>.TestEstimator.fit8	  s    DGGGra   c                 F    t          j        t          |                    S )Nrm   )rd   r   rc   rr   s     r^   rp   z4test_scalar_fit_param.<locals>.TestEstimator.predict;	  s    83q66++++ra   rZ   )r   r   r   r_   rj   rp   r   ra   r^   r  r  4	  sK        	 	 	 		 	 	 		, 	, 	, 	, 	,ra   r  r  r   )r  )r   r   r   rj   r   r  )r   param_searchr  modelrh   r   s         r^   test_scalar_fit_paramr  ,	  s    , , , , , , , , H]]__l33EB///DAq	IIabI #r))))))ra   r'  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 )N)sample_weightr   r   rx   )r0  rj   callabler   r   ndim)r]   rh   r   r  tuple_of_arraysscalar_paramcallable_paramr  s          r^   rj   z=test_scalar_fit_param_compat.<locals>._FitParamClassifier.fitW	  s     GGKK1MK:::!####N+++++ ou55555"1%*a////"1%*a////Kra   NNNN)r   r   r   rj   r8  rF  s   @r^   _FitParamClassifierr  V	  sK        
  	 	 	 	 	 	 	 	 	 	ra   r  c                      d S rZ   r   r   ra   r^   _fit_param_callablez9test_scalar_fit_param_compat.<locals>._fit_param_callablej	  s    ra   )r  r  r  )r5   r   r    rj   )
r   r  X_trainX_validrq  y_validr  r  r  rE  s
             r^   test_scalar_fit_param_compatr  D	  s     *:	"	-	-	-*<>* *&GWgw    m   (   H((**L99E $W-- J
 EIgw--*-----ra   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   rx   rv  transformer	predictorr   )transformer__parampredictor__paramar   r  )rd   r  r  randnr   r=   rO   rj   r  r  rp   r   rT   r{   r   rR  r!   rQ   rZ  r%   )	r   r  r   rh   r   r  r   rU  r[  s	            r^   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Gra   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   r+  z$score=\(train=[\d\.]+, test=[\d.]+\)zscore=[\d\.]+N)	r   rD   r)   rj   
readouterroutrS  findallrc   )capsysr+  rh   r   r   r   capturedr   s           r^   test_search_cv_verbose_3r  	  s     #TUVVVDAq

#
#
#C#<D-   
c!Qiii  ""&H 7
BHMM
+X66u::??????ra   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   rD   r   r=   rO   rj   r   named_steps)	r   r  rh   r   r   orig_Cr   param_grid_searchr#  s	            r^   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::::::ra   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)ru  rx   r   )l1l2)vect__ngram_range
vect__normvectr   r   r   r   rx   )r  r  r   r   rS  r   r   )oner  threefourfive)r   r   rx   r   rx   param_vect__ngram_rangerH  )r  r  ru  )r=   r   r9   r2   rj   r   rd   r   objectr  rT   r   )parameter_gridpipeliner,  
data_traindata_targetresultexpected_datas          r^   test_search_with_2d_arrayr  	  s    -" N _&&'LNN#	
 H '*  M 988J!//Kj+...&'@AFHQf---M///M!!!J!!&+}=====ra   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   r@  r   F)r   r)  diagram)displayz<pre>DummyClassifier()</pre>NTz<pre>LogisticRegression()</pre>)	r   r=   rB   r   r   r)   r   _repr_html_rj   )rh   r   r  r   r  	repr_htmls         r^   test_search_html_reprr  	  sq   B///DAq'>#3#34uo>O>O6PQRRH/++-?-A-ABCJ X*EJJJI			*	*	* ; ;))++	-:::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
 MM!Q			*	*	* ; ;))++	-:::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
 X*DIIIIMM!Q			*	*	* > >))++	-Y>>>>0I=====> > > > > > > > > > > > > > > > > >s6   B))B-0B-DD	D!E44E8;E8c                    t                      } | |dg didd          }|                    t          t                                        t                    }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          j
        d
          5  t          j        d           |                    |           d d d            n# 1 swxY w Y   t          j        t          d          5  |                    |           d d d            d S # 1 swxY w Y   d S )Nr\   r   r   r   r   z$Missing required positional argumentr   z$Cannot use both X and Xt. Use X only)rh   XtT)recorderrorzXt was renamed X in version 1.5)r  )rX   rj   rh   r   rs   r   r   r  rv   warningscatch_warningssimplefilterr  FutureWarning)r   r   rU  X2s       r^   %test_inverse_transform_Xt_deprecationr  
  su   


CXcK31EEEF	Aq			#	#A	&	&B	y(N	O	O	O # #  """# # # # # # # # # # # # # # # 
y(N	O	O	O . .  2" ---. . . . . . . . . . . . . . . 
	 	-	-	- % %g&&&  $$$% % % % % % % % % % % % % % % 
m+L	M	M	M ( (  B '''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (sH   5BBB<C  C$'C$ *D66D:=D:F  FF)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   rx   )registryscore_weightsscore_metadata)r  metadatar   )	my_scorerr   r   r  )r  r  r{   _score)objr  parentsplit_paramsr  r  N)r   rV   rd   r  r  randrD   rF   rE   set_score_requestr  rj   rc   rG   )r   r  rh   r   r  r   r  r  r  r  scorer_registryscorerr   _scorers                 r^   *test_multi_metric_search_forwards_metadatar(  $
  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'#	
 	
 	
 	
 	

 
ra   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   rx   r   r   zis only supported ifr   )r  N)r   rD   rj   r   r   r   r{   )r   r  rh   r   r  r  r#  s          r^   1test_score_rejects_params_with_no_routing_enabledr*  K
  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 rZ   )base_clf
parameter1
parameter2
parameter3
parameter4)r]   r/  r0  r1  r2  r3  s         r^   r_   zAtest_cv_results_dtype_issue_29074.<locals>.MetaEstimator.__init__h
  s+     %DM(DO(DO(DO(DOOOra   c                 <    | j                             ||           | S rZ   )r/  rj   r  s      r^   rj   z<test_cv_results_dtype_issue_29074.<locals>.MetaEstimator.fitv
  s    Ma###Kra   c                 8    | j                             ||          S rZ   )r/  r{   r  s      r^   r{   z>test_cv_results_dtype_issue_29074.<locals>.MetaEstimator.scorez
  s    =&&q!,,,ra   r  rZ   )r   r   r   r_   rj   r{   r   ra   r^   MetaEstimatorr-  g
  sY         	) 	) 	) 	)	 	 	 		- 	- 	- 	- 	-ra   r6  NoptionABrx   r   r  str1str2)r0  r1  r2  r3  r   r  r   r   param_)	r   r   r)   r   r   rj   r   r  r   )r6  r   r   rh   r   r  s         r^   !test_cv_results_dtype_issue_29074r=  d
  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ra   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  )rx   r   r   r   r   )r  r  r  r  r  )ry   gffffff@r(  g      @ry   )	numeric_1object_1targetrA  rx   r  encF)sparse_outputr@  passthrough)	remainderr   enc__encr   r   param_enc__encN)r   importorskipr  dropr   r?   r=   r   r@   r)   rj   r   r  r   )pddfrh   r   rB  r   r  r   s           r^   'test_search_with_estimators_issue_29157rL  
  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Dra   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   rB  s     r^   r   z4test_cv_results_multi_size_array.<locals>.<listcomp>
  s    999qJN999ra   )r   r     c                     g | ]:}t          j        d t           j        dz  |                              df          ;S )r   r   r   )rd   linspacepir   )r   n_knotsrB  s     r^   r   z4test_cv_results_multi_size_array.<locals>.<listcomp>
  sP        	Aruqy'**22B
3CDD  ra   splinetransformer__knotsr  param_splinetransformer__knotsN)	r   r>   rA   r   r)   rj   r   r  r   )rh   r   spline_reg_pipen_knots_list
knots_listspline_reg_pipe_cvrB  s         @r^    test_cv_results_multi_size_arrayr\  
  s    
 J"---DAq#
333 O
 :999L999L   #  J &!&

   1a   &'GHNRXXXXXXXra   zarray_namespace, device, dtypec                     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   rx   T)array_api_dispatchtol)r  r  g-C6?gh㈵>gư>gHz>r   r   r   )rP   rd   r   r   astypeasarrayr   r   r   rj   r{   )r   array_namespacer^  r  xprh   X_npX_xpy_npy_xpr   s              r^   #test_array_api_search_cv_classifierri  
  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)r6  r  r  )r   r   )candidate_paramsexpected	param_foozsimple numeric, single param)idr   r   	param_bar)r   r   r   )FFTr5  z1simple numeric, one param is missing in one roundrH  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 rZ   )r   r7   rh  r  rd   r  rT   r6  )rj  rk  r  r  r7  expected_keyexpected_values          r^   &test_yield_masked_array_for_each_paramrr  
  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ra   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     r^   r   z>test_yield_masked_array_no_runtime_warning.<locals>.<listcomp>7  s    :::!:::ra   r  r  )r   r  r  r  RuntimeWarningr   r7   )rj  s    r^   *test_yield_masked_array_no_runtime_warningrv  5  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  rS  r   r  collections.abcr   r   	functoolsr   ior   	itertoolsr   r   r  r	   numpyrd   r   scipy.statsr
   r   r   r   r   sklearn.baser   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.   r/   r0   r1   r2   r3   r4   r5   sklearn.model_selection._searchr6   r7   $sklearn.model_selection.tests.commonr8   sklearn.naive_bayesr9   sklearn.neighborsr:   r;   r<   sklearn.pipeliner=   r>   sklearn.preprocessingr?   r@   rA   rB   sklearn.svmrC   rD   %sklearn.tests.metadata_routing_commonrE   rF   rG   sklearn.treerH   rI   sklearn.utils._array_apirJ   sklearn.utils._mockingrK   rL   sklearn.utils._testingrM   rN   rO   rP   rQ   rR   rS   rT   sklearn.utils.fixesrU   sklearn.utils.validationrV   rX   r   r   rh   r   r   markparametrizer  r   r   r   r   r   r  r  r%  r*  r-  r>  rF  rO  rQ  rV  r^  ri  rt  rw  ry  filterwarningsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r=  rD  r\  ra  rk  r_  ri  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r?  rM  rV  r_  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r*  r=  rL  r\  ri  one_hot_encoderordinal_encoderr  r  r   r   ma_with_tuplesr  rr  rv  r   ra   r^   <module>r     s5      				 



  + + + + + + + +             $ $ $ $ $ $ $ $            1 1 1 1 1 1 1 1 1 1 " " " " " " F F F F F F F F F F " " " " " " - - - - - -         
 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 N N N N N N D D D 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	/ 	/ 	/( ( (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!
 !
 !
H# # #LF F F& ,,..!,q"g 6	
 	
 	
 	,,..K!R;Q	
 	
 	
 7 7 7 ((666!.B 8	
 	
 	

 	((666%2w/	
 	
 	
   B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 22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+ ; ; ;(> > >:> > >: l4F%GHH( ( IH(0 	|$	23  ---
 
 .- 
> 	|$	23	l+ 
# 
# 
#"*I *I *IZE E EB  > $&O&O&Q&Q  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ra   