o
    tBhV+                     @   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 d d
lmZ d dlmZmZ ejdd Zejdddidfddidfdd idfddidfddidfddidfdd idfddidfddidfg	dd Z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*g d+g d,g d-g d.g d/gd0d1 Zejdd2d3gd4d5 Z ejd6g d7d8d9 Z!d:d; Z"ejjeed%k d<d'ejdg d=d>d? Z#ejdg d=d@dA Z$dBdC Z%eejjeed%kd&d'ejdDej&ej'ej(gejdg dEejdd2d3gdFdG Z)dS )H    N)approx)minimize)sparse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   /var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/linear_model/tests/test_quantile.pyX_y_data   s   r   zparams, err_msgquantile   z/Quantile should be strictly between 0.0 and 1.0r   alphag      z+Penalty alpha must be a non-negative numberfit_interceptblahz'The argument fit_intercept must be boolsolverz!Invalid value for argument solversolver_optionsz)Invalid value for argument solver_optionsc                 C   sR   | \}}t jt|d tdi ||| W d   dS 1 s"w   Y  dS )z/Test that invalid init parameters raise errors.matchNr   pytestraises
ValueErrorr	   fit)r   paramserr_msgr   r   r   r   r   test_init_parameters_validation   s   "r,   interior-pointzrevised simplexc                 C   sd   | \}}t |}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.r#   r!   )r   
csc_matrixr&   r'   r(   r	   r)   )r   r!   r   r   X_sparser+   r   r   r   )test_incompatible_solver_for_sparse_input2   s   

"r1   )highs-ds	highs-ipmhighsz1.6.0z'Solvers are available as of scipy 1.6.0)reasonc                 C   sN   | \}}t jtdd t|d|| W d   dS 1 s w   Y  dS )z.Test that highs solver raises for scipy<1.6.0.zscipy>=1.6.0r#   r.   Nr%   )r   r!   r   r   r   r   r   'test_too_new_solver_methods_raise_error=   s   "r6   z quantile, alpha, intercept, coef)      ?r   r   N)gRQ?r   r   r   )g\(\?r   r   r   )r7   {Gz?r   r   )r7   d   r   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      )r   r   r8   atolr9   r   )r	   r)   r   
intercept_coef_)r   r   	interceptcoefr   r   modelr   r   r   test_quantile_toy_exampleI   s   rB   TFc                 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 )Nr9      r         ?r   -C6?gqh ?)epsilonr   r   r   r   g?r;   absr7   )r   r   r)   r	   r   r>   r=   r   npmeanpredict)r   r   r   r   huberquantr   r   r   *test_quantile_equals_huber_for_low_epsilone   s   $rO   q)r7   g?g?c                 C   sV   t ddddd\}}t| dddid||}t|||k t| d	d
ks)J d S )N  rC   r   rD   r   lstsqFr   r   r"   r8   rH   )r   r	   r)   rJ   rK   rL   r   )rP   r   r   rN   r   r   r   #test_quantile_estimates_calibrationt   s   (rT   c                  C   s   d} t | dddd\}}t| }d||| k< tddd	d
id}|j|||d t|||k }|dks:J tj|||k |d}|tdddksPJ d S )NrQ      r   g      $@r   r9   r7   g:0yE>rR   FrS   )sample_weight)weightsgQ?rH   )	r   rJ   onesrK   r	   r)   rL   averager   )nr   r   weightrN   fraction_belowweighted_fraction_belowr   r   r   test_quantile_sample_weight   s   
r^   z<The `highs` solver is available from the 1.6.0 scipy version)皙?r7   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d }|jt|ddksdJ 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.rQ   *   Nr   r   )size)axisgGz?r7   r   scalera   r4   )r   r   r!   r_   relg333333?rtolr8   r;   r   c                    sF   t  | dd   | d  d}tt| dd  }||  S )Nr   r   rj   )r
   rJ   sumrI   )r@   lossL1r   r   r   r   r   r   func   s   "z#test_asymmetric_error.<locals>.func)r   r   r   zNelder-Meadg-q=maxiteri  )funx0methodtoloptions)rJ   randomRandomStateconcatenaterI   randnrandintarrayminexponentiallogr	   r)   r=   r   r   r>   rK   rL   
set_paramsr_r   x)	r   r   rngr?   r@   rA   
model_coefro   resr   rn   r   test_asymmetric_error   sN   	"r   c                 C   s  t jd}d\}}t|||d|dd\}}||jd|jd7 }tddd	d
d}tdd| i|||}d}tdd| i|||| }	|	j	t
||j	 ddksUJ t|	j||j dd tddd|  i||| | }	|	j	t
| |j	 ddksJ 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.
    r`   )r9   rU   r   F)r   r   n_informativer   r   shuffler9   rd   Tg|=)rR   rt   )r   r"   r   g      @gh㈵>rf   rh   r   gư>Nr   )rJ   rv   rw   r   r}   shapedictr	   r)   r=   r   r   r>   ry   linalgsolve)r   r   r   r   r   r   r*   model1amodel2g_interceptg_coefAr   r   r   test_equivariance   s<   
	$ r   c                  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-   rp   )r   r!   r"   z9Linear programming for QuantileRegressor did not succeed.r#   N)rJ   linspacereshaper	   r&   warnsr   r)   )r   r   regmsgr   r   r   test_linprog_failure   s   
"r   sparse_format)r4   r2   r3   c           	      C   s   t ddddd\}}| |}d}t||d||}t|||d||}t|j|jd	d
 |rP|jt|jks:J dt||	|k   krMdksRJ  J dS dS )z/Test that sparse and dense X give same results.r9   rC   r   rD   r   rE   rG   )r   r   r!   r8   rh   g?g?N)
r   r	   r)   r   r>   r=   r   rJ   rK   rL   )	r   r!   r   r   r   r0   r   quant_densequant_sparser   r   r   test_sparse_input  s   ,r   )*numpyrJ   r&   r   scipy.optimizer   scipyr   sklearn.datasetsr   sklearn.exceptionsr   sklearn.linear_modelr   r	   sklearn.metricsr
   sklearn.utils._testingr   r   sklearn.utils.fixesr   r   fixturer   markparametrizer,   r1   skipifr6   rB   rO   rT   r^   r   r   r   r/   
csr_matrix
coo_matrixr   r   r   r   r   <module>   s   
















;
.
