o
    Th;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   x_sy_ssample_weight_sy_transformedy_transformed_s r'   [/home/air/segue/gpt/backup/venv/lib/python3.10/site-packages/sklearn/tests/test_isotonic.pytest_permutation_invariance   s   r)   c                  C   Z   g d} g d}t   t dt t| |}W d    n1 s"w   Y  |s+J 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   
r4   c                  C   r*   )Nr   r   r   r   r   r   )r         ?g)\(@{G!@r7   2   r,   r-   r2   r'   r'   r(   test_check_increasing_up3      
r9   c                  C   sZ   g d} g d}t   t dt t| |}W d    n1 s"w   Y  |s+J d S )Nr5   r,   r-   r2   r'   r'   r(    test_check_increasing_up_extreme?   r:   r;   c                  C   Z   g d} g d}t   t dt t| |}W d    n1 s"w   Y  |r+J d S )Nr5   )r   g      g)\({G!r=   r,   r-   r2   r'   r'   r(   test_check_increasing_downK   r:   r?   c                  C   r<   )Nr5   )r   r,   r-   r2   r'   r'   r(   "test_check_increasing_down_extremeW   r:   rE   c                  C   sX   g d} g d}d}t jt|d t| |}W d    n1 s!w   Y  |r*J d S )Nr5   )r   r@   r   rB   r   rD   intervalmatch)pytestwarnsr1   r   )r    r!   msgr3   r'   r'   r(   test_check_ci_warnc   s   rL   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   rO   rO   rO   rP   )rP   r   r   )r   r   r                 ?y_miny_max)nparrayr   r   arangelenr   r   r   r   predictrandompermutationonesmean)r!   y_r    r   permr'   r'   r(   test_isotonic_regressiono   s"    &&ra   c                  C   `   g d} g d}g d}t  }|| | t|| || || | t||| | d S )N)r   r   r   r   r   r   r   r   r   r   r   r   )r6   r6   r   r   r   r   r   r   r   r   r   r    r!   y_truer   r'   r'   r(   !test_isotonic_regression_ties_min       rg   c                  C   rb   )N)r   r   r   r   r   r   rc   )r   r   r   r         @ri   rd   re   r'   r'   r(   !test_isotonic_regression_ties_max   rh   rj   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)
    )rO   rO   rO   rP   rP   rP      rk   rk      rl   )        7@   r   rm      g     5@      rn   rp   )bh86@rs   rs   rs   rs   rs   rs   rs   rs        @8@rt   r   N)r   r   r
   r   r   re   r'   r'   r(   (test_isotonic_regression_ties_secondary_   s   ru   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   )rQ         ?rv   rv   rv   rR   N)rV   rW   r   r   r
   r   r   re   r'   r'   r(   >test_isotonic_regression_with_ties_in_differently_sized_groups   s   rw   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rP   rN   rP   r   r   ffffff@r   )rP         #@rz   r   333333@r{   r   F
increasingr@   r   r   )rV   rW   r   r	   r   r   rX   rY   r   r]   shape)r!   y_resulty_isor_   r'   r'   r(   !test_isotonic_regression_reversed   s   

6r   c                  C   s   t g d} t t| }tdd}tjdd}td ||| }t	dd |D s0J W d    n1 s:w   Y  |d	 |d
 k }|rKJ d S )Nrx   autor|   Trecordalwaysc                 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   r@   
rV   rW   rX   rY   r   r.   r/   r0   r   allr!   r    r   wr_   r3   r'   r'   r(   (test_isotonic_regression_auto_decreasing      

r   c                  C   s   t g d} t t| }tdd}tjdd}td ||| }t	dd |D s0J W d    n1 s:w   Y  |d	 |d
 k }|sKJ d S )N)r   ry   r   r   rP   rN   rP   r   r|   Tr   r   c                 S   r   r   r   r   r'   r'   r(   r     r   z<test_isotonic_regression_auto_increasing.<locals>.<listcomp>r   r@   r   r   r'   r'   r(   (test_isotonic_regression_auto_increasing  r   r   c                  C   s4  t  } tjd}d}tjt|d | g dg dddg W d    n1 s*w   Y  tjt|d | g ddd	g W d    n1 sKw   Y  d
}tjt|d | |ddg d W d    n1 spw   Y  d}tjt|d | 	|dd W d    d S 1 sw   Y  d S )N*   z:Found input variables with inconsistent numbers of samplesrG   r+   )r   r   r   皙?g333333?r   r   zX should be a 1d arrayr   rP   z0Isotonic regression input X should be a 1d array)
r   rV   r[   RandomStaterI   raises
ValueErrorr   randnr   )r   rngrK   r'   r'   r(   test_assert_raises_exceptions  s"   "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   r>   r8   sizeg      I@r   r   )
r   rV   r[   r   rX   randintlogr]   r   r   )r   r   nr    r!   weightsy_set_value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   rS   r   )r   r   r   r   r   r   )r   rV   rX   roundr   r   )r   r   r    r!   y_testr   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   
expected_y
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    d S 1 s>w   Y  d S )NrM   r   raiser}   out_of_boundsz)in x_new is below the interpolation rangerG   rP   )rV   rW   rX   rY   r   r   rI   r   r   rZ   minmax)r!   r    r   rK   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s8J t|t|ksBJ d S )NrM   r   clipr   rP   )	rV   rW   rX   rY   r   r   rZ   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s4J d S )NrM   r   nanr   rP   r   )rV   rW   rX   rY   r   r   rZ   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 )NrM   r   r   r   )rV   rW   rX   rY   r   r   pickledumpsHIGHEST_PROTOCOLloadstestingr   rZ   )r!   r    r   ir_serir2r'   r'   r(   test_isotonic_regression_pickle{  s   
r   c                  C   sJ   g d} g d}t ddd}|| | tt|| }|s#J d S )N)r   r   r   Tr   r   )r   r   rV   r   isfiniterZ   )r    r!   r   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s1J t |dks:J t| ddd}t |dksJJ 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=
?rQ   r   rS   r   F)rT   rU   r}   )rT   r}   )rV   rW   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   r8   rB   r   r   r   r   rO   r   )rV   r[   r   r   linspaceuniformr   )r   
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@rP   int64float64r   r   r   r   )rT   rU   r   F)r   trim_duplicatesr   )rV   r[   r   randlessr   astyper   _build_y_build_fr   rZ   r   )r   r   X_trainy_trainr   
slow_model
fast_modelX_train_fity_train_fitX_testy_pred_slow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s<J t 	t
|| }|j|||d ||}|j|ksZJ qd S )Nr   r   r   r   r   )?r   r   r   r   r   F)r   	ensure_2dr   )rV   rW   r   r   r   float32r   r   r   rX   rY   r   rZ   )	r   r!   r   regr   y_np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s'J d S )Nr   r   )	r   rV   rW   rX   rY   r   r   rZ   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 ]"}t j| |d}| }t |}t|||\}}}t|g d q
d S )N)r   r   r   r   r   r   )r   r   r   )rV   r   r   rW   r   	ones_liker   r   )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r(t g d}nt ddg}t|| d S )N)r   gؗҜ<r   -     ?r   )r   r   r   r   r   )rV   rW   r   r   r   r   r   )r   r    r!   r   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   rR   r   r   )r   r   r   r   )r   g      ?r   r6   r   )r   g      ?r6   g      @r   )rQ   rR   g       @)rQ   r6   g      @)	rV   rW   r   r   r   rZ   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 |s)J d S )N)rQ   gj       gJ/   rR   )zG?r   )\(?r   )r   g      gA    g|=)rV   rW   r   r   rZ   r   r   r   r'   r'   r(   &test_isotonic_non_regression_inf_slopeD  s
   r  r}   TFc                 C   s   t jd}d}|j|d}|j|d}t| d||}|j|j}}|j|jks,J |jd |jd k s8J t 	||
 sBJ | | ksLJ | | ksVJ t
t |dksaJ | rpt
t |dksnJ d S t
t |dks{J d S )Nr      r   r|   r   )rV   r[   r   normalr   r   r   r   r~   isinr   r   r   diff)r}   r   r   r   r!   r   X_thresholdsy_thresholdsr'   r'   r(   test_isotonic_thresholdsN  s   r  c                  C   s   t d} | dd}t d}t | |}t ||}|j|jks&J |j|jks.J |j|jks6J |j|jks>J t	|j
|j
 t	|j|j || }||}t|| d S )NrP   r@   r   )rV   rX   reshaper   r   X_max_X_min_rU   rT   r   r   r   rZ   r	   )r   X_2dr!   iso_reg
iso_reg_2dy_pred1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 s,w   Y  t | |}tjt|d || W d    n1 sOw   Y  tjt|d |	| W d    d S 1 slw   Y  d S )NrP   z/should be a 1d array or 2d array with 1 featurerG   )
rV   rX   c_rI   r   r   r   r   rZ   r   )r   r  r!   rK   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
    rP   r   r   r   
n_featuresr   r   r   N)r   rV   r   r   r   r	   r   r   )r   r!   sample_weight_originalsample_weight_fitr'   r'   r(   6test_isotonic_regression_sample_weight_not_overwritten  s   

r  r~   1d2dc                 C   sl   t d}| dkr|dd}t d}t ||}| }t|t js'J |jt	ks.J t
dg| dS )z7Check `get_feature_names_out` for `IsotonicRegression`.rP   r  r@   r   isotonicregression0N)rV   rX   r	  r   r   get_feature_names_out
isinstancendarrayr   objectr   )r~   r   r!   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 ||| ||}||}W d   n1 s2w   Y  t	|| j
s?J t	|tjsGJ 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
    pandasrP   r   r   r  )transform_outputN)rI   importorskipr   r   sklearnconfig_contextr   r   rZ   r  	DataFramerV   r  )pdr   r!   	regressorX_transr   r'   r'   r(   'test_isotonic_regression_output_predict  s   
	
r,  )Fr   r   r.   numpyrV   rI   scipy.specialr   r&  sklearn.datasetsr   sklearn.isotonicr   r   r   r   sklearn.utilsr   sklearn.utils._testingr	   r
   r   sklearn.utils.validationr   r)   r4   r9   r;   r?   rE   rL   ra   rg   rj   ru   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizeint32r   r   r   r   r   r   r   r   r  r  r  r  r  r"  r,  r'   r'   r'   r(   <module>   sr    )
,%







