
    Q3j                       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mZ dd	lmZ dd
lmZmZmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@ ddlAmBZBmCZCmDZDmEZEmFZFmGZGmHZH ddlImJZJ ddlKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZY ddlZm[Z[m\Z\ ddl]m^Z^ ddl_m`Z` ddlambZbmcZcmdZd ddlemfZfmgZg ddlhmiZimjZjmkZkmlZl dd lmmnZnmoZo dd!lpmqZqmrZrmsZs dd"ltmuZumvZv dd#lwmxZx dd$lymzZzm{Z{ dd%l|m}Z}m~Z~mZmZmZmZmZmZmZmZ dd&lmZ dd'lmZ dd(lmZ  G d) d*ee      Z G d+ d,eo      Z ej                  d-d-gd.d-gd/d/gd0d/gg      Z ej                  g d1      Zd2 Zej&                  j)                  d3eT e	eUd45      g      ej&                  j)                  d6ded7fd8dgidged9fd8died:fg      d;               Zd< Zd= Zd> Zej&                  j)                  d?eLeVg      d@        ZdA ZdB ZdC ZdD ZdE ZdF ZdG ZdH ZdI ZdJ Zej&                  j)                  dKe      dL        Zej&                  j)                  dKe      dM        ZdN ZdO Z G dP dQe      Zej&                  jU                  dR      dS        ZdT ZdU Zej&                  j)                  dVd-d0g      ej&                  j)                  dWeVeLg      dX               ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda ZddbZdc Zdd Zej&                  j)                  deeLdfdgd/d4giifeVdgd/d4gid0dhfg      di        Zdj Zdk Zdl Zdm Zej&                  j)                  dW eV eu       dndod4gip       eL eu       dndod4giq      g      dr        Zds Zej&                  j)                  dt eL e>       dgg duiq       eV e?       dvg dwip      g      dx        Zej&                  j)                  dW eV eddyz      d{dod4gid|}       eL eddyz      d{dod4gid|~      g      d        Zd Zd Zej&                  jU                  d      d        Zd Zd Zd Zd Zd Z G d de      Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej&                  j                  d        Zd Zej&                  j)                  dddyg      ej&                  j)                  deeLdfdng diifeVdng diddhfg      d               Zd Zd Zd Zd Zd Zd Zd Zej&                  j)                  ddydg      d        Zd Zd Zej&                  j)                  deLdddgifeVd ed/d      ifg      d        Zej&                  j)                  deLdvddgifeVdv edd      ifg      d        Zej&                  jU                  d      ej&                  j)                  d?eLeVg      ej&                  j)                  de~e}g      d                      Zej&                  j)                  ddydg      d        Zej&                  j)                  deLdffeVdfeOdffg      d        Zej&                  j                  d        Zd Zej&                  j)                  deLdffeVdfg       edy      d               Zej&                  j)                  deLdffeVdfeOdffg      d        Zd Zd Zd Zej&                  j)                  d ex             ej&                  j)                  d?eLeVg      d               Z ei       Z ej       Zej                  j                   ej                  d0      dye      Zded<   ded/<   ej&                  j)                  d ej                  d8d/id8d0igdej                  j                   ej                  d/d0g            fgdìī       ej                  d/ddŜd0ddŜd8digdej                  j                   ej                  g dƢ            fdej                  j                   ej                  g dȢ      g dɢʫ      fgdˬī       ej                  d8d/gd0gdggid8d/gd0ggigdej                  j                  d/gd0gdggd/gd0ggge̫      fgdͬī       ej                  d8did8digdefgdάī       ej                  d8eid8eigdej                  j                  eege̫      fgdϬī      g      dЄ        Zdф Zd҄ Zej&                  j)                  ddydg      ej&                  j)                  d ee"dի            e%dք                      Zej&                  j)                  ddydg      ej&                  j)                  d ee!d׫            e%d؄                      Ze%dل        Zej&                  j)                  d ee!d׫            e%dڄ               Z e%dۄ        Zy)zTest the search module    N)IterableSized)partial)StringIO)chainproduct)GeneratorType)	bernoulliexponrandintuniform)config_context)BaseEstimatorClassifierMixincloneis_classifier)MaxIterEstimatorNoCallbackEstimatorRecordingAutoPropagatedCallbackRecordingCallbackskip_callback_test_if_wasm)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HalvingRandomSearchCV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_allclose_dense_sparseassert_almost_equalassert_array_almost_equalassert_array_equalset_random_state)_enforce_estimator_tags_y)CSR_CONTAINERS)_num_samplesc                   R    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y)MockClassifierz8Dummy classifier to test the parameter search algorithmsc                     || _         y N	foo_param)selfrg   s     V/DATA/.local/lib/python3.12/site-packages/sklearn/model_selection/tests/test_search.py__init__zMockClassifier.__init__w   	    "    c                 l    t        |      t        |      k(  sJ t        j                  |      | _        | S re   )lennpuniqueclasses_rh   XYs      ri   fitzMockClassifier.fitz   s,    1vQ		!rl   c                      |j                   d   S Nr   shape)rh   Ts     ri   predictzMockClassifier.predict   s    wwqzrl   c                      || j                   z   S re   rf   rh   rs   s     ri   	transformzMockClassifier.transform       4>>!!rl   c                      || j                   z
  S re   rf   r}   s     ri   inverse_transformz MockClassifier.inverse_transform   r   rl   Nc                 0    | j                   dkD  rd}|S d}|S )N         ?        rf   )rh   rs   rt   scores       ri   r   zMockClassifier.score   s&    >>AE  Erl   c                     d| j                   iS Nrg   rf   )rh   deeps     ri   
get_paramszMockClassifier.get_params   s    T^^,,rl   c                     |d   | _         | S r   rf   )rh   paramss     ri   
set_paramszMockClassifier.set_params   s    ,rl   )r   NNF)__name__
__module____qualname____doc__rj   ru   r{   r~   r   predict_probapredict_log_probadecision_functionr   r   r    rl   ri   rc   rc   t   s@    B#
"" M-rl   rc   c                        e Zd ZdZed        Zy)LinearSVCNoScorez0A LinearSVC classifier that has no score method.c                     t         re   )AttributeErrorrh   s    ri   r   zLinearSVCNoScore.score   s    rl   N)r   r   r   r   propertyr   r   rl   ri   r   r      s    : rl   r   r      )r   r   r   r   c                 t    t        |       t        t        |             D cg c]  }| |   	 c}k(  sJ y c c}w re   )listrangern   )gridis     ri   assert_grid_iter_equals_getitemr      s5    :5T+;<+;a$q'+;<<<<<s   5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                 l    t        j                  ||      5   | |       d d d        y # 1 sw Y   y xY w)Nmatch)pytestraises)r   input
error_typeerror_messages       ri   test_validate_parameter_inputr      s%     
z	7e 
8	7	7s   	*3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        d	 |D              }|t        d
 t        |d   |d         D              k(  r;J  t        |       t        i       }t	        |      dk(  sJ t        |      i gk(  sJ t        |       t        j                  t              5  |d    d d d        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        |       y # 1 sw Y   TxY w)Nr   r   r      r      r   )hamspameggsr   bar   c           	   3   l   K   | ],  }t        t        t        |j                                       . y wre   )tupler   sorteditems).0ps     ri   	<genexpr>z&test_parameter_grid.<locals>.<genexpr>   s&     GAU56!'')#467s   24c              3   .   K   | ]  \  }}d |d|f  yw)r   r   Nr   )r   xys      ri   r   z&test_parameter_grid.<locals>.<genexpr>   s"      
-TTQUAua -Ts   r   r   Cr         ?)r8   
isinstancer   r   rn   r   r   setr   r   r   r   
IndexError)params1grid1params2grid2r   pointsempty	has_emptys           ri   test_parameter_gridr      s   i G'"EeX&&&eU###u:??#E*!f%<=G'"Eu:?? 1XGGG 
-4WU^WU^-T
 
 
 	
 
  $E* "Eu:??;2$#E*	z	"a 
# aW~rC#<@AIy>Q	?Qx#rBc
CCCC#I. 
#	"s   E22E;c                     t               } t        | dg didd      }t        j                  }t	               t        _        |j                  t        t               |t        _        |j                  j                  dk(  sJ t        |j                  d   j                  g d       |j                  t        t               |j                  t               |j                  t               |j!                  t               d|_        t%        j&                  t(              5  |j                  t        t               d d d        y # 1 sw Y   y xY w)Nrg   r   r   r   cvverboseparam_foo_paramsklearn)rc   r0   sysstdoutr   ru   rs   r   best_estimator_rg   r]   cv_results_datar   r   r   r~   scoringr   r   
ValueError)clfgrid_search
old_stdouts      ri   test_grid_searchr      s    

Cs[)$<ANKJCJOOAqCJ&&00A555{../@AFF	R aa !!!$! $K	z	"1 
#	"	"s   EEc                     t        dt               fg      } dt               t               gi}t        | |d      }|j	                  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 y )N	regressorr   r   param_regressorr   r   coef_)rE   r$   r&   r0   ru   rs   r   r   r   hasattrr   )pipe
param_gridr   regressor_resultss       ri   test_grid_search_pipeline_stepsr      s   k#3#5678D 0 2EG<=JtZA6KOOAq#//0AB'*,<==='*E222(+W555(+W555Q{'B'BBBBQ{'B'BBBBz+.q17;;;z+.q17;;;;rl   SearchCVc           	         t        j                  d      j                  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  |j                  ||t        j                  d             d d d        d}t        j                  t        |      5  |j                  ||t        j                  d      t        j                  d             d d d        |j                  ||t        j                  d      t        j                  d             y # 1 sw Y   xY w# 1 sw Y   QxY w)Nd   r   r      r   r   r   )expected_fit_paramsrg   r   r   raiser   error_scorez0Expected fit parameter\(s\) \['eggs'\] not seen.r   )r   z)Fit parameter spam has length 1; expected)r   r   )ro   arangereshapearrayrS   r   r   AssertionErrorru   oneszeros)r   rs   r   r   searchererr_msgs         ri   test_SearchCV_with_fit_paramsr    s   
		#r2&A
!qA37"#A
&&1A
BCk95!QH BG	~W	5Q, 
6 :G	~W	5Q
"> 
6LLABGGBKbhhrlL; 
6	5 
6	5s   (E<EEE#c                  
   t        d      } t        dd      \  }}g d}t        d      }t        | d|id      }|j	                  ||       t        |d|id      }|j	                  ||       |j
                  |j
                  k(  sJ |j                  ||      |j                  ||      k(  sJ t        |d|i      }t        j                  t        d	
      5  |j	                  dgg       d d d        y # 1 sw Y   y xY w)Nr   random_stater   r  centers皙?r   r   r   accuracyr   z
no scoringr   r   )
rL   r   r   r0   ru   best_params_r   r   r   	TypeError)r   rs   r   Csclf_no_scorer   grid_search_no_scores          ri   test_grid_search_no_scorer     s    

#C1a0DAq	B#3LsS"IzBKOOAq'sBiTQ"  ,,0H0HHHHQ"&:&@&@A&FFFF (sBi@	y	5  1#' 
6	5	5s   C99Dc                  4   t        dddd      \  } }t        d      }ddgi}t        ||d 	      j                  | |      }t        ||d
	      j                  | |      }t        t	               |d	      j                  | |      }t        ||d	      j                  | |      }|j                  | |      }|j                  | |      }	|j                  | |      }
|j                  | |      }|dk  sJ |	dk  sJ ||	k7  sJ t        |	|       t        ||
       y )Nr   r   皙?r   	n_samples	n_classesflip_yr  r  r   r  r
  r	  roc_aucr   )r   rL   r0   ru   r   r   r[   )rs   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               ri   test_grid_search_score_methodr   8  s.   #TUVDAq

#C#<D$S$=AA!QG"3jAEEaKO!-D)"	c!Qi  c4;??1EJ )..q!4$**1a0N399!Q?  A&I s??C&&&(89	#56rl   c                  N   t         j                  j                  d      } t        ddd      \  }}| j	                  ddd      }t        d      }ddgi}t               t        d      t        d	      t               g}d
}|D ]Z  }t        |||      }	t        j                  t        |      5  |	j                  ||       d d d        |	j                  |||       \ t               t!               g}
|
D ]"  }t        |||      }	|	j                  ||       $ y # 1 sw Y   [xY w)Nr      r   )r  r  r  r   r  r   r   n_splitsz*The 'groups' parameter should not be None.r   r   groups)ro   randomRandomStater   r   rL   r6   r7   r1   r2   r0   r   r   r   ru   r;   r<   )rngrs   r   r&  r   r   	group_cvs	error_msgr   gsnon_group_cvss              ri   test_grid_search_groupsr.  T  s    ))


"CqqIDAq[[Ar"F

#C!:D 	A	I =I#t+]]:Y7FF1aL 8
q!F#	  %&(>(@AM#t+
q!  87s   .DD$	c                  n   t        j                  d      j                  dd      } t        j                  dgdz  dgdz  z         }g d}t	        t        d      d|i      }|j                  | |       t        |j                  j                  |j                         t	        t               d	d
dgi      }|j                  | |       t        |d      rJ t	        t        d      d|i      }t        |d      rJ t	        t        d      d|id      }|j                  | |       t        |d      rJ y )Nr   r   r   r   r   r  r  r   alphar          @rq   Frefit)ro   r   r   r   r0   rL   ru   r]   r   rq   r&   r   )rs   r   r  r   s       ri   test_classes__propertyr4  s  s   
		#r2&A
!qA37"#A	Bya83)DKOOAq{22;;[=Q=QR uw3*(=>KOOAq{J/// ya83)DK{J/// ya83)5QKOOAq{J////rl   c                      t               } t        | ddgid      }|j                  t        t               t        |d      sJ t        | ddgidd      }|j                  t        t               t        |d      sJ y )Nrg   r   r   r   r   r   )r   r   )rc   r0   ru   rs   r   r   r:   )r   r   random_searchs      ri   test_trivial_cv_results_attrr7    st    

Cs[1#$61=KOOAq;...&s[1#,>qQOMa=-000rl   c            
         t               } d ddgfD ]  }t        | dg didd      }|j                  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        t        j                  j                  t              sJ |t        |j                  j                        v rJ   d}dD ]P  }t        j                  t        |      5  t        | i |ddd      j                  t        t               d d d        R y # 1 sw Y   xY w# 1 sw Y   ixY w)Nr	  	precisionrg   r   Fr   r3  r   r   best_index_r  )r{   r   r   r~   r   zhas no attribute ''z`refit=False`. z9 is available only after refitting on the best parametersr   zIFor multi-metric scoring, the parameter refit must be set to a scorer key)Trecallr	  )accprec)r3  r   )rc   r0   ru   rs   r   r   r   r   r   getattrr   value	__cause__strr   )	r   r   r   fn_name	outer_msg	inner_msg	exec_infor+  r3  s	            ri   test_no_refitrH    s`   

C:{34"3i(@RST1%67]3^4	
5
G -WIQ7I!' +3 3  ~Y?9-W-a0 @ ioo77HHHIOO$=$= >>>>!
 5> 	T  .]]:Y7Ruj+.Vc!Qi 87 . @? 87s   E!+E#E #E,	c                      t        ddd      \  } }t               }t        |dddgi      }t        j                  t
              5  |j                  | d d |       d d d        y # 1 sw Y   y xY w)	N   r   r   r  
n_featuresr  r   r  r      )r   rL   r0   r   r   r   ru   )X_y_r   r   s       ri   test_grid_search_errorrP    s\     33QOFB
+C	cC#s,	-B	z	"
r$3x 
#	"	"s   A$$A-c                      t        ddd      \  } }dgdgdgd}t        d	
      }t        ||      }|j                  | |       t        ddd      }|j                  | |       t	        |j
                  |j                  j
                         y )NrJ  r   r   rK  r   rbfr  )r   kernelgammaautorT  )r   rK   r0   ru   r]   
dual_coef_r   )rN  rO  
param_dictr   r   s        ri   test_grid_search_one_grid_pointrY    s~     33QOFBu3%@J
F
C	c:	&BFF2rN
E
-CGGBOs~~r'9'9'D'DErl   c                      t               } d }t        | dt        dd      id      }|j                  t        t
               |j                  j                  dk(  sJ y )Nrg   r   r   r   r   )rc   r0   r   ru   rs   r   r   rg   )r   r   s     ri   /test_grid_search_when_param_grid_includes_ranger[    sP    

CKs[%1+$>1EKOOAq&&00A555rl   c                     t        ddd      \  } }ddi}t        d      }t        j                  d	      }t	        ||      }t        j                  t        |
      5  |j                  | |       d d d        dg i}t               }t        j                  d      }t	        ||      }t        j                  t        |
      5  |j                  | |       d d d        ddi}t        d      }t        j                  d      }t	        ||      }t        j                  t        |
      5  |j                  | |       d d d        dt        j                  d      i}t               }t	        ||      }t        j                  t              5  |j                  | |       d d d        y # 1 sw Y   8xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r   rK  r   r   rU  rV  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   rK   reescaper0   r   r   r  ru   r   ro   r   )rs   r   rX  r   r+  searchs         ri   test_grid_search_bad_param_gridr`    s   JDAqqJ
F
C			@I
 #z*F	y		2

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

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

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

1a 
#	"5 
3	2 
4	3 
3	2 
#	"s0   F'F4*G G'F14F= G	Gcsr_containerc                 
   t        ddd      \  }}t               }t        |dddgi      }|j                  |d d |d d        |j	                  |dd        }|j
                  j                  } | |      }t               }t        |dddgi      }|j                  |d d j                         |d d        |j	                  |dd        }|j
                  j                  }t        j                  ||k(        d	k\  sJ ||k(  sJ y )
NrJ  r   r   rK  r   r  r   rM  g?)
r   rL   r0   ru   r{   r   r   tocooro   mean)	ra  rN  rO  r   r   y_predr   y_pred2C2s	            ri   test_grid_search_sparserh    s    !33QOFB
+C	cC#s,	-BFF2ds8RXZZ34!F
A	r	B
+C	cC#s,	-BFF2ds8>>RX&jjCD"G					B776W$%,,,7N7rl   c                    t        ddd      \  }}t               }t        |dddgid	      }|j                  |d d
 |d d
        |j	                  |d
d        }|j
                  j                  } | |      }t               }t        |dddgid	      }|j                  |d d
 |d d
        |j	                  |d
d        }|j
                  j                  }t        ||       ||k(  sJ d }	t        |	d      }
t        |dddgi|
	      }|j                  |d d
 |d d
        |j	                  |d
d        }|j
                  j                  }||k(  sJ t        ||       y )NrJ  r   r   rK  r   r  r   f1r
  rM  c                     t        | |       S re   )r*   )y_true_y_pred_s     ri   f1_lossz0test_grid_search_sparse_scoring.<locals>.f1_loss:  s    '***rl   F)greater_is_better)	r   rL   r0   ru   r{   r   r   r]   r+   )ra  rN  rO  r   r   re  r   rf  rg  rn  F1Lossy_pred3C3s                ri   test_grid_search_sparse_scoringrs  "  sk    33QOFB
+C	cC#s,d	;BFF2ds8RXZZ34!F
A	r	B
+C	cC#s,d	;BFF2ds8RXjjCD"G					Bvw'7N7+ E:F	cC#s,f	=BFF2ds8RXjjCD"G					B7N7vw'rl   c                  H   t        ddd      \  } }t        j                  | d d | d d j                        }|d d }t	        d      }t        |dd	d
gi      }|j                  ||       |j                  dk\  sJ t        j                  | dd  | d d j                        }|dd  }|j                  |      }t        j                  ||k(        dk\  sJ t        j                  t              5  |j                  |j                         |       d d d        y # 1 sw Y   y xY w)NrJ  r   r   rK  rM  precomputedrS  r   r  r   )r   ro   dotrz   rK   r0   ru   best_score_r{   rd  r   r   r   tolist)	rN  rO  K_trainy_trainr   r   K_testy_testre  s	            ri   #test_grid_search_precomputed_kernelr~  G  s    !33QOFB ffRXr$3xzz*G#hG
]
#C	cC#s,	-BFF7G>>Q VVBstHb#hjj)FXFZZF776V#$))) 
z	"
w~~) 
#	"	"s   .!DD!c                     t        j                  d      } t        j                  d      }t        d      }t	        |dddgi      }t        j                  t              5  |j                  | |       d d d        y # 1 sw Y   y xY w)N)r      )r   ru  rv  r   r  r   )	ro   r   r   rK   r0   r   r   r   ru   )rz  r{  r   r   s       ri   3test_grid_search_precomputed_kernel_error_nonsquarer  d  sd     hhx GggenG
]
#C	cC#s,	-B	z	"
w  
#	"	"s    A<<Bc                   $    e Zd ZdZddZd Zd Zy)BrokenClassifierz*Broken classifier that cannot be fit twiceNc                     || _         y re   	parameterrh   r  s     ri   rj   zBrokenClassifier.__init__r  rk   rl   c                 .    t        | d      rJ d| _        y )Nhas_been_fit_T)r   r  rh   rs   r   s      ri   ru   zBrokenClassifier.fitu  s    4111!rl   c                 F    t        j                  |j                  d         S rw   ro   r   ry   r}   s     ri   r{   zBrokenClassifier.predicty      xx
##rl   re   )r   r   r   r   rj   ru   r{   r   rl   ri   r  r  o  s    4#"$rl   r  z1ignore::sklearn.exceptions.UndefinedMetricWarningc                      t        j                  d      j                  dd      } t        j                  dgdz  dgdz  z         }t	        t               dddgigdd	      }|j                  | |       y )
Nr   r   r   r   r   r  r9  Tr   r3  )ro   r   r   r   r0   r  ru   )rs   r   r   s      ri   
test_refitr  }  so    
 			#r2&A
!qA37"#A
kAq623[PTC GGAqMrl   c                      d } t        ddd      \  }}t        t        d      dg did	| 
      }|j                  ||       |j                  dk(  sJ t        |d      rJ y)z^
    Test refit=callable, which adds flexibility in identifying the
    "best" estimator.
    c                    t        ddd      \  }}t        t        d      dg didd	
      }|j                  ||       |j                  dk7  sJ |j
                  j                         D ]  }|| v rJ  | d   j                         S )z
        A dummy function tests `refit=callable` interface.
        Return the index of a model that has the least
        `mean_test_score`.
        r   r   *   rK  r  r   {Gz?r  r   r9  Tr  r   mean_test_score)r   r0   rL   ru   r;  r   keysargmin)
cv_resultsrs   r   r   keys        ri   refit_callablez+test_refit_callable.<locals>.refit_callable  s     #SQRP12&.!	
 	1!### ??'')C*$$$ * +,3355rl   r   r   r  rK  r  r   r  r9  r  r   rx  N)r   r0   rL   ru   r;  r   )r  rs   r   r   s       ri   test_refit_callabler    so    62 LDAq
r"	n	C GGAqM??asM****rl   c                      d } t        ddd      \  }}t        t        d      ddd	gid
|       }t        j                  t
        d      5  |j                  ||       ddd       y# 1 sw Y   yxY w)zb
    Test implementation catches the errors when 'best_index_' returns an
    invalid result.
    c                      y)zT
        A dummy function tests when returned 'best_index_' is not integer.
        Nr   r  s    ri   refit_callable_invalid_typezEtest_refit_callable_invalid_type.<locals>.refit_callable_invalid_type  s     rl   r   r   r  rK  r  r   r  r   r9  r  z&best_index_ returned is not an integerr   N)r   r0   rL   r   r   r  ru   )r  rs   r   r   s       ri    test_refit_callable_invalid_typer    si     LDAq
r"	sAh)	C 
y(P	Q1 
R	Q	Q   A))A2out_bound_value	search_cvc                       fd}t        ddd      \  }} |t        d      ddd	gid
|      }t        j                  t        d      5  |j                  ||       ddd       y# 1 sw Y   yxY w)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    ri   refit_callable_out_boundz?test_refit_callable_out_bound.<locals>.refit_callable_out_bound  s     rl   r   r   r  rK  r  r   r  r   r9  r  zbest_index_ index out of ranger   N)r   rL   r   r   r   ru   )r  r  r  rs   r   r   s   `     ri   test_refit_callable_out_boundr    sj     LDAq
r"	sAh&	C 
z)I	J1 
K	J	Jr  c                      d } t        ddd      \  }}t        t              dd}t        t	        d      d	g d
i||       }|j                  ||       |j                  dk(  sJ t        |d      rJ y)zC
    Test refit=callable in multiple metric evaluation setting
    c                 4    d| v sJ | d   j                         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    ri   r  z8test_refit_callable_multi_metric.<locals>.refit_callable  s'      :---*+2244rl   r   r   r  rK  r9  )Accuracyr?  r  r   r  r  r   rx  N)r   r+   r(   r0   rL   ru   r;  r   )r  rs   r   r   r   s        ri    test_refit_callable_multi_metricr    s~    
5 LDAq&~6LG
r"	n	C GGAqM??asM****rl   c                  X   t        j                  d      j                  dddd      } t        j                  d      j                  ddd      }d	 }d
 }t        ||dg      }t	        |dg di      }|j                  | |      j                  t        t               t        |d      sJ y )N,  r   r   r   r   i        c                 &    | j                   dd  dk(  S )Nr   )r   r   r   rx   r   s    ri   check_Xz#test_gridsearch_nd.<locals>.check_X  s    wwqr{i''rl   c                 &    | j                   dd  dk(  S )Nr   )r  r  rx   r  s    ri   check_yz#test_gridsearch_nd.<locals>.check_y  s    wwqr{g%%rl   ru   )r  r  methods_to_checkrg   r   r   )
ro   r   r   rS   r0   ru   r   rs   r   r   )X_4dy_3dr  r  r   r   s         ri   test_gridsearch_ndr    s    99^$,,RAq9D99[!))"a4D(& C
 s[)$<=KOOD$%%a+;...rl   c                  d   t        j                  d      j                  dd      } t        j                  dgdz  dgdz  z         }t	        d dg      }t        d	
      }t        |dg di|      }|j                  | j                         |      j                  | |       t        |d      sJ y )Nr   r   r   r   r   c                 "    t        | t              S re   r   r   r  s    ri   <lambda>z test_X_as_list.<locals>.<lambda>"      *Q-rl   ru   )r  r  r   r#  rg   r   r   r   ro   r   r   r   rS   r5   r0   ru   ry  r   r   rs   r   r   r   r   s        ri   test_X_as_listr    s    
		#r2&A
!qA37"#A
-C 
	Bs[)$<DKOOAHHJ"((A.;...rl   c                  d   t        j                  d      j                  dd      } t        j                  dgdz  dgdz  z         }t	        d dg      }t        d	
      }t        |dg di|      }|j                  | |j                               j                  | |       t        |d      sJ y )Nr   r   r   r   r   c                 "    t        | t              S re   r  r  s    ri   r  z test_y_as_list.<locals>.<lambda>1  r  rl   ru   )r  r  r   r#  rg   r   r   r   r  r  s        ri   test_y_as_listr  +  s    
		#r2&A
!qA37"#A
-C 
	Bs[)$<DKOOAqxxz"((A.;...rl   c                     t         t         fg} 	 ddlm}m} | j	                  ||f       t        j                  d      j                  dd      }t        j                  dgdz  dgdz  z         }| D ]}  \   |       |      }}fd}fd}t        ||	      }	t        |	d
g di      }
|
j                  ||      j                  ||       |
j                  |       t        |
d      r}J  y # t
        $ r Y w xY w)Nr   )	DataFrameSeriesr   r   r   r   c                     t        |       S re   r   )r   InputFeatureTypes    ri   check_dfz#test_pandas_input.<locals>.check_dfK  s    a!122rl   c                     t        |       S re   r  )r   
TargetTypes    ri   check_seriesz'test_pandas_input.<locals>.check_seriesN  s    a,,rl   )r  r  rg   r   r   )rT   pandasr  r  appendImportErrorro   r   r   r   rS   r0   ru   r   r{   r   )typesr  r  rs   r   X_dfy_serr  r  r   r   r  r  s              @@ri   test_pandas_inputr  :  s    ]+,E,i() 			#r2&A
!qA37"#A(-$*&q):a=e	3	- !<H"3i(@Ae$**47D!{M222 ).  s   C4 4	D ?D c                     t        dd      \  } }t        ddd      }ddg}d	D ]C  }t        |t        g d
      ||      }|j	                  | |       |j
                  d   dk(  rCJ  t        |t        g d
      d      }|j	                  | |       |j
                  d   dk(  sJ t        |t        g d
            }|j	                  |        |j
                  d   dk(  sJ y )N2   r   r  r  r'  r   )r  initn_initadjusted_rand_scorefowlkes_mallows_score)r  r  )r   r   r   )
n_clusters)r   r   r3  r  r   r   r   )r   r   )r   r   r0   dictru   r  )rs   r   kmr   r3  r   s         ri   test_unsupervised_grid_searchr  Y  s    3DAq	QXa	8B %&=>GA"495we
 	1''5::: B 
ty1;RK OOAq##L1Q666 rdi.HIKOOA##L1Q666rl   c                      d } t        ddddgddgddgg      \  }}t        t               t        g d      |       }|j	                  |       |j
                  d	   dk(  sJ |j                  d
k(  sJ y )Nc                 (    | j                   dk(  rdS dS )Nr  r  r   	bandwidth)	estimatorrs   s     ri   custom_scoringz2test_gridsearch_no_predict.<locals>.custom_scoringx  s    ((C/r6Q6rl   r  r   r   )cluster_stdr  r  r  r  r  r  r  )r   r0   rB   r  ru   r  rx  )r  rs   _r_  s       ri   test_gridsearch_no_predictr  u  s    7 #AAAQRTUPV?WXDAq.1F
 JJqM{+s222###rl   c                     ddgt        dd      d} t        | dd      }|D cg c]  }| }}t        |      dk(  sJ |D ]  }|d   d	v sJ d|d
   cxk  rdk  rJ  J  d
g di} t        | dd      }|D cg c]  }| c}|D cg c]  }| c}k(  sJ d
t        dd      i} t        | dd      }|D cg c]  }| c}|D cg c]  }| c}k(  sJ y c c}w c c}w c c}w c c}w c c}w )NrR  linearr   r   )rS  r   r   )param_distributionsr   r  rS  )rR  r  r   )r   r   r   r   r   r   r   r     	   r   r   )r   r9   rn   )r  samplerr   samplessamples        ri   test_param_samplerr    s>   &+X%6WQ]K/G ""'Qq'G"w<2h#4444F3K$1$$$$$ 
  BC/G w!Aww#7w!Aw#77771./G w!Aww#7w!Aw#7777# #  #7  #7s   	C:	C		C#9	C(	C-c                    | j                   t        fd|D              sJ |D ci c]  }||   j                  j                   c}|k(  sJ t	        fd|D              rJ t        fd|D              sJ | j
                  r| j                  j                         ndg}|D ]'  }d|z     j                  t        j                  k(  r'J  y c c}w )Nc              3   l   K   | ]+  }t        |   t        j                  j                         - y wre   r   ro   maMaskedArray)r   paramr  s     ri   r   z/check_cv_results_array_types.<locals>.<genexpr>  s(     XZEz*U+RUU->->?Z   14c              3   l   K   | ]+  }t        |   t        j                  j                         - y wre   r  r   r  r  s     ri   r   z/check_cv_results_array_types.<locals>.<genexpr>  s'     XZc:joruu/@/@AZr  c              3      K   | ]5  }|j                  d       s"|   j                  t        j                  k(   7 yw)rankN)
startswithdtypero   float64r  s     ri   r   z/check_cv_results_array_types.<locals>.<genexpr>  s8      C~~f% 	3+s   ;>r   zrank_test_%s)
r   allr  kindanymultimetric_scorer_r  ro   int32)r_  
param_keys
score_keysexpected_cv_results_kindsr  scorer_keysr  s         @ri   check_cv_results_array_typesr    s     ##JXZXXXX3=3=CZ_""''':	"# # # XZXXXX     ,2+>+>&..%%'WIK.3./55AAA s   !Cc                      ||z   |z   }t        t         j                               t        |dz                t         fd||z   D              sJ y )N)r   c              3   D   K   | ]  }|   j                   fk(    y wre   rx   )r   r  r  n_cands     ri   r   z(check_cv_results_keys.<locals>.<genexpr>  s%     U=Tcz#$$	1=Ts    )r]   r   r  r  )r  r	  r
  r  
extra_keysall_keyss   `  `  ri   check_cv_results_keysr    sK    J&3Hvjoo/0&K9O2PQUZ*=TUUUUrl   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	                  | |       |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
                  t        |      D 	cg c]H  }	d   |	   dk(  r;d   j                  |	   xr' d   j                  |	   xr d   j                  |	    J }
}	t        |
      sJ t        |
      dk(  sJ t        |      D 	cg c]I  }	d   |	   dk(  r<d   j                  |	    xr' d   j                  |	    xr d   j                  |	   K }}	t        |      sJ t        |      dk(  sJ y c c}	w c c}	w )Nr  r   r  rK  r   rR  r   r   r  rS  r   rT  polyr   rS  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   L   K   | ]  }|d k7  s	t        |   dk\          yw)r   r   Nr  r   kr  s     ri   r   z.test_grid_search_cv_results.<locals>.<genexpr>  s(     RZ1@Q;QC
1"#Zs   
$$c              3   R   K   | ]  }d |vr|dk7  rt        |   dk           yw)timer   r   Nr/  r0  s     ri   r   z.test_grid_search_cv_results.<locals>.<genexpr>  s6      A?q$55 	JqMQs   $'r   fOr  r  r  r  )r   r  r0   rK   ru   r   r  r  r  r   maskrn   )rs   r   n_grid_pointsr   r	  r
  n_candidatesr_  r  r   poly_resultsrbf_resultsr  s               @ri   test_grid_search_cv_resultsr;    s}   KDAqM "g(	
 	 q6		
F  LJJ" !L#%A&TRF
JJq!##Jz+,1222RZRRR   	! !
J(A *j*lK##J |$ %An%a(F2 y!&&q) 7=)..q17~.33A667 %   ||!!! |$ %An%a(E1 9%**1-- 3}-221553>*//23 %   {{q   -s   AGAG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	                  | |       |j
                  	ddddd}t        ||||       t        	|||       t        	fdt        |      D              sJ t        	fdt        |      D              sJ y )Nr  r   r  rK     rR  r   )scaler  r  r  r   r   r  r  r  T)r   r   r  r-  r4  r   r5  c              3      K   | ]J  }d    |   dk(  r=d   j                   |   xr' d   j                   |   xr d   j                   |     L yw)r  r  r  r  r  Nr6  r   r   r  s     ri   r   z0test_random_search_cv_results.<locals>.<genexpr>H  sw       %An%a(F2 y!&&q) 7=)..q17~.33A667 %s   AAc              3      K   | ]K  }d    |   dk(  r>d   j                   |    xr' d   j                   |    xr d   j                   |    M yw)r  rR  r  r  r  Nr@  rA  s     ri   r   z0test_random_search_cv_results.<locals>.<genexpr>Q  sz       %An%a(E1 9%**1-- 3}-221553>*//23 %s   AA)
r   r   r:   rK   ru   r   r  r  r  r   )
rs   r   n_search_iterr   r	  r
  r8  r_  r  r  s
            @ri   test_random_search_cv_resultsrD    s   KDAqM 7R5s;KL81v.F LJJ" !L"F JJq!##J 	! !
J(A *j*lK  |$      |$   rl   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 ||}|j                  ||       t        j                  t        |j                        D cg c]  }|j                  d|z     d    c}      }	|j                  d   d   }
|j                  d   d   }t        j                  t        |j                        D cg c]  }|j                  d|z     d    c}      }|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 y c c}w c c}w )Nr   r   r  FP   )r  r  r  shuffler  r  r   T)r  r   r-  split%d_test_scorer  r'  zsplit%d_train_scorer  r(  r  gUUUUUU?r   )r   ro   r   ry   boolwhererK   ru   r   r   	n_splits_r   rY   r   approxrd  std)r   specialized_paramsrs   r   r6  r   common_paramsr_  stest_cv_scores	test_meantest_stdtrain_cv_scores
train_mean	train_stds                  ri   test_search_default_iidrX  \  s    Q!Q!Q!Q0DAq 771771:T*D%&D!q&	!	SqS	!"%&D!q&	!	SqS	!" $-4%	'B"%%rNM<<);<F
JJq!XX 6++,	
, 3a78;,	
N ""#45a8I!!"23A6Hhh 6++,	
, 4q89!<,	
O ##$67:J""#45a8Ii(+q000NQ	N3OaV,bggn&=>>>>v}}RVVN%;<<<< q))))a((((9	
	
s   *I I%c                  H   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 ]=  }t        t               |||d      }|j                  | |       |j                  |       ? t        |  y )Nr  r   r  rK  r   rR  r   r   r  r  r  r   r  r	  r=  r	  r=  F)r   r   r   r3  )
r   r  r+   r(   r-   r0   rK   ru   r  *compare_cv_results_multimetric_with_single)rs   r   r$  r   grid_searchesr   r   s          ri   'test_grid_search_cv_results_multimetricr]    s    KDAqH "g(	
 	 q6		
F  M 0K<UV
 #Eh67%
 	1[) />rl   c                  p   t        ddd      \  } }d}d}t        t        j                  ddd      	      }d
D ]{  }g }dD ]W  }|rt	        |t
              rd}t        d      }t        ||||||d      }	|	j                  | |       |j                  |	       Y t        |  t        |d   |d   |       } y )Nr  r   r  rK  r   r=  r   r   TF)rZ  r	  r=  r	  r  r   )r   r   r  r   r3  r  )r   r  ro   logspacer   r   r%   r:   ru   r  r[  )compare_refit_methods_when_refit_with_acc)
rs   r   r$  rC  r   r3  random_searchesr   r   r6  s
             ri   )test_random_search_cv_results_multimetricre    s    KDAqHMBKKAq)*FEGGU3"$"5C.$$*M a#""=1 F" 	3OD1A 2E	
) rl   c                    | j                   sJ t        t        | j                        d       | j                  |j                  j                         D ci c]  \  }}t        j                  dd|      | }}}|j                  |j                  j                         D ci c]  \  }}t        j                  dd|      | c}}       t        fddD              sJ t        j                  j                  j                         D ci c]  \  }}|j                  d      r|| c}}|j                         D ci c]  \  }}|j                  d      r|| c}}       yc c}}w c c}}w c c}}w c c}}w )	zCompare multi-metric cv_results with the ensemble of multiple
    single metric cv_results from single metric grid/random searchrZ  z_score$	_accuracy_recallc              3   T   K   | ]  }t        j                  |   d k         ! yw)r   N)ro   r  )r   r1  cv_results_multis     ri   r   z=compare_cv_results_multimetric_with_single.<locals>.<genexpr>  s1      	
 FF#A&!+,s   %()r+  r,  r)  r*  _timeN)r  r]   r   r  r   r   r]  subupdater  ro   testingassert_equalendswith)search_multi
search_acc
search_recr1  vcv_results_acc_recrj  s         @ri   r[  r[    sl    $$$$vl2235KL#//9C9O9O9U9U9W9WAy+q)1,9W   8B8N8N8T8T8VW8V1	9a	(!	+8VW 	
	

 
 
 JJ*002N2$!Q!**W:MA2N,224P4$!QAJJw<OA4P1 	X* 	OPs$   "E.%"E4
E:
+E:
F  F c           	         |j                   |k(  sJ |r| j                   dk(  sJ | j                   rJ yt        ddd      \  }}dD ].  }t         t        | |      |       t        ||      |             0 t        | j	                  ||      |j	                  ||             dD ]  }t        | |      t        ||      k(  rJ  y)	zDCompare refit multi-metric search methods with single metric methodsr	  Nr   r   r  rK  )r{   r   r   )r;  rx  r  )r3  r   r[   r@  r   )rq  rr  r3  rs   r   methodr  s          ri   rc  rc    s    u$$$!!Z///%%%%CDAqC)GL&)!,.Igj&.I!.L	
 D **1a0*2B2B1a2HI=|S)WZ-EEEE >rl   	max_depthr   )r  r  r  r   c                    t        ddd      \  }}t        |       } | j                  ||       d| j                  j                   d}d}t        j                  t        |      5 }| j                  |       d d d        t        j                  j                  t              sJ |t        |j                  j                        k(  sJ y # 1 sw Y   TxY w)	Nr   r   r  rK  r<  z"' has no attribute 'score_samples'z@'DecisionTreeClassifier' object has no attribute 'score_samples'r   )r   r   ru   	__class__r   r   r   r   score_samplesr   rA  rB  rC  )r  rs   r   rE  rF  rG  s         ri   "test_search_cv_score_samples_errorr}    s     CDAqi IMM!Q I''0011STIRI	~Y	79" 
8ioo//@@@IOO556666 
8	7s   &CCc                     d } t        |       }t        ddd      \  }}t        j                  |      }t	        t               dddgi      }|j                  | 	       t        j                  t        d
      5  |j                  |||       ddd       |j                  |	       t        j                  t        d
      5  |j                  |||       ddd       |j                  t        |d      d       t        j                  t        d      5  |j                  |||       ddd       y# 1 sw Y   xY w# 1 sw Y   lxY w# 1 sw Y   yxY w)zhChecks that fitting with sample_weight raises a warning if the scorer does not
    support sample_weightc                      y)z9Fake scoring function that does not support sample_weightr   r   )y_truere  s     ri   fake_score_funcz>test_unsupported_sample_weight_scorer.<locals>.fake_score_func7  s    rl   r   r   r  rK  r   r   ry  r
  zdoes not support sample_weightr   sample_weightNr	  )faker	  Fr  z2The scoring fake=.* does not support sample_weight)r+   r   ro   	ones_liker0   r%   r   r   warnsUserWarningru   r  )r  fake_scorerrs   r   swr  s         ri   %test_unsupported_sample_weight_scorerr  3  s/    o.KKDAq	aB'9';qRTgWI1	k)I	Ja"- 
K -	k)I	Ja"- 
K +
;5   
P
 	a"-
 
 
K	J 
K	J
 
s$   ;D9EE9EEEr  )r   r   r   r0  )r   r  r  c                 "   t        |       }t        |       }t        |d       t        |d       t        j                  j	                  d      }d}d}d}||z  }|j                  ||dz        }|j                  d||      }	|j                  dd	|      }
t        j                  t        j                  |      |      }|}|	}|}t        t               j                  ||
            }|j                  |       |j                  |
d      }|j                  |
      }|j                  |
      }t        t               j                  ||
            }|j                  |       t        ||      }t        ||      }|j                  ||d        |j                  |||
       |j                   D cg c]  }|j#                  d      s| }}|D ]3  }|j                   |   }|j                   |   }| d}t%        |||       5 dD ]-  }t'        ||      }t'        ||      }| d}t)        |||       / dD ]G  }t+        | |      s t'        ||      |      } t'        ||      |      }d| d}t-        |||       I y c c}w )Nr   r  r  r   r=  r   r   sizer   r%  r   )repeatsaxis)r  )r   r  r   z4 values are not equal for weighted/repeated datasetsr   )rx  r;  )r   r   r{   r~   zComparing the output of zn revealed that fitting with `sample_weight` is not equivalent to fitting with removed or repeated data points.)r   r^   ro   r'  r(  randr   tiler   r   r6   splitr   repeatr_   ru   r   rp  rY   r@  r[   r   rZ   )r  estimator_weightedestimator_repeatedr)  r  n_samples_per_groupn_groupsr  rs   r   r  r&  
X_weighted
y_weightedgroups_weightedsplits_weighted
X_repeated
y_repeatedgroups_repeatedsplits_repeatedr  r
  s1s2r   rw  s                             ri   (test_search_cv_sample_weight_equivalencer  S  s    y)y)'a8'a8
))


#CIH..IIM*AAyy1A	Q		*B WWRYYx(*=>FJJO+-33J3WXO!!_!5""2A"6J""2".J%,,R,8O+-33J3WXO!!_!5*+=zJJ*+=zJJ:4H:2F
 *555g9N5   ++C0++C0EMNB0	  .'-'-EMNBG4	 . Q9f%4+V4Q7B4+V4Q7B*6( 3+ + 
 )RA Qs   8JJT)noveltyn_neighborsr9  )r  r  r   )r  r   r   c           	         t        |       } t        j                  j                  d      }d}d}t	        ||z        }||z
  }t        |dddgddggdd      d   }t        j                  ||j                  dd	|df
      gd      }t        j                  dg|z        }d|| d  | j                  ||       t        | j                  |      | j                  j                  |             y )Nr  r  g333333?r   r   r   )r  rL  r  r  r  ir   )lowhighr  r  r   r   )r   ro   r'  r(  intr   concatenater   r   ru   rY   r|  r   )r  r)  r  outliers_fraction
n_outliers	n_inliersrs   r  s           ri   #test_search_cv_score_samples_methodr    s     i I
))


#CI&23JJ&I 	Q!Q 	 		A 	3;;2AZO;LMTUVA XXqcIo&FFJ;< MM!V "I$=$=$K$KA$Nrl   c                     t        dd      \  } }dg di}t        t               |d      }t        t               d|d	      }||fD ]  }|j	                  | |       |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        y )Nr  r  r  r   )r   gjt?MbP?T)r   r-  r   )r   r  r-  r  r   r   r  r   r   )r   r   r   )	r   r0   rK   r:   ru   r   r[   ro   allclose)rs   r   r   r   r6  r_  r  s          ri   (test_search_cv_results_rank_tie_breakingr    s7   4DAq ()JsuPTUK&aZDM .

1a''
 	()!,j9J.KA.N	
 	)*1-z:L/Ma/P	
 ;;()!,j9J.KA.N
 	
 
 ;;)*1-z:L/Ma/P
 	
 
 	F../@A9M' /rl   c                      dgdgdgdgdggg d}} t               t               f}ddd gi}t               }|D ];  }t        |||	      j	                  | |      }t        |j                  d
   dd g       = y )Nr   r   r   r   r   )r   r   r   r   r   r  r   r   param_random_state)rQ   rP   r5   r0   ru   r]   r   )rs   r   
estimatorsest_parametersr   estr   s          ri   !test_search_cv_results_none_paramr    s    C!qcA3$oqA')+A+CDJ$q$i0N	B"
 #a)	 	
 	;223GH1d)T rl   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 ]  }|j                  ||       dD ]P  }t	        j
                  |j                  |   dk\        sJ t	        j
                  |j                  |   dk        rPJ  dD ]W  }|j                  |   d   dk\  sJ |j                  |   d   dk(  sJ t	        j
                  |j                  |   dk        rWJ  t        |d      sJ t        |j                  t              sJ |j                  dk\  rJ  y )Nr   r  r   r   r   r   )r   r   r   r   r   r   )r   r   r   )r)  r*  )r+  r,  r   refit_time_)rL   r0   r:   ru   ro   r  r   r   r   r  float)svcrs   r   r,  rsr_  r  s          ri   test_search_cv_timingr    s   

#C 	
 	
 	
 	
	A 	A	cC!Q=QA	>B	C#1v1!A	NBr(

1a4C 66&,,S1Q677766&,,S1A5666	 5 9C%%c*1-222%%c*1-44466&,,S1A5666 9
 v}---&,,e444!!Q&&& rl   c            
         d} t        d      }t        dd      \  }}g d}dD ]  }t        |d|i|| 	      }|j                  ||      j                  }t        |j                               }d
t        d t        |       D              z   }	t        t        j                  |	|            sJ t        |       }
|j                  } t        |      D ]  \  }}|j                  |       t        j                   t        |       D cg c]  }|j                  d|z     |    c}      }t        |
j#                  ||            D ]~  \  }\  }}|j                  ||   ||          |dk(  r"t%        ||   |j'                  ||               }n(|dk(  r#|j)                  ||         }t+        ||   |      }t-        ||             y c c}w )Nr   r   r  r   r  r  )rj  r  r   )r   r   )r  r   c              3   &   K   | ]	  }d |z    yw)rI  Nr   )r   cv_is     ri   r   z9test_grid_search_correct_score_results.<locals>.<genexpr>4  s      G
4CD 4'Os   r#  r`  rI  rj  r  )rL   r   r0   ru   r   r   r  r   r   r  ro   isinr;   rL  	enumerater   r   r  r*   r{   r   r.   r[   )r$  r   rs   r   r  r   r   r  result_keysexpected_keysr   candidate_ir   rQ  	cv_scoresr   traintestcorrect_scoredecs                       ri   &test_grid_search_correct_score_resultsr  (  s   H

#C1a0DAq	B""3b	5XN __Q*66
 :??,-> G
49(OG
 B
 
 277=+6777h/(('mNKNNQN #8_,  ++,@1,DEkR,I %.bhhq!n$= =E4%!E(+D=$,QtWckk!D'6J$KMi'//$8C$1!D'3$?M#M9Q<@ %> , # s   G
c                  6   t               } t        | dg didd      }|j                  t        t               t        j                  t        j                  |            }t        |j                  t              |j                  t                     t        | dg diddd      }|j                  t        t               t        j                  t        j                  |            }t        |j                  t              |j                  t                     y )Nrg   r   Tr   r:  r   )r3  r   r   )rc   r0   ru   rs   r   pickleloadsdumpsr\   r{   r:   )r   r   grid_search_pickledr6  random_search_pickleds        ri   test_pickler  M  s    

Cs[)$<DQOKOOAq ,,v||K'@Ak11!46I6Q6QRS6TU&k9%T!M a"LLm)DEa "7"?"?"Brl   c            	         t        dd      \  } }dg di}t               }t        d      t        d      g}|D ]  }t	        |||      }|j                  | |       |j                  d   }t        t        |            D ]  } |j                  di ||    t        |j                  | |            D ]W  \  }	\  }
}|j                  | |
   ||
          |j                  | |   ||         }t        ||j                  d	|	z     |          Y   |D ]  }t        |||d
      }|j                  | |       |j                  d   }t        t        |            D ]  } |j                  di ||    t        |j                  | |            D ]W  \  }	\  }
}|j                  | |
   ||
          |j                  | |   ||         }t        ||j                  d	|	z     |          Y   y )NTr   )return_indicatorr  rx  )r   r   r   r   r  r   r   rI  r   )r   r   r   )r   r5   rQ   rP   r0   ru   r   r   rn   r   r  r  r   r[   r:   )rs   r   r  r   r  r  r   
res_paramscand_ir   r  r  r  r6  s                 ri   &test_grid_search_with_multioutput_datar  _  s    *4aPDAq!<0N	B 	1-A.J "32>1 ,,X6
C
O,FCNN0Z/0$-bhhq!n$= =E4%!E(+ #		!D'1T7 ;#!++,@1,DEfM %> -	   *32aP!Q"..x8
C
O,FCNN0Z/0$-bhhq!n$= =E4%!E(+ #		!D'1T7 ;#!!--.BQ.FGO %> -	 rl   c                      t        j                  d      j                  dd      } g d}t               }t	        |i d      j                  | |      }t        |d      rJ y )Nr  r   r   r   r   r   r   r   r   r   r   )ro   r   r   rK   r0   ru   r   rs   r   r   r,  s       ri   test_predict_proba_disabledr    sV    
		"a$AA
%C	c2!	$	(	(A	.Br?++++rl   c                  L   t        j                  dt         j                        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      j                  | |       y )Nr  rH  r   r   r   r  imputerrd  )strategymissing_values
classifierclassifier__foo_paramr   r   )
ro   r   r  r   nanrE   r#   rc   r0   ru   )rs   r   r   s      ri   test_grid_search_allows_nansr    s    
		"BJJ'//26AffAadGAvbffMN>+,	
	A ,i8Q?CCAqIrl   c                   2    e Zd ZdZdZddZddZd Zd	dZy)
FailingClassifierz,Classifier that raises a ValueError on fit()r   Nc                     || _         y re   r  r  s     ri   rj   zFailingClassifier.__init__  rk   rl   c                 T    | j                   t        j                  k(  rt        d      y )Nz%Failing classifier failed as required)r  r  FAILING_PARAMETERr   r  s      ri   ru   zFailingClassifier.fit  s'    >>.@@@DEE Arl   c                 F    t        j                  |j                  d         S rw   r  r}   s     ri   r{   zFailingClassifier.predict  r  rl   c                      y)Nr   r   rr   s      ri   r   zFailingClassifier.score  s    rl   re   r   )	r   r   r   r   r  rj   ru   r{   r   r   rl   ri   r  r    s     6#F$rl   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  j                  | |       d d d        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  j                  | |       d d d        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                  k7  sJ y # 1 sw Y   IxY w# 1 sw Y   xY w)Nr  r   r   rK  r  r   r   r   r	  Fr   r   r3  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                     t        j                  t        j                        D cg c]  }j                  d|z     |     c}      S c c}w )NrI  )ro   r   r   rL  r   )r   rQ  r,  s     ri   get_cand_scoresz<test_grid_search_failing_classifier.<locals>.get_cand_scores  sH    xxBGBUVBUQR^^0145a8BUV
 	
Vs   Ac              3      K   | ]E  }j                   d    |   t        j                  k(  r t        j                   |      dk(         G yw)param_parameterr   N)r   r  r  ro   r  r   r  r  r,  s     ri   r   z6test_grid_search_failing_classifier.<locals>.<genexpr>  sL      	
-~~/08 223 FF?6*c12-s   AA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   | ]U  }j                   d    |   t        j                  k(  r0t        j                  t        j
                   |                   W yw)r  N)r   r  r  ro   r  isnanr  s     ri   r   z6test_grid_search_failing_classifier.<locals>.<genexpr>  sP      )F>>+,V4../ 	rxx/01)s   AAr   r   r   r   )r   r  r0   r]  compileDOTALLr   r  r    ru   rn   r   r  r   r  r  r;  )rs   r   r   warning_messager8  ranksr  r,  s         @@ri   #test_grid_search_failing_classifierr    s    KDAq

C 

y	!"
B jj	 iiO 
&o	>
q! 
?r~~h/0L

 	
-	
   

y	!"%L
B jj	 iiO 
&o	>
q! 
?r~~h/0L L)    NN,-E 8q=U1X]**&&'1,,,>>S22222e 
?	>D 
?	>s   3G)GGG#c                  N   t        ddd      \  } }t               }t        |dt        j                  gdz  igd      }t	        j
                  d	t        j                  
      }t        j                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY w)Nr  r   r   rK  r  r   r   r   zrAll the 15 fits failed.+15 fits failed with the following error.+ValueError.+Failing classifier failed as requiredr  r   r   r  r0   r  r]  r  r  r   r   r   ru   )rs   r   r   r,  r  s        ri   )test_grid_search_classifier_all_fits_failr    s    KDAq

C	
);;<q@	AB
B jjH iiO 
z	9
q! 
:	9	9s   ?BB$c                      t        ddd      \  } }t               }t        |dg digddd	
      }t        j                  t
              5  |j                  | |       d d d        y # 1 sw Y   y xY w)Nr  r   r   rK  r  r  r	  Fr   r  )r   r  r0   r   r   r   ru   r  s       ri   )test_grid_search_failing_classifier_raiser    sh     KDAq

C 

y	!"
B 
z	"
q! 
#	"	"s   
A&&A/c                     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        t        | d
	      }t	        |      }t        |      d
k(  sJ t        |       D ]  }||v r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 cg c]  }d|d   |d   |d   fz   }}t        t        |            dk(  sJ t        d      g dd}	t        |	d	      }t	        |      }t        |      dk(  sJ y # 1 sw Y   xY wc c}w )Nr   r   )abc)firstsecondthirdtwovaluesr  r   r  z}The total space of parameters %d is smaller than n_iter=%d. Running %d iterations. For exhaustive searches, use GridSearchCV.r     r   c   r  )r   r  z	a%db%dc%dr  r  r  r   r  )
r9   r   r  r  r   rn   r8   r   r   r
   )
r   r  r   	grid_sizeexpected_warningr  r  r   hashable_samplesparams_distributions
             ri   #test_parameters_sampler_replacementr  3  s    a&O4	5(#$F va0GFI	14=vy3Q	R 
 
k)9	:W 
; va0G7mGw<1'    (t45::: 95959=FvbrBG7mGw<2HOP1qvqvqv&>>Ps#$%+++ %.cNoN21=G7mGw<1/ 
;	:  Qs   E+?E8+E5c                     ddgi} t        j                  d      j                  dd      }g d}t        t	        d      | d	
      }t        |d      rJ |j                  ||       |j                  |       |j                  |       ddgi} t        t	        d      | d	
      }t        |d      rJ |j                  ||       t        |d      rJ y )Nlosslog_loss   r   r   r   r   r   r   r   r   hinge)r  r   r  r   r   r   )	ro   r   r   r0   r'   r   ru   r   r   )r   rs   r   r   s       ri   #test_stochastic_gradient_loss_paramr  [  s     	J 			"a$AA
W-*C sO,,,GGAqMa!
 		J W-*C sO,,,GGAqMsO,,,,rl   c                      t        j                  d      j                  dd      } g d}t        d      }t	        |dddgid	
      }|j                  | |       y )Nr   r   r  r   r  r   r  r  r   )r   r   )ro   r   r   rL   r0   ru   r  s       ri   %test_search_train_scores_set_to_falser  {  sO    
		!Q#AA

#C	csS#J&7A	>BFF1aLrl   c            
         d} d}t        | d      \  }}t        t        d      dg dit        ||       d	
      }|j	                  ||       t        t        d      dg dit        |      d	
      }|j	                  ||       t        t        |d	d      j                  ||      t              sJ t        t        d      dg dit        |d	d      j                  ||      d	
      }|j	                  ||       t        t        d      dg dit        |d	d      d	
      }|j	                  ||       d }t        j                  j                   ||j                         ||j                               t        j                  j                  |j                  j                         D 	
ci c]  \  }	}
|	j                  d      r|	|
 c}
}	|j                  j                         D 	
ci c]  \  }	}
|	j                  d      r|	|
 c}
}	       t        t        d      dg dit        |d	      d	
      }|j	                  ||       dD ]i  }i }t        d      D ]3  }t        d      D cg c]  }|j                  d||fz     |    c}||<   5 t!        |d   |d          t!        |d   |d          k y c c}
}	w c c}
}	w c c}w )Nr   r   r   r  r  r   )r  r  g333333?)r$  r  T)r   r   r-  r#  )r$  rG  r  c                 6    dD ]  }| j                  |        | S )N)r)  r*  r+  r,  )pop)r  r  s     ri   _pop_time_keysz>test_grid_search_cv_splits_consistency.<locals>._pop_time_keys  s$    
C NN3
 rl   rk  )r  r  r  r  )r$  rG  )r  r  r   zsplit%d_%s_scorer   r   r   )r   r0   rL   r@   ru   r5   r   r  r	   ro   rn  ro  r   r   rp  r   r\   )r  r$  rs   r   r,  gs2gs3gs4r!  r1  rt  
score_typeper_param_scoresparam_irQ  s                  ri   &test_grid_search_cv_splits_consistencyr(    s   IHCDAq	q!)H	B	
B FF1aL
q!)(#	C GGAqM xA>DDQJ   q!)(DqAGG1M	C GGAqM
q!)(DqA	C GGAqM JJs')H JJ....0L0$!Q

78KA0L////1M1$!QG9LA1M 
q!-.(D1	
B FF1aL (
QxG q)!A 1Q
OCDWM!)W%   	""21"57G7JK!"21"57G7JK (# 	MM&)s   5K
K
4K
K
7Kc                      t               } t        | dg didd      }|j                  t        t               |j                  |j                  t                    }t        t        |       y )Nrg   r   r   r   r   )rc   r0   ru   rs   r   r   r~   r]   )r   r   X_round_trips      ri   +test_transform_inverse_transform_round_tripr+    sR    

Cs[)$<ANKOOAq001F1Fq1IJLq,'rl   c                    	 d 	fd G fddt               } t        d      t        ddd	      \  	 | d
      j                  	      } dddgidddgig      }|j                  } ||       t        |      D ]G  }|d   j                         s|dd  dk(  s |dvs%t        ||      t        ||      k(  r?J d|z          y )Nc                 h   |j                   }t        | j                               t        |      k(  sJ | D ]z  }|j                  d      rt	        j
                  | |         | |<   | |   j                  j                  dk(  rt        ||   | |   d|z          dt        ||   | |   d|z          | y )Nrk  r5  z	Checking r  )
r   r   r  rp  ro   
asanyarrayr  r  r]   rY   )resultsgscvexp_resultsr1  s       ri   check_resultsz-test_custom_run_search.<locals>.check_results  s    &&glln%)<<<<A::g&]]71:6
1:##((C/&#A
K!O $KNGAJVWX rl   c                 @    t        | d      j                        S )NTr-  )r0   ru   )r   rs   r   r   s    ri   fit_gridz(test_custom_run_search.<locals>.fit_grid  s    CEII!QOOrl   c                   ,     e Zd Z fdZfdZ xZS ).test_custom_run_search.<locals>.CustomSearchCVc                 &    t        |   |fi | y re   superrj   rh   r  kwargsr{  s      ri   rj   z7test_custom_run_search.<locals>.CustomSearchCV.__init__      GY1&1rl   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             y )Nrx  r   r   min_samples_splitr   r   r   )rh   evaluater/  r2  r5  s      ri   _run_searchz:test_custom_run_search.<locals>.CustomSearchCV._run_search  s{    a 0;2BCDG'8[1a&,A#BC!4a 8;NPR:STUG;A/2E2w1OPQrl   )r   r   r   rj   rA  __classcell__)r{  r2  r5  s   @ri   CustomSearchCVr7    s    	2	 	rl   rC  r   r  r   r   )r  n_informativer  Tr4  rx  r   r   r?  r   r   r   r  >   r  rq   r   r  r   zAttribute %s not equal)r>   rQ   r   ru   r   dirislowerr@  )
rC  mycvr0  r/  attrrs   r2  r   r5  r   s
        @@@@@ri   test_custom_run_searchrI    s    YP   Q
/CAANDAq#$7;;AqADkAq6*-@1b',JKLDG'4 D	GOORS	S  4&'$*== (4/= rl   c                  X    G d dt               }  | t                     j                  t        t                G d dt               }t        j                  t        d      5   |t               t        d      	      j                  t        t               d d d        y # 1 sw Y   y xY w)
Nc                   &     e Zd Z fdZddZ xZS );test__custom_fit_no_run_search.<locals>.NoRunSearchSearchCVc                 &    t        |   |fi | y re   r9  r;  s      ri   rj   zDtest__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.__init__'  r=  rl   c                     | S re   r   )rh   rs   r   r&  
fit_paramss        ri   ru   z?test__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.fit*  s    Krl   r   )r   r   r   rj   ru   rB  r{  s   @ri   NoRunSearchSearchCVrL  &  s    	2	rl   rQ  c                        e Zd Z fdZ xZS )3test__custom_fit_no_run_search.<locals>.BadSearchCVc                 &    t        |   |fi | y re   r9  r;  s      ri   rj   z<test__custom_fit_no_run_search.<locals>.BadSearchCV.__init__1  r=  rl   )r   r   r   rj   rB  rP  s   @ri   BadSearchCVrS  0  s    	2 	2rl   rU  z_run_search not implemented.r   r   r#  r   )	r>   rK   ru   rs   r   r   r   NotImplementedErrorr5   )rQ  rU  s     ri   test__custom_fit_no_run_searchrW  %  sp    l  ""1a(2l 2 
*2P	QCEeQ/044Q: 
R	Q	Qs   "5B  B)c                  F   t        d      j                  t              } | D cg c]  }| c} d}t        t	               dg di| d      }t        j                  t        d	      5  |j                  t        d | t        d |        d d d        y c c}w # 1 sw Y   y xY w)
Nr   r#  r   r0  r  r  r  r   r   n_jobszNNo fits were performed. Was the CV iterator empty\? Were there no candidates\?r   )
r5   r  rs   r:   r&   r   r   r   ru   r   )r   u
train_sizeridges       ri   test_empty_cv_iterator_errorr_  ;  s    
 
		 	 	#B O1QO Juw2D(E"UVWE 
*
 			!KZ.!KZ.1
 
 
 
s   	B(!BB c                      G d dt               }  | d      }d}t        t               dg di|d	      }t        j                  t
        d
      5  |j                  t        d | t        d |        d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy).test_random_search_bad_cv.<locals>.BrokenKFoldc                      y)Nr   r   )rh   argskws      ri   get_n_splitsz;test_random_search_bad_cv.<locals>.BrokenKFold.get_n_splits[  s    rl   N)r   r   r   rf  r   rl   ri   BrokenKFoldrb  Z  s    	rl   rg  r   r#  r   r0  rY  r   rZ  zVcv.split and cv.get_n_splits return inconsistent results. Expected \d+ splits, got \d+r   )	r5   r:   r&   r   r   r   ru   rs   r   )rg  r   r]  r^  s       ri   test_random_search_bad_cvrh  W  sz    e 
 
a	 BJuw2D(E"UVWE 

 			!KZ.!KZ.1
 
 
s   !A;;Br-  F)r   r   r   r  r   c                    t        dd      \  }} G d d      } | t               f |       d|d|}t        j                  t              5 }|j                  ||       d d d        |rdd	gndg}t              t        |      k(  sJ t        ||      D ]"  \  }	}
d
|
 dt        |	j                        v r"J  |j                  d   j                         }t        j                  |j                  d         }t        |j                  d   |   |       t        j                  |j                  d   |    |k        sJ y # 1 sw Y   xY w)Nr   r   )r  r  c                       e Zd ZdZd Zd Zy)Htest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorerz1Scorer that will fail for some split but not all.c                     d| _         y rw   )n_countsr   s    ri   rj   zQtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorer.__init__  s	    DMrl   c                 r    | xj                   dz  c_         | j                   dz  dk(  rt        j                  S y)Nr   r   r   )rm  ro   r  )rh   r  rs   r   s       ri   __call__zQtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorer.__call__  s-    MMQM}}q A%vvrl   N)r   r   r   r   rj   ro  r   rl   ri   FailingScorerrk    s    ?		rl   rp  r   )r   r   r-  r  r  zOne or more of the z scores are non-finiter   r  )r   rP   r   r  r  ru   rn   ziprC  messager   maxro   r  r]   r  )r   rO  r-  rs   r   rp  r   warn_msgset_with_warningmsgdataset	last_ranknon_finite_masks                ri   1test_searchcv_raise_warning_with_non_finite_scorerz  p  sS   $ ;DAq
 
  -	
 D 
k	"hA 
# -?(VHx=C 01111H&67W$WI-CDCKKHXXXX 8   !23779Ihht//0ABCOt''(9:?KYW66$""#456FG)STTT 
#	"s   EEc                  v   d } t        ddd      \  }}t        d      }t        |ddd	gi| d
      }|j                  ||       g d}|D ]!  }dj	                  |      |j
                  v r!J  |j                  |      }t        ||      }|j                  ||      t        j                  |d         k(  sJ y )Nc                 b    | j                  |      }t        ||      }|d   |d   |d   |d   dS )N)r   r   r   r   )r   r   r   r   tnfpfntp)r{   r)   )r   rs   r   re  cms        ri   custom_scorerzAtest_callable_multimetric_confusion_matrix.<locals>.custom_scorer  s:    Qa(hbhbhbhOOrl   (   r   r  rK  r  r   r  r   r  r  r  zmean_test_{}r}  )r   rL   r0   ru   formatr   r{   r)   r   r   rM  )	r  rs   r   r  r_  score_namesnamere  r  s	            ri   *test_callable_multimetric_confusion_matrixr    s    P
 KDAq

$C#c1XTRF
JJq!*K$$T*f.@.@@@@  ^^AF	!V	$B<<1r$x!8888rl   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                  ||       |j                  ||       |j                  t        j                  |j                        k(  sJ |j                  |j                  k(  sJ |j                  ||      t        j                  |j                  ||            k(  sJ y )Nc                 V    | j                  |      }t        ||      t        ||      dS )N)r=  r	  )r{   r-   r(   r  rs   r   re  s       ri   r  zHtest_callable_multimetric_same_as_list_of_strings.<locals>.custom_scorer  s-    Q"1f-&q&1
 	
rl   r  r   r  rK  r  r   r  r   r=  r  r	  	r   rL   r0   ru   rx  r   rM  r;  r   )r  rs   r   r  search_callable
search_strs         ri   1test_callable_multimetric_same_as_list_of_stringsr    s    
 KDAq

$C"cC8_m8O cC8_x&<HJ 1NN1a&&&--
8N8N*OOOO&&**@*@@@@  A&&--
8H8HA8N*OOOOrl   c                  0   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                  ||       |j                  ||       |j                  ||       |j                  t        j                  |j                        k(  sJ |j                  |j                  k(  sJ |j                  ||      t        j                  |j                  ||            k(  sJ |j                  t        j                  |j                        k(  sJ |j                  |j                  k(  sJ |j                  ||      t        j                  |j                  ||            k(  sJ y )Nc                 <    | j                  |      }t        ||      S re   )r{   r-   r  s       ri   r  zHtest_callable_single_metric_same_as_single_string.<locals>.custom_scorer  s    QAv&&rl   r  r   r  rK  r  r   r  r   Tr  r=  r  )r  rs   r   r  r  r  search_list_strs          ri   1test_callable_single_metric_same_as_single_stringr    s   ' KDAq

$C"cC8_m4O cC#q?HHUJ"cC8_xjO 1NN1a1&&&--
8N8N*OOOO&&**@*@@@@  A&&--
8H8HA8N*OOOO&&&--
8N8N*OOOO&&**@*@@@@  A&&--
8H8HA8N*OOOOrl   c                      d } t        ddd      \  }}t        t        d      ddd	gi| d
      }d}t        j                  t
        |      5  |j                  ||       d d d        y # 1 sw Y   y xY w)Nc                 
    ddiS )Nbad_namer   r   r  rs   r   s      ri   
bad_scorerzBtest_callable_multimetric_error_on_invalid_key.<locals>.bad_scorer  s    Arl   r  r   r  rK  r  r   r  r   	good_namer  z`For multi-metric scoring, the parameter refit must be set to a scorer key or a callable to refitr   )r   r0   rL   r   r   r   ru   )r  rs   r   r   rv  s        ri   .test_callable_multimetric_error_on_invalid_keyr    sq     KDAq
r"	sAh	C	,  
z	-1 
.	-	-s   A++A4c                  n   d } t        ddd      \  }}t               }t        |dg dig| dd	
      }t        j                  dt        j
                        }t        j                  t        |      5  |j                  ||       d d d        t        |j                  d   g d       y # 1 sw Y   %xY w)Nc                 
    ddiS Nr>  r   r   r  s      ri   r  zBtest_callable_multimetric_error_failing_clf.<locals>.custom_scorer	      qzrl   r  r   r   rK  r  r  Fr  r  zm5 fits failed.+total of 15.+The score on these train-test partitions for these parameters will be set to 0\.1r  r   mean_test_acc)r   r   r  )r   r  r0   r]  r  r  r   r  r    ru   rY   r   )r  rs   r   r   r,  r  s         ri   +test_callable_multimetric_error_failing_clfr  
	  s     KDAq

C	
y	!"
B jj	KiiO
 
&o	>
q! 
? BNN?3[A 
?	>s   4B++B4c                  b   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  |j                  ||       d d d        y # 1 sw Y   y xY w)Nc                 
    ddiS r  r   r  s      ri   r  zBtest_callable_multimetric_clf_all_fits_fail.<locals>.custom_scorer(	  r  rl   r  r   r   rK  r  r   Fr  r  z1ValueError: Failing classifier failed as requiredz5All the 15 fits failed.+your model is misconfigured.+r  r   r   )r  rs   r   r   r,  individual_fit_error_messager   s          ri   +test_callable_multimetric_clf_all_fits_failr  &	  s     KDAq

C	
);;<q@	AB
B $W JJC+,. iiM 
z	7
q! 
8	7	7s   	B%%B.c                  >   d} t        |       \  }}t               }dddgi}t        ||      }t        ||d      }t	        |d      rJ t	        |d      rJ |j                  ||       |j                  ||       |j                  | k(  sJ |j                  | k(  sJ y )Nr   rL  max_iterr   r   r   n_features_in_)r   r   r0   r:   r   ru   r  )rL  rs   r   gbdtr   r,  r  s          ri   test_n_features_inr  D	  s     J*5DAq)+Dq!f%J	dJ	'B	D*Q	7Br+,,,r+,,,FF1aLFF1aL
***
***rl   pairwisec                       G  fddt               } |       }d}t        |ddgi      } |j                         j                  j                  k(  sJ |       y)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                 F    t         |          }|j                  _        |S re   )r:  __sklearn_tags__
input_tagsr  )rh   tagsr{  r  s     ri   r  zdtest_search_cv_pairwise_property_delegated_to_base_estimator.<locals>.TestEstimator.__sklearn_tags__`	  s!    7+-D'/DOO$Krl   )r   r   r   r  rB  )r{  r  s   @ri   TestEstimatorr  _	  s    	 	rl   r  z.BaseSearchCV pairwise tag must match estimatorr  r   N)r   r0   r  r  r  )r  r  r  attr_messager   s   `    ri   <test_search_cv_pairwise_property_delegated_to_base_estimatorr  U	  sX      /CCL	cMB40	1Br**,77@@@N,N@rl   c                       G d dt               }  |        }d}dD ]Q  }|j                  |       t        |ddgi      }||j                         j                  j
                  k(  rLJ |        y)	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>.EstimatorPairwisec                     || _         y re   r  )rh   r  s     ri   rj   zatest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise.__init__u	  s	    $DMrl   c                 Z    t         |          }| j                  |j                  _        |S re   )r:  r  r  r  )rh   r  r{  s     ri   r  zitest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise.__sklearn_tags__x	  s%    7+-D'+}}DOO$Krl   )T)r   r   r   rj   r  rB  rP  s   @ri   EstimatorPairwiser  t	  s    	%	 	rl   r  z4BaseSearchCV _pairwise property must match estimatorra  r  r  r   N)r   r   r0   r  r  r  )r  r  r  _pairwise_settingr   s        ri   =test_search_cv__pairwise_property_delegated_to_base_estimatorr  k	  sw    M  
CIL* 12#t45 B$7$7$9$D$D$M$MM 	
	
M +rl   c                  t   d} d}t        | d      \  }}ddgi}t               }t        |||      }|j                  ||       |j	                  |      }t        |      }t        d	      }t        |||      }|j                  ||       |j	                  |      }	d
}
||	k(  j                         sJ |
       y)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   ru  )metricz2GridSearchCV not identical with precomputed metricN)r   rC   r0   ru   r{   r/   r  )r  r$  rs   r   grid_paramsr   r   preds_originalX_precomputedpreds_precomputedr  s              ri   ;test_search_cv_pairwise_property_equivalence_of_precomputedr  	  s     IHCDAq 2$'K 
 C	c;8	4BFF1aLZZ]N (*M
m
4C	c;8	4BFF=!

=1GL//446DD6rl   zSearchCV, param_searchr  r  r  r   c                      G d dt         t              } |  |       |      }t        d      \  }}|j                  ||d       |j                  j
                  dk(  sJ y )Nc                   "    e Zd ZddZddZd Zy),test_scalar_fit_param.<locals>.TestEstimatorNc                     || _         y re   )r  )rh   r  s     ri   rj   z5test_scalar_fit_param.<locals>.TestEstimator.__init__	  s	    DFrl   c                     || _         y re   )r_)rh   rs   r   rs       ri   ru   z0test_scalar_fit_param.<locals>.TestEstimator.fit	  s	    DGrl   c                 @    t        j                  t        |            S )Nrx   )ro   r   rn   r}   s     ri   r{   z4test_scalar_fit_param.<locals>.TestEstimator.predict	  s    883q6++rl   re   r   r   r   rj   ru   r{   r   rl   ri   r  r  	  s    			,rl   r  r  r  )r  )r   r   r   ru   r   r  )r   param_searchr  modelrs   r   s         ri   test_scalar_fit_paramr  	  sZ    , , ]_l3EB/DAq	IIabI  ##r)))rl   c                     t        t        d      ddi\  }}}} G d dt              }d } |  |       |      }||f|dd}	 |j                  ||fi |	 y )Nr  r  r  c                   (     e Zd Z	 	 	 	 d fd	Z xZS )9test_scalar_fit_param_compat.<locals>._FitParamClassifierc                     t         |   |||       |dkD  sJ t        |      sJ t        |t              sJ |d   j
                  dk(  sJ |d   j
                  dk(  sJ | S )Nr  r   r   r   )r:  ru   callabler   r   ndim)rh   rs   r   r  tuple_of_arraysscalar_paramcallable_paramr{  s          ri   ru   z=test_scalar_fit_param_compat.<locals>._FitParamClassifier.fit	  s|     GK1MK:!###N+++ ou555"1%**a///"1%**a///Krl   NNNN)r   r   r   ru   rB  rP  s   @ri   _FitParamClassifierr  	  s    
  	 	rl   r  c                       y re   r   r   rl   ri   _fit_param_callablez9test_scalar_fit_param_compat.<locals>._fit_param_callable	  s    rl   )r  r  r  )r=   r   r'   ru   )
r   r  X_trainX_validr{  y_validr  r  r  rO  s
             ri   test_scalar_fit_param_compatr  	  sx     *:	"	-*<>*&GWgwm ( (*L9E $W--J
 EIIgw-*-rl   z)ignore:The total space of parameters 4 is	Predictorc                    t         j                  j                  d      }|j                  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                  ||       |j                  j                         |j                         k(  sJ |j                  |      }t        |      rAt        |d       |j                  ||      t        j                  t!        ||            k(  sJ y t#        ||j%                                |j                  ||      t        j                  t'        ||            k(  sJ y )Nr      r   r   r   r  transformer	predictorr   )transformer__parampredictor__paramar   r  )ro   r'  r(  randnr   rE   rW   ru   r  r  r{   r   r]   r   r   rM  r(   rY   rd  r,   )	r   r  r)  rs   r   r  r   r_  re  s	            ri   1test_search_cv_using_minimal_compatible_estimatorr  	  sB    ))


"C99RRXXqcAgb&89qA
+-	.ik0JKE
  !"gWF eV9F
JJq!##%666^^AFV61%||Aq!V]]>!V3L%MMMM)||Aq!V]]8Av3F%GGGGrl   c                 >   t        dddd      \  }}t        d      }ddgi}t        ||d	d
d
|      j                  ||       | j	                         j
                  }|rt        j                  d|      }nt        j                  d|      }t        |      d
k(  sJ y)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   rL   r0   ru   
readouterroutr]  findallrn   )capsysr-  rs   r   r   r   capturedr   s           ri   test_search_cv_verbose_3r  
  s     #TUVDAq

#C#<D- 
c!Qi  "&&H

BHM

+X6u:??rl   r  c                 R   t        d      \  }}t               gdgd}|d   d   j                  }t        dt	               fdg      }||i} | |fd	d
dd|j                  ||      }|d   d   j                  |k(  sJ |j                  j                  d   j                  dk(  sJ y )Nr  r  r  )r   clf__Cr   r   trs)r   NTr   r	  r3  r   r   )r   rL   r   rE   rW   ru   r   named_steps)	r   r  rs   r   r   orig_Cr   param_grid_searchr,  s	            ri   test_search_estimator_paramr  /
  s     B/DAqk]tf5FE]1Fe/12MBCD%v.	$	Rdq*	R@Q	R	V	V	1
B
 %='''))%022d:::rl   c            	      ^   ddd} t        dt               fdt               fg      }t        || dddd	d
      }g d}g d}|j	                  ||       |j
                  d   }t        j                  dt              }g d|d d  t        j                  j                  |j                  |       y )N)r~  r   r   )l1l2)vect__ngram_range
vect__normvectr   r   r   r   r   )r  r  r   r  r[  r   r   )oner  threefourfive)r   r   r   r   r   param_vect__ngram_rangerH  )r  r  r~  )rE   r"   rA   r:   ru   r   ro   r   objectrn  r]   r   )parameter_gridpipeliner6  
data_traindata_targetresultexpected_datas          ri   test_search_with_2d_arrayr  M
  s     ."N _&'LN#	
H '*M 9J!Kj+.&&'@AFHHQf-M/M!JJ!!&++}=rl   c                  l   t        d      \  } }t        dt               fdt               fg      }dt               t	               gi}t        ||d      }t        d      5  |j                         }d	|v sJ 	 d
d
d
       |j                  | |       t        d      5  |j                         }d	|v sJ 	 d
d
d
       t        ||d      }|j                  | |       t        d      5  |j                         }d	|vsJ d|v sJ 	 d
d
d
       y
# 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   y
xY w)z5Test different HTML representations for GridSearchCV.r  r  r>  r   F)r   r3  diagram)displayz<div>DummyClassifier</div>NTz<div>LogisticRegression</div>)	r   rE   rJ   r   r%   r0   r   _repr_html_ru   )rs   r   r  r   r  	repr_htmls         ri   test_search_html_reprr  k
  s*   B/DAq'>#34uo>O6PQRH/+-?-ABCJ X*EJI			*))+	+y888 
+
 MM!Q			*))+	+y888 
+
 X*DIIMM!Q			*))+	+9<<<.);;; 
+	* 
+	* 
+	* 
+	*s$   !DD+D*DD'*D3)enable_metadata_routingc           	         t        d      \  }}t        |      }t        j                  j	                  d      }|j                  |      }|j                  |      }t               }|ddgii}	t               }
t        |
      j                  dd	      }t        |d
      } | |fd
d|d|	j                  ||||       t        |
      sJ |
D ]  }t        |ddd	||        y)zMTest that *SearchCV forwards metadata correctly when passed multiple metrics.r  r  r   r   r   )registryscore_weightsscore_metadata)r  metadatar	  )	my_scorerr	  r   r  )r  r  r   _score)objrw  parentsplit_paramsr  r  N)r   ra   ro   r'  r(  r  rL   rN   rM   set_score_requestr  ru   rn   rO   )r   r  rs   r   r  r)  r  r  r  r  scorer_registryscorerr   _scorers                 ri   *test_multi_metric_search_forwards_metadatar&  
  s     B/DAqQI
))


"CHHY'MXXi(N
+C%aSz2kOo6HH%0@ I F Vj9GSO
q'O=NOSS	1M. T  "6'#	
 #rl   c                    t        d      \  }}t               }|ddgii} | |fddi|j                  ||      }t        j                  t
        d      5  |j                  ||d	       d
d
d
       y
# 1 sw Y   y
xY w)z{*SearchCV should reject **params when metadata routing is not enabled
    since this is added only when routing is enabled.r  r  r   r   r   r   zis only supported ifr   )r  N)r   rL   ru   r   r   r   r   )r   r  rs   r   r  r  r,  s          ri   1test_score_rejects_params_with_no_routing_enabledr(  
  sz     B/DAq
+C%aSz2	#	1!	10	1	5	5a	;B	z)?	@
A" 
A	@	@s   A55A>c                  ,    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      \  }}|j                  ||       |D ]'  }|j                  d|    j                  t        k(  r'J  y)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y)8test_cv_results_dtype_issue_29074.<locals>.MetaEstimatorNc                 J    || _         || _        || _        || _        || _        y re   )base_clf
parameter1
parameter2
parameter3
parameter4)rh   r-  r.  r/  r0  r1  s         ri   rj   zAtest_cv_results_dtype_issue_29074.<locals>.MetaEstimator.__init__
  s'     %DM(DO(DO(DO(DOrl   c                 >    | j                   j                  ||       | S re   )r-  ru   r  s      ri   ru   z<test_cv_results_dtype_issue_29074.<locals>.MetaEstimator.fit
  s    MMa#Krl   c                 :    | j                   j                  ||      S re   )r-  r   r  s      ri   r   z>test_cv_results_dtype_issue_29074.<locals>.MetaEstimator.score
  s    ==&&q!,,rl   r  re   )r   r   r   rj   ru   r   r   rl   ri   MetaEstimatorr+  
  s     	)		-rl   r4  NoptionABr   r   r  str1str2)r.  r/  r0  r1  r   r  r   r  param_)	r   r   r0   r%   r   ru   r   r  r	  )r4  r   r   rs   r   r  s         ri   !test_cv_results_dtype_issue_29074r;  
  s    - -2 h_xo>aVnQxjv&	J  2 45K 1%DAqOOAq&&w'78>>&HHH rl   c                     t        j                  d      } | j                  g dg dg dd      }|j                  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                  ||       |j                  d   j                  t        k(  sJ y)zNCheck cv_results_ for estimators with a `dtype` parameter, e.g. OneHotEncoder.r  )r   r   r   r   r   )r  r  r  r  r  )r   gffffff@r1  g      @r   )	numeric_1object_1targetr?  r   r  encF)sparse_outputr>  passthrough)	remainderr   enc__encr   r   param_enc__encN)r   importorskipr  dropr   rG   rE   r$   rH   r0   ru   r   r  r	  )pddfrs   r   r@  r   r  r   s           ri   'test_search_with_estimators_issue_29157rJ  
  s    			X	&B	(1/	

B 	q!A
8A

U3j\	BCC CL*,-	
D 	.
K t[Q7KOOAq""#34::fDDDrl   c                     d} t        d      \  }}t        t        d      t                     }dD cg c]  }| |z  	 }}|D cg c];  }t	        j
                  dt        j                  dz  |      j                  d| f      = }}t        |d	|i
      }|j                  ||       |j                  d   j                  t        k(  sJ yc c}w c c}w )zwCheck that GridSearchCV works with params that are arrays of different sizes.

    Non-regression test for #29277.
    r   r  periodic)extrapolation)r   r     r   r   r   splinetransformer__knotsry  param_splinetransformer__knotsN)r   rF   rI   r%   ro   linspacepir   r0   ru   r   r  r	  )	rL  rs   r   spline_reg_piper   n_knots_listn_knots
knots_listspline_reg_pipe_cvs	            ri    test_cv_results_multi_size_arrayrX    s    
 J"-DAq#
3O
 -99LqJNLL9 $#G 	Aruuqy'*22B
3CD#   &!&

 1a &&'GHNNRXXX :s   CA Cz(array_namespace, device_name, dtype_namec                    t        |||      \  }}t        j                  d      j                  d      }|j	                  |      }|j                  ||      }t        j                  dgdz  dgdz  z         }	|j                  |	|      }
t        d      5   | t               d	g d
idd      }|j                  ||
       |j                  ||
       d d d        y # 1 sw Y   y xY w)Nr   )r   r   )devicer   r   r   T)array_api_dispatchtol)r  r  g-C6?gh㈵>gư>gHz>r   r   r   )rX   ro   r   r   astypeasarrayr   r   r   ru   r   )r   array_namespacedevice_name
dtype_namexprZ  rs   X_npX_xpy_npy_xpr   s               ri   #test_array_api_search_cv_classifierrg  8  s     &o{JOJB
		#x(A88JD::d6:*D 88QC!GqcAg%&D::d6:*D	4	0&(89	
 	T4 tT" 
1	0	0s   =CC')r6  r  r  )r   r   )candidate_paramsexpected	param_foozsimple numeric, single param)idr   r   	param_bar)r   r   r   )FFTr@  z1simple numeric, one param is missing in one roundrH  zlists of different lengthszlists tuplesr  c                 L   t        t        |             }t        ||      D ]  \  \  }}\  }}||k(  sJ |j                  |j                  k(  sJ t        j
                  j                  ||       t        j
                  j                  |j                  |j                          y re   )r   r?   rq  r  ro   rn  r]   r6  )rh  ri  r  r  rA  expected_keyexpected_values          ri   &test_yield_masked_array_for_each_paramrp  a  s    l 45EFGF8;FH8M4e4|^l"""{{n22222


%%e^<


%%ejj.2E2EF	 9Nrl   c                      t        d      D  cg c]  } d| i }} t        j                         5  t        j                  dt               t        t        |             d d d        y c c} w # 1 sw Y   y xY w)Nr  r  error)r   warningscatch_warningssimplefilterRuntimeWarningr   r?   )r   rh  s     ri   *test_yield_masked_array_no_runtime_warningrw    s^    .3Dk:k!k:		 	 	"g~6/0@AB 
#	" ;	"	"s   A'/A,,A5c                     t         |        dg did|      t         |        dt        dd      idd|d	      t         |        dg didd
|      t	         |        dt        dd      idd
|d      gS )Nr  r   r   r   r   r   r   r   r  )r   r   r   r  T)r   aggressive_eliminationr   )r   rz  r   r  )r0   r:   r   r3   r4   )r  r   s     ri   _searchcv_callback_test_casesr{    s    Y[:y"9aQKA'	
 	K##'	
 	KA'#'	
# rl   r3  r_  r	  c                 R  
 t               t               g} t        |       j                  |      j                  | j                  t        t              } d}d}| j                  
d| j                  j                  v r9| j                  }t        
fd| j                  D              }|||z   z   |z   |z   }nd}|
z  }|||z   z   |z   }|D ]Z  }	|	j                  d      dk(  sJ |	j                  d      |k(  sJ |	j                  d      |k(  sJ |	j                  d	      dk(  rZJ  y
)zLCheck number of hook calls when the sub-estimator doesn't support callbacks.r2  r   Halvingc              3   (   K   | ]	  }|z    y wre   r   r   r  r$  s     ri   r   z7test_search_callbacks_no_propagation.<locals>.<genexpr>       Q<P&FX-<P   r   setupon_fit_task_beginon_fit_task_endteardownN)r   r   r   r   set_callbacksru   rs   r   rL  r{  r   n_iterations_sumn_candidates_count_hooks)r_  r3  	callbacksrootsearch_taskn_halving_roundsn_evaluationsri  r8  callbackr$  s             @ri   $test_search_callbacks_no_propagationr    sE    #$&E&GHI@U6]%%E%2@@)LPPQRTUVF DKHF$$---!//QF<P<PQQ;./2BB]R$x/;./-? ##G,111##$78HDDD##$56(BBB##J/1444	 rl   r2c                 b   t               t               g} t        |       j                  |      j                  | j                  t        t              } d}d}| j                  d| j                  j                  v r9| j                  }t        fd| j                  D              }|||z   z   |z   |z   }nd}|z  }|||z   z   |z   }|D ]  }	|	j                  d      dk(  sJ |	j                  j                  dk(  r,|	j                  d      |k(  sJ |	j                  d	      |k(  sqJ t        fd
| j                  d   D              }
|r| j                   j"                  nd}||
z   |z   }|	j                  d      |k(  sJ |	j                  d	      |k(  sJ |	j                  d      dk(  rJ  y)zICheck number of hook calls when the sub-estimator does support callbacks.r2  r   r}  c              3   (   K   | ]	  }|z    y wre   r   r  s     ri   r   z4test_search_callbacks_propagation.<locals>.<genexpr>  r  r  r   r  r   r  r  c              3   H   K   | ]  }t              D ]	  }|d       yw)r  N)r   )r   r   r  r$  s      ri   r   z4test_search_callbacks_propagation.<locals>.<genexpr>	  s.      %5AxA *( 5s   "r   r   r  N)r   r   r   r   r  ru   rs   r   rL  r{  r   r  r  r  r  r   r   n_iter_)r_  r3  r  r  r  r  r  searchcv_tasksr8  r  search_inner_tasksrefit_inner_tasksri  r$  s                @ri   !test_search_callbacks_propagationr    s    #$&E&GHI@U6]%%E%2@@)LPPQRTUVF DKHF$$---!//QF<P<PQQu!458HH=X$x/u!45E##G,111&&*==''(;<NNN''(9:nLLL "% %++H5% "
 CH 6 6 > >Q%(::=NNH''(;<HHH''(9:hFFF##J/1444) rl   c                  r   t               } t        t               dg didd      j                  |       }t        j
                  j                  d      j                  ddt        j                  d         }|j                  t        t        |	       | j                  D cg c]  }|d
   j                  dk(  r| }}|sJ | j                  D cg c]  }|d
   j                  dk(  r| }}|sJ |D ]  }d|d   d   v rJ  |D ]%  }d|d   d   v sJ |d   d   d   }t        ||       ' yc c}w c c}w )zTest that `sample_weight` gets passed to `callback.on_fit_task_*`.

    Note this tests all *SearchCV classes that inherit from `BaseSearchCV`.
    r  r   r   r	  ry  r   r   r  r  contextzcandidate-split-evaluationzrefit-with-best-paramsr  r<  r  N)r   r0   r   r  ro   r'  r(  r   r   ry   ru   rs   record	task_namer]   )r  r_  r  entryevaluation_recordsrefit_recordspassed_weightss          ri   +test_search_callbacks_receive_sample_weightr    sj    !"HZ3:mH  II))!,44Q
4KM
JJq!=J1 __$E%%)EE 	$  
  __$E%%)AA 	$  
 =#%/*"==== $ %/*"====x4_E>=9 !s   !D/D4c                     t               }t        |       j                  |      j                  t        t
              } |j                  D ]  }|d   | u rJ  y)zHTest that all hooks receive the search instance as `estimator` argument.r  N)r   r   r  ru   rs   r   r  )r_  r  r  s      ri   -test_search_callbacks_receive_search_instancer  8  sN     !"H6]((266q!<F[!V+++ !rl   c                      G d dt         t              } t               }t         |        dddgiddd      j	                  |      }t        j                  t        d	
      5  |j                  t        t               ddd       d}|j                  d      |k(  sJ |j                  d      |k(  sJ y# 1 sw Y   8xY w)zCheck callbacks hooks are called when some candidate fits fail.

    When error_score != "raise" and not all fit fail, the whole search doesn't raise so
    all callback invocations are expected.
    c                        e Zd ZddZd Zd Zy)Jtest_search_callbacks_with_partial_fit_failures.<locals>.MayFailClassifierc                     || _         y re   )fail)rh   r  s     ri   rj   zStest_search_callbacks_with_partial_fit_failures.<locals>.MayFailClassifier.__init__O  s	    DIrl   c                 h    t        j                  |      | _        | j                  rt	        d      | S )NzMayFailClassifier.fit failed)ro   rp   rq   r  RuntimeErrorr  s      ri   ru   zNtest_search_callbacks_with_partial_fit_failures.<locals>.MayFailClassifier.fitR  s)    IIaLDMyy"#ABBKrl   c                 J    t        j                  t        |      t              S )NrH  )ro   r   rn   r  r}   s     ri   r{   zRtest_search_callbacks_with_partial_fit_failures.<locals>.MayFailClassifier.predictX  s    88CF#..rl   Nr   r  r   rl   ri   MayFailClassifierr  N  s    			/rl   r  r  FTr   r   )r   r3  r   z"2 fits failed out of a total of 4.r   Nr   r  r  )r   r   r   r0   r  r   r  r    ru   rs   r   r  )r  r  r_  expected_n_taskss       ri   /test_search_callbacks_with_partial_fit_failuresr  F  s    /O] / !"H	% mH  
&.R	S

1a 
T ! 348HHHH 126FFFF 
T	Ss   "B44B=)r   (  r   r  r]  r   rs  collections.abcr   r   	functoolsr   ior   	itertoolsr   r   r  r	   numpyro   r   scipy.statsr
   r   r   r   r   r   sklearn.baser   r   r   r   sklearn.callback.tests._utilsr   r   r   r   r   sklearn.clusterr   sklearn.composer   sklearn.datasetsr   r   r   sklearn.discriminant_analysisr   sklearn.dummyr   sklearn.ensembler   sklearn.exceptionsr    sklearn.experimentalr!   sklearn.feature_extraction.textr"   sklearn.imputer#   sklearn.linear_modelr$   r%   r&   r'   sklearn.metricsr(   r)   r*   r+   r,   r-   r.   sklearn.metrics.pairwiser/   sklearn.model_selectionr0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   sklearn.model_selection._searchr>   r?   $sklearn.model_selection.tests.commonr@   sklearn.naive_bayesrA   sklearn.neighborsrB   rC   rD   sklearn.pipelinerE   rF   sklearn.preprocessingrG   rH   rI   rJ   sklearn.svmrK   rL   %sklearn.tests.metadata_routing_commonrM   rN   rO   sklearn.treerP   rQ   sklearn.utils._array_apirR   sklearn.utils._mockingrS   rT   sklearn.utils._testingrU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   sklearn.utils.estimator_checksr_   sklearn.utils.fixesr`   sklearn.utils.validationra   rc   r   r   rs   r   r   markparametrizer  r   r   r   r   r  r  r   r.  r4  r7  rH  rP  rY  r[  r`  rh  rs  r~  r  r  filterwarningsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r;  rD  rX  r]  re  r[  rc  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r+  rI  rW  thread_unsafer_  rh  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r(  r;  rJ  rX  rg  one_hot_encoderordinal_encoderr  r  r   r	  ma_with_tuplesr  rp  rw  r{  r  r  r  r  r  r   rl   ri   <module>r     s     	 
  +   $    : : " M M  # - 
 E ) ; / 9 ; (    9     A , U U 4  ' 
 G E   E . 1
$_m $Ny  BHHr2hR1a&1a&12BHH\= =':JSU2V"WX&	
IKL1#,	I'JKAJF	
	 Y
!/H2<$ l4F%GH< I<$(078>02	1(VF6%P .9 :* .9!( :!(H*:!$} $ OP
 Q
*+Z0 *RG4'9<&HI J 50+:/*//3>78$"84B,VW!tBJ "	sQGn56	cAr7^qQR5)5)p ?F
@#LF& ,.!,q"g 6	
 	,.K!R;Q	
77 .@ 13l@STgG^3L	
>B>BB (6!.B 8	

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