
    WhF+                        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mZ d dlmZ  ej*                         Zd Zd	 Zd
 Zej4                  j7                  dddg      d        Zd Zd Zd Zd Z d Z!d Z"d Z#ej4                  j7                  dd      d        Z$ej4                  j7                  dddg      d        Z%d Z&ej4                  j7                  dejN                  ejP                  g      ej4                  j7                  de	eg      d               Z)ej4                  j7                  de	eg      d         Z*y)!    )logN)datasets)ARDRegressionBayesianRidgeRidge)check_random_state)_convert_containerassert_allclose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      _/var/www/html/jupyter_env/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_samplesr1   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$   rA   r$   r   rB   rC   Tr   alphar.   arrayr5   r   r   r   r;   r:   r   coef_r   
intercept_)r   r   br_modelrr_models       r   test_bayesian_ridge_parameterrP   U   s    
1a&1a&1a&1a&1a&1b'Aq6JKA
&'))A 4044Q:H8++hoo=>BB1aHHhnnhnn=++X-@-@Ar    zn_samples, n_features)rF      )rQ   rF   c                 |   t        j                  | ||      \  }}t        d      j                  ||      }t        j
                  j                  |j                  t	        j                  |      z  |j                  t	        j                  |j                  |      z  z         }t        |j                  |d       y)zCheck the posterior covariance matrix sigma_

    Non-regression test for https://github.com/scikit-learn/scikit-learn/issues/31093
    )random_stateF)r*   gư>rtolN)r   make_regressionr   r   r.   r6   invr;   identityr:   r4   r5   r
   sigma_)r9   
n_featuresglobal_random_seedr   r   regcovariance_matrixs          r   test_bayesian_covariance_matrixr^   b   s     ##:,>DAq e
,
0
0A
6C		bkk*--

RVVACC^0KK CJJ 1=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                  }t        j                  g d
      j                  }t        d      j	                  | ||      }t        |j                  |j                  z        j	                  | ||      }t        |j                  |j                         t        |j                  |j                         y )Nr   rA   rB   rC   rD   r$   rE   rF   rG   )rB   rA   rA   r   r   r$   rA   Tr   )sample_weightrH   rJ   )r   r   wrN   rO   s        r   test_bayesian_sample_weightsrb   r   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$   rE      rF   )r   r$   rE   rd   rF   Tr   rA   rB   r   rA   rB   )r.   rK   r   r   r   predictr   Yr   tests       r   test_toy_bayesian_ridge_objectrj      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   rB   rC   )        r"   rl         rl   r"   gMbP?)
alpha_initlambda_init)r.   vanderlinspacerK   r   r   r<   r   )r   r   r\   r2s       r   test_bayesian_initial_paramsrs      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 )NrB   rC   *   dtype)r   randrandom_sampler.   fullrK   rw   r   r   r   rf   r   )	r9   rZ   rS   constant_valuer   r   expectedr   y_preds	            r   6test_prediction_bayesian_ridge_ard_with_constant_inputr~      s     IJ%b)L!&&(N""Iz#:;A
	>.1I1O1OPAwwy.8P8V8VWH1 4A&&q)!&(34r    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 )NrF   rC   ru   rv   {Gz?T
return_std)r   rx   ry   r.   rz   rK   rw   r   r   r   rf   r   )
r9   rZ   rS   r{   r   r   expected_upper_boundaryr   _y_stds
             r   /test_std_bayesian_ridge_ard_with_constant_inputr      s     IJ%b)L!&&(N""Iz#:;A
	>.1I1O1OPA"1 :771a=((t(<5%!89:r    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   Tr   )r.   rK   r   r   rY   r   rf   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$   rA   )r   r$   rA   Tr   rB   re   )r.   rK   r   r   r   rf   rg   s       r   test_toy_ard_objectr      si    
1#sQC!A
A
d
+CGGAqM C!qc?Dckk$/A>r    ))rF   d   )r   rF   c                    t         j                  j                  |       j                  d      }|d d df   }t	               }|j                  ||       t        j                  d|j                  d   z
        }|dk  sJ y )N)   rA   )sizer   g|=)r.   randomRandomStatenormalr   r   absrL   )r[   r9   rZ   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_namerK   	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.   r4   )r   bra   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    rC   2   rF   )r"   rl   r"   rm   rl   r"   )r   r#   r   Tr   r,   )
r.   rK   r   r	   	enumerater   r   rf   r   r   )r   r   dn_trainn_testr   X_testr-   r   r   m1y_mean1y_std1m2y_mean2y_std2r   r   ra   s                   @@@r   test_return_stdr      s    ? 	
AGF
+,AA
		'1&A1./AYYvqk*F(89F(8 GAz"_
q!**V*=!&*gF_
q!**V*=!&*gFGr    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 )NrF   r   T)r.   r   r   r   arangerK   r   _update_sigma_update_sigma_woodburytestingr
   )r[   rngr9   rZ   r   rI   lmbdakeep_lambdar\   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    rw   	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   rA   rB   rC   rD   r$   rE   rF   rv   rG   rL   rY   Tr   )r.   rK   r5   r   getattrrw   rf   )	rw   r   r   r   model
attributes	attributey_meanr   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   rA   rB   rC   rD   r$   rE   rF   rG   g-C6?rT   )
r.   rK   r5   r   astypefloat32rL   r0   r   r
   )r   r   r   r   coef_32coef_64s         r   test_dtype_correctnessr   3  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   r   sklearn.utils.extmathr   load_diabetesr   r   r?   rP   markparametrizer^   rb   rj   rs   r~   r   r   r   r   r   r   r   r0   r   r    r    r   <module>r      st       D D ,  .!8!!#30:f
B 08X2FG> H>B 	?
!4 :"$	? 02HI
" J
" +g{-CD G E GF60 2::rzz":;}m&DE" F <"" }m&DE< F<r    