o
    i)                  	   @   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   b/home/kim/smarthome/.venv/lib/python3.10/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   sb   | \}}||}d| d}t jt|d t|d|| W d    d S 1 s*w   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r,t|jd |dd |dk r9|jd dks9J |jd dksBJ 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 | rJ|jt|jd
dks8J t	||
|k tdd
dksLJ d S 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s&J 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s7J tj|||k |d}|tdddksMJ 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s;J |j	 | |  t 
d  |dtdd }|jt|ddkscJ 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sJ 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dd	| i|||}d
}tdd	| i|||| }	|	j	t
||j	 ddksQJ t|	j||j dd tdd	d|  i||| | }	|	j	t
| |j	 ddks}J t|	j| |j dd | ||}
}tdd	| i|}	|	||||  |
  |	j	t
|j	|
 ksJ t|	j|j| dd |||}td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ư>Nr   )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   dS 1 s8w   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sLJ | tj|ddksYJ |ry|jt|
jkseJ t	
|||k }|t|ddks{J dS 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dtd d}tjt|d t	dd
|| W d   n1 s5w   Y  W d   dS W d   dS 1 sMw   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>   sf   	





:
.
