
    HR-e]                        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rddlZej                            e d	          d
             Zej                            e d	          d             Zej                            e d	          d             Zej                            e d	          d             Zej        j         G 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                     t          d          } t          j        |           5 }t          j        | d          5 }t          |d         j        |d         j                   t          |d         j        dd         |d         j        dd                    ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z'Can we use fsspec to read a local file?data/test0.fitsT
use_fsspec         N)r	   r   openr   datasection)fnhdulist_classichdulist_fsspecs      Alib/python3.11/site-packages/astropy/io/fits/tests/test_fsspec.pytest_fsspec_localr      sA    
0	1	1B	2 /Yrd+++ 	~q16q8I8NOOO"*1Q3/1B1J1Q31O  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s5   B<AB$B<$B(	(B<+B(	,B<<C C c                    t          d          }| dz  }t          j        |d          5 }t          j        t
                    5  d|d         j        d<   ddd           n# 1 swxY w Y   d|d         j        d	<   |d         j        d	         dk    sJ |                    |           ddd           n# 1 swxY w Y   t          j        |          5 }|d         j        d	         dk    sJ 	 ddd           dS # 1 swxY w Y   dS )
z:Can we write to a local file that was opened using fsspec?r   ztmp.fitsTr   i   r   r   Nr   r   )	r	   r   r   pytestraises	TypeErrorr   r   writeto)tmp_pathr   fn_tmphduls       r   test_fsspec_local_writer'      s    
0	1	1B
"F	2$	'	'	' 4]9%% 	) 	)$(DGOD!	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) "QTAw|D!T))))V               
6		 *dAw|D!T)))))* * * * * * * * * * * * * * * * * *sH   B7A"B7"A&	&B7)A&	*AB77B;>B;C>>DDc                  .   t          d          } t          j        | d          5 }d}d}t          |d         j        ||          }t          |d         j        ||          }t          |j        |j                   ddd           dS # 1 swxY w Y   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sizecutout1cutout2s         r   test_fsspec_cutout2dr/   0   s     
0	1	1B	2$	'	'	' 4447<48847?Hd;;gl3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s   AB

BBc                      t          d          } t          j        | d          5 }|d         j        d         dk    sJ |d         j        d         dk    sJ 	 ddd           dS # 1 swxY w Y   dS )z.Does fsspec support compressed data correctly?zdata/comp.fitsTr   r   r      N)r	   r   r   r   r   )r   r&   s     r   test_fsspec_compressedr2   <   s     
/	0	0B	2$	'	'	' *4Aw|D!Q&&&&Awt$)))))	* * * * * * * * * * * * * * * * * *s   3A''A+.A+c                       e Zd ZdZd Zej                            e d          d             Z	ej                            e
 d          d             ZdS )	TestFsspecRemotezQTest obtaining cutouts from FITS files via HTTP (from MAST) and S3 (from Amazon).c                     d| _         d| _        t          dd          t          dd          f| _        t          j        g dg dgt          j        	          | _        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  )dtype)http_urls3_urislicenparrayint32expected_cutout)selfs    r   setup_classzTestFsspecRemote.setup_classL   s]     qSBmmU2r]]3

  "x(GrxXXX    r
   r   c                 p   t          j        | j        d          5 }t          |d         j        | j                 | j                   dt          |          v sJ dt          |          v sJ 	 ddd           n# 1 swxY w Y   t          j        | j                  5 }t          j        |          5 }t          |d         j        | j                 | j                   dt          |          v sJ dt          |          v sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z6Can we use fsspec to open a remote FITS file via http?Tr   r   partially readN)
r   r   r@   r   r   rB   rF   reprstrfsspecrG   r&   fileobjhdul2s       r   test_fsspec_httpz!TestFsspecRemote.test_fsspec_httpZ   s    Yt}666 	1$tAwtz:D<PQQQ $tDzz1111#s4yy00000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 ['' 	577## 5u"58#3DJ#?AUVVV'4::5555'3t99444445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5sI   AA;;A?A?D+4ADD+D	D+D	D++D/2D/zrequires s3fsc                 x   t          j        | j        ddi          5 }t          |d         j        | j                 | j                   dt          |          v sJ dt          |          v sJ 	 ddd           n# 1 swxY w Y   t          j        | j        d          5 }t          j        |          5 }t          |d         j        | j                 | j                   dt          |          v sJ dt          |          v sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zCCan we use fsspec to open a FITS file in a public Amazon S3 bucket?anonT)fsspec_kwargsr   rK   N)rT   )
r   r   rA   r   r   rB   rF   rL   rM   rN   rO   s       r   test_fsspec_s3zTestFsspecRemote.test_fsspec_s3l   s    YK~
 
 
 	1tAwtz:D<PQQQ $tDzz1111#s4yy00000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 [4000 	5G7## 5u"58#3DJ#?AUVVV'4::5555'3t99444445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5sI   AA==BB#D/8ADD/D	D/D	D//D36D3N)__name__
__module____qualname____doc__rH   r    markskipifr   rR   r   rV    rI   r   r4   r4   H   s        [[Y Y Y [J/@AA5 5 BA5" [H_==5 5 >=5 5 5rI   r4   )rZ   numpyrC   r    numpy.testingr   r   
astropy.ior   astropy.nddatar   "astropy.utils.compat.optional_depsr   r   astropy.utils.datar	   rN   r[   r\   r   r'   r/   r2   remote_datar4   r]   rI   r   <module>re      s         = = = = = = = =       # # # # # # C C C C C C C C 4 4 4 4 4 4 MMM 
N+<==  >= 
N+<==* * >=*$ 
N+<==4 4 >=4 
N+<==* * >=* 55 55 55 55 55 55 55 55 55 55rI   