U
    ^»{jp ã                %   @   sö  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mZmZ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l0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< eƒ e&ƒ e(ƒ eƒ e dd�e$ƒ e'dd�e!ddddgƒe"ƒ e#ƒ g
Z=eƒ edd�e%ƒ eƒ eƒ gZ>e=e> Z?e @d¡ZAe Bd¡d ZCee Dd¡ƒZEe Fddddddddddddg¡e Fddddddddddddg¡e Fdddddddddddddddg¡e Fddddddddddddddddg¡ddddddddddddgddddddddddddgfZGeƒ ZHe:dd„ ƒZIdd „ ZJdÞd!d"„ZKd#d$„ ZLd%d&„ ZMd'd(„ ZNd)d*„ ZOd+d,„ ZPe	jQ Rd-d.d/g¡e	jQ Rd0ddd1d2d3d4dg¡e	jQ Rd5e&e%g¡d6d7„ ƒƒƒZSe	jQ Rd-d.d/g¡e	jQ Rd0dd1d2g¡e	jQ Rd5e&e%g¡d8d9„ ƒƒƒZTd:d;„ ZUe	jQ Rd5e&e%g¡d<d=„ ƒZVd>d?„ ZWe	jQ Rd5ee&e%g¡d@dA„ ƒZXdBdC„ ZYdDdE„ ZZdFdG„ Z[dHdI„ Z\e	jQ RdJe Fdgd1 dgd1  ¡e Fddddddddddd1d1g¡e ]ddgddgddgg¡fe Fdgd4 dgd  ¡e Fdddddddddddd1g¡e ]dKdLgdKdLgdKdLgg¡fg¡dMdN„ ƒZ^e	jQ RdOdPdQdRdSg¡e	jQ RdTddUdVg¡dWdX„ ƒƒZ_dYdZ„ Z`e	jQ Rd[e$e'g¡e	jQ Rd\d]d^d_g¡d`da„ ƒƒZae	jQ Rd\dbdcddg¡dedf„ ƒZbe:dgdh„ ƒZcdidj„ Zddkdl„ Zedmdn„ Zfdodp„ Zgdqdr„ Zhdsdt„ Zidudv„ Zjdwdx„ Zkdydz„ Zld{d|„ Zmd}d~„ Zndd€„ Zoe:d�d‚„ ƒZpe	jQ Rdƒe"e#g¡d„d…„ ƒZqd†d‡„ Zrdˆd‰„ ZsdŠd‹„ ZtdŒd�„ ZudŽd�„ Zve	jQ Rd\d�d^d_g¡d‘d’„ ƒZwd“d”„ Zxd•d–„ Zye:d—d˜„ ƒZzd™dš„ Z{d›dœ„ Z|d�dž„ Z}e	jQ RdŸd d¡d¢d£d¤d¥d¦g¡d§d¨„ ƒZ~d©dª„ Zd«d¬„ Z€d­d®„ Z�d¯d°„ Z‚d±d²„ Zƒe	jQ Rd5ee%g¡d³d´„ ƒZ„dµd¶„ Z…d·d¸„ Z†d¹dº„ Z‡d»d¼„ Zˆd½d¾„ Z‰d¿dÀ„ ZŠdÁdÂ„ Z‹e	jQ RdÃe$ee'f¡dÄdÅ„ ƒZŒdÆdÇ„ Z�dÈdÉ„ ZŽdÊdË„ Z�e	jQ RdÌee&e%f¡dÍdÎ„ ƒZ�e	jQ RdÏeƒ d/fed/dÐdÑ�d/fe&ƒ d/fe&d/dÐdÑ�d/fe%d/dÐdÑ�d/fe%ƒ d/fe"dÐdÒ�d/fe#dÐdÒ�d/fe$dÐdÒ�d/fedÐdÒ�d/fe'dÐdÒ�d/feƒ d/fe(ƒ d/feƒ d/feƒ d/fedd�d/fe dd�d/fed/ddÑ�d.fed/ddÑ�d.fe&d/ej‘ ’d¡dÑ�d.fe&d/ej‘ ’d¡dÑ�d.fe"ddÒ�d.fe"ej‘ ’d¡dÒ�d.fe#ddÒ�d.fe#ej‘ ’d¡dÒ�d.fe$ddÒ�d.fe$ej‘ ’d¡dÒ�d.feddÒ�d.feej‘ ’d¡dÒ�d.fe'ddÒ�d.fe'ej‘ ’d¡dÒ�d.fg¡dÓdÔ„ ƒZ“e	jQjRdÕe?dÖd×„ e?D ƒdØ�dÙdÚ„ ƒZ”e	jQjRdÕe?dÛd×„ e?D ƒdØ�dÜdÝ„ ƒZ•dS )ßzTest the split moduleé    N)ÚcombinationsÚcombinations_with_replacementÚpermutations)Ústats)Ú
coo_matrixÚ
csc_matrixÚ
csr_matrixÚissparse)Úcomb)Ú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)ÚMockDataFrame)Úassert_allcloseÚassert_array_almost_equalÚassert_array_equalÚignore_warnings)Ú_num_samplesé   ©Úpç      à?©Ú	test_sizeé   ©Ún_groupsé
   é   é   é   Ú1Ú2Ú3c            "      C   s<  d} d}d}d}d}t  ddgddgddgdd	gg¡}t  ddddg¡}t  ddddg¡}t  ddddg¡}tƒ }	t|ƒ}
t|ƒ}t|ƒ}tƒ }t|ƒ}td
d�}t	ddddgƒ}t
|ƒ}d}d}d}d}d}d}d}d}d}| t| |ƒ|||t||ƒ|d|g	}tt|	|
|||||||g	|||||||||g	ƒƒD ]°\}\}}|| | |||¡k�sZt‚t j t| |||¡ƒt| |||¡ƒ¡ | |||¡D ]:\}} t  |¡jjdk�s²t‚t  | ¡jjdk�s’t‚�q’|t|ƒk�s2t‚�q2d}!tjt|!d�� |	 d ||¡ W 5 Q R X tjt|!d�� |
 d ||¡ W 5 Q R X d S )Nr8   r,   r5   r2   r7   r6   é   é   é   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ÚAssertionErrorÚtestingÚassert_equalÚlistÚsplitÚasarrayÚdtypeÚkindÚreprÚpytestÚraisesÚ
ValueError)"Ú	n_samplesZn_unique_groupsÚn_splitsr.   Zn_shuffle_splitsÚXZX_1dÚyÚgroupsZlooZlpoÚkfÚskfÚloloZlopoÚssÚpsÚsgkfZloo_reprZlpo_reprZkf_reprZskf_reprZ	lolo_reprZ	lopo_reprZss_reprZps_reprZ	sgkf_reprZn_splits_expectedrC   ÚcvZcv_reprÚtrainÚtestÚmsg© rf   úg/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/model_selection/tests/test_split.pyÚ(test_cross_validator_with_default_params]   s†    "
ÿ÷÷þÿ ÿrh   c                  C   sJ  d} t j d¡}|jdd| dfd�}|jdd| fd�}| dd¡}|jdd| dfd�}|jdd| fd�}tƒ tdd�tƒ tƒ t	ƒ t
ƒ tƒ tƒ td	d
�tƒ tƒ tdd�tdd�tƒ t|d�g}|D ]„}t| |||¡ƒ t| |||¡ƒ zt| |||¡ƒ W qÀ tk
�rB }	 z$d}
d |
¡}|t|	ƒk�s2t‚W 5 d }	~	X Y qÀX qÀd S )Né   r2   r   r7   r,   )Úsizeéÿÿÿÿr-   r/   r0   r3   ©rX   )Z	test_fold)ÚbinaryZ
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   rN   rO   rV   ÚformatÚstrrK   )rW   ÚrngrY   rZ   Zy_2dÚy_multilabelr[   Z	splittersZsplitterÚeZallowed_target_typesre   rf   rf   rg   Ú	test_2d_y³   sD    ñÿrw   c                 C   sL   t | ƒt |ƒ } }|  |¡t ƒ ks&t‚|d k	rH|  |¡t t|ƒƒksHt‚d S ©N)ÚsetÚintersectionrK   ÚunionÚrange)rc   rd   rW   rf   rf   rg   Úcheck_valid_splitÚ   s    r}   c           
      C   sŒ   t |ƒ}|  |||¡|kst‚tƒ }d}|  |||¡D ](\}}	t||	|d� |d7 }| |	¡ q6||kslt‚|d k	rˆ|tt|ƒƒksˆt‚d S )Nr   )rW   r2   )r+   rJ   rK   ry   rO   r}   Úupdater|   )
rb   rY   rZ   r[   Úexpected_n_splitsrW   Zcollected_test_samplesZ
iterationsrc   rd   rf   rf   rg   Úcheck_cv_coverageæ   s    r€   c               	   C   sB  t  ddgddgddgg¡} t  ddgddgddgddgd	d
gg¡}tttdƒ | ¡f t  dddddg¡}tdƒ}tjt	dd�� t| ||¡ƒ W 5 Q R X t
dƒ}t  t|ƒ¡}tjt	dd�� t| |||¡ƒ W 5 Q R X t ¡ �" t d¡ t|||d dd� W 5 Q R X t ¡ �" t d¡ t||||dd� W 5 Q R X t  dddddg¡}t t¡� t| ||¡ƒ W 5 Q R X t t¡� t| ||¡ƒ W 5 Q R X t t¡� tdƒ W 5 Q R X t t¡� tdƒ W 5 Q R X d}tjt|d�� tdƒ W 5 Q R X tjt|d�� tdƒ W 5 Q R X tjt|d�� t
dƒ W 5 Q R X tjt|d�� t
dƒ W 5 Q R X t t¡� tdƒ W 5 Q R X t t¡� tdƒ W 5 Q R X t t¡� tdƒ W 5 Q R X t t¡� tdƒ W 5 Q R X t t¡� t
dƒ W 5 Q R X t t¡� t
dƒ W 5 Q R X t t¡� tdd d� W 5 Q R X d S )Nr2   r,   r7   r8   r6   r<   r=   r>   é	   r5   rk   zThe least populated classrD   Úignore©r[   r   r   z>k-fold cross-validation requires at least one train/test splitç      ø?ç       @©rX   Úshuffle)rF   rG   rV   Únextr   rO   r   rT   ZwarnsÚWarningr   ÚarangeÚlenÚwarningsÚcatch_warningsÚsimplefilterr€   rU   Ú	TypeError)ÚX1ÚX2rZ   Zskf_3Zsgkf_3Znaive_groupsZerror_stringrf   rf   rg   Útest_kfold_valueerrorsø   sb    (



r’   c                  C   sb   t  d¡} tdƒ}t|| d d dd� t  d¡}tdƒ}t||d d dd� dtdƒ |¡ks^t‚d S )Né   r7   )rZ   r[   r   é   r6   )rF   Úonesr   r€   rJ   rK   )r�   r\   r‘   rf   rf   rg   Útest_kfold_indicesA  s    

r–   c                  C   sî   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|dddgƒ t|ddgƒ t|ƒ\}}t|ddgƒ t|dddgƒ d S )Nr2   r,   r7   r8   r6   r<   r=   r>   r�   r5   rk   r   )r   rO   rˆ   r)   )r‘   Úsplitsrc   rd   rf   rf   rg   Útest_kfold_no_shuffleQ  s    "r˜   c                  C   sÈ  t  d¡ddddg } }tdƒ | |¡}t|ƒ\}}t|ddgƒ t|ddgƒ t|ƒ\}}t|ddgƒ t|ddgƒ t  d¡dddddddg } }tdƒ | |¡}t|ƒ\}}t|ddddgƒ t|dddgƒ t|ƒ\}}t|dddgƒ t|ddddgƒ dtdƒ | |¡k�st‚t  d¡} d	d	d	d
d
d
d
g}dddddddg}t j 	t
tdƒ | |¡ƒt
tdƒ | |¡ƒ¡ ddddddddg}t  |¡} t j 	t
tdƒ | |¡ƒt
tdƒ | |¡ƒ¡ d S )Nr8   r2   r   r,   r7   r=   r6   r<   r9   Ú0)rF   r•   r   rO   rˆ   r)   rJ   rK   rL   rM   rN   Ú	ones_liker   )rY   rZ   r—   rc   rd   Úy1Úy2rf   rf   rg   Ú test_stratified_kfold_no_shuffleh  s<    
 ÿ
 ÿr�   r‡   FTÚkr<   r=   r>   r�   Úkfoldc                 C   s  d}t  |¡}t  dgtd| ƒ dgtd| ƒ  dgtd| ƒ  ¡}t  t|ƒ¡}t  |¡t|ƒ }g }|svd nd}	|| |	|d�}
|
j|||d	�D ]V\}}tt  || ¡t|ƒ |d
d� tt  || ¡t|ƒ |d
d� | 	t|ƒ¡ q˜t  
|¡dk�st‚d S )Néè  r8   çš™™™™™¹?r   ç{®Gázì?r2   ç{®Gáz„?©r@   r‡   ©r[   ç{®Gáz”?©Zatol)rF   r•   rG   ÚintrŠ   r‹   ÚbincountrO   r'   ÚappendÚptprK   )rž   r‡   rŸ   rW   rY   rZ   r[   ÚdistrÚ
test_sizesr@   r]   rc   rd   rf   rf   rg   Útest_stratified_kfold_ratios“  s&    
ÿþÿ  r®   c           
         s°   d}t  dgtd| ƒ dgtd| ƒ  dgtd| ƒ  ¡}t  t|ƒ¡‰ t  t|ƒ¡‰‡ ‡‡‡‡fdd	„}||ƒ}tdddgƒD ]$}t  ||¡}||ƒ}	|	|ks†t‚q†d S )
Néd   r,   r¡   r   r¢   r2   r£   c                    s0   ˆsd nd}dd„ ˆˆ|ˆd�j ˆ | ˆd�D ƒS )Nr   c                 S   s    g | ]\}}t |ƒt |ƒf‘qS rf   )rN   )Ú.0rc   rd   rf   rf   rg   Ú
<listcomp>¿  s   ÿzNtest_stratified_kfold_label_invariance.<locals>.get_splits.<locals>.<listcomp>r¤   r¥   )rO   )rZ   r@   ©rY   r[   rž   rŸ   r‡   rf   rg   Ú
get_splits½  s      ÿ  þþz:test_stratified_kfold_label_invariance.<locals>.get_splits)	rF   rG   r¨   r•   r‹   rŠ   r   ZtakerK   )
rž   r‡   rŸ   rW   rZ   r³   Zsplits_baseÚpermZy_permZsplits_permrf   r²   rg   Ú&test_stratified_kfold_label_invariance®  s     ÿþÿ	rµ   c                  C   sf   t ddƒD ]V} tdƒjt | ¡d�}dd„ |D ƒ}t |¡t |¡ dksNt‚t |¡| ks
t‚q
d S )Né   r”   r6   ©rY   c                 S   s   g | ]\}}t |ƒ‘qS rf   ©r‹   ©r°   Ú_rd   rf   rf   rg   r±   Ñ  s     z&test_kfold_balance.<locals>.<listcomp>r2   )	r|   r   rO   rF   r•   ÚmaxÚminrK   Úsum)rC   r\   Úsizesrf   rf   rg   Útest_kfold_balanceÍ  s
    r¿   c           	   	   C   s¸   t  d¡}dgd dgd  }t  t|ƒ¡}dD ]‚}| d|d�}tddƒD ]f}| |d |… |d |… |d |… ¡}d	d
„ |D ƒ}t  |¡t  |¡ dksžt‚t  	|¡|ksJt‚qJq0d S )Nr”   r   r7   r2   é   ©TF©r‡   r¶   c                 S   s   g | ]\}}t |ƒ‘qS rf   r¸   r¹   rf   rf   rg   r±   å  s     z0test_stratifiedkfold_balance.<locals>.<listcomp>)
rF   r•   rŠ   r‹   r|   rO   r»   r¼   rK   r½   )	rŸ   rY   rZ   r[   r‡   rb   rC   r]   r¾   rf   rf   rg   Útest_stratifiedkfold_balance×  s    
&rÃ   c                  C   sÀ   t dƒ} t dddd�}t dddd�}t d¡}t d¡}t|  |¡| |¡| |¡ƒD ]T\\}}\}}\}	}
t|||	fdƒD ]$\}}tt ||¡ƒt|ƒks|t	‚q|d||< qVt
|ƒdks¼t	‚d S )Nr7   Tr   ©r‡   r@   r2   é,  r,   )r   rF   r•   ÚzerosrI   rO   r   r‹   Úintersect1drK   r½   )r\   Úkf2Zkf3rY   Z	all_foldsZtr1Zte1Ztr2Zte2Ztr3Zte3Ztr_aZtr_brf   rf   rg   Útest_shuffle_kfoldë  s    

  ÿ
rÉ   c                 C   s  t  d¡}dgd dgd  }t  t|ƒ¡}t  d¡}dgd dgd  }t  t|ƒ¡}| dddd	�}t j t| |||¡ƒt| |||¡ƒ¡ | ddt j 	d¡d	�}t
||f||f||fƒD ]P}t
|j|Ž |j|Ž ƒD ]4\\}	}
\}	}t t¡� t j |
|¡ W 5 Q R X qØq¾d S )
Né   r   r=   r2   r>   é   r7   TrÄ   )rF   r•   rŠ   r‹   rL   rM   rN   rO   rn   ro   rI   rT   rU   rK   r)   )rŸ   rY   rZ   Zgroups_1r‘   rœ   Zgroups_2r\   Údatarº   Ztest_aZtest_brf   rf   rg   Ú2test_shuffle_kfold_stratifiedkfold_reproducibility  s     

 ÿ&rÍ   c                  C   s  t  d¡} dgd dgd  }tdddd�}tdddd�}t| | |¡| | |¡ƒD ]$\\}}\}}t|ƒt|ƒksTt‚qTt|| |d dd� t  d	¡}dgd dgd  }tdddd�}tdddd�}t	d
d„ | ||¡D ƒƒ}	t	dd„ | ||¡D ƒƒ}
|	|
k�st‚d S )Né(   r   é   r2   r6   TrÄ   rƒ   r5   c                 S   s   g | ]}t |d  ƒ‘qS ©r2   ©Útuple©r°   Úsrf   rf   rg   r±   4  s     z0test_shuffle_stratifiedkfold.<locals>.<listcomp>c                 S   s   g | ]}t |d  ƒ‘qS rÐ   rÑ   rÓ   rf   rf   rg   r±   5  s     )
rF   r•   r   rI   rO   ry   rK   r€   rŠ   Úsorted)ZX_40rZ   Zkf0Zkf1rº   Ztest0Útest1rY   rÈ   Z	test_set1Z	test_set2rf   rf   rg   Útest_shuffle_stratifiedkfold"  s    
*
r×   c                  C   sú   t jd d… t jd d…  } }tddd�}d}t|dd�}t|| ||d� ¡ }d	|ksZt‚|d
ksft‚t|ddd�}t|| ||d� ¡ }|d	ks”t‚t|ddd�}t|| ||d� ¡ }|d	ksÂt‚t|ƒ}t|| ||d� ¡ }d|ksêt‚|d
ksöt‚d S )NiX  r5   g{®Gázt?)ÚCÚgammar7   Fr†   ©rb   gq=
×£pí?çš™™™™™é?Tr   rÄ   r2   g®Gázî?)	ÚdigitsrÌ   Útargetr$   r   r   ÚmeanrK   r   )rY   rZ   ÚmodelrX   rb   Z
mean_scorerf   rf   rg   Ú1test_kfold_can_detect_dependent_samples_on_digits9  s"    		rà   c                  C   sð   t dd�} t dgd dgd  ¡}t |¡ dd¡}t d¡}t |¡t|ƒ }g }|  |||¡D ]t\}}t 	|| || ¡j
dksŠt‚tt || ¡t|ƒ |d	d
� tt || ¡t|ƒ |d	d
� | t|ƒ¡ qdt |¡dksìt‚d S )Nr7   rl   r2   r<   r   é   rk   )r2   r,   r7   r8   r6   r<   r2   r2   r,   r,   r7   r7   r8   r8   r6   r6   r<   r<   r¦   r§   )r   rF   rG   rš   rq   rP   r©   r‹   rO   rÇ   rj   rK   r'   rª   r«   )ra   rZ   rY   r[   r¬   r­   rc   rd   rf   rf   rg   Ú#test_stratified_group_kfold_triviale  s    

  râ   c            
      C   s  t dd�} t dgd dgd  ¡}t |¡ dd¡}t ddddd	d	dddddd	d
d
d
dddg¡}t ddgddgddgg¡}g }t|  |||¡|ƒD ]\\\}}}t || || ¡j	dksÂt
‚t || ¡t|ƒ }	t|	|dd� | t|ƒ¡ q˜t |¡dk�s
t
‚d S )Nr7   rl   r2   r<   r   rá   rk   r,   r8   r6   g-²�ï§ê?gsh‘í|?Å?gZd;ßOå?gZd;ßOÕ?r/   çü©ñÒMbP?r§   )r   rF   rG   rš   rq   rP   rI   rO   rÇ   rj   rK   r©   r‹   r'   rª   r«   )
ra   rZ   rY   r[   Úexpectedr­   rc   rd   Úexpect_distÚ
split_distrf   rf   rg   Ú'test_stratified_group_kfold_approximatew  s    
. rç   zy, groups, expectedç      è?ç      Ð?c           	      C   s„   t dd�}t | ¡ dd¡}t| || |¡|ƒD ]N\\}}}t || || ¡jdksZt‚t 	| | ¡t
|ƒ }t||dd� q0d S )Nr7   rl   rk   r2   r   rã   r§   )r   rF   rš   rq   rI   rO   rÇ   rj   rK   r©   r‹   r'   )	rZ   r[   rä   ra   rY   rc   rd   rå   ræ   rf   rf   rg   Ú.test_stratified_group_kfold_homogeneous_groups‰  s    
 rê   Ú	cls_distr)gš™™™™™Ù?ç333333ã?)g333333Ó?çffffffæ?)çš™™™™™É?rÛ   )rÛ   rî   r4   ri   éF   c                 C   s*  d}t |d�}t|d�}tj d¡}d}|jd|| d�}t |¡ dd¡}| ||¡}	|j|||	d	�}
|j|||	d	�}d}d}t	|
|ƒD ]~\\}}\}}t 
|	| |	| ¡jdks¶t‚t || ¡t|ƒ }t || ¡t|ƒ }|tj|| d
�7 }|tj|| d
�7 }qˆ|| }|| }||k�s&t‚d S )Nr6   rl   r   r    r,   )rj   r.   rk   r2   r¥   )Zqk)r   r   rF   rn   ro   Úchoicerš   rq   rO   rI   rÇ   rj   rK   r©   r‹   r   Zentropy)rë   r4   rX   ra   Zgkfrt   Zn_pointsrZ   rY   ÚgZ
sgkf_foldsZ	gkf_foldsZ	sgkf_entrZgkf_entrZ
sgkf_trainZ	sgkf_testrº   Zgkf_testZ
sgkf_distrZ	gkf_distrrf   rf   rg   Ú/test_stratified_group_kfold_against_group_kfold¢  s*    

rò   c                  C   sÞ   t ddd� t¡} t ddd� t¡}t t d¡dd� t¡}t tdƒdd� t¡}t| |||ƒD ]x\}}}}t|d |d ƒ t|d |d ƒ t|d |d ƒ t|d |d ƒ t|d |d ƒ t|d |d ƒ q`d S )Nrî   r   ©r1   r@   r,   r2   )r   rO   rY   rF   Zint32r¨   rI   r)   )Zss1Zss2Zss3Zss4Út1Út2Zt3Zt4rf   rf   rg   Útest_shuffle_split¿  s    rö   Úsplit_classztrain_size, exp_train, exp_test)Nr�   r2   )r>   r>   r,   )rÛ   r>   r,   c                 C   sR   t  d¡}t  d¡}t| |d� ||¡ƒ\}}t|ƒ|ks>t‚t|ƒ|ksNt‚d S ©Nr5   ©Ú
train_size)rF   r•   rˆ   rO   r‹   rK   )r÷   rú   Ú	exp_trainÚexp_testrY   rZ   ÚX_trainÚX_testrf   rf   rg   Ú$test_shuffle_split_default_test_sizeÍ  s
    

rÿ   )Nr>   r,   )r=   r=   r7   )rí   r=   r7   c                 C   s\   t  d¡}t  d¡}tdƒ}tt| d� |||¡ƒ\}}t|ƒ|ksHt‚t|ƒ|ksXt‚d S rø   )rF   r•   r|   rˆ   r   rO   r‹   rK   )rú   rû   rü   rY   rZ   r[   rý   rþ   rf   rf   rg   Ú*test_group_shuffle_split_default_test_sizeÝ  s    

r   c                  C   s0  t  d¡} t  dddddddg¡}t t¡� ttddd� | |¡ƒ W 5 Q R X t t¡� ttddd� | |¡ƒ W 5 Q R X t t¡�  ttdddd� | |¡ƒ W 5 Q R X t  d	¡} t  dddddddddg	¡}t t¡� ttdd
� | |¡ƒ W 5 Q R X t t¡� ttdd� | |¡ƒ W 5 Q R X d S )Nr=   r   r2   r,   r7   rî   r0   ©r1   rú   r�   rù   )	rF   rŠ   rP   rT   rU   rV   rˆ   r   rO   ©rY   rZ   rf   rf   rg   Ú"test_stratified_shuffle_split_inití  s    
""$
 r  c                  C   s„   t  dddddddddddddddg¡} d}d}td||dd� t  t| ƒ¡| ¡}|D ](\}}t|ƒ|ksnt‚t|ƒ|ksVt‚qVd S )	Nr   r2   r,   r7   r6   r5   r<   )r1   rú   r@   )rF   rG   r   rO   r•   r‹   rK   )rZ   r1   rú   Ússsrc   rd   rf   rf   rg   Ú0test_stratified_shuffle_split_respects_test_size  s    (   ÿ þr  c            	      C   s4  t  ddddddddddddg¡t  ddddddddddddg¡t  dddddddddddddddgd ¡t  ddddddddddddddddg¡t  dgd dgd  ¡t  d	d
„ tdƒD ƒ¡ddddddddddddgddddddddddddgg} | D �]0}tdddd� t  t|ƒ¡|¡}t  |¡}t  	dt|ƒ ¡}t|ƒ| }|D ]Þ\}}t
t  || ¡t  || ¡ƒ t  t j|| dd�d ¡tt|| ƒƒ }t  t j|| dd�d ¡tt|| ƒƒ }t||dƒ t|ƒt|ƒ |jk�sôt‚t|ƒ|k�st‚t|ƒ|k�st‚t
t  ||¡g ƒ �qNqüd S )Nr2   r,   r7   r   r8   rk   i   é2   c                 S   s   g | ]}|gd |  ‘qS )r¯   rf   )r°   rC   rf   rf   rg   r±     s     z6test_stratified_shuffle_split_iter.<locals>.<listcomp>r¶   r9   r:   r;   r<   g…ëQ¸Õ?ró   T)Zreturn_inverse)rF   rG   Zconcatenater|   r   rO   r•   r‹   Z
asanyarrayÚceilr)   Úuniquer©   Úfloatr(   rj   rK   rÇ   )	ZysrZ   r  r1   rú   rc   rd   Zp_trainZp_testrf   rf   rg   Ú"test_stratified_shuffle_split_iter  s<      *(ø
 ÿ

ÿ
ÿr
  c                     s˜  d} d‰ ‡ fdd„}dD �]x}t  |d ddg ¡}tˆ d	|  dd
�}dg| }dg| }d}|jt  |¡|d�D ]D\}}	|d7 }||f||	ffD ]"\}
}|D ]}|
|  d7  < qžq’qr|ˆ ksÄt‚t|d	|  d	d	|   d�\}}t|ƒ|ksòt‚t|	ƒ|k�st‚tt|ƒ 	|	¡ƒdk�s t‚t  
|¡}|jd	|  k�s>t‚|| t|ƒk�sTt‚t|ƒdk�sft‚t|ƒ| }t|ƒ| }|||ƒ |||ƒ qd S )Nr6   r    c                    s<   dˆ  }t  ˆ |¡}| D ]}| |¡}||kstdƒ‚qd S )Nçš™™™™™©?z=An index is not drawn with chance corresponding to even draws)r   ZbinomZpmfrK   )Z
idx_countsr.   Ú	thresholdÚbfÚcountZprobrl   rf   rg   Úassert_counts_are_ok>  s    
ÿþz@test_stratified_shuffle_split_even.<locals>.assert_counts_are_ok)r<   é   r,   r   r2   ç      ð?©rX   r1   r@   r  r  )rF   rG   r   rO   r•   rK   r"   r‹   ry   rz   r  r1   r	  )Zn_foldsr  rW   r[   r—   Ztrain_countsZtest_countsÚn_splits_actualrc   rd   ÚcounterÚidsÚidZn_trainZn_testZgroup_countsZ	ex_test_pZ
ex_train_prf   rl   rg   Ú"test_stratified_shuffle_split_even8  sF    
  ÿ

  
ÿ


r  c                  C   s|   ddddgd ddgd  } t  | ¡}tdddd�}t|j|| d	�ƒ\}}tt  ||¡g ƒ tt  ||¡t  t	| ƒ¡ƒ d S )
Nr   r2   r,   r7   r8   r6   r/   r  r  )
rF   rš   r   rˆ   rO   r)   rÇ   Úunion1drŠ   r‹   )rZ   rY   r  rc   rd   rf   rf   rg   Ú4test_stratified_shuffle_split_overlap_train_test_bugl  s    
r  c                  C   s  t  ddgddgddgddgg¡t  ddgddgddgddgg¡fD ]Â} t  | ¡}tdddd�}t|j|| d�ƒ\}}| | }| | }tt  ||¡g ƒ tt  ||¡t  	t
| ƒ¡ƒ t  | d d …df ¡}|t  |d d …df ¡ksèt‚|t  |d d …df ¡ksDt‚qDd S )Nr   r2   r/   r  r  )rF   rG   rš   r   rˆ   rO   r)   rÇ   r  rŠ   r‹   rÞ   rK   )rZ   rY   r  rc   rd   Úy_trainÚy_testÚexpected_ratiorf   rf   rg   Ú(test_stratified_shuffle_split_multilabel}  s      þ
r  c            
      C   sê   dddgdgd  dddg } dddgdgd  dddg }t  | gd |gd  ¡}t  |¡}tdddd�}t|j||d�ƒ\}}|| }|| }t  |d d …d	f ¡}	|	t  |d d …d	f ¡ksÈt‚|	t  |d d …d	f ¡ksæt‚d S )
Nr2   r   r    r5   r¯   r/   r  r  r8   )rF   rG   rš   r   rˆ   rO   rÞ   rK   )
Zrow_with_many_zerosZrow_with_many_onesrZ   rY   r  rc   rd   r  r  r  rf   rf   rg   Ú4test_stratified_shuffle_split_multilabel_many_labels–  s    
r  c            	      C   sž   t  dd¡} g }g }ttddd� t¡ƒD ](\}\}}| |¡ | |¡ || |< q*t| ƒ}tt  	| ¡ƒ| 
¡ ksvt‚t| ¡ Ž \}}t||ƒ t||ƒ d S )Nr5   g      ð¿r6   TrÂ   )rF   ÚfullrH   r   rO   rY   rª   r   r‹   r  rJ   rK   rI   r)   )	ÚfoldsZkf_trainZkf_testrC   Z	train_indZtest_indr`   Zps_trainZps_testrf   rf   rg   Ú%test_predefinedsplit_with_kfold_split­  s    "



r!  c                  C   sT  t D �]H} t t| ƒ¡ }}d}d}t||dd�}t|ƒ |j||| d�|ksRt‚t | ¡}t 	| ¡}|j
||| d�D ]Ö\}}	t || ¡}
t ||	 ¡}t t || |¡¡r´t‚t t ||	 |
¡¡rÎt‚|| j||	 j |jksìt‚tt ||	¡g ƒ tt|ƒt|t|ƒ ƒ ƒdk�s$t‚tt|
ƒtd| t|ƒ ƒ ƒdksvt‚qvqd S )Nr<   gUUUUUUÕ?r   ró   r¥   r2   r  )Útest_groupsrF   r•   r‹   r   rS   rJ   rK   r  rP   rO   ÚanyÚisinrj   r)   rÇ   ÚabsÚround)Úgroups_irY   rZ   rX   r1   ZsloZl_uniqueÚlrc   rd   Zl_train_uniqueZl_test_uniquerf   rf   rg   Útest_group_shuffle_split¾  s&    


&"ÿr)  c               	   C   s˜  t ƒ } tdd�}tdd�}t| ƒdks*t‚t|ƒdks:t‚t|ƒdksJt‚ttdd�ƒdks`t‚t| df|df|dffƒD ]ò\}\}}ttƒD ]Ü\}}tt |¡ƒ}|dkr°|n||d  d }	t 	t|ƒ¡ }
}|j
|
||d	�|	ksêt‚t |¡}|j|
||d	�D ]d\}}tt || || ¡ ¡ g ƒ t|ƒt|ƒ t|ƒk�sHt‚t || ¡jd
 �st|ƒ‚�qqŽqz|  
d d dddddg¡dk�s�t‚| j
ddddgd	�dk�s®t‚| 
d d t d¡¡dk�sÌt‚|j
t d¡d	�dk�sèt‚t t¡� |  
d d dtjdg¡ W 5 Q R X t t¡� | 
d d dtjdg¡ W 5 Q R X d}tjt|d�� |  
d d d ¡ W 5 Q R X tjt|d�� | 
d d d ¡ W 5 Q R X d S )Nr2   r3   r,   rA   zLeavePGroupsOut(n_groups=1)rB   r7   zLeavePGroupsOut(n_groups=3)r¥   r   ÚaÚbÚcr  çš™™™™™ñ?g333333ó?r8   r<   g        z*The 'groups' parameter should not be None.rD   )r   r   rS   rK   rH   r"  r‹   rF   r  r•   rJ   rP   rO   r)   rÇ   ÚtolistÚshaperŠ   rT   rU   rV   ÚnanÚinf)ZlogoZlpgo_1Zlpgo_2Újrb   Zp_groups_outrC   r'  r4   rX   rY   rZ   Z
groups_arrrc   rd   re   rf   rf   rg   Útest_leave_one_p_group_outã  sD    

&
 ÿ&"  r3  c               
   C   s  t  ddddddddg¡} t  t| ƒ¡}t j| dd�}tƒ j|| d�}tƒ j|| d�}tdd�j|| d�}tdd�j|| d�}d|d d …< ||f||ffD ]8\}}t||ƒD ]$\\}	}
\}}t|	|ƒ t|
|ƒ q¬qšdtdd�j	||| d	�ksòt
‚dtƒ j	||| d	�k�st
‚d S )
Nr   r2   r,   T)Úcopyr¥   r3   r7   )rZ   r[   )rF   rG   r•   r‹   r   rO   r   rI   r)   rJ   rK   )r[   rY   Zgroups_changingr^   Zlolo_changingZlploZlplo_changingZlloZllo_changingrc   rd   Z
train_chanZ	test_chanrf   rf   rg   Ú$test_leave_group_out_changing_groups  s    
r5  c                  C   s¤   t  ddddddg¡} t  t| ƒ¡}ttƒ j|| d�ƒ}ddddgddgfddddgddgfddddgddgfg}|D ](\}}t|ƒ\}}t||ƒ t||ƒ qvd S )Nr,   r   r2   r¥   r8   r6   r7   )	rF   rG   r•   r‹   Úiterr   rO   rˆ   r)   )r[   rY   r—   Zexpected_indicesZexpected_trainZexpected_testrc   rd   rf   rf   rg   Ú%test_leave_group_out_order_dependence0  s    ý
r7  c               	   C   sL  t  d¡ }  }}t d¡}tjt|d�� ttƒ  	| ||¡ƒ W 5 Q R X t  d¡ }  }}t d|› d�¡}tjt|d�� ttƒ  	| ||¡ƒ W 5 Q R X t  d¡ }  }}t d|› d�¡}tjt|d�� tt
d	d
� 	| ||¡ƒ W 5 Q R X t  d	¡ }  }}t d|› d�¡}tjt|d�� tt
d	d
� 	| ||¡ƒ W 5 Q R X d S )Nr   zFound array with 0 sample(s)rD   r2   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 presentr7   r3   )rF   r•   ÚreÚescaperT   rU   rV   rˆ   r   rO   r   rŠ   )rY   rZ   r[   re   rf   rf   rg   Ú:test_leave_one_p_group_out_error_on_fewer_number_of_groupsD  s,    

ÿ
ÿ"
ÿr:  c               
   C   sR   t tfD ]D} t t¡� | dd� W 5 Q R X t t¡� | dd� W 5 Q R X qd S )Nr   )Ú	n_repeatsr„   )r   r   rT   rU   rV   rÚ   rf   rf   rg   Útest_repeated_cv_value_errorsg  s
    r<  Ú
RepeatedCVc                 C   s6   d\}}| ||d�}d  |jj¡}|t|ƒks2t‚d S )N)r,   r<   ©rX   r;  z.{}(n_repeats=6, n_splits=2, random_state=None))rr   Ú	__class__Ú__name__rS   rK   )r=  rX   r;  Zrepeated_cvZrepeated_cv_reprrf   rf   rg   Útest_repeated_cv_reprq  s    ÿrA  c               
   C   s  ddgddgddgddgd	d
gg} d}t dd|d�}tdƒD ]Ô}| | ¡}t|ƒ\}}t|ddgƒ t|dddgƒ t|ƒ\}}t|dddgƒ t|ddgƒ t|ƒ\}}t|ddgƒ t|dddgƒ t|ƒ\}}t|dddgƒ t|ddgƒ t t¡� t|ƒ W 5 Q R X q<d S )Nr2   r,   r7   r8   r6   r<   r=   r>   r�   r5   i{ic©rX   r;  r@   r   )r   r|   rO   rˆ   r)   rT   rU   ÚStopIteration)rY   r@   Úrkfrº   r—   rc   rd   rf   rf   rg   Ú&test_repeated_kfold_determinstic_split{  s&    "
rE  c                  C   s0   d} d}t | |d�}| | }|| ¡ ks,t‚d S ©Nr7   r8   r>  )r   rJ   rK   )rX   r;  rD  r   rf   rf   rg   Ú$test_get_n_splits_for_repeated_kfold˜  s
    rG  c                  C   s0   d} d}t | |d�}| | }|| ¡ ks,t‚d S rF  )r   rJ   rK   )rX   r;  Úrskfr   rf   rf   rg   Ú/test_get_n_splits_for_repeated_stratified_kfold   s
    rI  c               
   C   s&  ddgddgddgddgd	d
gg} dddddg}d}t dd|d�}tdƒD ]Ö}| | |¡}t|ƒ\}}t|ddgƒ t|dddgƒ t|ƒ\}}t|dddgƒ t|ddgƒ t|ƒ\}}t|ddgƒ t|dddgƒ t|ƒ\}}t|dddgƒ t|ddgƒ t t¡� t|ƒ W 5 Q R X qJd S )Nr2   r,   r7   r8   r6   r<   r=   r>   r�   r5   r   iq²ésrB  )r   r|   rO   rˆ   r)   rT   rU   rC  )rY   rZ   r@   rH  rº   r—   rc   rd   rf   rf   rg   Ú1test_repeated_stratified_kfold_determinstic_split¨  s(    "rJ  c                	   C   s  t  tt¡ t jtttdƒdd� t jtttdƒddd� t jtttdƒt d¡t d¡d� t jtttdƒdd� t jtttdƒdd	d� t jtttdƒdd
� t  tttdƒtdƒ¡ t jtttdƒddd� t jtdd�� ttdƒddd� W 5 Q R X d S )Nr7   r-  rù   rì   r  Z
wrong_typer0   r,   r8   )Zsome_argumenté*   r5   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¶   r2   )rú   r1   )rT   rU   rV   r    r|   rF   Zfloat32r�   rf   rf   rf   rg   Útest_train_test_split_errorsÆ  s(    ûþrM  )Nr=   r7   c                 C   s4   t t| d�\}}t|ƒ|ks t‚t|ƒ|ks0t‚d S )Nrù   )r    rY   r‹   rK   )rú   rû   rü   rý   rþ   rf   rf   rg   Ú'test_train_test_split_default_test_sizeâ  s    rN  c                  C   sD  t  d¡ d¡} t| ƒ}t  d¡}t| |d dd�}|\}}}}t|ƒt|ƒksRt‚t|d d …df |d ƒ t|d d …df |d ƒ t| || ¡ ƒ}|\}}}}	}}t	|t
ƒs´t‚t	|t
ƒsÂt‚t  d¡ ddd	d
¡}
t  d¡ ddd¡}t|
|ƒ}|d jdk�s
t‚|d jdk�st‚|d
 jdk�s2t‚|d	 jdk�sFt‚t  ddddd
d
d
d
g¡}td
ddddgd
dd
ddgƒD ]p\}}t|||dd�\}}t|ƒ|k�s¬t‚t|ƒt|ƒ t|ƒk�sÊt‚t  |dk¡t  |d
k¡k�s~t‚�q~t  d¡}dD ]@}t|d|d�\}}t|ddgƒ t|ddd
d	ddddgƒ �qþd S )Nr¯   ©r5   r5   r5   r/   r  r   rÅ   r6   r7   r,   i  r=   r¶   )r=   r6   r7   r,   r2   )r7   r6   r7   r,   )r=   r=   r¶   )r7   r=   r¶   r8   ré   rè   r<   )r1   rL  r@   )r,   rî   F)r‡   r1   r>   r�   )rF   rŠ   rq   r   r    r‹   rK   r)   r.  Ú
isinstancerN   r/  rG   rI   r½   )rY   ÚX_srZ   rO   rý   rþ   r  r  Z	X_s_trainZX_s_testZX_4dZy_3dr1   Zexp_test_sizerc   rd   rf   rf   rg   Útest_train_test_splitî  sF    

&   ÿ
&
rR  c                  C   sb   d} t  | ¡}|d|  k}t|||dd�}|\}}}}|j|j | ksJt‚|j|j | ks^t‚dS )z�Check for integer overflow on 32-bit platforms.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20774
    i † ç®Gáz®ï?ré   )rL  rú   N)rF   rŠ   r    rj   rK   )Z
big_numberrY   rZ   rO   rý   rþ   r  r  rf   rf   rg   Ú$test_train_test_split_32bit_overflow  s    	
rT  c                  C   st   t g} zddlm} |  |¡ W n tk
r4   Y nX | D ]4}|tƒ}t|ƒ\}}t||ƒs`t‚t||ƒs:t‚q:d S )Nr   )Ú	DataFrame)	r&   ZpandasrU  rª   ÚImportErrorrY   r    rP  rK   )ÚtypesrU  ÚInputFeatureTypeÚX_dfrý   rþ   rf   rf   rg   Útest_train_test_split_pandas4  s    rZ  c                  C   sh   t  d¡ d¡} tttg}|D ]D}|| ƒ}t|ƒ\}}t|ƒrH|jdksLt	‚t|ƒr^|jdkst	‚qd S )Nr¯   rO  Zcsr)
rF   rŠ   rq   r   r   r   r    r	   rr   rK   )rY   Zsparse_typesrX  rQ  rý   rþ   rf   rf   rg   Útest_train_test_split_sparseF  s    
r[  c                  C   s@   t tƒ} t| ƒ\}}t|t ƒs"t‚t|t ƒs0t‚t| ƒ\}}d S rx   )r&   rY   r    rP  rK   )rY  rý   rþ   ZX_train_arrZ
X_test_arrrf   rf   rg   Ú!test_train_test_split_mock_pandasR  s
    r\  c                  C   sæ   t  d¡} dgd dgd  }t  t  d¡t  d¡f¡}| ¡ }dD ]œ}t| ||rV|nd dd�\}}}}t| ||rv|nd dd�\}	}
}}t| ||r–|nd dd�\}}}}t j ||	¡ t j ||¡ t j ||¡ t j ||¡ qDd S )	Nr=   r9   r8   r™   r7   rÁ   r   )rL  r@   )rF   r•   ÚhstackrÆ   r.  r    rL   rM   )rY   r›   rœ   Úy3rL  ZX_train1ZX_test1Zy_train1Zy_test1ZX_train2ZX_test2Zy_train2Zy_test2ZX_train3ZX_test3Zy_train3Zy_test3rf   rf   rg   Ú test_train_test_split_list_input[  s6    
  
 ÿ  
 ÿ  
 ÿr_  ztest_size, train_size)r…   N)r  N)r¡   gffffffî?)Ny              ð?)r¶   N)r5   N)r>   r7   c              	   C   s0   t  t¡� tt| |d� t¡ƒ W 5 Q R X d S )Nr  )rT   rU   rV   rˆ   r   rO   rY   r  rf   rf   rg   Útest_shufflesplit_errorss  s    r`  c                  C   s8   t dd�} tdd„ |  t¡D ƒdd„ |  t¡D ƒƒ d S )Né   r?   c                 S   s   g | ]\}}|‘qS rf   rf   )r°   r*  r+  rf   rf   rg   r±   €  s     z2test_shufflesplit_reproducible.<locals>.<listcomp>)r   r)   rO   rY   )r_   rf   rf   rg   Útest_shufflesplit_reproducible|  s    
rb  c                  C   sœ   t ddd�} t d¡}dgd dgd  }t t d¡t d¡f¡}| ¡ }tj t|  	||¡ƒt|  	||¡ƒ¡ tj t|  	||¡ƒt|  	||¡ƒ¡ d S )	Nr,   rK  ró   r=   r9   r8   r™   r7   )
r   rF   r•   r]  rÆ   r.  rL   rM   rN   rO   )r  rY   r›   rœ   r^  rf   rf   rg   Ú&test_stratifiedshufflesplit_list_inputƒ  s    
&rc  c                  C   sX   t jdt jd� dd¡} t j| dd d …f< t  ddg| jd d ¡}t| |dd	d
� d S )NéÈ   ©rQ   r5   rk   r,   r   r2   rî   rK  ró   )rF   rŠ   Zfloat64rq   r0  Úrepeatr/  r    r  rf   rf   rg   Ú test_train_test_split_allow_nans�  s    rg  c                  C   s^  t  d¡} tddd�}t j ttdƒ | ¡ƒt| | ¡ƒ¡ t  dddddddddg	¡}td|dd�}t j tt	dƒ | |¡ƒt| | |¡ƒ¡ t  dddddddddg	¡}td|dd�}t j tt	dƒ | |¡ƒt| | |¡ƒ¡ | 
d	d¡}td|dd�}t j tt	dƒ | |¡ƒt| | |¡ƒ¡ t  tt	dƒ | |¡ƒd ttdƒ | |¡ƒd k¡�rdt‚t  d
¡} t  ddddgddddgddddgddddgddddgg¡}td|dd�}t j ttdƒ | ¡ƒt| | ¡ƒ¡ t  ddgddgddgddgddgg¡}td|dd�}t j ttdƒ | ¡ƒt| | ¡ƒ¡ t t¡� tdd� W 5 Q R X d S )Nr�   r7   F)Ú
classifierr   r2   Tr,   rk   r6   r^   rÚ   )rF   r•   r   rL   rM   rN   r   rO   rG   r   rq   Úallrˆ   rK   rT   rU   rV   )rY   rb   Zy_binaryZy_multiclassZy_multiclass_2dru   Zy_multioutputrf   rf   rg   Útest_check_cv—  sJ    
& ÿ ÿþÿÿ

4ÿ&(&rj  c                  C   sÖ   t ƒ  tt¡} t| ƒ}tj t| tt¡ƒt| tt¡ƒ¡ t ddd� tt¡}t|ƒ}tj t| tt¡ƒt| tt¡ƒ¡ z.d}tj t| tt¡ƒt| tt¡ƒ¡ W n t	k
rÄ   d}Y nX |rÒt	dƒ‚d S )NTr   rÄ   FzVIf the splits are randomized, successive calls to split should yield different results)
r   rO   rY   rZ   r   rF   rL   rM   rN   rK   )Zkf_iterZkf_iter_wrappedZkf_randomized_iterZkf_randomized_iter_wrappedZsplits_are_equalrf   rf   rg   Útest_cv_iterable_wrapperÅ  s.     ÿþþ
ÿrk  c              (   C   s˜  t j d¡}d}d}d}t  |¡ }}d| }| d||¡}|| }	tt  |¡ƒ t  |¡}
| |d�}t| 	|||¡ƒD ]\}\}}||
|< qxt|
ƒt|ƒks¢t
‚t  |
¡D ] }|tt|
|kƒ|	 ƒks¬t
‚q¬t  |¡D ]"}tt  |
||k ¡ƒdksØt
‚qØt j|td�}| 	|||¡D ],\}}tt  || || ¡ƒdk�st
‚�qt  d	d
ddd
dddddddddd
ddddddddddddddd d!ddd"d#d$d%d&g&¡}tt  |¡ƒ}t|ƒ}d}d| }|| }	t  |¡ }}t  |¡}
t| 	|||¡ƒD ]\}\}}||
|< �qðt|
ƒt|ƒk�st
‚t  |
¡D ]$}|tt|
|kƒ|	 ƒk�s(t
‚�q(t ¡ �D t d't¡ t  |¡D ]&}tt  |
||k ¡ƒdk�snt
‚�qnW 5 Q R X t j|td�}| 	|||¡D ],\}}tt  || || ¡ƒdk�s¼t
‚�q¼t| 	||| ¡ ¡ƒ}t| 	|||¡|ƒD ]&\\}}\}}t||ƒ t||ƒ �qt  dddd(d(g¡}t  t|ƒ¡ }}tjtd)d*�� ttd+d� 	|||¡ƒ W 5 Q R X d S ),Nr   rÊ   r    r6   r  rl   r2   re  ZAlbertZJeanZBertrandZMichelZFrancisZRobertZRachelZLoisZMichelleZBernardZMarionZLauraZFranckZJohnZGaelZAnnaZAlixZDavidZTonyZAbelZBeckyZMadmoodZCaryZMaryZ	AlexandreZBarackZAbdoulZRashaÚXiZSilviar‚   r,   z%Cannot have number of splits.*greaterrD   r7   )rF   rn   ro   r•   rp   r‹   r  rÆ   rH   rO   rK   r%  r½   rP   ÚobjectrÇ   rG   rŒ   r�   rŽ   ÚFutureWarningrN   r.  rI   r)   rT   rU   rV   rˆ   r   )rŸ   rt   r4   rW   rX   rY   rZ   Z	tolerancer[   Zideal_n_groups_per_foldr   ZlkfrC   rº   rd   Úgrouprc   Zcv_iterZtrain1rÖ   Útrain2Ztest2rf   rf   rg   Útest_group_kfoldæ  s²    


 &Úÿ+
"
.&$
rq  c               	   C   sn  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d�� ttdd� | ¡ƒ W 5 Q R X tdƒ}| | d d… ¡}t|ƒ\}}t|ddgƒ t|ddgƒ t|ƒ\}}t|ddddgƒ t|ddgƒ tdƒ | ¡}t|ƒ\}}t|dddgƒ t|ddgƒ t|ƒ\}}t|dddddgƒ t|ddgƒ tdƒ | ¡}tt|ƒƒ}|| 	¡ k�s\t
‚|dk�sjt
‚d S )Nr2   r,   r7   r8   r6   r<   r=   r>   r�   r5   r¶   rá   é   rÀ   z$Cannot have number of folds.*greaterrD   rl   rk   r   )rT   rU   rV   rˆ   r   rO   r)   r‹   rN   rJ   rK   )rY   Ztscvr—   rc   rd   r  rf   rf   rg   Útest_time_series_cvb  s,    .rs  c                 C   s^   t | |ƒD ]N\\}}\}}t||ƒ t|ƒ|ks4t‚tt|ƒ| dƒ}t|||d … ƒ q
d S )Nr   )rI   r)   r‹   rK   r»   )r—   Úcheck_splitsÚmax_train_sizerc   rd   Zcheck_trainZ
check_testZsuffix_startrf   rf   rg   Ú!_check_time_series_max_train_size‡  s
    
rv  c                  C   s~   t  d¡} tdd� | ¡}tddd� | ¡}t||dd� tddd� | ¡}t||dd� tddd� | ¡}t||dd� d S )N)r<   r2   r7   rl   )rX   ru  )ru  r,   r6   )rF   rÆ   r   rO   rv  )rY   r—   rt  rf   rf   rg   Útest_time_series_max_train_size�  s    
rw  c               	   C   sJ  t  d¡} tddd� | ¡}t|ƒ\}}t|dgƒ t|dddgƒ t|ƒ\}}t|ddddgƒ t|ddd	gƒ t|ƒ\}}t|ddddddd	gƒ t|d
ddgƒ tdddd� | ¡}t|ƒ\}}t|ddddgƒ t|d	d
gƒ t|ƒ\}}t|ddd	d
gƒ t|ddgƒ tjtdd��  tddd� | ¡}t|ƒ W 5 Q R X d S )N©r5   r2   r7   )rX   r1   r   r2   r,   r8   r6   r<   r=   r>   r�   )rX   r1   ru  zToo many splits.*with test_sizerD   ©	rF   rÆ   r   rO   rˆ   r)   rT   rU   rV   ©rY   r—   rc   rd   rf   rf   rg   Útest_time_series_test_sizež  s*    
r{  c               	   C   s  t  d¡} tddd� | ¡}t|ƒ\}}t|ddgƒ t|dddgƒ t|ƒ\}}t|dddd	dgƒ t|d
ddgƒ td	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d� | ¡}t|ƒ\}}t|dddd	gƒ t|dd
gƒ t|ƒ\}}t|dd	ddgƒ t|ddgƒ tddd	d� | ¡}t|ƒ\}}t|ddgƒ t|dddgƒ t|ƒ\}}t|dddd	dgƒ t|d
ddgƒ tjtdd��  tddd� | ¡}t|ƒ W 5 Q R X d S )Nrx  r,   )rX   Úgapr   r2   r8   r6   r<   r7   r=   r>   r�   )rX   r|  ru  )rX   r|  ru  r1   )rX   r|  r1   zToo many splits.*and gaprD   ry  rz  rf   rf   rg   Útest_time_series_gapÁ  sF    
r}  c               
   C   s¤   t j d¡} tdddd�\}}|  ddd¡}tƒ tdd�tƒ tdd�tƒ t	ƒ t
ddd�g}t|dƒD ]:\}}ttƒ d	d
dgi|dd�}t|||||d|id� qdd S )Nr   rÊ   r,   )rW   Z	n_classesr@   r6   rl   r7   )rX   r@   ZstrategyZ
stratifiedZmost_frequentÚraise)Z
param_gridrb   Zerror_scorer[   )rY   rZ   r[   rb   Z
fit_params)rF   rn   ro   r   rp   r   r   r   r   r   r   r   r   r   r   )rt   rY   rZ   r[   ZcvsZinner_cvZouter_cvÚgsrf   rf   rg   Útest_nested_cvú  s4    
ù

ü     ÿr€  c                  C   s(   G dd„ dƒ} t | ddƒƒdks$t‚d S )Nc                   @   s   e Zd Zddd„Zdd„ ZdS )z%test_build_repr.<locals>.MockSplitterr   Nc                 S   s   || _ || _|| _d S rx   )r*  r+  r,  )Úselfr*  r+  r,  rf   rf   rg   Ú__init__  s    z.test_build_repr.<locals>.MockSplitter.__init__c                 S   s   t | ƒS rx   )r!   )r�  rf   rf   rg   Ú__repr__  s    z.test_build_repr.<locals>.MockSplitter.__repr__)r   N)r@  Ú
__module__Ú__qualname__r‚  rƒ  rf   rf   rf   rg   ÚMockSplitter  s   
r†  r6   r<   zMockSplitter(a=5, b=6, c=None))rS   rK   )r†  rf   rf   rg   Útest_build_repr  s    	r‡  Ú
CVSplitterc              	   C   sN   | dd�}dggdg }}t jtdd�� t|j||dgd�ƒ W 5 Q R X d S )NrS  r0   r2   r   ú[With n_samples=1, test_size=0.99 and train_size=None, the resulting train set will be emptyrD   r¥   )rT   rU   rV   rˆ   rO   )rˆ  rb   rY   rZ   rf   rf   rg   Ú!test_shuffle_split_empty_trainset$  s    
ýrŠ  c               	   C   sj   dgg\} t jtdd�� t| dd� W 5 Q R X dgdgdgg} t jtdd�� t| dd� W 5 Q R X d S )Nr2   r‰  rD   rS  r0   z[With n_samples=3, test_size=0.67 and train_size=None, the resulting train set will be emptygq=
×£på?)rT   rU   rV   r    r·   rf   rf   rg   Ú$test_train_test_split_empty_trainset4  s    
ýýr‹  c               	   C   sD   t ƒ } dggdg }}tjtdd�� t|  ||¡ƒ W 5 Q R X d S )Nr2   r   z+Cannot perform LeaveOneOut with n_samples=1rD   )r   rT   rU   rV   rˆ   rO   ©rb   rY   rZ   rf   rf   rg   Ú!test_leave_one_out_empty_trainsetJ  s    r�  c               	   C   sV   t dd�} dgdggddg }}tjtdd�� t| j||ddgd�ƒ W 5 Q R X d S )	Nr,   r-   r2   r   r7   z6p=2 must be strictly less than the number of samples=2rD   r¥   )r   rT   rU   rV   rˆ   rO   rŒ  rf   rf   rg   Útest_leave_p_out_empty_trainsetR  s    
 ÿrŽ  ÚKlassc              	   C   s,   t jtdd�� | dddd� W 5 Q R X d S )Nz$has no effect since shuffle is FalserD   r7   Fr   rÄ   )rT   rU   rV   )r�  rf   rf   rg   Útest_random_state_shuffle_false\  s    r�  zcv, expectedé{   rÄ   r?   c                 C   s   t | ƒ|kst‚d S rx   )r#   rK   )rb   rä   rf   rf   rg   Útest_yields_constant_splitsc  s    %r’  rb   c                 C   s   g | ]}t |ƒ‘qS rf   ©rs   ©r°   rb   rf   rf   rg   r±   ‹  s     r±   )r  c                 C   sZ   t | dƒst‚|  ¡ }| tkr4|jjd dksHt‚n| tkrH|jjrHt‚t|dgd� dS )z>Check get_metadata_routing returns the correct MetadataRouter.Úget_metadata_routingr[   TrO   )ÚexcludeN)ÚhasattrrK   r•  ÚGROUP_SPLITTERSrO   ÚrequestsÚNO_GROUP_SPLITTERSr%   )rb   Úmetadatarf   rf   rg   Ú"test_splitter_get_metadata_routing‹  s    rœ  c                 C   s   g | ]}t |ƒ‘qS rf   r“  r”  rf   rf   rg   r±   ˜  s     c                 C   s2   | t krt| dƒs.t‚n| tkr.t| dƒr.t‚dS )zJCheck set_split_request is defined for group splitters and not for others.Zset_split_requestN)r˜  r—  rK   rš  rÚ   rf   rf   rg   Útest_splitter_set_split_request˜  s    r�  )N)–Ú__doc__r8  rŒ   Ú	itertoolsr   r   r   ÚnumpyrF   rT   Zscipyr   Zscipy.sparser   r   r   r	   Zscipy.specialr
   Zsklearn.datasetsr   r   Zsklearn.dummyr   Zsklearn.model_selectionr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    Zsklearn.model_selection._splitr!   r"   r#   Zsklearn.svmr$   Z#sklearn.tests.test_metadata_routingr%   Zsklearn.utils._mockingr&   Zsklearn.utils._testingr'   r(   r)   r*   Zsklearn.utils.validationr+   rš  r˜  ZALL_SPLITTERSr•   rY   rŠ   rZ   ÚeyeZP_sparserG   r"  rÜ   rh   rw   r}   r€   r’   r–   r˜   r�   ÚmarkZparametrizer®   rµ   r¿   rÃ   rÉ   rÍ   r×   rà   râ   rç   rP   rê   rò   rö   rÿ   r   r  r  r
  r  r  r  r  r!  r)  r3  r5  r7  r:  r<  rA  rE  rG  rI  rJ  rM  rN  rR  rT  rZ  r[  r\  r_  r`  rb  rc  rg  rj  rk  rq  rs  rv  rw  r{  r}  r€  r‡  rŠ  r‹  r�  rŽ  r�  rn   ro   r’  rœ  r�  rf   rf   rf   rg   Ú<module>   sš  Töû
  &(ú
U'
I+


, ý ýúþ

 ÿ ÿ

%4%7#
	
	 ÿ
	/
	þ
.!
{%#9 ÿ


áþ$

