B
    	\:                 @   s\  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
mZmZmZmZmZmZ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'd-d. Z(d/d0 Z)d1d2 Z*d3d4 Z+d5d6 Z,d7d8 Z-d9d: Z.d;d< Z/d=d> Z0d?d@ Z1dS )A    N)check_increasingisotonic_regressionIsotonicRegression)assert_raisesassert_array_equalassert_trueassert_falseassert_equalassert_array_almost_equalassert_warns_messageassert_no_warnings)shufflec        	      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   )Z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.7/site-packages/sklearn/tests/test_isotonic.pytest_permutation_invariance   s    r!   c              C   s,   dddg} dddg}t t| |}|s(td S )Nr   r   r   g?g?)r   r   AssertionError)r   r   is_increasingr   r   r    -test_check_increasing_small_number_of_samples   s    

r$   c              C   s8   ddddddg} dddd	d	d
g}t t| |}|s4td S )Nr   r   r   r   r   r   g      ?g)\(@g{G!@2   )r   r   r"   )r   r   r#   r   r   r    test_check_increasing_up&   s    r&   c              C   s8   ddddddg} ddddddg}t t| |}|s4td S )Nr   r   r   r   r   r   )r   r   r"   )r   r   r#   r   r   r     test_check_increasing_up_extreme/   s    r'   c              C   s8   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      g)\(g{G!i)r   r   r   )r   r   r#   r   r   r    test_check_increasing_down8   s    r(   c              C   s8   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   )r   r   r   )r   r   r#   r   r   r    "test_check_increasing_down_extremeA   s    r.   c              C   s<   ddddddg} dddddd	g}t td
t| |}t| d S )Nr   r   r   r   r   r   r)   r+   r-   Zinterval)r   UserWarningr   r   )r   r   r#   r   r   r    test_check_ci_warnJ   s    r0   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   arangelenr   r   r   r   predictrandomZpermutationonesZmean)r   y_r   r   Zpermr   r   r    test_isotonic_regressionV   s$     r>   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_minq   s     r@   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   r?   r   r   r   r    !test_isotonic_regression_ties_max~   s     rA   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)
    r2   r3            g     7@   r      g     5@      gbh86@g     @8@r   N)r   r   r
   r   r   )r   r   r?   r   r   r   r    (test_isotonic_regression_ties_secondary_   s    rI   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)r6   r7   r   r   r
   r   r   )r   r   r?   r   r   r   r    >test_isotonic_regression_with_ties_in_differently_sized_groups   s    rJ   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 )Nr3   r1   r   r   gffffff@r   F)
increasingr)   r   r   )	r6   r7   r   r   r8   r9   r   r<   shape)r   r=   r   r   r    !test_isotonic_regression_reversed   s    
rM   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	t
dd |D  W d Q R X |d |d k }t| d S )Nr3   r1   r   r   gffffff@r   auto)rK   T)record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)   )r6   r7   r8   r9   r   warningscatch_warningssimplefilterr   r   allr   )r   r   r   wr=   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	t
dd |D  W d Q R X |d |d k }|std S )Nr   gffffff@r   r   r3   r1   rN   )rK   T)rO   rP   c             S   s   g | ]}d t |jkqS )zinvalid value encountered in )rQ   rR   )rS   rT   r   r   r    rU      s   z<test_isotonic_regression_auto_increasing.<locals>.<listcomp>r   r)   )r6   r7   r8   r9   r   rV   rW   rX   r   r   rY   r"   )r   r   r   rZ   r=   r#   r   r   r    (test_isotonic_regression_auto_increasing   s    


r\   c              C   s   t  } tjd}tt| jdddgdddgdd	g tt| jdddgddg tt| j|dd
dddg tt| j|dd
 d S )N*   r   r   r   r   r   r   g?g333333?r3   )	r   r6   r;   RandomStater   
ValueErrorr   Zrandnr   )r   rngr   r   r    test_assert_raises_exceptions   s    "ra   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   ir%   )sizeg      I@r   )r   )
r   r6   r;   r^   r8   Zrandintlogr<   r   r   )r   r`   nr   r   weightsZy_set_valueZy_default_valuer   r   r    3test_isotonic_sample_weight_parameter_default_value   s    
*
rg   c              C   sT   t ddd} d}t|}t|}ddddddg}t| ||}t|| d S )Nr   r   )r4   r5   r   r   )r   r6   r8   roundr   r   )r   re   r   r   Zy_testZy_resultr   r   r     test_isotonic_min_max_boundaries  s    

ri   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    rj   c           	   C   sd   t dddddddg} t t| }tddd	}|||  tt|jt	|d t
|d g d S )
Nr   r   r   r1   r2   r3   rN   raise)rK   out_of_bounds)r6   r7   r8   r9   r   r   r   r_   r:   minmax)r   r   r   r   r   r    "test_isotonic_regression_oob_raise  s
    ro   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|t| t	t|t| d S )
Nr   r   r   r1   r2   r3   rN   clip)rK   rl   )
r6   r7   r8   r9   r   r   r:   rm   rn   r	   )r   r   r   y1Zy2r   r   r    !test_isotonic_regression_oob_clip*  s    
rr   c           	   C   st   t dddddddg} t t| }tddd	}|||  |t|d t|d g}t	t
t |d
 d S )Nr   r   r   r1   r2   r3   rN   nan)rK   rl   r   )r6   r7   r8   r9   r   r   r:   rm   rn   r	   sumZisnan)r   r   r   rq   r   r   r     test_isotonic_regression_oob_nan:  s    ru   c           	   C   sF   t dddddddg} t t| }tddd	}tt|j||  d S )
Nr   r   r   r1   r2   r3   rN   xyz)rK   rl   )r6   r7   r8   r9   r   r   r_   r   )r   r   r   r   r   r     test_isotonic_regression_oob_badH  s    rw   c           	   C   sV   t dddddddg} t t| }tddd	}|||  d
|_tt|j	| d S )Nr   r   r   r1   r2   r3   rN   rk   )rK   rl   rv   )
r6   r7   r8   r9   r   r   rl   r   r_   r   )r   r   r   r   r   r    &test_isotonic_regression_oob_bad_afterT  s    rx   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   r1   r2   r3   rN   rp   )rK   rl   )r6   r7   r8   r9   r   r   pickledumpsZHIGHEST_PROTOCOLloadsZtestingr   r:   )r   r   r   Zir_serZir2r   r   r    test_isotonic_regression_pickleb  s    
r|   c              C   sN   dddg} dddg}t ddd}|| | tt|| }|sJtd S )Nr   r   Trp   )rK   rl   )r   r   r6   rY   Zisfiniter:   r"   )r   r   r   Zall_predictions_finiter   r   r    !test_isotonic_duplicate_min_entryo  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?)r4   r5   r   F)r4   r5   rK   )r4   rK   )r6   r7   r   rY   r"   )r   r   r   r   r    test_isotonic_ymin_ymaxy  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]   r%   r+   r   )rc   r   r   r2   )r   )r6   r;   r^   r   ZlinspaceZuniformr   )r`   Z
regression	n_samplesr   r   rZ   r   r   r    test_isotonic_zero_weight_loop  s    r   c              C   s   t jd} d}d| | d }t | |ddt |   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@r3   g      ?Zint64r   g?r   rp   )r4   r5   rl   F)r   Ztrim_duplicates)r   )r6   r;   r^   ZrandZlessZexpZastyper   Z_build_yZ_build_fr   r:   r   )r`   r   ZX_trainZy_trainrf   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   )2rV   Znumpyr6   ry   r   Zsklearn.isotonicr   r   r   Zsklearn.utils.testingr   r   r   r   r	   r
   r   r   Zsklearn.utilsr   r!   r$   r&   r'   r(   r.   r0   r>   r@   rA   rI   rJ   rM   r[   r\   ra   rg   ri   rj   ro   rr   ru   rw   rx   r|   r}   r~   r   r   r   r   r   r   r    <module>   sH   (					
&