U
    e»{jšI  ã                   @   s´  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zej  d¡ W n ek
rÎ   dZ!Y nX 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)j*e! d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%„ ƒZ0ej)j-d&d'„ ƒZ1ej)j-d(d)„ ƒZ2ej)j-d*d+„ ƒZ3dS ),é    N)ÚPath)Úunits)Úset_temp_cache)ÚQTable)Úassert_quantity_allclose)ÚTimeÚ	TimeDelta)Úget_pkg_data_filename)ÚiersÚCIFÚFileNotFoundErrorzfinals2000A.allTÚdataZiers_a_excerptc                   C   s   dt j_d S )NT©r
   ÚconfÚauto_download© r   r   úa/var/www/html/bwave/python/venv/lib/python3.8/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kst‚| ¡ }|jdk	s,t‚|j|ks:t‚t|tƒsHt‚t|tjƒsXt‚|d jt	j
  ¡ spt‚|d jt	j  ¡ sˆt‚|d jt	j  ¡ s t‚t dddddg¡}t ddd	d
dg¡}| ||¡}t|t	jƒsät‚|jt	j
  ¡ søt‚t|dddddgt	j dt	j d� t t¡� | dd
¡\}}W 5 Q R X |j||dd�\}}t |tjk¡�slt‚|jdd
dd�\}}	|	tjk�s�t‚t||ddd�}
| |
¡}t|dddddgt	j dt	j d� t|dd… ƒdk�sèt‚dS )z/Test the default behaviour for IERS_B and IERS.NÚUT1_UTCÚPM_xÚPM_yç   @½BAç   À½BAç6ë·çÿß?ç%:psÏÿï?çïNg¼çÿï?ç        ç      à?ç±I#=Çâ¿ç–a7Çâ¿çåÅÓ<‘qÚ?ç^SsÚ?çš™™™™™¹?©Zatolç   èvH7BT©Zreturn_statusÚjdÚutc)ÚformatÚscaleé   )ÚcloseÚ
iers_tableÚAssertionErrorÚ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Újd2r;   Úut1_utc2Ústatus2Zut1_utc4Zstatus4ÚtÚut1_utc3r   r   r   Útest_simple/   sD    ý
ýzTestBasic.test_simplec              	   C   sj   t j ¡  t j t j¡ t jjd k	s(t‚tt jjtƒs:t‚t j ¡  t	 
t¡� t j d¡ W 5 Q R X d S )Nzsurely this does not exist)r
   r3   r.   r1   ZIERS_B_FILEr/   r0   r2   r   r>   r?   ÚFILE_NOT_FOUND_ERROR©rE   r   r   r   Útest_open_filename_   s    

zTestBasic.test_open_filenamec                 C   sN   t j ¡  t j ttƒ ¡ ¡ t jjd k	s.t‚t	t jjt
ƒs@t‚t j ¡  d S )N)r
   ÚIERS_Ar.   r1   r   ÚIERS_A_EXCERPTÚas_urir/   r0   r2   r   rO   r   r   r   Útest_open_network_urlh   s
    
zTestBasic.test_open_network_urlN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r>   ÚmarkZparametrizer
   r3   ÚIERSrM   rP   rT   r   r   r   r   r   ,   s
   
/	r   c                   @   s   e Zd Zdd„ ZdS )ÚTestIERS_AExcerptc           	      C   s\  t j t¡}|d jtj  ¡ s$t‚d|d ks4t‚d|d ksDt‚d|d ksTt‚t	 
|d dk|d dkB |d dkB ¡s‚t‚|d jtj  ¡ sšt‚|d jtj  ¡ s²t‚d|d ksÂt‚d|d ksÒt‚d|d ksât‚t	 
|d dk|d dkB |d dkB ¡�st‚|d	 jtj  ¡ �s,t‚|d
 jtj  ¡ �sFt‚d|d k�sXt‚d|d k�sjt‚d|d k�s|t‚t	 
|d dk|d dkB |d dkB ¡�s¬t‚tdddgdd�}|j|dd�\}}|d t jk�sät‚t	 
|dd … t jk¡�st‚t|dddgtj dtj d� |j|dd�\}}}|d t jk�sJt‚t	 
|dd … t jk¡�sht‚t|ƒ t|ƒ t|dddgtj dtj d� t|ddd gtj dtj d� |j|dd�\}}}|d t jk�sàt‚t	 
|dd … t jk¡�sþt‚t|d!d"d#gtj dtj d� t|d$d%d&gtj dtj d� t|d d'… ƒd'k�sXt‚d S )(Nr   ÚPZUT1FlagÚIÚBÚdX_2000AÚdY_2000AZNutFlagr   r   Z	PolPMFlagg     Ûë@g    ÀÛë@g    àÛë@Úmjd©r+   Tr(   r   é   gQxIwß¿guP.2¦…ß¿g?ˆ
z”ß¿r%   r&   gj¼t“¶¿g+‡ÙÎ·¿gƒÀÊ¡E¶¿g      ð?gªñÒMb¸?g#Ûù~j¼´?g;ßO�—n²?gÝ²CüÃ–n?g>xíÒ†Ãr?gÎUó‘ïr?g<ö³XŠäÓ?g{ƒ/L¦
Ô?g@7n1Ô?r-   )r
   rQ   r1   rR   r4   r5   r6   r7   r0   r9   rA   Zmarcsecr8   r   r;   rB   ZFROM_IERS_Ar   r<   r=   Zdcip_xyÚprintZnarcsecZpm_xyZarcsecrD   )	rE   rF   rK   r;   ÚstatusZdcip_xZdcip_yZpm_xZpm_yr   r   r   rM   q   s”    

ÿ
þÿ

ÿ
þÿ


ÿ
þÿ
  ÿ  ÿ  ÿ  ÿ  ÿzTestIERS_AExcerpt.test_simpleN©rU   rV   rW   rM   r   r   r   r   r[   p   s   r[   zrequires IERS_A)Úreasonc                   @   s   e Zd Zdd„ ZdS )Ú
TestIERS_Ac                 C   sâ   t j ¡  t j ¡ }t dddddg¡}t dddddg¡}|j||dd	�\}}t |t jk¡sdt	‚t
|d
ddddgtj dtj d� |jdddd	�\}}|t jksªt	‚t ¡ }|j|dd	�\}	}
|
t jksÒt	‚|	dksÞt	‚dS )z;Test that open() by default reads a 'finals2000A.all' file.r   r   r   r   r   r   r    Tr(   r!   r"   r#   r$   r%   r&   r'   N)r
   rQ   r.   r1   r9   r:   r;   rA   rB   r0   r   r5   r<   r=   rC   r   ÚnowZFROM_IERS_A_PREDICTION)rE   rF   rG   rH   r;   re   rI   rJ   ZtnowrL   Zstatus3r   r   r   rM   ¾   s"    

ýzTestIERS_A.test_simpleNrf   r   r   r   r   rh   ¼   s   rh   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)   rb   N)ÚNÚamer	   ÚosÚpathÚjoinZiers_a_file_1Ziers_a_file_2r   rS   Úiers_a_url_1Úiers_a_url_2r   ri   r   r9   ZarangerK   rO   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.   )rE   Úmethodr   r   r   Úteardown_methodå   s    zTestIERS_Auto.teardown_methodc                 C   sÂ   t j d| j¡�¨ t j d| j¡�Œ t j d| j¡�p tjtt 	t j
 | j¡¡d��F t j ¡ }t ¡ �( t dt j¡ | | jj| jj¡ W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X 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_temprr   rn   r>   r?   Ú
ValueErrorÚreÚescapeZINTERPOLATE_ERRORr+   ru   r1   ÚwarningsÚcatch_warningsÚsimplefilterÚIERSStaleWarningr;   rK   rG   rH   )rE   r/   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 5 Q R X W 5 Q R X t
|tjƒsdt‚|j| jfksvt‚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.
        rx   rz   NçV88ÇoÀÌ¿)r
   r   r~   rr   ru   r1   r;   rK   rG   rH   r2   r9   Zndarrayr0   Úshaperm   r   r:   r5   r<   )rE   r/   Údeltar   r   r   Útest_auto_max_age_noneü   s    
(z$TestIERS_Auto.test_auto_max_age_nonec                 C   sr   t j d| j¡�X t j dd¡�> tjtdd��$ t j ¡ }| 	| j
j| j
j¡}W 5 Q R X W 5 Q R X W 5 Q R X dS )z0Check that the minimum auto_max_age is enforced.rx   rz   g      @zAIERS auto_max_age configuration value must be larger than 10 daysr{   N)r
   r   r~   rr   r>   r?   r   ru   r1   r;   rK   rG   rH   )rE   r/   Ú_r   r   r   Útest_auto_max_age_minimum  s    ý
z'TestIERS_Auto.test_auto_max_age_minimumc              	   C   s:   t j dd¡� t j ¡ }W 5 Q R X t|ƒt jks6t‚d S )Nr   F)r
   r   r~   ru   r1   Útyper3   r0   )rE   rK   r   r   r   Útest_no_auto_download  s    z#TestIERS_Auto.test_no_auto_downloadc                 C   sl  t j d| j¡��´ t j ¡ }|d d dtj ks8t‚|d d dtj ksRt‚|j	d }t
|dd	�d
tj  |_t | t
ddd	�j¡jd¡s–t‚t | t
ddd	�j¡jd¡s¸t‚t
|dd	�dtj  |_t | t
ddd	�j¡jd¡sòt‚tjt jdd��4}tjtdd�� | t
ddd	�j¡ W 5 Q R X W 5 Q R X t|ƒdk�sNt‚tjt jdd��}|jt
ddd	�jdd� W 5 Q R X t|ƒdk�s”t‚t j dd ¡� | t
ddd	�j¡ W 5 Q R X W 5 Q R X t j d| j¡�† t | t
ddd	�j¡jd¡�st‚t | t
ddd	�j¡jd¡�s&t‚|d d dtj k�sBt‚|d d dtj k�s^t‚W 5 Q R X d S )Nrx   ÚMJDr   g    àì@éÿÿÿÿg    `ì@Úpredictive_mjdra   rb   é   iPÃ  gßþ·íÖ�À?i`ê  r‡   é<   z%IERS_Auto predictive values are olderr{   z4interpolating from IERS_Auto using predictive valuesrc   Tr(   rz   g333333Ó¿g    àì@)r
   r   r~   rr   ru   r1   r5   Údr0   Úmetar   Z	_time_nowr9   Zallcloser;   r)   Úvaluer>   Úwarnsr…   r?   r   rD   rs   )rE   Zdatr‘   r—   r   r   r   rM     s`    

 ÿ ÿ ÿ ÿ þþ( ÿ"( ÿ
$zTestIERS_Auto.test_simpleN)rU   rV   rW   rt   rw   r†   rŠ   rŒ   rŽ   r>   rY   Úremote_datarM   r   r   r   r   rj   Ö   s   rj   c                  C   sØ   t j ¡ } t j ¡ }| d |d d k}t |¡r:tdƒ‚|t | d ¡M }t |d | d | ¡}t t 	|¡dk¡s€tdƒ‚t | d | |d | k¡s¢t‚dD ],}t
| | | || | dd	|› d
�d� q¦d S )Nr�   r�   z.IERS B covers all of IERS A: should not happenZ	UT1_UTC_Brc   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)ZrtolÚerr_msg)r
   ru   r1   r3   r9   rA   r0   ÚisfiniteZsearchsortedÚdiffr   )ÚAr^   Zok_AZi_BÚnamer   r   r   Ú-test_IERS_B_parameters_loading_into_IERS_Auto\  s    

"


ûrž   zFlaky on CIc                  C   sF   t jjt jdd�} z"t| ƒdks$t‚d| jks2t‚W 5 t j ¡  X d S ©NF©Úcacher   Z	UT1_UTC_A)r
   rQ   r1   Z
IERS_A_URLr.   rD   r0   Úcolnames©Z	iersa_tabr   r   r   Útest_iers_a_dl{  s
    r¤   c                  C   sF   t jjt jdd�} z"t| ƒdks$t‚d| jks2t‚W 5 t j ¡  X d S rŸ   )r
   rQ   r1   ZIERS_A_URL_MIRRORr.   rD   r0   r¢   r£   r   r   r   Útest_iers_a_dl_mirror‡  s
    r¥   c                  C   sF   t jjt jdd�} z"t| ƒdks$t‚d| jks2t‚W 5 t j ¡  X d S )NFr    r   r   )r
   r3   r1   Z
IERS_B_URLr.   rD   r0   r¢   )Z	iersb_tabr   r   r   Útest_iers_b_dl’  s
    r¦   c                 C   s  t | ƒ�ö tj ¡  tj ¡  tj ¡  t ¡ }tj 	dd¡�¶ |dt
j  j d}tjtj|d�� |dt
j  j W 5 Q R X tj 	dd¡�2 tjtj|d�� |dt
j  j W 5 Q R X W 5 Q R X tj 	dd	¡� |dt
j  j W 5 Q R X W 5 Q R X W 5 Q R X d S )
Nr   Fi,  z9\(some\) times are outside of range covered by IERS tabler{   éd   Úiers_degraded_accuracyÚwarnr}   )r   r
   rQ   r.   ru   rZ   r   ri   r   r~   r5   ÚdayÚut1r>   r?   ZIERSRangeErrorr—   ZIERSDegradedAccuracyWarning)Útmp_pathri   r|   r   r   r   Útest_iers_out_of_range_handling�  s    



$r­   c                 C   s  t | ƒ�ú tj ¡  tj ¡  tj ¡  t ¡ }tj 	dd¡�º tj 	dd¡�  t
 tj¡�0}tj 	dd¡� |dtj  j W 5 Q R X W 5 Q R X t|ƒdks¢t‚t|d	 jƒ d
¡sºt‚t|d jƒ d¡sÒt‚t|d jƒ d¡sêt‚W 5 Q R X W 5 Q R X W 5 Q R X d S )Nrx   z	FAIL FAILry   zhttps://google.comr¨   r}   r§   é   r   z+failed to download FAIL FAIL: Malformed URLrc   z,malformed IERS table from https://google.comr-   z6unable to download valid IERS file, using local IERS-B)r   r
   rQ   r.   ru   rZ   r   ri   r   r~   r>   r—   ZIERSWarningr5   rª   r«   rD   r0   ÚstrÚmessageÚ
startswith)r¬   ri   Úrecordr   r   r   Ú!test_iers_download_error_handling¶  s(    



$ÿÿÿr³   )4ro   r€   r‚   Úpathlibr   Únumpyr9   r>   Zastropyr   r5   Zastropy.configr   Zastropy.tabler   Zastropy.tests.helperr   Zastropy.timer   r   Zastropy.utils.datar	   Zastropy.utils.iersr
   ÚenvironÚgetr   ÚgetattrÚ__builtins__ÚOSErrorrN   rQ   r1   Z
HAS_IERS_Arp   rq   rR   r   r   r   r[   rY   Zskipifrh   rj   r˜   rž   r¤   r¥   r¦   r­   r³   r   r   r   r   Ú<module>   sR   
DL 






