id~ddlZddlmZmZmZddlmZmZm Z m Z m Z m Z m Z mZmZmZddlmZddlZGddZGddZGd d ZdS) N) histogram histogramddhistogram_bin_edges) assert_ assert_equalassert_array_equalassert_almost_equalassert_array_almost_equal assert_raisesassert_allcloseassert_array_max_ulpassert_raises_regexsuppress_warnings)requires_memoryceZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!e"d !e#j$j%d"Z&d#S)$ TestHistogramcdSNselfs T/opt/cloudlinux/venv/lib/python3.11/site-packages/numpy/lib/tests/test_histograms.py setup_methodzTestHistogram.setup_method cdSrrrs rteardown_methodzTestHistogram.teardown_methodrrc d}tj|}t|\}}t tj|d|ttjddd\}}t|ddS)Ndraxis )nprandomrandrrsumlinspacer)rnvabs r test_simplezTestHistogram.test_simples  INN1  1ARVAA&&&***2;q"c2233A1b!!!!!rcrtgdddg\}}t|dgt|ddgtttddgdtddgd\}}t |t jdgt|t jddgdS)Nr/r0rbins?@)rrr ValueErrorrr#arrayr )rhistedgeshes r test_one_binzTestHistogram.test_one_bin s q!f55 e4!'''51a&)))j)aV!<<<<!Qa(((1Q! &&&28RH--.....rc&d}tj|}t|d\}}tj|tj|z}t |dtjd}gd}t||d\}}t|dttj|tj|zdt||d\}}t|gd tjd}d dd d tj g}t||d\}}t|gd tjgd ddtj gd\}}t|dd gdS)NrTdensityr/r"rr/r1r"皙?Fr.rr1rB)rCrCrC???) r#r$r%rr&diffr arangerrinf) rr(r)r*r+arear4countsdmys r test_densityzTestHistogram.test_density*s  INN1  D)))1va"'!**n%%D!$$$ IbMMD$///11b!!!RVA N++Q///D%00011lll+++ IbMM1aBF#D$///11...///l LL3RV,d<<< Vc1X&&&&&rctjddz}t|ddg\}}t|dt|ddg\}}t|dt|ddgd\}}t |tj|zdd tjddz}t|ddg|d \}}t|tj|zdt|d ddg| \}}t||dddS)Nr"rEr ranger/TrRr@decimalrRweightsr@r4rRrX)r#rIrrr&r rH)rr*r;r+ws r test_outlierszTestHistogram.test_outliersJs] IbMMB 1a&)))1QUUWWa   1b'***1QUUWWa   1a&$7771Q^0022ArBBBB IbMMB 1a&!TBBB1a"'!**n))++Q///1a&!<<<1Q!B$     rctjddz}tjddz}ttd5t |ddg|d\}}ddddS#1swxYwYdS) Nr"rE z same shape asr/rPTrW)r#rIrr7r)rr*r\r;r+s rtest_arr_weights_mismatchz'TestHistogram.test_arr_weights_mismatchbs IbMMB  IbMMB  _ = = G GQq!faFFFDAq G G G G G G G G G G G G G G G G G GsA**A.1A.ctjddz}t|\}}ttj|jtjt|d\}}ttj|jtjt|tjdt\}}ttj|jtjt|tjdt\}}ttj|jtjdS)Nr"rETr?rX) r#rIrr issubdtypedtypeintegerfloatingonesintfloat)rr*r;r+s r test_typezTestHistogram.test_typeis IbMMB ||1 agrz22333D)))1 agr{33444BGB$4$45551 agrz22333BGB$6$67771 agr{3344444rctjgdtj}tjgdtj}tj||d\}}}t |ddS)N)g2VEq@gx>fQg-VT5@rd)g!@gS@g^z@rr3@)r#r8float32 histogram2drr&)rxy counts_histxedgesyedgess rtest_f32_roundingzTestHistogram.test_f32_roundingxsy H888 K K K H<<N>N9N&NOOO6!QIIIB!"bh1v&6&6bh1v>N>N9N&NOOO $#####///**(GGAJJ GGAJJ?@@6 7CCCB!"wwqzz771::&>???6!QIIIB!"wwqzz771::&>?????rctjgd}tj|ddgdt|gddS)Nrr"r)rRr4)r#r8rr )rrs rtest_no_side_effectsz"TestHistogram.test_no_side_effectssL///** VC937777!&///:::::rctgddg\}}t|tjdgt|tjddgdS)Nrr/r3rrr#r8rr*r+s r test_emptyzTestHistogram.test_emptysZAq6+++11bhsmm,,,1bh1v../////rctjddd}t|dttt|ddS)NrDr5rnumrg333333@)r#r'rr TypeErrorrvalss rtest_error_binnum_typez$TestHistogram.test_error_binnum_typesB{3---$iD#66666rctjddd}t|ddgttt|tjdgttt|dtjgdS)NrDr5rrrG?rQ)r#r'rr r7nanrJrs rtest_finite_rangezTestHistogram.test_finite_rangeso{3---$tDk****j)T"&GGGGj)T$rvGGGGGGrctjddd}ttd5tj|ddgddddS#1swxYwYdS) NrDr5rrzmax must be larger thanrCg{Gz?rQ)r#r'rr7rrs rtest_invalid_rangez TestHistogram.test_invalid_ranges{3--- -F G G 2 2 Lc4[ 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2sAAAc.tjgd}tj|dd\}}|dk}|dd|}|dd|}t|||D],\}}} t ||kt || k-dS)N)iQiii&iiiih )r0ir4rRrr[r/)r#r8rzipr) rarrr9r:mask left_edges right_edgesrpleftrights rtest_bin_edge_casesz!TestHistogram.test_bin_edge_casessh===>>l3TCCC eax3B3Z% ABBio !#z;??  NAtU AI    AI      rctjgd}tj|dd\}}t|dddS)N rDrDrDr5r6rmrmg@g@rrr[r/)r#r8rr)rrr9r:s rtest_last_bin_inclusive_rangez+TestHistogram.test_last_bin_inclusive_rangesLhCCCDDl3RyAAA eT"Xq!!!!!rctjddd}tjddgddgg}ttd5tj|| ddddS#1swxYwYdS) NrDr5rrrrEg333333?z must be 1dr3)r#r'r8rr7r)rrr4s rtest_bin_array_dimsz!TestHistogram.test_bin_array_dimss{3---x!SC:.// \ : : * * LD ) ) ) ) * * * * * * * * * * * * * * * * * *sA++A/2A/ctjdg}tjgdd}tt5tj||\}}ddddS#1swxYwYdS)Nr0)r/r1r/uint64rlr3)r#r8r r7r)rrr4r9r:s r test_unsigned_monotonicity_checkz.TestHistogram.test_unsigned_monotonicity_checkshsmmx 222 : & & 7 7,s666KD% 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7sA))A-0A-ctttdtdDtj gztttdtdDtjgzt jdtdDdgzt jdtdDdgzdS)Nc6g|]}tjdSg?r#r8.0is r z9TestHistogram.test_object_array_of_0d..  999! 999rr"c6g|]}tjdSrrrs rrz9TestHistogram.test_object_array_of_0d..rrc6g|]}tjdSrErrs rrz9TestHistogram.test_object_array_of_0d.. 777bhsmm777rg ?c6g|]}tjdSrrrs rrz9TestHistogram.test_object_array_of_0d..rrrE)r r7rrRr#rJrs rtest_object_array_of_0dz%TestHistogram.test_object_array_of_0d sj 99uRyy999bfWIE G G Gj 99uRyy999RVHD F F F 77U2YY777;K:LLMMM 77U2YY7772$>?????rcRtjddtjg}tjtjtjg}t}|t |5t tt|dt tt|dt|dd\}}t| dt|dd\}}t| dt|ddg\}}t| dt|ddg\}}t| dddddS#1swxYwYdS)Nrr/autor3rr/rr0) r#r8rrfilterryr r7rrr&)rone_nanall_nanr}r;r+s rtest_some_nan_valuesz"TestHistogram.test_some_nan_valuess(Aq"&>**(BFBF+,, !! >"""  % % *iv F F F F *iv F F F FW6@@@DAq ! $ $ $W6@@@DAq ! $ $ $WAq6222DAq ! $ $ $WAq6222DAq ! $ $ $ % % % % % % % % % % % % % % % % % %s6DFF #F ctjdd}tjgd}tjgd}||z}||z}tjd}t ||\}}t ||||\} } t ||\} } t || t | | t ||z t| t | t| t |j|jt | j|dS)Nz 2000-01-01D) rrr/r/r0r1rr")rr0rztimedelta64[D]r3)r# datetime64r8rdrastyperrh) rbeginoffsetsr4dates date_binstdd_countd_edget_countt_edgei_counti_edges r test_datetimezTestHistogram.test_datetime-sB lC00(88899x &&DL X& ' ' $E :::#GNN2$6$6T[[__MMM#G$777Wg&&&Wg&&&fun,,S116:::V]]3''000V\5;///V\2&&&&&rcdtj|jzdz }tjd|z dzd|zdz g|}t |d\}}t |d|z dzdd|zdz gt |ddgdS)NrYr/r0r2rlr3r)r#rditemsizer8rr)rrdexponentrr9r<s rdo_signed_overflow_boundsz'TestHistogram.do_signed_overflow_boundsFsrx//!3hH q(!X+/:%HHHCa(((aQ!X+)1akAo>???TAq6"""""rc<|tj|tj|tj|tj|tjdSr)rr#byteshortintcint_longlongrs rtest_signed_overflow_boundsz)TestHistogram.test_signed_overflow_boundsMsv &&rw/// &&rx000 &&rw/// &&rw/// &&r{33333rcZtj|j}tjdg|}tjd|zdg|}||ddkrdStj|d|\}}t |dgt |j|dS)Nr5r6rr/rr#finfoepsr8rrrrdr float_small float_largerrrRcountx_locs rdo_precision_lower_boundz&TestHistogram.do_precision_lower_boundTsh{##'huk**#)S);77 << $ $Q '1 , , F|Cau=== uUQC    U[+.....rcZtj|j}tjdg|}tjdd|z g|}||ddkrdStj|d|\}}t |dgt |j|dS)Nr5rDr[r/rrrs rdo_precision_upper_boundz&TestHistogram.do_precision_upper_boundesh{##'huk**#sSy);77 << $ $R (A - - F|Cau=== uUQC    U[+.....rc^||||||dSr)rr)rrrs r do_precisionzTestHistogram.do_precisionvs4 %%k;??? %%k;?????rc|tjtj|tjtj|tjtj|tjtj|tjtj|tjtjdSr)rr#halfsingledouble longdoublers rtest_precisionzTestHistogram.test_precisionzs "'29--- "'29--- "'2=111 ")RY/// ")R]333 ")R]33333rctgdddg\}}tgdddg}t||tjgd}t|dd\}}t|dd}t||t|dd \}}t|dd }t||dS) Nr.r/r0rrrrrr)rrrr#r8)rr9r<r:rs rtest_histogram_bin_edgesz&TestHistogram.test_histogram_bin_edgessLLL1a&11a#LLL1a&995!$$$hCCCDDCb :::a#Cb BBB5!$$$CfF;;;a#CfFCCC5!$$$$$rg _B) free_bytesctjddg}d}d}tjd}tj||||f}t t |t ddS)Nir1ii>)sampler4)r/r0)r#rrIrrtype)rrxbinsybinszbinsr9s rtest_big_arrayszTestHistogram.test_big_arrayssm9a.)) %  ~V5%2GHHHT$ZZf.....rN)'__name__ __module__ __qualname__rrr,r=rNr]r`rjrurrrrrrrrrrrrrrrrrrrrrrrpytestmarkslowr rrrrr s.       " " "///'''@!!!0GGG 5 5 5,,,111"333:@@@<;;;000 777 HHH222   """ ***777 @ @ @%%%2'''2###444///"///"@@@444 % % %_%%% [//&%///rrceZdZdZdZdZdZdZdZdZ dZ d Z d Z e jd gd d ZdZdS)TestHistogramOptimBinNumsz] Provide test coverage when using provided estimators for optimal number of bins cgd}|D]]}tg|\}}t|tjdgt|tjddg^dS)Nfdscottricesturgesdoanesqrtrstoner3rr/r)restimator_list estimatorr*r+s rrz$TestHistogramOptimBinNums.test_emptys<<<( 4 4IRi000DAq q"(A3-- 0 0 0 q"(Aq6"2"2 3 3 3 3 4 4rc ddddddddddddddd dd dd d d d d dd ddd}|D]\}}tjdd|dzdz}tjdd|dzdz}tj||f}|D]P\}}tj||\} } t t | |d||QdS)z Straightforward testing with a mixture of linspace data (for consistency). All test values have been precomputed and the values shouldn't change r2rYrr0rr" rP#Gr2iirr[rr/r1*For the {0} estimator with datasize of {1}err_msgN)itemsr#r'rrrrzformat) r basic_testtestlenexpectedResultsx1x2rprnumbinsr*r+s rr,z%TestHistogramOptimBinNums.test_simplese$%A1&'AKK#$B2&("b1NN#%B2&("b2OO PP )3(8(8(:(: P P $G_S"glQ&677BQGqL1$455BBx((A&5&;&;&=&= P P" 7|Ay111SVVW744:F9g4N4NPPPPP P P Prc hddddddddddddddddddddddddd}|D]~\}}tj|}|D]P\}}tj||\}}t t ||d||QdS) z Smaller datasets have the potential to cause issues with the data adaptive methods, especially the FD method. All bin numbers have been precalculated. r/)rrrrrrrr0r1r/r0r1r*r+N)r-r#rIrrrzr.) r small_datr0r1testdatrexpbinsr*r+s r test_smallz$TestHistogramOptimBinNums.test_smalls !1aA"#Q<< 1aA"#Q<< 1aA"#Q<< == )2(9(9 P P $G_i((G&5&;&;&=&= P P" 7|GY771SVVW744:F9g4N4NPPPPP P P PrcTgd}|D] }tttgd|!dS)zS Check a Value Error is thrown when an unknown string is passed in )madfreeman histogramsIQRr6N)r r7r)r check_listrs rtest_incorrect_methodsz0TestHistogramOptimBinNums.test_incorrect_methodssG=<< # G GI *iI F F F F G Grc  tjd}ddddddddd}|D]O\}}tj||\}}t t ||d|PdS)z Check that methods handle no variance in data Primarily for Scott and FD as the SD and IQR are both 0 in this case rr/rz{0} estimator, No Variance testr+N)r#rgr-rrrzr.)r novar_datasetnovar_resultdictrr4r*r+s rtest_novariancez)TestHistogramOptimBinNums.test_novariances  "#aq%&1qJJ#3"8"8":": ? ? Iw< y99DAq Q3,,2F9,=,= ? ? ? ? ? ? ?rctjd}d|dd<d|dd<t|d}t|tjdddt|d }t|tjddgt|d }t|tjddddS) zu Check when IQR is 0, but variance exists, we return the sturges value and not the fd value. irNr1rrr"rr)r#rgrrr'r8)r lim_var_data edges_autoedges_fd edges_sturgess rtest_limited_variancez/TestHistogramOptimBinNums.test_limited_variances wt}}  RaR RSS(v>> ZQR!8!8999&|T::XrxC11222+L)DD ]BK3$;$;<<<<.nbins_ratiosx)''--C q 55Ar|Aw//233Sa9Q9QRS9T5U5UqAA; rcg|]PfdtjdddtDQS)c(g|]}|Srr)rrYr^r\s rrzLTestHistogramOptimBinNums.test_scott_vs_stone...s%ooo4{{4&&ooorr"rr2)startstopr)r# geomspaceroundrrh)rr\r^s @rrzATestHistogramOptimBinNums.test_scott_vs_stone..so%%%poooo2>>SVVWc:::::  ; ; ;rr4)rrrrrrrc(tjgdtj}tj||\}}tj|tj|\}}t ||t ||dS)N)rrlr3)r#r8int8rrint32r)rr4r*r9r:hist32edges32s rtest_signed_integer_dataz2TestHistogramOptimBinNums.test_signed_integer_dataDs H\\\ 1 1 1l14000 e,qxx'9'9EEE4(((5'*****rc \gd}|D]$}tttgd|gd%dS)z= Check that weighted data raises a TypeError )rrrrrr6rbN)r rr)rrrs rtest_simple_weightedz.TestHistogramOptimBinNums.test_simple_weightedNsXDCC' 8 8I )Y #YYY 8 8 8 8 8 8 8rN)r rr__doc__rr,r:rArErLrTrirrrr parametrizerzr|rrrrrs 444PPP4PPP(GGG ? ? ?===$***(FFF ;;;> [V&B&B&BCC++CC+88888rrcheZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdS)TestHistogramddc tjgdgdgdgdgdgdg}t|ddd gd d gd d gg \}}tjgd gdgdggd gdgdgg}t||gdgdgdg}t||d\}}t tj||dz kt|ddd gd d gd dggd\}}tjgdgdgdggdgdgdgg}t ||dz ddtj|d d D}t|ddd gd d gd d gg!\}}tjd d gd d gd d ggd d gd d gd d ggd d gd d gd d ggd d gd d gd d ggg}t||tjd"}d#|ttd$ttd$ttd$f<ttj d$tj d$tj d$gd$\}}t||dS)%N)rrErF)rrFr)rrrE)rErErF)rErFr)rErr)r0r1r1r[r/rr1rQ)rr/r)rrr/)r/rr)rtrr0)rr/r0r1Tr4r@g(@)r0r1r2r2rS)rr/rr)rrr/r)r/rrrg@c6g|]}tj|Sr)r#squeeze)rrqs rrz/TestHistogramdd.test_simple..qs ; ; ;qRZ]] ; ; ;rr )r2r1r0rtr0r)rrrr5r) r#r8rrrallr splitrlistrRrI)rrpHr:answeredzZs rr,zTestHistogramdd.test_simpleZs Hnnnooo~~~$nnoooH I Iq)')1g1v1v%>@@@5IIIyyy)))<%IIyyy)))<>??1f%%%jj,,, 5qr48885qFSL())***q)')1g1v1v%>'+---5LLL,,, E(LL,,, EGHH!!Vb[!444 < ;BHQ$:$:$: ; ; ; Ir1g1v1v%>@@@5QFQFQF3FQFQF3FQFQF3FQFQF3566 1f%%% HY  <>$uQxx..$uQxx..$uQxx.. 89 ! billBIaLLI1MM51a     rcd}tjdd}|D]-}t||\}}t |j|k.dS)N))rr2rB)rBr2r)rrBr2)r2rBr)rBrr2)r2rrBr"r1r#r$r%rrshaperr4rr+rr:s r test_shape_3dzTestHistogramdd.test_shape_3dsa INN2q ! ! " "A"1a((HAu AGqL ! ! ! ! " "rcd}tjdd}|D]-}t||\}}t |j|k.dS)N))rr2rrB)r2rrrB)rrBr2r)rrBrr2)rrrBr2)r2rBrr)rBrrr2)rrr2rB)rr2rBr)rBr2rr)rBrrr2)r2rBrr)r2rrrB)rr2rBr)rrr2rB)rBrr2r)rBrr2r)r2rrBr)r2rrBr)rrBr2r)rr2rrB)rrBrr2)rBr2rr)rrrBr2r"r2rrs r test_shape_4dzTestHistogramdd.test_shape_4dsdH INN2q ! ! " "A"1a((HAu AGqL ! ! ! ! " "rctjdd}t|\}}t|d\}}t|tjd\}}t ||t|tjddzd\}}t ||t|tjdt dz\}}t |d|zdS)Nrr0Tr?rbr)r#r$r%rrgrrh)rr)r9r:n_histw_hists rrzTestHistogramdd.test_weightss INN3 " "!!nn e#At444 #Arws||<<< 64(((#Arws||a/?NNN 66***#ArwsC/@/@1/DEEE 61t8,,,,,rctjdt}t|d\}}t |dtjgddS)N)r"r0r0r3r)rrDrE)r#rrhrrr8)rrpr9r:s rtest_identical_samplesz&TestHistogramdd.test_identical_samplessQ HWc " "!!!,,, e58RXooo%>%>?????rctgggddgddgf\}}t|tjdggtjggggd\}}t|tjddS)Nrr/r3rDr0)r0r0r0)rr r#r8rrs rrzTestHistogramdd.test_emptysB8Aq6Aq6*:;;;1Q2$ 0 0111~r2rl3331Q 3 344444rc tjddd}tttj|gdtttj|gdtttj|dddgdgt tj|dddgd gdS) NrYr0r2)r[r0r2rr3)r/gGz?r/r/r/)r/r0r1r.)r#rIreshaper r7rr)rrps rtest_bins_errorsz TestHistogramdd.test_bins_errorss IaLL A & &j".!---HHHHj".!///JJJJ Aq---0H J J J Jq1a'>???@@@@@rc xtjd5tjddd}tjddgddgddgg}tj|dtj ddgg \}}t||tj|dtjd dtjgg \}}t||tj|dtj dtjgg \}}t||ddddS#1swxYwYdS) Nignore)invalidrBr1r0r/rr"r3r[)r#errstaterIrr8rrJr )rrpexpectedr;r<s rtest_inf_edgeszTestHistogramdd.test_inf_edgessi [ * * * ) ) ! $$Q**Ax!Q!Q!Q 899H>!1w2.>*?@@@DAq Ax ( ( (>!1bhArv.G.G*HIIIDAq Ax ( ( (>!1w26.B*CDDDDAq Ax ( ( ( ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )sD D//D36D3cvdg}gdg}t||\}}t|ddkt|ddkdg}gdg}t||\}}t|ddkt|ddkdg}gdg}t||\}}t|ddkt|ddkd g}gdg}t||\}}t|ddkt|ddkdS) NgG?)rDrEr5r3rrDr/r5g8?gqh?)rr)rrpr4r9_s rtest_rightmost_binedgez&TestHistogramdd.test_rightmost_binedges\ Nad+++aQ3Q2  Ead+++aQ3Q2  Nad+++aQ3Q3 Had+++aQ3Q3rc 8tjd}t|ddgddgddggttt|ddgddgdtjggttt|ddgtjdgddggdS)N)rr1rDr5rGrrErQ)r#r$rr r7rJrrs rrz!TestHistogramdd.test_finite_rangesy))D#sdD\D#; GHHHHj+t!3Z$bf~F H H H Hj+t!3Z"&$$E G G G G G Grctjgd}tjgd}tjgd}d}t||f||f\}}tjdgdgg}t||dS)z: Test that adjacent entries in an edge array can be equal )rr/r0)rr0r0r/r3r6r5Nr#r8rr)rrprqx_edgesy_edgesr9r: hist_expecteds rtest_equal_edgesz TestHistogramdd.test_equal_edgess HYYY   HYYY  (999%%!1a&/ABBB e D D"    T=)))))rc"tjgd}|dz }tjgd}|dz }t||f||f\}}t|dj|jt|dj|jdS)z< Test that if an edge array is input, its type is preserved )rr"rr")rrrTrr3rr/N)r#r8rrrd)rrprqrrr9r:s rtest_edge_dtypezTestHistogramdd.test_edge_dtypes H[[[ ! ! F(>>>**B,!1a&/ABBB eU1X^W]333U1X^W]33333rcd}tjdgtj}tjddgtj}||z}||z}t||f||f\}}t |dddS)Nlrr[r/r3)rr)r#r8int64rr)rbigrprrqrr9r:s rtest_large_integersz#TestHistogramdd.test_large_integerss~ HaS"( # #(B8RX.. !G-!1a&/ABBB eT$Z#####rctjgd}tjgd}tjddgddgg}tjdgdgdzzdgdzzdgdzz}tjdgdgdzzdgdzzdgdzz}t||f||f\}}t||t||f||fd \}}t|d dS) N)rr0rY)rrBrYr1rPr/rr3Trg?r)rrrrelative_areasrprqr9r:s rtest_density_non_uniform_2dz+TestHistogramdd.test_density_non_uniform_2ds(999%%(999%% F F# HaSA3q5[A3q5(A3q50 1 1 HaSA3q5[A3q5(A3q50 1 1"1a&/ABBB eT>***"1a&/A4PPP eT9%%%%%rctjd}tjgd}t||d\}}t |f|fd\}}t ||t ||ddS)Nr"rATr?r)r#rIr8rrr)rr)r4r9r:hist_ddedges_dds rtest_density_non_uniform_1dz+TestHistogramdd.test_density_non_uniform_1d!s IbMMx((())4666 e'tgtDDDT7###UHQK(((((rN)r rrr,rrrrrrrrrrrrrrrrrrrXs#!#!#!J""" " " " - - -@@@ 555 AAA ) ) )   .GGG * * * 4 4 4 $ $ $&&&6)))))rr)numpyr#numpy.lib.histogramsrrr numpy.testingrrrr r r r r rrnumpy.testing._private.utilsrrrrrrrrrsbLLLLLLLLLL 988888 L/L/L/L/L/L/L/L/^ y8y8y8y8y8y8y8y8xP)P)P)P)P)P)P)P)P)P)r