U
    e»{j„"  ã                   @   sd   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„ de
ƒZdS )	é    N)Úfits)Ú_NOT_OVERWRITING_MSG_MATCHé   )ÚFitsTestCase)Úcomparerecordsc                   @   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   sv  t  |  d¡¡��Z}t|d t jƒs(t‚d}dddddg}dd	d
dd|ddfg}|jdd�|ksdt‚|d }|j|kszt‚t|jj	j
ƒ|dg ks–t‚t|jt jƒs¨t‚|jd t|jƒksÀt‚|jjjt|jƒf|d d d…  ksèt‚|jj|ksøt‚t|jd t jƒ�st‚t|jd ƒt|ƒd
 k�s0t‚|jd jj|d d d… k�sRt‚|jd j|k�sht‚W 5 Q R X d S )Núrandom_groups.fitsr   )é   r   é€   r   r   ÚUUÚVVÚWWÚBASELINEÚDATEZPRIMARYr   Ú	GroupsHDUé“   Úfloat32z3 Groups  5 ParametersF)ÚoutputÚDATAÚGCOUNTéÿÿÿÿ)r   ÚopenÚdataÚ
isinstancer   ÚAssertionErrorÚinfoÚparnamesÚlistÚdtypeÚnamesÚ	GroupDataÚheaderÚlenÚshapeÚGroup)ÚselfÚhdulZnaxesÚ
parametersr   Úghdu© r)   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/io/fits/tests/test_groups.pyÚ	test_open   s4    øÿ( "zTestGroupsFunctions.test_openc                 C   s^   |   d¡ t |  d¡¡j}t d¡ tj|  d¡ddd� 	¡  |t |  d¡¡jksZt
‚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   Úcloser   )r%   Úmtimer)   r)   r*   Útest_open_groups_in_update_mode3   s
    

z3TestGroupsFunctions.test_open_groups_in_update_modec              	   C   sx   |   d¡ tj|  d¡dd��}d|d jd< W 5 Q R X tj|  d¡dd��"}t |d jd dk¡sjt‚W 5 Q R X 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-   gáz®GáÚ?r   r   N)r.   r   r   r1   r   ÚnpÚallr   )r%   Úhr)   r)   r*   Útest_random_groups_data_updateI   s
    
z2TestGroupsFunctions.test_random_groups_data_updatec              	   C   sÂ   |   d¡ dddddg}tj|  d¡dd�� }|d	 j|ks@t‚| ¡  W 5 Q R X t |  d¡¡�(}|d	 j|ksvt‚| |  d
¡¡ W 5 Q R X t |  d
¡¡�}|d	 j|ks´t‚W 5 Q R X 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   r   r   r   r,   r8   r   ú	test.fitsN)r.   r   r   r1   r   r   ÚflushÚwriteto)r%   r'   r;   r)   r)   r*   Útest_parnames_round_tripV   s    
z,TestGroupsFunctions.test_parnames_round_tripc              	   C   sh   t  |  d¡¡�N}|d jdd… }t|t jƒs4t‚t|ƒdksDt‚|d jj|jksZt‚W 5 Q R X 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%   r&   Úsr)   r)   r*   Útest_groupdata_slicep   s
    z(TestGroupsFunctions.test_groupdata_slicec              	   C   s  t  |  d¡¡�þ}|d jd }|dd… }t|ƒdks<t‚|d |d ksPt‚|d |d ksdt‚|ddd… }t|ƒdks‚t‚|d |d k ¡ sšt‚|d |d ks®t‚|ddd… }t|ƒd	ksÌt‚|d |d ksàt‚|d
 |d ksôt‚|d |d k�s
t‚W 5 Q R X dS )z<
        Tests basic slicing a single group record.
        r   r   rA   é   r   éýÿÿÿNé   r	   r   )r   r   r   r"   r   r:   )r%   r&   ÚgrB   r)   r)   r*   Útest_group_slice~   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sXt	‚| 
d¡|k ¡ snt	‚| 
d¡|gt|ƒ k ¡ sŽt	‚|j|k ¡ s t	‚tj|d�}|jddgks¾t	‚|jd dksÐt	‚|  d¡}| |¡ tjttd�� |j|dd� W 5 Q R X |j|dd� t |¡�Ð}|d j}	|	d dk�sBt	‚|	d dk�sTt	‚|	d dk�sft	‚|	d dk�sxt	‚|	d dk�sŠt	‚|	d dk�sœt	‚|	d dk�s®t	‚|	d dk�sÀt	‚|d jjddgk�sÚt	‚t|d j|ƒ�sðt	‚W 5 Q R X dS )zA
        Basic test for creating GroupData from scratch.
        ç      Y@©é
   r   r   rA   é   rK   ©r   gš™™™™™¹?ç      E@ÚabcÚxyzéàÿÿÿ©r   ZpardataZbitpix©r   r   r=   )ÚmatchF)Ú	overwriteTr   ÚPCOUNTrA   ZNAXISrL   ZNAXIS1ZNAXIS2ZNAXIS3ZNAXIS4r   ZNAXIS5N)r9   Úaranger#   r   r   ÚhduÚgroupsr    r   r   Úparr:   r"   r   r   r!   r1   r?   ÚpytestÚraisesÚOSErrorr   r   r   )
r%   Zhome_is_tempÚimdataÚpdata1Úpdata2Úxr(   Úfilenamer;   Úhdrr)   r)   r*   Útest_create_groupdata”   sD    
   ÿ 


z)TestGroupsFunctions.test_create_groupdatac              	   C   s.  t  d¡}d|_t jdt jd�d }d}tjjj|dddg|||gd	d
�}|jdddgks^t	‚| 
d¡|d k ¡ sxt	‚|d  
d¡dksŽt	‚|d  dd¡ |d  
d¡dks´t	‚t t|d jdd¡ |d  dd¡ |d  
d¡dksðt	‚| 
d¡d dk�st	‚| 
d¡dd… |dd… d k ¡ �s4t	‚tj|d�}| |  d¡¡ t |  d¡¡�Ä}|d j}|d dk�s~t	‚|d dk�s�t	‚|d dk�s¢t	‚|d dk�s´t	‚|jdddgk�sÊt	‚|jjdk�sÜt	‚| 
d¡d dk�sôt	‚| 
d¡dd… |dd… d k ¡ �s t	‚W 5 Q R X 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.
        rI   rJ   rK   rM   r   rN   rO   rP   rQ   rR   rA   r   r	   )rA   r	   rL   NrS   r=   rV   ZPTYPE1ZPTYPE2ZPTYPE3)rO   rP   Ú_abcr   )r9   rW   r#   r   r   rX   rY   r    r   r   rZ   r:   Zsetparr[   r\   Ú
ValueErrorr   r?   r1   r   r!   r   r   )r%   r^   r_   r`   ra   r(   r;   rc   r)   r)   r*   Útest_duplicate_parameter¿   s@    
ü,
z,TestGroupsFunctions.test_duplicate_parameterc              	   C   sb   t j dd¡}t |  |¡¡�:}t|ƒdks0t‚|d jd sBt‚|d jdksTt‚W 5 Q R X dS )zuTest file without NAXIS1 keyword.
        Regression test for https://github.com/astropy/astropy/issues/9709
        Úinvalidzgroup_invalid.fitsr   r   ZGROUPSN)	r/   ÚpathÚjoinr   r   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+   r7   r<   r@   rC   rH   rd   rg   rk   r)   r)   r)   r*   r      s   "+.r   )r/   r3   Únumpyr9   r[   Z
astropy.ior   Zastropy.utils.miscr   Zconftestr   Z
test_tabler   r   r)   r)   r)   r*   Ú<module>   s   