U
    e»{jÌ+  ã                   @   sÂ   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
mZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d	d
lmZ G dd„ deƒZejjdd�dd„ ƒZG dd„ deƒZdS )é    N)Ú__version__)Úfits)ÚFITSDiffÚHDUListÚHeaderÚImageHDU)Úwriteto)Ú
PrimaryHDUÚhdulist)Úfitsdiff)Ú_NOT_OVERWRITING_MSG_MATCHé   )Ú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	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejjdd„ ƒZdd „ Zd!d"„ Zd#S )$ÚTestFITSDiff_scriptc              	   C   s6   t  t¡�}t dg¡ W 5 Q R X |jjdks2t‚d S )Nz-hr   ©ÚpytestÚraisesÚ
SystemExitr   ÚmainÚvalueÚcodeÚAssertionError©ÚselfÚe© r   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/io/fits/tests/test_fitsdiff.pyÚ	test_help   s    zTestFITSDiff_script.test_helpc              	   C   sT   t  t¡�0}t dg¡ | ¡ d }|dt› �ks6t‚W 5 Q R X |jj	dksPt‚d S )Nz	--versionr   z	fitsdiff )
r   r   r   r   r   Ú
readouterrÚversionr   r   r   )r   Úcapsysr   Úoutr   r   r   Útest_version   s
    z TestFITSDiff_script.test_versionc              	   C   s6   t  t¡�}t dg¡ W 5 Q R X |jjdks2t‚d S )NÚ é   r   r   r   r   r   Útest_noargs    s    zTestFITSDiff_script.test_noargsc              	   C   s6   t  t¡�}t dg¡ W 5 Q R X |jjdks2t‚d S )NZfile1r$   r   r   r   r   r   Útest_oneargargs%   s    z#TestFITSDiff_script.test_oneargargsc                 C   st   t  d¡ dd¡}t|d�}| ¡ }t|d�}|  d¡}|  d¡}| |¡ | |¡ t ||g¡}|dkspt	‚d S )Néd   é
   ©Údataú
testa.fitsú
testb.fitsr   ©
ÚnpÚarangeÚreshaper	   ÚcopyÚtempr   r   r   r   ©r   ÚaÚhdu_aÚbÚhdu_bÚtmp_aÚtmp_bÚnumdiffr   r   r   Útest_nodiff*   s    





zTestFITSDiff_script.test_nodiffc                 C   s|   t  d¡ dd¡}t|d�}| ¡ }d|d< t|d�}|  d¡}|  d¡}| |¡ | |¡ t ||g¡}|dksxt	‚d S )	Nr'   r(   r)   é   ©r   r   r+   r,   r   r-   r3   r   r   r   Útest_onediff6   s    





z TestFITSDiff_script.test_onediffc                 C   sê   t  d¡ dd¡}t|d�}|d }t|d�}|  d¡}|  d¡}| |¡ | |¡ t ||g¡}| ¡ \}	}
|dks|t	‚|	 
¡ dd … dd	d
dgksœt	‚t dd||g¡}| ¡ \}	}
|dksÆt	‚|	 
¡ dd … ddd
dgksæt	‚d S )Nr'   r(   r)   r   r+   r,   éüÿÿÿz        a> 9z        b> 10z     ...z4     100 different pixels found (100.00% different).z-nÚ1z        a> 0z        b> 1)r.   r/   r0   r	   r2   r   r   r   r   r   Ú
splitlines©r   r    r4   r5   r6   r7   r8   r9   r:   r!   Úerrr   r   r   Útest_manydiffC   s4    





ü
üz!TestFITSDiff_script.test_manydiffc           
   	   C   sÈ   t  d¡ dd¡}t|d�}| ¡ }d|d< t|d�}|  d¡}|  d¡}| |¡ | |¡ t d|  d	¡||g¡}|d
ks‚t	‚t
|  d	¡ƒ�}| ¡ }	W 5 Q R X |	 ¡ dd … ddddgksÄt	‚d S )Nr'   r(   r)   r<   r=   r+   r,   z-ozdiff.txtr   r?   z     Data differs at [1, 2]:z        a> 10z        b> 12z0     1 different pixels found (1.00% different).)r.   r/   r0   r	   r1   r2   r   r   r   r   ÚopenÚreadrA   )
r   r4   r5   r6   r7   r8   r9   r:   Úfr!   r   r   r   Útest_outputfilea   s&    





üz#TestFITSDiff_script.test_outputfilec                 C   s¤   t jdtd� dd¡}t|d�}| ¡ }d|d< t|d�}|  d¡}|  d¡}| |¡ | |¡ t 	d	d
||g¡}|dks€t
‚t 	dd	d
||g¡}|dks t
‚d S )Nr'   ©Zdtyper(   r)   é   r=   r+   r,   z-ar@   r   z--exactr   ©r.   r/   Úfloatr0   r	   r1   r2   r   r   r   r   r3   r   r   r   Ú	test_atolw   s    





zTestFITSDiff_script.test_atolc                 C   s„   t jdtd� dd¡}t|d�}| ¡ }d|d< t|d�}|  d¡}|  d¡}| |¡ | |¡ t 	d	d
||g¡}|dks€t
‚d S )Nr'   rI   r(   r)   rJ   r=   r+   r,   ú-rz1e-1r   rK   r3   r   r   r   Ú	test_rtolˆ   s    





zTestFITSDiff_script.test_rtolc                 C   s¼   t jdtd� dd¡}t|d�}| ¡ }d|d< t|d�}|  d¡}|  d¡}| |¡ | |¡ t 	d	d
||g¡}|dks€t
‚| ¡ \}	}
|	dt› d|› d|› d�ks¬t
‚|
dks¸t
‚d S )Nr'   rI   r(   r)   rJ   r=   r+   r,   rN   z1e-2r   ú
 fitsdiff: ú
 a: ú
 b: a'  
 Maximum number of different data values to be reported: 10
 Relative tolerance: 0.01, Absolute tolerance: 0.0

Primary HDU:

   Data contains differences:
     Data differs at [1, 2]:
        a> 10.0
         ?  ^
        b> 11.0
         ?  ^
     1 different pixels found (1.00% different).
r#   )r.   r/   rL   r0   r	   r1   r2   r   r   r   r   r   r   rB   r   r   r   Útest_rtol_diff•   s.    





ÿþýÿÿz"TestFITSDiff_script.test_rtol_diffc              	   C   sF   |   d¡}t t¡�}t |d dg¡ W 5 Q R X |jjdksBt‚d S )NZ	tmp_file1Ú*ZACMEr$   )	r2   r   r   r   r   r   r   r   r   )r   Ztmp1r   r   r   r   Útest_wildcard¸   s    
z!TestFITSDiff_script.test_wildcardc                 C   s¬   t  d¡ dd¡}t|d�}| ¡ }t|d�}|  d¡}|  d¡}| |¡ | |¡ t ||g¡}|dkspt	‚| 
¡ \}	}
|	dt› d|› d	|› d
�ksœt	‚|
dks¨t	‚d S )Nr'   r(   r)   r+   r,   r   rP   rQ   rR   z†
 Maximum number of different data values to be reported: 10
 Relative tolerance: 0.0, Absolute tolerance: 0.0

No differences found.
r#   )r.   r/   r0   r	   r1   r2   r   r   r   r   r   r   rB   r   r   r   Útest_not_quiet¾   s,    





ÿþýÿÿz"TestFITSDiff_script.test_not_quietc                 C   sš   t  d¡ dd¡}t|d�}| ¡ }t|d�}|  d¡}|  d¡}| |¡ | |¡ t d||g¡}|dksrt	‚| 
¡ \}	}
|	dksŠt	‚|
dks–t	‚d S )	Nr'   r(   r)   r+   r,   ú-qr   r#   )r.   r/   r0   r	   r1   r2   r   r   r   r   r   rB   r   r   r   Ú
test_quietØ   s    





zTestFITSDiff_script.test_quietc              	   C   sä  t  |  d¡¡ |  d¡}|  d¡}|  d¡}t |¡�}| |¡ W 5 Q R X t|t d¡ 	dd¡ƒ t
 d| j|g¡dks€t‚t
 d|| jg¡dksšt‚|  d¡}t
 d| j|g¡dks¾t‚t
 d|| jg¡dksØt‚tjtd	d
��$ t
 d| j| jg¡dk�st‚W 5 Q R X |  d¡}t
 ||g¡ | ¡ \}}	d|	k�sBt‚tjtd	d
��( t
 d| jd | jg¡dk�stt‚W 5 Q R X t
 d| jd |g¡dk�sžt‚|  d¡}
t
 d|
| jg¡dk�sÄt‚t
 d| j|
g¡dk�sàt‚d S )Nzsub/zsub/ascii.fitszsub/group.fitsz
group.fitsr'   r(   rW   r   z:Field 'ORBPARM' has a repeat count of 0 in its format code©Úmatchr   zarange.fitsz'arange.fits' has no match inz/*.fitsz/g*.fitsztb.fits)ÚosÚmkdirr2   r*   r
   Zfitsopenr   r.   r/   r0   r   r   Údata_dirr   r   ZwarnsÚUserWarningr   )r   r    r9   Ztmp_gZtmp_hr7   Ztmp_dZtmp_cr!   rC   Ztmp_fr   r   r   Ú	test_pathç   s<    



þ(
þ, 
zTestFITSDiff_script.test_pathc                 C   sÔ   t  d¡ dd¡}| ¡ d }tdddgƒ}t|d�}t|d�}t|dd	�}t|dd	�}t||gƒ}t||gƒ}	|  d
¡}
|  d¡}| 	|
¡ |	 	|¡ t
 |
|g¡}|dks²t‚t
 |
|ddg¡}|dksÐt‚d S ©Nr'   r(   r   )ÚAr   )ÚBr$   )ÚCé   )ÚheaderZSCI)r*   Únamer+   r,   z-ur   )r.   r/   r0   r1   r   r	   r   r   r2   r   r   r   r   )r   r4   r6   ÚhaÚphdu_aÚphdu_bÚihdu_aÚihdu_bÚ	hdulist_aÚ	hdulist_br8   r9   r:   r   r   r   Útest_ignore_hdus  s"    





z$TestFITSDiff_script.test_ignore_hdusc                 C   sÞ   t  d¡ dd¡}| ¡ d }tdddgƒ}t|d�}t|d�}t|dd	�}t|dd	�}t||gƒ}	t||gƒ}
|  d
¡}|  d¡}|	 	|¡ |
 	|¡ t
 ||ddg¡}|dks¶t‚| ¡ \}}d
|ksÎt‚d|ksÚt‚d S r`   )r.   r/   r0   r1   r   r	   r   r   r2   r   r   r   r   r   )r   r    r4   r6   rg   rh   ri   rj   rk   rl   rm   r8   r9   r:   r!   rC   r   r   r   Útest_ignore_hdus_report)  s$    





z+TestFITSDiff_script.test_ignore_hdus_reportN)Ú__name__Ú
__module__Ú__qualname__r   r"   r%   r&   r;   r>   rD   rH   rM   rO   rS   rU   rV   rX   r   ÚmarkZslowr_   rn   ro   r   r   r   r   r      s$   #
,r   z6fails intentionally to show open files (see PR #10159))Úreasonc                 C   sl   | d }| d }t tƒ tt d¡d�gƒ}| |¡ d|d jd< | |¡ t||ƒ}|jsht	| 
¡ ƒ‚dS )z9Make sure that failing FITSDiff doesn't leave open files.z
file1.fitsz
file2.fitsé   r)   r   r   N)r   r	   r   r.   Zzerosr   r*   r   Ú	identicalr   Úreport)Ztmp_pathZpath1Zpath2r
   Údiffr   r   r   Útest_fitsdiff_openfile?  s    


ry   c                   @   s   e Zd Zdd„ ZdS )ÚTest_FITSDiffc              	   C   sÈ   |   d¡ tj|  d¡ddd� t|  d¡|  d¡ƒ}|jr@t‚| |  d¡¡ t	j
ttd�� |j|  d¡dd� W 5 Q R X |j|  d¡d	d� ttj |  d¡¡ƒ�}d
| ¡ ksºt‚W 5 Q R X d S )Nz
test0.fitsZTESTKEYZtestval)r   zdiff_report.txtrY   F)Ú	overwriteTz'Extra keyword 'TESTKEY' in b: 'testval')Ú	copy_filer   Zsetvalr2   r   r*   rv   r   rw   r   r   ÚOSErrorr   rE   r[   ÚpathÚ
expanduserrF   )r   Zhome_is_tempÚdrG   r   r   r   Útest_FITSDiff_reportO  s    

z"Test_FITSDiff.test_FITSDiff_reportN)rp   rq   rr   r�   r   r   r   r   rz   N  s   rz   )r[   Únumpyr.   r   Zastropyr   r   Z
astropy.ior   Zastropy.io.fitsr   r   r   r   Zastropy.io.fits.conveniencer   Zastropy.io.fits.hdur	   r
   Zastropy.io.fits.scriptsr   Zastropy.utils.miscr   Zconftestr   r   rs   Úskipry   rz   r   r   r   r   Ú<module>   s      .
