a
    ¶Àh¬(  ã                   @   sJ  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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"ej  !d d!d"g¡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(dS )-é    )ÚlogN)Údatasets)ÚARDRegressionÚBayesianRidgeÚRidge)Úcheck_random_state)Ú_convert_containerÚ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<J ‚dS )zCheck scores attribute shapeT©Úcompute_scoreé   N)ÚdiabetesÚdataÚtargetr   ÚfitÚscores_ÚshapeZn_iter_©ÚXÚyÚclf© r   úa/var/www/html/assistant/venv/lib/python3.9/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  g d	¢¡j}td
d | |¡}t|j|j d | |¡}t|j	|j	ƒ t
|j|jƒ d S )Nr   é   é   é   é   r   é   é
   ©r   r   r6   r   r   r7   r8   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_parameterT   s    4rD   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  g d	¢¡j}t  g d
¢¡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<   )r7   r6   r6   r   r   r   r6   Tr   )Zsample_weightr=   r?   )r   r   ÚwrB   rC   r   r   r   Útest_bayesian_sample_weightsa   s    4ÿrF   c                  C   sl   t  dgdgdgdgdgg¡} t  g d¢¡}tdd}| | |¡ dgd	gd
gg}t| |¡g d¢dƒ d S )Nr   r   r:   é   r;   )r   r   r:   rG   r;   Tr   r6   r7   ©r   r6   r7   )r(   r@   r   r   r
   Úpredict©r   ÚYr   Útestr   r   r   Útest_toy_bayesian_ridge_objectq   s    
rM   c                  C   sR   t  t  ddd¡d¡} t  g d¢¡}tddd}| | |¡ | |¡}t|dƒ d S )Nr   r7   r8   )ç        r   rN   ç      ð¿rN   r   gü©ñÒMbP?)Z
alpha_initZlambda_init)r(   ZvanderZlinspacer@   r   r   r3   r	   )r   r   ÚregÚr2r   r   r   Útest_bayesian_initial_params}   s
    rR   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@   rU   r   r   r   rI   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   rS   rT   ç{®Gáz„?T©Z
return_std)r   rV   rW   r(   rX   r@   rU   r   r   r   rI   r   )
r0   rY   rZ   r[   r   r   Zexpected_upper_boundaryr   Ú_Úy_stdr   r   r   Ú/test_std_bayesian_ridge_ard_with_constant_inputš   s    rb   c                  C   s\   t  ddgddgg¡} t  ddg¡}tdd}| | |¡ |jjdksJJ ‚|j| dd d S )Nr   r   )r$   )r   r   Tr_   )r(   r@   r   r   Úsigma_r   rI   r   r   r   r   Útest_update_of_sigma_in_ard«   s    
rd   c                  C   sd   t  dgdgdgg¡} t  g d¢¡}tdd}| | |¡ dgdgdgg}t| |¡g d¢dƒ d S )	Nr   r   r6   )r   r   r6   Tr   r7   rH   )r(   r@   r   r   r
   rI   rJ   r   r   r   Útest_toy_ard_object¹   s    
re   zn_samples, n_features))r;   éd   )rf   r;   c                 C   sZ   t j | ¡jdd}|d d …df }tƒ }| ||¡ t  d|jd  ¡}|dk sVJ ‚d S )N)éú   r6   )Úsizer   g»½×Ùß|Û=)r(   ÚrandomÚRandomStateÚnormalr   r   ÚabsrA   )Úglobal_random_seedr0   rY   r   r   Z	regressorZabs_coef_errorr   r   r   Ú!test_ard_accuracy_on_easy_problemÅ   s    rn   Úconstructor_namer@   Z	dataframec                    sô   ‡ ‡fdd„‰‡fdd„}d}d}d}t  g d¢¡‰d	‰ t j ||f¡}t|| ƒ}t j ||f¡}t|| ƒ}tg d
¢ƒD ]v\}}|||ƒ}	tƒ }
|
 ||	¡ |
j|dd\}}t|||d t	ƒ }| ||	¡ |j|dd\}}t|||d qxd S )Nc                    s   t  | ˆ¡ˆ  S )N)r(   r-   )r   )ÚbrE   r   r   ÚfÖ   s    ztest_return_std.<locals>.fc                    s   ˆ | ƒt j | jd ¡|  S )Nr   )r(   ri   Úrandnr   )r   Ú
noise_mult)rq   r   r   Úf_noiseÙ   s    z test_return_std.<locals>.f_noiser8   é2   r;   )r   rN   r   rO   rN   r   )r   r   r^   Tr_   r&   )
r(   r@   ri   r   Ú	enumerater   r   rI   r
   r   )ro   rt   ÚdZn_trainZn_testr   ZX_testr'   rs   r   Úm1Zy_mean1Zy_std1Úm2Zy_mean2Zy_std2r   )rp   rq   rE   r   Útest_return_stdÓ   s*    


rz   c                 C   s|   t j | ¡}d }}| ||¡}d}t  d|d ¡}t  dg| ¡}tƒ }| ||||¡}	| ||||¡}
t j	 
|	|
¡ d S )Nr;   r   T)r(   ri   rj   rr   Zaranger@   r   Z_update_sigmaZ_update_sigma_woodburyÚtestingÚassert_allclose)rm   Úrngr0   rY   r   r>   ZlmbdaZkeep_lambdarP   ÚsigmaZsigma_woodburyr   r   r   Útest_update_sigma÷   s    r   rU   Ú	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  g d
¢¡j}|ƒ }| ||¡ ddg}|D ]}t||ƒj|jksfJ ‚qf|j|dd\}}|j|jks¤J ‚|j|jks´J ‚d S )Nr   r6   r7   r8   r9   r   r:   r;   rT   r<   rA   rc   Tr_   )r(   r@   r.   r   ÚgetattrrU   rI   )	rU   r€   r   r   ÚmodelÚ
attributesÚ	attributeZy_meanra   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  g d	¢¡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Úfloat32rA   r)   r{   r|   )r€   r   r   r‚   Zcoef_32Zcoef_64r   r   r   Útest_dtype_correctness"  s    4r‡   ))Úmathr   Únumpyr(   ZpytestZsklearnr   Zsklearn.linear_modelr   r   r   Zsklearn.utilsr   Zsklearn.utils._testingr   r	   r
   r   Zsklearn.utils.extmathr   Zload_diabetesr   r   r5   rD   rF   rM   rR   r]   rb   rd   re   ÚmarkZparametrizern   rz   r   r†   r)   r…   r‡   r   r   r   r   Ú<module>   s8   
3

#