U
    9%e-                     @   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/Darija-Ai-API/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   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\(\?{Gz?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st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std S )Nr1      r         ?r   -C6?gqh ?)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std S )NrM      r   g      $@r   r1   r/   g:0yE>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st	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axisgGz?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>.funcz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stt|
j|	|j dd tf d	d|  i|||	 | }
|
j	t
|	 |j	 ddkst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st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      @gh㈵>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rdksn 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   












;
.

 
