a
    ߙfb@                     @   s  d dl Z d dlZd dlmZ 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mZmZ d
dlmZ d dlmZ G dd dZG dd dZG dd de
Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%ej&'de(g d d!gd"d# Z)d$d% Z*d&d' Z+d(d) Z,d*d+ Z-d,d- Z.d.d/ Z/d0d1 Z0d2d3 Z1d4d5 Z2d6d7 Z3d8d9 Z4d:d; Z5d<d= Z6d d>l7m8Z8 G d?d@ d@e8Z9dAdB Z:dCdD Z;dEdF Z<dGdH Z=dIdJ Z>dKdL Z?dMdN Z@G dOdP dPe
ZAdQdR ZBdS )S    N)OrderedDict)assert_array_equal)NDData)StdDevUncertainty)units)NumpyRNGContextWCS)HighLevelWCSWrapperSlicedLowLevelWCSBaseHighLevelWCS   )FakeUncertainty)_testingc                       sD   e Zd ZdZ fddZdd Zdd Zdd	 Zed
d Z	  Z
S )FakeNumpyArrayzs
    Class that has a few of the attributes of a numpy array.

    These attributes are checked for by NDData.
    c                    s   t    d S N)super__init__self	__class__ ?lib/python3.9/site-packages/astropy/nddata/tests/test_nddata.pyr      s    zFakeNumpyArray.__init__c                 C   s   d S r   r   r   r   r   r   shape!   s    zFakeNumpyArray.shapec                 C   s   d S r   r   r   r   r   r   __getitem__$   s    zFakeNumpyArray.__getitem__c                 C   s   d S r   r   r   r   r   r   	__array__'   s    zFakeNumpyArray.__array__c                 C   s   dS )NZfaker   r   r   r   r   dtype*   s    zFakeNumpyArray.dtype)__name__
__module____qualname____doc__r   r   r   r   propertyr   __classcell__r   r   r   r   r      s   r   c                   @   s$   e Zd ZdZdd Zedd ZdS )MinimalUncertaintyzL
    Define the minimum attributes acceptable as an uncertainty object.
    c                 C   s
   || _ d S r   )_uncertainty)r   valuer   r   r   r   3   s    zMinimalUncertainty.__init__c                 C   s   dS )Nztotally and completely faker   r   r   r   r   uncertainty_type6   s    z#MinimalUncertainty.uncertainty_typeN)r   r   r    r!   r   r"   r'   r   r   r   r   r$   /   s   r$   c                   @   s   e Zd ZdddZdS )BadNDDataSubclassNc                 C   s(   || _ || _|| _|| _|| _|| _d S r   )_datar%   Z_maskZ_wcsZ_unitZ_meta)r   datauncertaintymaskwcsmetaunitr   r   r   r   =   s    zBadNDDataSubclass.__init__)NNNNN)r   r   r    r   r   r   r   r   r(   ;   s     r(   c                  C   s   t g d} td}|| _| j|u s(J td| _| jj| u sBJ t | } t| jtsZJ d| _t| jtrpJ | jjdksJ d S )Nr            
   )r   r$   r+   r   parent_nddata
isinstancearray)ndZgood_uncertaintyr   r   r   test_uncertainty_setterH   s    
r9   c                  C   sV   t g d} d| _| jsJ d| _| jr,J t | dd} | jsBJ d| _| jrRJ d S )Nr0   TFr,   )r   r,   )r8   r   r   r   test_mask_setterY   s    


r;   c                   C   s4   t t t  W d    n1 s&0    Y  d S r   pytestraises	TypeErrorr   r   r   r   r   test_nddata_emptyh   s    r@   c                  C   s,   g d} t | }t| |jk s(J d S )Nr0   )r   npr7   r*   all)Zinpr8   r   r   r   test_nddata_init_data_nonarraym   s    rC   c                  C   s  t d  ttjd} W d    n1 s.0    Y  | jjdksHJ | jjdksXJ | jjttksnJ tt	g dg dg} | jjdksJ | jjtt
ksJ td}t|}d|d< |jd dksJ td}t|d	d
}d|d< |jd dksJ d S )N{   r4   r4   d   r0   )   r3      rH   r   )r   r   Tcopy)r   r   rA   randomr*   r   sizer   floatr7   intones)r8   aZnd_refr   r   r   test_nddata_init_data_ndarrays   s     
.

rQ   c                  C   sJ  t d0 ttjdtjddkd W d    n1 s>0    Y  t d. tjd} tj| dk| }W d    n1 s0    Y  t|}t|j|j t|j	|j	 |jd  |jd< d	|j	d
< t|j|j t|j	|j	 t|dd}|jd  |jd< d|j	d
< |jd |jd ks,J |j	d
 |j	d
 ksFJ d S )Ni  rE   g      ?r:   i90  rF   r   r4   i[   TrI   )
r   r   rA   rK   ZrandnmaZmasked_wherer   r,   r*   )rP   Zmarrr8   r   r   r   !test_nddata_init_data_maskedarray   s&    
$
0

rT   r*   r0   r3   c                 C   s   | t j }t|}|j|jks"J t|jt|j |jj	dkrd|jd< |jd |jd ksdJ t|dd}d|jd< |jd |jd ksJ d S )Nr   rF   TrI   r3   )
uZadur   r/   r   r*   rA   r7   r&   rL   )r*   Zquantitynddr   r   r   test_nddata_init_data_quantity   s    


rW   c                  C   s|   t ddg} | tj }d}t jj||d}t|}t|j|  |jtjksPJ t	|jtj
rbJ t j|jt | d S )Nr1   r2   Fr:   )rA   r7   rU   mrS   r   r   r*   r/   r6   ZQuantitytestingr,   )rP   qrX   mqr8   r   r   r   %test_nddata_init_data_masked_quantity   s    
r\   c               	   C   s  t tdg} t | }|j| jks(J |j| jks8J |j| jksHJ |j| jksXJ |j| jkshJ t td} t | }| j	|j	u sJ t | dd}d| j	d< | j	d |j	d ksJ t tdgdt
dtjdd	itdd
d} t | }|j	| j	u sJ |j| ju sJ |jj| jjks*J |j| jks<J |j| jksNJ |j| jks`J t | dt
dtjdditdd
d}|j	| j	u sJ |j| jusJ |jj| jjksJ |j| jksJ |j| jksJ |j| jksJ d S )Nr   r3   r3   TrI   r4   )r1   r2   FdestZmordornaxis)r,   r+   r/   r.   r-      ZobserverZME)r   rA   r7   r-   r+   r,   r/   r.   rO   r*   r   rU   sr	   km)Znd1nd2nd3r   r   r   test_nddata_init_data_nddata   s@    
rf   c                  C   s   t d} tdddddd}tt t| W d    n1 sB0    Y  ttddg| dtt	ddd	d
it
j}t|}|j|jksJ |j|jksJ |j|jksJ |j|jksJ |j|ju sJ |j|ju sJ d S )Nr2   FTr1   ZgollumrF   r   r_   Zenemyzblack knight)r   r(   r=   r>   r?   r   rA   r7   r
   r	   rU   rc   r/   r.   r+   r,   r-   r*   )ZuncertZbndZbnd_goodr8   r   r   r   %test_nddata_init_data_nddata_subclass   s    &
rg   c                  C   s|   t t tddi W d    n1 s,0    Y  G dd d} t t t|   W d    n1 sn0    Y  d S )NrP   dictc                   @   s   e Zd Zdd Zdd ZdS )z)test_nddata_init_data_fail.<locals>.Shapec                 S   s
   d| _ d S )Nr3   )r   r   r   r   r   r     s    z2test_nddata_init_data_fail.<locals>.Shape.__init__c                 S   s   dS )N7r   r   r   r   r   __repr__  s    z2test_nddata_init_data_fail.<locals>.Shape.__repr__N)r   r   r    r   rj   r   r   r   r   Shape  s   rk   r<   )rk   r   r   r   test_nddata_init_data_fail  s
    *rl   c                  C   s6   t t } t| jtsJ t | }t|jts2J d S r   )r   r   r6   r*   )Zndd1Zndd2r   r   r   test_nddata_init_data_fakes  s    
rm   c                  C   st   t tdd} ttd| d}|jj|u s2J t tdd d}t||d}|j|u s`J |jj|u spJ d S )Nr]   )r7   )r+   r1   )r   rA   rO   r   r+   r5   )rU   dZu2Zd2r   r   r   test_param_uncertainty#  s    ro   c                  C   sR   t dgtddd} | jd us"J t | tddd}|jd urJ|j| jusNJ d S )Nr   r_   r-   )r   r	   r-   )r8   rd   r   r   r   test_param_wcs/  s    rq   c                  C   s   t t tdgdd W d    n1 s.0    Y  tg di d} t| jdksZJ tg d} t| jtsvJ t| jdksJ t| ddid}t|jdksJ t|ddid}t|jdksJ |jd dksJ d S )	Nr   r2   )r.   r0   r   ZimageZsunZmoon)r=   r>   r?   r   lenr.   r6   r   )r8   rd   re   r   r   r   test_param_meta8  s    ,rs   c                  C   s   t dgdd} | jrJ t | dd}|js.J t tjjdgdddd}|jsRJ tjjtddgtj dd}t |dd}|jsJ d S )Nr   Fr:   Tr1   r2   )r   r,   rA   rS   r7   rU   rX   )r8   rd   re   r[   Znd4r   r   r   test_param_maskI  s    


 rt   c                  C   s   t t" ttddd W d    n1 s20    Y  tg ddd tg dtj } t| dd}|j	| j	ks|J |j	tj
ksJ tjjtddgtj d	d
}t|tjd}|j	tjksJ t|dd}|j	tjksJ d S )Nr]   ZNotAValidUnitr/   r0   Zmetercmr1   r2   Fr:   rc   )r=   r>   
ValueErrorr   rA   rO   r7   rU   rX   r/   rv   rS   rb   rc   )rZ   r8   r[   rd   re   r   r   r   test_param_unitY  s    0 rx   c                  C   sr   t tdttdtjdtjd} t| }t|}t	|j
tu sLJ |j
j|u s\J |j
jtjksnJ d S Nr2   r3   ru   )r+   r/   )r   rA   rO   r   rU   rX   pickledumpsloadstyper+   r5   r/   )rV   Z
ndd_dumpedndd_restoredr   r   r   #test_pickle_nddata_with_uncertaintyk  s    


r   c                  C   st   t tdttdtjdtjd} t| j}t	|}tj
| jj|j | jj|jksbJ |jd u spJ d S ry   )r   rA   rO   r   rU   rX   rz   r{   r+   r|   rY   r   r7   r/   r5   )rV   Zuncertainty_dumpedZuncertainty_restoredr   r   r   test_pickle_uncertainty_onlyv  s    

r   c                  C   s>   t tdtjd} t| }t|}tj	| j
|j
 d S )Nr2   ru   )r   rA   rO   rU   rX   rz   r{   r|   rY   r   r*   )rV   Zdumpedr~   r   r   r   &test_pickle_nddata_without_uncertainty  s    

r   )MetaBaseTestc                   @   s   e Zd ZeZedggZdS )TestMetaNDDatag      ?N)r   r   r    r   Z
test_classrA   r7   argsr   r   r   r   r     s   r   c                  C   s   t tg d} t| dks"J t tddgddgg}t|tddd  ksZJ t tddgddggdd	gd
dggg}t|tddd  ksJ t tg ddd}t|dksJ t tg ddd}t|dksJ d S )Nr0   z[1 2 3]r   r1   r2   rG   z
        [[1 2]
         [3 4]]r3   rH         zD
        [[[1 2]
          [3 4]]

         [[5 6]
          [7 8]]]rc   ru   z
[1 2 3] kmzerg cm^-2 s^-1 A^-1z[1 2 3] erg / (A cm2 s))r   rA   r7   strtextwrapdedent)arr1darr2darr3darrr   r   r   test_nddata_str  s    *r   c                  C   s  t tg d} t| }|dks&J t|}t|j| jksDJ |j| jksTJ t tddgddgg}t|}|t	ddd  ksJ t|}t|j|jksJ |j|jksJ t tddgddggdd	gd
dggg}t|}|t	ddd  ksJ t|}t|j|jks,J |j|jks>J t tg ddd}t|}|dksjJ t|}t|j|jksJ |j|jksJ d S )Nr0   zNDData([1, 2, 3])r   r1   r2   rG   z1
        NDData([[1, 2],
                [3, 4]])r3   rH   r   r   zh
        NDData([[[1, 2],
                 [3, 4]],

                [[5, 6],
                 [7, 8]]])rc   ru   zNDData([1, 2, 3], unit='km'))
r   rA   r7   reprevalrB   r*   r/   r   r   )r   rb   Zgotr   r   r   r   r   r   test_nddata_repr  s8    *r   c                  C   sD   t td} tt | d  W d    n1 s60    Y  d S )Nr]   r   r   rA   rO   r=   r>   r?   rV   r   r   r   test_slicing_not_supported  s    r   c                  C   sD   t td} tt | |   W d    n1 s60    Y  d S Nr]   r   r   r   r   r   test_arithmetic_not_supported  s    r   c                  C   s   t td} tt d| _W d    n1 s40    Y  d}tj|dg| dg| dg| dg| d| _tt	> tj|dg| dg| dg| dg| d| _W d    n1 s0    Y  d S )	Nr]   zI am not a WCSr1   Zdegr   r4   r   )r`   ZctypeZcrpixZcrvalZcdelt)
r   rA   rO   r=   r>   r?   r-   
nd_testingZ_create_wcs_simplerw   )rV   r`   r   r   r   "test_nddata_wcs_setter_error_cases  s"    $r   c                  C   sF   t td} t }t|d}t|tr,J || _t| jtsBJ d S )Nr]   r3   )r   rA   rO   r	   r   r6   r   r-   )rV   r-   	low_levelr   r   r   )test_nddata_wcs_setter_with_low_level_wcs  s    
r   c                  C   s6   t  } t| d}ttd|d}t|jts2J d S )Nr3   r]   rp   )r	   r   r   rA   rO   r6   r-   r   )r-   r   rV   r   r   r   #test_nddata_init_with_low_level_wcs  s    
r   c                   @   s   e Zd Zedd ZdS )NDDataCustomWCSc                 C   s   t  S r   r   r   r   r   r   r-     s    zNDDataCustomWCS.wcsN)r   r   r    r"   r-   r   r   r   r   r     s   r   c                   C   s   t td d S r   )r   rA   rO   r   r   r   r   test_overriden_wcs  s    r   )Crz   r   collectionsr   r=   ZnumpyrA   Znumpy.testingr   Zastropy.nddata.nddatar   Zastropy.nddata.nduncertaintyr   Zastropyr   rU   Zastropy.utilsr   Zastropy.wcsr	   Zastropy.wcs.wcsapir
   r   r   Ztest_nduncertaintyr   Zastropy.nddatar   r   r   r$   r(   r9   r;   r@   rC   rQ   rT   ZmarkZparametrizer7   rW   r\   rf   rg   rl   rm   ro   rq   rs   rt   rx   r   r   r   Z!astropy.utils.tests.test_metadatar   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s`   
)	
)