
    0PhS                        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   Z ej        dd	gd	d	gd	dgd
d
gd
dgdd
gg          Z ej        g d          Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,ej-        .                    de          d             Z/ej-        .                    de          d             Z0ej-        .                    de          d             Z1d  Z2ej-        .                    de          d!             Z3ej-        .                    de          d"             Z4ej-        .                    de          d#             Z5ej-        .                    de          d$             Z6ej-        .                    de          ej-        .                    d%d&d'g          ej-        .                    d(d&d'g          d)                                     Z7ej-        .                    d*d+          ej-        .                    d,e          d-                         Z8d. Z9d/ Z:d0 Z;d1 Z<d2 Z=ej-        .                    d3d4 ej        g d5g d6g           ej        g d6g d6g           ej        d dgg           ej        d4d4g          fd4d7g ej        g d5g d6g           ej        g d8g d8g           ej        d d4gg           ej        d4d7g          fd
 ej        dd gd
d
gg           ej        d
d
gd
d
gg           ej        d d
gg           ej        ddg          gg          d9             Z>ej-        .                    d:d4dgdd7ggd;fg          d<             Z?ej-        .                    d,e          d=             Z@d> ZAd? ZBd@ ZCej-        .                    dAe          dB             ZDdS )C    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                     t           j                            |           }|                    d          }|                    d          dk                        t
                    }||fS )N)
      sizer   r   )nprandomRandomStatenormalastypeint)global_random_seedrngX1y1s       ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/tests/test_naive_bayes.pyget_random_normal_x_binary_yr&   !   sZ    
)

 2
3
3C		!	!B
**"*


!	)	)#	.	.Br6M    c                     t           j                            |           }|                    dd          }t          j        g d          }||fS )N   )   d   r   )r   r   r   r   r   r   )r   r   r   randintarray)r!   r"   X2y2s       r%   $get_random_integer_x_three_classes_yr0   )   sN     )

 2
3
3C	QX	&	&B	$$$	%	%Br6Mr'   c                  2   t                      } |                     t          t                                        t                    }t          |t                     |                     t                    }|                     t                    }t          t          j
        |          |d           t          j        t          d          5  t                                          t          t          ddg           d d d            d S # 1 swxY w 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_probas       r%   test_gnbrF   2   s(   
 ,,CWWQ]]""1%%Fvq!!!$$Q''L,,Q//bf\224DaHHH
 
W
 
 
 7 7 	  A1v 6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   1DDDc                 n   t                                          t          t                    }t	          t          j        ddg          dz  |j        d           t          |           \  }}t                                          ||          }t	          |j        	                                d           d S )Nr         @r2   r   )
r   r7   r8   r9   r   r   r-   class_prior_r&   sum)r!   rB   r#   r$   s       r%   test_gnb_priorrK   H   s    
,,

1a
 
 Cbh1v..4c6FJJJ)*<==FB
,,

2r
"
"Cc.2244a88888r'   c                    t          j        d          }t                                          t          t
                    }t                                          t          t
          |          }t          |j        |j                   t          |j        |j                   t           j	        
                    |           }|                    t
          j        d                   }t                                          t          t
          |          }t                                          t          t
          ddg|dz            }|                    t          t
          |dz             t          |j        |j                   t          |j        |j                   |                    dt          j        d         d          }t          j        |t          j        d                   }t                                          t          |         t
          |                   }	t                                          t          t
          |          }t          |	j        |j                   t          |	j        |j                   t
          dk                        t           j                  }t                                          t          t
          |          }d	S )
z5Test whether sample weights are properly used in GNB.r*   r   sample_weightr   r   r6   rN      )	minlengthN)r   onesr   r7   r8   r9   r   theta_var_r   r   randshaperA   r,   bincountr   float64)
r!   swrB   clf_swr"   clf1clf2indrN   clf_dupls
             r%   test_gnb_sample_weightr_   R   s    
B
,,

1a
 
 C\\aB''Fcj&-888ch444 )

 2
3
3C	!'!*		B<<Aq33D<<##Aq1a&Q#OODQa000dk4;777di333 ++aR
(
(CKqwqz:::M||##//H\\aM22Fhov}===hmV[999 !VOOBJ//M
,,

1a}

=
=CCCr'   c                      t          t          j        ddg                    } d}t          j        t
          |          5  |                     t          t                     ddd           dS # 1 swxY w Y   dS )z:Test whether an error is raised in case of negative priorsg             @priorszPriors must be non-negativer3   N	r   r   r-   r>   r?   r@   r7   r8   r9   rB   msgs     r%   test_gnb_neg_priorsrg   y   s    
BHdC[11
2
2
2C
'C	z	-	-	-  1                    !A00A47A4c                  T   t          t          j        ddg                                        t          t
                    } t          |                     ddgg          t          j        ddgg          d           t          | j        t          j        ddg                     dS )	z6Test whether the class prior override is properly used333333?gffffff?rb   皙g[9h?gs\?r2   N)	r   r   r-   r7   r8   r9   r   r;   rI   rB   s    r%   test_gnb_priorsrm      s    
BHc3Z00
1
1
1
5
5a
;
;CD$<.))
$&789::	  
 c.#s0D0DEEEEEr'   c                     t          j        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          j        g d          }t          j        g d          }t          |          }|                    | |           d S )Nr   r   r   r   r      r)   )
g{Gz?Q?gQ?{Gz?)\(?rt   gQ?rs   ru           )
r   r   r   rr   r)   r*      r2   	   r   rb   )r   r-   r   r7   )r8   rc   YrB   s       r%   test_gnb_priors_sum_iscloserz      s    
HHHHHFFFFF	
	 	A XQQQRRF
00011A
F
#
#
#CGGAqMMMMMr'   c                      t          t          j        g d                    } d}t          j        t
          |          5  |                     t          t                     ddd           dS # 1 swxY w Y   dS )z`Test whether an error is raised if the number of prior is different
    from the number of class)      ?r|   r|   r|   rb   -Number of priors must match number of classesr3   Nrd   re   s     r%   test_gnb_wrong_nb_priorsr~      s     BH%=%=%=>>
?
?
?C
9C	z	-	-	-  1                 rh   c                      t          t          j        ddg                    } d}t          j        t
          |          5  |                     t          t                     ddd           dS # 1 swxY w Y   dS )z?Test if an error is raised if the sum of prior greater than onera         ?rb   z!The sum of the priors should be 1r3   Nrd   re   s     r%   test_gnb_prior_greater_oner      s    
BHc3Z00
1
1
1C
-C	z	-	-	-  1                 rh   c                      t          t          j        ddg                    } |                     t          t
                     |                     ddgg          t          j        dg          k    sJ dS )z@Test if good prediction when class prior favor largely one classg{Gz?gGz?rb   rk   r   N)r   r   r-   r7   r8   r9   r:   rl   s    r%   test_gnb_prior_large_biasr      sd    
BHdD\22
3
3
3CGGAqMMM;;t~&&"(A3--777777r'   c                      d} d}d}t          j        dt          j        d         f          }t	          j        | |||          \  }}||k    sJ ||k    sJ dS )z4Test when the partial fit is called without any datar+   rv   r   r   r   N)r   emptyr8   rV   r   _update_mean_variance)prev_pointsmeanvarx_emptytmeantvars         r%   "test_gnb_check_update_with_no_datar      sd     KD
Ch171:''G2;c7SSKE4D====3;;;;;;r'   c                  6   t                                          t          t                    } t                                          t          t          t          j        t                              }t          | j        |j                   t          | j	        |j	                   t          | j
        |j
                   t                                          t          dd dd d f         t          dd d         t          j        t                              }|                    t          dd d         t          dd d                    t          | j        |j                   t          | j	        |j	                   t          | j
        |j
                   d S )Nr   r   r   )r   r7   r8   r9   rA   r   uniquer   rS   rT   rI   )rB   clf_pfclf_pf2s      r%   test_gnb_partial_fitr      s)   
,,

1a
 
 C\\%%aBIaLL99Fcj&-888ch444c.0CDDDll&&qAqqqz1QTT7BIaLLIIG!$Q$14a4)))cj'.999ch555c.0DEEEEEr'   c                      t                      } | j        | j        cfddD             }t          |d         |d                    t          |d         |d                    d S )Nc                     g | ]=}t                                          |z                                |z            >S  )r   r7   r:   ).0fr8   r9   s     r%   
<listcomp>z9test_gnb_naive_bayes_scale_invariance.<locals>.<listcomp>   sC    RRRAjllq1ua((00Q77RRRr'   )绽|=r   g    _Br   r   r   )r   datatargetr   )irislabelsr8   r9   s     @@r%   %test_gnb_naive_bayes_scale_invariancer      so    ;;D9dkDAqRRRRRAQRRRFvay&),,,vay&),,,,,r'   DiscreteNaiveBayesc                     t          |          \  }} |                                 ||          }t          t          j        t          j        g d          dz            |j        d           d S )N)r   r   r   rH   r2   )r0   r7   r   r   r=   r-   class_log_prior_)r   r!   r.   r/   rB   s        r%   test_discretenb_priorr      sw     22DEEFB




"
"2r
*
*C
rx			""S())3+?    r'   c                     |             }|                     ddgddgddggg d            |             }|                    ddgddgddggg dddg           t          |j        |j                   | t          u rKt          t          |j                            D ](}t          |j        |         |j        |                    )nt          |j        |j                    |             }|                    ddggdgddg           |                    ddggdg           |                    ddggdg           t          |j        |j                   | t          u rxt          t          |j                            D ]}t          |j        |         j	        |j        |         j	                   t          t          j        |j        |         d          t          j        |j        |         d                     t          |j        d         d         t          j        ddg                     t          |j        d         d         t          j        ddg                     t          |j        d         d         t          j        ddg                     t          |j        d         d         t          j        ddg                     d S t          |j        |j                   d S )Nr   r   r   r   r   r5   axisr   )r7   rA   r   class_count_r	   rangelencategory_count_feature_count_rV   r   rJ   r-   )r   r[   r\   iclf3s        r%   test_discretenb_partial_fitr      s   DHHq!fq!fq!f%yyy111Dq!fq!fq!f-yyy1a&IIIt($*;<<<]**s4/0011 	Q 	QAt3A68LQ8OPPPP	Q 	4.0CDDDDq!fXsQF333q!fXs###q!fXs###t($*;<<<]** s4/0011 	 	A$Q'-t/CA/F/L   t+A.Q777t+A.Q777    	4/215rxA7G7GHHH 	4/215rxA7G7GHHH 	4/215rxA7G7GHHH 	4/215rxA7G7GHHHHH4.0CDDDDDr'   
NaiveBayesc                    t          |          \  }}t          j        t          d          5   |                                 ||           d d d            n# 1 swxY w Y    |             }|                    ||t          j        |                     t          j        t          d          5  |                    ||t          j        d                     d d d            d S # 1 swxY w Y   d S )Nz8classes must be passed on the first call to partial_fit.r3   r5   .is not the same as on last call to partial_fit*   )r0   r>   r?   r@   rA   r   r   arange)r   r!   r.   r/   rB   s        r%   $test_NB_partial_fit_no_first_classesr     sv    22DEEFB	T
 
 
 ) ) 	
  R((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) *,,COOBBIbMMO222	J
 
 
 7 7 	B	"6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s#   AA A3+C++C/2C/c            	         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    sJ t          |                    |d d
                                       d          t          j
        ddg          d           g d}t          t          t          g| |g          D ]%\  }} |                                ||          }|                    |dd                   j        dk    sJ |                    |d d
                   j        dk    sJ t          t          j        |                    |d         g                    d           t          t          j        |                    |d	         g                    d           t          t          j        t          j        |j                            d           'd S )N)r   r+   r   r   r   r   )r   r+   r   r   r   r   rr   )r   r   r   r   r   )r   r   r   r   r*   r   r   r   )r   r   )r   r   )zipr   r   r7   r:   r;   rV   r   rJ   r   r-   r   expr   )X_bernoulliX_multinomialr9   r   r8   rB   s         r%   test_discretenb_predict_probar   0  sn   
 ;;			;;;7KVaVaV,M 			A!$	m${M&B" " 
 
A ! ""&&q!,,{{1RSS6""a''''  !A$((.&8888!ae$$((a(00"(C:2F2F	
 	
 	
 	

 			A!$	m${M&B" " E EA ! ""&&q!,,  1Q3((.&8888  2A2''-7777BF3#4#4adV#<#<==qAAABF3#4#4aeW#=#=>>BBBBF26#*>#?#?@@!DDDDE Er'   c                      |             }|                     d           |                    dgdgdggg d           t          j        |j                  }t          |t          j        ddg                     d S )NF)	fit_priorr   r   r   r   r         ?)
set_paramsr7   r   r   r   r   r-   )r   rB   priors      r%   test_discretenb_uniform_priorr   Q  s    
 


CNNUN###GGaS1#sOYYY'''F3'((EeRXsCj%9%9:::::r'   c                 *    | ddg          }|                     dgdgdggg d           t          j        |j                  }t	          |t          j        ddg                     d}t          j        t          |          5  |                     dgdgdggg d	           d d d            n# 1 swxY w Y   d
}t          j        t          |          5  |	                    dgdggddgg d           d d d            d S # 1 swxY w Y   d S )Nr   class_priorr   r   r   r}   r3   r   r   r   r   r5   )
r7   r   r   r   r   r-   r>   r?   r@   rA   )r   rB   r   rf   s       r%   test_discretenb_provide_priorr   ]  s    
#s
4
4
4CGGaS1#sOYYY'''F3'((EeRXsCj%9%9::: :C	z	-	-	- , ,!qcA3+++, , , , , , , , , , , , , , , ;C	z	-	-	- ? ?!qc
QFIII>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s$   B22B69B6!DDDc                 |   t                      }t          |j        |j        dd          \  }}}}d g dfD ]} | |          }|                    |j        |j                    | |          }|                    ||g d           |                    ||           t          |j        |j                   d S )N皙?i  )	test_sizerandom_state)rj   rj   r   r   r   r5   )r   r   r   r   r7   rA   r   r   )	r   r   
iris_data1
iris_data2iris_target1iris_target2r   clf_fullclf_partials	            r%   .test_discretenb_provide_prior_with_partial_fitr   p  s    
 ;;D9I	4;#C: : :6J
L, ( 
 
%%%888TY,,,((U;;;
L)))LLL
L999!%{'C	
 	
 	
 	

 
r'   c                    g dg dg dg dg}g d}t          j        g dt           j                  }||                                z  } |                                 |||          }t          |                    |          g d            |             }|                    |d d	         |d d	         g d
|d d	                    |                    |d	d         |d	d         |d	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   )dtyperM   )r   r   r   r   r   r   rO   r   )r   r-   rX   rJ   r7   r   r:   rA   )r   r8   r9   rN   rB   s        r%   (test_discretenb_sample_weight_multiclassr     ss    											A 	AH\\\<<<M]&&(((M




"
"1a}
"
E
ECs{{1~~|||444 


COOAbqbE1RaR5)))=QSRSQSCTOUUUOOAacFAacF-!2DOEEEOOAabbE1QRR5abb0AOBBBs{{1~~|||44444r'   use_partial_fitFTtrain_on_single_class_yc                 N   g dg dg dg}g d}|r|d d         }|d d         }t          t          t          |                              }t          |          } |             }|r|                    |||           n|                    ||           |                    |d d                   |d         k    sJ g d	}|D ]\}	t          ||	d           }
|
t          |
t          j
                  r|
j        d         |k    sJ D|
D ]}|j        d         |k    sJ ]d S )
Nr   r   r   )r   r   r   r   r5   r   r   )classes_r   r   r   feature_log_prob_)sortedlistsetr   rA   r7   r:   getattr
isinstancer   ndarrayrV   )r   r   r   r8   r9   r6   num_classesrB   attribute_namesattribute_name	attributeelements               r%   )test_discretenb_degenerate_one_class_caser     s|   " 
IIIyyy)A		A crcFcrcFT#a&&\\""Gg,,K



C 1g....1;;q!u1%%%%  O * 
7 
7C66	i,, 	7?1%44444 % 7 7}Q';666667
7 
7r'   kind)densesparsecsr_containerc                    t          |          \  }}| dk    r|}n| dk    r ||          }t                      }d}t          j        t          |          5  |                    | |           d d d            n# 1 swxY w Y   |                    ||                              |          }t          ||           |                    |          }	|	                    |          }
t          t          j        |	          |
d           t                      }|                    |d d         |d d         t          j        |                     |                    |dd         |dd                    |                    |dd          |dd                     |                    |          }t          ||           |                    |          }|	                    |          }t          t          j        |          |d           t          ||	           t          ||
           t                      }|                    ||t          j        |                     |                    |          }t          ||           |                    |          }|	                    |          }t          t          j        |          |d           t          ||	           t          ||
           d S )	Nr   r   z!Negative values in data passed tor3   r2   r   r5   r)   )r0   r   r>   r?   r@   r7   r:   r   r;   r<   r   r   r=   rA   r   )r   r!   r   r.   r/   r8   rB   rf   rC   rD   rE   r\   y_pred2y_pred_proba2y_pred_log_proba2r   y_pred3y_pred_proba3y_pred_log_proba3s                      r%   	test_mnnbr     s
    22DEEFBw			M" //C
-C	z	-	-	-  B              WWQ^^##A&&Fvr""" $$Q''L,,Q//bf\224DaHHH ??DQrrUBrrFBIbMM:::QqsVR!W%%%QqrrUBqrrF###ll1ooGw###&&q))M..q11bf]335FJJJm\:::/1ABBB ??DQBIbMM222ll1ooGw###&&q))M..q11bf]335FJJJm\:::/1ABBBBBs   A<<B B c                  f   t          j        ddgddgg          } t          j        ddg          }t                      }t          j                    5  t          j        dt                     |                    | |g d           d d d            n# 1 swxY w 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          j                    5  t          j        dt                     |                    ddggdg           d d d            n# 1 swxY w 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 d S )Nr   r   errorr   r5   r   )	r   r-   r   warningscatch_warningssimplefilterRuntimeWarningrA   r:   )r8   r9   rB   s      r%   !test_mnb_prior_unobserved_targetsr   
  s@    	1a&1a&!""A
!QA
//C		 	"	" 1 1g~6661iii0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 ;;Ax  A%%%%;;Ax  A%%%%;;Ax  A%%%% 
	 	"	" ' 'g~666!Q1#&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '
 ;;Ax  A%%%%;;Ax  A%%%%;;Ax  A%%%%%%s$   5BBB5EEEc                     t          j        g dg dg dg dg          } t          j        g d          }t          d          }|                    | |           t          j        dd	g          }t	          t          j        |j                  |           t          j        g d
g dg          }t	          t          j        |j                  |           t          j        g dg          }t          j        ddgg          }|t          j        |          z  }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   r   alphag      ?r|   )r   g?皙?r   r   r  )UUUUUU?UUUUUU?r  r  r  r  g@fg;u?gy?)
r   r-   r   r7   r   r   r   r   rJ   r;   )r8   ry   rB   r   feature_probX_testunnorm_predict_probar;   s           r%   test_bnbr
  '  s_    				///1C1C1CEWEWEWX	 	A
 	A C
 
 
 CGGAqMMM (D$<((KbfS%9::KHHH 8***BBB	
 L bfS%:;;\JJJ X)))*++F 8&:<O%P$QRR(262F+G+GGMc//77GGGGGr'   c                     t          j        g dg dg dg dg dg          } t          j        g d          }t          d          }|                    | |           t          j        |j        dz             }t          j        t          j        |j        dz             | j        d	         d	f          j	        }t          |j        ||z
             d S )
N)r   r   r   r   r   r   r   )r   r   r   )r   r   r   r   r   r   r  ra   r   )r   r-   r   r7   r=   r   tiler   rV   Tr   r   )r8   ry   rB   numdenoms        r%   test_bnb_feature_log_probr  V  s     	)))YYY			999iiiHIIA
!!A C
 
 
 CGGAqMMM &#c)
*
*CGBF3+c122QWQZODDFE c3cEkCCCCCr'   c                  j   t          j        g dg dg dg dg          } t          j        g d          }t          j        g dg dg          }t          j        |j                  }t          j        |j                  }t	          d          D ]F}t          j        ||                    ||<   ||         ||                                         z  ||<   Gt          d	
          }t          j	        d          }t          j        t          |          5  |                    |  |           d d d            n# 1 swxY w Y   |                    | |           t          j        g dg dg          }t          |j        |           t          j        ddg          }	t          |j        |	           t          j        g d          }
t          |j        |
           t%          |j        |           t          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   r   r  z8Negative values in data passed to ComplementNB (input X)r3   )r   r   r   r   r   r   r   r   )r   rr   r   r   r   r   T)r  norm)r   r-   zerosrV   r   r=   rJ   r
   reescaper>   r?   r@   r7   r   r   r   feature_all_r   r   )r8   ry   thetaweightsnormed_weightsr   rB   rf   feature_countclass_countfeature_alls              r%   test_cnbr"  m  s    				///1C1C1CEWEWEWX	 	A
 	A H    	
 E* hu{##GXek**N1XX : :fU1X&&&
#AJ)9)99q S
!
!
!C
)N
O
OC	z	-	-	-  A               GGAqMMM H0002D2D2DEFFMs)=999(Aq6""Ks'555(---..Ks'555c3W===
St
,
,
,CGGAqMMMc3^DDDDDs   D<<E E c           	         t                      }t          |           \  }}|                    ||                              |          }t	          ||           t          j        ddgddgg          }t          j        ddg          }t          dd          }|                    ||           t	          |j        t          j        ddg                     t          j        d	d
gg          }t          j        dg          }t          j	        d          }	t          j        t          |	          5  |                    |           d d d            n# 1 swxY w Y   t          j        t          |	          5  |                    ||           d d d            n# 1 swxY w Y   t          j        ddgg          }
t          j        ddgg          }|                                }t          |                    |
          ||z             t!          |j                  |j        d         k    sJ t          j        d	d	gd	dgd	d	gddgg          }t          j        g d          }t          dd          }|                    ||           t	          |                    t          j        d	d	gg                    t          j        dg                     t	          |j        t          j        ddg                     dD ]}t          j        d	d	gd	dgd	d	gddgg          }t          j        g d          }t          j        g d          |z  }t          dd          }|                    |||           t	          |                    t          j        d	d	gg                    t          j        dg                     t	          |j        t          j        ddg                     d S )Nr   rr   r   r)   F)r  r   r   r*   r   r   z9Negative values in data passed to CategoricalNB (input X)r3   r  qq?r   )r   rj   r)   g-C6?)r   r   r   皙?rM   )r	   r0   r7   r:   r   r   r-   n_categories_r  r  r>   r?   r@   rJ   r   r;   r   r   rV   )r!   rB   r.   r/   rC   X3y3r8   r9   	error_msgX3_testbayes_numeratorbayes_denominatorfactorrN   s                  r%   test_categoricalnbr.    s%   
//C12DEEFBWWR__$$R((Fvr"""	Aq6Aq6"	#	#B	1a&		B
a5
1
1
1CGGBOOOs("(Aq6*:*:;;; 	1b'A
!A	UVVI	z	3	3	3  A              	z	3	3	3  1               hAx  G h >?@@O'++--'""O6G$G  
 s"##rx{2222 	1a&1a&1a&1a&122A
A
a5
1
1
1CGGAqMMMs{{28aVH#5#566!FFFs("(Aq6*:*:;;;' @ @Hq!fq!fq!fq!f566H\\\""11F:!u5551M2223;;rx!Q'9'9::BHaSMMJJJ3,bh1v.>.>????@ @s$   5EEE=F  F$'F$zDmin_categories, exp_X1_count, exp_X2_count, new_X, exp_n_categories_r   )r   r   r   r  rr   )r   r   r   r   c                    t          j        ddgddgddgddgg          }t          j        g d          }t          j        dg          }t          dd|           }|                    ||           |j        \  }	}
t          |	|           t          |
|           |                    |          }t          ||           t          |j        |           d S )Nr   r   r   Fr  r   min_categories)r   r-   r	   r7   r   r   r:   r&  )r1  exp_X1_countexp_X2_countnew_Xexp_n_categories_X_n_categoriesy_n_categoriesexpected_predictionrB   X1_countX2_countpredictionss               r%   &test_categoricalnb_with_min_categoriesr<    s    D X1v1v1v1v>??NXlll++N(A3--
a5
P
P
PCGGNN+++,Hhx...x...++e$$K{$7888s(*;<<<<<r'   zmin_categories, error_msgz"'min_categories' should have shapec                 *   t          j        ddgddgddgddgg          }t          j        g d          }t          dd|           }t          j        t
          |          5  |                    ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r   Fr0  r3   )r   r-   r	   r>   r?   r@   r7   )r1  r)  r8   r9   rB   s        r%   (test_categoricalnb_min_categories_errorsr>    s     	1a&1a&1a&1a&122A
A
a5
P
P
PC	z	3	3	3  1                 s   $BBBc                    t          j        ddgddgg          }t          j        ddg          }t          dd          }d}t          j        t
          |          5  |                    ||ddg           d d d            n# 1 swxY w Y   t          j        t
          |          5  |                    ||           d d d            n# 1 swxY w Y   t          j        ddgddgg          }t          |	                    |          |           t          dd          }t          j        t
          |          5  |                    ||ddg           d d d            n# 1 swxY w Y   t          j        t
          |          5  |                    ||           d d d            n# 1 swxY w Y   t          j        d	d
gddgg          }t          |	                    |          |           t          dd          }t          j        t
          |          5  |                    ||           d d d            n# 1 swxY w Y   t          j        ddgddgg          }t          |	                    |          |            | |          }t          dd          }t          j        t
          |          5  |                    ||           d d d            n# 1 swxY w Y   t          j        ddgddgg          }t          |	                    |          |           t          dd          }t          j        t
          |          5  |                    ||           d d d            n# 1 swxY w Y   t          j        d	d
gddgg          }t          |	                    |          |           d S )Nr   r   rv   Fr  force_alphazFalpha too small will result in numeric errors, setting alpha = 1.0e-10r3   r5   r  r  r   )r   r-   r   r>   warnsUserWarningrA   r7   r   r;   r   r	   )r   r8   r9   nbrf   probs         r%   
test_alpharF  *  s@    	1a&1a&!""A
!QA	3E	2	2	2B
RC	k	-	-	- - -
q!aV,,,- - - - - - - - - - - - - - -	k	-	-	-  
q!              8aVaV$%%Db..q114888	Se	4	4	4B	k	-	-	- - -
q!aV,,,- - - - - - - - - - - - - - -	k	-	-	-  
q!              8gw'!Q011Db..q114888	Se	4	4	4B	k	-	-	-  
q!              8c3Z#s,--Db..q114888 	aA	3E	2	2	2B	k	-	-	-  
q!              8aVaV$%%Db..q114888	Se	4	4	4B	k	-	-	-  
q!              8gw'!Q011Db..q11488888s~   BB
B
,CCCE**E.1E.F33F7:F7'I

II	K,,K03K0 NN
Nc                     t          j        ddgddgg          } t          j        ddg          }t          j        ddg          }t          |d          }|                    | |ddg           t          j        ddgdd	gg          }t	          |j        t          j        |                     t          j        d
dgddgg          }t	          |                    |           |           t          j        ddg          }t          |d          }d}t          j	        t          |          5  |                    | |           d d d            n# 1 swxY w Y   d}t          j        |dz  dg          }t          |d          }|                    | |ddg           t	          |                                |dgd           t          j        g d          }t          |d          }d}t          j	        t          |          5  |                    | |           d d d            d S # 1 swxY w Y   d S )Nr   r   r   Fr@  r5   r   r   g333333?grq?r$  gS?gևX?r   rk   z+All values in alpha must be greater than 0.r3   r      )decimal)r   ra   g      @z7When alpha is an array, it should contains `n_features`)r   r-   r   rA   r   r   r=   r;   r>   r?   r@   r7   _check_alpha)	r8   r9   r  rD  r  rE  m_nbexpected_msg	ALPHA_MINs	            r%   test_alpha_vectorrN  U  s   
1a&1a&!""A
!QA HaVE	U	6	6	6BNN1a!QN((( 8eU^eU^<==Lb2BF<4H4HIII 8eU^gw%7899Db..q114888 Hc4[!!Eu%888D@L	z	6	6	6  A               IHi!mS)**Eu%888DQAq6***d//11Is3CRPPPP H___%%Eu%888DLL	z	6	6	6  A                 s$   4EEEH66H:=H:c                     t          d          \  } }t          j        |dk    |dk              }| |         ||         }}t          t	          d          | |d          }|                                dk    sJ t          t	          d          ||d          }|                                d	k    sJ t          t          d          | d
k    |d          }|                                dk    sJ t          t          d          |d
k    |d          }|                                dk    sJ t          t                      | |d          }|                                dk    sJ t          t          d          | |d          }|                                dk    sJ t          t                      ||d          }|                                dk    sJ d S )NT)
return_X_yr   r2   r   r  )cvgQ?gGz?rr   g(\?gq=
ףp?gp=
ף?r%  )var_smoothingg{Gz?)r   r   
logical_orr   r   r   r   r   )r8   r9   
binary_3v8X_3v8y_3v8scoress         r%   test_check_accuracy_on_digitsrX  }  s    $'''DAqqAvqAv..JZ=!J-5E ]444arBBBF;;==4]444eUrJJJF;;==4 [r222AE1DDDF;;==4[r222EAIuLLLF;;==4 Z\\1aB777F;;==4Zc:::AqRHHHF;;==4Z\\5%B???F;;==4r'   c                     d} t          dd          }|                                dk    sJ t          j        ddg          }t          |d          }|j        d         |_        t          |                                |           d| z  }t          dd          }t          j        t          |	          5  |                                | k    sJ 	 d
d
d
           n# 1 swxY w Y   t          dd          }t          j        t          |	          5  |                                | k    sJ 	 d
d
d
           n# 1 swxY w Y   t          |d          }|j        d         |_        t          j        t          |	          5  t          |                                t          j        | dg                     d
d
d
           d
S # 1 swxY w 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@  rv   r   zCalpha too small will result in numeric errors, setting alpha = %.1eFr3   N)
r   rJ  r   r-   rV   n_features_in_r   r>   rB  rC  )
_ALPHA_MINbalphasrf   s       r%   test_check_alphar^    s    J!...A>>q    XsCj!!F&d333A|AAq~~''000 	N
	  	!///A	k	-	-	- . .~~:-----. . . . . . . . . . . . . . . 	!///A	k	-	-	- . .~~:-----. . . . . . . . . . . . . . . 	&e444A|AA	k	-	-	- J J1>>++RXz36G-H-HIIIJ J J J J J J J J J J J J J J J J Js6   :C""C&)C&EEE
7GGG	Estimatorc                 0   t          |          \  }} |                                 ||          }|                    |          }t          |d          }|t	          j        |          j        z
  }t          |                    |          |           d S )Nr   r   )	r0   r7   predict_joint_log_probar   r   
atleast_2dr  r   r<   )r_  r!   r.   r/   estjll
log_prob_xlog_prob_x_ys           r%   test_predict_joint_probarg    s    12DEEFB
)++//"b
!
!C

%
%b
)
)C3Q'''Jz2244LC))"--|<<<<<r'   )Er  r   numpyr   r>   scipy.specialr   sklearn.datasetsr   r   sklearn.model_selectionr   r   sklearn.naive_bayesr   r	   r
   r   r   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr   DISCRETE_NAIVE_BAYES_CLASSESALL_NAIVE_BAYES_CLASSESr-   r8   r9   r&   r0   rF   rK   r_   rg   rm   rz   r~   r   r   r   r   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r
  r  r"  r.  r<  r>  rF  rN  rX  r^  rg  r   r'   r%   <module>rs     s=   				       # # # # # # 3 3 3 3 3 3 3 3 E E E E E E E E                         / . . . . . +]L-X 6*E  BHr2hR2r(QFQFQFCDDBH      7 7 7,9 9 9$> $> $>N  F F F  .    8 8 8	 	 	F F F- - - -/KLL  ML -/KLL.E .E ML.Eb '>??7 7 @?7$E E EB -/KLL; ; ML; -/KLL? ? ML?$ -/KLL
 
 ML
( -/KLL5 5 ML5, -/KLL*UDM::2UDMBB/7 /7 CB ;: ML/7d !455.994C 4C :9 654Cn& & &:,H ,H ,H^D D D.DE DE DEN4@ 4@ 4@n J BHiii+,,BHiii+,,BHq!fXBHaV	
 FBHiii+,,BHlllLLL122BHq!fXBHaV	
 1a&1a&)**1a&1a&)**1a&""!Q  ' >= =? >=" a&1a&	?@    .99'9 '9 :9'9T% % %P     B"J "J "JJ &=>>= = ?>= = =r'   