U
    -ea                     @   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 d d	lm Z  d d
l!m"Z" d dl#m$Z$m%Z%m&Z& d3d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 d! Z2d"d# Z3ej/0d$d%d&d'd(gej/0d)d*d+d,gd-d. Z4d/d0 Z5d1d2 Z6dS )4    )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)_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 
|st|dkst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/   f/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sklearn/metrics/tests/test_regression.py<lambda>K   s
    z)test_regression_metrics.<locals>.<lambda>d   )qg?      ?            )r+   Zaranger   r   r   logr   r   r   r   isfiniteAssertionErrorr   r   r   r   r   absmediansumr   r	   Z
percentiler
   sqrtmeanr   r   )	n_samplesr-   r.   Zy_pred_2mapeZ
dev_medianr"   Zpinball_lossZ
y_quantilenZdev_meanr/   r/   r0   test_regression_metrics$   s    

    "  , rE   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sHtd S )Nr   
   
raw_valuesTmultioutputsquaredF)r   r+   r@   pytestapproxr<   )Zmse1Zmse2r/   r/   r0   5test_mean_squared_error_multioutput_raw_value_squared~   s    rM   c                     s  t ddddgddddgddddggt ddddgddddgddddg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 	| st
| dkst
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 )Nr   r   g?FrJ   guV?r%   decimalr*   g?)Zdecimalsr$   r   Zvariance_weightedrI   g      uniform_averageg      rG   r"   rI   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r.   r-   r/   r0   
<listcomp>   s   (.z/test_multioutput_regression.<locals>.<listcomp>g      @r   gffffff@        rI   r'   r4   g      @)r+   arrayr   r   r   r   r   Zaroundr   r;   r<   r   r   r
   rangeshapewhereisnanr   rA   naninf)errorscoreZraw_expected_scoreZycZerror2r/   rV   r0   test_multioutput_regression   s    ((













      

      rc   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 ]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 5 Q R X d	}tjt|d
 tdddgdddg W 5 Q R X d	}tjt|d
 tdddgdddg W 5 Q R X d}ttdgdg|ddd|  dd d}tjt|d
 tdgdg|d W 5 Q R X tjt|d
  tdgd dgd |d W 5 Q R X t tdgdgdddd d}d}tjt|d
 tdgdg|d W 5 Q R X tjt|d
  tdgd dgd |d W 5 Q R X d}ttdgdg|ddd|   d}tjt|d
 tdgdg|d W 5 Q R X tjt|d
  tdgd dgd |d W 5 Q R X d}ttdgdg|dddd d}tjt|d
 tdgdg|d W 5 Q R X tjt|d
  tdgd dgd |d W 5 Q R X d}ttdgdg|dddd d}tjt|d
 tdgdg|d W 5 Q R X tjt|d
  tdgd dgd |d W 5 Q R X d S )NrX   FrN   r   r   r   r4   r&   zSMean Squared Logarithmic Error cannot be used when targets contain negative values.match      g       @g      @g       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.r5   g:0yE>Zatolz3can only be used on strictly positive y and y_pred.)r   r   r   r   r   r   r   r   r   r   r
   r+   r`   r_   rK   raises
ValueErrorr   r   r   )smsgr)   r/   r/   r0   !test_regression_metrics_at_limits   s         
 $$ $$rl   c               
   C   s:  ddddg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dddgdddgdddggdfg} t | ddD ]\\}}}\}}}||kr||krt||d \}}}	}
||kst|dkrt|t|d	 t|	t|d	 nt|| t|	| qtt t||d  W 5 Q R X qd S )
NZ
continuousr   r%   r8   zcontinuous-multioutput   r9   )repeat)r4   r   )	r   r   r<   r   r+   ZreshaperK   rh   ri   )ZEXAMPLESZtype1y1Zn_out1Ztype2y2Zn_out2Zy_typeZy_check1Zy_check2rI   r/   r/   r0   test__check_reg_targets2  s"      
rq   c               	   C   sJ   d} d | }tjt|d$ tdddgdgdgdgg|  W 5 Q R X d S )NZthis_value_is_not_validzFAllowed 'multioutput' string values are.+You provided multioutput={!r}rd   r   r%   r8   )formatrK   rh   ri   r   )Zinvalid_multioutputZexpected_messager/   r/   r0   !test__check_reg_targets_exceptionK  s    rs   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sft
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:t
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st
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   rm      r9         @rG   rQ   r   rS   FrY   g      ?g      ?rO         ?g      ?g      ?g	g?g2w-!?ffffff?g(\?g-?gv?r   r   rX   g      rR   g      g      rf   r&   r6   r7   )r   r   r   r   r   r   r
   r   r+   rA   r<   r`   r_   r   rZ   r   r:   )r-   r.   ZmseZmaepblrC   rZevsZd2psZevs2r2Zr22mslemsle2r/   r/   r0   !test_regression_multioutput_arrayV  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%   rt   r4   ru   r8   rm   rv   r9   rw   r    r#   rQ   FrH   r   rS   rY   g(\?rO   gzG?gffffff?g|гY?gGz?gPn?r6   r7   g333333?gffffff?)r   r   r   r   r   r
   r   r+   rZ   r   r:   )r-   r.   ZmsewZrmsewZmaewZmapewrwZevswZd2pswZevsw2r}   r~   r/   r/   r0   test_regression_custom_weights  s@         r   metricc              	   C   sF   dg}dg}d}t jt|d | ||}t|s8tW 5 Q R X d S )Nr   r   z,not well-defined with less than two samples.rd   )rK   Zwarnsr   r+   r^   r<   )r   r-   r.   Zwarning_msgrb   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ư>rg   g ?r%   go    @)r+   randomRandomStateZrandr   r   )rB   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s8td S )N*   r2   sizeg333333?r*   )r+   r   r   exponentialr   rK   rL   r<   )Zrandom_number_generatorr-   r.   r/   r/   r0   #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st|  |k    d	    |k |    }
|
 }
t|
|	 qv fdd}tj|  dd}|js(t|jtj|ddksBt|jt|ksXt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   r2   c                    s   t j| d}t |dS )Nr   r!   )r+   fullr   )xconstant_preddatarB   r   r/   r0   objective_func6  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dtypeZepsr<   r?   r   r   ZminimizerA   successr   rL   Zfun)r   r   rngZ	best_predZbest_constant_predZbest_pblZcandidate_predictionspredr   rz   Zexpected_pblr   resultr/   r   r0   .test_mean_pinball_loss_on_constant_predictions  s6    
r   c            	      C   s   d} t jd}|j| dfd}|j| d}ddddd	d
dg}|D ]R}tt|dd}tddd}t|t	|d|d
||}|jd t|ksBtqBd S )Ni  r   rm   r   r   r   rx   r   r   g?ry   F)r"   Zgreater_is_betterr   )Zstrategyr   )r   )Z
param_gridZscoring)r+   r   r   r   r   r   r   r   r   dictfitZbest_params_rK   rL   r<   )	rB   r   XyZall_quantilesr"   Zneg_mean_pinball_lossZ	regressorZgrid_searchr/   r/   r0   $test_dummy_quantile_parameter_tuningA  s*     r   c                  C   sR   t jd} d}| j|d}| | | }t||t||ddd ksNtd S )Ni  r2   r   r   r!   r%   )	r+   r   r   r   copyr   r   r   r<   )r   rD   r-   r.   r/   r/   r0   #test_pinball_loss_relation_with_mae\  s    r   )r   )7	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   Zsklearn.metrics._regressionr   Zsklearn.model_selectionr   Zsklearn.utils._testingr   r   r   rE   rM   rc   rl   rq   rs   r   r   markZparametrizer   r   r   r   r   r   r/   r/   r/   r0   <module>   s>   @
ZTX^"
" 
2