
    {Kg(                     Z   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j(                         Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zej@                  jC                  dd      d        Z"ej@                  jC                  dddg      d        Z#d Z$ej@                  jC                  dejJ                  ejL                  g      ej@                  jC                  de	eg      d               Z'ej@                  jC                  de	eg      d        Z(y)    )logN)datasets)ARDRegressionBayesianRidgeRidge)check_random_state)_convert_containerassert_almost_equalassert_array_almost_equalassert_array_less)fast_logdetc                      t         j                  t         j                  }} t        d      }|j	                  | |       |j
                  j                  |j                  dz   fk(  sJ y)zCheck scores attribute shapeTcompute_score   N)diabetesdatatargetr   fitscores_shapen_iter_Xyclfs      i/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/linear_model/tests/test_bayes.pytest_bayesian_ridge_scoresr      sM    ==(//qA
d
+CGGAqM;;q 2222    c            	      B   t         j                  t         j                  }} | j                  d   }t	        j
                  t        j                        j                  }dt	        j                  |      |z   z  }d}d}d}d}d}	|t        |      z  |	|z  z
  }
|
|t        |      z  ||z  z
  z  }
d|z  t	        j                  |      z  d|z  t	        j                  | | j                        z  z   }t        j                  j                  ||      }|
dt        |      t	        j                  |j                  |      z   |t        dt        j                   z        z  z   z  z  }
t#        ||||	ddd	      }|j%                  | |       t'        |j(                  d   |
d
       y)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_iterfit_interceptr   	   decimalN)r   r   r   r   npfinfofloat64epsvarr   eyedotTlinalgsolver   pir   r   r
   r   )r   r   	n_samplesr0   alpha_lambda_r$   r%   r&   r'   scoreMM_inv_dot_yr   s                 r    test_bayesian_ridge_score_valuesr>   #   so    ==(//qA
I
((2::

"
"CBFF1IO$FG GGHH s7|#h&88E	Ws6{"Wv%555Efrvvi((3=266!QSS>+IIA))//!Q'K	TA[11IAI4NN E
 C GGAqMAq9r   c            
         t        j                  ddgddgddgddgddgddgddgg      } t        j                  g d	      j                  }t        d
      j	                  | |      }t        |j                  |j                  z        j	                  | |      }t        |j                  |j                         t        |j                  |j                         y )Nr               r#      
   r   r#   r@   r#   r   rA   rB   Tr   alphar-   arrayr4   r   r   r   r:   r9   r   coef_r
   
intercept_)r   r   br_modelrr_models       r   test_bayesian_ridge_parameterrO   V   s    
1a&1a&1a&1a&1a&1b'Aq6JKA
&'))A 4044Q:H8++hoo=>BB1aHHhnnhnn=++X-@-@Ar   c            
         t        j                  ddgddgddgddgddgddgddgg      } t        j                  g d	      j                  }t        j                  g d
      j                  }t        d      j	                  | ||      }t        |j                  |j                  z        j	                  | ||      }t        |j                  |j                         t        |j                  |j                         y )Nr   r@   rA   rB   rC   r#   rD   rE   rF   )rA   r@   r@   r   r   r#   r@   Tr   )sample_weightrG   rI   )r   r   wrM   rN   s        r   test_bayesian_sample_weightsrS   c   s    
1a&1a&1a&1a&1a&1b'Aq6JKA
&'))A
&'))A 4044Q4KH8++hoo=>BB	1A C H hnnhnn=++X-@-@Ar   c                      t        j                  dgdgdgdgdgg      } t        j                  g d      }t        d      }|j                  | |       dgd	gd
gg}t	        |j                  |      g dd       y )Nr   r#   rD      rE   )r   r#   rD   rU   rE   Tr   r@   rA   r   r@   rA   )r-   rJ   r   r   r   predictr   Yr   tests       r   test_toy_bayesian_ridge_objectr[   s   ss    
1#sQC!rd+,A
!"A
d
+CGGAqM C!qc?Dckk$/A>r   c                      t        j                  t        j                  ddd      d      } t        j                  g d      }t	        dd      }|j                  | |      j                  | |      }t        |d       y )Nr   rA   rB   )        r!   r]         r]   r!   gMbP?)
alpha_initlambda_init)r-   vanderlinspacerJ   r   r   r;   r
   )r   r   regr2s       r   test_bayesian_initial_paramsre      sb    
		"++aA&*A
+,A 3D
9C	A		Q	"BC r   c                     d} d}t        d      }|j                         }|j                  | |f      }t        j                  | |t        j
                  |      j                        }t        j                  | |t        j
                  |      j                        }t               t               fD ]/  }|j                  ||      j                  |      }t        ||       1 y )NrA   rB   *   dtype)r   randrandom_sampler-   fullrJ   ri   r   r   r   rW   r   )	r8   
n_featuresrandom_stateconstant_valuer   r   expectedr   y_preds	            r   6test_prediction_bayesian_ridge_ard_with_constant_inputrr      s     IJ%b)L!&&(N""Iz#:;A
	>.1I1O1OPAwwy.8P8V8VWH1A&&q)!&(3 2r   c                  l   d} d}t        d      }|j                         }|j                  | |f      }t        j                  | |t        j
                  |      j                        }d}t               t               fD ]4  }|j                  ||      j                  |d      \  }}	t        |	|       6 y )NrE   rB   rg   rh   {Gz?T
return_std)r   rj   rk   r-   rl   rJ   ri   r   r   r   rW   r   )
r8   rm   rn   ro   r   r   expected_upper_boundaryr   _y_stds
             r   /test_std_bayesian_ridge_ard_with_constant_inputrz      s     IJ%b)L!&&(N""Iz#:;A
	>.1I1O1OPA"1771a=((t(<5%!89 2r   c                      t        j                  ddgddgg      } t        j                  ddg      }t        d      }|j                  | |       |j                  j
                  dk(  sJ |j                  | d       y )Nr   r   )r(   )r   r   Tru   )r-   rJ   r   r   sigma_r   rW   r   s      r   test_update_of_sigma_in_ardr}      sr     	1a&1a&!"A
!QA

#CGGAqM ::v%%%KKdK#r   c                      t        j                  dgdgdgg      } t        j                  g d      }t        d      }|j                  | |       dgdgdgg}t	        |j                  |      g dd       y )	Nr   r#   r@   )r   r#   r@   Tr   rA   rV   )r-   rJ   r   r   r   rW   rX   s       r   test_toy_ard_objectr      si    
1#sQC!A
A
d
+CGGAqM C!qc?Dckk$/A>r   zn_samples, n_features))rE   d   )r   rE   c                    t         j                  j                  |       j                  d      }|d d df   }t	               }|j                  ||       t        j                  d|j                  d   z
        }|dk  sJ y )N)   r@   )sizer   g|=)r-   randomRandomStatenormalr   r   absrK   )global_random_seedr8   rm   r   r   	regressorabs_coef_errors          r   !test_ard_accuracy_on_easy_problemr      ss     			0188h8GA	!Q$AIMM!QVVA	 223NE!!!r   constructor_namerJ   	dataframec                 N   fdfd}d}d}d}t        j                  g d      dt         j                  j                  ||f      }t        ||       }t         j                  j                  ||f      }t        ||       }t	        g d      D ]  \  }} |||      }	t               }
|
j                  ||	       |
j                  |d	
      \  }}t        |||       t               }|j                  ||	       |j                  |d	
      \  }}t        |||        y )Nc                 6    t        j                  |       z   S )N)r-   r3   )r   brR   s    r   fztest_return_std.<locals>.f   s    vva|ar   c                 t     |       t         j                  j                  | j                  d         |z  z   S )Nr   )r-   r   randnr   )r   
noise_multr   s     r   f_noisez test_return_std.<locals>.f_noise   s,    tbiiooaggaj1J>>>r   rB   2   rE   )r!   r]   r!   r^   r]   r!   )r   r"   rt   Tru   r+   )
r-   rJ   r   r	   	enumerater   r   rW   r   r   )r   r   dn_trainn_testr   X_testr,   r   r   m1y_mean1y_std1m2y_mean2y_std2r   r   rR   s                   @@@r   test_return_stdr      s    ? 	
AGF
+,AA
		'1&A1./AYYvqk*F(89F(8Az"_
q!**V*=!&*gF_
q!**V*=!&*gF  9r   c                 z   t         j                  j                  |       }dx}}|j                  ||      }d}t        j                  d|dz         }t        j
                  dg|z        }t               }|j                  ||||      }	|j                  ||||      }
t         j                  j                  |	|
       y )NrE   r   T)r-   r   r   r   arangerJ   r   _update_sigma_update_sigma_woodburytestingassert_allclose)r   rngr8   rm   r   rH   lmbdakeep_lambdarc   sigmasigma_woodburys              r   test_update_sigmar      s    
 ))

 2
3C
  I
		)Z(AEIIaa(E((D6J./K
/Ca{;E//5%MNJJun5r   ri   	Estimatorc           
         t        j                  ddgddgddgddgddgddgddgg| 	      }t        j                  g d
      j                  } |       }|j                  ||       ddg}|D ]'  }t	        ||      j
                  |j
                  k(  r'J  |j                  |d      \  }}|j
                  |j
                  k(  sJ |j
                  |j
                  k(  sJ y )Nr   r@   rA   rB   rC   r#   rD   rE   rh   rF   rK   r|   Tru   )r-   rJ   r4   r   getattrri   rW   )	ri   r   r   r   model
attributes	attributey_meanry   s	            r   test_dtype_matchr     s     	1a&1a&1a&1a&1a&1b'Aq6JRWXA
&'))AKE	IIaO8$J	ui(..!''999   MM!M5MFE<<177""";;!''!!!r   c           
         t        j                  ddgddgddgddgddgddgddgg      }t        j                  g d	      j                  } |        }|j                  |j	                  t         j
                        |      j                  }|j                  |j	                  t         j                        |      j                  }t         j                  j                  ||d
       y )Nr   r@   rA   rB   rC   r#   rD   rE   rF   g-C6?)rtol)
r-   rJ   r4   r   astypefloat32rK   r/   r   r   )r   r   r   r   coef_32coef_64s         r   test_dtype_correctnessr   $  s    
1a&1a&1a&1a&1a&1b'Aq6JKA
&'))AKEii,a066Gii,a066GJJwd;r   ))mathr   numpyr-   pytestsklearnr   sklearn.linear_modelr   r   r   sklearn.utilsr   sklearn.utils._testingr	   r
   r   r   sklearn.utils.extmathr   load_diabetesr   r   r>   rO   rS   r[   re   rr   rz   r}   r   markparametrizer   r   r   r   r/   r   r    r   r   <module>r      sH       D D ,  .!8!!#30:f
BB 	?
!4 :"$	? 02HI
" J
" +g{-CD G E GF60 2::rzz":;}m&DE" F <"" }m&DE< F<r   