
    Q3j.                        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!ej4                  j7                  de	eg      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jP                  ejR                  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      R/DATA/.local/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_weightsrc   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   re   rF   Tr   rA   rB   r   rA   rB   )r.   rK   r   r   r   predictr   Yr   tests       r   test_toy_bayesian_ridge_objectrk      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"   rm         rm   r"   gMbP?)
alpha_initlambda_init)r.   vanderlinspacerK   r   r   r<   r   )r   r   r]   r2s       r   test_bayesian_initial_paramsrt      sb    
		"++aA&*A
+,A 3D
9C	A		Q	"BC r    c                    d}d}t        |       }|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   rg   r   )
r\   r9   r[   rS   constant_valuer   r   expectedr   y_preds
             r   6test_prediction_bayesian_ridge_ard_with_constant_inputr~      s     IJ%&89L!&&(N""Iz#:;A
	>.1I1O1OPAwwy.8P8V8VWH1A&&q)!&(3 2r    c                 l   d}d}t        |       }|j                         }|j                  ||f      }t        j                  ||t        j
                  |      j                        }d}t               t               fD ]4  }|j                  ||      j                  |d      \  }	}
t        |
|       6 y )NrF   rC   rv   {Gz?T
return_std)r   rx   ry   r.   rz   rK   rw   r   r   r   rg   r   )r\   r9   r[   rS   r{   r   r   expected_upper_boundaryr   _y_stds              r   /test_std_bayesian_ridge_ard_with_constant_inputr      s     IJ%&89L!&&(N""Iz#:;A
	>.1I1O1OPA"1771a=((t(<5%!89 2r    	Estimatorc                    t         j                  j                  |      }d}t        j                  dd|      j	                  dd      }|j	                  d      d|j                  |      z  z   } | d      j                  ||      }t        j                  d	gd
gg      }|j                  |d      \  }}	|	d   |	d   k  sJ y )NrB   P   d   r   rF   TrT   rm   g     V@r   r   )	r.   randomRandomStaterr   reshapestandard_normalr   rK   rg   )
r   r\   rngr9   X_trainy_trainmodelr   r   r   s
             r   #test_std_bayesian_ridge_noncenteredr      s    
 ))

 2
3CIkk"c9-55b!<Goob!B)<)<Y)G$GGGD)--gw?E
3%$!A}}Q4}0HAu8eAh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   rZ   r   rg   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   rf   )r.   rK   r   r   r   rg   rh   s       r   test_toy_ard_objectr      si    
1#sQC!A
A
d
+CGGAqM C!qc?Dckk$/A>r    ))rF   r   )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.   r   r   normalr   r   absrL   )r\   r9   r[   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   pandasc                 X   t         j                  j                  |      fdfd}d}d}d}t        j                  g d      dj	                  ||f      }t        ||       }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   brb   s    r   fztest_return_std.<locals>.f   s    vva|ar    c                 X     |       j                  | j                  d         |z  z   S )Nr   )randnr   )r   
noise_multr   r   s     r   f_noisez test_return_std.<locals>.f_noise   s(    tcii
+j888r    rC   2   rF   )r"   rm   r"   rn   rm   r"   )r   r#   r   Tr   r,   )r.   r   r   rK   ry   r	   	enumerater   r   rg   r   r   )r   r\   r   dn_trainn_testr   X_testr-   r   r   m1y_mean1y_std1m2y_mean2y_std2r   r   r   rb   s                    @@@@r   test_return_stdr      s    ))

 2
3C 9 	
AGF
+,AA7A,'A1./A{+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 )NrF   r   T)r.   r   r   r   arangerK   r   _update_sigma_update_sigma_woodburytestingr
   )r\   r   r9   r[   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   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                  ||       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   rZ   Tr   )r.   rK   r5   r   getattrrw   rg   )	rw   r   r   r   r   
attributes	attributey_meanr   s	            r   test_dtype_matchr   1  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?rU   )
r.   rK   r5   r   astypefloat32rL   r0   r   r
   )r   r   r   r   coef_32coef_64s         r   test_dtype_correctnessr   D  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_   rc   rk   rt   r~   r   r   r   r   r   r   r   r   r0   r   r    r    r   <module>r      s       D D ,  .!8!!#30:f
B 08X2FG> H>B 	?
!4 :" }m&DE F$	? 02HI
" J
" +gx-@A"G B"GJ60 2::rzz":;}m&DE" F <"" }m&DE< F<r    