U
    ½mœd´e  ã                   @   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& dBd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/ 0d3d4d5d6d7g¡ej/ 0d8d9d:d;g¡d<d=„ ƒƒZ4d>d?„ Z5d@dA„ Z6dS )Cé    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)ÚUndefinedMetricWarningé2   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  
|¡sÔt‚|dksàt‚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é   ç      ð?ç      à?çš™™™™™Ù?©Úalphaç333333ã?ç    €„.Ag×£p=
×ï?é   F©Úforce_finiter   ©Úpowerçš™™™™™É?c                 S   s,   |t  | | d¡ d| t  ||  d¡  S )Nr   r   )ÚnpÚmaximum)Úy_trueÚy_predr"   © r/   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/metrics/tests/test_regression.pyÚ<lambda>I   s
    ÿþz)test_regression_metrics.<locals>.<lambda>éd   )Úqéÿÿÿÿg«ªªªªªÚ?ç      ø?é   é   é   é   )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  	| ¡sât
‚| dksît
‚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   Ú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/   rW   r0   Útest_multioutput_regression„   sŒ    ((










ü


   ÿ   ÿ

   ÿ   ÿrd   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ƒ qðd	}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}tjtdd
�� tdgdg|d� W 5 Q R X tjtdd
��  tdgd dgd |d� W 5 Q R X d S )NrY   FrN   r   r   r   r4   r&   zSMean Squared Logarithmic Error cannot be used when targets contain negative values.©Úmatchç      ð¿g       @g      @g       Àg333333ó¿r(   r%   gü©ñÒMbP?)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:Œ0âŽyE>©Zatolz3can only be used on strictly positive y and y_pred.r   z)is only defined for power<=0 and power>=1)r   r   r   r   r   r   r   r   r   r   r   r+   ra   r`   rK   ÚraisesÚ
ValueErrorr   r   r   )ÚsÚmsgr)   r/   r/   r0   Ú!test_regression_metrics_at_limitsØ   s�      ÿÿ ÿ  
 ÿ$$ $$$rm   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sÎt‚|dkrüt|t |d	¡ƒ t|	t |d	¡ƒ nt||ƒ t|	|ƒ q†t t¡� t||d ƒ W 5 Q R X q†d S )
NZ
continuousr   r%   r8   zcontinuous-multioutputé   r9   )Úrepeat)r4   r   )	r   r   r<   r   r+   ZreshaperK   ri   rj   )ZEXAMPLESZtype1Úy1Zn_out1Ztype2Úy2Zn_out2Zy_typeZy_check1Zy_check2rI   r/   r/   r0   Útest__check_reg_targets6  s"     û 
rr   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}re   r   r%   r8   )ÚformatrK   ri   rj   r   )Zinvalid_multioutputZexpected_messager/   r/   r0   Ú!test__check_reg_targets_exceptionP  s    ÿÿrt   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 5 Q R X tjt|d�� t| |dd� W 5 Q R X 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�sºt‚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�st‚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   rn   é   r9   ç      @rG   rR   zgmultioutput is expected to be 'raw_values' or 'uniform_average' but we got 'variance_weighted' instead.re   rQ   r   rT   FrZ   g      À?g      â?rO   ç      Ð?g      ä?g      Ô?g	ù g³ê³?g2w-!ôÌ?çffffffî?gÃõ(\�Âí?g-²�ï§ê?g´Èv¾Ÿç?r   r   rY   g      ÀrS   g      ô¿g      Àrg   r&   r6   r7   )r   r   rK   ri   rj   r   r   r   r   r   r	   r+   rA   r<   ra   r`   r   r[   r   r:   )r-   r.   ZmseZmaeÚerr_msgÚpblrC   ÚrZevsZd2psZevs2Úr2Z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%   ru   r4   rv   r8   rn   rw   r9   rx   r    r#   rR   FrH   r   rT   rZ   gö(\�ÂõØ?rO   gáz®Gáâ?gffffffÞ?g¶„|Ð³YÅ?g®Gázî?gP�—nƒè?r6   r7   g333333Ó?gffffffæ?)r   r   r   r   r   r   r   r+   r[   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.re   )rK   Zwarnsr   r+   r_   r<   )r„   r-   r.   Zwarning_msgrc   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�íµ ÷Æ°>rh   gÈ ùÿÿÿÿ?r%   gœo    @)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s°t‚|ˆ ˆ |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_funcD  s    zFtest_mean_pinball_loss_on_constant_predictions.<locals>.objective_funczNelder-Mead)Úmethodg{®Gáz„?)Ú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™   r|   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   rn   r‹   r“   r†   ry   r   r”   gÍÌÌÌÌÌì?rz   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_tuningO  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_maej  s    ÿÿr­   )r   )7Únumpyr+   Zscipyr   Znumpy.testingr   Zscipy.specialr   r   Ú	itertoolsr   rK   Zsklearn.utils._testingr   r   r	   Zsklearn.dummyr
   Zsklearn.model_selectionr   Zsklearn.metricsr   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsklearn.metrics._regressionr   Zsklearn.exceptionsr   rE   rM   rd   rm   rr   rt   r�   rƒ   ÚmarkZparametrizer…   r‰   rŽ   r¦   r«   r­   r/   r/   r/   r0   Ú<module>   s\   
ZT^g"
" 
ÿ2