
    _nda(                     &   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d d	l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                             dd          d             Z!d Z"d Z#ej                             dej$        ej%        g          ej                             deeg          d                         Z&ej                             deeg          d             Z'dS )    )logN)assert_array_almost_equal)assert_almost_equal)assert_array_less)check_random_state)BayesianRidgeARDRegression)Ridge)datasets)fast_logdetc                      t           j        t           j        }} t          d          }|                    | |           |j        j        |j        dz   fk    sJ dS )zCheck scores attribute shapeTcompute_score   N)diabetesdatatargetr   fitscores_shapen_iter_Xyclfs      Elib/python3.11/site-packages/sklearn/linear_model/tests/test_bayes.pytest_bayesian_ridge_scoresr      sU    =(/qA
d
+
+
+CGGAqMMM;q 2222222    c            	      ,   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                            ||          }|
dt          |          t	          j        |j        |          z   |t          dt          j        z            z  z   z  z  }
t#          ||||	ddd	          }|                    | |           t'          |j        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n_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_samplesr/   alpha_lambda_r#   r$   r%   r&   scoreMM_inv_dot_yr   s                 r    test_bayesian_ridge_score_valuesr=   "   s    =(/qA
I
(2:


"CBF1IIO$FG GGHH s7||#h&88E	Ws6{{"Wv%555Efrvi(((3=26!QS>>+IIA)//!Q''K	TA[111IAI4NN E
   C GGAqMMMAq99999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
                              | |          }t          |j        |j        z                                | |          }t          |j	        |j	                   t          |j        |j                   d S )Nr               r"      
   r   r"   r?   r"   r   r@   rA   Tr   alphar,   arrayr3   r   r   r
   r9   r8   r   coef_r   
intercept_)r   r   br_modelrr_models       r   test_bayesian_ridge_parameterrN   U   s    
1a&1a&1a&1a&1a&1b'Aq6JKKA
&&&'')A 400044Q::H8+ho=>>>BB1aHHHhnhn===+X-@AAAA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                              | ||          }t          |j        |j        z                                | ||          }t          |j	        |j	                   t          |j        |j                   d S )Nr   r?   r@   rA   rB   r"   rC   rD   rE   )r@   r?   r?   r   r   r"   r?   Tr   )sample_weightrF   rH   )r   r   wrL   rM   s        r   test_bayesian_sample_weightsrR   b   s    
1a&1a&1a&1a&1a&1b'Aq6JKKA
&&&'')A
&&&'')A 400044Q4KKH8+ho=>>>BB	1A C  H hnhn===+X-@AAAAAr   c                     t          j        dgdgdgdgdgg          } t          j        g d          }t          d          }|                    | |           dgd	gd
gg}t	          |                    |          g dd           d S )Nr   r"   rC      rD   )r   r"   rC   rT   rD   Tr   r?   r@   r   r?   r@   )r,   rI   r   r   r   predictr   Yr   tests       r   test_toy_bayesian_ridge_objectrZ   r   s    
1#sQC!rd+,,A
!!!""A
d
+
+
+CGGAqMMM C!qc?Dckk$//A>>>>>r   c                     t          j        t          j        ddd          d          } t          j        g d          }t	          dd          }|                    | |                              | |          }t          |d           d S )Nr   r@   rA   )        r    r\         r\   r    gMbP?)
alpha_initlambda_init)r,   vanderlinspacerI   r   r   r:   r   )r   r   regr2s       r   test_bayesian_initial_paramsrd   ~   s    
	"+aA&&**A
+++,,A 3D
9
9
9C	A		Q	"	"BC     r   c                     d} d}t          d          }|                                }|                    | |f          }t          j        | |t          j        |          j                  }t          j        | |t          j        |          j                  }t                      t                      fD ];}|	                    ||          
                    |          }t          ||           <d S )Nr@   rA   *   dtype)r   randrandom_sampler,   fullrI   rh   r   r	   r   rV   r   )	r7   
n_featuresrandom_stateconstant_valuer   r   expectedr   y_preds	            r   6test_prediction_bayesian_ridge_ard_with_constant_inputrq      s     IJ%b))L!&&((N""Iz#:;;A
	>.1I1I1OPPPAwy.8P8P8VWWWH1 4 4A&&q))!&(33334 4r   c                     d} d}t          d          }|                                }|                    | |f          }t          j        | |t          j        |          j                  }d}t                      t                      fD ]@}|	                    ||          
                    |d          \  }}	t          |	|           Ad S )NrD   rA   rf   rg   {Gz?T
return_std)r   ri   rj   r,   rk   rI   rh   r   r	   r   rV   r   )
r7   rl   rm   rn   r   r   expected_upper_boundaryr   _y_stds
             r   /test_std_bayesian_ridge_ard_with_constant_inputry      s     IJ%b))L!&&((N""Iz#:;;A
	>.1I1I1OPPPA"1 : :771a==((t(<<5%!89999: :r   c                     t          j        ddgddgg          } t          j        ddg          }t          d          }|                    | |           |j        j        dk    sJ |                    | d           d S )Nr   r   )r'   )r   r   Trt   )r,   rI   r	   r   sigma_r   rV   r   s      r   test_update_of_sigma_in_ardr|      s     	1a&1a&!""A
!QA
q
!
!
!CGGAqMMM :v%%%%KKdK#####r   c                     t          j        dgdgdgg          } t          j        g d          }t          d          }|                    | |           dgdgdgg}t	          |                    |          g dd           d S )	Nr   r"   r?   )r   r"   r?   Tr   r@   rU   )r,   rI   r	   r   r   rV   rW   s       r   test_toy_ard_objectr~      s    
1#sQC!!A
A
d
+
+
+CGGAqMMM C!qc?Dckk$//A>>>>>r   zn_samples, n_features))rD   d   )r   rD   c                     t           j                            |                               d          }|d d df         }t	                      }|                    ||           t          j        d|j        d         z
            }|dk     sJ d S )N)   r?   )sizer   g|=)r,   randomRandomStatenormalr	   r   absrJ   )global_random_seedr7   rl   r   r   	regressorabs_coef_errors          r   !test_ard_accuracy_on_easy_problemr      s     		01188h8GGA	!!!Q$AIMM!QVA	 2233NE!!!!!!r   c                  h   fdfd} d}d}d}t          j        g d          dt           j                            ||f          }t           j                            ||f          }t          g d          D ]\  }} | ||          }t	                      }	|	                    ||           |	                    |d	
          \  }
}t          |||           t                      }|                    ||           |                    |d	
          \  }}t          |||           d S )Nc                 4    t          j        |           z   S )N)r,   r2   )r   brQ   s    r   fztest_return_std.<locals>.f   s    va||ar   c                 v     |           t           j                            | j        d                   |z  z   S )Nr   )r,   r   randnr   )r   
noise_multr   s     r   f_noisez test_return_std.<locals>.f_noise   s/    qttbiooagaj11J>>>r   rA   2   rD   )r    r\   r    r]   r\   r    )r   r!   rs   Trt   r*   )	r,   rI   r   	enumerater   r   rV   r   r	   )r   dn_trainn_testr   X_testr+   r   r   m1y_mean1y_std1m2y_mean2y_std2r   r   rQ   s                  @@@r   test_return_stdr      sl              ? ? ? ? ? 	
AGF
+++,,AA
	'1&&AYvqk**F(88 G GGAz""__
q!**V*==!&*gFFFF__
q!**V*==!&*gFFFFFG Gr   c                    t           j                            |           }dx}}|                    ||          }d}t          j        d|dz             }t          j        dg|z            }t                      }|                    ||||          }	|                    ||||          }
t           j	        
                    |	|
           d S )NrD   r   T)r,   r   r   r   arangerI   r	   _update_sigma_update_sigma_woodburytestingassert_allclose)r   rngr7   rl   r   rG   lmbdakeep_lambdarb   sigmasigma_woodburys              r   test_update_sigmar      s    
 )

 2
3
3C
  I
		)Z((AEIaa((E(D6J.//K
//Ca{;;E//5%MMNJun55555r   rh   	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        } |            }|                    ||           ddg}|D ]"}t	          ||          j        |j        k    sJ #|                    |d          \  }}|j        |j        k    sJ |j        |j        k    sJ d S )Nr   r?   r@   rA   rB   r"   rC   rD   rg   rE   rJ   r{   Trt   )r,   rI   r3   r   getattrrh   rV   )	rh   r   r   r   model
attributes	attributey_meanrx   s	            r   test_dtype_matchr     s     	1a&1a&1a&1a&1a&1b'Aq6JRWXXXA
&&&'')AIKKE	IIaOOO8$J : :	ui((.!'99999MM!M55MFE<17"""";!'!!!!!!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                  |          j        }|                    |                    t           j                  |          j        }t           j        	                    ||d
           d S )Nr   r?   r@   rA   rB   r"   rC   rD   rE   g-C6?)rtol)
r,   rI   r3   r   astypefloat32rJ   r.   r   r   )r   r   r   r   coef_32coef_64s         r   test_dtype_correctnessr     s    
1a&1a&1a&1a&1a&1b'Aq6JKKA
&&&'')AIKKEii,,a006Gii,,a006GJwd;;;;;r   )(mathr   numpyr,   pytestsklearn.utils._testingr   r   r   sklearn.utilsr   sklearn.linear_modelr   r	   r
   sklearnr   sklearn.utils.extmathr   load_diabetesr   r   r=   rN   rR   rZ   rd   rq   ry   r|   r~   markparametrizer   r   r   r   r.   r   r    r   r   <module>r      s^              = < < < < < 6 6 6 6 6 6 4 4 4 4 4 4 , , , , , , = = = = = = = = & & & & & &       - - - - - -!8!##3 3 30: 0: 0:f
B 
B 
BB B B 	? 	? 	?
! 
! 
!4 4 4 : : :"$ $ $	? 	? 	? 02HII
" 
" JI
"G G G@6 6 60 2:rz":;;}m&DEE" " FE <;"" }m&DEE< < FE< < <r   