a
    ߙfb                      @   sX   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
 G dd deZdS )    N   )FitsTestCase)comparerecords)fitsc                   @   sT   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S )TestGroupsFunctionsc              	   C   s  t | d^}t|d t js(J d}g d}ddddd|d	d
fg}|jdd|ks^J |d }|j|kstJ t|jjj	|dg ksJ t|jt j
sJ |jd t|jksJ |jjjt|jf|d d d  ksJ |jj|ksJ t|jd t js
J t|jd t|d ks*J |jd jj|d d d ksLJ |jd j|ksbJ W d    n1 sx0    Y  d S )Nrandom_groups.fitsr   )   r      r   r   UUZVVZWWZBASELINEZDATEZPRIMARYr   	GroupsHDU   float32z3 Groups  5 ParametersF)outputDATAGCOUNT)r   opendata
isinstancer   infoparnameslistdtypenames	GroupDataheaderlenshapeZGroup)selfhdulZnaxes
parametersr   ghdu r#   @lib/python3.9/site-packages/astropy/io/fits/tests/test_groups.py	test_open   s&    ( "zTestGroupsFunctions.test_openc                 C   s^   |  d t| dj}td tj| dddd	  |t| djksZJ 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)modeZmemmapN)
	copy_fileosstattempst_mtimetimesleepr   r   close)r   mtimer#   r#   r$   test_open_groups_in_update_mode'   s    


z3TestGroupsFunctions.test_open_groups_in_update_modec                 C   s   |  d tj| ddd}d|d jd< W d   n1 sB0    Y  tj| ddd,}t|d jd dks~J W d   n1 s0    Y  dS )z
        Regression test for https://github.com/astropy/astropy/issues/3730 and
        for https://github.com/spacetelescope/PyFITS/issues/102
        r   r&   r'   gzG?r   r   N)r(   r   r   r+   r   npall)r   hr#   r#   r$   test_random_groups_data_update>   s
    
,z2TestGroupsFunctions.test_random_groups_data_updatec                 C   s   |  d g d}tj| ddd*}|d j|ks:J |  W d   n1 sV0    Y  t| d2}|d j|ksJ || d W d   n1 s0    Y  t| d"}|d j|ksJ W d   n1 s0    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
   r&   r2   r   N	test.fits)r(   r   r   r+   r   flushwriteto)r   r!   r5   r#   r#   r$   test_parnames_round_tripK   s    
&.z,TestGroupsFunctions.test_parnames_round_tripc                 C   s|   t | dX}|d jdd }t|t js4J t|dksDJ |d jj|jksZJ W d   n1 sn0    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    sr#   r#   r$   test_groupdata_slicee   s
    z(TestGroupsFunctions.test_groupdata_slicec                 C   s0  t | d}|d jd }|dd }t|dks>J |d |d ksRJ |d |d ksfJ |ddd }t|dksJ |d |d k sJ |d |d ksJ |ddd }t|d	ksJ |d |d ksJ |d
 |d ksJ |d |d ksJ W d   n1 s"0    Y  dS )z<
        Tests basic slicing a single group record.
        r   r   r;      r   N   r   r   )r   r   r   r   r4   )r   r    gr<   r#   r#   r$   test_group_slices   s    z$TestGroupsFunctions.test_group_slicec                 C   s  t d}d|_t jdt jdd }d}tjjj|ddg||gd	d
}|jddgksXJ |	d|k
 snJ |	d|gt| k
 sJ |j|k
 sJ tj|d}|jddgksJ |jd dksJ || d t| d}|d j}|d dksJ |d dks J |d dks2J |d dksDJ |d dksVJ |d dkshJ |d dkszJ |d dksJ |d jjddgksJ t|d j|sJ W d   n1 s0    Y  dS )zA
        Basic test for creating GroupData from scratch.
              Y@
   r   r   r;      rE   r   g?      E@abcxyzr   ZpardataZbitpixr   r   r7   r   PCOUNTr;   ZNAXISrF   ZNAXIS1ZNAXIS2ZNAXIS3ZNAXIS4r   ZNAXIS5N)r3   aranger   r   r   hdugroupsr   r   parr4   r   r   r   r   r9   r+   r   r   r   ZimdataZpdata1Zpdata2xr"   r5   Zhdrr#   r#   r$   test_create_groupdata   s6    
 
z)TestGroupsFunctions.test_create_groupdatac                 C   s>  t d}d|_t jdt jdd }d}tjjj|g d|||gdd	}|jg dksZJ |	d
|d k
 stJ |d 	d
dksJ |d dd |d 	d
dksJ tt|d jd
d |d d
d |d 	d
dksJ |	d
d dksJ |	d
dd |dd d k
 s0J tj|d}|| d t| d}|d j}|d dkszJ |d d
ksJ |d dksJ |d d
ksJ |jg dksJ |jjdksJ |	d
d dksJ |	d
dd |dd d k
 sJ W d   n1 s00    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.
        rC   rD   rE   rG   r   rH   )rI   rJ   rI   rK   rL   rI   r;   r   r   )r;   r   rF   NrM   r7   rN   ZPTYPE1ZPTYPE2rJ   ZPTYPE3)rI   rJ   _abcr   )r3   rO   r   r   r   rP   rQ   r   r   rR   r4   ZsetparpytestZraises
ValueErrorr   r9   r+   r   r   r   r   rS   r#   r#   r$   test_duplicate_parameter   s<    
,
z,TestGroupsFunctions.test_duplicate_parameterc                 C   sv   t jdd}t| |D}t|dks0J |d jd sBJ |d jdu sTJ W d   n1 sh0    Y  dS )zuTest file without NAXIS1 keyword.
        Regression test for https://github.com/astropy/astropy/issues/9709
        Zinvalidzgroup_invalid.fitsr   r   ZGROUPSN)r)   pathjoinr   r   r   r   r   )r   Ztestfiler    r#   r#   r$   test_group_bad_naxis   s
    z(TestGroupsFunctions.test_group_bad_naxisN)__name__
__module____qualname__r%   r1   r6   r:   r=   rB   rU   rY   r\   r#   r#   r#   r$   r      s   $+r   )r)   r-   rW   Znumpyr3    r   Z
test_tabler   Z
astropy.ior   r   r#   r#   r#   r$   <module>   s   