U
    e»{jÁB  ã                   @   sÊ  d dl Zd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ erŽd d
lmZ de d¡ ZG dd„ dƒZdd„ ZG dd„ dƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!ej" #dej$d d d!œfej%d d d"œfej&d#d ifej$d ej' d ej' d!œfej%d ej' d ej' d"œfej&d#d ej' ifg¡d$d%„ ƒZ(d&d'„ Z)d(d)„ Z*d*d+„ Z+d,d-„ Z,d.d/„ Z-d0d1„ Z.d2d3„ Z/d4d5„ Z0d6d7„ Z1d8d9„ Z2d:d;„ Z3d<d=„ Z4dS )>é    N)Úassert_array_equal)Úunits)ÚAngle)Úassert_quantity_allclose)Údistributions)ÚDistribution)ÚNumpyRNGContext)Ú	HAS_SCIPY)Únormé   g      è?c                   @   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S )ÚTestInitc                 C   sN   t  ddddg¡d d …t jf | _t j | jd¡| _t j | j ¡ d¡| _d S )Nr   é   é   é�  ©é   éè  )r   r   )	ÚnpÚarrayÚnewaxisZratesÚrandomÚpoissonÚparrZsqueezeÚparr_t©Úself© r   új/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/uncertainty/tests/test_distribution.pyÚsetup_class   s    "zTestInit.setup_classc                 C   s   t | jƒ d S ©N)r   r   r   r   r   r   Útest_numpy_init   s    zTestInit.test_numpy_initc                 C   s   t | jjƒ d S r   )r   r   ÚTr   r   r   r   Útest_numpy_init_T    s    zTestInit.test_numpy_init_Tc                 C   sV   | j tj> }t|ƒ}t|tjƒs$t‚t|tƒs2t‚t|jtƒsBt‚t|jj	| j ƒ d S r   )
r   ÚuÚctr   Ú
isinstanceÚQuantityÚAssertionErrorÚvaluer   Údistribution)r   ÚpqZpqdr   r   r   Útest_quantity_init#   s    zTestInit.test_quantity_initc                 C   s   | j tj> }t|jƒ d S r   )r   r#   r$   r   r!   )r   r*   r   r   r   Útest_quantity_init_T,   s    zTestInit.test_quantity_init_Tc                 C   s\   t | jƒ}|tj> }t|tjƒs$t‚t|t ƒs2t‚|jtjksBt‚t|j	j
|j
 t¡ƒ d S r   )r   r   r#   r$   r%   r&   r'   Úunitr   r(   r)   ZastypeÚfloat)r   ÚpdZqpdr   r   r   Ú$test_quantity_init_with_distribution1   s    

z-TestInit.test_quantity_init_with_distributionN)
Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r    r"   r+   r,   r0   r   r   r   r   r      s   
	r   c               	   C   sX   t j t  ddddg¡d d …t jf d¡} tjtdd�� t|  	¡ d ƒ W 5 Q R X d S )	Nr   r   r   r   r   z4Attempted to initialize a Distribution with a scalar©Úmatchr   )
r   r   r   r   r   ÚpytestÚraisesÚ	TypeErrorr   Zravel)r   r   r   r   Útest_init_scalar;   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ejje dd�dd„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚTestDistributionStatisticsc              
   C   st   t dƒ�P tj t ddddg¡d d …tjf t ddddg¡d d …tjf d¡| _W 5 Q R X t| jtj	 ƒ| _
d S )Né90  r   é   é   r   r   ©r   é'  )r   r   r   Únormalr   r   Údatar   r#   ÚkpcÚdistrr   r   r   r   r   D   s    
ýz&TestDistributionStatistics.setup_classc                 C   s&   | j jdkst‚| j jjdks"t‚d S )N©r   r?   )rD   Úshaper'   r)   r   r   r   r   Ú
test_shapeN   s    z%TestDistributionStatistics.test_shapec                 C   s&   | j jdkst‚| j jjdks"t‚d S )Nr   i@œ  )rD   Úsizer'   r)   r   r   r   r   Ú	test_sizeS   s    z$TestDistributionStatistics.test_sizec                 C   s   | j jdkst‚d S )Nr@   )rD   Ú	n_samplesr'   r   r   r   r   Útest_n_samplesX   s    z)TestDistributionStatistics.test_n_samplesc                 C   s   | j jdkst‚d S )NrE   )rD   rF   r'   r   r   r   r   Útest_n_distr\   s    z'TestDistributionStatistics.test_n_distrc                 C   s    t j| jdd�| jj }| j ¡ }t||ƒ t|ddddg| jj dd� t|tƒrXt	‚t|t
jƒsht	‚|d	 }| jj|d
�}||ksŠt	‚t  ||k¡sœt	‚d S )Néÿÿÿÿ©Úaxisr   r=   r>   r   çš™™™™™©?©Zrtolç        ©Úout)r   ZmeanrB   rD   r-   Úpdf_meanr   r%   r   r'   r#   r&   Úall)r   ÚexpectedrU   rT   Z	pdf_mean2r   r   r   Útest_pdf_mean_   s    

z(TestDistributionStatistics.test_pdf_meanc                 C   s¼   t j| jdd�| jj }| j ¡ }t||ƒ t|ddddg| jj dd� t|tƒrXt	‚t|t
jƒsht	‚|d	 }t j| jdd
d�| jj }| jjd
|d�}||ks¦t	‚t  ||k¡s¸t	‚d S )NrM   rN   r>   r=   r   r   rP   rQ   rR   r   ©rO   Úddof©rZ   rT   )r   ÚstdrB   rD   r-   Úpdf_stdr   r%   r   r'   r#   r&   rV   )r   rW   r]   rT   Zpdf_std2r   r   r   Útest_pdf_stdq   s    

z'TestDistributionStatistics.test_pdf_stdc                 C   sÈ   t j| jdd�| jjd  }| j ¡ }t||ƒ t|ddddg| jjd  dd	� t|tƒr`t	‚t|t
jƒspt	‚|d
 }t j| jddd�| jjd  }| jjd|d�}||ks²t	‚t  ||k¡sÄt	‚d S )NrM   rN   r=   é	   r   é   é   çš™™™™™¹?rQ   rR   r   rY   r[   )r   ÚvarrB   rD   r-   Úpdf_varr   r%   r   r'   r#   r&   rV   )r   rW   rd   rT   Zpdf_var2r   r   r   Útest_pdf_var„   s    

  ÿz'TestDistributionStatistics.test_pdf_varc                 C   s    t j| jdd�| jj }| j ¡ }t||ƒ t|ddddg| jj dd� t|tƒrXt	‚t|t
jƒsht	‚|d	 }| jj|d
�}||ksŠt	‚t  ||k¡sœt	‚d S )NrM   rN   r   r=   r>   r   rb   rQ   rR   rS   )r   ÚmedianrB   rD   r-   Ú
pdf_medianr   r%   r   r'   r#   r&   rV   )r   rW   rg   rT   Zpdf_median2r   r   r   Útest_pdf_median™   s    

z*TestDistributionStatistics.test_pdf_medianzno scipy)Úreasonc                 C   sö   t j| jddd�}t jt  | j| ¡dd�| jj }| j ¡ }t||ƒ | j ¡ }t||t	 dd� t|ddd	d
g| jj dd� t
|tƒr�t‚t
|tjƒs t‚t
|tƒr®t‚t
|tjƒs¾t‚|d }| jj|d�}||ksàt‚t  ||k¡sòt‚d S )NrM   T)rO   ZkeepdimsrN   gñhãˆµøä>rQ   r>   r=   r   r   rP   rR   rS   )r   rf   rB   ÚabsrD   r-   Úpdf_madr   Úpdf_smadÚSMAD_FACTORr%   r   r'   r#   r&   rV   )r   rf   rW   rk   rl   rT   Z	pdf_smad2r   r   r   Útest_pdf_mad_smad«   s    "


z,TestDistributionStatistics.test_pdf_mad_smadc                 C   sl   t j| jdddgdd�| jj }| j dddg¡}t||ƒ |jdksJt‚t	|t
ƒrXt‚t	|tjƒsht‚d S )Né
   é2   éZ   rM   rN   )r>   r   )r   Z
percentilerB   rD   r-   Zpdf_percentilesr   rF   r'   r%   r   r#   r&   )r   rW   Zpercsr   r   r   Útest_percentileÃ   s     
z*TestDistributionStatistics.test_percentilec                 C   s~   | j ddddgtj  }tj| jdd�t ddddg¡ | j j }t| 	¡ |ƒ tj
| jdd�| j jd  }t| ¡ |ƒ d S )NéÐ  r   éô  rM   rN   r=   ç      à?)rD   r#   Úpcr   rf   rB   r   r-   r   rg   rc   rd   )r   Z	distrplusrW   r   r   r   Útest_add_quantityÎ   s     þz,TestDistributionStatistics.test_add_quantityc                 C   sÊ   t j dd¡t  ddddg¡d d …t jf  t  dddd	g¡d d …t jf  }t|tj ƒ}| j| }t j	| j
|d  d
d�| jj }t| ¡ |ƒ t j| j
|d  d
d�| jjd  }t| ¡ |ƒ d S )Nr   r@   r   g{®Gáz„?éP   ro   rs   r   rt   rM   rN   r=   )r   r   Úrandnr   r   r   r#   rv   rD   rf   rB   r-   r   rg   rc   rd   )r   Zanother_dataZanother_distrZcombined_distrrW   r   r   r   Útest_add_distribution×   s    ,ÿÿ
 "ÿz0TestDistributionStatistics.test_add_distributionN)r1   r2   r3   r   rG   rI   rK   rL   rX   r^   re   rh   r7   ÚmarkZskipifr	   rn   rr   rw   rz   r   r   r   r   r;   C   s   

	r;   c               	   C   sú   ddddgt j } tdƒ�Ö tj| ddddgt j d	d
�}|jjdksJt‚|jdksXt‚|jt jksht‚t	 
| ¡ d	t j k¡s„t‚tj| ddddgt j dd
�}|jjdks²t‚|jdksÀt‚|jt jksÐt‚t	 
| ¡ d	t j k ¡sìt‚W 5 Q R X d S )Nr   r   r   r   r<   çš™™™™™É?ç      ø?r   éd   )r\   rJ   ©r   r~   rE   é N  )r   r€   )r#   rC   r   ÚdsrA   r)   rF   r'   r-   r   rV   r]   rv   )ÚcenterqZn_distZn_dist2r   r   r   Útest_helper_normal_samplesé   s    
rƒ   c               	   C   s¾   ddddgt j } tdƒ�š tj| dd�}|jdks8t‚|jjd	ksHt‚|jt jksXt‚t	 
|¡}t|tƒspt‚|jd
ks~t‚t	 |dk¡s�t‚t	 t	 | ¡ |  ¡| k ¡s°t‚W 5 Q R X d S )Nr   r   r   r   r<   r~   ©rJ   rE   r   r   r   )r#   Úcountr   r�   r   rF   r'   r)   r-   r   Úminr%   r   rV   rj   rU   )ZcenterqcountsZp_distZp_minr   r   r   Útest_helper_poisson_samplesú   s    

r‡   c                  C   s4  t jddgtj ddgtj dd�} | jdks2t‚| jjdksBt‚t tj	| jd	d
�ddgtj k¡sjt‚t tj
| jd	d
�ddgtj k ¡s’t‚t jdddgtj dddgtj dd�} | jdksÈt‚| jjdksØt‚t tj	| jd	d
�dddgtj k¡�st‚t tj
| jd	d
�dddgtj k ¡�s0t‚d S )Nr   r=   r>   r   r   )ÚlowerÚupperrJ   )r=   )r=   r   rM   rN   r   )ÚcenterÚwidthrJ   )r>   )r>   r   g      ø¿ru   g      @)r�   Úuniformr#   rC   rF   r'   r)   r   rV   r†   Úmaxrv   )Zudistr   r   r   Útest_helper_uniform_samples	  s    $(((,rŽ   c                  C   s|   t  d¡ ddddgtj } tj| ddddgtj d	� tj| d
dddgtjd  d� tj| ddddgtjd  d� d S )Nú-distribution stretch goal not yet implementedr   r   r   r   r|   r}   r   )r\   g{®Gáz¤?g      @r`   r=   )rc   ra   g#¬ÇqÜ?g      ä?éþÿÿÿ)Zivar)r7   Úskipr#   rC   r�   rA   ©r‚   r   r   r   Útest_helper_normal_exact  s
    
 r“   c               	   C   sj   t  d¡ ddddgtj } tj| dd� t jtjdd	��& ddddgtj } tj| dd� W 5 Q R X d S )
Nr�   r   r   r   r   r   r„   zFPoisson distribution can only be computed for dimensionless quantitiesr5   )	r7   r‘   r#   Úoner�   r   r8   Z
UnitsErrorrC   r’   r   r   r   Útest_helper_poisson_exact   s    
þr•   c                  C   sT   t  d¡ dd¡} t| tj ƒ}dt|ƒks0t‚dt|ƒks@t‚d| 	¡ ksPt‚d S )Nr   r>   ro   zn_samples=10zn_{\rm samp}=10)
r   ZarangeZreshaper   r#   rC   Úreprr'   ÚstrÚ_repr_latex_)ÚdarrrD   r   r   r   Ú
test_reprs-  s
    rš   z	func, kwsr=   )rŠ   r\   )rˆ   r‰   rŠ   c              	   C   sb   t  t¡�* | ¡ }d|d< | f |Žjdks0t‚W 5 Q R X | ¡ }d|d< | f |Žjdks^t‚d S )Nr~   Zn_samplerJ   )r7   r8   Ú	ExceptionÚcopyrJ   r'   )ÚfuncÚkwsZkw_tempr   r   r   Útest_wrong_kw_fails7  s    rŸ   c                  C   s�   t j dd¡} t| tj ƒ}|\}}t|tƒs2t‚t|tƒs@t‚tj	ddgtj ddgtj dd�}|\}}t|tjƒs|t‚t|tjƒsŒt‚d S ©Nr=   r   r   r>   r   )rŠ   r\   rJ   )
r   r   ry   r   r#   rC   r%   r'   r�   rA   )ÚarrrD   Zd1qZd2qÚndistrÚn1Ún2r   r   r   Útest_index_assignment_quantityL  s    $r¥   c                  C   s~   t j dd¡} t| ƒ}|\}}t|tƒs,t‚t|tƒs:t‚tjddgddgdd�}|\}}t|tjƒsjt‚t|tjƒszt‚d S r    )r   r   ry   r   r%   r'   r�   rA   )r¡   rD   Zd1aZd2ar¢   r£   r¤   r   r   r   Útest_index_assignment_arrayY  s    r¦   c                  C   sH   t j ddd¡} t| ƒ}|jdd�\}}|jdks6t‚|jdksDt‚d S )Nr=   r>   r   ro   )Úbins)r=   r>   ro   )r=   r>   é   )r   r   ry   r   Zpdf_histogramrF   r'   )r¡   rD   Úhistr§   r   r   r   Útest_histogramf  s
    rª   c                  C   s>   t j dd¡} t| dƒr"t d¡ t| ƒ}| ¡ d ks:t‚d S )Nr   r   r˜   z4in this version of numpy, ndarray has a _repr_latex_)	r   r   ry   Úhasattrr7   r‘   r   r˜   r'   )r¡   rD   r   r   r   Útest_array_repr_latexo  s
    

r¬   c                  C   sF   t jdtj ddtj d�} |  tj¡}t|  ¡  tj¡| ¡ ƒ d S ©Nro   r~   r   )rJ   r\   )r�   rA   r#   ÚcmÚtoÚmr   rU   )rD   Ztodistrr   r   r   Útest_distr_to}  s    r±   c               	   C   s6   t jdddd�} t t¡� |  tj¡ W 5 Q R X d S r­   )r�   rA   r7   r8   ÚAttributeErrorr¯   r#   r°   ©rD   r   r   r   Útest_distr_noq_toƒ  s    r´   c                  C   sL   t jdtj ddtj d�} |  tj¡}t |  ¡  tj¡| ¡ ¡sHt	‚d S r­   )
r�   rA   r#   r®   Úto_valuer°   r   ZallcloserU   r'   )rD   Ztovdistrr   r   r   Útest_distr_to_valueŠ  s    r¶   c               	   C   s6   t jdddd�} t t¡� |  tj¡ W 5 Q R X d S r­   )r�   rA   r7   r8   r²   rµ   r#   r°   r³   r   r   r   Útest_distr_noq_to_value�  s    r·   c               	   C   sÆ   t dddgƒ} t| dƒ}|| }t|tƒs.t‚t|t ƒs<t‚|| }t|tƒrRt‚t|tjƒsbt‚t|t ƒspt‚||7 }t|tƒs†t‚t|t ƒs”t‚t|j|jƒ t 	tj
¡� ||9 }W 5 Q R X d S ©Nç       @ç      @ç      @Údeg)r   r   r%   r'   r#   r&   r   r)   r7   r8   ZUnitTypeError)rD   ÚadZ
ad_plus_adZad_times_adr   r   r   Útest_distr_angle–  s    
r¾   c                  C   sä   t dddgƒ} t| dƒ}| tj¡}t|tƒr2t‚t|tjƒsBt‚t|t ƒsPt‚| |j¡}t|tƒrjt‚t|tjƒszt‚t|t ƒsˆt‚t|j	|j	ƒ | |j
|j¡}t|tƒr´t‚t|tjƒsÄt‚t|t ƒsÒt‚t|j	|j	ƒ d S r¸   )r   r   Úviewr#   r&   r%   r'   Ú	__class__r   r)   Údtype)rD   r½   ZqdZqd2Zqd3r   r   r   Ú!test_distr_angle_view_as_quantity¬  s     
rÂ   c               	   C   sœ   t dddgƒ} tjtdd�� |  t d¡¡ W 5 Q R X t| dƒ}tjtdd�� | t d¡¡ W 5 Q R X tjtdd�� | t d¡t ¡ W 5 Q R X d S )Nr¹   rº   r»   zwith a new dtyper5   Zf8r¼   )r   r7   r8   Ú
ValueErrorr¿   r   rÁ   r   )rD   r½   r   r   r   Ú test_distr_cannot_view_new_dtypeÁ  s    
rÄ   c                  C   s`   t dddgtj ƒ} t | ¡}t|t ƒs,t‚t|tjƒs<t‚t|t t dddgtj ¡ƒƒ d S )Ng     €V@g      >@rR   )	r   r#   r¼   r   Úsinr%   r'   r&   r   )ZanglesZ
sin_anglesr   r   r   Ú!test_scalar_quantity_distributionÓ  s
    
rÆ   )5Únumpyr   r7   Znumpy.testingr   Zastropyr   r#   Zastropy.coordinatesr   Zastropy.tests.helperr   Zastropy.uncertaintyr   r�   Zastropy.uncertainty.corer   Zastropy.utilsr   Z"astropy.utils.compat.optional_depsr	   Zscipy.statsr
   Zppfrm   r   r:   r;   rƒ   r‡   rŽ   r“   r•   rš   r{   ZparametrizerA   rŒ   r   r…   rŸ   r¥   r¦   rª   r¬   r±   r´   r¶   r·   r¾   rÂ   rÄ   rÆ   r   r   r   r   Ú<module>   sZ   & '
úþ

	