U
    e»{jA  ã                   @   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 d d
lmZmZ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 (dd d!g¡d"g¡d#d$„ ƒZ)d%d&„ Z*d'd(„ Z+d)d*„ Z,d+d,„ Z-d-d.„ Z.d/d0„ Z/d1d2„ Z0d3d4„ Z1d5d6„ Z2d7d8„ Z3d9d:„ Z4d;d<„ Z5d=d>„ Z6d d?l7m8Z8 G d@dA„ dAe8ƒZ9dBdC„ Z:dDdE„ Z;dFdG„ Z<dHdI„ Z=dJdK„ Z>dLdM„ Z?dNdO„ Z@G dPdQ„ dQeƒZAdRdS„ ZBdS )Té    N)ÚOrderedDict)Úassert_array_equal)Úunits)Ú_testing)ÚNDData)ÚStdDevUncertainty)ÚNumpyRNGContext©ÚWCS)ÚBaseHighLevelWCSÚHighLevelWCSWrapperÚSlicedLowLevelWCSé   )ÚFakeUncertaintyc                       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__© ú_/var/www/html/bwave/python/venv/lib/python3.8/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   4   s    zMinimalUncertainty.__init__c                 C   s   dS )Nztotally and completely faker   r   r   r   r   Úuncertainty_type7   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_psfZ_unitÚ_meta)r   ÚdataÚuncertaintyÚmaskÚwcsÚmetaÚunitÚpsfr   r   r   r   =   s    
zBadNDDataSubclass.__init__)NNNNNN)r   r   r    r   r   r   r   r   r(   <   s         ør(   c                  C   s†   t dddgƒ} tdƒ}|| _| j|ks*t‚tdƒ| _| jj| ksDt‚t | ƒ} t| jtƒs\t‚d| _t| jtƒrrt‚| jjdks‚t‚d S )Nr   é   é   é   é
   )r   r$   r,   ÚAssertionErrorr   Úparent_nddataÚ
isinstanceÚarray)ÚndZgood_uncertaintyr   r   r   Útest_uncertainty_setterQ   s    
r;   c                  C   sX   t dddgƒ} d| _| jst‚d| _| jr.t‚t | dd�} | jsDt‚d| _| jrTt‚d S )Nr   r2   r3   TF©r-   )r   r-   r6   )r:   r   r   r   Útest_mask_setterb   s    


r=   c                	   C   s    t  t¡� tƒ  W 5 Q R X d S r   ©ÚpytestÚraisesÚ	TypeErrorr   r   r   r   r   Útest_nddata_emptyq   s    rB   c                  C   s.   dddg} t | ƒ}t | ¡|jk ¡ s*t‚d S )Nr   r2   r3   )r   Únpr9   r+   Úallr6   )Zinpr:   r   r   r   Útest_nddata_init_data_nonarrayv   s    
rE   c               	   C   sþ   t dƒ� ttj d¡ƒ} W 5 Q R X | jjdks4t‚| jjdksDt‚| jjt t	¡ksZt‚tt 
dddgddd	gg¡ƒ} | jjd	ksˆt‚| jjt t¡ksžt‚t d¡}t|ƒ}d
|d< |jd d
ksÊt‚t d¡}t|dd�}d
|d< |jd d
ksút‚d S )Né{   ©r5   r5   éd   r   r2   r3   é   r4   é   r   )r   r   T©Úcopy)r   r   rC   Úrandomr+   r   r6   Úsizer   Úfloatr9   ÚintÚones)r:   ÚaZnd_refr   r   r   Útest_nddata_init_data_ndarray|   s     


rS   c               	   C   s"  t dƒ�& ttj d¡tj d¡dkd� W 5 Q R X t dƒ�$ tj d¡} tj | dk| ¡}W 5 Q R X 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t
‚|j	d
 |j	d
 k�st
‚d S )NiÈ  rG   g      à?r<   i90  rH   r   r5   iÍ[é   TrK   )r   r   rC   rM   ZrandnÚmaZmasked_wherer   r-   r+   r6   )rR   Zmarrr:   r   r   r   Ú!test_nddata_init_data_maskedarray–   s"    
*


rV   r+   r2   r3   r4   c                 C   s–   | t j }t|ƒ}|j|jks"t‚t|jt |j	¡ƒ |jj
dkr’d|j	d< |jd |j	d ksdt‚t|dd�}d|j	d< |jd |j	d ks’t‚d S )Nr   rH   TrK   r4   )ÚuZadur   r0   r6   r   r+   rC   r9   r&   rN   )r+   ZquantityÚnddr   r   r   Útest_nddata_init_data_quantity°   s    


rY   c                  C   s|   t  ddg¡} | tj }d}t jj||d�}t|ƒ}t|j| ƒ |jtjksPt	‚t
|jtjƒrbt	‚t j |jt  |¡¡ d S )Nr2   r3   Fr<   )rC   r9   rW   ÚmrU   r   r   r+   r0   r6   r8   ZQuantityÚtestingr-   )rR   ÚqrZ   Úmqr:   r   r   r   Ú%test_nddata_init_data_masked_quantityÃ   s    
r^   c               
   C   s@  t t dg¡ƒ} t | ƒ}|j| jks(t‚|j| jks8t‚|j| jksHt‚|j| jksXt‚|j| jksht‚|j	| j	ksxt‚t t 
d¡ƒ} t | ƒ}| j|jksžt‚t | dd�}d| jd< | jd |jd ksÌt‚t t dg¡dtdƒtjdd	itdd
�t dg¡d�} t | ƒ}|j| jk�st‚|j| jk�s.t‚|jj| jjk�sDt‚|j| jk�sVt‚|j| jk�sht‚|j| jk�szt‚|j	| j	k�sŒt‚t | dtdƒtjdditdd
�t dg¡d�}|j| jk�sÌt‚|j| jk	�sÞt‚|jj| jjk�sôt‚|j| jk�st‚|j| jk�st‚|j| jk�s*t‚|j	| j	k�s<t‚d S )Nr   ©r4   r4   TrK   r5   )r2   r3   FÚdestZmordor©Únaxis)r-   r,   r0   r/   r.   r1   éÈ   ZobserverZMEé   )r   rC   r9   r.   r6   r,   r-   r0   r/   r1   rQ   r+   r   rW   Úsr
   Úkm)Znd1Únd2Únd3r   r   r   Útest_nddata_init_data_nddataÑ   s^    


ù	
ù	ri   c               	   C   sÒ   t dƒ} tdddddddƒ}t t¡� t|ƒ W 5 Q R X tt ddg¡| dtt	dd	�ƒd
dit
jƒ}t|ƒ}|j|jks~t‚|j|jksŽt‚|j|jksžt‚|j|jks®t‚|j|jks¾t‚|j|jksÎt‚d S )Nr3   FTr2   ZgollumrH   é   r   ra   Zenemyzblack knight)r   r(   r?   r@   rA   r   rC   r9   r   r
   rW   rf   r0   r6   r/   r,   r-   r.   r+   )ZuncertZbndZbnd_goodr:   r   r   r   Ú%test_nddata_init_data_nddata_subclass  s&    úrk   c               	   C   sT   t  t¡� tddiƒ W 5 Q R X G dd„ dƒ} t  t¡� t| ƒ ƒ W 5 Q R X d S )NrR   Ú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 )Nr4   )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__0  s    z2test_nddata_init_data_fail.<locals>.Shape.__repr__N)r   r   r    r   rn   r   r   r   r   ÚShape,  s   ro   r>   )ro   r   r   r   Útest_nddata_init_data_fail&  s
    rp   c                  C   s6   t tƒ ƒ} t| jtƒst‚t | ƒ}t|jtƒs2t‚d S r   )r   r   r8   r+   r6   )Zndd1Zndd2r   r   r   Útest_nddata_init_data_fakes7  s    
rq   c                  C   st   t t d¡d�} tt d¡| d�}|jj|ks2t‚t t d¡d d�}t||d�}|j|ks`t‚|jj|kspt‚d S )Nr_   )r9   )r,   r2   )r   rC   rQ   r   r,   r7   r6   )rW   ÚdÚu2Zd2r   r   r   Útest_param_uncertaintyB  s    rt   c                  C   sR   t dgtdd�d�} | jd k	s"t‚t | tdd�d�}|jd k	rJ|j| jk	sNt‚d S )Nr   ra   ©r.   )r   r
   r.   r6   )r:   rg   r   r   r   Útest_param_wcsN  s    rv   c               	   C   sÒ   t  t¡� tdgdd� W 5 Q R X tdddgi d�} t| jƒdksHt‚tdddgƒ} t| jtƒsft‚t| jƒdksxt‚t| ddid�}t|jƒdksšt‚t|ddid�}t|jƒdks¼t‚|jd dksÎt‚d S )	Nr   r3   )r/   r2   r   ÚimageÚsunÚmoon)	r?   r@   rA   r   Úlenr/   r6   r8   r   )r:   rg   rh   r   r   r   Útest_param_metaW  s    r{   c                  C   sŒ   t dgdd�} | jrt‚t | dd�}|js.t‚t tjjdgdd�dd�}|jsRt‚tjjt ddg¡tj dd�}t |dd�}|jsˆt‚d S )Nr   Fr<   Tr2   r3   )r   r-   r6   rC   rU   r9   rW   rZ   )r:   rg   rh   r]   Znd4r   r   r   Útest_param_maskh  s    


 r|   c               	   C   sÚ   t  t¡� tt d¡dd� W 5 Q R X tdddgdd� t dddg¡tj } t| dd�}|j	| j	kslt
‚|j	tjks|t
‚tjjt ddg¡tj d	d
�}t|tjd�}|j	tjksºt
‚t|dd�}|j	tjksÖt
‚d S )Nr_   ZNotAValidUnit©r0   r   r2   r3   ZmeterÚcmFr<   rf   )r?   r@   Ú
ValueErrorr   rC   rQ   r9   rW   rZ   r0   r6   r~   rU   re   rf   )r\   r:   r]   rg   rh   r   r   r   Útest_param_unitx  s     r€   c                  C   sr   t t d¡tt d¡tjd�tjd�} t | ¡}t |¡}t	|j
ƒtksLt‚|j
j|ks\t‚|j
jtjksnt‚d S ©Nr3   r4   r}   )r,   r0   )r   rC   rQ   r   rW   rZ   ÚpickleÚdumpsÚloadsÚtyper,   r6   r7   r0   )rX   Z
ndd_dumpedÚndd_restoredr   r   r   Ú#test_pickle_nddata_with_uncertaintyŠ  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sbt‚|jd kspt‚d S r�   )r   rC   rQ   r   rW   rZ   r‚   rƒ   r,   r„   r[   r   r9   r0   r6   r7   )rX   Zuncertainty_dumpedZuncertainty_restoredr   r   r   Útest_pickle_uncertainty_only•  s      ÿ
rˆ   c                  C   s>   t t d¡tjd�} t | ¡}t |¡}tj 	| j
|j
¡ d S )Nr3   r}   )r   rC   rQ   rW   rZ   r‚   rƒ   r„   r[   r   r+   )rX   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_classrC   r9   Úargsr   r   r   r   r‹   °  s   r‹   c                  C   sø   t t dddg¡ƒ} t| ƒdks$t‚t t ddgddgg¡ƒ}t|ƒt ddd … ¡ks\t‚t t ddgddggddgd	d
ggg¡ƒ}t|ƒt ddd … ¡ks¤t‚t t dddg¡dd�}t|ƒdksÌt‚t t dddg¡dd�}t|ƒdksôt‚d S )Nr   r2   r3   z[1 2 3]rI   z
        [[1 2]
         [3 4]]r4   rJ   é   é   zD
        [[[1 2]
          [3 4]]

         [[5 6]
          [7 8]]]rf   r}   z
[1 2 3] kmzerg cm^-2 s^-1 A^-1z[1 2 3] erg / (A cm2 s))r   rC   r9   Ústrr6   ÚtextwrapÚdedent)Úarr1dÚarr2dÚarr3dÚarrr   r   r   Útest_nddata_str¶  s$    
ýÿ
*
úÿ
r–   c                  C   s¤  t t dddg¡ƒ} t| ƒ}|dks(t‚t|ƒ}t |j| jk¡sFt‚|j| jksVt‚t t ddgddgg¡ƒ}t|ƒ}|t	 
ddd … ¡ks’t‚t|ƒ}t |j|jk¡s°t‚|j|jksÀt‚t t ddgddggddgd	d
ggg¡ƒ}t|ƒ}|t	 
ddd … ¡k�st‚t|ƒ}t |j|jk¡�s.t‚|j|jk�s@t‚t t dddg¡dd�}t|ƒ}|dk�snt‚t|ƒ}t |j|jk¡�sŽt‚|j|jk�s t‚d S )Nr   r2   r3   zNDData([1, 2, 3])rI   z1
        NDData([[1, 2],
                [3, 4]])r4   rJ   r�   rŽ   zh
        NDData([[[1, 2],
                 [3, 4]],

                [[5, 6],
                 [7, 8]]])rf   r}   zNDData([1, 2, 3], unit='km'))r   rC   r9   Úreprr6   ÚevalrD   r+   r0   r�   r‘   )r’   re   Úgotr“   r”   r•   r   r   r   Útest_nddata_reprØ  s@    ýÿ
*úÿ
rš   c               	   C   s0   t t d¡ƒ} t t¡� | d  W 5 Q R X d S )Nr_   r   ©r   rC   rQ   r?   r@   rA   ©rX   r   r   r   Útest_slicing_not_supported	  s    r�   c               	   C   s0   t t d¡ƒ} t t¡� | |   W 5 Q R X d S ©Nr_   r›   rœ   r   r   r   Útest_arithmetic_not_supported  s    rŸ   c               	   C   s¤   t t d¡ƒ} t t¡� d| _W 5 Q R X d}tj|dg| dg| dg| dg| d�| _t t	¡�4 tj|dg| dg| dg| dg| d�| _W 5 Q R X d S )	Nr_   zI am not a WCSr2   Údegr   r5   r   )rb   ÚctypeZcrpixZcrvalZcdelt)
r   rC   rQ   r?   r@   rA   r.   Ú
nd_testingZ_create_wcs_simpler   )rX   rb   r   r   r   Ú"test_nddata_wcs_setter_error_cases  s&    ûûr£   c                  C   sF   t t d¡ƒ} tƒ }t|dƒ}t|tƒr,t‚|| _t| jtƒsBt‚d S )Nr_   r4   )	r   rC   rQ   r
   r   r8   r   r6   r.   )rX   r.   Ú	low_levelr   r   r   Ú)test_nddata_wcs_setter_with_low_level_wcs0  s    
r¥   c                  C   s6   t ƒ } t| dƒ}tt d¡|d�}t|jtƒs2t‚d S )Nr4   r_   ru   )	r
   r   r   rC   rQ   r8   r.   r   r6   )r.   r¤   rX   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.   E  s    zNDDataCustomWCS.wcsN)r   r   r    r"   r.   r   r   r   r   r§   D  s   r§   c                   C   s   t t d¡ƒ d S rž   )r§   rC   rQ   r   r   r   r   Útest_overriden_wcsJ  s    r¨   )Cr‚   r�   Úcollectionsr   ÚnumpyrC   r?   Znumpy.testingr   Zastropyr   rW   Zastropy.nddatar   r¢   Zastropy.nddata.nddatar   Zastropy.nddata.nduncertaintyr   Zastropy.utilsr   Zastropy.wcsr
   Zastropy.wcs.wcsapir   r   r   Ztest_nduncertaintyr   r   r$   r(   r;   r=   rB   rE   rS   rV   ÚmarkZparametrizer9   rY   r^   ri   rk   rp   rq   rt   rv   r{   r|   r€   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`   
:	
"1