
    HR-e#                     r    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  G d de
          ZdS )	    N)fits)_NOT_OVERWRITING_MSG_MATCH   )FitsTestCase)comparerecordsc                   J    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S )TestGroupsFunctionsc           	         t          j        |                     d                    5 }t          |d         t           j                  sJ d}g d}ddddd|d	d
fg}|                    d          |k    sJ |d         }|j        |k    sJ t          |j        j        j	                  |dgz   k    sJ t          |j        t           j
                  sJ |j        d         t          |j                  k    sJ |j        j        j        t          |j                  f|d d d         z   k    sJ |j        j        |k    sJ t          |j        d         t           j                  sJ t          |j        d                   t          |          dz   k    sJ |j        d         j        j        |d d d         k    sJ |j        d         j        |k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nrandom_groups.fitsr   )   r      r   r   UUVVWWBASELINEDATEPRIMARYr   	GroupsHDU   float32z3 Groups  5 ParametersF)outputDATAGCOUNT)r   opendata
isinstancer   infoparnameslistdtypenames	GroupDataheaderlenshapeGroup)selfhdulnaxes
parametersr   ghdus         Alib/python3.11/site-packages/astropy/io/fits/tests/test_groups.py	test_openzTestGroupsFunctions.test_open   sD   Ytyy!56677 	74d1gt~66666%E???J ,	D 99E9**d22227D=J....	-..*x2GGGGGdi88888;x(C	NN::::9>'C	NN+<uTTrT{+JJJJJ9%3333dilDJ77777ty|$$J!(;;;;;9Q<$*eDDbDk99999Q<(J66666?	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   F0G&&G*-G*c                    |                      d           t          j        |                     d                    j        }t          j        d           t          j        |                     d          dd          	                                 |t          j        |                     d                    j        k    sJ dS )a  
        Test that opening a file containing a groups HDU in update mode and
        then immediately closing it does not result in any unnecessary file
        modifications.

        Similar to
        test_image.TestImageFunctions.test_open_scaled_in_update_mode().
        r   r   updateF)modememmapN)
	copy_fileosstattempst_mtimetimesleepr   r   close)r)   mtimes     r.   test_open_groups_in_update_modez3TestGroupsFunctions.test_open_groups_in_update_mode3   s     	+,,,		"67788A
1	$))011OOOUUWWW 		*> ? ?@@IIIIIII    c                    |                      d           t          j        |                     d          d          5 }d|d         j        d<   ddd           n# 1 swxY w Y   t          j        |                     d          d          5 }t          j        |d         j        d         dk              sJ 	 ddd           dS # 1 swxY w Y   dS )z
        Regression test for https://github.com/astropy/astropy/issues/3730 and
        for https://github.com/spacetelescope/PyFITS/issues/102
        r   r1   r2   gzG?r   r   N)r4   r   r   r7   r   npall)r)   hs     r.   test_random_groups_data_updatez2TestGroupsFunctions.test_random_groups_data_updateI   sG    	+,,,Ytyy!566XFFF 	#!"AaDIdO	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# Ytyy!566XFFF 	3!6!A$)D/T1222222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s#   AA #A ,C

CCc                    |                      d           g d}t          j        |                     d          d          5 }|d         j        |k    sJ |                                 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        |k    sJ |                    |                     d                     ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        |k    sJ 	 ddd           dS # 1 swxY w Y   dS )z
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/130

        Ensures that opening a random groups file in update mode or writing it
        to a new file does not cause any change to the parameter names.
        r   r   r1   r@   r   N	test.fits)r4   r   r   r7   r    flushwriteto)r)   r,   rC   s      r.   test_parnames_round_tripz,TestGroupsFunctions.test_parnames_round_tripV   s    	+,,,;;;
Ytyy!566XFFF 	!Q4=J....GGIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 Ytyy!56677 	.1Q4=J....IIdii,,---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. Ytyy--.. 	/!Q4=J.....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s6   (A77A;>A;)<C11C58C5#EE	E	c                 N   t          j        |                     d                    5 }|d         j        dd         }t          |t           j                  sJ t          |          dk    sJ |d         j        j        |j        k    sJ 	 ddd           dS # 1 swxY w Y   dS )a  
        A simple test to ensure that slicing GroupData returns a new, smaller
        GroupData object, as is the case with a normal FITS_rec.  This is a
        regression test for an as-of-yet unreported issue where slicing
        GroupData returned a single Group record.
        r   r   r   N   )r   r   r   r   r$   r&   r    )r)   r*   ss      r.   test_groupdata_slicez(TestGroupsFunctions.test_groupdata_slicep   s     Ytyy!56677 	74QQRR Aa00000q66Q;;;;7<(AJ66666		7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   A$BB!Bc                    t          j        |                     d                    5 }|d         j        d         }|dd         }t          |          dk    sJ |d         |d         k    sJ |d         |d         k    sJ |ddd         }t          |          dk    sJ |d         |d         k                                    sJ |d         |d         k    sJ |ddd         }t          |          d	k    sJ |d         |d         k    sJ |d
         |d         k    sJ |d         |d         k    sJ 	 ddd           dS # 1 swxY w Y   dS )z<
        Tests basic slicing a single group record.
        r   r   rK      r   N   r   r   )r   r   r   r&   rB   )r)   r*   grL   s       r.   test_group_slicez$TestGroupsFunctions.test_group_slice~   s    Ytyy!56677 	 4QQA!A#Aq66Q;;;;Q41Q4<<<<R5AbE>>>>$$B$Aq66Q;;;;aDAbEM&&(((((R5AaD====##A#Aq66Q;;;;Q41Q4<<<<Q41Q4<<<<Q41Q4<<<<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   DEEEc                 b   t          j        d          }d|_        t          j        dt           j                  dz   }d}t          j        j                            |ddg||gd	
          }|j        ddgk    sJ |	                    d          |k    
                                sJ |	                    d          |gt          |          z  k    
                                sJ |j        |k    
                                sJ t	          j        |          }|j        ddgk    sJ |j        d         dk    sJ |                     d          }|                    |           t#          j        t&          t(                    5  |                    |d           ddd           n# 1 swxY w Y   |                    |d           t	          j        |          5 }|d         j        }	|	d         dk    sJ |	d         dk    sJ |	d         dk    sJ |	d         dk    sJ |	d         dk    sJ |	d         dk    sJ |	d         dk    sJ |	d         dk    sJ |d         j        j        ddgk    sJ t-          |d         j        |          sJ 	 ddd           dS # 1 swxY w Y   dS )zA
        Basic test for creating GroupData from scratch.
              Y@
   r   r   rK      rW   r"   g?      E@abcxyzr    pardatabitpixr   r   rF   )matchF)	overwriteNTr   PCOUNTrK   NAXISrX   NAXIS1NAXIS2NAXIS3NAXIS4r   NAXIS5)rA   aranger'   r   r   hdugroupsr$   r    parrB   r&   r   r   r%   r7   rH   pytestraisesOSErrorr   r   r   )
r)   home_is_tempimdatapdata1pdata2xr-   filenamerC   hdrs
             r.   test_create_groupdataz)TestGroupsFunctions.test_create_groupdata   s]   
 5!!'2RZ00036HO%%eU^ff5Ec & 
 
 zeU^++++e&++-----e&CFF!2388:::::& %%''''' ~1%%%}....{8$****99[))X ]7*DEEE 	4 	4LLUL333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4X...Yx   	0AA$+Cx=B&&&&x=A%%%%w<1$$$$x=A%%%%x=A%%%%x=A%%%%x=A%%%%x=A%%%%Q49%%7777!!A$)Q//////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s%   F++F/2F/!B5J$$J(+J(c                 .   t          j        d          }d|_        t          j        dt           j                  dz   }d}t          j        j                            |g d|||gd	          }|j        g dk    sJ |	                    d
          |dz  k    
                                sJ |d         	                    d
          dk    sJ |d                             dd           |d         	                    d
          dk    sJ t          j        t          |d         j        d
d           |d                             d
d           |d         	                    d
          dk    sJ |	                    d
          d         dk    sJ |	                    d
          dd         |dd         dz  k    
                                sJ t	          j        |          }|                    |                     d                     t	          j        |                     d                    5 }|d         j        }|d         dk    sJ |d         d
k    sJ |d         dk    sJ |d         d
k    sJ |j        g dk    sJ |j        j        dk    sJ |	                    d
          d         dk    sJ |	                    d
          dd         |dd         dz  k    
                                sJ 	 ddd           dS # 1 swxY w Y   dS )z
        Tests support for multiple parameters of the same name, and ensures
        that the data in duplicate parameters are returned as a single summed
        value.
        rU   rV   rW   rY   r   rZ   )r[   r\   r[   r]   r^   r[   rK   r   r   )rK   r   rX   Nra   rF   rd   PTYPE1PTYPE2r\   PTYPE3)r[   r\   _abcr   )rA   rk   r'   r   r   rl   rm   r$   r    rn   rB   setparro   rp   
ValueErrorr   rH   r7   r   r%   r"   r#   )r)   rs   rt   ru   rv   r-   rC   rx   s           r.   test_duplicate_parameterz,TestGroupsFunctions.test_duplicate_parameter   sZ    5!!'2RZ00014HO%%***VV,	 & 
 
 z2222222e
*//11111txx!#### 	
!Aqtxx!####j!A$+ua888	!E6"""txx!####uuU||A!####eQRR F122JN27799999 ~1%%%TYY{++,,,Ytyy--.. 		>!A$+Cx=A%%%%x=E))))x=E))))x=E)))):!6!6!666667=$BBBBB55<<?a''''EE%LL$qrr
Q6;;======		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		>s   4CL

LLc                 :   t           j                            dd          }t          j        |                     |                    5 }t          |          dk    sJ |d         j        d         sJ |d         j        J 	 ddd           dS # 1 swxY w Y   dS )zuTest file without NAXIS1 keyword.
        Regression test for https://github.com/astropy/astropy/issues/9709
        invalidzgroup_invalid.fitsr   r   GROUPSN)r5   pathjoinr   r   r   r&   r%   )r)   testfiler*   s      r.   test_group_bad_naxisz(TestGroupsFunctions.test_group_bad_naxis   s     7<<	+?@@Ytyy**++ 	(tt99>>>>7>(++++7<''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   :BBBc                    t          j                    }d|j        d<   |                    |                     d                     t          j        |                     d                    5 }|d         j        d         dk    sJ |d         j        j        d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S )N)r   not a groups HDUr   znot_groups.fitsr   r   r   )r   
PrimaryHDUr%   rH   r7   r   comments)r)   rl   r*   s      r.   test_not_groups_filez(TestGroupsFunctions.test_not_groups_file   s
   o6
8DII/00111Ytyy!23344 	K7>(+q00007>*848JJJJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   -8B33B7:B7N)__name__
__module____qualname__r/   r=   rD   rI   rM   rS   ry   r   r   r    r>   r.   r	   r	      s         7  7  7DJ J J,3 3 3/ / /47 7 7     ,)0 )0 )0V,> ,> ,>\( ( (K K K K Kr>   r	   )r5   r9   numpyrA   ro   
astropy.ior   astropy.utils.miscr   conftestr   
test_tabler   r	   r   r>   r.   <module>r      s    
			             9 9 9 9 9 9 " " " " " " & & & & & &mK mK mK mK mK, mK mK mK mK mKr>   