
    h$,fJ             
       L   d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlZddlZddlmZmZmZ dd	lmZmZmZ dd
lmZ ddlmZmZm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD ddlEmFZF ddlGmHZH ddlImJZJmKZKmLZL ddlMmNZN ddlOmPZPmQZQ ddlRmSZSmTZTmUZU ddlVmWZWmXZX ddlYmZZZm[Z[ ddl\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZd ddlemfZf ddlgmhZh  G d d       Zi G d! d"eQ      Zj ej                  d#d#gd$d#gd%d%gd&d%gg      Zl ej                  g d'      Zmd( Znej                  j                  d)e? ee@d*+      g      ej                  j                  d,deqd-fd.dgidgeqd/fd.dieqd0fg      d1               Zrd2 Zsd3 Ztd4 Zuej                  j                  d5e8eAg      d6        Zvedd7        Zwd8 Zxd9 Zyd: Zzd; Z{d< Z|d= Z}d> Z~d? Zd@ Zej                  j                  dAef      dB        Zej                  j                  dAef      dC        ZdD ZdE Z G dF dGe      ZeddH        ZdI ZdJ Zej                  j                  dKd#d&g      ej                  j                  dLeAe8g      dM               ZdN ZdO ZdP ZdQ ZeddR        ZdS ZdT ZdU ZdV ZddWZdX ZdY Zej                  j                  dZe8d[d\d%d*giifeAd\d%d*gid&d]fg      d^        Zd_ Zd` Zda Zdb Zej                  j                  dL eA eW       dcddd*gie       e8 eW       dcddd*gif      g      dg        Zej                  j                  dL eA eLdhi      djddd*gidkl       e8 eLdhi      djddd*gidkm      g      dn        Zdo Zdp Z ed       dq        Zdr Zds Zdt Zdu Zdv Z G dw dxe      Zdy Zdz Zd{ Zd| Zd} Zd~ Zd Zd Zd Zd Zd Zd Zej                  j                  dddhg      ej                  j                  dZe8d[dcg diifeAdcg didd]fg      d               Zd Zd Zd Zd Zd Zd Zd Zej                  j                  ddhdg      d        Zd Zd Zej                  j                  de8dddgifeAd ed%d      ifg      d        Zej                  j                  de8dddgifeAd edd      ifg      d        Zej                  j                  d      ej                  j                  d5e8eAg      ej                  j                  de^e]g      d                      Zej                  j                  ddhdg      d        Zej                  j                  de8d[feAdfe;d[fg      d        Zej                  j                  d      ej                  j                  de8d[feAdfg      d               Zej                  j                  de8d[feAdfe;d[fg      d        Zy)zTest the search module    N)IterableSized)partial)StringIO)chainproduct)GeneratorType)	bernoulliexponuniform)BaseEstimatorClassifierMixinis_classifier)KMeans)
make_blobsmake_classificationmake_multilabel_classification)HistGradientBoostingClassifier)FitFailedWarning)enable_halving_search_cv)SimpleImputer)LinearRegressionRidgeSGDClassifier)accuracy_scoreconfusion_matrixf1_scoremake_scorerr2_scorerecall_scoreroc_auc_score)euclidean_distances)GridSearchCV
GroupKFoldGroupShuffleSplitHalvingGridSearchCVKFoldLeaveOneGroupOutLeavePGroupsOutParameterGridParameterSamplerRandomizedSearchCVStratifiedKFoldStratifiedShuffleSplittrain_test_split)BaseSearchCV)OneTimeSplitter)KernelDensityKNeighborsClassifierLocalOutlierFactor)Pipeline)SVC	LinearSVC)ConsumingScorer	_Registrycheck_recorded_metadata)DecisionTreeClassifierDecisionTreeRegressor)CheckingClassifierMockDataFrame)MinimalClassifierMinimalRegressorMinimalTransformerassert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalignore_warnings)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)selfrN   s     Ilib/python3.12/site-packages/sklearn/model_selection/tests/test_search.py__init__zMockClassifier.__init__X   	    "    c                 l    t        |      t        |      k(  sJ t        j                  |      | _        | S rL   )lennpuniqueclasses_rO   XYs      rP   fitzMockClassifier.fit[   s,    1vQ		!rS   c                      |j                   d   S Nr   shape)rO   Ts     rP   predictzMockClassifier.predict`   s    wwqzrS   c                      || j                   z   S rL   rM   rO   rZ   s     rP   	transformzMockClassifier.transformc       4>>!!rS   c                      || j                   z
  S rL   rM   rd   s     rP   inverse_transformz MockClassifier.inverse_transformf   rf   rS   Nc                 0    | j                   dkD  rd}|S d}|S )N         ?        rM   )rO   rZ   r[   scores       rP   rm   zMockClassifier.scorem   s&    >>AE  ErS   c                     d| j                   iS NrN   rM   )rO   deeps     rP   
get_paramszMockClassifier.get_paramst   s    T^^,,rS   c                     |d   | _         | S ro   rM   )rO   paramss     rP   
set_paramszMockClassifier.set_paramsw   s    ,rS   )r   NN)F)__name__
__module____qualname____doc__rQ   r\   rb   re   rh   predict_probapredict_log_probadecision_functionrm   rq   rt    rS   rP   rJ   rJ   U   s@    B#
"" M-rS   rJ   c                        e Zd ZdZed        Zy)LinearSVCNoScorez0A LinearSVC classifier that has no score method.c                     t         rL   )AttributeErrorrO   s    rP   rm   zLinearSVCNoScore.score   s    rS   N)rv   rw   rx   ry   propertyrm   r}   rS   rP   r   r   |   s    : rS   r   rj      )rj   rj   r   r   c                 t    t        |       t        t        |             D cg c]  }| |   	 c}k(  sJ y c c}w rL   )listrangerU   )gridis     rP   assert_grid_iter_equals_getitemr      s/    :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       rP   test_validate_parameter_inputr      s.     
z	7 e  s   	*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   rj   r      r      r   )hamspameggs)r   bar   c           	   3   l   K   | ],  }t        t        t        |j                                       . y wrL   )tupler   sorteditems).0ps     rP   	<genexpr>z&test_parameter_grid.<locals>.<genexpr>   s%     GAU56!'')#467Gs   24c              3   .   K   | ]  \  }}d |d|f  yw)r   r   Nr}   )r   xys      rP   r   z&test_parameter_grid.<locals>.<genexpr>   s"      
%)QUAua 
s   r   rj   Cr         ?)r*   
isinstancer   r   rU   r   r   setr   r   r   r   
IndexError)params1grid1params2grid2r   pointsempty	has_emptys           rP   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)NrN   r   r   cvverboser   param_foo_paramsklearn)rJ   r#   sysstdoutr   r\   rZ   r   best_estimator_rN   rE   cv_results_datarm   rz   r|   re   scoringr   r   
ValueError)clfgrid_search
old_stdouts      rP   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   rj   coef_)r5   r   r   r#   r\   rZ   r   r   r   hasattrr   )pipe
param_gridr   regressor_resultss       rP   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;;;;rS   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      rj   r   r   )expected_fit_paramsrN   r   r   raiser   error_scorez0Expected fit parameter\(s\) \['eggs'\] not seen.r   )r   z)Fit parameter spam has length 1; expected)r   r   )rV   arangereshapearrayr=   r   r   AssertionErrorr\   oneszeros)r   rZ   r   r   searchererr_msgs         rP   test_SearchCV_with_fit_paramsr      s   
		#r2&A
!qA37"#A
&&1A
BCk95!QH BG	~W	5 -Q,- :G	~W	5 ?Q
">?LLABGGBKbhhrlL;- -? ?s   (E<EEE#c                     t        dd      } t        dd      \  }}g d}t        d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)Nautor   dualrandom_stater   r   centers皙?rj   r   r   accuracyr   z
no scoringr   rj   )
r7   r   r   r#   r\   best_params_rm   r   r   	TypeError)r   rZ   r   Csclf_no_scorer   grid_search_no_scores          rP   test_grid_search_no_scorer     s    a
0C1a0DAq	B#a@LsS"IzBKOOAq'sBiTQ"  ,,0H0HHHHQ"&:&@&@A&FFFF (sBi@	y	5 (  1#'( ( (s   C;;Dc                  :   t        dddd      \  } }t        dd      }dd	gi}t        ||d 
      j                  | |      }t        ||d
      j                  | |      }t        t	        d      |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   r   r   roc_aucrk   )r   r7   r#   r\   r   rm   rC   )rZ   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               rP   test_grid_search_score_methodr    s2   #TUVDAq
a
0C#<D$S$=AA!QG"3jAEEaKO!-f%tY"	c!Qi  c4;??1EJ )..q!4$**1a0N399!Q?  A&I s??C&&&(89	#56rS   c                  P   t         j                  j                  d      } t        ddd      \  }}| j	                  ddd      }t        d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   rj   n_splitsz*The 'groups' parameter should not be None.r   r   )groups)rV   randomRandomStater   randintr7   r(   r)   r$   r%   r#   r   r   r   r\   r-   r.   )rngrZ   r   r  r   r   	group_cvs	error_msgr   gsnon_group_cvss              rP   test_grid_search_groupsr  6  s    ))


"CqqIDAq[[Ar"F
a
0C!:D 	A	I =I $#t+]]:Y7 	FF1aL	
q!F#	$ %&(>(@AM #t+
q!	 	s   /DD%	c                  t   t        j                  d      j                  dd      } t        j                  dgdz  dgdz  z         }g d}t	        t        dd      d	|i      }|j                  | |       t        |j                  j                  |j                         t	        t               d
ddgi      }|j                  | |       t        |d      rJ t	        t        dd      d	|i      }t        |d      rJ t	        t        dd      d	|id      }|j                  | |       t        |d      rJ y )Nr   r   r   r   rj   r   r   r   r   alphark   g       @rX   F)refit)rV   r   r   r   r#   r7   r\   rE   r   rX   r   r   )rZ   r   r   r   s       rP   test_classes__propertyr  U  s"   
		#r2&A
!qA37"#A	Byf1ERyQKOOAq{22;;[=Q=QR uw3*(=>KOOAq{J/// yf1ERyQK{J/// vA.b	K OOAq{J////rS   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 )NrN   rj   r   r   r   r   )r   r   )rJ   r#   r\   rZ   r   r   r,   )r   r   random_searchs      rP   test_trivial_cv_results_attrr  p  st    

Cs[1#$61=KOOAq;...&s[1#,>qQOMa;...rS   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   	precisionrN   r   Fr   r  r   r   best_index_r   )rb   rz   r{   re   rh   zhas no attribute ''z`refit=False`. z9 is available only after refitting on the best parametersr   zIFor multi-metric scoring, the parameter refit must be set to a scorer key)Trecallr   )accprec)r  r   )rJ   r#   r\   rZ   r   r   r   r   r   getattrr   value	__cause__strr   )	r   r   r   fn_name	outer_msg	inner_msg	exec_infor  r  s	            rP   test_no_refitr.  |  s}   

C:{34 ?"3i(@RST1%67]3^4	
5
 	?G -WIQ7I!' +3 3  ~Y? 19-W-a01 ioo77HHHIOO$=$= >>>>!	??> 	T  . ]]:Y7 	Ruj+.Vc!Qi	 	1 1	 	s   E!+E#E #E,	c                      t        ddd      \  } }t        d      }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   rk      )r   r7   r#   r   r   r   r\   )X_y_r   r   s       rP   test_grid_search_errorr6    sh     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 )Nr0  r   r   r1  rk   rbfr   )r   kernelgammar   r:  )r   r6   r#   r\   rE   
dual_coef_r   )r4  r5  
param_dictr   r   s        rP   test_grid_search_one_grid_pointr>    s~     33QOFBu3%@J
F
C	c:	&BFF2rN
E
-CGGBOs~~r'9'9'D'DErS   c                      t               } d }t        | dt        dd      id      }|j                  t        t
               |j                  j                  dk(  sJ y )NrN   rj   r   r   r   r   )rJ   r#   r   r\   rZ   r   r   rN   )r   r   s     rP   /test_grid_search_when_param_grid_includes_ranger@    sP    

CKs[%1+$>1EKOOAq&&00A555rS   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   r1  r   rj   r   r;  zParameter grid for parameter 'C' needs to be a list or a numpy array, but got 1 (of type int) instead. Single values need to be wrapped in a list with one element.r   zIParameter grid for parameter 'C' need to be a non-empty sequence, got: []z1,2,3zParameter grid for parameter 'C' needs to be a list or a numpy array, but got '1,2,3' (of type str) instead. Single values need to be wrapped in a list with one element.)r   r   )r   r6   reescaper#   r   r   r   r\   r   rV   r   )rZ   r   r=  r   r  searchs         rP   test_grid_search_bad_param_gridrE    s   JDAqqJ
F
C			@I
 #z*F	y		2 

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

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

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

1a 5    s0   F'F4*G G'F14F= G	Gcsr_containerc                    t        ddd      \  }}t        d      }t        |ddd	gi      }|j                  |d d
 |d d
        |j	                  |d
d        }|j
                  j                  } | |      }t        d      }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 )Nr0  r   r   r1  r   r   r   r   rk   r3  g?)
r   r7   r#   r\   rb   r   r   tocoorV   mean)	rF  r4  r5  r   r   y_predr   y_pred2C2s	            rP   test_grid_search_sparserM    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$%,,,7N7rS   c                    t        ddd      \  }}t        d      }t        |ddd	gid
      }|j                  |d d |d d        |j	                  |dd        }|j
                  j                  } | |      }t        d      }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 )Nr0  r   r   r1  r   r   r   r   rk   f1r   r3  c                     t        | |       S rL   )r   )y_true_y_pred_s     rP   f1_lossz0test_grid_search_sparse_scoring.<locals>.f1_loss  s    '***rS   F)greater_is_better)	r   r7   r#   r\   rb   r   r   rE   r   )rF  r4  r5  r   r   rJ  r   rK  rL  rS  F1Lossy_pred3C3s                rP   test_grid_search_sparse_scoringrX    sq    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'rS   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)Nr0  r   r   r1  r3  precomputedr9  r   r   rk   )r   rV   dotra   r6   r#   r\   best_score_rb   rI  r   r   r   tolist)	r4  r5  K_trainy_trainr   r   K_testy_testrJ  s	            rP   #test_grid_search_precomputed_kernelrc  +  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   rZ  r[  r   r   rk   )	rV   r   r   r6   r#   r   r   r   r\   )r_  r`  r   r   s       rP   3test_grid_search_precomputed_kernel_error_nonsquarerf  H  sm     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 rL   	parameterrO   rk  s     rP   rQ   zBrokenClassifier.__init__V  rR   rS   c                 .    t        | d      rJ d| _        y )Nhas_been_fit_T)r   rn  rO   rZ   r   s      rP   r\   zBrokenClassifier.fitY  s    4111!rS   c                 F    t        j                  |j                  d         S r^   rV   r   r`   rd   s     rP   rb   zBrokenClassifier.predict]      xx
##rS   rL   )rv   rw   rx   ry   rQ   r\   rb   r}   rS   rP   rh  rh  S  s    4#"$rS   rh  c                      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   rj   rk  r  Tr   r  )rV   r   r   r   r#   rh  r\   )rZ   r   r   s      rP   
test_refitru  a  so    
 			#r2&A
!qA37"#A
kAq623[PTC GGAqMrS   c                      d } t        ddd      \  }}t        t        d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      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   *   r1  r   r   r   {Gz?r   rj   r  Trt  r   mean_test_score)r   r#   r7   r\   r!  r   keysargmin)
cv_resultsrZ   r   r   keys        rP   refit_callablez+test_refit_callable.<locals>.refit_callableu  s     #SQRP163.!	
 	1!### ??'') 	%C*$$$	% +,3355rS   r   r   rx  r1  r   r   r   ry  r  rt  r   r]  N)r   r#   r7   r\   r!  r   )r  rZ   r   r   s       rP   test_refit_callabler  o  sq    62 LDAq
vB/	n	C GGAqM??asM****rS   c                      d } t        ddd      \  }}t        t        d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    rP   refit_callable_invalid_typezEtest_refit_callable_invalid_type.<locals>.refit_callable_invalid_type  s     rS   r   r   rx  r1  r   r   r   r   rj   r  rt  z&best_index_ returned is not an integerr   N)r   r#   r7   r   r   r   r\   )r  rZ   r   r   s       rP    test_refit_callable_invalid_typer    ss     LDAq
vB/	sAh)	C 
y(P	Q 1     A**A3out_bound_value	search_cvc                       fd}t        ddd      \  }} |t        d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    rP   refit_callable_out_boundz?test_refit_callable_out_bound.<locals>.refit_callable_out_bound  s     rS   r   r   rx  r1  r   r   r   r   rj   r  rt  zbest_index_ index out of ranger   N)r   r7   r   r   r   r\   )r  r  r  rZ   r   r   s   `     rP   test_refit_callable_out_boundr    st     LDAq
vB/	sAh&	C 
z)I	J 1  r  c                      d } t        ddd      \  }}t        t              dd}t        t	        d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    rP   r  z8test_refit_callable_multi_metric.<locals>.refit_callable  s'      :---*+2244rS   r   r   rx  r1  r  )Accuracyr%  r   r   r   ry  rt  r   r]  N)r   r   r   r#   r7   r\   r!  r   )r  rZ   r   r   r   s        rP    test_refit_callable_multi_metricr    s    
5 LDAq&~6LG
vB/	n	C GGAqM??asM****rS   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 )Nrj   )r   r   r   r_   r   s    rP   check_Xz#test_gridsearch_nd.<locals>.check_X  s    wwqr{i''rS   c                 &    | j                   dd  dk(  S )Nrj   )r  r  r_   r  s    rP   check_yz#test_gridsearch_nd.<locals>.check_y  s    wwqr{g%%rS   r\   )r  r  methods_to_checkrN   r   r   )
rV   r   r   r=   r#   r\   rm   rZ   r   r   )X_4dy_3dr  r  r   r   s         rP   test_gridsearch_ndr    s    99^$,,RAq9D99[!))"a4D(& C
 s[)$<=KOOD$%%a+;...rS   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   rj   c                 "    t        | t              S rL   r   r   r  s    rP   <lambda>z test_X_as_list.<locals>.<lambda>      *Q- rS   r\   )r  r  r   r  rN   r   r   r   rV   r   r   r   r=   r'   r#   r\   r^  rm   r   rZ   r   r   r   r   s        rP   test_X_as_listr     s    
		#r2&A
!qA37"#A
-C 
	Bs[)$<DKOOAHHJ"((A.;...rS   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   rj   c                 "    t        | t              S rL   r  r  s    rP   r  z test_y_as_list.<locals>.<lambda>  r  rS   r\   )r  r  r   r  rN   r   r   r   r  r  s        rP   test_y_as_listr    s    
		#r2&A
!qA37"#A
-C 
	Bs[)$<DKOOAqxxz"((A.;...rS   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   rj   c                     t        |       S rL   r   )r   InputFeatureTypes    rP   check_dfz#test_pandas_input.<locals>.check_df0  s    a!122rS   c                     t        |       S rL   r  )r   
TargetTypes    rP   check_seriesz'test_pandas_input.<locals>.check_series3  s    a,,rS   )r  r  rN   r   r   )r>   pandasr  r  appendImportErrorrV   r   r   r   r=   r#   r\   rm   rb   r   )typesr  r  rZ   r   X_dfy_serr  r  r   r   r  r  s              @@rP   test_pandas_inputr    s    ]+,E,i() 			#r2&A
!qA37"#A(- 3$*&q):a=e	3	- !<H"3i(@Ae$**47D!{M2223  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  rj   )r   initn_initadjusted_rand_scorefowlkes_mallows_score)r  r  )r   r   r   )
n_clusters)r   r   r  r  r   r   r   )r   r   )r   r   r#   dictr\   r   )rZ   r   kmr   r  r   s         rP   test_unsupervised_grid_searchr  >  s    3DAq	QXa	8B %&=>GA ;"495we
 	1''5:::; 
ty1;RK OOAq##L1Q666 rdi.HIKOOA##L1Q666rS   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   rx  r   	bandwidth)	estimatorrZ   s     rP   custom_scoringz2test_gridsearch_no_predict.<locals>.custom_scoring]  s    ((C/r6Q6rS   r   rj   r   )cluster_stdr   r   ry  r  r  r  rx  )r   r#   r2   r  r\   r   r]  )r  rZ   _rD  s       rP   test_gridsearch_no_predictr  Z  s    7 #AAAQRTUPV?WXDAq.1F
 JJqM{+s222###rS   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 )Nr8  linearr   rj   )r9  r   r   )param_distributionsr   r   r9  )r8  r  r   )r   rj   r   r   r   r   r   r     	   r   r   )r   r+   rU   )r  samplerr   samplessamples        rP   test_param_samplerr  k  s2   &+X%6WQ]K/G ""Qq"G"w<2 %h#4444F3K$1$$$$$%
  BC/G !Aw#7!A#77771./G !Aw#7!A#7777# #  #7  #7s   	C:	C		C#9	C(	C-c                 x   | j                   t        fd|D              sJ t        fd|D              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 )Nc              3   l   K   | ]+  }t        |   t        j                  j                         - y wrL   r   rV   maMaskedArray)r   paramr~  s     rP   r   z/check_cv_results_array_types.<locals>.<genexpr>  s'     XEz*U+RUU->->?X   14c              3   J   K   | ]  }|   j                   t        k(    y wrL   )dtypeobjectr   r  r~  s     rP   r   z/check_cv_results_array_types.<locals>.<genexpr>  s      E3z#$$.Es    #c              3   l   K   | ]+  }t        |   t        j                  j                         - y wrL   r  r  s     rP   r   z/check_cv_results_array_types.<locals>.<genexpr>  s&     Xc:joruu/@/@AXr  c              3      K   | ]5  }|j                  d       s"|   j                  t        j                  k(   7 yw)rankN)
startswithr  rV   float64r  s     rP   r   z/check_cv_results_array_types.<locals>.<genexpr>  s8      ~~f% 	3+s   ;>rm   zrank_test_%s)	r   allanymultimetric_scorer_r|  r  rV   int32)rD  
param_keys
score_keysscorer_keysr  r~  s        @rP   check_cv_results_array_typesr    s    ##JXZXXXXE*EEEEXZXXXX     ,2+>+>&..%%'WIK B.3./55AAABrS   c                      ||z   |z   }t        t         j                               t        |dz                t         fd||z   D              sJ y )N)rs   c              3   D   K   | ]  }|   j                   fk(    y wrL   r_   )r   r  r~  n_cands     rP   r   z(check_cv_results_keys.<locals>.<genexpr>  s"     Ucz#$$	1Us    )rE   r   r|  r  )r~  r  r  r  
extra_keysall_keyss   `  `  rP   check_cv_results_keysr    sK    J&3Hvjoo/0&K9O2PQUZ*=TUUUUrS   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 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   rx  r1  r   r8  rj   r   r   r9  r   r:  polyr   r9  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     rP   r   z.test_grid_search_cv_results.<locals>.<genexpr>  s'     R1@Q;QC
1"#Rs   
$$c              3   R   K   | ]  }d |vr|dk7  rt        |   dk           yw)timer  rj   Nr  r  s     rP   r   z.test_grid_search_cv_results.<locals>.<genexpr>  s6      ?q$55 	JqMQs   $'r  r  r  r   )r   r  r#   r6   r\   r   r  r  r  r   maskrU   )rZ   r   n_grid_pointsrs   r  r  n_candidatesrD  r   poly_resultsrbf_resultsr~  s              @rP   test_grid_search_cv_resultsr    sU   KDAqM "g(	
 	 q6		
F  LJJ" !L#%A&TRF
JJq!##Jz+,1222RZRRR   !Z@*j*lK##J |$ n%a(F2 y!&&q) 7=)..q17~.33A667L  ||!!! |$ n%a(E1 9%**1-- 3}-221553>*//23K  {{q   -s   AF;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
                  t        |||       t        |||       t        fdt        |      D              sJ t        fdt        |      D              sJ y )Nr  r   rx  r1     r8  r   )scaler   r  r  r   r   r  r  r  T)r   r   r  r  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r  r   r   r~  s     rP   r   z0test_random_search_cv_results.<locals>.<genexpr>  su       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  r8  r  r  r   Nr#  r$  s     rP   r   z0test_random_search_cv_results.<locals>.<genexpr>"  sx       n%a(E1 9%**1-- 3}-221553>*//23s   AA)
r   r   r,   r6   r\   r   r  r  r  r   )	rZ   r   n_search_iterrs   r  r  r  rD  r~  s	           @rP   test_random_search_cv_resultsr'    s    KDAqM 7R5s;KL81v.F LJJ" !L"F JJq!##J Z@*j*lK  |$      |$   rS   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   rj   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   rV   r   r`   boolwherer6   r\   r   r   	n_splits_r   rB   r   approxrI  std)r   specialized_paramsrZ   r   r  r   common_paramsrD  stest_cv_scores	test_meantest_stdtrain_cv_scores
train_mean	train_stds                  rP   test_search_default_iidr;  -  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   rx  r1  r   r8  rj   r   r   r  r  r   r  r   r#  r   r#  F)r   r   r   r  )
r   r  r   r   r    r#   r6   r\   r  *compare_cv_results_multimetric_with_single)rZ   r   r  rs   grid_searchesr   r   s          rP   'test_grid_search_cv_results_multimetricr@  l  s    KDAqH "g(	
 	 q6		
F  M 0K<UV 	*
 #Eh67%
 	1[)	* />rS   c                     t        ddd      \  } }d}d}t        t        j                  ddd      t        j                  d	d
dd            }dD ]  }g }dD ]_  }|rd}t	        |t
              rdn|}nd}t        |d      }	t        |	|||||d
      }
|
j                  | |       |j                  |
       a t        |  t        |d
   |d   |        y )Nr  r   rx  r1  r   r   rj   r   r   )base)r   r:  TF)r=  r   r#  Tr   F)probabilityr   )r   r   r  r   r  r   )r   r  rV   logspacer   r   r6   r,   r\   r  r>  )compare_refit_methods_when_refit_with_acc)rZ   r   r  r&  rs   r  random_searchesr   rF  r   r  s              rP   )test_random_search_cv_results_multimetricrJ    s    KDAqHM BKKAq)RAC1PQF 
E 	2G"&0%&@
e#+B?C.$$*M a#""=1%	2( 	3OD1A 2E	
/
rS   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 searchr=  z_score$	_accuracy_recallc              3   T   K   | ]  }t        j                  |   d k         ! yw)rj   N)rV   r  )r   r  cv_results_multis     rP   r   z=compare_cv_results_multimetric_with_single.<locals>.<genexpr>  s-      	
 FF#A&!+,	
s   %()r  r  r  r  _timeN)r  rE   r   r  r   r   rB  subupdater  rV   testingassert_equalendswith)search_multi
search_acc
search_recr  vcv_results_acc_recrO  s         @rP   r>  r>    sX    $$$$vl2235KL#//9C9O9O9U9U9W15Ay+q)1,  8B8N8N8T8T8VW1	9a	(!	+W 	
	

 
 
 JJ*002N$!Q!**W:MAN,224P$!QAJJw<OA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   rx  r1  )rb   rz   r{   )r!  r]  r   )r  r   rC   r&  rm   )rV  rW  r  rZ   r   methodr  s          rP   rH  rH    s    u$$$!!Z///%%%%CDAqC 
)GL&)!,.Igj&.I!.L	

 **1a0*2B2B1a2HI= F|S)WZ-EEEEFrS   	max_depthr   )r  r  )r  r   c                    t        ddd      \  }}| 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   rx  r1  r"  z"' has no attribute 'score_samples'z@'DecisionTreeClassifier' object has no attribute 'score_samples'r   )r   r\   	__class__rv   r   r   r   score_samplesr   r'  r(  r)  )r  rZ   r   r+  r,  r-  s         rP   "test_search_cv_score_samples_errorra    s     CDAqMM!Q I''0011STIRI	~Y	7 #9"#ioo//@@@IOO556666# #s   C  C	T)noveltyn_neighborsr  )r  r  r   )r  r   r   c           	         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 )Nrx  r  g333333?r   r   r   )r   r2  r   r  r   ir   )lowhighsize)axisrj   r   )rV   r  r  intr   concatenater   r   r\   rB   r`  r   )r  r  r   outliers_fraction
n_outliers	n_inliersrZ   y_trues           rP   #test_search_cv_score_samples_methodro    s    " ))


#CI&23JJ&I 	Q!Q 	 		A 	3;;2AZO;LMTUVA XXqcIo&FFJ;< MM!V "I$=$=$K$KA$NrS   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  rx  r  r   )rj   gjt?MbP?T)r   r  r   )r   r  r  r{  r   rj   r  r   r  )rj   rj   r   )	r   r#   r6   r,   r\   r   rC   rV   allclose)rZ   r   r   r   r  rD  r~  s          rP   (test_search_cv_results_rank_tie_breakingrs  7  s>   4DAq ()JsuPTUK&aZDM . N

1a''
 	()!,j9J.KA.N	
 	)*1-z:L/Ma/P	
 ;;()!,j9J.KA.N
 	
 
 ;;)*1-z:L/Ma/P
 	
 
 	F../@A9M'NrS   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 )Nrj   r   r   r   r   )r   r   r   r   rj   r   r   r   param_random_state)r<   r;   r'   r#   r\   rE   r   )rZ   r   
estimatorsest_parametersr   estr   s          rP   !test_search_cv_results_none_paramry  Y  s    C!qcA3$oqA')+A+CDJ$q$i0N	B U"
 #a)	 	
 	;223GH1d)TUrS   c                     t        d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   rj   r   r   r   )r   rj   rj   r   r   r   )r   r   r   )r  r  )r  r  rl   refit_time_)r7   r#   r,   r\   rV   r  r   r   r   r{  float)svcrZ   r   r  rsrD  r  s          rP   test_search_cv_timingr  h  s   
a
0C 	
 	
 	
 	
	A 	A	cC!Q=QA	>B	C#1v1!A	NBr( '

1a4 	7C 66&,,S1Q677766&,,S1A5666		7 9 	7C%%c*1-222%%c*1-44466&,,S1A5666	7
 v}---&,,e444!!Q&&&'rS   c            
         d} t        d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   r   )rO  r   r   )r   r   )r{  r  c              3   &   K   | ]	  }d |z    yw)r,  Nr}   )r   cv_is     rP   r   z9test_grid_search_correct_score_results.<locals>.<genexpr>  s      G
,0 4'G
s   r  )r   r,  rO  r   )r7   r   r#   r\   r   r   r|  r   r   r  rV   isinr-   r/  	enumeratert   r   splitr   rb   r|   r!   rC   )r  r   rZ   r   r   rm   r   r~  result_keysexpected_keysr   candidate_ir   r4  	cv_scoresr   traintestcorrect_scoredecs                       rP   &test_grid_search_correct_score_resultsr    s   H
a
0C1a0DAq	B" A"3b	5XN __Q*66
 :??,-> G
49(OG
 B
 
 277=+6777h/(('m 	ANKNNQN #8_  ++,@1,DEkRI %.bhhq!n$= A =E4%!E(+D=$,QtWckk!D'6J$KMi'//$8C$1!D'3$?M#M9Q<@A	AA 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 )NrN   r   Tr   r   )r  r   r   )rJ   r#   r\   rZ   r   pickleloadsdumpsrD   rb   r,   )r   r   grid_search_pickledr  random_search_pickleds        rP   test_pickler    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rS   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   r]  )rj   r   r   r   r   r   rs   r,  r   )r   r   r}   )r   r'   r<   r;   r#   r\   r   r   rU   rt   r  r  rm   rC   r,   )rZ   r   rw  r   rv  rx  r   
res_paramscand_ir   r  r  r  r  s                 rP   &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			rS   c                      t        j                  d      j                  dd      } g d}t        d      }t	        |i d      j                  | |      }t        |d	      rJ y )
Nre  r   r   r   r   rj   rj   rj   F)rF  r   r   rz   )rV   r   r   r6   r#   r\   r   rZ   r   r   r  s       rP   test_predict_proba_disabledr    sY    
		"a$AA
%
 C	c2!	$	(	(A	.Br?++++rS   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 )Nre  r+  r   r   r   r  imputerrI  )strategymissing_values
classifierclassifier__foo_paramr   r   )
rV   r   r  r   nanr5   r   rJ   r#   r\   )rZ   r   r   s      rP   test_grid_search_allows_nansr    s    
		"BJJ'//26AffAadGAvbffMN>+,	
	A ,i8Q?CCAqIrS   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 rL   rj  rl  s     rP   rQ   zFailingClassifier.__init__  rR   rS   c                 T    | j                   t        j                  k(  rt        d      y )Nz%Failing classifier failed as required)rk  r  FAILING_PARAMETERr   ro  s      rP   r\   zFailingClassifier.fit  s'    >>.@@@DEE ArS   c                 F    t        j                  |j                  d         S r^   rq  rd   s     rP   rb   zFailingClassifier.predict  rr  rS   c                      y)Nrl   r}   rY   s      rP   rm   zFailingClassifier.score  s    rS   rL   ru   )	rv   rw   rx   ry   r  rQ   r\   rb   rm   r}   rS   rP   r  r    s     6#F$rS   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)Nre  r   r   r1  rk  r   rj   r   r   Frl   r   r  r   z5 fits failed.+total of 15.+The score on these train-test partitions for these parameters will be set to 0\.0.+5 fits failed with the following error.+ValueError.+Failing classifier failed as requiredflagsr   rs   c                     t        j                  t        j                        D cg c]  }j                  d|z     |     c}      S c c}w )Nr,  )rV   r   r   r/  r   )r   r4  r  s     rP   get_cand_scoresz<test_grid_search_failing_classifier.<locals>.get_cand_scoresB  sB    xxBGBUVQR^^0145a8V
 	
Vs   Ac              3      K   | ]E  }j                   d    |   t        j                  k(  r t        j                   |      dk(         G yw)param_parameterrl   N)r   r  r  rV   r  r   r  r  r  s     rP   r   z6test_grid_search_failing_classifier.<locals>.<genexpr>H  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  rV   r  isnanr  s     rP   r   z6test_grid_search_failing_classifier.<locals>.<genexpr>a  sP      >>+,V4../ 	rxx/01s   AAr  r   rj   r   )r   r  r#   rB  compileDOTALLr   warnsr   r\   rU   r   r  r   r|  r  r!  )rZ   r   r   warning_messager  ranksr  r  s         @@rP   #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)Nre  r   r   r1  rk  r   rl   r   zrAll the 15 fits failed.+15 fits failed with the following error.+ValueError.+Failing classifier failed as requiredr  r   r   r  r#   r  rB  r  r  r   r   r   r\   )rZ   r   r   r  r  s        rP   )test_grid_search_classifier_all_fits_failr  q  s    KDAq

C	
);;<q@	AB
B jjH iiO 
z	9 
q!  s   ?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)Nre  r   r   r1  rk  r  r   Fr   r  )r   r  r#   r   r   r   r\   r  s       rP   )test_grid_search_failing_classifier_raiser    sq     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   rj   )abc)firstsecondthirdtwovaluesr  r   r  z}The total space of parameters %d is smaller than n_iter=%d. Running %d iterations. For exhaustive searches, use GridSearchCV.r   i  r   c   rx  )r   r   z	a%db%dc%dr  r  r  r   r  )
r+   r   r  UserWarningr   rU   r*   r   r   r
   )
rs   r  r   	grid_sizeexpected_warningr  r  r   hashable_samplesparams_distributions
             rP   #test_parameters_sampler_replacementr    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P1qvqvqv&>>P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   rj   rj   rj   hinge)r  r   )r  r   r   rz   )	rV   r   r   r#   r   r   r\   rz   r{   )r   rZ   r   r   s       rP   #test_stochastic_gradient_loss_paramr    s     	J 			"a$AA
W-*C sO,,,GGAqMa!
 		J W-*C sO,,,GGAqMsO,,,,rS   c                      t        j                  d      j                  dd      } g d}t        dd      }t	        |ddd	gid
      }|j                  | |       y )Nr   r   r  r   r   r   r   r   r   r   )r   r   )rV   r   r   r7   r#   r\   r  s       rP   %test_search_train_scores_set_to_falser    sQ    
		!Q#AA
a
0C	csS#J&7A	>BFF1aLrS   c            
         d} d}t        | d      \  }}t        t        dd      dg dit        || 	      d
      }|j	                  ||       t        t        dd      dg dit        |      d
      }|j	                  ||       t        t        |d
d      j                  ||      t              sJ t        t        dd      dg dit        |d
d      j                  ||      d
      }|j	                  ||       t        t        d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      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   r   g333333?)r  r   T)r   r   r  r  )r  r*  r   c                 6    dD ]  }| j                  |        | S )N)r  r  r  r  )pop)r~  r  s     rP   _pop_time_keysz>test_grid_search_cv_splits_consistency.<locals>._pop_time_keys  s)    
 	 C NN3	  rS   rP  )r   r   r   r   )r  r*  )r  r  r   zsplit%d_%s_scorerj   r   r   )r   r#   r7   r1   r\   r'   r   r  r	   rV   rS  rT  r   r   rU  r   rD   )r   r  rZ   r   r  gs2gs3gs4r  r  rY  
score_typeper_param_scoresparam_ir4  s                  rP   &test_grid_search_cv_splits_consistencyr    s   IHCDAq	vA.)H	B	
B FF1aL
vA.)(#	C GGAqM xA>DDQJ   vA.)(DqAGG1M	C GGAqM
vA.)(DqA	C GGAqM JJs')H JJ....0L$!Q

78KAL////1M$!QG9LAM 
vA.-.(D1	
B FF1aL ( 	L
Qx 	G q) 1Q
OCDWM)W%	 	""21"57G7JK!"21"57G7JK	L# 	MM&)s   9K	
K	
8KK<Kc                      t               } t        | dg didd      }|j                  t        t               |j                  |j                  t                    }t        t        |       y )NrN   r   r   r   )rJ   r#   r\   rZ   r   rh   re   rE   )r   r   X_round_trips      rP   +test_transform_inverse_transform_round_tripr  L  sR    

Cs[)$<ANKOOAq001F1Fq1IJLq,'rS   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 )NrP  Oz	Checking )r   )
r   r   r|  rU  rV   
asanyarrayr  kindrE   rB   )resultsgscvexp_resultsr  s       rP   check_resultsz-test_custom_run_search.<locals>.check_resultsV  s    &&glln%)<<<< 		YA::g&]]71:6
1:##((C/&#A
K!O $KNGAJVWX		YrS   c                 @    t        | d      j                        S )NTr  )r#   r\   )r   rZ   r   r   s    rP   fit_gridz(test_custom_run_search.<locals>.fit_gridd  s    CEII!QOOrS   c                   ,     e Zd Z fdZfdZ xZS ).test_custom_run_search.<locals>.CustomSearchCVc                 &    t        |   |fi | y rL   superrQ   rO   r  kwargsr_  s      rP   rQ   z7test_custom_run_search.<locals>.CustomSearchCV.__init__h      GY1&1rS   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 )Nr]  rj   r   min_samples_splitr   r   r}   )rO   evaluater  r  r  s      rP   _run_searchz:test_custom_run_search.<locals>.CustomSearchCV._run_searchk  s{    a 0;2BCDG'8[1a&,A#BC!4a 8;NPR:STUG;A/2E2w1OPQrS   )rv   rw   rx   rQ   r  __classcell__)r_  r  r  s   @rP   CustomSearchCVr  g  s    	2	 	rS   r  r   r  r   r   )r   n_informativer   Tr  r]  rj   r   r  r   r   r   r  >   r  rX   r   r{  r   zAttribute %s not equal)r0   r<   r   r\   r   dirislowerr&  )
r  mycvr  r  attrrZ   r  r   r  r   s
        @@@@@rP   test_custom_run_searchr  U  s    YP   Q
/CAANDAq#$7;;AqADkAq6*-@1b',JKLDG'4 D	 GOORS	S  4&'$*== (4/=rS   c                  @    G d dt               }  | t                     j                  t        t                G d dt               }t        j                  t        d      5   |t                     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 rL   r  r  s      rP   rQ   zDtest__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.__init__  r  rS   c                     | S rL   r}   )rO   rZ   r   r  
fit_paramss        rP   r\   z?test__custom_fit_no_run_search.<locals>.NoRunSearchSearchCV.fit  s    KrS   ru   )rv   rw   rx   rQ   r\   r  r_  s   @rP   NoRunSearchSearchCVr    s    	2	rS   r  c                        e Zd Z fdZ xZS )3test__custom_fit_no_run_search.<locals>.BadSearchCVc                 &    t        |   |fi | y rL   r  r  s      rP   rQ   z<test__custom_fit_no_run_search.<locals>.BadSearchCV.__init__  r  rS   )rv   rw   rx   rQ   r  r  s   @rP   BadSearchCVr    s    	2 	2rS   r  z_run_search not implemented.r   )r0   r6   r\   rZ   r   r   r   NotImplementedError)r  r  s     rP   test__custom_fit_no_run_searchr    sq    l  ""1a(2l 2 
*2P	Q %CEq!$% % %s   ")B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   r  rq  rz  r   r   r   n_jobszNNo fits were performed. Was the CV iterator empty\? Were there no candidates\?r   )
r'   r  rZ   r,   r   r   r   r   r\   r   )r   u
train_sizeridges       rP   test_empty_cv_iterator_errorr#    s     
		 	 	#B O1QO Juw2D(E"UVWE 
*
 2 			!KZ.!KZ.12 2 2 2s   	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)Nrj   r}   )rO   argskws      rP   get_n_splitsz;test_random_search_bad_cv.<locals>.BrokenKFold.get_n_splits  s    rS   N)rv   rw   rx   r*  r}   rS   rP   BrokenKFoldr&    s    	rS   r+  r   r  r   r  r  r   r  zXcv.split and cv.get_n_splits returned inconsistent results. Expected \d+ splits, got \d+r   )	r'   r,   r   r   r   r   r\   rZ   r   )r+  r   r!  r"  s       rP   test_random_search_bad_cvr,    s    e 
 
a	 BJuw2D(E"UVWE 

 2 			!KZ.!KZ.12 2 2s   !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 r^   )n_countsr   s    rP   rQ   zQtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorer.__init__  s	    DMrS   c                 r    | xj                   dz  c_         | j                   dz  dk(  rt        j                  S y)Nrj   r   r   )r1  rV   r  )rO   r  rZ   r   s       rP   __call__zQtest_searchcv_raise_warning_with_non_finite_score.<locals>.FailingScorer.__call__  s-    MMQM}}q A%vvrS   N)rv   rw   rx   ry   rQ   r3  r}   rS   rP   FailingScorerr/    s    ?		rS   r4  r   )r   r   r  r  r  zOne or more of the z scores are non-finiter  r{  )r   r;   r   r  r  r\   rU   zipr)  messager   maxrV   r  rE   r  )r   r2  r  rZ   r   r4  r   warn_msgset_with_warningmsgdataset	last_ranknon_finite_masks                rP   1test_searchcv_raise_warning_with_non_finite_scorer>    sa   $ ;DAq
 
  -	
 D 
k	" hA -?(VHx=C 01111H&67 YW$WI-CDCKKHXXXXY   !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                  x   d } t        ddd      \  }}t        d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   rj   )rj   r   )rj   rj   tnfpfntp)rb   r   )r   rZ   r   rJ  cms        rP   custom_scorerzAtest_callable_multimetric_confusion_matrix.<locals>.custom_scorer  s:    Qa(hbhbhbhOOrS   (   r   rx  r1  r   r   r   r   rj   rD  rt  rB  zmean_test_{}rA  )r   r7   r#   r\   formatr   rb   r   rm   r   r0  )	rH  rZ   r   rx  rD  score_namesnamerJ  rG  s	            rP   *test_callable_multimetric_confusion_matrixrM    s    P
 KDAq
b
1C#c1XTRF
JJq!*K A$$T*f.@.@@@@A ^^AF	!V	$B<<1r$x!8888rS   c                     d } t        ddd      \  }}t        d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   )rb   r    r   rx  rZ   r   rJ  s       rP   rH  zHtest_callable_multimetric_same_as_list_of_strings.<locals>.custom_scorer%  s-    Q"1f-&q&1
 	
rS   rI  r   rx  r1  r   r   r   r   rj   r#  rt  r   	r   r7   r#   r\   r]  r   r0  r!  rm   )rH  rZ   r   rx  search_callable
search_strs         rP   1test_callable_multimetric_same_as_list_of_stringsrT  #  s    
 KDAq
b
1C"cC8_m8O cC8_x&<HJ 1NN1a&&&--
8N8N*OOOO&&**@*@@@@  A&&--
8H8HA8N*OOOOrS   c                  2   d } t        ddd      \  }}t        d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 rL   )rb   r    rP  s       rP   rH  zHtest_callable_single_metric_same_as_single_string.<locals>.custom_scorer?  s    QAv&&rS   rI  r   rx  r1  r   r   r   r   rj   Trt  r#  rQ  )rH  rZ   r   rx  rR  rS  search_list_strs          rP   1test_callable_single_metric_same_as_single_stringrX  =  s   ' KDAq
b
1C"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OrS   c                      d } t        ddd      \  }}t        t        d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_namerj   r}   rx  rZ   r   s      rP   
bad_scorerzBtest_callable_multimetric_error_on_invalid_key.<locals>.bad_scorer[  s    ArS   rI  r   rx  r1  r   r   r   r   rj   	good_namert  z`For multi-metric scoring, the parameter refit must be set to a scorer key or a callable to refitr   )r   r#   r7   r   r   r   r\   )r]  rZ   r   r   r:  s        rP   .test_callable_multimetric_error_on_invalid_keyr_  Y  s|     KDAq
vB/	sAh	C	,  
z	- 1  s   A,,A5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$  rj   r}   r\  s      rP   rH  zBtest_callable_multimetric_error_failing_clf.<locals>.custom_scorerq      qzrS   re  r   r   r1  rk  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)rj   rj   r   )r   r  r#   rB  r  r  r   r  r   r\   rB   r   )rH  rZ   r   r   r  r  s         rP   +test_callable_multimetric_error_failing_clfre  n  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 rb  r}   r\  s      rP   rH  zBtest_callable_multimetric_clf_all_fits_fail.<locals>.custom_scorer  rc  rS   re  r   r   r1  rk  r   Fr   r  z1ValueError: Failing classifier failed as requiredz5All the 15 fits failed.+your model is misconfigured.+r  r   r  )rH  rZ   r   r   r  individual_fit_error_messager   s          rP   +test_callable_multimetric_clf_all_fits_failri    s     KDAq

C	
);;<q@	AB
B $W JJC+,. iiM 
z	7 
q!  s   	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   )r2  max_iterr   rj   r   n_features_in_)r   r   r#   r,   r   r\   rl  )r2  rZ   r   gbdtr   r  r~  s          rP   test_n_features_inrn    s     J*5DAq)+Dq!f%J	dJ	'B	D*Q	7Br+,,,r+,,,FF1aLFF1aL
***
***rS   pairwisec                       G  fddt               } |       }d}t        |ddgi      } |j                         d   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y)Stest_search_cv_pairwise_property_delegated_to_base_estimator.<locals>.TestEstimatorc                     diS Nro  r}   rO   ro  s    rP   
_more_tagsz^test_search_cv_pairwise_property_delegated_to_base_estimator.<locals>.TestEstimator._more_tags  s    ))rS   N)rv   rw   rx   rv  ro  s   rP   TestEstimatorrr    s    	*rS   rx  z.BaseSearchCV pairwise tag must match estimatorrc  r   ro  N)r   r#   	_get_tags)ro  rx  rx  attr_messager   s   `    rP   <test_search_cv_pairwise_property_delegated_to_base_estimatorr{    sN    * * /CCL	cMB40	1Br||~j11?<?1rS   c                       G d dt               }  |        }d}dD ]@  }|j                  |       t        |ddgi      }||j                         d   k(  r;J |        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d Zy)Xtest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwisec                     || _         y rL   rw  ru  s     rP   rQ   zatest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise.__init__  s	    $DMrS   c                     d| j                   iS rt  rw  r   s    rP   rv  zctest_search_cv__pairwise_property_delegated_to_base_estimator.<locals>.EstimatorPairwise._more_tags  s    ..rS   N)T)rv   rw   rx   rQ   rv  r}   rS   rP   EstimatorPairwiser~    s    	%	/rS   r  z4BaseSearchCV _pairwise property must match estimatorrE  rw  rc  r   ro  N)r   rt   r#   ry  )r  rx  rz  _pairwise_settingr   s        rP   =test_search_cv__pairwise_property_delegated_to_base_estimatorr    so    /M / 
CIL* M 12#t45 BLLN:$>>LL>MrS   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  rc  r   r   rZ  )metricz2GridSearchCV not identical with precomputed metricN)r   r3   r#   r\   rb   r"   r  )r   r  rZ   r   grid_paramsr   r   preds_originalX_precomputedpreds_precomputedrz  s              rP   ;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6rS   zSearchCV, param_searchr  r   rz  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 rL   )r  )rO   r  s     rP   rQ   z5test_scalar_fit_param.<locals>.TestEstimator.__init__	  s	    DFrS   c                     || _         y rL   )r_)rO   rZ   r   rs       rP   r\   z0test_scalar_fit_param.<locals>.TestEstimator.fit	  s	    DGrS   c                 @    t        j                  t        |            S )Nr_   )rV   r   rU   rd   s     rP   rb   z4test_scalar_fit_param.<locals>.TestEstimator.predict	  s    883q6++rS   rL   )rv   rw   rx   rQ   r\   rb   r}   rS   rP   rx  r  	  s    			,rS   rx  rx  r  )r  )r   r   r   r\   r   r  )r   param_searchrx  modelrZ   r   s         rP   test_scalar_fit_paramr  	  sZ    , , ]_l3EB/DAq	IIabI  ##r)))rS   r  c                     t        t        d      ddi\  }}}} G d dt              }d } |  |       |      }||f|dd}	 |j                  ||fi |	 y )Nrx  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 )N)sample_weightr   r   rj   )r  r\   callabler   r   ndim)rO   rZ   r   r  tuple_of_arraysscalar_paramcallable_paramr_  s          rP   r\   z=test_scalar_fit_param_compat.<locals>._FitParamClassifier.fit/	  s|     GK1MK:!###N+++ ou555"1%**a///"1%**a///KrS   )NNNN)rv   rw   rx   r\   r  r  s   @rP   _FitParamClassifierr  .	  s    
  	 	rS   r  c                       y rL   r}   r}   rS   rP   _fit_param_callablez9test_scalar_fit_param_compat.<locals>._fit_param_callableB	  s    rS   )r  r  r  )r/   r   r   r\   )
r   r  X_trainX_validr`  y_validr  r  r  r  s
             rP   test_scalar_fit_param_compatr  	  sx     *:	"	-*<>*&GWgwm ( (*L9E $W--J
 EIIgw-*-rS   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   rj   re  transformer	predictorr   )transformer__parampredictor__paramar   r  )rV   r  r  randnr   r5   rA   r\   r   r|  rb   r   rE   rm   r   r0  r   rB   rI  r   )	r   r  r  rZ   r   r  rs   rD  rJ  s	            rP   1test_search_cv_using_minimal_compatible_estimatorr  V	  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GrS   c                 @   t        dddd      \  }}t        d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   r  z$score=\(train=[\d\.]+, test=[\d.]+\)zscore=[\d\.]+N)	r   r7   r#   r\   
readouterroutrB  findallrU   )capsysr  rZ   r   r   r   capturedr   s           rP   test_search_cv_verbose_3r  u	  s     #TUVDAq
a
0C#<D- 
c!Qi  "&&H

BHM

+X6u:??rS   r  c                 V   t        d      \  }}t        d      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 )Nrx  r  r   r   rz  )r   clf__Cr   r   trs)r   NTr   r   r  r   r   )r   r7   r   r5   rA   r\   r   named_steps)	r   r  rZ   r   rs   orig_Cr   param_grid_searchr  s	            rP   test_search_estimator_paramr  	  s     B/DAqV,-$@FE]1Fe/12MBCD%v.	$	Rdq*	R@Q	R	V	V	1
B
 %='''))%022d:::rS   enable_slep006c                    t        d      \  }}t        |      }t        j                  j	                  d      }|j                  |      }|j                  |      }t        d      }|ddgii}	t               }
t        |
      j                  d	d
      }t        |d      } | |fdd|d|	j                  ||||       t        |
      sJ |
D ]  }t        |dd||        y)zMTest that *SearchCV forwards metadata correctly when passed multiple metrics.rx  r  r   r   r   r   rj   )registryscore_weightsscore_metadata)r  metadatar   )	my_scorerr   r   r  )r  r  rm   )objr\  split_paramsr  r  N)r   rH   rV   r  r  randr7   r9   r8   set_score_requestr  r\   rU   r:   )r   r  rZ   r   r   r  r  r  rx  r  scorer_registryscorerr   _scorers                 rP   *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'#	

rS   c                    t        d      \  }}t        d      }|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.rx  r  r   r   r   rj   r   r   zis only supported ifr   )r  N)r   r7   r\   r   r   r   rm   )r   r  rZ   r   rx  r  r  s          rP   1test_score_rejects_params_with_no_routing_enabledr  	  s     B/DAq

 C%aSz2	#	1!	10	1	5	5a	;B	z)?	@ #
A"# # #s   A77B )r}   )ry   r  rB  r   collections.abcr   r   	functoolsr   ior   	itertoolsr   r   r  r	   numpyrV   r   scipy.statsr
   r   r   sklearn.baser   r   r   sklearn.clusterr   sklearn.datasetsr   r   r   sklearn.ensembler   sklearn.exceptionsr   sklearn.experimentalr   sklearn.imputer   sklearn.linear_modelr   r   r   sklearn.metricsr   r   r   r   r   r    r!   sklearn.metrics.pairwiser"   sklearn.model_selectionr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   sklearn.model_selection._searchr0   $sklearn.model_selection.tests.commonr1   sklearn.neighborsr2   r3   r4   sklearn.pipeliner5   sklearn.svmr6   r7   %sklearn.tests.metadata_routing_commonr8   r9   r:   sklearn.treer;   r<   sklearn.utils._mockingr=   r>   sklearn.utils._testingr?   r@   rA   rB   rC   rD   rE   rF   sklearn.utils.fixesrG   sklearn.utils.validationrH   rJ   r   r   rZ   r   r   markparametrizer   r   r   r   r   r   r   r  r  r  r  r.  r6  r>  r@  rE  rM  rX  rc  rf  rh  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r;  r@  rJ  r>  rH  ra  ro  rs  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r,  r>  rM  rT  rX  r_  re  ri  rn  r{  r  r  r  r  filterwarningsr  r  r  usefixturesr  r  r}   rS   rP   <module>r     s     	 
 +   $    1 1 F F " 
 < / 9 ( 
   9    9 @ U U % & 
 G D	 	 	 / 1
$ $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>06	/(VF6%P .9 :* .9!( :!(H*:!$} $ 
 
*+Z0 *RG4'9<&HI J 50+:/*// 3 3>78$"84B$VO!d:z "	sQGn56	cAr7^qQR5)5)p ?F!
H#LF& ,.!,q"g 6	
 	,.K!R;Q	
77 (6!.B 8	

 	(6%2w/	
BNDU %' %'P"AJ$+\,J &N3b,*%P-@\L~(6r%(2222 -t}="	{L&ABC%0,$?1M	
	*U	 >*UZ9.P4P8*B8<+" dE]3@ 4@&M2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+;;0 )*	|$	23
 +
< 	|$	23	l+
#
#rS   