
    0Phd                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZm	Z	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 d d	lmZmZmZ d d
lmZ d dlmZ  e            Zd Z d Z!d Z"d Z#d Z$	 	 	 	 	 	 d,dZ%	 	 	 	 	 	 	 d-dZ&d.dZ'd Z(d Z)ej*        +                    d          ej*        ,                    de          d                         Z-ej*        +                    d          ej*        ,                    de          d                         Z.ej*        +                    d          ej*        ,                    de          d                         Z/d Z0ej*        ,                    d e1d                     ej*        ,                    de          d!                         Z2ej*        +                    d          ej*        ,                    de          d"                         Z3ej*        +                    d          ej*        ,                    de          d#                         Z4ej*        ,                    de          d$             Z5ej*        +                    d          ej*        ,                    de          d%                         Z6d& Z7d' Z8ej*        ,                    d(d)d*g          d+             Z9dS )/    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                     | |z  }|dk    rt          j        |           | z  S |dk     r| S | t          j        |          dz   z  S )Ng      2@g      2      ?)mathexp)pyzs      c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/linear_model/tests/test_sag.py	log_dlossr      sU    	AA4xxx||qb  5yyr	2!s"##    c           	          t          j        t          j        dt          j        | | z            z                       S )Nr   )npmeanlogr   r   r   s     r   log_lossr"   '   s/    726#rAv.//000r   c                     | |z
  S )N r!   s     r   squared_dlossr%   ,   s    q5Lr   c                 B    t          j        d| |z
  z  | |z
  z            S )N      ?)r   r   r!   s     r   squared_lossr(   0   s#    73!a%=AE*+++r   c                     |                                  } t          j        ||           } |||          }|||                     |           z  dz  z  }|S )N       @)ravelr   dot)walphamyXmyylosspredr   s          r   get_pobjr3   5   sP    			A6#q>>DT3Aq	C	AHr      FTc
           	      H   | j         d         | j         d         }}
t          j        | j         d                   }t          j        | j         d                   }t          j        |
|f          }d}d}t          j        |
          }t          j                            d          }d}t                      }|rd}t          |          D ]U}t          |
          D ]A}t          |                                |
z            }| |         }|	                    |           t          j
        ||          |z   } ||||                   }||||         z  }||z  ||z  z   }|||         z
  }||z  }|||<   |	r|||z  ddt          |          z  z
  z  z  }|rl|||         z
  }|||<   ||z  }||ddt          |          z  z
  z  z  }|	r|||z  t          |          z  |z  |z   z  }n|||z  t          |          z  |z  z  }|||z  t          |          z  z  }CW||fS )Nr   r4           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~    GAJ
zIhqwqz""G8AGAJ''Lh	:677OI  " 3 3
)


#
#CE55D  v < <y!! 	< 	<Achhjj9,--CcFEHHSMMMug&&2AuQ#''H(M#..X%7F"(?3+?"?//L#)OC  S.:a#D		/>QRR 
X&.1J31O&O#19)#.&*==&#yC#D		/4I'JJ# X!$::SYYFN+", ,II -C!Cc$ii!ORW!WWIy</#d));;GG9	<< Ir   c                 6   ||z  dk    rt          d          | j        d         | j        d         }}t          j        |          }t          j        |          }t          j        |t                    }t          j        |          }t          |
          }d}d}d}d}t                      }t          j        ||z            }|rd}d}t          |          D ]}t          |          D ]}t	          |                                |z            }| |         }|	                    |           |dk    rzt          |          D ]j}||         dk    r#||xx         ||dz
           ||         z  z  cc<   n4||xx         ||dz
           |||         dz
           z
  ||         z  z  cc<   |||<   k|t          j
        ||          z  |z   } ||||                   }||||         z  }||z  } | ||         |z  z
  }!||!z  }|	rDt          |          D ]4}||xx         |!|         |z  ddt          |          z  z
  z  |z  z  cc<   5|rg|||         z
  }!||!z  }|!|ddt          |          z  z
  z  z  }!|	r|||z  t          |          z  |z  |!z   z  }n|||z  t          |          z  |z  z  }|||<   |d||z  z
  z  }|dk    r||t          |          z  z  |d<   n$||dz
           ||t          |          z  z  z   ||<   |dk    r|dk     rt          |          D ]g}||         dk    r ||xx         ||         ||         z  z  cc<   n1||xx         ||         |||         dz
           z
  ||         z  z  cc<   |dz   ||<   hd||<   ||z  }d}|dz  }t          |          D ]e}||         dk    r#||xx         ||dz
           ||         z  z  cc<   1||xx         ||dz
           |||         dz
           z
  ||         z  z  cc<   f||z  }||fS )	Nr   z:Sparse sag does not handle the case step_size * alpha == 1r   r4   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   }   s=    5CH
 
 	
 GAJ
zIhz""G8J''L8Jc222Lhy))O
\
*
*CI FE55DHVi'((E  Gv C Cy!! B	 B	Achhjj9,--CcFEHHSMMM!||z** . .A#A!++


eGaK&8<?&JJ






!'A+.|A7J1KK(O', ,


 '.LOO"&000I=AuQ#''H(M#..X%F"(OC,@5,H"I//L z**  AAJJJ+A.#$sSYY.0 !!JJJJ  	X&.1E&E#&*==&#yC#D		/4I'JJ# X!$::SYYFN+", ,II -C!Cc$ii!ORW!WWI#+OC cEI---F!||$T(:;a!&w{!3i6CPTIICU6V!Vg!||z** 2 2A#A!++


eGn|A&FF






!'NU<?Q3F-GG(O', ,


 '.kLOO!"g6!qLGGEB	H :    ?aAJJJ%!,|A>>JJJJAJJJgk"U<?Q+>%??Q   JJJJ vGIr   c                     |r7dt          j        t          j        | | z  d                    |z   d|z  z   z  S dt          j        t          j        | | z  d                    |z   |z   z  S )N      @r4   )axisr   )r   maxsum)rC   r.   rI   classifications       r   get_step_sizero      ss     MbfRVAE22233mCcEkQRRbfRVAE22233mCeKLLr   c                     d} t          | ddd          \  }}d}d}t          |||          }dD ]=}|d	k    rd
}nd}t          ||dd|z  | z  |d          }|                    ||           t	          |d|z  dz
  |||t
          ||dk              \  }	}
t          |d|z  dz
  |||t
          ||dk              \  }}t          j        |	          }	t          j	        |
          }
t          j        |          }t          j	        |          }t          |	|j        d           t          |
|j        d           t          ||j        d           t          ||j        d           ?d S )N      r   皙?rK   centersrb   cluster_stdg?T)r]   rJ   r]   P   ,  dy=r   
   solverrI   tolCmax_iterrb   r4   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      s   I	11RUVVVDAqEMa66I! ,I ,IU??FF F 'EkI%
 
 
 	1'EAI'6!	
 	
 	
  #EAI'6!	 
 	 
 	 
* -((M),,	=**]:..
!'39a@@@@!)S^QGGGG!(CIqAAAA!*cnaHHHHHY,I ,Ir   c            	      ~   d} d}t           j                            d          }|                    | |f          }|                    |          }|                    |          }d}d}d}t          |||d          }	t          |d	d
|| z  |          }
|
                    ||           t          |||	||t          |          \  }}t          |||	||t          |          \  }}t          ||
j                   t          ||
j                   t          ||
j                   t          ||
j                   d S )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   /  si   IJ
)


#
#C

J/
00AZZZZ((F	fAEFMaeLLLI
#i  C GGAqMMM%		#  Hj 		#  Hj Hci(((J///Hci(((J/////r   zignore:The max_iter was reachedcsr_containerc                 v   d}d}d}t          |ddd          \  }}t          dd	d
d|z  |z  |d          }t          |          }t          d	d
d|z  |z  |d          }|                    ||           |                     | |          |           |                    ||           t	          |j        |||t                    }	t	          |j        |||t                    }
t	          |j        |||t                    }t          |	|
d           t          |
|d           t          ||	d           dS )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   _  sb    IEH	11RUVVVDAq
+	
!  D ;;D
+	
!  D 	HHQNNNHH]]1q!!!HHQNNNTZ1h77ETZ1h77ETZ1h77EeUA6666eUA6666eUA666666r   c                     d}d}d}d}d}t           j                            d          }|                    ||f          }|                    |          }|                    |          }	t          |dd||d	          }
t          |
          }t          |d
d||d	          }|
                    ||	           |                     | |          |	           |                    ||	           t          |
j	        |||	t                    }t          |j	        |||	t                    }t          |j	        |||	t                    }t          ||d           t          ||d           t          ||d           dS )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

J/
00AZZZZ((F	fA#  D ;;D#  D 	HHQNNNHH]]1q!!!HHQNNNTZ1l;;ETZ1l;;ETZ1l;;EeUA6666eUA6666eUA666666r   c                    d}d}d}d}d}d}t           j                            d          }|                    ||f          }|                    |          }	t          j        ||	          d	z   }
t          |||d
          }t          ||d||z  ||          }t          |          }|                    ||
           |                     | |          |
           t          ||
|||t          ||          \  }}t          ||
|||t          d||	  	        \  }}t          |j                                        |                                d           t          |j        |d           dS )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   r4   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     s    EJIH
CM
)


"
"C

J/
00A



##A
q!sAaeLLLI#i  D ;;DHHQNNNHH]]1q!!!)		#	  	  	 J  *		#
  
  
 J dj..00*2B2B2D2DaPPPPqAAAAAAr   c            
      x   t          j        g dg dg dgt           j                  } d}d}d}t          | d	                                          }| j        d
         }t          ||d           dD ]}dD ]}|rs||z   t          |          z   }|d|z  z   t          |          z   dz  }t          d|z  |z  |          }	t          d|z  |z  |          }
dd|z  |	z   z  }dd|z  |
z   z  }n3d||z   t          |          z   z  }d|d|z  z   t          |          z   z  }t          ||d|||          }t          ||d|||          }t          ||d           t          ||d           d}t          j        t          |          5  t          ||d|           d d d            d S # 1 swxY w Y   d S )N)r4   rr   r   )rr   r   r   )rr   r   rr   r_   g333333?F   T)squaredr   r   r   )TFrj   rr   r4   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   
)))YYY			2"*EEEAEM O D1115577
I)91EEEE !J !J*  	J  	JM '%/#m2D2DD(3;6]9K9KKsRa)me3U;;a)me3U;; !QY%8 9 !QY%8 9 #'>]ASAS'S T ##cEk1C4F4FF! 0 #  N 0 #  N  ~qIIII~qIIIIIA 	JD GC	z	-	-	- L L+UG]KKKL L L L L L L L L L L L L L L L L Ls   F//F36F3seedr   c                    d\  }}d}d}d}d}t           j                            |           }t          j        |||                              |d          }	d|	                                z  }
t          |d|||z  |	          }t          |          }|                    |	|
           |                     ||	          |
           |	                    |	|
          }|	                    |	|
          }|d
k    sJ |d
k    sJ d|	                                z  |
                    |d                                          z   }
t          |d|||z            }t          |          }|                    |	|
           |                     ||	          |
           |	                    |	|
          }|	                    |	|
          }|dk    sJ |dk    sJ dS )z(tests if the sag regressor performs well)r   rx   gMbP?r   rs   r4   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   #  s    JD$I
CHE
)


%
%C
D$	**229a@@A 	aggiiAi  D ;;DHHQNNNHH]]1q!!!ZZ1FZZ1FD====D==== 	aggii#))Iq1177999ASARSSSD;;DHHQNNNHH]]1q!!!ZZ1FZZ1FD====D======r   c           
      ^   d}d}d}d}d}t          |ddd          \  }}t          |||d          }t          j        |          }	t          j        |          }
d	|
||	d
         k    <   |
}t          dd|z  |z  ||d|          }t          |          }|                    ||           |                     | |          |           t          |||||t          |          \  }}t          |||||t          d|          \  }}t          |j                                        |                                d           t          |j        |d
           t          |j                                        |                                d           t          |j        |d
           dS )z4tests if the binary classifier is computed correctlyrs   2   r   Trr   r   rt   r   r4   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  s    EIF
CM	11RUVVVDAqadKKKIillGGIEE!wqz/A
+	
!#  D ;;DHHQNNNHH]]1q!!!'		#  I{  *		#	  	  	 J dj..00)//2C2CQOOOOa@@@@dj..00*2B2B2D2DaPPPPqAAAAAAr   c                 4   d}d}d}d}d}t          |ddd          \  }}t          |||d	          }t          j        |          }	t	          t          d
d|z  |z  ||d|                    }
t          |
          }|
                    ||           |                     | |          |           g }g }g }g }|	D ]}t          j        |          }d|||k    <   t          ||||t          ||          \  }}t          ||||t          |d|          \  }}|                    |           |                    |           |                    |           |                    |           t          j        |          }t          j        |          }t          j        |          }t          j        |          }t          |	          D ]\  }}t          |
j        |         j                                        ||         d           t          |
j        |         j        ||         d           t          |j        |         j                                        ||         d           t          |j        |         j        ||         d           dS )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     s    EI
CHM	11RUVVVDAqadKKKIillGEkI%'	
 	
 	
	 	D ;;DHHQNNNHH]]1q!!!EJEJ ( (GI&&		!r'#-'$
 $
 $
 
L $.'	$
 	$
 	$
 
L 	Z   ,'''Z   ,''''IeE*%%JIeE*%%J7## R R2(+1779958$OOOO(+6
1DQQQQ(+1779958$OOOO(+6
1DQQQQQR Rr   c                 ^   d}d}d}d}d}t           j                            d          }|                    ||f          }|                    |          }t          j        ||          }	t          j        |	          }	t          dd	|z  |z  ||d
          }
t          |
          }|
                    ||	           |                     | |          |	           |
	                    |          }|	                    |          }t          ||	d           t          ||	d           dS )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

J/
00A



##A
q!A


A
+	
!  D ;;DHHQNNNHH]]1q!!!LLOOELLOOEq"----q"------r   c                    d}d}d}d}d}t          |ddd          \  }}t          |||d	          }t          j        |          }	t          j        |          }
d
|
||	d         k    <   |
}ddd}t          dd|z  |z  ||d||          }t          |          }|                    ||           |                     | |          |           t                      }t          |t          j        |          |          }||
                    |                   }t          |||||t          ||          \  }}t          |||||t          d||	  	        \  }}t          |j                                        |                                d           t!          |j        |d           t          |j                                        |                                d           t!          |j        |d           dS )z8tests binary classifier with classweights for each classrs   r   rq   r   Trr   rz   rt   r   r   r4   r   g?)r4   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     s2    EIF
CM	12SVWWWDAqadKKKIillGGIEE!wqz/A&&L
+	
!#!  D ;;DHHQNNNHH]]1q!!!	B(ry||qQQQM!""2"21"5"56M'		##	 	 	I{  *		##
  
  
 J dj..00)//2C2CQOOOOa@@@@dj..00*2B2B2D2DaPPPPqAAAAAAr   c                      ddgddgg} ddg}d}t          j        t          |          5  t          d                              | |           d	d	d	           d	S # 1 swxY w Y   d	S )
z1tests if ValueError is thrown with only one classr4   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   .  s    
Q!QA	
AA
GC	z	-	-	- 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 c                     ddgddgg} ddg}d}d}t          j        d          }t          dd|z  |          }t          j        t
          |	          5  |                    | |           d d d            n# 1 swxY w Y   t          |d|
          }t          j        t
          |	          5  |                    | |           d d d            d S # 1 swxY w Y   d S )Nr   r4   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  st   
Q!QA	
BAME
)	) C
 UcEkWWWD	(	4	4	4  A               }U%HHHD	(	4	4	4  A                 s$   A88A<?A<0CCCr|   r]   rJ   c                 z   t           j                            d          }t          |          \  }}t	          | |d          }|                    ||           t           j        |j        d d <   t          j	        t          d          5  |                    ||           d d d            d S # 1 swxY w Y   d S )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  s     )


#
#CC000DAq
F
N
N
NCGGAqMMM
 6CIaaaL	z)I	J	J	J  1                 s   B00B47B4)r4   NFNTF)r4   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 G G G G G G G G : : : : : : : : 8 8 8 8 8 8 2 2 2 2 2 2 . . . . . . B B B B B B B B         
 , + + + + + . . . . . .y{{$ $ $1 1 1
  , , ,
   
	= = = =J 
	r r r rjM M M M3I 3I 3Il-0 -0 -0` =>>.99"7 "7 :9 ?>"7J =>>.99(7 (7 :9 ?>(7V =>>.993B 3B :9 ?>3Bx/L /L /Ld q**.99& & :9 +*&R =>>.993B 3B :9 ?>3Bl =>>.99FR FR :9 ?>FRR .99. . :9.: =>>.99:B :B :9 ?>:Bz3 3 3  & E6?33  43  r   