U
    _»{jð-  ã                   @   s¨  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mZ d d
lmZmZ ejdd„ ƒZejdd„ ƒZejjeejƒedƒkdd�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/d0„ ƒZ"d1d2„ Z#ejjeedƒk d3d�ej d4d5dd6g¡d7d8„ ƒƒZ$ej d4d5dd6g¡d9d:„ ƒZ%ejjeejƒedƒkdd�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@dAg¡ej d'd(d)g¡dBdC„ ƒƒƒƒƒZ+ejjeejƒedƒkdd�dDdE„ ƒZ,dFdG„ Z-dS )Hé    N)Úapprox)Úsparse)Úminimize©Ú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   úg/var/www/html/bwave/python/venv/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   z1.11z4interior-point solver is not available in SciPy 1.11)ÚreasonÚ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.0c              	   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_example9   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_epsilonW   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_calibrationh   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_weightt   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=
×£p=â?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scipyr   Zscipy.optimizer   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skipifÚbase_versionZparametrizer+   r.   r>   rK   rN   rS   rp   rw   Úfilterwarningsr|   r$   Z
csr_matrixZ
coo_matrixr~   r€   r„   r   r   r   r   Ú<module>   s’   

þ

þ




öþ



þ;
.þ

þ ÿþ
