
    Kh                         S SK rS SK JrJrJr  S SKJrJrJrJ	r	J
r
JrJrJrJrJr  S SKr " S S5      r " S S5      r " S S	5      rg)
    N)	histogramhistogramddhistogram_bin_edges)
assert_assert_equalassert_array_equalassert_almost_equalassert_array_almost_equalassert_raisesassert_allcloseassert_array_max_ulpassert_raises_regexsuppress_warningsc                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#\$RJ                  RM                  S"S#9S$ 5       r'S% r(S&r)g')(TestHistogram   c                     g N selfs    Q/var/www/html/env/lib/python3.13/site-packages/numpy/lib/tests/test_histograms.pysetup_methodTestHistogram.setup_method           c                     g r   r   r   s    r   teardown_methodTestHistogram.teardown_method   r   r   c                     Sn[         R                  R                  U5      n[        U5      u  p4[	        [         R
                  " USS9U5        [        [         R                  " SSS5      5      u  p4[        US5        g )Nd   r   axis
   )nprandomrandr   r   sumlinspacer   )r   nvabs        r   test_simpleTestHistogram.test_simple   s^    IINN11RVVAA&* 2;;q"c231b!r   c                 ,   [        / SQSS/5      u  p[        US/5        [        USS/5        [        [        [         SS/SS9  [        SS/SS9u  p4[	        U[
        R                  " S/5      5        [        U[
        R                  " SS/5      5        g )N            r2   r3   r   bins      ?       @)r   r   r   
ValueErrorr   r%   arrayr   )r   histedgeshes        r   test_one_binTestHistogram.test_one_bin   s}    q!f54!'51a&)j)aV!<!Qa(Q!&288RH-.r   c                    Sn[         R                  R                  U5      n[        USS9u  p4[         R                  " U[         R
                  " U5      -  5      n[        US5        [         R                  " S5      n/ SQn[        X&SS9u  p4[        US5        [        [         R                  " U[         R
                  " U5      -  5      S5        [        X&SS9u  p4[        U/ S	Q5        [         R                  " S5      nS
SSS[         R                  /n[        X&SS9u  p4[        U/ SQ5        [         R                  " / S	QSS[         R                  /SS9u  px[        USS
/5        g )Nr!   Tdensityr2   r$   r   r2   r4      r$   皙?Fr1   r   r4   rF   )rG   rG   rG                 ?      ?      ?)r%   r&   r'   r   r(   diffr	   aranger   r   inf)	r   r*   r+   r,   r-   arear7   countsdmys	            r   test_densityTestHistogram.test_density)   s   IINN1D)vva"''!*n%D!$ IIbM$/1b!RVVA
N+Q/ %01l+ IIbM1aBFF#$/1./ ll3RVV,d<Vc1X&r   c                 D   [         R                  " S5      S-   n[        USS/S9u  p#[        UR	                  5       S5        [        USS/S9u  p#[        UR	                  5       S5        [        USS/SS9u  p#[        U[         R                  " U5      -  R	                  5       SS	S
9  [         R                  " S5      S-   n[        USS/USS9u  p#[        U[         R                  " U5      -  R	                  5       S5        [        USSS/US9u  p#[        X$SS 5        g )Nr$   rI   r   	   ranger2   TrW   rD      decimalrW   weightsrD      r7   rW   r]   )r%   rM   r   r   r(   r	   rL   )r   r,   r>   r-   ws        r   test_outliersTestHistogram.test_outliersI   s    IIbMB 1a&)QUUWa  1b'*QUUWa  1a&$7Q^002ArB IIbMB1a&!TBa"''!*n))+Q/1a&!<Q!B r   c                     [         R                  " S5      S-   n[         R                  " S5      S-   n[        [        S5         [	        USS/USS9u  p4S S S 5        g ! , (       d  f       g = f)	Nr$   rI      zsame shape asr2   rU   Tr\   )r%   rM   r   r:   r   )r   r,   ra   r>   r-   s        r   test_arr_weights_mismatch'TestHistogram.test_arr_weights_mismatcha   sR    IIbMBIIbMB _=Qq!faFDA >==s   A
A+c                    [         R                  " S5      S-   n[        U5      u  p#[        [         R                  " UR
                  [         R                  5      5        [        USS9u  p#[        [         R                  " UR
                  [         R                  5      5        [        U[         R                  " S[        5      S9u  p#[        [         R                  " UR
                  [         R                  5      5        [        U[         R                  " S[        5      S9u  p#[        [         R                  " UR
                  [         R                  5      5        g )Nr$   rI   TrC   r]   )r%   rM   r   r   
issubdtypedtypeintegerfloatingonesintfloat)r   r,   r>   r-   s       r   	test_typeTestHistogram.test_typeh   s    IIbMB|aggrzz23D)aggr{{34BGGB$45aggrzz23BGGB$67aggr{{34r   c                     [         R                  " / SQ[         R                  S9n[         R                  " / SQ[         R                  S9n[         R                  " XSS9u  p4n[	        UR                  5       S5        g )N)g2VEq@gx>fQg-VT5@rk   )g!@gS@g^z@r!   r6         @)r%   r;   float32histogram2dr   r(   )r   xycounts_histxedgesyedgess         r   test_f32_roundingTestHistogram.test_f32_roundingw   sR    HH8

KHH<BJJO&(nnQ&D#V[__&+r   c                 |   [         R                  " / SQ[         R                  S9n[         R                  " U5      u  p#[	        5        nUR                  [        S5      n[         R                  " / SQ5      u  pg[        [        U5      S5        [        Xb5        [        Xs5        S S S 5        g ! , (       d  f       g = f)N)r2   r2   r   rt   zConverting input from .*)TTFr2   )
r%   r;   uint8r   r   recordRuntimeWarningr   lenr   )r   r,   int_hist	int_edgessuprecr<   r=   s           r   test_bool_conversion"TestHistogram.test_bool_conversion~   s~     HHYbhh/ ll1o
  C**^-GHC,,':;KDS1%t.u0 !  s   AB--
B;c                 0   [         R                  R                  S5      n[         R                  " S5      S-  n[	        U5      u  p4[	        USS9u  pV[	        XS9u  px[	        XSS9u  p[        US-  U5        [        XY5        [         R                  " SSS5      n[         R                  " [         R                  " S5      [         R                  " S5      45      n[	        U[         R                  " S	5      US
9u  px[        Xr5        [	        / SQS/ SQS
9u  px[        U/ SQ5        [	        / SQS/ SQSS9u  px[        U[         R                  " / SQ5      S-  S-  S-  5        [	        [         R                  " S5      / SQ/ SQSS9u  p4[        U/ SQ5        g )Nr!      TrC   ri   r]   rD   r   r$   re   r7   r]   )r2   r3   r3   r5   r5   )r5   r4   r3   r2   )r5   r   r   r2   )r7   r]   rD   g      $@ru   rU   rE   )	r3   r2   r2   r2   r2   r2   r2   r2   r2   )皙?rG   rG   g333333?)r%   r&   r'   rn   r   r
   r)   concatenatezerosrM   r   r;   r	   )r   r+   ra   r,   r-   nanbwawbnwanwbs              r   test_weightsTestHistogram.test_weights   sH   IINN3GGCL1|1d+1(Q48!!a%,!"* KK2r"NNBHHQK451299R=!<!"( <aF2|,q,F!"bhh|&<s&BR&G!&KL IIaL*/? 	A12r   c           	         [         R                  " / SQ5      n[         R                  " / SQ5      S[         R                  " / SQ5      -  -   n[        U/ SQUS9u  p4[        U[         R                  " SS/5      S[         R                  " SS	/5      -  -   5        [        USSS	/US
9u  p4[        U[         R                  " SS/5      S[         R                  " SS	/5      -  -   5        SSKJn  [         R                  " / SQ5      n[         R                  " U" S5      U" S5      U" S	5      /5      n[        U/ SQUS9u  p4[        X5" S5      U" S5      /5        [        USSS	/US
9u  p4[        X5" S5      U" S5      /5        g )Ng?      @gffffff@)r2   r`   r3   y              ?)r3   r2   r3   )r   r3   r4   r   r2   r3   r4   r_   r   )Decimalr   )r%   r;   r   r
   r[   r   )r   valuesr]   r   r   r   s         r   test_exotic_weights!TestHistogram.test_exotic_weights   sE    /*((:&bhhy.A)AA 6	7C!"bhh1v&6bhh1v>N9N&NO 6!QI!"bhh1v&6bhh1v>N9N&NO 	$/*((GAJ
GAJ?@ 6	7C!"wqz71:&>? 6!QI!"wqz71:&>?r   c                     [         R                  " / SQ5      n[         R                  " USS/SS9  [        U/ SQ5        g )Nr   r$   r!   )rW   r7   )r%   r;   r   r
   )r   r   s     r   test_no_side_effects"TestHistogram.test_no_side_effects   s0     /*
VC937!&/:r   c                     [        / SS/S9u  p[        U[        R                  " S/5      5        [        U[        R                  " SS/5      5        g )Nr   r2   r6   r   r   r%   r;   r   r,   r-   s      r   
test_emptyTestHistogram.test_empty   s?    Aq6+1bhhsm,1bhh1v./r   c                 t    [         R                  " SSSS9n[        US5        [        [        [        US5        g )NrH   r8   r!   numr   g333333@)r%   r)   r   r   	TypeErrorr   valss     r   test_error_binnum_type$TestHistogram.test_error_binnum_type   s,    {{3-$iD#6r   c                     [         R                  " SSSS9n[        USS/S9  [        [        [        U[         R
                  S/S9  [        [        [        US[         R                  /S9  g )NrH   r8   r!   r   rK         ?rV   )r%   r)   r   r   r:   nanrN   r   s     r   test_finite_rangeTestHistogram.test_finite_range   sN    {{3-$tDk*j)T"&&Gj)T$rvvGr   c                     [         R                  " SSSS9n[        [        S5         [         R                  " USS/S9  S S S 5        g ! , (       d  f       g = f)	NrH   r8   r!   r   zmax must be larger thanrG   g{Gz?rV   )r%   r)   r   r:   r   r   s     r   test_invalid_range TestHistogram.test_invalid_range   s>    {{3- -FGLLc4[1 HGGs   A
Ac                     [         R                  " / SQ5      n[         R                  " USSS9u  p#US:  nUS S U   nUSS  U   n[        XU5       H   u  pxn	[	        Xx:  5        [	        Xy:  5        M"     g )N)iQ  i  i  i&  i  i  i  ih   )r3   i  r7   rW   r   r`   r2   )r%   r;   r   zipr   )
r   arrr<   r=   mask
left_edgesright_edgesrx   leftrights
             r   test_bin_edge_cases!TestHistogram.test_bin_edge_cases   sw    hh=>ll3TCax3BZ%
ABio!#;?NAUAIAI @r   c                     [         R                  " / SQ5      n[         R                  " USSS9u  p#[        US   S5        g )N	rH   rH   rH   r8   r9   ru   ru   g      @g      @         r   r   r`   r2   )r%   r;   r   r   )r   r   r<   r=   s       r   test_last_bin_inclusive_range+TestHistogram.test_last_bin_inclusive_range   s3    hhCDll3RyAT"Xq!r   c                     [         R                  " SSSS9n[         R                  " SS/SS//5      n[        [        S5         [         R
                  " XS	9  S S S 5        g ! , (       d  f       g = f)
NrH   r8   r!   r   r   rI   g333333?z
must be 1dr6   )r%   r)   r;   r   r:   r   )r   r   r7   s      r   test_bin_array_dims!TestHistogram.test_bin_array_dims   sQ    {{3-xx!SC:./ \:LL) ;::s   A!!
A/c                     [         R                  " S/5      n[         R                  " / SQSS9n[        [        5         [         R                  " XS9u  p4S S S 5        g ! , (       d  f       g = f)Nr3   )r2   r4   r2   uint64rt   r6   )r%   r;   r   r:   r   )r   r   r7   r<   r=   s        r    test_unsigned_monotonicity_check.TestHistogram.test_unsigned_monotonicity_check   sG     hhsmxx	2:&,,s6KD '&&s   A
A,c           
         [        [        [        [        S5       Vs/ s H  n[        R
                  " S5      PM     sn[        R                  * /-   5        [        [        [        [        S5       Vs/ s H  n[        R
                  " S5      PM     sn[        R                  /-   5        [        R                  " [        S5       Vs/ s H  n[        R
                  " S5      PM     snS/-   5        [        R                  " [        S5       Vs/ s H  n[        R
                  " S5      PM     snS/-   5        g s  snf s  snf s  snf s  snf )Nr$   g?rI   g     ?)r   r:   r   rW   r%   r;   rN   )r   is     r   test_object_array_of_0d%TestHistogram.test_object_array_of_0d  s    juRy9y!y9bffWIE	GjuRy9y!y9RVVHD	F 	U2Y7YbhhsmY7;K:LLM
U2Y7YbhhsmY72$>? :9 87s    D=3 E	 E Ec                    [         R                  " SS[         R                  /5      n[         R                  " [         R                  [         R                  /5      n[        5       nUR	                  [
        5        U   [        [        [        USS9  [        [        [        USS9  [        USSS9u  pE[        UR                  5       S5        [        USSS9u  pE[        UR                  5       S5        [        USS/S9u  pE[        UR                  5       S5        [        USS/S9u  pE[        UR                  5       S5        S S S 5        g ! , (       d  f       g = f)Nr   r2   autor6   r   r2   r   r3   )r%   r;   r   r   filterr   r   r:   r   r   r(   )r   one_nanall_nanr   r>   r-   s         r   test_some_nan_values"TestHistogram.test_some_nan_values  s    ((Aq"&&>*((BFFBFF+,  !

>"*ivF*ivF W6@DA!$W6@DA!$ WAq62DA!$WAq62DA!$ SSs   =CE
Ec                 f   [         R                  " SS5      n[         R                  " / SQ5      n[         R                  " / SQ5      nX-   nX-   n[         R                  " S5      n[	        XES9u  px[	        UR                  U5      UR                  U5      S9u  p[	        X#S9u  p[        X{5        [        X5        [        X-
  R                  [        5      U5        [        U
R                  [        5      U5        [        UR                  UR                  5        [        U
R                  U5        g )Nz
2000-01-01D)	r   r   r2   r2   r3   r4   r   r$      )r   r3      r   ztimedelta64[D]r6   )r%   
datetime64r;   rk   r   astyper   ro   )r   beginoffsetsr7   dates	date_binstdd_countd_edget_countt_edgei_counti_edges                r   test_datetimeTestHistogram.test_datetime,  s    lC0((89xx&L	XX&'
 $E:#GNN2$6T[[_M#G7W&W&fn,,S16:V]]3'0V\\5;;/V\\2&r   c                    S[         R                  " U5      R                  -  S-
  n[         R                  " SU-  * S-   SU-  S-
  /US9n[	        USS9u  pE[        USU-  * S-   SSU-  S-
  /5        [        USS/5        g )Nr^   r2   r3   r5   rt   r6   r   )r%   rk   itemsizer;   r   r   )r   rk   exponentr   r<   r?   s         r   do_signed_overflow_bounds'TestHistogram.do_signed_overflow_boundsE  s    rxx///!3hhHq(!X+/:%HCa(Q!X+)1akAo>?TAq6"r   c                 :   U R                  [        R                  5        U R                  [        R                  5        U R                  [        R                  5        U R                  [        R
                  5        U R                  [        R                  5        g r   )r   r%   byteshortintcint_longlongr   s    r   test_signed_overflow_bounds)TestHistogram.test_signed_overflow_boundsL  s\    &&rww/&&rxx0&&rww/&&rww/&&r{{3r   c                 T   [         R                  " U5      R                  n[         R                  " S/U5      n[         R                  " SU-   S/U5      nUR	                  U5      S   S:w  a  g [         R
                  " USUS9u  pg[        US/5        [        UR                  U5        g )Nr8   r9   r   r2   r   r%   finfoepsr;   r   r   r   rk   r   float_smallfloat_larger  r   rW   countx_locs           r   do_precision_lower_bound&TestHistogram.do_precision_lower_boundS  s    hh{#''hhuk*#)S);7 <<$Q'1, ||Cau=UQC U[[+.r   c                 T   [         R                  " U5      R                  n[         R                  " S/U5      n[         R                  " SSU-
  /U5      nUR	                  U5      S   S:w  a  g [         R
                  " USUS9u  pg[        US/5        [        UR                  U5        g )Nr8   rH   r`   r2   r   r   r   r  s           r   do_precision_upper_bound&TestHistogram.do_precision_upper_boundb  s    hh{#''hhuk*#sSy);7 <<$R(A- ||Cau=UQC U[[+.r   c                 H    U R                  X5        U R                  X5        g r   )r  r
  )r   r  r  s      r   do_precisionTestHistogram.do_precisionr  s    %%k?%%k?r   c                 ,   U R                  [        R                  [        R                  5        U R                  [        R                  [        R                  5        U R                  [        R                  [        R
                  5        U R                  [        R                  [        R                  5        U R                  [        R                  [        R
                  5        U R                  [        R                  [        R
                  5        g r   )r  r%   halfsingledouble
longdoubler   s    r   test_precisionTestHistogram.test_precisionv  s    "''299-"''299-"''2==1"))RYY/"))R]]3"))R]]3r   c                    [        / SQSS/5      u  p[        / SQSS/5      n[        X25        [        R                  " / SQ5      n[        USSS9u  p[        USSS9n[        X25        [        USS	S9u  p[        USS	S9n[        X25        g )
Nr1   r2   r3   r   r   r   r   r   r   )r   r   r   r%   r;   )r   r<   r?   r=   r   s        r   test_histogram_bin_edges&TestHistogram.test_histogram_bin_edges  s    L1a&1#L1a&95$hhCDCb	:#Cb	B5$CfF;#CfFC5$r   c                     [         R                  " SS/S-  5      n[        R                  " [        SS9   [        USS9  S S S 5        g ! , (       d  f       g = f)Nr2   g     ?r$   zToo many bins for data range)matchr6   )r%   r;   pytestraisesr:   r   )r   r   s     r   test_small_value_range$TestHistogram.test_small_value_range  s?    hh9~*+]]:-KLc# MLLs   A		
Az,Bad memory reports lead to OOM in ci testing)reasonc                     [         R                  " SS/5      nSnSn[         R                  " S5      n[         R                  " XX44S9n[	        [        U5      [        S5      5        g )Ni r4   i  i>  )sampler7   )r2   r3   )r%   r   rM   r   r   type)r   r!  xbinsybinszbinsr<   s         r   test_big_arraysTestHistogram.test_big_arrays  sQ    9a.)		% ~~V%2GHT$Zf.r   c                     [         R                  " [         R                  " S/SS9SSS9u  p[         R                  " SS/5      n[        X5        g )	Ng$xz>f8rt   r3   )gx0gel	  r   r2   r   )r%   r   r;   r   )r   r<   r?   expected_hists       r   test_gh_23110TestHistogram.test_gh_23110  sC    ,,rxx5A$%%79 !Q(4/r   r   N)*__name__
__module____qualname____firstlineno__r   r   r.   r@   rR   rb   rf   rq   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  markskipr&  r*  __static_attributes__r   r   r   r   r      s    	"/'@!0G5,1"3:@<;0
7H2	"
*7	@%2'2#4// @4%$ [[KL/ M/0r   r   c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS r\R                  R!                  S/ SQ5      S 5       r\R                  R!                  S/ SQ5      S 5       rS rS rSrg)TestHistogramOptimBinNumsi  zQ
Provide test coverage when using provided estimators for optimal number of
bins
c                     / SQnU HR  n[        / US9u  p4[        U[        R                  " S/5      5        [        U[        R                  " SS/5      5        MT     g )Nfdscottricesturgesdoanesqrtr   stoner6   r   r2   r   )r   estimator_list	estimatorr,   r-   s        r   r   $TestHistogramOptimBinNums.test_empty  sN    < (IRi0DAq"((A3-0q"((Aq6"23 (r   c                    SSSSSSSSS.SSSSSS	SS
S.SSSSSSSSS.S.nUR                  5        H  u  p#[        R                  " SSUS-  S-  5      n[        R                  " SSUS-  S-  5      n[        R                  " XE45      nUR                  5        H@  u  px[        R                  " Xg5      u  p[        [        U	5      USR                  Xr5      S9  MB     M     g)z
Straightforward testing with a mixture of linspace data (for
consistency). All test values have been precomputed and the values
shouldn't change
r5   r^   r   r3   r6     r$   r      rU      #      G   r   2   i  i  r   r`   r   r2   r4   *For the {0} estimator with datasize of {1}err_msgN)itemsr%   r)   r   r   r   r   format)r   
basic_testtestlenexpectedResultsx1x2rx   r?  numbinsr,   r-   s              r   r.   %TestHistogramOptimBinNums.test_simple  s     $%A1&'AK#$B2&("b1N#%B2&("b2O	P
 )3(8(8(:$G S"glQ&67BQGqL1$45Bx(A&5&;&;&="	||A1SVW 744:F94NP '> );r   c           
      l   SSSSSSSS.SSSSSSSS.SSSSSSSS.S.nUR                  5        H  u  p#[        R                  " U5      R                  [        5      nUR                  5        H@  u  pV[        R
                  " XE5      u  px[        [        U5      USR                  XR5      S9  MB     M     g)	z
Smaller datasets have the potential to cause issues with the data
adaptive methods, especially the FD method. All bin numbers have been
precalculated.
r2   )r7  r8  r9  r:  r;  r<  r=  r3   r4   r2   r3   r4   rJ  rK  N)	rM  r%   rM   r   rp   r   r   r   rN  )	r   	small_datrP  rQ  testdatr?  expbinsr,   r-   s	            r   
test_small$TestHistogramOptimBinNums.test_small  s      !1aA"#Q< 1aA"#Q< 1aA"#Q<	=	 )2(9$Gii(//6G&5&;&;&="	||G7SVW 744:F94NP '> ):r   c                 N    / SQnU H  n[        [        [        / SQU5        M     g)zC
Check a Value Error is thrown when an unknown string is passed in
)madfreeman
histogramsIQRrW  N)r   r:   r   )r   
check_listr?  s      r   test_incorrect_methods0TestHistogramOptimBinNums.test_incorrect_methods  s!     =
#I*iIF $r   c           	          [         R                  " S5      nSSSSSSSSS.nUR                  5        H@  u  p4[         R                  " X5      u  pV[	        [        U5      USR                  U5      S9  MB     g)zt
Check that methods handle no variance in data
Primarily for Scott and FD as the SD and IQR are both 0 in this case
r!   r2   r6  z{0} estimator, No Variance testrK  N)r%   rn   rM  r   r   r   rN  )r   novar_datasetnovar_resultdictr?  rT  r,   r-   s          r   test_novariance)TestHistogramOptimBinNums.test_novariance  ss    
 "#aq%&1qJ #3"8"8":I<<9DAQ 3,,2F9,=? #;r   c                 X   [         R                  " S5      nSUSS& SUSS& [        US5      n[        U[         R                  " SSS5      5        [        US	5      n[        U[         R
                  " SS/5      5        [        US
5      n[        U[         R                  " SSS5      5        g)z]
Check when IQR is 0, but variance exists, we return the sturges value
and not the fd value.
  r   Nr4   r!   r   r   r7  r:  )r%   rn   r   r   r)   r;   )r   lim_var_data
edges_autoedges_fdedges_sturgess        r   test_limited_variance/TestHistogramOptimBinNums.test_limited_variance  s    
 wwt}RaRS(v>
ZQR!89&|T:XrxxC12+L)D]BKK3$;<r   c                 *   [         R                  " SSS5      n[         R                  " [         R                  " SSS5      U45      nSSSS	S
.nUR                  5        H2  u  pE[         R                  " X$5      u  pg[        [        U5      U5        M4     g)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.
r   r$   rI  ir      re   rF   )r7  r8  r;  r=  N)r%   r)   hstackrM  r   r   r   )r   xcenteroutlier_datasetoutlier_resultdictr?  rT  r,   r-   s           r   test_outlier&TestHistogramOptimBinNums.test_outlier
  sy     ++c2r*))R[[tQ%?$IJ$&R!L"4":":"<I<<;DAQ) #=r   c                 L   S n[        S5       VVs/ s HP  n[        R                  " SSSS9R                  5       R	                  [
        5       Vs/ s H
  o1" X#5      PM     snPMR     nnn[        [        R                  " USS9S-
  5      n[        U/ S	QS
S9  gs  snf s  snnf )zQVerify that Scott's rule and Stone's rule converges for normally distributed datac                     [         R                  R                  U 5      nUR                  SSUS9n[	        [         R
                  " US5      S   5      [	        [         R
                  " US5      S   5      pTXDU-   -  $ )Nr   r3   )locscalesizer=  r8  )r%   r&   RandomStatenormalr   r   )seedr  rngrx   r,   r-   s         r   nbins_ratioBTestHistogramOptimBinNums.test_scott_vs_stone.<locals>.nbins_ratio!  sh    ))''-C

q
5Ar||Aw/23Sa9QRS9T5UqA;r   r$   r!   r5   )startstopr   r   r"   rI   )g333333?g
ףp=
?g{Gz?gQ?r3   rZ   N)	rW   r%   	geomspaceroundr   ro   absmeanr	   )r   r  r  r  llavgs         r   test_scott_vs_stone-TestHistogramOptimBinNums.test_scott_vs_stone  s    	  )%#$ 46<<bsXY3Z3`3`3b3i3ijm3no3n4{4&3no# 	 % "''"1%+,C!91E p %s   ?B B"B B c           	         SSSSSSS.SSSSSSS.S	S	S
SS	SS.S.nUR                  5        H  u  p#[        R                  " SSUS-  S-  5      n[        R                  " SSUS-  S-  5      n[        R                  " SSU5      n[        R                  " XEU45      nUR                  5        HT  u  p[        R                  " XxSS9u  pSR                  U5      nUSR                  U5      -  n[        [        U
5      XS9  MV     M     g)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.
r^   rY   rF  )r7  r8  r9  r:  r   r=  rB      r   P   !   E      rH  r   r`   r   r3   r2   r$   r4   rt  i)ir   rV   zFor the {0} estimatorz with datasize of {0}rK  N)rM  r%   r)   rv  r   rN  r   r   )r   rO  rP  rQ  rR  rS  x3rx   r?  rT  r,   r-   msgs                r   test_simple_range+TestHistogramOptimBinNums.test_simple_range.  s    $%B(*BD#%B(*BE#%B(*BE
 )3(8(8(:$G S"glQ&67BQGqL1$45BT30B		22,'A&5&;&;&="	||A)D-44Y?.55g>>SVW:	 '> );r   r7   )r   r7  r;  r8  r=  r9  r:  c                    [         R                  " / SQ[         R                  S9n[         R                  " X!S9u  p4[         R                  " UR	                  [         R
                  5      US9u  pV[        X55        [        XF5        g )N)r      rt   r6   )r%   r;   int8r   r   int32r   )r   r7   r,   r<   r=   hist32edges32s          r   test_signed_integer_data2TestHistogramOptimBinNums.test_signed_integer_dataM  sW     HH\1ll10,,qxx'9E4(5*r   c           
      >   [        5        nUS:X  a  UR                  [        5        [        [        R
                  " [        R                  " [        R                  " S5      S5      U5      [        R                  " S5      5        SSS5        g! , (       d  f       g= f)z5
Test that bin width for integer data is at least 1.
r=  rU   rk  N)r   r   r   r   r%   r   tilerM   )r   r7   r   s      r   test_integer&TestHistogramOptimBinNums.test_integerW  sa      Cw

>*&&rwwryy|T'BDI		! !  s   A:B
Bc           	      b   [        [        R                  " [        R                  " [        R                  " S5      S5      S5      [        R                  " S5      S-  5        [        [        R                  " [        R                  " [        R                  " S5      S5      SS/5      SS/5        g)	zH
Test that the bin-width>=1 requirement *only* applies to auto binning.
rU   rk  rB  rD  r3   rG   r   N)r   r%   r   r  rM   r   s    r   test_integer_non_auto/TestHistogramOptimBinNums.test_integer_non_autod  sw     	""277299Q<#>CIIbMA	 	""277299Q<#>RIH	r   c           	      P    / SQnU H  n[        [        [        / SQU/ SQS9  M     g)z-
Check that weighted data raises a TypeError
)r7  r8  r9  r:  r   rW  ri   N)r   r   r   )r   r>  r?  s      r   test_simple_weighted.TestHistogramOptimBinNums.test_simple_weightedo  s'     D'I)Y	#Y8 (r   r   N)r,  r-  r.  r/  __doc__r   r.   r[  rc  rh  rq  rz  r  r  r  r0  parametrizer  r  r  r  r2  r   r   r   r4  r4    s    
4P4P(G?=$*(F ;> [[V &B C+C+ [[V &B C	C		8r   r4  c                   n    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rSrg)TestHistogramddiy  c           	         [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        USSS	/S
S/S
S//S9u  p#[         R                  " / SQ/ SQ/ SQ// SQ/ SQ/ SQ//5      n[        X$5        / SQ/ SQ/ SQ/n[        XSS9u  p#[	        [         R
                  " X$S-  :H  5      5        [        USSS	/S
S/S
S//SS9u  p#[         R                  " / SQ/ SQ/ SQ// SQ/ SQ/ SQ//5      n[        X$S-  S5        [         R                  " USS	S9 Vs/ s H  n[         R                  " U5      PM     nn[        USSS/S
S/S
S//S 9u  p#[         R                  " S
S
/S
S
/S
S
//S
S	/S
S
/S	S
//S
S	/S
S
/S
S
//S
S
/S
S
/S
S
///5      n[        X$5        [         R                  " S!5      nS"U[        [        S#5      5      [        [        S#5      5      [        [        S#5      5      4'   [        [         R                  " S#5      [         R                  " S#5      [         R                  " S#5      /S#5      u  p#[        X(5        g s  snf )$N)r   rI   rJ   )r   rJ   r   )r   r   rI   )rI   rI   rJ   )rI   rJ   r   )rI   r   r   )r3   r4   r4   r`   r2   r   r4   rV   )r   r2   r   )r   r   r2   )r2   r   r   )r  r   r3   )r   r2   r3   r4   Tr7   rD   g      (@)r3   r4   r5   r5   rX   )r   r2   r   r   )r   r   r2   r   )r2   r   r   r   g      @r"   )r5   r4   r3   r  r3   r   )r   r   r   r8   r   )r%   r;   r   r   r   allr
   splitsqueezer   listrW   rM   )	r   rx   Hr=   answeredry   zZs	            r   r.   TestHistogramdd.test_simple{  sI   HHno~$oH Iq)')1g1v1v%>@Iy)<%y)<> ?1% ,5q48qSL()* q)')1g1v1v%>'+- L,E(,EG H!!b[!4 %'HHQ$:;$:qRZZ]$:;Ir1g1v1v%>@QFQFQF3FQFQF3FQFQF3FQFQF35 6 	1%HHY<>$uQx.$uQx.$uQx.
89		!biilBIIaLI1M1  <s    Ic                     Sn[         R                  R                  SS5      nU H(  n[        X#5      u  pE[	        UR
                  U:H  5        M*     g )N))r   r5   rF   )rF   r5   r   )r   rF   r5   )r5   rF   r   )rF   r   r5   )r5   r   rF   r$   r4   r%   r&   r'   r   r   shaper   r7   rr-   r  r=   s         r   test_shape_3dTestHistogramdd.test_shape_3d  sC    IINN2q!A"1(HAAGGqL! r   c                     Sn[         R                  R                  SS5      nU H(  n[        X#5      u  pE[	        UR
                  U:H  5        M*     g )N))r   r5   r   rF   )r5   r   r   rF   )r   rF   r5   r   )r   rF   r   r5   )r   r   rF   r5   )r5   rF   r   r   )rF   r   r   r5   )r   r   r5   rF   )r   r5   rF   r   )rF   r5   r   r   )rF   r   r   r5   )r5   rF   r   r   )r5   r   r   rF   )r   r5   rF   r   )r   r   r5   rF   )rF   r   r5   r   )rF   r   r5   r   )r5   r   rF   r   )r5   r   rF   r   )r   rF   r5   r   )r   r5   r   rF   )r   rF   r   r5   )rF   r5   r   r   )r   r   rF   r5   r$   r5   r  r  s         r   test_shape_4dTestHistogramdd.test_shape_4d  sF    H IINN2q!A"1(HAAGGqL! r   c                    [         R                  R                  SS5      n[        U5      u  p#[        USS9u  pC[        U[         R                  " S5      S9u  pS[        XR5        [        U[         R                  " S5      S-  SS9u  pS[        XT5        [        U[         R                  " S[        5      S-  S9u  pS[        USU-  5        g )Nr!   r3   TrC   ri   r   )r%   r&   r'   r   rn   r   ro   )r   r+   r<   r=   n_histw_hists         r   r   TestHistogramdd.test_weights  s    IINN3"!!n#At4#Arwws|<6(#Arwws|a/?N6*#ArwwsC/@1/DE61t8,r   c                     [         R                  " S[        5      n[        USS9u  p#[	        US   [         R
                  " / SQ5      5        g )N)r$   r3   r3   r6   r   )r   rH   rI   )r%   r   ro   r   r   r;   )r   rx   r<   r=   s       r   test_identical_samples&TestHistogramdd.test_identical_samples  s7    HHWc"!!!,58RXXo%>?r   c                     [        / / /SS/SS/4S9u  p[        U[        R                  " S//5      5        [        R                   " / / / /SS9u  p[        U[        R                  " S5      5        g )Nr   r2   r6   rH   r3   )r3   r3   r3   )r   r   r%   r;   r   r   s      r   r   TestHistogramdd.test_empty  sc    B8Aq6Aq6*:;Q2$ 01~~r2rl3Q 34r   c           
      `   [         R                  " S5      R                  SS5      n[        [        [         R
                  U/ SQS9  [        [        [         R
                  U/ SQS9  [        [        [         R
                  USSS/ SQ/S9  [        [         R
                  " USSS/ S	Q/S95        g )
Nr^   r3   r5   )r`   r3   r5   r   r6   )r2   gGz?r2   r2   r2   )r2   r3   r4   r1   )r%   rM   reshaper   r:   r   r   )r   rx   s     r   test_bins_errors TestHistogramdd.test_bins_errors  s}     IIaL  A&j"..!-Hj"..!/JAq-0H	Jq1a'>?@r   c           
      p   [         R                  " SS9   [         R                  " S5      R                  SS5      n[         R                  " SS/SS/SS//5      n[         R
                  " US[         R                  * SS//S	9u  p4[        X25        [         R
                  " US[         R                  " S
S[         R                  /5      /S	9u  p4[        X25        [         R
                  " US[         R                  * S[         R                  //S	9u  p4[        X25        S S S 5        g ! , (       d  f       g = f)Nignore)invalidrF   r4   r3   r2   r   r$   r6   r`   )r%   errstaterM   r  r;   r   rN   r   )r   rx   expectedr>   r?   s        r   test_inf_edgesTestHistogramdd.test_inf_edges  s    [[*		!$$Q*Axx!Q!Q!Q 89H>>!1w2.>*?@DAA(>>!1bhhArvv.G*HIDAA(>>!1w266.B*CDDAA( +**s   D	D''
D5c                    S/n/ SQ/n[        XS9u  p4[        US   S:H  5        [        US   S:H  5        S/n/ SQ/n[        XS9u  p4[        US   S:H  5        [        US   S:H  5        S/n/ SQ/n[        XS9u  p4[        US   S:H  5        [        US   S:H  5        S	/n/ SQ/n[        XS9u  p4[        US   S:H  5        [        US   S:H  5        g )
NgG?)rH   rI   r8   r6   r   rH   r2   r8   g8   ?gqh ?)r   r   )r   rx   r7   r<   _s        r   test_rightmost_binedge&TestHistogramdd.test_rightmost_binedge  s    Na+Q3Q2Ea+Q3Q2Na+Q3Q3Ha+Q3Q3r   c           	         [         R                  R                  S5      n[        USS/SS/SS//S9  [        [        [        USS/SS/S[         R
                  //S9  [        [        [        USS/[         R                  S/SS//S9  g )N)r!   r4   rH   r8   rK   r   rI   rV   )r%   r&   r   r   r:   rN   r   r   s     r   r   !TestHistogramdd.test_finite_range  s    yy)D#sdD\D#; GHj+t!3Z$bff~F	Hj+t!3Z"&&$$E	Gr   c                     [         R                  " / SQ5      n[         R                  " / SQ5      n[         R                  " / SQ5      nSn[        X4X44S9u  pV[         R                  " S/S//5      n[        XW5        g)z9Test that adjacent entries in an edge array can be equal )r   r2   r3   )r   r3   r3   r2   r6   r9   r8   Nr%   r;   r   r   )r   rx   ry   x_edgesy_edgesr<   r=   hist_expecteds           r   test_equal_edges TestHistogramdd.test_equal_edges  sk    HHYHHY((9%!1&/ABDD"
  	T)r   c                     [         R                  " / SQ5      nUS-  n[         R                  " / SQ5      nUS-  n[        X4X44S9u  pV[        US   R                  UR                  5        [        US   R                  UR                  5        g)z;Test that if an edge array is input, its type is preserved )r   r$   r   r$   )r   r   rY   r   r6   r   r2   N)r%   r;   r   r   rk   )r   rx   ry   r  r  r<   r=   s          r   test_edge_dtypeTestHistogramdd.test_edge_dtype  so    HH[!F((>*B,!1&/ABU1X^^W]]3U1X^^W]]3r   c                     Sn[         R                  " S/[         R                  5      n[         R                  " SS/[         R                  5      nX-   nX-   n[        X$4X54S9u  pg[	        US   S5        g )Nl            r   r`   r2   r6   )r   r   )r%   r;   int64r   r   )r   bigrx   r  ry   r  r<   r=   s           r   test_large_integers#TestHistogramdd.test_large_integers  sd    HHaS"((#((B8RXX.G-!1&/ABT$Z#r   c                    [         R                  " / SQ5      n[         R                  " / SQ5      n[         R                  " SS/SS//5      n[         R                  " S/S/S-  -   S/S-  -   S/S-  -   5      n[         R                  " S/S/S-  -   S/S-  -   S/S-  -   5      n[        XT4X!4S9u  pg[        Xc5        [        XT4X!4SS	9u  pg[        US
5        g )N)r   r3   r^   )r   rF   r^   r4   rU   r2   r   r6   Tr  g      ?r  )r   r  r  relative_areasrx   ry   r<   r=   s           r   test_density_non_uniform_2d+TestHistogramdd.test_density_non_uniform_2d'  s     ((9%((9%FF# 
 HHaSA3q5[A3q5(A3q501HHaSA3q5[A3q5(A3q501 "1&/ABT* "1&/A4PT9%r   c                     [         R                  " S5      n[         R                  " / SQ5      n[        XSS9u  p4[	        U4U4SS9u  pV[        X55        [        XFS   5        g )Nr$   rE   TrC   r   )r%   rM   r;   r   r   r   )r   r+   r7   r<   r=   hist_ddedges_dds          r   test_density_non_uniform_1d+TestHistogramdd.test_density_non_uniform_1dB  sU    IIbMxx()6'tgtDT#UQK(r   r   N)r,  r-  r.  r/  r.   r  r  r   r  r   r  r  r  r   r  r  r  r  r  r2  r   r   r   r  r  y  sQ    #!J""	-@
5A
) .G*	4
$&6)r   r  )numpyr%   r   r   r   numpy.testingr   r   r   r	   r
   r   r   r   r   r   r  r   r4  r  r   r   r   <module>r     sH     = =  
 V0 V0rQ8 Q8hP) P)r   