o
    ÖtBhCw  ã                   @   sf  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d„ Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.						dLdd „Z/							 dMd!d"„Z0dNd#d$„Z1d%d&„ Z2d'd(„ Z3ej4 5d)¡d*d+„ ƒZ6ej4 5d)¡d,d-„ ƒZ7ej4 5d)¡d.d/„ ƒZ8d0d1„ Z9ej4 :d2e;d3ƒ¡d4d5„ ƒZ<ej4 5d)¡d6d7„ ƒZ=ej4 5d)¡d8d9„ ƒZ>d:d;„ Z?ej4 5d)¡d<d=„ ƒZ@ej4 5d)¡d>d?„ ƒZAd@dA„ ZBdBdC„ ZCdDdE„ ZDdFdG„ ZEej4 :dHd dIg¡dJdK„ ƒZFdS )Oé    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                 C   sD   | | }|dkrt  | ¡|  S |dk r| S | t  |¡d  S )Ng      2@g      2Àç      ð?)ÚmathÚexp)ÚpÚyÚz© r   úz/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/linear_model/tests/test_sag.pyÚ	log_dloss"   s   r   c              	   C   s    t  t  dt  | |  ¡ ¡¡S )Nr   )ÚnpÚmeanÚlogr   ©r   r   r   r   r   Úlog_loss,   s    r#   c                 C   s   | | S )Nr   r"   r   r   r   Úsquared_dloss1   s   r$   c                 C   s   t  d| |  | |  ¡S )Nç      à?)r   r    r"   r   r   r   Úsquared_loss5   s   r&   c                 C   s8   |   ¡ } t || ¡}|||ƒ}|||  | ¡ d 7 }|S )Nç       @)Úravelr   Údot)ÚwÚalphaÚmyXÚmyyÚlossÚpredr   r   r   r   Úget_pobj:   s
   
r0   é   FTc
                 C   sÀ  | j d | j d }
}t | j d ¡}t | j d ¡}t |
|f¡}d}d}t |
¡}tj d¡}d}tƒ }|r:d}t|ƒD ]}t|
ƒD ]–}t| d¡|
 ƒ}| | }| 	|¡ t 
||¡| }|||| ƒ}|d urq||| 9 }|| ||  }|||  }||7 }|||< |	r—||| ddt|ƒ   8 }|rÐ|||  }|||< ||7 }||ddt|ƒ   9 }|	rÄ||| t|ƒ | | 8 }n||| t|ƒ | 8 }||| t|ƒ 8 }qDq>||fS )Nr   r1   ç        éM   r   ç{®Gáz„?)Ú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_correctionr   r   r   ÚsagB   sR   

þärY   c           "      C   sÎ  || dkr
t dƒ‚| jd | jd }}t |¡}t |¡}tj|td}t |¡}t|
ƒ}d}d}d}d}tƒ }t || ¡}|rEd}d}t|ƒD ]Y}t|ƒD ]Q}t| d¡| ƒ}| | }| 	|¡ |dkr¥t|ƒD ]5}|| dkrˆ||  ||d  ||  8  < n||  ||d  ||| d   ||  8  < |||< qo|t 
||¡ | }|||| ƒ}|d urÀ||| 9 }|| } | || |  }!||!7 }|	rït|ƒD ]}||  |!| | ddt|ƒ   | 8  < qÖ|r&|||  }!||!7 }|!|ddt|ƒ   9 }!|	r||| t|ƒ | |! 8 }n||| t|ƒ | 8 }|||< |d||  9 }|dkrB||t|ƒ  |d< n||d  ||t|ƒ   ||< |dkr |dk r t|ƒD ]5}|| dkrx||  || ||  8  < n||  || ||| d   ||  8  < |d ||< q`d||< ||9 }d}|d7 }qRqKt|ƒD ]4}|| dkrÅ||  ||d  ||  8  < qª||  ||d  ||| d   ||  8  < qª||9 }||fS )	Nr   z:Sparse sag does not handle the case step_size * alpha == 1r   r1   ©Údtyper2   r4   g•Ö&è.>)ÚZeroDivisionErrorr5   r   r6   r;   r   r9   r:   r<   r=   r)   r>   )"r?   r   r@   r+   rA   rB   rD   rC   rE   rF   Úrandom_staterG   rH   rI   rJ   Úlast_updatedrK   rO   rL   rM   ÚwscalerP   rQ   Úc_sumÚcounterrR   rS   rT   rU   Újr   rV   rW   rX   r   r   r   Ú
sag_sparse‚   s²   ÿ



"þ
ÿþýÿþ
 þ
¾D$þrc   c                 C   sP   |rdt  t j| |  dd¡| d|   S dt  t j| |  dd¡| |  S )Nç      @r1   ©Úaxisr   )r   ÚmaxÚsum)r?   r+   rE   Úclassificationr   r   r   Úget_step_size÷   s   ($rj   c                  C   s*  d} t | dddd\}}d||dk< d}d}t|||ƒ}d	D ]t}|d
kr'd}nd}t||dd| |  |ddd}| ||¡ t|||||t||dkd\}	}
t|||||t||dkd\}}t |	¡}	t 	|
¡}
t |¡}t 	|¡}t
|	|jdd t
|
|jdd t
||jdd t
||jdd qd S )Né   é   r   çš™™™™™¹?©rG   Úcentersr]   Úcluster_stdéÿÿÿÿçš™™™™™ñ?T)rY   rF   rY   éP   é,  ç•dyáý¥=r   é
   Úovr©ÚsolverrE   ÚtolÚCÚmax_iterr]   Úmulti_classrF   )rA   rB   rE   rF   é	   ©Údecimal)r   rj   r   Úfitrc   r   rY   r   Ú
atleast_2dÚ
atleast_1dr   Úcoef_Ú
intercept_)rG   r?   r   r+   rE   r@   ry   rA   ÚclfrI   rL   Úweights2Ú
intercept2r   r   r   Útest_classifier_matchingþ   sb   
ù	
ø

ø




Ór‰   c               	   C   sà   d} d}t j d¡}|j| |fd}|j|d}| |¡}d}d}d}t|||dd}	t|d	d
||  |d}
|
 ||¡ t|||	||t	|d\}}t
|||	||t	|d\}}t||
jƒ t||
jƒ t||
jƒ t||
jƒ d S )Nrv   é   ©Úsizer   éd   TF©ri   ru   rY   )rE   rz   ry   r+   r|   ©rA   rB   rE   )r   r7   r8   Únormalr)   rj   r   r   rc   r$   rY   r   r„   r…   )rG   rH   rO   r?   Útrue_wr   r+   rA   rE   r@   r†   Úweights1Ú
intercept1r‡   rˆ   r   r   r   Útest_regressor_matching5  sP   
û
ù	
ù
r”   zignore:The max_iter was reachedc               	   C   sð   d} d}d}t | dddd\}}tdd	d
d| |  |ddd}t|ƒ}td	d
d| |  |ddd}| ||¡ | t |¡|¡ | ||¡ t|j|||tƒ}t|j|||tƒ}	t|j|||tƒ}
t	||	dd t	|	|
dd t	|
|dd dS )z%tests if the sag pobj matches log regr   r   rk   rl   r   rm   rn   rY   FgH¯¼šò×z>rv   rw   rx   )rE   rz   r{   r|   r]   r}   é   r   N)
r   r   r   r   ÚspÚ
csr_matrixr0   r„   r#   r   )rG   r+   r|   r?   r   Úclf1Úclf2Úclf3Úpobj1Úpobj2Úpobj3r   r   r   Ú)test_sag_pobj_matches_logistic_regressione  s>   
ù	
ú	rž   c                  C   s  d} d}d}d}d}t j d¡}|j| |fd}|j|d}| |¡}t|dd||dd	}	t|	ƒ}
t|d
d||dd	}|	 ||¡ |
 t 	|¡|¡ | ||¡ t
|	j|||tƒ}t
|
j|||tƒ}t
|j|||tƒ}t||dd t||dd t||dd dS )z'tests if the sag pobj matches ridge regr   rv   r   Fr‹   ru   rY   é*   ©rE   rz   ry   r+   r|   r]   çñhãˆµøä>Úlsqrr•   r   N)r   r7   r8   r   r)   r   r   r   r–   r—   r0   r„   r&   r   )rG   rH   r+   rA   rE   rO   r?   r‘   r   r˜   r™   rš   r›   rœ   r   r   r   r   Ú&test_sag_pobj_matches_ridge_regression  sF   
úú	r£   c                  C   s  d} d}d}d}d}d}t j d¡}|j||fd}|j|d}t  ||¡d	 }	t|| |d
d}
t||d| | ||d}t|ƒ}| ||	¡ | t	 
|¡|	¡ t||	|
| |t||d\}}t||	|
| |td||d	\}}t|j ¡ | ¡ dd t|j|dd dS )z0tests if the sag regressor is computed correctlyrm   rv   é(   r   gíµ ÷Æ°>Tr   r‹   r'   FrŽ   rY   r    )rA   rB   rE   r]   )rA   rB   rC   rE   r]   é   r   r1   N)r   r7   r8   r   r)   rj   r   r   r   r–   r—   rc   r$   r   r„   r(   r   r…   )r+   rH   rG   r|   rz   rE   rO   r?   r*   r   r@   r˜   r™   Ú
spweights1Úspintercept1Ú
spweights2Úspintercept2r   r   r   Ú%test_sag_regressor_computed_correctly¹  sZ   ú
ø
÷rª   c               
   C   s’  t jg d¢g d¢g d¢gt jd} d}d}d}t| dd	 ¡ }| jd
 }t||dd dD ]x}dD ]s}|rl|| t|ƒ }|d|  t|ƒ d }td| | |ƒ}	td| | |ƒ}
dd| |	  }dd| |
  }nd|| t|ƒ  }d|d|  t|ƒ  }t	||d|||d}t	||d|||d}t||dd t||dd q1q-d}t
jt|d t	||d|ƒ W d   ƒ d S 1 sÂw   Y  d S )N)r1   rl   r¥   )rl   r¥   r•   )rl   r¥   rl   rZ   ç333333ó?Fé   T)Úsquaredr   r•   r   )TFrd   rl   r1   r   r­   )rG   Úis_sagar!   z:Unknown loss function for SAG solver, got wrong instead of©ÚmatchÚwrong)r   ÚarrayÚfloat64r
   rg   r5   r   r;   Úminr   ÚpytestÚraisesÚ
ValueError)r?   r+   rE   Úmax_squared_sumÚmax_squared_sum_rG   rF   ÚL_sqrÚL_logÚmun_sqrÚmun_logÚstep_size_sqrÚstep_size_logÚstep_size_sqr_Ústep_size_log_Úmsgr   r   r   Útest_get_auto_step_sizeö  sV   "
ÿúú	à""ÿrÃ   Úseedr¥   c                 C   s<  d\}}d}d}d}d}t j | ¡}t  |||¡ |d¡}d| ¡  }	t|d||| |d	}
t|
ƒ}|
 ||	¡ | t	 
|¡|	¡ |
 ||	¡}| ||	¡}|d
ksSJ ‚|d
ksYJ ‚d| ¡  | |d¡ ¡  }	t|d||| d}
t|
ƒ}|
 ||	¡ | t	 
|¡|	¡ |
 ||	¡}| ||	¡}|dks–J ‚|dksœJ ‚dS )z(tests if the sag regressor performs well)éûÿÿÿrŠ   rt   gü©ñÒMbP?r   rm   r1   r%   rY   )rz   ry   r|   r+   r]   g\Âõ(\ï?)rz   ry   r|   r+   çÍÌÌÌÌÌÜ?N)r   r7   r8   ÚlinspaceÚreshaper(   r   r   r   r–   r—   ÚscoreÚrandn)rÄ   ÚxminÚxmaxrG   rz   r|   r+   rO   r?   r   r˜   r™   Úscore1Úscore2r   r   r   Útest_sag_regressor(  s>   ûrÏ   c               
   C   s.  d} d}d}d}d}t |dddd\}}t|| |dd}t |¡}t |¡}	d	|	||d
 k< |	}tdd|  | ||d|dd}
t|
ƒ}|
 ||¡ | t 	|¡|¡ t
|||| |t|d\}}t
|||| |td|d\}}t|
j ¡ | ¡ dd t|
j|d
d t|j ¡ | ¡ dd t|j|d
d dS )z4tests if the binary classifier is computed correctlyrm   é2   r¡   Trl   r   rn   rŽ   rq   r1   rY   r   r3   rw   ©ry   r{   r|   rz   r]   rE   r}   r   )rA   rB   rC   rE   r   N)r   rj   r   ÚuniqueÚonesr   r   r   r–   r—   rc   r   r   r„   r(   r   r…   )r+   rG   rA   rz   rE   r?   r   r@   ÚclassesÚy_tmpr˜   r™   Ú	spweightsÚspinterceptr¨   r©   r   r   r   Ú&test_sag_classifier_computed_correctlyR  s\   


ù	
ù	
ørØ   c                  C   sÂ  d} d}d}d}d}t |dddd\}}t|| |dd	}t |¡}td
d|  | ||d|dd}	t|	ƒ}
|	 ||¡ |
 t |¡|¡ g }g }g }g }|D ]<}t 	|¡}d|||k< t
|||| t||d\}}t
|||| t|d|d\}}| |¡ | |¡ | |¡ | |¡ qMt |¡}t |¡}t |¡}t |¡}t|ƒD ]<\}}t|	j|  ¡ ||  ¡ dd t|	j| || dd t|
j|  ¡ ||  ¡ dd t|
j| || dd q¢dS )z8tests if the multiclass classifier is computed correctlyrm   rk   r¡   r¤   Tr¥   r   rn   rŽ   rY   r   r3   rw   rÑ   rq   )rB   rA   rE   )rB   rA   rC   rE   rl   r   r1   N)r   rj   r   rÒ   r   r   r   r–   r—   rÓ   rc   r   ÚappendÚvstackr²   Ú	enumerater   r„   r(   r   r…   )r+   rG   rz   r|   rE   r?   r   r@   rÔ   r˜   r™   Úcoef1r“   Úcoef2rˆ   ÚclÚ	y_encodedr¦   r§   r¨   r©   Úir   r   r   Ú&test_sag_multiclass_computed_correctlyŠ  sx   

ù	

ù	
ø







  ûrá   c                  C   sÆ   d} d}d}d}d}t j d¡}|j||fd}|j|d}t  ||¡}t  |¡}tdd	|  | ||d
d}	t|	ƒ}
|	 ||¡ |
 t	 
|¡|¡ |	 |¡}|
 |¡}t||dd t||dd dS )z(tests if classifier results match targetrm   rk   rv   r4   éÈ   r   r‹   rY   r   r3   )ry   r{   r|   rz   r]   é   r   N)r   r7   r8   r   r)   Úsignr   r   r   r–   r—   Úpredictr   )r+   rH   rG   rz   r|   rO   r?   r*   r   r˜   r™   Úpred1Úpred2r   r   r   Útest_classifier_resultsÒ  s0   

û

rè   c                  C   sf  d} d}d}d}d}t |dddd\}}t|| |dd	}t |¡}t |¡}	d
|	||d k< |	}dddœ}
tdd|  | ||d|d|
d}t|ƒ}| ||¡ | t 	|¡|¡ t
ƒ }t|
t |¡|d}|| |¡ }t|||| |t||d\}}t|||| |td||d	\}}t|j ¡ | ¡ dd t|j|dd t|j ¡ | ¡ dd t|j|dd dS )z8tests binary classifier with classweights for each classrm   rÐ   rk   r¡   Trl   rv   rn   rŽ   rq   r1   rÆ   çš™™™™™á?)r1   rq   rY   r   r3   rw   ©ry   r{   r|   rz   r]   rE   r}   Úclass_weight©rÔ   r   )rA   rB   rD   rE   )rA   rB   rC   rD   rE   r   N)r   rj   r   rÒ   rÓ   r   r   r   r–   r—   r   r   Úfit_transformrc   r   r   r„   r(   r   r…   )r+   rG   rA   rz   rE   r?   r   r@   rÔ   rÕ   rë   r˜   r™   ÚleÚclass_weight_rD   rÖ   r×   r¨   r©   r   r   r   Ú#test_binary_classifier_class_weightï  sj   



ø

ø

÷rð   c                  C   sø  d} d}d}d}ddddœ}d	}t |d
ddd\}}t|| |d	d}t |¡}	tdd|  | ||d|d|d}
t|
ƒ}|
 ||¡ | t |¡|¡ t	ƒ }t
|t |¡|d}|| |¡ }g }g }g }g }|	D ]<}t |¡}d|||k< t|||| |t|d\}}t|||| |t|d	d\}}| |¡ | |¡ | |¡ | |¡ qht |¡}t |¡}t |¡}t |¡}t|	ƒD ]<\}}t|
j|  ¡ ||  ¡ dd t|
j| || dd t|j|  ¡ ||  ¡ dd t|j| || dd q½dS )z1tests multiclass with classweights for each classrm   rk   r¡   rÐ   rÆ   ré   g      è?)r   r1   rl   Tr¥   r   rn   rŽ   rY   r   r3   rw   rê   rì   rq   )rA   rB   rD   )rA   rB   rD   rC   rl   r   r1   N)r   rj   r   rÒ   r   r   r   r–   r—   r   r   rí   rÓ   rc   r   rÙ   rÚ   r²   rÛ   r   r„   r(   r   r…   )r+   rG   rz   r|   rë   rE   r?   r   r@   rÔ   r˜   r™   rî   rï   rD   rÜ   r“   rÝ   rˆ   rÞ   rß   r¦   r§   r¨   r©   rà   r   r   r   Ú'test_multiclass_classifier_class_weight.  s‚   

ø


ù	
ø







  ûrñ   c                  C   sb   ddgddgg} ddg}d}t jt|d tdd | |¡ W d	  ƒ d	S 1 s*w   Y  d	S )
z1tests if ValueError is thrown with only one classr1   rl   r¥   r•   z;This solver needs samples of at least 2 classes in the datar¯   rY   )ry   N)rµ   r¶   r·   r   r   )r?   r   rÂ   r   r   r   Útest_classifier_single_classz  s   "ÿrò   c                  C   sÄ   ddgddgg} ddg}d}d}t  d¡}tdd| |d}tjt|d	 | | |¡ W d   ƒ n1 s6w   Y  t|d|d
}tjt|d	 | | |¡ W d   ƒ d S 1 s[w   Y  d S )Nr   r1   rq   Fr   zQCurrent sag implementation does not handle the case step_size * alpha_scaled == 1rY   )ry   r{   rE   r¯   )rE   ry   r+   )ÚreÚescaper   rµ   r¶   r\   r   r   )r?   r   rE   r+   rÂ   r˜   r™   r   r   r   Útest_step_size_alpha_error„  s   ÿÿ"ÿrõ   c                  C   sô   t jt j tj¡} }| j\}}tt |¡ƒ}t	dƒ}| 
||¡}| 
|¡}| 
|¡}t ||¡ t| ||dd\}	}
t|	|||||ƒ\}}tt|ddd}t ||f¡j}|j|| |d|d\}}|d d …d d…f j}t||ƒ t||ƒ d S )	NrŸ   ©r]   ©Ú	n_classesT©Ú	base_lossrE   r2   ©Úl2_reg_strengthrD   rq   )ÚirisÚdataÚtargetÚastyper   r³   r5   r>   rÒ   r   rÊ   Úabsr	   r   r   r   rÚ   ÚTÚloss_gradientr   r   )r?   r   rG   rH   rø   rO   rI   rL   Úsample_weightsÚdatasetÚ_Úloss_1Úgrad_1r.   Úweights_interceptÚloss_2Úgrad_2r   r   r   Útest_multinomial_loss—  s.   


ÿþ

ÿ
r  c                  C   s’  d} t  ddgddgddgddgg¡}t jg d¢t jd}tƒ }| |¡}t  g d	¢g d
¢g¡}t  g d¢¡}t  g d¢¡}t  ||¡| }t|dd}	||	d d …t jf  }
|d d …t jf |
 |  ¡  }|d d …t jf t  	|
¡|  }t  |j
|¡}tt| ddd}t  ||f¡j
}|j|||d|d\}}|d d …d d…f j
}t||ƒ t||ƒ d}t  g d¢g d¢g¡}t||ƒ t||ƒ d S )Nr¥   rr   gš™™™™™@gš™™™™™Àgffffff
@gš™™™™™À)r   r1   rl   r   rZ   )rm   gš™™™™™É?g333333Ó?)rr   r«   gÍÌÌÌÌÌô¿)r   r   gš™™™™™É¿)çš™™™™™é?r1   r1   r  r1   re   r÷   Trù   r2   rû   rq   gc¦>1X\'@)g¯>úîÖá¿g6’á
èù¿gÇØ	/Ái@)gúbïÅíì¿g›sô@g<FzQkÀ)r   r²   r³   r   rí   r)   r   Únewaxisrh   r   r  r   r   rÚ   r  r   r   )rø   r?   r   ÚlbinÚY_binrI   rL   r  Ú
predictionÚlogsumexp_predictionr   r  Údiffr  r.   r	  r
  r  Úloss_gtÚgrad_gtr   r   r   Ú"test_multinomial_loss_ground_truth¸  s>   "
  þ

ÿ

ÿ
r  ry   rF   c                 C   s„   t j d¡}t|d\}}t| |dd}| ||¡ t j|jd d …< tj	t
dd | ||¡ W d   ƒ d S 1 s;w   Y  d S )NrŸ   rö   T)ry   r]   Ú
warm_startzFloating-point under-/overflowr¯   )r   r7   r8   r   r   r   Únanr„   rµ   r¶   r·   )ry   rO   r?   r   r†   r   r   r   Ú test_sag_classifier_raises_errorá  s   "ÿr  )r1   NFNTF)r1   NNFTFr   )T)Gr   ró   rµ   Únumpyr   Úscipy.sparserC   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&   r0   rY   rc   rj   r‰   r”   ÚmarkÚfilterwarningsrž   r£   rª   rÃ   Úparametrizer:   rÏ   rØ   rá   rè   rð   rñ   rò   rõ   r  r  r  r   r   r   r   Ú<module>   sŠ   

öE
õ
u7
0

'

+
<2

)

7
G


>
K
!)