o 6a@sddlZddlmZmZmZddlmZmZm Z m Z m Z m Z m Z mZmZmZddlZGdddZGdddZGdd 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_warningsc@s eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?d@Z"dAS)B TestHistogramcCdSNselfrrA/usr/lib/python3/dist-packages/numpy/lib/tests/test_histograms.pysetupzTestHistogram.setupcCrrrrrrrteardownrzTestHistogram.teardowncCsTd}tj|}t|\}}ttj|dd|ttddd\}}t|ddS)Ndraxis )nprandomrandrrsumlinspacer)rnvabrrr test_simples   zTestHistogram.test_simplecCstgdddg\}}t|dgt|ddgtttddgddtddgdd\}}t|tdgt|tddgdS)Nr(r)rbins?@)rrr ValueErrorrrarrayr )rhistedgesherrr test_one_bins zTestHistogram.test_one_binc Cst}|5|tjd}d}tj|}t|dd\}}t|t|}t |dt t |dWdn1s=wYt}|8|tjd}t d}gd}t||dd\}}t|t|}t |dt t |dWddS1swYdS)Nz .*normed.*rTnormedr(r)rr( r) rrecordrVisibleDeprecationWarningrrrr diffrrlenarange) rsuprecr"r#r$r%arear-rrr test_normed)s(     "zTestHistogram.test_normedc Csd}tj|}t|dd\}}t|t|}t|dtd}gd}t||dd\}}t|dt t|t|dt||dd\}}t|gd td}d dd d tj g}t||dd\}}t|gd tjgd ddtj gdd\}}t |dd gdS)NrTdensityr(rrr(r*r皙?Fr'rr*rG)rHrHrH???) rrrrr r=rr?rrinf) rr"r#r$r%rBr-countsdmyrrr test_densityAs(      zTestHistogram.test_densitycCstdd}t|ddgd\}}t|dt|ddgd\}}t|dt|ddgdd\}}t|t|dd d tdd}t|ddg|dd \}}t|t|dt|d ddg|d \}}t||dddS)NrrJrr:ranger(TrRrEdecimalrRweightsrEr-rRrX)rr?rrr rr=)rr$r4r%wrrr test_outliersaszTestHistogram.test_outlierscCsdtdd}tdd}ttdt|ddg|dd\}}WddS1s+wYdS) NrrJ z same shape asr(r:TrW)rr?r r0r)rr$r\r4r%rrrtest_arr_weights_mismatchys  "z'TestHistogram.test_arr_weights_mismatchcCstdd}t|\}}tt|jtjt|dd\}}tt|jtjt|tdt d\}}tt|jtjt|tdt d\}}tt|jtjdS)NrrJTrDrX) rr?rr issubdtypedtypeintegerfloatingonesintfloat)rr$r4r%rrr test_types zTestHistogram.test_typecCsPtjgdtjd}tjgdtjd}tj||dd\}}}t|ddS)N)g2VEq@gx>fQg-VT5@rb)g!@gS@g^z@rr,@)rr1float32 histogram2drr )rxy counts_histxedgesyedgesrrrtest_f32_roundingszTestHistogram.test_f32_roundingcCstjgdtjd}t|\}}t)}|td}tgd\}}tt|dt ||t ||WddS1s@wYdS)N)r(r(rrizConverting input from .*)TTFr() rr1uint8rrr;RuntimeWarningrr>r)rr$int_hist int_edgesr@rAr2r3rrrtest_bool_conversions   "z"TestHistogram.test_bool_conversionc CsRtjd}tdd}t|\}}t|dd\}}t||d\}}t||dd\} } t|d|t|| tddd}ttdtdf}t|t d |d \}}t||tgd d gd d \}}t |gdtgd d gd dd\}}t|t gdddd tt dgdgddd\}}t |gddS)Nrr9TrDr`rXrErrr^r-rX)r(r)r)r+r+)r+r*r)r()r+r9rr()r-rXrEg$@rjr:rF) r)r(r(r(r(r(r(r(r()g?rHrHg333333?) rrrrerr r! concatenatezerosr?rr1r) rr#r\r$r%nanbwawbnwanwbrrr test_weightss.      zTestHistogram.test_weightscCs<tgd}tgddtgd}t|gd|d\}}t|tddgdtdd gt|ddd g|d \}}t|tddgdtdd gd d lm}tgd}t|d|d|d g}t|gd|d\}}t||d|d gt|ddd g|d \}}t||d|d gdS)Ng?@gffffff@)r(r[r)y?)r)r(r))rr)r*ryr(r)r*rZr)Decimalr9)rr1rr rVr)rvaluesrXr~rrrrrtest_exotic_weightss && z!TestHistogram.test_exotic_weightscCs4tgd}tj|ddgddt|gddS)Nrrr)rRr-)rr1rr )rrrrrtest_no_side_effectssz"TestHistogram.test_no_side_effectscCs>tgddgd\}}t|tdgt|tddgdS)Nrr(r,rrrr1rr$r%rrr test_emptyszTestHistogram.test_emptycCs,tjdddd}t|dttt|ddS)NrIr.rnumr9g333333@)rr!rr TypeErrorrvalsrrrtest_error_binnum_types z$TestHistogram.test_error_binnum_typecCsPtjdddd}t|ddgdttt|tjdgdttt|dtjgddS)NrIr.rrrL?rQ)rr!rr r0nanrMrrrrtest_finite_rangeszTestHistogram.test_finite_rangecCsRtjdddd}ttdtj|ddgdWddS1s"wYdS) NrIr.rrzmax must be larger thanrHg{Gz?rQ)rr!r r0rrrrrtest_invalid_ranges "z TestHistogram.test_invalid_rangec Cs~tgd}tj|ddd\}}|dk}|dd|}|dd|}t|||D]\}}} t||kt|| kq+dS)N)iQiii&iiiih )r)ir-rRrr[r()rr1rzipr) rarrr2r3mask left_edges right_edgesrmleftrightrrrtest_bin_edge_casess z!TestHistogram.test_bin_edge_casescCs4tgd}tj|ddd\}}t|dddS)N rIrIrIr.r/rjrjg@g@r9rr[r()rr1rr)rrr2r3rrrtest_last_bin_inclusive_range sz+TestHistogram.test_last_bin_inclusive_rangecCsdtjdddd}tddgddgg}ttdtj||d WddS1s+wYdS) NrIr.rrrrJg333333?z must be 1dr,)rr!r1r r0r)rrr-rrrtest_bin_array_dimss  "z!TestHistogram.test_bin_array_dimscCs^tdg}tjgddd}tttj||d\}}WddS1s(wYdS)Nr))r(r*r(uint64rir,)rr1r r0r)rrr-r2r3rrr test_unsigned_monotonicity_checks  "z.TestHistogram.test_unsigned_monotonicity_checkcCstttddtdDtj gtttddtdDtjgtddtdDdgtddtdDdgdS) NcSg|]}tdqSg?rr1.0irrr #z9TestHistogram.test_object_array_of_0d..rcSrrrrrrrr%rcSrrJrrrrrr(rg ?cSrrrrrrrr)rrJ)r r0rrRrrMrrrrtest_object_array_of_0d s"z%TestHistogram.test_object_array_of_0dcCstddtjg}ttjtjg}t}|t|[ttt|ddttt|ddt|ddd\}}t | dt|ddd\}}t | dt|ddgd\}}t | dt|ddgd\}}t | dWddS1szwYdS)Nrr(autor,rr(rr)) rr1rrfilterrtr r0rrr )rone_nanall_nanr@r4r%rrrtest_some_nan_values+s  "z"TestHistogram.test_some_nan_valuesc Cstdd}tgd}tgd}||}||}td}t||d\}}t||||d\} } t||d\} } t|| t| | t||t| t| t| t|j|jt| j|dS)Nz 2000-01-01D) rrr(r(r)r*r9r)rr)rztimedelta64[D]r,)r datetime64r1rbrastyperrf) rbeginoffsetsr-dates date_binstdd_countd_edget_countt_edgei_counti_edgerrr test_datetimeDs    zTestHistogram.test_datetimecCs|dt|jd}tjd| dd|dg|d}t|dd\}}t|d| ddd|dgt|ddgdS)NrYr(r)r+rir,r)rrbitemsizer1rr)rrbexponentrr2r5rrrdo_signed_overflow_bounds]s $"z'TestHistogram.do_signed_overflow_boundscCs@|tj|tj|tj|tj|tjdSr)rrbyteshortintcint_longlongrrrrtest_signed_overflow_boundsds    z)TestHistogram.test_signed_overflow_boundscCstt|j}tdg|}td|dg|}||ddkr"dStj|d|d\}}t|dgt|j|dS)Nr.r/rr(rrfinfoepsr1rrrrbr float_small float_largerrrRcountx_locrrrdo_precision_lower_boundk  z&TestHistogram.do_precision_lower_boundcCstt|j}tdg|}tdd|g|}||ddkr"dStj|d|d\}}t|dgt|j|dS)Nr.rIr[r(rrrrrrdo_precision_upper_bound|rz&TestHistogram.do_precision_upper_boundcCs||||||dSr)rr)rrrrrr do_precisions zTestHistogram.do_precisioncCsd|tjtj|tjtj|tjtj|tjtj|tjtj|tjtjdSr)rrhalfsingledouble longdoublerrrrtest_precisions zTestHistogram.test_precisioncCstgdddg\}}tgdddg}t||tgd}t|ddd\}}t|ddd}t||t|dd d\}}t|dd d}t||dS) Nr'r(r)rrrrrr)rrrrr1)rr2r5r3rrrrtest_histogram_bin_edgess  z&TestHistogram.test_histogram_bin_edgesN)#__name__ __module__ __qualname__rrr&r6rCrPr]r_rhrrrwrrrrrrrrrrrrrrrrrrrrrrrrrr sB      rc@szeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ e jdgdddZddZdS)TestHistogramOptimBinNumsz] Provide test coverage when using provided estimators for optimal number of bins cCsLgd}|D]}tg|d\}}t|tdgt|tddgqdS)Nfdscottricesturgesdoanesqrtrstoner,rr(r)restimator_list estimatorr$r%rrrrs z$TestHistogramOptimBinNums.test_emptyc Csddddddddddddddd dd dd d d d d dd ddd}|D]?\}}tdd|dd}tdd|dd}t||f}|D]\}}t||\} } tt| |d||dqJq%dS)z Straightforward testing with a mixture of linspace data (for consistency). All test values have been precomputed and the values shouldn't change r+rYrr)rr r:#Gr2iirr[r9r(r**For the {0} estimator with datasize of {1}err_msgN)itemsrr!rzrrr>format) r basic_testtestlenexpectedResultsx1x2rmrnumbinsr$r%rrrr&s* z%TestHistogramOptimBinNums.test_simplec Csddddddddddddddddddddddddd}|D]'\}}t|}|D]\}}t||\}}tt||d||dq/q"dS) 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()rrrrrrrr)r*r(r)r*rrN)rrr?rrr>r) r small_datrrtestdatrexpbinsr$r%rrr test_smalls&  z$TestHistogramOptimBinNums.test_smallcCs(gd}|D] }tttgd|qdS)zS Check a Value Error is thrown when an unknown string is passed in )madfreeman histogramsIQRrN)r r0r)r check_listrrrrtest_incorrect_methodssz0TestHistogramOptimBinNums.test_incorrect_methodsc Cs^td}ddddddddd}|D]\}}t||\}}tt||d|dqdS)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 testrN)rrerrrr>r)r novar_datasetnovar_resultdictrrr$r%rrrtest_novariances  z)TestHistogramOptimBinNums.test_novariancecCstd}d|dd<d|dd<t|d}t|tdddt|d }t|tddgt|d }t|tddddS) zu Check when IQR is 0, but variance exists, we return the sturges value and not the fd value. irNr*rrrrr)rrerrr!r1)r lim_var_data edges_autoedges_fd edges_sturgesrrrtest_limited_variances      z/TestHistogramOptimBinNums.test_limited_variancecCshtddd}ttddd|f}dddd d }|D]\}}t||\}}tt||qd S) a Check the FD, Scott and Doane with outliers. The FD estimates a smaller binwidth since it's less affected by outliers. Since the range is so (artificially) large, this means more bins, most of which will be empty, but the data of interest usually is unaffected. The Scott estimator is more affected and returns fewer bins, despite most of the variance being in one area of the data. The Doane estimator lies somewhere between the other two. rrrir9r^rG)rrrrN)rr!hstackrrrr>)rxcenteroutlier_datasetoutlier_resultdictrrr$r%rrr test_outliers z&TestHistogramOptimBinNums.test_outliercsJddfddtdD}ttj|ddd}t|gd d d d S) zQVerify that Scott's rule and Stone's rule converges for normally distributed datacSsRtj|}|jdd|d}tt|ddtt|dd}}|||S)Nrr))locscalesizerr)rr RandomStatenormalr>r)seedr#rngrmr$r%rrr nbins_ratio%s * zBTestHistogramOptimBinNums.test_scott_vs_stone..nbins_ratiocs6g|]fddtjddddtDqS)csg|]}|qSrr)rr#)r(r&rrr+rzLTestHistogramOptimBinNums.test_scott_vs_stone...rrr+)startstopr)r geomspaceroundrrf)rr()r&rr+s.zATestHistogramOptimBinNums.test_scott_vs_stone..rrrrJ)g333333?g ףp= ?g{Gz?gQ?r)rUN)rRabsrmeanr)rllavgrr-rtest_scott_vs_stone"s  z-TestHistogramOptimBinNums.test_scott_vs_stonec Csddddddddddddddd d d d d ddd }|D]Q\}}td d|dd}tdd|dd}tdd|}t|||f}|D]#\}} tj||dd\} } d|} | d|7} tt| | | dqLqdS)z Straightforward testing with a mixture of linspace data (for consistency). Adding in a 3rd mixture that will then be completely ignored. All test values have been precomputed and the shouldn't change. rYrTr)rrrrrrr rP!Errr[r9r)r(rr*ri)irrQzFor the {0} estimatorz with datasize of {0}rN)rrr!rrrrr>) rrrrrrx3rmrrr$r%msgrrrtest_simple_range2s,   z+TestHistogramOptimBinNums.test_simple_ranger-)rrrrrrrcCsXtjgdtjd}tj||d\}}tj|tj|d\}}t||t||dS)N)rrir,)rr1int8rrint32r)rr-r$r2r3hist32edges32rrrtest_signed_integer_dataQs  z2TestHistogramOptimBinNums.test_signed_integer_datacCs0gd}|D]}tttgd|gddqdS)z= Check that weighted data raises a TypeError )rrrrrrr`N)r rr)rrrrrrtest_simple_weighted[s  z.TestHistogramOptimBinNums.test_simple_weightedN)rrr__doc__rr&r rrrr r2r:pytestmark parametrizerArBrrrrrs   rc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#S)$TestHistogramddc Cs:tgdgdgdgdgdgdg}t|ddd gd d gd d ggd \}}tgd gdgdggd gdgdgg}t||gdgdgdg}t||dd\}}tt||dkt|ddd gd d gd dggdd\}}tgdgdgdggdgdgdgg}t||ddddtj|d d dD}t|dd d!gd d gd d!ggd"\}}td 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||td#}d$|t t d%t t d%t t d%f<tt d%t d%t d%gd%\}}t||dS)&N)rrJrK)rrKr)rrrJ)rJrJrK)rJrKr)rJrr)r)r*r*r[r(rr*rQ)rr(r)rrr()r(rr)r;rr))rr(r)r*Tr-rEg(@)r)r*r+r+rS)rr(rr)rrr(r)r(rrrg@cSsg|]}t|qSr)rsqueeze)rrnrrrr~rz/TestHistogramdd.test_simple..r)r+r*r)r;r)r)r9r9r9r.r9) rr1rrrallr splitr{listrRr?)rrmHr3answeredzZrrrr&gsF      &&zTestHistogramdd.test_simplecC<d}tjdd}|D]}t||\}}t|j|kq dS)N))r9r+rG)rGr+r9)r9rGr+)r+rGr9)rGr9r+)r+r9rGrr*rrrrrshaperr-rr%rMr3rrr test_shape_3ds zTestHistogramdd.test_shape_3dcCrR)N))rr+r9rG)r+r9rrG)r9rGr+r)rrGr9r+)r9rrGr+)r+rGrr9)rGr9rr+)rr9r+rG)rr+rGr9)rGr+rr9)rGrr9r+)r+rGr9r)r+rr9rG)r9r+rGr)r9rr+rG)rGrr+r9)rGr9r+r)r+rrGr9)r+r9rGr)rrGr+r9)r9r+rrG)r9rGrr+)rGr+r9r)rr9rGr+rr+rSrUrrr test_shape_4ds zTestHistogramdd.test_shape_4dcCstjdd}t|\}}t|dd\}}t|tdd\}}t||t|tdddd\}}t||t|tdtdd\}}t|d|dS)Nrr)TrDr`rx)rrrrrerrf)rr#r2r3n_histw_histrrrrs   zTestHistogramdd.test_weightscCs8tdt}t|dd\}}t|dtgddS)N)rr)r)r,r)rrIrJ)rr{rfrrr1)rrmr2r3rrrtest_identical_sampless z&TestHistogramdd.test_identical_samplescCs`tgggddgddgfd\}}t|tdggtjggggdd\}}t|tddS)Nrr(r,rIr))r)r)r))rr rr1r{rrrrrs zTestHistogramdd.test_emptyc Cs~tddd}tttj|gddtttj|gddtttj|dddgdgdttj|dddgd gddS) NrYr)r+)r[r)r+r9r,)r(gGz?r(r(r()r(r)r*r')rr?reshaper r0rr)rrmrrrtest_bins_errorss"z TestHistogramdd.test_bins_errorsc Cstjddbtddd}tddgddgddgg}tj|dtj ddggd \}}t||tj|dtd dtjggd \}}t||tj|dtj dtjggd \}}t||WddS1skwYdS) Nignore)invalidrGr*r)r(rrr,r[)rerrstater?r]r1rrMr )rrmexpectedr4r5rrrtest_inf_edgess  $ " "zTestHistogramdd.test_inf_edgescCsdg}gdg}t||d\}}t|ddkt|ddkdg}gdg}t||d\}}t|ddkt|ddkdg}gdg}t||d\}}t|ddkt|ddkd g}gdg}t||d\}}t|ddkt|ddkdS) NgG?)rIrJr.r,rrIr(r.g8?gqh?)rr)rrmr-r2_rrrtest_rightmost_binedges(    z&TestHistogramdd.test_rightmost_binedgecCsvtjd}t|ddgddgddggdttt|ddgddgdtjggdttt|ddgtjdgddggddS)N)rr*rIr.rLrrJrQ)rrrr r0rMrrrrrrs  z!TestHistogramdd.test_finite_rangecCsftgd}tgd}tgd}d}t||f||fd\}}tdgdgg}t||dS)z: Test that adjacent entries in an edge array can be equal )rr(r))rr)r)r(r,r/r.Nrr1rr)rrmrnx_edgesy_edgesr2r3 hist_expectedrrrtest_equal_edgessz TestHistogramdd.test_equal_edgescCsltgd}|d}tgd}|d}t||f||fd\}}t|dj|jt|dj|jdS)z< Test that if an edge array is input, its type is preserved )rrrr)rr9rTrr,rr(N)rr1rrrb)rrmrnrgrhr2r3rrrtest_edge_dtypeszTestHistogramdd.test_edge_dtypecCs`d}tdgtj}tddgtj}||}||}t||f||fd\}}t|dddS)Nlrr[r(r,)rr)rr1int64rr)rbigrmrgrnrhr2r3rrrtest_large_integerssz#TestHistogramdd.test_large_integerscCstgd}tgd}tddgddgg}tdgdgddgddgd}tdgdgddgddgd}t||f||fd\}}t||t||f||fdd \}}t|d dS) N)rr)rY)rrGrYr*r:r(rr,TrHg?rf)rrgrhrelative_areasrmrnr2r3rrrtest_density_non_uniform_2ds ** z+TestHistogramdd.test_density_non_uniform_2dcCs\td}tgd}t||dd\}}t|f|fdd\}}t||t||ddS)NrrFTrDrrr?r1rrrrr#r-r2r3hist_ddedges_ddrrrtest_density_non_uniform_1d.  z+TestHistogramdd.test_density_non_uniform_1dcCs\td}tgd}t||dd\}}t|f|fdd\}}t||t||ddS)NrrFTrDr7rrqrrrrrtest_density_via_normed7rvz'TestHistogramdd.test_density_via_normedcCs`td}tgd}ttdt|f|fddd\}}WddS1s)wYdS)NrrFzCannot specify bothT)rEr8)rr?r1r rr)rr#r-rsrtrrrtest_density_normed_redundancy@s    "z.TestHistogramdd.test_density_normed_redundancyN)rrrr&rWrXrr[rr^rcrerrjrkrnrprurwrxrrrrrGes$%       rG)numpyrnumpy.lib.histogramsrrr numpy.testingrrrrr r r r r rrDrrrGrrrrs0 =