a
    ߙfb
5                  
   @   sf  d dl Z 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mZmZ d dlmZ d dlmZ d dlmZ d dlmZ G dd	 d	e
Zeeee	eg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,dS )1    N)assert_array_equal)StdDevUncertaintyVarianceUncertaintyInverseVarianceNDUncertainty"IncompatibleUncertaintiesExceptionMissingDataAssociationExceptionUnknownUncertainty)NDDataNDDataArray)CCDData)unitsc                   @   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   Flib/python3.9/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_unit1   s    z.FakeUncertainty._data_unit_to_uncertainty_unitc                 C   s   d S r   r   r   dataZ
final_datar   r   r   _propagate_add4   s    zFakeUncertainty._propagate_addc                 C   s   d S r   r   r   r   r   r   _propagate_subtract7   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   s^   | g d}t |jtg d | g dtjd}t |jtg d |jtju sZJ d S N)         unit)r   arraynpuadur(   )r"   fake_uncertr   r   r   test_init_fake_with_listM   s
    r.   c                 C   s   t ddd}| |}t|j| |j|us4J | |dd}|j|u sNJ | |tjd}t|j| |j|usvJ |jtju sJ d S )Nd   
   Fcopyr'   )r*   arangereshaper   r)   r+   r,   r(   r"   uncertr-   r   r   r   test_init_fake_with_ndarrayY   s    r7   c                 C   s   t dddtj }| |}t|j|j |j|jus>J |jtju sNJ | |dd}|j|jusjJ |jtju szJ | |tj	d}t|j|j |j|jusJ |jtj	u sJ d S )Nr0   r%      Fr1   r'   )
r*   r3   r4   r+   r,   r   r)   r   r(   mr5   r   r   r   test_init_fake_with_quantityj   s    r:   c                 C   s
  t ddd}| |}| |}t|j| |j|us<J | |dd}| |dd}t|j|j |j|ju srJ t dddtj }| |}| |}t|j|j |j|jusJ |jtju sJ | |tj	d}t|j|j |j|jusJ |jtj	u sJ d S )Nr8   r$   Fr1   r'   )
r*   r3   r4   r   r)   r+   r,   r   r(   cm)r"   r6   Zfake_uncert1Zfake_uncert2r   r   r   test_init_fake_with_fake}   s&    r<   c                 C   s~   ddd}| |}|j |ks J | |tjd}|j |ks<J |jtju sLJ | |dd}|j |ksfJ t|t|kszJ d S )Ng333333@g333333?)ZrdnoiseZgainr'   Fr1   )r)   r+   sr(   idr5   r   r   r   !test_init_fake_with_somethingElse   s    
r?   c                  C   s   t ddd} t| }tt t| W d    n1 sB0    Y  t| }tt t| W d    n1 s|0    Y  d S )Nr8   r$   )r*   r3   r4   r   pytestraisesr   r   )r6   
std_uncertr-   r   r   r   %test_init_fake_with_StdDevUncertainty   s    &rC   c                  C   sl   t ddg} | jdksJ tddg}|jdks4J tddg}|jdksNJ tddg}|jdkshJ d S )Nr0   r%   r   ZstdvarZivar)r   r   r   r   r   )r-   rB   Z
var_uncertZivar_uncertr   r   r   test_uncertainty_type   s    rE   c                  C   s0   t ddg} | jrJ tddg}|js,J d S )Nr0   r%   )r   Zsupports_correlatedr   )r-   rB   r   r   r   test_uncertainty_correlated   s    
rF   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u r|t fdd D sJ n | |  dksJ dS )zFunction 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ZafterZbeforer   r   	<genexpr>       zDtest_for_leak_with_uncertainty.<locals>.test_leak.<locals>.<genexpr>r   )inttypeall)funcZspecific_objectsi)rG   rH   rK   r   	test_leak   s    

z1test_for_leak_with_uncertainty.<locals>.test_leakc                   S   s   t td d S Nr/   )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 Nr/   uncertainty)r
   r*   rU   r   r   r   r   r   leaker_nddata   s    z5test_for_leak_with_uncertainty.<locals>.leaker_nddatar   c                      s    t d d S rT   )r*   rU   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 rW   )r*   rU   r   r   r   r   r   leaker_nddataarray   s    z:test_for_leak_with_uncertainty.<locals>.leaker_nddataarray)N)collectionsrG   gcrH   r
   astropy.nddata.compatr   )rS   rV   rZ   r[   r\   r   )r   rG   rH   r   test_for_leak_with_uncertainty   s    


r`   c                  C   sF   t ddd} t d| jd}| jjj| jks.J |jjj|jksBJ d S )Nr$   rX   r%   )r
   rY   parent_nddatar   )ndd1Zndd2r   r   r   test_for_stolen_uncertainty   s    rc   c                  C   sz   t tdtjd} tt| }tj	| j
|j
 | j|jksFJ tt |j W d    n1 sl0    Y  d S )Nr&   r'   )r   r*   rU   r+   r9   pickleloadsdumpsZtestingr   r)   r(   r@   rA   r   ra   )rY   Zuncertainty_restoredr   r   r   test_stddevuncertainty_pickle  s    rg   c                 C   sn   | g dt jd}t|jt js$J |jjt js8J | g d}t|jt jsVJ |jjt jsjJ d S r#   )r+   r,   
isinstanceZquantityZQuantityr(   Zis_equivalentZdimensionless_unscaled)r"   r-   Zfake_uncert_nounitr   r   r   test_quantity  s    ri   c                 C   s(   | ddg}d|_ t|j tjs$J d S )Nr$   Zelectron)r(   rh   r+   ZUnitBase)r"   vr   r   r   4test_setting_uncertainty_unit_results_in_unit_object  s    rk   NDClassc                 C   sV   | ddd}|d}||_ ttj |jd |_W d    n1 sH0    Y  d S )Nr$   r,   r'      )rY   r@   rA   r+   UnitConversionErrorr(   )rl   r"   rb   rj   r   r   r   :test_changing_unit_to_value_inconsistent_with_parent_fails&  s
    ro   zUncertClass, expected_unitr%   r$   c                 C   s6   | ddgt jd}|ddg}||_|j|ks2J d S Nr$   r'   r+   r,   rY   r(   rl   r"   Zexpected_unitnddrj   r   r   r   7test_assigning_uncertainty_to_parent_gives_correct_unit7  s    
rt   c                 C   s:   | ddgt jd}|ddg|d}||_|j|ks6J d S rp   rq   rr   r   r   r   8test_assigning_uncertainty_with_unit_to_parent_with_unitG  s    
ru   c                 C   sZ   | ddgt jd}|ddgt jd}tt j ||_W d    n1 sL0    Y  d S rp   )r+   r,   secondr@   rA   rn   rY   )rl   r"   rs   rj   r   r   r   8test_assigning_uncertainty_with_bad_unit_to_parent_failsW  s    	rw   )-rd   r@   Znumpyr*   Znumpy.testingr   Zastropy.nddata.nduncertaintyr   r   r   r   r   r   r	   Zastropy.nddata.nddatar
   r_   r   Zastropy.nddata.ccddatar   Zastropyr   r+   r   Zuncertainty_types_to_be_testedZmarkZparametrizer.   r7   r:   r<   r?   rC   rE   rF   r`   rc   rg   ri   rk   ro   r,   rt   ru   rw   r   r   r   r   <module>   s   $	




6		


