a
    hS                     @   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 ZDdS )g    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#   Z/var/www/html/assistant/venv/lib/python3.9/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    n1 s0    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   sV   t tddgd} d}tjt|d | tt W d   n1 sH0    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   s    rZ   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?rU   皙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?)\(?rd   gQ?rc   re           )
r   r   r   rb   r&   r'      r.   	   r   rU   )r   r*   r
   r3   )r4   rV   Yr>   r#   r#   r$   test_gnb_priors_sum_isclose   s"    
rj   c                  C   sV   t tg dd} d}tjt|d | tt W d   n1 sH0    Y  dS )z`Test whether an error is raised if the number of prior is different
    from the number of class)      ?rk   rk   rk   rU   -Number of priors must match number of classesr/   NrW   rX   r#   r#   r$   test_gnb_wrong_nb_priors   s    rm   c                  C   sV   t tddgd} d}tjt|d | tt W d   n1 sH0    Y  dS )z?Test if an error is raised if the sum of prior greater than onerT         ?rU   z!The sum of the priors should be 1r/   NrW   rX   r#   r#   r$   test_gnb_prior_greater_one   s    ro   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?rU   r\   r   N)r
   r   r*   r3   r4   r5   r6   r]   r#   r#   r$   test_gnb_prior_large_bias   s    rp   c                  C   sP   d} d}d}t dtjd f}t| |||\}}||ks@J ||ksLJ dS )z4Test when the partial fit is called without any datar(   rf   rn   r   r   N)r   emptyr4   rM   r
   Z_update_mean_variance)Zprev_pointsmeanvarZx_emptyZtmeanZtvarr#   r#   r$   "test_gnb_check_update_with_no_data   s    rt   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 rv   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>       z9test_gnb_naive_bayes_scale_invariance.<locals>.<listcomp>)绽|=r   g    _Br   r   r   )r   datatargetr   )irislabelsr#   ry   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 rt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 ]J}t|j| j	|j| j	 tt
j|j| ddt
j|j| dd qt|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 n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   s8    "*
 r   
NaiveBayesc                 C   s   t |\}}tjtdd |  || W d    n1 s>0    Y  |  }|j||t|d tjtdd& |j||tdd W d    n1 s0    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   ru   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 ]v\}}| ||}||d	d  d
ksvJ ||d gjdksJ t||d d
 jddt	
ddgd qFg d}t ttg| |gD ]\}}| ||}||dd jdksJ ||d d
 jdks*J tt	||d gd tt	||d	 gd tt	t	|jd qd S )N)r   r(   r   r   r   r   )r   r(   r   r   r   r   rb   )r   r   r   r   r   )r   r   r   rn   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 s0    Y  d
}tjt|d0 |j	dgdggddgg dd W d    n1 s0    Y  d S )Nr   class_priorr   r   r   rl   r/   r   r   r   r   r1   )
r3   r   r   r   r   r*   r:   r;   r<   r=   )r   r>   r   rY   r#   r#   r$   test_discretenb_provide_prior]  s    :r   c           	      C   s   t  }t|j|jddd\}}}}d g dfD ]V}| |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|}|  }|rn|j|||d n||| ||d d |d ksJ g d	}|D ]V}	t||	d }
|
d u rqt|
t	j
r|
jd |ksJ q|
D ]}|jd |ksJ qqd 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 sf0    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=   ru   )r   r   r   r+   r,   r4   r>   rY   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  sD    ,


&










r   c                  C   sT  t ddgddgg} t ddg}t }t 0 tdt |j| |g dd W d    n1 sh0    Y  |ddggdksJ |ddggdksJ |ddggdksJ t 0 tdt |ddggdg W d    n1 s0    Y  |ddggdksJ |ddggdks6J |ddggdksPJ 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    
2
2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   rn   alphag      ?rk   )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   ri   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   rn   r   rT   r   )r   r*   r   r3   r9   r   Ztiler   rM   Tr   r   )r4   ri   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 ]0}t ||  ||< || ||   ||< qftd	d
}t	d}t
jt|d ||  | W d    n1 s0    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   rn   r   z8Negative values in data passed to ComplementNB (input X)r/   )r   r   r   r   r   r   r   r   )r   rb   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   ri   thetaweightsZnormed_weightsr   r>   rY   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 s0    Y  t
jt|	d ||| W d    n1 s0    Y  tddgg}
tddgg}| }t||
||  t|j|jd kspJ 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 ]}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   rb   r   r&   F)r   r   r   r'   r   r   z9Negative values in data passed to CategoricalNB (input X)r/   r   qq?r   )rn   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  sJ    

(,"$"$r   zDmin_categories, exp_X1_count, exp_X2_count, new_X, exp_n_categories_r   )r   r   r   r   rb   )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    n1 sn0    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 sl0    Y  tjt|d ||| W d    n1 s0    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 s0    Y  tjt|d ||| W d    n1 sX0    Y  t d	d
gddgg}t|	|| tddd}tjt|d ||| W d    n1 s0    Y  t ddgddgg}t|	|| | |}tddd}tjt|d ||| W d    n1 s<0    Y  t ddgddgg}t|	|| t
ddd}tjt|d ||| W d    n1 s0    Y  t d	d
gddgg}t|	|| d S )Nr   r   rf   Fr   Zforce_alphazFalpha too small will result in numeric errors, setting alpha = 1.0e-10r/   r1   r   r   rn   )r   r*   r   r:   warnsUserWarningr=   r3   r   r7   r   r   )r   r4   r5   nbrY   probr#   r#   r$   
test_alpha*  sB    2*4,,,,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 s0    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    n1 s0    Y  d S )Nr   r   r   Fr   r1   r   r   g333333?grq?r   gS?gևX?rn   r\   z+All values in alpha must be greater than 0.r/   r|      )decimal)rn   rT   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  s0    *r   c                  C   sF  t dd\} }t|dk|dk}| | ||  }}ttdd| |dd}| dksZJ ttdd||dd}| d	ksJ ttdd| d
k|dd}| dksJ ttdd|d
k|dd}| dksJ tt | |dd}| dksJ ttdd| |dd}| dksJ tt ||dd}| dksBJ d S )NT)Z
return_X_yr   r.   r   r   )ZcvgQ?gGz?rb   g(\?gq=
ףp?gp=
ף?r   )Zvar_smoothingg{Gz?)r   r   
logical_orr   r   rr   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sJ W d
   n1 s0    Y  t ddd}tjt	|d	  | | ksJ W d
   n1 s0    Y  t |dd}|jd |_tjt	|d	( t| t| dg W d
   n1 sF0    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   rf   rn   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bZalphasrY   r#   r#   r$   test_check_alpha  s*    ..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   )Er   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   rZ   r^   rj   rm   ro   rp   rt   rv   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$   <module>   s   
.	
'	
		
	
1
!



27/G7	


	
*(!%