U
    e»{j‰F  ã                   @   s°   d dl Z d dlZd dlZd dl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 d
dlmZ G dd„ deƒZdS )é    N)Úassert_array_equal)Úunits)Úfits)Ú	printdiff)ÚREMOVE_KEYWORDS)Ú_assert_attr_col)ÚTable)ÚAstropyUserWarningé   )ÚFitsTestCasec                   @   s  e Zd Z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dd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze
j dddg¡dd „ ƒZd!d"„ Ze
j d#d$d%d&d'g¡d(d)„ ƒZd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:S );ÚTestConveniencec                 C   s0   t  dt¡ t |  d¡¡}t |  d¡¡}d S )NÚalwaysú
test0.fits)ÚwarningsÚsimplefilterÚResourceWarningr   ÚgetdataÚdataÚ	getheader)ÚselfÚ_© r   úe/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/io/fits/tests/test_convenience.pyÚtest_resource_warning   s    z%TestConvenience.test_resource_warningc                 C   sN   t |  d¡dƒ}t |¡}|jr$t‚| d¡ t |¡}|jrBt‚| ¡  dS )z¾
        Tests that file-like objects are not closed after being passed
        to convenience functions.

        Regression test for https://github.com/astropy/astropy/issues/5063
        r   Úrbr   N)	Úopenr   r   r   ÚclosedÚAssertionErrorÚseekr   Úclose)r   Úfr   r   r   r   Útest_fileobj_not_closed   s    




z'TestConvenience.test_fileobj_not_closedc              	   C   sÄ   t dddgdddgddd	ggdddgd
ddgd�}d|d _d|d _tjtjdd��}t |¡}W 5 Q R X t|ƒdks|t	‚|j
 d¡|j
 d¡k s˜t	‚t|tjƒs¨t	‚|  d¡}|j|dd� d S )Nr
   é   é   ÚaÚbÚcçffffff@ç      @çÍÌÌÌÌÌ@ÚiÚU1r    ©ÚnamesÚdtypezm/sz
not-a-unitz''not-a-unit' did not parse as fits unit©ÚmatchZTUNIT1ZTTYPE2útest_table_to_hdu.fitsT©Ú	overwrite)r   ÚunitÚpytestÚwarnsÚuZUnitsWarningr   Útable_to_hduÚlenr   ÚheaderÚindexÚ
isinstanceÚBinTableHDUÚtempÚwriteto)r   ÚtableÚwÚhduÚfilenamer   r   r   Útest_table_to_hdu/   s$    ý

 ÿ
z!TestConvenience.test_table_to_hduc                 C   sˆ  t jjdddgdddgd�}t jjddd	gdddgd�}t jjd
ddgdddgd�}t jjdddgdddgd�}t||||gddd	dgd�}t |¡}t|tjƒs¦t‚|j	d |j
ksºt‚t|jd | ¡ ƒ t|jd | d¡ƒ t|jd	 | t j¡ƒ t|jd	 j|j t j¡ƒ t|jd	 j|j t j¡ƒ t|jd	 | tt jt jƒ¡ƒ t|jd | t j¡ƒ |  d¡}|j|dd� d S )Nr
   r"   r#   TF)Úmaskr$   r%   r&   yffffff@      ð?y      @        yÍÌÌÌÌÌ@      ð¿r'   r(   r)   r*   Úsr    )r-   ZTNULL1Ú r1   r2   )ÚnpÚmaZMaskedArrayr   r   r8   r<   r=   r   r:   Z
fill_valuer   r   ZfilledÚnanÚrealÚimagÚcomplexr>   r?   )r   r*   rF   r&   r    r@   rB   rC   r   r   r   Útest_masked_table_to_hduF   s"    
 
z(TestConvenience.test_masked_table_to_hduc              	   C   s|   t dddgdddgddd	ggdddgd
ddgd�}tj d¡|d _tjtdd��}t 	|¡ W 5 Q R X t
|ƒdksxt‚d S )Nr
   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r    r,   Útestz"The unit 'test' could not be savedr/   )r   r7   ÚcoreZIrreducibleUnitr4   r5   r6   r	   r   r8   r9   r   )r   r@   rA   r   r   r   Ú(test_table_non_stringifyable_unit_to_hduZ   s    ý ÿz8TestConvenience.test_table_non_stringifyable_unit_to_hduc              	   C   s�   t dddgdddgddd	ggdddgd
ddgd�}ddddg|jd< t |¡}|j d¡ddddgksjt‚t t	¡� |j 
d¡ W 5 Q R X dS )zT
        Regression test for https://github.com/astropy/astropy/issues/6079
        r
   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r    r,   ZThisÚisÚcommentÚcommentsN)r   Úmetar   r8   r:   Úgetr   r5   ÚraisesÚ
ValueErrorr;   ©r   r@   rB   r   r   r   Ú,test_table_to_hdu_convert_comment_conventionh   s    ý
z<TestConvenience.test_table_to_hdu_convert_comment_conventionc              	   C   sV  d}dddddddd	œ}t dd
dgdddgdddggdddgdddgd�}|j |¡ tjtd|› �d��}t |¡}W 5 Q R X t|ƒt|ƒd
 ks˜t	‚t
t|ƒdd… ƒD ]$\}}d|› �t|| jƒks¬t	‚q¬|j d¡dksæt	‚|j d¡d
ksút	‚|j d¡dk�st	‚|j d¡dk�s&t	‚|j d¡d k�s<t	‚tj |j d!¡d¡ d"S )#zT
        Regression test for https://github.com/astropy/astropy/issues/9387
        ú:be ignored since it conflicts with a FITS reserved keywordgÍÌÌÌÌ@@ZNEWTABLEr
   r#   é	   é*   ZAdams)ÚEXPTIMEÚXTENSIONÚNAXISÚNAXIS1ÚNAXIS2ÚPCOUNTZOBSERVERr"   r$   r%   r&   r'   r(   r)   Úi4r+   Úf8r,   zMeta-data keyword \w+ will r/   éÿÿÿÿúMeta-data keyword r_   ÚBINTABLEr`   ra   é   rb   rc   r   r^   N)r   rU   Úupdater5   r6   r	   r   r8   r9   r   Ú	enumerateÚlistÚstrÚmessager:   rV   rH   ÚtestingZassert_almost_equal)r   ÚdiagÚ	ins_cardsr@   rA   rB   r*   Úkeyr   r   r   Ú!test_table_to_hdu_filter_reservedx   s<    ù	ý ÿz1TestConvenience.test_table_to_hdu_filter_reservedÚcardc              
   C   sê   d}ddddddddd	d
œ	}dddddddddd
œ	}t dddgdddggddgddgd�}d|jd< || |j|< |j |¡|| ksŠt‚tjtd|› d|› �d�� t |¡}W 5 Q R X |j	 |¡|| ksÒt‚|j	 d¡dksæt‚d	S ) zT
        Test warning for each keyword in ..connect.REMOVE_KEYWORDS, 1 by 1
        r[   rh   é   r"   é   r#   r   r
   N)	r_   ZBITPIXr`   ra   rb   rc   ZGCOUNTZTFIELDSZTHEAPZTABLEé   é   é   é$   g      ð?g       @g      @r'   r(   r)   Z
wavelengthZfluxre   Zf4r,   zMin.Silly WalksZORIGINrg   z will r/   )
r   rU   rV   r   r5   r6   r	   r   r8   r:   )r   rt   rp   Z	res_cardsrq   r@   rB   r   r   r   Útest_table_to_hdu_warn_reservedŸ   sH    ÷÷ý
 ÿz/TestConvenience.test_table_to_hdu_warn_reservedc              	   C   sª   t dddgdddgddd	ggdddgd
ddgd�}|j dt d¡dddœdœ¡ tjtdd�� t 	|¡}W 5 Q R X |j
 d¡dksŠt‚d|j
ks˜t‚d|j
ks¦t‚dS )zD
        Test removal of unsupported data types from header
        r
   r"   r#   r$   r%   r&   r'   r(   r)   rd   r+   re   r,   z
2001-05-26é   )ZPRIMARYZSECONDAR)ÚOBSDATEÚRAMPÚTARGETSzBAttribute \S+ of type .+ cannot be added to FITS Header - skippingr/   r}   r~   r   N)r   rU   rj   rH   Úaranger5   r6   r	   r   r8   r:   rV   r   rY   r   r   r   Ú%test_table_to_hdu_filter_incompatibleÍ   s&    ýýÿþz5TestConvenience.test_table_to_hdu_filter_incompatiblec                 C   sh   t jddtfdtfgd�}t ¡ }d|d< |  d¡}tj|||dd	� tj|d
d�}|d dksdt	‚dS )zT
        Regression test for https://github.com/astropy/astropy/issues/5988
        )r|   ÚxÚy©r.   )g      E@zLTU&EZANSWERztabhdr42.fitsT)r   r:   r3   r
   ©Úextr]   N)
rH   ÚzerosÚfloatÚintr   ÚHeaderr>   r?   r   r   )r   r   Zh_inrC   Úh_outr   r   r   Útest_table_writeto_headerè   s    
z)TestConvenience.test_table_writeto_headerc              	   C   s¶   |   d¡}t t d¡¡t t d¡¡g}tjtdd��& tj	|t d¡t 
dg¡dd� W 5 Q R X t |¡ |¡ tj	|t d¡t 
dg¡dd� tj|dd�}|d	 d
ks²t‚dS )z€
        Test that _makehdu correctly includes the header. For example in the
        fits.update convenience function.
        ztwoextension.fits)é
   r�   zNo such filer/   )ÚWHATéd   r
   )r:   r†   r…   rŽ   r�   N)r>   r   Ú
PrimaryHDUrH   r‡   ÚImageHDUr5   rW   ÚFileNotFoundErrorrj   rŠ   ÚHDUListr?   r   r   )r   Úhome_is_temprC   Úhdusr‹   r   r   r   Ú"test_image_extension_update_headerô   s$    
   
 ÿ  
 ÿz2TestConvenience.test_image_extension_update_headerc                 C   sF  t |  d¡|  d¡ƒdkst‚t |  d¡|  d¡dd�dks@t‚t |  d¡|  d¡dd�dksbt‚t t¡� t dd	dd� W 5 Q R X tj|  d
¡dd��¢}tj|  d¡dd��‚}t |d |d ƒdksÌt‚t t¡� t |d |d dd� W 5 Q R X t ||ƒdk�st‚t t	¡� t ||dƒ W 5 Q R X W 5 Q R X W 5 Q R X dS )zS
        Test that FITSDiff can run the different inputs without crashing.
        zarange.fitsz
blank.fitsNr   r…   zo4sp040b0_raw.fitsZsci)Zextnamezfakefile.fitszstddata.fitsÚreadonly)Úmodezchecksum.fits)
r   r   r   r5   rW   ÚOSErrorr   r   rX   ÚNotImplementedError)r   Zin1Zin2r   r   r   Útest_printdiff  s*    ÿýûÿ zTestConvenience.test_printdiffc              	   C   sì   d}d}|   d¡ t |  d¡¡ tj |  d¡¡s8t‚tj|  d¡|  d¡d� tj |  d¡¡sht‚|  d¡}|  d¡}t |  d¡||¡ tj |¡s t‚t|ƒ�}| 	¡ |ksºt‚W 5 Q R X t|ƒ�}| 	¡ |ksÞt‚W 5 Q R X d	S )
zƒ
        A simple test of the dump method.
        Also regression test for https://github.com/astropy/astropy/issues/6937
        zœ"                    1" "abc" "     3.70000007152557" "                    0"
"                    2" "xy " "     6.69999971389771" "                    1"
a°  c1 1J I11              ""               ""               -2147483647      ""               ""              
c2 3A A3               ""               ""               ""               ""               ""              
c3 1E G15.7            ""               ""               ""               3                0.4             
c4 1L L6               ""               ""               ""               ""               ""              
útb.fitsztb_1.txtztest_tb.txt)Údatafileúdata.txtúcoldefs.txtN)
Ú	copy_filer   Ú	tabledumpr>   ÚosÚpathÚisfiler   r   Úread)r   ZdatastrZcdstrr�   Úcdfiler   Zcoldefsr   r   r   Útest_tabledump1  s"    ÿÿ




zTestConvenience.test_tabledumpÚ	tablenamez
table.fitsrœ   c              	   C   sz   |   |¡ |  d¡}|  d¡}|  d¡}t |  |¡|||¡ t |||¡}t |  |¡¡�}t||d ƒ W 5 Q R X dS )z�
        A simple test of the dump/load methods; dump the data, column, and
        header files and try to reload the table from them.
        rž   rŸ   z
header.txtr
   N)r    r>   r   r¡   Z	tableloadr   r   )r   r¨   r�   r¦   ZhfileZ	new_tbhduÚhdulr   r   r   Útest_dump_load_round_tripY  s    



z)TestConvenience.test_dump_load_round_tripc              	   C   s²   t  d¡}|  d¡}tj||dd� tj||d ddd� tj||d ddd	� tj|dd
��J}t j |d j|¡ t j |d j|d ¡ t j |d j|d ¡ W 5 Q R X dS )z<
        Test fits.append with a filename argument.
        rx   útest_append_1.fitsT)r   Úchecksumr"   )r   r¬   Zignore_blankr#   F)r   r¬   Úverify©r¬   r   r
   N)	rH   r€   r>   r   Úappendr   ro   r   r   )r   r”   r   ÚtestfileZhdu1r   r   r   Útest_append_filenamem  s    

z$TestConvenience.test_append_filenamer˜   Úwbzwb+Úabzab+c              	   C   s6   |d }|  |¡�}tj|t d¡d� W 5 Q R X dS )z?
        Test fits.append with a file handle argument.
        zappend.fits)ry   ry   )rC   r   N)r   r   r¯   rH   Úones)r   Ztmp_pathr˜   Zappend_fileÚhandler   r   r   Útest_append_filehandleƒ  s    z&TestConvenience.test_append_filehandlec              	   C   st   |   d¡}t |  d¡¡�&}|D ]}tj||j|jdd� q W 5 Q R X tj|dd��}t|ƒdksft‚W 5 Q R X dS )z´
        Test fits.append with a fits Header, which triggers detection of the
        HDU class. Regression test for
        https://github.com/astropy/astropy/issues/8660
        r«   r   Tr®   r|   N)r>   r   r   r   r¯   r:   r9   r   )r   r°   r•   rB   r   r   r   Útest_append_with_headerŒ  s    
"z'TestConvenience.test_append_with_headerc              	   C   sd   t  |  d¡¡}t d¡}t t |¡g¡}| |¡ t 	|¡�}tj
 |d j|¡ W 5 Q R X d S )Nz	test.fitsr�   r   )ÚpathlibÚPathr>   rH   r€   r   r“   r�   r?   r   ro   r   r   )r   r°   r   Úhdulistr©   r   r   r   Útest_pathlibš  s    

zTestConvenience.test_pathlibc                 C   sž   t jtjdtd�d�}t jtjdtd�d�}t jdtjdtd� d�}t  |||g¡}t 	¡ }| 
|¡ dD ],}| d¡ t j||d�}|d |kslt‚qld S )	N©r|   r|   r„   ©r   r"   )r   r
   r"   r   r…   ©r   r   )r   r�   rH   r‡   r‰   r‘   r´   r“   ÚioÚBytesIOr?   r   r   r   )r   ÚprihduÚexthdu1Úexthdu2rº   Úbufr†   r   r   r   r   Útest_getdata_ext_given£  s    

z&TestConvenience.test_getdata_ext_givenc              	   C   s�   t jtjdtd�d�}t jtjdtd�d�}t jd d�}t  |||g¡}t 	¡ }| 
|¡ | d¡ tjtdd�� t j|dd� W 5 Q R X d S )	Nr¼   r„   r½   r   zNo data in HDU #2.r/   r"   r…   )r   r�   rH   r‡   r‰   r‘   r´   r“   r¿   rÀ   r?   r   r5   rW   Ú
IndexErrorr   ©r   rÁ   rÂ   rÃ   rº   rÄ   r   r   r   Útest_getdata_ext_given_nodata°  s    

z-TestConvenience.test_getdata_ext_given_nodatac                 C   sx   t jtjdtd�d�}t jd d�}t jd d�}t  |||g¡}t ¡ }| 	|¡ | 
d¡ t  |¡}|d dkstt‚d S )Nr¼   r„   r½   r   r¾   )r   r�   rH   r‡   r‰   r‘   r“   r¿   rÀ   r?   r   r   r   ©r   rÁ   rÂ   rÃ   rº   rÄ   r   r   r   r   Ú/test_getdata_ext_not_given_with_data_in_primary¼  s    


z?TestConvenience.test_getdata_ext_not_given_with_data_in_primaryc                 C   sx   t jd d�}t jtjdtd�d�}t jd d�}t  |||g¡}t ¡ }| 	|¡ | 
d¡ t  |¡}|d dkstt‚d S )Nr½   r¼   r„   r   r¾   r
   )r   r�   r‘   rH   r´   r‰   r“   r¿   rÀ   r?   r   r   r   rÉ   r   r   r   Ú+test_getdata_ext_not_given_with_data_in_extÈ  s    


z;TestConvenience.test_getdata_ext_not_given_with_data_in_extc              	   C   s‚   t jd d�}t jd d�}t jtjdtd�d�}t  |||g¡}t ¡ }| 	|¡ | 
d¡ tjtdd�� t  |¡ W 5 Q R X d S )Nr½   r¼   r„   r   z2No data in either Primary or first extension HDUs.r/   )r   r�   r‘   rH   r´   r‰   r“   r¿   rÀ   r?   r   r5   rW   rÆ   r   rÇ   r   r   r   Ú%test_getdata_ext_not_given_nodata_anyÕ  s    

 ÿz5TestConvenience.test_getdata_ext_not_given_nodata_anyc              	   C   s\   t jd d�}t  |g¡}t ¡ }| |¡ | d¡ tjt	dd�� t  
|¡ W 5 Q R X d S )Nr½   r   z2No data in Primary HDU and no extension HDU found.r/   )r   r�   r“   r¿   rÀ   r?   r   r5   rW   rÆ   r   )r   rÁ   rº   rÄ   r   r   r   Ú'test_getdata_ext_not_given_nodata_noextå  s    

 ÿz7TestConvenience.test_getdata_ext_not_given_nodata_noextN)Ú__name__Ú
__module__Ú__qualname__r   r!   rD   rN   rQ   rZ   rs   r5   ÚmarkZparametrizer   r{   r�   rŒ   r–   r›   r§   rª   r±   r¶   r·   r»   rÅ   rÈ   rÊ   rË   rÌ   rÍ   r   r   r   r   r      s6   '
-&(

	r   )r¿   r¢   r¸   r   ÚnumpyrH   r5   Znumpy.testingr   Zastropyr   r7   Z
astropy.ior   Zastropy.io.fitsr   Zastropy.io.fits.connectr   Z astropy.io.fits.tests.test_tabler   Zastropy.tabler   Zastropy.utils.exceptionsr	   Zconftestr   r   r   r   r   r   Ú<module>   s   