U
    -eh,                     @   sh  d dl m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 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dd Zdd Zdd Zdd Zdd Zej dddd Z!d d! Z"d"d# Z#ej d$ej$ej%gej d%e	egd&d' Z&ej d%e	egd(d) Z'ej d%e	egd*d+ Z(ej d%e	egd,d- Z)dS ).    )logN)datasets)ARDRegressionBayesianRidgeRidge)check_random_state)assert_almost_equalassert_array_almost_equalassert_array_less)fast_logdetc                  C   s@   t jt j } }tdd}|| | |jj|jd fks<tdS )zCheck scores attribute shapeTcompute_score   N)	diabetesdatatargetr   fitscores_shapeZn_iter_AssertionErrorXyclf r   f/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sklearn/linear_model/tests/test_bayes.pytest_bayesian_ridge_scores   s    
r   c               	   C   s  t jt j } }| jd }ttjj}dt||  }d}d}d}d}d}	|t	| |	|  }
|
|t	| ||  7 }
d| t
| d| t| | j  }tj||}|
dt|t|j| |t	dtj    7 }
t||||	dddd	}|| | t|jd |
d
d dS )a  Check value of score on toy example.

    Compute log marginal likelihood with equation (36) in Sparse Bayesian
    Learning and the Relevance Vector Machine (Tipping, 2001):

    - 0.5 * (log |Id/alpha + X.X^T/lambda| +
             y^T.(Id/alpha + X.X^T/lambda).y + n * log(2 * pi))
    + lambda_1 * log(lambda) - lambda_2 * lambda
    + alpha_1 * log(alpha) - alpha_2 * alpha

    and check equality with the score computed during training.
    r         ?皙?g         r   FT)alpha_1alpha_2lambda_1lambda_2max_iterZfit_interceptr   	   decimalN)r   r   r   r   npZfinfofloat64epsvarr   eyedotTZlinalgZsolver   pir   r   r   r   )r   r   	n_samplesr*   alpha_lambda_r    r!   r"   r#   scoreMZM_inv_dot_yr   r   r   r    test_bayesian_ridge_score_values"   s6    
(&	r5   c               
   C   s   t ddgddgddgddgddgddgddgg} t ddddd	ddgj}td
d| |}t|j|j d| |}t|j	|j	 t
|j|j d S )Nr               r      
   r   Tr   alphar(   arrayr.   r   r   r   r2   r1   r	   coef_r   Z
intercept_)r   r   br_modelrr_modelr   r   r   test_bayesian_ridge_parameterU   s    4rC   c               
   C   s   t ddgddgddgddgddgddgddgg} t ddddd	ddgj}t dddddddgj}td
dj| ||d}t|j|j dj| ||d}t|j	|j	 t
|j|j d S )Nr   r6   r7   r8   r9   r   r:   r;   r   Tr   )Zsample_weightr<   r>   )r   r   wrA   rB   r   r   r   test_bayesian_sample_weightsb   s    4  rE   c                  C   st   t dgdgdgdgdgg} t dddddg}tdd}|| | dgdgd	gg}t||ddd	gd d S )
Nr   r   r:      r;   Tr   r6   r7   )r(   r?   r   r   r	   predictr   Yr   testr   r   r   test_toy_bayesian_ridge_objectr   s    
rK   c                  C   sX   t t dddd} t dddddg}tddd}|| || |}t|d d S )	Nr   r7   r8           r         gMbP?)Z
alpha_initZlambda_init)r(   ZvanderZlinspacer?   r   r   r3   r   )r   r   regr2r   r   r   test_bayesian_initial_params~   s
    rP   c            	      C   s   d} d}t d}| }|| |f}tj| |t|jd}tj| |t|jd}t t fD ] }|	||
|}t|| qbd S )Nr7   r8   *   dtype)r   randrandom_sampler(   fullr?   rS   r   r   r   rG   r	   )	r0   
n_featuresrandom_stateconstant_valuer   r   expectedr   Zy_predr   r   r   6test_prediction_bayesian_ridge_ard_with_constant_input   s    r[   c            
      C   s|   d} d}t d}| }|| |f}tj| |t|jd}d}t t fD ](}|	||j
|dd\}}	t|	| qNd S )Nr;   r8   rQ   rR   {Gz?TZ
return_std)r   rT   rU   r(   rV   r?   rS   r   r   r   rG   r
   )
r0   rW   rX   rY   r   r   Zexpected_upper_boundaryr   _y_stdr   r   r   /test_std_bayesian_ridge_ard_with_constant_input   s    r`   c                  C   s\   t ddgddgg} t ddg}tdd}|| | |jjdksJt|j| dd d S )Nr   r   )r$   )r   r   Tr]   )r(   r?   r   r   sigma_r   r   rG   r   r   r   r   test_update_of_sigma_in_ard   s    
rb   c                  C   sh   t dgdgdgg} t dddg}tdd}|| | dgdgdgg}t||dddgd d S )Nr   r   r6   Tr   r7   )r(   r?   r   r   r	   rG   rH   r   r   r   test_toy_ard_object   s    
rc   zn_samples, n_features))r;   d   )rd   r;   c                 C   sZ   t j| jdd}|d d df }t }||| t d|jd  }|dk sVtd S )N)   r6   )sizer   g|=)	r(   randomRandomStatenormalr   r   absr@   r   )global_random_seedr0   rW   r   r   Z	regressorZabs_coef_errorr   r   r   !test_ard_accuracy_on_easy_problem   s    rl   c                     s    fddfdd} d}d}d}t dd	dd
d	gd t j||f}t j||f}tdddgD ]v\}}| ||}t }	|	|| |	j|dd\}
}t|||d t }||| |j|dd\}}t|||d qld S )Nc                    s   t |   S )N)r(   r-   )r   )brD   r   r   f   s    ztest_return_std.<locals>.fc                    s    | t j| jd |  S )Nr   )r(   rg   randnr   )r   
noise_mult)rn   r   r   f_noise   s    z test_return_std.<locals>.f_noiser8   2   r;   r   rL   rM   r   r   r\   Tr]   r&   )	r(   r?   rg   	enumerater   r   rG   r	   r   )rq   dZn_trainZn_testr   ZX_testr'   rp   r   m1Zy_mean1Zy_std1m2Zy_mean2Zy_std2r   )rm   rn   rD   r   test_return_std   s&    
rw   c                 C   s|   t j| }d }}|||}d}t d|d }t dg| }t }|||||}	|||||}
t j	
|	|
 d S )Nr;   r   T)r(   rg   rh   ro   Zaranger?   r   Z_update_sigmaZ_update_sigma_woodburytestingassert_allclose)rk   rngr0   rW   r   r=   ZlmbdaZkeep_lambdarN   sigmaZsigma_woodburyr   r   r   test_update_sigma   s    r|   rS   	Estimatorc           	   	   C   s   t jddgddgddgddgddgddgddgg| d	}t ddddd
ddgj}| }||| ddg}|D ]}t||j|jksptqp|j|dd\}}|j|jkst|j|jkstd S )Nr   r6   r7   r8   r9   r   r:   r;   rR   r   r@   ra   Tr]   )r(   r?   r.   r   getattrrS   r   rG   )	rS   r}   r   r   model
attributes	attributeZy_meanr_   r   r   r   test_dtype_match  s    8r   c              
   C   s   t ddgddgddgddgddgddgddgg}t ddddd	ddgj}|  }||t j|j}||t j|j}t jj	||d
d d S )Nr   r6   r7   r8   r9   r   r:   r;   r   g-C6?)Zrtol)
r(   r?   r.   r   Zastypefloat32r@   r)   rx   ry   )r}   r   r   r   Zcoef_32Zcoef_64r   r   r   test_dtype_correctness  s    4r   c              	   C   sF   d}t jt j }}| dd}tjt|d ||| W 5 Q R X dS )z*Check the deprecation warning of `n_iter`.zL'n_iter' was renamed to 'max_iter' in version 1.3 and will be removed in 1.5r8   )n_itermatchN)r   r   r   pytestZwarnsFutureWarningr   )r}   Zdepr_msgr   r   r   r   r   r   )test_bayesian_ridge_ard_n_iter_deprecated*  s    
r   c              	   C   sH   d}t jt j }}| ddd}tjt|d ||| W 5 Q R X dS )zLCheck that a ValueError is raised when both `max_iter` and `n_iter` are set.zBoth `n_iter` and `max_iter` attributes were set. Attribute `n_iter` was deprecated in version 1.3 and will be removed in 1.5. To avoid this error, only set the `max_iter` attribute.r8   )r   r$   r   N)r   r   r   r   Zraises
ValueErrorr   )r}   err_msgr   r   r   r   r   r   4test_bayesian_ridge_ard_max_iter_and_n_iter_both_set8  s    r   )*mathr   numpyr(   r   Zsklearnr   Zsklearn.linear_modelr   r   r   Zsklearn.utilsr   Zsklearn.utils._testingr   r	   r
   Zsklearn.utils.extmathr   Zload_diabetesr   r   r5   rC   rE   rK   rP   r[   r`   rb   rc   markZparametrizerl   rw   r|   r   r)   r   r   r   r   r   r   r   r   <module>   s>   
3
 


