a
    /'aA                     @   s^   d dl Zd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ ddlmZ G dd	 d	ZdS )
    N)assert_allclose)raises)binned_statisticbinned_statistic_2dbinned_statistic_dd)check_random_state   )check_named_resultsc                   @   s`  e Zd Ze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#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dUS )VTestBinnedStatisticc                 C   sd   t d}|jdd| _|jdd| _|jdd| _|jdd| _|jdd| _|jddd | _d S )N&  d   )size)r      g    .A)r   ZuniformxyvXwu)clsrng r   Flib/python3.9/site-packages/scipy/stats/tests/test_binned_statistic.pysetup_class   s    zTestBinnedStatistic.setup_classc                 C   sL   | j }| j}t||ddd\}}}tj|dd\}}t|| t|| d S )Ncount
   binsr   r   r   npZ	histogramr   )selfr   r   count1edges1bccount2edges2r   r   r   test_1d_count   s    
z!TestBinnedStatistic.test_1d_countc                 C   s2   | j }| j}g d}|D ]}t|||dd qd S )N)meanmedianr   sumr   r   )r   r   r   )r    r   r   Z
statistics	statisticr   r   r   test_gh5927!   s
    zTestBinnedStatistic.test_gh5927c                 C   sH   | j }| j}t||ddd\}}}t||tjdd\}}}t|| d S Nstdr   r   )r   r   r   r   r-   r   )r    r   r   stat1r"   r#   stat2r%   r   r   r   test_big_number_std*   s
    z'TestBinnedStatistic.test_big_number_stdc              	   C   sv   | j }| j}|d }tj|d< ttt||ddd ttt||dtdd tj|d< ttt||ddd ||d< d S )Nr   r-   r   r   r   )	r   r   r   infassert_raises
ValueErrorr   Zint64nan)r    r   r   Zorigr   r   r   #test_non_finite_inputs_and_int_bins4   s    

z7TestBinnedStatistic.test_non_finite_inputs_and_int_binsc                 C   s.   | j }| j}t||ddd}d}t|| d S )Nr   r   r   r*   Z	bin_edges	binnumber)r   r   r   r	   )r    r   r   res
attributesr   r   r   test_1d_result_attributesD   s
    z-TestBinnedStatistic.test_1d_result_attributesc                 C   sN   | j }| j}t||ddd\}}}tj|d|d\}}t|| t|| d S )Nr)   r   r   r   Zweightsr   )r    r   r   sum1r"   r#   sum2r%   r   r   r   test_1d_sumL   s    
zTestBinnedStatistic.test_1d_sumc                 C   sR   | j }| j}t||ddd\}}}t||tjdd\}}}t|| t|| d S )Nr'   r   r   )r   r   r   r   r'   r   r    r   r   r.   r"   r#   r/   r%   r   r   r   test_1d_meanV   s    
z TestBinnedStatistic.test_1d_meanc                 C   sR   | j }| j}t||ddd\}}}t||tjdd\}}}t|| t|| d S r,   )r   r   r   r   r-   r   r?   r   r   r   test_1d_std`   s    
zTestBinnedStatistic.test_1d_stdc                 C   sR   | j }| j}t||ddd\}}}t||tjdd\}}}t|| t|| d S )Nminr   r   )r   r   r   r   rB   r   r?   r   r   r   test_1d_minj   s    
zTestBinnedStatistic.test_1d_minc                 C   sR   | j }| j}t||ddd\}}}t||tjdd\}}}t|| t|| d S )Nmaxr   r   )r   r   r   r   rD   r   r?   r   r   r   test_1d_maxt   s    
zTestBinnedStatistic.test_1d_maxc                 C   sR   | j }| j}t||ddd\}}}t||tjdd\}}}t|| t|| d S )Nr(   r   r   )r   r   r   r   r(   r   r?   r   r   r   test_1d_median~   s    
z"TestBinnedStatistic.test_1d_medianc                    sp   | j d d }| jd d }t||ddd\}} tg d} fddt D }t | t|| d S )N   r   r   r   )r      r   r   rH   r   r   r   r   r   r   r   r   r   rH   r   r   r   rH   r   c                    s   g | ]} |k  qS r   r)   .0ir#   r   r   
<listcomp>       z7TestBinnedStatistic.test_1d_bincode.<locals>.<listcomp>)r   r   r   r   arrayuniquer   )r    r   r   r!   r"   bc2bcountr   rM   r   test_1d_bincode   s    
z#TestBinnedStatistic.test_1d_bincodec           
      C   s   t jd t d}t jd}t|d d |d d \}}}t||dgd\}}}t||dd\}}	}t|| t|| t|| t||	 d S )Nr         )r      range)r   randomZseedZaranger   r   )
r    r   datar'   r   _Z
mean_rangeZ
bins_rangeZmean_range2Zbins_range2r   r   r   test_1d_range_keyword   s    
 


z)TestBinnedStatistic.test_1d_range_keywordc                 C   s   | j }| j}| j}t||ddd\}}}t||ddd\}}}	t|||gddd\}
}}t|
d | t|
d | t|| t|| d S )Nr'   r   r   r   r   )r   r   r   r   r   )r    r   r   r   stat1vedges1vbc1vstat1wedges1wbc1wr/   r%   rR   r   r   r   test_1d_multi_values   s    
z(TestBinnedStatistic.test_1d_multi_valuesc                 C   sd   | j }| j}| j}t|||ddd\}}}}tj||dd\}}	}
t|| t||	 t||
 d S )Nr      r   r   r   r   r   r   Zhistogram2dr   )r    r   r   r   r!   binx1biny1r#   r$   binx2biny2r   r   r   test_2d_count   s    


z!TestBinnedStatistic.test_2d_countc                 C   s6   | j }| j}| j}t|||ddd}d}t|| d S )Nr   re   r   )r*   Zx_edgeZy_edger7   )r   r   r   r   r	   )r    r   r   r   r8   r9   r   r   r   test_2d_result_attributes   s    z-TestBinnedStatistic.test_2d_result_attributesc                 C   sf   | j }| j}| j}t|||ddd\}}}}tj||d|d\}}	}
t|| t||	 t||
 d S )Nr)   re   r   r;   rf   )r    r   r   r   r<   rg   rh   r#   r=   ri   rj   r   r   r   test_2d_sum   s    

zTestBinnedStatistic.test_2d_sumc                 C   sj   | j }| j}| j}t|||ddd\}}}}t|||tjdd\}}	}
}t|| t||	 t||
 d S Nr'   re   r   r   r   r   r   r   r'   r   r    r   r   r   r.   rg   rh   r#   r/   ri   rj   r   r   r   test_2d_mean   s    

z TestBinnedStatistic.test_2d_meanc                 C   sj   | j }| j}| j}t|||ddd\}}}}t|||tjdd\}}	}
}t|| t||	 t||
 d S rn   ro   rp   r   r   r   test_2d_mean_unicode   s    


z(TestBinnedStatistic.test_2d_mean_unicodec                 C   sj   | j }| j}| j}t|||ddd\}}}}t|||tjdd\}}	}
}t|| t||	 t||
 d S )Nr-   re   r   )r   r   r   r   r   r-   r   rp   r   r   r   test_2d_std   s    

zTestBinnedStatistic.test_2d_stdc                 C   sj   | j }| j}| j}t|||ddd\}}}}t|||tjdd\}}	}
}t|| t||	 t||
 d S )NrB   re   r   )r   r   r   r   r   rB   r   rp   r   r   r   test_2d_min   s    

zTestBinnedStatistic.test_2d_minc                 C   sj   | j }| j}| j}t|||ddd\}}}}t|||tjdd\}}	}
}t|| t||	 t||
 d S )NrD   re   r   )r   r   r   r   r   rD   r   rp   r   r   r   test_2d_max  s    

zTestBinnedStatistic.test_2d_maxc                 C   sj   | j }| j}| j}t|||ddd\}}}}t|||tjdd\}}	}
}t|| t||	 t||
 d S )Nr(   re   r   )r   r   r   r   r   r(   r   rp   r   r   r   test_2d_median  s    


z"TestBinnedStatistic.test_2d_medianc           
         s   | j d d }| jd d }| jd d }t|||ddd\}}} tg d} fddt D }t | ||  }	t||	 d S )NrG   r   r   r   )            rx   rw      rw   rw      ry   r{   rz   ry   rx   rz   ry   ry   rx      c                    s   g | ]} |k  qS r   rI   rJ   rM   r   r   rN   '  rO   z7TestBinnedStatistic.test_2d_bincode.<locals>.<listcomp>)	r   r   r   r   r   rP   rQ   r   nonzero)
r    r   r   r   r!   rg   rh   rR   rS   	count1adjr   rM   r   test_2d_bincode  s    

z#TestBinnedStatistic.test_2d_bincodec                 C   s   | j }| j}| j}| j}t|||ddd\}}}}t|||ddd\}	}
}}t||||gddd\}}}}t|d | t|d |	 t|| t|| t|| d S )Nr'   r}   r   r   r   )r   r   r   r   r   r   )r    r   r   r   r   r^   Zbinx1vZbiny1vr`   ra   Zbinx1wZbiny1wrc   r/   ri   rj   rR   r   r   r   test_2d_multi_values-  s$    



z(TestBinnedStatistic.test_2d_multi_valuesc                 C   s   | j }| j}| j}t||ddd\}}}t||ddd\}}}t|||dddd\}	}
}}tj||dd	}tj||dd	}||| k  d
8  < ||| k  d
8  < t||d  t||d
  t||d  t||d
  d S )Nr'   rG   r   r   )rG   r   Tr   Zexpand_binnumbersright)Zsider   r   )	r   r   r   r   r   r   ZsearchsortedrD   r   )r    r   r   r   statedgesxbcxedgesybcyr/   Zedgesx2Zedgesy2rR   Zbcx3Zbcy3r   r   r   test_2d_binnumbers_unraveled@  s     z0TestBinnedStatistic.test_2d_binnumbers_unraveledc                 C   sL   | j }| j}t||ddd\}}}tj|dd\}}t|| t|| d S )Nr   r   r   r   r   r   r   Zhistogramddr   )r    r   r   r!   r"   r#   r$   r%   r   r   r   test_dd_countW  s    
z!TestBinnedStatistic.test_dd_countc                 C   s.   | j }| j}t||ddd}d}t|| d S )Nr   r   r   r6   )r   r   r   r	   )r    r   r   r8   r9   r   r   r   test_dd_result_attributesa  s
    z-TestBinnedStatistic.test_dd_result_attributesc                 C   sN   | j }| j}t||ddd\}}}tj|d|d\}}t|| t|| d S )Nr)   r   r   r;   r   )r    r   r   r<   r"   r#   r=   r%   r   r   r   test_dd_sumi  s    
zTestBinnedStatistic.test_dd_sumc                 C   sR   | j }| j}t||ddd\}}}t||tjdd\}}}t|| t|| d S )Nr'   r   r   )r   r   r   r   r'   r   r    r   r   r.   r"   r#   r/   r%   r   r   r   test_dd_means  s    
z TestBinnedStatistic.test_dd_meanc                 C   sR   | j }| j}t||ddd\}}}t||tjdd\}}}t|| t|| d S )Nr-   r   r   )r   r   r   r   r-   r   r   r   r   r   test_dd_std}  s    
zTestBinnedStatistic.test_dd_stdc                 C   sR   | j }| j}t||ddd\}}}t||tjdd\}}}t|| t|| d S )NrB   r   r   )r   r   r   r   rB   r   r   r   r   r   test_dd_min  s    
zTestBinnedStatistic.test_dd_minc                 C   sR   | j }| j}t||ddd\}}}t||tjdd\}}}t|| t|| d S )NrD   r   r   )r   r   r   r   rD   r   r   r   r   r   test_dd_max  s    
zTestBinnedStatistic.test_dd_maxc                 C   sR   | j }| j}t||ddd\}}}t||tjdd\}}}t|| t|| d S )Nr(   r   r   )r   r   r   r   r(   r   r   r   r   r   test_dd_median  s    
z"TestBinnedStatistic.test_dd_medianc                    s|   | j d d }| jd d }t||ddd\}} tg d} fddt D }t | ||  }t|| d S )NrG   r   r   r   )?   !   V   S   X   C   9   r   *   )   R   r   \       $   [   +   W   Q   r   c                    s   g | ]} |k  qS r   rI   rJ   rM   r   r   rN     rO   z7TestBinnedStatistic.test_dd_bincode.<locals>.<listcomp>)r   r   r   r   rP   rQ   r   r~   )r    r   r   r!   r"   rR   rS   r   r   rM   r   test_dd_bincode  s    
z#TestBinnedStatistic.test_dd_bincodec                 C   s   | j }| j}| j}dddddddtjfD ]}t|||dd	\}}}t|||dd	\}}	}
t|||g|dd	\}}}t|d
 | t|d | t|| t|	| t|| q(d S )Nr   r)   r'   r-   rB   rD   r(   r}   r   r   r   )r   r   r   r   r-   r   r   )r    r   r   r   r   r^   r_   r`   ra   rb   rc   r/   r%   rR   r   r   r   test_dd_multi_values  s    

z(TestBinnedStatistic.test_dd_multi_valuesc                 C   s   | j }| j}t|d d df |ddd\}}}t|d d df |ddd\}}}t|d d df |ddd\}}}	t||dd	d
d\}
}}t||d  t||d  t|	|d  d S )Nr   r'   rV   r   r   rG   rH   r   )rV   rG   r   Tr   )r   r   r   r   r   )r    r   r   r   r   r   r   r   ZedgeszZbczr/   r%   rR   r   r   r   test_dd_binnumbers_unraveled  s    """
z0TestBinnedStatistic.test_dd_binnumbers_unraveledc                 C   sj   t jd}t jd}t ddd}|||f}t||d|d}|j}t||d|d}|j}t|| d S )	N'  r   r   r   r   r   r'   r   )Zbinned_statistic_result)r   rZ   linspacer   r*   r   )r    r   r   r   resultr   r/   r   r   r   test_dd_binned_statistic_result  s    
z3TestBinnedStatistic.test_dd_binned_statistic_resultc                 C   s|   t jd}t jd}t ddd}t |d}|||f}ttdd  t||d|d	 W d    n1 sn0    Y  d S )
Nr   r   r   r   r   zdifference is numerically 0matchr'   r   )r   rZ   r   appendr2   r3   r   )r    r   r   r   r   r   r   test_dd_zero_dedges  s    
z'TestBinnedStatistic.test_dd_zero_dedgesc                 C   s6  t tdd* t| jg| jddggd W d    n1 s<0    Y  t tdd4 t| j| jg| jddgddggd W d    n1 s0    Y  t tdd4 t| j| jg| jddgddggd W d    n1 s0    Y  t tdd. t| j| jg| jddggd W d    n1 s(0    Y  d S )	NzIn range, start must be <= stopr   r   r   rX   z.In dimension 1 of range, start must be <= stopz.In dimension 2 of range, start must be <= stopz(range given for 1 dimensions; 2 required)r2   r3   r   r   r   r   )r    r   r   r   test_dd_range_errors  s6    $$$z(TestBinnedStatistic.test_dd_range_errorsc                 C   sH   t jddgt jd}t|d ddd\}}}t|t jg dt jd d S )Nr   ghw?)Zdtyper   re   r   )r   r   r   r   r   )r   rP   Zfloat32r   r   Zfloat64)r    r   r   r\   r   r   r   test_binned_statistic_float32  s    z1TestBinnedStatistic.test_binned_statistic_float32N).__name__
__module____qualname__classmethodr   r&   r+   r0   r5   r:   r>   r@   rA   rC   rE   rF   rT   r]   rd   rk   rl   rm   rq   rr   rs   rt   ru   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
      sV   
	
	






	






	r
   )Znumpyr   Znumpy.testingr   Zpytestr   r2   Zscipy.statsr   r   r   Zscipy._lib._utilr   Zcommon_testsr	   r
   r   r   r   r   <module>   s   