U
    e»{jE8  ã                
   @   sÖ  d dl Z d dlZd dlZd dlmZ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mZmZmZmZmZmZ G dd	„ d	eƒZeeeeegZeeefZeefZej d
e¡dd„ ƒZej d
e¡dd„ ƒZej d
e¡dd„ ƒZ ej d
e¡dd„ ƒZ!ej d
e¡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¡d!d"„ ƒZ)ej d
eeeg¡d#d$„ ƒZ*ej d%eeeg¡ej d
eeeg¡d&d'„ ƒƒZ+ej d%eeeg¡ej d(ee	j,d) fee	j,fed*e	j,d)  fg¡d+d,„ ƒƒZ-ej d%eeeg¡ej d(ee	j,d) fee	j,fed*e	j,d)  fg¡d-d.„ ƒƒZ.ej d%eeeg¡ej d
eeeg¡d/d0„ ƒƒZ/ej d
e¡d1d2„ ƒZ0ej d3e1ed4d5„ d6d5„ d7d5„ fƒ¡d8d9„ ƒZ2ej d
e¡d:d;„ ƒZ3dS )<é    N)Úassert_allcloseÚassert_array_equal)Úunits)ÚCCDData©ÚNDDataArray)ÚNDData)Ú"IncompatibleUncertaintiesExceptionÚInverseVarianceÚMissingDataAssociationExceptionÚNDUncertaintyÚStdDevUncertaintyÚUnknownUncertaintyÚVarianceUncertaintyc                   @   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 )ÚFakeUncertaintyc                 C   s   dS )NÚfake© )Úselfr   r   úf/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/nddata/tests/test_nduncertainty.pyÚuncertainty_type.   s    z FakeUncertainty.uncertainty_typec                 C   s   d S ©Nr   )r   Úvaluer   r   r   Ú_data_unit_to_uncertainty_unit2   s    z.FakeUncertainty._data_unit_to_uncertainty_unitc                 C   s   d S r   r   ©r   ÚdataZ
final_datar   r   r   Ú_propagate_add5   s    zFakeUncertainty._propagate_addc                 C   s   d S r   r   r   r   r   r   Ú_propagate_subtract8   s    z#FakeUncertainty._propagate_subtractc                 C   s   d S r   r   r   r   r   r   Ú_propagate_multiply;   s    z#FakeUncertainty._propagate_multiplyc                 C   s   d S r   r   r   r   r   r   Ú_propagate_divide>   s    z!FakeUncertainty._propagate_divideN)
Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r   r   r   r   r   r   r   r   r   r   -   s   
r   ÚUncertClassc                 C   sf   | dddgƒ}t |jt dddg¡ƒ | dddgtjd�}t |jt dddg¡ƒ |jtjksbt‚d S ©Né   é   é   ©Úunit)r   ÚarrayÚnpÚuÚadur)   ÚAssertionError)r#   Úfake_uncertr   r   r   Útest_init_fake_with_listU   s
    r0   c                 C   sŠ   t  d¡ dd¡}| |ƒ}t|j|ƒ |j|k	s4t‚| |dd�}|j|ksNt‚| |tjd�}t|j|ƒ |j|k	svt‚|jtjks†t‚d S )Néd   é
   F©Úcopyr(   )	r+   ÚarangeÚreshaper   r*   r.   r,   r-   r)   ©r#   Úuncertr/   r   r   r   Útest_init_fake_with_ndarraya   s    r9   c                 C   sº   t  d¡ dd¡tj }| |ƒ}t|j|jƒ |j|jk	s>t‚|j	tjksNt‚| |dd�}|j|jk	sjt‚|j	tjkszt‚| |tj
d�}t|j|jƒ |j|jk	s¦t‚|j	tj
ks¶t‚d S )Nr2   r&   é   Fr3   r(   )r+   r5   r6   r,   r-   r   r*   r   r.   r)   Úmr7   r   r   r   Útest_init_fake_with_quantityr   s    r<   c                 C   s
  t  d¡ dd¡}| |ƒ}| |ƒ}t|j|ƒ |j|k	s<t‚| |dd�}| |dd�}t|j|jƒ |j|jksrt‚t  d¡ dd¡tj }| |ƒ}| |ƒ}t|j|jƒ |j|jk	s¸t‚|j	tjksÈt‚| |tj
d�}t|j|jƒ |j|jk	sôt‚|j	tj
k�st‚d S )Nr:   r%   Fr3   r(   )r+   r5   r6   r   r*   r.   r,   r-   r   r)   Úcm)r#   r8   Zfake_uncert1Zfake_uncert2r   r   r   Útest_init_fake_with_fake…   s&    r>   c                 C   s~   dddœ}| |ƒ}|j |ks t‚| |tjd�}|j |ks<t‚|jtjksLt‚| |dd�}|j |ksft‚t|ƒt|ƒkszt‚d S )Ng333333@g333333ã?)ZrdnoiseZgainr(   Fr3   )r*   r.   r,   Úsr)   Úidr7   r   r   r   Ú!test_init_fake_with_somethingElseŸ   s    
rA   c               	   C   sb   t  d¡ dd¡} t| ƒ}t t¡� t|ƒ W 5 Q R X t| ƒ}t t¡� t|ƒ W 5 Q R X d S )Nr:   r%   )r+   r5   r6   r   ÚpytestÚraisesr	   r   )r8   Ú
std_uncertr/   r   r   r   Ú%test_init_fake_with_StdDevUncertainty²   s    rE   c                  C   sl   t ddgƒ} | jdkst‚tddgƒ}|jdks4t‚tddgƒ}|jdksNt‚tddgƒ}|jdksht‚d S )Nr2   r&   r   ZstdÚvarZivar)r   r   r.   r   r   r
   )r/   rD   Ú
var_uncertZivar_uncertr   r   r   Útest_uncertainty_type¿   s    rH   c                  C   s0   t ddgƒ} | jrt‚tddgƒ}|js,t‚d S )Nr2   r&   )r   Zsupports_correlatedr.   r   )r/   rD   r   r   r   Útest_uncertainty_correlatedÊ   s    
rI   c                     sˆ   ddl m‰ ddlm‰ d‡‡fdd„	} dd„ }dd	„ }| |tƒ | |tƒ dd
lm‰  ‡ fdd„}‡ fdd„}| |ˆ ƒ | |ˆ ƒ d S )Nr   )Údefaultdict)Úget_objectsc                    s˜   ˆt ƒ‰ˆƒ D ]}ˆt|ƒ  d7  < q| ƒ  ˆt ƒ‰ ˆƒ D ]}ˆ t|ƒ  d7  < q<|dkr|t‡ ‡fdd„ˆ D ƒƒs”t‚nˆ | ˆ|  dks”t‚dS )zýFunction based on gc.get_objects to determine if any object or
        a specific object leaks.

        It requires a function to be given and if any objects survive the
        function scope it's considered a leak (so don't return anything).
        r%   Nc                 3   s"   | ]}ˆ | ˆ|  d kV  qdS )r   Nr   )Ú.0Úk©ÚafterÚbeforer   r   Ú	<genexpr>é   s     zDtest_for_leak_with_uncertainty.<locals>.test_leak.<locals>.<genexpr>r   )ÚintÚtypeÚallr.   )ÚfuncZspecific_objectsÚi)rJ   rK   rN   r   Ú	test_leak×   s    

z1test_for_leak_with_uncertainty.<locals>.test_leakc                   S   s   t t d¡ƒ d S ©Nr1   )r   r+   Úonesr   r   r   r   Únon_leaker_nddataí   s    z9test_for_leak_with_uncertainty.<locals>.non_leaker_nddatac                   S   s    t t d¡tt d¡ƒd� d S ©Nr1   ©Úuncertainty)r   r+   rY   r   r   r   r   r   Úleaker_nddataò   s    z5test_for_leak_with_uncertainty.<locals>.leaker_nddatar   c                      s   ˆ t  d¡ƒ d S rX   )r+   rY   r   r   r   r   Únon_leaker_nddataarrayý   s    z>test_for_leak_with_uncertainty.<locals>.non_leaker_nddataarrayc                      s    ˆ t  d¡tt  d¡ƒd� d S r[   )r+   rY   r   r   r   r   r   Úleaker_nddataarray   s    z:test_for_leak_with_uncertainty.<locals>.leaker_nddataarray)N)ÚcollectionsrJ   ÚgcrK   r   Úastropy.nddata.compatr   )rW   rZ   r^   r_   r`   r   )r   rJ   rK   r   Útest_for_leak_with_uncertaintyÑ   s    


rd   c                  C   sF   t ddd�} t d| jd�}| jjj| jks.t‚|jjj|jksBt‚d S )Nr%   r\   r&   )r   r]   Úparent_nddatar   r.   )Úndd1Zndd2r   r   r   Útest_for_stolen_uncertainty  s    rg   c               	   C   sf   t t d¡tjd�} t t | ¡¡}tj 	| j
|j
¡ | j|jksFt‚t t¡� |j W 5 Q R X d S )Nr'   r(   )r   r+   rY   r,   r;   ÚpickleÚloadsÚdumpsZtestingr   r*   r)   r.   rB   rC   r   re   )r]   Zuncertainty_restoredr   r   r   Útest_stddevuncertainty_pickle  s    rk   c                 C   sr   | dddgt jd�}t|jt jƒs&t‚|jj t j¡s:t‚| dddgƒ}t|jt jƒsZt‚|jj t j¡snt‚d S r$   )	r,   r-   Ú
isinstanceZquantityZQuantityr.   r)   Zis_equivalentZdimensionless_unscaled)r#   r/   Zfake_uncert_nounitr   r   r   Útest_quantity  s    rm   c                 C   s(   | ddgƒ}d|_ t|j tjƒs$t‚d S )Nr%   Zelectron)r)   rl   r,   ZUnitBaser.   )r#   Úvr   r   r   Ú4test_setting_uncertainty_unit_results_in_unit_object$  s    ro   ÚNDClassc              	   C   sB   | ddd�}|dƒ}||_ t tj¡� |jd |_W 5 Q R X d S )Nr%   r-   r(   é   )r]   rB   rC   r,   ÚUnitConversionErrorr)   )rp   r#   rf   rn   r   r   r   Ú:test_changing_unit_to_value_inconsistent_with_parent_fails-  s
    rs   zUncertClass, expected_unitr&   r%   c                 C   s6   | ddgt jd�}|ddgƒ}||_|j|ks2t‚d S ©Nr%   r(   ©r,   r-   r]   r)   r.   ©rp   r#   Zexpected_unitÚnddrn   r   r   r   Ú7test_assigning_uncertainty_to_parent_gives_correct_unit<  s    rx   c                 C   s:   | ddgt jd�}|ddg|d�}||_|j|ks6t‚d S rt   ru   rv   r   r   r   Ú8test_assigning_uncertainty_with_unit_to_parent_with_unitP  s    ry   c              	   C   sF   | ddgt jd�}|ddgt jd�}t t j¡� ||_W 5 Q R X d S rt   )r,   r-   ÚsecondrB   rC   rr   r]   )rp   r#   rw   rn   r   r   r   Ú8test_assigning_uncertainty_with_bad_unit_to_parent_failsd  s    r{   c                 C   sN   t  dd¡ dd¡tj }| |ƒ}| | ¡}t|j|jƒ |j|jksJt	‚d S ©Nr%   é   r&   r:   )
r+   r5   r6   r,   r-   Úrepresent_asr   r*   r)   r.   ©r#   r8   Ústart_uncertÚfinal_uncertr   r   r   Ú+test_self_conversion_via_variance_supportedr  s
    
r‚   zUncertClass,to_variance_funcc                 C   s   | d S )Nr&   r   ©Úxr   r   r   Ú<lambda>  ó    r…   c                 C   s   | S r   r   rƒ   r   r   r   r…     r†   c                 C   s   d|  S )Nr%   r   rƒ   r   r   r   r…     r†   c                 C   sj   t  dd¡ dd¡tj }| |ƒ}| t¡}| | ¡}t||jƒ|jƒ t	|j|jƒ |j
|j
ksft‚d S r|   )r+   r5   r6   r,   r-   r~   r   r   r*   r   r)   r.   )r#   Zto_variance_funcr8   r€   rG   r�   r   r   r   Ú*test_conversion_to_from_variance_supported{  s    

r‡   c              	   C   sF   t  dd¡ dd¡tj }| |ƒ}t t¡� | | ¡}W 5 Q R X d S r|   )	r+   r5   r6   r,   r-   rB   rC   Ú	TypeErrorr~   r   r   r   r   Ú/test_self_conversion_via_variance_not_supportedŒ  s    r‰   )4rh   Únumpyr+   rB   Znumpy.testingr   r   Zastropyr   r,   Zastropy.nddata.ccddatar   rc   r   Zastropy.nddata.nddatar   Zastropy.nddata.nduncertaintyr	   r
   r   r   r   r   r   r   Zuncertainty_types_to_be_testedZ)uncertainty_types_with_conversion_supportZ,uncertainty_types_without_conversion_supportÚmarkZparametrizer0   r9   r<   r>   rA   rE   rH   rI   rd   rg   rk   rm   ro   rs   r-   rx   ry   r{   r‚   Úzipr‡   r‰   r   r   r   r   Ú<module>   sª   $ û	ý




6		

 ÿ
 ÿýþýþ ÿ

þþ

