
    e!h)              	          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
        Zej2                  j5                   eej6                         ed      k\  d      ej2                  j9                  dddg      ej2                  j9                  de      d                      Zej2                  j9                  dg dg dg dg dg dg      d        Zej2                  j9                  dddg      d        Zej2                  j9                  dg d      d         Z d! Z!ej2                  j9                  d"g d#      d$        Z"ej2                  j9                  d"g d#      d%        Z#ej2                  j5                   eej6                         ed      k\  d      ej2                  jI                  d&      d'               Z%ej2                  j9                  d(eez   ez         ej2                  j9                  dg d)      ej2                  j9                  dddg      d*                      Z&d+ Z'y),    N)approx)minimizemake_regression)ConvergenceWarning)HuberRegressorQuantileRegressor)mean_pinball_loss)assert_allclose)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSparse_version
sp_versionc                  .    t        dddd      \  } }| |fS )N
      r   	n_samples
n_featuresrandom_statenoiser   )Xys     p/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/sklearn/linear_model/tests/test_quantile.pyX_y_datar      s    RAAQODAqa4K    z1.11z4interior-point solver is not available in SciPy 1.11)reasonsolverinterior-pointzrevised simplexcsc_containerc                     | \  }} ||      }d| d}t        j                  t        |      5  t        |      j	                  ||       d d d        y # 1 sw Y   y xY w)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_msgs          r   )test_incompatible_solver_for_sparse_inputr,      sc     DAqQH
&TU  
z	1 :(,,Xq9: : :s   AA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                    dgdgdgg}g d}t        | |      j                  ||      }t        |j                  |d       |t        |j                  d   |d       |dk  r|j                  d   dk\  sJ |j                  d   dk  sJ y )	Nr   r   )r   r0      quantilealphar.   atolr/   r   )r	   r)   r   
intercept_coef_)r4   r5   	interceptcoefr   r   models          r   test_quantile_toy_exampler=   -   s    " qcA3AAxu=AA!QGEE$$id;A48s{{{1~""";;q>Rr   fit_interceptTFc                    t        dddd      \  }}d}t        d||       j                  ||      }t        || 	      j                  ||      }t	        |j
                  |j
                  d
       | r^|j                  t        |j                  d
      k(  sJ t        j                  ||j                  |      k        t        dd
      k(  sJ y y )Nr/      r         ?r   g-C6?gqh ?)epsilonr5   r>   )r5   r>   皙?r6   absr-   )r   r   r)   r	   r   r9   r8   r   npmeanpredict)r>   r   r   r5   huberquants         r   *test_quantile_equals_huber_for_low_epsilonrK   I   s    SRasSDAqE]	c!Qi 
 EGKKAqQEEKK486%*:*:#EEEEwwq5==++,s0EEEE r   q)r-   g?g?c                     t        dddd      \  }}t        | d      j                  ||      }t        j                  ||j                  |      k        t        | d      k(  sJ y )	N  r@   r   rA   r   r3   r.   rD   )r   r	   r)   rF   rG   rH   r   )rL   r   r   rJ   s       r   #test_quantile_estimates_calibrationrO   X   s^     TbqPSTDAqq266q!<E771u}}Q''(F1$,????r   c                     d} t        | ddd      \  }}t        j                  |       }d|||j                         kD  <   t	        dd	      }|j                  |||
       t        j                  ||j                  |      k        }|dkD  sJ t        j                  ||j                  |      k  |      }|t        dd      k(  sJ y )NrN      r   g      $@r   r/   r-   g:0yE>r3   )sample_weight)weightsQ?rD   )	r   rF   onesrG   r	   r)   rH   averager   )nr   r   weightrJ   fraction_belowweighted_fraction_belows          r   test_quantile_sample_weightr[   `   s    AQ11DQDAqWWQZF F1qvvx<s$7E	IIa&I)WWQq!112NC jjU]]1-=)=vN"fSd&;;;;r   r4   )皙?r-   g?c                    	
 d}t         j                  j                  d      }t        j                  t        j                  |j                  |      dddf         |j                  d|df       fd      	d}t        j                  d	d
g      }t        j                  	|z  |z         dkD  sJ |j                  	|z  |z    t        j                  d z
        z  |      t         d      j                  	      }|j                  t        |d      k(  sJ t        |j                   |d       t        t        j"                  |j%                  	      kD         d       d
|j'                  
      j                  	       t         j(                  |j                  |j                   f   }	
 fd}t+        |g dddddi      } ||      t         ||j,                              k(  sJ t        |j                  |j,                  d          t        |j                   |j,                  dd        t        t        j"                  |j%                  	      kD         d       y)z<Test quantile regression for asymmetric distributed targets.rN   *   Nr0   r   )size)axisgGz?r-   r   scaler_   r3   r\   rel333333?rtolr.   r6   r5   c                     t        | dd  z  | d   z         }t        j                  t        j                  | dd              }||z  z   S )Nr   r   ri   )r
   rF   sumrE   )r;   lossL1r   r5   r4   r   s      r   funcz#test_asymmetric_error.<locals>.func   sP     AQRL47$:(KVVBFF48$%ebj  r   )r   r   zNelder-Meadg-q=maxiteri  )funx0methodtoloptions)rF   randomRandomStateconcatenaterE   randnrandintarrayminexponentiallogr	   r)   r8   r   r   r9   rG   rH   
set_paramsr_r   x)r4   r   rngr:   r;   r<   
model_coefrn   resr   r5   r   s   `        @@@r   test_asymmetric_errorr   p   s*    I
))


#C
FF399Y'401[[)Q[00	
 	A I88S"ID66!d(Y&'!+++
 	D9$%q8|(<<9 	 	A  
c!Qi 
 viS9999EKKC0BGGEMM!,q018$G E	5!%%a+u''45J!
 D!C 
vd355k2222E$$ceeAh/EKKqr+BGGEMM!,q018$Gr   c                 ,   t         j                  j                  d      }d\  }}t        |||d|d      \  }}||j	                  d|j
                        z  }t        d      }t        dd	| i|j                  ||      }d
}t        dd	| i|j                  |||z        }	|	j                  t        ||j                  z  d      k(  sJ t        |	j                  ||j                  z  d       t        dd	d| z
  i|j                  || |z        }	|	j                  t        | |j                  z  d      k(  sJ t        |	j                  | |j                  z  d       |j                         |j                  |      }}
t        dd	| i|}	|	j                  ||||z  z   |
z          |	j                  t        |j                  |
z         k(  sJ t        |	j                  |j                  |z   d       |j                  ||      }t        dd	| i|}	|	j                  ||z  |       |	j                  t        |j                  d      k(  sJ t        |	j                  t         j                  j                  ||j                        d       y)ziTest equivariace of quantile regression.

    See Koenker (2005) Quantile Regression, Chapter 2.2.3.
    r^   )r/   rQ   r   F)r   r   n_informativer   r   shuffler/   rb   ri   r4   g      @gh㈵>rd   rg   r   gư>N )rF   rv   rw   r   r}   shapedictr	   r)   r8   r   r   r9   ry   linalgsolve)r4   r   r   r   r   r   paramsmodel1amodel2g_interceptg_coefAs                r   test_equivariancer      s\    ))


#C"Iz DAq s	11A]F;;F;??1EF 	A;;F;??1q5IFq6+<+<'<$ GGGGFLL!fll"2> ?H??CCArAvNFrF,=,='=4 HHHHFLL1"v||"3$? ))+syy'<K;;F;F
JJq!a&j.;./v'8'8;'F GGGGFLL&,,"7dC 			*j)A;;F;F
JJq1uav'8'8d CCCCFLL"))//!V\\"BNr   z.ignore:`method='interior-point'` is deprecatedc                  ,   t        j                  ddd      j                  dd      } t        j                  ddd      }t        ddddi      }d	}t	        j
                  t        |
      5  |j                  | |       ddd       y# 1 sw Y   yxY w)zTest that linprog fails.r   r   )numro   r   r    rp   )r5   r   solver_optionsz9Linear programming for QuantileRegressor did not succeed.r#   N)rF   linspacereshaper	   r&   warnsr   r)   )r   r   regmsgs       r   test_linprog_failurer      s     	Arr"**2q1A
Arr"A
()QC FC	(	4 1  s   .B

Bsparse_container)highszhighs-dsz	highs-ipmc                    d}d}t        ddd|d      \  }} | |      }d}	t        ||	|      j                  ||      }
t        ||	||	      j                  ||      }t        |j                  |
j                  d
       |j                  dk7  }|
j                  dk7  }|j                         t        j                  |d      k(  sJ |j                         t        j                  |d      k(  sJ |r^|j                  t        |
j                        k(  sJ t        j                  ||j                  |      k        }|t        |d      k(  sJ yy)z/Test that sparse and dense X give same results.r   rf   i,  r@   rA   )r   r   r   r   r   rC   )r4   r5   r>   )r4   r5   r>   r   r.   rg   r   r   rD   rT   N)r   r	   r)   r   r9   rk   r&   r   r8   rF   rG   rH   )r   r   r>   global_random_seedr   quantile_levelr   r   r*   r5   quant_densequant_sparsesparse_supportdense_supportempirical_coverages                  r   test_sparse_inputr      sY    MN'DAq  "HE#uM	c!Qi  %uMRX	c(A  L&&(9(9E!''1,N%%*M&--1"EEEE6==A#FFFF&&&1G1G*HHHHWWQ)=)=h)G%GH!VN%EEEE	 r   c                 \   | \  }}ddl }|j                         5 }|j                  |j                  j                  dt        d             d}t        j                  t        |      5  t        d      j                  ||       ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	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+   s          r    test_error_interior_point_futurer     s     DAq)				 A!			'&&00,h@WXV]]:W5 	A%56::1a@	AA A	A 	AA As$   AB"(BB"B	B""B+)(numpyrF   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,   r=   rK   rO   r[   r   r   filterwarningsr   r   r   r   r   r   <module>r      sy      # , 1 B - 2   
 *))*mF.CCA   $46G#HI.9: : J	: & 	
 
  4-8F 9F ./@ 0@<  _57H 67Ht _5+O 6+O\ *))*mF.CCA   LM
 N	

 7.H #EF4-8F 9 G
F>Ar   