B
    0d5U                 @   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   s   t  } dddddddg}ddd	dddd
g}dddddddg}t|||dd\}}}| j|||d}| j|||d|}t|| d S )N                     )   3      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   M/var/www/html/venv/lib/python3.7/site-packages/sklearn/tests/test_isotonic.pytest_permutation_invariance   s    r!   c           	   C   sP   dddg} dddg}t d }t| |}W d Q R X t|dksDt|sLtd S )Nr   r   r   g?g?)pytestwarnsr   lenAssertionError)r   r   recordis_increasingr   r   r    -test_check_increasing_small_number_of_samples)   s    

r(   c           	   C   s\   ddddddg} dddd	d	d
g}t d }t| |}W d Q R X t|dksPt|sXtd S )Nr   r   r   r   r   r   g      ?g)\(@g{G!@2   )r"   r#   r   r$   r%   )r   r   r&   r'   r   r   r    test_check_increasing_up4   s    r*   c           	   C   s\   ddddddg} ddddddg}t d }t| |}W d Q R X t|dksPt|sXtd S )Nr   r   r   r   r   r   )r"   r#   r   r$   r%   )r   r   r&   r'   r   r   r     test_check_increasing_up_extreme@   s    r+   c           	   C   s\   ddddddg} dddd	d	d
g}t d }t| |}W d Q R X t|dksPt|rXtd S )Nr   r   r   r   r   r   g      g)\(g{G!i)r"   r#   r   r$   r%   )r   r   r&   r'   r   r   r    test_check_increasing_downL   s    r,   c           	   C   s\   ddddddg} dddd	d
dg}t d }t| |}W d Q R X t|dksPt|rXtd S )Nr   r   r   r   r   r   )r"   r#   r   r$   r%   )r   r   r&   r'   r   r   r    "test_check_increasing_down_extremeX   s    r2   c           	   C   sT   ddddddg} dddddd	g}d
}t jt|d t| |}W d Q R X |rPtd S )Nr   r   r   r   r   r   r-   r/   r1   interval)match)r"   r#   UserWarningr   r%   )r   r   msgr'   r   r   r    test_check_ci_warnd   s    r7   c           	   C   sT  t dddddddg} t dddddddg}t|t|  t ddd	g} t d
d
d
g}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 )Nr   r   r   	      
   r   r   r   r   g        g      ?)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"     &rD   c              C   sx   ddddddg} ddddddg}ddddddg}t  }|| | t|| || || | t||| | d S )Nr   r   r   r   r   r   g      ?)r   r   r	   r   r   )r   r   y_truer   r   r   r    !test_isotonic_regression_ties_min   s     rF   c              C   sx   ddddddg} ddddddg}ddddddg}t  }|| | t|| || || | t||| | d S )Nr   r   r   r   r   r   g      @)r   r   r	   r   r   )r   r   rE   r   r   r   r    !test_isotonic_regression_ties_max   s     rG   c              C   s   dddddddddddg} dddddd	d
dddd	g}dddddddddddg}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)
    r9   r:            g     7@   r      g     5@      gbh86@g     @8@r   N)r   r   r
   r   r   )r   r   rE   r   r   r   r    (test_isotonic_regression_ties_secondary_   s"    rO   c              C   sz   t ddddddg} t ddddddg}t ddddddg}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   g        g      ?g      ?N)r=   r>   r   r   r
   r   r   )r   r   rE   r   r   r   r    >test_isotonic_regression_with_ties_in_differently_sized_groups   s    rP   c           	   C   sj   t dddddddg} tddt t| | }tt |d d	 j|d d	 |d
d   dk d S )Nr:   r8   r   r   gffffff@r   F)
increasingr-   r   r   )	r=   r>   r   r   r?   r$   r	   rB   shape)r   rC   r   r   r    !test_isotonic_regression_reversed   s    rS   c           	   C   s   t dddddddg} t t| }tdd}tjd	d
2}td ||| }t	dd |D sjt
W d Q R X |d |d k }|rt
d S )Nr:   r8   r   r   gffffff@r   auto)rQ   T)r&   alwaysc             S   s   g | ]}d t |jkqS )zinvalid value encountered in )strmessage).0warnr   r   r    
<listcomp>   s    z<test_isotonic_regression_auto_decreasing.<locals>.<listcomp>r   r-   )r=   r>   r?   r$   r   warningscatch_warningssimplefilterr   allr%   )r   r   r   wrC   r'   r   r   r    (test_isotonic_regression_auto_decreasing   s    

 r`   c           	   C   s   t dddddddg} t t| }tdd}tjd	d
2}td ||| }t	dd |D sjt
W d Q R X |d |d k }|st
d S )Nr   gffffff@r   r   r:   r8   rT   )rQ   T)r&   rU   c             S   s   g | ]}d t |jkqS )zinvalid value encountered in )rV   rW   )rX   rY   r   r   r    rZ     s    z<test_isotonic_regression_auto_increasing.<locals>.<listcomp>r   r-   )r=   r>   r?   r$   r   r[   r\   r]   r   r^   r%   )r   r   r   r_   rC   r'   r   r   r    (test_isotonic_regression_auto_increasing   s    

 ra   c           	   C   s   t  } tjd}d}tjt|d$ | dddgddd	gd
dg W d Q R X tjt|d | dddgddg W d Q R X d}tjt|d  | |d	ddddg W d Q R X d}tjt|d | 	|d	d W d Q R X d S )N*   z:Found input variables with inconsistent numbers of samples)r4   r   r   r   r   r   r   g?g333333?zX should be a 1d arrayr:   z0Isotonic regression input X should be a 1d array)
r   r=   rA   RandomStater"   raises
ValueErrorr   Zrandnr   )r   rngr6   r   r   r    test_assert_raises_exceptions  s    ( $rg   c              C   s~   t  } tjd}d}t|}|jdd|fddtdt|   }t|}| j|||d}| ||}t	|| d S )	Nrb   d   ir)   )sizeg      I@r   )r   )
r   r=   rA   rc   r?   randintlogrB   r   r	   )r   rf   nr   r   weightsZy_set_valueZy_default_valuer   r   r    3test_isotonic_sample_weight_parameter_default_value#  s    
*
rn   c              C   sT   t ddd} d}t|}t|}ddddddg}t| ||}t|| d S )Nr   r   )r;   r<   r   r   )r   r=   r?   roundr   r	   )r   rl   r   r   Zy_testZy_resultr   r   r     test_isotonic_min_max_boundaries3  s    

rp   c              C   sl   t  } dddddddg}ddd	dddd
g}dddddddg}ddddddd
g}| j|||d}t|| d S )Nr   r   r   r   r   r   r   r   r   r   gfffff+@)r   )r   r   r	   )r   r   r   r   Z
expected_yZ
received_yr   r   r    test_isotonic_sample_weight>  s    rq   c           	   C   s~   t dddddddg} t t| }tddd	}|||  d
}tjt|d$ |	t
|d t|d g W d Q R X d S )Nr   r   r   r8   r9   r:   rT   raise)rQ   out_of_boundsz1A value in x_new is below the interpolation range)r4   )r=   r>   r?   r$   r   r   r"   rd   re   r@   minmax)r   r   r   r6   r   r   r    "test_isotonic_regression_oob_raiseI  s    rv   c           	   C   s   t dddddddg} t t| }tddd	}|||  |t|d t|d g}||}t|t|kszt	t|t|kst	d S )
Nr   r   r   r8   r9   r:   rT   clip)rQ   rs   )
r=   r>   r?   r$   r   r   r@   rt   ru   r%   )r   r   r   y1y2r   r   r    !test_isotonic_regression_oob_clipX  s    
rz   c           	   C   sv   t dddddddg} t t| }tddd	}|||  |t|d t|d g}t	t 
|d
ksrtd S )Nr   r   r   r8   r9   r:   rT   nan)rQ   rs   r   )r=   r>   r?   r$   r   r   r@   rt   ru   sumisnanr%   )r   r   r   rx   r   r   r     test_isotonic_regression_oob_nanh  s    r~   c           	   C   s`   t dddddddg} t t| }tddd	}d
}tjt|d |||  W d Q R X d S )Nr   r   r   r8   r9   r:   rT   xyz)rQ   rs   zIThe argument ``out_of_bounds`` must be in 'nan', 'clip', 'raise'; got xyz)r4   )	r=   r>   r?   r$   r   r"   rd   re   r   )r   r   r   r6   r   r   r     test_isotonic_regression_oob_badv  s    r   c           	   C   sp   t dddddddg} t t| }tddd	}|||  d
|_d}tjt	|d |
| W d Q R X d S )Nr   r   r   r8   r9   r:   rT   rr   )rQ   rs   r   zIThe argument ``out_of_bounds`` must be in 'nan', 'clip', 'raise'; got xyz)r4   )r=   r>   r?   r$   r   r   rs   r"   rd   re   r   )r   r   r   r6   r   r   r    &test_isotonic_regression_oob_bad_after  s    r   c           	   C   st   t dddddddg} t t| }tddd	}|||  t|tj}t	|}t j
|||| d S )
Nr   r   r   r8   r9   r:   rT   rw   )rQ   rs   )r=   r>   r?   r$   r   r   pickledumpsHIGHEST_PROTOCOLloadstestingr	   r@   )r   r   r   Zir_serZir2r   r   r    test_isotonic_regression_pickle  s    
r   c              C   sN   dddg} dddg}t ddd}|| | tt|| }|sJtd S )Nr   r   Trw   )rQ   rs   )r   r   r=   r^   isfiniter@   r%   )r   r   r   Zall_predictions_finiter   r   r    !test_isotonic_duplicate_min_entry  s    

r   c              C   s   t ddddddddd	d
ddddddddddg} t| ddd}t |dksRtt |dksdtt| dddd}t |dkstt |dkstt| ddd}t |dkstd S )Ngh|?5?gJ+?gMgS?g9vgI+ƿg/$gl?gtV?g"~?gzG?gy&1?g#~jg"~j?g;On?gT㥛 ؿgy&1gZd;g
ףp=
?g        g?)r;   r<   r   F)r;   r<   rQ   )r;   rQ   )r=   r>   r   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 )
Nrb   r)   r/   r   )ri   r   r   r9   )r   )r=   rA   rc   r   Zlinspaceuniformr   )rf   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@r:   int64float64r   g?r   rw   )r;   r<   rs   F)r   Ztrim_duplicates)r   )r=   rA   rc   Zrandlessr   astyper   Z_build_yZ_build_fr   r@   r	   )rf   r   ZX_trainZy_trainrm   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   dddddg} t jdddddgt jd}t }xt jt jt jt jfD ]}xd |t j|fD ]}t j| |d}t|t jt jgdd	j	}t
||d
}|j	|kstt t| |}|j|||d
 ||}|j	|ks\tq\W qDW d S )Nr   r   r   r   r   g?)dtypeF)r   Z	ensure_2d)r   )r=   r>   r   r   int32r   float32r   r   r   r   r%   r?   r$   r   r@   )	r   rm   regr   r   Zy_npZexpected_dtyperesXr   r   r    test_isotonic_dtype  s    
r   y_dtypec             C   sX   t  }tjdddddg| d}tjt|tjd}||| ||j|jksTt	d S )Nr   r   r   r   r   )r   )
r   r=   r>   r?   r$   r   r   r@   r   r%   )r   r   r   r   r   r   r    test_isotonic_mismatched_dtype-  s
    r   c              C   sj   dddddg} xVt jt jfD ]F}t j| |d}| }t |}t|||\}}}t|dddg qW d S )Nr   r   r   )r   )r=   r   r   r>   r   	ones_liker   r	   )Zx_listr   r   r   r_   r   r   r    test_make_unique_dtype8  s    
r   r   c             C   sr   t jddddg| d}| }t |}t|||\}}}| t jkrVt dddg}nt ddg}t|| d S )Nr   gؗҜ<r   g-     ?)r   )r=   r>   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ddddgt jd} t jddddgt jd}t | |}|dddddg}t|t dd	dd
dg t|jt dddg t|jt dddg d S )Nr   r   g      ?r   )r   r   g      ?g      ?g      ?g      @g        g       @g      @)	r=   r>   r   r   r   r@   r	   X_thresholds_y_thresholds_)r   r   iregy_predr   r   r    #test_isotonic_make_unique_toleranceP  s    r   c              C   sb   t ddddg} t ddddg}t | |}|t ddd	d
g}t t |s^td S )Ng        gj       gJ/   g      ?gzG?g)\(?r   g      gA    g|=)r=   r>   r   r   r@   r^   r   r%   )r   r   r   r   r   r   r    &test_isotonic_non_regression_inf_slope]  s
    r   rQ   TFc             C   s   t jd}d}|j|d}|j|d}t| d||}|j|j }}|j|jksXt	|jd |jd k spt	t 
|| st	| | kst	| | kst	tt |dkst	| rtt |dkst	ntt |dkst	d S )Nrb      )ri   )rQ   r   )r=   rA   rc   normalr   r   r   r   rR   r%   Zin1dr^   ru   rt   diff)rQ   rf   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sLt|j|jks\t|j|jkslt|j	|j	ks|tt
|j|j t
|j|j || }||}t|| d S )Nr:   r-   r   )r=   r?   Zreshaper   r   ZX_max_r%   ZX_min_r<   r;   r	   r   r   r@   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 Q R X t | |}tjt|d || W d Q R X tjt|d |	| W d Q R X d S )Nr:   z/should be a 1d array or 2d array with 1 feature)r4   )
r=   r?   Zc_r"   rd   re   r   r   r@   r   )r   r   r   r6   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
    r:   r   r   )r   Z
n_featuresr   r   )r   N)r   r=   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   )Er[   numpyr=   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(   r*   r+   r,   r2   r7   rD   rF   rG   rO   rP   rS   r`   ra   rg   rn   rp   rq   rv   rz   r~   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    <module>   sd   )
,%&

