a
    ;Za5U                     @   s  d dl Z d dlZd dl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mZ d dlmZ d dlmZ dd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"d d! Z#d"d# Z$d$d% Z%d&d' Z&d(d) Z'd*d+ Z(d,d- Z)d.d/ Z*d0d1 Z+d2d3 Z,d4d5 Z-d6d7 Z.d8d9 Z/d:d; Z0d<d= Z1d>d? Z2d@dA Z3dBdC Z4dDdE Z5ej67dFej8ej9ej:ej;gdGdH Z<dIdJ Z=ej67dKej;ej:gdLdM Z>dNdO Z?dPdQ Z@ej67dRdSdTgdUdV ZAdWdX ZBdYdZ ZCd[d\ ZDdS )]    N)make_regression)check_increasingisotonic_regressionIsotonicRegression_make_unique)check_array)assert_allcloseassert_array_equalassert_array_almost_equal)shuffle)expitc            	      C   sh   t  } g d}g d}g d}t|||dd\}}}| j|||d}| j|||d|}t|| d S )N                     r   )   3   r   r   r      r   )random_statesample_weight)r   r   fit_transformfit	transformr	   )	irxyr   Zx_sZy_sZsample_weight_sZy_transformedZy_transformed_s r"   :lib/python3.9/site-packages/sklearn/tests/test_isotonic.pytest_permutation_invariance   s    r$   c                  C   s`   g d} g d}t d }t| |}W d    n1 s:0    Y  t|dksTJ |s\J d S )Nr   r   r   )r   g?g?r   pytestwarnsr   lenr    r!   recordis_increasingr"   r"   r#   -test_check_increasing_small_number_of_samples)   s    (r-   c                  C   s`   g d} g d}t d }t| |}W d    n1 s:0    Y  t|dksTJ |s\J d S )Nr   r   r   r   r   r   )r         ?g)\(@{G!@r0   2   r   r&   r*   r"   r"   r#   test_check_increasing_up4   s    (r2   c                  C   s`   g d} g d}t d }t| |}W d    n1 s:0    Y  t|dksTJ |s\J d S )Nr.   r   r&   r*   r"   r"   r#    test_check_increasing_up_extreme@   s    (r3   c                  C   s`   g d} g d}t d }t| |}W d    n1 s:0    Y  t|dksTJ |r\J d S )Nr.   )r   g      g)\({G!r4   r   r&   r*   r"   r"   r#   test_check_increasing_downL   s    (r6   c                  C   s`   g d} g d}t d }t| |}W d    n1 s:0    Y  t|dksTJ |r\J d S )Nr.   )r   r   r&   r*   r"   r"   r#   "test_check_increasing_down_extremeX   s    (r<   c                  C   sX   g d} g d}d}t jt|d t| |}W d    n1 sB0    Y  |rTJ d S )Nr.   )r   r7   r   r9   r   r;   Zintervalmatch)r'   r(   UserWarningr   )r    r!   msgr,   r"   r"   r#   test_check_ci_warnd   s    (rA   c                  C   s<  t g d} t g d}t|t|  t g d} t g d}t|t|  t t| }tddd}|||  t||| ||	||  t|||
| t jt| }tddd}t|	|| | | |	|| |  t||| |||  t }t|	t t|| t |  d S )Nr   r   r   	      r   
   )r   r   r   rD   rD   rD   rE   )rE   r   r   )r   r   r                 ?y_miny_max)nparrayr	   r   aranger)   r   r   r   r   predictrandomZpermutationonesZmean)r!   y_r    r   Zpermr"   r"   r#   test_isotonic_regressionp   s"     &rR   c                  C   s`   g d} g d}g d}t  }|| | t|| || || | t||| | d S )N)r   r   r   r   r   r   r   r   r   r   r   r   )r/   r/   r   r   r   r   r   r   r	   r   r   r    r!   Zy_truer   r"   r"   r#   !test_isotonic_regression_ties_min   s     rV   c                  C   s`   g d} g d}g d}t  }|| | t|| || || | t||| | d S )N)r   r   r   r   r   r   rS   )r   r   r   r         @rW   rT   rU   r"   r"   r#   !test_isotonic_regression_ties_max   s     rX   c                  C   sT   g d} g d}g d}t  }|| | t|| |d t|| ||d dS )aw  
    Test isotonic regression fit, transform  and fit_transform
    against the "secondary" ties method and "pituitary" data from R
     "isotone" package, as detailed in: J. d. Leeuw, K. Hornik, P. Mair,
     Isotone Optimization in R: Pool-Adjacent-Violators Algorithm
    (PAVA) and Active Set Methods

    Set values based on pituitary example and
     the following R command detailed in the paper above:
    > library("isotone")
    > data("pituitary")
    > res1 <- gpava(pituitary$age, pituitary$size, ties="secondary")
    > res1$x

    `isotone` version: 1.0-2, 2014-09-07
    R version: R version 3.1.1 (2014-07-10)
    )rD   rD   rD   rE   rE   rE      rY   rY      rZ   )        7@   r   r[      g     5@      r\   r^   )bh86@ra   ra   ra   ra   ra   ra   ra   ra        @8@rb   r   N)r   r   r
   r   r   rU   r"   r"   r#   (test_isotonic_regression_ties_secondary_   s    rc   c                  C   sb   t g d} t g d}t g d}t }|| | t|| | t|| || dS )ax  
    Non-regression test to handle issue 9432:
    https://github.com/scikit-learn/scikit-learn/issues/9432

    Compare against output in R:
    > library("isotone")
    > x <- c(0, 1, 1, 2, 3, 4)
    > y <- c(0, 0, 1, 0, 0, 1)
    > res1 <- gpava(x, y, ties="secondary")
    > res1$x

    `isotone` version: 1.1-0, 2015-07-24
    R version: R version 3.3.2 (2016-10-31)
    )r   r   r   r   r   r   )r   r   r   r   r   r   )rF         ?rd   rd   rd   rG   N)rK   rL   r   r   r
   r   r   rU   r"   r"   r#   >test_isotonic_regression_with_ties_in_differently_sized_groups   s    re   c                  C   s`   t g d} tddt t| | }tt |d d j|d d |dd   dk d S )NrE   rC   rE   r   r   ffffff@r   F
increasingr7   r   r   )	rK   rL   r   r   rM   r)   r	   rP   shape)r!   rQ   r"   r"   r#   !test_isotonic_regression_reversed   s    rk   c                  C   s   t g d} t t| }tdd}tjdd<}td ||| }t	dd |D s`J W d    n1 st0    Y  |d	 |d
 k }|rJ d S )Nrf   autorh   Tr+   alwaysc                 S   s   g | ]}d t |jv qS zinvalid value encountered in strmessage.0warnr"   r"   r#   
<listcomp>       z<test_isotonic_regression_auto_decreasing.<locals>.<listcomp>r   r7   
rK   rL   rM   r)   r   warningscatch_warningssimplefilterr   allr!   r    r   wrQ   r,   r"   r"   r#   (test_isotonic_regression_auto_decreasing   s    

4r   c                  C   s   t g d} t t| }tdd}tjdd<}td ||| }t	dd |D s`J W d    n1 st0    Y  |d	 |d
 k }|sJ d S )N)r   rg   r   r   rE   rC   rE   rl   rh   Trm   rn   c                 S   s   g | ]}d t |jv qS ro   rp   rs   r"   r"   r#   rv     rw   z<test_isotonic_regression_auto_increasing.<locals>.<listcomp>r   r7   rx   r}   r"   r"   r#   (test_isotonic_regression_auto_increasing   s    

4r   c                  C   s4  t  } tjd}d}tjt|d* | g dg dddg W d    n1 sT0    Y  tjt|d$ | g ddd	g W d    n1 s0    Y  d
}tjt|d( | |ddg d W d    n1 s0    Y  d}tjt|d" | 	|dd W d    n1 s&0    Y  d S )N*   z:Found input variables with inconsistent numbers of samplesr=   r%   )r   r   r   皙?g333333?r   r   zX should be a 1d arrayr   rE   z0Isotonic regression input X should be a 1d array)
r   rK   rO   RandomStater'   raises
ValueErrorr   Zrandnr   )r   rngr@   r"   r"   r#   test_assert_raises_exceptions  s    826r   c                  C   s~   t  } tjd}d}t|}|jdd|fddtdt|   }t|}| j|||d}| ||}t	|| d S )	Nr   d   r5   r1   sizeg      I@r   r   )
r   rK   rO   r   rM   ZrandintlogrP   r   r	   )r   r   nr    r!   weightsZy_set_valueZy_default_valuer"   r"   r#   3test_isotonic_sample_weight_parameter_default_value#  s    
*
r   c                  C   sL   t ddd} d}t|}t|}g d}t| ||}t|| d S )Nr   r   rH   r   )r   r   r   r   r   r   )r   rK   rM   roundr   r	   )r   r   r    r!   Zy_testZy_resultr"   r"   r#    test_isotonic_min_max_boundaries3  s    

r   c                  C   sD   t  } g d}g d}g d}g d}| j|||d}t|| d S )Nr   r   )r   fffff+@r   r   r   r   r   r   )r   r   r	   )r   r    r!   r   Z
expected_yZ
received_yr"   r"   r#   test_isotonic_sample_weight>  s    r   c                  C   s   t g d} t t| }tddd}|||  d}tjt|d. |	t
|d t|d g W d    n1 sz0    Y  d S )NrB   rl   raiseri   out_of_boundsz1A value in x_new is below the interpolation ranger=   rE   )rK   rL   rM   r)   r   r   r'   r   r   rN   minmaxr!   r    r   r@   r"   r"   r#   "test_isotonic_regression_oob_raiseI  s    r   c                  C   s   t g d} t t| }tddd}|||  |t|d t|d g}||}t|t|kspJ t|t|ksJ d S )NrB   rl   clipr   rE   )	rK   rL   rM   r)   r   r   rN   r   r   )r!   r    r   y1Zy2r"   r"   r#   !test_isotonic_regression_oob_clipX  s    
r   c                  C   sl   t g d} t t| }tddd}|||  |t|d t|d g}t	t 
|dkshJ d S )NrB   rl   nanr   rE   r   )rK   rL   rM   r)   r   r   rN   r   r   sumZisnan)r!   r    r   r   r"   r"   r#    test_isotonic_regression_oob_nanh  s    r   c                  C   sj   t g d} t t| }tddd}d}tjt|d |||  W d    n1 s\0    Y  d S )NrB   rl   xyzr   IThe argument ``out_of_bounds`` must be in 'nan', 'clip', 'raise'; got xyzr=   )	rK   rL   rM   r)   r   r'   r   r   r   r   r"   r"   r#    test_isotonic_regression_oob_badv  s    r   c                  C   sz   t g d} t t| }tddd}|||  d|_d}tjt	|d |
| W d    n1 sl0    Y  d S )NrB   rl   r   r   r   r   r=   )rK   rL   rM   r)   r   r   r   r'   r   r   r   r   r"   r"   r#   &test_isotonic_regression_oob_bad_after  s    r   c                  C   sj   t g d} t t| }tddd}|||  t|tj}t	|}t j
|||| d S )NrB   rl   r   r   )rK   rL   rM   r)   r   r   pickledumpsZHIGHEST_PROTOCOLloadsZtestingr	   rN   )r!   r    r   Zir_serZir2r"   r"   r#   test_isotonic_regression_pickle  s    
r   c                  C   sJ   g d} g d}t ddd}|| | tt|| }|sFJ d S )N)r   r   r   Tr   r   )r   r   rK   r|   isfiniterN   )r    r!   r   Zall_predictions_finiter"   r"   r#   !test_isotonic_duplicate_min_entry  s    r   c                  C   s   t g d} t| ddd}t |dks.J t |dks@J t| dddd}t |dksbJ t |dkstJ t| ddd}t |dksJ d S )	N)gh|?5?gJ+?gMgS?g9vgI+ƿg/$gl?gtV?g"~?gzG?gy&1?g#~jg"~j?g;On?T㥛 ؿgy&1r   gZd;g
ףp=
?rF   r   rH   r   F)rI   rJ   ri   )rI   ri   )rK   rL   r   r|   )r    r!   r"   r"   r#   test_isotonic_ymin_ymax  s    r   c                  C   sp   t jd} t }d}t dd|}|| j|d }| j|d}d|dd< |j|||d	 |j|||d	 d S )
Nr   r1   r9   r   r   r   r   rD   r   )rK   rO   r   r   ZlinspaceZuniformr   )r   Z
regression	n_samplesr    r!   r~   r"   r"   r#   test_isotonic_zero_weight_loop  s    r   c                  C   s   t jd} d}d| | d }t | |t|dd}| |}d|| |dk < tdd	d
d}tdd	d
d}|j|||dd\}}|	|| |j
|||d d| | d }	||	}
||	}t|
| d S )N{   i  g      4@rE   int64float64r   r   r   r   )rI   rJ   r   F)r   Ztrim_duplicatesr   )rK   rO   r   ZrandZlessr   astyper   Z_build_yZ_build_fr   rN   r	   )r   r   ZX_trainZy_trainr   Z
slow_modelZ
fast_modelZX_train_fitZy_train_fitZX_testZy_pred_slowZy_pred_fastr"   r"   r#   test_fast_predict  s$     



r   c                  C   s   t  } t|  d S )N)r   copy)r   r"   r"   r#   test_isotonic_copy_before_fit  s    r   c            	      C   s   g d} t jg dt jd}t }t jt jt jt jfD ]}d |t j|fD ]}t j| |d}t|t jt jgddj	}t
||d}|j	|ksJ t t| |}|j|||d ||}|j	|ksLJ qLq6d S )Nr   r   r   r   r   )?r   r   r   r   dtypeF)r   Z	ensure_2dr   )rK   rL   r   r   int32r   float32r   r   r   r   rM   r)   r   rN   )	r!   r   regr   r   Zy_npZexpected_dtyperesXr"   r"   r#   test_isotonic_dtype  s    
r   y_dtypec                 C   sR   t  }tjg d| d}tjt|tjd}||| ||j|jksNJ d S )Nr   r   )	r   rK   rL   rM   r)   r   r   rN   r   )r   r   r!   r   r"   r"   r#   test_isotonic_mismatched_dtype-  s
    r   c                  C   s^   g d} t jt jfD ]D}t j| |d}| }t |}t|||\}}}t|g d qd S )N)r   r   r   r   r   r   )r   r   r   )rK   r   r   rL   r   	ones_liker   r	   )Zx_listr   r    r!   r~   r"   r"   r#   test_make_unique_dtype8  s    
r   r   c                 C   sl   t jg d| d}| }t |}t|||\}}}| t jkrPt g d}nt ddg}t|| d S )N)r   gؗҜ<r   -     ?r   )r   r   r   r   r   )rK   rL   r   r   r   r   r	   )r   r    r!   r~   Zx_outr"   r"   r#   test_make_unique_toleranceB  s    

r   c                  C   s   t jg dt jd} t jg dt jd}t | |}|g d}t|t g d t|jt g d t|jt g d d S )N)r   r   rG   r   r   )r   r   r   r   )r   g      ?r   r/   r   )r   g      ?r/   g      @r   )rF   rG   g       @)rF   r/   g      @)	rK   rL   r   r   r   rN   r	   X_thresholds_y_thresholds_r   r!   iregZy_predr"   r"   r#   #test_isotonic_make_unique_toleranceP  s    r   c                  C   sV   t g d} t g d}t | |}|t g d}t t |sRJ d S )N)rF   gj       gJ/   rG   )zG?r   )\(?r   )r   g      gA    g|=)rK   rL   r   r   rN   r|   r   r   r"   r"   r#   &test_isotonic_non_regression_inf_slope]  s
    r   ri   TFc                 C   s   t jd}d}|j|d}|j|d}t| d||}|j|j }}|j|jksXJ |jd |jd k spJ t 	||
 sJ | | ksJ | | ksJ t
t |dksJ | rt
t |dksJ nt
t |dksJ d S )Nr      r   rh   r   )rK   rO   r   Znormalr   r   r   r   rj   Zin1dr|   r   r   Zdiff)ri   r   r   r   r!   r   ZX_thresholdsZy_thresholdsr"   r"   r#   test_isotonic_thresholdsg  s    r   c                  C   s   t d} | dd}t d}t | |}t ||}|j|jksLJ |j|jks\J |j|jkslJ |j|jks|J t	|j
|j
 t	|j|j || }||}t|| d S )NrE   r7   r   )rK   rM   Zreshaper   r   ZX_max_ZX_min_rJ   rI   r	   r   r   rN   r   )r   X_2dr!   iso_regZ
iso_reg_2dZy_pred1Zy_pred2r"   r"   r#   test_input_shape_validation  s    



r   c                  C   s   t d} t j| | f }t d}d}tjt|d t || W d    n1 sX0    Y  t | |}tjt|d || W d    n1 s0    Y  tjt|d |	| W d    n1 s0    Y  d S )NrE   z/should be a 1d array or 2d array with 1 featurer=   )
rK   rM   Zc_r'   r   r   r   r   rN   r   )r   r   r!   r@   r   r"   r"   r#   )test_isotonic_2darray_more_than_1_feature  s    

,(r   c                  C   sb   t dddd\} }t|}d|d< | }t||d t|| t j| ||d t|| dS )zCheck that calling fitting function of isotonic regression will not
    overwrite `sample_weight`.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20508
    rE   r   r   )r   Z
n_featuresr   r   r   N)r   rK   r   r   r   r   r   r   )r   r!   Zsample_weight_originalZsample_weight_fitr"   r"   r#   6test_isotonic_regression_sample_weight_not_overwritten  s    

r   )Ery   ZnumpyrK   r   r   r'   Zsklearn.datasetsr   Zsklearn.isotonicr   r   r   r   Zsklearn.utils.validationr   Zsklearn.utils._testingr   r	   r
   Zsklearn.utilsr   Zscipy.specialr   r$   r-   r2   r3   r6   r<   rA   rR   rV   rX   rc   re   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZmarkZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r"   r"   r"   r#   <module>   sj   )
,%





