a
    �ù»jŒ  ã                   @   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#   úDE:\soccer\ml_env\Lib\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 s‚0    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 usedç333333Ó?gffffffæ?rU   çš™™™™™¹¿g[È9ãhê?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{®Gáz´?çìQ¸…ëÁ?g¸…ëQ¸ž?ç{®GázÄ?ç)\�Âõ(¼?rd   gìQ¸…ë±?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{®Gáz„?g®Gáz®ï?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 ršt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 �rÞt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 sž0    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s�J ‚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ƒ qØd 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 sŽ0    Y  d
}tjt|d��0 |j	dgdggddgg d¢d� W d   ƒ n1 sà0    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s˜J ‚g d	¢}|D ]V}	t||	d ƒ}
|
d u r¾q¤t|
t	j
ƒrÞ|
jd |ksúJ ‚q¤|
D ]}|jd |ksâJ ‚qâq¤d 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sŠJ ‚| ddgg¡dks¢J ‚| ddgg¡dksºJ ‚t ¡ �0 t dt¡ | ddggdg¡ W d   ƒ n1 sø0    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 sÞ0    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 sÔ0    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¡ƒ �qöd 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 s¦0    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 �sÆ0    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 �sª0    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 sî0    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 �s”0    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s€J ‚ttdd�| d
k|dd�}| ¡ dksªJ ‚ttdd�|d
k|dd�}| ¡ dksÔJ ‚ttƒ | |dd�}| ¡ dksöJ ‚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cvg…ëQ¸…ë?g®Gázî?rb   g�Âõ(\�ê?gq=
×£pí?g¤p=
×£è?rÖ   )Zvar_smoothingg{®Gázì?)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sˆJ ‚W d
  ƒ n1 sœ0    Y  t ddd�}tjt	|d	��  | ¡ | ksÒJ ‚W d
  ƒ n1 sæ0    Y  t |dd�}|jd |_tjt	|d	��( t| ¡ t | dg¡ƒ W d
  ƒ n1 �sF0    Y  d
S )zÂThe 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û	û
ûíþ
ÿþ
	
*(!%