
    G/Ph                         d dl Zd dl mZmZmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlZ G d d          Z G d d          Z G d	 d
          ZdS )    N)	histogramhistogramddhistogram_bin_edges)
assert_assert_equalassert_array_equalassert_almost_equalassert_array_almost_equalassert_raisesassert_allcloseassert_array_max_ulpassert_raises_regexsuppress_warnings)requires_memoryc                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!e"j#        $                    d !          d"             Z%d# Z&d$S )%TestHistogramc                     d S N selfs    _/var/www/html/test/jupyter/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/   r0   r   bins      ?       @)r   r   r   
ValueErrorr   r#   arrayr   )r   histedgeshes        r   test_one_binzTestHistogram.test_one_bin    s    q!f5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/   r1      r"   皙?Fr.   r   r1   rB   )rC   rC   rC                 ?      ?      ?)r#   r$   r%   r   r&   diffr	   aranger   r   inf)	r   r(   r)   r*   r+   arear4   countsdmys	            r   test_densityzTestHistogram.test_density*   s   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"   rE   r   	   ranger/   TrR   r@      decimalrR   weightsr@      r4   rR   rX   )r#   rI   r   r   r&   r	   rH   )r   r*   r;   r+   ws        r   test_outlierszTestHistogram.test_outliersJ   s]   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"   rE      zsame shape asr/   rP   TrW   )r#   rI   r   r7   r   )r   r*   r\   r;   r+   s        r   test_arr_weights_mismatchz'TestHistogram.test_arr_weights_mismatchb   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"   rE   Tr?   rX   )r#   rI   r   r   
issubdtypedtypeintegerfloatingonesintfloat)r   r*   r;   r+   s       r   	test_typezTestHistogram.test_typei   s    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@rd   )g!@gS@g^z@r   r3         @)r#   r8   float32histogram2dr   r&   )r   xycounts_histxedgesyedgess         r   test_f32_roundingzTestHistogram.test_f32_roundingx   sy    H888
KKKH<<<BJOOO&(nQ&D&D&D#VV[__&&+++++r   c                    t          j        g dt           j                  }t          j        |          \  }}t	                      5 }|                    t          d          }t          j        g d          \  }}t          t          |          d           t          ||           t          ||           d d d            d S # 1 swxY w Y   d S )N)r/   r/   r   rl   zConverting input from .*)TTFr/   )
r#   r8   uint8r   r   recordRuntimeWarningr   lenr   )r   r*   int_hist	int_edgessuprecr9   r:   s           r   test_bool_conversionz"TestHistogram.test_bool_conversion   s    HYYYbh/// l1oo)
    	1C**^-GHHC,':':':;;KD%S1%%%tX...ui000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   A2CCC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?   rb   rX   r@   r   r"   r_   r4   rX   )r/   r0   r0   r2   r2   )r2   r1   r0   r/   )r2   r   r   r/   )r4   rX   r@   g      $@rm   rP   rA   )	r0   r/   r/   r/   r/   r/   r/   r/   r/   )皙?rC   rC   g333333?)r#   r$   r%   rg   r   r
   r'   concatenatezerosrI   r   r8   r	   )r   r)   r\   r*   r+   nanbwawbnwanwbs              r   test_weightszTestHistogram.test_weights   s   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/   r[   r0   y              ?)r0   r/   r0   )r   r0   r1   r   r/   r0   r1   rZ   r   )Decimalr   )r#   r8   r   r
   rV   r   )r   valuesrX   r   r   r   s         r   test_exotic_weightsz!TestHistogram.test_exotic_weights   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   )rR   r4   )r#   r8   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/   r3   r   r   r#   r8   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 )NrD   r5   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 )NrD   r5   r   r   rG         ?rQ   )r#   r'   r   r   r7   nanrJ   r   s     r   test_finite_rangezTestHistogram.test_finite_range   so    {3---$tDk****j)T"&GGGGj)T$rvGGGGGGr   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 )	NrD   r5   r   r   zmax must be larger thanrC   g{Gz?rQ   )r#   r'   r   r7   r   r   s     r   test_invalid_rangez TestHistogram.test_invalid_range   s    {3--- -FG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   )r0   i  r4   rR   r   r[   r/   )r#   r8   r   zipr   )
r   arrr9   r:   mask
left_edgesright_edgesrp   leftrights
             r   test_bin_edge_casesz!TestHistogram.test_bin_edge_cases   s    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	rD   rD   rD   r5   r6   rm   rm   g      @g      @         r   r   r[   r/   )r#   r8   r   r   )r   r   r9   r:   s       r   test_last_bin_inclusive_rangez+TestHistogram.test_last_bin_inclusive_range   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 )
NrD   r5   r   r   r   rE   g333333?z
must be 1dr3   )r#   r'   r8   r   r7   r   )r   r   r4   s      r   test_bin_array_dimsz!TestHistogram.test_bin_array_dims   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 )Nr0   )r/   r1   r/   uint64rl   r3   )r#   r8   r   r7   r   )r   r   r4   r9   r:   s        r    test_unsigned_monotonicity_checkz.TestHistogram.test_unsigned_monotonicity_check  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#   r8   .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 rE   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   rE   )r   r7   r   rR   r#   rJ   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                 R   t          j        ddt           j        g          }t          j        t           j        t           j        g          }t                      }|                    t
                     |5  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/   autor3   r   r/   r   r0   )r#   r8   r   r   filterry   r   r7   r   r   r&   )r   one_nanall_nanr}   r;   r+   s         r   test_some_nan_valuesz"TestHistogram.test_some_nan_values  s   (Aq"&>**(BFBF+,,  !!

>""" 	% 	%*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   6DF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/   r0   r1   r   r"      )r   r0      r   ztimedelta64[D]r3   )r#   
datetime64r8   rd   r   astyper   rh   )r   beginoffsetsr4   dates	date_binstdd_countd_edget_countt_edgei_counti_edges                r   test_datetimezTestHistogram.test_datetime-  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 )NrY   r/   r0   r2   rl   r3   r   )r#   rd   itemsizer8   r   r   )r   rd   exponentr   r9   r<   s         r   do_signed_overflow_boundsz'TestHistogram.do_signed_overflow_boundsF  s    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_boundsM  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 )Nr5   r6   r   r/   r   r#   finfoepsr8   r   r   r   rd   r   float_smallfloat_larger   r   rR   countx_locs           r   do_precision_lower_boundz&TestHistogram.do_precision_lower_boundT  s    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 )Nr5   rD   r[   r/   r   r   r   r   s           r   do_precision_upper_boundz&TestHistogram.do_precision_upper_boundc  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_precisions  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_precisionw  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/   r0   r   r   r   r   r   r   )r   r   r   r#   r8   )r   r9   r<   r:   r   s        r   test_histogram_bin_edgesz&TestHistogram.test_histogram_bin_edges  s    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   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 r1   i  i>  )sampler4   )r/   r0   )r#   r   rI   r   r   type)r   r  xbinsybinszbinsr9   s         r   test_big_arrayszTestHistogram.test_big_arrays  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>f8rl   r0   )gx0gel	  r   r/   r   )r#   r   r8   r   )r   r9   r<   expected_hists       r   test_gh_23110zTestHistogram.test_gh_23110  s`    ,rx5AAA$%%79 9 9a !Q((4/////r   N)'__name__
__module____qualname__r   r   r,   r=   rN   r]   r`   rj   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  pytestmarkskipr  r  r   r   r   r   r      s5           	" 	" 	"/ / /' ' '@! ! !0G G G5 5 5, , ,1 1 1"3 3 3:@ @ @<; ; ;0 0 0
7 7 7H H H2 2 2	 	 	" " "
* * *7 7 7	@ 	@ 	@% % %2' ' '2# # #4 4 4/ / // / / @ @ @4 4 4% % %  [KLL/ / ML/0 0 0 0 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                            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   stoner3   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 ]P\  }}t          j        ||          \  }	}
t          t          |	          |d                    ||                     QdS )z
        Straightforward testing with a mixture of linspace data (for
        consistency). All test values have been precomputed and the values
        shouldn't change
        r2   rY   r   r0   r     r"         rP      #      G   r   2   i  i  r   r[   r   r/   r1   *For the {0} estimator with datasize of {1}err_msgN)itemsr#   r'   r   r   r   rz   format)r   
basic_testtestlenexpectedResultsx1x2rp   r#  numbinsr*   r+   s              r   r,   z%TestHistogramOptimBinNums.test_simple  se    $%A1&'AK K#$B2&("b1N N#%B2&("b2O O	P P
 )3(8(8(:(: 		P 		P$G_ S"glQ&677BQGqL1$455BBx((A&5&;&;&=&= P P"	7|Ay111SVVW 744:F9g4N4NP P P P PP		P 		P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 ]P\  }}t          j        ||          \  }}t          t          |          |d                    ||                     Qd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!  r0   r1   r/   r0   r1   r.  r/  N)	r1  r#   rI   r   ri   r   r   rz   r2  )	r   	small_datr4  r5  testdatr#  expbinsr*   r+   s	            r   
test_smallz$TestHistogramOptimBinNums.test_small  s%     !1aA"#Q< < 1aA"#Q< < 1aA"#Q< <	= =	 )2(9(9 	P 	P$G_i((//66G&5&;&;&=&= P P"	7|GY771SVVW 744:F9g4N4NP P P P PP	P 	P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IQRr:  N)r   r7   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 ]O\  }}t          j        ||          \  }}t	          t          |          |d                    |                     Pd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{0} estimator, No Variance testr/  N)r#   rg   r1  r   r   rz   r2  )r   novar_datasetnovar_resultdictr#  r8  r*   r+   s          r   test_novariancez)TestHistogramOptimBinNums.test_novariance  s    
 "#aq%&1qJ J #3"8"8":": 	? 	?Iw<y99DAqQ 3,,2F9,=,=? ? ? ? ?	? 	?r   c                    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                     dS )zu
        Check when IQR is 0, but variance exists, we return the sturges value
        and not the fd value.
          r   Nr1   r   r   r&  r  r  )r#   rg   r   r   r'   r8   )r   lim_var_data
edges_autoedges_fdedges_sturgess        r   test_limited_variancez/TestHistogramOptimBinNums.test_limited_variance  s    
 wt}}RaRRSS(v>>
ZQR!8!8999&|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"   r-  ir      r_   rB   )r  r  r  r!  N)r#   r'   hstackr1  r   r   rz   )r   xcenteroutlier_datasetoutlier_resultdictr#  r8  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 fdt          d          D             }t          t          j        |d          dz
            }t	          |g dd	           d
S )zQVerify that Scott's rule and Stone's rule converges for normally distributed datac                     t           j                            |           }|                    dd|          }t	          t          j        |d          d                   t	          t          j        |d          d                   }}|||z   z  S )Nr   r0   )locscalesizer!  r  )r#   r$   RandomStatenormalrz   r   )seedr^  rngrp   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   c                     g | ]Pfd t          j        ddd                                                              t                    D             QS )c                 (    g | ]} |          S r   r   )r   r^  rc  ra  s     r   r   zLTestHistogramOptimBinNums.test_scott_vs_stone.<locals>.<listcomp>.<listcomp>#  s%    ooo4{{4&&ooor   r"   r   r2   )startstopr   )r#   	geomspaceroundr   rh   )r   ra  rc  s    @r   r   zATestHistogramOptimBinNums.test_scott_vs_stone.<locals>.<listcomp>#  so     % % % poooo2<bsXY3Z3Z3Z3`3`3b3b3i3ijm3n3nooo % % %r   r"   r   r    rE   )g333333?g
ףp=
?g{Gz?gQ?r0   rU   N)rR   absr#   meanr	   )r   llavgrc  s      @r   test_scott_vs_stonez-TestHistogramOptimBinNums.test_scott_vs_stone  s    	 	 	% % % %))% % % "'"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 ]k\  }}	t          j        ||d          \  }
}d                    |          }|d                    |          z  }t          t          |
          |	|           ld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.
        rY   rT   r*  )r  r  r  r  r   r!  r%      r   P   !   E      r,  r   r[   r   r0   r/   r"   r1   rS  i)ir   rQ   zFor the {0} estimatorz with datasize of {0}r/  N)r1  r#   r'   rU  r   r2  r   rz   )r   r3  r4  r5  r6  r7  x3rp   r#  r8  r*   r+   msgs                r   test_simple_rangez+TestHistogramOptimBinNums.test_simple_range*  su    $%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)DDD1-44Y??.55g>>>SVVWc:::::	;	; 	;r   r4   )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      rl   r3   )r#   r8   int8r   r   int32r   )r   r4   r*   r9   r:   hist32edges32s          r   test_signed_integer_dataz2TestHistogramOptimBinNums.test_signed_integer_dataI  s     H\\\111l14000e,qxx'9'9EEE4(((5'*****r   c           
      H   t                      5 }|dk    r|                    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!  rP   rK  N)r   r   ry   r   r#   r   tilerI   )r   r4   r}   s      r   test_integerz&TestHistogramOptimBinNums.test_integerS  s        	Cw

>***&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.
        rP   rK  r%  r(  r0   rC   r   N)r   r#   r   r  rI   r   s    r   test_integer_non_autoz/TestHistogramOptimBinNums.test_integer_non_auto`  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   r:  rb   N)r   r   r   )r   r"  r#  s      r   test_simple_weightedz.TestHistogramOptimBinNums.test_simple_weightedk  sX     DCC' 	8 	8I)Y			#YYY8 8 8 8 8	8 	8r   N)r  r  r  __doc__r   r,   r>  rE  rI  rQ  rY  rn  rw  r  r  parametrizer  r  r  r  r   r   r   r  r    s_        
4 4 4P P P4P P P(G G G? ? ?= = =$* * *(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   rE   rF   )r   rF   r   )r   r   rE   )rE   rE   rF   )rE   rF   r   )rE   r   r   )r0   r1   r1   r[   r/   r   r1   rQ   )r   r/   r   )r   r   r/   )r/   r   r   )ry  r   r0   )r   r/   r0   r1   Tr4   r@   g      (@)r0   r1   r2   r2   rS   )r   r/   r   r   )r   r   r/   r   )r/   r   r   r   g      @c                 6    g | ]}t          j        |          S r   )r#   squeeze)r   rq   s     r   r   z/TestHistogramdd.test_simple.<locals>.<listcomp>  s     ;;;qRZ]];;;r   r    )r2   r1   r0   ry  r0   r   )r   r   r   r5   r   )r#   r8   r   r   r   allr
   splitr   listrR   rI   )r   rp   Hr:   answeredzZs           r   r,   zTestHistogramdd.test_simplew  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   r2   rB   )rB   r2   r   )r   rB   r2   )r2   rB   r   )rB   r   r2   )r2   r   rB   r"   r1   r#   r$   r%   r   r   shaper   r4   rr+   r  r:   s         r   test_shape_3dzTestHistogramdd.test_shape_3d  sa    INN2q!! 	" 	"A"1a((HAuAGqL!!!!	" 	"r   c                     d}t           j                            dd          }|D ]-}t          ||          \  }}t	          |j        |k               .d S )N))r   r2   r   rB   )r2   r   r   rB   )r   rB   r2   r   )r   rB   r   r2   )r   r   rB   r2   )r2   rB   r   r   )rB   r   r   r2   )r   r   r2   rB   )r   r2   rB   r   )rB   r2   r   r   )rB   r   r   r2   )r2   rB   r   r   )r2   r   r   rB   )r   r2   rB   r   )r   r   r2   rB   )rB   r   r2   r   )rB   r   r2   r   )r2   r   rB   r   )r2   r   rB   r   )r   rB   r2   r   )r   r2   r   rB   )r   rB   r   r2   )rB   r2   r   r   )r   r   rB   r2   r"   r2   r  r  s         r   test_shape_4dzTestHistogramdd.test_shape_4d  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   r0   Tr?   rb   r   )r#   r$   r%   r   rg   r   rh   )r   r)   r9   r:   n_histw_hists         r   r   zTestHistogramdd.test_weights  s    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"   r0   r0   r3   r   )r   rD   rE   )r#   r   rh   r   r   r8   )r   rp   r9   r:   s       r   test_identical_samplesz&TestHistogramdd.test_identical_samples  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/   r3   rD   r0   )r0   r0   r0   )r   r   r#   r8   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 )
NrY   r0   r2   )r[   r0   r2   r   r3   )r/   gGz?r/   r/   r/   )r/   r0   r1   r.   )r#   rI   reshaper   r7   r   r   )r   rp   s     r   test_bins_errorsz TestHistogramdd.test_bins_errors  s     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 )Nignore)invalidrB   r1   r0   r/   r   r"   r3   r[   )r#   errstaterI   r  r8   r   rJ   r   )r   rp   expectedr;   r<   s        r   test_inf_edgeszTestHistogramdd.test_inf_edges  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?)rD   rE   r5   r3   r   rD   r/   r5   g8   ?gqh ?)r   r   )r   rp   r4   r9   _s        r   test_rightmost_binedgez&TestHistogramdd.test_rightmost_binedge  s\   Nad+++aQ3Q2Ead+++aQ3Q2Nad+++aQ3Q3Had+++aQ3Q3r   c           	      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   r1   rD   r5   rG   r   rE   rQ   )r#   r$   r   r   r7   rJ   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/   r0   )r   r0   r0   r/   r3   r6   r5   Nr#   r8   r   r   )r   rp   rq   x_edgesy_edgesr9   r:   hist_expecteds           r   test_equal_edgesz TestHistogramdd.test_equal_edges  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   rT   r   r3   r   r/   N)r#   r8   r   r   rd   )r   rp   rq   r  r  r9   r:   s          r   test_edge_dtypezTestHistogramdd.test_edge_dtype  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   r[   r/   r3   )r   r   )r#   r8   int64r   r   )r   bigrp   r  rq   r  r9   r:   s           r   test_large_integersz#TestHistogramdd.test_large_integers  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   r0   rY   )r   rB   rY   r1   rP   r/   r   r3   Tr  g      ?r  )r   r  r  relative_areasrp   rq   r9   r:   s           r   test_density_non_uniform_2dz+TestHistogramdd.test_density_non_uniform_2d#  s    (999%%(999%%FF#  
 HaSA3q5[A3q5(A3q5011HaSA3q5[A3q5(A3q5011 "1a&/ABBBeT>*** "1a&/A4PPPeT9%%%%%r   c                     t          j        d          }t          j        g d          }t          ||d          \  }}t	          |f|fd          \  }}t          ||           t          ||d                    d S )Nr"   rA   Tr?   r   )r#   rI   r8   r   r   r   )r   r)   r4   r9   r:   hist_ddedges_dds          r   test_density_non_uniform_1dz+TestHistogramdd.test_density_non_uniform_1d>  s    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  u  s        #! #! #!J" " "" " "	- 	- 	-@ @ @
5 5 5A A A
) 
) 
)     .G G G* * *	4 	4 	4
$ 
$ 
$& & &6) ) ) ) )r   r  )numpyr#   r   r   r   numpy.testingr   r   r   r	   r
   r   r   r   r   r   numpy.testing._private.utilsr   r  r   r  r  r   r   r   <module>r     sb       = = = = = = = = = =                       
 9 8 8 8 8 8 Q0 Q0 Q0 Q0 Q0 Q0 Q0 Q0hQ8 Q8 Q8 Q8 Q8 Q8 Q8 Q8hP) P) P) P) P) P) P) P) P) P)r   