
    0Ph!                       d Z ddlZddlZddlmZmZmZ ddlZddl	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 dd	lmZ dd
lmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6 ddl3m7Z8 ddl9m:Z: ddl;m<Z<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZCmDZDmEZE ddlFmGZG  e             e%             e'             e             ed           e#             e&d           e g d           e!             e"            g
ZH e             ed           e$             e             e            gZI eJd eID                       ZKeHeIz   ZL e%             e&             e"            gZM ejN        d          ZO ejP        d          dz  ZQ ejR        g d           ejR        g d           ejR        g d            ejR        g d!          g dg d"fZS e            ZTe	jU        V                    d#          ZWd$ ZXd% ZYd& ZZdd'Z[d( Z\d) Z]d* Z^d+ Z_d, Z`e	jU        a                    d-d.d/g          e	jU        a                    d0g d1          e	jU        a                    d2e%e$g          d3                                     Zbe	jU        a                    d-d.d/g          e	jU        a                    d0g d4          e	jU        a                    d2e%e$g          d5                                     Zcd6 Zde	jU        a                    d2e%e$g          d7             Zed8 Zfe	jU        a                    d2ee%e$g          d9             Zgd: Zhd; Zid< Zjd= Zkd> Zle	jU        a                    d? ejR        dgd@z  dgd@z  z              ejR        g dA           ejm        ddgddgddgg          f ejR        dgdBz  dgdCz  z              ejR        g dD           ejm        dEdFgdEdFgdEdFgg          fg          dG             Zne	jU        a                    dHg dI          e	jU        a                    dJg dK          dL                         ZodM Zpe	jU        a                    dNe#e&g          e	jU        a                    dOg dP          dQ                         Zqe	jU        a                    dOg dR          dS             ZrdT ZsdU ZtdV ZudW ZvdX ZwdY ZxdZ Zyd[ Zzd\ Z{d] Z|d^ Z}d_ Z~d` Zda Ze	jU        a                    dbe!e"g          dc             Zdd Zde Zdf Zdg Zdh Ze	jU        a                    dOg di          dj             Ze	jU        a                    dk e6                      e	jU        a                    dldmd/ ej         ejN        d@           ej        dn          f          fdof          dp                         Ze	jU        a                    dqeC          dr             Zds Zdt Ze	jU        a                    dueCeDz   eEz             dv             Zdw Zdx Ze	jU        a                    dyg dz          d{             Zd| Zd} Zd~ Zd Zd Ze	jU        a                    d2ee$g          e	jU        a                    d-d/d.g          d                         Zd Zd Zd Zd Zd Ze?d             Zd Ze	jU        a                    de#ee&f          d             Zd Zd Zd Ze	jU        a                    dee%e$ef          d             Ze	jU        a                    dg  e            d/f ed/d          d/f e%            d/f e%d/d          d/f e$d/d          d/f e$            d/f e!d          d/f e"d          d/f e#d          d/f ed          d/f e&d          d/f e            d/f ed/d          d/f e'            d/f e            d/f e            d/f ed          d/f ed          d/f ed/d          d.f ed/d          d.f e%d/ej                            d                    d.f e%d/ej                            d                    d.f e!d          d.f e!ej                            d                    d.f e"d          d.f e"ej                            d                    d.f e#d          d.f e#ej                            d                    d.f ed          d.f eej                            d                    d.f e&d          d.f e&ej                            d                    d.f          d             Ze	jU        a                    deLd eLD                       d             Ze	jU        a                    deLd eLD                       d             Ze	jU        a                    deHe          d             Ze	jU        a                    deMd eMD                       d             ZdS )zTest the split module    N)combinationscombinations_with_replacementpermutations)stats)issparse)comb)config_context)load_digitsmake_classification)DummyClassifier)GridSearchCV
GroupKFoldGroupShuffleSplitKFoldLeaveOneGroupOutLeaveOneOutLeavePGroupsOut	LeavePOutPredefinedSplitRepeatedKFoldRepeatedStratifiedKFoldShuffleSplitStratifiedGroupKFoldStratifiedKFoldStratifiedShuffleSplitTimeSeriesSplitcheck_cvcross_val_scoretrain_test_split)_build_repr_validate_shuffle_split_yields_constant_splits)SVC)assert_request_is_empty)_convert_to_numpyget_namespace)yield_namespace_device_dtype_combinationsdevice)MockDataFrame)assert_allcloseassert_array_almost_equalassert_array_equalignore_warnings)_array_api_for_tests)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERS)_num_samples   p      ?	test_size   r;   r4   r4   r;   n_groupsc              #   .   K   | ]}|j         j        V  d S N)	__class____name__).0splitters     h/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/model_selection/tests/test_split.py	<genexpr>rE   U   s(      WW88-6WWWWWW    
   r;   r;   r;   r;   r4   r4   r4      rI   rI   rI   rI   r   r   r   r;   r;   r;   r4   r4   r4   rI   rI   rI   r   r;   r4   rI   r   r;   r4   rI   r   r;   r4   rI   r   r;   r4   r;   r;   r4   r4   r4   rI   rI   rI      rM   rM   rM   rM   rM   rM   rM   1rO   rO   rO   2rP   rP   3rQ   rQ   rQ   rQ   z0error:The groups parameter:UserWarning:sklearn.*c                     | j         j        t          v r|                     |||          S |                     ||          S )Ngroups)r@   rA   GROUP_SPLITTER_NAMESsplit)rC   XyrT   s       rD   _splitrY   p   s@    "&:::~~a6~222~~a###rF   c                     d} d}d}d}d}t          j        ddgddgddgdd	gg          }t          j        g d
          }t          j        g d          }t          j        g d
          }t                      }	t          |          }
t	          |          }t          |          }t                      }t          |          }t          d          }t          g d          }t          |          }d}d}d}d}d}d}d}d}d}| t          | |          |||t          ||          |d|g	}t          t          |	|
|||||||g	|||||||||g	                    D ]\  }\  }}||         |                    |||          k    sJ t           j                            t#          t%          ||||                    t#          t%          ||||                               t%          ||||          D ]M\  }} t          j        |          j        j        dk    sJ t          j        |           j        j        dk    sJ N|t-          |          k    sJ d}!t/          j        t2          |!          5  |	                    d ||           d d d            n# 1 swxY w Y   t/          j        t2          |!          5  |
                    d ||           d d d            d S # 1 swxY w Y   d S )NrM   r4   rG   r;   rI               )r;   r4   rI   rM   r:   r   random_statezLeaveOneOut()zLeavePOut(p=2)z3KFold(n_splits=2, random_state=None, shuffle=False)z=StratifiedKFold(n_splits=2, random_state=None, shuffle=False)LeaveOneGroupOut()LeavePGroupsOut(n_groups=2)zJShuffleSplit(n_splits=10, random_state=0, test_size=None, train_size=None)z.PredefinedSplit(test_fold=array([1, 1, 2, 2]))zBStratifiedGroupKFold(n_splits=2, random_state=None, shuffle=False)iz%The 'X' parameter should not be None.match)nparrayr   r   r   r   r   r   r   r   r   r   	enumeratezipget_n_splitstestingassert_equallistrY   asarraydtypekindreprpytestraises
ValueError)"	n_samplesn_unique_groupsn_splitsr6   n_shuffle_splitsrW   X_1drX   rT   loolpokfskflololoposspssgkfloo_reprlpo_reprkf_reprskf_repr	lolo_repr	lopo_reprss_reprps_repr	sgkf_reprn_splits_expectedrc   cvcv_reprtraintestmsgs"                                     rD   (test_cross_validator_with_default_paramsr   w   s   IOH	A
1a&1a&1a&1a&122A8LLL!!D
AXlll##F
--C
A,,C	xB
(
#
#CD1D	1	%	%	%B		&	&B))DHHCGNH$I-IT  ?GTI 	Y_a  	
 &#r3dBD9
	
 	
  # #=B" !#rq!V'D'DDDDD 	
Aq&))**DD!V1L1L,M,M	
 	
 	
 ""aF33 	6 	6KE4:e$$*/36666:d##).#55555 $r((""""" 2C	z	-	-	- * *q&)))* * * * * * * * * * * * * * *	z	-	-	- * *q&)))* * * * * * * * * * * * * * * * * *s$   5JJ J?K$$K(+K(c                  ,   d} t           j                            d          }|                    dd| df          }|                    dd| f          }|                    dd          }|                    dd| df          }|                    dd| f          }t                      t          d          t                      t                      t                      t                      t                      t                      t          d	
          t                      t                      t!          d          t#          d          t%                      t'          |          g}|D ]}t)          t+          ||||                     t)          t+          ||||                     	 t)          t+          ||||                     d# t,          $ r4}	d}
d                    |
          }|t1          |	          v sJ Y d }	~	d }	~	ww xY wd S )N   r;   r   rI   r4   sizer5   r7   r8   r<   rw   )	test_foldrS   )binary
multiclassz/Supported target types are: {}. Got 'multilabel)rf   randomRandomStaterandintreshaper   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rm   rY   rt   formatstr)ru   rngrW   rX   y_2dy_multilabelrT   	splittersrC   eallowed_target_typesr   s               rD   	test_2d_yr      s   I
)


"
"CAq	1~..AAq	|,,A99RD;;q!9a.;99L[[AYL[11FA!!---###A&)))I"  
! 
!VHa6222333VHaf555666	!!\&AAABBBB 	! 	! 	!#; CJJ$ C #a&&=========	!
! 
!s   2 G
H*HHc                    t          |           t          |          }} |                     |          t                      k    sJ |5|                     |          t          t          |                    k    sJ d S d S r?   )setintersectionunionrange)r   r   ru   s      rD   check_valid_splitr      s}    e**c$ii4E d##suu,,,,{{4  Ci(8(8$9$99999 99rF   c                 l   t          |          }|                     |||          |k    sJ t                      }d}|                     |||          D ]1\  }}	t	          ||	|           |dz  }|                    |	           2||k    sJ |"|t          t          |                    k    sJ d S d S )Nr   )ru   r;   )r3   rj   r   rV   r   updater   )
r   rW   rX   rT   expected_n_splitsru   collected_test_samples
iterationsr   r   s
             rD   check_cv_coverager      s    QI??1a((,===== UUJxx1f-- , ,t%;;;;a
%%d++++ *****%U9-=-=)>)>>>>> >>rF   c                  J   t          j        ddgddgddgg          } t          j        ddgddgddgddgd	d
gg          }t          t          t	          d                              |           f t          j        g d          }t          d          }t          j        t          d          5  t          |                    ||                     d d d            n# 1 swxY w Y   t          d          }t          j        t          |                    }t          j        t          d          5  t          |                    |||                     d d d            n# 1 swxY w Y   t          j                    5  t          j        d           t!          |||d d           d d d            n# 1 swxY w Y   t          j                    5  t          j        d           t!          ||||d           d d d            n# 1 swxY w Y   t          j        g d          }t          j        t                    5  t          |                    ||                     d d d            n# 1 swxY w Y   t          j        t                    5  t          |                    ||                     d d d            n# 1 swxY w Y   t          j        t                    5  t	          d           d d d            n# 1 swxY w Y   t          j        t                    5  t	          d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d           d d d            n# 1 swxY w Y   t          j        t          |          5  t          d           d d d            n# 1 swxY w Y   t          j        t          |          5  t          d           d d d            n# 1 swxY w Y   t          j        t          |          5  t          d           d d d            n# 1 swxY w Y   t          j        t                    5  t	          d           d d d            n# 1 swxY w Y   t          j        t                    5  t	          d           d d d            n# 1 swxY w Y   t          j        t                    5  t          d           d d d            n# 1 swxY w Y   t          j        t                    5  t          d           d d d            n# 1 swxY w Y   t          j        t                    5  t          d           d d d            n# 1 swxY w Y   t          j        t                    5  t          d           d d d            n# 1 swxY w Y   t          j        t$                    5  t	          dd            d d d            d S # 1 swxY w Y   d S )Nr;   r4   rI   rM   r[   r\   r]   r^   	   rG   )rI   rI   r   r   rI   zThe least populated classrd   ignorerT   r   )rI   rI   r   r   r4   r   z>k-fold cross-validation requires at least one train/test split      ?       @rw   shuffle)rf   rg   rt   nextr   rV   r   rr   warnsWarningr   arangelenwarningscatch_warningssimplefilterr   rs   	TypeError)X1X2rX   skf_3sgkf_3naive_groupserror_strings          rD   test_kfold_valueerrorsr     s%
   	Aq6Aq6Aq6*	+	+B	Aq6Aq6Aq6Aq6Ar7;	<	<BuQxx~~b))** 	"""##AAE	g%@	A	A	A ! !U[[Q   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! "!$$F9SVV$$L	g%@	A	A	A 0 0V\\"a..///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
	 	"	" J Jh'''%QtqIIIIJ J J J J J J J J J J J J J J 
	 	"	" S Sh'''&"aPQRRRRS S S S S S S S S S S S S S S 	"""##A	z	"	" ! !U[[Q   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	z	"	" " "V\\"a  !!!" " " " " " " " " " " " " " " 
z	"	"  a              	z	"	"  a              SL	z	6	6	6                	z	6	6	6                	z	6	6	6    Q                             	z	6	6	6    Q                              
z	"	"  c


              	z	"	"  c


              	z	"	"                	z	"	"                	z	"	" " "S!!!" " " " " " " " " " " " " " "	z	"	" " "S!!!" " " " " " " " " " " " " " " 
y	!	! ( (q$''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (sV  0$C  C$'C$6%E''E+.E+)F::F>F>)HHH$I77I;>I;$KKK/LLL/MMM3NNN5OOO7PPP9QQQ9RRR9SSS9TTT9UUU9VVV9WWW9XXXc                  2   t          j        d          } t          d          }t          || d d d           t          j        d          }t          d          }t          ||d d d           dt          d                              |          k    sJ d S )N   rI   )rX   rT   r      r[   )rf   onesr   r   rj   )r   r|   r   s      rD   test_kfold_indicesr   Z  s    	B	qBb"TQGGGG 
B	qBb"TQGGGG a%%b))))))))rF   c                  p   ddgddgddgddgd	d
gg} t          d                              | d d                   }t          |          \  }}t          |ddg           t          |ddg           t          |          \  }}t          |ddg           t          |ddg           t          d                              |           }t          |          \  }}t          |g d           t          |ddg           t          |          \  }}t          |ddg           t          |g d           d S )Nr;   r4   rI   rM   r[   r\   r]   r^   r   rG   r   r   r   r;   r4   )r   rV   r   r-   )r   splitsr   r   s       rD   test_kfold_no_shuffler   j  s>   a&1a&1a&1a&1b'	2B1XX^^BssG$$Fv,,KE4taV$$$uq!f%%%v,,KE4taV$$$uq!f%%%1XX^^BFv,,KE4tYYY'''uq!f%%%v,,KE4taV$$$uiii(((((rF   c            	      L   t          j        d          g d}} t          d                              | |          }t	          |          \  }}t          |ddg           t          |ddg           t	          |          \  }}t          |ddg           t          |ddg           t          j        d          g d}} t          d                              | |          }t	          |          \  }}t          |g d	           t          |g d
           t	          |          \  }}t          |g d
           t          |g d	           dt          d                              | |          k    sJ t          j        d          } g d}g d}t           j                            t          t          d                              | |                    t          t          d                              | |                               g d}t          j
        |          } t           j                            t          t          d                              | |                    t          t          d                              | |                               d S )NrM   )r;   r;   r   r   r4   r   r;   rI   r]   )r;   r;   r;   r   r   r   r   )r   r;   rI   rM   )r4   r[   r\   r[   )rO   rO   rO   0r   r   r   )r   r;   r   r;   r   r;   r   r;   )rf   r   r   rV   r   r-   rj   rk   rl   rm   	ones_liker   )rW   rX   r   r   r   y1y2s          rD    test_stratified_kfold_no_shuffler     sv    71::|||qAQ%%a++Fv,,KE4taV$$$uq!f%%%v,,KE4taV$$$uq!f%%%71::,,,qAQ%%a++Fv,,KE4t\\\***uiii(((v,,KE4tYYY'''ulll+++ ""//1555555 	

A	,	,	,B			BJ_Q%%a,,--tOA4F4F4L4LQPR4S4S/T/T  
 	!  A
QAJ_Q%%a++,,d588>>!Q3G3G.H.H    rF   r   FTk)rM   r[   r\   r]   r^   r   rG   kfoldc                 &   d}t          j        |          }t          j        dgt          d|z            z  dgt          d|z            z  z   dgt          d|z            z  z             }t          j        t          |                    }t          j        |          t          |          z  }g }|sd nd}	 || |	|          }
t          |
|||	          D ]\  }}t          t          j        ||                   t          |          z  |d
           t          t          j        ||                   t          |          z  |d
           |	                    t          |                     t          j
        |          dk    sJ d S )N  rM   皙?r   {Gz?r;   {Gz?r`   r   rS   {Gz?atol)rf   r   rg   intr   r   bincountrY   r+   appendptp)r   r   r   ru   rW   rX   rT   distr
test_sizesr`   r}   r   r   s                rD   test_stratified_kfold_ratiosr     s    I
	A
	
c$"####D9$%%
%	&#D9$%%
%	&	 	A Ys1vvFKNNSVV#EJ&-44AL
%g
>
>
>Cc1a777 % %tAeH--E

:EMMMMAdG,,s4yy8%dKKKK#d))$$$$6*""""""rF   )rM   r\   r]   c                    
 d}t          j        dgt          d|z            z  dgt          d|z            z  z   dgt          d|z            z  z             }t          j        t	          |                    
t          j        t	          |                    
 fd} ||          }t          g d	          D ]*}t          j        ||          } ||          }	|	|k    sJ +d S )
Nd   r4   r   r   r   r;   r   c                 b    sd nd}d t           |          |           D             S )Nr   c                 P    g | ]#\  }}t          |          t          |          f$S  )rm   )rB   r   r   s      rD   
<listcomp>zNtest_stratified_kfold_label_invariance.<locals>.get_splits.<locals>.<listcomp>  s=     
 
 
t %[[$t**%
 
 
rF   r   rS   )rY   )rX   r`   rW   rT   r   r   r   s     rD   
get_splitsz:test_stratified_kfold_label_invariance.<locals>.get_splits  s^    #*1tt
 
%alGDDD	     
 
 
 	
rF   r   )rf   rg   r   r   r   r   r   take)r   r   r   ru   rX   r   splits_basepermy_permsplits_permrW   rT   s   ```       @@rD   &test_stratified_kfold_label_invariancer     s-   
 I
	
c$"####D9$%%
%	&#D9$%%
%	&	 	A
 	AAYs1vvF

 

 

 

 

 

 

 

 

 *Q--KYYY'' * *q!! j((k)))))* *rF   c                  @   t          dd          D ]} t          d                              t          j        |                     }d |D             }t          j        |          t          j        |          z
  dk    sJ t          j        |          | k    sJ d S )N   r   r[   rW   c                 2    g | ]\  }}t          |          S r   r   rB   _r   s      rD   r   z&test_kfold_balance.<locals>.<listcomp>  s"    ---wq$T---rF   r;   )r   r   rV   rf   r   maxminsum)rc   r|   sizess      rD   test_kfold_balancer    s    2r]] " "1XX^^bgajj^))--"---uu-!3333ve}}!!!!!" "rF   c           
         t          j        d          }dgdz  dgdz  z   }t          j        t          |                    }dD ]} | d|          }t	          dd          D ]}t          ||d |         |d |         |d |                   }d	 |D             }t          j        |          t          j        |          z
  dk    sJ t          j        |          |k    sJ d S )
Nr   r   rI   r;      TFr   r   c                 2    g | ]\  }}t          |          S r   r   r   s      rD   r   z0test_stratifiedkfold_balance.<locals>.<listcomp>  s"    22271dSYY222rF   )	rf   r   r   r   r   rY   r  r  r  )	r   rW   rX   rT   r   r   rc   r}   r  s	            rD   test_stratifiedkfold_balancer    s   
 	A	
a1#(AYs1vvF  & &U1g&&&r2 	& 	&AQrrUAbqbE6"1":66C22c222EF5MMBF5MM1a77776%==A%%%%%	&& &rF   c                  @   t          d          } t          ddd          }t          ddd          }t          j        d          }t          j        d          }t	          |                     |          |                    |          |                    |                    D ]b\  \  }}\  }}\  }	}
t          |||	fd          D ]:\  }}t          t          j        ||                    t          |          k    sJ ;d||<   ct          |          dk    sJ d S )NrI   Tr   r   r`   r;   ,  r4   )
r   rf   r   zerosri   rV   r   r   intersect1dr  )r|   kf2kf3rW   	all_foldstr1te1tr2te2tr3te3tr_atr_bs                rD   test_shuffle_kfoldr    s   	qB
4a
0
0
0C
4a
0
0
0C
AI.1
SYYq\\399Q<</ /  *
cJS#
c 'S#:: 	? 	?JD$r~dD1122c#hh>>>>> 	# y>>S      rF   c                 n   t          j        d          }dgdz  dgdz  z   }t          j        t          |                    }t          j        d          }dgdz  dgdz  z   }t          j        t          |                    } | ddd	          }t           j                            t          t          ||||                    t          t          ||||                                | ddt           j        	                    d          	          }t          ||f||f||f          D ]}t          t          |g|R  t          |g|R            D ]\\  \  }	}
\  }	}t          j        t                    5  t           j                            |
|           d d d            n# 1 swxY w Y   ]d S )
N   r   r]   r;   r^      rI   Tr  )rf   r   r   r   rk   rl   rm   rY   r   r   ri   rr   rs   AssertionErrorr-   )r   rW   rX   groups_1r   r   groups_2r|   datar  test_atest_bs               rD   2test_shuffle_kfold_stratifiedkfold_reproducibilityr'    s   
A	
a1#'AyQ  H	B
qA37	ByR!!H 
q$Q	/	/	/BJVB1h''(($vb!Q/I/I*J*J   
q$RY-B-B1-E-E	F	F	FBQGaWx&:;; > >(+F2,=,=,=,=vb?P4?P?P?P(Q(Q 	> 	>$KQ!V
 ~.. > >
--ff===> > > > > > > > > > > > > > >	>> >s   ;!F((F,/F,c                     t          j        d          } dgdz  dgdz  z   }t          ddd          }t          ddd          }t          |                    | |          |                    | |                    D ]-\  \  }}\  }}t          |          t          |          k    sJ .t          || |d d           t          j        d	          }dgdz  dgdz  z   }t          ddd          }t          ddd          }t          d
 |                    ||          D                       }	t          d |                    ||          D                       }
|	|
k    sJ d S )N(   r      r;   r[   Tr  r   rG   c                 8    g | ]}t          |d                    S r;   tuplerB   ss     rD   r   z0test_shuffle_stratifiedkfold.<locals>.<listcomp>P  "    ===ad===rF   c                 8    g | ]}t          |d                    S r,  r-  r/  s     rD   r   z0test_shuffle_stratifiedkfold.<locals>.<listcomp>Q  r1  rF   )	rf   r   r   ri   rV   r   r   r   sorted)X_40rX   kf0kf1r  test0test1rW   r  	test_set1	test_set2s              rD   test_shuffle_stratifiedkfoldr;  >  s~    72;;D	
bA38A
!T
:
:
:C
!T
:
:
:C"%ciia&8&8#))D!:L:L"M"M ( (
EJQ5zzSZZ'''''c441EEEE
 		"A	
a1#'A
!T
:
:
:C
!T
:
:
:C==SYYq!__===>>I==SYYq!__===>>I	!!!!!!rF   c                     t          j        d          } dgdz  dgdz  z   }t          j        d          dz  t          ddd          }t          ddd          }fd	|                    | d           D             }fd
|                    | d           D             }t          ||          D ]\  }}||k    s
J d            t          || |d           t          || |d           d S )Nr)  r   r*  r;   rI   rM   Tr  c                 @    g | ]\  }}t          |                   S r   r   rB   r  test_idxrT   s      rD   r   z+test_shuffle_groupkfold.<locals>.<listcomp>_  7       "-!XF8  rF   c                 @    g | ]\  }}t          |                   S r   r>  r?  s      rD   r   z+test_shuffle_groupkfold.<locals>.<listcomp>b  rA  rF   z6Test groups should differ with different random states)r   )rf   r   r   r   rV   ri   r   )	rW   rX   gkf0gkf1test_groups0test_groups1g0g1rT   s	           @rD   test_shuffle_groupkfoldrI  U  sC    	A	
bA38AYr]]aFaA666DaA666D   15AtV1L1L  L   15AtV1L1L  L lL11 R RBRxxxQxxxx dAq&A>>>>dAq&A>>>>>>rF   c                     t           j        d d         t           j        d d         }} t          dd          }d}t	          |d          }t          || ||                                          }d	|k    sJ |d
k    sJ t	          |dd          }t          || ||                                          }|d	k    sJ t	          |dd          }t          || ||                                          }|d	k    sJ t          |          }t          || ||                                          }d|k    sJ |d
k    sJ d S )NiX  rG   g{Gzt?)CgammarI   Fr   r   gq=
ףp?皙?Tr   r  r;   gGz?)digitsr$  targetr#   r   r   meanr   )rW   rX   modelrw   r   
mean_scores         rD   1test_kfold_can_detect_dependent_samples_on_digitsrT  m  sy    ;ttfmDSD1qA"E"""EH	%	0	0	0B 144499;;J* 
xA	6	6	6B 144499;;J	xA	6	6	6B 144499;;J 
	"	"B 144499;;J*rF   c                     t          d          } t          j        dgdz  dgdz  z             }t          j        |                              dd          }t          j        d          }t          j        |          t          |          z  }g }|                     |||          D ]\  }}t          j	        ||         ||                   j
        dk    sJ t          t          j        ||                   t          |          z  |d	
           t          t          j        ||                   t          |          z  |d	
           |                    t          |                     t          j        |          dk    sJ d S )NrI   r   r;   r\   r      r   )r;   r4   rI   rM   r[   r\   r;   r;   r4   r4   rI   rI   rM   rM   r[   r[   r\   r\   r   r   )r   rf   rg   r   r   rn   r   r   rV   r  r   r+   r   r   )r   rX   rW   rT   r   r   r   r   s           rD   #test_stratified_group_kfold_trivialrW    sa   +++D
!qA38#$$A
QA&&AZNOOFKNNSVV#EJzz!Q// % %t~fUmVD\::?1DDDDAeH--E

:EMMMMAdG,,s4yy8%dKKKK#d))$$$$6*""""""rF   c                     t          d          } t          j        dgdz  dgdz  z             }t          j        |                              dd          }t          j        g d          }t          j        d	d
gddgddgg          }g }t          |                     |||          |          D ]\  \  }}}t          j        ||         ||                   j	        dk    sJ t          j
        ||                   t          |          z  }	t          |	|d           |                    t          |                     t          j        |          dk    sJ d S )NrI   r   r;   r\   r   rV  r   )r;   r4   rI   rI   rM   rM   r;   r;   r4   r4   rI   rM   r[   r[   r[   r\   r\   r\   g-?gsh|??gZd;O?gZd;O?r7   MbP?r   )r   rf   rg   r   r   rn   ri   rV   r  r   r   r   r+   r   r   )
r   rX   rW   rT   expectedr   r   r   expect_dist
split_dists
             rD   'test_stratified_group_kfold_approximater]    sY     +++D
!qA38#$$A
QA&&AXLLLMMFzE5>E5>C:FGGHJ&)$**Q6*B*BH&M&M % %"{~fUmVD\::?1DDDD[4))CII5

Ke<<<<#d))$$$$6*""""""rF   zy, groups, expectedr\   )r;   r;   r4   r4   rI   rI   rM   rM   r[   r[   r\   r\   r   rI   )r;   r;   r;   r4   r4   r4   rI   rI   rI   rM   r[   r\         ?      ?c                    t          d          }t          j        |                               dd          }t	          |                    || |          |          D ]p\  \  }}}t          j        ||         ||                   j        dk    sJ t          j        | |                   t          |          z  }t          ||d           qd S )NrI   r   r   r;   r   rY  r   )r   rf   r   r   ri   rV   r  r   r   r   r+   )	rX   rT   rZ  r   rW   r   r   r[  r\  s	            rD   .test_stratified_group_kfold_homogeneous_groupsra    s       +++D
QA&&A&)$**Q6*B*BH&M&M = ="{~fUmVD\::?1DDDD[4))CII5

Ke<<<<<	= =rF   	cls_distr))g?333333?)g333333?ffffff?)皙?rN  )rN  re  r=   )r[   r   F   c                 `   d}t          |          }t          |          }t          j                            d          }d}|                    d||           }t          j        |                              dd          }|                    ||          }	|                    |||		          }
|                    |||		          }d}d}t          |
|          D ]\  \  }}\  }}t          j
        |	|         |	|                   j        dk    sJ t          j        ||                   t          |          z  }t          j        ||                   t          |          z  }|t          j        || 
          z  }|t          j        || 
          z  }||z  }||z  }||k    sJ d S )Nr[   r   r   r   r4   )r   r6   r   r;   rS   )qk)r   r   rf   r   r   choicer   r   rV   ri   r  r   r   r   r   entropy)rb  r=   rw   r   gkfr   n_pointsrX   rW   g
sgkf_folds	gkf_folds	sgkf_entrgkf_entr
sgkf_train	sgkf_testr  gkf_test
sgkf_distr	gkf_distrs                       rD   /test_stratified_group_kfold_against_group_kfoldrw    s   
 H222D
h
'
'
'C
)


"
"CH

18y
11A
QA&&A

8X&&AAq++J		!Qq	))IIH25j)2L2L ; ;.Y!X~a
mQy\::?1DDDD[9..Y?
K(,,s8}}<	U]:)<<<<	EM)	::::IH      rF   c                     t          dd                              t                    } t          dd                              t                    }t          t          j        d          d                              t                    }t          t          d          d                              t                    }t          | |||          D ]\  }}}}t          |d         |d                    t          |d         |d                    t          |d         |d                    t          |d         |d                    t          |d         |d                    t          |d         |d                    d S )Nre  r   r9   r`   r4   r;   )r   rV   rW   rf   int32r   ri   r-   )ss1ss2ss3ss4t1t2t3t4s           rD   test_shuffle_splitr    sR   
1
5
5
5
;
;A
>
>C

3
3
3
9
9!
<
<C
!1
=
=
=
C
CA
F
FC
Qa
8
8
8
>
>q
A
ACc3S11 ) )BB2a5"Q%(((2a5"Q%(((2a5"Q%(((2a5"Q%(((2a5"Q%(((2a5"Q%(((() )rF   split_classztrain_size, exp_train, exp_test))Nr   r;   r^   r^   r4   rN  r^   r4   c                 
   t          j        d          }t          j        d          }t           | |                              ||                    \  }}t	          |          |k    sJ t	          |          |k    sJ d S NrG   
train_size)rf   r   r   rV   r   )r  r  	exp_trainexp_testrW   rX   X_trainX_tests           rD   $test_shuffle_split_default_test_sizer    s     	A
A;;*===CCAqIIJJOGVw<<9$$$$v;;(""""""rF   ))Nr^   r4   )r]   r]   rI   )rd  r]   rI   c                 2   t          j        d          }t          j        d          }t          d          }t          t	          |                               |||                    \  }}t          |          |k    sJ t          |          |k    sJ d S r  )rf   r   r   r   r   rV   r   )r  r  r  rW   rX   rT   r  r  s           rD   *test_group_shuffle_split_default_test_sizer    s     	A
A2YYF,
CCCII!QPVWWXXOGVw<<9$$$$v;;(""""""rF   c                     t          j        d          } t          j        g d          }t          j        t
                    5  t          t          dd                              | |                     d d d            n# 1 swxY w Y   t          j        t
                    5  t          t          dd                              | |                     d d d            n# 1 swxY w Y   t          j        t
                    5  t          t          ddd                              | |                     d d d            n# 1 swxY w Y   t          j        d          } t          j        g d	          }t          j        t
                    5  t          t          d
                              | |                     d d d            n# 1 swxY w Y   t          j        t
                    5  t          t          d                              | |                     d d d            d S # 1 swxY w Y   d S )Nr]   )r   r;   r;   r;   r4   r4   r4   rI   re  r8   r4   r9   r  r   )	r   r   r   r;   r;   r;   r4   r4   r4   r  )	rf   r   rn   rr   rs   rt   r   r   rV   rW   rX   s     rD   "test_stratified_shuffle_split_initr  !  se   
	!A

((())A	z	"	" C C#A555;;AqAABBBC C C C C C C C C C C C C C C 
z	"	" A A#A33399!Q??@@@A A A A A A A A A A A A A A A 
z	"	" O O#AqAAAGG1MMNNNO O O O O O O O O O O O O O O 		!A

...//A 
z	"	" ? ?#q111771==>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?	z	"	" > >#a00066q!<<===> > > > > > > > > > > > > > > > > >sZ   3BB
B'3C&&C*-C*
4E

EE2GGG:2H99H= H=c                  *   t          j        g d          } d}d}t          d||d                              t          j        t          |                     |           }|D ]/\  }}t          |          |k    sJ t          |          |k    sJ 0d S )NrK   r[   rG   r\   r   )r9   r  r`   )rf   rg   r   rV   r   r   )rX   r9   r  sssr   r   s         rD   0test_stratified_shuffle_split_respects_test_sizer  :  s    
>>>??AIJ
 	Y:A  eBGCFFOOQ   & &t5zzZ''''4yyI%%%%%& &rF   c                     t          j        g d          t          j        g d          t          j        g ddz            t          j        g d          t          j        dgdz  dgd	z  z             t          j        d
 t          d          D                       g dg dg} | D ]}t	          ddd                              t          j        t          |                    |          }t          j        |          }t          j	        dt          |          z            }t          |          |z
  }|D ]|\  }}t          t          j        ||                   t          j        ||                              t          j        t          j        ||         d          d                   t          t          ||                             z  }t          j        t          j        ||         d          d                   t          t          ||                             z  }t          ||d           t          |          t          |          z   |j        k    sJ t          |          |k    sJ t          |          |k    sJ t          t          j        ||          g            ~d S )NrH   rJ   rK   r4   rL   r   i   r;   2   c                      g | ]}|gd |z   z  S )r   r   )rB   rc   s     rD   r   z6test_stratified_shuffle_split_iter.<locals>.<listcomp>M  s"    ;;;AsQw;;;rF   r   rN   r\   gQ?r   ry  T)return_inverse)rf   rg   concatenater   r   rV   r   r   
asanyarrayceilr-   uniquer   floatr,   r   r  )	ysrX   r  r9   r  r   r   p_trainp_tests	            rD   "test_stratified_shuffle_split_iterr  F  s   
55566
55566
>>>BCC
AAABB
"qcBh&''
;;r;;;<<,,,DDD	
B  @ @$Q$QGGGMMGCFFOOQ
 
 M! GD3q66M**	VVi'
 	@ 	@KE4ry522BIag4F4FGGGk")AeHT"J"J"J1"MNNQVAeHR R G [1T74!H!H!H!KLLuAdGP P F &gvq999u::D		)QV3333u::++++t99	))))r~eT::B????	@@ @rF   c                  x   d} dfd}dD ]}t          j        |dz  ddgz            }t          d| z  d	          }dg|z  }dg|z  }d}|                    t          j        |          |
          D ]-\  }}	|dz  }||f||	ffD ]\  }
}|D ]}|
|xx         dz  cc<   .|k    sJ t          |d| z  dd| z  z
            \  }}t          |          |k    sJ t          |	          |k    sJ t          t          |                              |	                    dk    sJ t          j	        |          }|j
        d| z  k    sJ ||z   t          |          k    sJ t          |          dk    sJ t          |          |z  }t          |          |z  } |||            |||           d S )Nr[   r   c                     dz  }t          j        |          }| D ]'}|                    |          }||k    s
J d            (d S )N皙?z=An index is not drawn with chance corresponding to even draws)r   binompmf)
idx_countsr6   	thresholdbfcountprobrw   s         rD   assert_counts_are_okz@test_stratified_shuffle_split_even.<locals>.assert_counts_are_okq  sj     8O	[1%% 	O 	OE66%==Dy   N !   	O 	OrF   )r\      r4   r   r;         ?rw   r9   r`   r  r  )rf   rg   r   rV   r   r!   r   r   r   r  r9   r  )n_foldsr  ru   rT   r   train_countstest_countsn_splits_actualr   r   counteridsidn_trainn_testgroup_counts	ex_test_p
ex_train_prw   s                     @rD   "test_stratified_shuffle_split_evenr  k  sl    GH	O 	O 	O 	O 	O   5  5	9>aV344'wQ
 
 
 sYcIo!<<"')*<*<<GG 	% 	%KE4q O".!6d8K L % % % %BBKKK1$KKKK%% (****1w3#-;P
 
 
 5zzW$$$$4yyF""""3u::**40011Q6666y((3=00003v;;....<  A%%%%&MMI-	7^^i/
\:666[)4444A 5  5rF   c                     g ddz  ddgdz  z   } t          j        |           }t          ddd          }t          |                    || 	                    \  }}t          t          j        ||          g            t          t          j        ||          t          j        t          |                                d S )
Nr   r;   r4   rI   rI   rM   r[   r;   r7   r   r  r  )
rf   r   r   r   rV   r-   r  union1dr   r   )rX   rW   r  r   r   s        rD   4test_stratified_shuffle_split_overlap_train_test_bugr    s     	qAq6A:%A
QA
 !s
K
K
KCsyy1y**++KE4 r~eT22B777 rz%..	#a&&0A0ABBBBBrF   c            	         t          j        ddgddgddgddgg          t          j        ddgddgddgddgg          fD ]+} t          j        |           }t          ddd          }t	          |                    ||                     \  }}| |         }| |         }t          t          j        ||          g            t          t          j        ||          t          j	        t          |                                t          j        | d d df                   }|t          j        |d d df                   k    sJ |t          j        |d d df                   k    sJ -d S )Nr   r;   r7   r  r  )rf   rg   r   r   r   rV   r-   r  r  r   r   rQ  )rX   rW   r  r   r   y_trainy_testexpected_ratios           rD   (test_stratified_shuffle_split_multilabelr    s{    	1a&1a&1a&1a&122
1a&1a&1a&1a&122 7 7 LOO$a3QOOO399qA9..//tE(4 	2>%66;;; 	2:eT22BIc!ff4E4EFFF 111a4))A!7!777771!6!666666)7 7rF   c                  
   g ddgdz  z   g dz   } g ddgdz  z   g dz   }t          j        | gdz  |gdz  z             }t          j        |          }t          ddd          }t	          |                    ||	                    \  }}||         }||         }t          j        |d d d
f                   }	|	t          j        |d d d
f                   k    sJ |	t          j        |d d d
f                   k    sJ d S )N)r;   r   r;   r   r   r;   rG   r   r7   r  r  rM   )rf   rg   r   r   r   rV   rQ  )
row_with_many_zerosrow_with_many_onesrX   rW   r  r   r   r  r  r  s
             rD   4test_stratified_shuffle_split_multilabel_many_labelsr    s+    $))qcDj0999<"aS4Z/)));
%&+/A.BS.HHIIA
QA
 !s
K
K
KCsyy1y**++KE4hGtWF WQqqq!tW%%NRWWQQQT]333333RWVAAAqD\22222222rF   c                      t          j        dd          } g }g }t          t          dd                              t
                              D ]7\  }\  }}|                    |           |                    |           || |<   8t          |           }t          t          j	        |                     |
                                k    sJ t          |                                 \  }}t          ||           t          ||           d S )NrG   g      r[   Tr
  )rf   fullrh   r   rV   rW   r   r   r   r  rj   ri   r-   )	foldskf_trainkf_testrc   	train_indtest_indr   ps_trainps_tests	            rD   %test_predefinedsplit_with_kfold_splitr    s    GBEHG$-eAt.D.D.D.J.J1.M.M$N$N    Ix	"""x   h			Bry  BOO$5$55555RXXZZ(Hgx***w(((((rF   c                  >   t           D ]} t          j        t          |                     x}}d}d}t	          ||d          }t          |           |                    |||           |k    sJ t          j        |           }t          j        |           }|	                    |||           D ]h\  }}	t          j        ||                   }
t          j        ||	                   }t          j
        t          j        ||         |                    rJ t          j
        t          j        ||	         |
                    rJ ||         j        ||	         j        z   |j        k    sJ t          t          j        ||	          g            t          t          |          t!          |t          |          z            z
            dk    sJ t          t          |
          t!          d|z
  t          |          z            z
            dk    sJ jd S )Nr\   gUUUUUU?r   ry  rS   r;   r  )test_groupsrf   r   r   r   rq   rj   r  rn   rV   anyisinr   r-   r  absround)groups_irW   rX   rw   r9   slol_uniquelr   r   l_train_uniquel_test_uniques               rD   test_group_shuffle_splitr    s    ! !H&&&A	IANNN 	S			 1X66(BBBB9X&&Jx  99Q(9;; 	 	KE4Yqx00NIag..Mvbgah>>?????vbgag~>>????? U8=1T7</169999 r~eT::B??? s=))E)c(mm2K,L,LLMMQRRRRRC''%yCMM0Q*R*RRSSWXXXXXX#	! !rF   c            
         t                      } t          d          }t          d          }t          |           dk    sJ t          |          dk    sJ t          |          dk    sJ t          t          d                    dk    sJ t          | df|df|dff          D ]n\  }\  }}t          t                    D ]O\  }}t          t          j        |                    }|dk    r|n
||dz
  z  dz  }	t          j        t          |                    x}
}|	                    |
||	          |	k    sJ t          j
        |          }|                    |
||	          D ]\  }}t          t          j        ||         ||                                                   g            t          |          t          |          z   t          |          k    sJ t          j        ||                   j        d
         s
J |            Qp| 	                    d d g d          dk    sJ | 	                    g d	          dk    sJ |	                    d d t          j        d                    dk    sJ |	                    t          j        d          	          dk    sJ t#          j        t&                    5  | 	                    d d dt          j        dg           d d d            n# 1 swxY w Y   t#          j        t&                    5  |	                    d d dt          j        dg           d d d            n# 1 swxY w Y   d}t#          j        t&          |          5  | 	                    d d d            d d d            n# 1 swxY w Y   t#          j        t&          |          5  |	                    d d d            d d d            d S # 1 swxY w Y   d S )Nr;   r<   r4   ra   zLeavePGroupsOut(n_groups=1)rb   rI   zLeavePGroupsOut(n_groups=3)rS   r   )abcr  r  )r  皙?r  g333333?rM   r\   g        z*The 'groups' parameter should not be None.rd   )r   r   rq   rh   r  r   rf   r  r   rj   rn   rV   r-   r  tolistshaper   rr   rs   rt   naninf)logolpgo_1lpgo_2jr   p_groups_outrc   r  r=   rw   rW   rX   
groups_arrr   r   r   s                   rD   test_leave_one_p_group_outr    s   Da(((Fa(((F ::-----<<88888<<88888+++,,0MMMMM!*T1I{VQK+P!Q!Q J JB$[11 	J 	JKAx29X..//H#/1#4#4xx(hQRl:SVW:WHGCMM***A ??1a?99XEEEEH--J  "xx1Xx>> J Jt"N:e#4j6FGGNNPPRT  
 5zzCII-X>>>> yD!1228;II\IIIIJ	J2 T4)B)B)BCCqHHHH$8$8$899Q>>>>tT29Q<<88A====bill33q8888 
z	"	" : :$sBFC&8999: : : : : : : : : : : : : : :	z	"	" < <D$bfc(:;;;< < < < < < < < < < < < < < < 7C	z	-	-	- , ,$d+++, , , , , , , , , , , , , , ,	z	-	-	- . .D$---. . . . . . . . . . . . . . . . . .sH   %K==LL!%MMM:NN"%N"O))O-0O-c                     t          j        g d          } t          j        t          |                     }t          j        | d          }t	                                          ||           }t	                                          ||           }t          d                              ||           }t          d                              ||           }d|d d <   ||f||ffD ]A\  }}t          ||          D ]+\  \  }	}
\  }}t          |	|           t          |
|           ,Bdt          d          	                    ||| 	          k    sJ dt	                      	                    ||| 	          k    sJ d S )
N)r   r;   r4   r;   r;   r4   r   r   T)copyrS   r4   r<   r   rI   )rX   rT   )
rf   rg   r   r   r   rV   r   ri   r-   rj   )rT   rW   groups_changingr~   lolo_changinglplolplo_changingllollo_changingr   r   
train_chan	test_chans                rD   $test_leave_group_out_changing_groupsr  M  s    X...//F
FAhvD111O##Af#55D$&&,,Qv,>>MA&&&,,Qv,>>D#Q///55a5GGMOAAA#]3dM5JK 0 0\69#|6L6L 	0 	02MUD2J	uj111tY////	0
 +++88a8OOOOOO ""//Qv/FFFFFFFFrF   c                  v   t          j        g d          } t          j        t          |                     }t	          t                                          ||                     }g dddgfg dddgfg d	d
dgfg}|D ]7\  }}t          |          \  }}t          ||           t          ||           8d S )N)r4   r4   r   r   r;   r;   rS   )r   r;   rM   r[   r4   rI   r  rM   r[   r4   rI   rM   r[   r   r;   )	rf   rg   r   r   iterr   rV   r   r-   )rT   rW   r   expected_indicesexpected_trainexpected_testr   r   s           rD   %test_leave_group_out_order_dependencer  c  s     X((())F
FA"$$**1V*<<==F 
1v	1v	1v *: 0 0%6llt5.1114////0 0rF   c                     t          j        d          x} x}}t          j        d          }t	          j        t          |          5  t          t                      	                    | ||                     d d d            n# 1 swxY w Y   t          j        d          x} x}}t          j        d| d          }t	          j        t          |          5  t          t                      	                    | ||                     d d d            n# 1 swxY w Y   t          j        d          x} x}}t          j        d| d          }t	          j        t          |          5  t          t          d	
          	                    | ||                     d d d            n# 1 swxY w Y   t          j        d	          x} x}}t          j        d| d          }t	          j        t          |          5  t          t          d	
          	                    | ||                     d d d            d S # 1 swxY w Y   d S )Nr   zFound array with 0 sample(s)rd   r;   z:The groups parameter contains fewer than 2 unique groups (z'). LeaveOneGroupOut expects at least 2.z^The groups parameter contains fewer than (or equal to) n_groups (3) numbers of unique groups (zR). LeavePGroupsOut expects that at least n_groups + 1 (4) unique groups be presentrI   r<   )rf   r   reescaperr   rs   rt   r   r   rV   r   r   )rW   rX   rT   r   s       rD   :test_leave_one_p_group_out_error_on_fewer_number_of_groupsr
  w  sL   WQZZAF
)2
3
3C	z	-	-	- 5 5%%aF334445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 WQZZAF
)	0V 	0 	0 	0 C 
z	-	-	- 5 5%%aF334445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 WQZZAF
)	)/	 	 	 C 
z	-	-	- > >_a(((..q!V<<===> > > > > > > > > > > > > > > Yq\\!A!F
)	)/	 	 	 C 
z	-	-	- > >_a(((..q!V<<===> > > > > > > > > > > > > > > > > >sH   1BB	B	1DDD.3F--F14F13II
Ic                     t           t          fD ]|} t          j        t                    5   | d           d d d            n# 1 swxY w Y   t          j        t                    5   | d           d d d            n# 1 swxY w Y   }d S )Nr   )	n_repeatsr   )r   r   rr   rs   rt   rM  s    rD   test_repeated_cv_value_errorsr    s   56  ]:&& 	 	BOOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	 	B	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s#   AA	
A	'B  B	B	
RepeatedCVc                     d\  }} | ||          }d                     |j        j                  }|t          |          k    sJ d S )N)r4   r\   rw   r  z.{}(n_repeats=6, n_splits=2, random_state=None))r   r@   rA   rq   )r  rw   r  repeated_cvrepeated_cv_reprs        rD   test_repeated_cv_reprr    s`    Hi*h)DDDKGNN&  tK00000000rF   c                     ddgddgddgddgd	d
gg} d}t          dd|          }t          d          D ]0}|                    |           }t          |          \  }}t	          |ddg           t	          |g d           t          |          \  }}t	          |g d           t	          |ddg           t          |          \  }}t	          |ddg           t	          |g d           t          |          \  }}t	          |g d           t	          |ddg           t          j        t                    5  t          |           d d d            n# 1 swxY w Y   2d S )Nr;   r4   rI   rM   r[   r\   r]   r^   r   rG   i{icrw   r  r`   )r   r;   rI   r   )r4   rI   rM   )r   r   rV   r   r-   rr   rs   StopIteration)rW   r`   rkfr  r   r   r   s          rD   &test_repeated_kfold_determinstic_splitr    s   
Q!Q!Q!Q!R1AL
al
K
K
KC 1XX  16llt51a&)))4+++6llt5))),,,4!Q(((6llt51a&)))4+++6llt5))),,,4!Q(((]=)) 	 	LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	% s   >EE	!E	c                  n    d} d}t          | |          }| |z  }||                                k    sJ d S NrI   rM   r  )r   rj   )rw   r  r  r   s       rD   $test_get_n_splits_for_repeated_kfoldr    sL    HI
Y
?
?
?C 9, 0 0 2 2222222rF   c                  n    d} d}t          | |          }| |z  }||                                k    sJ d S r  )r   rj   )rw   r  rskfr   s       rD   /test_get_n_splits_for_repeated_stratified_kfoldr    sL    HI"H	JJJD 9, 1 1 3 3333333rF   c                     ddgddgddgddgd	d
gg} g d}d}t          dd|          }t          d          D ]1}|                    | |          }t          |          \  }}t	          |ddg           t	          |g d           t          |          \  }}t	          |g d           t	          |ddg           t          |          \  }}t	          |ddg           t	          |g d           t          |          \  }}t	          |g d           t	          |ddg           t          j        t                    5  t          |           d d d            n# 1 swxY w Y   3d S )Nr;   r4   rI   rM   r[   r\   r]   r^   r   rG   )r;   r;   r;   r   r   iqsr  )r   r4   rI   )r   r;   rM   )r   r   rV   r   r-   rr   rs   r  )rW   rX   r`   r  r  r   r   r   s           rD   1test_repeated_stratified_kfold_determinstic_splitr     s   
Q!Q!Q!Q!R1AAL"AVVVD 1XX  Aq!!6llt51a&)))4+++6llt5))),,,4!Q(((6llt51a&)))4+++6llt5))),,,4!Q(((]=)) 	 	LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	% s   EE#	&E#	c            	      B   t          j        t          t                     t          j        t          t          t	          d          d           t          j        t          t          t	          d          dd           t          j        t          t          t	          d          t          j        d          t          j        d                     t          j        t          t          t	          d          d           t          j        t          t          t	          d          dd	           t          j        t          t          t	          d          d
           t          j        t          t          t	          d          t	          d                     t          j        t          t          t	          d          dd           t          j        t          d          5  t          t	          d          dd           d d d            d S # 1 swxY w Y   d S )NrI   r  r  rc  r  
wrong_typer8   r4   rM   )some_argument*   rG   FT)r   stratifyzrtrain_size=11 should be either positive and smaller than the number of samples 10 or a float in the \(0, 1\) rangerd   r   r;   )r  r9   )rr   rs   rt   r   r   rf   float32r   r   rF   rD   test_train_test_split_errorsr'    s   
M*.///
M*.aSIIII
M*.aCTWXXXX
Ma*S//:c??    M*.aLQQQQ
M*.aARSTTTT
M)-uQxxsKKKK
M*.a%))DDD
M*.b		5SWXXXX	'
 
 
 @ @ 	rrQ????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   ' HHH))Nr]   rI   r  r  c                     t          t          |           \  }}t          |          |k    sJ t          |          |k    sJ d S )Nr  )r   rW   r   )r  r  r  r  r  s        rD   'test_train_test_split_default_test_sizer)    sN     'qZ@@@OGVw<<9$$$$v;;(""""""rF   z#array_namespace, device, dtype_namezshuffle,stratify)TNrM   )FNc                    t          ||          }t          j        d                              d          }t          j        d          }|                    |          }|                    ||          }	|                    |          }
|                    |
|          }t          ||d| |          \  }}}}t          d          5  ||                    |          }n|}t          |	|| |d	          \  }}}}t          |          d         t          |	          d         k    sJ t          |          d         t          |	          d         k    sJ t          |          d         t          |          d         k    sJ t          |          d         t          |          d         k    sJ 	 d d d            n# 1 swxY w Y   t          |          t          |	          k    sJ t          |          t          |          k    sJ t          |          t          |	          k    sJ t          |          t          |          k    sJ |j
        |	j
        k    sJ |j
        |j
        k    sJ |j
        |	j
        k    sJ |j
        |j
        k    sJ t          t          ||
          |           t          t          ||
          |           d S )Nr   rG   rG   rG   r(   r   )r`   r   r%  T)array_api_dispatch)r   r%  r`   )xp)r/   rf   r   r   astypern   r   r	   r&   array_api_devicero   r+   r%   )r   r%  array_namespacer)   
dtype_namer-  rW   rX   X_npX_xpy_npy_xp
X_train_np	X_test_np
y_train_np	y_test_npstratify_xp
X_train_xp	X_test_xp
y_train_xp	y_test_xps                        rD   test_array_api_train_test_splitr?     sU    
ov	6	6B
	#x((A
	"A88JD::d6:**D88JD::d6:**D3Caa84 4 40J	:y 
4	0	0	0 E E**X..KK"K7G$+A8
 8
 8
4
Iz9 Z((+}T/B/B1/EEEEEY''*mD.A.A!.DDDDDZ((+}T/B/B1/EEEEEY''*mD.A.A!.DDDDDDE E E E E E E E E E E E E E E" J''+;D+A+AAAAAJ''+;D+A+AAAAAI&&*:4*@*@@@@@I&&*:4*@*@@@@@tz))))tz))))?dj((((?dj((((*,,,   )+++    s   C,GG
G
coo_containerc                    t          j        d                              d          } | |          }t          j        d          }t          ||d d          }|\  }}}}t	          |          t	          |          k    sJ t          |d d df         |dz             t          |d d df         |dz             t          |||                                          }|\  }}}	}
}}t          |t                    sJ t          |t                    sJ t          j        d                              ddd	d
          }t          j        d                              ddd          }t          ||          }|d         j	        dk    sJ |d         j	        dk    sJ |d
         j	        dk    sJ |d	         j	        dk    sJ t          j
        g d          }t          g dg d          D ]\  }}t          |||d          \  }}t	          |          |k    sJ t	          |          t	          |          z   t	          |          k    sJ t          j        |dk              t          j        |d
k              k    sJ t          j        d          }dD ];}t          |d|          \  }}t          |ddg           t          |g d           <d S )Nr   r+  rG   r7   r  r   r  r[   rI   r4   i  r]   r   )r]   r[   rI   r4   r;   )rI   r[   rI   r4   )r]   r]   r   )rI   r]   r   )r;   r;   r;   r;   r4   r4   r4   r4   )r4   rM   r_  r7   r^  )r4   rM   r4   rM   r\   )r9   r%  r`   )r4   re  F)r   r9   r^   r   )r   r;   r4   rI   rM   r[   r\   r]   )rf   r   r   r   r   r-   r  
isinstancerm   r  rg   ri   r  )r@  rW   X_srX   rV   r  r  r  r  	X_s_trainX_s_testX_4dy_3dr9   exp_test_sizer   r   s                    rD   test_train_test_splitrI  b  s   
	#x((A
-

C
	"A QTcBBBE',$GVWfv;;#g,,&&&&wqqq!t}gl333vaaad|Vb[111 QQXXZZ00E<A9GVY'6gt$$$$$fd##### 9^$$,,RAq99D9[!!))"a44DT4((E8>\))))8>\))))8>Z''''8>Z'''' 	)))**A$'(?(?(?$Q$Q 8 8 	=&QQ
 
 
t 4yyM))))4yy3u::%Q////veqj!!RVEQJ%7%777777 		"A < <	&q%9MMMt4!Q(((5":":":;;;;< <rF   c                      d} t          j        |           }|d| z  k    }t          |||d          }|\  }}}}|j        |j        z   | k    sJ |j        |j        z   | k    sJ dS )zCheck for integer overflow on 32-bit platforms.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20774
    i Gz?r_  )r%  r  N)rf   r   r   r   )
big_numberrW   rX   rV   r  r  r  r  s           rD   $test_train_test_split_32bit_overflowrM    s     J 		*A	TJAQA$???E',$GVWf<&+%3333<&+%333333rF   c                     t           g} 	 ddlm} |                     |           n# t          $ r Y nw xY w| D ]H} |t
                    }t          |          \  }}t          ||          sJ t          ||          sJ Id S )Nr   )	DataFrame)r*   pandasrO  r   ImportErrorrW   r   rB  )typesrO  InputFeatureTypeX_dfr  r  s         rD   test_train_test_split_pandasrU    s    OE$$$$$$Y   ! 4 4""*400'#344444&"23333334 4s   & 
33sparse_containerc                     t          j        d                              d          } | |          }t          |          \  }}t	          |          r|j        dk    sJ t	          |          r|j        dk    sJ d S )Nr   r+  csr)rf   r   r   r   r   r   )rV  rW   rC  r  r  s        rD   test_train_test_split_sparserY    s     		#x((A

1

C&s++OGVG85!8!8!8!8F6 6 6 6 6 6 6rF   c                      t          t                    } t          |           \  }}t          |t                     sJ t          |t                     sJ t          |           \  }}d S r?   )r*   rW   r   rB  )rT  r  r  X_train_arr
X_test_arrs        rD   !test_train_test_split_mock_pandasr]    sb    D&t,,OGVg}-----fm,,,,,.t44KrF   c                     t          j        d          } dgdz  dgdz  z   }t          j        t          j        d          t          j        d          f          }|                                }dD ]}t          | ||r|nd d          \  }}}}t          | ||r|nd d          \  }	}
}}t          | ||r|nd d          \  }}}}t           j                            ||	           t           j                            ||           t           j                            ||           t           j                            ||           d S )	Nr]   rO   rM   r   rI   r	  r   )r%  r`   )rf   r   hstackr  r  r   rk   rl   )rW   r   r   y3r%  X_train1X_test1y_train1y_test1X_train2X_test2y_train2y_test2X_train3X_test3y_train3y_test3s                    rD    test_train_test_split_list_inputrm    sg   


A
cUQY	B	BGAJJ,	-	-B	B! 2 2/?r(4BB10
 0
 0
,'8W 0@r(4BB10
 0
 0
,'8W 0@r(4BB10
 0
 0
,'8W 	
(333

(333

111

11112 2rF   ztest_size, train_size))r   N)r  N)r   gffffff?)Ny              ?)r   N)rG   N)r^   rI   c                     t          j        t                    5  t          t	          | |                              t                               d d d            d S # 1 swxY w Y   d S )Nr  )rr   rs   rt   r   r   rV   rW   r  s     rD   test_shufflesplit_errorsro    s    
 
z	"	" P P\I*EEEKKANNOOOP P P P P P P P P P P P P P P P P Ps   7AA"%A"c                      t          d          } t          d |                     t                    D             d |                     t                    D                        d S )N   r_   c                     g | ]\  }}|S r   r   rB   r  r  s      rD   r   z2test_shufflesplit_reproducible.<locals>.<listcomp>  s    222da222rF   c                     g | ]\  }}|S r   r   rs  s      rD   r   z2test_shufflesplit_reproducible.<locals>.<listcomp>  s    4O4O4O41aQ4O4O4OrF   )r   r-   rV   rW   )r   s    rD   test_shufflesplit_reproducibleru    s\     
2	&	&	&B22bhhqkk2224O4O288A;;4O4O4OPPPPPrF   c            	         t          dd          } t          j        d          }dgdz  dgdz  z   }t          j        t          j        d          t          j        d          f          }|                                }t          j                            t          | 	                    ||                    t          | 	                    ||                               t          j                            t          | 	                    ||                    t          | 	                    ||                               d S )	Nr4   r$  ry  r]   rO   rM   r   rI   )
r   rf   r   r_  r  r  rk   rl   rm   rV   )r  rW   r   r   r`  s        rD   &test_stratifiedshufflesplit_list_inputrw    s    
 12
>
>
>C


A
cUQY	B	BGAJJ,	-	-B	BJD1b!1!122D1b9I9I4J4JKKKJD1b!1!122D1b9I9I4J4JKKKKKrF   c                     t          j        dt           j                                      dd          } t           j        | dd d f<   t          j        ddg| j        d         dz            }t          | |dd	
           d S )N   ro   rG   r   r4   r   r;   re  r$  ry  )rf   r   float64r   r  repeatr  r   r  s     rD    test_train_test_split_allow_nansr}    sw    
	#RZ(((00R88AfAadG
	1a&!'!*q.))AQSr::::::rF   c            	         t          j        d          } t          dd          }t           j                            t          t          d                              |                     t          |                    |                                t          j        g d          }t          d|d          }t           j                            t          t          d                              | |                    t          |                    | |                               t          j        g d          }t          d|d          }t           j                            t          t          d                              | |                    t          |                    | |                               |
                    dd	          }t          d|d          }t           j                            t          t          d                              | |                    t          |                    | |                               t          j        t          t          d                              | |                    d
         t          t          d                              | |                    d
         k              rJ t          j        d          } t          j        g dg dg dg dg dg          }t          d|d          }t           j                            t          t          d                              |                     t          |                    |                                t          j        d	dgd
dgd
d
gdd	gdd
gg          }t          d|d          }t           j                            t          t          d                              |                     t          |                    |                                t          j        t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Nr   rI   F)
classifier)	r   r;   r   r;   r   r   r;   r;   r;   T)	r   r;   r   r;   r4   r;   r4   r   r4   r   r;   r   r[   )r   r   r   r   )r   r;   r;   r   )r   r   r   r;   )r;   r;   r   r;   )r   r   r;   r   r4   r~   rM  )rf   r   r   rk   rl   rm   r   rV   rg   r   r   allr   rr   rs   rt   )rW   r   y_binaryy_multiclassy_multiclass_2dr   y_multioutputs          rD   test_check_cvr    s    


A	!	&	&	&B JDq!2!233T"((1++5F5FGGGx33344H	!X$	/	/	/BJ_Q%%a2233T"((1h:O:O5P5P   877788L	!\d	3	3	3BJ_Q%%a6677bhhq,>W>W9X9X   #**2q11O	!_	6	6	6BJ_Q%%a99::RXXa))**  
 v_Q%%a99::1=aq/2233A6	7    
 	

A8	|||\\\<<<N L 
!\d	3	3	3BJDq!2!233T"((1++5F5FGGGHq!fq!fq!fq!fq!fEFFM	!]t	4	4	4BJDq!2!233T"((1++5F5FGGG	z	"	"  F                 s   Q))Q-0Q-c            	          t                                          t          t                    } t	          |           }t
          j                            t          |                    t          t                              t          |                    t          t                                         t          dd                              t          t                    }t	          |          }t
          j                            t          |                    t          t                              t          |                    t          t                                         	 d}t
          j                            t          |                    t          t                              t          |                    t          t                                         n# t          $ r d}Y nw xY w|r
J d            d S )NTr   r  FzVIf the splits are randomized, successive calls to split should yield different results)
r   rV   rW   rX   r   rf   rk   rl   rm   r!  )kf_iterkf_iter_wrappedkf_randomized_iterkf_randomized_iter_wrappedsplits_are_equals        rD   test_cv_iterable_wrapperr  :  s   ggmmAq!!Gw''O J_""1a(())40E0Ea0K0K+L+L  
 t!<<<BB1aHH!)*<!=!=J'--a3344'--a3344  
!

&&q!,,--+11!Q7788	
 	
 	
 	
  ! ! ! !  	C    s   'A8G   G/.G/c           	      `
   t           j                            |          }d}d}d}t          j        |          x}}d|z  }	|                    d||          }
||z  }t          t          j        |
                     t          j        |          }|sd n|} | |||          }t          |	                    |||
                    D ]\  }\  }}|||<   t          |          t          |
          k    sJ t          j        |          D ]+}|	t          t          ||k              |z
            k    sJ ,t          j        |
          D ]3}t          t          j        ||
|k                                 dk    sJ 4t          j        |
t                    }
|	                    |||
          D ]9\  }}t          t          j        |
|         |
|                             dk    sJ :t          j        g d	          }
t          t          j        |
                    }t          |
          }d}d|z  }	||z  }t          j        |          x}}t          j        |          }t          |	                    |||
                    D ]\  }\  }}|||<   t          |          t          |
          k    sJ |s@t          j        |          D ]+}|	t          t          ||k              |z
            k    sJ ,t!          j                    5  t!          j        d
t&                     t          j        |
          D ]3}t          t          j        ||
|k                                 dk    sJ 4	 d d d            n# 1 swxY w Y   t          j        |
t                    }
|	                    |||
          D ]9\  }}t          t          j        |
|         |
|                             dk    sJ : | |||          }t)          |	                    |||
                                                    }t-          |	                    |||
          |          D ]+\  \  }}\  }}t/          ||           t/          ||           ,t          j        g d          }
t          j        t          |
                    x}}t1          j        t4          d          5  t7          t9          d          	                    |||
                     d d d            d S # 1 swxY w Y   d S )Nr  r   r[   r  r   )rw   r   r`   r;   rz  )&AlbertJeanBertrandMichelr  FrancisRobertr  RachelLoisMichelleBernardMarionLaurar  r  FranckJohnGaelAnnaAlixr  r  DavidTonyAbelBeckyMadmoodCaryMary	Alexandrer  r  BarackAbdoulRashaXiSilviar   )r;   r;   r;   r4   r4   z%Cannot have number of splits.*greaterrd   rI   r   )rf   r   r   r   r   r   r  r  rh   rV   r  r  rn   objectr  rg   r   r   r   FutureWarningrm   r  ri   r-   rr   rs   rt   r   r   )r   r   global_random_seedr   r=   ru   rw   rW   rX   	tolerancerT   ideal_n_groups_per_foldr  r`   lkfrc   r  r   groupr   lkf_copycv_itertrain1r8  train2test2s                             rD   test_group_kfoldr  [  s    )

 2
3
3C HIHGIA y I[[Hi00F'83	&HYE&>44,>L
%7
N
N
NC!#))Aq&"9"9::  9Atd u::V$$$$Yu K KCEQJ2I IJJJJJJJ 6"" ; ;29U6U?34455::::: Zf---FyyAv.. E Et2>&->>??1DDDDD X'	
 '	
 '	
) )FV 29V$$%%HFIHy I'83GIA HYE!#))Aq&"9"9::  9Atd u::V$$$$ O5!! 	O 	OAC
OO6M$M N NNNNNN 
	 	"	" ? ?h666Yv&& 	? 	?Eryv!78899Q>>>>>	?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Zf---FyyAv.. E Et2>&->>??1DDDDD uhlSSSH399Q6==??3344G,/q!V0L0Lg,V,V ) )(&%66***5%(((( Xooo&&FGCKK   A	z)P	Q	Q	Q 9 9Z###))!Q778889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s%   A#NN
N#3T##T'*T'c                     ddgddgddgddgd	d
gddgddgg} t          j        t          d          5  t          t	          d                              |                      d d d            n# 1 swxY w Y   t	          d          }|                    | d d                   }t          |          \  }}t          |ddg           t          |ddg           t          |          \  }}t          |g d           t          |ddg           t	          d                              |           }t          |          \  }}t          |g d           t          |ddg           t          |          \  }}t          |g d           t          |ddg           t	          d                              |           }t          t          |                    }||	                                k    sJ |dk    sJ d S )Nr;   r4   rI   rM   r[   r\   r]   r^   r   rG   r   rV     r  z$Cannot have number of folds.*greaterrd   r   r   r   r  r   r   r;   r4   rI   rM   )
rr   rs   rt   r   r   rV   r-   r   rm   rj   )rW   tscvr   r   r   r  s         rD   test_time_series_cvr    sK   
Q!Q!Q!Q!R2r(RHEA 
z)O	P	P	P 3 3_a(((..q112223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1D ZZ#2#Fv,,KE4uq!f%%%taV$$$v,,KE4ulll+++taV$$$Q%%a((Fv,,KE4uiii(((taV$$$v,,KE4uooo...taV$$$ Q%%a((F$v,,''Od//111111as   1A00A47A4c                     t          | |          D ]h\  \  }}\  }}t          ||           t          |          |k    sJ t          t          |          |z
  d          }t          |||d                     id S )Nr   )ri   r-   r   r  )r   check_splitsmax_train_sizer   r   check_train
check_testsuffix_starts           rD   !_check_time_series_max_train_sizer    s    474M4M > >00Z4,,,;>11113u::6::;lmm(<====	> >rF   c                     t          j        d          } t          d                              |           }t          dd                              |           }t	          ||d           t          dd                              |           }t	          ||d           t          dd                              |           }t	          ||d           d S )N)r\   r;   rI   r   )rw   r  )r  r4   r[   )rf   r  r   rV   r  )rW   r   r  s      rD   test_time_series_max_train_sizer  	  s    
Aa(((..q11F"Aa@@@FFqIIL%fl1MMMM #Aa@@@FFqIIL%fl1MMMM #Aa@@@FFqIIL%fl1MMMMMMrF   c                     t          j        d          } t          dd                              |           }t	          |          \  }}t          |dg           t          |g d           t	          |          \  }}t          |g d           t          |g d           t	          |          \  }}t          |g d           t          |g d	           t          d
d
d                              |           }t	          |          \  }}t          |g d           t          |ddg           t	          |          \  }}t          |g d           t          |ddg           t          j        t          d          5  t          dd
                              |           }t	          |           d d d            d S # 1 swxY w Y   d S )NrG   r;   rI   )rw   r9   r   )r;   r4   rI   r  rM   r[   r\   )r   r;   r4   rI   rM   r[   r\   r]   r^   r   r4   rM   )rw   r9   r  r  r\   r]   )rM   r[   r\   r]   r^   r   zToo many splits.*with test_sizerd   r[   	rf   r  r   rV   r   r-   rr   rs   rt   rW   r   r   r   s       rD   test_time_series_test_sizer    s   
A a1555;;A>>Fv,,KE4uqc"""tYYY'''v,,KE4ulll+++tYYY'''v,,KE4u333444tYYY''' a1QGGGMMaPPFv,,KE4ulll+++taV$$$v,,KE4ulll+++taV$$$ 
z)J	K	K	K   !q999??BBV                 s   4GGGc                     t          j        d          } t          dd                              |           }t	          |          \  }}t          |ddg           t          |g d           t	          |          \  }}t          |g d           t          |g d           t          d	dd
                              |           }t	          |          \  }}t          |ddg           t          |ddg           t	          |          \  }}t          |dd	g           t          |ddg           t	          |          \  }}t          |ddg           t          |ddg           t          dddd                              |           }t	          |          \  }}t          |g d           t          |ddg           t	          |          \  }}t          |g d           t          |ddg           t          ddd	                              |           }t	          |          \  }}t          |ddg           t          |g d           t	          |          \  }}t          |g d           t          |g d           t          j        t          d          5  t          dd                              |           }t	          |           d d d            d S # 1 swxY w Y   d S )Nr  r4   )rw   gapr   r;   r  r  r  rI   )rw   r  r  rM   r[   r\   r]   r^   r   )rw   r  r  r9   r  r  )rw   r  r9   zToo many splits.*and gaprd   r  r  s       rD   test_time_series_gapr  ;  s8   
A aQ///55a88Fv,,KE4uq!f%%%tYYY'''v,,KE4uooo...tYYY''' aQqAAAGGJJFv,,KE4uq!f%%%taV$$$v,,KE4uq!f%%%taV$$$v,,KE4uq!f%%%taV$$$ aQqANNNTTUVWWFv,,KE4ulll+++taV$$$v,,KE4ulll+++taV$$$ aQ!<<<BB1EEFv,,KE4uq!f%%%tYYY'''v,,KE4uooo...tYYY''' 
z)C	D	D	D   !33399!<<V                 s   *4K++K/2K/c            
         t           j                            d          } t          ddd          \  }}|                     ddd          }t                      t          d          t                      t          d          t                      t                      t          dd          g}t          |d          D ]?\  }}t          t                      d	d
dgi|d          }t          |||||d|i           @d S )Nr   r  r4   )ru   	n_classesr`   r[   r   rI   )rw   r`   strategy
stratifiedmost_frequentraise)
param_gridr   error_scorerT   )rW   rX   rT   r   params)rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   rW   rX   rT   cvsinner_cvouter_cvgss           rD   test_nested_cvr  t  s'    )


"
"CqqIIIDAq[[Ar""F 	###A:::C <CCC 	
 	
("\?$CD	
 
 
 	!qHh=O	
 	
 	
 	
 	
	
 	
rF   c                  ^     G d d          } t           | dd                    dk    sJ d S )Nc                       e Zd ZddZd ZdS )%test_build_repr.<locals>.MockSplitterr   Nc                 0    || _         || _        || _        d S r?   )r  r  r  )selfr  r  r  s       rD   __init__z.test_build_repr.<locals>.MockSplitter.__init__  s    DFDFDFFFrF   c                      t          |           S r?   )r    )r  s    rD   __repr__z.test_build_repr.<locals>.MockSplitter.__repr__  s    t$$$rF   )r   N)rA   
__module____qualname__r  r  r   rF   rD   MockSplitterr    s7        	 	 	 	
	% 	% 	% 	% 	%rF   r  r[   r\   zMockSplitter(a=5, b=6, c=None))rq   )r  s    rD   test_build_reprr    sX    % % % % % % % % Q""##'GGGGGGGrF   
CVSplitterc           	           | d          }dggdg}}t          j        t          d          5  t          t	          |||dg                     d d d            d S # 1 swxY w Y   d S )NrK  r8   r;   r   [With n_samples=1, test_size=0.99 and train_size=None, the resulting train set will be emptyrd   rS   )rr   rs   rt   r   rY   )r  r   rW   rX   s       rD   !test_shuffle_split_empty_trainsetr    s     
d	#	#	#BC51#qA	4
 
 
 + + 	VB1aS)))***+ + + + + + + + + + + + + + + + + +s   "AA"%A"c                  4   dgg\  } t          j        t          d          5  t          | d           d d d            n# 1 swxY w Y   dgdgdgg} t          j        t          d          5  t          | d           d d d            d S # 1 swxY w Y   d S )Nr;   r  rd   rK  r8   z[With n_samples=3, test_size=0.67 and train_size=None, the resulting train set will be emptygq=
ףp?)rr   rs   rt   r   r   s    rD   $test_train_test_split_empty_trainsetr    sA   C5DQ	4
 
 
 , , 	d++++, , , , , , , , , , , , , , , qcA3A	4
 
 
 , , 	d++++, , , , , , , , , , , , , , , , , ,s#   A  AA.BBBc                      t                      } dggdg}}t          j        t          d          5  t	          |                     ||                     d d d            d S # 1 swxY w Y   d S )Nr;   r   z+Cannot perform LeaveOneOut with n_samples=1rd   )r   rr   rs   rt   r   rV   r   rW   rX   s      rD   !test_leave_one_out_empty_trainsetr    s    	BC51#qA	z)V	W	W	W  RXXa^^                 s   $A""A&)A&c                      t          d          } dgdggddg}}t          j        t          d          5  t	          |                     ||                     d d d            d S # 1 swxY w Y   d S )Nr4   r5   r;   r   rI   z6p=2 must be strictly less than the number of samples=2rd   )r   rr   rs   rt   r   rV   r  s      rD   test_leave_p_out_empty_trainsetr    s    	QBC!:1vqA	R
 
 
   	RXXa^^                 s   $A''A+.A+Klassc                     t          j        t          d          5   | ddd           d d d            d S # 1 swxY w Y   d S )Nz$has no effect since shuffle is Falserd   rI   Fr   r  )rr   rs   rt   )r  s    rD   test_random_state_shuffle_falser    s    
 
z)O	P	P	P 0 0aQ////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   8<<zcv, expected{   r  r_   c                 0    t          |           |k    sJ d S r?   )r"   )r   rZ  s     rD   test_yields_constant_splitsr    s$    L #2&&(222222rF   r   c                 ,    g | ]}t          |          S r   r   rB   r   s     rD   r   r   	      2S2S2Sr3r772S2S2SrF   )r  c                     t          | d          sJ |                                 }| t          v r|j        j        d         du sJ n| t
          v r|j        j        rJ t          |dg           dS )z>Check get_metadata_routing returns the correct MetadataRouter.get_metadata_routingrT   TrV   )excludeN)hasattrr  GROUP_SPLITTERSrV   requestsNO_GROUP_SPLITTERSr$   )r   metadatas     rD   "test_splitter_get_metadata_routingr  	  s     2-.....&&((H	_~&x0D88888	!	!	!>****Hwi888888rF   c                 ,    g | ]}t          |          S r   r  r  s     rD   r   r     r  rF   c                 z    | t           v rt          | d          sJ dS | t          v rt          | d          rJ dS dS )zJCheck set_split_request is defined for group splitters and not for others.set_split_requestN)r  r  r  rM  s    rD   test_splitter_set_split_requestr    s]     
_r.///////	!	!	!2233333 
"	!33rF   c                    d| j         j         }d}t          j                            d          }|                    dd|df          }|                    dd|f          }|                    dd|f          }t          j        t          |          5  | 	                    |||	           d d d            d S # 1 swxY w Y   d S )
Nz#The groups parameter is ignored by r   r;   r   rI   r4   r   rd   rS   )
r@   rA   rf   r   r   r   rr   r   UserWarningrV   )r   r   ru   r   rW   rX   rT   s          rD   )test_no_group_splitters_warns_with_groupsr    s   
G0E
G
GCI
)


"
"CAq	1~..AAq	|,,A[[AYL[11F	k	-	-	- & &
Af%%%& & & & & & & & & & & & & & & & & &s   B>>CCc                 ,    g | ]}t          |          S r   r  r  s     rD   r   r   .  s    *X*X*Xr3r77*X*X*XrF   c                     d}t          j        t          |          5  |                     t                     d d d            d S # 1 swxY w Y   d S )Nz+missing 1 required positional argument: 'y'rd   )rr   rs   r   rV   rW   )r   r   s     rD   "test_stratified_splitter_without_yr  -  s     8C	y	,	,	,  
                 s   AA
A
r?   )__doc__r  r   	itertoolsr   r   r   numpyrf   rr   scipyr   scipy.sparser   scipy.specialr   sklearnr	   sklearn.datasetsr
   r   sklearn.dummyr   sklearn.model_selectionr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sklearn.model_selection._splitr    r!   r"   sklearn.svmr#   %sklearn.tests.metadata_routing_commonr$   sklearn.utils._array_apir%   r&   r'   r)   r/  sklearn.utils._mockingr*   sklearn.utils._testingr+   r,   r-   r.   sklearn.utils.estimator_checksr/   sklearn.utils.fixesr0   r1   r2   sklearn.utils.validationr3   r  r  r   rU   ALL_SPLITTERSSPLITTERS_REQUIRING_TARGETr   rW   r   rX   rg   r  rO  markfilterwarnings
pytestmarkrY   r   r   r   r   r   r   r   r   parametrizer   r   r  r  r  r'  r;  rI  rT  rW  r]  rn   ra  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r   r'  r)  r_  r  r?  rI  rM  rU  rY  r]  rm  ro  ru  rw  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r  r  r  r   r  r  r   rF   rD   <module>r,     s.     				  O O O O O O O O O O            ! ! ! ! ! !       " " " " " " = = = = = = = = ) ) ) ) ) )                                         *         
       I I I I I I         
      1 0 0 0 0 0                 O N N N N N N N N N 1 1 1 1 1 1 
EGGOOKMMINNNLNNS)))OLLL!!MOO  JLLOQ sWWWWWWW "_4 O  BGBKKBIbMMQBH11122BH11122BH:::;;BH===>>(((@@@ 
[''6 

$ $ $R* R* R*j$! $! $!N	: 	: 	: 	:? ? ?$F( F( F(R* * * ) ) ).( ( (V UDM2244455?4H"IJJ# # KJ 65 32#0 UDM22iii((?4H"IJJ* * KJ )( 32*>" " " ?4H"IJJ& & KJ&&! ! !. 5/;O"PQQ> > RQ>>" " ".? ? ?0) ) )X# # #$# # #$  BHaS1WsQw&''BH999::BJc
S#Jc
;<<	
 BHaS1WsQw&''BH999::BJttTlT4LABB	
 = = = &V&V&VWW[[[11! ! 21 XW!6) ) ) 7M(NOO%'M'M'M 	# 	#  PO	# %'M'M'M 
# 
# 
#> > >2	& 	& 	&"@ "@ "@J15 15 15hC C C"7 7 723 3 3.) ) )"" " "J4. 4. 4.nG G G,0 0 0( >  >  >F   7N'OPP1 1 QP1  :3 3 34 4 4  <@ @ @8 %'M'M'M # # # )+T+T+V+V  	yry'"'!**hbhqkk2334	 3 3  3l .99,< ,< :9,<^4 4 4.4 4 4" 7.H 7 7 75 5 52 2 20 WWW P P	 P
Q Q Q	L 	L 	L; ; ;+ + +\  B :/C"DEET5M22|9 |9 32 FE|9~"  "  " J> > >N N N     F6 6 6r 
 
 
:
H 
H 
H <!24JK 
+ 
+ 
+, , ,,     e_&:JG 0 0 0 !	$!	t#	.	.	.5! 
		D!! 
C	8	8	8$?	!
 
	d	=	=	=tD! 
			&! 
C	(	(	($/! 
!	 c	2	2	2D9! 
3	'	'	'.! 
		,	,	,d3! 
 	S	1	1	148! 
t! 
Ds	3	3	3T:! 
		D!! 
!  
			T"!!" 
!	$	$	$d+#!$ 
Q%!& 
t$	/	/	/7'!( 
t$	/	/	/7)!* 
BI4I4I!4L4L	M	M	MuU+!, 
BI4I4I!4L4L	M	M	MuU-!. 
D	)	)	)51/!0 
BI$9$9!$<$<	=	=	=uE1!2 
!	 d	3	3	3U;3!4 
!	 bi.C.CA.F.F	G	G	GO5!6 
4	(	(	(%07!8 
29#8#8#;#;	<	<	<eD9!: 
		-	-	-u5;!< 
		(=(=a(@(@	A	A	A5I=!> 
 	T	2	2	2E:?!@ 
 	RY-B-B1-E-E	F	F	FNA!$ $J3 3K$ $J3 }2S2S]2S2S2STT	9 	9 UT	9 }2S2S]2S2S2STT4 4 UT4 1s;;
& 
& <;
& 
$*X*X=W*X*X*X       rF   