a
    hd                     @   sL  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d Z dd Z!dd Z"dd Z#dd Z$dAddZ%dBddZ&dCddZ'dd  Z(d!d" Z)ej*+d#ej*,d$ed%d& Z-ej*+d#ej*,d$ed'd( Z.ej*+d#ej*,d$ed)d* Z/d+d, Z0ej*,d-e1d.ej*,d$ed/d0 Z2ej*+d#ej*,d$ed1d2 Z3ej*+d#ej*,d$ed3d4 Z4ej*,d$ed5d6 Z5ej*+d#ej*,d$ed7d8 Z6d9d: Z7d;d< Z8ej*,d=dd>gd?d@ Z9dS )D    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                 C   sD   | | }|dkr"t | |  S |dk r0| S | t |d  S )Ng      2@g      2      ?)mathexp)pyz r   _/var/www/html/assistant/venv/lib/python3.9/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_dloss,   s    r    c                 C   s   t d| |  | |  S )N      ?)r   r   r   r   r   r   squared_loss0   s    r"   c                 C   s8   |   } t|| }|||}||| |  d 7 }|S )N       @)ravelr   dot)walphaZmyXZmyyZlosspredr   r   r   r   get_pobj5   s
    
r)      FTc
                 C   s  | j d | j d  }
}t| j d }t| j d }t|
|f}d}d}t|
}tjd}d}t }|rtd}t|D ]@}t|
D ]0}t| |
 }| | }|	| t
||| }|||| }|d ur||| 9 }|| ||  }|||  }||7 }|||< |	r2||| ddt|   8 }|r|||  }|||< ||7 }||ddt|   9 }|	r||| t| | | 8 }n||| t| | 8 }||| t| 8 }qq|||fS )Nr   r*           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_gradientZintercept_gradient_memoryrngdecayseenepochkidxentryr   gradientupdategradient_correctionr   r   r   sag=   sP    

rQ   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|| }|rd}d}t|D ]}t|D ]}t| | }| | }|	| |dkrLt|D ]l}|| dkr||  ||d  ||  8  < n0||  ||d  ||| d   ||  8  < |||< q|t
|| | }|||| }|d ur||| 9 }|| } | || |  }!||!7 }|	rt|D ]2}||  |!| | ddt|   | 8  < q|rT|||  }!||!7 }|!|ddt|   9 }!|	r<||| t| | |! 8 }n||| t| | 8 }|||< |d||  9 }|dkr||t|  |d< n ||d  ||t|   ||< |dkrH|dk rHt|D ]j}|| dkr||  || ||  8  < n,||  || ||| d   ||  8  < |d ||< qd||< ||9 }d}|d7 }qqt|D ]f}|| dkr||  ||d  ||  8  < n0||  ||d  ||| d   ||  8  < q\||9 }||fS )	Nr   z:Sparse sag does not handle the case step_size * alpha == 1r   r*   Zdtyper+   r-   g&.>)ZeroDivisionErrorr.   r   r/   r4   r   r2   r3   r5   r6   r%   r7   )"r8   r   r9   r'   r:   r;   r=   r<   r>   r?   random_stater@   rA   rB   rC   Zlast_updatedrD   rG   rE   rF   ZwscalerH   rI   Zc_sumcounterrJ   rK   rL   rM   jr   rN   rO   rP   r   r   r   
sag_sparse}   s    




"



 "rW   c                 C   sT   |r,dt t j| |  dd| d|   S dt t j| |  dd| |  S d S )N      @r*   )Zaxisr   )r   maxsum)r8   r'   r>   classificationr   r   r   get_step_size   s    (r\   c                  C   s,  d} t | dddd\}}d}d}t|||}dD ]}|d	krBd
}nd}t||dd| |  |dd}||| t|d| d |||t||dkd\}	}
t|d| d |||t||dkd\}}t|	}	t	|
}
t|}t	|}t
|	|jdd t
|
|jdd t
||jdd t
||jdd q0d S )N      r   皙?r@   ZcentersrT   Zcluster_stdg?T)rQ   r?   rQ   P   ,  dy=r   
   solverr>   tolCmax_iterrT   r*   r?   )r:   r;   r>   r?   	   decimal)r   r\   r   fitrW   r   rQ   r   Z
atleast_2dZ
atleast_1dr   coef_
intercept_)r@   r8   r   r'   r>   r9   rf   r:   clfrB   rE   weights2
intercept2r   r   r   test_classifier_matching   s\    










rs   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 )Nrd      sizer   d   TFr[   rc   rQ   )r>   rg   rf   r'   ri   r:   r;   r>   )r   r0   r1   normalr%   r\   r   rm   rW   r    rQ   r   rn   ro   )r@   rA   rG   r8   true_wr   r'   r:   r>   r9   rp   Zweights1
intercept1rq   rr   r   r   r   test_regressor_matching/  sP    

	

r}   zignore:The max_iter was reachedcsr_containerc                 C   s   d}d}d}t |dddd\}}tdd	d
d| | |dd}t|}td	d
d| | |dd}||| || || ||| 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 regrw   r   r]   r^   r   r_   r`   rQ   FgHz>rd   re   )r>   rg   rh   ri   rT      rk   N)r   r   r   rm   r)   rn   r   r   )r~   r@   r'   ri   r8   r   clf1clf2clf3pobj1pobj2pobj3r   r   r   )test_sag_pobj_matches_logistic_regression_  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|
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 regrw   rd   r   Fru   rc   rQ   *   r>   rg   rf   r'   ri   rT   h㈵>Zlsqrr   rk   N)r   r0   r1   rz   r%   r   r   rm   r)   rn   r"   r   )r~   r@   rA   r'   r:   r>   rG   r8   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
||d\}}t	||
|||t
d||d	\}}t|j | dd t|j|dd dS )z0tests if the sag regressor is computed correctlyr_   rd   (   rw   gư>Tr   ru   r#   Frx   rQ   r   )r:   r;   r>   rT   )r:   r;   r<   r>   rT      rk   r*   N)r   r0   r1   rz   r%   r\   r   r   rm   rW   r    r   rn   r$   r   ro   )r~   r'   rA   r@   ri   rg   r>   rG   r8   r&   r   r9   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 ]}dD ]}|r|| 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 qbqZd}t
jt|d t	||d| W d    n1 s0    Y  d S )N)r*   r^   r   )r^   r   r   )r^   r   r^   rR   g333333?F   T)squaredr   r   rk   )TFrX   r^   r*   r   r   )r@   Zis_sagar   z:Unknown loss function for SAG solver, got wrong instead ofmatchZwrong)r   arrayZfloat64r   rY   r.   r   r4   minr   pytestraises
ValueError)r8   r'   r>   Zmax_squared_sumZmax_squared_sum_r@   r?   ZL_sqrZL_logZmun_sqrZmun_logZstep_size_sqrZstep_size_logZstep_size_sqr_Zstep_size_log_msgr   r   r   test_get_auto_step_size  sR    "
	r   seedr   c                 C   s<  d\}}d}d}d}d}t j| }t ||||d}	d|	  }
t|d||| |d	}t|}||	|
 |||	|
 |	|	|
}|	|	|
}|d
ksJ |d
ksJ d|	  |
|d  }
t|d||| d}t|}||	|
 |||	|
 |	|	|
}|	|	|
}|dks*J |dks8J dS )z(tests if the sag regressor performs well)rt   rb   gMbP?rw   r_   r*   r!   rQ   )rg   rf   ri   r'   rT   g\(\?)rg   rf   ri   r'   ?N)r   r0   r1   ZlinspaceZreshaper$   r   r   rm   ZscoreZrandn)r   r~   ZxminZxmaxr@   rg   ri   r'   rG   r8   r   r   r   Zscore1Z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}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 correctlyr_   2   r   Tr^   r   r`   rx   r*   rQ   r   r,   rf   rh   ri   rg   rT   r>   ry   )r:   r;   r<   r>   rk   N)r   r\   r   uniqueonesr   r   rm   rW   r   r   rn   r$   r   ro   )r~   r'   r@   r:   rg   r>   r8   r   r9   classesy_tmpr   r   	spweightsspinterceptr   r   r   r   r   &test_sag_classifier_computed_correctlyN  sZ    



	
r   c                 C   s  d}d}d}d}d}t |dddd\}}t|||dd	}t|}	ttd
d| | ||d|d}
t|
}|
|| || || g }g }g }g }|	D ]x}t|}d|||k< t	||||t
||d\}}t	||||t
|d|d\}}|| || || || qt|}t|}t|}t|}t|	D ]z\}}t|
j| j || dd t|
j| j|| dd t|j| j || dd t|j| j|| dd qDdS )z8tests if the multiclass classifier is computed correctlyr_   r]   r   F   Tr   r   r`   rx   rQ   r   r,   r   r   )r;   r:   r>   )r;   r:   r<   r>   r-   )Zrtolr!   N)r   r\   r   r   r	   r   r   rm   r   rW   r   appendZvstackr   	enumerater   Zestimators_rn   r$   ro   )r~   r'   r@   rg   ri   r>   r8   r   r9   r   r   r   Zcoef1r|   Zcoef2rr   clZ	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
||	dd t
||	dd dS )z(tests if classifier results match targetr_   r]   rd   r-      r   ru   rQ   r   r,   )rf   rh   ri   rg   rT      rk   N)r   r0   r1   rz   r%   signr   r   rm   Zpredictr   )r~   r'   rA   r@   rg   ri   rG   r8   r&   r   r   r   Zpred1Zpred2r   r   r   test_classifier_results  s0    



r   c                 C   sb  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}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 classr_   r   r]   r   Tr^   rd   r`   rx   r   r*   r   g?)r*   r   rQ   r   r,   )rf   rh   ri   rg   rT   r>   class_weight)r   r   )r:   r;   r=   r>   )r:   r;   r<   r=   r>   rk   N)r   r\   r   r   r   r   r   rm   r
   r   Zfit_transformrW   r   r   rn   r$   r   ro   )r~   r'   r@   r:   rg   r>   r8   r   r9   r   r   r   r   r   leZclass_weight_r=   r   r   r   r   r   r   r   #test_binary_classifier_class_weight  sh    



	


r   c                  C   s`   ddgddgg} ddg}d}t jt|d" tdd| | W d	   n1 sR0    Y  d	S )
z1tests if ValueError is thrown with only one classr*   r^   r   r   z;This solver needs samples of at least 2 classes in the datar   rQ   )rf   N)r   r   r   r   rm   )r8   r   r   r   r   r   test_classifier_single_class.  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 sl0    Y  t|d|d
}tjt|d	 || | W d    n1 s0    Y  d S )Nr   r*   r   Fr   zQCurrent sag implementation does not handle the case step_size * alpha_scaled == 1rQ   )rf   rh   r>   r   )r>   rf   r'   )reescaper   r   r   rS   rm   r   )r8   r   r>   r'   r   r   r   r   r   r   test_step_size_alpha_error8  s    *r   rf   r?   c                 C   s   t jd}t|d\}}t| |dd}||| t j|jd d < tj	t
dd ||| W d    n1 st0    Y  d S )Nr   )rT   T)rf   rT   Z
warm_startzFloating-point under-/overflowr   )r   r0   r1   r   r   rm   nanrn   r   r   r   )rf   rG   r8   r   rp   r   r   r    test_sag_classifier_raises_errorK  s    r   )r*   NFNTF)r*   NNFTFr   )T):r   r   numpyr   r   Zsklearn.baser   Zsklearn.datasetsr   r   r   Zsklearn.linear_modelr   r   Zsklearn.linear_model._sagr   Zsklearn.multiclassr	   Zsklearn.preprocessingr
   Zsklearn.utilsr   r   Zsklearn.utils._testingr   r   r   Zsklearn.utils.extmathr   Zsklearn.utils.fixesr   Zirisr   r   r    r"   r)   rQ   rW   r\   rs   r}   markfilterwarningsZparametrizer   r   r   r   r3   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   
      
E       
u
60
%
+
<2)
6
I

=
