o
    iDe                     @   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   t/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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s"J 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 | 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?)Zdecimalsr&   r!   Zvariance_weightedrI   g      uniform_averageg      rH   r$   rJ   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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   Z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   

















rb   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 )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       rg   zhRoot Mean Squared Logarithmic Error cannot be used when targets contain values less than or equal to -1.g333333r*   r'   MbP?rtolz-can only be used on strictly positive y_pred.z<only be used on non-negative y and strictly positive y_pred.r7   rf   g:0yE>)atolz3can only be used on strictly positive y and y_pred.rg   )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      $rp   c               	   C   sL  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 ]d\\}}}\}}}||kr||krt||d d d\}}}	}
}
||ksdJ |dkr{t|t|d t|	t|d q?t|| t|	| q?tt t||d d d W d    n1 sw   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)Zsample_weightrJ   )r6   r   )r   r   r   r-   ZreshaperK   rl   rm   )ZEXAMPLESZtype1y1Zn_out1Ztype2y2Zn_out2Zy_typeZy_check1Zy_check2_r1   r1   r2   test__check_reg_targetsA  s,    
rw   c                  C   s`   d} d | }tjt|d tg ddgdgdggd |  W d    d S 1 s)w   Y  d S )NZthis_value_is_not_validzFAllowed 'multioutput' string values are.+You provided multioutput={!r}rc   rq   r   r'   r:   )formatrK   rl   rm   r   )Zinvalid_multioutputZexpected_messager1   r1   r2   !test__check_reg_targets_exception\  s    "ry   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:   rr      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      re   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_arrayg  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'   rz   r6   r{   r:   rr   r|   r;   r}   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   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.rc   )rK   Zwarnsr   r-   r]   )r   r/   r0   Zwarning_msgra   r1   r1   r2   test_regression_single_sample  s   
"r   c                 C   s   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   皙?g|۽r*   r   g8   ?r   gh㈵>ri   g ?r'   go    @)r-   randomRandomStateZrandr   r   )global_random_seedrC   rngr/   r0   r1   r1   r2    test_tweedie_deviance_continuity  s.   	
r   c                 C   s<   t j| }|jdd}d| }t||tdksJ d S )Nr4   sizeg333333?r,   )r-   r   r   exponentialr   rK   rL   )r   Zrandom_number_generatorr/   r0   r1   r1   r2   #test_mean_absolute_percentage_error  s   r   distribution)normalZ	lognormalr   uniformtarget_quantile)皙?r!         ?c                    sL  t tds
td dtj|}t|| d t }tj|d}t	 |d}t t
ddd	}|D ]@}tj|d}	t	 |	d}
|
|ttjj ksXJ |  |k    d    |k |    }| }t||
 q; fd
d}t|  }|jsJ t|j|ddd |jt|ksJ d S )NquantilezOThis test requires a more recent version of numpy with support for np.quantile.i  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_funcK  s   zFtest_mean_pinball_loss_on_constant_predictions.<locals>.objective_funcr   rh   )rj   rk   )hasattrr-   rK   skipr   r   getattrr   r   r   ZlinspaceZfinfoZfloat64Zepsr@   r   r   ZminimizerB   successr   r   ZfunrL   )r   r   r   r   Z	best_predZbest_constant_predZbest_pblZcandidate_predictionspredr   r   Zexpected_pblr   resultr1   r   r2   .test_mean_pinball_loss_on_constant_predictions  s4   

r   c           
      C   s   d}t j| }|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  rr   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   )
r   rC   r   XyZall_quantilesr$   Zneg_mean_pinball_lossZ	regressorZgrid_searchr1   r1   r2   $test_dummy_quantile_parameter_tuningX  s*   r   c                 C   sR   t j| }d}|j|d}| || }t||t||ddd ks'J d S )Nr4   r   r!   r#   r'   )r-   r   r   r   copyr   r   r   )r   r   rE   r/   r0   r1   r1   r2   #test_pinball_loss_relation_with_maes  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   rb   rp   rw   ry   r   r   markZparametrizer   r   r   r   r   r   r1   r1   r1   r2   <module>   s>    H
ZWb^"
$6