a
    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 
|sJ |dksJ 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   a/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/metrics/tests/test_regression.py<lambda>M   s   z)test_regression_metrics.<locals>.<lambda>d   )qg?      ?            )r-   Zaranger   r   r   logr   r   r   r   isfiniter   r   r   r   r   absmediansumr   r	   Z
percentiler
   sqrtmeanr   r   )	n_samplesr/   r0   Zy_pred_2mapeZ
dev_medianr$   Zpinball_lossZ
y_quantilenZdev_meanr1   r1   r2   test_regression_metrics&   s    

 "  ,$rF   c                  C   sH   t dggdggdd} tdggdggdd}t| t|ksDJ d S )Nr   
   
raw_valuesmultioutput)r   r   r-   rA   pytestapprox)mseZrmser1   r1   r2   2test_root_mean_squared_error_multioutput_raw_value   s    rN   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 | sJ | dksJ 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?)Zdecimalsr&   r!   Zvariance_weightedrI   g      uniform_averageg      rH   r$   rJ   c                    sj   g | ]b}d t dd|f  dd|f   t dd|f t dd|f     qS )r   N)r-   r>   r@   r?   ).0ir0   r/   r1   r2   
<listcomp>   s   (.z/test_multioutput_regression.<locals>.<listcomp>r   g      @r    gffffff@        FrJ   r)   r6   g      @)r-   arrayr   r   r   r   r   r   r   aroundr   r=   r   r   r
   rangeshapewhereisnanr   rB   naninf)errorscoreZraw_expected_scoreZycZerror2r1   rU   r2   test_multioutput_regression   sx    

















rc   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 ]r} 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 qd}tjt|d	 td
gd
g W d    n1 s0    Y  d}tjt|d	" tg dg d W d    n1 s0    Y  d}tjt|d	" tg dg d W d    n1 s$0    Y  d}tjt|d	" tg dg d W d    n1 sj0    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 s0    Y  tjt|d	* tdgd dgd |d W d    n1 s&0    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 s0    Y  tjt|d	* tdgd dgd |d W d    n1 s0    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>0    Y  tjt|d	* tdgd dgd |d W d    n1 s0    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 s0    Y  tjt|d	* tdgd dgd |d W d    n1 s80    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 s0    Y  tjt|d	* tdgd dgd |d W d    n1 s0    Y  d S )NrW   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       rh   zhRoot Mean Squared Logarithmic Error cannot be used when targets contain values less than or equal to -1.g333333r*   r'   gMbP?)Zrtolz-can only be used on strictly positive y_pred.z<only be used on non-negative y and strictly positive y_pred.r7   rg   g:0yE>Zatolz3can only be used on strictly positive y and y_pred.rh   )r   r   r   r   r   r   r   r   r   r   r   r
   r-   r`   r_   rK   raises
ValueErrorr   r   r   r   )smsgr+   r1   r1   r2   !test_regression_metrics_at_limits   s      .2222:2: 2:2:2rn   c               	   C   sH  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r
t||d \}}}	}
||ksJ |dkrt|t|d t|	t|d nt|| t|	| q~tt t||d  W d    q~1 s80    Y  q~d S )NZ
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-   ZreshaperK   rj   rk   )ZEXAMPLESZtype1y1Zn_out1Ztype2y2Zn_out2Zy_typeZy_check1Zy_check2rJ   r1   r1   r2   test__check_reg_targetsA  s"     
rt   c                  C   s\   d} d | }tjt|d, tg ddgdgdgg|  W d    n1 sN0    Y  d S )NZthis_value_is_not_validzFAllowed 'multioutput' string values are.+You provided multioutput={!r}rd   ro   r   r'   r:   )formatrK   rj   rk   r   )Zinvalid_multioutputZexpected_messager1   r1   r2   !test__check_reg_targets_exceptionZ  s    rv   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sfJ 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s:J 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:   rp      r;         @rH   rI   r!   rR   FrX   g      ?g      ?rO         ?g      ?g      ?g	g?g2w-!?ffffff?g(\?g-?gv?r   r    rW   g      rQ   g      g      rf   r(   r8   r9   )r   r   r   r   r   r   r
   r   r-   rB   r`   r_   r   rY   r   r<   )r/   r0   rM   ZmaepblrD   rZevsZd2psZevs2r2Z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'   rw   r6   rx   r:   rp   ry   r;   rz   r"   r%   rI   r!   rR   FrX   g(\?rO   gzG?gffffff?g|гY?gGz?gPn?r8   r9   g333333?gffffff?)r   r   r   r   r   r   r
   r   r-   rY   r   r<   )r/   r0   ZmsewZrmsewZmaewZmapewrwZevswZd2pswZevsw2r   r   r1   r1   r2   test_regression_custom_weights  s6    r   metricc                 C   sZ   dg}dg}d}t jt|d( | ||}t|s8J W d    n1 sL0    Y  d S )Nr   r   z,not well-defined with less than two samples.rd   )rK   Zwarnsr   r-   r^   )r   r/   r0   Zwarning_msgrb   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ư>ri   g ?r'   go    @)r-   randomRandomStateZrandr   r   )rC   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s8J d S )N*   r4   sizeg333333?r,   )r-   r   r   exponentialr   rK   rL   )Zrandom_number_generatorr/   r0   r1   r1   r2   #test_mean_absolute_percentage_error  s    r   distribution)normalZ	lognormalr   uniformtarget_quantile)皙?r!         ?c                    s\  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sJ |  |k    d	    |k |    }
|
 }
t|
|	 qv fdd}tj|  dd}|js(J |jtj|ddksBJ |jt|ksXJ d S )NquantilezOThis test requires a more recent version of numpy with support for np.quantile.i  r   r   Z
fill_valuer#   r   r   r4   c                    s   t j| d}t |dS )Nr   r#   )r-   fullr   )xconstant_preddatarC   r   r1   r2   objective_funcE  s    zFtest_mean_pinball_loss_on_constant_predictions.<locals>.objective_funczNelder-Mead)methodg{Gz?)rel)hasattrr-   rK   skipr   r   getattrr   r   r   ZlinspaceZfinfoZdtypeepsr@   r   r   ZminimizerB   successr   rL   Zfun)r   r   rngZ	best_predZbest_constant_predZbest_pblZcandidate_predictionspredr   r}   Zexpected_pblr   resultr1   r   r2   .test_mean_pinball_loss_on_constant_predictions  s6    
r   c            	      C   s   d} t jd}|j| dfd}|j| d}g d}|D ]R}tt|dd}tdd	d
}t|t	|d|d
||}|jd t|ks8J q8d S )Ni  r   rp   r   )r   r   r{   r!   r   g?r|   F)r$   Zgreater_is_betterr   r{   )Zstrategyr   )r   )Z
param_gridZscoring)r-   r   r   r   r   r   r   r   r   dictfitZbest_params_rK   rL   )	rC   r   XyZall_quantilesr$   Zneg_mean_pinball_lossZ	regressorZ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sNJ d S )Ni  r4   r   r!   r#   r'   )r-   r   r   r   copyr   r   r   )r   rE   r/   r0   r1   r1   r2   #test_pinball_loss_relation_with_maek  s    r   )r   )9	itertoolsr   numpyr-   rK   Znumpy.testingr   Zscipyr   Zscipy.specialr   r   Zsklearn.dummyr   Zsklearn.exceptionsr   Zsklearn.metricsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsklearn.metrics._regressionr   Zsklearn.model_selectionr   Zsklearn.utils._testingr   r   r   rF   rN   rc   rn   rt   rv   r   r   markZparametrizer   r   r   r   r   r   r1   r1   r1   r2   <module>   s<   H
ZWb^"
"2