
    IR-e<              
          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mZmZ  G 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             Z ej                            d
e          d             Z!ej                            d
e          d             Z"ej                            d
e          d             Z#ej                            d
e          d             Z$d Z%d Z&d Z'd Z(d Z)d Z*ej                            d
e          d             Z+ej                            d
eeeg          d             Z,ej                            deeeg          ej                            d
eeeg          d                         Z-ej                            deeeg          ej                            dee	j.        dz  fee	j.        fede	j.        dz  z  fg          d                         Z/ej                            deeeg          ej                            dee	j.        dz  fee	j.        fede	j.        dz  z  fg          d                         Z0ej                            deeeg          ej                            d
eeeg          d                         Z1ej                            d
e          d              Z2ej                            d! e3ed" d# d$ f                    d%             Z4ej                            d
e          d&             Z5d' Z6dS )(    N)assert_allcloseassert_array_equal)units)CCDDataNDDataArray)NDData)	"IncompatibleUncertaintiesExceptionInverseVarianceMissingDataAssociationExceptionNDUncertaintyStdDevUncertaintyUnknownUncertaintyVarianceUncertainty_move_preserved_axes_first_unravel_preserved_axesc                   B    e Zd Zed             Zd Zd Zd Zd Zd Z	dS )FakeUncertaintyc                     dS )Nfake )selfs    Glib/python3.11/site-packages/astropy/nddata/tests/test_nduncertainty.pyuncertainty_typez FakeUncertainty.uncertainty_type0   s    v    c                     d S Nr   )r   values     r   _data_unit_to_uncertainty_unitz.FakeUncertainty._data_unit_to_uncertainty_unit4   s    tr   c                     d S r   r   r   data
final_datas      r   _propagate_addzFakeUncertainty._propagate_add7       r   c                     d S r   r   r!   s      r   _propagate_subtractz#FakeUncertainty._propagate_subtract:   r%   r   c                     d S r   r   r!   s      r   _propagate_multiplyz#FakeUncertainty._propagate_multiply=   r%   r   c                     d S r   r   r!   s      r   _propagate_dividez!FakeUncertainty._propagate_divide@   r%   r   N)
__name__
__module____qualname__propertyr   r   r$   r'   r)   r+   r   r   r   r   r   /   sx          X            r   r   UncertClassc                      | g d          }t          |j        t          j        g d                      | g dt          j                  }t          |j        t          j        g d                     |j        t          j        u sJ d S N)         unit)r   arraynpuadur7   )r0   fake_uncerts     r   test_init_fake_with_listr=   W   s    +iii((K{("(999*=*=>>> +iiiae444K{("(999*=*=>>>qu$$$$$$r   c                 t   t          j        d                              dd          } | |          }t          |j        |           |j        |usJ  | |d          }|j        |u sJ  | |t
          j                  }t          |j        |           |j        |usJ |j        t
          j        u sJ d S )Nd   
   Fcopyr6   )r9   arangereshaper   r8   r:   r;   r7   r0   uncertr<   s      r   test_init_fake_with_ndarrayrG   c   s    Ys^^##B++F+f%%K{(&111F****+f5111K&&&&+f15111K{(&111F****qu$$$$$$r   c                    t          j        d                              dd          t          j        z  } | |          }t          |j        |j                   |j        |j        usJ |j        t          j        u sJ  | |d          }|j        |j        usJ |j        t          j        u sJ  | |t          j	                  }t          |j        |j                   |j        |j        usJ |j        t          j	        u sJ d S )Nr@   r4      FrA   r6   )
r9   rC   rD   r:   r;   r   r8   r   r7   mrE   s      r   test_init_fake_with_quantityrK   t   s   Yr]]""1a((150F+f%%K{(&,777FL0000qu$$$$+f5111KFL0000qu$$$$+f13///K{(&,777FL0000qs""""""r   c                 
   t          j        d                              dd          } | |          } | |          }t          |j        |           |j        |usJ  | |d          } | |d          }t          |j        |j                   |j        |j        u sJ t          j        d                              dd          t
          j        z  } | |          } | |          }t          |j        |j                   |j        |j        usJ |j        t
          j        u sJ  | |t
          j	                  }t          |j        |j                   |j        |j        usJ |j        t
          j	        u sJ d S )NrI   r3   FrA   r6   )
r9   rC   rD   r   r8   r:   r;   r   r7   cm)r0   rF   fake_uncert1fake_uncert2s       r   test_init_fake_with_fakerP      s   Yq\\!!!Q''F;v&&L;|,,L|)6222V++++;vE222L;|%888L|)<+=>>>!33333Yq\\!!!Q''!%/F;v&&L;|,,L|)6<888V\1111%%%%;|!$777L|)6<888V\1111$$$$$$r   c                 *   ddd} | |          }|j         |k    sJ  | |t          j                  }|j         |k    sJ |j        t          j        u sJ  | |d          }|j         |k    sJ t	          |          t	          |          k    sJ d S )Ng333333@g333333?)rdnoisegainr6   FrA   )r8   r:   sr7   idrE   s      r   !test_init_fake_with_somethingElserV      s     c**F+f%%K&&&& +f13///K&&&&qs""""+f5111K&&&&k??bjj((((((r   c                     t          j        d                              dd          } t          |           }t	          j        t                    5  t          |           d d d            n# 1 swxY w Y   t          |           }t	          j        t                    5  t          |           d d d            d S # 1 swxY w Y   d S )NrI   r3   )r9   rC   rD   r   pytestraisesr
   r   )rF   
std_uncertr<   s      r   %test_init_fake_with_StdDevUncertaintyr[      s4    Yq\\!!!Q''F"6**J	9	:	: $ $
###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ "&))K	9	:	: ' '+&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's$   A--A14A1 B==CCc                      t          ddg          } | j        dk    sJ t          ddg          }|j        dk    sJ t          ddg          }|j        dk    sJ t	          ddg          }|j        dk    sJ d S )Nr@   r4   r   stdvarivar)r   r   r   r   r   )r<   rZ   
var_uncertivar_uncerts       r   test_uncertainty_typerb      s    !2q'**K'61111"B7++J&%////$b!W--J&%////!2q'**K'6111111r   c                  n    t          ddg          } | j        rJ t          ddg          }|j        sJ d S )Nr@   r4   )r   supports_correlatedr   )r<   rZ   s     r   test_uncertainty_correlatedre      sH    !2q'**K...."B7++J))))))r   c                      ddl m ddlm d
fd	} d }d } | |t                      | |t                     ddlm fd}fd	} | |            | |           d S )Nr   )defaultdict)get_objectsc                 z    t                                  D ]}t          |          xx         dz  cc<     |               t                                  D ]}t          |          xx         dz  cc<    | t          fdD                       sJ dS |         |         z
  dk    sJ 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).
        r3   Nc              3   B   K   | ]}|         |         z
  d k    V  dS )r   Nr   ).0kafterbefores     r   	<genexpr>zDtest_for_leak_with_uncertainty.<locals>.test_leak.<locals>.<genexpr>   s5      @@QuQx&)+q0@@@@@@r   r   )inttypeall)funcspecific_objectsirm   rn   rg   rh   s      @@r   	test_leakz1test_for_leak_with_uncertainty.<locals>.test_leak   s     S!! 	! 	!A477OOOq OOOOC   	  	 A$q''NNNaNNNN#@@@@@%@@@@@@@@@@)*V4D-EEJJJJJJr   c                  H    t          t          j        d                     d S Nr?   )r	   r9   onesr   r   r   non_leaker_nddataz9test_for_leak_with_uncertainty.<locals>.non_leaker_nddata   s      	rws||r   c                      t          t          j        d          t          t          j        d                               d S Nr?   uncertainty)r	   r9   ry   r   r   r   r   leaker_nddataz5test_for_leak_with_uncertainty.<locals>.leaker_nddata   s4    rws||):273<<)H)HIIIIIIr   r   c                  B      t          j        d                     d S rx   )r9   ry   r   s   r   non_leaker_nddataarrayz>test_for_leak_with_uncertainty.<locals>.non_leaker_nddataarray   s!    BGCLL!!!!!r   c                        t          j        d          t          t          j        d                               d S r|   )r9   ry   r   r   s   r   leaker_nddataarrayz:test_for_leak_with_uncertainty.<locals>.leaker_nddataarray  s7    BGCLL.?.M.MNNNNNNr   r   )collectionsrg   gcrh   r	   astropy.nddata.compatr   )rv   rz   r   r   r   r   rg   rh   s        @@@r   test_for_leak_with_uncertaintyr      s    ('''''K K K K K K K,  
J J J I(((ImV$$$ 211111" " " " "O O O O O I$k222I +.....r   c                      t          dd          } t          d| j                  }| j        j        j        | j        k    sJ |j        j        j        |j        k    sJ d S )Nr3   r}   r4   )r	   r~   parent_nddatar"   )ndd1ndd2s     r   test_for_stolen_uncertaintyr   	  sg    !###D!!1222D).$);;;;).$);;;;;;r   c                     t          t          j        d          t          j                  } t          j        t          j        |                     }t          j        	                    | j
        |j
                   | j        |j        k    sJ t          j        t                    5  |j         d d d            d S # 1 swxY w Y   d S )Nr5   r6   )r   r9   ry   r:   rJ   pickleloadsdumpstestingr   r8   r7   rX   rY   r   r   )r~   uncertainty_restoreds     r   test_stddevuncertainty_pickler     s    #BGAJJQS999K!<[(A(ABBJ!!+"35I5OPPP388888	6	7	7 + +**+ + + + + + + + + + + + + + + + + +s   )B>>CCc                     | g dt           j                  }t          |j        t           j                  sJ |j        j                            t           j                  sJ  | g d          }t          |j        t           j                  sJ |j        j                            t           j                  sJ d S r2   )r:   r;   
isinstancequantityQuantityr7   is_equivalentdimensionless_unscaled)r0   r<   fake_uncert_nounits      r   test_quantityr     s    +iiiae444Kk*AJ77777$221599999$YYY//(11:>>>>>&+99!:RSSSSSSSr   c                 p     | ddg          }d|_         t          |j         t          j                  sJ d S )Nr3   electron)r7   r   r:   UnitBase)r0   vs     r   4test_setting_uncertainty_unit_results_in_unit_objectr   &  s>     	QFAAFafaj)))))))r   NDClassc                      | dd          } |d          }||_         t          j        t          j                  5  |j        dz  |_        d d d            d S # 1 swxY w Y   d S )Nr3   r;   r6      )r~   rX   rY   r:   UnitConversionErrorr7   )r   r0   r   r   s       r   :test_changing_unit_to_value_inconsistent_with_parent_failsr   /  s    
 715!!!DAAD	q,	-	-  B                 s   AA"AzUncertClass, expected_unitr4   r3   c                 z     | ddgt           j                  } |ddg          }||_        |j        |k    sJ d S Nr3   r6   r:   r;   r~   r7   r   r0   expected_unitnddr   s        r   7test_assigning_uncertainty_to_parent_gives_correct_unitr   >  sQ     '1a&qu
%
%
%CQFACO6]""""""r   c                 ~     | ddgt           j                  } |ddg|          }||_        |j        |k    sJ d S r   r   r   s        r   8test_assigning_uncertainty_with_unit_to_parent_with_unitr   R  sV     '1a&qu
%
%
%CQF///ACO6]""""""r   c                      | ddgt           j                  } |ddgt           j                  }t          j        t           j                  5  ||_        d d d            d S # 1 swxY w Y   d S r   )r:   r;   secondrX   rY   r   r~   )r   r0   r   r   s       r   8test_assigning_uncertainty_with_bad_unit_to_parent_failsr   f  s     '1a&qu
%
%
%CQF***A	q,	-	-                   s   A&&A*-A*c                 
   t          j        dd                              dd          t          j        z  } | |          }|                    |           }t          |j        |j                   |j        |j        k    sJ d S Nr3      r4   rI   )	r9   rC   rD   r:   r;   represent_asr   r8   r7   r0   rF   start_uncertfinal_uncerts       r   +test_self_conversion_via_variance_supportedr   t  s    Yq"%%a++ae3F;v&&L,,[99L|)<+=>>> 1111111r   zUncertClass,to_variance_funcc                     | dz  S )Nr4   r   xs    r   <lambda>r     s
    1a4 r   c                     | S r   r   r   s    r   r   r     s    1 r   c                     d| z  S )Nr3   r   r   s    r   r   r     s
    A r   c                    t          j        dd                              dd          t          j        z  } | |          }|                    t                    }|                    |           }t           ||j                  |j                   t          |j        |j                   |j
        |j
        k    sJ d S r   )r9   rC   rD   r:   r;   r   r   r   r8   r   r7   )r0   to_variance_funcrF   r   r`   r   s         r   *test_conversion_to_from_variance_supportedr   }  s     Yq"%%a++ae3F;v&&L**+>??J**;77L$$\%788*:JKKK|)<+=>>> 1111111r   c                    t          j        dd                              dd          t          j        z  } | |          }t          j        t                    5  |                    |           }d d d            d S # 1 swxY w Y   d S r   )	r9   rC   rD   r:   r;   rX   rY   	TypeErrorr   r   s       r   /test_self_conversion_via_variance_not_supportedr     s    Yq"%%a++ae3F;v&&L	y	!	! > >#00==> > > > > > > > > > > > > > > > > >s   A>>BBc                     d} dt          j        t          j        |                                         |           }t	          |          }|j        }|d         t          j        t          j        |           t          j                                     k    sJ t          j        |           t          j        fdt          t          |                     D                                }t          j	        t          j
        |dd          |                    sJ t          j        |t          t          dt          |           dz
                                }|j        d         |d         k    sJ t          ||          }t          j        |           t          j                           }t          j	        t          j
        |j        |                    sJ d S )N)   rI      r5   r4   )r3   r4   r   c                     g | ]}|v|	S r   r   )rk   ru   preserve_axess     r   
<listcomp>z0test_reshape_ndarray_methods.<locals>.<listcomp>  s#    III!=2H2H!2H2H2Hr   r3   )axis)r9   rC   prodrD   r   shaper8   rangelenrr   equalsumtupler   )	r   arrreshaped_arr	new_shapeshape_unchanged_axessummed
unravelledshape_preservedr   s	           @r   test_reshape_ndarray_methodsr     s   EM
)BGENN
#
#
+
+E
2
2C-c=AAL"I Q<2728E??28M3J3J#KLLLLLL 8E??
IIIIU3u::..IIIJJ 6"(9QRR=*>??@@@@@ VLuU1c%jj1n-E-E'F'FGGGF<?il****(fmDDJhuoobh}&=&=>O6"(:+_==>>>>>>>r   )7r   numpyr9   rX   numpy.testingr   r   astropyr   r:   astropy.nddata.ccddatar   r   r   astropy.nddata.nddatar	   astropy.nddata.nduncertaintyr
   r   r   r   r   r   r   r   r   r   uncertainty_types_to_be_tested)uncertainty_types_with_conversion_support,uncertainty_types_without_conversion_supportmarkparametrizer=   rG   rK   rP   rV   r[   rb   re   r   r   r   r   r   r   r;   r   r   r   r   zipr   r   r   r   r   r   <module>r      s         = = = = = = = =       * * * * * * - - - - - - ( ( ( ( ( (
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
D    m   2 "  - )
 1@AS/T , (FGG% % HG% (FGG% % HG%  (FGG# # HG#$ (FGG% % HG%2 (FGG) ) HG)$
' 
' 
'2 2 2* * *3/ 3/ 3/l< < <+ + + (FGGT T HGT '):OL * * * V['$BCC'):OL    DC V['$BCC 	aeQh'	AE"	!aeQh,' # #  DC# V['$BCC 	aeQh'	AE"	!aeQh,' # #  DC# V['$BCC(,=R    DC (QRR2 2 SR2 "C1	oo6  2 2 2 (TUU> > VU>? ? ? ? ?r   