U
    e»{jñ  ã                   @   sæ   d Z ddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ erdddlZejje dd	�d
d„ ƒZejje dd	�dd„ ƒZejje dd	�dd„ ƒZejje dd	�dd„ ƒZejjG dd„ dƒƒZdS )zJCan `astropy.io.fits.open` access (remote) data using the fsspec package?
é    N)Úassert_allcloseÚassert_array_equal)Úfits)ÚCutout2D)Ú
HAS_FSSPECÚHAS_S3FS)Úget_pkg_data_filenameúrequires fsspec©Úreasonc               
   C   sx   t dƒ} t | ¡�\}tj| dd��B}t|d j|d jƒ t|d jdd… |d jdd… ƒ W 5 Q R X W 5 Q R X dS )z'Can we use fsspec to read a local file?údata/test0.fitsT©Z
use_fsspecé   é   é   N)r   r   Úopenr   ÚdataÚsection)ÚfnZhdulist_classicZhdulist_fsspec© r   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/io/fits/tests/test_fsspec.pyÚtest_fsspec_local   s     ÿr   c              
   C   s¬   t dƒ}| d }tj|dd��X}t t¡� d|d jd< W 5 Q R X d|d jd< |d jd dksht‚| 	|¡ W 5 Q R X t |¡�}|d jd dksžt‚W 5 Q R X d	S )
z:Can we write to a local file that was opened using fsspec?r   ztmp.fitsTr   iüÿÿé   ©r   r   ©r   r   N)
r   r   r   ÚpytestÚraisesÚ	TypeErrorr   r   ÚAssertionErrorZwriteto)Ztmp_pathr   Zfn_tmpÚhdulr   r   r   Útest_fsspec_local_write   s    r    c               	   C   s`   t dƒ} tj| dd��@}d}d}t|d j||ƒ}t|d j||ƒ}t|j|jƒ W 5 Q R X dS )zEDoes Cutout2D work with data loaded lazily using fsspec and .section?r   Tr   )é
   é   r   r   N)r   r   r   r   r   r   r   )r   r   ÚpositionÚsizeZcutout1Zcutout2r   r   r   Útest_fsspec_cutout2d0   s    r%   c               
   C   sd   t dƒ} tj| dd��D}|d jd dks.t‚tjtdd��}|d jd	  W 5 Q R X W 5 Q R X d
S )z.Does fsspec support compressed data correctly?zdata/comp.fitsTr   r   r   é   z0'CompImageHDU' object has no attribute 'section')Úmatch)r   r   N)	r   r   r   r   r   r   r   ÚAttributeErrorr   )r   r   Úexcinfor   r   r   Útest_fsspec_compressed<   s     ÿr*   c                   @   sL   e Zd ZdZdd„ Zejje dd�dd„ ƒZ	ejje
 dd�d	d
„ ƒZdS )ÚTestFsspecRemotezQTest obtaining cutouts from FITS files via HTTP (from MAST) and S3 (from Amazon).c                 C   sH   d| _ d| _tddƒtddƒf| _tjddd	gd
ddggtjd�| _d S )NzVhttps://mast.stsci.edu/api/v0.1/Download/file/?uri=mast:HST/product/ibxl50020_jif.fitsz;s3://stpubdata/hst/public/ibxl/ibxl50020/ibxl50020_jif.fitsé   é!   é   é   é   éX   éä   é#   é„   i1  )Zdtype)Úhttp_urlÚs3_uriÚsliceÚnpÚarrayZint32Úexpected_cutout)Úselfr   r   r   Úsetup_classO   s    zTestFsspecRemote.setup_classr	   r
   c              
   C   s¾   t j| jdd��>}t|d j| j | jƒ dt|ƒks:t‚dt	|ƒksJt‚W 5 Q R X t
 | j¡�T}t  |¡�>}t|d j| j | jƒ dt|ƒks–t‚dt	|ƒks¦t‚W 5 Q R X W 5 Q R X dS )z6Can we use fsspec to open a remote FITS file via http?Tr   r   úpartially readN)r   r   r5   r   r   r7   r:   Úreprr   ÚstrÚfsspec©r;   r   ÚfileobjZhdul2r   r   r   Útest_fsspec_http]   s    z!TestFsspecRemote.test_fsspec_httpzrequires s3fsc              
   C   sÆ   t j| jddid��>}t|d j| j | jƒ dt|ƒks>t‚dt	|ƒksNt‚W 5 Q R X t
j| jdd��T}t  |¡�>}t|d j| j | jƒ dt|ƒksžt‚dt	|ƒks®t‚W 5 Q R X W 5 Q R X dS )zCCan we use fsspec to open a FITS file in a public Amazon S3 bucket?ÚanonT)Zfsspec_kwargsr   r=   )rD   N)r   r   r6   r   r   r7   r:   r>   r   r?   r@   rA   r   r   r   Útest_fsspec_s3o   s     ÿzTestFsspecRemote.test_fsspec_s3N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r<   r   ÚmarkÚskipifr   rC   r   rE   r   r   r   r   r+   K   s   
r+   )rI   Únumpyr8   r   Znumpy.testingr   r   Z
astropy.ior   Zastropy.nddatar   Z"astropy.utils.compat.optional_depsr   r   Zastropy.utils.datar   r@   rJ   rK   r   r    r%   r*   Zremote_datar+   r   r   r   r   Ú<module>   s&   



