
    e!hd                     J   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jT                  jW                  d      ejT                  jY                  de      d               Z-ejT                  jW                  d      ejT                  jY                  de      d               Z.ejT                  jW                  d      ejT                  jY                  de      d               Z/d Z0ejT                  jY                  d e1d            ejT                  jY                  de      d               Z2ejT                  jW                  d      ejT                  jY                  de      d               Z3ejT                  jW                  d      ejT                  jY                  de      d                Z4ejT                  jY                  de      d!        Z5ejT                  jW                  d      ejT                  jY                  de      d"               Z6d# Z7d$ Z8ejT                  jY                  d%d&d'g      d(        Z9y),    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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      k/var/www/html/diagnosisapp-backend/venv/lib/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%   ,   s    q5Lr   c                 D    t        j                  d| |z
  z  | |z
  z        S )N      ?)r   r   r!   s     r   squared_lossr(   0   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_pobjr3   5   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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]   =   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   r5   dtyper6   r8   g&.>)ZeroDivisionErrorr9   r   r:   r?   r   r=   r>   r@   rA   r,   rB   )"rC   r   rD   r.   rE   rF   rH   rG   rI   rJ   random_staterK   rL   rM   rN   last_updatedrO   rS   rP   rQ   wscalerT   rU   c_sumcounterrV   rW   rX   rY   jr   rZ   r[   r\   s"                                     r   
sag_sparserh   }   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      @r5   )axisr   )r   maxsum)rC   r.   rI   classifications       r   get_step_sizero      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}t        |||      }dD ]0  }|d	k(  rd
}nd}t        ||dd|z  | z  |d      }|j                  ||       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       3 y )N      r   皙?rK   centersrb   cluster_stdg?T)r]   rJ   r]   P   ,  dy=r   
   solverrI   tolCmax_iterrb   r5   rJ   )rE   rF   rI   rJ   	   decimal)r   ro   r   fitrh   r   r]   r   
atleast_2d
atleast_1dr   coef_
intercept_)rK   rC   r   r.   rI   rD   r|   rE   clfrM   rP   weights2
intercept2s                r   test_classifier_matchingr      sq   I	11RUVDAqEMa6I! ,IU?F F 'EkI%
 	1'EAI'6!	
  #EAI'6!	 
* --(MM),	==*]]:.
!'399a@!)S^^QG!(CIIqA!*cnnaHY,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 )Nrz      sizer   d   TFrn   ry   r]   )rI   r}   r|   r.   r   rE   rF   rI   )r   r;   r<   normalr,   ro   r   r   rh   r%   r]   r   r   r   )rK   rL   rS   rC   true_wr   r.   rE   rI   rD   r   weights1
intercept1r   r   s                  r   test_regressor_matchingr   /  s"   IJ
))


#C

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      }t        |      }t        d	d
d|z  |z  |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   rq   rr   r   rs   rt   r]   FgHz>rz   r{   )rI   r}   r~   r   rb      r   N)r   r   r   r   r3   r   r"   r   )r   rK   r.   r   rC   r   clf1clf2clf3pobj1pobj2pobj3s               r   )test_sag_pobj_matches_logistic_regressionr   _  s    IEH	11RU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   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/
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 correctlyrs   rz   (   r   gư>Tr   r   r*   Fr   r]   r   )rE   rF   rI   rb   )rE   rF   rG   rI   rb      r   r5   N)r   r;   r<   r   r,   ro   r   r   r   rh   r%   r   r   r+   r   r   )r   r.   rL   rK   r   r}   rI   rS   rC   r-   r   rD   r   r   
spweights1spintercept1
spweights2spintercept2s                     r   %test_sag_regressor_computed_correctlyr     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)r5   rr   r   )rr   r   r   )rr   r   rr   r_   g333333?F   T)squaredr   r   r   )TFrj   rr   r5   r   r   )rK   is_sagar    z:Unknown loss function for SAG solver, got wrong instead ofmatchwrong)r   arrayfloat64r   rl   r9   r   r?   minr	   pytestraises
ValueError)rC   r.   rI   max_squared_summax_squared_sum_rK   rJ   L_sqrL_logmun_sqrmun_logstep_size_sqrstep_size_logstep_size_sqr_step_size_log_msgs                   r   test_get_auto_step_sizer     s   
)Y	2"**EAEM O D1557
I)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   rx   gMbP?r   rs   r5   r'   r]   )r}   r|   r   r.   rb   g\(\?)r}   r|   r   r.   ?N)r   r;   r<   linspacereshaper+   r   r   r   scorerandn)r   r   xminxmaxrK   r}   r   r.   rS   rC   r   r   r   score1score2s                  r   test_sag_regressorr   #  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|      }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 correctlyrs   2   r   Trr   r   rt   r   r5   r]   r   r7   r|   r~   r   r}   rb   rI   r   )rE   rF   rG   rI   r   N)r   ro   r   uniqueonesr   r   r   rh   r   r   r   r+   r   r   )r   r.   rK   rE   r}   rI   rC   r   rD   classesy_tmpr   r   	spweightsspinterceptr   r   s                    r   &test_sag_classifier_computed_correctlyr   N  su    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	        t        d
d|z  |z  ||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                   |   j&                  ||   d       t        |j                   |   j"                  j%                         ||   d       t        |j                   |   j&                  ||   d        y)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     sS    EI
CHM	11RUVDAqadKIiilGEkI%'	
	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# R2((+1177958$O((+66
1DQ((+1177958$O((+66
1DQR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 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/
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||      }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 classrs   r   rq   r   Trr   rz   rt   r   r   r5   r   g?)r5   r   r]   r   r7   )r|   r~   r   r}   rb   rI   class_weight)r   r   )rE   rF   rH   rI   )rE   rF   rG   rH   rI   r   N)r   ro   r   r   r   r   r   r   r   r   fit_transformrh   r   r   r   r+   r   r   )r   r.   rK   rE   r}   rI   rC   r   rD   r   r   r   r   r   leclass_weight_rH   r   r   r   r   s                        r   #test_binary_classifier_class_weightr     s    EIF
CM	12SV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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 classr5   rr   r   r   z;This solver needs samples of at least 2 classes in the datar   r]   )r|   N)r   r   r   r   r   )rC   r   r   s      r   test_classifier_single_classr   .  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   r5   r   Fr   zQCurrent sag implementation does not handle the case step_size * alpha_scaled == 1r]   )r|   r~   rI   r   )rI   r|   r.   )reescaper   r   r   ra   r   r   )rC   r   rI   r.   r   r   r   s          r   test_step_size_alpha_errorr  8  s    
Q!QA	
BAME
))	)C
 UcEkWD	(	4 A }U%HD	(	4 A 	  s   B2B>2B;>Cr|   r]   rJ   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   )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0DAq
F
NCGGAqM
 66CIIaL	z)I	J 1  s   B##B,)r5   NFNTF)r5   NNFTFr   )T):r   r   numpyr   r   sklearn.baser   sklearn.datasetsr   r   r   sklearn.linear_modelr   r   sklearn.linear_model._sagr	   sklearn.multiclassr
   sklearn.preprocessingr   sklearn.utilsr   r   sklearn.utils._testingr   r   r   sklearn.utils.extmathr   sklearn.utils.fixesr   irisr   r"   r%   r(   r3   r]   rh   ro   r   r   markfilterwarningsparametrizer   r   r   r   r>   r   r   r   r   r   r   r  r  r$   r   r   <module>r     s    	    G G : 8 2 . B 
 , .{$1
,
 
	=J 
	rjM3Il-0` =>.9"7 : ?"7J =>.9(7 : ?(7V =>.93B : ?3Bx/Ld q*.9& : +&R =>.93B : ?3Bl =>.9FR : ?FRR .9. :.: =>.9:B : ?:Bz3& E6?3 4r   