a
    ߙfb&A                     @   s  d dl Z d dlZd dlmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZ e jd	d
ZeedeZzejd W n ey   d
ZY n0 dZe
e j ddZ!dd Z"dd Z#G dd dZ$G dd dZ%ej&'dG dd dZ(G dd dZ)ej&j*dd Z+ej&j'd	dd ej&j*d!d" Z,ej&j-d#d ej&j*d$d% Z.ej&j*d&d' Z/dS )(    N)Path)assert_quantity_allclose)get_pkg_data_filename)iers)units)QTable)Time	TimeDeltaCIFFileNotFoundErrorzfinals2000A.allTdataZiers_a_excerptc                   C   s   dt j_d S )NTr   confauto_download r   r   Alib/python3.9/site-packages/astropy/utils/iers/tests/test_iers.pysetup_module   s    r   c                   C   s   dt j_d S )NFr   r   r   r   r   teardown_module%   s    r   c                   @   s>   e Zd ZdZejdejej	fdd Z
dd Zdd Zd	S )
	TestBasicz.Basic tests that IERS_B returns correct valuesiers_clsc                 C   s  |   |jdu sJ | }|jdus,J |j|u s:J t|tsHJ t|tjsXJ |d jtj	 
 spJ |d jtj 
 sJ |d jtj 
 sJ tg d}tg d}|||}t|tjsJ |jtj	 
 sJ t|g dtj dtj d	 tt  |d
d\}}W d   n1 s<0    Y  |j||dd\}}t|tjkspJ |jd
ddd\}}	|	tjksJ t||ddd}
||
}t|g dtj dtj d	 t|dd dksJ dS )z/Test the default behaviour for IERS_B and IERS.NUT1_UTCPM_xPM_y   @BAr   r      BAr   g6?g%:ps?gNg?        g      ?gI#=a7r   g<q?g^Ss?皙?Zatol   vH7Br   TZreturn_statusjdZutc)formatZscale   )close
iers_tableopen
isinstancer   r   IERS_Bunitusecondis_unity	arcsecondnparrayut1_utcZQuantityr   smspytestraises
IndexErrorallFROM_IERS_BTIME_BEYOND_IERS_RANGEr   len)selfr   iers_tabjd1jd2r3   ut1_utc2status2Zut1_utc4Zstatus4tut1_utc3r   r   r   test_simple-   sD    
0

zTestBasic.test_simplec                 C   s~   t j  t jt j t jjd us(J tt jjts:J t j  t	t
 t jd W d    n1 sp0    Y  d S )Nzsurely this does not exist)r   r+   r'   r)   ZIERS_B_FILEr(   r*   r   r6   r7   FILE_NOT_FOUND_ERRORr=   r   r   r   test_open_filenameY   s    

zTestBasic.test_open_filenamec                 C   sN   t j  t jtt  t jjd us.J tt jjt	s@J t j  d S )N)
r   IERS_Ar'   r)   r   IERS_A_EXCERPTas_urir(   r*   r   rG   r   r   r   test_open_network_urlb   s
    
zTestBasic.test_open_network_urlN)__name__
__module____qualname____doc__r6   markZparametrizer   r+   ZIERSrE   rH   rL   r   r   r   r   r   *   s
   
+	r   c                   @   s   e Zd Zdd ZdS )TestIERS_AExcerptc           	      C   sP  t jt}|d jtj  s$J d|d v s4J d|d v sDJ d|d v sTJ t	|d dk|d dkB |d dkB sJ |d jtj
  sJ |d jtj
  sJ d|d v sJ d|d v sJ d|d v sJ t	|d dk|d dkB |d dkB sJ |d	 jtj  s,J |d
 jtj  sFJ d|d v sXJ d|d v sjJ d|d v s|J t	|d dk|d dkB |d dkB sJ tg ddd}|j|dd\}}|d t jksJ t	|dd  t jks J t|g dtj dtj d |j|dd\}}}|d t jksFJ t	|dd  t jksdJ t| t| t|g dtj
 dtj d t|g dtj
 dtj d |j|dd\}}}|d t jksJ t	|dd  t jksJ t|g dtj dtj
 d t|g dtj dtj
 d t|d d dksLJ d S )Nr   PZUT1FlagIBdX_2000AdY_2000AZNutFlagr   r   Z	PolPMFlag)g    @g    @g    @mjdr%   Tr#   r      )gQxIw߿guP.2߿g?
z߿r    r!   )gjtg+ηgʡEg      ?)gMb?g#~j?g;On?)gݲCÖn?g>x҆r?gUr?)g<X?g{/L
?g@7n1?r&   )r   rI   r)   rJ   r,   r-   r.   r/   r1   r9   Zmarcsecr0   r   r3   r:   ZFROM_IERS_Ar   r4   r5   Zdcip_xyprintZnarcsecZpm_xyZarcsecr<   )	r=   r>   rC   r3   statusZdcip_xZdcip_yZpm_xZpm_yr   r   r   rE   k   s~    






zTestIERS_AExcerpt.test_simpleNrM   rN   rO   rE   r   r   r   r   rR   j   s   rR   znot HAS_IERS_Ac                   @   s   e Zd Zdd ZdS )
TestIERS_Ac                 C   s   t j  t j }tg d}tg d}|j||dd\}}t|t jksXJ t	|g dt
j dt
j d |jdd	dd\}}|t jksJ t }|j|dd\}	}
|
t jksJ |	d	ksJ d
S )z;Test that open() by default reads a 'finals2000A.all' file.r   r   Tr#   r   r    r!   r"   r   N)r   rI   r'   r)   r1   r2   r3   r9   r:   r   r-   r4   r5   r;   r   nowZFROM_IERS_A_PREDICTION)r=   r>   r?   r@   r3   r\   rA   rB   ZtnowrD   Zstatus3r   r   r   rE      s"    


zTestIERS_A.test_simpleNr]   r   r   r   r   r^      s   r^   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
jdd ZdS )TestIERS_Autoc                 C   sz   d| _ d| _ttjdd| _ttjdd| _t| j	 | _
t| j	 | _t tdddt| j   | _d	S )
z*Set up useful data for the tests.
        (   g      >@r   zfinals2000A-2016-02-30-testzfinals2000A-2016-04-30-test
   r$   rY   N)Namer   ospathjoinZiers_a_file_1Ziers_a_file_2r   rK   iers_a_url_1iers_a_url_2r   r_   r	   r1   ZarangerC   rG   r   r   r   setup_class   s    zTestIERS_Auto.setup_classc                 C   s   t j  dS )z#Run this after every test.
        N)r   	IERS_Autor'   )r=   methodr   r   r   teardown_method   s    zTestIERS_Auto.teardown_methodc                 C   s2  t jd| j t jd| j t jd| j ttd}t j	 }t
 2 t
dt j || jj| jj W d   n1 s0    Y  W d   n1 s0    Y  W d   n1 s0    Y  W d   n1 s0    Y  W d   n1 s0    Y  t|jt j| jks.J dS )zRegression test: make sure the error message in
        IERS_Auto._check_interpolate_indices() is formatted correctly.
        iers_auto_urlZiers_auto_url_mirrorauto_max_ageignoreN)r   r   set_temprh   rd   r6   r7   
ValueErrorrk   r)   warningscatch_warningssimplefilterIERSStaleWarningr3   rC   r?   r@   strvalueZINTERPOLATE_ERRORr%   )r=   errr(   r   r   r   !test_interpolate_error_formatting   s    

z/TestIERS_Auto.test_interpolate_error_formattingc              	   C   s   t jd| j\ t jdd. t j }|| jj| jj	}W d   n1 sT0    Y  W d   n1 sr0    Y  t
|tjsJ |j| jfksJ t|tdg| j tj  dS )zqMake sure that iers.INTERPOLATE_ERROR's advice about setting
        auto_max_age = None actually works.
        rn   ro   NV88o̿)r   r   rq   rh   rk   r)   r3   rC   r?   r@   r*   r1   Zndarrayshaperc   r   r2   r-   r4   )r=   r(   Zdeltar   r   r   test_auto_max_age_none   s    
Pz$TestIERS_Auto.test_auto_max_age_nonec              
   C   s   t jd| j t jddX tt.}t j }|	| j
j| j
j}W d   n1 s`0    Y  W d   n1 s~0    Y  W d   n1 s0    Y  t|jdksJ dS )z9Check that the minimum auto_max_age is enforced.
        rn   ro   g      @NzAIERS auto_max_age configuration value must be larger than 10 days)r   r   rq   rh   r6   r7   rr   rk   r)   r3   rC   r?   r@   rw   rx   )r=   ry   r(   _r   r   r   test_auto_max_age_minimum   s    
nz'TestIERS_Auto.test_auto_max_age_minimumc                 C   sN   t jdd t j }W d    n1 s.0    Y  t|t ju sJJ d S )Nr   F)r   r   rq   rk   r)   typer+   )r=   rC   r   r   r   test_no_auto_download  s    (z#TestIERS_Auto.test_no_auto_downloadc              
   C   s  t jd| j t j }|d d dtj ks8J |d d dtj ksRJ |jd }t	|dd	d
tj  |_
t|t	ddd	jjdsJ t|t	ddd	jjdsJ t	|dd	dtj  |_
t|t	ddd	jjdsJ tjt jddT}tjtdd$ |t	ddd	j W d    n1 s>0    Y  W d    n1 s^0    Y  t|dkszJ tjt jdd(}|jt	ddd	jdd W d    n1 s0    Y  t|dksJ t jdd $ |t	ddd	j W d    n1 s0    Y  W d    n1 s00    Y  t jd| j t|t	ddd	jjdspJ t|t	ddd	jjdsJ |d d dtj ksJ |d d dtj ksJ W d    n1 s0    Y  d S )Nrn   MJDr   g    @g    `@predictive_mjdrX   rY      iP  g֍?i`  r{   <   z%IERS_Auto predictive values are older)matchz4interpolating from IERS_Auto using predictive valuesrZ   Tr#   ro   g333333ӿg    @)r   r   rq   rh   rk   r)   r-   dmetar   Z	_time_nowr1   Zallcloser3   r$   rx   r6   warnsrv   r7   rr   r<   ri   )r=   Zdatr   r   r   r   r   rE   	  s6    

"""T8T$$zTestIERS_Auto.test_simpleN)rM   rN   rO   rj   rm   rz   r}   r   r   r6   rQ   remote_datarE   r   r   r   r   r`      s   
r`   c                  C   s   t j } t j }| d |d d k}t|r:J d|t| d M }t|d | d | }tt|dksJ dt| d | |d | ksJ dD ]*}t	| | | || | dd	
|d
 qd S )Nr   r   z.IERS B covers all of IERS A: should not happenZ	UT1_UTC_BrZ   zValid region not contiguous)r   r   r   rV   rW   gV瞯<zDBug #9206 IERS B parameter {} not copied over correctly to IERS Auto)Zrtolerr_msg)r   rk   r)   r+   r1   r9   ZisfiniteZsearchsortedZdiffr   r%   )ArU   Zok_AZi_Bnamer   r   r   -test_IERS_B_parameters_loading_into_IERS_AutoB  s    

"r   zFlaky on CI)reasonc                  C   sP   t jjt jdd} z,t| dks$J d| jv s2J W t j  nt j  0 d S NFcacher   Z	UT1_UTC_A)r   rI   r)   Z
IERS_A_URLr<   colnamesr'   Z	iersa_tabr   r   r   test_iers_a_dl\  s
    r   z/https://github.com/astropy/astropy/issues/12998c                  C   sP   t jjt jdd} z,t| dks$J d| jv s2J W t j  nt j  0 d S r   )r   rI   r)   ZIERS_A_URL_MIRRORr<   r   r'   r   r   r   r   test_iers_a_dl_mirrorh  s
    r   c                  C   sP   t jjt jdd} z,t| dks$J d| jv s2J W t j  nt j  0 d S )NFr   r   r   )r   r+   r)   Z
IERS_B_URLr<   r   r'   )Z	iersb_tabr   r   r   test_iers_b_dlt  s
    r   )0re   rs   pathlibr   r6   Znumpyr1   Zastropy.tests.helperr   Zastropy.utils.datar   Zastropy.utils.iersr   Zastropyr   r-   Zastropy.tabler   Zastropy.timer   r	   environgetr
   getattr__builtins__OSErrorrF   rI   r)   Z
HAS_IERS_Arf   rg   rJ   r   r   r   rR   rQ   Zskipifr^   r`   r   r   r   Zxfailr   r   r   r   r   r   <module>   sF   
@F
y


