a
    ߙfb                     @   s  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
 d dlmZ d dlmZ d dlmZ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 d dlmZ d dlm Z  dZ!ed" ej"j#e!e!gdZ$W d   n1 s0    Y  dd Z%dd Z&dd Z'dd Z(dd Z)dd Z*dd Z+dd Z,d d! Z-d"d# Z.d$d% Z/d&d' Z0d(d) Z1d*d+ Z2d,d- Z3d.d/ Z4d0d1 Z5d2d3 Z6d4d5 Z7d6d7 Z8d8d9 Z9d:d; Z:d<d= Z;d>d? Z<d@dA Z=dBdC Z>dDdE Z?dFdG Z@dHdI ZAejBCdJdKdLgejBCdMdNdOejD dOejE ejF gejBCdPdQdRgdSdT ZGejBCdJdUdVgejBCdWdNejHfdOejD ejHfdOejF dRfgejBCdPdQdRgdXdY ZIdZd[ ZJd\d] ZKd^d_ ZLd`da ZMdbdc ZNddde ZOdfdg ZPdhdi ZQdjdk ZRdldm ZSdndo ZTdpdq ZUdrds ZVdtdu ZWdvdw ZXejBYdxdydz ZZd{d| Z[d}d~ Z\dd Z]ejBCdg ddd Z^dd Z_ejBCdg ddd Z`dd ZaejBCdee	e
gdd ZbejBCdee	e
gdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd ZldS )    N)fits)StdDevUncertaintyMissingDataAssociationExceptionVarianceUncertaintyInverseVariance)units)log)WCSFITSFixedWarning)NumpyRNGContext)get_pkg_data_filenameget_pkg_data_filenamesget_pkg_data_contents)AstropyWarning)CCDData)_testing)Tabled   {   )sizec                  C   s*   t  } ddd}t| tjd}||_|S )zf
    Return a CCDData object of size DEFAULT_DATA_SIZE x DEFAULT_DATA_SIZE
    with units of ADU.
    *   znot 42)Zmy_keyZyour_keyunit)_random_arraycopyr   uaduheader)dataZ	fake_metaccd r    @lib/python3.9/site-packages/astropy/nddata/tests/test_ccddata.pycreate_ccd_data   s
    
r"   c                   C   s4   t t t  W d    n1 s&0    Y  d S N)pytestraises	TypeErrorr   r    r    r    r!   test_ccddata_empty*   s    r'   c                   C   s@   t t" ttddg W d    n1 s20    Y  d S )N   )r$   r%   
ValueErrorr   npzerosr    r    r    r!   test_ccddata_must_have_unit/   s    r,   c                  C   s:   t  } tt d | _W d    n1 s,0    Y  d S r#   )r"   r$   r%   r&   r   ccd_datar    r    r!   'test_ccddata_unit_cannot_be_set_to_none4   s    r/   c                  C   s\   t t>} tg ddddiddid dt| jv s:J W d    n1 sN0    Y  d S )N   r(       r1   r(   )r   metar   z can't have both header and meta.)r$   r%   r)   r   strvalue)excr    r    r!   !test_ccddata_meta_header_conflict:   s    r8   c                  C   sB   t  } | jttfksJ | jtt ks*J | jttks>J d S r#   )r"   shapeDEFAULT_DATA_SIZEr   dtyper*   floatr-   r    r    r!   test_ccddata_simple@   s    r=   c                  C   s*   t tddgdd} | jtju s&J d S )Nr(   electronr   )r   r*   r+   r   r   r>   r   r    r    r!   +test_ccddata_init_with_string_electron_unitG   s    r@   c                 C   s   t  }t|}t|g}| dj}|| tj|t	j
d}|jttfksTJ |jtt ksfJ t|jjtjs|J |j D ]\}}|j| |ksJ qd S )N
afile.fitsr   )r"   r   
PrimaryHDUHDUListjoinstrpathwritetor   readr   r>   r9   r:   r   r*   Z
issubdtyper   r;   Zfloatingr   itemsr4   )tmpdirr.   hduhdulistfilenamecdkvr    r    r!   test_initialize_from_FITSL   s    

rP   c                 C   sz   t ddg}t|}tj |jd< | dj	}|
| t|}|jtju sXJ tj|dd}|jtju svJ d S )Nr(   bunitrA   photonr   )r*   r+   r   rB   r   r   	to_stringr   rD   rE   rF   r   rG   r   rR   )rI   fake_imgrJ   rL   r   ccd2r    r    r!   -test_initialize_from_fits_with_unit_in_headerZ   s    


rV   c                 C   sV   t ddg}t|}d|jd< | dj}|| t	|}|j
tju sRJ d S )Nr(   ZADUrQ   rA   )r*   r+   r   rB   r   rD   rE   rF   r   rG   r   r   r   )rI   rT   rJ   rL   r   r    r    r!   ,test_initialize_from_fits_with_ADU_in_headeri   s    



rW   c                 C   sh   t td}d|jd< | dj}|| t	t
 t| W d    n1 sZ0    Y  d S )Nr(   r(   zdefinetely-not-a-unitrQ   rA   )r   rB   r*   onesr   rD   rE   rF   r$   r%   r)   r   rG   )rI   rJ   rL   r    r    r!   5test_initialize_from_fits_with_invalid_unit_in_headert   s    

rZ   c                 C   sT   t td}d|jd< | dj}|| t	|}|j
tjtj ksPJ d S )NrX   zELECTRONS/SrQ   rA   )r   rB   r*   rY   r   rD   rE   rF   r   rG   r   r   r>   s)rI   rJ   rL   r   r    r    r!   Atest_initialize_from_fits_with_technically_invalid_but_not_really}   s    


r\   c                 C   s   t ddd}t }t|}t||g}| dj}|	| t
j|dd}t j|j| |j|j |jks|J d S )N   r(   rA   r   r   )r*   arangereshaper   rB   ImageHDUrC   rD   rE   rF   r   rG   testingassert_array_equalr   r   )rI   rT   hdu1hdu2hdusrL   r   r    r    r!   :test_initialize_from_fits_with_data_in_different_extension   s    

rf   c           	      C   s   t ddg}t ddd}t }tj|ddd}tj|ddd}t|||g}| dj	}|
| tj|ddd	}t j|j| tj|ddd	}t j|j| tj|d
dd	}t j|j| d S )Nr(   r]   firstr1   )nameZversecondrA   r   rJ   r   )ri   r1   )r*   r+   r^   r_   r   rB   r`   rC   rD   rE   rF   r   rG   ra   rb   r   )	rI   Z	fake_img1Z	fake_img2Zhdu0rc   rd   re   rL   r   r    r    r!   (test_initialize_from_fits_with_extension   s    
rk   c                  C   sD   t  } | j}|  }d|d jv s&J |d jd | ks@J d S )NrQ   r   )r"   r   to_hdur   rS   )r.   Zccd_unitrK   r    r    r!   test_write_unit_to_hdu   s
    rm   c                 C   s   t  }| dj}|| tt" tj||j	dd W d    n1 sN0    Y  tt" tj||j	dd W d    n1 s0    Y  d S )N	test.fitsT)r   Zdo_not_scale_image_data)r   Z
scale_back)
r"   rD   rE   writer$   r%   r&   r   rG   r   )rI   r.   rL   r    r    r!   2test_initialize_from_FITS_bad_keyword_raises_error   s    

$rp   c                 C   sB   t  }| dj}|| tj||jd}tj	|j
|j
 d S )Nrn   r   )r"   rD   rE   ro   r   rG   r   r*   ra   rb   r   )rI   r.   rL   Zccd_diskr    r    r!   test_ccddata_writer   s
    
rq   c                  C   sJ   t  } d}d| j|< | | jvs&J | | jvs8J || jv sFJ d S )NZSoMeKEY
   )r"   r4   lowerupper)r.   keyr    r    r!   #test_ccddata_meta_is_case_sensitive   s    
rv   c                  C   s&   t  } ddi| _t| jtjr"J d S )NOBSERVEREdwin Hubble)r"   r4   
isinstancer   Headerr-   r    r    r!   $test_ccddata_meta_is_not_fits_header   s    
r{   c                 C   s   t  }t|}td|j }t|}|| | dj}|| t	j
|tjd}tj|j|j t	j
|dtjd}tj|jd|j  d S )Nr(   rA   r   r1   rj   )r"   r   rB   r   rC   appendrD   rE   rF   r   rG   r   r>   r*   ra   rb   )rI   r.   rJ   rd   rK   rL   rM   r    r    r!   test_fromMEF   s    



r}   c                  C   sX   t j } d| d< d| d< ttd| tjd}|jd dksBJ |jd dksTJ d S )Nrx   observer3600exptime   r   r4   r   rw   	r   r   rz   r   r*   rY   r   r>   r4   hdrd1r    r    r!   test_metafromheader   s    
r   c                  C   s6   ddd} t td| tjd}|jd dks2J d S )Nrx   i  )rw   ZEXPTIMEr   r   rw   )r   r*   rY   r   r>   r4   )Zdicr   r    r    r!   test_metafromdict   s    
r   c                  C   s\   t j } d| d< d| d< ttdtjd}| |_|jd dksFJ |jd dksXJ d S )Nrx   r~   r   r   r   r   rw   r   r   r    r    r!   test_header2meta   s    
r   c                  C   sH   d} t t& ttd| tjd W d    n1 s:0    Y  d S )Nzthis is not a valid headerr   r   )r$   r%   r&   r   r*   rY   r   r   )r   r    r    r!   test_metafromstring_fail  s    r   c                  C   s:   t  } tt d| _W d    n1 s,0    Y  d S )Nrr   )r"   r$   r%   r&   uncertaintyr-   r    r    r!   )test_setting_bad_uncertainty_raises_error  s    r   c                  C   s>   t  } d | _tt| j}| | _tj| jj	| d S r#   )
r"   r   r*   sqrtabsr   r   ra   rb   array)r.   Zfake_uncertaintyr    r    r!   #test_setting_uncertainty_with_array  s
    
r   c                  C   sD   t  } tt  tddg| _W d    n1 s60    Y  d S )Nr2   r]   )r"   r$   r%   r)   r*   r+   r   r-   r    r    r!   1test_setting_uncertainty_wrong_shape_raises_error  s    r   c                  C   sl   t  } ddi| _|  }t|tjs(J | j D ]\}}|d j| |ks2J q2tj	
|d j| j d S )Nr~   rx   r   )r"   r4   rl   ry   r   rC   rH   r   r*   ra   rb   r   )r.   Zfits_hdulistrN   rO   r    r    r!   test_to_hdu  s    
r   c                  C   sD   t  } |  }tj|j| j |j| jks0J |j| jks@J d S r#   )r"   r   r*   ra   rb   r   r   r4   )r.   Zccd_copyr    r    r!   	test_copy&  s
    r   zoperation,affects_uncertainty)multiplyT)divideToperandg       @r(   with_uncertaintyTFc           
      C   s>  t  }|rtt||_t||}tt|}|| }||usBJ t|tsPJ |jd u sjt|jtsjJ z
| j}W n t	y   | }Y n0 tj
|j||j| |r|rtj
|jj||jj| qtj
|jj|jj n|jd u sJ t| tjr(|d|j d| j j}	|j|	ks:J n|j|jks:J d S )Nr1   )r"   r   r*   	ones_liker   getattrry   r   r6   AttributeErrorra   rb   r   r   r   Quantityr   )
r   r   	operationaffects_uncertaintyr.   method	np_methodresultop_valueZexpected_unitr    r    r!   test_mult_div_overload.  sB    







r   )addF)subtractFzoperand,expect_failurec           
      C   sv  t  }|rtt||_t||}tt|}|rht| || }W d    n1 sZ0    Y  d S || }||us|J t|t	sJ |jd u st|jtsJ z
| j
}	W n ty   | }	Y n0 tj|j||j|	 |r |rtj|jj||jj|	 ntj|jj|jj n|jd u s0J t| tjr`|j|jkrZ|j| jksrJ n|j|jksrJ d S r#   )r"   r   r*   r   r   r   r$   r%   ry   r   r6   r   ra   rb   r   r   r   r   r   )
r   Zexpect_failurer   r   r   r.   r   r   r   r   r    r    r!   test_add_sub_overloada  sH    

&





"r   c                  C   s   t  } tt | d W d    n1 s00    Y  tt | d W d    n1 sd0    Y  tt | d W d    n1 s0    Y  tt | d W d    n1 s0    Y  d S )NZfive)r"   r$   r%   r&   r   r   r   r   r-   r    r    r!   test_arithmetic_overload_fails  s    (((r   c                  C   sv   t tddd} | j| d djd u s*J | j| d djd u sBJ | j| d djd u sZJ | j| d djd u srJ d S )Nrr   rr   r3   r   Zcompare_wcs)r   r*   rY   r   wcsr   r   r   r?   r    r    r!   test_arithmetic_no_wcs_compare  s
    r   c                  C   s   dd } t jdd\}}ttdd|d}ttdd|d}t |j|| dj| t |j|| dj| t |j	|| dj| t |j
|| dj| d S )	Nc                 S   s   dS )NTr    ___r    r    r!   return_true  s    z5test_arithmetic_with_wcs_compare.<locals>.return_truer(   Znaxisr   r3   r   r   r   )
nd_testingZcreate_two_equal_wcsr   r*   rY   assert_wcs_seem_equalr   r   r   r   r   )r   Zwcs1Zwcs2ccd1rU   r    r    r!    test_arithmetic_with_wcs_compare  s(    r   c                  C   s  dd } t tddt d}t tddt d}tt |j|| d W d    n1 sb0    Y  tt |j|| d W d    n1 s0    Y  tt |j	|| d W d    n1 s0    Y  tt |j
|| d W d    n1 s0    Y  d S )Nc                 S   s   dS )NFr    r   r    r    r!   return_false  s    z;test_arithmetic_with_wcs_compare_fail.<locals>.return_falser   r3   r   r   )r   r*   rY   r	   r$   r%   r)   r   r   r   r   )r   r   rU   r    r    r!   %test_arithmetic_with_wcs_compare_fail  s    ,,,r   c                  C   s  t  } tt| | _|  }| |}t|jdks:J tj	
|jd| j  tj	|jjtd| jj  | |}t|jdksJ tj	
|jd| j  tj	|jjtd| jj  | |}t|jdksJ tj	
|j| jd  tdt| j | jj }tj	|jj| | |}t|jdksBJ tj	
|jt| j tdt| j | jj }tj	|jj| d S )Nr   r(   )r"   r   r*   r   r   r   r   lenr4   ra   rb   r   Zassert_array_almost_equal_nulpr   r   r   r   r   Zassert_allcloser   )r.   r   r   Zexpected_uncertaintyr    r    r!   (test_arithmetic_overload_ccddata_operand  sV    








r   c                  C   s&  t g dtj } t g dtj }t| }||}t j|j	t | |j
 |jt | |jkslJ ||}t j|j	t | |j
 |jt | |jksJ ||}t j|j	t | |j
 |jt | |jksJ ||}t j|j	t | |j
 |jt | |jks"J d S )Nr0   )r*   r   r   mcmr   r   ra   Zassert_array_almost_equalr   r6   r   r   r   r   )abZccddataresr    r    r!   (test_arithmetic_overload_differing_units  s    



r   c                  C   s   t tddd} | td}tj|jg dgd  t tddd} t	t
  | td W d    n1 s~0    Y  d S )Nr2   r2   r3   r   r2   r0   r   )r   r*   rY   r   r^   ra   rb   r   r$   r%   r)   r   r   r    r    r!   test_arithmetic_add_with_array  s    r   c                  C   s   t tddd} | td}tj|jg dgd  t tddd} t	t
  | td W d    n1 s~0    Y  d S )Nr   r3   r   r2   )r1   r   r   )r   r*   rY   r   r^   ra   rb   r   r$   r%   r)   r   r    r    r!   #test_arithmetic_subtract_with_array  s    r   c                  C   sZ   t tdd tjd} | tdd }tj|jg dgd  |j	| j	ksVJ d S )Nr   r2   r   r(   )   r   r   )
r   r*   rY   r   r   r   ra   rb   r   r   r   r    r    r!   #test_arithmetic_multiply_with_array&  s    r   c                  C   sV   t tdtjd} | tdd }tj|jg dgd  |j	| j	ksRJ d S )Nr   r   r(   )      ?r   r   r2   )
r   r*   rY   r   r   r   ra   rb   r   r   r   r    r    r!   !test_arithmetic_divide_with_array-  s    r   c                 C   s   t ddg}t|}d|jd< d|jd< d|jd< t|jd dksLJ | dj}|| t	j
|dd	}|jd |jd ksJ d S )
Nr(   ZonehistoryZtwoZthreer2   	temp.fitsr   r   )r*   r+   r   rB   r   r   rD   rE   rF   r   rG   )rI   rT   rJ   Ztmp_fileZccd_readr    r    r!   1test_history_preserved_if_metadata_is_fits_header4  s    




r   c                 C   sx   t  }| d}||j td d}t 2}tj|j|d}||d j	v sVJ W d    n1 sj0    Y  d S )Nr   INFOrR   r   r   )
r"   rD   ro   rE   r   ZsetLevelZlog_to_listr   rG   message)rI   r.   tmpfileZexplicit_unit_nameZlog_listr   r    r    r!   (test_infol_logged_if_unit_in_fits_headerB  s    


r   c                 C   s  t  }| d}tdd}t|jd |j_tddg|j_ddg|j_	dd	g|j_
|jd
g | d j|_|jj| dd ||j t|j}t|j}|jdusJ |jj|jksJ | d }t|j|ksJ t|j|dd}| d }| }	|	 D ]<}
|
dv r(q|
|jvs8J |j|
 |	|
 ksJ q|jj jd9  _| d }|jd |jjjd ksJ |jd |jjjd ksJ dS )a$  
    Check that WCS attribute gets added to header, and that if a CCDData
    object is created from a FITS file with a header, and the WCS attribute
    is modified, then the CCDData object is turned back into an hdu, the
    WCS object overwrites the old WCS information in the header.
    r   r(   r   gNgN?r   izRA---AIRzDEC--AIR)r(   r1   g     F@F)Z	useblanksNr   r   r   )r3   COMMENTZHISTORYZCDELT1ZCDELT2r1   )r"   rD   r	   r*   r   r9   r   crpixZcdeltZcrvalZctypeZset_pvrl   r   extend	to_headerro   rE   r   r   rG   r   keys)rI   r.   r   r   Zoriginal_header_lengthccd_newZccd_new_hduZccd_wcs_not_in_headerrJ   
wcs_headerrN   Zccd_new_hdu_mod_wcsr    r    r!   test_wcs_attributeM  s:    



r   c                  C   s   ddl m}  t| }td}t|}tjtdd |j	
 }W d   n1 sT0    Y  t|t|j| @ rxJ td}tjtdd tj|d	d
}W d   n1 s0    Y  dS )zt
    Test, for the file included with the nddata tests, that WCS keywords are
    properly removed from header.
    r   )_KEEP_THESE_KEYWORDS_IN_HEADERdata/sip-wcs.fitsz,Some non-standard WCS keywords were excluded)matchNz+../../io/fits/tests/data/o4sp040b0_raw.fitsz'unitfix' made the changecountr   )astropy.nddata.ccddatar   setr   r   rG   r$   Zwarnsr   r   r   r4   r
   )r   keepers	data_filer   r   Z
data_file1r    r    r!   %test_wcs_keywords_removed_from_header  s    
(r   c                  C   s|   t d} ddg}t| ,}|D ]}||d jv s J q W d    n1 sL0    Y  t| }|D ]}||jvsdJ qdd S )Nr   ZA_0_0ZB_0_1r   )r   r   openr   r   rG   )r   Z	test_keysrJ   ru   r   r    r    r!   )test_wcs_SIP_coefficient_keywords_removed  s    2
r   ignorec                  C   s:  ddl m}  ddl m}m}m} t|}tddd}|D ]}d|v s8d|v s8d	|v s8d
|v r^q8t|}tj	
|}t|}	|	jdd}
| |\}}|jdd}t|t|| @ rJ || }t|}||@ r||@ rJ n||@ r||@ rJ | D ]:\}}t|tr |
| |ks2J qtj|
| | qq8dS )z
    Test, for the WCS test files, that keyword removal works as
    expected. Those cover a much broader range of WCS types than
    test_wcs_keywords_removed_from_header.

    Includes regression test for #8597
    r   )_generate_wcs_and_update_header)r   _CDs_PCsz../../wcs/tests/dataz*.hdr)patternZinvalidZnonstandardZsegfaultzchandra-pixlist-wcsT)ZrelaxN)r   r   r   r   r   r   r   r   r   rz   
fromstringr	   r   rH   ry   r5   r*   ra   Zassert_almost_equal)r   r   r   r   r   Zwcs_headersr   Zheader_stringr   r   Zheader_from_wcsZ
new_headerZnew_wcsZnew_wcs_headerZfinal_headerZfinal_header_setrN   rO   r    r    r!   +test_wcs_keyword_removal_for_wcs_test_files  s@    	
r   c                 C   sl   t d}tjj|dd}ttjtd|dg}| 	dj
}|| tj|dd}|jd u shJ d S )	Na<  
    SIMPLE  =                    T / Fits standard
    BITPIX  =                   16 / Bits per pixel
    NAXIS   =                    2 / Number of axes
    NAXIS1  =                 1104 / Axis length
    NAXIS2  =                 4241 / Axis length
    CRVAL1  =         164.98110962 / Physical value of the reference pixel X
    CRVAL2  =          44.34089279 / Physical value of the reference pixel Y
    CRPIX1  =                -34.0 / Reference pixel in X (pixel)
    CRPIX2  =               2041.0 / Reference pixel in Y (pixel)
    CDELT1  =           0.10380000 / X Scale projected on detector (#/pix)
    CDELT2  =           0.10380000 / Y Scale projected on detector (#/pix)
    CTYPE1  = 'RA---TAN'           / Pixel coordinate system
    CTYPE2  = 'WAVELENGTH'         / Pixel coordinate system
    CUNIT1  = 'degree  '           / Units used in both CRVAL1 and CDELT1
    CUNIT2  = 'nm      '           / Units used in both CRVAL2 and CDELT2
    CD1_1   =           0.20760000 / Pixel Coordinate translation matrix
    CD1_2   =           0.00000000 / Pixel Coordinate translation matrix
    CD2_1   =           0.00000000 / Pixel Coordinate translation matrix
    CD2_2   =           0.10380000 / Pixel Coordinate translation matrix
    C2YPE1  = 'RA---TAN'           / Pixel coordinate system
    C2YPE2  = 'DEC--TAN'           / Pixel coordinate system
    C2NIT1  = 'degree  '           / Units used in both C2VAL1 and C2ELT1
    C2NIT2  = 'degree  '           / Units used in both C2VAL2 and C2ELT2
    RADECSYS= 'FK5     '           / The equatorial coordinate system
    
)sep)i  iP  r   rA   r   r   )textwrapdedentr   rz   r   rC   rB   r*   rY   rD   rE   rF   r   rG   r   )rI   Zhdr_txt_example_WCSr   hdulrL   r   r    r    r!   test_read_wcs_not_creatable  s    

r   c                  C   s,   t  } ddi}t| |d}|j|ks(J d S )NZObserverZHubbler   )r"   r   r4   )r.   r   r   r    r    r!   test_header  s    r   c                  C   s2   t  } tdd}|| _| d}t|j| d S )Nr(   r   g      ?)r"   r	   r   r   r   r   )r.   r   r   r    r    r!   test_wcs_arithmetic$  s
    

r   r   )r   r   r   r   c                 C   sN   t  }| }tdd|_t|| }||}t|j|j |jd u sJJ d S Nr(   r   )r"   r   r	   r   r   r   r   r   r.   Z	ccd_data2r   r   r    r    r!   test_wcs_arithmetic_ccd,  s    
r   c                  C   s   t d} dd }t| }t| }||d j}W d   n1 sH0    Y  t|s^J | }||d j}t|sJ |jdd}||d j}t|rJ |d jd d	ksJ |d jd
 dksJ dS )zc
    Check whether the ctypes RA---TAN-SIP and DEC--TAN-SIP survive
    a roundtrip unchanged.
    r   c                    s    ddd} fdd|  D S )NzRA---TAN-SIPzDEC--TAN-SIP)CTYPE1CTYPE2c                    s   g | ]\}} | |kqS r    r    ).0rN   rO   r   r    r!   
<listcomp>E      zCtest_wcs_sip_handling.<locals>.check_wcs_ctypes.<locals>.<listcomp>)rH   )r   Zexpected_wcs_ctypesr    r   r!   check_wcs_ctypes?  s    z/test_wcs_sip_handling.<locals>.check_wcs_ctypesr   NF)Z	wcs_relaxr   zRA---TANr   zDEC--TAN)	r   r   rG   r   r   r   allrl   any)r   r   Zccd_originalrawZ
good_ctyper   Zccd_no_relaxr    r    r!   test_wcs_sip_handling8  s    
,r   c                 C   sB   t  }| }|jdk|_t|| }||}tj|j|j d S )Nr   )r"   r   r   maskr   r*   ra   Zassert_equalr   r    r    r!   test_mask_arithmetic_ccd]  s    
r  c                 C   sV   t  }|jdk|_| dj}|| t|}|jd us@J tj	
|j|j d S Nrr   rA   )r"   r   r  rD   rE   ro   r   rG   r*   ra   rb   rI   r.   rL   	ccd_afterr    r    r!   /test_write_read_multiextensionfits_mask_defaulth  s    

r  uncertainty_typec                 C   sp   t  }||jd |_| dj}|| t|}|jd usDJ t|j|u sVJ t	j
|jj|jj d S r  r"   r   r   rD   rE   ro   r   rG   typer*   ra   rb   r   rI   r  r.   rL   r  r    r    r!   6test_write_read_multiextensionfits_uncertainty_defaults  s    

r  c                 C   sx   t  }||jd |_| dj}|j|dd tj|dd}|jd usLJ t|j|u s^J t	j
|jj|jj d S )Nrr   rA   ZBlah)Zkey_uncertainty_typer  r
  r    r    r!   Htest_write_read_multiextensionfits_uncertainty_different_uncertainty_key  s    r  c                 C   sh   t  }|jdk|_t|jd |_| dj}|j|d d d t	|}|jd u sVJ |jd u sdJ d S )Nrr   rA   Zhdu_maskZhdu_uncertainty)
r"   r   r  r   r   rD   rE   ro   r   rG   r  r    r    r!   &test_write_read_multiextensionfits_not  s    
r  c                 C   s   t  }|jdk|_t|jd |_| dj}|j|ddd t	|}|jd u sVJ |jd u sdJ tj	|ddd}|jd usJ |jd usJ t
j|j|j t
j|jj|jj d S )Nrr   rA   ZFunZNoFunr  )r"   r   r  r   r   rD   rE   ro   r   rG   r*   ra   rb   r   r  r    r    r!   3test_write_read_multiextensionfits_custom_ext_names  s    
r  c                 C   s|   d}t ||g}|dk}t |}t|||dd}| }|d jd= | dj}|| t	|}t
|jtsxJ d S )Nr]   g?r   )r   r  r   r   r(   ZUTYPEzold_ccddata_mef.fits)r*   r+   r   r   rl   r   rD   rE   rF   rG   ry   r   r   )rI   r   r   r  uncertr   rK   	file_namer    r    r!   &test_read_old_style_multiextensionfits  s    	


r  c                  C   s(   t  } tdd}|| _| j|u s$J d S r   )r"   r	   r   )r.   r   r    r    r!   test_wcs  s    
r  c                 C   sX   t  }g d}|D ]@}| d| }||j t|j}|j|jk sJ qd S )N)Zfitr   Zftsztest.)r"   rD   ro   rE   r   rG   r   r   )rI   r.   Zsupported_extensionsZextpathZ	from_diskr    r    r!   +test_recognized_fits_formats_for_read_write  s    r  c                   C   s>   t t  ttdj W d    n1 s00    Y  d S )Nr   )r$   r%   r   r   r*   rY   parent_nddatar    r    r    r!   2test_stddevuncertainty_compat_descriptor_no_parent  s    r  c                  C   s>   t tddd} ttd}| |_|j| u s4J d |_d S )Nr   r3   r   )r   r*   rY   r   Z_parent_nddatar  )r   r  r    r    r!   3test_stddevuncertainty_compat_descriptor_no_weakref  s
    r  c                 C   s~   t tddd}td}tjt t| t	|gd}| 
dj}|| tj|dd}|jjdkszJ d S )	Nrr   r   r(   r   )re   ztable_image.fitsr   r   )r   r*   rY   r_   r   rC   rB   ZTableHDUZas_arrayr`   rD   rE   rF   r   rG   r   r9   )rI   ZtblZimgr   rL   r   r    r    r!   test_read_returns_image  s    

r  c                  C   s   t dd} d| j_ttd| dd}|ddddf }| }t|tj	sRJ |d j
d d	kshJ |d j
d
 d	ks~J d S )Nr(   r   r   Zpixelr   r   ZCRPIX1   ZCRPIX2)r	   r   r   r   r*   rY   rl   ry   r   rC   r   )r   r   Ztrimmedr   r    r    r!   test_sliced_ccdata_to_hdu  s    
r  )mr   Znumpyr*   r$   Z
astropy.ior   Zastropy.nddata.nduncertaintyr   r   r   r   Zastropyr   r   r   Zastropy.wcsr	   r
   Zastropy.utilsr   Zastropy.utils.datar   r   r   Zastropy.utils.exceptionsr   r   r   Zastropy.nddatar   r   Zastropy.tabler   r:   ZrandomZnormalr   r"   r'   r,   r/   r8   r=   r@   rP   rV   rW   rZ   r\   rf   rk   rm   rp   rq   rv   r{   r}   r   r   r   r   r   r   r   r   r   ZmarkZparametrizeZdimensionless_unscaledrR   r   r   Z
UnitsErrorr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   filterwarningsr   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r    r    r    r!   <module>   s   
0				

'))

=

:&

%
	

