U
    _»{jqŠ  ã                   @   s  d dl Z 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 eeeegZeeg ZdZej de› d	�¡Ze  d
dgddgdd
gddgddgddgg¡Z!e  ddddddg¡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)„ Z0ej 1d*e¡d+d,„ ƒZ2ej 1d*e¡d-d.„ ƒZ3ej 1d/e¡d0d1„ ƒZ4d2d3„ Z5ej 1d*e¡d4d5„ ƒZ6ej 1d*e¡d6d7„ ƒZ7ej 1d*e¡d8d9„ ƒZ8ej 1d*e¡d:d;„ ƒZ9ej 1d*e¡ej 1d<d=d>g¡ej 1d?d=d>g¡d@dA„ ƒƒƒZ:ej 1dBdC¡dDdE„ ƒZ;dFdG„ Z<dHdI„ Z=dJdK„ Z>dLdM„ Z?dNdO„ Z@ej 1dPdQe  dd d gddd gg¡e  ddd gddd gg¡e  d dgg¡e  dQdQg¡fdQdRge  dd d gddd gg¡e  ddd d gddd d gg¡e  d dQgg¡e  dQdRg¡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¡dSdT„ ƒZAej 1dUdQdgddRggdVfg¡dWdX„ ƒZBdYdZ„ ZCd[d\„ ZDd]d^„ ZEej 1d_e¡ej 1d`ddadbgdcg¡ddde„ ƒƒZFdfdg„ ZGej 1d_e¡dhdi„ ƒZHdS )jé    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_equalz/The default value for `force_alpha` will changezignore:z:FutureWarningéþÿÿÿéÿÿÿÿé   é   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"   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/tests/test_naive_bayes.pyÚget_random_normal_x_binary_y$   s    r$   c                 C   s8   t j | ¡}|jddd�}t  ddddddg¡}||fS )Né   )é   éd   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 5 Q R X 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_gnb5   s    


 ÿrA   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
   r2   r3   r4   r   r   r)   Úclass_prior_r$   Úsum)r   r=   r    r!   r"   r"   r#   Útest_gnb_priorK   s
    rE   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   ©r1   rG   é   )Z	minlengthN)r   Zonesr
   r2   r3   r4   r   Útheta_Úvar_r   r   ZrandÚshaper<   r(   Zbincountr   Úfloat64)
r   Úswr=   Zclf_swr   Úclf1Úclf2ÚindrG   Zclf_duplr"   r"   r#   Útest_gnb_sample_weightU   s(    
rR   c               	   C   sB   t t ddg¡d�} d}tjt|d�� |  tt¡ W 5 Q R X dS )z:Test whether an error is raised in case of negative priorsg      ð¿ç       @©ÚpriorszPriors must be non-negativer.   N©	r
   r   r)   r9   r:   r;   r2   r3   r4   ©r=   Úmsgr"   r"   r#   Útest_gnb_neg_priors|   s    rY   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æ?rT   çš™™™™™¹¿g[È9ãhê?g–Žßs\Æ?r-   N)	r
   r   r)   r2   r3   r4   r   r6   rC   ©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  ddddddddddg
¡}t  dddd	d
dddddg
¡}t|d�}| | |¡ d S )Nr   r   éýÿÿÿéüÿÿÿéûÿÿÿr   r   r   é   r%   g{®Gáz´?gìQ¸…ëÁ?g¸…ëQ¸ž?g{®GázÄ?g)\�Âõ(¼?gìQ¸…ë±?ç        r&   é   r-   é	   r   rT   )r   r)   r
   r2   )r3   rU   ÚYr=   r"   r"   r#   Útest_gnb_priors_sum_isclose�   s"    öÿ
rf   c               	   C   sF   t t ddddg¡d�} d}tjt|d�� |  tt¡ W 5 Q R X dS )z`Test whether an error is raised if the number of prior is different
    from the number of classç      Ð?rT   ú-Number of priors must match number of classesr.   NrV   rW   r"   r"   r#   Útest_gnb_wrong_nb_priors§   s    ri   c               	   C   sB   t t ddg¡d�} d}tjt|d�� |  tt¡ W 5 Q R X dS )z?Test if an error is raised if the sum of prior greater than onerS   ç      ð?rT   z!The sum of the priors should be 1r.   NrV   rW   r"   r"   r#   Útest_gnb_prior_greater_one±   s    rk   c                  C   sD   t t ddg¡d�} |  tt¡ |  ddgg¡t dg¡ks@t‚dS )z@Test if good prediction when class prior favor largely one classg{®Gáz„?g®Gáz®ï?rT   r[   r   N)r
   r   r)   r2   r3   r4   r5   ÚAssertionErrorr\   r"   r"   r#   Útest_gnb_prior_large_biasº   s    rm   c                  C   sP   d} d}d}t  dtjd f¡}t | |||¡\}}||ks@t‚||ksLt‚dS )z4Test when the partial fit is called without any datar'   rb   rj   r   r   N)r   Úemptyr3   rL   r
   Z_update_mean_variancerl   )Zprev_pointsÚmeanÚvarZx_emptyZtmeanÚtvarr"   r"   r#   Ú"test_gnb_check_update_with_no_dataÁ   s    rr   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
   r2   r3   r4   r<   r   Úuniquer   rJ   rK   rC   )r=   Zclf_pfZclf_pf2r"   r"   r#   Útest_gnb_partial_fitÍ   s    2 rt   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
   r2   r5   )Ú.0Úf©r3   r4   r"   r#   Ú
<listcomp>ß   s     z9test_gnb_naive_bayes_scale_invariance.<locals>.<listcomp>)ç»½×Ùß|Û=r   g    _ Br   r   r   )r   ÚdataÚtargetr   )ÚirisÚlabelsr"   rw   r#   Ú%test_gnb_naive_bayes_scale_invarianceÛ   s
    r~   ÚDiscreteNaiveBayesc                 C   sB   t |ƒ\}}| ƒ  ||¡}tt t dddg¡d ¡|jdƒ d S )Nr   rB   r-   )r,   r2   r   r   r8   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dddg¡ | ƒ }|jddgddgddggdddgddgd� t|j|jƒ | tk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k�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   r0   ©Zaxisr   )r2   r<   r   Úclass_count_r   ÚrangeÚlenÚcategory_count_Úfeature_count_rL   r   rD   r)   )r   rO   rP   ÚiÚclf3r"   r"   r#   Útest_discretenb_partial_fitî   s:    $,

 
ÿþ rŠ   Ú
NaiveBayesc              	   C   s„   t |ƒ\}}tjtdd�� | ƒ  ||¡ W 5 Q R X | ƒ }|j||t |¡d� tjtdd�� |j||t d¡d� W 5 Q R X d S )Nz8classes must be passed on the first call to partial_fit.r.   r0   ú.is not the same as on last call to partial_fité*   )r,   r9   r:   r;   r<   r   rs   Zarange)r‹   r   r*   r+   r=   r"   r"   r#   Ú$test_NB_partial_fit_no_first_classes   s     ÿ ÿrŽ   c                  C   sŠ  dddgdddgdddgg} ddgddgddgg}dddg}t ttg| |gƒD ]v\}}|ƒ  ||¡}| |dd … ¡dks~t‚| |d g¡jdks˜t‚t| |d d… ¡j	dd	�t
 d
d
g¡dƒ qNdddg}t ttg| |gƒD ]¢\}}|ƒ  ||¡}| |dd… ¡jdk�st‚| |d d… ¡jdk�s4t‚tt
 	| |d g¡¡dƒ tt
 	| |d g¡¡dƒ tt
 	t
 |j¡¡dƒ qâd S )Nr   r'   r   r   ra   r   r   )r   r   r‚   rj   r&   )r   r   )r   r   )Úzipr   r   r2   r5   rl   r6   rL   r   rD   r   r)   r   Úexpr€   )ZX_bernoulliZX_multinomialr4   r   r3   r=   r"   r"   r#   Útest_discretenb_predict_proba3  s4    
 ÿ  ÿ
 ÿr‘   c                 C   sT   | ƒ }|j dd� | dgdgdggdddg¡ t |j¡}t|t ddg¡ƒ d S )NF)Ú	fit_priorr   r   ç      à?)Z
set_paramsr2   r   r�   r€   r   r)   )r   r=   Úpriorr"   r"   r#   Útest_discretenb_uniform_priorT  s
    r•   c              	   C   sÌ   | ddgd�}|  dgdgdggdddg¡ t |j¡}t|t ddg¡ƒ d}tjt|d��$ |  dgdgdggdddg¡ W 5 Q R X d}tjt|d��( |j	dgdggddgdddgd	� W 5 Q R X d S )
Nr“   ©Úclass_priorr   r   rh   r.   r   rŒ   r0   )
r2   r   r�   r€   r   r)   r9   r:   r;   r<   )r   r=   r”   rX   r"   r"   r#   Útest_discretenb_provide_prior`  s    (r˜   c           	      C   sŽ   t ƒ }t|j|jddd�\}}}}d dddgfD ]X}| |d�}| |j|j¡ | |d�}|j||dddgd	� | ||¡ t|j|jƒ q0d S )
Nçš™™™™™Ù?iŸ  )Z	test_sizeZrandom_staterZ   r–   r   r   r   r0   )r   r   rz   r{   r2   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_fits  s"       ÿ

 ÿrš   c                 C   s   dddgdddgdddgdddgg}ddddg}t jddddgt jd�}|| ¡  }| ƒ j|||d�}t| |¡ddddgƒ | ƒ }|j|d d… |d d… dddg|d d… d� |j|dd… |dd… |dd… d� |j|dd … |dd … |dd … d� t| |¡ddddgƒ d S )Nr   r   r   )ZdtyperF   rH   r   )r   r)   rM   rD   r2   r   r5   r<   )r   r3   r4   rG   r=   r"   r"   r#   Ú(test_discretenb_sample_weight_multiclassˆ  s    ü0((r›   Úuse_partial_fitFTÚtrain_on_single_class_yc                 C   s  dddgdddgdddgg}dddg}|rB|d d… }|d d… }t tt|ƒƒƒ}t|ƒ}| ƒ }|rv|j|||d� n| ||¡ | |d d… ¡|d ks t‚dddd	d
g}|D ]V}	t||	d ƒ}
|
d krÌq²t	|
t
jƒrì|
jd |ksêt‚q²|
D ]}|jd |ksðt‚qðq²d S )Nr   r   r   r   r0   Zclasses_rƒ   r€   r‡   Úfeature_log_prob_)ÚsortedÚlistÚsetr…   r<   r2   r5   rl   ÚgetattrÚ
isinstancer   ZndarrayrL   )r   rœ   r�   r3   r4   r1   Znum_classesr=   Zattribute_namesZattribute_nameÚ	attributeÚelementr"   r"   r#   Ú)test_discretenb_degenerate_one_class_caseŸ  s4    
ûr¦   Úkind)ÚdenseÚsparsec              	   C   sÂ  t |ƒ\}}| dkr|}n| dkr.tj |¡}tƒ }d}tjt|d�� | | |¡ W 5 Q R X | ||¡ 	|¡}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   r0   r%   )r,   Úscipyr©   Ú
csr_matrixr   r9   r:   r;   r2   r5   r   r6   r7   r   r   r8   r<   rs   )r§   r   r*   r+   r3   r=   rX   r>   r?   r@   rP   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   s,  t  ddgddgg¡} t  ddg¡}tƒ }t ¡ �( t dt¡ |j| |dddgd� W 5 Q R X | ddgg¡dksxt	‚| ddgg¡dks�t	‚| ddgg¡dks¨t	‚t ¡ �& t dt¡ | ddggdg¡ W 5 Q R X | ddgg¡dksôt	‚| ddgg¡dk�st	‚| ddgg¡dk�s(t	‚d S )Nr   r   Úerrorr   r0   )
r   r)   r   ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr<   r5   rl   )r3   r4   r=   r"   r"   r#   Ú!test_mnb_prior_unobserved_targets  s    
 
r²   c                  C   s  t  ddddddgddddddgddddddgddddddgg¡} t  ddddg¡}tdd�}| | |¡ t  ddg¡}tt  |j¡|ƒ t  ddd	ddd	gd
ddd
d
dgg¡}tt  |j¡|ƒ t  ddddddgg¡}t  ddgg¡}|t  |¡ }t| 	|¡|ƒ d S )Nr   r   rj   ©Úalphag      è?rg   r™   gš™™™™™é?gš™™™™™É?çUUUUUUÕ?çUUUUUUå?g¦@fgÑ;u?gÇ¿à€y–?)
r   r)   r   r2   r   r�   r€   rž   rD   r6   )r3   re   r=   r—   Úfeature_probZX_testZunnorm_predict_probar6   r"   r"   r#   Útest_bnb)  s$    :ÿ
þÿr¸   c               	   C   s¤   t  dddgdddgdddgdddgdddgg¡} t  dddddg¡}tdd�}| | |¡ t  |jd ¡}t  t  |jd ¡| jd df¡j	}t
|j|| ƒ d S )Nr   r   r   rj   r³   rS   )r   r)   r   r2   r8   r‡   Ztilerƒ   rL   ÚTr   rž   )r3   re   r=   ÚnumÚdenomr"   r"   r#   Útest_bnb_feature_log_probX  s    2
$r¼   c                  C   s¶  t  ddddddgddddddgddddddgddddddgg¡} t  ddddg¡}t  ddddddgddddddgg¡}t  |j¡}t  |j¡}tdƒD ]0}t  || ¡ ||< || ||  ¡  ||< qštd	d
�}t 	d¡}t
jt|d�� | |  |¡ W 5 Q R X | | |¡ t  ddddddgddddddgg¡}t|j|ƒ t  ddg¡}	t|j|	ƒ t  ddddddg¡}
t|j|
ƒ t|j|ƒ td	dd�}| | |¡ t|j|ƒ d S )Nr   r   çÇqÇq¼?gÇqÇqÌ?gUUUUUUÅ?rµ   gUUUUUUµ?r   rj   r³   z8Negative values in data passed to ComplementNB (input X)r.   r   ra   T)r´   Znorm)r   r)   ZzerosrL   r„   r8   rD   r	   ÚreÚescaper9   r:   r;   r2   r   r‡   rƒ   Zfeature_all_r   rž   )r3   re   ÚthetaÚweightsZnormed_weightsrˆ   r=   rX   Zfeature_countZclass_countZfeature_allr"   r"   r#   Útest_cnbo  sR    :ÿú	ú÷ÿ

&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 5 Q R X t
jt|	d�� | ||¡ W 5 Q R X t ddgg¡}
t ddgg¡}| ¡ }t| |
¡|| ƒ t|jƒ|jd k�sFt‚t d	d	gd	dgd	d	gddgg¡}t ddddg¡}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 ddddg¡}t ddddg¡| }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   ra   r   r%   F)r´   r’   r   r&   r   r   z9Negative values in data passed to CategoricalNB (input X)r.   r½   çÇqÇqÜ?)rj   rZ   r%   g-Cëâ6?r   çš™™™™™¹?rF   )r   r,   r2   r5   r   r   r)   Ún_categories_r¾   r¿   r9   r:   r;   rD   r   r6   r…   r†   rL   rl   )r   r=   r*   r+   r>   ZX3Zy3r3   r4   Ú	error_msgZX3_testZbayes_numeratorZbayes_denominatorÚfactorrG   r"   r"   r#   Útest_categoricalnb¶  sL    

 ÿ"$"$rÈ   zDmin_categories, exp_X1_count, exp_X2_count, new_X, exp_n_categories_r   ra   c                 C   sœ   t  ddgddgddgddgg¡}t  ddddg¡}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   r2   r†   r   r5   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   sl   t  ddgddgddgddgg¡}t  ddddg¡}tdd| d�}tjt|d�� | ||¡ W 5 Q R X d S )Nr   r   r   FrÉ   r.   )r   r)   r   r9   r:   r;   r2   )rÊ   rÆ   r3   r4   r=   r"   r"   r#   Ú(test_categoricalnb_min_categories_errors  s
    "rÌ   c               	   C   sB  t  ddgddgg¡} t  ddg¡}tdd�}d}tjt|d�� |j| |ddgd� W 5 Q R X tjt|d�� | | |¡ W 5 Q R X t  ddgddgg¡}t| 	| ¡|ƒ t
dd�}tjt|d�� |j| |ddgd� W 5 Q R X tjt|d�� | | |¡ W 5 Q R X t  dd	gddgg¡}t| 	| ¡|ƒ tdd�}tjt|d�� | | |¡ W 5 Q R X t  d
dgdd
gg¡}t| 	| ¡|ƒ tj | ¡} tdd�}tjt|d�� | | |¡ W 5 Q R X t  ddgddgg¡}t| 	| ¡|ƒ t
dd�}tjt|d�� | | |¡ W 5 Q R X t  dd	gddgg¡}t| 	| ¡|ƒ d S )Nr   r   rb   r³   zFalpha too small will result in numeric errors, setting alpha = 1.0e-10r.   r0   r¶   rµ   rj   )r   r)   r   r9   ÚwarnsÚUserWarningr<   r2   r   r6   r   r   rª   r©   r«   )r3   r4   ÚnbrX   Úprobr"   r"   r#   Ú
test_alpha,  sB    




rÑ   c            	   	   C   sr  t  ddgddgg¡} t  ddg¡}t  ddg¡}t|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}tj	t
|d�� | | |¡ W 5 Q R X d}t  |d dg¡}t|d�}|j| |ddgd� t| ¡ |dgdd� t  dddg¡}t|d�}d}tj	t
|d�� | | |¡ W 5 Q R X d S )Nr   r   r   r³   r0   r“   r™   g333333ã?grÇqÇá?rÃ   g¼œ‚—Sà?gÖ‡ÆúÐXß?rj   r[   z+All values in alpha must be greater than 0.r.   ry   é   )ÚdecimalrS   g      @z7When alpha is an array, it should contains `n_features`)r   r)   r   r<   r   rž   r8   r6   r9   r:   r;   r2   Ú_check_alpha)	r3   r4   r´   rÏ   r·   rÐ   Zm_nbZexpected_msgZ	ALPHA_MINr"   r"   r#   Útest_alpha_vectorV  s0    



rÕ   c                  C   sF  t dd�\} }t |dk|dk¡}| | ||  }}ttdd�| |dd�}| ¡ dksZt‚ttdd�||dd�}| ¡ d	ks€t‚ttdd�| d
k|dd�}| ¡ dksªt‚ttdd�|d
k|dd�}| ¡ dksÔt‚ttƒ | |dd�}| ¡ dksöt‚ttdd�| |dd�}| ¡ dk�st‚ttƒ ||dd�}| ¡ dk�sBt‚d S )NT)Z
return_X_yr   r-   r   r³   )Zcvg…ëQ¸…ë?g®Gázî?ra   g�Âõ(\�ê?gq=
×£pí?g¤p=
×£è?rÄ   )Zvar_smoothingg{®Gázì?)	r   r   Ú
logical_orr   r   ro   rl   r   r
   )r3   r4   Z
binary_3v8ZX_3v8Zy_3v8Zscoresr"   r"   r#   Útest_check_accuracy_on_digits~  s"    r×   Ú	Estimatorr´   rÄ   g•dyáý¥=gê-�™—q=c              	   C   s°   | t krt|tƒrt d¡ t ddgddgg¡}t ddg¡}d}d}| |d	�}| |d
d�}t |¡|k r”tjt	|d�� | 
||¡ W 5 Q R X n| 
||¡ | 
||¡ d S )Nz7CategoricalNB does not support array-like alpha values.r   r   r   ra   r   ry   z9The default value for `force_alpha` will change to `True`r³   T©r´   Zforce_alphar.   )r   r£   r    r9   Úskipr   r)   ÚminrÍ   ÚFutureWarningr2   )rØ   r´   r3   r4   Z	alpha_minrX   ÚestZ	est_forcer"   r"   r#   Útest_force_alpha_deprecation   s    

rÞ   c               	   C   s  d} t ddd�}| ¡ dks t‚t ddg¡}t |dd�}|jd |_t| ¡ |ƒ d|  }t ddd�}tj	t
|d	�� | ¡ | ksˆt‚W 5 Q R X t dd
�}tj	t
|d	�� | ¡ | ks¼t‚W 5 Q R X t |dd�}|jd |_tj	t
|d	�� t| ¡ t | dg¡ƒ W 5 Q R X 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
    ry   r   TrÙ   rb   rj   zCalpha too small will result in numeric errors, setting alpha = %.1eFr.   r³   N)r   rÔ   rl   r   r)   rL   Zn_features_in_r   r9   rÍ   rÎ   )Z
_ALPHA_MINÚbZalphasrX   r"   r"   r#   Útest_check_alpha³  s*    ÿÿ
rà   c                 C   sT   t |ƒ\}}| ƒ  ||¡}| |¡}t|dd�}|t |¡j }t| |¡|ƒ d S )Nr   r‚   )	r,   r2   Zpredict_joint_log_probar   r   Z
atleast_2dr¹   r   r7   )rØ   r   r*   r+   rÝ   ZjllZ
log_prob_xZlog_prob_x_yr"   r"   r#   Útest_predict_joint_probaØ  s    
rá   )Ir¾   r®   Únumpyr   r9   Zscipy.sparserª   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DISCRETE_NAIVE_BAYES_CLASSESZALL_NAIVE_BAYES_CLASSESrX   ÚmarkÚfilterwarningsZ
pytestmarkr)   r3   r4   r$   r,   rA   rE   rR   rY   r]   rf   ri   rk   rm   rr   rt   r~   Z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û	û
ûíþ
ÿþ
	*("%