
    -iE              
          S r SSKrSSKrSSKJr  SSKJrJr  SSK	J
r
JrJr  SSKJr  SSKJr  SSKJr  SS	KJr  \
\\/r SS
 jr\R.                  R1                  S\5      \R.                  R1                  SSS/5      \R.                  R1                  S/ SQ5      \R.                  R1                  SS\R2                  \R4                  \R6                  /5      S 5       5       5       5       r\R.                  R1                  S\5      \R.                  R1                  SSS/5      \R.                  R1                  SSS/5      \R.                  R1                  SSS/5      \R.                  R1                  S\5      S 5       5       5       5       5       r\R.                  R1                  S\5      \R.                  R1                  SSS/5      \R.                  R1                  SSS/5      \R.                  R1                  S\S/-   5      S 5       5       5       5       r\R.                  R1                  S\5      \R.                  R1                  SSS/5      \R.                  R1                  SSS/5      \R.                  R1                  SSS/5      S 5       5       5       5       r\R.                  R1                  SSS/5      S 5       r \R.                  R1                  SSS/5      S 5       r!S r"g) z
Tests for LinearModelLoss

Note that correctness of losses (which compose LinearModelLoss) is already well
covered in the _loss module.
    N)assert_allclose)linalgoptimize)HalfBinomialLossHalfMultinomialLossHalfPoissonLoss)make_low_rank_matrix)LinearModelLoss)squared_norm)CSR_CONTAINERSc           	        ^ [         R                  R                  U5      mX R                  -   n[	        UUTS9nU R                  U5      nU R                  R                  (       a  U R                  R                  nTR                  US   US   X-  S9UR                  SS& U R                  (       a"  XgSS2SS24   R                  -  USS2S4   -   n	OXgR                  -  n	U R                  R                  R                  U	5      n
U4S jnU" [         R                  " U5      U
S9R                  [         R                   5      nO~TR                  US   US   US9UR                  SS& U R                  (       a  XgSS -  US   -   n	OXg-  n	U R                  R                  R                  U	TR                  SSUS9-   5      nXlU4$ )	z-Random generate y, X and coef in valid range.)	n_samples
n_featuresrandom_stater      )lowhighsizeNc                    > UR                  SS9nTR                  UR                  S   5      S S 2S 4   nX#:  R                  SS9nX   $ )Nr   axisr   )cumsumrandshapesum)itemspsrkrngs        ^/var/www/html/venv/lib/python3.13/site-packages/sklearn/linear_model/tests/test_linear_loss.pychoice_vectorized*random_X_y_coef.<locals>.choice_vectorized8   sK    a A$QW-A#A8O    )r   )nprandomRandomStatefit_interceptr	   init_zero_coef	base_lossis_multiclass	n_classesuniformflatTlinkinversearangeastypefloat64)linear_model_lossr   r   
coef_boundseedn_dofXcoefr.   raw_predictionprobar$   yr"   s                @r#   random_X_y_coefr@      s    ))


%C888E	A
 ++A.D""00%//99	{{1A" # 
		!
 **a"f/$q"u+=NZN!++0088H	 bii	2e<CCBJJO{{1A # 
		!
 **cr]T"X5NXN'',,44S[[Rai[HH
 :r&   r,   r*   FTr   )r   r   
   dtypec                 "   [        U " 5       US9n[        R                  R                  U5      nUR	                  SU4S9nUR                  XsS9nUR                  R                  (       aC  UR                  R                  n	UR                  XU-   4:X  d   eUR                  S   (       d   eOUR                  X!-   4:X  d   eUc  UR                  UR                  :X  d   eOUR                  U:X  d   e[        R                  " U5      S:X  d   eg)z4Test that init_zero_coef initializes coef correctly.r,   r*      )r   )rB   F_CONTIGUOUSNr   )r
   r'   r(   r)   normalr+   r,   r-   r.   r   flagsrB   count_nonzero)
r,   r*   r   rB   global_random_seedlossr"   r;   r<   r.   s
             r#   test_init_zero_coefrL   P   s     Y[ND
))

 2
3C

J
(Aq.D~~##NN,,	zzim)CDDDDzz.)))zzj8::::}zzQWW$$$zzU"""D!Q&&&r&   sample_weightrangel2_reg_strengthr   csr_containerc           
      4   [        U " 5       US9n[        USSUS9u  pxn	UR                  5       UR                  5       U	R                  5       pn
US:X  a0  [        R                  " SUR
                  S   UR
                  S   S9nUR                  XXUS	9nUR                  XXUS	9nUR                  XXUS	9u  nnUR                  XXUS	9u  nnUR                  XXUS	9u  nnn[        X5        [        UU5        [        UU5        [        UU5        [        UUR                  S
S9-  U" U5      R                  S
S95        [        R                  " U	5      n[        R                  " XR                  U	R                  4S9nUR                  U	UUUUUUS9u  nnn[        R                  " UU5      (       d   e[        R                  " UU5      (       d   e[        UU5        [        UU5        [        UU5        [        UU5        U" U5      nUR                  U	UXUS	9nUR                  U	UXUS	9nUR                  U	UXUS	9u  nnUR                  U	UXUS	9u  nn UR                  U	UXUS	9u  n!n"n[        UU5        [        UU5        [        UU5        [        UU5        [        UU5        [        U" U5      U " U5      5        [        UU!5        [        UU"5        [        Xz5        [        UR!                  5       U
5        [        X5        [        X5        g)zDTest that loss and gradient are the same across different functions.rD   rA   rE   r7   r   r   r9   rN   r   r   numrM   rO   Forder)r   )rM   rO   gradient_outhessian_outN)r
   r@   copyr'   linspacer   rK   gradientloss_gradientgradient_hessian_productgradient_hessianr   ravel
empty_liker   shares_memorytoarray)#r,   r*   rM   rO   rP   rJ   rK   r;   r?   r<   X_oldy_oldcoef_oldl1g1l2g2g3h3g4h4_g_outh_outg5h5Xsl1_spg1_spl2_spg2_spg3_sph3_spg4_sph4_sps#                                      r#    test_loss_grad_hess_are_the_samer~   k   sO    Y[ND "ASJA$ VVXqvvx(EAqwwqzqwwqzB	 
 
B 
 
 
B    FB ** + FB %% & IBA BBBBB,,bflll.EFMM$EMM$yy$))&<=E%%		#' & IBA B&&&&B&&&&BBBB 
q	BIIb!/  E MMb!/  E %%b!/ & LE5 00b!/ 1 LE5 ++b!/ , OE5! BBBBBBrFE%L)BB ABJJL%(AD#r&   X_containerc           	         [        U " 5       SS9n[        U " 5       SS9nSu  px[        UUUUS9u  pnSU	SS2S4'   U	SS2SS24   nUb  U" U	5      n	US	:X  a0  [        R                  " SU
R                  S
   U
R                  S
   S9nUR                  XXUS9u  pUR                  XXUS9u  nnUR                  XXUS9u  nnUR                  XXUS9u  nnU[        R                  " USU-  [        UR                  S   5      -  -   5      :X  d   eUnUR                  S==   X+R                  S   -  -  ss'   [        UU5        [        R                  R                  U5      R                  " UR                  6 nU" U5      nU" U5      nUnUR                  S==   UUR                  S   -  -  ss'   [        UU5        g)z7Test that loss and gradient handle intercept correctly.FrD   TrA   rE   rR   r   Nr   rN   r   rS   rU   g      ?)r
   r@   r'   r\   r   r^   r_   pytestapproxr   r1   r   r(   r)   randn)r,   rM   rO   r   rJ   rK   
loss_interr   r   r;   r?   r<   X_interlgrp   hesspl_interg_interhessp_interg_inter_correctedr   hh_interh_inter_correcteds                            r#   #test_loss_gradients_hessp_interceptr      s    Y[FD 9;dKJ!I 	JA$ AaeH	3B3G NAqwwqzqwwqzB  DA ,, - HAu "//q 0 GW  88q 9 NA{
 #',tvvbz*BBB     ;;A()
		0177DAaA!nGR88A()r&   c                   ^^^^^^ [        U " 5       US9mSu  pV[        TUUUS9u  mmnUR                  SS9nTS:X  a0  [        R                  " STR
                  S   TR
                  S   S	9mS
mTR                  UTTTTS9u  p[        R                  " UUUUUUU4S jST-  5      n
[        R                  " UUUUUUU4S jST-  5      nSU
-  U-
  S-  n[        XSSS9  [        R                  " U5      nSUS'   U	" U5      nSm[        R                  " T* TS5      n[        R                  " U Vs/ s H  nTR                  UUU-  -   TTTTS9PM     sn5      nUUR                  SS9-  n[        R                  " USS2[        R                   4   U5      S   R                  5       n[        UUSS9  gs  snf )zTest gradients and hessians with numerical derivatives.

Gradient should equal the numerical derivatives of the loss function.
Hessians should equal the numerical derivatives of gradients.
rD   r   rR   rV   rW   rN   r   r   rS   gư>rU   c                 0   > TR                  U T-
  TTTTS9$ )NrU   rK   r<   r;   epsrO   rK   rM   r?   s    r#   <lambda>5test_gradients_hessians_numerically.<locals>.<lambda>*  s&    TYY3J'+  
r&      c                 6   > TR                  U ST-  -
  TTTTS9$ )Nr   rU   r   r   s    r#   r   r   6  s*    TYY1s7N'+  
r&         g{Gz?g:0yE>)rtolatolgMbP?   r   N)r   )r
   r@   ra   r'   r\   r   r_   r   approx_fprimer   
zeros_likearrayr]   meanr   lstsqnewaxis)r,   r*   rM   rO   rJ   r   r   r<   r   r   	approx_g1	approx_g2approx_gvectorhess_cold_xtd_gradapprox_hess_colr;   r   rK   r?   s     ``               @@@@r#   #test_gradients_hessians_numericallyr     s    Y[ND!I 	JAq$ ::C: DAqwwqzqwwqzB C,,a- - HA &&	
 	
 	
C
I &&	
 	
 	
C
I I	)Q.HAd6 ]]1FF1IV}H C
++sdC
$CXX 		
  MMq6z!+ /   		
F fkkqk!!Fll3q"**}#5v>qAGGIOOXD9		
s   6#F;c           	         [        [        5       U S9nSu  p4[        UUUUS9u  pVn[        R                  R                  U5      R                  " UR                  6 nUR                  XuU5      u  pUR                  XuU5      nUR                  XuU5      u  pU" U5      nU
R                  UR                  :X  d   eUR                  UR                  :X  d   e[        X5        [        X5        UR                  XuU5      u  nnnUR                  UR                  :X  d   eUR                  UR                  UR                  4:X  d   eUR                  SS9nUR                  SS9nUR                  UXV5      u  nnUR                  UXV5      nUR                  UXV5      u  nnU" U5      nUR                  UR                  :X  d   eUR                  UR                  :X  d   e[        UU5        [        UU5        [        U
UR                  UR                   R"                  SSS95        [        UUR                  UR                   R"                  SSS95        g)z=Test that multinomial LinearModelLoss respects shape of coef.rD   r   rR   rV   rW   r   N)r
   r   r@   r'   r(   r)   r   r   r^   r]   r_   r   r`   r   ra   reshaper,   r.   )r*   rJ   rK   r   r   r;   r?   r<   r   r   r   ri   rk   r   r   rl   hessrp   coef_rs_rl_rg_rg1_rg2_rhessp_rh_rs                             r#   test_multinomial_coef_shaper   ^  s    %8%:-XD!I 	JA$ 			0177DAdq)DA	t	"B--dq9IBaA77djj   77djj   AA''3KBa88tzz!!!::$))TYY////ZZcZ"F
'''
C!!&!/HC==&D11&!?MD'
#,C99$$$99$$$CCAs{{4>>#;#;Rs{KLAs{{4>>#;#;Rs{KLr&   c           	      r   Su  p#n[        [        US9SS9n[        UUUUS9u  pgnUR                  SS9nU S:X  a0  [        R
                  " S	UR                  S
   UR                  S
   S9n UR                  UUUU S
S9u  pn[        XR                  5        UR                  X5      u  pnUR                  R                  UUU S9u  nn[        R                  " USS2S
4   5      [        R                  " USS2S	4   5      [        R                  " USS2S4   5      [        R                  " [        R                  " S5      5      4u  nnnn[        R                  " UUU-
  -  U* U-  U* U-  /U* U-  UUU-
  -  U* U-  /U* U-  U* U-  UUU-
  -  //5      nUR!                  XBXB45      nU c  UU-  nOUU [        R"                  " U 5      -  -  n[        R$                  " SUUU5      n[        R&                  " USS5      nUR!                  XC-  XC-  SS9n[        UUR                  5        [        U
U5        g)a[  Test multinomial hessian for 3 classes and 2 points.

For n_classes = 3 and n_samples = 2, we have
  p0 = [p0_0, p0_1]
  p1 = [p1_0, p1_1]
  p2 = [p2_0, p2_1]
and with 2 x 2 diagonal subblocks
  H = [p0 * (1-p0),    -p0 * p1,    -p0 * p2]
      [   -p0 * p1, p1 * (1-p1),    -p1 * p2]
      [   -p0 * p2,    -p1 * p2, p2 * (1-p2)]
  hess = X' H X
)r   rE   r   )r.   FrD   rR   rV   rW   rN   r   r   rS   rU   )y_truer=   rM   Nr   zij, mini, ik->jmnkr   C)r
   r   r@   ra   r'   r\   r   r`   r   r1   weight_intercept_rawr,   gradient_probadiagonesblockr   r   einsummoveaxis)rM   rJ   r   r   r.   rK   r;   r?   r<   gradr   rp   weights	interceptr=   grad_pointwiser>   p0dp1dp2donedr   hess_expecteds                          r#   "test_multinomial_hessian_3_classesr     s_    (/$I9%	:%D !	JA$ ::C: DAqwwqzqwwqzB))		# * MD D&&!)-)B)B4)K&G NN99%# : NE 	ad
ad
ad

	Cc4 	D3J#cTCZ8TCZs
+cTCZ8TCZ#SD3J%78	
	A 	
		9>?A	Y	]RVVM222II2Aq!<MKKq!4M!))	 6c * M M=??3D-(r&   c            	      
   Su  pn[        [        5       SS9n[        R                  " X45      n[        R                  " U 5      nUR	                  U5      n[        R
                  " S5      n[        R                  " [        SS9   UR                  UUUUSS9  SSS5        [        R
                  " S5      n[        R                  " [        S	S9   UR                  UUUSUS9  SSS5        [        [        5       SS9nUR	                  U5      n[        R
                  " S
U-  U45      SSS
2   n[        R                  " [        SS9   UR                  UUUUS9  SSS5        [        R
                  " S
U-  U-  X!-  45      SSS
2   n[        R                  " [        SS9   UR                  UUUSUS9  SSS5        g! , (       d  f       GN.= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g= f)z;Test that wrong gradient_out and hessian_out raises errors.)rE   r   r   FrD   r   z1gradient_out is required to have shape coef.shape)matchN)r<   r;   r?   rY   rZ   z%hessian_out is required to have shaper   z!gradient_out must be F-contiguous)r<   r;   r?   rY   zhessian_out must be contiguous)r
   r   r'   r   r+   zerosr   raises
ValueErrorr`   r   )	r   r   r.   rK   r;   r?   r<   rY   rZ   s	            r#   =test_linear_loss_gradient_hessian_raises_wrong_out_parametersr     s   '.$I9%5%7uMD
'(A
	Aq!D88A;L	M
 	% 	 	

 ((1+K	z)P	Q# 	 	
 
R %8%:%PDq!D88Q]J781=L	z)L	M%	 	 	
 
N ((A	MJ6	8NOPQTSTQTUK	z)I	J# 	 	
 
K	J?
 
 
R	Q 
N	M 
K	Js0   G G	G##G4 
G
G #
G14
H))r   *   )#__doc__numpyr'   r   numpy.testingr   scipyr   r   sklearn._loss.lossr   r   r   sklearn.datasetsr	   !sklearn.linear_model._linear_lossr
   sklearn.utils.extmathr   sklearn.utils.fixesr   LOSSESr@   markparametrizefloat32r6   int64rL   r~   r   r   r   r   r    r&   r#   <module>r      s     ) " 
 2 = . . /	A HJ1h f-5$-8z24RZZ"JK' L 3 9 .'. f-5$-84/:*QF3.9X$ : 4 ; 9 .
X$v f-4/:*QF3$(?@4* A 4 ; .4*n f-5$-84/:*QF3Q: 4 ; 9 .Q:h 5$-8%M 9%MP 4/:E) ;E)P.
r&   