U
    ½mœd¹‡  ã                   @   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 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 d d
lmZmZ d dlmZmZ d dl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"ej# $d ¡Z%e%j&dd�Z'e%j&dd�d k (e)¡Z*e%j+ddd�Z,e  ddddddg¡Z-dd„ Z.dd„ Z/dd„ Z0d d!„ Z1d"d#„ Z2d$d%„ Z3d&d'„ Z4d(d)„ Z5d*d+„ Z6d,d-„ Z7d.d/„ Z8d0d1„ Z9ej :d2e¡d3d4„ ƒZ;ej :d2e¡d5d6„ ƒZ<ej :d7e¡d8d9„ ƒZ=d:d;„ Z>ej :d2e¡d<d=„ ƒZ?ej :d2e¡d>d?„ ƒZ@ej :d2e¡d@dA„ ƒZAej :d2e¡dBdC„ ƒZBej :d2e¡ej :dDdEdFg¡ej :dGdEdFg¡dHdI„ ƒƒƒZCej :dJdK¡dLdM„ ƒZDdNdO„ ZEdPdQ„ ZFdRdS„ ZGdTdU„ ZHdVdW„ ZIej :dXde  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  ddg¡fddYge  dd d gddd gg¡e  ddd d gddd d gg¡e  d dgg¡e  ddYg¡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¡dZd[„ ƒZJej :d\ddgddYggd]fg¡d^d_„ ƒZKd`da„ ZLdbdc„ ZMddde„ ZNej :dfe¡ej :dgddhdigdjg¡dkdl„ ƒƒZOdmdn„ ZPej :dfe¡dodp„ ƒZQdS )qé    N)Ú	logsumexp)Úload_digitsÚ	load_iris)Útrain_test_split)Úcross_val_score)Úassert_almost_equal)Úassert_array_equal)Úassert_array_almost_equal)Úassert_allclose)Ú
GaussianNBÚBernoulliNB)ÚMultinomialNBÚComplementNB)ÚCategoricalNBz/The default value for `force_alpha` will changezignore:z:FutureWarningéþÿÿÿéÿÿÿÿé   é   )é
   é   )Úsizer   é   )é   éd   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	   ÚnpÚlogÚpytestÚraisesÚ
ValueErrorÚpartial_fit)ÚclfÚy_predÚy_pred_probaÚy_pred_log_proba© r/   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/tests/test_naive_bayes.pyÚtest_gnb-   s    


 ÿr1   c                  C   sL   t ƒ  tt¡} tt ddg¡d | jdƒ t ƒ  tt	¡} t| j 
¡ dƒ d S )Nr   ç      @r   r   )r   r   r    r!   r	   r%   ÚarrayÚclass_prior_ÚX1Úy1Úsum©r+   r/   r/   r0   Útest_gnb_priorC   s    r9   c                  C   sB  t  d¡} tƒ  tt¡}tƒ  tt| ¡}t|j|jƒ t|j|jƒ t	 
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ƒ t	 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   ©r   r;   é   )Z	minlengthN)r%   Zonesr   r   r    r!   r	   Útheta_Úvar_ÚrngZrandÚshaper*   ÚrandintZbincountÚastypeÚfloat64)Úswr+   Zclf_swÚclf1Úclf2Úindr;   Zclf_duplr/   r/   r0   Útest_gnb_sample_weightL   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 whether an error is raised in case of negative priorsg      ð¿ç       @©ÚpriorszPriors must be non-negativer   N©	r   r%   r3   r'   r(   r)   r   r    r!   ©r+   Úmsgr/   r/   r0   Útest_gnb_neg_priorsq   s    rP   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æ?rK   çš™™™™™¹¿g[È9ãhê?g–Žßs\Æ?r   N)	r   r%   r3   r   r    r!   r	   r#   r4   r8   r/   r/   r0   Útest_gnb_priorsz   s    ýrS   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   rK   )r%   r3   r   r   )r    rL   ÚYr+   r/   r/   r0   Útest_gnb_priors_sum_isclose…   s"    öÿ
r\   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ç      Ð?rK   ú-Number of priors must match number of classesr   NrM   rN   r/   r/   r0   Útest_gnb_wrong_nb_priorsœ   s    r_   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 onerJ   ç      ð?rK   z!The sum of the priors should be 1r   NrM   rN   r/   r/   r0   Útest_gnb_prior_greater_one¦   s    ra   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®ï?rK   rR   r   N)r   r%   r3   r   r    r!   r"   ÚAssertionErrorr8   r/   r/   r0   Útest_gnb_prior_large_bias¯   s    rc   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   rX   r`   r   r   N)r%   Úemptyr    rA   r   Z_update_mean_variancerb   )Zprev_pointsÚmeanÚvarZx_emptyZtmeanÚtvarr/   r/   r0   Ú"test_gnb_check_update_with_no_data¶   s    rh   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   r   r    r!   r*   r%   Úuniquer	   r>   r?   r4   )r+   Zclf_pfZclf_pf2r/   r/   r0   Útest_gnb_partial_fitÂ   s    2 rj   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   r   r"   )Ú.0Úf©r    r!   r/   r0   Ú
<listcomp>Ô   s     z9test_gnb_naive_bayes_scale_invariance.<locals>.<listcomp>)ç»½×Ùß|Û=r   g    _ Br   r   r   )r   ÚdataÚtargetr   )ÚirisÚlabelsr/   rm   r0   Ú%test_gnb_naive_bayes_scale_invarianceÐ   s
    rt   ÚDiscreteNaiveBayesc                 C   s6   | ƒ   tt¡}tt t dddg¡d ¡|jdƒ d S )Nr   r2   r   )r   ÚX2Úy2r	   r%   r&   r3   Úclass_log_prior_)ru   r+   r/   r/   r0   Útest_discretenb_priorÙ   s      ÿry   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   r   ©Zaxisr   )r   r*   r   Úclass_count_r   ÚrangeÚlenÚcategory_count_Úfeature_count_rA   r%   r7   r3   )ru   rF   rG   ÚiÚclf3r/   r/   r0   Útest_discretenb_partial_fitâ   s:    $,

 
ÿþ r‚   Ú
NaiveBayesc              	   C   sx   t jtdd�� | ƒ  tt¡ W 5 Q R X | ƒ }|jttt t¡d� t jtdd�� |jttt d¡d� W 5 Q R X d S )Nz8classes must be passed on the first call to partial_fit.r   r   ú.is not the same as on last call to partial_fité*   )	r'   r(   r)   r*   rv   rw   r%   ri   Zarange)rƒ   r+   r/   r/   r0   Ú$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   rW   r   r   )r   r   rz   r`   r   )r   r   )r   r   )Úzipr   r   r   r"   rb   r#   rA   r	   r7   r%   r3   r   Úexprx   )ZX_bernoulliZX_multinomialr!   ru   r    r+   r/   r/   r0   Útest_discretenb_predict_proba%  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_paramsr   r%   rˆ   rx   r	   r3   )ru   r+   Úpriorr/   r/   r0   Útest_discretenb_uniform_priorF  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   r^   r   r   r„   r   )
r   r%   rˆ   rx   r	   r3   r'   r(   r)   r*   )ru   r+   rŒ   rO   r/   r/   r0   Útest_discretenb_provide_priorR  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_staterQ   rŽ   r   r   r   r   )r   r   rp   rq   r   r*   r	   rx   )	ru   rr   Z
iris_data1Z
iris_data2Ziris_target1Ziris_target2rŒ   Zclf_fullZclf_partialr/   r/   r0   Ú.test_discretenb_provide_prior_with_partial_fite  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dtyper:   r<   r   )r%   r3   rD   r7   r   r   r"   r*   )ru   r    r!   r;   r+   r/   r/   r0   Ú(test_discretenb_sample_weight_multiclassz  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   r   Zclasses_r{   rx   r   Úfeature_log_prob_)ÚsortedÚlistÚsetr}   r*   r   r"   rb   ÚgetattrÚ
isinstancer%   ZndarrayrA   )ru   r”   r•   r    r!   r   Znum_classesr+   Zattribute_namesZattribute_nameÚ	attributeÚelementr/   r/   r0   Ú)test_discretenb_degenerate_one_class_case‘  s4    
ûrž   Úkind)ÚdenseÚsparsec              	   C   s¶  | dkrt }n| dkr"tj t ¡}tƒ }d}tjt|d�� | | t	¡ W 5 Q R X | |t	¡ 
|¡}t|t	ƒ | |¡}| |¡}tt |¡|dƒ tƒ }|j|d d… t	d d… t t	¡d� | |dd… t	dd… ¡ | |dd … t	dd … ¡ | 
|¡}t|t	ƒ | |¡}	| |¡}
tt |	¡|
dƒ t|	|ƒ t|
|ƒ tƒ }|j|t	t t	¡d� | 
|¡}t|t	ƒ | |¡}| |¡}tt |¡|dƒ t||ƒ t||ƒ d S )	Nr    r¡   z!Negative values in data passed tor   r   r   r   r   )rv   Úscipyr¡   Ú
csr_matrixr   r'   r(   r)   r   rw   r"   r   r#   r$   r	   r%   r&   r*   ri   )rŸ   r    r+   rO   r,   r-   r.   rG   Zy_pred2Zy_pred_proba2Zy_pred_log_proba2r�   Zy_pred3Zy_pred_proba3Zy_pred_log_proba3r/   r/   r0   Ú	test_mnnbÆ  sB    


&










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   r   )
r%   r3   r   ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr*   r"   rb   )r    r!   r+   r/   r/   r0   Ú!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   r`   ©Úalphag      è?r]   r‘   gš™™™™™é?gš™™™™™É?çUUUUUUÕ?çUUUUUUå?g¦@fgÑ;u?gÇ¿à€y–?)
r%   r3   r   r   r	   rˆ   rx   r–   r7   r#   )r    r[   r+   r�   Úfeature_probZX_testZunnorm_predict_probar#   r/   r/   r0   Ú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   r`   r«   rJ   )r%   r3   r   r   r&   r   Ztiler{   rA   ÚTr	   r–   )r    r[   r+   ÚnumÚdenomr/   r/   r0   Útest_bnb_feature_log_probI  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   r`   r«   z8Negative values in data passed to ComplementNB (input X)r   r   rW   T)r¬   Znorm)r%   r3   ZzerosrA   r|   r&   r7   r   ÚreÚescaper'   r(   r)   r   r   r   r{   Zfeature_all_r	   r–   )r    r[   ÚthetaÚweightsZnormed_weightsr€   r+   rO   Zfeature_countZclass_countZfeature_allr/   r/   r0   Útest_cnb`  sR    :ÿú	ú÷ÿ

&rº   c               	   C   sp  t ƒ } |  tt¡ 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�s:t‚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   rW   r   r   F)r¬   rŠ   r   r   r   r   z9Negative values in data passed to CategoricalNB (input X)r   rµ   çÇqÇqÜ?)r`   rQ   r   g-Cëâ6?r   çš™™™™™¹?r:   )r   r   rv   rw   r"   r   r%   r3   Ún_categories_r¶   r·   r'   r(   r)   r7   r	   r#   r}   r~   rA   rb   )r+   r,   ZX3Zy3r    r!   Ú	error_msgZX3_testZbayes_numeratorZbayes_denominatorÚfactorr;   r/   r/   r0   Útest_categoricalnb§  sJ    

 ÿ"$"$rÀ   zDmin_categories, exp_X1_count, exp_X2_count, new_X, exp_n_categories_rW   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%   r3   r   r   r~   r   r"   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/   r0   Ú&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%   r3   r   r'   r(   r)   r   )rÂ   r¾   r    r!   r+   r/   r/   r0   Ú(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   rX   r«   zFalpha too small will result in numeric errors, setting alpha = 1.0e-10r   r   r®   r­   r`   )r%   r3   r   r'   ÚwarnsÚUserWarningr*   r   r	   r#   r   r   r¢   r¡   r£   )r    r!   ÚnbrO   Úprobr/   r/   r0   Ú
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«   r   r‹   r‘   g333333ã?grÇqÇá?r»   g¼œ‚—Sà?gÖ‡ÆúÐXß?r`   rR   z+All values in alpha must be greater than 0.r   ro   é   )ÚdecimalrJ   g      @z7When alpha is an array, it should contains `n_features`)r%   r3   r   r*   r	   r–   r&   r#   r'   r(   r)   r   Ú_check_alpha)	r    r!   r¬   rÇ   r¯   rÈ   Zm_nbZexpected_msgZ	ALPHA_MINr/   r/   r0   Útest_alpha_vectorF  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î?rW   g�Âõ(\�ê?gq=
×£pí?g¤p=
×£è?r¼   )Zvar_smoothingg{®Gázì?)	r   r%   Ú
logical_orr   r   re   rb   r   r   )r    r!   Z
binary_3v8ZX_3v8Zy_3v8Zscoresr/   r/   r0   Útest_check_accuracy_on_digitsn  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   rW   r   ro   z9The default value for `force_alpha` will change to `True`r«   T©r¬   Zforce_alphar   )r   r›   r˜   r'   Úskipr%   r3   ÚminrÅ   ÚFutureWarningr   )rÐ   r¬   r    r!   Z	alpha_minrO   ÚestZ	est_forcer/   r/   r0   Ú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
    ro   r   TrÑ   rX   r`   zCalpha too small will result in numeric errors, setting alpha = %.1eFr   r«   N)r   rÌ   rb   r%   r3   rA   Zn_features_in_r   r'   rÅ   rÆ   )Z
_ALPHA_MINÚbÚalphasrO   r/   r/   r0   Útest_check_alpha£  s*    ÿÿ
rÙ   c                 C   sH   | ƒ   tt¡}| t¡}t|dd�}|t |¡j }t| 	t¡|ƒ d S )Nr   rz   )
r   rv   rw   Zpredict_joint_log_probar   r%   Z
atleast_2dr±   r
   r$   )rÐ   rÕ   ZjllZ
log_prob_xZlog_prob_x_yr/   r/   r0   Útest_predict_joint_probaÈ  s
    
rÚ   )Rr¶   Únumpyr%   Zscipy.sparser¢   r'   r¦   Zscipy.specialr   Zsklearn.datasetsr   r   Zsklearn.model_selectionr   r   Zsklearn.utils._testingr   r   r	   r
   Zsklearn.naive_bayesr   r   r   r   r   ZDISCRETE_NAIVE_BAYES_CLASSESZALL_NAIVE_BAYES_CLASSESrO   ÚmarkÚfilterwarningsZ
pytestmarkr3   r    r!   ÚrandomZRandomStater@   Únormalr5   rC   Úintr6   rB   rv   rw   r1   r9   rI   rP   rS   r\   r_   ra   rc   rh   rj   rt   Zparametrizery   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/   r0   Ú<module>   sÌ   
.	%	
		

1
!



2
6/G5û	û
ûíþ
ÿþ

*("%