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   /var/www/www-root/data/www/176.119.141.140/sports-predictor/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+   atolr,   r   )r   r&   r
   
intercept_coef_)r0   r1   	interceptcoefr   r   modelr   r   r   test_quantile_toy_example-   s   r9   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   r:   )r1   r:   皙?r2   absr*   )r   r   r&   r   r
   r5   r4   r   npmeanpredict)r:   r   r   r1   huberquantr   r   r   *test_quantile_equals_huber_for_low_epsilonI   s   $rF   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&   rA   rB   rC   r   )rG   r   r   rE   r   r   r   #test_quantile_estimates_calibrationX   s   (rI   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 )NrH      r   g      $@r   r,   r*   g:0yE>r/   )sample_weight)weightsQ?r?   )	r   rA   onesrB   r   r&   rC   averager   )nr   r   weightrE   fraction_belowweighted_fraction_belowr   r   r   test_quantile_sample_weight`   s   
rT   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.rH   *   Nr-   r   )size)axisgGz?r*   r   scalerW   r/   rU   rel333333?rtolr+   r2   r1   c                    sF   t  | dd   | d  d}tt| dd  }||  S )Nr   r   ra   )r	   rA   sumr@   )r7   lossL1r   r1   r0   r   r   r   func   s   "z#test_asymmetric_error.<locals>.func)r   r   zNelder-Meadg-q=maxiteri  )funx0methodtoloptions)rA   randomRandomStateconcatenater@   randnrandintarrayminexponentiallogr   r&   r4   r   r
   r5   rB   rC   
set_paramsr_r   x)	r0   r   rngr6   r7   r8   
model_coefrf   resr   re   r   test_asymmetric_errorp   sL   "r}   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.
    rV   )r,   rJ   r   F)r   r   n_informativer   r   shuffler,   rZ   ra   r0   g      @gh㈵>r\   r_   r   gư>Nr   )rA   rn   ro   r   ru   shapedictr   r&   r4   r   r
   r5   rq   linalgsolve)r0   rz   r   r   r   r   paramsmodel1amodel2g_interceptg_coefAr   r   r   test_equivariance   s<   
	
$ r   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   )numrg   r   r   rh   )r1   r   solver_optionsz9Linear programming for QuantileRegressor did not succeed.r    N)rA   linspacereshaper   r#   warnsr   r&   )r   r   regmsgr   r   r   test_linprog_failure   s   
"r   sparse_container)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   r^   i,  r;   r<   )r   r   r~   r   r   r>   )r0   r1   r:   )r0   r1   r:   r   r+   r_   r   r   r?   rM   N)r   r   r&   r
   r5   rb   r#   r   r4   rA   rB   rC   )r   r   r:   global_random_seedr~   quantile_levelr   r   r'   r1   quant_densequant_sparsesparse_supportdense_supportempirical_coverager   r   r   test_sparse_input   s@   


r   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"   )sklearn.linear_model._quantilecontextsetattrlinear_model	_quantiler   r#   r$   r%   r   r&   )r   monkeypatchr   r   sklearnmr(   r   r   r    test_error_interior_point_future  s   
"r   )(numpyrA   r#   r   scipy.optimizer   sklearn.datasetsr   sklearn.exceptionsr   sklearn.linear_modelr   r   sklearn.metricsr	   sklearn.utils._testingr
   sklearn.utils.fixesr   r   r   r   r   fixturer   markskipifbase_versionparametrizer)   r9   rF   rI   rT   r}   r   filterwarningsr   r   r   r   r   r   r   <module>   sf   	





:
.
