
    _nd5,              	       z   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             Zej        d             Zej                            dddg          d             Zej                            dd          ej                            e ed          k    d          d                         Zej                            dg dg dg dg dg dg          d             Zej                            ddd g          d!             Z ej                            d"g d#          d$             Z!d% Z"ej                            e ed          k     d&          ej                            d'g d(          d)                         Z#ej                            d'g d(          d*             Z$ej        %                    d+          d,             Z&eej                            e ed          k    d          ej                            d-ej'        ej(        ej)        g          ej                            dg d.          ej                            ddd g          d/                                                             Z*d0 Z+d1 Z,dS )2    N)approx)minimize)sparsemake_regression)ConvergenceWarning)HuberRegressorQuantileRegressor)mean_pinball_loss)assert_allclose)skip_if_32bit)parse_version
sp_versionc                  6    t          dddd          \  } }| |fS )N
      r   	n_samples
n_featuresrandom_statenoiser   )Xys     Hlib/python3.11/site-packages/sklearn/linear_model/tests/test_quantile.pyX_y_datar      s%    RAAQOOODAqa4K    c                  :    t           t          d          k    rdndS )N1.6.0highsinterior-point)r   r    r   r   default_solverr"      s     M'$:$:::77@PPr   solverr    zrevised simplexc                     | \  }}t          j        |          }d| d}t          j        t          |          5  t          |                              ||           d d d            d S # 1 swxY w Y   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_msgs         r   )test_incompatible_solver_for_sparse_inputr/      s    DAq ##HU&UUU  
z	1	1	1 : :(((,,Xq999: : : : : : : : : : : : : : : : : :s   %A--A14A1)highs-ds	highs-ipmr   r   z'Solvers are available as of scipy 1.6.0)reasonc                     | \  }}t          j        t          d          5  t          |                              ||           ddd           dS # 1 swxY w Y   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   s       r   'test_too_new_solver_methods_raise_errorr4   *   s     DAq	z	8	8	8 3 3(((,,Q2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s   %AAAz quantile, alpha, intercept, coef)      ?r   r   N)gRQ?r   r   r   )g\(\?r   r   r   )r5   {Gz?r   r   )r5   d      r   c                 .   dgdgdgg}g d}t          | ||                              ||          }t          |j        |d           |t          |j        d         |d           |dk     r|j        d         dk    sJ |j        d         dk    sJ d S )	Nr   r   )r   r8      quantilealphar#   r6   atolr7   r   )r
   r,   r   
intercept_coef_)r<   r=   	interceptcoefr"   r   r   models           r   test_quantile_toy_examplerE   6   s    " qcA3A

A~  	c!Qii 
 E$id;;;;A48888s{{{1~"""";q>Rr   fit_interceptTFc                    t          dddd          \  }}d}t          d||                               ||          }t          || |	                              ||          }t	          |j        |j        d
           | ra|j        t          |j        d
          k    sJ t          j	        ||
                    |          k               t          dd
          k    sJ d S d S )Nr7      r         ?r   -C6?gqh ?)epsilonr=   rF   r=   rF   r#   g?r>   absr5   )r   r	   r,   r
   r   rA   r@   r   npmeanpredict)rF   r"   r   r   r=   huberquants          r   *test_quantile_equals_huber_for_low_epsilonrT   T   s   SRasSSSDAqE]  	c!Qii 
 =  	c!Qii 
 EK48888 F6%*:#E#E#EEEEEwq5==+++,,s0E0E0EEEEEF F FEr   q)r5   g?g?c                     t          dddd          \  }}t          | d|                              ||          }t          j        ||                    |          k               t          | d          k    sJ d S )	N  rH   r   rI   r   r;   r6   rM   )r   r
   r,   rO   rP   rQ   r   )rU   r"   r   r   rS   s        r   #test_quantile_estimates_calibrationrX   e   s     TbqPSTTTDAq   
c!Qii	 

 71u}}Q'''((F1$,?,?,???????r   c                    d}t          |ddd          \  }}t          j        |          }d|||                                k    <   t	          dd| 	          }|                    |||
           t          j        ||                    |          k               }|dk    sJ t          j        ||                    |          k     |          }|t          dd          k    sJ d S )NrW      r   g      $@r   r7   r5   g:0yE>r;   )sample_weight)weightsgQ?rM   )	r   rO   onesrP   r
   r,   rQ   averager   )r"   nr   r   weightrS   fraction_belowweighted_fraction_belows           r   test_quantile_sample_weightrc   q   s    AQ11DQQQDAqWQZZF F1qvvxx<s$~NNNE	IIa&I)))WQq!1!1122NC jU]]1-=-=)=vNNN"fSd&;&;&;;;;;;;r   z<The `highs` solver is available from the 1.6.0 scipy versionr<   )皙?r5   g?c                 8   
 d}t           j                            d          }t          j        t          j        |                    |          dddf                   |                    d|df           fd          
d}t          j        d	d
g          }t          j        
|z  |z             dk    sJ |	                    
|z  |z    t          j
        d z
            z  |          t           d|                              
          }|j        t          |d          k    sJ t          |j        |d           t          t          j        |                    
          k               d           d|                                                  
           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        |                    
          k               d           dS )z<Test quantile regression for asymmetric distributed targets.rW   *   Nr8   r   )size)axisgGz?r5   r   scalerg   r;   rd   relg333333?rtolr6   r>   r=   c                     t          | dd          z  | d         z             }t          j        t          j        | dd                              }||z  z   S )Nr   r   rp   )r   rO   sumrN   )rC   lossL1r   r=   r<   r   s      r   funcz#test_asymmetric_error.<locals>.func   s\     AQRRL47$:(KKKVBF48$$%%ebj  r   )r   r   zNelder-Meadg-q=maxiteri  )funx0methodtoloptions)rO   randomRandomStateconcatenaterN   randnrandintarrayminexponentiallogr
   r,   r@   r   r   rA   rP   rQ   
set_paramsr_r   x)r<   r"   r   rngrB   rC   rD   
model_coefru   resr   r=   r   s   `         @@@r   test_asymmetric_errorr      s    I
)


#
#C
F399Y''4011[[)Q[000	
 	 	 	A I8S"ID6!d(Y&''!++++
 	D9$%q8|(<(<<9 	 	 	A    
c!Qii	 
 viS9999999EKC0000BGEMM!,,q0118$GGGG E	5!!%%a+++u'45J! ! ! ! ! ! ! !
 ::D!  C 4
vdd35kk222222E$ceAh///EKqrr+++BGEMM!,,q0118$GGGGGGr   c                 0   t           j                            d          }d\  }}t          |||d|d          \  }}||                    d|j                  z  }t          d|          }t          dd	| i|                    ||          }d
}	t          dd	| i|                    ||	|z            }
|
j	        t          |	|j	        z  d          k    sJ t          |
j        |	|j        z  d           t          dd	d| z
  i|                    ||	 |z            }
|
j	        t          |	 |j	        z  d          k    sJ t          |
j        |	 |j        z  d           |                                |                    |          }}t          dd	| i|}
|
                    ||||z  z   |z              |
j	        t          |j	        |z             k    sJ t          |
j        |j        |z   d           |                    ||          }t          dd	| i|}
|
                    ||z  |           |
j	        t          |j	        d          k    sJ t          |
j        t           j                            ||j                  d           dS )ziTest equivariace of quantile regression.

    See Koenker (2005) Quantile Regression, Chapter 2.2.3.
    rf   )r7   rZ   r   F)r   r   n_informativer   r   shuffler7   rj   )r=   r#   r<   g      @gh㈵>rl   rn   r   gư>Nr!   )rO   r}   r~   r   r   shapedictr
   r,   r@   r   r   rA   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	11A.111F;;;F;;??1EEF 	A;;;F;;??1q5IIFq6+<'<$ G G GGGGGFL!fl"2>>>> ??H???CCArAvNNFrF,='=4 H H HHHHHFL1"v|"3$???? ))++syy'<'<K;;;F;;F
JJq!a&j.;.///v'8;'F G GGGGGFL&,"7dCCCC 			*j))A;;;F;;F
JJq1uav'8d C C CCCCCFL")//!V\"B"BNNNNNNr   z.ignore:`method='interior-point'` is deprecatedc                  J   t          j        ddd                              dd          } t          j        ddd          }t          ddddi          }d	}t	          j        t          |
          5  |                    | |           ddd           dS # 1 swxY w Y   dS )zTest that linprog fails.r   r   )numrv   r   r    rw   )r=   r#   solver_optionsz9Linear programming for QuantileRegressor did not succeed.r%   N)rO   linspacereshaper
   r)   warnsr   r,   )r   r   regmsgs       r   test_linprog_failurer      s     	Arr"""**2q11A
Arr"""A
()Q  C FC	(	4	4	4  1                 s   4BBBsparse_format)r   r0   r1   c                    t          dddd          \  }} | |          }d}t          |||                              ||          }t          |||                              ||          }	t          |	j        |j        d	           |rY|	j        t          |j                  k    sJ d
t          j        ||		                    |          k               cxk    rdk    sn J dS dS )z/Test that sparse and dense X give same results.r7   rH   r   rI   r   rJ   rL   r6   rn   g?g?N)
r   r
   r,   r   rA   r@   r   rO   rP   rQ   )
r   r#   rF   r"   r   r   r-   r=   quant_densequant_sparses
             r   test_sparse_inputr      s(    SRasSSSDAq}QHE#=  	c!Qii  %=  	c(A  L&(9EEEE K&&1G*H*HHHHHrwq<#7#7#A#AABBJJJJdJJJJJJK K KJr   c                     | \  }}t                      }t          j        t          d          5  |                    ||           ddd           dS # 1 swxY w Y   dS )z0Check that we warn about the new default solver.zThe default solver will changer%   N)r
   r)   r   FutureWarningr,   )r   r   r   rD   s       r   test_warning_new_defaultr     s    DAqE	m+K	L	L	L  		!Q                 s   AAAc                    | \  }}ddl }|                                5 }|                    |j        j        dt          d                     d}t          j        t          |          5  t          d          
                    ||           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w 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.   s          r    test_error_interior_point_futurer   #  se    DAq))))					 A!			'&0,h@W@WXXXV]:W555 	A 	A%5666::1a@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	AA A A A A A A A A A A A A A A A A As6   AB3*%BB3B	B3"B	#B33B7:B7)-numpyrO   r)   r   scipy.optimizer   scipyr   sklearn.datasetsr   sklearn.exceptionsr   sklearn.linear_modelr	   r
   sklearn.metricsr   sklearn.utils._testingr   r   sklearn.utils.fixesr   r   fixturer   r"   markparametrizer/   skipifr4   rE   rT   rX   rc   r   r   filterwarningsr   r(   
csr_matrix
coo_matrixr   r   r   r!   r   r   <module>r      sp  
            # # # # # #       , , , , , , 1 1 1 1 1 1 B B B B B B B B - - - - - - 2 2 2 2 2 2 0 0 0 0 0 0 9 9 9 9 9 9 9 9   
 Q Q Q $46G#HII: : JI: #EFF--(((4   3 3	  GF
3 & 	       4-88F F 98F  ...//@ @ 0/@< < <  w'''I    ___558H 8H 65	 
8Hv ___55+O +O 65+O\ LMM
 
 NM
 --(((4    f'):F<MN  #E#E#EFF4-88K K 98 GF 	  K&  A A A A Ar   