
    {Kg,              	       &   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mZ d d	lmZmZmZmZmZ ej0                  d
        Zej0                  d        Zej6                  j9                   eej:                         ed      k\  d      ej6                  j=                  dddg      ej6                  j=                  de      d                      Zej6                  j=                  dd      ej6                  j9                  e ed      k\  d      d               Z ej6                  j=                  dg dg dg dg dg dg      d        Z!ej6                  j=                  dd d!g      d"        Z"ej6                  j=                  d#g d$      d%        Z#d& Z$ej6                  j9                  e ed      k  d'      ej6                  j=                  d(g d)      d*               Z%ej6                  j=                  d(g d)      d+        Z&ej6                  j9                   eej:                         ed      k\  d      ej6                  jO                  d,      d-               Z(eej6                  j9                  e ed      k  d      ej6                  j=                  d.eez   ez         ej6                  j=                  dg d/      ej6                  j=                  dd d!g      d0                                    Z)d1 Z*y)2    N)approx)minimizemake_regression)ConvergenceWarning)HuberRegressorQuantileRegressor)mean_pinball_loss)assert_allcloseskip_if_32bit)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     l/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/linear_model/tests/test_quantile.pyX_y_datar      s    RAAQODAqa4K    c                  .    t         t        d      k\  rdS dS )N1.6.0highsinterior-point)r   r    r   r   default_solverr$      s     M'$::7P@PPr   z1.11z4interior-point solver is not available in SciPy 1.11)reasonsolverr"   z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_inputr3   #   sZ     DAqQH
&TU  
z	1(,,Xq9 
2	1	1s   AA)highs-ds	highs-ipmr!   r    z'Solvers are available as of scipy 1.6.0c                     | \  }}t        j                  t        d      5  t        |      j	                  ||       ddd       y# 1 sw Y   yxY w)z.Test that highs solver raises for scipy<1.6.0.zscipy>=1.6.0r)   r+   Nr,   )r   r&   r   r   s       r   'test_too_new_solver_methods_raise_errorr7   3   s<     DAq	z	8(,,Q2 
9	8	8s   AAz quantile, alpha, intercept, coef)      ?r   r   N)gRQ?r   r   r   )g\(\?r   r   r   )r8   {Gz?r   r   )r8   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   r;      quantilealphar&   r9   atolr:   r   )r	   r0   r   
intercept_coef_)r?   r@   	interceptcoefr$   r   r   models           r   test_quantile_toy_examplerH   ?   s    " qcA3AA~	c!Qi 
 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   -C6?gqh ?)epsilonr@   rI   r@   rI   r&   g?rA   absr8   )r   r   r0   r	   r   rD   rC   r   npmeanpredict)rI   r$   r   r   r@   huberquants          r   *test_quantile_equals_huber_for_low_epsilonrW   ]   s    SRasSDAqE]	c!Qi 
 =	c!Qi 
 EKK486%*:*:#EEEEwwq5==++,s0EEEE r   q)r8   g?g?c                     t        dddd      \  }}t        | d|      j                  ||      }t        j                  ||j                  |      k        t        | d      k(  sJ y )	N  rK   r   rL   r   r>   r9   rP   )r   r	   r0   rR   rS   rT   r   )rX   r$   r   r   rV   s        r   #test_quantile_estimates_calibrationr[   n   sj     TbqPSTDAq 
c!Qi	 

 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 )NrZ      r   g      $@r   r:   r8   g:0yE>r>   )sample_weight)weightsgQ?rP   )	r   rR   onesrS   r	   r0   rT   averager   )r$   nr   r   weightrV   fraction_belowweighted_fraction_belows           r   test_quantile_sample_weightrf   z   s    AQ11DQDAqWWQZF F1qvvx<s$~NE	IIa&I)WWQq!112NC jjU]]1-=)=vN"fSd&;;;;r   z<The `highs` solver is available from the 1.6.0 scipy versionr?   )皙?r8   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.rZ   *   Nr;   r   )size)axisgGz?r8   r   scalerj   r>   rg   relg333333?rtolr9   rA   r@   c                     t        | dd  z  | d   z         }t        j                  t        j                  | dd              }||z  z   S )Nr   r   rs   )r
   rR   sumrQ   )rF   lossL1r   r@   r?   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)rR   randomRandomStateconcatenaterQ   randnrandintarrayminexponentiallogr	   r0   rC   r   r   rD   rS   rT   
set_paramsr_r   x)r?   r$   r   rngrE   rF   rG   
model_coefrx   resr   r@   r   s   `         @@@r   test_asymmetric_errorr      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.
    ri   )r:   r]   r   F)r   r   n_informativer   r   shuffler:   rm   )r@   r&   r?   g      @gh㈵>ro   rq   r   gư>Nr#   )rR   r   r   r   r   shapedictr	   r0   rC   r   r   rD   r   linalgsolve)r?   r$   r   r   r   r   r   paramsmodel1amodel2g_interceptg_coefAs                 r   test_equivariancer      s_    ))


#C"Iz DAq s	11A.1F;;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   )numry   r   r"   rz   )r@   r&   solver_optionsz9Linear programming for QuantileRegressor did not succeed.r)   N)rR   linspacereshaper	   r-   warnsr   r0   )r   r   regmsgs       r   test_linprog_failurer      s{     	Arr"**2q1A
Arr"A
()QC FC	(	41 
5	4	4s   .B

Bsparse_container)r!   r4   r5   c                    t        dddd      \  }} | |      }d}t        |||      j                  ||      }t        |||      j                  ||      }	t        |	j                  |j                  d	       |rZ|	j
                  t        |j
                        k(  sJ d
t        j                  ||	j                  |      k        cxk  rdk  sJ  J yy)z/Test that sparse and dense X give same results.r:   rK   r   rL   r   rM   rO   r9   rq   g?g=
ףp=?N)
r   r	   r0   r   rD   rC   r   rR   rS   rT   )
r   r&   rI   r$   r   r   r1   r@   quant_densequant_sparses
             r   test_sparse_inputr     s     SRasSDAq"HE#=	c!Qi  %=	c(A  L&&(9(9E&&&1G1G*HHHHrwwq<#7#7#AABJdJJJJJ 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	   r0   )r   monkeypatchr   r   sklearnmr2   s          r    test_error_interior_point_futurer   '  s     DAq)				!			'&&00,h@WXV]]:W5%56::1a@ 6 
	 65 
	s$   AB"(BB"B	B""B+)+numpyrR   r-   r   scipy.optimizer   sklearn.datasetsr   sklearn.exceptionsr   sklearn.linear_modelr   r	   sklearn.metricsr
   sklearn.utils._testingr   r   sklearn.utils.fixesr   r   r   r   r   fixturer   r$   markskipifbase_versionparametrizer3   r7   rH   rW   r[   rf   r   r   filterwarningsr   r   r   r#   r   r   <module>r      sJ  
    # , 1 B - A   
 Q Q *))*mF.CCA   $46G#HI.9: : J	: #EF-((4  3	 G
3 & 	   4-8F 9F  ./@ 0@<  w''I   _58H 6	
8Hv _5+O 6+O\ *))*mF.CCA   LM
 N	

 -((4   7.H #EF4-8K 9 G	 K$Ar   