a
    h)                  	   @   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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 ejd
d Zejjeejedkddejdddgejdedd Zejdg dg dg dg dg dgdd Zejdddgd d! Zejd"g d#d$d% Z d&d' Z!ejd(g d)d*d+ Z"ejd(g d)d,d- Z#ejjeejedkddej$d.d/d0 Z%ejd1ee e ejdg d2ejdddgd3d4 Z&d5d6 Z'dS )7    N)approx)minimizemake_regression)ConvergenceWarning)HuberRegressorQuantileRegressor)mean_pinball_loss)assert_allclose)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERS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   d/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/linear_model/tests/test_quantile.pyX_y_data   s    r   z1.11z4interior-point solver is not available in SciPy 1.11)reasonsolverinterior-pointzrevised simplexcsc_containerc                 C   s`   | \}}||}d| d}t jt|d" t|d|| W d    n1 sR0    Y  d S )NzSolver z; does not support sparse X. Use solver 'highs' for example.matchr   )pytestraises
ValueErrorr   fit)r   r   r   r   r   X_sparseerr_msgr   r   r   )test_incompatible_solver_for_sparse_input   s    
r)   z quantile, alpha, intercept, coef)      ?r   r   N)gRQ?r   r   r   )g\(\?r   r   r   )r*   {Gz?r   r   )r*   d      r   c                 C   s   dgdgdgg}g d}t | |d||}t|j|dd |d urXt|jd |dd |dk rr|jd dksrJ |jd dksJ d S )	Nr   r   )r   r-      quantilealphar+   Zatolr,   r   )r   r&   r
   
intercept_coef_)r0   r1   	interceptcoefr   r   modelr   r   r   test_quantile_toy_example-   s    r8   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spJ t	||
|k tdd
dksJ d S )Nr,      r         ?r   g-C6?gqh ?)epsilonr1   r9   )r1   r9   皙?r2   absr*   )r   r   r&   r   r
   r4   r3   r   npmeanpredict)r9   r   r   r1   Zhuberquantr   r   r   *test_quantile_equals_huber_for_low_epsilonI   s    rD   q)r*   g?g?c                 C   sP   t ddddd\}}t| dd||}t|||k t| ddksLJ d S )	N  r:   r   r;   r   r/   r+   r>   )r   r   r&   r@   rA   rB   r   )rE   r   r   rC   r   r   r   #test_quantile_estimates_calibrationX   s    rG   c                  C   s   d} t | dddd\}}t| }d||| k< tddd	}|j|||d
 t|||k }|dksnJ tj|||k |d}|tdddksJ d S )NrF      r   g      $@r   r,   r*   g:0yE>r/   )Zsample_weight)weightsQ?r>   )	r   r@   ZonesrA   r   r&   rB   Zaverager   )nr   r   weightrC   Zfraction_belowZweighted_fraction_belowr   r   r   test_quantile_sample_weight`   s    
rM   r0   )皙?r*   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svJ |j	 | |  t 
d  |dtdd }|jt|ddksJ t|j|dd tt | kdd d|jd  t j|j|jf } fdd}t|g dddddid}||t||jksfJ t|j|jd  t|j|jdd  tt | kdd dS )z<Test quantile regression for asymmetric distributed targets.rF   *   Nr-   r   )size)ZaxisgGz?r*   r   scalerP   r/   rN   rel333333?Zrtolr+   r2   r1   c                    sF   t  | dd   | d  d}tt| dd  }||  S )Nr   r   rX   )r	   r@   sumr?   )r6   ZlossZL1r   r1   r0   r   r   r   func   s    "z#test_asymmetric_error.<locals>.func)r   r   zNelder-Meadg-q=maxiteri  )ZfunZx0methodZtoloptions)r@   randomRandomStateZconcatenater?   randnrandintarrayminexponentiallogr   r&   r3   r   r
   r4   rA   rB   Z
set_paramsZr_r   x)	r0   r   rngr5   r6   r7   Z
model_coefr[   resr   rZ   r   test_asymmetric_errorp   sL    rk   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sJ t|	j||j dd tf d	d|  i||| | }	|	j	t
| |j	 ddksJ t|	j| |j dd | || }
}tf d	| i|}	|	||||  |
  |	j	t
|j	|
 ksjJ t|	j|j| dd |||}tf d	| i|}	|	|| | |	j	t
|j	ddksJ t|	jt j||jdd dS )ziTest equivariace of quantile regression.

    See Koenker (2005) Quantile Regression, Chapter 2.2.3.
    rO   )r,   rH   r   F)r   r   n_informativer   r   shuffler,   rR   rX   r0   g      @gh㈵>rT   rW   r   gư>N)r@   r`   ra   r   rf   shapedictr   r&   r3   r   r
   r4   rb   ZlinalgZsolve)r0   ri   r   r   r   r   paramsZmodel1aZmodel2Zg_interceptZg_coefAr   r   r   test_equivariance   s<    
	
$rs   z.ignore:`method='interior-point'` is deprecatedc                  C   s|   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 d   n1 sn0    Y  dS )zTest that linprog fails.r   r   )numr\   r   r   r]   )r1   r   Zsolver_optionsz9Linear programming for QuantileRegressor did not succeed.r    N)r@   ZlinspaceZreshaper   r#   Zwarnsr   r&   )r   r   regmsgr   r   r   test_linprog_failure   s    
rw   sparse_container)Zhighszhighs-dsz	highs-ipmc                 C   s   d}d}t ddd|dd\}}| |}d}	t||	|d||}
t||	||d	||}t|j|
jd
d |jdk}|
jdk}| tj|ddksJ | tj|ddksJ |r|jt|
jksJ t	
|||k }|t|ddksJ dS )z/Test that sparse and dense X give same results.r   rV   i,  r:   r;   )r   r   rl   r   r   r=   )r0   r1   r9   )r0   r1   r9   r   r+   rW   r   r   r>   rJ   N)r   r   r&   r
   r4   rY   r#   r   r3   r@   rA   rB   )rx   r   r9   Zglobal_random_seedrl   Zquantile_levelr   r   r'   r1   Zquant_denseZquant_sparseZsparse_supportZdense_supportZempirical_coverager   r   r   test_sparse_input   s<    


ry   c              	   C   s   | \}}ddl }| j}||jjdtd d}tjt|d" t	dd
|| W d   n1 sj0    Y  W d   n1 s0    Y  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}   )(numpyr@   r#   r   Zscipy.optimizer   Zsklearn.datasetsr   Zsklearn.exceptionsr   Zsklearn.linear_modelr   r   Zsklearn.metricsr	   Zsklearn.utils._testingr
   Zsklearn.utils.fixesr   r   r   r   r   Zfixturer   markZskipifbase_versionZparametrizer)   r8   rD   rG   rM   rk   rs   filterwarningsrw   ry   r}   r   r   r   r   <module>   sd   	





:
.
