U
    ¸mœdÄ~  ã                   @   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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_warnings)Úrequires_memoryc                   @   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!e"d?d@�e#j$j%dAdB„ ƒƒZ&dCS )DÚTestHistogramc                 C   s   d S ©N© ©Úselfr   r   úX/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numpy/lib/tests/test_histograms.pyÚsetup_method   s    zTestHistogram.setup_methodc                 C   s   d S r   r   r   r   r   r   Úteardown_method   s    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   ©Zaxisé
   )ÚnpÚrandomÚrandr   r   ÚsumÚlinspacer   )r   ÚnÚvÚaÚbr   r   r   Útest_simple   s    zTestHistogram.test_simplec                 C   s†   t ddddg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   ©Ú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¡}dddddg}t||dd�\}}t|d	ƒ t	t  |t  |¡ ¡dƒ t||d
d�\}}t|ddddgƒ t  d¡}ddddt j
g}t||dd�\}}t|d	d	d	dgƒ t jddddgddt j
gdd�\}}t	|ddgƒ d S )Nr   T©Údensityr%   r   r   r'   é   çš™™™™™¹?Fr&   r(   ç        ç      à?ç      ø?ç      Ð?)r   r   r   r   r   Údiffr   Úaranger   r   Úinf)	r   r    r!   r"   r#   Zarear*   ÚcountsZ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   r9   r   é	   ©Úranger%   T©rC   r5   é   ©Údecimal©rC   Úweightsr5   é   ©r*   rC   rI   éÿÿÿÿ)r   r=   r   r   r   r   r<   )r   r"   r1   r#   Úwr   r   r   Útest_outliersJ   s    zTestHistogram.test_outliersc              	   C   sN   t  d¡d }t  d¡d }ttdƒ� t|ddg|dd�\}}W 5 Q R X d S )	Nr   r9   é   zsame shape asr%   rA   TrH   )r   r=   r   r-   r   )r   r"   rM   r1   r#   r   r   r   Útest_arr_weights_mismatchb   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   r9   Tr4   ©rI   )r   r=   r   r   Z
issubdtypeÚdtypeÚintegerZfloatingÚonesÚintÚfloat)r   r"   r1   r#   r   r   r   Ú	test_typei   s    zTestHistogram.test_typec                 C   sT   t jdddgt jd�}t jdddgt jd�}t j||dd	�\}}}t| ¡ d
ƒ d S )Ng2V›ÿEq@g“áx>fQÀg-³ÅVT5@©rR   g!çý°�³@gö·àS�±@g§’ ^z·@r   r)   ç      @)r   r.   Zfloat32Zhistogram2dr   r   )r   ÚxÚyZcounts_histZxedgesZyedgesr   r   r   Útest_f32_roundingx   s    zTestHistogram.test_f32_roundingc              	   C   s|   t jdddgt jd�}t  |¡\}}tƒ �H}| td¡}t  dddg¡\}}tt|ƒdƒ t	||ƒ t	||ƒ W 5 Q R X d S )Nr%   r   rX   zConverting input from .*TF)
r   r.   Zuint8r   r   ÚrecordÚRuntimeWarningr   Úlenr   )r   r"   Zint_histZ	int_edgesÚsupZrecr/   r0   r   r   r   Útest_bool_conversion   s    
z"TestHistogram.test_bool_conversionc                 C   s‚  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ddddgdddddgd
�\}}t
|ddddgƒ tddddgdddddgdd�\}}t|t  ddddg¡d d d ƒ tt  	d¡dddddgdddddddddg	dd�\}}t|ddddgƒ d S )Nr   é   Tr4   rQ   ©rI   r5   r   r   rO   ©r*   rI   r%   r&   r(   r'   )r*   rI   r5   g      $@rY   rA   r6   gš™™™™™É?r7   g333333³?)r   r   r   rT   r   r	   r   ÚconcatenateÚzerosr=   r   r.   r   )r   r!   rM   r"   r#   ÚnaÚnbÚwaÚwbZnwaZnwbr   r   r   Útest_weights�   s8    

"
  
 ÿ
$  þ
zTestHistogram.test_weightsc                 C   sH  t  dddg¡}t  dddg¡dt  dddg¡  }t|ddd	g|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  dddg¡}t  |dƒ|dƒ|d	ƒg¡}t|ddd	g|d
�\}}t||dƒ|dƒgƒ t|ddd	g|d�\}}t||dƒ|dƒgƒ d S )NçÍÌÌÌÌÌô?ç      @çffffff@r%   rL   r&   y              ð?r   r'   rd   rK   )ÚDecimalrb   )r   r.   r   r	   rG   ro   )r   ÚvaluesrI   ri   rj   ro   r   r   r   Útest_exotic_weights­   s    $&&z!TestHistogram.test_exotic_weightsc                 C   s8   t  dddg¡}t j|ddgdd� t|dddgƒ d S )Nrl   rm   rn   éöÿÿÿr   r   )rC   r*   )r   r.   r   r	   )r   rp   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   r.   ©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 )Nr8   r+   r   ©Únumrb   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 )Nr8   r+   r   rw   r;   ç      è?rB   )r   r   r   r
   r-   Únanr>   rz   r   r   r   Útest_finite_rangeÝ   s    zTestHistogram.test_finite_rangec              	   C   s<   t jdddd�}ttdƒ� t j|ddgd� W 5 Q R X d S )	Nr8   r+   r   rw   zmax must be larger thanr7   g{®Gáz„?rB   )r   r   r   r-   r   rz   r   r   r   Útest_invalid_rangeä   s    z TestHistogram.test_invalid_rangec           
   	   C   sˆ   t  dddddddg¡}t j|dd	d
�\}}|dk}|d d… | }|dd … | }t|||ƒD ]"\}}}	t||kƒ t||	k ƒ q`d S )NiQ  i”  iã  i&  iï  i  iÜ  ih   )r&   iè  ©r*   rC   r   rL   r%   )r   r.   r   Úzipr   )
r   Úarrr/   r0   ÚmaskZ
left_edgesZright_edgesrZ   ÚleftÚrightr   r   r   Útest_bin_edge_casesê   s    z!TestHistogram.test_bin_edge_casesc                 C   sB   t  dddddddddg	¡}t j|ddd	�\}}t|d
 dƒ d S )Nr8   r+   r,   rY   ç      @ç      @é   ©ç      à¿rb   r�   rL   r%   )r   r.   r   r   )r   rƒ   r/   r0   r   r   r   Útest_last_bin_inclusive_rangeõ   s    z+TestHistogram.test_last_bin_inclusive_rangec              	   C   sN   t jdddd�}t  ddgddgg¡}ttdƒ� t j||d	� W 5 Q R X d S )
Nr8   r+   r   rw   r   r9   g333333ã?z
must be 1dr)   )r   r   r.   r   r-   r   )r   r{   r*   r   r   r   Útest_bin_array_dimsú   s    z!TestHistogram.test_bin_array_dimsc              	   C   sJ   t  dg¡}t jdddgdd�}ttƒ� t j||d�\}}W 5 Q R X d S )Nr&   r%   r'   Zuint64rX   r)   )r   r.   r
   r-   r   )r   rƒ   r*   r/   r0   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   s   g | ]}t  d ¡‘qS ©gš™™™™™Ù?©r   r.   ©Ú.0Úir   r   r   Ú
<listcomp>  s     z9TestHistogram.test_object_array_of_0d.<locals>.<listcomp>r   c                 S   s   g | ]}t  d ¡‘qS r�   r‘   r’   r   r   r   r•     s     c                 S   s   g | ]}t  d ¡‘qS ©r9   r‘   r’   r   r   r   r•     s     g	     à?c                 S   s   g | ]}t  d ¡‘qS r–   r‘   r’   r   r   r   r•     s     r9   )r
   r-   r   rC   r   r>   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 5 Q R X d S )Nr   r%   Úautor)   ©r   r%   r�   r&   )r   r.   r~   r   Úfilterr^   r
   r-   r   r   r   )r   Zone_nanZall_nanr`   r1   r#   r   r   r   Útest_some_nan_values  s    
z"TestHistogram.test_some_nan_valuesc                 C   sæ   t  dd¡}t  ddddddddd	g	¡}t  ddd
d	g¡}|| }|| }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ÚDr   r%   r&   r'   rb   r   é   é   ztimedelta64[D]r)   )r   Z
datetime64r.   rR   r   Úastyper   rU   )r   ÚbeginÚoffsetsr*   ÚdatesZ	date_binsÚtdZd_countZd_edgeZt_countZt_edgeZi_countZ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 )NrJ   r%   r&   r(   rX   r)   r   )r   rR   Úitemsizer.   r   r   )r   rR   Úexponentrƒ   r/   r2   r   r   r   Údo_signed_overflow_boundsF  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ÚshortZintcÚint_Zlonglongr   r   r   r   Útest_signed_overflow_boundsM  s
    z)TestHistogram.test_signed_overflow_boundsc                 C   st   t  |¡j}t  dg|¡}t  d| dg|¡}| |¡d dkrDd S t j|d|d�\}}t|dgƒ t|j|ƒ d S )Nr+   r,   r   r%   r�   ©r   ZfinfoÚepsr.   rŸ   r   r   rR   ©r   Úfloat_smallÚfloat_larger­   rƒ   rC   ÚcountZx_locr   r   r   Údo_precision_lower_boundT  s    z&TestHistogram.do_precision_lower_boundc                 C   st   t  |¡j}t  dg|¡}t  dd| g|¡}| |¡d dkrDd S t j|d|d�\}}t|dgƒ t|j|ƒ d S )Nr+   r8   rL   r%   r�   r¬   r®   r   r   r   Údo_precision_upper_bounde  s    z&TestHistogram.do_precision_upper_boundc                 C   s   |   ||¡ |  ||¡ d S r   )r²   r³   )r   r¯   r°   r   r   r   Údo_precisionv  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   ZhalfZsingleÚdoubleZ
longdoubler   r   r   r   Útest_precisionz  s    zTestHistogram.test_precisionc                 C   s®   t ddddgddgƒ\}}tddddgddgƒ}t||ƒ t dddddddd	d
g	¡}t |ddd�\}}t|ddd�}t||ƒ t |ddd�\}}t|ddd�}t||ƒ d S )Nr%   r&   r'   r(   r8   r+   r,   rY   rˆ   r‰   rŠ   r‹   r�   r˜   r™   )r   r   r   r   r.   )r   r/   r2   r0   rƒ   r   r   r   Útest_histogram_bin_edgesƒ  s    

z&TestHistogram.test_histogram_bin_edgesg    _ B)Z
free_bytesc                 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   rf   r=   r   r   Útype)r   r¸   ZxbinsZybinsZzbinsr/   r   r   r   Útest_big_arrays‘  s    
zTestHistogram.test_big_arraysN)'Ú__name__Ú
__module__Ú__qualname__r   r   r$   r3   r@   rN   rP   rW   r\   ra   rk   rq   rs   rv   r|   r   r€   r‡   r�   rŽ   r�   r—   r›   r¤   r§   r«   r²   r³   r´   r¶   r·   r   ÚpytestÚmarkZslowrº   r   r   r   r   r      sD   
 	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dddddddg¡dd„ ƒZdd„ Zd S )!ÚTestHistogramOptimBinNumsz]
    Provide test coverage when using provided estimators for optimal number of
    bins
    c                 C   sX   ddddddddg}|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%   rt   )r   Úestimator_listÚ	estimatorr"   r#   r   r   r   rv   ¢  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 ]2\}}t ||¡\}	}
tt|	ƒ|d ||¡d� q”qJd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(   rJ   rž   r&   ©rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   r˜   rÇ   é   r   é   é   rA   é   é#   é   éG   r�   ©é2   iô  iˆ  rr   rL   rb   r%   r'   ú*For the {0} estimator with datasize of {1}©Úerr_msgN)Úitemsr   r   re   r   r   r_   Úformat)r   Ú
basic_testÚtestlenÚexpectedResultsÚx1Úx2rZ   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 ]N\}}t |¡}|  ¡ D ]2\}}t ||¡\}}tt|ƒ|d ||¡d� q^qDd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   r=   r   r   r_   rØ   )	r   Z	small_datrÚ   rÛ   ZtestdatrÉ   Zexpbinsr"   r#   r   r   r   Ú
test_smallÅ  s0      ÿ  ÿ  ÿü
 ÿz$TestHistogramOptimBinNums.test_smallc                 C   s.   ddddg}|D ]}t ttdddg|ƒ qdS )	zS
        Check a Value Error is thrown when an unknown string is passed in
        ZmadZfreemanZ
histogramsZIQRr%   r&   r'   N)r
   r-   r   )r   Z
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 ]0\}}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   rT   r×   r   r   r_   rØ   )r   Znovar_datasetZ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.
        iè  r   Nr'   r   éüÿÿÿr˜   rÌ   rÁ   rÄ   )r   rT   r   r   r   r.   )r   Zlim_var_dataZ
edges_autoZedges_fdZ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.
        rr   r   rÓ   i’ÿÿÿéœÿÿÿrb   é   rO   r6   )rÁ   rÂ   rÅ   rÇ   N)r   r   Úhstackr×   r   r   r_   )r   ZxcenterZoutlier_datasetZoutlier_resultdictrÉ   rÞ   r"   r#   r   r   r   Útest_outlier  s    z&TestHistogramOptimBinNums.test_outlierc                    sN   dd„ ‰ ‡ fdd„t dƒD ƒ}ttj|dd�d ƒ}t|d	d
ddg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   ZRandomStateÚnormalr_   r   )Úseedrê   ÚrngrZ   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ê   )rî   rì   r   r   r•     s     zLTestHistogramOptimBinNums.test_scott_vs_stone.<locals>.<listcomp>.<listcomp>r   r   r(   )ÚstartÚstoprx   )r   Z	geomspaceÚroundrŸ   rU   )r“   ©rî   )rì   r   r•     s   ÿzATestHistogramOptimBinNums.test_scott_vs_stone.<locals>.<listcomp>r   r   r   r9   g333333Ã?g
×£p=
·?g{®Gáz´?g¸…ëQ¸ž?r&   rF   N)rC   Úabsr   Zmeanr   )r   ÚllÚavgr   rò   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 ]¢\}}t dd|d d ¡}t dd|d d ¡}t dd|¡}t |||f¡}|  ¡ D ]F\}}	tj||dd�\}
}d |¡}|d |¡7 }tt|
ƒ|	|d� q˜q>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.
        rJ   rE   rÐ   )rÁ   rÂ   rÃ   rÄ   r˜   rÇ   rË   é    r�   éP   é!   éE   é   rÒ   rr   rL   rb   r&   r%   r   r'   rä   iÎÿÿÿ)iìÿÿÿr�   rB   zFor the {0} estimatorz with datasize of {0}rÕ   N)r×   r   r   ræ   r   rØ   r   r_   )r   rÙ   rÚ   rÛ   rÜ   rÝ   Zx3rZ   rÉ   rÞ   r"   r#   Úmsgr   r   r   Útest_simple_range%  s4    
  ÿ  ÿ  ÿû	
z+TestHistogramOptimBinNums.test_simple_ranger*   r˜   rÁ   rÅ   rÂ   rÇ   rÃ   rÄ   c                 C   sZ   t jdddgt jd�}t j||d�\}}t j| t j¡|d�\}}t||ƒ t||ƒ d S )Néþÿÿÿr   é   rX   r)   )r   r.   Zint8r   rŸ   Zint32r   )r   r*   r"   r/   r0   Zhist32Zedges32r   r   r   Útest_signed_integer_dataD  s
    
z2TestHistogramOptimBinNums.test_signed_integer_datac              	   C   s:   dddddg}|D ]"}t ttdddg|dddgd	� qd
S )z=
        Check that weighted data raises a TypeError
        rÁ   rÂ   rÃ   rÄ   r˜   r%   r&   r'   rQ   N)r
   ry   r   )r   rÈ   rÉ   r   r   r   Útest_simple_weightedN  s     ÿz.TestHistogramOptimBinNums.test_simple_weightedN)r»   r¼   r½   Ú__doc__rv   r$   rß   rà   rá   rã   rç   rö   rý   r¾   r¿   Zparametrizer   r  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   st  t  dddgdddgdddgdddgdddgdddgg¡}t|dddgdd	gdd	ggd
�\}}t  dddgdddgdddggdddgdddgdddggg¡}t||ƒ dddgdddd	gdddd	gg}t||dd�\}}tt  ||d k¡ƒ t|dddgdd	gddggdd�\}}t  ddddgddddgddddggddddgddddgddddg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 )NrŒ   r9   r:   rm   )r&   r'   r'   rL   r%   r   r'   rB   rþ   r&   T©r*   r5   g      (@)r&   r'   r(   r(   rD   g      @c                 S   s   g | ]}t  |¡‘qS r   )r   Zsqueeze)r“   r[   r   r   r   r•   q  s     z/TestHistogramdd.test_simple.<locals>.<listcomp>r   )r(   r'   r&   r�   )rb   rb   rb   r+   rb   )r   r.   r   r   r   Úallr	   Úsplitrf   ÚlistrC   r=   )r   rZ   ÚHr0   ZanswerZedÚzÚZr   r   r   r$   Z  sN      ÿÿ
ÿ
 þ
$ ÿ  ÿ
ý

&&zTestHistogramdd.test_simplec                 C   s<   d}t j dd¡}|D ] }t||ƒ\}}t|j|kƒ qd S )N))rb   r(   r6   )r6   r(   rb   )rb   r6   r(   )r(   r6   rb   )r6   rb   r(   )r(   rb   r6   r   r'   ©r   r   r   r   r   Úshape©r   r*   Úrr#   r  r0   r   r   r   Útest_shape_3d  s
    zTestHistogramdd.test_shape_3dc                 C   s<   d}t j dd¡}|D ] }t||ƒ\}}t|j|kƒ qd S )N))rž   r(   rb   r6   )r(   rb   rž   r6   )rb   r6   r(   rž   )rž   r6   rb   r(   )rb   rž   r6   r(   )r(   r6   rž   rb   )r6   rb   rž   r(   )rž   rb   r(   r6   )rž   r(   r6   rb   )r6   r(   rž   rb   )r6   rž   rb   r(   )r(   r6   rb   rž   )r(   rž   rb   r6   )rb   r(   r6   rž   )rb   rž   r(   r6   )r6   rž   r(   rb   )r6   rb   r(   rž   )r(   rž   r6   rb   )r(   rb   r6   rž   )rž   r6   r(   rb   )rb   r(   rž   r6   )rb   r6   rž   r(   )r6   r(   rb   rž   )rž   rb   r6   r(   r   r(   r  r  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&   Tr4   rQ   rc   )r   r   r   r   rT   r   rU   )r   r!   r/   r0   Zn_histZw_histr   r   r   rk   –  s    

zTestHistogramdd.test_weightsc                 C   s:   t  dt¡}t|dd�\}}t|d t  dddg¡ƒ d S )N)r   r&   r&   r)   r   rŒ   r8   r9   )r   rf   rU   r   r   r.   )r   rZ   r/   r0   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)   r8   r&   )r&   r&   r&   )r   r   r   r.   rf   ru   r   r   r   rv   ¦  s     zTestHistogramdd.test_emptyc                 C   sŽ   t  d¡ dd¡}ttt j|ddddgd� ttt j|ddddgd� ttt j|dddddd	d
ggd� tt j|dddddd	dggd�ƒ d S )NrJ   r&   r(   rL   rb   r)   r%   g®Gáz®ï?r'   éýÿÿÿ)r   r=   Úreshaper
   r-   r   r   )r   rZ   r   r   r   Útest_bins_errors¬  s       ÿz TestHistogramdd.test_bins_errorsc              	   C   sÎ   t jdd��¸ 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 5 Q R X d S )NÚignore)Úinvalidr6   r'   r&   r%   r   r   r)   rL   )r   Zerrstater=   r  r.   r   r>   r   )r   rZ   Úexpectedr1   r2   r   r   r   Útest_inf_edges¶  s     
$
"zTestHistogramdd.test_inf_edgesc                 C   s  dg}dddgg}t ||d�\}}t|d dkƒ t|d dkƒ dg}dddgg}t ||d�\}}t|d dkƒ t|d dkƒ dg}dddgg}t ||d�\}}t|d dkƒ t|d dkƒ d	g}dddgg}t ||d�\}}t|d dkƒ t|d dkƒ d S )
NgÐG»ÿÿÿï?r8   r9   r+   r)   r   r%   g8ß   ð?gq¬‹Ûh ð?)r   r   )r   rZ   r*   r/   Ú_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'   r8   r+   r;   r}   r9   rB   )r   r   r   r
   r-   r>   r~   rz   r   r   r   r   Ù  s    ÿÿz!TestHistogramdd.test_finite_rangec                 C   sl   t  dddg¡}t  dddg¡}t  dddg¡}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+   N©r   r.   r   r   )r   rZ   r[   Úx_edgesÚy_edgesr/   r0   Zhist_expectedr   r   r   Útest_equal_edgesá  s    þz TestHistogramdd.test_equal_edgesc                 C   sr   t  dddg¡}|d }t  ddddg¡}|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�   rb   rE   r)   r%   N)r   r.   r   r   rR   )r   rZ   r[   r  r  r/   r0   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   rL   r%   r)   )r   r   )r   r.   Zint64r   r   )r   ÚbigrZ   r  r[   r  r/   r0   r   r   r   Útest_large_integersú  s    z#TestHistogramdd.test_large_integersc                 C   sÔ   t  dddg¡}t  dddg¡}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 )Nr   r&   rJ   r6   r'   rA   r%   rž   r)   Tr  g      �?r  )r   r  r  Zrelative_areasrZ   r[   r/   r0   r   r   r   Útest_density_non_uniform_2d  s    	þ**
z+TestHistogramdd.test_density_non_uniform_2dc                 C   sb   t  d¡}t  dddddg¡}t||dd�\}}t|f|fdd�\}}t||ƒ t||d ƒ d S )Nr   r   r%   r'   r6   Tr4   )r   r=   r.   r   r   r   )r   r!   r*   r/   r0   Zhist_ddZedges_ddr   r   r   Útest_density_non_uniform_1d!  s    

z+TestHistogramdd.test_density_non_uniform_1dN)r»   r¼   r½   r$   r  r  rk   r  rv   r  r  r  r   r  r  r!  r"  r#  r   r   r   r   r  X  s   %	
r  )Únumpyr   Znumpy.lib.histogramsr   r   r   Znumpy.testingr   r   r   r   r	   r
   r   r   r   r   Znumpy.testing._private.utilsr   r¾   r   rÀ   r  r   r   r   r   Ú<module>   s   0    =