o
    `^hc                     @   s~  d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d d	l!m"Z" d d
l#m$Z$ d dl%m&Z&m'Z'm(Z( d.ddZ)dd Z*dd Z+dd Z,dd Z-dd Z.dd Z/dd Z0ej12deeegdd Z3d d! Z4d"d# Z5ej12d$g d%ej12d&g d'd(d) Z6d*d+ Z7d,d- Z8dS )/    )productN)assert_allclose)optimize)	factorialxlogy)DummyRegressor)UndefinedMetricWarning)d2_absolute_error_scored2_pinball_scored2_tweedie_scoreexplained_variance_scoremake_scorer	max_errormean_absolute_errormean_absolute_percentage_errormean_pinball_lossmean_squared_errormean_squared_log_errormean_tweedie_deviancemedian_absolute_errorr2_scoreroot_mean_squared_errorroot_mean_squared_log_error)_check_reg_targets)GridSearchCV)assert_almost_equalassert_array_almost_equalassert_array_equal2   c                 C   s  t | }|d }|d }tt||d tt||tt d| t d|  tt||d tt||d tt||d tt||ddd tt||ddd tt||d t	||}t 
|sjJ |dkspJ tt||d tt||dd	 tt||d
ddd	 tt||d tt||d
dd tt||ddt|| tt||ddt|| t |t |  }tt||dt ||  |   d}dd }t j||d d}tt|||dd|||| ||||    tt||t||dd t dd|  }d	| }| }	tt||ddd|	 |	d	 d	|	  d   tt||dd|	d dt d	   tt||d	dd	t d	 d  tt||dddt d	 d |	 t |   tt||ddt d| d|	   d	t t|d	| |	d   }
tt||ddd|	d dt d	  |
   d	t |	d d	  d	|	 t t|	  }
tt||d	ddd	t d	 d |
   d S )N         ?      ?皙?alpha333333?    .Agףp=
?   Fforce_finiter   power皙?c                 S   s,   |t | | d d| t ||  d  S )Nr   r   )npmaximum)y_truey_predr$    r1   c/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/sklearn/metrics/tests/test_regression.py<lambda>M   s
    z)test_regression_metrics.<locals>.<lambda>d   )qg?      ?            )r-   aranger   r   r   logr   r   r   r   isfiniter   r   r   r   r   absmediansumr   r	   
percentiler
   sqrtmeanr   r   )	n_samplesr/   r0   y_pred_2mape
dev_medianr$   pinball_loss
y_quantilendev_meanr1   r1   r2   test_regression_metrics&   s   

 "  ,$rM   c                  C   sH   t dggdggdd} tdggdggdd}t| t|ks"J d S )Nr   
   
raw_valuesmultioutput)r   r   r-   rC   pytestapprox)msermser1   r1   r2   2test_root_mean_squared_error_multioutput_raw_value   s   rV   c                     s  t g dg dg dgt g dg dg dg t } t| d t } t| ddd	 t } t| d
dd	 t } t| ddd	 t } t| d t } t| d t j	t
 dd} t | soJ | dksuJ t } t| d t dd} t| d t dd} t| d t ddd} fddtjd D }t t |d|}t|| t ddd}t||  ddg}t|ddgdd} t| d t|ddgdd} t| d t ddd} t| t j t ddd} t| t j d d d d f  d d d d f  t dd} t ddd}t| | t dd} t ddd}t| | t|ddgddd} t| t j t|dd!gddd} t| t j  d S )"N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   g?guV?r'   decimalr,   g)\(?g?)decimalsr&   r!   variance_weightedrP   g      uniform_averageg      rO   r$   rQ   c                    sj   g | ]1}d t dd|f  dd|f   t dd|f t dd|f     qS )r   N)r-   r?   rA   r@   ).0ir0   r/   r1   r2   
<listcomp>   s    (.z/test_multioutput_regression.<locals>.<listcomp>r   g      @r    gffffff@        FrQ   r)   r6   g      @)r-   arrayr   r   r   r   r   r   r   aroundr   r>   r   r   r
   rangeshapewhereisnanr   rD   naninf)errorscoreraw_expected_scoreycerror2r1   r_   r2   test_multioutput_regression   sx   

















rp   c                  C   s  t tdgdgd t tdgdgd t tdgdgd t tdgdgd t tdgdgd t tdgdgd t tdgdgd t tdgdgd t t	dgdgd t t
ddgddgd t tddgddgd t
t	fD ]9} t | ddgddgd t | ddgddgddtj  t | ddgddgd t | ddgddgddtj qvd}tjt|d	 td
gd
g W d    n1 sw   Y  d}tjt|d	 tg dg d W d    n1 sw   Y  d}tjt|d	 tg dg d W d    n	1 sw   Y  d}tjt|d	 tg dg d W d    n	1 s3w   Y  d}d}ttdgdg|ddd|  dd d}tjt|d	 tdgdg|d W d    n	1 slw   Y  tjt|d	 tdgd dgd |d W d    n	1 sw   Y  t tdgdgdddd d}d}tjt|d	 tdgdg|d W d    n	1 sw   Y  tjt|d	 tdgd dgd |d W d    n	1 sw   Y  d}ttdgdg|ddd|   d}tjt|d	 tdgdg|d W d    n	1 sw   Y  tjt|d	 tdgd dgd |d W d    n	1 sBw   Y  d}ttdgdg|dddd d}tjt|d	 tdgdg|d W d    n	1 suw   Y  tjt|d	 tdgd dgd |d W d    n	1 sw   Y  d}ttdgdg|dddd d}tjt|d	 tdgdg|d W d    n	1 sw   Y  tjt|d	 tdgd dgd |d W d    d S 1 sw   Y  d S )Nra   r    r   r   r6   Fr(   zcMean Squared Logarithmic Error cannot be used when targets contain values less than or equal to -1.match      )r           @      @)r    g       ru   zhRoot Mean Squared Logarithmic Error cannot be used when targets contain values less than or equal to -1.g333333r*   r'   gMbP?)rtolz-can only be used on strictly positive y_pred.z<only be used on non-negative y and strictly positive y_pred.r7   rt   g:0yE>atolz3can only be used on strictly positive y and y_pred.ru   )r   r   r   r   r   r   r   r   r   r   r   r
   r-   rj   ri   rR   raises
ValueErrorr   r   r   r   )smsgr+   r1   r1   r2   !test_regression_metrics_at_limits   s      $r}   c               	   C   sB  dg ddfddgdgdggdfdddgddgddggdfdddgddgddggdfdg d	g d
g dgdfg} t | ddD ]_\\}}}\}}}||kr||krt||d \}}}	}
||ksaJ |dkrxt|t|d t|	t|d q?t|| t|	| q?tt t||d  W d    n1 sw   Y  q?d S )N
continuousr   r'   r:   r   r'   r:   zcontinuous-multioutput   r;   )r   r:   r;   )r'   r'   r'   )r:   r   r   )repeat)r6   r   )r   r   r   r-   reshaperR   ry   rz   )EXAMPLEStype1y1n_out1type2y2n_out2y_typey_check1y_check2rQ   r1   r1   r2   test__check_reg_targetsA  s(    
r   c                  C   s^   d} d | }tjt|d tg ddgdgdgg|  W d    d S 1 s(w   Y  d S )Nthis_value_is_not_validzFAllowed 'multioutput' string values are.+You provided multioutput={!r}rq   r   r   r'   r:   )formatrR   ry   rz   r   )invalid_multioutputexpected_messager1   r1   r2   !test__check_reg_targets_exceptionZ  s   "r   c                  C   s  ddgddgddgddgg} ddgddgdd	gdd
gg}t | |dd}t| |dd}t| |dd}t| |dd}t| |dd}t| |dd}t| |ddd}t| |ddd}	t|ddgdd t|ddgdd t|ddgdd t|ddgdd t|ddgdd t|ddgdd t|ddgdd t|	ddgdd ddggd	 } ddggd	 }t | |dd}t| |dd}t| |dd}t| |dd}t| |dd}t|ddgdd t|ddgdd t|ddgdd t|ddgdd t|ddgdd tddgddggddgddggdd}t|dd gdd t	|tddgddggddgddggd!dks3J tddgddggddgddggdd}t|dd"gdd tddgddggddgddggddd}	t|	tj
 d"gdd ddgddgg} dd	gddgg}t| |dd}
t|
dd#gdd t	|
t| |d!dksJ t| |ddd}t|tjd#gdd tt	|t| |d!dd t| |dd}t|dd#gdd t	|t| |ksJ t| |ddd}t|dd$gdd t| |ddd}	t|	tjd#gdd tt	|	t| |dd% tddgddgdd&gg} tddgddgd'd'gg}t| |dd}t td|  td| dd}t||dd d S )(Nr   r'         @r6         @r:   r      r;         @rO   rP   r!   r\   Frb   g      ?g      ?rW         ?g      ?g      ?g	g?g2w-!?ffffff?g(\?g-?gv?r   r    ra   g      r[   g      g      rs   r(   r8   r9   )r   r   r   r   r   r   r
   r   r-   rD   rj   ri   r   rc   r   r=   )r/   r0   rT   maepblrG   revsd2psevs2r2r22mslemsle2r1   r1   r2   !test_regression_multioutput_arraye  s   &
r   c                  C   s  ddgddgddgddgg} ddgddgdd	gdd
gg}t | |ddgd}t| |ddgd}t| |ddgd}t| |ddgd}t| |ddgd}t| |ddgd}t| |dddgd}t| |ddgdd}	t|ddd t|ddd t|ddd t|ddd t|ddd t|ddd t|ddd t|	ddd t	ddgddgddgg} t	ddgddgddgg}t
| |ddgd}
t td|  td| ddgd}t|
|dd d S )Nr   r'   r   r6   r   r:   r   r   r;   r   r"   r%   rP   r!   r\   Frb   g(\?rW   gzG?gffffff?g|гY?gGz?gPn?r8   r9   g333333?gffffff?)r   r   r   r   r   r   r
   r   r-   rc   r   r=   )r/   r0   msewrmsewmaewmapewrwevswd2pswevsw2r   r   r1   r1   r2   test_regression_custom_weights  s6   r   metricc                 C   s\   dg}dg}d}t jt|d | ||}t|sJ W d    d S 1 s'w   Y  d S )Nr   r   z,not well-defined with less than two samples.rq   )rR   warnsr   r-   rh   )r   r/   r0   warning_msgrl   r1   r1   r2   test_regression_single_sample  s   
"r   c                  C   s   d} t jd| d }t jd| d }tt||ddt||dd tt||ddt||dddd	 tt||d
dt||dddd	 tt||ddt||dddd	 d S )Nr4   r   皙?r   g|۽r*   g8   ?gư>rw   g ?r'   go    @)r-   randomRandomStaterandr   r   )rE   r/   r0   r1   r1   r2    test_tweedie_deviance_continuity  s,   	
r   c                  C   s<   t jd} | jdd}d| }t||tdksJ d S )N*   r4   sizeg333333?r,   )r-   r   r   exponentialr   rR   rS   )random_number_generatorr/   r0   r1   r1   r2   #test_mean_absolute_percentage_error  s   r   distribution)normal	lognormalr   uniformtarget_quantile)皙?r!         ?c                    sV  t tds
td dtjd}t|| d t }tj|d}t	 |d}t t
dd	d
}|D ]@}tj|d}t	 |d}	|	|t|jj ksXJ |  |k    d	    |k |    }
|
 }
t|
|	 q; fdd}tj|  dd}|jsJ |jtj|ddksJ |jt|ksJ d S )NquantilezOThis test requires a more recent version of numpy with support for np.quantile.i  r   r   
fill_valuer#   r   r   r4   c                    s   t j| d}t |dS )Nr   r#   )r-   fullr   )xconstant_preddatarE   r   r1   r2   objective_funcE  s   zFtest_mean_pinball_loss_on_constant_predictions.<locals>.objective_funczNelder-Mead)methodg{Gz?)rel)hasattrr-   rR   skipr   r   getattrr   r   r   linspacefinfodtypeepsrA   r   r   minimizerD   successr   rS   fun)r   r   rng	best_predbest_constant_predbest_pblcandidate_predictionspredr   r   expected_pblr   resultr1   r   r2   .test_mean_pinball_loss_on_constant_predictions  s4   

r   c            	      C   s   d} t jd}|j| dfd}|j| d}g d}|D ])}tt|dd}tdd	d
}t|t	|d|d
||}|jd t|ksEJ qd S )Ni  r   r   r   )r   r   r   r!   r   g?r   F)r$   greater_is_betterr   r   )strategyr   )r   )
param_gridscoring)r-   r   r   r   r   r   r   r   r   dictfitbest_params_rR   rS   )	rE   r   Xyall_quantilesr$   neg_mean_pinball_loss	regressorgrid_searchr1   r1   r2   $test_dummy_quantile_parameter_tuningP  s*   r   c                  C   sR   t jd} d}| j|d}| | | }t||t||ddd ks'J d S )Ni  r4   r   r!   r#   r'   )r-   r   r   r   copyr   r   r   )r   rK   r/   r0   r1   r1   r2   #test_pinball_loss_relation_with_maek  s   r   )r   )9	itertoolsr   numpyr-   rR   numpy.testingr   scipyr   scipy.specialr   r   sklearn.dummyr   sklearn.exceptionsr   sklearn.metricsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sklearn.metrics._regressionr   sklearn.model_selectionr   sklearn.utils._testingr   r   r   rM   rV   rp   r}   r   r   r   r   markparametrizer   r   r   r   r   r   r1   r1   r1   r2   <module>   s>    H
ZWb^"
"2