a
    ߙfbM(                     @   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
 d dlmZmZmZ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dS )    N   )FitsTestCase)writeto)
PrimaryHDUhdulist)HeaderImageHDUHDUListFITSDiff)fitsdiff)__version__c                   @   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dd Zdd  Zd!d" Zd#S )$TestFITSDiff_scriptc                 C   sJ   t t}tdg W d    n1 s,0    Y  |jjdksFJ d S )Nz-hr   pytestraises
SystemExitr   mainvaluecodeselfe r   Blib/python3.9/site-packages/astropy/io/fits/tests/test_fitsdiff.py	test_help   s    *zTestFITSDiff_script.test_helpc                 C   sh   t t:}tdg | d }|dt ks6J W d    n1 sJ0    Y  |jjdksdJ d S )Nz	--versionr   z	fitsdiff )	r   r   r   r   r   
readouterrversionr   r   )r   capsysr   outr   r   r   test_version   s
    0z TestFITSDiff_script.test_versionc                 C   sJ   t t}tdg W d    n1 s,0    Y  |jjdksFJ d S )N    r   r   r   r   r   test_noargs   s    *zTestFITSDiff_script.test_noargsc                 C   sJ   t t}tdg W d    n1 s,0    Y  |jjdksFJ 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spJ d S )Nd   
   data
testa.fits
testb.fitsr   	nparangereshaper   copytempr   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sxJ d S )	Nr$   r%   r&      r   r   r(   r)   r   r*   r0   r   r   r   test_onediff2   s    





z TestFITSDiff_script.test_onediffc                 C   s   t ddd}t|d}|d }t|d}| d}| d}|| || t||g}| \}	}
|dks|J |		 dd  g dksJ td	d
||g}| \}	}
|dksJ |		 dd  g dksJ d S )Nr$   r%   r&   r   r(   r)   )z        a> 9z        b> 10     ...4     100 different pixels found (100.00% different).z-n1)z        a> 0z        b> 1r=   r>   )
r+   r,   r-   r   r/   r   r   r   r   
splitlinesr   r   r1   r2   r3   r4   r5   r6   r7   r   errr   r   r   test_manydiff?   s     





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sJ t	| d	}|
 }	W d    n1 s0    Y  |	 dd  g dksJ d S )Nr$   r%   r&   r9   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,   r-   r   r.   r/   r   r   r   openreadr@   )
r   r1   r2   r3   r4   r5   r6   r7   fr   r   r   r   test_outputfile[   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sJ t	dd	d
||g}|dksJ d S )Nr$   Zdtyper%   r&      r:   r(   r)   z-ar?   r   z--exactr   
r+   r,   floatr-   r   r.   r/   r   r   r   r0   r   r   r   	test_atolp   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sJ d S )Nr$   rH   r%   r&   rI   r:   r(   r)   -rz1e-1r   rJ   r0   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sJ |
 \}	}
|	dt d| d| dksJ |
dksJ d S )Nr$   rH   r%   r&   rI   r:   r(   r)   rM   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,   rK   r-   r   r.   r/   r   r   r   r   r   rA   r   r   r   test_rtol_diff   s(    





z"TestFITSDiff_script.test_rtol_diffc                 C   sZ   |  d}tt"}t|d dg W d    n1 s<0    Y  |jjdksVJ d S )NZ	tmp_file1*ZACMEr!   )r/   r   r   r   r   r   r   r   )r   Ztmp1r   r   r   r   test_wildcard   s    
0z!TestFITSDiff_script.test_wildcardc                 C   s   t ddd}t|d}| }t|d}| d}| d}|| || t||g}|dkspJ |	 \}	}
|	dt
 d| d	| d
ksJ |
dksJ d S )Nr$   r%   r&   r(   r)   r   rO   rP   rQ   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,   r-   r   r.   r/   r   r   r   r   r   rA   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srJ |	 \}	}
|	dksJ |
dksJ d S )	Nr$   r%   r&   r(   r)   -qr   r    )
r+   r,   r-   r   r.   r/   r   r   r   r   rA   r   r   r   
test_quiet   s    





zTestFITSDiff_script.test_quietc                 C   s$  t | d | d}| d}| d}t|}|| W d    n1 sX0    Y  t|td	dd t
d| j|gdksJ t
d|| jgdksJ | d}t
d| j|gdksJ t
d|| jgdksJ tjtd	d
. t
d| j| jgdksJ W d    n1 s00    Y  | d}t
||g | \}}	d|	v slJ tjtd	d
2 t
d| jd | jgdksJ W d    n1 s0    Y  t
d| jd |gdksJ | d}
t
d|
| jgdksJ t
d| j|
gdks J d S )Nzsub/zsub/ascii.fitszsub/group.fitsz
group.fitsr$   r%   rV   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mkdirr/   r'   r   Zfitsopenr   r+   r,   r-   r   r   Zdata_dirr   ZwarnsUserWarningr   )r   r   r6   Ztmp_gZtmp_hr4   Ztmp_dZtmp_cr   rB   Ztmp_fr   r   r   	test_path   s8    


(
>
* 
zTestFITSDiff_script.test_pathc                 C   s   t ddd}| d }tg d}t|d}t|d}t|dd}t|dd}t||g}t||g}	| d}
| d	}|	|
 |		| t
|
|g}|dksJ t
|
|d
dg}|dksJ d S Nr$   r%   r   ))Ar   )Br!   )C   )headerZSCI)r'   namer(   r)   z-ur   )r+   r,   r-   r.   r   r   r   r	   r/   r   r   r   )r   r1   r3   haphdu_aphdu_bihdu_aihdu_b	hdulist_a	hdulist_br5   r6   r7   r   r   r   test_ignore_hdus  s"    





z$TestFITSDiff_script.test_ignore_hdusc                 C   s   t ddd}| d }tg d}t|d}t|d}t|dd}t|dd}t||g}	t||g}
| d}| d	}|		| |
	| t
||d
dg}|dksJ | \}}d|v sJ d	|v sJ d S r]   )r+   r,   r-   r.   r   r   r   r	   r/   r   r   r   r   )r   r   r1   r3   rd   re   rf   rg   rh   ri   rj   r5   r6   r7   r   rB   r   r   r   test_ignore_hdus_report  s$    





z+TestFITSDiff_script.test_ignore_hdus_reportN)__name__
__module____qualname__r   r   r"   r#   r8   r;   rC   rG   rL   rN   rR   rT   rU   rW   r\   rk   rl   r   r   r   r   r      s"    )r   z6fails intentionally to show open files (see PR #10159))reasonc                 C   sx   t | d}t | d}tt ttddg}|| d|d jd< || t	||}|j
stJ | dS )z9Make sure that failing FITSDiff doesn't leave open files.z
file1.fitsz
file2.fits   r&   r   r   N)strjoinr	   r   r   r+   Zzerosr   r'   r
   Z	identicalZreport)ZtmpdirZpath1Zpath2r   Zdiffr   r   r   test_fitsdiff_openfile.  s    


rt   )Znumpyr+   r   rY   r    r   Zastropy.io.fits.conveniencer   Zastropy.io.fits.hdur   r   Zastropy.io.fitsr   r   r	   r
   Zastropy.io.fits.scriptsr   Zastropyr   r   r   Zmarkskiprt   r   r   r   r   <module>   s     !