o
    tBh?d                     @   s  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Zd dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d dl#m$Z$ d dl%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+ Z.ej/0d,eee gd-d. Z1d/d0 Z2d1d2 Z3ej/0d3g d4ej/0d5g d6d7d8 Z4d9d: Z5dS )<    N)optimize)assert_allclose)	factorialxlogy)product)assert_almost_equal)assert_array_equal)assert_array_almost_equal)DummyRegressor)GridSearchCV)explained_variance_score)mean_absolute_error)mean_squared_error)mean_squared_log_error)median_absolute_error)mean_absolute_percentage_error)	max_error)mean_pinball_loss)r2_score)mean_tweedie_deviance)d2_tweedie_score)d2_pinball_score)d2_absolute_error_score)make_scorer)_check_reg_targets)UndefinedMetricWarning2   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"    r/   |/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/metrics/tests/test_regression.py<lambda>I   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-   r.   y_pred_2mape
dev_medianr"   pinball_loss
y_quantilendev_meanr/   r/   r0   test_regression_metrics"   s   

 "  ,$rK   c                  C   sL   t dggdggddd} t dggdggddd}t| t|ks$J d S )Nr   
   
raw_valuesTmultioutputsquaredF)r   r+   rA   pytestapprox)mse1mse2r/   r/   r0   5test_mean_squared_error_multioutput_raw_value_squared|   s   rU   c                     s  t g dg dg dgt g dg dg dg t } t| d t dd} t| d	d
d t } t| dd
d t } t| d t } t| d t jt d
d} t 	| seJ | dkskJ 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?FrP   guV?r%   decimalr*   g?)decimalsr$   r   variance_weightedrO   g      uniform_averageg      rM   r"   rO   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=   r?   r>   ).0ir.   r-   r/   r0   
<listcomp>   s    (.z/test_multioutput_regression.<locals>.<listcomp>r   g      @r   gffffff@        rO   r'   r4   g      @)r+   arrayr   r   r   r   r   aroundr   r<   r   r   r   rangeshapewhereisnanr	   rB   naninf)errorscoreraw_expected_scoreycerror2r/   r`   r0   test_multioutput_regression   st   















rq   c                  C   s>  t tdgdgd t tdgdgdd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 qxd	}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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 sIw   Y  tjt|d
 tdgd dgd |d W d    n	1 snw   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 sw   Y  tjt|d
 tdgd dgd |d W d    n	1 sw   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 sRw   Y  tjt|d
 tdgd dgd |d W d    n	1 sww   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    n	1 sw   Y  d}tjtdd
 tdgdg|d W d    n	1 sw   Y  tjtdd
 tdgd dgd |d W d    d S 1 sw   Y  d S )Nrb   FrV   r   r   r   r4   r&   zSMean Squared Logarithmic Error cannot be used when targets contain negative values.match      )r          @      @)r   g       rv   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.r5   ru   g:0yE>atolz3can only be used on strictly positive y and y_pred.rv   r   z)is only defined for power<=0 and power>=1)r   r   r   r   r   r   r   r   r   r   r   r+   rk   rj   rQ   raises
ValueErrorr   r   r   )smsgr)   r/   r/   r0   !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%   r8   r   r%   r8   zcontinuous-multioutput   r9   )r   r8   r9   )r%   r%   r%   )r8   r   r   )repeat)r4   r   )r   r   r   r+   reshaperQ   rz   r{   )EXAMPLEStype1y1n_out1type2y2n_out2y_typey_check1y_check2rO   r/   r/   r0   test__check_reg_targets6  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}rr   r   r   r%   r8   )formatrQ   rz   r{   r   )invalid_multioutputexpected_messager/   r/   r0   !test__check_reg_targets_exceptionP  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}d}tjt|d t| |dd W d    n1 sEw   Y  tjt|d t| |dd W d    n1 scw   Y  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sqJ 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sJ 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%         @r4         @r8   r      r9         @rM   r[   zgmultioutput is expected to be 'raw_values' or 'uniform_average' but we got 'variance_weighted' instead.rr   rZ   r   r]   Frc   g      ?g      ?rW         ?g      ?g      ?g	g?g2w-!?ffffff?g(\?g-?gv?r   r   rb   g      r\   g      g      rt   r&   r6   r7   )r   r   rQ   rz   r{   r   r   r   r   r   r	   r+   rB   rk   rj   r   rd   r   r;   )r-   r.   msemaeerr_msgpblrE   revsd2psevs2r2r22mslemsle2r/   r/   r0   !test_regression_multioutput_array[  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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   r4   r   r8   r   r   r9   r   r    r#   r[   FrN   r   r]   rc   g(\?rW   gzG?gffffff?g|гY?gGz?gPn?r6   r7   g333333?gffffff?)r   r   r   r   r   r   r   r+   rd   r   r;   )r-   r.   msewrmsewmaewmapewrwevswd2pswevsw2r   r   r/   r/   r0   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.rr   )rQ   warnsr   r+   ri   )r   r-   r.   warning_msgrm   r/   r/   r0   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 )Nr2   r   皙?r   g|۽r(   g8   ?gư>rx   g ?r%   go    @)r+   randomRandomStaterandr   r   )rC   r-   r.   r/   r/   r0    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*   r2   sizeg333333?r*   )r+   r   r   exponentialr   rQ   rR   )random_number_generatorr-   r.   r/   r/   r0   #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   r2   c                    s   t j| d}t |dS )Nr   r!   )r+   fullr   )xconstant_preddatarC   r   r/   r0   objective_funcD  s   zFtest_mean_pinball_loss_on_constant_predictions.<locals>.objective_funczNelder-Mead)methodg{Gz?)rel)hasattrr+   rQ   skipr   r   getattrr   r   r   linspacefinfodtypeepsr?   r   r   minimizerB   successr   rR   fun)r   r   rng	best_predbest_constant_predbest_pblcandidate_predictionspredr   r   expected_pblr   resultr/   r   r0   .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_rQ   rR   )	rC   r   Xyall_quantilesr"   neg_mean_pinball_loss	regressorgrid_searchr/   r/   r0   $test_dummy_quantile_parameter_tuningO  s*   r   )r   )6numpyr+   scipyr   numpy.testingr   scipy.specialr   r   	itertoolsr   rQ   sklearn.utils._testingr   r   r	   sklearn.dummyr
   sklearn.model_selectionr   sklearn.metricsr   r   r   r   r   r   r   r   r   r   r   r   r   r   sklearn.metrics._regressionr   sklearn.exceptionsr   rK   rU   rq   r~   r   r   r   r   markparametrizer   r   r   r   r   r/   r/   r/   r0   <module>   sZ    
ZT^g"
"2