`L ip <ddlZddlZddlZddlZddlmZddlmZm Z ddl m Z m Z ddl mZmZmZmZmZddlmZmZmZmZddlmZeeeegZeegzZej8dd gd d gd dgd d gd d gd d ggZej8gd Zd ZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,ejZj]dedZ/ejZj]dedZ0ejZj]dedZ1d Z2ejZj]ded!Z3ejZj]ded"Z4ejZj]ded#Z5ejZj]ded$Z6ejZj]deejZj]d%d&d'gejZj]d(d&d'gd)Z7ejZj]d*d+ejZj]d,ed-Z8d.Z9d/Z:d0Z;d1ZejZj]d:d4d gd d7ggd;fgd<Z?ejZj]d,ed=Z@d>ZAd?ZBd@ZCejZj]dAedBZDejZj]dAedCZEy)DN) logsumexp) load_digits load_iris)cross_val_scoretrain_test_split) BernoulliNB CategoricalNB ComplementNB GaussianNB MultinomialNB)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)CSR_CONTAINERS)rrrrrrctjj|}|jd}|jddkDj t }||fS)N) sizerr)nprandom RandomStatenormalastypeint)global_random_seedrngX1y1s d/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sklearn/tests/test_naive_bayes.pyget_random_normal_x_binary_yr&!sP ))   2 3C  !B **"*  ! ) )# .B r6Mctjj|}|jdd}tjgd}||fS)N)dr)rrrrrr)rrrrandintarray)r!r"X2y2s r%$get_random_integer_x_three_classes_yr0)sC ))   2 3C QX &B $ %B r6Mr'ct}|jttj t}t |t|j t}|jt}ttj||dtjtd5tjttddgdddy#1swYyxYw)Nz;The target label.* in y do not exist in the initial classesmatchrrclasses)r fitXypredictr predict_probapredict_log_probarrlogpytestraises ValueError partial_fit)clfy_pred y_pred_probay_pred_log_probas r%test_gnbrF2s ,C WWQ] " "1 %Fvq!$$Q'L,,Q/bff\24DaH W 7    A1v 6777s -'CC&c>tjtt}t t j ddgdz |jdt|\}}tj||}t |jjdy)Nr@r2r) r r7r8r9rrr- class_prior_r&sum)r!rBr#r$s r%test_gnb_priorrKHsv ,  1a Cbhh1v.4c6F6FJ )*< =FB ,  2r "Cc..224a8r'cVtjd}tjtt }tjtt |}t |j|jt |j|jtjj|}|jt jd}tjtt |}tjtt ddg|dz }|jtt |dz t |j|jt |j|j|jdtjdd}tj|tjd}tjt|t |} tjtt |}t | j|jt | j|jt dk(j!tj"}tjtt |}y ) z5Test whether sample weights are properly used in GNB.r*r sample_weightrrr6rN) minlengthN)ronesr r7r8r9rtheta_var_rrrandshaperAr,bincountrfloat64) r!swrBclf_swr"clf1clf2indrNclf_dupls r%test_gnb_sample_weightr_Rs B ,  1a C \  aB 'Fcjj&--8chh 4 ))   2 3C !''!* B <  Aq  3D < # #Aq1a&Q # ODQa0dkk4;;7dii3 ++aR (CKKqwwqz:M|##/H \  aM 2Fhoov}}=hmmV[[9!VOOBJJ/M ,  1a}  =Cr'cttjddg}d}tjt |5|j ttdddy#1swYyxYw)z:Test whether an error is raised in case of negative priorsg@priorszPriors must be non-negativer3N r rr-r>r?r@r7r8r9rBmsgs r%test_gnb_neg_priorsrgysN BHHdC[1 2C 'C z - 1  A##A,c6ttjddgjtt }t |jddggtjddggdt |jtjddgy) z6Test whether the class prior override is properly used333333?gffffff?rb皙g[9h?gs\?r2N) r rr-r7r8r9rr;rIrBs r%test_gnb_priorsrmsz BHHc3Z0 1 5 5a ;C D$<.) $&789:  c..#s0DEr'c tjddgddgddgddgddgddgddgddgd d gd d gg }tjgd }tjgd }t| }|j||y)Nrrrrrr)) g{Gz?Q?gQ?{Gz?)\(?rtgQ?rsru) rrrrrr)r*r2 rrb)rr-r r7)r8rcYrBs r%test_gnb_priors_sum_iscloserzs  H H H H H F F F F F  AXXQ RF 01A F #CGGAqMr'cttjgd}d}tjt |5|j ttdddy#1swYyxYw)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 classesr3Nrdres r%test_gnb_wrong_nb_priorsr~sM BHH%=> ?C 9C z - 1 rhcttjddg}d}tjt |5|j ttdddy#1swYyxYw)z?Test if an error is raised if the sum of prior greater than onera?rbz!The sum of the priors should be 1r3Nrdres r%test_gnb_prior_greater_onersN BHHc3Z0 1C -C z - 1 rhcttjddg}|jtt |j ddggtjdgk(sJy)z@Test if good prediction when class prior favor largely one classg{Gz?gGz?rbrkrN)r rr-r7r8r9r:rls r%test_gnb_prior_large_biasrsM BHHdD\2 3CGGAqM ;;t ~ &"((A3- 77 7r'cd}d}d}tjdtjdf}t j ||||\}}||k(sJ||k(sJy)z4Test when the partial fit is called without any datar+rvrrrN)remptyr8rVr _update_mean_variance) prev_pointsmeanvarx_emptytmeantvars r%"test_gnb_check_update_with_no_datars_K D Chh1771:'G22;c7SKE4 D== 3;;r'ctjtt}tj ttt j t}t|j|jt|j|jt|j|jtj tdddddftdddt j t}|j tdddtdddt|j|jt|j|jt|j|jy)Nrrr) r r7r8r9rAruniquerrSrTrI)rBclf_pfclf_pf2s r%test_gnb_partial_fitrs ,  1a C \ % %aBIIaL 9Fcjj&--8chh 4c..0C0CDl&&qAqz1QTT7BIIaLIG !$Q$14a4)cjj'..9chh 5c..0D0DEr'ct}|j|j}}dDcgc]1}tj ||z|j ||z3}}t |d|dt |d|dycc}w)N)绽|=rg _Brrr)rdatatargetr r7r:r)irisr8r9flabelss r%%test_gnb_naive_bayes_scale_invariancersy ;D 99dkkqAAQ RAjlq1ua(00Q7 RF Rvay&),vay&),Ss6BDiscreteNaiveBayesct|\}}|j||}ttjtj gddz |j dy)N)rrrrHr2)r0r7rrr=r-class_log_prior_)rr!r.r/rBs r%test_discretenb_priorrsT22D EFB   " "2r *C rxx "S()3+?+?r'c|}|jddgddgddgggd|}|jddgddgddgggdddgt|j|j|turJt t |jD](}t|j||j|*n t|j|j|}|jddggdgddg|jddggdg|jddggdgt|j|j|turrt t |jD]}t|j|j|j|jttj|j|dtj|j|dt|jddtjddgt|jddtjddgt|jddtjddgt|jddtjddgyt|j|jy)Nrrrrrr5axisr) r7rAr class_count_r rangelencategory_count_feature_count_rVrrJr-)rr[r\iclf3s r%test_discretenb_partial_fitrs  DHHq!fq!fq!f %y1  Dq!fq!fq!f-y1a&It(($*;*;<]*s4//01 QA t33A68L8LQ8O P Q 4..0C0CD  Dq!fXsQF3q!fXs#q!fXs#t(($*;*;<]*s4//01 A $$Q'--t/C/CA/F/L/L  t++A.Q7t++A.Q7    4//215rxxA7GH 4//215rxxA7GH 4//215rxxA7GH 4//215rxxA7GH4..0C0CDr' NaiveBayesct|\}}tjtd5|j ||ddd|}|j ||t j |tjtd5|j ||t jddddy#1swYxYw#1swYyxYw)Nz8classes must be passed on the first call to partial_fit.r3r5.is not the same as on last call to partial_fit*)r0r>r?r@rArrarange)rr!r.r/rBs r%$test_NB_partial_fit_no_first_classesrs22D EFB T )    R() ,COOBBIIbMO2 J 7 B " 677))77sC(CC Cc gdgdgdg}ddgddgddgg}gd}tttg||gD]\}}|j||}|j |d dd k(sJ|j |dgj d k(sJt|j |dd jd tjd d gdgd}tttg||gD]\}}|j||}|j |ddj dk(sJ|j |dd j dk(sJttj|j |dgdttj|j |d gdttjtj|jdy)N)rr+rrrr)rr+rrrrrr)rrrrr)rrrrr*rrr)rr)rr)ziprr r7r:r;rVrrJrr-rexpr) X_bernoulli X_multinomialr9rr8rBs r%test_discretenb_predict_probar0s  ;7KVaVaV,M A!$ m${M&B" A!"&&q!,{{1RS6"a'''  !A$(..&888!   ae $ ( (a ( 0"((C:2F   A!$ m${M&B"EA!"&&q!,  1Q(..&888  2A'--777BFF3#4#4adV#<=qABFF3#4#4aeW#=>BBFF266#*>*>#?@!DEr'c|}|jd|jdgdgdgggdtj|j}t |tj ddgy)NF) fit_priorrrrrr?) set_paramsr7rrrrr-)rrBpriors r%test_discretenb_uniform_priorrQs_  CNNUN#GGaS1#sOY' FF3'' (EeRXXsCj%9:r'c|ddg}|jdgdgdgggdtj|j}t |tj ddgd}t jt|5|jdgdgdgggd dddd }t jt|5|jdgdggddggd  dddy#1swYLxYw#1swYyxYw) Nr class_priorrrrr}r3rrrrr5) r7rrrrr-r>r?r@rA)rrBrrfs r%test_discretenb_provide_priorr]s #s 4CGGaS1#sOY' FF3'' (EeRXXsCj%9: :C z -, !qcA3+, ;C z -? !qc QFI>?? ,,??sC)C5)C25C>c~t}t|j|jdd\}}}}dgdfD]}||}|j |j|j||}|j ||gd|j ||t |j|jy)N皙?i) test_size random_state)rjrjrrrr5)rrrrr7rArr) rr iris_data1 iris_data2 iris_target1 iris_target2rclf_full clf_partials r%.test_discretenb_provide_prior_with_partial_fitrps ;D9I 4;;#C:6J L,( %%8 TYY ,(U;  L)L L9!  % %{'C'C  r'cgdgdgdgdg}gd}tjgdtj}||jz}|j |||}t |j |gd|}|j|dd |dd gd |dd  |j|d d |d d |d d |j|d d|d d|d dt |j |gdy) Nrrrrr)rrrrrrrr)dtyperM)rrrrrrrOr)rr-rXrJr7rr:rA)rr8r9rNrBs r%(test_discretenb_sample_weight_multiclassrs   A AHH\r?r@r7r:rr;r<rrr=rAr)rr!rr.r/r8rBrfrCrDrEr\y_pred2 y_pred_proba2y_pred_log_proba2ry_pred3 y_pred_proba3y_pred_log_proba3s r% test_mnnbrs' 22D EFB w    "  /C -C z - B WWQ^ # #A &Fvr"$$Q'L,,Q/bff\24DaH ?DQrUBrFBIIbM:QqVR!W%QqrUBqrF#ll1oGw#&&q)M..q1bff]35FJm\:/1AB ?DQBIIbM2ll1oGw#&&q)M..q1bff]35FJm\:/1ABKs II'c tjddgddgg}tjddg}t}tj5tj dt |j||gdddd|jddggdk(sJ|jddggdk(sJ|jddggdk(sJtj5tj dt |jddggdgddd|jddggdk(sJ|jddggdk(sJ|jddggdk(sJy#1swYxYw#1swYaxYw)Nrrerrorrr5r) rr-r warningscatch_warnings simplefilterRuntimeWarningrAr:)r8r9rBs r%!test_mnb_prior_unobserved_targetsr sv 1a&1a&!"A !QA /C  "1g~6 1i01 ;;Ax A %% % ;;Ax A %% % ;;Ax A %% %  "'g~6 !Q1#&' ;;Ax A %% % ;;Ax A %% % ;;Ax A %% %#11''s1E.)1E:.E7:Fc~tjgdgdgdgdg}tjgd}td}|j||tjdd g}t tj |j |tjgd gd g}t tj |j|tjgdg}tjd d gg}|tj|z }t |j||y)Nrrrrrrrrrrrrrrrrrrrrrrrrrrrrralphag?r|)rg?皙?rrr)UUUUUU?UUUUUU?rrrrg@fg;u?gy?) rr-rr7rrrrrJr;)r8ryrBr feature_probX_testunnorm_predict_probar;s r%test_bnbr's  /1CEWX A A C CGGAqM((D$<(KbffS%9%9:KH88 * B L bffS%:%:;\JXX)* +F88&:r?r@r7rrr feature_all_rr) r8rythetaweightsnormed_weightsrrBrf feature_count class_count feature_alls r%test_cnbrms  /1CEWX A A HH    E*hhu{{#GXXekk*N 1X:ffU1X&& #AJ)99q: S !C ))N OC z - AGGAqMHH02DEFMs))=9((Aq6"Ks''5((-.Ks''5c33W= St ,CGGAqMc33^D!s HH$c t}t|\}}|j||j|}t ||t j ddgddgg}t j ddg}tdd}|j||t |jt j ddgt j d d gg}t j dg}tjd } tjt| 5|j|dddtjt| 5|j||dddt j ddgg} t j d dgg} | j} t|j| | | z t!|j"|j$dk(sJt j d d gd dgd d gddgg}t j gd}tdd}|j||t |jt j d d ggt j dgt |jt j ddgdD]} t j d d gd dgd d gddgg}t j gd}t j gd| z}tdd}|j|||t |jt j d d ggt j dgt |jt j ddgy#1swYwxYw#1swYNxYw)Nrrrrr)F)rrrr*rrz9Negative values in data passed to CategoricalNB (input X)r3rqq?r)rrjr)g-C6?)rrr皙?rM)r r0r7r:rrr- n_categories_rrr>r?r@rJrr;rrrV)r!rBr.r/rCX3y3r8r9 error_msgX3_testbayes_numeratorbayes_denominatorfactorrNs r%test_categoricalnbr*s /C 12D EFB WWR_ $ $R (Fvr" Aq6Aq6" #B 1a& B a5 1CGGBOs(("((Aq6*:; 1b'A ! A UVI z 3 A z 3 1 hhAx Ghh >?@O'++- '"O6G$G s"" #rxx{ 22 2 1a&1a&1a&1a&12A A a5 1CGGAqMs{{288aVH#56! Fs(("((Aq6*:;'@ HHq!fq!fq!fq!f5 6 HH\ "1F: !u5 1M23;;rxx!Q'9:BHHaSMJ3,,bhh1v.>?@5s N'N4'N14N>zDmin_categories, exp_X1_count, exp_X2_count, new_X, exp_n_categories_r)rrrrrr)rrrrctjddgddgddgddgg}tjgd}tjdg}tdd|}|j|||j\} } t | |t | ||j |} t | |t |j|y)NrrrFrrmin_categories)rr-r r7rrr:r") r- exp_X1_count exp_X2_countnew_Xexp_n_categories_X_n_categoriesy_n_categoriesexpected_predictionrBX1_countX2_count predictionss r%&test_categoricalnb_with_min_categoriesr8sDXX1v1v1v1v>?NXXl+N((A3- a5 PCGGNN+,,Hhx.x.++e$K{$78s((*;r?r@r7)r-r%r8r9rBs r%(test_categoricalnb_min_categories_errorsr:sw 1a&1a&1a&1a&12A A a5 PC z 3 1 s "A>>Bctjddgddgg}tjddg}tdd}d}tjt |5|j ||ddgdddtjt |5|j||dddtjddgddgg}t|j||tdd}tjt |5|j ||ddgdddtjt |5|j||dddtjd d gddgg}t|j||tdd}tjt |5|j||dddtjd dgdd gg}t|j||||}tdd}tjt |5|j||dddtjddgddgg}t|j||tdd}tjt |5|j||dddtjd d gddgg}t|j||y#1swYxYw#1swYtxYw#1swYxYw#1swYxYw#1swYoxYw#1swYxYw#1swYxYw) NrrrvFr force_alphazFalpha too small will result in numeric errors, setting alpha = 1.0e-10r3r5rrr) rr-rr>warns UserWarningrAr7rr;r r )rr8r9nbrfprobs r% test_alpharB*s 1a&1a&!"A !QA 3E 2B RC k -- q!aV,- k - q!  88aVaV$ %Db..q148 Se 4B k -- q!aV,- k - q!  88gw'!Q0 1Db..q148 Se 4B k - q!  88c3Z#s, -Db..q148 aA 3E 2B k - q!  88aVaV$ %Db..q148 Se 4B k - q!  88gw'!Q0 1Db..q148C-- --  sTLLL) L6MM=MLL&)L36MM MM%c*tjddgddgg}tjddg}tjddg}t|d}|j||ddgtjddgdd gg}t |j tj |tjd d gd d gg}t |j||tjddg}t|d}d}tjt|5|j||dddd}tj|dz dg}t|d}|j||ddgt |j|dgdtjgd}t|d}d}tjt|5|j||dddy#1swYxYw#1swYyxYw)NrrrFr<r5rrg333333?grq?r gS?gևX?rrkz+All values in alpha must be greater than 0.r3r )decimal)rrag@z7When alpha is an array, it should contains `n_features`) rr-r rArrr=r;r>r?r@r7 _check_alpha) r8r9rr@rrAm_nb expected_msg ALPHA_MINs r%test_alpha_vectorrJUs 1a&1a&!"A !QA HHaV E U 6BNN1a!QN(88eU^eU^<=Lb22BFF<4HI 88eU^gw%78 9Db..q148 HHc4[ !E u% 8D@L z 6 AI HHi!mS) *E u% 8DQAq6*d//1Is3CRP HH_ %E u% 8DLL z 6 As(G=!H =H Hctd\}}tj|dk(|dk(}||||}}tt d||d}|j dkDsJtt d||d}|j d kDsJtt d|d kD|d}|j d kDsJtt d|d kD|d}|j d kDsJtt||d}|j d kDsJttd||d}|j dkDsJtt||d}|j dkDsJy)NT) return_X_yrr2rr)cvgQ?gGz?rrg(\?gq= ףp?gp= ף?r!) var_smoothingg{Gz?)rr logical_orrr rrr )r8r9 binary_3v8X_3v8y_3v8scoress r%test_check_accuracy_on_digitsrT}sb $ 'DAqqAvqAv.JZ=!J-5E]4ar BF ;;=4   ]4eUr JF ;;=4  [r2AE1 DF ;;=4   [r2EAIu LF ;;=4  Z\1aB 7F ;;=4   Zc:AqR HF ;;=4   Z\5%B ?F ;;=4  r'cFd}tdd}|jdk(sJtjddg}t|d}|jd|_t |j|d|z}tdd}tjt| 5|j|k(sJ d d d tdd}tjt| 5|j|k(sJ d d d t|d}|jd|_tjt| 5t |jtj|dgd d d y #1swYxYw#1swYxYw#1swYy xYw) 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 rrTr<rvrzCalpha too small will result in numeric errors, setting alpha = %.1eFr3N) rrFrr-rVn_features_in_rr>r>r?) _ALPHA_MINbalphasrfs r%test_check_alpharZsrJ!.A >> q  XXsCj !F&d3A||AAq~~'0 N   !/A k -.~~:---. !/A k -.~~:---. &e4A||AA k -J1>>+RXXz36G-HIJJ.... JJs$$E?+F 0F?F FF  Estimatorct|\}}|j||}|j|}t|d}|t j |j z }t|j||y)Nrr) r0r7predict_joint_log_probarr atleast_2dr r r<)r[r!r.r/estjll log_prob_x log_prob_x_ys r%test_predict_joint_probarcsm 12D EFB +//"b !C % %b )C3Q'Jz2444LC))"-| scipy.specialrsklearn.datasetsrrsklearn.model_selectionrrsklearn.naive_bayesrr r r r sklearn.utils._testingr rrrsklearn.utils.fixesrDISCRETE_NAIVE_BAYES_CLASSESALL_NAIVE_BAYES_CLASSESr-r8r9r&r0rFrKr_rgrmrzr~rrrrrmark parametrizerrrrrrrrrrrrr rr*r8r:rBrJrTrZrcrir'r%rvs  #3E / +]L-X6*E BHHr2hR2r(QFQFQF CD BHH  7,9$>NF.8  F--/KLM-/KL.EM.Eb'>?7@7$EB-/KL;M;-/KL?M?$-/KL M (-/KL5M5,-/KL*UDM:2UDMB/7C;M/7d!45.94C:64Cn&:,H^D.DEN4@nJ  BHHi+ , BHHi+ , BHHq!fX  BHHaV   F BHHi+ , BHHlL1 2 BHHq!fX  BHHaV   1a&1a&)*1a&1a&)*1a&"!Q  '>=?>=" a&1a& ?@   .9'9:'9T%P B"JJ&=>=?=&=>/?/r'