o
    ip                     @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZmZmZmZmZ d dlmZmZmZmZ d dlmZ eeeegZeeg Zedd	gd	d	gd	dgd
d
gd
dgdd
ggZeg 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'dd  Z(d!d" Z)d#d$ Z*d%d& Z+d'd( Z,ej-.d)ed*d+ Z/ej-.d)ed,d- Z0ej-.d.ed/d0 Z1d1d2 Z2ej-.d)ed3d4 Z3ej-.d)ed5d6 Z4ej-.d)ed7d8 Z5ej-.d)ed9d: Z6ej-.d)eej-.d;d<d=gej-.d>d<d=gd?d@ Z7ej-.dAdBej-.dCedDdE Z8dFdG Z9dHdI Z:dJdK Z;dLdM Z<dNdO Z=ej-.dPdQeg dRg dSgeg dSg dSged dggedQdQgfdQdTgeg dRg dSgeg dUg dUged dQggedQdTgfd
edd gd
d
gged
d
gd
d
gged d
ggeddgggdVdW Z>ej-.dXdQdgddTggdYfgdZd[ Z?ej-.dCed\d] Z@d^d_ ZAd`da ZBdbdc ZCej-.ddededf ZDej-.ddedgdh ZEdS )i    N)	logsumexp)load_digits	load_iris)cross_val_scoretrain_test_split)BernoulliNBCategoricalNBComplementNB
GaussianNBMultinomialNB)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)CSR_CONTAINERS      )r   r   r   r   r   r   c                 C   s6   t j| }|jdd}|jdddkt}||fS )N)
      sizer   r   )nprandomRandomStatenormalastypeint)global_random_seedrngX1y1 r#   m/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/sklearn/tests/test_naive_bayes.pyget_random_normal_x_binary_y!   s   r%   c                 C   s0   t j| }|jddd}t g d}||fS )N   )   d   r   )r   r   r   r   r   r   )r   r   r   randintarray)r   r    X2y2r#   r#   r$   $get_random_integer_x_three_classes_y)   s   r-   c                  C   s   t  } | ttt}t|t | t}| t}tt	
||d tjtdd t  jttddgd W d    d S 1 sBw   Y  d S )N   z;The target label.* in y do not exist in the initial classesmatchr   r   classes)r
   fitXypredictr   predict_probapredict_log_probar   r   logpytestraises
ValueErrorpartial_fit)clfy_predy_pred_probay_pred_log_probar#   r#   r$   test_gnb2   s   


"rB   c                 C   sX   t  tt}ttddgd |jd t| \}}t  ||}t|j	 d d S )Nr         @r.   r   )
r
   r3   r4   r5   r   r   r*   class_prior_r%   sum)r   r>   r!   r"   r#   r#   r$   test_gnb_priorH   s
   rF   c           
      C   sN  t d}t tt}t tt|}t|j|j t|j|j t j	
| }|tjd }t jtt|d}t jttddg|d d}|jtt|d d t|j|j t|j|j |dtjd d}t j|tjd d}t t| t| }	t tt|}t|	j|j t|	j|j tdkt j}t jtt|d}d	S )
z5Test whether sample weights are properly used in GNB.r'   r   sample_weightr   r   r2   rH      )Z	minlengthN)r   Zonesr
   r3   r4   r5   r   theta_var_r   r   Zrandshaper=   r)   Zbincountr   float64)
r   swr>   Zclf_swr    clf1clf2indrH   Zclf_duplr#   r#   r$   test_gnb_sample_weightR   s(   
rS   c                  C   X   t tddgd} d}tjt|d | tt W d   dS 1 s%w   Y  dS )z:Test whether an error is raised in case of negative priorsg             @priorszPriors must be non-negativer/   N	r
   r   r*   r:   r;   r<   r3   r4   r5   r>   msgr#   r#   r$   test_gnb_neg_priorsy   
   "r[   c                  C   sZ   t tddgdtt} t| ddggtddggd t| jtddg dS )	z6Test whether the class prior override is properly used333333?gffffff?rV   皙g[9h?gs\?r.   N)	r
   r   r*   r3   r4   r5   r   r7   rD   r>   r#   r#   r$   test_gnb_priors   s   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ddgd	d	gd
d
gg
} t g d}t g d}t|d}|| | d S )Nr   r   r   r   r      r&   )
g{Gz?Q?gQ?{Gz?)\(?rf   gQ?re   rg           )
r   r   r   rd   r&   r'      r.   	   r   rV   )r   r*   r
   r3   )r4   rW   Yr>   r#   r#   r$   test_gnb_priors_sum_isclose   s"   
rl   c                  C   sX   t tg dd} d}tjt|d | tt W d   dS 1 s%w   Y  dS )z`Test whether an error is raised if the number of prior is different
    from the number of class)      ?rm   rm   rm   rV   -Number of priors must match number of classesr/   NrX   rY   r#   r#   r$   test_gnb_wrong_nb_priors   s
   "ro   c                  C   rT   )z?Test if an error is raised if the sum of prior greater than onerU         ?rV   z!The sum of the priors should be 1r/   NrX   rY   r#   r#   r$   test_gnb_prior_greater_one   r\   rq   c                  C   sD   t tddgd} | tt | ddggtdgks J dS )z@Test if good prediction when class prior favor largely one classg{Gz?gGz?rV   r^   r   N)r
   r   r*   r3   r4   r5   r6   r_   r#   r#   r$   test_gnb_prior_large_bias   s   $rr   c                  C   sP   d} d}d}t dtjd f}t| |||\}}||ks J ||ks&J dS )z4Test when the partial fit is called without any datar(   rh   rp   r   r   N)r   emptyr4   rM   r
   Z_update_mean_variance)Zprev_pointsmeanvarZx_emptyZtmeantvarr#   r#   r$   "test_gnb_check_update_with_no_data   s   rw   c                  C   s   t  tt} t  tttt}t| j|j t| j	|j	 t| j
|j
 t  tdd dd d f tdd d tt}|tdd d tdd d  t| j|j t| j	|j	 t| j
|j
 d S )Nr   r   r   )r
   r3   r4   r5   r=   r   uniquer   rK   rL   rD   )r>   Zclf_pfZclf_pf2r#   r#   r$   test_gnb_partial_fit   s   2 ry   c                     sP   t  } | j| j  fdddD }t|d |d  t|d |d  d S )Nc                    s(   g | ]}t  |  |  qS r#   )r
   r3   r6   ).0fr4   r5   r#   r$   
<listcomp>   s   ( z9test_gnb_naive_bayes_scale_invariance.<locals>.<listcomp>)绽|=r   g    _Br   r   r   )r   datatargetr   )irislabelsr#   r|   r$   %test_gnb_naive_bayes_scale_invariance   s
   r   DiscreteNaiveBayesc                 C   s@   t |\}}|  ||}tttg dd |jd d S )N)r   r   r   rC   r.   )r-   r3   r   r   r9   r*   class_log_prior_)r   r   r+   r,   r>   r#   r#   r$   test_discretenb_prior   s
   r   c                 C   s  |  }| ddgddgddggg d |  }|jddgddgddggg dddgd t|j|j | tu rMtt|jD ]}t|j| |j|  q>nt|j|j |  }|jddggdgddgd |ddggdg |ddggdg t|j|j | tu rtt|jD ]$}t|j| j	|j| j	 tt
j|j| ddt
j|j| dd qt|jd d t
ddg t|jd d t
ddg t|jd d t
ddg t|jd d t
ddg d S t|j|j d S )Nr   r   r   r   r   r1   Zaxisr   )r3   r=   r   class_count_r   rangelencategory_count_feature_count_rM   r   rE   r*   )r   rP   rQ   iclf3r#   r#   r$   test_discretenb_partial_fit   s:   "*"r   
NaiveBayesc                 C   s   t |\}}tjtdd |  || W d    n1 sw   Y  |  }|j||t|d tjtdd |j||tdd W d    d S 1 sPw   Y  d S )Nz8classes must be passed on the first call to partial_fit.r/   r1   .is not the same as on last call to partial_fit*   )r-   r:   r;   r<   r=   r   rx   Zarange)r   r   r+   r,   r>   r#   r#   r$   $test_NB_partial_fit_no_first_classes  s   "r   c                  C   s|  g dg dg dg} ddgddgddgg}g d}t ttg| |gD ];\}}| ||}||d	d  d
ks;J ||d gjdksHJ t||d d
 jddt	
ddgd q#g d}t ttg| |gD ]O\}}| ||}||dd jdksJ ||d d
 jdksJ tt	||d gd tt	||d	 gd tt	t	|jd qld S )N)r   r(   r   r   r   r   )r   r(   r   r   r   r   rd   )r   r   r   r   r   )r   r   r   rp   r'   r   r   r   )r   r   )r   r   )zipr   r   r3   r6   r7   rM   r   rE   r   r*   r   expr   )ZX_bernoulliZX_multinomialr5   r   r4   r>   r#   r#   r$   test_discretenb_predict_proba0  s.   &r   c                 C   sR   |  }|j dd |dgdgdggg d t|j}t|tddg d S )NF)	fit_priorr   r   r   r   r         ?)Z
set_paramsr3   r   r   r   r   r*   )r   r>   priorr#   r#   r$   test_discretenb_uniform_priorQ  s
   r   c                 C   s   | ddgd}| dgdgdggg d t|j}t|tddg d}tjt|d | dgdgdggg d	 W d    n1 sGw   Y  d
}tjt|d |j	dgdggddgg dd W d    d S 1 sqw   Y  d S )Nr   class_priorr   r   r   rn   r/   r   r   r   r   r1   )
r3   r   r   r   r   r*   r:   r;   r<   r=   )r   r>   r   rZ   r#   r#   r$   test_discretenb_provide_prior]  s   ""r   c           	      C   s   t  }t|j|jddd\}}}}d g dfD ]+}| |d}||j|j | |d}|j||g dd ||| t|j|j qd S )N皙?i  )Z	test_sizeZrandom_state)r]   r]   r   r   r   r1   )r   r   r   r   r3   r=   r   r   )	r   r   Z
iris_data1Z
iris_data2Ziris_target1Ziris_target2r   Zclf_fullZclf_partialr#   r#   r$   .test_discretenb_provide_prior_with_partial_fitp  s   

r   c                 C   s  g dg dg dg dg}g d}t jg dt jd}||  }|  j|||d}t||g d |  }|j|d d	 |d d	 g d
|d d	 d |j|d	d |d	d |d	d d |j|dd  |dd  |dd  d t||g d d S )Nr   r   r   r   r   )r   r   r   r   r   r   r   r   )ZdtyperG   )r   r   r   r   r   r   rI   r   )r   r*   rN   rE   r3   r   r6   r=   )r   r4   r5   rH   r>   r#   r#   r$   (test_discretenb_sample_weight_multiclass  s   .((r   use_partial_fitFTtrain_on_single_class_yc                 C   s   g dg dg dg}g d}|r|d d }|d d }t tt|}t|}|  }|r7|j|||d n||| ||d d |d ksLJ g d	}|D ]+}	t||	d }
|
d u r_qRt|
t	j
ro|
jd |ksnJ qR|
D ]}|jd |ks|J qqqRd S )
Nr   r   r   )r   r   r   r   r1   r   r   )Zclasses_r   r   r   feature_log_prob_)sortedlistsetr   r=   r3   r6   getattr
isinstancer   ZndarrayrM   )r   r   r   r4   r5   r2   Znum_classesr>   Zattribute_namesZattribute_name	attributeelementr#   r#   r$   )test_discretenb_degenerate_one_class_case  s.   r   kind)densesparsecsr_containerc                 C   s  t |\}}| dkr|}n| dkr||}t }d}tjt|d || | W d    n1 s3w   Y  ||||}t|| ||}	|	|}
t
t|	|
d t }|j|d d |d d t|d ||dd |dd  ||dd  |dd   ||}t|| ||}|	|}t
t||d t
||	 t
||
 t }|j||t|d ||}t|| ||}|	|}t
t||d t
||	 t
||
 d S )	Nr   r   z!Negative values in data passed tor/   r.   r   r1   r&   )r-   r   r:   r;   r<   r3   r6   r   r7   r8   r   r   r9   r=   rx   )r   r   r   r+   r,   r4   r>   rZ   r?   r@   rA   rQ   Zy_pred2Zy_pred_proba2Zy_pred_log_proba2r   Zy_pred3Zy_pred_proba3Zy_pred_log_proba3r#   r#   r$   	test_mnnb  sF   


&










r   c                  C   sN  t ddgddgg} t ddg}t }t  tdt |j| |g dd W d    n1 s4w   Y  |ddggdksEJ |ddggdksQJ |ddggdks]J t  tdt |ddggdg W d    n1 s|w   Y  |ddggdksJ |ddggdksJ |ddggdksJ d S )Nr   r   errorr   r1   r   )	r   r*   r   warningscatch_warningssimplefilterRuntimeWarningr=   r6   )r4   r5   r>   r#   r#   r$   !test_mnb_prior_unobserved_targets
  s"   

r   c                  C   s   t g dg dg dg dg} t g d}tdd}|| | t dd	g}tt |j| t g d
g dg}tt |j| t g dg}t ddgg}|t | }t|	|| d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rp   alphag      ?rm   )r   g?皙?r   r   r   )UUUUUU?UUUUUU?r   r   r   r   g@fg;u?gy?)
r   r*   r   r3   r   r   r   r   rE   r7   )r4   rk   r>   r   feature_probZX_testZunnorm_predict_probar7   r#   r#   r$   test_bnb'  s$   
r   c                  C   s   t g dg dg dg dg dg} t g d}tdd}|| | t |jd }t t |jd | jd	 d	fj	}t
|j||  d S )
N)r   r   r   r   r   r   r   )r   r   r   )r   r   r   r   r   rp   r   rU   r   )r   r*   r   r3   r9   r   Ztiler   rM   Tr   r   )r4   rk   r>   numdenomr#   r#   r$   test_bnb_feature_log_probV  s   (
$r   c                  C   s~  t g dg dg dg dg} t g d}t g dg dg}t |j}t |j}tdD ]}t ||  ||< || ||   ||< q3td	d
}t	d}t
jt|d ||  | W d    n1 sow   Y  || | t g dg dg}t|j| t ddg}	t|j|	 t g d}
t|j|
 t|j| td	dd}|| | t|j| d S )Nr   r   r   r   r   )qq?qq?r   r   r   r   )UUUUUU?r   UUUUUU?r   r   r   r   rp   r   z8Negative values in data passed to ComplementNB (input X)r/   )r   r   r   r   r   r   r   r   )r   rd   r   r   r   r   T)r   Znorm)r   r*   ZzerosrM   r   r9   rE   r	   reescaper:   r;   r<   r3   r   r   r   Zfeature_all_r   r   )r4   rk   thetaweightsZnormed_weightsr   r>   rZ   Zfeature_countZclass_countZfeature_allr#   r#   r$   test_cnbm  s<   

r   c                 C   s  t  }t| \}}||||}t|| tddgddgg}tddg}t ddd}||| t|jtddg td	d
gg}tdg}t	d}	t
jt|	d || W d    n1 sjw   Y  t
jt|	d ||| W d    n1 sw   Y  tddgg}
tddgg}| }t||
||  t|j|jd ksJ td	d	gd	dgd	d	gddgg}tg d}t ddd}||| t|td	d	ggtdg t|jtddg dD ]N}td	d	gd	dgd	d	gddgg}tg d}tg d| }t ddd}|j|||d t|td	d	ggtdg t|jtddg qd S )Nr   rd   r   r&   F)r   r   r   r'   r   r   z9Negative values in data passed to CategoricalNB (input X)r/   r   qq?r   )rp   r]   r&   g-C6?)r   r   r   皙?rG   )r   r-   r3   r6   r   r   r*   n_categories_r   r   r:   r;   r<   rE   r   r7   r   r   rM   )r   r>   r+   r,   r?   ZX3Zy3r4   r5   	error_msgZX3_testZbayes_numeratorZbayes_denominatorfactorrH   r#   r#   r$   test_categoricalnb  sP   

"$"$r   zDmin_categories, exp_X1_count, exp_X2_count, new_X, exp_n_categories_r   )r   r   r   r   rd   )r   r   r   r   c                 C   s   t ddgddgddgddgg}t g d}t dg}tdd| d}||| |j\}	}
t|	| t|
| ||}t|| t|j| d S )Nr   r   r   Fr   r   min_categories)r   r*   r   r3   r   r   r6   r   )r   Zexp_X1_countZexp_X2_countZnew_XZexp_n_categories_ZX_n_categoriesZy_n_categoriesZexpected_predictionr>   ZX1_countZX2_countZpredictionsr#   r#   r$   &test_categoricalnb_with_min_categories  s   ""




r   zmin_categories, error_msgz"'min_categories' should have shapec                 C   s~   t ddgddgddgddgg}t g d}tdd| d}tjt|d ||| W d    d S 1 s8w   Y  d S )Nr   r   r   Fr   r/   )r   r*   r   r:   r;   r<   r3   )r   r   r4   r5   r>   r#   r#   r$   (test_categoricalnb_min_categories_errors  s   ""r   c                 C   s  t ddgddgg}t ddg}tddd}d}tjt|d |j||ddgd W d    n1 s6w   Y  tjt|d ||| W d    n1 sSw   Y  t ddgddgg}t|	|| t
ddd}tjt|d |j||ddgd W d    n1 sw   Y  tjt|d ||| W d    n1 sw   Y  t d	d
gddgg}t|	|| tddd}tjt|d ||| W d    n1 sw   Y  t ddgddgg}t|	|| | |}tddd}tjt|d ||| W d    n	1 sw   Y  t ddgddgg}t|	|| t
ddd}tjt|d ||| W d    n	1 sRw   Y  t d	d
gddgg}t|	|| d S )Nr   r   rh   Fr   Zforce_alphazFalpha too small will result in numeric errors, setting alpha = 1.0e-10r/   r1   r   r   rp   )r   r*   r   r:   warnsUserWarningr=   r3   r   r7   r   r   )r   r4   r5   nbrZ   probr#   r#   r$   
test_alpha*  sP   r   c            	      C   s  t ddgddgg} t ddg}t ddg}t|dd}|j| |ddgd t ddgdd	gg}t|jt | t d
dgddgg}t|| | t ddg}t|dd}d}tj	t
|d || | W d    n1 sww   Y  d}t |d dg}t|dd}|j| |ddgd t| |dgdd t g d}t|dd}d}tj	t
|d || | W d    d S 1 sw   Y  d S )Nr   r   r   Fr   r1   r   r   g333333?grq?r   gS?gևX?rp   r^   z+All values in alpha must be greater than 0.r/   r~      )decimal)rp   rU   g      @z7When alpha is an array, it should contains `n_features`)r   r*   r   r=   r   r   r9   r7   r:   r;   r<   r3   _check_alpha)	r4   r5   r   r   r   r   Zm_nbZexpected_msgZ	ALPHA_MINr#   r#   r$   test_alpha_vectorU  s4   "r   c                  C   sB  t dd\} }t|dk|dk}| | || }}ttdd| |dd}| dks-J ttdd||dd}| d	ks@J ttdd| d
k|dd}| dksUJ ttdd|d
k|dd}| dksjJ tt | |dd}| dks{J ttdd| |dd}| dksJ tt ||dd}| dksJ d S )NT)Z
return_X_yr   r.   r   r   )ZcvgQ?gGz?rd   g(\?gq=
ףp?gp=
ף?r   )Zvar_smoothingg{Gz?)r   r   
logical_orr   r   rt   r   r
   )r4   r5   Z
binary_3v8ZX_3v8Zy_3v8Zscoresr#   r#   r$   test_check_accuracy_on_digits}  s"   r   c                  C   sT  d} t ddd}| dksJ tddg}t |dd}|jd |_t| | d|  }t ddd}tjt	|d	 | | ksDJ W d
   n1 sNw   Y  t ddd}tjt	|d	 | | ksiJ W d
   n1 ssw   Y  t |dd}|jd |_tjt	|d	 t| t| dg W d
   d
S 1 sw   Y  d
S )zThe provided value for alpha must only be
    used if alpha < _ALPHA_MIN and force_alpha is True.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/10772
    r~   r   Tr   rh   rp   zCalpha too small will result in numeric errors, setting alpha = %.1eFr/   N)
r   r   r   r*   rM   Zn_features_in_r   r:   r   r   )Z
_ALPHA_MINbalphasrZ   r#   r#   r$   test_check_alpha  s0   "r   	Estimatorc                 C   sT   t |\}}|  ||}||}t|dd}|t|j }t||| d S )Nr   r   )	r-   r3   Zpredict_joint_log_probar   r   Z
atleast_2dr   r   r8   )r   r   r+   r,   ZestZjllZ
log_prob_xZlog_prob_x_yr#   r#   r$   test_predict_joint_proba  s   
r   c                 C   s2   |    }| tu r|jjsJ d S |jjrJ d S )N)Z__sklearn_tags__r   Z
input_tagsZcategorical)r   tagsr#   r#   r$   test_categorical_input_tag  s   
r   )Fr   r   numpyr   r:   Zscipy.specialr   Zsklearn.datasetsr   r   Zsklearn.model_selectionr   r   Zsklearn.naive_bayesr   r   r	   r
   r   Zsklearn.utils._testingr   r   r   r   Zsklearn.utils.fixesr   ZDISCRETE_NAIVE_BAYES_CLASSESZALL_NAIVE_BAYES_CLASSESr*   r4   r5   r%   r-   rB   rF   rS   r[   r`   rl   ro   rq   rr   rw   ry   r   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r#   r#   r$   <module>   s    
.	
'	
		
	
1
!



27/G7	


	
*(!%
	