
    _ndCw                     &   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	 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 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(  e%            Z)d Z*d Z+d Z,d Z-d Z.	 	 	 	 	 	 d4dZ/	 	 	 	 	 	 	 d5dZ0d6dZ1d Z2d Z3ej4        5                    d          d              Z6ej4        5                    d          d!             Z7ej4        5                    d          d"             Z8d# Z9ej4        :                    d$ e;d%                    d&             Z<ej4        5                    d          d'             Z=ej4        5                    d          d(             Z>d) Z?ej4        5                    d          d*             Z@ej4        5                    d          d+             ZAd, ZBd- ZCd. ZDd/ ZEej4        :                    d0d1d2g          d3             ZFdS )7    N)	logsumexp)HalfMultinomialLoss)LinearModelLoss)get_auto_step_size)"_multinomial_grad_loss_all_samples)LogisticRegressionRidge)make_dataset)	row_norms)assert_almost_equal)assert_array_almost_equal)assert_allclose)compute_class_weight)check_random_state)LabelEncoderLabelBinarizer)
make_blobs	load_irismake_classification)clonec                     | |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      Clib/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)   1   s    q5Lr    c                 B    t          j        d| |z
  z  | |z
  z            S )N      ?)r"   r#   r%   s     r   squared_lossr,   5   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_pobjr7   :   sP    			A6#q>>DT3Aq	C	AHr       FTc
           	      J   | 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 ]V}t          |
          D ]B}t          |                    d          |
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  }DX||fS )Nr   r8           M   r   {Gz?)shaper"   zerosrandomRandomStatesetrangeintrandaddr0   len)Xr   	step_sizer2   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   sagra   B   s    GAJ
zIhqwqz""G8AGAJ''Lh	:677OI  " 3 3
)


#
#CE55D  v < <y!! 	< 	<AchhqkkI-..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                 8   ||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	          |                    d          |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   r8   dtyper:   r<   g&.>)ZeroDivisionErrorr=   r"   r>   rC   r   rA   rB   rD   rE   r0   rF   )"rG   r   rH   r2   rI   rJ   rL   rK   rM   rN   random_staterO   rP   rQ   rR   last_updatedrS   rW   rT   rU   wscalerX   rY   c_sumcounterrZ   r[   r\   r]   jr   r^   r_   r`   s"                                     r   
sag_sparserl      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chhqkkI-..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      @r8   axisr   )r"   maxsum)rG   r2   rM   classifications       r   get_step_sizert      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k    <   d}d}t          |||          }d	D ]2}|d
k    rd}nd}t          ||dd|z  | z  |dd          }|                    ||           t	          |||||t
          ||dk              \  }	}
t          |||||t
          ||dk              \  }}t          j        |	          }	t          j	        |
          }
t          j        |          }t          j	        |          }t          |	|j        d           t          |
|j        d           t          ||j        d           t          ||j        d           4d S )N      r   皙?rO   centersrf   cluster_std皙?T)ra   rN   ra   P   ,  dy=r   
   ovrsolverrM   tolCmax_iterrf   multi_classrN   )rI   rJ   rM   rN   	   decimal)r   rt   r   fitrl   r   ra   r"   
atleast_2d
atleast_1dr   coef_
intercept_)rO   rG   r   r2   rM   rH   r   rI   clfrQ   rT   weights2
intercept2s                r   test_classifier_matchingr      s   I	11RUVVVDAqAa1fIEMa66I! -I -IU??FF F 'EkI%
 
 
 	1''6!	
 	
 	
  #'6!	 
 	 
 	 
* -((M),,	=**]:..
!'39a@@@@!)S^QGGGG!(CIqAAAA!*cnaHHHHH[-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 )Nr      sizer   d   TFrs   r   ra   )rM   r   r   r2   r   rI   rJ   rM   )r"   r?   r@   normalr0   rt   r	   r   rl   r)   ra   r   r   r   )rO   rP   rW   rG   true_wr   r2   rI   rM   rH   r   weights1
intercept1r   r   s                  r   test_regressor_matchingr   5  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 reachedc            	         d} d}d}t          | ddd          \  }}t          dd	d
d|z  | z  |dd          }t          |          }t          d	d
d|z  | z  |dd          }|                    ||           |                    t	          j        |          |           |                    ||           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   rv   rw   r   rx   ry   ra   FgHz>r   r   r   )rM   r   r   r   rf   r      r   N)
r   r   r   r   sp
csr_matrixr7   r   r&   r   )rO   r2   r   rG   r   clf1clf2clf3pobj1pobj2pobj3s              r   )test_sag_pobj_matches_logistic_regressionr   e  sh    IEH	11RUVVVDAq
+	
!  D ;;D
+	
!  D 	HHQNNNHHR]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          |	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   r   r   Fr   r   ra   *   rM   r   r   r2   r   rf   h㈵>lsqrr   r   N)r"   r?   r@   r   r0   r	   r   r   r   r   r7   r   r,   r   )rO   rP   r2   rI   rM   rW   rG   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HHR]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          j
        |          |	           t          ||	|
| |t          ||          \  }}t          ||	|
| |t          d||	  	        \  }}t          |j                                        |                                d           t!          |j        |d           dS )z0tests if the sag regressor is computed correctlyrx   r   (   r   gư>Tr   r   r.   Fr   ra   r   )rI   rJ   rM   rf   )rI   rJ   rK   rM   rf      r   r8   N)r"   r?   r@   r   r0   rt   r	   r   r   r   r   rl   r)   r   r   r/   r   r   )r2   rP   rO   r   r   rM   rW   rG   r1   r   rH   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HHR]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)r8   rw   r   )rw   r   r   )rw   r   rw   rc   333333?F   T)squaredr   r   r   )TFrn   rw   r8   r   r   )rO   is_sagar$   z:Unknown loss function for SAG solver, got wrong instead ofmatchwrong)r"   arrayfloat64r   rq   r=   r   rC   minr   pytestraises
ValueError)rG   r2   rM   max_squared_summax_squared_sum_rO   rN   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          |
          }|
                    ||	           |                    t          j
        |          |	           |
                    ||	          }|                    ||	          }|d
k    sJ |d
k    sJ d|                                z  |                    |d                                          z   }	t          |d|||z            }
t          |
          }|
                    ||	           |                    t          j
        |          |	           |
                    ||	          }|                    ||	          }|dk    sJ |dk    sJ dS )z(tests if the sag regressor performs well)r   r   gMbP?r   rx   r8   r+   ra   )r   r   r   r2   rf   g\(\?)r   r   r   r2   ?N)r"   r?   r@   linspacereshaper/   r	   r   r   r   r   scorerandn)r   xminxmaxrO   r   r   r2   rW   rG   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HHR]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HHR]1q!!!ZZ1FZZ1FD====D======r    c            
      r   d} d}d}d}d}t          |ddd          \  }}t          || |d          }t          j        |          }t          j        |          }	d	|	||d
         k    <   |	}t          dd| z  |z  ||d|d          }
t          |
          }|
                    ||           |                    t          j	        |          |           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 correctlyrx   2   r   Trw   r   ry   r   r|   r8   ra   r   r;   r   r   r   r   r   rf   rM   r   r   )rI   rJ   rK   rM   r   N)r   rt   r"   uniqueonesr   r   r   r   r   rl   r   r   r   r/   r   r   )r2   rO   rI   r   rM   rG   r   rH   classesy_tmpr   r   	spweightsspinterceptr   r   s                   r   &test_sag_classifier_computed_correctlyr   R  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HHR]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                  N   d} d}d}d}d}t          |ddd          \  }}t          || |d	          }t          j        |          }t	          d
d| z  |z  ||d|d          }	t          |	          }
|	                    ||           |
                    t          j        |          |           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        |                                         ||                                         d           t'          |	j        |         ||         d           t!          |
j        |                                         ||                                         d           t'          |
j        |         ||         d           dS )z8tests if the multiclass classifier is computed correctlyrx   rv   r   r   Tr   r   ry   r   ra   r   r;   r   r   r|   )rJ   rI   rM   )rJ   rI   rK   rM   rw   r   r8   N)r   rt   r"   r   r   r   r   r   r   r   rl   r   appendvstackr   	enumerater   r   r/   r   r   )r2   rO   r   r   rM   rG   r   rH   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
+	
!#  D ;;DHHQNNNHHR]1q!!!EJEJ ( (GI&&		!r'#-'$
 $
 $
 
L $.'	$
 	$
 	$
 
L 	Z   ,'''Z   ,''''IeE*%%JIeE*%%J7## J J2!$*Q-"5"5"7"7q9I9ISTUUUUDOA.
1qIIII!$*Q-"5"5"7"7q9I9ISTUUUUDOA.
1qIIIIIJ Jr    c                  p   d} d}d}d}d}t           j                            d          }|                    ||f          }|                    |          }t          j        ||          }t          j        |          }t          dd	| z  |z  ||d
          }	t          |	          }
|	                    ||           |
                    t          j
        |          |           |	                    |          }|
                    |          }t          ||d           t          ||d           dS )z(tests if classifier results match targetrx   rv   r   r<      r   r   ra   r   r;   )r   r   r   r   rf      r   N)r"   r?   r@   r   r0   signr   r   r   r   r   predictr   )r2   rP   rO   r   r   rW   rG   r1   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HHR]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|d|
          }t          |          }|                    ||           |                    t          j	        |          |           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 classrx   r   rv   r   Trw   r   ry   r   r|   r8   r   皙?)r8   r|   ra   r   r;   r   r   r   r   r   rf   rM   r   class_weightr   r   )rI   rJ   rL   rM   )rI   rJ   rK   rL   rM   r   N)r   rt   r"   r   r   r   r   r   r   r   r   r   fit_transformrl   r   r   r   r/   r   r   )r2   rO   rI   r   rM   rG   r   rH   r   r   r   r   r   leclass_weight_rL   r   r   r   r   s                       r   #test_binary_classifier_class_weightr    s5    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HHR]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}d}d}dddd}d	}t          |d
dd          \  }}t          || |d	          }t          j        |          }	t	          dd| z  |z  ||d|d|          }
t          |
          }|
                    ||           |                    t          j        |          |           t                      }t          |t          j        |          |          }||                    |                   }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        |                                         ||                                         d           t-          |
j        |         ||         d           t'          |j        |                                         ||                                         d           t-          |j        |         ||         d           dS )z1tests multiclass with classweights for each classrx   rv   r   r   r   r   g      ?)r   r8   rw   Tr   r   ry   r   ra   r   r;   r   r   r  r|   )rI   rJ   rL   )rI   rJ   rL   rK   rw   r   r8   N)r   rt   r"   r   r   r   r   r   r   r   r   r  r   rl   r   r   r   r   r   r   r   r/   r   r   )r2   rO   r   r   r   rM   rG   r   rH   r   r   r   r  r  rL   r   r   r   r   r   r   r   r   r   r   r   s                             r   'test_multiclass_classifier_class_weightr  .  s    EI
CH..LM	11RUVVVDAqadKKKIillG
+	
!#!	 	 	D ;;DHHQNNNHHR]1q!!!	B(ry||qQQQM!""2"21"5"56MEJEJ ( (GI&&		!r'#-'$
 $
 $
 
L $.'	$
 	$
 	$
 
L 	Z   ,'''Z   ,''''IeE*%%JIeE*%%J7## J J2!$*Q-"5"5"7"7q9I9ISTUUUUDOA.
1qIIII!$*Q-"5"5"7"7q9I9ISTUUUUDOA.
1qIIIIIJ Jr    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 classr8   rw   r   r   z;This solver needs samples of at least 2 classes in the datar   ra   )r   N)r   r   r   r   r   )rG   r   r   s      r   test_classifier_single_classr	  z  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   r8   r|   Fr   zQCurrent sag implementation does not handle the case step_size * alpha_scaled == 1ra   )r   r   rM   r   )rM   r   r2   )reescaper   r   r   re   r   r	   )rG   r   rM   r2   r   r   r   s          r   test_step_size_alpha_errorr    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c                     t           j        t           j                            t          j                  }} | j        \  }}t          t	          j        |                    }t          d          }|
                    ||          }|
                    |          }|
                    |          }t	          j        ||           t          | ||d          \  }	}
t          |	|||||          \  }}t          t          |          d          }t	          j        ||f          j        }|                    || |d|          \  }}|d d d df         j        }t'          ||           t)          ||           d S )	Nr   rf   	n_classesT	base_lossrM   r:   l2_reg_strengthrL   r|   )irisdatatargetastyper"   r   r=   rF   r   r   r   absr
   r   r   r   r   Tloss_gradientr   r   )rG   r   rO   rP   r  rW   rQ   rT   sample_weightsdataset_loss_1grad_1r5   weights_interceptloss_2grad_2s                    r   test_multinomial_lossr%    s|   9dk((44qAGIzBIaLL!!I
R
 
 Cii
I..G		)$$IYYy))NF>>*** aNDDDJGQ7)Y
I NFF %	:::  D 	7I"6779''1aN (  NFF AAAssF^F ff---'''''r    c                  ^   d} t          j        ddgddgddgddgg          }t          j        g dt           j                  }t                      }|                    |          }t          j        g d	g d
g          }t          j        g d          }t          j        g d          }t          j        ||          |z   }t          |d          }	||	d d t           j        f         z
  }
|d d t           j        f         |
z  |z                                   }|d d t           j        f         t          j	        |
          |z
  z  }t          j        |j
        |          }t          t          |           d          }t          j        ||f          j
        }|                    |||d|          \  }}|d d d df         j
        }t          ||           t!          ||           d}t          j        g dg dg          }t          ||           t!          ||           d S )Nr   r}   g@ggffffff
@g)r   r8   rw   r   rc   )rx   g?g333333?)r}   r   g)r   r   gɿ)皙?r8   r8   r'  r8   ro   r  Tr  r:   r  r|   gc>1X\'@)g>g6
g	/i@)gbgs@g<FzQk)r"   r   r   r   r  r0   r   newaxisrr   r   r  r   r   r   r  r   r   )r  rG   r   lbinY_binrQ   rT   r  
predictionlogsumexp_predictionr   r   diffr!  r5   r"  r#  r$  loss_gtgrad_gts                       r   "test_multinomial_loss_ground_truthr0    sO   I
3*sDkC;c
CDDA
RZ000ADq!!Eh)9)9)9:;;G((IX...//N7##i/J$Za888)!!!RZ-88Aaaam,q058==???F!!!RZ-(BF1II,=>DVACF%	:::  D 	7I"6779''1aN (  NFF AAAssF^F'''ff--- !Gh	*	*	*,M,M,MN G (((fg.....r    r   ra   rN   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   r  T)r   rf   
warm_startzFloating-point under-/overflowr   )r"   r?   r@   r   r   r   nanr   r   r   r   )r   rW   rG   r   r   s        r    test_sag_classifier_raises_errorr4    s     )


#
#CC000DAq
F
N
N
NCGGAqMMM
 6CIaaaL	z)I	J	J	J  1                 s   B00B47B4)r8   NFNTF)r8   NNFTFr   )T)Gr   r  r   numpyr"   scipy.sparserK   r   scipy.specialr   sklearn._loss.lossr   !sklearn.linear_model._linear_lossr   sklearn.linear_model._sagr   sklearn.linear_model._sag_fastr   sklearn.linear_modelr   r	   sklearn.linear_model._baser
   sklearn.utils.extmathr   sklearn.utils._testingr   r   r   sklearn.utilsr   r   sklearn.preprocessingr   r   sklearn.datasetsr   r   r   sklearn.baser   r  r   r&   r)   r,   r7   ra   rl   rt   r   r   markfilterwarningsr   r   r   r   parametrizerB   r   r   r   r   r  r  r	  r  r%  r0  r4  r(   r    r   <module>rG     s    				            # # # # # # 2 2 2 2 2 2 = = = = = = 8 8 8 8 8 8 M M M M M M : : : : : : : : 3 3 3 3 3 3 + + + + + + 6 6 6 6 6 6 < < < < < < 2 2 2 2 2 2 . . . . . . , , , , , , > > > > > > > > G G G G G G G G G G      y{{$ $ $1 1 1
  , , ,
   
	= = = =J 
	r r r rjM M M M4I 4I 4In-0 -0 -0` =>>$7 $7 ?>$7N =>>(7 (7 ?>(7V =>>3B 3B ?>3Bx/L /L /Ld q**& & +*&R =>>4B 4B ?>4Bn =>>DJ DJ ?>DJN. . .: =>>;B ;B ?>;B| =>>HJ HJ ?>HJV3 3 3  &( ( (B&/ &/ &/R E6?33  43  r    