
    ,ii                         d dl Z d dlZ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  G d d          Z G d d          Z G d d	          ZdS )
    N)	histogramhistogram_bin_edgeshistogramdd)	assert_assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalassert_array_max_ulpassert_equalassert_raisesassert_raises_regexc                   "   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#j$        %                    d!"          d#             Z&d$ Z'd% Z(d&S )'TestHistogramc                     d S N selfs    e/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/numpy/lib/tests/test_histograms.pysetup_methodzTestHistogram.setup_method           c                     d S r   r   r   s    r   teardown_methodzTestHistogram.teardown_method   r   r   c                     d}t           j                            |          }t          |          \  }}t	          t          j        |d          |           t          t          j        ddd                    \  }}t          |d           d S )Nd   r   axis
   )nprandomrandr   r   sumlinspacer
   )r   nvabs        r   test_simplezTestHistogram.test_simple   s    INN11ARVAA&&&*** 2;q"c2233A1b!!!!!r   c                 r   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                     d S )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5e4!'''51a&)))j)aV!<<<<!Qa(((1Q!&&&28RH--.....r   c                 &   d}t           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           d S )Nr   Tdensityr-   r    r   r-   r/      r    皙?Fr,   r   r/   r@   )rA   rA   rA                 ?      ?      ?)r!   r"   r#   r   r$   diffr   aranger
   r   inf)	r   r&   r'   r(   r)   arear2   countsdmys	            r   test_densityzTestHistogram.test_density1   s   INN1D)))1va"'!**n%%D!$$$ IbMMD$///11b!!!RVA

N++Q/// D%00011lll+++ IbMM1aBF#D$///11.../// lLL3RV,d< < <Vc1X&&&&&r   c                    t          j        d          dz   }t          |ddg          \  }}t          |                                d           t          |ddg          \  }}t          |                                d           t          |ddgd          \  }}t          |t          j        |          z                                  dd	
           t          j        d          dz   }t          |ddg|d          \  }}t          |t          j        |          z                                  d           t          |dddg|          \  }}t          ||dd                    d S )Nr    rC   r   	   ranger-   TrP   r>      decimalrP   weightsr>      r2   rP   rV   )r!   rG   r   r   r$   r   rF   )r   r(   r9   r)   ws        r   test_outlierszTestHistogram.test_outliersQ   s]   IbMMB 1a&)))1QUUWWa    1b'***1QUUWWa    1a&$7771Q^0022ArBBBB IbMMB1a&!TBB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            d S # 1 swxY w Y   d S )	Nr    rC      zsame shape asr-   rN   TrU   )r!   rG   r   r5   r   )r   r(   rZ   r9   r)   s        r   test_arr_weights_mismatchz'TestHistogram.test_arr_weights_mismatchi   s    IbMMBIbMMB _== 	G 	GQq!faFFFDAq	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   A**A.1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                             d S )Nr    rC   Tr=   rV   )r!   rG   r   r   
issubdtypedtypeintegerfloatingonesintfloat)r   r(   r9   r)   s       r   	test_typezTestHistogram.test_typeo   s    IbMMB||1agrz22333D)))1agr{33444BGB$4$45551agrz22333BGB$6$67771agr{3344444r   c                    t          j        g dt           j                  }t          j        g dt           j                  }t          j        ||d          \  }}}t	          |                                d           d S )N)g2VEq@gx>fQg-VT5@rb   )g!@gS@g^z@r   r1         @)r!   r6   float32histogram2dr   r$   )r   xycounts_histxedgesyedgess         r   test_f32_roundingzTestHistogram.test_f32_rounding~   sy    H888
KKKH<<<BJOOO&(nQ&D&D&D#VV[__&&+++++r   c                 R   t          j        g dt           j                  }t          j        |          \  }}t	          j        t          d          5  t          j        g d          \  }}t          ||           t          ||           d d d            d S # 1 swxY w Y   d S )N)r-   r-   r   rj   zConverting input from .*match)TTF)r!   r6   uint8r   pytestwarnsRuntimeWarningr
   )r   r(   int_hist	int_edgesr7   r8   s         r   test_bool_conversionz"TestHistogram.test_bool_conversion   s     HYYYbh/// l1oo)
 \.0JKKK 	1 	1,':':':;;KD%tX...ui000		1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   :BB #B c                    t           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           d S )Nr      Tr=   r`   rV   r>   r   r    r]   r2   rV   )r-   r.   r.   r0   r0   )r0   r/   r.   r-   )r0   r   r   r-   )r2   rV   r>   g      $@rk   rN   r?   )	r.   r-   r-   r-   r-   r-   r-   r-   r-   )皙?rA   rA   g333333?)r!   r"   r#   re   r   r	   r%   concatenatezerosrG   r
   r6   r   )r   r'   rZ   r(   r)   nanbwawbnwanwbs              r   test_weightszTestHistogram.test_weights   s   INN3GCLL1||11d+++B1a(((BQ4888S!!a%,,,!"c*** K2r""NBHQKK455129R==!<<<B!"a((( <<<aFFFB2|||,,,LLq,,,F F FB!"bh|||&<&<s&BR&G!&KLLL IaLL***///? ? ?1 	A11122222r   c           	      r   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           d S )Ng?      @gffffff@)r-   rY   r.   y              ?)r.   r-   r.   )r   r.   r/   r   r-   r.   r/   rX   r   )Decimalr   )r!   r6   r   r	   rT   r   )r   valuesrV   r   r   r   s         r   test_exotic_weightsz!TestHistogram.test_exotic_weights   s    ///**(:::&&bhyyy.A.A)AA 6			7CCCB!"bh1v&6&6bh1v>N>N9N&NOOO 6!QIIIB!"bh1v&6&6bh1v>N>N9N&NOOO 	$#####///**(GGAJJ

GGAJJ?@@ 6			7CCCB!"wwqzz771::&>??? 6!QIIIB!"wwqzz771::&>?????r   c                     t          j        g d          }t          j        |ddgd           t          |g d           d S )Nr   r    r   )rP   r2   )r!   r6   r   r	   )r   r   s     r   test_no_side_effectsz"TestHistogram.test_no_side_effects   sL     ///**
VC937777!&///:::::r   c                     t          g ddg          \  }}t          |t          j        dg                     t          |t          j        ddg                     d S )Nr   r-   r1   r   r
   r!   r6   r   r(   r)   s      r   
test_emptyzTestHistogram.test_empty   sZ    Aq6+++11bhsmm,,,1bh1v../////r   c                     t          j        ddd          }t          |d           t          t          t          |d           d S )NrB   r3   r   numr   g333333@)r!   r%   r   r   	TypeErrorr   valss     r   test_error_binnum_typez$TestHistogram.test_error_binnum_type   sB    {3---$iD#6666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           d S )NrB   r3   r   r   rE         ?rO   )r!   r%   r   r   r5   nanrH   r   s     r   test_finite_rangezTestHistogram.test_finite_range   so    {3---$tTl++++j)T"&$HHHHj)T$HHHHHHr   c                     t          j        ddd          }t          t          d          5  t          j        |ddg           d d d            d S # 1 swxY w Y   d S )	NrB   r3   r   r   zmax must be larger thanrA   g{Gz?rO   )r!   r%   r   r5   r   r   s     r   test_invalid_rangez TestHistogram.test_invalid_range   s    {3--- -FGG 	2 	2Lc4[1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   AAAc                 .   t          j        g d          }t          j        |dd          \  }}|dk    }|d d         |         }|dd          |         }t          |||          D ],\  }}}	t	          ||k               t	          ||	k                -d S )N)iQ  i  i  i&  i  i  i  ih   )r.   i  r2   rP   r   rY   r-   )r!   r6   r   zipr   )
r   arrr7   r8   mask
left_edgesright_edgesrn   leftrights
             r   test_bin_edge_casesz!TestHistogram.test_bin_edge_cases   s    h===>>l3TCCCeax3B3Z%
ABBio!#z;?? 	 	NAtUAIAI	 	r   c                     t          j        g d          }t          j        |dd          \  }}t          |d         d           d S )N	rB   rB   rB   r3   r4   rk   rk   g      @g      @         r   r   rY   r-   )r!   r6   r   r   )r   r   r7   r8   s       r   test_last_bin_inclusive_rangez+TestHistogram.test_last_bin_inclusive_range   sL    hCCCDDl3RyAA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            d S # 1 swxY w Y   d S )
NrB   r3   r   r   r   rC   g333333?z
must be 1dr1   )r!   r%   r6   r   r5   r   )r   r   r2   s      r   test_bin_array_dimsz!TestHistogram.test_bin_array_dims   s    {3---x!SC:.// \:: 	* 	*LD))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   A++A/2A/c                     t          j        dg          }t          j        g dd          }t          t                    5  t          j        ||          \  }}d d d            d S # 1 swxY w Y   d S )Nr.   )r-   r/   r-   uint64rj   r1   )r!   r6   r   r5   r   )r   r   r2   r7   r8   s        r    test_unsigned_monotonicity_checkz.TestHistogram.test_unsigned_monotonicity_check  s     hsmmx			222:&& 	7 	7,s666KD%	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   A))A-0A-c                    t          t          t          d t          d          D             t          j         gz              t          t          t          d t          d          D             t          j        gz              t	          j        d t          d          D             dgz              t	          j        d t          d          D             dgz              d S )Nc                 6    g | ]}t          j        d           S g?r!   r6   .0is     r   
<listcomp>z9TestHistogram.test_object_array_of_0d.<locals>.<listcomp>       999!999r   r    c                 6    g | ]}t          j        d           S r   r   r   s     r   r   z9TestHistogram.test_object_array_of_0d.<locals>.<listcomp>  r   r   c                 6    g | ]}t          j        d           S rC   r   r   s     r   r   z9TestHistogram.test_object_array_of_0d.<locals>.<listcomp>       777bhsmm777r   g     ?c                 6    g | ]}t          j        d           S r   r   r   s     r   r   z9TestHistogram.test_object_array_of_0d.<locals>.<listcomp>  r   r   rC   )r   r5   r   rP   r!   rH   r   s    r   test_object_array_of_0dz%TestHistogram.test_object_array_of_0d  s    j99uRyy999bfWIE	G 	G 	Gj99uRyy999RVHD	F 	F 	F 	77U2YY777;K:LLMMM
77U2YY7772$>?????r   c                 X   t          j        ddt           j        g          }t          j        t           j        t           j        g          }t          j                    5  t          j        dt                     t          t          t          |d           t          t          t          |d           t          |dd          \  }}t          |                                d           t          |dd          \  }}t          |                                d           t          |ddg          \  }}t          |                                d           t          |ddg          \  }}t          |                                d           d d d            d S # 1 swxY w Y   d S )	Nr   r-   ignoreautor1   r   r-   r   r.   )r!   r6   r   warningscatch_warningssimplefilterrz   r   r5   r   r   r$   )r   one_nanall_nanr9   r)   s        r   test_some_nan_valuesz"TestHistogram.test_some_nan_values  s   (Aq"&>**(BFBF+,, $&& 	% 	%!(N;;;*ivFFFF*ivFFFF W6@@@DAq!$$$W6@@@DAq!$$$ WAq6222DAq!$$$WAq6222DAq!$$$!	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   D3FF#&F#c                    t          j        dd          }t          j        g d          }t          j        g d          }||z   }||z   }t          j        d          }t	          ||          \  }}t	          |                    |          |                    |                    \  }	}
t	          ||          \  }}t          ||           t          |	|           t          ||z
                      t                    |           t          |
                    t                    |           t          |j        |j                   t          |
j        |           d S )Nz
2000-01-01D)	r   r   r-   r-   r.   r/   r   r       )r   r.      r   ztimedelta64[D]r1   )r!   
datetime64r6   rb   r   astyper   rf   )r   beginoffsetsr2   dates	date_binstdd_countd_edget_countt_edgei_counti_edges                r   test_datetimezTestHistogram.test_datetime0  sB   lC00(88899x&&DL	X&''
 $E	:::#GNN2$6$6T[[__MMM#G$777Wg&&&Wg&&&fun,,S116:::V]]3''00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           d S )NrW   r-   r.   r0   rj   r1   r   )r!   rb   itemsizer6   r   r   )r   rb   exponentr   r7   r:   s         r   do_signed_overflow_boundsz'TestHistogram.do_signed_overflow_boundsI  s    rx//!3hHq(!X+/:%HHHCa(((aQ!X+)1akAo>???TAq6"""""r   c                 <   |                      t          j                   |                      t          j                   |                      t          j                   |                      t          j                   |                      t          j                   d S r   )r   r!   byteshortintcint_longlongr   s    r   test_signed_overflow_boundsz)TestHistogram.test_signed_overflow_boundsP  sv    &&rw///&&rx000&&rw///&&rw///&&r{33333r   c                 Z   t          j        |          j        }t          j        dg|          }t          j        d|z   dg|          }|                    |          d         dk    rd S t          j        |d|          \  }}t          |dg           t          |j        |           d S )Nr3   r4   r   r-   r   r!   finfoepsr6   r   r   r   rb   r   float_smallfloat_larger   r   rP   countx_locs           r   do_precision_lower_boundz&TestHistogram.do_precision_lower_boundW  s    h{##'huk**#)S);77 <<$$Q'1,,F |Cau===uUQC   U[+.....r   c                 Z   t          j        |          j        }t          j        dg|          }t          j        dd|z
  g|          }|                    |          d         dk    rd S t          j        |d|          \  }}t          |dg           t          |j        |           d S )Nr3   rB   rY   r-   r   r   r   r   s           r   do_precision_upper_boundz&TestHistogram.do_precision_upper_boundf  s    h{##'huk**#sSy);77 <<$$R(A--F |Cau===uUQC   U[+.....r   c                 ^    |                      ||           |                     ||           d S r   )r   r   )r   r   r   s      r   do_precisionzTestHistogram.do_precisionv  s4    %%k;???%%k;?????r   c                    |                      t          j        t          j                   |                      t          j        t          j                   |                      t          j        t          j                   |                      t          j        t          j                   |                      t          j        t          j                   |                      t          j        t          j                   d S r   )r   r!   halfsingledouble
longdoubler   s    r   test_precisionzTestHistogram.test_precisionz  s    "'29---"'29---"'2=111")RY///")R]333")R]3333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          ||           d S )
Nr,   r-   r.   r   r   r   r   r   r   )r   r   r
   r!   r6   )r   r7   r:   r8   r   s        r   test_histogram_bin_edgesz&TestHistogram.test_histogram_bin_edges  s    LLL1a&11a#LLL1a&995!$$$hCCCDDCb	:::a#Cb	BBB5!$$$CfF;;;a#CfFCCC5!$$$$$r   c                     t          j        ddgdz            }t          j        t          d          5  t          |d           d d d            d S # 1 swxY w Y   d S )Nr-   g     ?r    zToo many bins for data rangeru   r1   )r!   r6   rx   raisesr5   r   )r   r   s     r   test_small_value_rangez$TestHistogram.test_small_value_range  s    h9~*++]:-KLLL 	$ 	$c####	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   A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                     d S )Ni r/   i  i>  )sampler2   )r-   r.   )r!   r   rG   r   r   type)r   r  xbinsybinszbinsr7   s         r   test_big_arrayszTestHistogram.test_big_arrays  sk    9a.))	%  ~V5%2GHHHT$ZZf.....r   c                     t          j        t          j        dgd          dd          \  }}t          j        ddg          }t          ||           d S )	Ng$xz>f8rj   r.   )gx0gel	  r   r-   r   )r!   r   r6   r
   )r   r7   r:   expected_hists       r   test_gh_23110zTestHistogram.test_gh_23110  s`    ,rx5AAA$%%79 9 9a !Q((4/////r   c                     d}dddddd||||||dg}t          j        |d          \  }}t          |          dk     sJ |d         |d         k    sJ |d         |d         k    sJ d S )	Ng    ?r   r-   r.   r   r1   r    rY   )r!   r   len)r   r:   ZrJ   r8   s        r   test_gh_28400zTestHistogram.test_gh_28400  s    1aAq!Q1a3QV4446{{RQx1Q4RyAbE!!!!!!r   N))__name__
__module____qualname__r   r   r*   r;   rL   r[   r^   rh   rs   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  rx   markskipr  r  r  r   r   r   r   r      sS           	" 	" 	"/ / /' ' '@! ! !0G G G5 5 5, , ,1 1 13 3 3:@ @ @<; ; ;0 0 0
7 7 7I I I2 2 2	 	 	" " "
* * *7 7 7	@ 	@ 	@% % %0' ' '2# # #4 4 4/ / // / / @ @ @4 4 4% % %$ $ $ [KLL/ / ML/0 0 0" " " " "r   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                            dg d          d             Zej                            dg d          d             Zd Zd ZdS )TestHistogramOptimBinNumsz]
    Provide test coverage when using provided estimators for optimal number of
    bins
    c                     g d}|D ]]}t          g |          \  }}t          |t          j        dg                     t          |t          j        ddg                     ^d S )Nfdscottricesturgesdoanesqrtr   stoner1   r   r-   r   )r   estimator_list	estimatorr(   r)   s        r   r   z$TestHistogramOptimBinNums.test_empty  s    < < < ( 	4 	4IRi000DAqq"(A3--000q"(Aq6"2"23333	4 	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}|                                 D ]\  }}t          j        dd|dz  dz            }t          j        dd|dz  dz            }t          j        ||f          }|                                 D ]B\  }}t          j        ||          \  }	}
t          t          |	          |d| d|            CdS )z
        Straightforward testing with a mixture of linspace data (for
        consistency). All test values have been precomputed and the values
        shouldn't change
        r0   rW   r   r.   r!     r          rN      #      G   r   2   i  i  r   rY   r   r-   r/   For the  estimator with datasize of err_msgN)itemsr!   r%   r   r   r   r  )r   
basic_testtestlenexpectedResultsx1x2rn   r*  numbinsr(   r)   s              r   r*   z%TestHistogramOptimBinNums.test_simple  sc    $%A1&'AK K#$B2&("b1N N#%B2&("b2O O	P P
 )3(8(8(:(: 		< 		<$G_ S"glQ&677BQGqL1$455BBx((A&5&;&;&=&= < <"	7|Ay111SVVW 7; 7; 7;187; 7; < < < < <<		< 		<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 ]\  }}t          j        |                              t                    }|                                 D ]B\  }}t          j        ||          \  }}t          t          |          |d| d|            Cd	S )
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.   r/   r-   r.   r/   r5  r6  r7  N)r9  r!   rG   r   rg   r   r   r  )	r   	small_datr;  r<  testdatr*  expbinsr(   r)   s	            r   
test_smallz$TestHistogramOptimBinNums.test_small  s#     !1aA"#Q< < 1aA"#Q< < 1aA"#Q< <	= =	 )2(9(9 	< 	<$G_i((//66G&5&;&;&=&= < <"	7|GY771SVVW 7; 7; 7;187; 7; < < < < <<	< 	<r   c                 T    g d}|D ] }t          t          t          g d|           !dS )zS
        Check a Value Error is thrown when an unknown string is passed in
        )madfreeman
histogramsIQRrA  N)r   r5   r   )r   
check_listr*  s      r   test_incorrect_methodsz0TestHistogramOptimBinNums.test_incorrect_methods  sG     =<<
# 	G 	GI*iIFFFF	G 	Gr   c           	          t          j        d          }ddddddddd}|                                D ]?\  }}t          j        ||          \  }}t	          t          |          || d           @dS )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 estimator, No Variance testr7  N)r!   re   r9  r   r   r  )r   novar_datasetnovar_resultdictr*  r?  r(   r)   s          r   test_novariancez)TestHistogramOptimBinNums.test_novariance  s    
 "#aq%&1qJ J #3"8"8":": 	M 	MIw<y99DAqQ$-!K!K!KM M M M M	M 	Mr   c                    t          j        d          }d|dd<   d|dd<   t          |d          }t          |d         d           t          |d         d	           t	          |          dk     sJ t          |d
          }t          |t          j        ddg                     t          |d          }t          |t          j        ddd                     dS )zY
        Check when IQR is 0, but variance exists, we return a reasonable value.
          r   Nr/   r   r   rY   g      Y@r"  r%  r-  )r!   re   r   r   r  r6   r%   )r   lim_var_data
edges_autoedges_fdedges_sturgess        r   test_limited_variancez/TestHistogramOptimBinNums.test_limited_variance  s     wt}}RaRRSS(v>>
Z]A&&&Z^T***:$$$$&|T::XrxC11222+L)DD]BK3$;$;<<<<<r   c                 2   t          j        ddd          }t          j        t          j        ddd          |f          }dddd	d
}|                                D ]:\  }}t          j        ||          \  }}t          t          |          |           ;dS )a  
        Check the FD, Scott and Doane with outliers.

        The FD estimates a smaller binwidth since it's less affected by
        outliers. Since the range is so (artificially) large, this means more
        bins, most of which will be empty, but the data of interest usually is
        unaffected. The Scott estimator is more affected and returns fewer bins,
        despite most of the variance being in one area of the data. The Doane
        estimator lies somewhere between the other two.
        r   r    r4  ir      r]   r@   )r"  r#  r&  r(  N)r!   r%   hstackr9  r   r   r  )r   xcenteroutlier_datasetoutlier_resultdictr*  r?  r(   r)   s           r   test_outlierz&TestHistogramOptimBinNums.test_outlier  s     +c2r**)R[tQ%?%?$IJJ$&R!LL"4":":"<"< 	* 	*Iw<;;DAqQ))))	* 	*r   c                 >   d t          j        ddd                                                              t                    fdt          d          D             }t          t          j        |d          d	z
            }t          |g d
d           d S )Nc                     t           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normalr  r   )seedre  rngrn   r(   r)   s         r   nbins_ratiozBTestHistogramOptimBinNums.test_scott_vs_stone.<locals>.nbins_ratio.  sx    )''--C

q
55Ar|Aw//233Sa9Q9QRS9T5U5UqAA;r   r    r   r0   )startstopr   c                 0    g | ]fd D             S )c                 (    g | ]} |          S r   r   )r   re  rj  rh  s     r   r   zLTestHistogramOptimBinNums.test_scott_vs_stone.<locals>.<listcomp>.<listcomp>5  s%    >>>4{{4&&>>>r   r   )r   rh  
geom_spacerj  s    @r   r   zATestHistogramOptimBinNums.test_scott_vs_stone.<locals>.<listcomp>5  s2    UUU4>>>>>:>>>UUUr   r   r   rC   )g333333?g
ףp=
?g{Gz?gQ?r.   rS   )	r!   	geomspaceroundr   rf   rP   absmeanr   )r   llavgro  rj  s      @@r   test_scott_vs_stonez-TestHistogramOptimBinNums.test_scott_vs_stone*  s    	 	 	 \!<<<BBDDKKCPP
UUUUU5QS99UUU "'"1%%%+,,C!9!9!91EEEEEEr   c           	         ddddddddddddddd	d	d
dd	ddd}|                                 D ]\  }}t          j        dd|dz  dz            }t          j        dd|dz  dz            }t          j        dd|          }t          j        |||f          }|                                 D ]L\  }}	t          j        ||d          \  }
}d| d}|d| z  }t          t          |
          |	|           MdS )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.
        rW   rR   r1  )r"  r#  r$  r%  r   r(  r,      r   P   !   E      r3  r   rY   r   r.   r-   r    r/   rZ  i)ir   rO   r5  z
 estimatorz with datasize of r7  N)r9  r!   r%   r\  r   r   r  )r   r:  r;  r<  r=  r>  x3rn   r*  r?  r(   r)   msgs                r   test_simple_rangez+TestHistogramOptimBinNums.test_simple_range<  sl    $%B(*BD D#%B(*BE E#%B(*BE E 
 )3(8(8(:(: 	; 	;$G_ S"glQ&677BQGqL1$455BT300B	2r2,''A&5&;&;&=&= ; ;"	7|Ay	BBB166665G555SVVWc:::::	;	; 	;r   r2   )r   r"  r&  r#  r(  r$  r%  c                 (   t          j        g dt           j                  }t          j        ||          \  }}t          j        |                    t           j                  |          \  }}t          ||           t          ||           d S )N)r      rj   r1   )r!   r6   int8r   r   int32r
   )r   r2   r(   r7   r8   hist32edges32s          r   test_signed_integer_dataz2TestHistogramOptimBinNums.test_signed_integer_data[  s     H\\\111l14000e,qxx'9'9EEE4(((5'*****r   c           
      R   t          j                    5  |dk    rt          j        dt                     t	          t          j        t          j        t          j        d          d          |          t          j        d                     ddd           dS # 1 swxY w Y   dS )zE
        Test that bin width for integer data is at least 1.
        r(  r   rN   rR  N)	r   r   r   rz   r   r!   r   tilerG   )r   r2   s     r   test_integerz&TestHistogramOptimBinNums.test_integere  s     $&& 	 	w%h???&rwry||T'B'BDII	!  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A;BB #B c           	      X   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           dS )	zX
        Test that the bin-width>=1 requirement *only* applies to auto binning.
        rN   rR  r,  r/  r.   rA   r   N)r   r!   r   r  rG   r   s    r   test_integer_non_autoz/TestHistogramOptimBinNums.test_integer_non_autor  s     	"2729Q<<#>#>CCIbMMA	 	 	 	"2729Q<<#>#>RIIH	 	 	 	 	r   c           	      \    g d}|D ]$}t          t          t          g d|g d           %dS )z=
        Check that weighted data raises a TypeError
        )r"  r#  r$  r%  r   rA  r`   N)r   r   r   )r   r)  r*  s      r   test_simple_weightedz.TestHistogramOptimBinNums.test_simple_weighted}  sX     DCC' 	8 	8I)Y			#YYY8 8 8 8 8	8 	8r   N)r  r  r  __doc__r   r*   rE  rL  rP  rX  r`  rv  r  rx   r  parametrizer  r  r  r  r   r   r   r  r    s\        
4 4 4< < <4< < <(G G GM M M= = =&* * *(F F F$; ; ;> [V &B &B &B C C+ +C C+ [V &B &B &B C C	 	C C		 	 	8 8 8 8 8r   r  c                   h    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S )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           d t          j        |dd	          D             }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          ||           d S )%N)r   rC   rD   )r   rD   r   )r   r   rC   )rC   rC   rD   )rC   rD   r   )rC   r   r   )r.   r/   r/   rY   r-   r   r/   rO   )r   r-   r   )r   r   r-   )r-   r   r   )r  r   r.   )r   r-   r.   r/   Tr2   r>   g      (@)r.   r/   r0   r0   rQ   )r   r-   r   r   )r   r   r-   r   )r-   r   r   r   g      @c                 6    g | ]}t          j        |          S r   )r!   squeeze)r   ro   s     r   r   z/TestHistogramdd.test_simple.<locals>.<listcomp>  s     ;;;qRZ]];;;r   r   )r0   r/   r.   r  r.   r   )r   r   r   r3   r   )r!   r6   r   r
   r   allr	   splitr   listrP   rG   )r   rn   Hr8   answeredzr  s           r   r*   zTestHistogramdd.test_simple  s   Hnnnooo~~~$nnoooH I Iq)')1g1v1v%>@ @ @5IIIyyy)))<%IIyyy)))<> ? ?1f%%% jj,,,5qr48885qFSL())*** q)')1g1v1v%>'+- - -5 LLL,,,E(LL,,,EG H H!!Vb[!444 <;BHQ$:$:$:;;;Ir1g1v1v%>@ @ @5QFQFQF3FQFQF3FQFQF3FQFQF35 6 6 	1f%%%HY<>$uQxx..$uQxx..$uQxx..
89	!billBIaLLI1MM51a     r   c                     d}t           j                            dd          }|D ]-}t          ||          \  }}t	          |j        |k               .d S )N))r   r0   r@   )r@   r0   r   )r   r@   r0   )r0   r@   r   )r@   r   r0   )r0   r   r@   r    r/   r!   r"   r#   r   r   shaper   r2   rr)   r  r8   s         r   test_shape_3dzTestHistogramdd.test_shape_3d  sa    INN2q!! 	" 	"A"1a((HAuAGqL!!!!	" 	"r   c                     d}t           j                            dd          }|D ]-}t          ||          \  }}t	          |j        |k               .d S )N))r   r0   r   r@   )r0   r   r   r@   )r   r@   r0   r   )r   r@   r   r0   )r   r   r@   r0   )r0   r@   r   r   )r@   r   r   r0   )r   r   r0   r@   )r   r0   r@   r   )r@   r0   r   r   )r@   r   r   r0   )r0   r@   r   r   )r0   r   r   r@   )r   r0   r@   r   )r   r   r0   r@   )r@   r   r0   r   )r@   r   r0   r   )r0   r   r@   r   )r0   r   r@   r   )r   r@   r0   r   )r   r0   r   r@   )r   r@   r   r0   )r@   r0   r   r   )r   r   r@   r0   r    r0   r  r  s         r   test_shape_4dzTestHistogramdd.test_shape_4d  sd    H INN2q!! 	" 	"A"1a((HAuAGqL!!!!	" 	"r   c                    t           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             d S )Nr   r.   Tr=   r`   r   )r!   r"   r#   r   re   r
   rf   )r   r'   r7   r8   n_histw_hists         r   r   zTestHistogramdd.test_weights  s    INN3""!!nne#At444#Arws||<<<64(((#Arws||a/?NNN66***#ArwsC/@/@1/DEEE61t8,,,,,r   c                     t          j        dt                    }t          |d          \  }}t	          |d         t          j        g d                     d S )N)r    r.   r.   r1   r   )r   rB   rC   )r!   r   rf   r   r
   r6   )r   rn   r7   r8   s       r   test_identical_samplesz&TestHistogramdd.test_identical_samples  sQ    HWc""!!!,,,e58RXooo%>%>?????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                     d S )Nr   r-   r1   rB   r.   )r.   r.   r.   )r   r   r!   r6   r   r   s      r   r   zTestHistogramdd.test_empty  s    B8Aq6Aq6*:;;;1Q2$ 0 0111~r2rl3331Q 3 344444r   c           
         t          j        d                              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                     d S )
NrW   r.   r0   )rY   r.   r0   r   r1   )r-   gGz?r-   r-   r-   )r-   r.   r/   r,   )r!   rG   reshaper   r5   r   r   )r   rn   s     r   test_bins_errorsz TestHistogramdd.test_bins_errors  s     IaLL  A&&j".!---HHHHj".!///JJJJAq---0H	J 	J 	J 	Jq1a'>???@@@@@r   c           
      x   t          j        d          5  t          j        d                              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            d S # 1 swxY w Y   d S )Nr   )invalidr@   r/   r.   r-   r   r    r1   rY   )r!   errstaterG   r  r6   r   rH   r   )r   rn   expectedr9   r:   s        r   test_inf_edgeszTestHistogramdd.test_inf_edges  si   [*** 	) 	)	!$$Q**Ax!Q!Q!Q 899H>!1w2.>*?@@@DAqAx(((>!1bhArv.G.G*HIIIDAqAx(((>!1w26.B*CDDDDAqAx(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   DD//D36D3c                 v   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               d S )
NgG?)rB   rC   r3   r1   r   rB   r-   r3   g8   ?gqh ?)r   r   )r   rn   r2   r7   _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           	      8   t           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           d S )N)r   r/   rB   r3   rE   r   rC   rO   )r!   r"   r   r   r5   rH   r   r   s     r   r   z!TestHistogramdd.test_finite_range  s    y))D#sdD\D#; GHHHHj+t!3Z$bf~F	H 	H 	H 	Hj+t!3Z"&$$E	G 	G 	G 	G 	G 	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          ||           dS )z: Test that adjacent entries in an edge array can be equal )r   r-   r.   )r   r.   r.   r-   r1   r4   r3   Nr!   r6   r   r   )r   rn   ro   x_edgesy_edgesr7   r8   hist_expecteds           r   test_equal_edgesz TestHistogramdd.test_equal_edges  s    HYYYHYYY(999%%!1a&/ABB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                   dS )z< Test that if an edge array is input, its type is preserved )r   r    r   r    )r   r   rR   r   r1   r   r-   N)r!   r6   r   r   rb   )r   rn   ro   r  r  r7   r8   s          r   test_edge_dtypezTestHistogramdd.test_edge_dtype  s    H[[[!!F(>>>**B,!1a&/ABBBeU1X^W]333U1X^W]33333r   c                     d}t          j        dgt           j                  }t          j        ddgt           j                  }||z   }||z   }t          ||f||f          \  }}t	          |d         d           d S )Nl            r   rY   r-   r1   )r   r   )r!   r6   int64r   r   )r   bigrn   r  ro   r  r7   r8   s           r   test_large_integersz#TestHistogramdd.test_large_integers)  s~    HaS"(##(B8RX..!G-!1a&/ABB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
           d S )N)r   r.   rW   )r   r@   rW   r/   rN   r-   r   r1   Tr  g      ?r  )r   r  r  relative_areasrn   ro   r7   r8   s           r   test_density_non_uniform_2dz+TestHistogramdd.test_density_non_uniform_2d5  s    (999%%(999%%FF#  
 HaSA37]aS1W,sQw677HaSA37]aS1W,sQw677 "1a&/ABBBeT>*** "1a&/A4PPPeT;'''''r   c                     t          j        d          }t          j        g d          }t          ||d          \  }}t	          |f|fd          \  }}t          ||           t          ||d                    d S )Nr    r?   Tr=   r   )r!   rG   r6   r   r   r   )r   r'   r2   r7   r8   hist_ddedges_dds          r   test_density_non_uniform_1dz+TestHistogramdd.test_density_non_uniform_1dP  s    IbMMx((())4666e'tgtDD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    s        #! #! #!J" " "" " "	- 	- 	-@ @ @
5 5 5A A A
) 
) 
)     .G G G* * *	4 	4 	4
$ 
$ 
$( ( (6) ) ) ) )r   r  )r   rx   numpyr!   r   r   r   numpy.testingr   r   r   r	   r
   r   r   r   r   r   r  r  r   r   r   <module>r     sM         = = = = = = = = = =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Z" Z" Z" Z" Z" Z" Z" Z"xT8 T8 T8 T8 T8 T8 T8 T8nP) P) P) P) P) P) P) P) P) P)r   