U
    ½mœd9 ã                %   @   sV	  d Z ddlZddlZddlZddlZddlmZmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% ddlm&Z& ddlm'Z' ddlm(Z( ddlm)Z) ddlm*Z* ddlm+Z+ ddlm,Z, dd lm-Z- dd!lm.Z. dd"l/m0Z0 dd#l1m2Z2 dd$l1m3Z3 dd%l1m4Z4 dd&l5m6Z6 dd'l5m7Z7 dd(l8m9Z9 e :d)¡Z;e <d)¡d* Z=ee >d+¡ƒZ?e @d,d,d,d,d*d*d*d-d-d-d-d-g¡e @dddd,d,d,d*d*d*d-d-d-g¡e @dd,d*d-dd,d*d-dd,d*d-dd,d*g¡e @d,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/d0d0d0d1d1d1d1d1gfZAe6ƒ ZBed2d3„ ƒZCd4d5„ ZD�d d6d7„ZEd8d9„ ZFd:d;„ ZGd<d=„ ZHd>d?„ ZId@dA„ ZJejK LdBdCdDg¡ejK LdEd.d+dFdGdHdId)g¡ejK LdJee.g¡dKdL„ ƒƒƒZMejK LdBdCdDg¡ejK LdEd.dFdGg¡ejK LdJee.g¡dMdN„ ƒƒƒZNdOdP„ ZOejK LdJee.g¡dQdR„ ƒZPdSdT„ ZQejK LdJeee.g¡dUdV„ ƒZRdWdX„ ZSdYdZ„ ZTd[d\„ ZUd]d^„ ZVejK Ld_e @dgdF d,gdF  ¡e @d,d,d*d*d-d-d.d.d+d+dFdFg¡e Wd`d`gd`d`gd`d`gg¡fe @dgdI d,gd-  ¡e @d,d,d,d*d*d*d-d-d-d.d+dFg¡e Wdadbgdadbgdadbgg¡fg¡dcdd„ ƒZXejK Ldedfdgdhdig¡ejK Ldjd+dkdlg¡dmdn„ ƒƒZYdodp„ ZZejK Ldqe%e'g¡ejK Ldrdsdtdug¡dvdw„ ƒƒZ[ejK Ldrdxdydzg¡d{d|„ ƒZ\ed}d~„ ƒZ]dd€„ Z^d�d‚„ Z_dƒd„„ Z`d…d†„ Zad‡dˆ„ Zbd‰dŠ„ Zcd‹dŒ„ Zdd�dŽ„ Zed�d�„ Zfd‘d’„ Zgd“d”„ Zhd•d–„ Zied—d˜„ ƒZjejK Ld™e,e-g¡dšd›„ ƒZkdœd�„ ZldždŸ„ Zmd d¡„ Znd¢d£„ Zod¤d¥„ ZpejK Ld¦d§d¨d©dªd«d¬d­d®g¡d¯d°„ ƒZqejK Ld¦d±d²d³d´dµd¶g¡d·d¸„ ƒZrejK Ldrd¹dtdug¡dºd»„ ƒZsd¼d½„ Ztd¾d¿„ ZuedÀdÁ„ ƒZvdÂdÃ„ ZwdÄdÅ„ ZxdÆdÇ„ ZyejK LdÈdÉdÊdËdÌdÍdÎdÏg¡dÐdÑ„ ƒZzdÒdÓ„ Z{dÔdÕ„ Z|dÖd×„ Z}dØdÙ„ Z~dÚdÛ„ ZejK LdJe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jK Ldìe%e&e'f¡dídî„ ƒZˆdïdð„ Z‰dñdò„ ZŠdódô„ Z‹ejK Ldõeee.f¡död÷„ ƒZŒejK Ldøeƒ dDfedDdùdú�dDfeƒ dDfedDdùdú�dDfe.dDdùdú�dDfe.ƒ dDfe,dùdû�dDfe-dùdû�dDfe%dùdû�dDfe&dùdû�dDfe'dùdû�dDfeƒ dDfe ƒ dDfe!ƒ dDfe"ƒ dDfe$d*dü�dDfe#d*dý�dDfedDddú�dCfedDddú�dCfedDej� Žd¡dú�dCfedDej� Žd¡dú�dCfe,ddû�dCfe,ej� Žd¡dû�dCfe-ddû�dCfe-ej� Žd¡dû�dCfe%ddû�dCfe%ej� Žd¡dû�dCfe&ddû�dCfe&ej� Žd¡dû�dCfe'ddû�dCfe'ej� Žd¡dû�dCfg¡dþdÿ„ ƒZ�dS (  zTest the split moduleé    N)Ú
coo_matrixÚ
csc_matrixÚ
csr_matrix)Ústats)Úcomb)Úcombinations)Úcombinations_with_replacement)Úpermutations)Úassert_allclose)Úassert_array_almost_equal)Úassert_array_equal)Úignore_warnings)Ú_num_samples)ÚMockDataFrame)Úcross_val_score)ÚKFold)ÚStratifiedKFold)Ú
GroupKFold)ÚTimeSeriesSplit)ÚLeaveOneOut)ÚLeaveOneGroupOut)Ú	LeavePOut)ÚLeavePGroupsOut)ÚShuffleSplit)ÚGroupShuffleSplit)ÚStratifiedShuffleSplit)ÚPredefinedSplit)Úcheck_cv)Útrain_test_split)ÚGridSearchCV)ÚRepeatedKFold)ÚRepeatedStratifiedKFold)ÚStratifiedGroupKFold)ÚDummyClassifier)Ú_validate_shuffle_split©Ú_build_repr)Ú_yields_constant_splits)Úload_digits)Úmake_classification)ÚSVCé
   é   é   é   é   é   Ú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 )Nr0   r,   r+   r.   r/   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ÚAssertionErrorÚtestingÚassert_equalÚlistÚsplitÚasarrayÚdtypeÚkindÚreprÚpytestÚraisesÚ
ValueError)"Ú	n_samplesZn_unique_groupsÚn_splitsÚpZ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_expectedr;   ÚcvZcv_reprÚtrainÚtestÚmsg© r_   úa/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/model_selection/tests/test_split.pyÚ(test_cross_validator_with_default_paramsA   s†    "
ÿ÷÷þÿ ÿra   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é   r.   r   r/   r,   )Úsizeéÿÿÿÿ©rQ   ç      à?©Ú	test_size©Ún_groups©rP   )Z	test_fold)ÚbinaryZ
multiclassz/Supported target types are: {}. Got 'multilabel)r>   ÚrandomÚRandomStateÚrandintÚreshaper   r   r   r   r    r!   r"   r   r   r   r   r   r   r   r   rF   rG   rN   ÚformatÚstrrC   )rO   ÚrngrR   rS   Zy_2dÚy_multilabelrT   Z	splittersZsplitterÚeZallowed_target_typesr^   r_   r_   r`   Ú	test_2d_y—   sD    ñÿrv   c                 C   sL   t | ƒt |ƒ } }|  |¡t ƒ ks&t‚|d k	rH|  |¡t t|ƒƒksHt‚d S ©N)ÚsetÚintersectionrC   ÚunionÚrange)r\   r]   rO   r_   r_   r`   Ú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   )rO   r.   )r   rB   rC   rx   rG   r|   Úupdater{   )
r[   rR   rS   rT   Úexpected_n_splitsrO   Zcollected_test_samplesZ
iterationsr\   r]   r_   r_   r`   Ú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 )Nr.   r,   r/   r0   r-   r4   r5   r6   é	   r+   rd   zThe least populated classr<   Úignore©rT   r~   r   z>k-fold cross-validation requires at least one train/test splitç      ø?ç       @©rP   Úshuffle)r>   r?   rN   Únextr   rG   r   rL   ZwarnsÚWarningr"   ÚarangeÚlenÚwarningsÚcatch_warningsÚsimplefilterr   rM   Ú	TypeError)ÚX1ÚX2rS   Zskf_3Zsgkf_3Znaive_groupsZerror_stringr_   r_   r`   Ú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é   r/   )rS   rT   r~   é   r-   )r>   Úonesr   r   rB   rC   )r�   rU   r�   r_   r_   r`   Útest_kfold_indices%  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 )Nr.   r,   r/   r0   r-   r4   r5   r6   r€   r+   rd   r   )r   rG   r‡   r   )r�   Úsplitsr\   r]   r_   r_   r`   Útest_kfold_no_shuffle5  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 )Nr0   r.   r   r,   r/   r5   r-   r4   r1   Ú0)r>   r”   r   rG   r‡   r   rB   rC   rD   rE   rF   Ú	ones_liker   )rR   rS   r–   r\   r]   Úy1Úy2r_   r_   r`   Ú test_stratified_kfold_no_shuffleL  s<    
 ÿ
 ÿrœ   r†   FTÚkr4   r5   r6   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éè  r0   çš™™™™™¹?r   ç{®Gázì?r.   ç{®Gáz„?©r8   r†   ©rT   ç{®Gáz”?©Zatol)r>   r”   r?   Úintr‰   rŠ   ÚbincountrG   r
   ÚappendÚptprC   )r�   r†   rž   rO   rR   rS   rT   ÚdistrÚ
test_sizesr8   rV   r\   r]   r_   r_   r`   Útest_stratified_kfold_ratiosw  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¡   r.   r¢   c                    s0   ˆsd nd}dd„ ˆˆ|ˆd�j ˆ | ˆd�D ƒS )Nr   c                 S   s    g | ]\}}t |ƒt |ƒf‘qS r_   )rF   )Ú.0r\   r]   r_   r_   r`   Ú
<listcomp>£  s   ÿzNtest_stratified_kfold_label_invariance.<locals>.get_splits.<locals>.<listcomp>r£   r¤   )rG   )rS   r8   ©rR   rT   r�   rž   r†   r_   r`   Ú
get_splits¡  s      ÿ  þþz:test_stratified_kfold_label_invariance.<locals>.get_splits)	r>   r?   r§   r”   rŠ   r‰   r	   ZtakerC   )
r�   r†   rž   rO   rS   r²   Zsplits_baseÚpermZy_permZsplits_permr_   r±   r`   Ú&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“   r-   ©rR   c                 S   s   g | ]\}}t |ƒ‘qS r_   ©rŠ   ©r¯   Ú_r]   r_   r_   r`   r°   µ  s     z&test_kfold_balance.<locals>.<listcomp>r.   )	r{   r   rG   r>   r”   ÚmaxÚminrC   Úsum)r;   rU   Úsizesr_   r_   r`   Ú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   r/   r.   é   ©TF©r†   rµ   c                 S   s   g | ]\}}t |ƒ‘qS r_   r·   r¸   r_   r_   r`   r°   É  s     z0test_stratifiedkfold_balance.<locals>.<listcomp>)
r>   r”   r‰   rŠ   r{   rG   rº   r»   rC   r¼   )	rž   rR   rS   rT   r†   r[   r;   rV   r½   r_   r_   r`   Ú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 )Nr/   Tr   ©r†   r8   r.   é,  r,   )r   r>   r”   ÚzerosrA   rG   r   rŠ   Úintersect1drC   r¼   )rU   Úkf2Zkf3rR   Z	all_foldsZtr1Zte1Ztr2Zte2Ztr3Zte3Ztr_aZtr_br_   r_   r`   Ú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   r5   r.   r6   é   r/   TrÃ   )r>   r”   r‰   rŠ   rD   rE   rF   rG   rm   rn   rA   rL   rM   rC   r   )rž   rR   rS   Zgroups_1r�   r›   Zgroups_2rU   Údatar¹   Ztest_aZtest_br_   r_   r`   Ú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   é   r.   r-   TrÃ   r‚   r+   c                 S   s   g | ]}t |d  ƒ‘qS ©r.   ©Útuple©r¯   Úsr_   r_   r`   r°     s     z0test_shuffle_stratifiedkfold.<locals>.<listcomp>c                 S   s   g | ]}t |d  ƒ‘qS rÏ   rÐ   rÒ   r_   r_   r`   r°     s     )
r>   r”   r   rA   rG   rx   rC   r   r‰   Úsorted)ZX_40rS   Zkf0Zkf1r¹   Ztest0Útest1rR   rÇ   Z	test_set1Z	test_set2r_   r_   r`   Ú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  r+   g{®Gázt?)ÚCÚgammar/   Fr…   ©r[   gq=
×£pí?çš™™™™™é?Tr   rÃ   r.   g®Gázî?)	ÚdigitsrË   Útargetr*   r   r   ÚmeanrC   r   )rR   rS   ÚmodelrP   r[   Z
mean_scorer_   r_   r`   Ú1test_kfold_can_detect_dependent_samples_on_digits  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 )Nr/   rk   r.   r4   r   é   rd   )r.   r,   r/   r0   r-   r4   r.   r.   r,   r,   r/   r/   r0   r0   r-   r-   r4   r4   r¥   r¦   )r"   r>   r?   r™   rp   rH   r¨   rŠ   rG   rÆ   rc   rC   r
   r©   rª   )rZ   rS   rR   rT   r«   r¬   r\   r]   r_   r_   r`   Ú#test_stratified_group_kfold_trivialI  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 )Nr/   rk   r.   r4   r   rà   rd   r,   r0   r-   g-²�ï§ê?gsh‘í|?Å?gZd;ßOå?gZd;ßOÕ?rf   çü©ñÒMbP?r¦   )r"   r>   r?   r™   rp   rH   rA   rG   rÆ   rc   rC   r¨   rŠ   r
   r©   rª   )
rZ   rS   rR   rT   Úexpectedr¬   r\   r]   Úexpect_distÚ
split_distr_   r_   r`   Ú'test_stratified_group_kfold_approximate[  s    
. ræ   zy, groups, expectedrf   ç      è?ç      Ð?c           	      C   s„   t dd�}t | ¡ dd¡}t| || |¡|ƒD ]N\\}}}t || || ¡jdksZt‚t 	| | ¡t
|ƒ }t||dd� q0d S )Nr/   rk   rd   r.   r   râ   r¦   )r"   r>   r™   rp   rA   rG   rÆ   rc   rC   r¨   rŠ   r
   )	rS   rT   rã   rZ   rR   r\   r]   rä   rå   r_   r_   r`   Ú.test_stratified_group_kfold_homogeneous_groupsm  s    
 ré   Ú	cls_distr)gš™™™™™Ù?ç333333ã?)g333333Ó?çffffffæ?)çš™™™™™É?rÚ   )rÚ   rí   rj   rb   é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 )Nr-   rk   r   rŸ   r,   )rc   rQ   rd   r.   r¤   )Zqk)r"   r   r>   rm   rn   Úchoicer™   rp   rG   rA   rÆ   rc   rC   r¨   rŠ   r   Zentropy)rê   rj   rP   rZ   Zgkfrs   Zn_pointsrS   rR   ÚgZ
sgkf_foldsZ	gkf_foldsZ	sgkf_entrZgkf_entrZ
sgkf_trainZ	sgkf_testr¹   Zgkf_testZ
sgkf_distrZ	gkf_distrr_   r_   r`   Ú/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   ©rh   r8   r,   r.   )r   rG   rR   r>   Zint32r§   rA   r   )Zss1Zss2Zss3Zss4Út1Út2Út3Zt4r_   r_   r`   Útest_shuffle_split£  s    rö   Úsplit_classztrain_size, exp_train, exp_test)Nr€   r.   )r6   r6   r,   )rÚ   r6   r,   c                 C   sR   t  d¡}t  d¡}t| |d� ||¡ƒ\}}t|ƒ|ks>t‚t|ƒ|ksNt‚d S ©Nr+   ©Ú
train_size)r>   r”   r‡   rG   rŠ   rC   )r÷   rú   Ú	exp_trainÚexp_testrR   rS   ÚX_trainÚX_testr_   r_   r`   Ú$test_shuffle_split_default_test_size±  s
    

rÿ   )Nr6   r,   )r5   r5   r/   )rì   r5   r/   c                 C   s\   t  d¡}t  d¡}tdƒ}tt| d� |||¡ƒ\}}t|ƒ|ksHt‚t|ƒ|ksXt‚d S rø   )r>   r”   r{   r‡   r   rG   rŠ   rC   )rú   rû   rü   rR   rS   rT   rý   rþ   r_   r_   r`   Ú*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 )Nr5   r   r.   r,   r/   rí   rg   ©rh   rú   r€   rù   )	r>   r‰   rH   rL   rM   rN   r‡   r   rG   ©rR   rS   r_   r_   r`   Ú"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   r.   r,   r/   r-   r+   r4   )rh   rú   r8   )r>   r?   r   rG   r”   rŠ   rC   )rS   rh   rú   Ússsr\   r]   r_   r_   r`   Ú0test_stratified_shuffle_split_respects_test_sizeë  s    (   ÿ þr  c            	      C   s8  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 �]4}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 jj ||¡g ƒ �qNqüd S )Nr.   r,   r/   r   r0   rd   i   é2   c                 S   s   g | ]}|gd |  ‘qS )r®   r_   )r¯   r;   r_   r_   r`   r°   þ  s     z6test_stratified_shuffle_split_iter.<locals>.<listcomp>rµ   r1   r2   r3   r4   g…ëQ¸Õ?rò   T)Zreturn_inverse)r>   r?   Zconcatenater{   r   rG   r”   rŠ   Z
asanyarrayÚceilr   Úuniquer¨   Úfloatr   rc   rC   ÚlibZarraysetopsrÆ   )	ZysrS   r  rh   rú   r\   r]   Zp_trainZp_testr_   r_   r`   Ú"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 )Nr-   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pmfrC   )Z
idx_countsrQ   Ú	thresholdÚbfÚcountZprobrk   r_   r`   Úassert_counts_are_ok"  s    
ÿþz@test_stratified_shuffle_split_even.<locals>.assert_counts_are_ok)r4   é   r,   r   r.   ç      ð?©rP   rh   r8   r  r  )r>   r?   r   rG   r”   rC   r$   rŠ   rx   ry   r  rh   r	  )Zn_foldsr  rO   rT   r–   Ztrain_countsZtest_countsÚn_splits_actualr\   r]   ÚcounterZidsÚidZn_trainZn_testZgroup_countsZ	ex_test_pZ
ex_train_pr_   rk   r`   Ú"test_stratified_shuffle_split_even  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   r.   r,   r/   r0   r-   rf   r  r  )
r>   r™   r   r‡   rG   r   rÆ   Úunion1dr‰   rŠ   )rS   rR   r  r\   r]   r_   r_   r`   Ú4test_stratified_shuffle_split_overlap_train_test_bugP  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   r.   rf   r  r  )r>   r?   r™   r   r‡   rG   r   rÆ   r  r‰   rŠ   rÝ   rC   )rS   rR   r  r\   r]   Úy_trainÚy_testÚexpected_ratior_   r_   r`   Ú(test_stratified_shuffle_split_multilabela  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 )
Nr.   r   rŸ   r+   r®   rf   r  r  r0   )r>   r?   r™   r   r‡   rG   rÝ   rC   )
Zrow_with_many_zerosZrow_with_many_onesrS   rR   r  r\   r]   r  r  r  r_   r_   r`   Ú4test_stratified_shuffle_split_multilabel_many_labelsz  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 )Nr+   g      ð¿r-   TrÁ   )r>   Úfullr@   r   rG   rR   r©   r   rŠ   r  rB   rC   rA   r   )	ÚfoldsZkf_trainZkf_testr;   Z	train_indZtest_indrY   Zps_trainZps_testr_   r_   r`   Ú%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 )Nr4   gUUUUUUÕ?r   rò   r¤   r.   r  )Útest_groupsr>   r”   rŠ   r   rK   rB   rC   r  rH   rG   ÚanyZin1drc   r   rÆ   ÚabsÚround)Úgroups_irR   rS   rP   rh   ZsloZl_uniqueÚlr\   r]   Zl_train_uniqueZl_test_uniquer_   r_   r`   Ú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 )Nr.   ri   r,   r9   zLeavePGroupsOut(n_groups=1)r:   r/   zLeavePGroupsOut(n_groups=3)r¤   r   ÚaÚbÚcr  çš™™™™™ñ?ç333333ó?r0   r4   ç        z*The 'groups' parameter should not be None.r<   )r   r   rK   rC   r@   r"  rŠ   r>   r  r”   rB   rH   rG   r   rÆ   ÚtolistÚshaper‰   rL   rM   rN   ÚnanÚinf)ZlogoZlpgo_1Zlpgo_2Újr[   Zp_groups_outr;   r&  rj   rP   rR   rS   Z
groups_arrr\   r]   r^   r_   r_   r`   Útest_leave_one_p_group_outÇ  sD    

&
 ÿ&"  r4  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   r.   r,   T)Úcopyr¤   ri   r/   )rS   rT   )r>   r?   r”   rŠ   r   rG   r   rA   r   rB   rC   )rT   rR   Zgroups_changingrW   Zlolo_changingZlploZlplo_changingZlloZllo_changingr\   r]   Z
train_chanZ	test_chanr_   r_   r`   Ú$test_leave_group_out_changing_groupsþ  s    
r6  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   r.   r¤   r0   r-   r/   )	r>   r?   r”   rŠ   Úiterr   rG   r‡   r   )rT   rR   r–   Zexpected_indicesZexpected_trainZexpected_testr\   r]   r_   r_   r`   Ú%test_leave_group_out_order_dependence  s    ý
r8  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)r<   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 presentr/   ri   )r>   r”   ÚreÚescaperL   rM   rN   r‡   r   rG   r   r‰   )rR   rS   rT   r^   r_   r_   r`   Ú:test_leave_one_p_group_out_error_on_fewer_number_of_groups(  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!   rL   rM   rN   rÙ   r_   r_   r`   Útest_repeated_cv_value_errorsK  s
    r=  Ú
RepeatedCVc                 C   s6   d\}}| ||d�}d  |jj¡}|t|ƒks2t‚d S )N)r,   r4   ©rP   r<  z.{}(n_repeats=6, n_splits=2, random_state=None))rq   Ú	__class__Ú__name__rK   rC   )r>  rP   r<  Zrepeated_cvZrepeated_cv_reprr_   r_   r`   Útest_repeated_cv_reprU  s    ÿrB  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 )Nr.   r,   r/   r0   r-   r4   r5   r6   r€   r+   i{ic©rP   r<  r8   r   )r    r{   rG   r‡   r   rL   rM   ÚStopIteration)rR   r8   Úrkfr¹   r–   r\   r]   r_   r_   r`   Ú&test_repeated_kfold_determinstic_split_  s&    "
rF  c                  C   s0   d} d}t | |d�}| | }|| ¡ ks,t‚d S ©Nr/   r0   r?  )r    rB   rC   )rP   r<  rE  r~   r_   r_   r`   Ú$test_get_n_splits_for_repeated_kfold|  s
    rH  c                  C   s0   d} d}t | |d�}| | }|| ¡ ks,t‚d S rG  )r!   rB   rC   )rP   r<  Úrskfr~   r_   r_   r`   Ú/test_get_n_splits_for_repeated_stratified_kfold„  s
    rJ  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 )Nr.   r,   r/   r0   r-   r4   r5   r6   r€   r+   r   iq²ésrC  )r!   r{   rG   r‡   r   rL   rM   rD  )rR   rS   r8   rI  r¹   r–   r\   r]   r_   r_   r`   Ú1test_repeated_stratified_kfold_determinstic_splitŒ  s(    "rK  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 )Nr/   r,  rù   rë   r  Z
wrong_typerg   r,   r0   )Zsome_argumenté*   r+   FT)r†   Ústratifyzrtrain_size=11 should be either positive and smaller than the number of samples 10 or a float in the \(0, 1\) ranger<   rµ   r.   ©rú   rh   )rL   rM   rN   r   r{   r>   Zfloat32rŽ   r_   r_   r_   r`   Útest_train_test_split_errorsª  s(    ûþrO  ztrain_size,test_size)r-  rÚ   )r  rÚ   )r.  rÚ   )çš™™™™™É¿rÚ   )rÚ   r-  )rÚ   r  )rÚ   r.  )rÚ   rP  c              	   C   s0   t jtdd�� ttdƒ| |d� W 5 Q R X d S )Nz"should be .* in the \(0, 1\) ranger<   r+   rN  ©rL   rM   rN   r   r{   rN  r_   r_   r`   Ú$test_train_test_split_invalid_sizes1Æ  s    rR  )éöÿÿÿrÚ   )r   rÚ   )rµ   rÚ   )rÚ   rS  )rÚ   r   )rÚ   rµ   c              	   C   s0   t jtdd�� ttdƒ| |d� W 5 Q R X d S )Nz%should be either positive and smallerr<   r+   rN  rQ  rN  r_   r_   r`   Ú$test_train_test_split_invalid_sizes2Ø  s    rT  )Nr5   r/   c                 C   s4   t t| d�\}}t|ƒ|ks t‚t|ƒ|ks0t‚d S )Nrù   )r   rR   rŠ   rC   )rú   rû   rü   rý   rþ   r_   r_   r`   Ú'test_train_test_split_default_test_sizeá  s    rU  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®   ©r+   r+   r+   rf   r  r   rÄ   r-   r/   r,   i  r5   rµ   )r5   r-   r/   r,   r.   )r/   r-   r/   r,   )r5   r5   rµ   )r/   r5   rµ   r0   rè   rç   r4   )rh   rM  r8   )r,   rí   F)r†   rh   r6   r€   )r>   r‰   rp   r   r   rŠ   rC   r   r/  Ú
isinstancerF   r0  r?   rA   r¼   )rR   ÚX_srS   rG   rý   rþ   r  r  Z	X_s_trainZX_s_testZX_4dZy_3drh   Zexp_test_sizer\   r]   r_   r_   r`   Útest_train_test_splití  sF    

&   ÿ
&
rY  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è   )rM  rú   N)r>   r‰   r   rc   rC   )Z
big_numberrR   rS   rG   rý   rþ   r  r  r_   r_   r`   Ú$test_train_test_split_32bit_overflow  s    	
r[  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pandasr\  r©   ÚImportErrorrR   r   rW  rC   )Útypesr\  ÚInputFeatureTypeÚX_dfrý   rþ   r_   r_   r`   Útest_train_test_split_pandas3  s    ra  c                  C   sX   t  d¡ d¡} tttg}|D ]4}|| ƒ}t|ƒ\}}t|tƒsDt‚t|tƒst‚qd S )Nr®   rV  )	r>   r‰   rp   r   r   r   r   rW  rC   )rR   Zsparse_typesr_  rX  rý   rþ   r_   r_   r`   Útest_train_test_split_sparseE  s    
rb  c                  C   s@   t tƒ} t| ƒ\}}t|t ƒs"t‚t|t ƒs0t‚t| ƒ\}}d S rw   )r   rR   r   rW  rC   )r`  rý   rþ   ZX_train_arrZ
X_test_arrr_   r_   r`   Ú!test_train_test_split_mock_pandasQ  s
    rc  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 )	Nr5   r1   r0   r˜   r/   rÀ   r   )rM  r8   )r>   r”   ÚhstackrÅ   r/  r   rD   rE   )rR   rš   r›   Úy3rM  ZX_train1ZX_test1Zy_train1Zy_test1ZX_train2ZX_test2Zy_train2Zy_test2ZX_train3ZX_test3Zy_train3Zy_test3r_   r_   r`   Ú test_train_test_split_list_inputZ  s6    
  
 ÿ  
 ÿ  
 ÿrf  ztest_size, train_size)r„   N)r  N)r    gffffffî?)Ny              ð?)rµ   N)r+   N)r6   r/   c              	   C   s0   t  t¡� tt| |d� t¡ƒ W 5 Q R X d S )Nr  )rL   rM   rN   r‡   r   rG   rR   r  r_   r_   r`   Útest_shufflesplit_errorsr  s    rg  c                  C   s8   t dd�} tdd„ |  t¡D ƒdd„ |  t¡D ƒƒ d S )Né   r7   c                 S   s   g | ]\}}|‘qS r_   r_   )r¯   r)  r*  r_   r_   r`   r°     s     z2test_shufflesplit_reproducible.<locals>.<listcomp>)r   r   rG   rR   )rX   r_   r_   r`   Útest_shufflesplit_reproducible{  s    
ri  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,   rL  rò   r5   r1   r0   r˜   r/   )
r   r>   r”   rd  rÅ   r/  rD   rE   rF   rG   )r  rR   rš   r›   re  r_   r_   r`   Ú&test_stratifiedshufflesplit_list_input‚  s    
&rj  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éÈ   ©rI   r+   rd   r,   r   r.   rí   rL  rò   )r>   r‰   Zfloat64rp   r1  Úrepeatr0  r   r  r_   r_   r`   Ú test_train_test_split_allow_nansŽ  s    rn  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€   r/   F)Ú
classifierr   r.   Tr,   rd   r-   rW   rÙ   )r>   r”   r   rD   rE   rF   r   rG   r?   r   rp   Úallr‡   rC   rL   rM   rN   )rR   r[   Zy_binaryZy_multiclassZy_multiclass_2drt   Zy_multioutputr_   r_   r`   Útest_check_cv–  sJ    
& ÿ ÿþÿÿ

4ÿ&(&rq  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   rG   rR   rS   r   r>   rD   rE   rF   rC   )Zkf_iterZkf_iter_wrappedZkf_randomized_iterZkf_randomized_iter_wrappedZsplits_are_equalr_   r_   r`   Útest_cv_iterable_wrapperÄ  s.     ÿþþ
ÿrr  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Ÿ   r-   r  rk   r.   rl  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.*greaterr<   r/   )r>   rm   rn   r”   ro   rŠ   r  rÅ   r@   rG   rC   r$  r¼   rH   ÚobjectrÆ   r?   r‹   rŒ   r�   ÚFutureWarningrF   r/  rA   r   rL   rM   rN   r‡   r   )rž   rs   rj   rO   rP   rR   rS   Z	tolerancerT   Zideal_n_groups_per_foldr   Zlkfr;   r¹   r]   Úgroupr\   Zcv_iterZtrain1rÕ   Útrain2Ztest2r_   r_   r`   Útest_group_kfoldå  s²    


 &Úÿ+
"
.&$
rx  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 )Nr.   r,   r/   r0   r-   r4   r5   r6   r€   r+   rµ   rà   é   r¿   z$Cannot have number of folds.*greaterr<   rk   rd   r   )rL   rM   rN   r‡   r   rG   r   rŠ   rF   rB   rC   )rR   Ztscvr–   r\   r]   r  r_   r_   r`   Útest_time_series_cva  s,    .rz  c                 C   s^   t | |ƒD ]N\\}}\}}t||ƒ t|ƒ|ks4t‚tt|ƒ| dƒ}t|||d … ƒ q
d S )Nr   )rA   r   rŠ   rC   rº   )r–   Úcheck_splitsÚmax_train_sizer\   r]   Zcheck_trainZ
check_testZsuffix_startr_   r_   r`   Ú!_check_time_series_max_train_size†  s
    
r}  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)r4   r.   r/   rk   )rP   r|  )r|  r,   r-   )r>   rÅ   r   rG   r}  )rR   r–   r{  r_   r_   r`   Útest_time_series_max_train_sizeŽ  s    
r~  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©r+   r.   r/   )rP   rh   r   r.   r,   r0   r-   r4   r5   r6   r€   )rP   rh   r|  zToo many splits.*with test_sizer<   ©	r>   rÅ   r   rG   r‡   r   rL   rM   rN   ©rR   r–   r\   r]   r_   r_   r`   Ú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 )Nr  r,   )rP   Úgapr   r.   r0   r-   r4   r/   r5   r6   r€   )rP   rƒ  r|  )rP   rƒ  r|  rh   )rP   rƒ  rh   zToo many splits.*and gapr<   r€  r�  r_   r_   r`   Ú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dd�g}t|dƒD ]:\}}t	t
ƒ dd	d
gi|dd�}t|||||d|id� qNd S )Nr   rÉ   r,   )rO   Z	n_classesr8   r-   rk   r/   ZstrategyZ
stratifiedZmost_frequentÚraise)Z
param_gridr[   Zerror_scorerT   )rR   rS   rT   r[   Z
fit_params)r>   rm   rn   r)   ro   r   r   r   r   r   r#   r   )rs   rR   rS   rT   ZcvsZinner_cvZouter_cvÚgsr_   r_   r`   Útest_nested_cvù  s,    ý
ü     ÿ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 rw   )r)  r*  r+  )Úselfr)  r*  r+  r_   r_   r`   Ú__init__  s    z.test_build_repr.<locals>.MockSplitter.__init__c                 S   s   t | ƒS rw   r%   )rˆ  r_   r_   r`   Ú__repr__  s    z.test_build_repr.<locals>.MockSplitter.__repr__)r   N)rA  Ú
__module__Ú__qualname__r‰  rŠ  r_   r_   r_   r`   ÚMockSplitter  s   
r�  r-   r4   zMockSplitter(a=5, b=6, c=None))rK   rC   )r�  r_   r_   r`   Ú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 )NrZ  rg   r.   r   ú[With n_samples=1, test_size=0.99 and train_size=None, the resulting train set will be emptyr<   r¤   )rL   rM   rN   r‡   rG   )r�  r[   rR   rS   r_   r_   r`   Ú!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 )Nr.   r�  r<   rZ  rg   z[With n_samples=3, test_size=0.67 and train_size=None, the resulting train set will be emptygq=
×£på?)rL   rM   rN   r   r¶   r_   r_   r`   Ú$test_train_test_split_empty_trainset/  s    
ýýr’  c               	   C   sD   t ƒ } dggdg }}tjtdd�� t|  ||¡ƒ W 5 Q R X d S )Nr.   r   z+Cannot perform LeaveOneOut with n_samples=1r<   )r   rL   rM   rN   r‡   rG   ©r[   rR   rS   r_   r_   r`   Ú!test_leave_one_out_empty_trainsetE  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,   re   r.   r   r/   z6p=2 must be strictly less than the number of samples=2r<   r¤   )r   rL   rM   rN   r‡   rG   r“  r_   r_   r`   Útest_leave_p_out_empty_trainsetM  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 Falser<   r/   Fr   rÃ   )rL   rM   rN   )r–  r_   r_   r`   Útest_random_state_shuffle_falseW  s    r—  zcv, expectedé{   rÃ   r7   ri   re   c                 C   s   t | ƒ|kst‚d S rw   )r'   rC   )r[   rã   r_   r_   r`   Útest_yields_constant_splits^  s    %r™  )N)�Ú__doc__r‹   rL   r9  Únumpyr>   Zscipy.sparser   r   r   Zscipyr   Zscipy.specialr   Ú	itertoolsr   r   r	   Zsklearn.utils._testingr
   r   r   r   Zsklearn.utils.validationr   Zsklearn.utils._mockingr   Zsklearn.model_selectionr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   Zsklearn.dummyr#   Zsklearn.model_selection._splitr$   r&   r'   Zsklearn.datasetsr(   r)   Zsklearn.svmr*   r”   rR   r‰   rS   ÚeyeZP_sparser?   r"  rÛ   ra   rv   r|   r   r‘   r•   r—   rœ   ÚmarkZparametrizer­   r´   r¾   rÂ   rÈ   rÌ   rÖ   rß   rá   ræ   rH   ré   rñ   rö   rÿ   r   r  r  r  r  r  r  r  r!  r(  r4  r6  r8  r;  r=  rB  rF  rH  rJ  rK  rO  rR  rT  rU  rY  r[  ra  rb  rc  rf  rg  ri  rj  rn  rq  rr  rx  rz  r}  r~  r‚  r„  r‡  rŽ  r‘  r’  r”  r•  r—  rm   rn   r™  r_   r_   r_   r`   Ú<module>   sÄ  
  &(ú
U'I+


, ý ýúþ

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