o
    \id                     @   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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 r| S | t |d  S )Ng      2@g      2      ?)mathexp)pyz r   /var/www/www-root/data/www/176.119.141.140/sports-predictor/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_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alphamyXmyy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 }|r:d}t|D ]}t|
D ]}t| |
 }| | }|	| t
||| }|||| }|d urp||| 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   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_gradientintercept_gradient_memoryrngdecayseenepochkidxentryr   gradientupdategradient_correctionr   r   r   sag=   sR   

rU   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 ]X}t|D ]P}t| | }| | }|	| |dkrt|D ]5}|| dkr||  ||d  ||  8  < n||  ||d  ||| d   ||  8  < |||< qn|t
|| | }|||| }|d ur||| 9 }|| } | || |  }!||!7 }|	rt|D ]}||  |!| | ddt|   | 8  < q|r%|||  }!||!7 }|!|ddt|   9 }!|	r||| t| | |! 8 }n||| t| | 8 }|||< |d||  9 }|dkrA||t|  |d< n||d  ||t|   ||< |dkr|dk rt|D ]5}|| dkrw||  || ||  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   r-   dtyper.   r0   g&.>)ZeroDivisionErrorr1   r   r2   r7   r   r5   r6   r8   r9   r%   r:   )"r;   r   r<   r'   r=   r>   r@   r?   rA   rB   random_staterC   rD   rE   rF   last_updatedrG   rK   rH   rI   wscalerL   rM   c_sumcounterrN   rO   rP   rQ   jr   rR   rS   rT   r   r   r   
sag_sparse}   s   



"

 
D$r_   c                 C   sP   |rdt t j| |  dd| d|   S dt t j| |  dd| |  S )N      @r-   )axisr   )r   maxsum)r;   r'   rA   classificationr   r   r   get_step_size   s   ($re   c                  C   s,  d} t | dddd\}}d}d}t|||}dD ]{}|d	kr!d
}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 qd S )N      r   皙?rC   centersrY   cluster_stdg?T)rU   rB   rU   P   ,  dy=r   
   solverrA   tolCmax_iterrY   r-   rB   )r=   r>   rA   rB   	   decimal)r   re   r   fitr_   r   rU   r   
atleast_2d
atleast_1dr   coef_
intercept_)rC   r;   r   r'   rA   r<   rq   r=   clfrE   rH   weights2
intercept2r   r   r   test_classifier_matching   s^   










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 )Nro      sizer   d   TFrd   rn   rU   )rA   rr   rq   r'   rt   r=   r>   rA   )r   r3   r4   normalr%   re   r   rx   r_   r    rU   r   r{   r|   )rC   rD   rK   r;   true_wr   r'   r=   rA   r<   r}   weights1
intercept1r~   r   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 regr   r   rf   rg   r   rh   ri   rU   FgHz>ro   rp   )rA   rr   rs   rt   rY      rv   N)r   r   r   rx   r,   r{   r   r   )r   rC   r'   rt   r;   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 regr   ro   r   Fr   rn   rU   *   rA   rr   rq   r'   rt   rY   h㈵>lsqrr   rv   N)r   r3   r4   r   r%   r   r   rx   r,   r{   r"   r   )r   rC   rD   r'   r=   rA   rK   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
||d\}}t	||
|||t
d||d	\}}t|j | dd t|j|dd dS )z0tests if the sag regressor is computed correctlyrh   ro   (   r   gư>Tr   r   r#   Fr   rU   r   )r=   r>   rA   rY   )r=   r>   r?   rA   rY      rv   r-   N)r   r3   r4   r   r%   re   r   r   rx   r_   r    r   r{   r$   r   r|   )r   r'   rD   rC   rt   rr   rA   rK   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 sw   Y  d S )N)r-   rg   r   )rg   r   r   )rg   r   rg   rV   g333333?F   T)squaredr   r   rv   )TFr`   rg   r-   r   r   )rC   is_sagar   z:Unknown loss function for SAG solver, got wrong instead ofmatchwrong)r   arrayfloat64r   rb   r1   r   r7   minr   pytestraises
ValueError)r;   r'   rA   max_squared_summax_squared_sum_rC   rB   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   s8  d\}}d}d}d}d}t j| }t ||||d}	d|	  }
t|d||| |d	}t|}||	|
 |||	|
 |	|	|
}|	|	|
}|d
ksRJ |d
ksXJ d|	  |
|d  }
t|d||| d}t|}||	|
 |||	|
 |	|	|
}|	|	|
}|dksJ |dksJ dS )z(tests if the sag regressor performs well)r   rm   gMbP?r   rh   r-   r!   rU   )rr   rq   rt   r'   rY   g\(\?)rr   rq   rt   r'   ?N)r   r3   r4   linspacereshaper$   r   r   rx   scorerandn)r   r   xminxmaxrC   rr   rt   r'   rK   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}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 correctlyrh   2   r   Trg   r   ri   r   r-   rU   r   r/   rq   rs   rt   rr   rY   rA   r   )r=   r>   r?   rA   rv   N)r   re   r   uniqueonesr   r   rx   r_   r   r   r{   r$   r   r|   )r   r'   rC   r=   rr   rA   r;   r   r<   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 ]<}t|}d|||k< t	||||t
||d\}}t	||||t
|d|d\}}|| || || || qMt|}t|}t|}t|}t|	D ]<\}}t|
j| j || dd t|
j| j|| dd t|j| j || dd t|j| j|| dd qdS )z8tests if the multiclass classifier is computed correctlyrh   rf   r   F   Tr   r   ri   r   rU   r   r/   r   r   )r>   r=   rA   )r>   r=   r?   rA   r0   )rtolr!   N)r   re   r   r   r	   r   r   rx   r   r_   r   appendvstackr   	enumerater   estimators_r{   r$   r|   )r   r'   rC   rr   rt   rA   r;   r   r<   r   r   r   coef1r   coef2r   cl	y_encodedr   r   r   r   ir   r   r   &test_sag_multiclass_computed_correctly  sz   




	








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 targetrh   rf   ro   r0      r   r   rU   r   r/   )rq   rs   rt   rr   rY      rv   N)r   r3   r4   r   r%   signr   r   rx   predictr   )r   r'   rD   rC   rr   rt   rK   r;   r&   r   r   r   pred1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 classrh   r   rf   r   Trg   ro   ri   r   r   r-   r   g?)r-   r   rU   r   r/   )rq   rs   rt   rr   rY   rA   class_weight)r   r   )r=   r>   r@   rA   )r=   r>   r?   r@   rA   rv   N)r   re   r   r   r   r   r   rx   r
   r   fit_transformr_   r   r   r{   r$   r   r|   )r   r'   rC   r=   rr   rA   r;   r   r<   r   r   r   r   r   leclass_weight_r@   r   r   r   r   r   r   r   #test_binary_classifier_class_weight  sh   



	


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 classr-   rg   r   r   z;This solver needs samples of at least 2 classes in the datar   rU   )rq   N)r   r   r   r   rx   )r;   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 s6w   Y  t|d|d
}tjt|d	 || | W d    d S 1 s[w   Y  d S )Nr   r-   r   Fr   zQCurrent sag implementation does not handle the case step_size * alpha_scaled == 1rU   )rq   rs   rA   r   )rA   rq   r'   )reescaper   r   r   rX   rx   r   )r;   r   rA   r'   r   r   r   r   r   r   test_step_size_alpha_error8  s   "r   rq   rB   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   )rY   T)rq   rY   
warm_startzFloating-point under-/overflowr   )r   r3   r4   r   r   rx   nanr{   r   r   r   )rq   rK   r;   r   r}   r   r   r    test_sag_classifier_raises_errorK  s   "r   )r-   NFNTF)r-   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"   r,   rU   r_   re   r   r   markfilterwarningsparametrizer   r   r   r   r6   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   

E

u6
0
%
+<2
)
6I

=
