
    HR-e+                        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e          Zej                            d          d             Z G d de          ZdS )    N)__version__)fits)FITSDiffHDUListHeaderImageHDU)writeto)
PrimaryHDUhdulist)fitsdiff)_NOT_OVERWRITING_MSG_MATCH   )FitsTestCasec                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zej        j        d             Zd Zd ZdS )TestFITSDiff_scriptc                     t          j        t                    5 }t          j        dg           d d d            n# 1 swxY w Y   |j        j        dk    sJ d S )Nz-hr   pytestraises
SystemExitr   mainvaluecodeselfes     Clib/python3.11/site-packages/astropy/io/fits/tests/test_fitsdiff.py	test_helpzTestFITSDiff_script.test_help   s    ]:&& 	"!M4&!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"w|q         <A A c                    t          j        t                    5 }t          j        dg           |                                d         }|dt           k    sJ 	 d d d            n# 1 swxY w Y   |j        j        dk    sJ d S )Nz	--versionr   z	fitsdiff )	r   r   r   r   r   
readouterrversionr   r   )r   capsysr   outs       r   test_versionz TestFITSDiff_script.test_version   s    ]:&& 	0!M;-(((##%%a(C/g///////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 w|q      s   A A''A+.A+c                     t          j        t                    5 }t          j        dg           d d d            n# 1 swxY w Y   |j        j        dk    sJ d S )N    r   r   s     r   test_noargszTestFITSDiff_script.test_noargs    s    ]:&& 	 !M2$	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 w|q      r   c                     t          j        t                    5 }t          j        dg           d d d            n# 1 swxY w Y   |j        j        dk    sJ d S )Nfile1r(   r   r   s     r   test_oneargargsz#TestFITSDiff_script.test_oneargargs%   s    ]:&& 	%!M7)$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%w|q      r   c                    t          j        d                              dd          }t          |          }|                                }t          |          }|                     d          }|                     d          }|                    |           |                    |           t          j        ||g          }|dk    sJ 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numdiffs           r   test_nodiffzTestFITSDiff_script.test_nodiff*   s    IcNN""2r**"""FFHH"""		,''		,''ee-//!||||||    c                    t          j        d                              dd          }t          |          }|                                }d|d<   t          |          }|                     d          }|                     d          }|                    |           |                    |           t          j        ||g          }|dk    sJ d S )	Nr.   r/   r0      r   r   r2   r3   r   r4   r:   s           r   test_onediffz TestFITSDiff_script.test_onediff6   s    IcNN""2r**"""FFHH$"""		,''		,''ee-//!||||||rC   c                    t          j        d                              dd          }t          |          }|dz   }t          |          }|                     d          }|                     d          }|                    |           |                    |           t          j        ||g          }|                                \  }	}
|dk    sJ |		                                dd          g dk    sJ t          j        d	d
||g          }|                                \  }	}
|dk    sJ |		                                dd          g dk    sJ d S )Nr.   r/   r0   r   r2   r3   )z        a> 9z        b> 10     ...4     100 different pixels found (100.00% different).z-n1)z        a> 0z        b> 1rJ   rK   )
r5   r6   r7   r
   r9   r	   r   r   r!   
splitlinesr   r#   r;   r<   r=   r>   r?   r@   rA   r$   errs              r   test_manydiffz!TestFITSDiff_script.test_manydiffC   s{   IcNN""2r**"""E"""		,''		,''ee-//$$&&S!||||~~$ )
 )
 )
 
 
 
 
 -sE5 9::$$&&S!||||~~$ )
 )
 )
 
 
 
 
 
 
rC   c                    t          j        d                              dd          }t          |          }|                                }d|d<   t          |          }|                     d          }|                     d          }|                    |           |                    |           t          j        d|                     d	          ||g          }|d
k    sJ t          |                     d	                    5 }|
                                }	d d d            n# 1 swxY w Y   |	                                dd          g dk    sJ d S )Nr.   r/   r0   rE   rF   r2   r3   z-ozdiff.txtr   rI   )z     Data differs at [1, 2]:z        a> 10z        b> 12z0     1 different pixels found (1.00% different).)r5   r6   r7   r
   r8   r9   r	   r   r   openreadrM   )
r   r;   r<   r=   r>   r?   r@   rA   fr$   s
             r   test_outputfilez#TestFITSDiff_script.test_outputfilea   s   IcNN""2r**"""FFHH$"""		,''		,''ee-tyy'<'<eU KLL!||||$))J''(( 	A&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~~$ )
 )
 )
 
 
 
 
 
 
s   D,,D03D0c                     t          j        dt                                        dd          }t	          |          }|                                }d|d<   t	          |          }|                     d          }|                     d          }|                    |           |                    |           t          j	        d	d
||g          }|dk    sJ t          j	        dd	d
||g          }|dk    sJ d S )Nr.   dtyper/   r0      rF   r2   r3   z-arL   r   z--exactr   
r5   r6   floatr7   r
   r8   r9   r	   r   r   r:   s           r   	test_atolzTestFITSDiff_script.test_atolw   s    Ic'''//B77"""FFHH$"""		,''		,''ee-sE5 9::!||||-D#ue DEE!||||||rC   c                    t          j        dt                                        dd          }t	          |          }|                                }d|d<   t	          |          }|                     d          }|                     d          }|                    |           |                    |           t          j	        d	d
||g          }|dk    sJ d S )Nr.   rW   r/   r0   rY   rF   r2   r3   -rz1e-1r   rZ   r:   s           r   	test_rtolzTestFITSDiff_script.test_rtol   s    Ic'''//B77"""FFHH$"""		,''		,''ee-vue <==!||||||rC   c                 *   t          j        dt                                        dd          }t	          |          }|                                }d|d<   t	          |          }|                     d          }|                     d          }|                    |           |                    |           t          j	        d	d
||g          }|dk    sJ |
                                \  }	}
|	dt           d| d| dk    sJ |
dk    sJ d S )Nr.   rW   r/   r0   rY   rF   r2   r3   r^   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'   )r5   r6   r[   r7   r
   r8   r9   r	   r   r   r!   r"   rN   s              r   test_rtol_diffz"TestFITSDiff_script.test_rtol_diff   s9   Ic'''//B77"""FFHH$"""		,''		,''ee-vue <==!||||$$&&S 
       & byyyyyyrC   c                     |                      d          }t          j        t                    5 }t	          j        |dz   dg           d d d            n# 1 swxY w Y   |j        j        dk    sJ d S )N	tmp_file1*ACMEr(   )r9   r   r   r   r   r   r   r   )r   tmp1r   s      r   test_wildcardz!TestFITSDiff_script.test_wildcard   s    yy%%]:&& 	0!M4#:v.///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0w|q      s   AAAc                    t          j        d                              dd          }t          |          }|                                }t          |          }|                     d          }|                     d          }|                    |           |                    |           t          j        ||g          }|dk    sJ |	                                \  }	}
|	dt           d| d	| d
k    sJ |
dk    sJ d S )Nr.   r/   r0   r2   r3   r   ra   rb   rc   z
 Maximum number of different data values to be reported: 10
 Relative tolerance: 0.0, Absolute tolerance: 0.0

No differences found.
r'   )r5   r6   r7   r
   r8   r9   r	   r   r   r!   r"   rN   s              r   test_not_quietz"TestFITSDiff_script.test_not_quiet   s$   IcNN""2r**"""FFHH"""		,''		,''ee-//!||||$$&&S 
    	 	 	 	 byyyyyyrC   c                    t          j        d                              dd          }t          |          }|                                }t          |          }|                     d          }|                     d          }|                    |           |                    |           t          j        d||g          }|dk    sJ |	                                \  }	}
|	dk    sJ |
dk    sJ d S )	Nr.   r/   r0   r2   r3   -qr   r'   )
r5   r6   r7   r
   r8   r9   r	   r   r   r!   rN   s              r   
test_quietzTestFITSDiff_script.test_quiet   s    IcNN""2r**"""FFHH"""		,''		,''ee-ue 455!||||$$&&SbyyyybyyyyyyrC   c                    t          j        |                     d                     |                     d          }|                     d          }|                     d          }t	          j        |          5 }|                    |           d d d            n# 1 swxY w Y   t          |t          j        d          	                    dd                     t          j        d| j        |g          dk    sJ t          j        d|| j        g          dk    sJ |                     d          }t          j        d| j        |g          dk    sJ t          j        d|| j        g          dk    sJ t          j        t          d	
          5  t          j        d| j        | j        g          dk    sJ 	 d d d            n# 1 swxY w Y   |                     d          }t          j        ||g           |                                \  }}	d|	v sJ t          j        t          d	
          5  t          j        d| j        dz   | j        g          dk    sJ 	 d d d            n# 1 swxY w Y   t          j        d| j        dz   |g          dk    sJ |                     d          }
t          j        d|
| j        g          dk    sJ t          j        d| j        |
g          dk    sJ d S )Nzsub/zsub/ascii.fitszsub/group.fitsz
group.fitsr.   r/   rn   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mkdirr9   r1   r   fitsopenr	   r5   r6   r7   r   r   data_dirr   warnsUserWarningr!   )r   r#   r@   tmp_gtmp_hr>   tmp_dtmp_cr$   rO   tmp_fs              r   	test_pathzTestFITSDiff_script.test_path   s   
6""###		*++		*++		,''e$$ 	!MM%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	ry~~--b"55666 }dDM59::a????}dE4=9::a???? 		&!!}dDM59::a????}dE4=9::a????\O
 
 
 	L 	L =$t}!EFF!KKKKK		L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 		-((uen%%%$$&&S.#5555 \O
 
 
 	X 	X =$	(A4=!QRRVWWWWWW		X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X
 }dDMJ$>FGG1LLLL 		)$$}dE4=9::a????}dDM59::a??????s6   ;BB!$B!(GGG9+I11I58I5c                    t          j        d                              dd          }|                                dz   }t	          g d          }t          |          }t          |          }t          |d          }t          |d          }t          ||g          }t          ||g          }	|                     d          }
|                     d	          }|	                    |
           |		                    |           t          j        |
|g          }|dk    sJ t          j        |
|d
dg          }|dk    sJ d S Nr.   r/   r   ))Ar   )Br(   )C   )headerSCI)r1   namer2   r3   z-ur   )r5   r6   r7   r8   r   r
   r   r   r9   r	   r   r   )r   r;   r=   haphdu_aphdu_bihdu_aihdu_b	hdulist_a	hdulist_br?   r@   rA   s                r   test_ignore_hdusz$TestFITSDiff_script.test_ignore_hdus  s?   IcNN""2r**FFHHqL222332&&&2&&&qu---qu---VV,--	VV,--			,''		,''%   %   -//!||||-tU ;<<!||||||rC   c                    t          j        d                              dd          }|                                dz   }t	          g d          }t          |          }t          |          }t          |d          }t          |d          }t          ||g          }	t          ||g          }
|                     d          }|                     d	          }|		                    |           |
	                    |           t          j        ||d
dg          }|dk    sJ |                                \  }}d|v sJ d	|v sJ d S r   )r5   r6   r7   r8   r   r
   r   r   r9   r	   r   r   r!   )r   r#   r;   r=   r   r   r   r   r   r   r   r?   r@   rA   r$   rO   s                   r   test_ignore_hdus_reportz+TestFITSDiff_script.test_ignore_hdus_report)  sX   IcNN""2r**FFHHqL222332&&&2&&&qu---qu---VV,--	VV,--			,''		,''%   %   -tU ;<<!||||$$&&Ss""""s""""""rC   N)__name__
__module____qualname__r   r%   r)   r,   rB   rG   rP   rU   r\   r_   rd   rj   rl   ro   r   markslowr~   r   r    rC   r   r   r      s*       ! ! !
! ! !! ! !
! ! !

 
 
  
 
 
<
 
 
,  "  ! ! !F! ! !  4   [*@ *@ *@X  *# # # # #rC   r   z6fails intentionally to show open files (see PR #10159))reasonc                 Z   | dz  }| dz  }t          t                      t          t          j        d                    g          } |j        |           d|d         j        d<    |j        |           t          ||          }|j        sJ |	                                            dS )z9Make sure that failing FITSDiff doesn't leave open files.z
file1.fitsz
file2.fits   r0   r   r   N)
r   r
   r   r5   zerosr	   r1   r   	identicalreport)tmp_pathpath1path2r   diffs        r   test_fitsdiff_openfiler   ?  s     |#E|#Ez||X28A;;%?%?%?@AAGGOEGAJOAGOEE5!!D>((4;;==(((((rC   c                       e Zd Zd ZdS )Test_FITSDiffc                 L   |                      d           t          j        |                     d          dd           t	          |                     d          |                     d                    }|j        rJ |                    |                     d                     t          j	        t          t                    5  |                    |                     d          d           d d d            n# 1 swxY w Y   |                    |                     d          d	           t          t          j                            |                     d                              5 }d
|                                v sJ 	 d d d            d S # 1 swxY w Y   d S )Nz
test0.fitsTESTKEYtestval)r   zdiff_report.txtrq   F)	overwriteTz'Extra keyword 'TESTKEY' in b: 'testval')	copy_filer   setvalr9   r   r1   r   r   r   r   OSErrorr   rR   rs   path
expanduserrS   )r   home_is_tempdrT   s       r   test_FITSDiff_reportz"Test_FITSDiff.test_FITSDiff_reportO  s   |$$$DIIl++YiHHHHTYY|,,dii.E.EFF;	,--...]7*DEEE 	D 	DHHTYY011UHCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D	,-->>>"'$$TYY/@%A%ABBCC 	Iq<HHHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is$   +C>>DD2FF FN)r   r   r   r   r   rC   r   r   r   N  s(        I I I I IrC   r   )rs   numpyr5   r   astropyr   r"   
astropy.ior   astropy.io.fitsr   r   r   r   astropy.io.fits.conveniencer	   astropy.io.fits.hdur
   r   astropy.io.fits.scriptsr   astropy.utils.miscr   conftestr   r   r   skipr   r   r   rC   r   <module>r      so   
			      * * * * * *       ? ? ? ? ? ? ? ? ? ? ? ? / / / / / / 3 3 3 3 3 3 3 3 , , , , , , 9 9 9 9 9 9 " " " " " "i# i# i# i# i#, i# i# i#X	 QRR) ) SR)I I I I IL I I I I IrC   