U
    »mœd‚I  ã                   @   sf   d dl Zd dlmZ d dl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-dUdV„ Z.dWdX„ Z/e0j1 2dYe3j4e3j5g¡e0j1 2dZe3j6e3j7e3j8e3j9e3j:e3j;d[d\d]„ d^d]„ g	¡d_d`„ ƒƒZ<daS )bÚ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   ÚuniformÚxÚyÚvÚXÚwÚu)ÚclsÚrng© r   ú`/home/sam/Atlas/atlas_env/lib/python3.8/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   ÚnpÚ	histogramr   )Úselfr   r   Úcount1Úedges1ÚbcÚcount2Úedges2r   r   r   Útest_1d_count   s    
z!TestBinnedStatistic.test_1d_countc                 C   s6   | j }| j}ddddg}|D ]}t|||dd� qd S )NÚmeanÚmedianr   Úsumr   r   )r   r   r   )r#   r   r   Ú
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!   r1   r   ©r#   r   r   Ústat1r%   r&   Ústat2r(   r   r   r   Útest_big_number_std+   s
    z'TestBinnedStatistic.test_big_number_stdc                 C   s\   | j }| j}tt||ddd�ƒ t||ddd�\}}}t||tjdd�\}}}t||ƒ d S )Nr   iè  r   r1   )r   r   Úprintr   r!   r1   r   r2   r   r   r   Útest_empty_bins_std5   s    z'TestBinnedStatistic.test_empty_bins_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   r1   r   r   r   )	r   r   r!   ÚinfÚassert_raisesÚ
ValueErrorr   Zint64Únan)r#   r   r   Úorigr   r   r   Ú#test_non_finite_inputs_and_int_bins?   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_attributesO   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   Úweightsr    )r#   r   r   Úsum1r%   r&   Úsum2r(   r   r   r   Útest_1d_sumW   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   r3   r%   r&   r4   r(   r   r   r   Útest_1d_meana   s    
z TestBinnedStatistic.test_1d_meanc                 C   sR   | j }| j}t||ddd�\}}}t||tjdd�\}}}t||ƒ t||ƒ d S r0   )r   r   r   r!   r1   r   rH   r   r   r   Útest_1d_stdk   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!   rK   r   rH   r   r   r   Útest_1d_minu   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!   rM   r   rH   r   r   r   Útest_1d_max   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   rH   r   r   r   Útest_1d_median‰   s    
z"TestBinnedStatistic.test_1d_medianc                    s”   | j d d… }| jd d… }t||ddd�\}}‰ t ddddddddddddddddddddg¡}‡ fdd„t ˆ ¡D ƒ}tˆ |ƒ t||ƒ d S )	Né   r   r   r   é   r   c                    s   g | ]}ˆ |k  ¡ ‘qS r   ©r,   ©Ú.0Úi©r&   r   r   Ú
<listcomp>›   s     z7TestBinnedStatistic.test_1d_bincode.<locals>.<listcomp>)r   r   r   r!   ÚarrayÚuniquer   )r#   r   r   r$   r%   Úbc2Úbcountr   rV   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!   ÚrandomÚ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Úbc1wr4   r(   rZ   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   rn   r   )r.   Zx_edgeZy_edger?   )r   r   r   r   r	   )r#   r   r   r   r@   rA   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,   rn   r   rC   ro   )r#   r   r   r   rE   rp   rq   r&   rF   rr   rs   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*   rn   r   ©r   r   r   r   r!   r*   r   ©r#   r   r   r   r3   rp   rq   r&   r4   rr   rs   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 rw   rx   ry   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 )Nr1   rn   r   )r   r   r   r   r!   r1   r   ry   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 )NrK   rn   r   )r   r   r   r   r!   rK   r   ry   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 )NrM   rn   r   )r   r   r   r   r!   rM   r   ry   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+   rn   r   )r   r   r   r   r!   r+   r   ry   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 ddddddd	ddd
dd	ddddddddg¡}‡ fdd„t ˆ ¡D ƒ}tˆ |ƒ || ¡  }	t||	ƒ d S )NrP   r   r   r   é   é   é   é   é   é   é   c                    s   g | ]}ˆ |k  ¡ ‘qS r   rR   rS   rV   r   r   rW   2  s     z7TestBinnedStatistic.test_2d_bincode.<locals>.<listcomp>)	r   r   r   r   r!   rX   rY   r   Únonzero)
r#   r   r   r   r$   rp   rq   rZ   r[   Ú	count1adjr   rV   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   rg   Zbinx1vZbiny1vri   rj   Zbinx1wZbiny1wrl   r4   rr   rs   rZ   r   r   r   Útest_2d_multi_values8  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*   rP   r   r   )rP   r   T©r   Zexpand_binnumbersÚright)Zsider   r   )	r   r   r   r   r   r!   ZsearchsortedrM   r   )r#   r   r   r   ÚstatÚedgesxÚbcxÚedgesyÚbcyr4   Zedgesx2Zedgesy2rZ   Zbcx3Zbcy3r   r   r   Útest_2d_binnumbers_unraveledK  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!   Úhistogramddr   )r#   r   r   r$   r%   r&   r'   r(   r   r   r   Útest_dd_countb  s    
z!TestBinnedStatistic.test_dd_countc                 C   s.   | j }| j}t||ddd�}d}t||ƒ d S )Nr   r   r   r>   )r   r   r   r	   )r#   r   r   r@   rA   r   r   r   Útest_dd_result_attributesl  s
    z-TestBinnedStatistic.test_dd_result_attributesc           
      C   sz   | j }| j}t||ddd�\}}}tj|d|d�\}}t||tjdd�\}}	}t||ƒ t||ƒ t||ƒ t||	ƒ d S )Nr,   r   r   rC   )r   r   r   r!   r“   r,   r   )
r#   r   r   rE   r%   r&   rF   r(   Zsum3Zedges3r   r   r   Útest_dd_sumt  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   r3   r%   r&   r4   r(   r   r   r   Útest_dd_mean�  s    
z TestBinnedStatistic.test_dd_meanc                 C   sR   | j }| j}t||ddd�\}}}t||tjdd�\}}}t||ƒ t||ƒ d S )Nr1   r   r   )r   r   r   r!   r1   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 )NrK   r   r   )r   r   r   r!   rK   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 )NrM   r   r   )r   r   r   r!   rM   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 ddddd	d
ddddddddddddddg¡}‡ fdd„t ˆ ¡D ƒ}tˆ |ƒ || ¡  }t||ƒ d S )NrP   r   r   r   é?   é!   éV   éS   éX   éC   é9   é*   é)   éR   é\   é    é$   é[   é+   éW   éQ   c                    s   g | ]}ˆ |k  ¡ ‘qS r   rR   rS   rV   r   r   rW   »  s     z7TestBinnedStatistic.test_dd_bincode.<locals>.<listcomp>)r   r   r   r!   rX   rY   r   r‡   )r#   r   r   r$   r%   rZ   r[   rˆ   r   rV   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*   r1   rK   rM   r+   r†   r   r   r   )r   r   r   r!   r1   r   r   )r#   r   r   r   r�   rg   rh   ri   rj   rk   rl   r4   r(   rZ   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*   r^   r   r   rP   rQ   r   )r^   rP   r   Tr‹   )r   r   r   r   r   )r#   r   r   r�   rŽ   r�   r�   r‘   ZedgeszZbczr4   r(   rZ   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!   rb   Úlinspacer   r.   r   )r#   r   r   r   Úresultr�   r4   r   r   r   Útest_dd_binned_statistic_resultà  s    
ÿz3TestBinnedStatistic.test_dd_binned_statistic_resultc              	   C   sh   t j d¡}t j d¡}t  ddd¡}t  |d¡}|||f}ttdd�� t||d|d	� W 5 Q R X d S )
Nr±   r²   r   r   r   zdifference is numerically 0©Úmatchr*   r   )r!   rb   r³   Úappendr9   r:   r   )r#   r   r   r   r   r   r   Útest_dd_zero_dedgesð  s    
z'TestBinnedStatistic.test_dd_zero_dedgesc              	   C   sä   t tdd��  t| jg| jddggd� W 5 Q R X t tdd��* t| j| jg| jddgddggd� W 5 Q R X t tdd��* t| j| jg| jddgddggd� W 5 Q R X t tdd��$ t| j| jg| jddggd� W 5 Q R X d S )	NzIn range, start must be <= stopr¶   r   r   r`   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)r9   r:   r   r   r   r   )r#   r   r   r   Útest_dd_range_errorsù  s6    ÿÿþÿþÿþÿz(TestBinnedStatistic.test_dd_range_errorsc                 C   sN   t jddgt jd�}t|d ddd�\}}}t|t jdddddgt jd�ƒ d S )Nr   gÂhwÄøÛ?)Údtyper   rn   r   r   )r!   rX   Zfloat32r   r   Úfloat64)r#   r   r�   re   r   r   r   Útest_binned_statistic_float32  s    z1TestBinnedStatistic.test_binned_statistic_float32c           
      C   s†   g }d}t |ƒD ]}|dd|  g7 }qt ddd¡}t|t t|ƒ¡|gdd�\}}}tj||d�\}}	t||ƒ t|d |	ƒ d S )	NrP   r   gš™™™™™¹?r   r�   r,   )r   r.   r   )ra   r!   r³   r   ZonesÚlenr"   r   )
r#   r   r   rU   r   rE   r%   r&   rF   r(   r   r   r   Útest_gh14332  s     ÿ
z TestBinnedStatistic.test_gh14332r»   r.   r   c                 C   s   | d   ¡ S )NrQ   rR   ©r   r   r   r   Ú<lambda>'  ó    zTestBinnedStatistic.<lambda>c                 C   s   | d   ¡ d S )NrQ   ù              ð?rR   rÀ   r   r   r   rÁ   (  rÂ   c                    s¸   ‡ fdd„}t j d¡}d}|j|d�}|dk}|j|d�}|t jkrZ||j|d�d  }t||ˆ dd	�\}	}
}
t  |||  ƒ||| ƒg¡}t|	|ƒ |	jt  |jt j	¡ks´t
‚d S )
Nc                    s   ˆ dkrt | ƒS ˆ | ƒS )Nr   )r¾   rÀ   ©r.   r   r   Úref_statistic*  s    z6TestBinnedStatistic.test_dd_all.<locals>.ref_statisticl   #tÆ%i r   r   g      à?rÃ   rQ   r   )r!   rb   Zdefault_rngÚ
complex128r   rX   r   r»   Zresult_typer¼   ÚAssertionError)r#   r»   r.   rÅ   r   Únr   rU   r   r�   re   Úrefr   rÄ   r   Útest_dd_all$  s    
 
zTestBinnedStatistic.test_dd_allN)=Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r)   r/   r5   r7   r=   rB   rG   rI   rJ   rL   rN   rO   r\   rf   rm   rt   ru   rv   rz   r{   r|   r}   r~   r   r‰   rŠ   r’   r”   r•   r–   r˜   r™   rš   r›   rœ   r®   r¯   r°   rµ   r¹   rº   r½   r¿   ÚpytestÚmarkZparametrizer!   r¼   rÆ   r*   r+   r,   r1   rK   rM   rÊ   r   r   r   r   r
      sl   
	
	







	





	  ýr
   )Únumpyr!   Znumpy.testingr   rÏ   r   r9   Zscipy.statsr   r   r   Zscipy._lib._utilr   Zcommon_testsr	   r
   r   r   r   r   Ú<module>   s   