
    IR-eL                        d dl Z 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mZ d dlmZ d d	lmZ e j                            d
d          Z eede          Z	 ej                             d           dZ!n# e$ r dZ!Y nw xY w ee j"        #                    dd                    Z$d Z%d Z& G d d          Z'd Z( G d d          Z)ej*        +                    e! d           G d d                      Z, G d d          Z-ej*        j.        d             Z/ej*        +                    d
d          ej*        j.        d                          Z0ej*        j.        d!             Z1ej*        j.        d"             Z2ej*        j.        d#             Z3ej*        j.        d$             Z4dS )%    N)Path)units)set_temp_cache)QTable)assert_quantity_allclose)Time	TimeDelta)get_pkg_data_filename)iersCIFFileNotFoundErrorzfinals2000A.allTdataiers_a_excerptc                  (    dt           j        _        d S )NTr   confauto_download     Blib/python3.11/site-packages/astropy/utils/iers/tests/test_iers.pysetup_moduler   !   s     #DIr   c                  (    dt           j        _        d S )NFr   r   r   r   teardown_moduler   '   s    #DIr   c                   ~    e Zd ZdZej                            dej        ej	        f          d             Z
d Zd ZdS )	TestBasicz.Basic tests that IERS_B returns correct valuesiers_clsc                    |                                  |j        J |                                }|j        J |j        |u sJ t          |t                    sJ t          |t
          j                  sJ |d         j        t          j	        z  
                                sJ |d         j        t          j        z  
                                sJ |d         j        t          j        z  
                                sJ t          j        g d          }t          j        g d          }|                    ||          }t          |t          j                  sJ |j        t          j	        z  
                                sJ t!          |g dt          j        z  dt          j        z  	           t'          j        t*                    5  |                    d
d          \  }}ddd           n# 1 swxY w Y   |                    ||d          \  }}t          j        |t
          j        k              sJ |                    d
dd          \  }}	|	t
          j        k    sJ t3          ||dd          }
|                    |
          }t!          |g dt          j        z  dt          j        z  	           t5          |dd                   dk    sJ 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?皙?atol   vH7Br%   Treturn_statusjdutc)formatscale   )close
iers_tableopen
isinstancer   r   IERS_Bunitusecondis_unity	arcsecondnparrayut1_utcQuantityr   smspytestraises
IndexErrorallFROM_IERS_BTIME_BEYOND_IERS_RANGEr   len)selfr   iers_tabjd1jd2r?   ut1_utc2status2ut1_utc4status4tut1_utc3s               r   test_simplezTestBasic.test_simple/   s    	"***==??"..."h....(F+++++(DK00000#(183==????? %3==????? %3==?????hNNNOOhEEEFF""3,,'1:.....qx'1133333 GGG!#Mqt	
 	
 	
 	
 ]:&& 	< 	< ( 0 0s ; ;Hg	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< %,,S#T,JJ'vg!1122222$,,T3d,KK'$55555 c$e444##A&& GGG!#Mqt	
 	
 	
 	
 8BQB<  A%%%%%%s   G66G:=G:c                    t           j                                         t           j                            t           j                   t           j        j        J t          t           j        j        t                    sJ t           j                                         t          j	        t                    5  t           j                            d           d d d            d S # 1 swxY w Y   d S )Nzsurely this does not exist)r   r7   r3   r5   IERS_B_FILEr4   r6   r   rC   rD   FILE_NOT_FOUND_ERRORrJ   s    r   test_open_filenamezTestBasic.test_open_filename_   s    )***{%111$+0&99999]/00 	; 	;K9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   8 C%%C),C)c                 v   t           j                                         t           j                            t	          t
                                                               t           j        j        J t          t           j        j        t                    sJ t           j                                         d S )N)
r   IERS_Ar3   r5   r   IERS_A_EXCERPTas_urir4   r6   r   rX   s    r   test_open_network_urlzTestBasic.test_open_network_urlh   s    n--4466777{%111$+0&99999r   N)__name__
__module____qualname____doc__rC   markparametrizer   r7   IERSrT   rY   r^   r   r   r   r   r   ,   so        88[Z$+ty)ABB-& -& CB-&^; ; ;    r   r   c                     t          t          j                            dd                    } t          j                            | t          dd          d          }t          |t                    sJ d|j	        vsJ d	S )
zACheck that the instructions given in `IERS_B.read` actually work.r   iers_b_old_style_excerptzdata/ReadMe.eopc04_IAU2000zastropy.utils.iers)package   )readme
data_startPM_x_dotN)
r
   ospathjoinr   r7   readr6   r   colnames)old_style_fileexcerpts     r   test_IERS_B_old_style_excerptrt   p   s     +
V788 N k$(2F
 
 
    G gv&&&&&W-------r   c                       e Zd Zd ZdS )TestIERS_AExcerptc                    t           j                            t                    }|d         j        t
          j        z                                  sJ d|d         v sJ d|d         v sJ d|d         v sJ t          j	        |d         dk    |d         dk    z  |d         dk    z            sJ |d         j        t
          j
        z                                  sJ |d         j        t
          j
        z                                  sJ d|d         v sJ d|d         v sJ d|d         v sJ t          j	        |d         dk    |d         dk    z  |d         dk    z            sJ |d	         j        t
          j        z                                  sJ |d
         j        t
          j        z                                  sJ d|d         v sJ d|d         v sJ d|d         v sJ t          j	        |d         dk    |d         dk    z  |d         dk    z            sJ t          g dd          }|                    |d          \  }}|d         t           j        k    sJ t          j	        |dd          t           j        k              sJ t!          |g dt
          j        z  dt
          j        z             |                    |d          \  }}}|d         t           j        k    sJ t          j	        |dd          t           j        k              sJ t)          |           t)          |           t!          |g dt
          j
        z  dt
          j        z             t!          |g dt
          j
        z  dt
          j        z             |                    |d          \  }}}|d         t           j        k    sJ t          j	        |dd          t           j        k              sJ t!          |g dt
          j        z  dt
          j
        z             t!          |g dt
          j        z  dt
          j
        z             t1          |d d                   dk    sJ d S )Nr   PUT1FlagIBdX_2000AdY_2000ANutFlagr   r    	PolPMFlag)g    @g    @g    @mjdr0   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?r2   )r   r[   r5   r\   r8   r9   r:   r;   r=   rF   marcsecr<   r   r?   rG   FROM_IERS_Ar   rA   rB   dcip_xyprintnarcsecpm_xyarcsecrI   )	rJ   rK   rR   r?   statusdcip_xdcip_ypm_xpm_ys	            r   rT   zTestIERS_AExcerpt.test_simple   s    ;##N33#(183==?????hy)))))hy)))))hy)))))vi C'	"c)+	"c)+
 
 	
 	
 	
 $)AI5??AAAAA$)AI5??AAAAAhy)))))hy)))))hy)))))vi C'	"c)+	"c)+
 
 	
 	
 	
  %3==????? %3==?????h{+++++h{+++++h{+++++vk"c)$+-$+-
 
 	
 	
 	
 ,,,U;;;"**1D*AAayD,,,,,vfQRRjD$4455555 	!999AC?cADj	
 	
 	
 	
 "*!1!1!4!1!H!HayD,,,,,vfQRRjD$4455555 	ff ,,,qy8sQY	
 	
 	
 	
 	!)))AI5A	M	
 	
 	
 	
 &^^AT^BBdFayD,,,,,vfQRRjD$4455555 00018;#	/	
 	
 	
 	
 	!00018;#	/	
 	
 	
 	

 8BQB<  A%%%%%%r   Nr_   r`   ra   rT   r   r   r   rv   rv      s(        H& H& H& H& H&r   rv   zrequires IERS_A)reasonc                       e Zd Zd ZdS )
TestIERS_Ac                    t           j                                         t           j                                        }t	          j        g d          }t	          j        g d          }|                    ||d          \  }}t	          j        |t           j        k              sJ t          |g dt          j        z  dt          j        z             |                    dd	d          \  }}|t           j        k    sJ t          j                    }|                    |d          \  }	}
|
t           j        k    sJ |	d	k    sJ d
S )z;Test that open() by default reads a 'finals2000A.all' file.r!   r$   Tr,   r&   r(   r)   r+   r%   N)r   r[   r3   r5   r=   r>   r?   rF   rG   r   r9   rA   rB   rH   r   nowFROM_IERS_A_PREDICTION)rJ   rK   rL   rM   r?   r   rN   rO   tnowrS   status3s              r   rT   zTestIERS_A.test_simple   sH    	;##%%hNNNOOhEEEFF"**34*HHvf 0011111 GGG!#Mqt	
 	
 	
 	

 %,,T3d,KK'$55555xzz$,,T,FF'$555553r   Nr   r   r   r   r   r      s#            r   r   c                   \    e Zd Zd Zd Zd Zd Zd Zd Ze	j
        j        d             ZdS )	TestIERS_Autoc                    d| _         d| _        t          t          j                            dd                    | _        t          t          j                            dd                    | _        t          | j                  	                                | _
        t          | j                  	                                | _        t          j                    t          dd          t          j        | j                   z  z   | _        d	S )
z!Set up useful data for the tests.(   g      >@r   zfinals2000A-2016-02-30-testzfinals2000A-2016-04-30-test
   r.   r   N)Namer
   rm   rn   ro   iers_a_file_1iers_a_file_2r   r]   iers_a_url_1iers_a_url_2r   r   r	   r=   arangerR   rX   s    r   setup_classzTestIERS_Auto.setup_class   s    2GLL!>??
 
 3GLL!>??
 
 !!344;;== !344;;==i488829TV;L;LLLr   c                 B    t           j                                         dS )zRun this after every test.N)r   	IERS_Autor3   )rJ   methods     r   teardown_methodzTestIERS_Auto.teardown_method   s    r   c                 h   t           j                            d| j                  5  t           j                            d| j                  5  t           j                            d| j                  5  t          j        t          t          j	        t           j
                            | j                                      5  t           j                                        }t          j                    5  t          j        dt           j                   |                    | j        j        | j        j                   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           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 )zRegression test: make sure the error message in
        IERS_Auto._check_interpolate_indices() is formatted correctly.
        iers_auto_urliers_auto_url_mirrorauto_max_agematchignoreN)r   r   set_tempr   r   rC   rD   
ValueErrorreescapeINTERPOLATE_ERRORr0   r   r5   warningscatch_warningssimplefilterIERSStaleWarningr?   rR   rL   rM   )rJ   r4   s     r   !test_interpolate_error_formattingz/TestIERS_Auto.test_interpolate_error_formatting   s    Y1BCC 	G 	G##$:D<MNN G GY''AA G G" i(>(E(Edh(O(OPP   
G 
G &*^%8%8%:%:
%466 G G %1(D<QRRR&..tvz46:FFFG G G G G G G G G G G G G G G
G 
G 
G 
G 
G 
G 
G 
G 
G 
G 
G 
G 
G 
G 
GG G G G G G G G G G G G G G GG G G G G G G G G G G G G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   &F'&F2AE82E!	4A
E
>E!	
EE!	EE!	E8!E%%E8(E%)E8,F8E<<F?E< FF'F	F'F	F''F+.F+c                 N   t           j                            d| j                  5  t           j                            dd          5  t           j                                        }|                    | j        j        | j        j	                  }ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          |t          j                  sJ |j        | j        fk    sJ t          |t          j        dg| j        z            t"          j        z             dS )zqMake sure that iers.INTERPOLATE_ERROR's advice about setting
        auto_max_age = None actually works.
        r   r   NV88o̿)r   r   r   r   r   r5   r?   rR   rL   rM   r6   r=   ndarrayshaper   r   r>   r9   rA   )rJ   r4   deltas      r   test_auto_max_age_nonez$TestIERS_Auto.test_auto_max_age_none  s    Y1BCC 	C 	C##ND99 C C!^0022
"**46:tvzBBC C C C C C C C C C C C C C C	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C %,,,,,{tvi'''' *1F(G(G!#(MNNNNNs6   !B3A	BB3B 	 B3#B 	$B33B7:B7c                    t           j                            d| j                  5  t           j                            dd          5  t	          j        t          d          5  t           j                                        }|	                    | j
        j        | j
        j                  }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 )z0Check that the minimum auto_max_age is enforced.r   r   g      @zAIERS auto_max_age configuration value must be larger than 10 daysr   N)r   r   r   r   rC   rD   r   r   r5   r?   rR   rL   rM   )rJ   r4   _s      r   test_auto_max_age_minimumz'TestIERS_Auto.test_auto_max_age_minimum  s   Y1BCC 
	C 
	C##NC88 	C 	C]!   C C "&!4!4!6!6J"**46:tvzBBAC C C C C C C C C C C C C C C	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C
	C 
	C 
	C 
	C 
	C 
	C 
	C 
	C 
	C 
	C 
	C 
	C 
	C 
	C 
	C 
	C 
	C 
	CsZ   !C'C#A	B8,C8B<<C?B< CC'C	C'C	C''C+.C+c                     t           j                            dd          5  t           j                                        }d d d            n# 1 swxY w Y   t          |          t           j        u sJ d S )Nr   F)r   r   r   r   r5   typer7   )rJ   rR   s     r   test_no_auto_downloadz#TestIERS_Auto.test_no_auto_download,  s    Y77 	& 	&##%%A	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&Aww$+%%%%%%s   AAAc           	         t           j                            d| j                  5  t           j                                        }|d         d         dt          j        z  k    sJ |d         d         dt          j        z  k    sJ |j        d         }t          |d	          d
t          j        z  z   |_
        t          j        |                    t          dd	          j                  j        d          sJ t          j        |                    t          dd	          j                  j        d          sJ t          |d	          dt          j        z  z   |_
        t          j        |                    t          dd	          j                  j        d          sJ t!          j        t           j        d          5 }t!          j        t(          d          5  |                    t          dd	          j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t+          |          dk    sJ t!          j        t           j        d          5 }|                    t          dd	          j        d           d d d            n# 1 swxY w Y   t+          |          dk    sJ t           j                            dd           5  |                    t          dd	          j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t           j                            d| j                  5  t          j        |                    t          dd	          j                  j        d          sJ t          j        |                    t          dd	          j                  j        d          sJ |d         d         dt          j        z  k    sJ |d         d         dt          j        z  k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   MJDr   g    @g    `@predictive_mjdr   r      iP  gXK?i`  r   <   z%IERS_Auto predictive values are olderr   z4interpolating from IERS_Auto using predictive valuesr   Tr,   r   g333333ӿg    @)r   r   r   r   r   r5   r9   dmetar   	_time_nowr=   allcloser?   r.   valuerC   warnsr   rD   r   rI   r   )rJ   datr   r   s       r   rT   zTestIERS_Auto.test_simple1  s   Y1BCC -	: -	:.%%''Cu:a=GacM1111u:b>Wqs]2222 !X&67N >>>QSHCM
 ;Du555899?     ;Du555899?     !>>>acICM;Du555899?     %-T   :L  : : Du5558999: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : u::???? %-T   NDu5558MMMN N N N N N N N N N N N N N N u::???? ##ND99 : :Du5558999: : : : : : : : : : : : : : :Y-	: -	: -	: -	: -	: -	: -	: -	: -	: -	: -	: -	: -	: -	: -	:f Y1BCC 		: 		:;Du555899?     ;s{{4e+D+D+D+GHHNPTUUUUU u:a=GacM1111u:b>lac%999999		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		:s   F#L7	H2%*HH2HH2"H#H2&L72H6	6L79H6	:8L72,J*L7*J.	.L71J.	28L7**L L7 L$	$L7'L$	(L77L;>L;'C	P>>QQN)r_   r`   ra   r   r   r   r   r   r   rC   rc   remote_datarT   r   r   r   r   r      s        M M M  G G G&
O 
O 
OC C C& & &
 [=: =: =: =: =:r   r   c            	         t           j                                        } t           j                                        }| d         |d         d         k    }t	          j        |          r
J d            |t	          j        | d                   z  }t	          j        |d         | d         |                   }t	          j        t	          j        |          dk              s
J d            t	          j        | d         |         |d         |         k              sJ dD ]1}t          | |         |         ||         |         dd	| d
           2d S )Nr   r   z.IERS B covers all of IERS A: should not happen	UT1_UTC_Br   zValid region not contiguous)r   r   r    r|   r}   gV瞯<zBug #9206 IERS B parameter z' not copied over correctly to IERS Auto)rtolerr_msg)
r   r   r5   r7   r=   rF   isfinitesearchsorteddiffr   )Ar{   ok_Ai_Bnames        r   -test_IERS_B_parameters_loading_into_IERS_Autor   r  sP   AAU8qx|#Dvd||MMMMMM 	BK+'''D
/!E(AeHTN
3
3C6"'#,,!#$$CC&CCCC6!E(4.AeHSM122222 D 	
 	
 dGDMdGCL)d ) ) )	
 	
 	
 	
 	
	
 	
r   zFlaky on CIc                  "   t           j                            t           j        d          } 	 t	          |           dk    sJ d| j        v sJ 	 t           j                                         d S # t           j                                         w xY wNFcacher   	UT1_UTC_A)r   r[   r5   
IERS_A_URLrI   rq   r3   	iersa_tabs    r   test_iers_a_dlr     s        >>I9~~!!!!i000000    A. . Bc                  "   t           j                            t           j        d          } 	 t	          |           dk    sJ d| j        v sJ 	 t           j                                         d S # t           j                                         w xY wr   )r   r[   r5   IERS_A_URL_MIRRORrI   rq   r3   r   s    r   test_iers_a_dl_mirrorr     s      !7u EEI9~~!!!!i000000r   c                  "   t           j                            t           j        d          } 	 t	          |           dk    sJ d| j        v sJ 	 t           j                                         d S # t           j                                         w xY w)NFr   r   r   )r   r7   r5   
IERS_B_URLrI   rq   r3   )	iersb_tabs    r   test_iers_b_dlr     s       >>I9~~!!!!I......r   c           	         t          |           5  t          j                                         t          j                                         t          j                                         t          j                    }t          j        	                    dd          5  |dt          j        z  z
  j         d}t          j        t          j        |          5  |dt          j        z  z   j         d d d            n# 1 swxY w Y   t          j        	                    dd          5  t          j        t          j        |          5  |dt          j        z  z   j         d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        	                    dd	          5  |dt          j        z  z   j         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 )
Nr   Fi,  z9\(some\) times are outside of range covered by IERS tabler   d   iers_degraded_accuracywarnr   )r   r   r[   r3   r   re   r   r   r   r   r9   dayut1rC   rD   IERSRangeErrorr   IERSDegradedAccuracyWarning)tmp_pathr   r   s      r   test_iers_out_of_range_handlingr     s:    
	!	! ( (	hjjY77 	( 	(3;## QEt2%@@@ ( (sQU{"''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ##$<fEE , ,\$"B%PPP , ,3;&++, , , , , , , , , , , , , , ,, , , , , , , , , , , , , , , ##$<hGG ( (sQU{"''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   BH:G)C<0G)<D  G)D #G)'!FE,	 F,E00F3E04F7G)FG)
F#G).GG)GG)GG)H)G-	-H0G-	1HHHc           
      `   t          |           5  t          j                                         t          j                                         t          j                                         t          j                    }t          j        	                    dd          5  t          j        	                    dd          5  t          j        t          j                  5 }t          j        	                    dd          5  |dt          j        z  z   j         d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t!          |          dk    sJ t#          |d	         j                                      d
          sJ t#          |d         j                                      d          sJ t#          |d         j                                      d          sJ 	 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 )Nr   z	FAIL FAILr   zhttps://google.comr   r   r      r   z+failed to download FAIL FAIL: Malformed URLr   z,malformed IERS table from https://google.comr2   z6unable to download valid IERS file, using local IERS-B)r   r   r[   r3   r   re   r   r   r   r   rC   r   IERSWarningr9   r   r   rI   strmessage
startswith)r   r   records      r   !test_iers_download_error_handlingr    s>    
	!	!  	hjj Y== 	 	##$:<PQQ  \$"233 0v++,DhOO 0 0sQU{*//0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6{{a''''6!9,--88A     6!9,--88B     6!9,--88L                   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s   BH#!H?G4!D:	?D#D:	#D''D:	*D'+D:	.G4:D>>G4D>B%G4(H4G88H;G8<H?H#H	H#H	H##H'*H')5rm   r   r   pathlibr   numpyr=   rC   astropyr   r9   astropy.configr   astropy.tabler   astropy.tests.helperr   astropy.timer   r	   astropy.utils.datar
   astropy.utils.iersr   environgetr   getattr__builtins__OSErrorrW   r[   r5   
HAS_IERS_Arn   ro   r\   r   r   r   rt   rv   rc   skipifr   r   r   r   r   r   r   r   r  r   r   r   <module>r     sb   
			 				                   ) ) ) ) ) )             9 9 9 9 9 9 ( ( ( ( ( ( ( ( 4 4 4 4 4 4 # # # # # #Z^^D%  w|-@'JJ K&''' JJ    JJJ
 '&rw||F<L'M'MNN# # #$ $ $
A A A A A A A AH. . .,I& I& I& I& I& I& I& I&X 
N+<==       >=2C: C: C: C: C: C: C: C:L 
 
 
< D//   0/       ( ( (0     s   0B BB