U
    ½mœd5,  ã                   @   sV  d dl 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mZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ ejdd„ ƒZejdd„ ƒZej dddg¡dd„ ƒZej dd¡ejjeedƒkdd�dd„ ƒƒZej ddd ddgdd ddgd d ddgdd!ddgdd"d#d gg¡d$d%„ ƒZej d&d'd(g¡d)d*„ ƒZ ej d+dd,d-g¡d.d/„ ƒZ!d0d1„ Z"ejjeedƒk d2d�ej d3d4dd5g¡d6d7„ ƒƒZ#ej d3d4dd5g¡d8d9„ ƒZ$ej %d:¡d;d<„ ƒZ&eejjeedƒkdd�ej d=ej'ej(ej)g¡ej dd>d?d@g¡ej d&d'd(g¡dAdB„ ƒƒƒƒƒZ*dCdD„ Z+dEdF„ Z,dS )Gé    N)Úapprox)Úminimize)Úsparse©Úmake_regression)ÚConvergenceWarning)ÚHuberRegressorÚQuantileRegressor)Úmean_pinball_loss)Úassert_allclose)Úskip_if_32bit)Úparse_versionÚ
sp_versionc                  C   s   t ddddd�\} }| |fS )Né
   é   r   ©Ú	n_samplesÚ
n_featuresÚrandom_stateÚnoiser   )ÚXÚy© r   úa/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/linear_model/tests/test_quantile.pyÚX_y_data   s    r   c                   C   s   t tdƒkrdS dS )Nú1.6.0Úhighsúinterior-point)r   r   r   r   r   r   Údefault_solver   s    r   Úsolverr   zrevised simplexc              	   C   sN   | \}}t  |¡}d|› d�}tjt|d�� t|d� ||¡ W 5 Q R X d S )NzSolver z; does not support sparse X. Use solver 'highs' for example.©Úmatch©r   )r   Ú
csc_matrixÚpytestÚraisesÚ
ValueErrorr	   Úfit)r   r   r   r   ÚX_sparseÚerr_msgr   r   r   Ú)test_incompatible_solver_for_sparse_input   s    

ÿr*   )úhighs-dsú	highs-ipmr   r   z'Solvers are available as of scipy 1.6.0)Úreasonc              	   C   s8   | \}}t jtdd�� t|d� ||¡ W 5 Q R X dS )z.Test that highs solver raises for scipy<1.6.0.zscipy>=1.6.0r    r"   N)r$   r%   r&   r	   r'   )r   r   r   r   r   r   r   Ú'test_too_new_solver_methods_raise_error*   s    r.   z quantile, alpha, intercept, coefç      à?r   gR¸…ëQà?r   g\�Âõ(\ß?ç{®Gáz„?éd   é   c                 C   sŒ   dgdgdgg}dddg}t | ||d� ||¡}t|j|dd� |d k	r\t|jd |dd� |dk rv|jd dksvt‚|jd d	ksˆt‚d S )
Nr   r   r2   é   ©ÚquantileÚalphar   r0   ©Zatolr1   r   )r	   r'   r   Ú
intercept_Úcoef_ÚAssertionError)r5   r6   Ú	interceptÚcoefr   r   r   Úmodelr   r   r   Útest_quantile_toy_example6   s     
  ÿ þr>   Úfit_interceptTFc                 C   sš   t ddddd�\}}d}td|| d� ||¡}t|| |d	� ||¡}t|j|jd
d� | r–|jt|jd
d�ksrt‚t	 
|| |¡k ¡tdd
d�ks–t‚d S )Nr1   é   r   ç      ð?r   ç-Cëâ6?gq¬‹Ûh ð?)Úepsilonr6   r?   ©r6   r?   r   gš™™™™™¹?r7   ©Úabsr/   )r   r   r'   r	   r   r9   r8   r   r:   ÚnpÚmeanÚpredict)r?   r   r   r   r6   ZhuberÚquantr   r   r   Ú*test_quantile_equals_huber_for_low_epsilonT   s,      ÿ þ  ÿ þrK   ÚqgÍÌÌÌÌÌì?gš™™™™™©?c                 C   sR   t ddddd�\}}t| d|d� ||¡}t || |¡k ¡t| dd�ksNt‚d S )	Néè  r@   r   rA   r   r4   r0   rE   )r   r	   r'   rG   rH   rI   r   r:   )rL   r   r   r   rJ   r   r   r   Ú#test_quantile_estimates_calibratione   s    ý ürN   c                 C   s    d}t |dddd�\}}t |¡}d||| ¡ k< tdd| d	�}|j|||d
� t || |¡k ¡}|dkspt‚tj|| |¡k |d�}|t	ddd�ksœt‚d S )NrM   é   r   g      $@r   r1   r/   g:Œ0âŽyE>r4   )Zsample_weight)Úweightsg¸…ëQ¸ž?rE   )
r   rG   ZonesrH   r	   r'   rI   r:   Zaverager   )r   Únr   r   ÚweightrJ   Zfraction_belowZweighted_fraction_belowr   r   r   Útest_quantile_sample_weightq   s    
rS   z<The `highs` solver is available from the 1.6.0 scipy versionr5   çš™™™™™É?gš™™™™™é?c           
         s´  d}t j d¡}t jt  | |¡dd…df ¡|jd|dfd� fdd�‰ d}t  d	d
g¡}t  ˆ | | ¡dksvt	‚|j
ˆ | |  t  dˆ ¡ |d�‰tˆd|d� ˆ ˆ¡}|jt|dd�ksÈt	‚t|j|dd� tt  | ˆ ¡ˆk¡ˆdd� d‰|jˆd� ˆ ˆ¡ t j|j|jf }‡ ‡‡‡fdd„}t|dddgddddid�}	||ƒt||	jƒƒk�sjt	‚t|j|	jd ƒ t|j|	jdd… ƒ tt  | ˆ ¡ˆk¡ˆdd� dS )z<Test quantile regression for asymmetric distributed targets.rM   é*   Nr2   r   )Úsize)Zaxisg®Gáz®ó?r/   éþÿÿÿr   ©ÚscalerV   r4   rT   ©Úrelg333333ã?©Zrtolr0   r7   ©r6   c                    sF   t ˆˆ | dd …  | d  ˆd�}t t | dd … ¡¡}|ˆ|  S )Nr   r   r]   )r
   rG   ÚsumrF   )r<   ZlossZL1©r   r6   r5   r   r   r   Úfunc®   s    "z#test_asymmetric_error.<locals>.funcéÿÿÿÿzNelder-Meadgê-�™—q=ÚmaxiteriÐ  )ZfunZx0ÚmethodZtolÚoptions)rG   ÚrandomÚRandomStateZconcatenaterF   ÚrandnÚrandintÚarrayÚminr:   ÚexponentialÚlogr	   r'   r8   r   r   r9   rH   rI   Z
set_paramsZr_r   Úx)
r5   r   r   Úrngr;   r<   r=   Z
model_coefr`   Úresr   r_   r   Útest_asymmetric_error�   sR    þû ÿý ü	ûrp   c                 C   sê  t j d¡}d\}}t|||d|dd�\}}||jd|jd�7 }td|d�}tf d	| i|—Ž ||¡}d
}	tf d	| i|—Ž ||	| ¡}
|
j	t
|	|j	 dd�ks¤t‚t|
j|	|j dd� tf d	d|  i|—Ž ||	 | ¡}
|
j	t
|	 |j	 dd�ksüt‚t|
j|	 |j dd� | ¡ | |¡ }}tf d	| i|—Ž}
|
 ||||  | ¡ |
j	t
|j	| ƒk�slt‚t|
j|j| dd� | ||¡}tf d	| i|—Ž}
|
 || |¡ |
j	t
|j	dd�k�sÊt‚t|
jt j ||j¡dd� dS )ziTest equivariace of quantile regression.

    See Koenker (2005) Quantile Regression, Chapter 2.2.3.
    rU   )r1   rO   r   F)r   r   Zn_informativer   r   Úshuffler1   rX   )r6   r   r5   g      @gñhãˆµøä>rZ   r\   r   g�íµ ÷Æ°>N)rG   re   rf   r   rk   ÚshapeÚdictr	   r'   r8   r   r:   r   r9   rg   ZlinalgZsolve)r5   r   rn   r   r   r   r   ÚparamsZmodel1ÚaZmodel2Zg_interceptZg_coefÚAr   r   r   Útest_equivarianceÁ   s<    ú
	$rw   z.ignore:`method='interior-point'` is deprecatedc               	   C   sh   t jdddd� dd¡} t jdddd�}tddddid�}d	}tjt|d
�� | | |¡ W 5 Q R X dS )zTest that linprog fails.r   r   )Únumra   r   r   rb   )r6   r   Zsolver_optionsz9Linear programming for QuantileRegressor did not succeed.r    N)rG   ZlinspaceZreshaper	   r$   Úwarnsr   r'   )r   r   ÚregÚmsgr   r   r   Útest_linprog_failureð   s      ÿr|   Úsparse_formatr   r+   r,   c           
      C   s¤   t ddddd�\}}| |ƒ}d}t|||d� ||¡}t|||d� ||¡}	t|	j|jdd	� |r |	jt|jƒksvt‚d
t 	||	 
|¡k ¡  kršdks n t‚dS )z/Test that sparse and dense X give same results.r1   r@   r   rA   r   rB   rD   r0   r\   gÍÌÌÌÌÌÜ?gš™™™™™á?N)r   r	   r'   r   r9   r8   r   r:   rG   rH   rI   )
r}   r   r?   r   r   r   r(   r6   Zquant_denseZquant_sparser   r   r   Útest_sparse_inputþ   s.      ÿ þ  ÿ þr~   c              	   C   s8   | \}}t ƒ }tjtdd�� | ||¡ W 5 Q R X dS )z0Check that we warn about the new default solver.zThe default solver will changer    N)r	   r$   ry   ÚFutureWarningr'   )r   r   r   r=   r   r   r   Útest_warning_new_default  s    r€   c              
   C   sn   | \}}ddl }| ¡ �L}| |jjdtdƒ¡ d}tjt|d�� t	dd� 
||¡ W 5 Q R X W 5 Q R X dS )	zlCheck that we will raise a proper error when requesting
    `solver='interior-point'` in SciPy >= 1.11.
    r   Nr   z1.11.0zBSolver interior-point is not anymore available in SciPy >= 1.11.0.r    r   r"   )Zsklearn.linear_model._quantileÚcontextÚsetattrZlinear_modelZ	_quantiler   r$   r%   r&   r	   r'   )r   Zmonkeypatchr   r   ZsklearnÚmr)   r   r   r   Ú test_error_interior_point_future#  s    
r„   )-ÚnumpyrG   r$   r   Zscipy.optimizer   Zscipyr   Zsklearn.datasetsr   Zsklearn.exceptionsr   Zsklearn.linear_modelr   r	   Zsklearn.metricsr
   Zsklearn.utils._testingr   r   Zsklearn.utils.fixesr   r   Zfixturer   r   ÚmarkZparametrizer*   Zskipifr.   r>   rK   rN   rS   rp   rw   Úfilterwarningsr|   r#   Z
csr_matrixZ
coo_matrixr~   r€   r„   r   r   r   r   Ú<module>   s|   




þ




öþ



þ;
.


þ ÿ