U
    e»{j°  ã                   @   s¬   d dl Z d dlZ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mZ d dlmZ ertd dlmZ ddlmZ G d	d
„ d
eƒZG dd„ deƒZdd„ ZdS )é    N)Úassert_equal)Úutil)Ú_rstrip_inplaceÚignore_sigint)ÚHAS_PIL)ÚImageé   )ÚFitsTestCasec                   @   s4   e Zd Zejjej d¡dd�dd„ ƒZ	dd„ Z
dS )	Ú	TestUtilsÚwinzCannot test on Windows©Úreasonc                 C   s   t dd„ ƒ}t t|¡ d S )Nc               	   S   sd   t  t¡�*} t ¡ }t |tj¡ t |tj¡ W 5 Q R X t| ƒdksJt	‚t
| d jƒdks`t	‚d S )Né   r   z1KeyboardInterrupt ignored until test is complete!)ÚpytestZwarnsÚUserWarningÚosÚgetpidÚkillÚsignalÚSIGINTÚlenÚAssertionErrorÚstrÚmessage)ÚwÚpid© r   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/io/fits/tests/test_util.pyÚtest   s    ÿz*TestUtils.test_ignore_sigint.<locals>.test)r   r   ÚraisesÚKeyboardInterrupt)Úselfr   r   r   r   Útest_ignore_sigint   s    
zTestUtils.test_ignore_sigintc                    sR  t  dt jfdt jfg¡‰ ˆ j}‡ fdd„|D ƒ}t  ||ddgdœ¡}|jdksVt‚t  ||ddgdœ¡}|jdkszt‚t  ||ddgdœ¡}|jd	ksžt‚t  dt jfdt jfd
t jfg¡‰ ˆ j}‡ fdd„|D ƒ}t  ||dddgdœ¡}|jdksþt‚t  ||dddgdœ¡}|jdk�s&t‚t  ||dddgdœ¡}|jdk�sNt‚dS )z�
        Tests a few corner-cases for numpy dtype creation.

        These originally were the reason for having a realign_dtype hack.
        ÚaÚbc                    s   g | ]}ˆ j | d  ‘qS ©r   ©Úfields©Ú.0Úname©Údtr   r   Ú
<listcomp>0   s     z0TestUtils.test_realign_dtype.<locals>.<listcomp>r   )ÚnamesÚformatsÚoffsetsé   r   é   Úcc                    s   g | ]}ˆ j | d  ‘qS r%   r&   r(   r+   r   r   r-   <   s     é   é   é   N)	ÚnpÚdtypeZint32Zint16r.   Úitemsizer   Zfloat64Zint8)r!   r.   r/   Zdt2r   r+   r   Útest_realign_dtype'   s$    "zTestUtils.test_realign_dtypeN)Ú__name__Ú
__module__Ú__qualname__r   ÚmarkÚskipifÚsysÚplatformÚ
startswithr"   r:   r   r   r   r   r
      s   
r
   c                   @   sR   e Zd ZdZdd„ Zejje dd�dd„ ƒZ	dd	„ Z
d
d„ Zdd„ Zdd„ ZdS )ÚTestUtilModez¥
    The high-level tests are partially covered by
    test_core.TestConvenienceFunctions.test_fileobj_mode_guessing
    but added some low-level tests as well.
    c                 C   s   t  d¡d kst‚d S )Nz	tmp1.fits)r   Úfileobj_moder   )r!   r   r   r   Útest_mode_stringsL   s    zTestUtilMode.test_mode_stringszrequires pilr   c              	   C   sd   t j ddd¡ t j¡}t |¡}| |  d¡¡ t 	|  d¡¡�}t
 |¡dksVt‚W 5 Q R X d S )Nr   éÿ   )r2   r2   é   ztest_simple.jpgÚrb)r7   ÚrandomÚrandintZastypeZuint8r   Z	fromarrayÚsaveÚtempÚopenr   rD   r   )r!   ZimgÚresultÚfileobjr   r   r   Útest_mode_pil_imageQ   s
    
z TestUtilMode.test_mode_pil_imagec              
   C   sb   dddddddg}|D ]F\}}}|   d|› d	�¡}t ||¡�}t |¡|ksRt‚W 5 Q R X qd S )
N)r   r#   Úab©r   rQ   rQ   )r   r   Úwb©r   rS   rS   )r   ÚxÚxb)r   ÚrrH   ©r   rH   rH   r   z.gz)rL   ÚgzipÚGzipFiler   rD   r   ©r!   Znum_mode_resmodeÚnumÚmodeÚresÚfilenamerO   r   r   r   Útest_mode_gzip[   s    ù
zTestUtilMode.test_mode_gzipc              
   C   s^   ddddg}|D ]H\}}}|   d|› d�¡}t||dd��}t |¡|ksNt‚W 5 Q R X qd S )	NrR   rT   )r   rV   rV   rX   Ztest1ú.datr   )Ú	buffering©rL   rM   r   rD   r   r[   r   r   r   Útest_mode_normal_bufferingq   s    üz'TestUtilMode.test_mode_normal_bufferingc              
   C   s`   dddddddg}|D ]D\}}}|   d|› d	�¡}t||ƒ�}t |¡|ksPt‚W 5 Q R X qd S )
N©r   r#   r#   rR   )r   r   r   rT   )r   rU   rU   )r   rW   rW   rX   Ztest2ra   rc   r[   r   r   r   Útest_mode_normal_no_buffering€   s    ù	z*TestUtilMode.test_mode_normal_no_bufferingc              
   C   sN   dD ]D\}}}|   d|› d�¡}t||ƒ�}t |¡|ks>t‚W 5 Q R X qd S )N)re   )r   úa+rg   rR   )r   za+búab+)r   rh   rh   Ztest3ra   rc   )r!   r\   r]   r^   r_   rO   r   r   r   Útest_mode_normalization’   s    z$TestUtilMode.test_mode_normalizationN)r;   r<   r=   Ú__doc__rE   r   r>   r?   r   rP   r`   rd   rf   ri   r   r   r   r   rC   E   s   
	rC   c               	   C   sR  t  dddg¡} t t¡�}t| ƒ W 5 Q R X |jjd dksBt‚t jdddgd	d
�} t| ƒ t	| t jdddgd	d
�ƒ t jdddgdd
�} t| ƒ t	| t jdddgdd
�ƒ t jddgddggd	d
�} t| ƒ t	| t jddgddggd	d
�ƒ t  
dd¡ d¡} t| ƒ t	| dƒ t  
dd¡ d¡d d…d d…d d…f } t| ƒ t	| dƒ d S )Nr   r   rG   r   z/This function can only be used on string arraysza z bz c c   ZS6)r8   r#   z c cZU6z a z az a a é   )r   rG   r1   z a aiè  )é
   rl   rl   r1   )r7   Úarrayr   r   Ú	TypeErrorr   ÚvalueÚargsr   r   ÚrepeatZreshape)ÚsÚexcr   r   r   Útest_rstrip_inplace¥   s&     
(rt   )rY   r   r   r@   Únumpyr7   r   Znumpy.testingr   Zastropy.io.fitsr   Zastropy.io.fits.utilr   r   Z"astropy.utils.compat.optional_depsr   ZPILr   Zconftestr	   r
   rC   rt   r   r   r   r   Ú<module>   s   /`