
    qKg                         d dl Zd dl mZmZmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlZ G d d      Z G d d      Z G d	 d
      Zy)    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_warnings)requires_memoryc                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!e"jF                  jI                  d !      d"        Z%d# Z&y$)%TestHistogramc                      y N selfs    c/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numpy/lib/tests/test_histograms.pysetup_methodzTestHistogram.setup_method           c                      y r   r   r   s    r   teardown_methodzTestHistogram.teardown_method   r   r   c                    d}t         j                  j                  |      }t        |      \  }}t	        t        j
                  |d      |       t        t        j                  ddd            \  }}t        |d       y )Nd   r   axis
   )nprandomrandr   r   sumlinspacer   )r   nvabs        r   test_simplezTestHistogram.test_simple   sb    IINN11ARVVAA&* 2;;q"c23A1b!r   c                 8   t        g dddg      \  }}t        |dg       t        |ddg       t        t        t         ddgd       t        ddgd      \  }}t	        |t        j                  dg             t        |t        j                  ddg             y )N            r/   r0   r   bins      ?       @)r   r   r   
ValueErrorr   r#   arrayr   )r   histedgeshes        r   test_one_binzTestHistogram.test_one_bin    s    q!f5e4!'51a&)j)aV!<!Qa(1Q!&288RH-.r   c                    d}t         j                  j                  |      }t        |d      \  }}t        j                  |t        j
                  |      z        }t        |d       t        j                  d      }g d}t        ||d      \  }}t        |d       t        t        j                  |t        j
                  |      z        d       t        ||d      \  }}t        |g d	       t        j                  d      }d
dddt         j                  g}t        ||d      \  }}t        |g d       t        j                  g d	ddt         j                  gd      \  }}t        |dd
g       y )Nr   Tdensityr/   r"   r   r/   r1      r"   皙?Fr.   r   r1   rB   )rC   rC   rC                 ?      ?      ?)r#   r$   r%   r   r&   diffr	   aranger   r   inf)	r   r(   r)   r*   r+   arear4   countsdmys	            r   test_densityzTestHistogram.test_density*   s.   IINN1D)1vva"''!*n%D!$ IIbMD$/11b!RVVA
N+Q/ D%011l+ IIbM1aBFF#D$/11./ ll3RVV,d<Vc1X&r   c                 l   t        j                  d      dz   }t        |ddg      \  }}t        |j	                         d       t        |ddg      \  }}t        |j	                         d       t        |ddgd      \  }}t        |t        j                  |      z  j	                         dd	
       t        j                  d      dz   }t        |ddg|d      \  }}t        |t        j                  |      z  j	                         d       t        |dddg|      \  }}t        ||dd        y )Nr"   rE   r   	   ranger/   TrR   r@      decimalrR   weightsr@      r4   rR   rX   )r#   rI   r   r   r&   r	   rH   )r   r*   r;   r+   ws        r   test_outlierszTestHistogram.test_outliersJ   s   IIbMB 1a&)1QUUWa  1b'*1QUUWa  1a&$71Q^002ArB IIbMB1a&!TB1a"''!*n))+Q/1a&!<1Q!B r   c                     t        j                  d      dz   }t        j                  d      dz   }t        t        d      5  t	        |ddg|d      \  }}d d d        y # 1 sw Y   y xY w)	Nr"   rE      zsame shape asr/   rP   TrW   )r#   rI   r   r7   r   )r   r*   r\   r;   r+   s        r   test_arr_weights_mismatchz'TestHistogram.test_arr_weights_mismatchb   sT    IIbMBIIbMB _=Qq!faFDAq >==s   AA(c                    t        j                  d      dz   }t        |      \  }}t        t        j                  |j
                  t         j                               t        |d      \  }}t        t        j                  |j
                  t         j                               t        |t        j                  dt                    \  }}t        t        j                  |j
                  t         j                               t        |t        j                  dt                    \  }}t        t        j                  |j
                  t         j                               y )Nr"   rE   Tr?   rX   )r#   rI   r   r   
issubdtypedtypeintegerfloatingonesintfloat)r   r*   r;   r+   s       r   	test_typezTestHistogram.test_typei   s    IIbMB|1aggrzz23D)1aggr{{34BGGB$451aggrzz23BGGB$671aggr{{34r   c                    t        j                  g dt         j                        }t        j                  g dt         j                        }t        j                  ||d      \  }}}t	        |j                         d       y )N)g2VEq@gx>fQg-VT5@rd   )g!@gS@g^z@r   r3         @)r#   r8   float32histogram2dr   r&   )r   xycounts_histxedgesyedgess         r   test_f32_roundingzTestHistogram.test_f32_roundingx   sV    HH8

KHH<BJJO&(nnQ&D#VV[__&+r   c                 z   t        j                  g dt         j                        }t        j                  |      \  }}t	               5 }|j                  t        d      }t        j                  g d      \  }}t        t        |      d       t        ||       t        ||       d d d        y # 1 sw Y   y xY w)N)r/   r/   r   rl   zConverting input from .*)TTFr/   )
r#   r8   uint8r   r   recordRuntimeWarningr   lenr   )r   r*   int_hist	int_edgessuprecr9   r:   s           r   test_bool_conversionz"TestHistogram.test_bool_conversion   s     HHYbhh/ ll1o)
  C**^-GHC,,':;KD%S1%tX.ui0 !  s   
AB11B:c                 b   t         j                  j                  d      }t        j                  d      dz  }t	        |      \  }}t	        |d      \  }}t	        ||      \  }}t	        ||d      \  }	}
t        |dz  |       t        ||	       t        j                  ddd      }t        j                  t        j                  d      t        j                  d      f      }t	        |t        j                  d	      |
      \  }}t        ||       t	        g ddg d
      \  }}t        |g d       t	        g ddg dd      \  }}t        |t        j                  g d      dz  dz  dz         t	        t        j                  d      g dg dd      \  }}t        |g d       y )Nr      Tr?   rb   rX   r@   r   r"   r_   r4   rX   )r/   r0   r0   r2   r2   )r2   r1   r0   r/   )r2   r   r   r/   )r4   rX   r@   g      $@rm   rP   rA   )	r0   r/   r/   r/   r/   r/   r/   r/   r/   )g?rC   rC   g333333?)r#   r$   r%   rg   r   r
   r'   concatenatezerosrI   r   r8   r	   )r   r)   r\   r*   r+   nanbwawbnwanwbs              r   test_weightszTestHistogram.test_weights   s`   IINN3GGCL1|11d+B1a(BQ48S!!a%,!"c* KK2r"NNBHHQK451299R=!<B!"a( <aFB2|,q,FB!"bhh|&<s&BR&G!&KL IIaL*/?1 	A12r   c           	         t        j                  g d      }t        j                  g d      dt        j                  g d      z  z   }t        |g d|      \  }}t        |t        j                  ddg      dt        j                  dd	g      z  z          t        |ddd	g|
      \  }}t        |t        j                  ddg      dt        j                  dd	g      z  z          ddlm} t        j                  g d      }t        j                   |d       |d       |d	      g      }t        |g d|      \  }}t        | |d       |d      g       t        |ddd	g|
      \  }}t        | |d       |d      g       y )Ng?      @gffffff@)r/   r[   r0   y              ?)r0   r/   r0   )r   r0   r1   r   r/   r0   r1   rZ   r   )Decimalr   )r#   r8   r   r
   rV   r   )r   valuesrX   r   r   r   s         r   test_exotic_weightsz!TestHistogram.test_exotic_weights   sM    /*((:&bhhy.A)AA 6	7CB!"bhh1v&6bhh1v>N9N&NO 6!QIB!"bhh1v&6bhh1v>N9N&NO 	$/*((GAJ
GAJ?@ 6	7CB!"wqz71:&>? 6!QIB!"wqz71:&>?r   c                     t        j                  g d      }t        j                  |ddgd       t        |g d       y )Nr   r"   r   )rR   r4   )r#   r8   r   r
   )r   r   s     r   test_no_side_effectsz"TestHistogram.test_no_side_effects   s0     /*
VC937!&/:r   c                     t        g ddg      \  }}t        |t        j                  dg             t        |t        j                  ddg             y )Nr   r/   r3   r   r   r#   r8   r   r*   r+   s      r   
test_emptyzTestHistogram.test_empty   sA    Aq6+11bhhsm,1bhh1v./r   c                 x    t        j                  ddd      }t        |d       t        t        t        |d       y )NrD   r5   r   numr   g333333@)r#   r'   r   r   	TypeErrorr   valss     r   test_error_binnum_typez$TestHistogram.test_error_binnum_type   s,    {{3-$iD#6r   c                     t        j                  ddd      }t        |ddg       t        t        t        |t         j
                  dg       t        t        t        |dt         j                  g       y )NrD   r5   r   r   rG         ?rQ   )r#   r'   r   r   r7   nanrJ   r   s     r   test_finite_rangezTestHistogram.test_finite_range   sN    {{3-$tDk*j)T"&&Gj)T$rvvGr   c                     t        j                  ddd      }t        t        d      5  t        j                  |ddg       d d d        y # 1 sw Y   y xY w)	NrD   r5   r   r   zmax must be larger thanrC   g{Gz?rQ   )r#   r'   r   r7   r   r   s     r   test_invalid_rangez TestHistogram.test_invalid_range   s>    {{3- -FGLLc4[1 HGGs   AAc                     t        j                  g d      }t        j                  |dd      \  }}|dkD  }|d d |   }|dd  |   }t        |||      D ]"  \  }}}	t	        ||k\         t	        ||	k         $ y )N)iQ  i  i  i&  i  i  i  ih   )r0   i  r4   rR   r   r[   r/   )r#   r8   r   zipr   )
r   arrr9   r:   mask
left_edgesright_edgesrp   leftrights
             r   test_bin_edge_casesz!TestHistogram.test_bin_edge_cases   s    hh=>ll3TCeax3BZ%
ABio!#z;?NAtUAIAI @r   c                     t        j                  g d      }t        j                  |dd      \  }}t        |d   d       y )N	rD   rD   rD   r5   r6   rm   rm   g      @g      @         r   r   r[   r/   )r#   r8   r   r   )r   r   r9   r:   s       r   test_last_bin_inclusive_rangez+TestHistogram.test_last_bin_inclusive_range   s5    hhCDll3RyAeT"Xq!r   c                     t        j                  ddd      }t        j                  ddgddgg      }t        t        d      5  t        j
                  ||	       d d d        y # 1 sw Y   y xY w)
NrD   r5   r   r   r   rE   g333333?z
must be 1dr3   )r#   r'   r8   r   r7   r   )r   r   r4   s      r   test_bin_array_dimsz!TestHistogram.test_bin_array_dims   sS    {{3-xx!SC:./ \:LLD) ;::s   A%%A.c                     t        j                  dg      }t        j                  g dd      }t        t              5  t        j                  ||      \  }}d d d        y # 1 sw Y   y xY w)Nr0   )r/   r1   r/   uint64rl   r3   )r#   r8   r   r7   r   )r   r   r4   r9   r:   s        r    test_unsigned_monotonicity_checkz.TestHistogram.test_unsigned_monotonicity_check  sK     hhsmxx	2:&,,s6KD% '&&s   A##A,c           
      ~   t        t        t        t        d      D cg c]  }t	        j
                  d       c}t        j                   gz          t        t        t        t        d      D cg c]  }t	        j
                  d       c}t        j                  gz          t	        j                  t        d      D cg c]  }t	        j
                  d       c}dgz          t	        j                  t        d      D cg c]  }t	        j
                  d       c}dgz          y c c}w c c}w c c}w c c}w )Nr"   g?rE   g	     ?)r   r7   r   rR   r#   r8   rJ   )r   is     r   test_object_array_of_0dz%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+/D0 D5D:c                    t        j                  ddt         j                  g      }t        j                  t         j                  t         j                  g      }t               }|j	                  t
               |5  t        t        t        |d       t        t        t        |d       t        |dd      \  }}t        |j                         d       t        |dd      \  }}t        |j                         d       t        |ddg      \  }}t        |j                         d       t        |ddg      \  }}t        |j                         d       d d d        y # 1 sw Y   y xY w)Nr   r/   autor3   r   r/   r   r0   )r#   r8   r   r   filterry   r   r7   r   r   r&   )r   one_nanall_nanr}   r;   r+   s         r   test_some_nan_valuesz"TestHistogram.test_some_nan_values  s   ((Aq"&&>*((BFFBFF+,  !

>"*ivF*ivF W6@DAq!$W6@DAq!$ WAq62DAq!$WAq62DAq!$ SSs   ;CE!!E*c                    t        j                  dd      }t        j                  g d      }t        j                  g d      }||z   }||z   }t        j                  d      }t	        ||      \  }}t	        |j                  |      |j                  |            \  }	}
t	        ||      \  }}t        ||       t        |	|       t        ||z
  j                  t              |       t        |
j                  t              |       t        |j                  |j                         t        |
j                  |       y )Nz
2000-01-01D)	r   r   r/   r/   r0   r1   r   r"      )r   r0      r   ztimedelta64[D]r3   )r#   
datetime64r8   rd   r   astyper   rh   )r   beginoffsetsr4   dates	date_binstdd_countd_edget_countt_edgei_counti_edges                r   test_datetimezTestHistogram.test_datetime-  s    lC0((89xx&DL	XX&'
 $E	:#GNN2$6T[[_M#G$7Wg&Wg&fun,,S16:V]]3'0V\\5;;/V\\2&r   c                    dt        j                  |      j                  z  dz
  }t        j                  d|z   dz   d|z  dz
  g|      }t	        |d      \  }}t        |d|z   dz   dd|z  dz
  g       t        |ddg       y )NrY   r/   r0   r2   rl   r3   r   )r#   rd   itemsizer8   r   r   )r   rd   exponentr   r9   r<   s         r   do_signed_overflow_boundsz'TestHistogram.do_signed_overflow_boundsF  s    rxx///!3hhHq(!X+/:%HCa(aQ!X+)1akAo>?TAq6"r   c                 :   | j                  t        j                         | j                  t        j                         | j                  t        j                         | j                  t        j
                         | j                  t        j                         y r   )r   r#   byteshortintcint_longlongr   s    r   test_signed_overflow_boundsz)TestHistogram.test_signed_overflow_boundsM  s\    &&rww/&&rxx0&&rww/&&rww/&&r{{3r   c                 R   t        j                  |      j                  }t        j                  dg|      }t        j                  d|z   dg|      }|j	                  |      d   dk7  ry t        j
                  |d|      \  }}t        |dg       t        |j                  |       y )Nr5   r6   r   r/   r   r#   finfoepsr8   r   r   r   rd   r   float_smallfloat_larger   r   rR   countx_locs           r   do_precision_lower_boundz&TestHistogram.do_precision_lower_boundT  s    hh{#''hhuk*#)S);7 <<$Q'1, ||Cau=uUQC U[[+.r   c                 R   t        j                  |      j                  }t        j                  dg|      }t        j                  dd|z
  g|      }|j	                  |      d   dk7  ry t        j
                  |d|      \  }}t        |dg       t        |j                  |       y )Nr5   rD   r[   r/   r   r   r   r   s           r   do_precision_upper_boundz&TestHistogram.do_precision_upper_boundc  s    hh{#''hhuk*#sSy);7 <<$R(A- ||Cau=uUQC U[[+.r   c                 L    | j                  ||       | j                  ||       y r   )r   r   )r   r   r   s      r   do_precisionzTestHistogram.do_precisions  s"    %%k;?%%k;?r   c                 ,   | j                  t        j                  t        j                         | j                  t        j                  t        j                         | j                  t        j                  t        j
                         | j                  t        j                  t        j                         | j                  t        j                  t        j
                         | j                  t        j                  t        j
                         y r   )r   r#   halfsingledouble
longdoubler   s    r   test_precisionzTestHistogram.test_precisionw  s    "''299-"''299-"''2==1"))RYY/"))R]]3"))R]]3r   c                 <   t        g dddg      \  }}t        g dddg      }t        ||       t        j                  g d      }t        |dd      \  }}t        |dd      }t        ||       t        |dd	      \  }}t        |dd	      }t        ||       y )
Nr.   r/   r0   r   r   r   r   r   r   )r   r   r   r#   r8   )r   r9   r<   r:   r   s        r   test_histogram_bin_edgesz&TestHistogram.test_histogram_bin_edges  s    L1a&1a#L1a&95!$hhCDCb	:a#Cb	B5!$CfF;a#CfFC5!$r   z,Bad memory reports lead to OOM in ci testing)reasonc                     t        j                  ddg      }d}d}t        j                  d      }t        j                  ||||f      }t	        t        |      t        d             y )Ni r1   i  i>  )sampler4   )r/   r0   )r#   r   rI   r   r   type)r   r   xbinsybinszbinsr9   s         r   test_big_arrayszTestHistogram.test_big_arrays  sU    9a.)		% ~~V5%2GHT$Zf.r   c                     t        j                  t        j                  dgd      dd      \  }}t        j                  ddg      }t        ||       y )	Ng$xz>f8rl   r0   )gx0gel	  r   r/   r   )r#   r   r8   r   )r   r9   r<   expected_hists       r   test_gh_23110zTestHistogram.test_gh_23110  sG    ,,rxx5A$%%79a !Q(4/r   N)'__name__
__module____qualname__r   r   r,   r=   rN   r]   r`   rj   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   pytestmarkskipr   r  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                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zej                  j                  dg d      d        Zd Zy)TestHistogramOptimBinNumsz]
    Provide test coverage when using provided estimators for optimal number of
    bins
    c                     g d}|D ]S  }t        g |      \  }}t        |t        j                  dg             t        |t        j                  ddg             U y )Nfdscottricesturgesdoanesqrtr   stoner3   r   r/   r   )r   estimator_list	estimatorr*   r+   s        r   r   z$TestHistogramOptimBinNums.test_empty  sP    < (IRi0DAqq"((A3-0q"((Aq6"23 (r   c                    ddddddddddddddd	dd
ddddddddddd}|j                         D ]  \  }}t        j                  dd|dz  dz        }t        j                  dd|dz  dz        }t        j                  ||f      }|j                         D ]E  \  }}t        j                  ||      \  }	}
t        t        |	      |dj                  ||             G  y)z
        Straightforward testing with a mixture of linspace data (for
        consistency). All test values have been precomputed and the values
        shouldn't change
        r2   rY   r   r0   r     r"         rP      #      G   r   2   i  i  r   r[   r   r/   r1   *For the {0} estimator with datasize of {1}err_msgN)itemsr#   r'   r   r   r   rz   format)r   
basic_testtestlenexpectedResultsx1x2rp   r  numbinsr*   r+   s              r   r,   z%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Bx(A&5&;&;&="	7||Ay11SVW 744:F9g4NP '> );r   c           
      J   ddddddddddddddddddddddddd}|j                         D ]r  \  }}t        j                  |      }|j                         D ]E  \  }}t        j                  ||      \  }}t	        t        |      |dj                  ||             G t y)	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/   )r  r  r  r  r  r  r  r0   r1   r/   r0   r1   r!  r"  N)r$  r#   rI   r   r   rz   r%  )	r   	small_datr'  r(  testdatr  expbinsr*   r+   s	            r   
test_smallz$TestHistogramOptimBinNums.test_small  s      !1aA"#Q< 1aA"#Q< 1aA"#Q<	=	 )2(9$G_ii(G&5&;&;&="	7||GY71SVW 744:F9g4NP '> ):r   c                 J    g d}|D ]  }t        t        t        g d|        y)zS
        Check a Value Error is thrown when an unknown string is passed in
        )madfreeman
histogramsIQRr-  N)r   r7   r   )r   
check_listr  s      r   test_incorrect_methodsz0TestHistogramOptimBinNums.test_incorrect_methods  s!     =
#I*iIF $r   c           	          t        j                  d      }ddddddddd}|j                         D ]D  \  }}t        j                  ||      \  }}t	        t        |      |dj                  |             F y)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
        r   r/   r  z{0} estimator, No Variance testr"  N)r#   rg   r$  r   r   rz   r%  )r   novar_datasetnovar_resultdictr  r+  r*   r+   s          r   test_novariancez)TestHistogramOptimBinNums.test_novariance  sy    
 "#aq%&1qJ #3"8"8":Iw<<y9DAqQ 3,,2F9,=? #;r   c                 P   t        j                  d      }d|dd d|dd t        |d      }t        |t        j                  ddd             t        |d	      }t        |t        j
                  ddg             t        |d
      }t        |t        j                  ddd             y)zu
        Check when IQR is 0, but variance exists, we return the sturges value
        and not the fd value.
        i  r   Nr1   r   r   r  r  r  )r#   rg   r   r   r'   r8   )r   lim_var_data
edges_autoedges_fdedges_sturgess        r   test_limited_variancez/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                 $   t        j                  ddd      }t        j                  t        j                  ddd      |f      }dddd	d
}|j                         D ]3  \  }}t        j                  ||      \  }}t        t        |      |       5 y)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"   r   ir      r_   rB   )r  r  r  r  N)r#   r'   hstackr$  r   r   rz   )r   xcenteroutlier_datasetoutlier_resultdictr  r+  r*   r+   s           r   test_outlierz&TestHistogramOptimBinNums.test_outlier  s     ++c2r*))R[[tQ%?$IJ$&R!L"4":":"<Iw<<;DAqQ) #=r   c                 R   d }t        d      D cg c]P  }t        j                  ddd      j                         j	                  t
              D cg c]  } |||       c}R }}}t        t        j                  |d      dz
        }t        |g d	d
       yc c}w c c}}w )zQVerify that Scott's rule and Stone's rule converges for normally distributed datac                     t         j                  j                  |       }|j                  dd|      }t	        t        j
                  |d      d         t	        t        j
                  |d      d         }}|||z   z  S )Nr   r0   )locscalesizer  r  )r#   r$   RandomStatenormalrz   r   )seedrP  rngrp   r*   r+   s         r   nbins_ratiozBTestHistogramOptimBinNums.test_scott_vs_stone.<locals>.nbins_ratio  sl    ))''-C

q
5Ar||Aw/23Sa9QRS9T5UqAA;r   r"   r   r2   )startstopr   r   r    rE   )g333333?g
ףp=
?g{Gz?gQ?r0   rU   N)	rR   r#   	geomspaceroundr   rh   absmeanr	   )r   rU  rS  rP  llavgs         r   test_scott_vs_stonez-TestHistogramOptimBinNums.test_scott_vs_stone  s    	  )%#$ 46<<bsXY3Z3`3`3b3i3ijm3no3n4{4&3no# 	 % "''"1%+,C!91E p %s   A B#B"B#B#c           	         ddddddddddddddd	d	d
dd	ddd}|j                         D ]  \  }}t        j                  dd|dz  dz        }t        j                  dd|dz  dz        }t        j                  dd|      }t        j                  |||f      }|j                         D ]\  \  }}	t        j                  ||d      \  }
}dj                  |      }|dj                  |      z  }t        t        |
      |	|       ^  y)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.
        rY   rT   r  )r  r  r  r  r   r  r      r   P   !   E      r  r   r[   r   r0   r/   r"   r1   rE  i)ir   rQ   zFor the {0} estimatorz with datasize of {0}r"  N)r$  r#   r'   rG  r   r%  r   rz   )r   r&  r'  r(  r)  r*  x3rp   r  r+  r*   r+   msgs                r   test_simple_rangez+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		2r2,'A&5&;&;&="	7||Ay)D1-44Y?.55g>>SVWc:	 '> );r   r4   )r   r  r  r  r  r  r  c                 $   t        j                  g dt         j                        }t        j                  ||      \  }}t        j                  |j	                  t         j
                        |      \  }}t        ||       t        ||       y )N)r      rl   r3   )r#   r8   int8r   r   int32r   )r   r4   r*   r9   r:   hist32edges32s          r   test_signed_integer_dataz2TestHistogramOptimBinNums.test_signed_integer_dataI  sa     HH\1ll140e,,qxx'9E4(5'*r   c           	      R    g d}|D ]  }t        t        t        g d|g d         y)z=
        Check that weighted data raises a TypeError
        )r  r  r  r  r   r-  rb   N)r   r   r   )r   r  r  s      r   test_simple_weightedz.TestHistogramOptimBinNums.test_simple_weightedS  s'     D'I)Y	#Y8 (r   N)r  r  r  __doc__r   r,   r1  r8  r<  rC  rK  r^  rg  r  r  parametrizero  rq  r   r   r   r  r    sj    
4P4P(G?=$*(F ;> [[V &B C+C+8r   r  c                   f    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)TestHistogramddc           	         t        j                  g dg dg dg dg dg dg      }t        |ddd	gd
dgd
dgg      \  }}t        j                  g dg dg dgg dg dg dgg      }t        ||       g dg dg dg}t        ||d      \  }}t	        t        j
                  ||dz  k(               t        |ddd	gd
dgd
dggd      \  }}t        j                  g dg dg dgg dg dg dgg      }t        ||dz  d       t        j                  |dd	      D cg c]  }t        j                  |       }}t        |dddgd
dgd
dgg       \  }}t        j                  d
d
gd
d
gd
d
ggd
d	gd
d
gd	d
ggd
d	gd
d
gd
d
ggd
d
gd
d
gd
d
ggg      }t        ||       t        j                  d!      }d"|t        t        d#            t        t        d#            t        t        d#            f<   t        t        j                  d#      t        j                  d#      t        j                  d#      gd#      \  }}t        ||       y c c}w )$N)r   rE   rF   )r   rF   r   )r   r   rE   )rE   rE   rF   )rE   rF   r   )rE   r   r   )r0   r1   r1   r[   r/   r   r1   rQ   )r   r/   r   )r   r   r/   )r/   r   r   )ri  r   r0   )r   r/   r0   r1   Tr4   r@   g      (@)r0   r1   r2   r2   rS   )r   r/   r   r   )r   r   r/   r   )r/   r   r   r   g      @r    )r2   r1   r0   ri  r0   r   )r   r   r   r5   r   )r#   r8   r   r   r   allr
   splitsqueezer   listrR   rI   )	r   rp   Hr:   answeredrq   zZs	            r   r,   zTestHistogramdd.test_simple_  s_   HHno~$oH Iq)')1g1v1v%>@5Iy)<%y)<> ?1f% ,5qr485qFSL()* q)')1g1v1v%>'+-5 L,E(,EG H!!Vb[!4 %'HHQ$:;$:qRZZ]$:;Ir1g1v1v%>@5QFQFQF3FQFQF3FQFQF3FQFQF35 6 	1f%HHY<>$uQx.$uQx.$uQx.
89		!biilBIIaLI1M51a  <s   %Ic                     d}t         j                  j                  dd      }|D ])  }t        ||      \  }}t	        |j
                  |k(         + y )N))r   r2   rB   )rB   r2   r   )r   rB   r2   )r2   rB   r   )rB   r   r2   )r2   r   rB   r"   r1   r#   r$   r%   r   r   shaper   r4   rr+   r|  r:   s         r   test_shape_3dzTestHistogramdd.test_shape_3d  sG    IINN2q!A"1a(HAuAGGqL! r   c                     d}t         j                  j                  dd      }|D ])  }t        ||      \  }}t	        |j
                  |k(         + y )N))r   r2   r   rB   )r2   r   r   rB   )r   rB   r2   r   )r   rB   r   r2   )r   r   rB   r2   )r2   rB   r   r   )rB   r   r   r2   )r   r   r2   rB   )r   r2   rB   r   )rB   r2   r   r   )rB   r   r   r2   )r2   rB   r   r   )r2   r   r   rB   )r   r2   rB   r   )r   r   r2   rB   )rB   r   r2   r   )rB   r   r2   r   )r2   r   rB   r   )r2   r   rB   r   )r   rB   r2   r   )r   r2   r   rB   )r   rB   r   r2   )rB   r2   r   r   )r   r   rB   r2   r"   r2   r  r  s         r   test_shape_4dzTestHistogramdd.test_shape_4d  sJ    H IINN2q!A"1a(HAuAGGqL! r   c                    t         j                  j                  dd      }t        |      \  }}t        |d      \  }}t        |t        j                  d            \  }}t        ||       t        |t        j                  d      dz  d      \  }}t        ||       t        |t        j                  dt              dz        \  }}t        |d|z         y )Nr   r0   Tr?   rb   r   )r#   r$   r%   r   rg   r   rh   )r   r)   r9   r:   n_histw_hists         r   r   zTestHistogramdd.test_weights  s    IINN3"!!ne#At4#Arwws|<64(#Arwws|a/?N66*#ArwwsC/@1/DE61t8,r   c                     t        j                  dt              }t        |d      \  }}t	        |d   t        j
                  g d             y )N)r"   r0   r0   r3   r   )r   rD   rE   )r#   r   rh   r   r   r8   )r   rp   r9   r:   s       r   test_identical_samplesz&TestHistogramdd.test_identical_samples  s9    HHWc"!!!,e58RXXo%>?r   c                     t        g g gddgddgf      \  }}t        |t        j                  dgg             t        j                   g g g gd      \  }}t        |t        j                  d             y )Nr   r/   r3   rD   r0   )r0   r0   r0   )r   r   r#   r8   r   r   s      r   r   zTestHistogramdd.test_empty  sg    B8Aq6Aq6*:;1Q2$ 01~~r2rl31Q 34r   c           
      t   t        j                  d      j                  dd      }t        t        t         j
                  |g d       t        t        t         j
                  |g d       t        t        t         j
                  |dddg dg       t        t        j
                  |dddg d	g             y )
NrY   r0   r2   )r[   r0   r2   r   r3   )r/   gGz?r/   r/   r/   )r/   r0   r1   r.   )r#   rI   reshaper   r7   r   r   )r   rp   s     r   test_bins_errorsz TestHistogramdd.test_bins_errors  s}     IIaL  A&j"..!-Hj"..!/JAq-0H	Jq1a'>?@r   c           
      |   t        j                  d      5  t        j                  d      j                  dd      }t        j                  ddgddgddgg      }t        j
                  |dt         j                   ddgg	      \  }}t        ||       t        j
                  |dt        j                  d
dt         j                  g      g	      \  }}t        ||       t        j
                  |dt         j                   dt         j                  gg	      \  }}t        ||       d d d        y # 1 sw Y   y xY w)Nignore)invalidrB   r1   r0   r/   r   r"   r3   r[   )r#   errstaterI   r  r8   r   rJ   r   )r   rp   expectedr;   r<   s        r   test_inf_edgeszTestHistogramdd.test_inf_edges  s    [[*		!$$Q*Axx!Q!Q!Q 89H>>!1w2.>*?@DAqAx(>>!1bhhArvv.G*HIDAqAx(>>!1w266.B*CDDAqAx( +**s   DD22D;c                    dg}g dg}t        ||      \  }}t        |d   dk(         t        |d   dk(         dg}g dg}t        ||      \  }}t        |d   dk(         t        |d   dk(         dg}g dg}t        ||      \  }}t        |d   dk(         t        |d   dk(         d	g}g dg}t        ||      \  }}t        |d   dk(         t        |d   dk(         y )
NgG?)rD   rE   r5   r3   r   rD   r/   r5   g8   ?gqh ?)r   r   )r   rp   r4   r9   _s        r   test_rightmost_binedgez&TestHistogramdd.test_rightmost_binedge  s    Nad+aQ3Q2Ead+aQ3Q2Nad+aQ3Q3Had+aQ3Q3r   c           	      &   t         j                  j                  d      }t        |ddgddgddgg       t        t        t        |ddgddgdt         j
                  gg       t        t        t        |ddgt         j                  dgddgg       y )N)r   r1   rD   r5   rG   r   rE   rQ   )r#   r$   r   r   r7   rJ   r   r   s     r   r   z!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                    t        j                  g d      }t        j                  g d      }t        j                  g d      }d}t        ||f||f      \  }}t        j                  dgdgg      }t        ||       y)z: Test that adjacent entries in an edge array can be equal )r   r/   r0   )r   r0   r0   r/   r3   r6   r5   Nr#   r8   r   r   )r   rp   rq   x_edgesy_edgesr9   r:   hist_expecteds           r   test_equal_edgesz TestHistogramdd.test_equal_edges  ss    HHYHHY((9%!1a&/ABeDD"
  	T=)r   c                 (   t        j                  g d      }|dz  }t        j                  g d      }|dz  }t        ||f||f      \  }}t        |d   j                  |j                         t        |d   j                  |j                         y)z< Test that if an edge array is input, its type is preserved )r   r"   r   r"   )r   r   rT   r   r3   r   r/   N)r#   r8   r   r   rd   )r   rp   rq   r  r  r9   r:   s          r   test_edge_dtypezTestHistogramdd.test_edge_dtype  su    HH[!F((>*B,!1a&/ABeU1X^^W]]3U1X^^W]]3r   c                     d}t        j                  dgt         j                        }t        j                  ddgt         j                        }||z   }||z   }t        ||f||f      \  }}t	        |d   d       y )Nl            r   r[   r/   r3   )r   r   )r#   r8   int64r   r   )r   bigrp   r  rq   r  r9   r:   s           r   test_large_integersz#TestHistogramdd.test_large_integers  sn    HHaS"((#((B8RXX.!G-!1a&/ABeT$Z#r   c                    t        j                  g d      }t        j                  g d      }t        j                  ddgddgg      }t        j                  dgdgdz  z   dgdz  z   dgdz  z         }t        j                  dgdgdz  z   dgdz  z   dgdz  z         }t        ||f||f      \  }}t        ||       t        ||f||fd	      \  }}t        |d
       y )N)r   r0   rY   )r   rB   rY   r1   rP   r/   r   r3   Trw  g      ?r  )r   r  r  relative_areasrp   rq   r9   r:   s           r   test_density_non_uniform_2dz+TestHistogramdd.test_density_non_uniform_2d  s     ((9%((9%FF# 
 HHaSA3q5[A3q5(A3q501HHaSA3q5[A3q5(A3q501 "1a&/ABeT>* "1a&/A4PeT9%r   c                     t        j                  d      }t        j                  g d      }t        ||d      \  }}t	        |f|fd      \  }}t        ||       t        ||d          y )Nr"   rA   Tr?   r   )r#   rI   r8   r   r   r   )r   r)   r4   r9   r:   hist_ddedges_dds          r   test_density_non_uniform_1dz+TestHistogramdd.test_density_non_uniform_1d&  s_    IIbMxx()46e'tgtDT7#UHQK(r   N)r  r  r  r,   r  r  r   r  r   r  r  r  r   r  r  r  r  r  r   r   r   ru  ru  ]  sQ    #!J""	-@
5A
) .G*	4
$&6)r   ru  )numpyr#   r   r   r   numpy.testingr   r   r   r	   r
   r   r   r   r   r   numpy.testing._private.utilsr   r  r   r  ru  r   r   r   <module>r     sK     = =  
 9 Q0 Q0hy8 y8xP) P)r   