
    Bwg                         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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_warningsc                      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!d  Z"e#jH                  jK                  d!"      d#        Z&d$ Z'y%)&TestHistogramc                      y N selfs    V/var/www/horilla/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.   r/   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.   r0      r!   皙?Fr-   r   r0   rA   )rB   rB   rB                 ?      ?      ?)r"   r#   r$   r   r%   diffr	   aranger   r   inf)	r   r'   r(   r)   r*   arear3   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!   rD   r   	   ranger.   TrQ   r?      decimalrQ   weightsr?      r3   rQ   rW   )r"   rH   r   r   r%   r	   rG   )r   r)   r:   r*   ws        r   test_outlierszTestHistogram.test_outliersI   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!   rD      zsame shape asr.   rO   TrV   )r"   rH   r   r6   r   )r   r)   r[   r:   r*   s        r   test_arr_weights_mismatchz'TestHistogram.test_arr_weights_mismatcha   sa    IIbMBIIbMB _= 	GQq!faFDAq	G 	G 	G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!   rD   Tr>   rW   )r"   rH   r   r   
issubdtypedtypeintegerfloatingonesintfloat)r   r)   r:   r*   s       r   	test_typezTestHistogram.test_typeh   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@rc   )g!@gS@g^z@r   r2         @)r"   r7   float32histogram2dr   r%   )r   xycounts_histxedgesyedgess         r   test_f32_roundingzTestHistogram.test_f32_roundingw   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   rk   zConverting input from .*)TTFr.   )
r"   r7   uint8r   r   recordRuntimeWarningr   lenr   )r   r)   int_hist	int_edgessuprecr8   r9   s           r   test_bool_conversionz"TestHistogram.test_bool_conversion~   s     HHYbhh/ ll1o)
   	1C**^-GHC,,':;KD%S1%tX.ui0	1 	1 	1s   
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>   ra   rW   r?   r   r!   r^   r3   rW   )r.   r/   r/   r1   r1   )r1   r0   r/   r.   )r1   r   r   r.   )r3   rW   r?   g      $@rl   rO   r@   )	r/   r.   r.   r.   r.   r.   r.   r.   r.   )皙?rB   rB   g333333?)r"   r#   r$   rf   r   r
   r&   concatenatezerosrH   r   r7   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.   rZ   r/   y              ?)r/   r.   r/   )r   r/   r0   r   r.   r/   r0   rY   r   )Decimalr   )r"   r7   r   r
   rU   r   )r   valuesrW   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   )rQ   r3   )r"   r7   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.   r2   r   r   r"   r7   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 )NrC   r4   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 )NrC   r4   r   r   rF         ?rP   )r"   r&   r   r   r6   nanrI   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)	NrC   r4   r   r   zmax must be larger thanrB   g{Gz?rP   )r"   r&   r   r6   r   r   s     r   test_invalid_rangez TestHistogram.test_invalid_range   sF    {{3- -FG 	2LLc4[1	2 	2 	2s   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   )r/   i  r3   rQ   r   rZ   r.   )r"   r7   r   zipr   )
r   arrr8   r9   mask
left_edgesright_edgesro   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	rC   rC   rC   r4   r5   rl   rl   g      @g      @         r   r   rZ   r.   )r"   r7   r   r   )r   r   r8   r9   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)
NrC   r4   r   r   r   rD   g333333?z
must be 1dr2   )r"   r&   r7   r   r6   r   )r   r   r3   s      r   test_bin_array_dimsz!TestHistogram.test_bin_array_dims   s\    {{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)Nr/   )r.   r0   r.   uint64rk   r2   )r"   r7   r   r6   r   )r   r   r3   r8   r9   s        r    test_unsigned_monotonicity_checkz.TestHistogram.test_unsigned_monotonicity_check   sT     hhsmxx	2:& 	7,,s6KD%	7 	7 	7s   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?rD   g     ?)r   r6   r   rQ   r"   r7   rI   )r   is     r   test_object_array_of_0dz%TestHistogram.test_object_array_of_0d  s    juRy9!9bffWIE	GjuRy9!9RVVHD	F 	U2Y7bhhsm7;K:LLM
U2Y7bhhsm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.   autor2   r   r.   r   r/   )r"   r7   r   r   filterrx   r   r6   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!$	% 	% 	%s   ;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.   r/   r0   r   r!      )r   r/      r   ztimedelta64[D]r2   )r"   
datetime64r7   rc   r   astyper   rg   )r   beginoffsetsr3   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 )NrX   r.   r/   r1   rk   r2   r   )r"   rc   itemsizer7   r   r   )r   rc   exponentr   r8   r;   s         r   do_signed_overflow_boundsz'TestHistogram.do_signed_overflow_boundsE  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_boundsL  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 )Nr4   r5   r   r.   r   r"   finfoepsr7   r   r   r   rc   r   float_smallfloat_larger   r   rQ   countx_locs           r   do_precision_lower_boundz&TestHistogram.do_precision_lower_boundS  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 )Nr4   rC   rZ   r.   r   r   r   r   s           r   do_precision_upper_boundz&TestHistogram.do_precision_upper_boundb  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_precisionr  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_precisionv  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.   r/   r   r   r   r   r   r   )r   r   r   r"   r7   )r   r8   r;   r9   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   c                     t        j                  ddgdz        }t        j                  t        d      5  t        |d       d d d        y # 1 sw Y   y xY w)Nr.   g     ?r!   zToo many bins for data range)matchr2   )r"   r7   pytestraisesr6   r   )r   r   s     r   test_small_value_rangez$TestHistogram.test_small_value_range  sG    hh9~*+]]:-KL 	$c#	$ 	$ 	$s   AA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 r0   i  i>  )sampler3   )r.   r/   )r"   r   rH   r   r   type)r   r   xbinsybinszbinsr8   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>f8rk   r/   )gx0gel	  r   r.   r   )r"   r   r7   r   )r   r8   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<   rM   r\   r_   ri   rt   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  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ej                  j                  dg d      d        Z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   stoner2   r   r.   r   )r   estimator_list	estimatorr)   r*   s        r   r   z$TestHistogramOptimBinNums.test_empty  sU    < ( 	4IRi0DAqq"((A3-0q"((Aq6"23	4r   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
        r1   rX   r   r/   r     r!         rO      #      G   r   2   i  i  r   rZ   r   r.   r0   *For the {0} estimator with datasize of {1}err_msgN)itemsr"   r&   r   r   r   ry   format)r   
basic_testtestlenexpectedResultsx1x2ro   r  numbinsr)   r*   s              r   r+   z%TestHistogramOptimBinNums.test_simple  s    $%A1&'AK#$B2&("b1N#%B2&("b2O	P
 )3(8(8(: 		P$G_ S"glQ&67BQGqL1$45BBx(A&5&;&;&= P"	7||Ay11SVW 744:F9g4NPP		Pr   c           
      p   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                  |      j                  t              }|j                         D ]E  \  }}t        j
                  ||      \  }}t        t        |      |dj                  ||             G  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  r/   r0   r.   r/   r0   r%  r&  N)	r(  r"   rH   r   rh   r   r   ry   r)  )	r   	small_datr+  r,  testdatr  expbinsr)   r*   s	            r   
test_smallz$TestHistogramOptimBinNums.test_small  s      !1aA"#Q< 1aA"#Q< 1aA"#Q<	=	 )2(9 	P$G_ii(//6G&5&;&;&= P"	7||GY71SVW 744:F9g4NPP	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IQRr1  N)r   r6   r   )r   
check_listr  s      r   test_incorrect_methodsz0TestHistogramOptimBinNums.test_incorrect_methods  s(     =
# 	GI*iIF	G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"   rf   r(  r   r   ry   r)  )r   novar_datasetnovar_resultdictr  r/  r)   r*   s          r   test_novariancez)TestHistogramOptimBinNums.test_novariance  s~    
 "#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.
          r   Nr0   r   r   r  r  r  )r"   rf   r   r   r&   r7   )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^   rA   )r  r  r  r  N)r"   r&   hstackr(  r   r   ry   )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   r/   )locscalesizer  r  )r"   r#   RandomStatenormalry   r   )seedrU  rngro   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   r1   )startstopr   r   r   rD   )g333333?g
ףp=
?g{Gz?gQ?r/   rT   N)	rQ   r"   	geomspaceroundr   rg   absmeanr	   )r   rZ  rX  rU  llavgs         r   test_scott_vs_stonez-TestHistogramOptimBinNums.test_scott_vs_stone  s    	  )% 46<<bsXY3Z3`3`3b3i3ijm3no4{4&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.
        rX   rS   r!  )r  r  r  r  r   r  r      r   P   !   E      r#  r   rZ   r   r/   r.   r!   r0   rJ  i)ir   rP   zFor the {0} estimatorz with datasize of {0}r&  N)r(  r"   r&   rL  r   r)  r   ry   )r   r*  r+  r,  r-  r.  x3ro   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   r3   )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      rk   r2   )r"   r7   int8r   r   int32r   )r   r3   r)   r8   r9   hist32edges32s          r   test_signed_integer_dataz2TestHistogramOptimBinNums.test_signed_integer_dataM  sa     HH\1ll140e,,qxx'9E4(5'*r   c           
      *   t               5 }|dk(  r|j                  t               t        t	        j
                  t	        j                  t	        j                  d      d      |      t	        j                  d             ddd       y# 1 sw Y   yxY w)zE
        Test that bin width for integer data is at least 1.
        r  rO   rB  N)r   r   rx   r   r"   r   tilerH   )r   r3   r|   s      r   test_integerz&TestHistogramOptimBinNums.test_integerW  sj       	Cw

>*&&rwwryy|T'BDI		!	 	 	s   A5B		Bc           	      T   t        t        j                  t        j                  t        j                  d      d      d      t        j                  d      dz         t        t        j                  t        j                  t        j                  d      d      ddg      ddg       y)	zX
        Test that the bin-width>=1 requirement *only* applies to auto binning.
        rO   rB  r  r  r/   rB   r   N)r   r"   r   rv  rH   r   s    r   test_integer_non_autoz/TestHistogramOptimBinNums.test_integer_non_autod  sw     	""277299Q<#>CIIbMA	 	""277299Q<#>RIH	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   r1  ra   N)r   r   r   )r   r  r  s      r   test_simple_weightedz.TestHistogramOptimBinNums.test_simple_weightedo  s,     D' 	8I)Y	#Y8	8r   N)r	  r
  r  __doc__r   r+   r5  r<  r@  rH  rP  rc  rl  r   r  parametrizert  rw  ry  r{  r   r   r   r  r    s    
4P4P(G?=$*(F ;> [[V &B C+C+ [[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   rD   rE   )r   rE   r   )r   r   rD   )rD   rD   rE   )rD   rE   r   )rD   r   r   )r/   r0   r0   rZ   r.   r   r0   rP   )r   r.   r   )r   r   r.   )r.   r   r   )rn  r   r/   )r   r.   r/   r0   Tr3   r?   g      (@)r/   r0   r1   r1   rR   )r   r.   r   r   )r   r   r.   r   )r.   r   r   r   g      @r   )r1   r0   r/   rn  r/   r   )r   r   r   r4   r   )r"   r7   r   r   r   allr
   splitsqueezer   listrQ   rH   )	r   ro   Hr9   answeredrp   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   r1   rA   )rA   r1   r   )r   rA   r1   )r1   rA   r   )rA   r   r1   )r1   r   rA   r!   r0   r"   r#   r$   r   r   shaper   r3   rr*   r  r9   s         r   test_shape_3dzTestHistogramdd.test_shape_3d  sL    IINN2q! 	"A"1a(HAuAGGqL!	"r   c                     d}t         j                  j                  dd      }|D ])  }t        ||      \  }}t	        |j
                  |k(         + y )N))r   r1   r   rA   )r1   r   r   rA   )r   rA   r1   r   )r   rA   r   r1   )r   r   rA   r1   )r1   rA   r   r   )rA   r   r   r1   )r   r   r1   rA   )r   r1   rA   r   )rA   r1   r   r   )rA   r   r   r1   )r1   rA   r   r   )r1   r   r   rA   )r   r1   rA   r   )r   r   r1   rA   )rA   r   r1   r   )rA   r   r1   r   )r1   r   rA   r   )r1   r   rA   r   )r   rA   r1   r   )r   r1   r   rA   )r   rA   r   r1   )rA   r1   r   r   )r   r   rA   r1   r!   r1   r  r  s         r   test_shape_4dzTestHistogramdd.test_shape_4d  sO    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   r/   Tr>   ra   r   )r"   r#   r$   r   rf   r   rg   )r   r(   r8   r9   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!   r/   r/   r2   r   )r   rC   rD   )r"   r   rg   r   r   r7   )r   ro   r8   r9   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.   r2   rC   r/   )r/   r/   r/   )r   r   r"   r7   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 )
NrX   r/   r1   )rZ   r/   r1   r   r2   )r.   gGz?r.   r.   r.   )r.   r/   r0   r-   )r"   rH   reshaper   r6   r   r   )r   ro   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)invalidrA   r0   r/   r.   r   r!   r2   rZ   )r"   errstaterH   r  r7   r   rI   r   )r   ro   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?)rC   rD   r4   r2   r   rC   r.   r4   g8   ?gqh ?)r   r   )r   ro   r3   r8   _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   r0   rC   r4   rF   r   rD   rP   )r"   r#   r   r   r6   rI   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.   r/   )r   r/   r/   r.   r2   r5   r4   Nr"   r7   r   r   )r   ro   rp   x_edgesy_edgesr8   r9   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   rS   r   r2   r   r.   N)r"   r7   r   r   rc   )r   ro   rp   r  r  r8   r9   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   rZ   r.   r2   )r   r   )r"   r7   int64r   r   )r   bigro   r  rp   r  r8   r9   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   r/   rX   )r   rA   rX   r0   rO   r.   r   r2   Tr  g      ?r  )r   r  r  relative_areasro   rp   r8   r9   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!   r@   Tr>   r   )r"   rH   r7   r   r   r   )r   r(   r3   r8   r9   hist_ddedges_dds          r   test_density_non_uniform_1dz+TestHistogramdd.test_density_non_uniform_1dB  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   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   r  r  r   r   r   <module>r     sH     = =  
 V0 V0rQ8 Q8hP) P)r   