
    -id                     P   S SK r S SKrS SKrS SKrS SKJr  S SKJrJ	r	J
r
  S SKJrJr  S SKJr  S SKJ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  \" 5       rS r S r!S r"S r#S r$      S)S jr%       S*S jr&S+S jr'S r(S r)\RT                  RW                  S5      \RT                  RY                  S\5      S 5       5       r-\RT                  RW                  S5      \RT                  RY                  S\5      S 5       5       r.\RT                  RW                  S5      \RT                  RY                  S\5      S 5       5       r/S r0\RT                  RY                  S\1" S5      5      \RT                  RY                  S\5      S 5       5       r2\RT                  RW                  S5      \RT                  RY                  S\5      S 5       5       r3\RT                  RW                  S5      \RT                  RY                  S\5      S  5       5       r4\RT                  RY                  S\5      S! 5       r5\RT                  RW                  S5      \RT                  RY                  S\5      S" 5       5       r6S# r7S$ r8\RT                  RY                  S%S&S'/5      S( 5       r9g),    N)clone)	load_iris
make_blobsmake_classification)LogisticRegressionRidge)get_auto_step_size)OneVsRestClassifier)LabelEncoder)check_random_statecompute_class_weight)assert_allcloseassert_almost_equalassert_array_almost_equal)	row_norms)CSR_CONTAINERSc                     X-  nUS:  a  [         R                  " U* 5      U* -  $ US:  a  U* $ U* [         R                  " U5      S-   -  $ )Ng      2@g      2      ?)mathexp)pyzs      V/var/www/html/venv/lib/python3.13/site-packages/sklearn/linear_model/tests/test_sag.py	log_dlossr      sO    	A4xxx|qb  5yr	2!s"##    c           	          [         R                  " [         R                  " S[         R                  " U* U -  5      -   5      5      $ )Nr   )npmeanlogr   r   r   s     r   log_lossr"   '   s-    77266#rAv./00r   c                 
    X-
  $ )N r!   s     r   squared_dlossr%   ,   s	    5Lr   c                 B    [         R                  " SX-
  -  X-
  -  5      $ )N      ?)r   r   r!   s     r   squared_lossr(   0   s    773!%=AE*++r   c                     U R                  5       n [        R                  " X 5      nU" XS5      nXaU R                  U 5      -  S-  -  nU$ )N       @)ravelr   dot)walphamyXmyylosspredr   s          r   get_pobjr3   5   sB    		A66#>DTAq	C	AHr   c
           	         U R                   S   U R                   S   p[        R                  " U R                   S   5      n[        R                  " U R                   S   5      n[        R                  " X45      nSnSn[        R                  " U
5      n[        R                  R	                  S5      nSn[        5       nU(       a  Sn[        U5       GH3  n[        U
5       GH  n[        UR                  5       U
-  5      nU U   nUR                  U5        [        R                  " UU5      U-   nU" UUU   5      nUb  UUU   -  nUU-  X<-  -   nUUU   -
  nUU-  nUUU'   U	(       a  UUU-  SS[        U5      -  -
  -  -  nU(       aa  UUU   -
  nUUU'   UU-  nUUSS[        U5      -  -
  -  -  nU	(       a  UUU-  [        U5      -  U-  U-   -  nOXU-  [        U5      -  U-  -  nXU-  [        U5      -  -  nGM"     GM6     X4$ )Nr              M   r   {Gz?)shaper   zerosrandomRandomStatesetrangeintrandaddr,   len)Xr   	step_sizer.   n_iterdlosssparsesample_weightfit_interceptsaga	n_samples
n_featuresweightssum_gradientgradient_memory	interceptintercept_sum_gradientintercept_gradient_memoryrngdecayseenepochkidxentryr   gradientupdategradient_corrections                                r   sagr]   =   s+    GGAJ
zhhqwwqz"G88AGGAJ'Lhh	67OI  " 3
))


#CE5D vy!Achhj9,-CcFEHHSMug&2AQ#'H(M#..X%7F"(?3+?"?//L#)OC .:a#D	/>QRR&.1J31O&O#19)#.&*==&#yC#D	/4I'JJ#!$::SYFN+", ,I -C!Cc$i!ORW!WWI</#d);;G9 " > r   c                 :   X#-  S:X  a  [        S5      eU R                  S   U R                  S   p[        R                  " U5      n[        R                  " U5      n[        R                  " U[        S9n[        R                  " U5      n[        U
5      nSnSnSnSn[        5       n[        R                  " XK-  5      nU(       a  SnSn[        U5       GH]  n[        U5       GHI  n[	        UR                  5       U-  5      nU U   nUR                  U5        US:  a_  [        U5       HP  nUU   S:X  a  UU==   UUS-
     UU   -  -  ss'   O%UU==   UUS-
     UUU   S-
     -
  UU   -  -  ss'   UUU'   MR     U[        R                  " UU5      -  U-   nU" UUU   5      nUb  UUU   -  nUU-  n U UU   U-  -
  n!UU!-  nU	(       a:  [        U5       H+  nUU==   U!U   U-  SS[        U5      -  -
  -  U-  -  ss'   M-     U(       a]  UUU   -
  n!UU!-  nU!USS[        U5      -  -
  -  -  n!U	(       a  UUU-  [        U5      -  U-  U!-   -  nOUUU-  [        U5      -  U-  -  nUUU'   USX2-  -
  -  nUS:X  a  UU[        U5      -  -  US'   OUUS-
     UU[        U5      -  -  -   UU'   US:  an  US:  ah  [        U5       HM  nUU   S:X  a  UU==   UU   UU   -  -  ss'   O"UU==   UU   UUU   S-
     -
  UU   -  -  ss'   US-   UU'   MO     SUU'   UU-  nSnUS-  nGML     GM`     [        U5       HL  nUU   S:X  a  UU==   UUS-
     UU   -  -  ss'   M'  UU==   UUS-
     UUU   S-
     -
  UU   -  -  ss'   MN     UU-  nUU4$ )	Nr   z:Sparse sag does not handle the case step_size * alpha == 1r   r5   dtyper6   r8   g&.>)ZeroDivisionErrorr9   r   r:   r?   r   r=   r>   r@   rA   r,   rB   )"rC   r   rD   r.   rE   rF   rH   rG   rI   rJ   random_staterK   rL   rM   rN   last_updatedrO   rS   rP   rQ   wscalerT   rU   c_sumcounterrV   rW   rX   rY   jr   rZ   r[   r\   s"                                     r   
sag_sparserh   }   sa    CH
 	
 GGAJ
zhhz"G88J'L88Jc2Lhhy)O
\
*CI FE5DHHV'(E Gvy!Achhj9,-CcFEHHSM!|z*A#A!+
eGaK&8<?&JJ

!'A+.|A7J1KK(O', ,
 '.LO + "&&00I=AQ#'H(M#..X%F"(OC,@5,H"I//Lz*AAJ+A.#$sSY.0 !!J + &.1E&E#&*==&#yC#D	/4I'JJ#!$::SYFN+", ,I -C!Cc$i!ORW!WWI#+OC cE---F!|$T(:;a!&w{!3i6CPTICU6V!Vg!|z*A#A!+
eGn|A&FF

!'NU<?Q3F-GG(O', ,
 '.kLO + "#g6!qLGE " J :?aAJ%!,|A>>JAJgk"U<?Q+>%??Q   J	  vGIr   c                     U(       a7  S[         R                  " [         R                  " X -  SS95      U-   SU-  -   -  $ S[         R                  " [         R                  " X -  SS95      U-   U-   -  $ )N      @r5   )axisr   )r   maxsum)rC   r.   rI   classifications       r   get_step_sizero      s_    bffRVVAE23mCcEkQRRbffRVVAE23mCeKLLr   c                     Sn [        U SSSS9u  pSnSn[        XU5      nS GH  nUS	:X  a  S
nOSn[        UUSSU-  U -  USS9nUR                  X5        [	        USU-  S-
  UUU[
        UUS:H  S9u  p[        USU-  S-
  UUU[
        UUS:H  S9u  p[        R                  " U	5      n	[        R                  " U
5      n
[        R                  " U5      n[        R                  " U5      n[        XR                  SS9  [        XR                  SS9  [        XR                  SS9  [        XR                  SS9  GM     g )N      r   皙?rK   centersrb   cluster_stdg?T)r]   rJ   r]   P   ,  dy=r   
   solverrI   tolCmax_iterrb   r5   rJ   )rE   rF   rI   rJ   	   decimal)r   ro   r   fitrh   r   r]   r   
atleast_2d
atleast_1dr   coef_
intercept_)rK   rC   r   r.   rI   rD   r|   rE   clfrM   rP   weights2
intercept2s                r   test_classifier_matchingr      sX   I	11RUVDAEMa6I!U?F F 'EkI%
 	'EAI'6!	
  #EAI'6!	 
 --(MM),	==*]]:.
!'99a@!)^^QG!(IIqA!*nnaHY "r   c            
         Sn Sn[         R                  R                  S5      nUR                  X4S9nUR                  US9nUR	                  U5      nSnSnSn[        X6USS9n	[        US	S
X`-  US9n
U
R                  X55        [        UUU	UU[        US9u  p[        UUU	UU[        US9u  p[        XR                  5        [        XR                  5        [        XR                  5        [        XR                  5        g )Nrz      sizer   d   TFrn   ry   r]   )rI   r}   r|   r.   r   rE   rF   rI   )r   r;   r<   normalr,   ro   r   r   rh   r%   r]   r   r   r   )rK   rL   rS   rC   true_wr   r.   rE   rI   rD   r   weights1
intercept1r   r   s                  r   test_regressor_matchingr   /  s   IJ
))


#C

/
0AZZZZ(F	fAEFMaeLI
#C GGAM%		#H 		#H Hii(J/Hii(J/r   zignore:The max_iter was reachedcsr_containerc           	         SnSnSn[        USSSS9u  pE[        SS	S
SU-  U-  USS9n[        U5      n[        S	S
SU-  U-  USS9nUR                  XE5        UR                  U " U5      U5        UR                  XE5        [	        UR
                  X$U[        5      n	[	        UR
                  X$U[        5      n
[	        UR
                  X$U[        5      n[        XSS9  [        XSS9  [        XSS9  g)z%tests if the sag pobj matches log regr   r   rq   rr   r   rs   rt   r]   FgHz>rz   r{   )rI   r}   r~   r   rb      r   N)r   r   r   r   r3   r   r"   r   )r   rK   r.   r   rC   r   clf1clf2clf3pobj1pobj2pobj3s               r   )test_sag_pobj_matches_logistic_regressionr   _  s     IEH	11RUVDA
+	
!D ;D
+	
!D 	HHQNHH]1q!HHQNTZZ1h7ETZZ1h7ETZZ1h7EeA6eA6eA6r   c           	      \   SnSnSnSnSn[         R                  R                  S5      nUR                  X4S9nUR                  US9nUR	                  U5      n	[        USSUUSS	9n
[        U
5      n[        US
SUUSS	9nU
R                  Xy5        UR                  U " U5      U	5        UR                  Xy5        [        U
R                  X7U	[        5      n[        UR                  X7U	[        5      n[        UR                  X7U	[        5      n[        XSS9  [        XSS9  [        XSS9  g)z'tests if the sag pobj matches ridge regr   rz   r   Fr   ry   r]   *   rI   r}   r|   r.   r   rb   h㈵>lsqrr   r   N)r   r;   r<   r   r,   r   r   r   r3   r   r(   r   )r   rK   rL   r.   rE   rI   rS   rC   r   r   r   r   r   r   r   r   s                   r   &test_sag_pobj_matches_ridge_regressionr     s)    IJEFM
))


#C

/
0AZZZZ(F	fA#D ;D#D 	HHQNHH]1q!HHQNTZZ1l;ETZZ1l;ETZZ1l;EeA6eA6eA6r   c                 P   SnSnSnSnSnSn[         R                  R                  S5      nUR                  X24S9nUR                  US9n	[         R                  " X5      S	-   n
[        XUS
S9n[        UUSX-  UUS9n[        U5      nUR                  X5        UR                  U " U5      U
5        [        UU
UUU[        UUS9u  p[        UU
UUU[        SUUS9	u  nn[        UR                  R                  5       UR                  5       SS9  [        UR                  USS9  g)z0tests if the sag regressor is computed correctlyrs   rz   (   r   gư>Tr   r   r*   Fr   r]   r   )rE   rF   rI   rb   )rE   rF   rG   rI   rb      r   r5   N)r   r;   r<   r   r,   ro   r   r   r   rh   r%   r   r   r+   r   r   )r   r.   rL   rK   r   r}   rI   rS   rC   r-   r   rD   r   r   
spweights1spintercept1
spweights2spintercept2s                     r   %test_sag_regressor_computed_correctlyr     sF    EJIH
CM
))


"C

/
0A



#A
qsAaeLI#D ;DHHQNHH]1q!)		#	 J  *		#
 J djj..0*2B2B2DaPqAr   c                     [         R                  " / SQ/ SQ/ SQ/[         R                  S9n SnSnSn[        U SS	9R	                  5       nU R
                  S
   n[        X4SS9  S H  nS H  nU(       ab  X1-   [        U5      -   nUSU-  -   [        U5      -   S-  n[        SU-  U-  U5      n	[        SU-  U-  U5      n
SSU-  U	-   -  nSSU-  U
-   -  nO*SX1-   [        U5      -   -  nSUSU-  -   [        U5      -   -  n[        UUSUUUS9n[        UUSUUUS9n[        XSS9  [        XSS9  M     M     Sn[        R                  " [        US9   [        XASU5        S S S 5        g ! , (       d  f       g = f)N)r5   rr   r   )rr   r   r   )rr   r   rr   r_   g333333?F   T)squaredr   r   r   )TFrj   rr   r5   r   r   )rK   is_sagar    z:Unknown loss function for SAG solver, got wrong instead ofmatchwrong)r   arrayfloat64r   rl   r9   r   r?   minr	   pytestraises
ValueError)rC   r.   rI   max_squared_summax_squared_sum_rK   rJ   L_sqrL_logmun_sqrmun_logstep_size_sqrstep_size_logstep_size_sqr_step_size_log_msgs                   r   test_get_auto_step_sizer     s   
)Y	2"**EAEM O D1557
I1E*M'/#m2DD(3;6]9KKsRa)me3U;a)me3U; !QY%8 9 !QY%8 9 #'>]AS'S T ##cEk1C4FF! 0 #N 0 #N  qIqIA + F GC	z	-+G]K 
.	-	-s   E++
E9seedr   c                    Su  p#SnSnSnSn[         R                  R                  U 5      n[         R                  " X#U5      R	                  US5      n	SU	R                  5       -  n
[        USUXt-  US	9n[        U5      nUR                  X5        UR                  U" U	5      U
5        UR                  X5      nUR                  X5      nUS
:  d   eUS
:  d   eSU	R                  5       -  UR                  US5      R                  5       -   n
[        USXgU-  S9n[        U5      nUR                  X5        UR                  U" U	5      U
5        UR                  X5      nUR                  X5      nUS:  d   eUS:  d   eg)z(tests if the sag regressor performs well)r   rx   gMbP?r   rs   r5   r'   r]   )r}   r|   r   r.   rb   g\(\?)r}   r|   r   r.   ?N)r   r;   r<   linspacereshaper+   r   r   r   scorerandn)r   r   xminxmaxrK   r}   r   r.   rS   rC   r   r   r   score1score2s                  r   test_sag_regressorr   #  sr    JDI
CHE
))


%C
D	*229a@A 	aggiAD ;DHHQNHH]1q!ZZFZZFD==D== 	aggi#))Iq17799ASARSD;DHHQNHH]1q!ZZFZZFD==D==r   c                    SnSnSnSnSn[        USSSS9u  pg[        XaUSS9n[        R                  " U5      n	[        R                  " U5      n
S	XU	S
   :g  '   U
n[        SSU-  U-  UUSUS9n[        U5      nUR                  Xg5        UR                  U " U5      U5        [        UUUUU[        US9u  p[        UUUUU[        SUS9u  nn[        UR                  R                  5       UR                  5       SS9  [        UR                  US
S9  [        UR                  R                  5       UR                  5       SS9  [        UR                  US
S9  g)z4tests if the binary classifier is computed correctlyrs   2   r   Trr   r   rt   r   r5   r]   r   r7   r|   r~   r   r}   rb   rI   r   )rE   rF   rG   rI   r   N)r   ro   r   uniqueonesr   r   r   rh   r   r   r   r+   r   r   )r   r.   rK   rE   r}   rI   rC   r   rD   classesy_tmpr   r   	spweightsspinterceptr   r   s                    r   &test_sag_classifier_computed_correctlyr   N  sk    EIF
CM	11RUVDAadKIiilGGGIEEwqz/A
+	
!#D ;DHHQNHH]1q!'		#I  *		#	 J djj..0)//2CQOa@djj..0*2B2B2DaPqAr   c                    SnSnSnSnSn[        USSSS9u  pg[        XaUSS	9n[        R                  " U5      n	[	        [        S
SU-  U-  UUSUS95      n
[        U
5      nU
R                  Xg5        UR                  U " U5      U5        / n/ n/ n/ nU	 H  n[        R                  " U5      nSUUU:g  '   [        UUUU[        UUS9u  nn[        UUUU[        USUS9u  nnUR                  U5        UR                  U5        UR                  U5        UR                  U5        M     [        R                  " U5      n[        R                  " U5      n[        R                  " U5      n[        R                  " U5      n[        U	5       H  u  nn[        U
R                   U   R"                  R%                  5       UU   SS9  [        U
R                   U   R&                  UU   SS9  [        UR                   U   R"                  R%                  5       UU   SS9  [        UR                   U   R&                  UU   SS9  M     g)z8tests if the multiclass classifier is computed correctlyrs   rq   r   F   Tr   r   rt   r   r]   r   r7   r   r   )rF   rE   rI   )rF   rE   rG   rI   r8   )rtolr'   N)r   ro   r   r   r
   r   r   r   r   rh   r   appendvstackr   	enumerater   estimators_r   r+   r   )r   r.   rK   r}   r   rI   rC   r   rD   r   r   r   coef1r   coef2r   cl	y_encodedr   r   r   r   is                          r   &test_sag_multiclass_computed_correctlyr     sA    EI
CHM	11RUVDAadKIiilGEkI%'	
	D ;DHHQNHH]1q!EJEJGGI&		!r'#-'$
 
L $.'	$
 
L 	Z ,'Z ,'7 : IIeE*%JIIeE*%J7#2((+1177958$O((+66
1DQ((+1177958$O((+66
1DQ $r   c                    SnSnSnSnSn[         R                  R                  S5      nUR                  X24S9nUR                  US9n[         R                  " Xx5      n	[         R
                  " U	5      n	[        SS	U-  U-  UUS
S9n
[        U
5      nU
R                  Xy5        UR                  U " U5      U	5        U
R                  U5      nUR                  U5      n[        XSS9  [        XSS9  g)z(tests if classifier results match targetrs   rq   rz   r8      r   r   r]   r   r7   )r|   r~   r   r}   rb      r   N)r   r;   r<   r   r,   signr   r   r   predictr   )r   r.   rL   rK   r}   r   rS   rC   r-   r   r   r   pred1pred2s                 r   test_classifier_resultsr     s     EJI
CH
))


"C

/
0A



#A
qA

A
+	
!D ;DHHQNHH]1q!LLOELLOE"-"-r   c                 D   SnSnSnSnSn[        USSSS9u  pg[        XaUSS	9n[        R                  " U5      n	[        R                  " U5      n
S
XU	S   :g  '   U
nSSS.n[        SSU-  U-  UUSUUS9n[        U5      nUR                  Xg5        UR                  U " U5      U5        [        5       n[        U[        R                  " U5      US9nXR                  U5         n[        UUUUU[        UUS9u  nn[        UUUUU[        SUUS9	u  nn[        UR                  R                  5       UR                  5       SS9  [!        UR"                  USS9  [        UR                  R                  5       UR                  5       SS9  [!        UR"                  USS9  g)z8tests binary classifier with classweights for each classrs   r   rq   r   Trr   rz   rt   r   r   r5   r   g?)r5   r   r]   r   r7   )r|   r~   r   r}   rb   rI   class_weight)r   r   )rE   rF   rH   rI   )rE   rF   rG   rH   rI   r   N)r   ro   r   r   r   r   r   r   r   r   fit_transformrh   r   r   r   r+   r   r   )r   r.   rK   rE   r}   rI   rC   r   rD   r   r   r   r   r   leclass_weight_rH   r   r   r   r   s                        r   #test_binary_classifier_class_weightr     s    EIF
CM	12SVWDAadKIiilGGGIEEwqz/A&L
+	
!#!D ;DHHQNHH]1q!	B(ryy|qQM!"2"21"56M'		##	I{  *		##
 J djj..0)//2CQOa@djj..0*2B2B2DaPqAr   c                      SS/SS//n SS/nSn[         R                  " [        US9   [        SS9R	                  X5        S	S	S	5        g	! , (       d  f       g	= f)
z1tests if ValueError is thrown with only one classr5   rr   r   r   z;This solver needs samples of at least 2 classes in the datar   r]   )r|   N)r   r   r   r   r   )rC   r   r   s      r   test_classifier_single_classr   .  sO    
Q!QA	
AA
GC	z	-%(,,Q2 
.	-	-s   A


Ac                     SS/SS//n SS/nSnSn[         R                  " S5      n[        SSU-  US9n[        R                  " [
        US	9   UR                  X5        S S S 5        [        USUS
9n[        R                  " [
        US	9   UR                  X5        S S S 5        g ! , (       d  f       NM= f! , (       d  f       g = f)Nr   r5   r   Fr   zQCurrent sag implementation does not handle the case step_size * alpha_scaled == 1r]   )r|   r~   rI   r   )rI   r|   r.   )reescaper   r   r   ra   r   r   )rC   r   rI   r.   r   r   r   s          r   test_step_size_alpha_errorr  8  s    
Q!QA	
BAME
))	)C
 UcEkWD	(	4 
5 }U%HD	(	4 
5	4	 
5	4 
5	4s   B'B8'
B58
Cr|   r]   rJ   c                 P   [         R                  R                  S5      n[        US9u  p#[	        XSS9nUR                  X#5        [         R                  UR                  S S & [        R                  " [        SS9   UR                  X#5        S S S 5        g ! , (       d  f       g = f)Nr   )rb   T)r|   rb   
warm_startzFloating-point under-/overflowr   )r   r;   r<   r   r   r   nanr   r   r   r   )r|   rS   rC   r   r   s        r    test_sag_classifier_raises_errorr  K  su     ))


#CC0DA
F
NCGGAM
 66CIIaL	z)I	J 
K	J	Js   <B
B%)r5   NFNTF)r5   NNFTFr   )T):r   r   numpyr   r   sklearn.baser   sklearn.datasetsr   r   r   sklearn.linear_modelr   r   sklearn.linear_model._sagr	   sklearn.multiclassr
   sklearn.preprocessingr   sklearn.utilsr   r   sklearn.utils._testingr   r   r   sklearn.utils.extmathr   sklearn.utils.fixesr   irisr   r"   r%   r(   r3   r]   rh   ro   r   r   markfilterwarningsparametrizer   r   r   r   r>   r   r   r   r   r   r   r  r  r$   r   r   <module>r     s    	    G G : 8 2 . B 
 , .{$1
,
 
	=J 
	rjM3Il-0` =>.9"7 : ?"7J =>.9(7 : ?(7V =>.93B : ?3Bx/Ld q*.9& : +&R =>.93B : ?3Bl =>.9FR : ?FRR .9. :.: =>.9:B : ?:Bz3& E6?3 4r   