
    Ug,              	          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j        d
             Zej        d             Zej                             eej                   ed          k    d          ej                            dddg          ej                            de          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                             eej                   ed          k    d          ej        '                    d,          d-                         Z(eej                            e ed          k    d          ej                            d.eez   ez             ej                            dg d/          ej                            dd d!g          d0                                                             Z)d1 Z*dS )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                  6    t          dddd          \  } }| |fS )N
      r   	n_samples
n_featuresrandom_statenoiser   )Xys     g/var/www/surfInsights/venv3-11/lib/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   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          |                              ||           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&   pytestraises
ValueErrorr	   fit)r   r&   r'   r   r   X_sparseerr_msgs          r   )test_incompatible_solver_for_sparse_inputr3   #   s     DAq}QHU&UUU  
z	1	1	1 : :(((,,Xq999: : : : : : : : : : : : : : : : : :s   %A$$A(+A()highs-ds	highs-ipmr!   r    z'Solvers are available as of scipy 1.6.0c                     | \  }}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+   Nr,   )r   r&   r   r   s       r   'test_too_new_solver_methods_raise_errorr7   3   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   )r8   {Gz?r   r   )r8   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   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!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 )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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)r8   g?g?c                     t          dddd          \  }}t          | d|                              ||          }t          j        ||                    |          k               t          | d          k    sJ d S )	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   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 )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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?   )皙?r8   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.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   s\     AQRRL47$:(KKKVBF4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
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.
    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	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   )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11A
Arr"""A
()Q  C FC	(	4	4	4  1                 s   4BBBsparse_container)r!   r4   r5   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.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SSSDAq""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                    | \  }}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	   r0   )r   monkeypatchr   r   sklearnmr2   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)+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      s  
            # # # # # # , , , , , , 1 1 1 1 1 1 B B B B B B B B - - - - - - A A A A A A A A                
 Q Q Q M*)**mmF.C.CCA    $46G#HII.99: : :9 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\ M*)**mmF.C.CCA    LMM
 
 NM	 

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