a
    h;W                     @   sF  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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	 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 Z0d:d; Z1d<d= Z2d>d? Z3ej45d@ej6ej7ej8ej9gdAdB Z:ej45dCej6ej7ej8ej9gdDdE Z;dFdG Z<ej45d@ej9ej8gdHdI Z=dJdK Z>dLdM Z?ej45dNdOdPgdQdR Z@dSdT ZAdUdV ZBdWdX ZCej45dYdZd[gd\d] ZDd^d_ ZEdS )`    N)expit)make_regression)IsotonicRegression_make_uniquecheck_increasingisotonic_regression)shuffle)assert_allcloseassert_array_almost_equalassert_array_equal)check_arrayc            	      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"   W/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/tests/test_isotonic.pytest_permutation_invariance   s    r$   c                  C   sZ   g d} g d}t  & t dt t| |}W d    n1 sD0    Y  |sVJ d S )Nr   r   r   )r   g?g?errorwarningscatch_warningssimplefilterUserWarningr   r    r!   is_increasingr"   r"   r#   -test_check_increasing_small_number_of_samples(   s    
(r.   c                  C   sZ   g d} g d}t  & t dt t| |}W d    n1 sD0    Y  |sVJ d S )Nr   r   r   r   r   r   )r         ?g)\(@{G!@r1   2   r&   r'   r,   r"   r"   r#   test_check_increasing_up3   s    
(r3   c                  C   sZ   g d} g d}t  & t dt t| |}W d    n1 sD0    Y  |sVJ d S )Nr/   r&   r'   r,   r"   r"   r#    test_check_increasing_up_extreme?   s    
(r4   c                  C   sZ   g d} g d}t  & t dt t| |}W d    n1 sD0    Y  |rVJ d S )Nr/   )r   g      g)\({G!r5   r&   r'   r,   r"   r"   r#   test_check_increasing_downK   s    
(r7   c                  C   sZ   g d} g d}t  & t dt t| |}W d    n1 sD0    Y  |rVJ d S )Nr/   )r   r&   r'   r,   r"   r"   r#   "test_check_increasing_down_extremeW   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   r8   r   r:   r   r<   intervalmatch)pytestZwarnsr+   r   )r    r!   msgr-   r"   r"   r#   test_check_ci_warnc   s    (rC   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   rF   rF   rF   rG   )rG   r   r   )r   r   r                 ?y_miny_max)nparrayr   r   arangelenr   r   r   r   predictrandomZpermutationonesmean)r!   y_r    r   permr"   r"   r#   test_isotonic_regressiono   s"     &rW   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   )r0   r0   r   r   r   r   r   r   r   r   r   r    r!   Zy_truer   r"   r"   r#   !test_isotonic_regression_ties_min   s     r[   c                  C   s`   g d} g d}g d}t  }|| | t|| || || | t||| | d S )N)r   r   r   r   r   r   rX   )r   r   r   r         @r\   rY   rZ   r"   r"   r#   !test_isotonic_regression_ties_max   s     r]   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)
    )rF   rF   rF   rG   rG   rG      r^   r^      r_   )        7@   r   r`      g     5@      ra   rc   )bh86@rf   rf   rf   rf   rf   rf   rf   rf        @8@rg   r   N)r   r   r
   r   r   rZ   r"   r"   r#   (test_isotonic_regression_ties_secondary_   s    rh   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   )rH         ?ri   ri   ri   rI   N)rM   rN   r   r   r
   r   r   rZ   r"   r"   r#   >test_isotonic_regression_with_ties_in_differently_sized_groups   s    rj   c                  C   s   t g d} t g d}t| dd}t|| tddt t| | }t|| tt 	|d d j
|d d |dd   dk d S )NrG   rE   rG   r   r   ffffff@r   )rG         #@rm   r   333333@rn   r   F
increasingr8   r   r   )rM   rN   r   r	   r   r   rO   rP   r   rS   shape)r!   y_resultZy_isorU   r"   r"   r#   !test_isotonic_regression_reversed   s    

rs   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 )Nrk   autoro   Trecord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   r8   
rM   rN   rO   rP   r   r(   r)   r*   r   allr!   r    r   wrU   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   rl   r   r   rG   rE   rG   rt   ro   Tru   rw   c                 S   s   g | ]}d t |jv qS rx   ry   r|   r"   r"   r#   r     r   z<test_isotonic_regression_auto_increasing.<locals>.<listcomp>r   r8   r   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   rG   z0Isotonic regression input X should be a 1d array)
r   rM   rR   RandomStaterA   raises
ValueErrorr   Zrandnr   )r   rngrB   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   r6   r2   sizeg      I@r   r   )
r   rM   rR   r   rO   randintlogrS   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   rJ   r   )r   r   r   r   r   r   )r   rM   rO   roundr   r   )r   r   r    r!   Zy_testrr   r"   r"   r#    test_isotonic_min_max_boundaries8  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_weightC  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 )NrD   rt   raiserp   out_of_boundsz)in x_new is below the interpolation ranger?   rG   )rM   rN   rO   rP   r   r   rA   r   r   rQ   minmax)r!   r    r   rB   r"   r"   r#   "test_isotonic_regression_oob_raiseN  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 )NrD   rt   clipr   rG   )	rM   rN   rO   rP   r   r   rQ   r   r   )r!   r    r   y1y2r"   r"   r#   !test_isotonic_regression_oob_clip]  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 )NrD   rt   nanr   rG   r   )rM   rN   rO   rP   r   r   rQ   r   r   sumisnan)r!   r    r   r   r"   r"   r#    test_isotonic_regression_oob_nanm  s    r   c                  C   sj   t g d} t t| }tddd}|||  t|tj}t	|}t j
|||| d S )NrD   rt   r   r   )rM   rN   rO   rP   r   r   pickledumpsHIGHEST_PROTOCOLloadsZtestingr   rQ   )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   rM   r   isfiniterQ   )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=
?rH   r   rJ   r   F)rK   rL   rp   )rK   rp   )rM   rN   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   r2   r:   r   r   r   r   rF   r   )rM   rR   r   r   Zlinspace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@rG   int64float64r   r   r   r   )rK   rL   r   F)r   Ztrim_duplicatesr   )rM   rR   r   Zrandlessr   astyper   Z_build_yZ_build_fr   rQ   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   dtypec           	      C   s   g d}t jg dt jd}t }d |t j|fD ]}t j|| d}t|t jt jgddj}t||d}|j|ksxJ t 	t
|| }|j|||d ||}|j|ks4J q4d S )Nr   r   r   r   r   )?r   r   r   r   r   F)r   Z	ensure_2dr   )rM   rN   r   r   r   float32r   r   r   rO   rP   r   rQ   )	r   r!   r   regr   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   rM   rN   rO   rP   r   r   rQ   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   )rM   r   r   rN   r   	ones_liker   r   )Zx_listr   r    r!   r   r"   r"   r#   test_make_unique_dtype  s    
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   )rM   rN   r   r   r   r   r   )r   r    r!   r   Zx_outr"   r"   r#   test_make_unique_tolerance)  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   rI   r   r   )r   r   r   r   )r   g      ?r   r0   r   )r   g      ?r0   g      @r   )rH   rI   g       @)rH   r0   g      @)	rM   rN   r   r   r   rQ   r   X_thresholds_y_thresholds_r   r!   iregy_predr"   r"   r#   #test_isotonic_make_unique_tolerance7  s    r   c                  C   sV   t g d} t g d}t | |}|t g d}t t |sRJ d S )N)rH   gj       gJ/   rI   )zG?r   )\(?r   )r   g      gA    g|=)rM   rN   r   r   rQ   r   r   r   r"   r"   r#   &test_isotonic_non_regression_inf_slopeD  s
    r   rp   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   ro   r   )rM   rR   r   normalr   r   r   r   rq   isinr   r   r   diff)rp   r   r   r   r!   r   ZX_thresholdsZy_thresholdsr"   r"   r#   test_isotonic_thresholdsN  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 )NrG   r8   r   )rM   rO   reshaper   r   ZX_max_ZX_min_rL   rK   r   r   r   rQ   r	   )r   X_2dr!   iso_regZ
iso_reg_2dZy_pred1Zy_pred2r"   r"   r#   test_input_shape_validationi  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 )NrG   z/should be a 1d array or 2d array with 1 featurer?   )
rM   rO   Zc_rA   r   r   r   r   rQ   r   )r   r   r!   rB   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
    rG   r   r   r   Z
n_featuresr   r   r   N)r   rM   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   rq   Z1d2dc                 C   sl   t d}| dkr|dd}t d}t ||}| }t|t jsNJ |jt	ks\J t
dg| dS )z7Check `get_feature_names_out` for `IsotonicRegression`.rG   r   r8   r   Zisotonicregression0N)rM   rO   r   r   r   Zget_feature_names_out
isinstancendarrayr   objectr   )rq   r   r!   Zisonamesr"   r"   r#   test_get_feature_names_out  s    

r   c                  C   s   t d} tdddd\}}t }tjdd0 ||| ||}||}W d   n1 sd0    Y  t	|| j
s~J t	|tjsJ dS )a  Check that `predict` does return the expected output type.

    We need to check that `transform` will output a DataFrame and a NumPy array
    when we set `transform_output` to `pandas`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/25499
    ZpandasrG   r   r   r   )Ztransform_outputN)rA   Zimportorskipr   r   sklearnZconfig_contextr   r   rQ   r   Z	DataFramerM   r   )pdr   r!   Z	regressorZX_transr   r"   r"   r#   'test_isotonic_regression_output_predict  s    	

(r   )Fr   r   r(   numpyrM   rA   Zscipy.specialr   r   Zsklearn.datasetsr   Zsklearn.isotonicr   r   r   r   Zsklearn.utilsr   Zsklearn.utils._testingr	   r
   r   Zsklearn.utils.validationr   r$   r.   r3   r4   r7   r=   rC   rW   r[   r]   rh   rj   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markZparametrizeZint32r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r"   r"   r#   <module>   sp   )
,%


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