a
    ߙfb*                  	   @   s  d dl Z d dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZ d"ddZd#dd	Ze jd
d$ddZe jd
d%ddZg dZeredg7 Ze jdeedddg d&ddZe jded'ddZd(ddZe jd
dd Zdd Zd)d d!ZdS )*    N)assert_allclose)	histogramcalculate_bin_edgesscott_bin_widthfreedman_bin_widthknuth_bin_width)	HAS_SCIPY'  c                 C   s   t j|}|| }t|}t|dt | | d   t|dd\}}t|dt | | d   tt	 t|d W d    n1 s0    Y  d S )Ng      @UUUUUU?TZreturn_bins   
   )
nprandomdefault_rngstandard_normalr   r   Zstdpytestraises
ValueError)NrseedrngXdeltabins r   Alib/python3.9/site-packages/astropy/stats/tests/test_histogram.pytest_scott_bin_width   s    
r   c           
   	   C   s  t j|}|| }t |ddg\}}t|}t|d||  | d   t|dd\}}t|d||  | d   tt	 t|d W d    n1 s0    Y  g dd	gd
  g d }tt	`}	tj
tdd t|dd W d    n1 s0    Y  dt|	jv s$J W d    n1 s:0    Y  t jg dd
 d	g g d t jd}|d9 }t|dd\}}t|d d S )N   K   r   r
   Tr   r   )   r         d   )         zdivide by zero encountered)matchzPlease use another bin method)ZdtypegTqs*>g6

>)r   r   r   r   Z
percentiler   r   r   r   r   ZwarnsRuntimeWarningstrvalueZasarrayZfloat32)
r   r   r   r   Zv25Zv75r   r   Ztest_xer   r   r   test_freedman_bin_width   s$    
,,4&r-   znot HAS_SCIPYc                 C   s   t j|}|| }t|dd\}}tt|d t|}||ksHJ tt	 t|d W d    n1 sv0    Y  d S )NTr   :   r   )
r   r   r   r   r   r   lenr   r   r   )r   r   r   r   Zdxr   Zdx2r   r   r   test_knuth_bin_width7   s    
r0     c                 C   sT   t j|}|| }t|d\}}| t|ks8J t|t|d ksPJ d S )Nknuthr!   r   r   r   r   r   sumr/   )r   r   r   xcountsr   r   r   r   test_knuth_histogramF   s
    
r7   )   scottfreedmanblocksr2   bin_typer%      c                 C   sT   t j|}||}t|| \}}| t|ks8J t|t|d ksPJ d S )Nr!   r3   )r<   r   r   r   r5   r6   r   r   r   r   test_histogramU   s
    
r?   c                 C   sT   t j|}||}d}t|| |d}| |d ks<J | |d ksPJ d S )Ng?g?ranger!   r   )r   r   r   r   r   maxmin)r<   r   r   r   r5   rB   r   r   r   r   test_histogram_rangea   s    
rE   c                 C   sJ   t j|}|| }d}t ddd}t|||d}t||ksFJ d S )Nr@   r=   r%   r>   rA   )r   r   r   r   linspacer   all)r   r   r   r5   rB   Z
input_binsr   r   r   r   #test_histogram_range_with_bins_listm   s    
rH   c                  C   sF   t jd} | d}t|dd\}}t|g d t|g d d S )Nr   r$   r2   r   )	r   r!                  r      )
zgМށghgHh=g:y	ٿgJȋu??g3m?gW\?g-,rWX?Ӧf @r   r   r   r   r   r   r   r   r6   r   r   r   r   test_histogram_output_knuthy   s
    
rT   c                  C   s   t jd} | d}t|dd\}}t|g d t|g d t|dd\}}t|g d t|g d	 t|d
d\}}t|g d t|g ddd t|dd\}}t|ddg t|g d d S )Nr   r$   r   rI   )
r   r      rN   rN         rO   	   rO   )rP   gaF>FgMZg8mgGg-\Ŀg(˔^?g24"A?g)8@Y0?gI?rQ   r9   )r   rN      r   rW   rW   )rP   g7gv}g9eÿgvNkv?gϱ?g=9 @r:   )r      rW   rM      rN   rJ   r#   )	rP   gˮg帍g/]Rg*-ć?g4~?gAoG?gZ4:9?g(V2@gH׊>)Zrtolr;   r"   a   )rP   gT!rQ   rR   rS   r   r   r   test_histogram_output   s     

r]   c              	   C   s   t j|}|| }dD ]<}tt t|||d W d    q1 sL0    Y  qtt t|dd W d    n1 s0    Y  d S )N)r9   r:   r;   )ZweightsZbad_argumentrI   )	r   r   r   r   r   r   NotImplementedErrorr   r   )r   r   r   r5   r   r   r   r   test_histogram_badargs   s    
.r_   )r	   r   )r	   r   )r	   r   )r1   r   )r1   r   )r1   r   )r1   r   )r1   r   )r   Znumpyr   Znumpy.testingr   Zastropy.statsr   r   r   r   r   Z"astropy.utils.compat.optional_depsr   r   r-   ZmarkZskipifr0   r7   Z_bin_types_to_testZparametrizerF   r?   rE   rH   rT   r]   r_   r   r   r   r   <module>   s0   









