
    IR-e                       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Z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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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"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z= ej>        ?                    d	d
          dk    Z@dZAdZBdZC e4ejD        E                    dd                    ZFd dlGmHZHmIZI dZJdZKdZLd ZM eM            ZNd ZOejP        d             ZQejP        d             ZRejP        d             ZSddZTd ZUejV        d             ZWejP        d             ZXejP        d             ZYd ZZd  Z[d! Z\d" Z]d# Z^d$ Z_ej`        a                    d%&          d'             ZbejP        d(             ZcejP        d)             Zdd* Zeej`        f                    d+dd,g          d-             Zgej`        h                    ej        i                    d.          oe@d/0          d1             Zjej`        h                    ej        i                    d.          oe@d/0          d2             Zkej`        h                    ej        i                    d.          oe@d/0          d3             Zld4 Zmd5 Znej`        f                    d6dd,g          d7             Zod8 Zpd9 Zqd: Zrd; Zsd< Ztd= Zuej`        a                    d%&          d>             Zvej`        a                    d%&          d?             Zwej`        a                    d%&          d@             ZxdA Zyej`        a                    d%&          dB             Zzej`        f                    dCddDg          dE             Z{dF Z|dG Z}dH Z~dI Zej`        j        dJ             ZdK Zej`        h                    ej        i                    d.          oe@d/0          dL             Zej`        h                    ej        i                    d.          oe@d/0          dM             Zej`        a                    d%&          dN             ZdO Zej`        a                    d%&          dP             Zej`        f                    dQg dR          dS             Zej`        f                    dTg dU          dV             Z ejP        dWdXgY          dZ             Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zej`        a                    d%&          da             Zej`        f                    dTdbdc ej        ddej`                            eH de0          f           ej        dgej`                            eI dh0          f          g          di             Zdj Zej`        a                    d%&          dk             Zdl Zej`        a                    d%&          dm             Zdn Zdo Zdp Zdq Zdr Zds Zdt Zdu Zdv Zdw Zdx Zdy Zej`        f                    dzd{d|ej        z  g          d}             Zd~ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej`        h                    eN d0          d             Zej`        h                    eN d0          d             Zd Zd Zd Zd Zd Zd Zd Zej`        h                    e@oej>        ?                    dd
          d
k    d0          ej`        ja        d                         Zej`        f                    dddg          d             Zd Zej`        ja        d             Zej`        f                    dg d          d             ZdS )    N)ThreadPoolExecutor)islice)NamedTemporaryFileTemporaryDirectory)units)paths)CacheDamagedCacheMissingWarning	_deltemps_get_download_cache_loc_tempfilestodelcache_contentscache_total_sizecheck_download_cachecheck_free_space_in_dirclear_download_cachecompute_hashconfdownload_filedownload_files_in_parallelexport_download_cacheget_cached_urlsget_file_contentsget_free_space_in_dirget_pkg_data_contentsget_pkg_data_filenameget_pkg_data_fileobjget_pkg_data_pathget_readable_fileobjimport_download_cacheimport_file_to_cacheis_urlis_url_in_cache)AstropyWarningCIfalsetruezhttp://www.astropy.orgz!http://www.astropy.org/about.htmlzhttps://www.astropy.orgdata	local.dat)HAS_BZ2HAS_LZMA   
   c                  j   t                      5 } t          j                            | d          }t          j                            | d          }t          j                            |d          }t          j        |           t          |d          5 }|                    d           d d d            n# 1 swxY w Y   	 t          |          5  t          j        ||           d d d            n# 1 swxY w Y   	 d d d            dS # t          $ r Y d d d            dS w xY w# 1 swxY w Y   d S )Nabfilewzsome contents
TF)	r   ospathjoinmkdiropenwriterenamePermissionError)dd1d2f1fs        =lib/python3.11/site-packages/astropy/utils/tests/test_data.pycan_rename_directory_in_userA   R   s   			 W\\!S!!W\\!S!!W\\"f%%
"c]] 	'aGG%&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'	b " "	"b!!!" " " " " " " " " " " " " " "
          	 	 	       	         s~   BD(B6*D(6B:	:D(=B:	>D(DC3'D3C7	7D:C7	;D>D(
D%D($D%%D((D,/D,c                 r    t          j        |                                                                           S N)pathlibPathresolveas_uri)r4   s    r@   url_torH   f   s*    <%%''..000    c                     d } ||           S )Nc              3   P  K   t          j                    D ]}t          j        d                                          }| dt          |           z  }t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t          |          }||fV  d S )N   valid_r2   )		itertoolscountr3   urandomhexstrr7   r8   rH   )tmp_pathicfnr?   us         r@   _valid_urlszvalid_urls.<locals>._valid_urlsl   s      "" 	 	A
2""$$A-SVV---Bb# !


              r

AQ$JJJJ	 	s   #BB		B		 )rS   rX   s     r@   
valid_urlsrZ   j   s#       ;x   rI   c                     d } ||           S )Nc              3      K   t          j                    D ]G}| dt          |           z  }t          j                            |          st          |          V  Hd S )Ninvalid_)rN   rO   rR   r3   r4   existsrH   )rS   rT   rV   s      r@   _invalid_urlsz#invalid_urls.<locals>._invalid_urlsz   si      "" 	! 	!A/s1vv///B7>>"%% !Rjj   	! 	!rI   rY   )rS   r_   s     r@   invalid_urlsr`   x   s#    ! ! ! ="""rI   c              #      K   t          j        |           5  d V  t                       d d d            d S # 1 swxY w Y   d S rC   )r   set_temp_cacher   rS   s    r@   
temp_cacherd      s      		h	'	'  


                 s   7;;Fc                    |r@t           j        t           j        z  t           j        z  }t           j        t           j        z  }n%t           j        t           j        z  }t           j        }t	          j        |           D ]S\  }}}t	          j        ||           |D ]5}t	          j        t          j                            ||          |           6Td S rC   )	statS_IRUSRS_IWUSRS_IXUSRr3   walkchmodr4   r5   )r;   writabledirpermfilepermdirpathdirnames	filenamesr?   s           r@   change_tree_permissionrr      s      ,-<<$,.,-<(*

 9 9$9
'""" 	9 	9AHRW\\'1--x8888	99 9rI   c                 ~    	 t          |           5  	 d d d            dS # 1 swxY w Y   d S # t          $ r Y dS w xY w)NdirFT)r   r:   r;   s    r@   is_dir_readonlyrw      s    A&&& 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   tts$   . !. %. %. 
<<c              #      K   	 t          | d           d V  t          | d           d S # t          | d           w xY w)NF)rl   T)rr   rv   s    r@   readonly_dirry      sZ      1q51111q4000000q400000s   , ?c              #   z  K   t          |           5 }t          j        |          }t          j        |          5  d t          |t                    D             }d |D             }t          |                                          }t          |          5  t          |          st          j        d           |V  d d d            n# 1 swxY w Y   t          |                                          |k    sJ t                       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 )Nrt   c                     h | ]\  }}|S rY   rY   .0rW   rU   s      r@   	<setcomp>z!readonly_cache.<locals>.<setcomp>       8881!888rI   c                 2    i | ]}|t          |d           S Tcacher   r}   rW   s     r@   
<dictcomp>z"readonly_cache.<locals>.<dictcomp>   '    @@@A}Qd333@@@rI   z!Unable to make directory readonly)r   rD   rE   r   rb   r   FEWsetiterdirry   rw   pytestskipr   )rS   rZ   r;   usurlsfiless         r@   readonly_cacher      s     		)	)	) #Q LOO!!$$ 		# 		#88z3 7 7888B@@R@@@D		$$Ea  &q)) EK CDDD


               qyy{{##u,,,, """		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		#	# # # # # # # # # # # # # # # # # #sY   )D0AD(C DCDC8DD0D	D0D	 D00D47D4c              #     K   d
d}d }d }t          |           5 }t          j        |          }t          j        |          5  d t          |t                    D             }d |D             }t          |                                          }	|	                    t          d|           |	                    t          d|           |	                    t          j        j        d	|           |V  t          |                                          |	k    sJ t                       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 )Nc                 6    t          t          j        d          )Nzos.mkdir monkeypatched outOSErrorerrnoEPERMr4   modes     r@   no_mkdirz%fake_readonly_cache.<locals>.no_mkdir   s    ek#?@@@rI   c                  6    t          t          j        d          )zhOn Windows, mkdtemp uses mkdir in a loop and therefore hangs
        with it monkeypatched out.
        zos.mkdtemp monkeypatched outr   argskwargss     r@   
no_mkdtempz'fake_readonly_cache.<locals>.no_mkdtemp   s     ek#ABBBrI   c                  6    t          t          j        d          )Nz)_SafeTemporaryDirectory monkeypatched outr   r   s     r@   no_TemporaryDirectoryz2fake_readonly_cache.<locals>.no_TemporaryDirectory   s    ek#NOOOrI   rt   c                     h | ]\  }}|S rY   rY   r|   s      r@   r~   z&fake_readonly_cache.<locals>.<setcomp>   r   rI   c                 2    i | ]}|t          |d           S r   r   r   s     r@   r   z'fake_readonly_cache.<locals>.<dictcomp>   r   rI   r6   mkdtemp_SafeTemporaryDirectoryrC   )r   rD   rE   r   rb   r   r   r   r   setattrr3   tempfileastropyutilsr(   r   )
rS   rZ   monkeypatchr   r   r   r;   r   r   r   s
             r@   fake_readonly_cacher      s     A A A AC C CP P P 
	)	)	) #Q LOO!!$$ 	# 	#88z3 7 7888B@@R@@@D		$$EGX666)Z@@@"$=?T   JJJqyy{{##u,,,, """	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#	# # # # # # # # # # # # # # # # # #s6   )EC$D6*E6D:	:E=D:	>EEEc                    t          |           \  }}t          t          |d                    |k    sJ t          |          rJ t          t          |d                    |k    sJ t          |          sJ t          t          |d                    |k    sJ t          t          |dg                     |k    sJ d S )NFr   Tr   sources)nextr   r   r#   rZ   rd   rW   rU   s       r@   test_download_file_basicr      s    
DAq]1E:::;;q@@@@q!!!!!]1D999::a????1]1D999::a????]1D"EEEFF!KKKKKKrI   c                 >   d }t          |           \  }} |t          |d                    sJ  |t          |d                    sJ  |t          |d                    sJ t                                                      D ]\  }} ||          sJ d S )Nc                 H    | t           j                            |           k    S rC   )r3   r4   abspath)ps    r@   is_absz0test_download_file_absolute_path.<locals>.is_abs   s    BGOOA&&&&rI   Fr   T)r   r   r   items)rZ   rd   r   rW   rU   kvs          r@    test_download_file_absolute_pathr      s    ' ' ' 
DAq6-///000006-.../////6-.../////  &&((  1vayy rI   c                     t          |           \  }}d}t          |d|g           t          |d|g           t          |dg            t          |          sJ |t                      v sJ d S )Nu   http://é—☃—è.comFr   T)r   r   r#   r   )rZ   rd   rW   rU   unicode_urls        r@   test_unicode_urlr      s    
DAq,K+UQC8888+TA37777+T26666;'''''.********rI   c                     t          |           \  }}d}t          |d|g           t          |d|g           t          |dg            d S )Na  http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.comFr   Tr   r   )rZ   rd   rW   rU   long_urls        r@   test_too_long_urlr      sa    
DAq-H(%!5555($4444($333333rI   c                     t          |           \  }}t          |           \  }}t          dd|g          }t          dd|g          }||k    sJ t          |          t          |          k    sJ d S )Nzhttp://example.com/thingTr   zhttp://example.com/THING)r   r   r   )rZ   rd   rW   rU   u2c2r>   f2s           r@   test_case_collisionr     s    
DAq*FB	1s	K	K	KB	1t	L	L	LB8888R  $5b$9$9999999rI   c                     t          |           \  }}t          dd|g           t          d          sJ t          ddg            t          d          sJ t          ddg            d S )Nzhttp://Example.com/thingTr   zhttp://EXAMPLE.com/thingzHttp://example.com/thingr   r   r#   r   s       r@   test_domain_name_caser     s    
DAq,D1#FFFF566666,D"EEEE566666,D"EEEEEErI   r   )sourcec                  t    t          t          d          } t          j                            |           sJ d S )NFr   r   TESTURLr3   r4   isfilefnouts    r@   #test_download_nocache_from_internetr     s4    '///E7>>%       rI   c              #      K   | dz  }d}t          |d          5 }|                    |           d d d            n# 1 swxY w Y   ||fV  d S )Nr1   s   ޭwbr7   r8   )rS   rV   
b_contentsr?   s       r@   a_binary_filer     s      	F	B$J	b$ 1	
              
j.   <A A c              #      K   | dz  }d}t          |d          5 }|                    |           d d d            n# 1 swxY w Y   ||fV  d S )Nzfile.txt	contents
r2   r   )rS   rV   contentsr?   s       r@   a_filer   #  s      	J	BH	b# !	              
h,r   c                 \   t                      }t                       t          j        |           5  t                      }t                       ||k    sJ 	 d d d            n# 1 swxY w Y   t                      }t                       ||k    sJ ||k    sJ  G d dt                    }	 t          j        |           5  t                      }t                       ||k    sJ |# 1 swxY w Y   n# |$ r Y nw xY wt                      }t                       ||k    sJ ||k    sJ d S )Nc                       e Zd ZdS ) test_temp_cache.<locals>.SpecialN)__name__
__module____qualname__rY   rI   r@   Specialr   ;  s        rI   r   )r   r   r   rb   	Exception)rS   dldir0dldir1dldir2r   dldir3dldir4s          r@   test_temp_cacher   ,  s   $&&F		h	'	'    (**                             
 %&&FVV    )   !(++ 	 	,..F """V####M		 	 	 	 	 	 	 	 	
     %&&FVVsA   %A##A'*A'.C5 'C))C--C5 0C-1C5 5C=<C=parallelTc                    t          |           \  }}||d fg}i t          t          | t                              D ]\  }\  }}	t	          |          rJ g |<   t          ||          D ]}
|                             |
           t          |           \  }}|                             |           |                    |||	f           |rt          d |D             d          }nfd|D             }t          |          t          |          k    sJ t          ||          D ]D\  }\  }}}	t          |          |k    sJ t          |          |	k    sJ t	          |          sJ Ed S )Nc                     g | ]\  }}}|	S rY   rY   r}   rW   rU   c_bads       r@   
<listcomp>zAtest_download_with_sources_and_bogus_original.<locals>.<listcomp>l  s    )))=Aq%Q)))rI   Tr   c           
      d    g | ],\  }}}t          |d                     |d                    -S )TNr   )r   get)r}   rW   rU   r   r   s       r@   r   zAtest_download_with_sources_and_bogus_original.<locals>.<listcomp>o  sL     
 
 
Au !4Q1E1EFFF
 
 
rI   
r   	enumerater   r   r#   appendr   lenzipr   )rZ   r`   rd   r   rW   rU   r   rT   umr   iursrr   s                @r@   -test_download_with_sources_and_bogus_originalr   M  s    
DAq4L>DG $F:s$;$;<< $ $;B"2&&&&&q)) 	# 	#BBKr""""J11REN####  
'))D)))w
 
 

 
 
 
!%
 
 
 r77c$iiDMM " "=Aq% ##q(((( ##u,,,,q!!!!!!" "rI   winzflaky cache error on Windows CI)reasonc                    t          t          |t                              }t          t	          |                    5 }t          |                    d d |D                                 }ddd           n# 1 swxY w Y   t                       t	          |          t	          |          k    sJ t          ||          D ]\  }\  }}t          |          |k    sJ dS )zHammer download_file with multiple threaded requests.

    The goal is to stress-test the locking system. Normal parallel downloading
    also does this but coverage tools lose track of which paths are explored.

    max_workersc                 $    t          | d          S NTr   r   rW   s    r@   <lambda>z2test_download_file_threaded_many.<locals>.<lambda>  s    q!=!=!= rI   c                     g | ]\  }}|S rY   rY   r|   s      r@   r   z4test_download_file_threaded_many.<locals>.<listcomp>  s    ?U?U?Ufq!?U?U?UrI   N)	listr   N_THREAD_HAMMERr   r   mapr   r   r   )rd   rZ   r   Pr   rW   rU   s          r@    test_download_file_threaded_manyr	  z  s1    z?3344D	D			2	2	2 Xa==?U?UPT?U?U?UVVWWX X X X X X X X X X X X X X Xq66SYYD\\ ) )	6Aq ##q((((() )s    /A;;A?A?c                    d t          t          | t                              }t          t	          |                    5 }t          |                    fdd |D                                  ddd           dS # 1 swxY w Y   dS )zDemonstrate urllib's segfault.c                     t           j                            |           5 }d}|r|                    d          }|d d d            d S # 1 swxY w Y   d S )NT   )urllibrequesturlopenread)rW   remoteblocks      r@   	slurp_urlz)test_threaded_segfault.<locals>.slurp_url  s    ^##A&& 	*&E *D))  *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   A		AAr   c                      |           S rC   rY   )rW   r  s    r@   r  z(test_threaded_segfault.<locals>.<lambda>  s    YYq\\ rI   c                     g | ]\  }}|S rY   rY   r|   s      r@   r   z*test_threaded_segfault.<locals>.<listcomp>  s    +A+A+A&1aA+A+A+ArI   N)r  r   r  r   r   r  )rZ   r   r  r  s      @r@   test_threaded_segfaultr    s    * * * z?3344D	D			2	2	2 DaQUU))))+A+AD+A+A+ABBCCCD D D D D D D D D D D D D D D D D Ds   1BB	Bc                 N   g }i }t          t          ||          t                    D ]7\  \  }}}|                    |           |||<   |                    |           8d }t	          t          |                    5 }	t          |	                    ||                    }
ddd           n# 1 swxY w Y   t                       t          |
          t          |          k    sJ t          |
|          D ])\  }
}||v rt          |
          ||         k    sJ %|
J *dS )a+  Hammer download_file with multiple threaded requests.

    Because some of these requests fail, the locking context manager is
    exercised with exceptions as well as success returns. I do not expect many
    surprises from the threaded version, but the process version gave trouble
    here.

    c                 H    	 t          | d          S # t          $ r Y d S w xY wr  )r   r   r  s    r@   r   z=test_download_file_threaded_many_partial_success.<locals>.get  s<    	 $//// 	 	 	44	s    
!!r   N)
r   r   r  r   r   r   r  r  r   r   )rd   rZ   r`   r   r   rW   rU   rT   r   r  r   s              r@   0test_download_file_threaded_many_partial_successr    sy    DHC
L99?KK  	AAA   
D			2	2	2 #asD!!""# # # # # # # # # # # # # # #q66SYYAt  1==$Q''8A;666669999	 s    $B00B47B4c                    t          |           \  }}t          |d           t          |           \  }}t          |d           t          |          sJ t          |           t          |          rJ t          |          sJ t          |           \  }}t          |d          }t          |          sJ t          |           t          |          rJ t          |          sJ t          |           \  }}	t          |d          }
t          |          sJ t          t	          |
                     t          |          rJ t          |          sJ d S r  )r   r   r#   r   r   )rZ   u1c1r   r   u3c3f3u4c4f4s              r@   test_clear_download_cacher#    s|   *FB"D!!!!*FB"D!!!!2r"""""2*FB	r	&	&	&B2r"""""2*FB	r	&	&	&B2b))***r"""""2rI   c                    	 d		fd} |            \  }}t          |           t          |          rJ  |            \  }} |            \  }}||k    sJ t          |          sJ t          |          sJ t          |           t          |          rJ t          |          sJ t          j                            |          s
J d            t          |           t          j                            |          r
J d            dS )z>Check that files with the same hash don't confuse the storage.z Test data; doesn't matter much.
c                      t          dd          5 } |                                d d d            n# 1 swxY w Y   t          | j                  }t	          |           t          |d          }||fS )Nr2   F)ru   deleteTr   )r   r8   rH   namer   r   )r?   urlfilenamecontentrS   s      r@   make_urlzPtest_clear_download_multiple_references_doesnt_corrupt_storage.<locals>.make_url  s    %@@@ 	AGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	QVnnS!!! D111H}s   6::z7Contents should not be deleted while a reference existsz4No reference exists any more, file should be deletedN)r   r#   r3   r4   r^   )
rd   rS   r+  a_url
a_filenamef_url
f_filenameg_url
g_filenamer*  s
    `       @r@   >test_clear_download_multiple_references_doesnt_corrupt_storager2    sk    2G      !

E:$$$u%%%%% 

E: 

E:E>>>>5!!!!!5!!!!!u%%%%%5!!!!!7>>  A A@A A A w~~  > >=> > > > >rI   	use_cachec                 p   | dz  }d}t          |d          5 }|                    |           ddd           n# 1 swxY w Y   t          |          }t          ||          }|t          vs
J d            t
          j                            |          s
J d            t          |          |k    sJ dS )a9  Confirm that downloading a local file does not delete it.

    When implemented with urlretrieve (rather than urlopen) local files are
    not copied to create temporaries, so importing them to the cache deleted
    the original from wherever it was in the filesystem. I lost some built-in
    astropy data.

    r1   z	some textr2   Nr   zFile should not be deleted!)	r7   r8   rH   r   r   r3   r4   r   r   )rS   rd   r3  rV   r   r?   rW   s          r@   'test_download_file_local_cache_survivesr5    s     
F	BH	b# !	              r

Aay)))A_$$$&C$$$7>>"<<<<<<Q8++++++s   :>>c                     t          |          \  }}t          |          }t          |d||g          }t          |          |k    sJ t          |          sJ t          |          rJ d S NTr   r   r   r   r#   )rd   rZ   r`   primaryr   	fallback1r?   s          r@   test_sources_normalr;    s    Z((GX\""IgTGY3GHHHAQ8++++7#####y)))))))rI   c                     t          |          }t          |          \  }}t          |d||g          }t          |          |k    sJ t          |          sJ t          |          rJ d S r7  r8  )rd   rZ   r`   r9  r:  r   r?   s          r@   test_sources_fallbackr=  %  s    <  Gz**IxgTGY3GHHHAQ8++++7#####y)))))))rI   c                     t          |          \  }}t          |          \  }}t          |d|g          }t          |          |k    sJ t          |          sJ t          |          rJ d S r7  r8  )rd   rZ   r`   r9  bogusr:  r   r?   s           r@   test_sources_ignore_primaryr@  .  s    *%%NGUz**IxgTI;???AQ8++++7#####y)))))))rI   c                     t          |          }t          |          }t          |          \  }}t          |d|||g          }t          |          |k    sJ t          |          sJ t          |          rJ t          |          rJ d S r7  r8  )rd   rZ   r`   r9  r:  	fallback2r   r?   s           r@   test_sources_multiplerC  7  s    <  G\""Iz**IxgTGY	3RSSSAQ8++++7#####y)))))y)))))))rI   c                 f   t          |          }t          |          }t          |          }t          j        t          j        j                  5  t          |d|||g           d d d            n# 1 swxY w Y   t          |          rJ t          |          rJ t          |          rJ d S r7  )r   r   raisesr  errorURLErrorr   r#   )rd   rZ   r`   r9  r:  rB  s         r@   test_sources_multiple_missingrH  B  s   <  G\""I\""I	v|,	-	- T TgTGY	3RSSSST T T T T T T T T T T T T T Tw'''''y)))))y)))))))s   A33A7:A7c                    t          |           5 }t          j                            |d          }t	          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          |j                  }t          t          |d                    dk    sJ t	          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          t          |d                    dk    sJ t          t          |d                    dk    sJ 	 d d d            n# 1 swxY w Y   t          j        
                    |          rJ t          j        t          j        j                  5  t          |d	           d d d            n# 1 swxY w Y   t          t          |d                    dk    s
J d
            t          j        t          j        j                  5  t          |d           d d d            n# 1 swxY w Y   t          t          |d                    dk    s
J d            d S )Nrt   r?   r2   oldTr   newupdateFz!Cached version should still existz3Failed update should not remove the current version)r   r3   r4   r5   r7   r8   rH   r'  r   r   r^   r   rE  r  rF  rG  )rS   rd   r;   f_namer?   r.  s         r@   test_update_urlrN  M  sr   		)	)	) 	PQa%%&# 	!GGENNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	qv uD!A!A!ABBeKKKK&# 	!GGENNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 uD!A!A!ABBeKKKK uH!E!E!EFF%OOOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P w~~f%%%%%	v|,	-	- * *e5))))* * * * * * * * * * * * * * * 	-T:::;;uDDD* 	EDD	v|,	-	- - -e8,,,,- - - - - - - - - - - - - - - 	-T:::;;uDDD< 	EDDDDs   1D9A$D9$A(	(D9+A(	,AD97CD9C	D9 C	!AD99D= D=F&&F*-F* HH"%H"c                  v    t          t          dd          } t          j                            |           sJ d S )NFr   show_progressr   r   s    r@   test_download_noprogressrR  h  s6    'eDDDE7>>%       rI   c                     t                      } t          t          d          }t          j                            |           sJ t          j                            |          sJ t          t                     t          j                            |          rJ t          d           t          j        	                    | d          }t          j                            |          r
J d            d S )NTr   z+http://this_was_never_downloaded_before.comlockz Cache dir lock was not released!)
r   r   r   r3   r4   isdirr   r   r^   r5   )download_dirr   lockdirs      r@   test_download_cacherX  n  s    *,,L '...E7==&&&&&7>>%     !!!w~~e$$$$$ FGGG gll<00Gw}}W%%II'IIIIIIrI   c                     ddd} dt            d}t          j        t          j        j        |          5  t          t           d|            ddd           n# 1 swxY w Y   t          j        t          |          5 }t          t           d| d	
          }ddd           n# 1 swxY w Y   t          |          dk    sJ t          j                            |          sJ dS )z7Tests for https://github.com/astropy/astropy/pull/10434Nz/does/not/exist)cafilecapathz'Verification of TLS/SSL certificate at z failedmatchF)r   ssl_contextT)r   r^  allow_insecure   )TESTURL_SSLr   rE  r  rF  rG  r   warnsr$   r   r3   r4   r   )r^  msgwarning_linesr   s       r@   -test_download_certificate_verification_failedre    sx    "->??K
HK
H
H
HC	v|,C	8	8	8 I IkKHHHHI I I I I I I I I I I I I I I 
nC	0	0	0 
Mu+d
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 }""""7>>%       s#   AA!A B%%B),B)c                    t          |          \  }}t                      }t          |d          }t          j                            |          sJ t                       t          j                            |          rJ t          j                            |          rJ t          |d          }t          j                            |          sJ d S r  )r   r   r   r3   r4   r   r   r^   )rS   rd   rZ   testurlr   rV  r   s          r@   test_download_cache_after_clearrh    s    Z((GX +,,L'...E7>>%     w~~e$$$$$w~~l+++++'...E7>>%       rI   c                    t           j        }t           j        }d}g }i }d|fD ]0}|                    ||z              |d         ||z   g||d         <   1t	          ||          }t          d |D                       s
J |            d S )Nzintersphinx/README r   c              3   T   K   | ]#}t           j                            |          V  $d S rC   )r3   r4   r   )r}   r?   s     r@   	<genexpr>z=test_download_parallel_from_internet_works.<locals>.<genexpr>  s0      00Qrw~~a  000000rI   )r   dataurldataurl_mirrorr   r   all)rd   main_url
mirror_urlfilelocr   r   sr   s           r@   *test_download_parallel_from_internet_worksrv    s    |H$J"GDG'] 7 7HqL!!!!"XzA~6R&tW===E00%0000077%77777rI   methodspawnc                    g }t          j        |           5  t          |t                    D ]-\  }}t	          |          rJ |                    ||f           .t          d |D             |          }t          |          t          |          k    sJ d |D             }|t          t                                k    sJ t          ||          D ]\  }\  }	}t          |          |k    sJ t                       d d d            n# 1 swxY w Y   |                    t                                rJ t                       d S )Nc                     g | ]\  }}|S rY   rY   r|   s      r@   r   z6test_download_parallel_fills_cache.<locals>.<listcomp>  s    """6AqQ"""rI   )multiprocessing_start_methodc                     h | ]\  }}|S rY   rY   r|   s      r@   r~   z5test_download_parallel_fills_cache.<locals>.<setcomp>  s    (((!Q1(((rI   )r   rb   r   r   r#   r   r   r   r   r   r   r   r   intersection)
rS   rZ   rw  r   r   rU   r   url_setr   rW   s
             r@   "test_download_parallel_fills_cacher    s   D 
	h	'	'  J,, 	! 	!EB&r*****KKQ    '""T"""
 
 
 2ww#d))####((4(((#o//000000R 	- 	-IAv1$Q''1,,,,,               ##O$5$566666s   C*DDDc                    g }i }t          | t                    D ]-\  }}t          |          rJ |                    ||f           .t	          d |D             |          }t          |          t          |          k    sJ t                       t          ||          D ]\  }\  }}t          |          |k    sJ d S )Nc                     g | ]\  }}|S rY   rY   r|   s      r@   r   z=test_download_parallel_with_empty_sources.<locals>.<listcomp>  s    $:$:$:6AqQ$:$:$:rI   rl  )	r   r   r#   r   r   r   r   r   r   )	rZ   rd   r   r   r   rU   r   r   rW   s	            r@   )test_download_parallel_with_empty_sourcesr    s    DG
C((  A"2&&&&&RG	#$:$:T$:$:$:G	L	L	LBr77c$ii T]] ) )	6Aq ##q((((() )rI   c                    t          |           \  }}||d fg}i }t          t          | t                              D ]\  }\  }}	t	          |          rJ g ||<   t          ||          D ]}
||                             |
           t          |           \  }}||                             |           |                    |||	f           t          d |D             |          }t          |          t          |          k    sJ t          ||          D ]3\  }\  }}}	t          |          |k    sJ t          |          |	k    sJ 4d S )Nc                     g | ]\  }}}|	S rY   rY   r   s       r@   r   zJtest_download_parallel_with_sources_and_bogus_original.<locals>.<listcomp>  s    $A$A$A=Aq%Q$A$A$ArI   rl  r   )rZ   r`   rd   rW   rU   r   r   rT   r   r   r   r   r   s                r@   6test_download_parallel_with_sources_and_bogus_originalr    s    
DAq4L>DG#F:s$;$;<< $ $;B"2&&&&&q)) 	# 	#BBKr""""J11REN####	#$A$AD$A$A$A7	S	S	SBr77c$ii  DMM - -=Aq% ##q(((( ##u,,,,,- -rI   c                    t          t          |t                              }t          d |D                       }t	          |          t	          |          k    sJ t          ||          D ]\  }\  }}t          |          |k    sJ d S )Nc                     g | ]\  }}|S rY   rY   r|   s      r@   r   z/test_download_parallel_many.<locals>.<listcomp>  s    #7#7#7&1aA#7#7#7rI   )r  r   N_PARALLEL_HAMMERr   r   r   r   )rd   rZ   tdr   rW   rU   s         r@   test_download_parallel_manyr    s    	fZ!233	4	4B"#7#7B#7#7#788Aq66SWWBZZ ) )	6Aq ##q((((() )rI   c                    t          t          |t                              }t          |          }t	          j        t          j        j                  5  t          |gd |D             z              ddd           dS # 1 swxY w Y   dS )zCheck that a partially successful download works.

    Even in the presence of many requested URLs, presumably hitting all the
    parallelism this system can manage, a download failure leads to a tidy
    shutdown.

    c                     g | ]\  }}|S rY   rY   r|   s      r@   r   z:test_download_parallel_partial_success.<locals>.<listcomp>  s    -A-A-AFQa-A-A-ArI   N)
r  r   r  r   r   rE  r  r  rG  r   )rd   rZ   r`   r  u_bads        r@   &test_download_parallel_partial_successr    s     
fZ!233	4	4BE	v~.	/	/ C C"E7-A-Ab-A-A-A#ABBBC C C C C C C C C C C C C C C C C Cs   B  BBc                    t          j                    }	 t          j        d           t          t                    D ]}t          t          |t                              }t          |          }|gd |D             z   }t          j	        |           t          j        t          j        j                  5  t          |           ddd           n# 1 swxY w Y   	 t          j        |           dS # t          j        |           w xY w)a  Check that a partially successful parallel download leaves the cache unlocked.

    This needs to be repeated many times because race conditions are what cause
    this sort of thing, especially situations where a process might be forcibly
    shut down while it holds the lock.

    r   c                     g | ]\  }}|S rY   rY   r|   s      r@   r   zDtest_download_parallel_partial_success_lock_safe.<locals>.<listcomp>   s    111FQa111rI   N)randomgetstateseedranger  r  r   r   r   shuffler   rE  r  r  rG  r   setstate)rd   rZ   r`   ru  _r  r  r   s           r@   0test_download_parallel_partial_success_lock_safer    s6    	AA()) 	1 	1AfZ--..B&&E711b1111DN4   v~677 1 1*40001 1 1 1 1 1 1 1 1 1 1 1 1 1 1	1 	s0   B"C6 7CC6 C	C6 C	C6 6Dc                    g }t          t                    D ]~}|d}||z  }t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t	          |          }t          |           |                    |||f           t          d |D                       }t          |          t          |          k    sJ t          ||          D ]\  }	\  }}}t          |	          |k    sJ g }
|D ]f\  }}}| d}||z  }t          |d          5 }|                    |           d d d            n# 1 swxY w Y   |
                    ||||f           gt          d |D             d          }t          |          t          |          k    sJ t          ||
          D ]'\  }\  }}}}t          |          |k    sJ ||k    sJ (t          d |D             d	          }t          |          t          |          k    sJ t          ||
          D ]4\  }\  }}}}t          |          |k    sJ t          |          |k    sJ 5d S )
N04dr2   c                     g | ]\  }}}|	S rY   rY   r}   rV   rW   rU   s       r@   r   z1test_download_parallel_update.<locals>.<listcomp>3      $<$<$<:B1Q$<$<$<rI   z updatedc                     g | ]\  }}}|	S rY   rY   r  s       r@   r   z1test_download_parallel_update.<locals>.<listcomp>@  r  rI   Tr   c                     g | ]\  }}}|	S rY   rY   r  s       r@   r   z1test_download_parallel_update.<locals>.<listcomp>E  r  rI   rL  )r  r  r7   r8   rH   r   r   r   r   r   r   )rd   rS   r  rT   rU   rV   r?   rW   r1r_1td2c_plusr2r_2r3r_3s                   r@   test_download_parallel_updater  (  s2   	B$%%  JJ\"c]] 	aGGAJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	2JJQ
		2q!*	#$<$<$<$<$<	=	=Br77c"ggr2;; + +Zb!Q %%*****
C ' 'Aq\"c]] 	aGGFOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	

B1f%&&&&	#$<$<$<$<$<D	I	I	IBr77c"gg#&r3<<  b!Q %%****F{{{{{	#$<$<$<$<$<H	M	M	MBr77c"gg#&r3<< 0 0b!Q %%**** %%/////0 0s#   AA	A	$EE
	E
	c           	        	 t          |          \  }t          |          \  	}t          d          }t          |          |k    sJ 	fd}t          t                    5 }t          |                    |t          t                                        }d d d            n# 1 swxY w Y   t                       |D ]}t          |          |k    sJ d S )NTr   c                 *    t          dg          S NrL  r   r   )rT   rW   r   s    r@   rL  z$test_update_parallel.<locals>.updateW  s    Qh====rI   r   )	r   r   r   r   r  r   r  r  r   )
rd   rZ   rU   r   r?   rL  r  r   rW   r   s
           @@r@   test_update_parallelr  M  s<    
DAq*FBat$$$AQ1$$$$> > > > > > 
	8	8	8 7AfeO4455667 7 7 7 7 7 7 7 7 7 7 7 7 7 7  * * ##r)))))* *s   (6B**B.1B.c                    t          |          \  }t          t          |t                              }t	          d          }t          |          |k    sJ fd}t          t          |                    5 }t          |                    ||                    }d d d            n# 1 swxY w Y   t                       t          d |D                       sJ d S )NTr   c                 8    | \  }}t          d|g          |fS r  r   )ucr   r   rW   s      r@   rL  z*test_update_parallel_multi.<locals>.updatel  s(    BQh===rAArI   r   c              3   B   K   | ]\  }}t          |          |k    V  d S rC   )r   )r}   r?   rU   s      r@   rn  z-test_update_parallel_multi.<locals>.<genexpr>t  s4      99Va ##q(999999rI   )r   r  r   r  r   r   r   r   r  r   any)	rd   rZ   rU   iucsr?   rL  r  r   rW   s	           @r@   test_update_parallel_multir  b  s3    
DAqz?3344Dat$$$AQ1$$$$B B B B B 
D			2	2	2 &avt$$%%& & & & & & & & & & & & & & & 99q9999999999s   >$B..B25B2c                      t          t          dd          5 } |                                                     d          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )NFutf-8)r   encodingAstropyrk  )r   r   r  find)pages    r@   test_url_nocacher  w  s    	gUW	E	E	E 0yy{{	**R/////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   .AAAc                 4   t          |           \  }}t          |d          }t          |          }d|z   }t          |          }t          j                            |          sJ t          |           t          j                            |          rJ d S )NTr   zhash/)r   r   r   r   r3   r4   r   r   )rZ   rd   rg  r   r   hashhashstrr   s           r@   test_find_by_hashr  }  s    Z((GXgT***A??DnG!'**E7>>%     w~~e$$$$$$$rI   c                      t          j        t          j        j        t
          f          5  t          d           d d d            d S # 1 swxY w Y   d S )N@kjfrhgjklahgiulrhgiuraehgiurhgiuhreglhurieghruelighiuerahiulruli)r   rE  r  rF  rG  TimeoutErrorr   rY   rI   r@   test_find_invalidr    s     
-|<	=	= 
 
N	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AAApackage)Nr   numpyc                     t          dd|           }t          j                            |          rJ t          j                            |          rJ dS )z/Test can create a file path to an invalid file.
kjfrhgjkla
hgiulrhgiu)r  N)r   r3   r4   r   rU  )r  r4   s     r@   test_get_invalidr    sR     \<IIIDw~~d#####w}}T"""""""rI   r)  )r)   zlocal.dat.gzzlocal.dat.bz2zlocal.dat.xzc                 f   t           sd| v st          sd| v rt          j        t          d          5  t          t          j                            d|           d          5 }|	                                 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 t          t          j                            d|           d          5 }|	                                 |
                                                                dk    sJ 	 d d d            d S # 1 swxY w Y   d S )	Nbz2xzz format files are not supportedr\  r(   binaryr     CONTENT)r*   r+   r   rE  
ValueErrorr   r3   r4   r5   readliner  rstrip)r)  r?   s     r@   test_local_data_objr    s     3))8)@P@P]:-OPPP 	 	%VX..   

              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 "GLL**X
 
 
 	3JJLLL6688??$$
22222		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3sH   0B"B7BB	B
B	BB"BAD&&D*-D*zinvalid.dat.bz2zinvalid.dat.gz)paramsc                     d}d}|| j         z  }t          |          }|                    d          r|}n|                    d          r|}nd}|                    |           |S )Ns
   BZhinvalids
   invalid.bz2z.gzinvalid)paramrR   endswithwrite_bytes)r  rS   
bz_content
gz_contentdatafiler)  r   s          r@   bad_compressedr    s}     J'J'-'H8}}H   			5	!	! """OrI   c                 0   |                      d          }|                      d          }t          s|s	t          su|rst          j        t
          d          5  t          | d          5 }|                                 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 t          | d          5 }|                                                                                     d          sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  z.xzz)does not provide the [lb]z[2m]a? module\.r\  r  r  s   invalid)	r  r*   r+   r   rE  ModuleNotFoundErrorr   r  r  )r  is_bz2is_xzr?   s       r@   test_local_data_obj_invalidr    s   $$V,,F##E**E  : : :U :]'S
 
 
 	 	 &nxHHH A              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ".8DDD 	:6688??$$--j999999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:sH   B#*B?B#B	B#B	B##B'*B'<DDDc                      t           j                            t                    rt                              d          sJ d S )Nr)   )r3   r4   r   	TESTLOCALr  rY   rI   r@   test_local_data_namer    s5    7>>)$$H););K)H)HHHHHHrI   c            	      H   t           j                            t           j                            t                    d          } t
          j                            d|            	 ddl}|                                }t           j        	                    |          t           j        	                    t           j                            | ddd                    k    sJ 	 t
          j        
                    d           dS # t
          j        
                    d           w xY w)zRegression test for issue #1256

    Tests that `get_pkg_data_filename` works in a third-party package that
    doesn't make any relative imports from the module it's used from.

    Uses a test package under ``data/test_package``.
    r(   r   Ntest_packagezfoo.txt)r3   r4   r5   dirname__file__sysinsertr  get_data_filenamenormcasepop)data_dirr  r)  s      r@   "test_data_name_third_party_packager    s     w||BGOOH55v>>HHOOAx   1133w))GRW\\(NFIVVWW
 
 
 
 
 	QQs   $A:D   !D!c                      t          j        t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Nz../../../data/README.rst)r   rE  RuntimeErrorr   rY   rI   r@   test_local_data_nonlocalfailr     s    	|	$	$ : :8999: : : : : : : : : : : : : : : : : :   7;;c                 0   d}| dz  }t          |d          5 }|                    |           |                                 d d d            n# 1 swxY w Y   t          |          }t	          j        |                                          }||k    sJ d S )Ns$   1234567890abcdefghijklmnopqrstuvwxyzztmp.datr   )r7   r8   flushr   hashlibmd5	hexdigest)rS   randsr)  ntfchhashshashs         r@   test_compute_hashr    s    3E)#H	h		 		%		               (##FK((**EU??????s   *AAAc                      t          d          5 } |                                 }d d d            n# 1 swxY w Y   t          d          }||k    sJ d S )Nzdata/local.dat)r   r  r   )r?   	contents1	contents2s      r@   test_get_pkg_data_contentsr    s    	.	/	/ 1FFHH	               &&677I	!!!!!!s   155c                 b   dt           _        |                     dd           |                     d           |                     dd           |                     d           |                     t
          j        dd           |                     t
          j        dd           dd}|                     t
          d	|           t          j	        t                    5  t          j        d
           ddd           n# 1 swxY w Y   t          j        t                    5 }t          t          d          }ddd           n# 1 swxY w Y   t!          |          }ddg}|dk    r|                    ddg           |D ]A}t%          |                                          }t)          |          D ]\  }}	|	|v r||=  nBt!          |          dk    sJ d|             |dv sJ d|             t*          j                            |          sJ t          j        t          d          5  t1          t                     ddd           n# 1 swxY w Y   t*          j                            |          sJ t3                       t*          j                            |          rJ t          t          d          }
t5          |
d          5 }|                                                    d                              d          dk    sJ 	 ddd           dS # 1 swxY w Y   dS )zj
    Tests to make sure the default behavior when the cache directory can't
    be located is correct
    TXDG_CONFIG_HOMEfooXDG_CACHE_HOMEbar
_temp_pathNc                     t                      rC   )r   )dirnmlinktopkgnames      r@   osraiserz.test_data_noastropy_fallback.<locals>.osraiser3  s    iirI   _find_or_create_root_dirr   )rootnamer   z'remote data cache could not be accessedztemporary file   socketr   zGot some unexpected warnings: )   r  zExpected 2 or 4 warnings, got z0.*Not clearing data cache - cache inaccessible.*r\  Frbr  r  rk  rC   )r   "delete_temporary_downloads_at_exitsetenvdelenvr   r   set_temp_configrb   r   rE  r   get_cache_dirrb  r
   r   r   r   extendrR   lowerr   r3   r4   r   r   r   r7   r  decoder  )r   r  rd  r   n_warnspartial_warn_msgswlcur_wrT   partial_msg	fnnocacher  s               r@   test_data_noastropy_fallbackr"    sU    /3D+ (%000()))'///'(((-|TBBB,lDAAA    98DDD	w		 0 0Y////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
)	*	* 3mgT2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3-  GBDTU!||  (H!5666  B'(9:: 	 	NA{e##%a( $ 	!###;(9;; 	$## fHwHH7>>%      
#V
 
 
 & & 	W%%%& & & & & & & & & & & & & & & 7>>%     
 KKKw~~e$$$$$ gU333I	i		 @$yy{{!!'**//	::R?????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @sI   D  DD$EEE3IIIAL$$L(+L(zunicode.txtzunicode.txt.gzzunicode.txt.bz2zno bz2 support)markszunicode.txt.xzzno lzma supportc                    t          t          j                            d|           d          }t	          |t
                    sJ |                                d         }|dk    sJ t          t          j                            d|           d          }t	          |t                    sJ |                                d         }|ddd          k    sJ d S )Nr(   r  r  r`  u!   האסטרונומי פייתוןr  s"   האסטרונומי פייתון)r   r3   r4   r5   
isinstancerR   
splitlinesbytes)r)  r   xs      r@   test_read_unicoder)  g  s      %RW\\&(%C%CgVVVHh$$$$$""$$Q'H:::::$RW\\&(%C%ChWWWHh&&&&&a A	MMNRR	Q     rI   c                  f   d} t          j        |           } t          | t                    sJ  G d d          } ||           }t	          |d          5 }|                                 |                                                                dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Ns   H4sICIxwG1AAA2xvY2FsLmRhdAALycgsVkjLzElVANKlxakpCpl5CiUZqQolqcUl8Tn5yYk58SmJJYnxWmCRzLx0hbTSvOSSzPy8Yi5nf78QV78QLgAlLytnRQAAAA==c                        e Zd ZdZd ZddZdS )*test_compressed_stream.<locals>.FakeStreamz?
        A fake stream that has `read`, but no `seek`.
        c                     || _         d S rC   r(   )selfr(   s     r@   __init__z3test_compressed_stream.<locals>.FakeStream.__init__  s    DIIIrI   Nc                 n    || j         }d| _         n#| j         d |         }| j         |d          | _         |S )NrI   r.  )r/  nbytesresults      r@   r  z/test_compressed_stream.<locals>.FakeStream.read  s>    ~		7F7+ Ifgg.	MrI   rC   )r   r   r   __doc__r0  r  rY   rI   r@   
FakeStreamr,    sA        	 		 	 		 	 	 	 	 	rI   r5  r  r  r  )base64	b64decoder%  r'  r   r  r  r  )gzipped_datar5  streamr?   s       r@   test_compressed_streamr:    s   	R  #L11LlE*****       " Z%%F	fx	8	8	8 /A	

vvxx  J...../ / / / / / / / / / / / / / / / / /s   AB&&B*-B*c                      t          j        t          j        j                  5  t          d           ddd           dS # 1 swxY w Y   dS )z
    checks that download_file gives a URLError and not an AttributeError,
    as its code pathway involves some fiddling with the exception.
    z&http://www.astropy.org/nonexistentfileN)r   rE  r  rF  rG  r   rY   rI   r@   .test_invalid_location_download_raises_urlerrorr<    s     
v|,	-	- @ @>???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   AAAc                      t          j        t                    5  t          d           ddd           dS # 1 swxY w Y   dS )zM
    checks that download_file gives an OSError if the socket is blocked
    "http://astropy.org/nonexistentfileN)r   rE  r   r   rY   rI   r@   (test_invalid_location_download_noconnectr?    s     
w		 < <:;;;< < < < < < < < < < < < < < < < < <r  c                      t          d          rJ t          t          dd           t          t                    sJ d S )Nr>  TFrP  )r#   r   r   rY   rI   r@   test_is_url_in_cache_remoterA    sF    CDDDDD'U;;;;7#######rI   c                     t          |          \  }}t          |          }t          |          rJ t          |          rJ t          |dd           t          |          sJ t          |          rJ d S )NTFrP  )r   r#   r   )rd   rZ   r`   rg  r   nonexistents         r@   test_is_url_in_cache_localrD    s    Z((GX|$$Kw'''''{+++++'U;;;;7#####{+++++++rI   c                    t          |          \  }}t          |          \  }}| dz  }t                       t                      rJ t          |d           t                       t          |d           t                       t	          |||g           t                       t          |           t                       t          ||g           t                       d S Nthe.zipTr   )r   r   r   r   r   r    )	rS   rd   rZ   r`   rg  testurl_contentstesturl2testurl2_contentszip_file_names	            r@   test_check_download_cacherL    s     $Z 0 0G"&z"2"2Hy(M#%%%%%'&&&&($''''-'8)<==="""-'333rI   c                    t          |          \  }}t          |dd          }t          |          |k    sJ t          t	                                }| dz  }t          ||g           t          |           t          |           t          |          sJ t          t	                                |k    sJ t          t          |dd                    |k    sJ d S )NTFrP  rG  )	r   r   r   r   r   r   r   r    r#   )rS   rd   rZ   rg  r   r?   initial_urls_in_cacherK  s           r@    test_export_import_roundtrip_onerO    s    Z((GXgT???AQ8++++ 1 122y(M-'333!!!-(((7#####  !!%:::::-t5QQQRR	 	 	 	 	 	rI   c                     t          |          \  }}t          d          5 }t          |          rJ t          j        t
                    5  t          ||g           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 )Nr   )r   r   r#   r   rE  KeyErrorr   )rd   rZ   rg  r   zip_files        r@   test_export_url_not_presentrS    s   Z((GX	D	!	! 7X"7+++++]8$$ 	7 	7!(WI666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	77 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s5   +BA+B+A/	/B2A/	3BB
Bc                    t          |          \  }}t          |          \  }}| dz  }t          |d           t          |d           t          |          sJ t          |||g           t	          |           t	          |           t          ||g           t          |          sJ t          |          rJ d S rF  )r   r   r#   r   r   r    )rS   rd   rZ   rg  rH  rI  rJ  rK  s           r@   test_import_onerU    s     $Z 0 0G"&z"2"2Hy(M'&&&&($''''8$$$$$-'8)<===!!!"""-'3337#####x(((((((rI   c                 8   | dz  }t          |t                    D ]\  }}t          |d           t          t	                                }t          |           t                       t          |           t          t	                                |k    sJ d S rF  )r   r   r   r   r   r   r   r    )rS   rd   rZ   rK  rW   rU   rN  s          r@   test_export_import_roundtriprW    s    y(Mz3'' % %1at$$$$$ 1 122-(((-(((  !!%:::::::rI   c                    t          |t                    D ]\  }}t          |d           t          t	                                }t          j                    5 }t          |           |                                }d d d            n# 1 swxY w Y   t                       t          j        |          5 }t          |           d d d            n# 1 swxY w Y   t          t	                                |k    sJ d S r  )r   r   r   r   r   ioBytesIOr   getvaluer   r    )rd   rZ   rW   rU   rN  r?   r0   s          r@   #test_export_import_roundtrip_streamr\  !  sf   z3'' % %1at$$$$$ 1 122	 a   JJLL               	A !!a   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !   !!%:::::::s$   $BBB8CCCc                    |dz  }d}t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t          |t                    D ]\  }}t	          |d           t          j        t                    5  t          |           d d d            n# 1 swxY w Y   t          |d          |k    sJ t          |d           t          |d          |k    sJ d S )	Nzf.zips   Some contents
to check laterr   Tr   r  r  )	overwrite)
r7   r8   r   r   r   r   rE  FileExistsErrorr   r   )rd   rZ   rS   rV   rU   r?   rW   r  s           r@    test_export_overwrite_flag_worksr`  0  s{   	G	B(A	b$ 1	


              z3'' % %1at$$$$$		'	' " "b!!!" " " " " " " " " " " " " " "R(333q8888"----R(333q888888s   :>>
B&&B*-B*c                    | dz  }|                                  | dz  }t          t          |t                              }d |D             }t	          j        |          5  |D ]\  }}t          |d           t          t                                |k    sJ t          |           d d d            n# 1 swxY w Y   | dz  }|                                  t	          j        |          5  t          |           t                       t          t                                |k    sJ |D ])\  }}t          t          |d                    |k    sJ *	 d d d            d S # 1 swxY w Y   d S )NoriginalrG  c                     h | ]\  }}|S rY   rY   r|   s      r@   r~   zBtest_export_import_roundtrip_different_location.<locals>.<setcomp>F  s    2226AqQ222rI   Tr   rK  )r6   r  r   r   r   rb   r   r   r   r   r    r   r   )	rS   rZ   original_cacherK  r   rN  rW   rU   	new_caches	            r@   /test_export_import_roundtrip_different_locationrf  @  s3   
*Ny(Mz3''((D22T222		n	-	- - - 	) 	)DAq!4(((((?$$%%)>>>>>m,,,	- - - - - - - - - - - - - - - 5 IOO		i	(	( H Hm,,,?$$%%)>>>>> 	H 	HDAq$]1D%A%A%ABBaGGGGG	H	H H H H H H H H H H H H H H H H H Hs&   !A
B77B;>B;/A+E((E,/E,c                 N    t                      rJ t                      dk    sJ d S )Nr   )r   r   )rd   s    r@   "test_cache_size_is_zero_when_emptyrh  W  s1         """"""rI   c                 Z   t          |          \  }}t          |           t                      }t          |d           t                      |t	          |          z   t	          |                    d                    z   k    sJ t          |           t                      |k    sJ d S )NTr   r  )r   r   r   r   r   encode)rd   rZ   rW   rU   s_is        r@   Btest_cache_size_changes_correctly_when_files_are_added_and_removedrl  \  s     
DAq


C!4    s1vvAHHW4E4E0F0F!FFFFF$$$$$$rI   c                 p   g }t          |t                    D ].\  }}t          |d          }|                    |||f           /t	          t                                                                t	          t                                k    sJ |D ] \  }}}t                      |         |k    sJ !d S r  )r   r   r   r   r   r   keysr   )	rd   rZ   r   r/   a_ca_frW   rU   hs	            r@   (test_cache_contents_agrees_with_get_urlsrr  h  s    
AS))    3AT***	!S#~$$&&''3/@/@+A+AAAAA ( (1a"a'''''( (rI   desired_sizel     NZor`  c                     t          j        t                    5  t          | |           d d d            d S # 1 swxY w Y   d S rC   )r   rE  r   r   )rS   rs  s     r@   test_free_space_checker_hugeru  r  s    	w		 8 8,7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   8<<c                    | dz  }t          |d          5  	 d d d            n# 1 swxY w Y   t          j        t                    5  t	          |           d d d            n# 1 swxY w Y   t	          |           }|dk    rt          |d          rJ t	          | d          }|dk    r|j        t          j        k    sJ t	          | t          j	                  }|dk    r|j        t          j	        k    sJ d S )Nr1   r2   r   unitT)rw  )
r7   r   rE  r   r   hasattrrw  _ubyteMbit)rS   rV   
free_spaces      r@   "test_get_free_space_file_directoryr}  x  sw   	F	B	b#                	w		 " "b!!!" " " " " " " " " " " " " " " 'x00J>>'*f"="=>>> 'xd;;;J>>jo8888&xbg>>>J>>jo888888s   $((A$$A(+A(c                     t          |           }t          j        t                    5  t	          |g            d d d            d S # 1 swxY w Y   d S )Nrl  )r   r   rE  rQ  r   )r`   rd   rW   s      r@   !test_download_file_bogus_settingsr    s    \A	x	 	  % %a$$$$% % % % % % % % % % % % % % % % % %s   AAAc                     t          j        t          j        j                  5  t          t          |                      ddd           dS # 1 swxY w Y   dS )zSMake sure we get a URLError rather than OSError even if it's a
    local directory.N)r   rE  r  r  rG  r   rH   rc   s    r@   "test_download_file_local_directoryr    s     
v~.	/	/ ( (fX&&'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   AAAc                 ^    t          |           \  }}t          |          }|t          v sJ d S rC   )r   r   r   )rZ   rW   rU   r?   s       r@   %test_download_file_schedules_deletionr    s7    
DAqaArI   c                    t          | dz            }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          j                            |          sJ t          j        t                    5  t          |           d d d            n# 1 swxY w Y   t          j                            |          sJ d S )Nr1   r2   r*  )
rR   r7   r8   r3   r4   r^   r   rE  r  r   )rS   rV   r?   s      r@   =test_clear_download_cache_refuses_to_delete_outside_the_cacher    s3   	X		B	b# !		              7>>"	|	$	$ ! !R   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !7>>"s#   AA	A	
B&&B*-B*c                    t          |          \  }}t          |d           t                      }t          j                            t          j                            |d                    }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          j
        t                    5 }t                       d d d            n# 1 swxY w Y   ||j        j        v sJ t                       d S NTr   r?  r2   bogus file that exists)r   r   r   r3   r4   r   r5   r7   r8   r   rE  r	   r   value	bad_filesr   )rd   rZ   rW   rU   dldirbfr?   es           r@   -test_check_download_cache_finds_bogus_entriesr    s]   
DAq!4    #%%E	eW55	6	6B	b# *!	()))* * * * * * * * * * * * * * *	|	$	$               """""s$   ?B!!B%(B%C  C$'C$c                 4   t          |          \  }}t          |d          }t          j                            t          j                            t          j                            |          d                    }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          j
        t                    5 }t                       d d d            n# 1 swxY w Y   ||j        j        v sJ t                       d S r  )r   r   r3   r4   r   r5   r  r7   r8   r   rE  r	   r   r  r  r   )rd   rZ   rW   rU   r?   r  r  s          r@   0test_check_download_cache_finds_bogus_subentriesr    s_   
DAqat$$$A	bgooa&8&8'BB	C	CB	b# *!	()))* * * * * * * * * * * * * * *	|	$	$               """""s$   B00B47B4C//C36C3c                 *   t          |          \  }}t          |d          }t                      }t          j                            t          j                            |d                    }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          j                            t          j                            t          j        	                    |          d                    }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          j                            t          j                            |d                    }	t          |	d          5 }|                    d	           d d d            n# 1 swxY w Y   t          |          \  }
}t          |d          }t          j
        |           t          j        	                    |          }t          j        t                    5 }t                       d d d            n# 1 swxY w Y   t          |j        j                  |||	|hk    sJ |j        j        D ]}t%          |           d S )
NTr   bogus1r2   r  bogus2zother bogus file that existsr   z&awkwardly-named bogus file that exists)r   r   r   r3   r4   r   r5   r7   r8   r  unlinkr   rE  r	   r   r   r  r  r   )rd   rZ   rW   rU   rV   r  bf1r?   bf2bf3r   r   r   bf4r  r  s                   r@   !test_check_download_cache_cleanupr    s   
DAq	q	%	%	%B#%%E
'//"',,uh77
8
8C	c3 *1	()))* * * * * * * * * * * * * * * '//"',,rwr':':HEE
F
FC	c3 01	.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 '//"',,uj99
:
:C	c3 :1	8999: : : : : : : : : : : : : : : *FB	q	%	%	%BIbMMM
'//"

C	|	$	$               qw !!c3S%99999g ! !R    ! !sH   ?B!!B%(B%D88D<?D<F22F69F6,IIIc                 n    t          |          \  }}t          |d           t          |d           d S )NTr   rL  r   )rd   rZ   rW   r  s       r@   .test_download_cache_update_doesnt_damage_cacher    s?    
DAq!4    !8$$$$$$rI   c                 $   fd}t                      }| dz  }d}t          j        |           t          j        |          5  t          j        |           t          |d          5 }|                    |           ddd           n# 1 swxY w Y   t          j
        t                    5  t          j                     ddd           n# 1 swxY w Y    |             ddd           n# 1 swxY w Y   |t                      k    sJ t          |          |k    s
J d            t          j
        t                    5  t          j        |          5  	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |t                      k    sJ t          t          |                    |k    sJ | dz  }t          |d          5 }|                    |           ddd           n# 1 swxY w Y   t          j        |           5   |             ddd           n# 1 swxY w Y   |t                      k    sJ t          |          |k    sJ t          j        |           t          j        |           | dz  dz  }t          |d          5 }|                    |           ddd           n# 1 swxY w Y   t          j        |           5   |             ddd           n# 1 swxY w Y   |t                      k    sJ t          |          |k    sJ t          j        |           t          j        |           | dz  dz  d	z  }t          |d          5 }|                    |           ddd           n# 1 swxY w Y   t          j        |           5   |             ddd           n# 1 swxY w Y   |t                      k    sJ t          |          |k    sJ t          j        |           dS )
a  Ensure that bogus cache settings are handled sensibly.

    Because the user can specify the cache location in a config file, and
    because they might try to deduce the location by looking around at what's
    in their directory tree, and because the cache directory is actual several
    tree levels down from the directory set in the config file, it's important
    to check what happens if each of the steps in the path is wrong somehow.
    c                     t          j        t                    5  t                      rJ 	 ddd           n# 1 swxY w Y   t          j        t                    5  t	          d          rJ 	 ddd           n# 1 swxY w Y   t          j        t                    5  t                      rJ 	 ddd           n# 1 swxY w Y   t          j        t                    5  t                    \  } }t          | d          }t          |          |k    sJ 	 ddd           n# 1 swxY w Y   t          j        t                    5  t	          |           rJ 	 ddd           n# 1 swxY w Y   t          j        t                    5  t          j	        t                    5  t                       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 )zrWe want a broken cache to produce a warning but then astropy should
        act like there isn't a cache.
        Nzhttp://www.example.com/Tr   )r   rb  r
   r   r#   r   r   r   r   rE  r   r   )rW   rU   r   rZ   s      r@   !check_quietly_ignores_bogus_cachezLtest_cache_dir_is_actually_a_file.<locals>.check_quietly_ignores_bogus_cache  s    \-.. 	) 	)&((((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)\-.. 	B 	B&'@AAAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B\-.. 	( 	(%''''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(\-.. 	- 	-
##DAqat,,,A$Q''1,,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- \-.. 	* 	*&q))))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*\-.. 	' 	'w'' ' '$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   9= =A<<B B  B>>CC"9D((D,/D,E++E/2E/G)G8GG	GG	GG #G r1   r   r2   NzFile should not be harmed.r   downloadr(  )r   r3   r6   r   rb   shutilrmtreer7   r8   r   rE  r   r  r   rR   removemakedirs)rS   rZ   r  r  rV   ctr?   cds    `      r@   !test_cache_dir_is_actually_a_filer    s   ' ' ' ' '0 $%%E
 
F	B	BHRLLL		b	!	! , ,b"c]] 	aGGBKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]7## 	" 	"!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"))+++, , , , , , , , , , , , , , , +------R  B&&&(D&&& 
w		  !"%% 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	               +------SWW%%++++ 
I	B	b# !	              		h	'	' , ,))+++, , , , , , , , , , , , , , ,+------R  B&&&&IbMMM KOOO	I	
	*B	b# !	              		h	'	' , ,))+++, , , , , , , , , , , , , , ,+------R  B&&&&IbMMM KOOO	I	
	*U	2B	b# !	              		h	'	' , ,))+++, , , , , , , , , , , , , , ,+------R  B&&&&IbMMMMMs   %C0)B?C0B	C0B	C0/CC0C	C0C	C00C47C4E?E(E?(E,	,E?/E,	0E??FFG77G;>G;H--H14H1!KK
K"K99K= K=0NNN1OOOc                     | \  }}t          t          |                    5 }|                                |k    sJ 	 d d d            d S # 1 swxY w Y   d S rC   )r   rR   r  r   rV   rU   rfs       r@   test_get_fileobj_strr  B  s    EB	c"gg	&	& "wwyyA~~~~~                 s   AAAc                     | \  }}t          t          j                            |                    5 }|                                |k    sJ 	 d d d            d S # 1 swxY w Y   d S rC   )r   pyr4   localr  r  s       r@   test_get_fileobj_localpathr  H  s    EB	bgmmB//	0	0 BwwyyA~~~~~                 s   AA"Ac                     | \  }}t          t          j        |                    5 }|                                |k    sJ 	 d d d            d S # 1 swxY w Y   d S rC   )r   rD   rE   r  r  s       r@   test_get_fileobj_pathlibr  N  s    EB	gl2..	/	/ 2wwyyA~~~~~                 s   AAAc                     | \  }}t          |d          5 }|                                |k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r  )r   r  )r   rV   rU   r  s       r@   test_get_fileobj_binaryr  T  s    EB	b8	4	4	4 wwyyA~~~~~                 s   A  AAc                 8   | \  }}t          |          5 }t          |          5 }t          j        t                    5  |                                 d d d            n# 1 swxY w Y   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 rC   )r7   r   r   rE  	TypeErrorr  r   rV   rU   r?   r  s        r@   "test_get_fileobj_already_open_textr  Z  sJ   EB	b Q!!$$ 	y))  			              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 sW   BA7A A7 A$$A7'A$(A7+B7A;	;B>A;	?BBBc                     | \  }}t          |d          5 }t          |          5 }|                                |k    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 )Nr  r7   r   r  r  s        r@   $test_get_fileobj_already_open_binaryr  b  s    EB	b$ "1!!$$ 	"7799>>>>>	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"" " " " " " " " " " " " " " " " " "s4   A&AA&A	A&A	A&&A*-A*c                     | \  }}t          |d          5 }t          |d          5 }|                                |k    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 )Nr  r  r  r  )r   rV   rU   r?   r  s        r@   +test_get_fileobj_binary_already_open_binaryr  i  s    EB	b$ "1!!h777 	"27799>>>>>	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"" " " " " " " " " " " " " " " " " "s4   A(AA(A	A(A	A((A,/A,c                 j   t                      }t          j        t                    5  d|d<   d d d            n# 1 swxY w Y   t	          |          \  }}t          |d           t                      }||v sJ t          j        t                    5  d|d<   d d d            d S # 1 swxY w Y   d S )N   r  Tr   )r   r   rE  r  r   r   )rd   rZ   rU   rW   r  s        r@    test_cache_contents_not_writabler  p  s4   A	y	!	!  %              
DAq!4    A6666	y	!	!  %                 s   :>>B((B,/B,c                    t          |          \  }}| dz  }| dz  }t          j        |           t          j        |          5  t          |d          }t          |          sJ t          |          |k    sJ t          j	        ||           t                       d d d            n# 1 swxY w Y   t          j        |          5  t          |          sJ t          |d          }||k    sJ t          j                            |          sJ t          |           t                       d d d            d S # 1 swxY w Y   d S )N12Tr   )r   r3   r6   r   rb   r   r#   r   r  copytreer   r4   r^   r   )rS   rZ   rW   rU   r<   r=   p1p2s           r@   test_cache_relocatabler  |  s   
DAq	CB	CBHRLLL		b	!	!  1D)))q!!!!! $$))))B               
	b	!	!  q!!!!!1D)))Rxxxxw~~b!!!!!R                    s&   AB,,B03B0A)EEEc                 b   t          t                    }|                    t          dt	          |                      t          |          5 }|                                 ddd           n# 1 swxY w Y   t          |                                           }t          |          dk    sJ dS )zAchecks that get_readable_fileobj leaves no temporary files behindtempdirNr   )
rH   r  r   r   rR   r   r  r  r   r   )rS   r   r(  r?   tempdir_listings        r@   3test_get_readable_fileobj_cleans_up_temporary_filesr    s     

C )S]];;; 
c	"	" a	               8++--..O 1$$$$$$s   A..A25A2c                      t          j        t                    } t          |           5 }|                                                                dk    sJ 	 d d d            d S # 1 swxY w Y   d S )NzDThis file is used in the test_local_data_* testing functions
CONTENT)rD   rE   r  r   r  r  )fpathr?   s     r@   &test_path_objects_get_readable_fileobjr    s    L##E	e	$	$ 
FFHHOOVW W W W W
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   -A$$A(+A(c                  (   t          t          d          5 } t          | d          5 }|                    d           ddd           n# 1 swxY w Y   |                     d           ddd           n# 1 swxY w Y   | j        r|j        sJ dS )zyEnsure fileobj state is as expected when get_readable_fileobj()
    is called inside another get_readable_fileobj().
    r  r  zUTF-8r`  N)r   r  seekclosed)fileobjfileobj2s     r@    test_nested_get_readable_fileobjr    s    
i(	;	;	; w!'G<<< 	MM!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Q               >-ho-----s3   A7AA7A	A7A	A77A;>A;c                    t           j        dfd	            d dfd
} G fdd          |                     t          j        j        d|           t          j        t          j	        j
                  5  ddt          t          d	
           d d d            n# 1 swxY w Y   t          j        t          j	        j                  5  ddt          t          d	
           d d d            n# 1 swxY w Y   ddt          t          d	
          }t          |d          5 }|                                dz  k    sJ 	 d d d            n# 1 swxY w Y   d dt          t          d	
          }t          |d          5 }|                                dz  k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nc              3   $   K                V  d S rC   rY   )
remote_urltimeoutMockURLs     r@   mockurlz.test_download_file_wrong_size.<locals>.mockurl  s      giirI   )
tlscontextc                 T     t          dt          fi                       }|_        |S )N
MockOpener)typeobjectr7   )r  r   r   mock_openerr  s       r@   mockurl_builderz6test_download_file_wrong_size.<locals>.mockurl_builder  s,    7d<&B7799"rI   c                   ,    e Zd Z fdZfdZddZdS ).test_download_file_wrong_size.<locals>.MockURLc                 @    t          j        dz            | _        d S )N   a)rY  rZ  reader)r/  real_lengths    r@   r0  z7test_download_file_wrong_size.<locals>.MockURL.__init__  s    *TK%788DKKKrI   c                 &    dt                    iS )NzContent-Length)rR   )r/  report_lengths    r@   infoz3test_download_file_wrong_size.<locals>.MockURL.info  s    $c-&8&899rI   Nc                 6    | j                             |          S rC   )r  r  )r/  lengths     r@   r  z3test_download_file_wrong_size.<locals>.MockURL.read  s    ;##F+++rI   rC   )r   r   r   r0  r  r  )r  r  s   r@   r  r    s[        	9 	9 	9 	9 	9	: 	: 	: 	: 	:	, 	, 	, 	, 	, 	,rI   r  _build_urlopenerr  i  Fr   r  r  rC   )
contextlibcontextmanagerr   r   r   r(   r   rE  r  rF  ContentTooShortErrorr   r   rG  r7   r  )r   r  rV   r?   r  r  r  r  s       @@@@r@   test_download_file_wrong_sizer    s         +/       
, , , , , , , , , , , *,>PPP	v|8	9	9 , ,gU++++, , , , , , , , , , , , , , ,
 
v|,	-	- , ,gU++++, , , , , , , , , , , , , , ,
 MK	we	,	,	,B	b$ .1vvxx4+------. . . . . . . . . . . . . . . MK	we	,	,	,B	b$ .1vvxx4+------. . . . . . . . . . . . . . . . . .sH   >B%%B),B)C::C>C>/EE!EF;;F?F?c                 |   	 t          |           5  t          |           sJ 	 d d d            d S # 1 swxY w Y   d S # t          $ rs t          t          d          r.t	          j                    dk    rt          j        d           Y d S t          j	                    dk    rt          j        d           Y d S  w xY w)Ngeteuidr   z>We are root, we can't make a directory un-writable with chmod.WindowszgIt seems we can't make a driectory un-writable under Windows with chmod, in spite of the documentation.)
ry   rw   AssertionErrorrx  r3   r  r   r   platformsystemrc   s    r@   "test_can_make_directories_readonlyr    s5   (## 	- 	-"8,,,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-   2y!! 
	bjlla&7&7KP      _)++K=     
 s.   > 1> 5> 5> A
B;+B;9B;c                 $   | dz  }d}t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t          |           5  	 t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          t          d          r+t	          j                    dk    rt          j        d           n# t          $ r Y nw xY wd d d            n# 1 swxY w Y   t          |          |k    sJ d S )	Ntestr   r2   zw+zmore contents
r  r   z9We are root, we can't make a file un-writable with chmod.)
r7   r8   ry   rx  r3   r  r   r   r:   r   )rS   rV   rU   r?   s       r@   test_can_make_files_readonlyr    s   	F	BA	b# !	


              	h		 Y Y	Yb$ +1)***+ + + + + + + + + + + + + + +
 r9%% Y"*,,!*;*;WXXX	  	 	 	D		Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y R  A%%%%%%sh   :>>C0C&B<CB	CB	CAC0
C!C0 C!!C00C47C4c                 .    t                      | k    sJ d S rC   r   r   s    r@   test_read_cache_readonlyr    s    ~------rI   c                 N    | D ]!}t          |d          }|| |         k    sJ "d S r  r   r   rW   r?   s      r@   !test_download_file_cache_readonlyr     sF     & &!4(((N1%%%%%%& &rI   c                 :   |dz  }d}d}t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t                    5  t          ||d           d d d            n# 1 swxY w Y   t          |          rJ d S N	test-fileSome text or otherhttp://example.com/r2   T)remove_originalr7   r8   r   rE  r   r!   r#   )r   rS   r)  r*  r(  r?   s         r@   test_import_file_cache_readonlyr    1   +%H"G
C	h		 	               
w		 B BS(DAAAAB B B B B B B B B B B B B B Bs#######!   <A A  A??BBc                    dd}|                     t          d|           | dz  }d}d}t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t	          j        t          d          5  t          ||d	d	
           d d d            n# 1 swxY w Y   t          |          sJ d S )Nc                     t           j                            |           rt          t          j        d          t          d|  d          )Nos.rename monkeypatched outzFile z does not exist.)r3   r4   r^   r   r   EXDEVFileNotFoundErrorr   s     r@   	no_renamezCtest_import_file_cache_invalid_cross_device_link.<locals>.no_rename%  sF    7>>$ 	D%+'DEEE#$BD$B$B$BCCCrI   r9   r  r  r  r2   r  r\  T)r  replacerC   )	r   r3   r7   r8   r   rb  r$   r!   r#   )rS   r   r  r)  r*  r(  r?   s          r@   0test_import_file_cache_invalid_cross_device_linkr  $  sk   D D D D Hi000+%H"G
C	h		 	               
n,I	J	J	J P PS(D$OOOOP P P P P P P P P P P P P P P3s#   AA #A B""B&)B&c                     t          |          \  }}t          j        t                    5  t	          |d          }d d d            n# 1 swxY w Y   t          |          |k    sJ t          |          rJ d S r  )r   r   rb  r
   r   r   r#   )r   rZ   rW   rU   r?   s        r@   ,test_download_file_cache_readonly_cache_missr  8  s    
DAq	)	*	* ) )!4((() ) ) ) ) ) ) ) ) ) ) ) ) ) )Q1$$$$q!!!!!!!   A

AAc                     | D ]z}t          j        t                    5  t          |d          }d d d            n# 1 swxY w Y   || |         k    sJ t	          |          t	          | |                   k    sJ {d S NrL  r   r   rb  r
   r   r   r  s      r@   (test_download_file_cache_readonly_updater  @  s     B B\-.. 	1 	1ax000A	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1N1%%%%%A,~a/@"A"AAAAAA	B B   <A 	A 	c                 "    t                       d S rC   r   r  s    r@   +test_check_download_cache_works_if_readonlyr  H      rI   c                 .    t                      | k    sJ d S rC   r  r   s    r@   test_read_cache_fake_readonlyr!  U  s     2222222rI   c                 N    | D ]!}t          |d          }|| |         k    sJ "d S r  r   r   rW   r?   s      r@   &test_download_file_cache_fake_readonlyr$  Y  sG      + +!4((('******+ +rI   c                     t          j        t                    5  t          j                     d d d            d S # 1 swxY w Y   d S rC   )r   rE  r   r   r   r   s    r@    test_mkdtemp_cache_fake_readonlyr&  _  s    	w		                   s   ;??c                     t          j        t                    5  t                      5  	 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 rC   )r   rE  r   r   r   s    r@   test_TD_cache_fake_readonlyr(  d  s    	w		  !! 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s,   A7A;	A;	AAAc                 :   |dz  }d}d}t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t                    5  t          ||d           d d d            n# 1 swxY w Y   t          |          rJ d S r  r  )r   rS   r)  r*  r(  r?   s         r@   $test_import_file_cache_fake_readonlyr*  j  r	  r
  c                     t          |          \  }}t          j        t                    5  t	          |d          }d d d            n# 1 swxY w Y   t          |          rJ t          |          |k    sJ d S r  )r   r   rb  r
   r   r#   r   )r   rZ   rW   rU   r?   s        r@   1test_download_file_cache_fake_readonly_cache_missr,  v  s    
DAq	)	*	* ) )!4((() ) ) ) ) ) ) ) ) ) ) ) ) ) )q!!!!!Q1$$$$$$r  c                     | D ]z}t          j        t                    5  t          |d          }d d d            n# 1 swxY w Y   || |         k    sJ t	          |          t	          | |                   k    sJ {d S r  r  r#  s      r@   -test_download_file_cache_fake_readonly_updater.  ~  s      G G\-.. 	1 	1ax000A	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1'*****A,/B1/E"F"FFFFFF	G Gr  c                 "    t                       d S rC   r  r   s    r@   0test_check_download_cache_works_if_fake_readonlyr0    r  rI   c                 
   d}t                      rJ t          |          rJ t          |t                    D ]\  }}t          |d|           t                      rJ t	          t          |                    t          k    sJ t                      t          |          k     sJ t          |t          dz             D ]\  }}t          |d           t	          t                                t          dz   k    sJ t	          t          |                    t          k    sJ t                      t          |          k    sJ t          t                                t          t                                                                k    sJ t          t          |                    t          t          |                                                    k    sJ t                      D ]&}t          |          sJ t          ||          rJ 't          |          D ]&}t          |          rJ t          ||          sJ 't                       t          |           t                      d         }t          j        t                    5  t          |dg |           d d d            n# 1 swxY w Y   t          ||           t	          t                                t          dz   k    s
J d	            t	          t          |                    t          k    s
J d	            t          |g d
          }t          j        t                    5  t          ||           d d d            n# 1 swxY w Y   t          |          d         }t          j        t                    5  t          |dg            d d d            n# 1 swxY w Y   t          |g d|          }t          j        t                    5  t          |           d d d            n# 1 swxY w Y   t          ||           t	          t                                t          dz   k    sJ t	          t          |                    t          dz
  k    sJ t          |           t	          t                                t          k    sJ t	          t          |                    t          dz
  k    sJ t          |           t	          t                                t          k    sJ t          |          rJ t                       t                      rJ t          |          rJ d S )Nbogus_cache_namer  T)r   r  r`  r   r   )r   r   r  zwrong pkgname should do nothing)r   r   r   )r   r   r  )r   r   r   r   r   r   r   r   rn  r#   r   r   rE  rQ  r   r  )	rd   rZ   r/   rW   r  rT   r?   uafas	            r@   test_pkgname_isolationr6    sb   A     q))))))z3'' 0 01atQ/////     q)))**c1111 0 ; ; ;;;;;z37++ % %1at$$$$$  !!S1W,,,,q)))**c1111 0 ; ; ;;;;;  !!S)9)9)>)>)@)@%A%AAAAAq)))**c.2K2K2K2P2P2R2R.S.SSSSS 1 1q!!!!!"1a0000000Q''' - -"1%%%%%q!,,,,,,, #### 	!A	x	 	  < <atR;;;;< < < < < < < < < < < < < < <A&&&&  !!S1W,,,.O,,,q)))**c1113T111a4000A	|	$	$ + +Q****+ + + + + + + + + + + + + + + 
	#	#	#A	&B	x	 	  2 2bb11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
r2T1	=	=	=B	|	$	$ ! !R   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Q''''  !!S1W,,,,q)))**cAg5555  !!S((((q)))**cAg5555####  !!S((((q))))))     q))))))))sH   !KKK)NNNO  O$'O$P33P7:P7c                    d}t                      rJ t          |          rJ t          |t                    D ]\  }}t          |d           t	          j                    5 }t          |           |                                }d d d            n# 1 swxY w Y   t	          j        |          5 }t          ||           d d d            n# 1 swxY w Y   t                       t          |           t          t                                t          t          |                    k    sJ t          |          }t                                                      D ];\  }}	|	||         k    sJ t          |	          t          ||                   k    sJ <t                       t	          j                    5 }t          ||           |                                }d d d            n# 1 swxY w Y   t	          j        |          5 }t          |           d d d            n# 1 swxY w Y   t          t                                t          t          |                    k    sJ d S )Nr2  r3  Tr   )r   r   r   r   rY  rZ  r   r[  r    r   r   r   r   r   r   )
rd   rZ   r/   rW   r  r?   r0   ccar   r   s
             r@   test_transport_cache_via_zipr9    sG   A     q))))))z3'' % %1at$$$$$	 a   JJLL               
A ,!a++++, , , , , , , , , , , , , , , ####  !!S)C)C)C%D%DDDDD

#
#
#C  &&(( A A1CF{{{{ ##'8Q'@'@@@@@@	 a++++JJLL               
A !!a   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !   !!S)C)C)C%D%DDDDDDDsH   $$BBB3CCC&G55G9<G9H00H47H4c                    d}t                      rJ t          |          rJ t          d t          |t                    D             |           t                      rJ t	          t          |                    t          k    sJ d S )Nr2  r3  c                     g | ]\  }}|S rY   rY   r|   s      r@   r   z;test_download_parallel_respects_pkgname.<locals>.<listcomp>  s    HHHfq!HHHrI   )r   r   r   r   r   )rd   rZ   r/   s      r@   'test_download_parallel_respects_pkgnamer<    s    A     q))))))HHz30G0GHHHRSTTTT     q)))**c111111rI   z>This platform is unable to rename directories that are in use.c                     t          |          \  }}t          t          |d                    5  t          |           t	          |          rJ t                       d d d            d S # 1 swxY w Y   d S r  )r   r7   r   r   r#   r   rd   rZ   rW   rU   s       r@   test_removal_of_open_filesr?    s    
 
DAq	mAT***	+	+  Q"1%%%%%                 s   /A--A14A1c                 l   t          |          \  }}t          t          |d                    5  t          |          \  }}t          |d|g          }t                       t	          |          sJ t          |          |k    sJ 	 d d d            n# 1 swxY w Y   t	          |          sJ d S )NTr   rL  r   )r   r7   r   r   r#   r   )rd   rZ   rW   rU   r   r   r?   s          r@   test_update_of_open_filesrA    s   
 
DAq	mAT***	+	+ * *j!!B!8bT:::q!!!!! ##r)))))* * * * * * * * * * * * * * * 1s   ABBBc                 |   d }t           r&|                    t          j        j        d|           t          |          \  }}t          t          |d                    5  t          j	        t          d          5  t          |           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 )Nc                  R    t          j        t          d                     t          Nzin usewarningswarnr
   r:   r   s     r@   	no_rmtreez5test_removal_of_open_files_windows.<locals>.no_rmtree  !    )(33444rI   _rmtreeTr   
.*in use.*r\  )CAN_RENAME_DIRECTORY_IN_USEr   r   r   r(   r   r7   r   r   rb  r
   r   )rd   rZ   r   rH  rW   rU   s         r@   "test_removal_of_open_files_windowsrM    sB      # FGM.	9EEE
DAq	mAT***	+	+ $ $\-]CCC 	$ 	$ ###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s6   !B1=BB1B	B1 B	!B11B58B5c                 Z   d }t           r&|                    t          j        j        d|           t          |          \  }}t          t          |d                    5  t          |          \  }}t          j	        t          d          5  t          |d|g          }d d d            n# 1 swxY w Y   t                       t          |          sJ t          |          |k    sJ 	 d d d            n# 1 swxY w Y   t          t          |dg                     |k    sJ d S )	Nc                  R    t          j        t          d                     t          rD  rE  r   s     r@   rH  z4test_update_of_open_files_windows.<locals>.no_rmtree'  rI  rI   rJ  Tr   rK  r\  rL  r   )rL  r   r   r   r(   r   r7   r   r   rb  r
   r   r#   r   )	rd   rZ   r   rH  rW   rU   r   r   r?   s	            r@   !test_update_of_open_files_windowsrP  &  s      # FGM.	9EEE
DAq	mAT***	+	+ * *j!!B\-]CCC 	? 	?ax">>>A	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?q!!!!! ##r)))))* * * * * * * * * * * * * * * ]1D"EEEFF!KKKKKKs6   !.C;B/#C;/B3	3C;6B3	77C;;C?C?c                    t          |          \  }}t          j        dd          5  t          j        t
          j        j                  5  t          |           d d d            n# 1 swxY w Y   t          |          rJ t          j        t
          j        j                  5  t          t                     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 )Nallow_internetF)r   r   set_tempr   rE  r  rF  rG  r   r#   r   r>  s       r@   test_no_allow_internetrT  :  s   
DAq	'	/	/ # #]6<011 	 	!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	"1%%%%%]6<011 	# 	#'"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#	# # # # # # # # # # # # # # # # # #sY   $C A(C (A,	,C /A,	07C 'C<C C	C C	C  C$'C$c                 
   t          |          \  }}t          |d           t                      }t          j                            |d          }t          |          sJ t          |           t          |          sJ d S )NTr   r   )r   r   r   r3   r4   r5   r#   r   )rd   rZ   rW   rU   r  bad_filenames         r@   ,test_clear_download_cache_not_too_aggressiverW  E  s    
DAq!4    #%%E7<<z22L1&&&1rI   c                    t          |          \  }}t          |d          }t          |           t          |          rJ t          |          \  }}t          |d          }t          t          j                            t          j                            |          d                     t          |          rJ t          |          \  }}t          |d          }t          t          j                            |                     t          |          rJ t          |          \  }}t          |d          }t          t          j                            |          dz              t          |          rJ t          |          \  }}t          |d          }t          |          }t          |           t          |          rJ d S )NTr   r(  /)	r   r   r   r#   r3   r4   r5   r  r   )rd   rZ   rW   rU   r?   rq  s         r@   "test_clear_download_cache_variantsrZ  P  s   
DAqat$$$Aq!!!!! 
DAqat$$$Abgooa&8&8%@@AAAq!!!!! 
DAqat$$$A++,,,q!!!!! 
DAqat$$$A++c1222q!!!!! 
DAqat$$$AQAq!!!!!!!rI   c                 T   dd}t          |          \  }}t          |d           |                    t          d|           t	          |          sJ t          j        t          d          5  t          |           d d d            n# 1 swxY w Y   t	          |          rJ d S )Nc                 6    t          t          j        d          Nr  )r   r   r  r   s     r@   r  zFtest_clear_download_cache_invalid_cross_device_link.<locals>.no_renamet      ek#@AAArI   Tr   r9   r  r\  rC   )	r   r   r   r3   r#   r   rb  r$   r   rd   rZ   r   r  rW   rU   s         r@   3test_clear_download_cache_invalid_cross_device_linkr`  q  s    B B B B 
DAq!4    Hi0001	n,I	J	J	J    Q                             q!!!!!!!s   0BBBc                 4   dd}t          |          \  }}t          |d           |                    t          d|           t	          |          sJ t          j        t          d          5  t          |           d d d            d S # 1 swxY w Y   d S )Nc                 6    t          t          j        d          r]  )r   r   EBUSYr   s     r@   r  z<test_clear_download_cache_raises_os_error.<locals>.no_rename  r^  rI   Tr   r9   r  r\  rC   )	r   r   r   r3   r#   r   rb  r
   r   r_  s         r@   )test_clear_download_cache_raises_os_errorrd    s    B B B B 
DAq!4    Hi0001	)1N	O	O	O    Q                                   s   0BBBIS_CRONz.Flaky/too much external traffic for regular CIc                 (    d}t          |           dS )z>Test that download automatically enables TLS/SSL when requiredz`ftp://anonymous:mail%40astropy.org@gdc.cddis.eosdis.nasa.gov/pub/products/iers/finals2000A.dailyNr   )rd   r(  s     r@   test_ftp_tls_autorg    s     mC#rI   basezhttp://example.comzhttps://example.comc                 ,   |dz   }|}t          |          \  }}t          |d|g           t          |          sJ t          |dg            t          |           t          |          rJ t          |          rJ t          |d|g           d S )NrY  Tr   )r   r   r#   r   )rd   rZ   rh  slashno_slashrW   rU   s          r@   test_url_trailing_slashrl    s    3JEH
DAq%taS11118$$$$$($3333"""x(((((u%%%%%($444444rI   c                 r    t          |          \  }}t          dd|g           t          d          rJ d S )Nzfile://Tr   zfile:///r   r>  s       r@   test_empty_urlrn    sD    
DAq)4!5555z*******rI   c                  6   d} t          j        t          j        j                  5 }t          |            d d d            n# 1 swxY w Y   |                                }d}g d}|D ]
}||v rd} n|s#J d| dd                    |                       d S )NzPftp://anonymous:mail%40astropy.org@nonexisting/pub/products/iers/finals2000A.allF)zName or service not knownz,nodename nor servname provided, or not knownzgetaddrinfo failedz$Temporary failure in name resolutionz#No address associated with hostnameTzGot z, expected one of these: ,)r   rE  r  rF  rG  r   exconlyr5   )
faulty_urlexcinfoerrmsg	found_msgpossible_msgscur_msgs         r@   4test_download_ftp_file_properly_handles_socket_errorrx    s   cJ	v|,	-	- "j!!!" " " " " " " " " " " " " " "__FI  M !  fIE  WWWVWWchh}>U>UWWWWWWWs   AA	Aru  ans)	)zhttp://googlecomT)zhttps://google.comT)zftp://google.comT)zsftp://google.comT)zssh://google.comT)z!file:///c:/path/to/the%20file.txtT)z
google.comF)zC:\\path\\file.docxF)zdata://fileFc                 ,    t          |           |u sJ d S rC   )r"   ry  s     r@   test_string_is_url_checkr|    s!     !99rI   )F)r6  r  r   r  rY  rN   r3   rD   r  r  r  rf   r  r   urllib.errorr  urllib.parseurllib.requestrF  concurrent.futuresr   r   r   r   py.pathr  r   astropy.utils.datar   r   ry  astropy.configr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   astropy.utils.exceptionsr$   environr   r%   r   TESTURL2ra  r4   r5   r  "astropy.utils.compat.optional_depsr*   r+   r   r  r  rA   rL  rH   fixturerZ   r`   rd   rr   rw   r  ry   r   r   r   r   r   r   r   r   markremote_datar   r   r   r   parametrizer   skipif
startswithr	  r  r  r#  r2  r5  r;  r=  r@  rC  rH  rN  rR  rX  re  rh  rv  r  r  r  r  r  slowr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r  xfailr)  r:  r<  r?  rA  rD  rL  rO  rS  rU  rW  r\  r`  rf  rh  rl  rr  Ebyteru  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r!  r$  r&  r(  r*  r,  r.  r0  r6  r9  r<  r?  rA  rM  rP  rT  rW  rZ  r`  rd  rg  rl  rn  rx  r|  rY   rI   r@   <module>r     s          				     				      



               1 1 1 1 1 1       ; ; ; ; ; ; ; ;                                                                                 : 4 3 3 3 3 3Z^^D'""f,
".'!!"',,v{"C"CDD	 A @ @ @ @ @ @ @      " :9;; 1 1 1 
! 
! 
! # # #   
9 
9 
9 
9   1 1 1 # # #" # # #>L L L	 	 	+ + +4 4 4: : :F F F 	**! ! +*!
        B eT]33)" )" 43)"X \U##*4U   ) ) )  \U##*4U   D D D \U##*4U        F  :#> #> #>L udm44, , 54,(* * ** * ** * ** * ** * *= = =6 	**! ! +*!
 	**J J +*J& 	**! ! +*!(! ! !" 	**
8 
8 +*
8 D'?33  43*) ) )- - -.) ) )C C C&   2"0 "0 "0J \U##*4U   * * *$ \U##*4U   : : :$ 	**0 0 +*0

% 
% 
% 	**
 
 +*
 $>$>$>??# # @?# NNN 3 3 3  )+;<===  >=*: : :,I I I  0: : :  " " " 	**C@ C@ +*C@P +##K8H#II	
 	
 	
 	+##L9J#KK	
 	
 	
   "/ / /> 	**@ @ +*@< < < 	**$ $ +*$	, 	, 	,  .  &7 7 7) ) ) ; ; ;; ; ;9 9 9 H H H.# # #
	% 	% 	%( ( ( *CQ\)RSS8 8 TS8
9 9 9$% % %( ( (       
 
 
	 	 	! ! !<% % %Z Z Zz          " " "" " "	 	 	  (% % %(
 
 
. . ."*. *. *.Z  $& & &". . .& & &	$ 	$ 	$     (" " "B B B  3 3 3+ + +  
  	$ 	$ 	$% % %G G G  B* B* B*JE E ED2 2 2 ##K    	  ##K    	 $ $ $L L L(# # #  " " "B" " ""      82:>>)W--8;      	 
 "68M!NOO5 5 PO5$+ + + X X X( 
 
 
     rI   