a :jg@sddlZddlmZmZmZddlmZmZmZm Z m Z m Z m Z m Z mZmZddlmZddlZGdddZGdddZGd d 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_memoryc@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!e"j#j$d?d@dAdBZ%dCdDZ&dES)F TestHistogramcCsdSNselfrrI/usr/local/lib/python3.9/site-packages/numpy/lib/tests/test_histograms.py setup_methodszTestHistogram.setup_methodcCsdSrrrrrrteardown_methodszTestHistogram.teardown_methodcCsTd}tj|}t|\}}ttj|dd|ttddd\}}t|ddS)NdrZaxis )nprandomrandrrsumlinspacer)rnvabrrr test_simples   zTestHistogram.test_simplecCstgdddg\}}t|dgt|ddgtttddgddtddgdd\}}t|tdgt|tddgdS)Nr&r'rbins?@)rrr ValueErrorrrarrayr )rhistedgesherrr test_one_bin s zTestHistogram.test_one_binc 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(r8)r9r9r9???) rrrrrdiffrarangerrinf) rr r!r"r#Zarear+countsZdmyrrr test_density*s(      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)Nrr;r ranger&TrEr6decimalrEweightsr6r+rErK)rr?rrrrr>)rr"r2r#wrrr test_outliersJszTestHistogram.test_outlierscCsbtdd}tdd}ttd(t|ddg|dd\}}Wdn1sT0YdS) Nrr; z same shape asr&rCTrJ)rr?r r.r)rr"rOr2r#rrrtest_arr_weights_mismatchbs z'TestHistogram.test_arr_weights_mismatchcCstdd}t|\}}tt|jtjt|dd\}}tt|jtjt|tdt d\}}tt|jtjt|tdt d\}}tt|jtjdS)Nrr;Tr5rK) rr?rrZ issubdtypedtypeintegerZfloatingonesintfloat)rr"r2r#rrr test_typeis zTestHistogram.test_typecCsPtjgdtjd}tjgdtjd}tj||dd\}}}t|ddS)N)g2VEq@gx>fQg-VT5@rT)g!@gS@g^z@rr*@)rr/Zfloat32Z histogram2drr)rxyZ counts_histZxedgesZyedgesrrrtest_f32_roundingxszTestHistogram.test_f32_roundingcCstjgdtjd}t|\}}tP}|td}tgd\}}tt|dt ||t ||Wdn1s~0YdS)N)r&r&rrZzConverting input from .*)TTFr&) rr/Zuint8rrrecordRuntimeWarningrlenr)rr"Zint_histZ int_edgessupZrecr0r1rrrtest_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)NrTr5rSrKr6rrrQr+rK)r&r'r'r)r))r)r(r'r&)r)rdrr&)r+rKr6g$@r[rCr7) r'r&r&r&r&r&r&r&r&)g?r9r9g333333?) rrrrVrr r concatenatezerosr?rr/r) rr!rOr"r#nanbwawbZnwaZnwbrrr 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&rNr'y?)r'r&r')rr'r(rfr&r'r(rMr)Decimalrd)rr/rr rIrp)rvaluesrKrkrlrprrrtest_exotic_weightss && z!TestHistogram.test_exotic_weightscCs4tgd}tj|ddgddt|gddS)Nrnrr)rEr+)rr/rr )rrqrrrtest_no_side_effectssz"TestHistogram.test_no_side_effectscCs>tgddgd\}}t|tdgt|tddgdS)Nrr&r*rrrr/rr"r#rrr test_emptyszTestHistogram.test_emptycCs,tjdddd}t|dttt|ddS)Nr:r,rnumrdg333333@)rrrr TypeErrorrvalsrrrtest_error_binnum_types z$TestHistogram.test_error_binnum_typecCsPtjdddd}t|ddgdttt|tjdgdttt|dtjgddS)Nr:r,rrxr=?rD)rrrr r.nanr@r{rrrtest_finite_rangeszTestHistogram.test_finite_rangecCsPtjdddd}ttd"tj|ddgdWdn1sB0YdS) Nr:r,rrxzmax must be larger thanr9g{Gz?rD)rrr r.rr{rrrtest_invalid_ranges z TestHistogram.test_invalid_rangec Cs~tgd}tj|ddd\}}|dk}|dd|}|dd|}t|||D]"\}}} t||kt|| kqVdS)N)iQiii&iiiih )r'ir+rErrNr&)rr/rzipr) rarrr0r1maskZ left_edgesZ right_edgesr\leftrightrrrtest_bin_edge_casess z!TestHistogram.test_bin_edge_casescCs4tgd}tj|ddd\}}t|dddS)N r:r:r:r,r-r[r[g@g@rdrrNr&)rr/rr)rrr0r1rrrtest_last_bin_inclusive_rangesz+TestHistogram.test_last_bin_inclusive_rangecCsbtjdddd}tddgddgg}ttdtj||d Wdn1sT0YdS) Nr:r,rrxrr;g333333?z must be 1dr*)rrr/r r.r)rr|r+rrrtest_bin_array_dimss z!TestHistogram.test_bin_array_dimscCs\tdg}tjgddd}tt"tj||d\}}Wdn1sN0YdS)Nr')r&r(r&Zuint64rZr*)rr/r r.r)rrr+r0r1rrr test_unsigned_monotonicity_checks  z.TestHistogram.test_unsigned_monotonicity_checkcCstttddtdDtj gtttddtdDtjgtddtdDdgtddtdDdgdS) NcSsg|]}tdqSg?rr/.0irrr z9TestHistogram.test_object_array_of_0d..rcSsg|]}tdqSrrrrrrrrcSsg|]}tdqSr;rrrrrrrg ?cSsg|]}tdqSrrrrrrrrr;)r r.rrErr@rrrrtest_object_array_of_0d sz%TestHistogram.test_object_array_of_0dcCstddtjg}ttjtjg}t}|t|ttt|ddttt|ddt|ddd\}}t | dt|ddd\}}t | dt|ddgd\}}t | dt|ddgd\}}t | dWdn1s0YdS)Nrr&autor*rr&rr') rr/rrfilterr`r r.rrr)rZone_nanZall_nanrbr2r#rrrtest_some_nan_valuess 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(rdr)rr'rztimedelta64[D]r*)rZ datetime64r/rTrastyperrW) rbeginoffsetsr+datesZ date_binstdZd_countZd_edgeZt_countZt_edgeZi_countZi_edgerrr test_datetime-s    zTestHistogram.test_datetimecCs|dt|jd}tjd| dd|dg|d}t|dd\}}t|d| ddd|dgt|ddgdS)NrLr&r'r)rZr*r)rrTitemsizer/rr)rrTexponentrr0r3rrrdo_signed_overflow_boundsFs $"z'TestHistogram.do_signed_overflow_boundscCs@|tj|tj|tj|tj|tjdSr)rrbyteshortZintcint_Zlonglongrrrrtest_signed_overflow_boundsMs     z)TestHistogram.test_signed_overflow_boundscCstt|j}tdg|}td|dg|}||ddkrDdStj|d|d\}}t|dgt|j|dS)Nr,r-rr&rrZfinfoepsr/rrrrTr float_small float_largerrrEcountZx_locrrrdo_precision_lower_boundTs  z&TestHistogram.do_precision_lower_boundcCstt|j}tdg|}tdd|g|}||ddkrDdStj|d|d\}}t|dgt|j|dS)Nr,r:rNr&rrrrrrrdo_precision_upper_boundcs  z&TestHistogram.do_precision_upper_boundcCs||||||dSr)rr)rrrrrr do_precisionss zTestHistogram.do_precisioncCsd|tjtj|tjtj|tjtj|tjtj|tjtj|tjtjdSr)rrZhalfsingledoubleZ longdoublerrrrtest_precisionws zTestHistogram.test_precisioncCstgdddg\}}tgdddg}t||tgd}t|ddd\}}t|ddd}t||t|dd d\}}t|dd d}t||dS) Nr%r&r'rrrrrr)rrrrr/)rr0r3r1rrrrtest_histogram_bin_edgess  z&TestHistogram.test_histogram_bin_edgesz,Bad memory reports lead to OOM in ci testing)reasoncCsJtddg}d}d}td}tj||||fd}tt|tddS)Nir(ii>)sampler+)r&r')rrhr?rrtype)rrZxbinsZybinsZzbinsr0rrrtest_big_arrayss  zTestHistogram.test_big_arrayscCs<tjtjdgddddd\}}tddg}t||dS) Ng$xz>f8rZr')gx0gel rr&r)rrr/r)rr0r3Z expected_histrrr test_gh_23110s  zTestHistogram.test_gh_23110N)'__name__ __module__ __qualname__rrr$r4rBrPrRrYr^rcrmrrrtrwr}rrrrrrrrrrrrrrrrpytestmarkskiprrrrrrr sD        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|tddgq dS)Nfdscottricesturgesdoanesqrtrstoner*rr&ru)restimator_list estimatorr"r#rrrrws z$TestHistogramOptimBinNums.test_emptyc Csddddddddddddddd dd dd d d d d dd ddd}|D]~\}}tdd|dd}tdd|dd}t||f}|D]2\}}t||\} } tt| |d||dqqJdS)z Straightforward testing with a mixture of linspace data (for consistency). All test values have been precomputed and the values shouldn't change r)rLrr'rr rC#Gr2iirsrNrdr&r(*For the {0} estimator with datasize of {1}err_msgN)itemsrrrgrrraformat) r basic_testtestlenexpectedResultsx1x2r\rnumbinsr"r#rrrr$s&z%TestHistogramOptimBinNums.test_simplec Csddddddddddddddddddddddddd}|D]N\}}t|}|D]2\}}t||\}}tt||d||dq^qDdS) 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?rrrar) rZ small_datrrZtestdatrZexpbinsr"r#rrr test_smalls" z$TestHistogramOptimBinNums.test_smallcCs(gd}|D]}tttgd|q dS)zS Check a Value Error is thrown when an unknown string is passed in )ZmadZfreemanZ histogramsZIQRrN)r r.r)rZ check_listrrrrtest_incorrect_methodssz0TestHistogramOptimBinNums.test_incorrect_methodsc Cs^td}ddddddddd}|D]0\}}t||\}}tt||d|dq(dS)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)rrVrrrrar)rZ novar_datasetZnovar_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)rrVrrrr/)rZ lim_var_dataZ edges_autoZedges_fdZ edges_sturgesrrrtest_limited_variances      z/TestHistogramOptimBinNums.test_limited_variancecCshtddd}ttddd|f}dddd d }|D]&\}}t||\}}tt||q.nbins_ratiocs6g|].fddtjddddtDqS)csg|]}|qSrr)rr)rrrrr#rzLTestHistogramOptimBinNums.test_scott_vs_stone...rrr))startstopry)rZ geomspaceroundrrW)rr)rrr#szATestHistogramOptimBinNums.test_scott_vs_stone..rrrr;)g333333?g ףp= ?g{Gz?gQ?r'rHN)rEabsrmeanr)rZllZavgrrrtest_scott_vs_stones  z-TestHistogramOptimBinNums.test_scott_vs_stonec Csddddddddddddddd d d d d ddd }|D]\}}td d|dd}tdd|dd}tdd|}t|||f}|D]F\}} tj||dd\} } d|} | d|7} tt| | | dqq>dS)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. rLrGr)rrrrrrr rP!ErrsrNrdr'r&rr(ri)irrDzFor the {0} estimatorz with datasize of {0}rN)rrrrrrrra) rrrrrrZx3r\rrr"r#msgrrrtest_simple_range*s(   z+TestHistogramOptimBinNums.test_simple_ranger+)rrrrrrrcCsXtjgdtjd}tj||d\}}tj|tj|d\}}t||t||dS)N)rrZr*)rr/Zint8rrZint32r)rr+r"r0r1Zhist32Zedges32rrrtest_signed_integer_dataIs  z2TestHistogramOptimBinNums.test_signed_integer_datacCs0gd}|D]}tttgd|gddq dS)z= Check that weighted data raises a TypeError )rrrrrrrSN)r rzr)rrrrrrtest_simple_weightedSs  z.TestHistogramOptimBinNums.test_simple_weightedN)rrr__doc__rwr$rrrrrrrrrZ parametrizerrrrrrrs  rc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdS) 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)rr;r<)rr<ro)rror;)r;r;r<)r;r<ro)r;roro)r'r(r(rNr&rr(rD)rr&r)rrr&)r&rr)rrr')rr&r'r(Tr+r6g(@)r'r(r)r)rF)rr&rr)rrr&r)r&rrrg@cSsg|]}t|qSr)rZsqueeze)rr]rrrrvrz/TestHistogramdd.test_simple..r)r)r(r'rr'r)rdrdrdr,rd) rr/rrrallr splitrhlistrEr?)rr\Hr1ZanswerZedzZrrrr$_sF      &&zTestHistogramdd.test_simplecCs<d}tjdd}|D] }t||\}}t|j|kqdS)N))rdr)r8)r8r)rd)rdr8r))r)r8rd)r8rdr))r)rdr8rr(rrrrrshaperr+rr#r r1rrr test_shape_3ds zTestHistogramdd.test_shape_3dcCs<d}tjdd}|D] }t||\}}t|j|kqdS)N))rr)rdr8)r)rdrr8)rdr8r)r)rr8rdr))rdrr8r))r)r8rrd)r8rdrr))rrdr)r8)rr)r8rd)r8r)rrd)r8rrdr))r)r8rdr)r)rrdr8)rdr)r8r)rdrr)r8)r8rr)rd)r8rdr)r)r)rr8rd)r)rdr8r)rr8r)rd)rdr)rr8)rdr8rr))r8r)rdr)rrdr8r)rr)rrrrr test_shape_4ds zTestHistogramdd.test_shape_4dcCstjdd}t|\}}t|dd\}}t|tdd\}}t||t|tdddd\}}t||t|tdtdd\}}t|d|dS)Nrr'Tr5rSre)rrrrrVrrW)rr!r0r1Zn_histZw_histrrrrms   zTestHistogramdd.test_weightscCs8tdt}t|dd\}}t|dtgddS)N)rr'r'r*r)rr:r;)rrhrWrrr/)rr\r0r1rrrtest_identical_sampless z&TestHistogramdd.test_identical_samplescCs`tgggddgddgfd\}}t|tdggtjggggdd\}}t|tddS)Nrr&r*r:r')r'r'r')rr rr/rhrvrrrrws zTestHistogramdd.test_emptyc Cs~tddd}tttj|gddtttj|gddtttj|dddgdgdttj|dddgd gddS) NrLr'r))rNr'r)rdr*)r&gGz?r&r&r&)r&r'r(r%)rr?reshaper r.rr)rr\rrrtest_bins_errorssz TestHistogramdd.test_bins_errorsc Cstjddtddd}tddgddgddgg}tj|dtj ddggd \}}t||tj|dtd dtjggd \}}t||tj|dtj dtjggd \}}t||Wdn1s0YdS) Nignore)invalidr8r(r'r&rrr*rN)rZerrstater?rr/rr@r )rr\expectedr2r3rrrtest_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?)r:r;r,r*rr:r&r,g8?gqh?)rr)rr\r+r0_rrrtest_rightmost_binedges(    z&TestHistogramdd.test_rightmost_binedgecCsvtjd}t|ddgddgddggdttt|ddgddgdtjggdttt|ddgtjdgddggddS)N)rr(r:r,r=r~r;rD)rrrr r.r@rr{rrrrs 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,Nrr/rr)rr\r]x_edgesy_edgesr0r1Z 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)rrdrGrr*rr&N)rr/rrrT)rr\r]r!r"r0r1rrrtest_edge_dtypeszTestHistogramdd.test_edge_dtypecCs`d}tdgtj}tddgtj}||}||}t||f||fd\}}t|dddS)NlrrNr&r*)rr)rr/Zint64rr)rbigr\r!r]r"r0r1rrrtest_large_integerssz#TestHistogramdd.test_large_integerscCstgd}tgd}tddgddgg}tdgdgddgddgd}tdgdgddgddgd}t||f||fd\}}t||t||f||fdd \}}t|d dS) N)rr'rL)rr8rLr(rCr&rr*Tr g?r )rr!r"Zrelative_areasr\r]r0r1rrrtest_density_non_uniform_2d s ** z+TestHistogramdd.test_density_non_uniform_2dcCs\td}tgd}t||dd\}}t|f|fdd\}}t||t||ddS)Nrr7Tr5r)rr?r/rrr)rr!r+r0r1Zhist_ddZedges_ddrrrtest_density_non_uniform_1d&s   z+TestHistogramdd.test_density_non_uniform_1dN)rrrr$rrrmrrwrrrrr#r$r&r'r(rrrrr]s%      r)numpyrrrrZ numpy.testingrrrrr r r r r rZnumpy.testing._private.utilsrrrrrrrrrs0 =