o
    ðT·jžƒ  ã                   @   s‚   d dl Zd dl mZmZmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlZG dd„ dƒZG dd„ dƒZG d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_warningsc                   @   s*  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"e#j$j%dAdB�dCdD„ ƒZ&dEdF„ Z'dGS )HÚTestHistogramc                 C   ó   d S ©N© ©Úselfr   r   úb/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/numpy/lib/tests/test_histograms.pyÚsetup_method   ó   zTestHistogram.setup_methodc                 C   r   r   r   r   r   r   r   Úteardown_method   r   zTestHistogram.teardown_methodc                 C   sT   d}t j |¡}t|ƒ\}}tt j|dd�|ƒ tt  ddd¡ƒ\}}t|dƒ d S )Néd   r   ©Úaxisé
   )ÚnpÚrandomÚrandr   r   ÚsumÚlinspacer   )r   ÚnÚvÚaÚbr   r   r   Útest_simple   s   zTestHistogram.test_simplec                 C   s‚   t g d¢ddgƒ\}}t|dgƒ t|ddgƒ ttt ddgdd� t ddgdd�\}}t|t dg¡ƒ t|t ddg¡ƒ d S )N©é   é   é   é   r(   r)   r   ©Úbinsç      ð?ç       @)r   r   r
   Ú
ValueErrorr   r   Úarrayr   )r   ÚhistÚedgesÚhÚer   r   r   Útest_one_bin   s   zTestHistogram.test_one_binc           	      C   s  d}t j |¡}t|dd�\}}t  |t  |¡ ¡}t|dƒ t  d¡}g d¢}t||dd�\}}t|dƒ t	t  |t  |¡ ¡dƒ t||dd�\}}t|g d	¢ƒ t  d¡}d
dddt j
g}t||dd�\}}t|g d¢ƒ t jg d	¢ddt j
gdd�\}}t	|dd
gƒ d S )Nr   T©Údensityr(   r   ©r   r(   r*   é   r   çš™™™™™¹?Fr'   r   r*   r:   )r;   r;   r;   ç        ç      à?ç      ø?ç      Ð?)r   r   r   r   r    Údiffr   Úaranger   r   Úinf)	r   r"   r#   r$   r%   Úarear-   ÚcountsÚdmyr   r   r   Útest_density)   s(   




ÿzTestHistogram.test_densityc                 C   sð   t  d¡d }t|ddgd�\}}t| ¡ dƒ t|ddgd�\}}t| ¡ dƒ t|ddgdd�\}}t|t  |¡  ¡ dd	d
� t  d¡d }t|ddg|dd�\}}t|t  |¡  ¡ dƒ t|dddg|d�\}}t||dd… ƒ d S )Nr   r=   r   é	   ©Úranger(   T©rI   r8   é   ©Údecimal©rI   Úweightsr8   é   ©r-   rI   rO   éÿÿÿÿ)r   rA   r   r   r    r   r@   )r   r$   r4   r%   Úwr   r   r   Útest_outliersI   s   zTestHistogram.test_outliersc                 C   sd   t  d¡d }t  d¡d }ttdƒ� t|ddg|dd�\}}W d   ƒ d S 1 s+w   Y  d S )	Nr   r=   é   zsame shape asr(   rG   TrN   )r   rA   r   r0   r   )r   r$   rS   r4   r%   r   r   r   Útest_arr_weights_mismatcha   s
   "ÿz'TestHistogram.test_arr_weights_mismatchc                 C   s®   t  d¡d }t|ƒ\}}tt  |jt j¡ƒ t|dd�\}}tt  |jt j¡ƒ t|t  dt	¡d�\}}tt  |jt j¡ƒ t|t  dt
¡d�\}}tt  |jt j¡ƒ d S )Nr   r=   Tr7   ©rO   )r   rA   r   r   Ú
issubdtypeÚdtypeÚintegerÚfloatingÚonesÚintÚfloat)r   r$   r4   r%   r   r   r   Ú	test_typeh   s   zTestHistogram.test_typec                 C   sP   t jg d¢t jd�}t jg d¢t jd�}t j||dd�\}}}t| ¡ dƒ d S )N)g2V›ÿEq@g“áx>fQÀg-³ÅVT5@©rY   )g!çý°�³@gö·àS�±@g§’ ^z·@r   r,   ç      @)r   r1   Úfloat32Úhistogram2dr   r    )r   ÚxÚyÚcounts_histÚxedgesÚyedgesr   r   r   Útest_f32_roundingw   s   zTestHistogram.test_f32_roundingc                 C   sŽ   t jg d¢t jd�}t  |¡\}}tƒ �)}| td¡}t  g d¢¡\}}tt|ƒdƒ t	||ƒ t	||ƒ W d   ƒ d S 1 s@w   Y  d S )N)r(   r(   r   r`   zConverting input from .*)TTFr(   )
r   r1   Úuint8r   r   ÚrecordÚRuntimeWarningr   Úlenr   )r   r$   Úint_histÚ	int_edgesÚsupÚrecr2   r3   r   r   r   Útest_bool_conversion~   s   
"úz"TestHistogram.test_bool_conversionc                 C   sR  t j d¡}t  d¡d }t|ƒ\}}t|dd�\}}t||d�\}}t||dd�\}	}
t|d |ƒ t||	ƒ t  ddd¡}t  t  d¡t  d¡f¡}t|t  	d	¡|d
�\}}t||ƒ tg d¢dg d¢d
�\}}t
|g d¢ƒ tg d¢dg d¢dd�\}}t|t  g d¢¡d d d ƒ tt  	d¡g d¢g d¢dd�\}}t|g d¢ƒ d S )Nr   é   Tr7   rW   ©rO   r8   r   r   rU   ©r-   rO   )r(   r)   r)   r+   r+   )r+   r*   r)   r(   )r+   rs   r   r(   )r-   rO   r8   g      $@ra   rG   r9   )	r)   r(   r(   r(   r(   r(   r(   r(   r(   )çš™™™™™É?r;   r;   g333333³?)r   r   r   r\   r   r	   r!   ÚconcatenateÚzerosrA   r   r1   r   )r   r#   rS   r$   r%   ÚnaÚnbÚwaÚwbÚnwaÚnwbr   r   r   Útest_weights�   s.   


ÿ 
þzTestHistogram.test_weightsc                 C   s<  t  g d¢¡}t  g d¢¡dt  g d¢¡  }t|g d¢|d�\}}t|t  ddg¡dt  dd	g¡  ƒ t|ddd	g|d
�\}}t|t  ddg¡dt  dd	g¡  ƒ ddlm} t  g d¢¡}t  |dƒ|dƒ|d	ƒg¡}t|g d¢|d�\}}t||dƒ|dƒgƒ t|ddd	g|d
�\}}t||dƒ|dƒgƒ d S )N©gÍÌÌÌÌÌô?ç      @gffffff@)r(   rR   r)   y              ð?)r)   r(   r)   )r   r)   r*   ru   r(   r)   r*   rQ   r   )ÚDecimalrs   )r   r1   r   r	   rM   r‚   )r   ÚvaluesrO   r{   r|   r‚   r   r   r   Útest_exotic_weights¬   s    &&z!TestHistogram.test_exotic_weightsc                 C   s4   t  g d¢¡}t j|ddgdd� t|g d¢ƒ d S )Nr€   éöÿÿÿr   r   )rI   r-   )r   r1   r   r	   )r   rƒ   r   r   r   Útest_no_side_effectsÊ   s   z"TestHistogram.test_no_side_effectsc                 C   s>   t g ddgd�\}}t|t dg¡ƒ t|t ddg¡ƒ d S )Nr   r(   r,   ©r   r   r   r1   ©r   r$   r%   r   r   r   Ú
test_emptyÑ   s   zTestHistogram.test_emptyc                 C   s,   t jdddd�}t|dƒ ttt|dƒ d S )Nr<   r.   r   ©Únumrs   g333333@)r   r!   r   r
   Ú	TypeError©r   Úvalsr   r   r   Útest_error_binnum_typeÖ   s   
z$TestHistogram.test_error_binnum_typec                 C   sP   t jdddd�}t|ddgd� ttt|t jdgd� ttt|dt jgd� d S )Nr<   r.   r   rŠ   r?   ç      è?rH   )r   r!   r   r
   r0   ÚnanrB   r�   r   r   r   Útest_finite_rangeÜ   s   zTestHistogram.test_finite_rangec                 C   sR   t jdddd�}ttdƒ� t j|ddgd� W d   ƒ d S 1 s"w   Y  d S )	Nr<   r.   r   rŠ   zmax must be larger thanr;   g{®Gáz„?rH   )r   r!   r   r0   r   r�   r   r   r   Útest_invalid_rangeã   s   "ÿz TestHistogram.test_invalid_rangec           
      C   s~   t  g d¢¡}t j|ddd�\}}|dk}|d d… | }|dd … | }t|||ƒD ]\}}}	t||kƒ t||	k ƒ q+d S )N)iQ  i”  iã  i&  iï  i  iÜ  ih   )r)   iè  ©r-   rI   r   rR   r(   )r   r1   r   Úzipr   )
r   Úarrr2   r3   ÚmaskÚ
left_edgesÚright_edgesrd   ÚleftÚrightr   r   r   Útest_bin_edge_casesé   s   þz!TestHistogram.test_bin_edge_casesc                 C   s4   t  g d¢¡}t j|ddd�\}}t|d dƒ d S )N©	r<   r<   r<   r.   r/   ra   ra   g      @g      @é   ©ç      à¿rs   r”   rR   r(   )r   r1   r   r   )r   r–   r2   r3   r   r   r   Útest_last_bin_inclusive_rangeô   s   z+TestHistogram.test_last_bin_inclusive_rangec                 C   sd   t jdddd�}t  ddgddgg¡}ttdƒ� t j||d	� W d   ƒ d S 1 s+w   Y  d S )
Nr<   r.   r   rŠ   r   r=   g333333ã?z
must be 1dr,   )r   r!   r1   r   r0   r   )r   rŽ   r-   r   r   r   Útest_bin_array_dimsù   s
   "ÿz!TestHistogram.test_bin_array_dimsc                 C   s^   t  dg¡}t jg d¢dd�}ttƒ� t j||d�\}}W d   ƒ d S 1 s(w   Y  d S )Nr)   )r(   r*   r(   Úuint64r`   r,   )r   r1   r
   r0   r   )r   r–   r-   r2   r3   r   r   r   Ú test_unsigned_monotonicity_check   s
   
"ÿz.TestHistogram.test_unsigned_monotonicity_checkc                 C   s†   t ttdd„ tdƒD ƒtj g ƒ t ttdd„ tdƒD ƒtjg ƒ t dd„ tdƒD ƒdg ¡ t dd„ tdƒD ƒdg ¡ d S )	Nc                 S   ó   g | ]}t  d ¡‘qS ©gš™™™™™Ù?©r   r1   ©Ú.0Úir   r   r   Ú
<listcomp>  ó    z9TestHistogram.test_object_array_of_0d.<locals>.<listcomp>r   c                 S   r¥   r¦   r§   r¨   r   r   r   r«     r¬   c                 S   r¥   ©r=   r§   r¨   r   r   r   r«     r¬   g     à?c                 S   r¥   r­   r§   r¨   r   r   r   r«     r¬   r=   )r
   r0   r   rI   r   rB   r   r   r   r   Útest_object_array_of_0d  s   ÿÿ"z%TestHistogram.test_object_array_of_0dc                 C   s  t  ddt jg¡}t  t jt jg¡}tƒ }| t¡ |�[ ttt|dd� ttt|dd� t|ddd�\}}t	| 
¡ dƒ t|ddd�\}}t	| 
¡ dƒ t|ddgd�\}}t	| 
¡ dƒ t|ddgd�\}}t	| 
¡ dƒ W d   ƒ d S 1 szw   Y  d S )Nr   r(   Úautor,   ©r   r(   r”   r)   )r   r1   r‘   r   Úfilterrl   r
   r0   r   r   r    )r   Úone_nanÚall_nanrp   r4   r%   r   r   r   Útest_some_nan_values  s    
"ñz"TestHistogram.test_some_nan_valuesc                 C   sÔ   t  dd¡}t  g d¢¡}t  g d¢¡}|| }|| }t  d¡}t||d�\}}t| |¡| |¡d�\}	}
t||d�\}}t||ƒ t|	|ƒ t||  t¡|ƒ t|
 t¡|ƒ t|j|jƒ t|
j|ƒ d S )Nz
2000-01-01ÚD)	r   r   r(   r(   r)   r*   rs   r   é   )r   r)   é   r¶   ztimedelta64[D]r,   )r   Ú
datetime64r1   rY   r   Úastyper   r]   )r   ÚbeginÚoffsetsr-   ÚdatesÚ	date_binsÚtdÚd_countÚd_edgeÚt_countÚt_edgeÚi_countÚi_edger   r   r   Útest_datetime,  s   


zTestHistogram.test_datetimec                 C   s|   dt  |¡j d }t jd|  d d| d g|d�}t|dd�\}}t|d|  d dd| d gƒ t|ddgƒ d S )NrP   r(   r)   r+   r`   r,   r   )r   rY   Úitemsizer1   r   r   )r   rY   Úexponentr–   r2   r5   r   r   r   Údo_signed_overflow_boundsE  s
   $"z'TestHistogram.do_signed_overflow_boundsc                 C   s@   |   tj¡ |   tj¡ |   tj¡ |   tj¡ |   tj¡ d S r   )rÈ   r   ÚbyteÚshortÚintcÚint_Úlonglongr   r   r   r   Útest_signed_overflow_boundsL  s
   z)TestHistogram.test_signed_overflow_boundsc                 C   st   t  |¡j}t  dg|¡}t  d| dg|¡}| |¡d dkr"d S t j|d|d�\}}t|dgƒ t|j|ƒ d S )Nr.   r/   r   r(   r”   ©r   ÚfinfoÚepsr1   r¹   r   r   rY   ©r   Úfloat_smallÚfloat_largerÑ   r–   rI   ÚcountÚx_locr   r   r   Údo_precision_lower_boundS  s   z&TestHistogram.do_precision_lower_boundc                 C   st   t  |¡j}t  dg|¡}t  dd| g|¡}| |¡d dkr"d S t j|d|d�\}}t|dgƒ t|j|ƒ d S )Nr.   r<   rR   r(   r”   r   rÏ   rÒ   r   r   r   Údo_precision_upper_boundb  s   z&TestHistogram.do_precision_upper_boundc                 C   s   |   ||¡ |  ||¡ d S r   )r×   rØ   )r   rÓ   rÔ   r   r   r   Údo_precisionr  s   zTestHistogram.do_precisionc                 C   sd   |   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   r   r   r   Útest_precisionv  s   zTestHistogram.test_precisionc                 C   s˜   t g d¢ddgƒ\}}tg d¢ddgƒ}t||ƒ t g d¢¡}t |ddd�\}}t|ddd�}t||ƒ t |dd	d�\}}t|dd	d�}t||ƒ d S )
Nr'   r(   r)   r�   rž   rŸ   r”   r¯   r°   )r   r   r   r   r1   )r   r2   r5   r3   r–   r   r   r   Útest_histogram_bin_edges  s   

z&TestHistogram.test_histogram_bin_edgesc                 C   sR   t  ddgd ¡}tjtdd�� t|dd� W d   ƒ d S 1 s"w   Y  d S )Nr(   g     ð?r   zToo many bins for data range)Úmatchr,   )r   r1   ÚpytestÚraisesr0   r   )r   r–   r   r   r   Útest_small_value_range�  s   "ÿz$TestHistogram.test_small_value_rangez,Bad memory reports lead to OOM in ci testing)Úreasonc                 C   sJ   t  ddg¡}d}d}t  d¡}t j||||fd�}tt|ƒtdƒƒ d S )Ni áõr*   i�  i€>  )Úsampler-   )r(   r)   )r   rx   rA   r   r   Útype)r   rå   ÚxbinsÚybinsÚzbinsr2   r   r   r   Útest_big_arrays”  s   
zTestHistogram.test_big_arraysc                 C   s<   t jt jdgdd�ddd�\}}t  ddg¡}t||ƒ d S )	Ng$ë°Áx€z>f8r`   r)   )gÒèxÖ0€ge¨Òl	  €r”   r(   r   )r   r   r1   r   )r   r2   r5   Úexpected_histr   r   r   Útest_gh_23110�  s   
þzTestHistogram.test_gh_23110N)(Ú__name__Ú
__module__Ú__qualname__r   r   r&   r6   rF   rT   rV   r_   ri   rr   r   r„   r†   r‰   r�   r’   r“   rœ   r¡   r¢   r¤   r®   r´   rÅ   rÈ   rÎ   r×   rØ   rÙ   rÞ   rß   rã   rá   ÚmarkÚskiprê   rì   r   r   r   r   r      sH    
 	
r   c                   @   sœ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zej dg d¢¡dd„ ƒZej dg d¢¡dd„ ƒZdd„ Zdd„ ZdS )ÚTestHistogramOptimBinNumsz]
    Provide test coverage when using provided estimators for optimal number of
    bins
    c                 C   sL   g d¢}|D ]}t g |d�\}}t|t dg¡ƒ t|t ddg¡ƒ qd S )N©ÚfdÚscottÚriceÚsturgesÚdoaneÚsqrtr¯   Ústoner,   r   r(   r‡   )r   Úestimator_listÚ	estimatorr$   r%   r   r   r   r‰   «  s   ýz$TestHistogramOptimBinNums.test_emptyc                 C   sÎ   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 dd|d d ¡}t dd|d d ¡}t ||f¡}|  ¡ D ]\}}t ||¡\}	}
tt|	ƒ|d ||¡d� qJq%dS )z²
        Straightforward testing with a mixture of linspace data (for
        consistency). All test values have been precomputed and the values
        shouldn't change
        r+   rP   r·   r)   ró   é   r   é   é   rG   é   é#   é   éG   r¶   ©é2   iô  iˆ  r…   rR   rs   r(   r*   ú*For the {0} estimator with datasize of {1}©Úerr_msgN)Úitemsr   r!   rw   r   r   rm   Úformat)r   Ú
basic_testÚtestlenÚexpectedResultsÚx1Úx2rd   rü   Únumbinsr$   r%   r   r   r   r&   ´  s*   ÿÿÿüÿþúz%TestHistogramOptimBinNums.test_simplec           	   
   C   sž   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 |¡ t¡}|  ¡ D ]\}}t ||¡\}}tt|ƒ|d ||¡d� q2q"d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*   r  r  N)	r	  r   rA   r¹   r^   r   r   rm   r
  )	r   Ú	small_datr  r  Útestdatrü   Úexpbinsr$   r%   r   r   r   Ú
test_smallÎ  s&   ÿÿÿüÿþþz$TestHistogramOptimBinNums.test_smallc                 C   s(   g d¢}|D ]}t ttg d¢|ƒ qdS )zS
        Check a Value Error is thrown when an unknown string is passed in
        )ÚmadÚfreemanÚ
histogramsÚIQRr  N)r
   r0   r   )r   Ú
check_listrü   r   r   r   Útest_incorrect_methodsâ  s   ÿz0TestHistogramOptimBinNums.test_incorrect_methodsc              	   C   s^   t  d¡}dddddddddœ}| ¡ D ]\}}t  ||¡\}}tt|ƒ|d |¡d� q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{0} estimator, No Variance testr  N)r   r\   r	  r   r   rm   r
  )r   Únovar_datasetÚnovar_resultdictrü   r  r$   r%   r   r   r   Útest_novarianceê  s   
ÿÿþz)TestHistogramOptimBinNums.test_novariancec                 C   s€   t  d¡}d|dd…< d|dd…< t|dƒ}t|t  ddd¡ƒ t|d	ƒ}t|t  ddg¡ƒ t|d
ƒ}t|t  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   Nr*   r   éüÿÿÿr¯   rþ   rô   r÷   )r   r\   r   r   r!   r1   )r   Úlim_var_dataÚ
edges_autoÚedges_fdÚedges_sturgesr   r   r   Útest_limited_varianceø  s   



z/TestHistogramOptimBinNums.test_limited_variancec                 C   sh   t  ddd¡}t  t  ddd¡|f¡}dddd	d
œ}| ¡ D ]\}}t  ||¡\}}tt|ƒ|ƒ q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  i’ÿÿÿéœÿÿÿrs   é   rU   r:   )rô   rõ   rø   rú   N)r   r!   Úhstackr	  r   r   rm   )r   ÚxcenterÚoutlier_datasetÚoutlier_resultdictrü   r  r$   r%   r   r   r   Útest_outlier
  s   þz&TestHistogramOptimBinNums.test_outlierc                    sJ   dd„ ‰ ‡ fdd„t dƒD ƒ}ttj|dd�d ƒ}t|g d	¢d
d� dS )zQVerify that Scott's rule and Stone's rule converges for normally distributed datac                 S   sR   t j | ¡}|jdd|d�}tt  |d¡d ƒtt  |d¡d ƒ}}|||  S )Nr   r)   )ÚlocÚscaleÚsizerú   rõ   )r   r   ÚRandomStateÚnormalrm   r   )Úseedr/  Úrngrd   r$   r%   r   r   r   Únbins_ratio!  s   *zBTestHistogramOptimBinNums.test_scott_vs_stone.<locals>.nbins_ratioc                    s6   g | ]‰ ‡‡ fd d„t jdddd� ¡  t¡D ƒ‘qS )c                    s   g | ]}ˆ ˆ|ƒ‘qS r   r   )r©   r/  )r4  r2  r   r   r«   '  r¬   zLTestHistogramOptimBinNums.test_scott_vs_stone.<locals>.<listcomp>.<listcomp>r   r   r+   )ÚstartÚstopr‹   )r   Ú	geomspaceÚroundr¹   r]   )r©   ©r4  )r2  r   r«   '  s    .ÿzATestHistogramOptimBinNums.test_scott_vs_stone.<locals>.<listcomp>r   r   r   r=   )g333333Ã?g
×£p=
·?g{®Gáz´?g¸…ëQ¸ž?r)   rL   N)rI   Úabsr   Úmeanr   )r   ÚllÚavgr   r9  r   Útest_scott_vs_stone  s   
ÿz-TestHistogramOptimBinNums.test_scott_vs_stonec              	   C   sæ   dddddddœdddddddœd	d	d
dd	ddœdœ}|  ¡ D ]Q\}}t dd|d d ¡}t dd|d d ¡}t dd|¡}t |||f¡}|  ¡ D ]#\}}	tj||dd�\}
}d |¡}|d |¡7 }tt|
ƒ|	|d� qLqd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.
        rP   rK   r  )rô   rõ   rö   r÷   r¯   rú   rý   é    r¶   éP   é!   éE   é   r  r…   rR   rs   r)   r(   r   r*   r&  iÎÿÿÿ)iìÿÿÿr¶   rH   zFor the {0} estimatorz with datasize of {0}r  N)r	  r   r!   r(  r   r
  r   rm   )r   r  r  r  r  r  Úx3rd   rü   r  r$   r%   Úmsgr   r   r   Útest_simple_range.  s,   
ÿÿÿû	
üùz+TestHistogramOptimBinNums.test_simple_ranger-   )r¯   rô   rø   rõ   rú   rö   r÷   c                 C   sX   t jg d¢t jd�}t j||d�\}}t j| t j¡|d�\}}t||ƒ t||ƒ d S )N)éþÿÿÿr   é   r`   r,   )r   r1   Úint8r   r¹   Úint32r   )r   r-   r$   r2   r3   Úhist32Úedges32r   r   r   Útest_signed_integer_dataM  s
   
z2TestHistogramOptimBinNums.test_signed_integer_datac              	   C   sd   t ƒ �%}|dkr| t¡ tt t t d¡d¡|¡t d¡ƒ W d  ƒ dS 1 s+w   Y  dS )zE
        Test that bin width for integer data is at least 1.
        rú   rG   r  N)r   r±   rl   r   r   r   ÚtilerA   )r   r-   rp   r   r   r   Útest_integerW  s   
þ"ýz&TestHistogramOptimBinNums.test_integerc                 C   sV   t t t t d¡d¡d¡t d¡d ƒ t t t t d¡d¡ddg¡ddgƒ dS )	zX
        Test that the bin-width>=1 requirement *only* applies to auto binning.
        rG   r  rý   r   r)   r;   rv   N)r   r   r   rN  rA   r   r   r   r   Útest_integer_non_autod  s   þþz/TestHistogramOptimBinNums.test_integer_non_autoc                 C   s0   g d¢}|D ]}t ttg d¢|g d¢d� qdS )z=
        Check that weighted data raises a TypeError
        )rô   rõ   rö   r÷   r¯   r  rW   N)r
   rŒ   r   )r   rû   rü   r   r   r   Útest_simple_weightedo  s   ÿÿz.TestHistogramOptimBinNums.test_simple_weightedN)rí   rî   rï   Ú__doc__r‰   r&   r  r  r  r%  r,  r>  rF  rá   rð   ÚparametrizerM  rO  rP  rQ  r   r   r   r   rò   ¥  s"    	

rò   c                   @   s„   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) ÚTestHistogramddc              	   C   s:  t  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d�\}}t  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d�\}}tt  ||d k¡ƒ t|ddd	gd
dgd
dggdd�\}}t  g d¢g d¢g d¢gg d¢g d¢g d¢gg¡}t||d dƒ dd„ t j|dd	d�D ƒ}t|dd d!gd
dgd
d!ggd"�\}}t  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  d#¡}d$|t	t
d%ƒƒt	t
d%ƒƒt	t
d%ƒƒf< tt  d%¡t  d%¡t  d%¡gd%ƒ\}}t||ƒ d S )&N)r    r=   r>   )r    r>   r�   )r    r�   r=   )r=   r=   r>   )r=   r>   r�   )r=   r�   r�   )r)   r*   r*   rR   r(   r   r*   rH   )r   r(   r   )r   r   r(   )r(   r   r   )rG  r   r)   )r   r(   r)   r*   T©r-   r8   g      (@)r)   r*   r+   r+   rJ   )r   r(   r   r   )r   r   r(   r   )r(   r   r   r   g      @c                 S   s   g | ]}t  |¡‘qS r   )r   Úsqueeze)r©   re   r   r   r   r«   ’  r¬   z/TestHistogramdd.test_simple.<locals>.<listcomp>r   )r+   r*   r)   rG  r)   r”   )rs   rs   rs   r.   rs   )r   r1   r   r   r   Úallr	   Úsplitrx   ÚlistrI   rA   )r   rd   ÚHr3   ÚanswerÚedÚzÚZr   r   r   r&   {  sF   ÿ
ÿÿ

þÿ
ÿý

&&zTestHistogramdd.test_simplec                 C   ó<   d}t j dd¡}|D ]}t||ƒ\}}t|j|kƒ qd S )N))rs   r+   r:   )r:   r+   rs   )rs   r:   r+   )r+   r:   rs   )r:   rs   r+   )r+   rs   r:   r   r*   ©r   r   r   r   r   Úshape©r   r-   Úrr%   rZ  r3   r   r   r   Útest_shape_3d   s   þzTestHistogramdd.test_shape_3dc                 C   r_  )N))r·   r+   rs   r:   )r+   rs   r·   r:   )rs   r:   r+   r·   )r·   r:   rs   r+   )rs   r·   r:   r+   )r+   r:   r·   rs   )r:   rs   r·   r+   )r·   rs   r+   r:   )r·   r+   r:   rs   )r:   r+   r·   rs   )r:   r·   rs   r+   )r+   r:   rs   r·   )r+   r·   rs   r:   )rs   r+   r:   r·   )rs   r·   r+   r:   )r:   r·   r+   rs   )r:   rs   r+   r·   )r+   r·   r:   rs   )r+   rs   r:   r·   )r·   r:   r+   rs   )rs   r+   r·   r:   )rs   r:   r·   r+   )r:   r+   rs   r·   )r·   rs   r:   r+   r   r+   r`  rb  r   r   r   Útest_shape_4d©  s   þzTestHistogramdd.test_shape_4dc                 C   sž   t j dd¡}t|ƒ\}}t|dd�\}}t|t  d¡d�\}}t||ƒ t|t  d¡d dd�\}}t||ƒ t|t  dt¡d d�\}}t|d| ƒ d S )Nr   r)   Tr7   rW   rt   )r   r   r   r   r\   r   r]   )r   r#   r2   r3   Ún_histÚw_histr   r   r   r   ·  s   

zTestHistogramdd.test_weightsc                 C   s8   t  dt¡}t|dd�\}}t|d t  g d¢¡ƒ d S )N)r   r)   r)   r,   r   )r    r<   r=   )r   rx   r]   r   r   r1   )r   rd   r2   r3   r   r   r   Útest_identical_samplesÂ  s   z&TestHistogramdd.test_identical_samplesc                 C   s`   t g g gddgddgfd�\}}t|t dgg¡ƒ tj g g g gdd�\}}t|t d¡ƒ d S )Nr   r(   r,   r<   r)   )r)   r)   r)   )r   r   r   r1   rx   rˆ   r   r   r   r‰   Ç  s    zTestHistogramdd.test_emptyc              	   C   s~   t  d¡ dd¡}ttt j|g d¢d� ttt j|g d¢d� ttt j|dddg d¢gd� tt j|dddg d	¢gd�ƒ d S )
NrP   r)   r+   )rR   r)   r+   rs   r,   )r(   g®Gáz®ï?r(   r(   r(   )r(   r)   r*   éýÿÿÿr'   )r   rA   Úreshaper
   r0   r   r   )r   rd   r   r   r   Útest_bins_errorsÍ  s   ÿ"z TestHistogramdd.test_bins_errorsc              	   C   sä   t jdd��b t  d¡ dd¡}t  ddgddgddgg¡}t j|dt j ddggd	�\}}t||ƒ t j|dt  d
dt jg¡gd	�\}}t||ƒ t j|dt j dt jggd	�\}}t||ƒ W d   ƒ d S 1 skw   Y  d S )NÚignore)Úinvalidr:   r*   r)   r(   r   r   r,   rR   )r   ÚerrstaterA   rj  r1   r   rB   r   )r   rd   Úexpectedr4   r5   r   r   r   Útest_inf_edges×  s    
$
""øzTestHistogramdd.test_inf_edgesc                 C   s  dg}g d¢g}t ||d�\}}t|d dkƒ t|d dkƒ dg}g d¢g}t ||d�\}}t|d dkƒ t|d dkƒ dg}g d¢g}t ||d�\}}t|d dkƒ t|d dkƒ d	g}g d¢g}t ||d�\}}t|d dkƒ t|d dkƒ d S )
NgÐG»ÿÿÿï?)r<   r=   r.   r,   r   r<   r(   r.   g8ß   ð?gq¬‹Ûh ð?)r   r   )r   rd   r-   r2   Ú_r   r   r   Útest_rightmost_binedgeã  s(   



z&TestHistogramdd.test_rightmost_binedgec                 C   sv   t j d¡}t|ddgddgddggd� ttt|ddgddgdt jggd� ttt|ddgt jdgddggd� d S )N)r   r*   r<   r.   r?   r�   r=   rH   )r   r   r   r
   r0   rB   r‘   r�   r   r   r   r’   ú  s   ÿ
ÿz!TestHistogramdd.test_finite_rangec                 C   sf   t  g d¢¡}t  g d¢¡}t  g d¢¡}d}t||f||fd�\}}t  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(   r,   r/   r.   N©r   r1   r   r   )r   rd   re   Úx_edgesÚy_edgesr2   r3   Úhist_expectedr   r   r   Útest_equal_edges  s   þz TestHistogramdd.test_equal_edgesc                 C   sl   t  g d¢¡}|d }t  g d¢¡}|d }t||f||fd�\}}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   rs   rK   r¶   r,   r   r(   N)r   r1   r   r   rY   )r   rd   re   rt  ru  r2   r3   r   r   r   Útest_edge_dtype  s   zTestHistogramdd.test_edge_dtypec                 C   s`   d}t  dgt j¡}t  ddgt j¡}|| }|| }t||f||fd�\}}t|d dƒ d S )Nl            r   rR   r(   r,   )r   r   )r   r1   Úint64r   r   )r   Úbigrd   rt  re   ru  r2   r3   r   r   r   Útest_large_integers  s   z#TestHistogramdd.test_large_integersc                 C   sÐ   t  g d¢¡}t  g d¢¡}t  ddgddgg¡}t  dgdgd  dgd  dgd  ¡}t  dgdgd  dgd  dgd  ¡}t||f||fd�\}}t||ƒ t||f||fdd	�\}}t|d
ƒ d S )N)r   r)   rP   )r   r:   rP   r*   rG   r(   r·   r,   TrU  g      �?rs  )r   rt  ru  Úrelative_areasrd   re   r2   r3   r   r   r   Útest_density_non_uniform_2d'  s   	þ**
z+TestHistogramdd.test_density_non_uniform_2dc                 C   s\   t  d¡}t  g d¢¡}t||dd�\}}t|f|fdd�\}}t||ƒ t||d ƒ d S )Nr   r9   Tr7   r   )r   rA   r1   r   r   r   )r   r#   r-   r2   r3   Úhist_ddÚedges_ddr   r   r   Útest_density_non_uniform_1dB  s   

z+TestHistogramdd.test_density_non_uniform_1dN)rí   rî   rï   r&   rd  re  r   rh  r‰   rk  rp  rr  r’   rw  rx  r{  r}  r€  r   r   r   r   rT  y  s     %	
rT  )Únumpyr   r   r   r   Únumpy.testingr   r   r   r   r	   r
   r   r   r   r   rá   r   rò   rT  r   r   r   r   Ú<module>   s    0    U