
    h$,fz                     
   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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 d dlmZ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-	 	 	 	 	 	 d0dZ.	 	 	 	 	 	 	 d1dZ/d2dZ0d Z1d Z2ejf                  ji                  d      ejf                  jk                  de'      d               Z6ejf                  ji                  d      ejf                  jk                  de'      d               Z7ejf                  ji                  d      ejf                  jk                  de'      d               Z8d Z9ejf                  jk                  d  e:d!            ejf                  jk                  de'      d"               Z;ejf                  ji                  d      ejf                  jk                  de'      d#               Z<ejf                  ji                  d      ejf                  jk                  de'      d$               Z=ejf                  jk                  de'      d%        Z>ejf                  ji                  d      ejf                  jk                  de'      d&               Z?ejf                  ji                  d      ejf                  jk                  de'      d'               Z@d( ZAd) ZBd* ZCd+ ZDejf                  jk                  d,d-d.g      d/        ZEy)3    N)	logsumexp)HalfMultinomialLoss)clone)	load_iris
make_blobsmake_classification)LogisticRegressionRidge)make_dataset)LinearModelLoss)get_auto_step_size)"_multinomial_grad_loss_all_samples)LabelBinarizerLabelEncoder)check_random_statecompute_class_weight)assert_allcloseassert_almost_equalassert_array_almost_equal)	row_norms)CSR_CONTAINERSc                     | |z  }|dkD  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.12/site-packages/sklearn/linear_model/tests/test_sag.py	log_dlossr    #   sQ    	AA4xxx|qb  5y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-    77266#rAv./00r!   c                     | |z
  S )N r&   s     r   squared_dlossr*   2   s    q5Lr!   c                 D    t        j                  d| |z
  z  | |z
  z        S )N      ?)r#   r$   r&   s     r   squared_lossr-   6   s"    773!a%=AE*++r!   c                     | j                         } t        j                  ||       } |||      }||| j                  |       z  dz  z  }|S )N       @)ravelr#   dot)walphamyXmyylosspredr   s          r   get_pobjr8   ;   sH    		A66#q>DT3Aq	C	AHr!   c
           	         | j                   d   | j                   d   }}
t        j                  | j                   d         }t        j                  | j                   d         }t        j                  |
|f      }d}d}t        j                  |
      }t        j                  j	                  d      }d}t               }|rd}t        |      D ]"  }t        |
      D ]  }t        |j                         |
z        }| |   }|j                  |       t        j                  ||      |z   } ||||         }||||   z  }||z  ||z  z   }|||   z
  }||z  }|||<   |	r|||z  ddt        |      z  z
  z  z  }|r]|||   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  } % ||fS )Nr              M   r   {Gz?)shaper#   zerosrandomRandomStatesetrangeintrandaddr1   len)Xr   	step_sizer3   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   sagrb   C   sA    GGAJ
zI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y</#d);;G9	<<> Ir!   c                    ||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	        |j                         |z        }| |   }|j                  |       |dk\  r\t        |      D ]N  }||   dk(  r||xx   ||dz
     ||   z  z  cc<   n%||xx   ||dz
     |||   dz
     z
  ||   z  z  cc<   |||<   P |t        j                  ||      z  |z   } ||||         }||||   z  }||z  } | ||   |z  z
  }!||!z  }|	r8t        |      D ]*  }||xx   |!|   |z  ddt        |      z  z
  z  |z  z  cc<   , |rX|||   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\  rj|dk  ret        |      D ]K  }||   dk(  r||xx   ||   ||   z  z  cc<   n"||xx   ||   |||   dz
     z
  ||   z  z  cc<   |dz   ||<   M d||<   ||z  }d}|dz  }/ A t        |      D ]I  }||   dk(  r||xx   ||dz
     ||   z  z  cc<   %||xx   ||dz
     |||   dz
     z
  ||   z  z  cc<   K ||z  }||fS )	Nr   z:Sparse sag does not handle the case step_size * alpha == 1r   r:   dtyper;   r=   g&.>)ZeroDivisionErrorr>   r#   r?   rD   r   rB   rC   rE   rF   r1   rG   )"rH   r   rI   r3   rJ   rK   rM   rL   rN   rO   random_staterP   rQ   rR   rS   last_updatedrT   rX   rU   rV   wscalerY   rZ   c_sumcounterr[   r\   r]   r^   jr   r_   r`   ra   s"                                     r   
sag_sparserm      s    5CH
 	
 GGAJ
zIhhz"G88J'L88Jc2Lhhy)O
\
*CI FE5DHHVi'(E Gv Cy! B	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 cEI---F!|$T(:;a!&w{!3i6CPTICU6V!Vg!|z* 2A#A!+
eGn|A&FF

!'NU<?Q3F-GG(O', ,
 '.kLO2 "#g6!qLGEB	CJ :  ?aAJ%!,|A>>JAJgk"U<?Q+>%??Q   J	  vGIr!   c                     |r9dt        j                  t        j                  | | z  d            |z   d|z  z   z  S dt        j                  t        j                  | | z  d            |z   |z   z  S )N      @r:   axisr   )r#   maxsum)rH   r3   rN   classifications       r   get_step_sizeru      sc    bffRVVAE23mCcEkQRRbffRVVAE23mCeKLLr!   c                     d} t        | ddd      \  }}d||dk(  <   d}d}t        |||      }d	D ]%  }|d
k(  rd}nd}t        ||dd|z  | z  |dd      }|j                  ||       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       ( y )N      r   皙?rP   centersrg   cluster_std皙?T)rb   rO   rb   P   ,  dy=r   
   ovrsolverrN   tolCmax_iterrg   multi_classrO   )rJ   rK   rN   rO   	   decimal)r   ru   r	   fitrm   r    rb   r#   
atleast_2d
atleast_1dr   coef_
intercept_)rP   rH   r   r3   rN   rI   r   rJ   clfrR   rU   weights2
intercept2s                r   test_classifier_matchingr      sq   I	11RUVDAqAa1fIEMa6I! -IU?F F 'EkI%
 	1''6!	
  #'6!	 
* --(MM),	==*]]:.
!'399a@!)S^^QG!(CIIqA!*cnnaH[-Ir!   c            	      @   d} d}t         j                  j                  d      }|j                  | |f      }|j                  |      }|j	                  |      }d}d}d}t        |||d      }	t        |d	d
|| z  |      }
|
j                  ||       t        |||	||t        |      \  }}t        |||	||t        |      \  }}t        ||
j                         t        ||
j                         t        ||
j                         t        ||
j                         y )Nr      sizer   d   TFrt   r   rb   )rN   r   r   r3   r   rJ   rK   rN   )r#   r@   rA   normalr1   ru   r
   r   rm   r*   rb   r   r   r   )rP   rQ   rX   rH   true_wr   r3   rJ   rN   rI   r   weights1
intercept1r   r   s                  r   test_regressor_matchingr   6  s"   IJ
))


#C

J/
0AZZZZ(F	fAEFMaeLI
#iC GGAqM%		#Hj 		#Hj Hcii(J/Hcii(J/r!   zignore:The max_iter was reachedcsr_containerc           	      "   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      }|j                  ||       |j                   | |      |       |j                  ||       t	        |j
                  |||t              }	t	        |j
                  |||t              }
t	        |j
                  |||t              }t        |	|
d       t        |
|d       t        ||	d       y)z%tests if the sag pobj matches log regr   r   rw   rx   r   ry   rz   rb   FgHz>r   r   r   )rN   r   r   r   rg   r      r   N)r   r	   r   r   r8   r   r'   r   )r   rP   r3   r   rH   r   clf1clf2clf3pobj1pobj2pobj3s               r   )test_sag_pobj_matches_logistic_regressionr   f  s    IEH	11RUVDAq
+	
!D ;D
+	
!D 	HHQNHH]1q!HHQNTZZ1h7ETZZ1h7ETZZ1h7EeUA6eUA6eUA6r!   c                    d}d}d}d}d}t         j                  j                  d      }|j                  ||f      }|j                  |      }|j	                  |      }	t        |dd||d	      }
t        |
      }t        |d
d||d	      }|
j                  ||	       |j                   | |      |	       |j                  ||	       t        |
j                  |||	t              }t        |j                  |||	t              }t        |j                  |||	t              }t        ||d       t        ||d       t        ||d       y)z'tests if the sag pobj matches ridge regr   r   r   Fr   r   rb   *   rN   r   r   r3   r   rg   h㈵>lsqrr   r   N)r#   r@   rA   r   r1   r
   r   r   r8   r   r-   r   )r   rP   rQ   r3   rJ   rN   rX   rH   r   r   r   r   r   r   r   r   s                   r   &test_sag_pobj_matches_ridge_regressionr     s;    IJEFM
))


#C

J/
0AZZZZ(F	fA#D ;D#D 	HHQNHH]1q!HHQNTZZ1l;ETZZ1l;ETZZ1l;EeUA6eUA6eUA6r!   c                    d}d}d}d}d}d}t         j                  j                  d      }|j                  ||f      }|j                  |      }	t        j                  ||	      d	z   }
t        |||d
      }t        ||d||z  ||      }t        |      }|j                  ||
       |j                   | |      |
       t        ||
|||t        ||      \  }}t        ||
|||t        d||	      \  }}t        |j                  j                         |j                         d       t        |j                  |d       y)z0tests if the sag regressor is computed correctlyry   r   (   r   gư>Tr   r   r/   Fr   rb   r   )rJ   rK   rN   rg   )rJ   rK   rL   rN   rg      r   r:   N)r#   r@   rA   r   r1   ru   r
   r   r   rm   r*   r   r   r0   r   r   )r   r3   rQ   rP   r   r   rN   rX   rH   r2   r   rI   r   r   
spweights1spintercept1
spweights2spintercept2s                     r   %test_sag_regressor_computed_correctlyr     sR    EJIH
CM
))


"C

J/
0A



#A
q!sAaeLI#iD ;DHHQNHH]1q!)		#	 J  *		#
 J djj..0*2B2B2DaPqAr!   c            
         t        j                  g dg dg dgt         j                        } d}d}d}t        | d	      j	                         }| j
                  d
   }t        ||d       dD ]  }dD ]  }|rc||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  }n+d||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        y # 1 sw Y   y xY w)N)r:   rx   r   )rx   r   r   )rx   r   rx   rd   333333?F   T)squaredr   r   r   )TFro   rx   r:   r   r   )rP   is_sagar%   z:Unknown loss function for SAG solver, got wrong instead ofmatchwrong)r#   arrayfloat64r   rr   r>   r   rD   minr   pytestraises
ValueError)rH   r3   rN   max_squared_summax_squared_sum_rP   rO   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)91E !J*  	J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 	J!JF GC	z	- L+UG]KL L Ls   &E>>Fseedr   c                    d\  }}d}d}d}d}t         j                  j                  |       }t        j                  |||      j	                  |d      }	d|	j                         z  }
t        |d|||z  |	      }t        |      }|j                  |	|
       |j                   ||	      |
       |j                  |	|
      }|j                  |	|
      }|d
kD  sJ |d
kD  sJ d|	j                         z  |j                  |d      j                         z   }
t        |d|||z        }t        |      }|j                  |	|
       |j                   ||	      |
       |j                  |	|
      }|j                  |	|
      }|dkD  sJ |dkD  sJ y)z(tests if the sag regressor performs well)r   r   gMbP?r   ry   r:   r,   rb   )r   r   r   r3   rg   g\(\?)r   r   r   r3   ?N)r#   r@   rA   linspacereshaper0   r
   r   r   scorerandn)r   r   xminxmaxrP   r   r   r3   rX   rH   r   r   r   score1score2s                  r   test_sag_regressorr   ,  s    JD$I
CHE
))


%C
D$	*229a@A 	aggiAiD ;DHHQNHH]1q!ZZ1FZZ1FD==D== 	aggi#))Iq17799ASARSD;DHHQN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
   k7  <   |
}t        dd|z  |z  ||d|d      }t        |      }|j                  ||       |j                   | |      |       t        |||||t        |      \  }}t        |||||t        d|      \  }}t        |j                  j                         |j                         d       t        |j                  |d
       t        |j                  j                         |j                         d       t        |j                  |d
       y)z4tests if the binary classifier is computed correctlyry   2   r   Trx   r   rz   r   r}   r:   rb   r   r<   r   r   r   r   r   rg   rN   r   r   )rJ   rK   rL   rN   r   N)r   ru   r#   uniqueonesr	   r   r   rm   r    r   r   r0   r   r   )r   r3   rP   rJ   r   rN   rH   r   rI   classesy_tmpr   r   	spweightsspinterceptr   r   s                    r   &test_sag_classifier_computed_correctlyr   W  sx    EIF
CM	11RUVDAqadKIiilGGGIEE!wqz/A
+	
!#D ;DHHQNHH]1q!'		#I{  *		#	 J djj..0)//2CQOa@djj..0*2B2B2DaPqAr!   c                    d}d}d}d}d}t        |ddd      \  }}t        |||d	      }t        j                  |      }	t	        d
d|z  |z  ||d|d      }
t        |
      }|
j                  ||       |j                   | |      |       g }g }g }g }|	D ]  }t        j                  |      }d|||k7  <   t        ||||t        ||      \  }}t        ||||t        |d|      \  }}|j                  |       |j                  |       |j                  |       |j                  |        t        j                  |      }t        j                  |      }t        j                  |      }t        j                  |      }t        |	      D ]  \  }}t        |
j                  |   j!                         ||   j!                         d       t#        |
j$                  |   ||   d       t        |j                  |   j!                         ||   j!                         d       t#        |j$                  |   ||   d        y)z8tests if the multiclass classifier is computed correctlyry   rw   r   r   Tr   r   rz   r   rb   r   r<   r   r   r}   )rK   rJ   rN   )rK   rJ   rL   rN   rx   r   r:   N)r   ru   r#   r   r	   r   r   r   rm   r    appendvstackr   	enumerater   r   r0   r   r   )r   r3   rP   r   r   rN   rH   r   rI   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VDAqadKIiilG
+	
!#D ;DHHQNHH]1q!EJEJ (GGI&		!r'#-'$
 
L $.'	$
 
L 	Z ,'Z ,'7(: IIeE*%JIIeE*%J7# J2!$**Q-"5"5"7q9ISTUDOOA.
1qI!$**Q-"5"5"7q9ISTUDOOA.
1qIJr!   c                 
   d}d}d}d}d}t         j                  j                  d      }|j                  ||f      }|j                  |      }t        j                  ||      }	t        j
                  |	      }	t        dd	|z  |z  ||d
      }
t        |
      }|
j                  ||	       |j                   | |      |	       |
j                  |      }|j                  |      }t        ||	d       t        ||	d       y)z(tests if classifier results match targetry   rw   r   r=      r   r   rb   r   r<   )r   r   r   r   rg      r   N)r#   r@   rA   r   r1   signr	   r   r   predictr   )r   r3   rQ   rP   r   r   rX   rH   r2   r   r   r   pred1pred2s                 r   test_classifier_resultsr     s     EJI
CH
))


"C

J/
0A



#A
q!A

A
+	
!D ;DHHQNHH]1q!LLOELLOEq"-q"-r!   c                    d}d}d}d}d}t        |ddd      \  }}t        |||d	      }t        j                  |      }	t        j                  |      }
d
|
||	d   k7  <   |
}ddd}t        dd|z  |z  ||d|d|      }t        |      }|j                  ||       |j                   | |      |       t               }t        |t        j                  |      |      }||j                  |         }t        |||||t        ||      \  }}t        |||||t        d||	      \  }}t        |j                  j                         |j                         d       t!        |j"                  |d       t        |j                  j                         |j                         d       t!        |j"                  |d       y)z8tests binary classifier with classweights for each classry   r   rw   r   Trx   r   rz   r   r}   r:   r   皙?)r:   r}   rb   r   r<   r   r   r   r   r   rg   rN   r   class_weightr   r   )rJ   rK   rM   rN   )rJ   rK   rL   rM   rN   r   N)r   ru   r#   r   r   r	   r   r   r   r   fit_transformrm   r    r   r   r0   r   r   )r   r3   rP   rJ   r   rN   rH   r   rI   r   r   r   r   r   leclass_weight_rM   r   r   r   r   s                        r   #test_binary_classifier_class_weightr    s    EIF
CM	12SVWDAqadKIiilGGGIEE!wqz/A&L
+	
!#!	D ;DHHQN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                    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        |      }|j                  ||       |j                   | |      |       t               }t        |t        j                  |      |      }||j                  |         }g }g }g }g }|
D ]  }t        j                  |      }d|||k7  <   t        |||	||t        |      \  }}t        |||	||t        |d	      \  }}|j                  |       |j                  |       |j                  |       |j                  |        t        j                  |      }t        j                  |      }t        j                  |      }t        j                  |      }t!        |
      D ]  \  }}t#        |j$                  |   j'                         ||   j'                         d       t)        |j*                  |   ||   d       t#        |j$                  |   j'                         ||   j'                         d       t)        |j*                  |   ||   d        y)z1tests multiclass with classweights for each classry   rw   r   r   r   r   g      ?)r   r:   rx   Tr   r   rz   r   rb   r   r<   r   r   r  r}   )rJ   rK   rM   )rJ   rK   rM   rL   rx   r   r:   N)r   ru   r#   r   r	   r   r   r   r   r  r   rm   r    r   r   r   r   r   r   r0   r   r   )r   r3   rP   r   r   r   rN   rH   r   rI   r   r   r   r  r  rM   r   r   r   r   r   r   r   r   r   r   r   s                              r   'test_multiclass_classifier_class_weightr  7  s}    EI
CH.LM	11RUVDAqadKIiilG
+	
!#!	D ;DHHQNHH]1q!	B(ryy|qQM!""2"21"56MEJEJ (GGI&		!r'#-'$
 
L $.'	$
 
L 	Z ,'Z ,'5(8 IIeE*%JIIeE*%J7# J2!$**Q-"5"5"7q9ISTUDOOA.
1qI!$**Q-"5"5"7q9ISTUDOOA.
1qIJr!   c                      ddgddgg} ddg}d}t        j                  t        |      5  t        d      j	                  | |       d	d	d	       y	# 1 sw Y   y	xY w)
z1tests if ValueError is thrown with only one classr:   rx   r   r   z;This solver needs samples of at least 2 classes in the datar   rb   )r   N)r   r   r   r	   r   )rH   r   r   s      r   test_classifier_single_classr	    sZ    
Q!QA	
AA
GC	z	- 3%(,,Q23 3 3s   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  |j                  | |       d d d        t        |d|
      }t        j                  t
        |	      5  |j                  | |       d d d        y # 1 sw Y   NxY w# 1 sw Y   y xY w)Nr   r:   r}   Fr   zQCurrent sag implementation does not handle the case step_size * alpha_scaled == 1rb   )r   r   rN   r   )rN   r   r3   )reescaper	   r   r   rf   r   r
   )rH   r   rN   r3   r   r   r   s          r   test_step_size_alpha_errorr    s    
Q!QA	
BAME
))	)C
 UcEkWD	(	4 A }U%HD	(	4 A 	  s   B2B>2B;>Cc                  "   t         j                  t         j                  j                  t        j
                        }} | j                  \  }}t        t	        j                  |            }t        d      }|j                  ||      }|j                  |      }t	        j                  |j                  |            }t        | ||d      \  }	}
t        |	|||||      \  }}t        t        |      d      }t	        j                   ||f      j"                  }|j%                  || |d|      \  }}|d d d df   j"                  }|t	        j&                  |      z  }|t	        j&                  |      z  }t)        ||       t+        ||       y )	Nr   rg   	n_classesT	base_lossrN   r;   l2_reg_strengthrM   r}   )irisdatatargetastyper#   r   r>   rG   r   r   r   absr   r   r   r   r   Tloss_gradientrs   r   r   )rH   r   rP   rQ   r  rX   rR   rU   sample_weightsdataset_loss_1grad_1r6   weights_interceptloss_2grad_2s                    r   test_multinomial_lossr%    s^   99dkk((4qAGGIzBIIaL!I
R
 Cii
I.G		)$IVVCIIi01N aNDJGQ7)Y
INFF %	:D 		7I"6799''1aN ( NFF AssF^F
bff^$$F
bff^$$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               }|j	                  |      }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  j                          }|d d t         j                  f   t        j                  |
      |z
  z  }t        j
                  |j                  |      }t        t        |       d      }t        j                  ||f      j                  }|j                  |||d|      \  }}|d d d df   j                  }|t        j                  |      z  }|t        j                  |      z  }t        ||       t!        ||       d}t        j                  g dg dg      }t        ||       t!        ||       y )Nr   r~   g@ggffffff
@g)r   r:   rx   r   rd   )ry   g?g333333?)r~   r   g)r   r   gɿ)皙?r:   r:   r'  r:   rp   r  Tr  r;   r  r}   gc>1X\'@)g>g6
g	/i@)gbgs@g<FzQk)r#   r   r   r   r  r1   r   newaxisrs   r   r  r   r   r   r  r   r   )r  rH   r   lbinY_binrR   rU   r  
predictionlogsumexp_predictionr   r   diffr!  r6   r"  r#  r$  loss_gtgrad_gts                       r   "test_multinomial_loss_ground_truthr0    s   I
3*sDkC;c
CDA
RZZ0ADq!Ehh)9:;G(IXX./N7#i/J$Za8)!RZZ-88Aam,q058==??F!RZZ-(BFF1I,=>DVVACCF%	:D 		7I"6799''1aN ( NFF AssF^F
bff^$$F
bff^$$F'ff- !Ghh	*,MNG (fg.r!   r   rb   rO   c                 ^   t         j                  j                  d      }t        |      \  }}t	        | |d      }|j                  ||       t         j                  |j                  d d  t        j                  t        d      5  |j                  ||       d d d        y # 1 sw Y   y xY w)Nr   r  T)r   rg   
warm_startzFloating-point under-/overflowr   )r#   r@   rA   r   r	   r   nanr   r   r   r   )r   rX   rH   r   r   s        r    test_sag_classifier_raises_errorr4    s     ))


#CC0DAq
F
NCGGAqM
 66CIIaL	z)I	J 1  s   B##B,)r:   NFNTF)r:   NNFTFr   )T)Fr   r  numpyr#   r   scipy.specialr   sklearn._loss.lossr   sklearn.baser   sklearn.datasetsr   r   r   sklearn.linear_modelr	   r
   sklearn.linear_model._baser   !sklearn.linear_model._linear_lossr   sklearn.linear_model._sagr   sklearn.linear_model._sag_fastr   sklearn.preprocessingr   r   sklearn.utilsr   r   sklearn.utils._testingr   r   r   sklearn.utils.extmathr   sklearn.utils.fixesr   r  r    r'   r*   r-   r8   rb   rm   ru   r   r   markfilterwarningsparametrizer   r   r   r   rC   r   r   r   r   r  r  r	  r  r%  r0  r4  r)   r!   r   <module>rG     s"    	   # 2  G G : 3 = 8 M > B 
 , .{$1
,
 
	=J 
	rjM4In-0` =>.9$7 : ?$7N =>.9(7 : ?(7V =>.93B : ?3Bx/Ld q*.9& : +&R =>.94B : ?4Bn =>.9DJ : ?DJN .9. :.: =>.9;B : ?;B| =>.9HJ : ?HJV3& (F)/X E6?3 4r!   