U
    Y»{jM  ã                   @   s$  d dl m Z  d dlZd dlZd dlmZmZmZ d dlZd dl	m
Z
 zd dlmZ W n" ek
rv   G dd„ dƒZY nX ejjfdd	„ZG d
d„ dƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ ZG d$d%„ d%ƒZG d&d'„ d'ƒZG d(d)„ d)ƒZ dS )*é    )ÚdatetimeN)Úassert_array_equalÚassert_array_almost_equalÚassert_allclose)Úcatch_warnings)ÚTimec                   @   s   e Zd ZdZdd„ ZdS )r   Tc                 O   s   d S ©N© )ÚselfÚargsÚkwargsr	   r	   úS/var/www/html/bwave/python/venv/lib/python3.8/site-packages/erfa/tests/test_erfa.pyÚ__init__   s    zTime.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú_DUMMYr   r	   r	   r	   r   r      s   r   c              	   C   sv   dd l }dd l}ddg}| ¡ dkr(d S | | ¡ z|j|dd|jd�}W n |jtfk
rf   Y d S X d|jkS d S )	Nr   Únmz--defined-onlyÚWindowsTzutf-8)ÚcheckÚencodingÚstdoutZeraA2af)	ÚplatformÚ
subprocessÚsystemÚappendÚrunÚPIPEÚSubprocessErrorÚOSErrorr   )Úpathr   r   ÚcommandÚoutr	   r	   r   Úembedded_liberfa   s    
 ÿ
r#   c                   @   s@   e Zd Zdd„ Zdd„ Zdd„ Zejje	ƒ  dd�d	d
„ ƒZ
dS )ÚTestVersionc                 C   s@   t tjdƒst‚tjj}t|tƒs&t‚t| d¡ƒdks<t‚d S )NÚerfa_versionÚ.é   )	ÚhasattrÚerfaÚversionÚAssertionErrorr%   Ú
isinstanceÚstrÚlenÚsplit)r
   r%   r	   r	   r   Útest_erfa_version*   s    zTestVersion.test_erfa_versionc                 C   s`   t tjdƒst‚tjj}t|tƒs&t‚t|ƒdksNt|ƒdkrJ|d dksNt‚| d¡s\t‚d S )NÚsofa_versioné   é
   Ú_Z20)	r(   r)   r*   r+   r1   r,   r-   r.   Ú
startswith)r
   r1   r	   r	   r   Útest_sofa_version0   s    
ÿ
ÿzTestVersion.test_sofa_versionc                 C   s(   t tdƒst‚tj}|tjjks$t‚d S )NÚ__version__)r(   r)   r+   r7   r*   ©r
   r*   r	   r	   r   Útest_version9   s    zTestVersion.test_versionzsystem liberfa©Úreasonc                 C   s   t j}| t jj¡st‚d S r   )r)   r7   r5   r*   r%   r+   r8   r	   r	   r   Ú"test_version_with_embedded_liberfa>   s    z.TestVersion.test_version_with_embedded_liberfaN)r   r   r   r0   r6   r9   ÚpytestÚmarkÚskipifr#   r<   r	   r	   r	   r   r$   )   s
   	r$   c                  C   sè  t  ddd¡} t  dt jd d¡}t  t j d t jd d¡}t dddddd| dddt jd dddd	ddd
¡\}}}}}}|jdksŠt‚t dddddd| d dddt jd dddd	ddd
¡\}}}}}}|jdksÚt‚t |dd…ddf |ddd…df dddd| dddd…f dddt jd dddd	ddd
¡\}}}}}}|jdk t dd| d¡\}	}
}}|	jdk�stt‚|jdk�s„t‚|jtj	k�s–t‚t dd| d d¡\}	}
}}|	jdk�sÂt‚|jdk�sÒt‚|jtj	k�sät‚dS )z\
    Runs a set of tests that mostly make sure vectorization is
    working as expected
    g   À‹¾BAglÁÀ‹¾BAéy   ç        ç       @é   é   ç      @g     °�@ç      à?)r@   r   r	   N)rC   rD   r@   ÚUTCr'   )
ÚnpZlinspaceÚpir)   Zatco13Úshaper+   Zd2dtfÚdtypeZdt_hmsf)ZjdÚraÚdecZaobZzobZhobZdobZrobÚeoZiyZimÚidÚihmsfr	   r	   r   Útest_erfa_wrapperD   s”                    þ                þ                þ
rQ   c                  C   s2  t  dtj ¡\} }| dks t‚| ¡ dks0t‚t  dtj¡\} }| dksNt‚| ¡ dks^t‚t  dddd	¡}tj 	|tj ¡ t  
d
ddd	¡}tj 	|tj¡ t  dtj ¡}tj 	|tj¡ t  dtj ¡}tj 	|tj ¡ t  dd¡\} }| dksþt‚| ¡ dk�st‚t  d
ddd	¡}tj 	|d¡ d S )Né   ó   -)é´   r   r   r   ó   +)é   r   r   r   ú-rT   r   rA   ú+rV   ç      @é   g      ø¿)é$   r   r   r   r'   g      À?)r)   Za2afrH   rI   r+   ÚitemZa2tfZaf2aÚtestingr   Ztf2aZanpZanpmZd2tfZtf2d)ÚsignZidmsfrP   ZradÚdaysr	   r	   r   Útest_angle_opsh   s&    r`   c                  C   sJ  t  dt d¡t d¡g¡\} }tj | tjd ¡ tj |tjd ¡ t  dt d¡t d¡g¡\} }}tj | tjd ¡ tj |tjd ¡ tj |d¡ tjdt d¡t d¡gdddgft j	d�}t  
|¡\} }}}}}tj | tjd ¡ tj |tjd ¡ tj |d¡ tj |t d¡ d ¡ tj |d¡ tj |d¡ t  tjd tjd ¡}tjj|dt d¡d t d¡d gdd� t  tjd tjd d¡}tjj|dt d¡d t d¡d gdd� t  tjd tjd dt d¡d dd¡}tjj|d dt d¡t d¡gdd� tjj|d	 d
ddgdd� d S )NrA   rB   rE   ç      ð?©rK   g›+¡†›„=)ZatolÚpÚvg      ð¿)r)   Zc2srH   Úsqrtr]   r   rI   Úp2sÚarrayÚdt_pvZpv2sZs2cZs2pÚs2pv)ÚthetaÚphiÚrÚpvÚtdÚpdÚrdÚcr	   r	   r   Útest_spherical_cartesian†   s0     ""ÿ,,*(rr   c               
   C   s²  t  dddd¡ tƒ �P} t  dddd¡ t| ƒdks8t‚| d jt jksLt‚dt| d jƒksbt‚W 5 Q R X tƒ �V} t  dddgddd¡ t| ƒdksšt‚| d jt jks®t‚dt| d jƒksÄt‚W 5 Q R X z t  ddd	d
gdddgd¡ W nN t j	k
�r< } z,d|j
d k�r,d�s,td|j
d  ƒ‚W 5 d}~X Y nX z t  ddd	d
gdddgd¡ W nN t j	k
�r¬ } z,d|j
d k�rœd�sœtd|j
d  ƒ‚W 5 d}~X Y nX dS )zI
    Test that the ERFA error reporting mechanism works as it should
    iÆ  rZ   rF   éd   r   z1 of "dubious year (Note 1)"éÈ   z2 of "dubious year (Note 1)"é"   é   é+   z)1 of "bad day (Note 3)", 1 of "bad month"Fz5Raised the correct type of error, but wrong message: NÚwarningzDRaised the correct type of error, but there were warnings mixed in: )r)   Údatr   r.   r+   ÚcategoryÚErfaWarningr-   ÚmessageZ	ErfaErrorr   )ÚwÚer	   r	   r   Útest_errwarn_reporting¦   s.       * 
ÿr   c            
      C   s   dddg} dddg}d}d}d	d
dg}t  | |||¡}|jdksDt‚tj ||¡ t  | gd |||¡}|jdksvt‚tj ||gd ¡ t | ¡}tj||d |d |d |d gd dd�}t  |ddd… |||¡}	|	jdksèt‚tj |	|gd ¡ dS )z\
    Tests that ERFA functions working with vectors are correctly consumed and spit out
    g›Ý—°Klè¿gVpºølzã¿g`/¾ñì¾Ë¿g=Ö÷õö>g²M?¥ÿ[¿g™w'UTA¿gÓì…äoþï?gÔVYýÿÿï?gd�
Õkè¿gK{†iìzã¿g}•Z]Ü¿Ë¿©r'   rD   )rD   r'   rv   r'   rC   ÚF)ÚorderN)r)   ÚabrJ   r+   rH   r]   r   rg   )
Zpnatrd   ÚsZbm1ÚexpectedÚresZres2ZpnataZarrinZres3r	   r	   r   Útest_vector_inoutsÊ   s2    þþþ
,r‡   c               	   C   sD   t  t d¡t d¡¡} t| t dddgdddgdddgg¡ƒ d S )Ng      N@r'   rF   g‘+Pæz¶ë?rA   g‘+Pæz¶ë¿ra   )r)   ZrzrH   Zdeg2radÚeyer   rg   )rl   r	   r	   r   Útest_rzï   s    þÿr‰   c            
      C   sx  d} d}t jdtjd�}dddg|d< d	d
dg|d< t | ||¡}|jdksPt‚t j |d d¡ t j |d d¡ t j |d dddg¡ t j |d t  	d¡¡ t  
|¡}|d |d  |d< |d< t | ||¡}t  |d d¡rêt‚t  |gd ¡}t | ||¡}|jdk�st‚t j |d d¡ t  |gd ¡d d d… }t | ||¡}	|	jdk�sbt‚t j |	d d¡ d S )Nç   À2½BAç\ùò#ú¬Ù?r	   rb   g¤p=J6ÏWÁg%�•Ag¤p=
@3Árc   g¥ž¡¼C=Àg pvkYp|ÀgQÉ›mþ@›?rd   Úpmtçe= *|M)@ZemgVô¶*ð?Zebgþ}h2×ì?gåZ'i®¶Ú¿gÎ«µŸ³*Ç¿Zbpnr'   r€   é	   )rH   Úemptyr)   rh   Zapcs13rJ   r+   r]   r   rˆ   Ú
empty_likeZallcloserg   )
Zjd1Zjd2rm   ÚastromZpvbadZ	astrombadZpvarrZastrom2ZpvmatarrZastrom3r	   r	   r   Ú
test_pv_inø   s@    þþþ
r’   c               	   C   sˆ   t j tjd tjd dt d¡d dd¡} t | ¡}t jjtjd tjd dt d¡d dd|d�}||ksrt‚t || k¡s„t‚dS )z2Test that ufunc can also deal with 'out' argument.rB   rE   rA   ©r"   N)	r)   Úufuncri   rH   rI   re   r�   r+   Úall)rm   Zpv2r"   r	   r	   r   Útest_pv_out!  s    ,
(ÿr–   c                  C   sD   t  dtj¡} tjj| d�}|| ks(t‚t j | t  dtj¡¡ dS )z5Test that no-input routines work with 'out' argument.r3   r“   N)	rH   Zzerosr)   rh   r”   Zzpvr+   r]   r   )rm   r"   r	   r	   r   Útest_zpv_out+  s    r—   c                  C   s  t jjdkst‚t jd t d¡ks(t‚t jd t d¡ks@t‚t jd t jksTt‚t dt j¡ tj	¡} ddd	g| d< d
ddg| d< tj
dddgdddgfdddgdddgfdddgdddgfgt jd�| d< t 
d d!d"g¡}t 
d#d$d%g¡}t  | ||¡}t|t 
d&d'd(g¡ƒ d)S )*zJ
    Check dt_eraLDBODY is correctly defined (regression test; gh-74)
    )ÚbmÚdlrm   r˜   Zf8r™   rm   r'   g‡M…ôë¹2?gCèû«EO?ra   gLÎaã§�ô=gßA:ÜÅ)>gTäqs*Ù>gfÄ¢u–=ÀgKµ&H2pÀgyj`qY±ÿ¿g1bûÞ!+i?gÆ2"*¨«p¿g›dÇÆµ]¿gç.Á]�žç?gqØ	qÝ‹@g¢9úN‚ÿ?g'ká™Põ~¿gˆ¨¶%ËT?gŒíMóåÚG?g BÔ&VG¿g¯‹Ÿ÷záb¿g´À�'WXQ¿gËÎO•\dÚ>g@>„ž4–¾g¢=7õ™å“¾rb   g¤ôzg,ï¿gÐ+ù3Ë¿gd™y}·¿g7:!SÂlè¿g{3�…íyã¿g1lˆ‚ý½Ë¿gYT¹TÂlè¿gÖ/¾ƒíyã¿gö2†€ý½Ë¿N)r)   Zdt_eraLDBODYÚnamesr+   rH   rK   rh   r�   ÚviewZrecarrayrg   Zldnr   )ÚbÚobÚscZsnr	   r	   r   Útest_struct_ldbody3  s4    ÿÿÿüú

þrŸ   c                  C   s¨   t  dddg¡\} }| jdks"t‚| jt jks2t‚|jdks@t‚tj | d d d¡ tj | d d d	d
dg¡ t  	dd| d ¡\}}tj |d¡ tj |d¡ dS )z@
    Checks producing and consuming of ERFA c struct astrom
    rŠ   r‹   rZ   )rv   r   rŒ   r�   rd   g®óµ³t}?gËåÒ9èE?gÔ°¼.q?g®Gáz®@gƒÀÊ¡EÆ?gÃDÎ®@gg‘þÒ¼ Æ?N)
r)   Zapci13rJ   r+   rK   Zdt_eraASTROMrH   r]   r   Zatciqz)ÚamrN   ÚriZdir	   r	   r   Útest_struct_astromQ  s    þr¢   c                  C   sJ   t  dddgdddgg¡} t | ¡}t |  d¡¡}t jj||dd� d S )NrZ   r   gÍÌÌÌÌÌì?gš™™™™™¹?Zf4gñhãˆµøä>)Zrtol)rH   rg   r)   rf   Zastyper]   r   )ZxyzZout64Zout32r	   r	   r   Útest_float32_inputf  s    
r£   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestAstromNotInplacec                 C   s�   t  dddddg¡| _| jd  ¡ | _d| _d}d}d}t | j| jd|||dddddd¡\| _}t | j| jd|||dddddd¡\| _	}d S )	Ng¹ë�e¹ì@r   g   @€OBAgK>v(©ó¿gŠ«Ê¾+‚Û¿g     Ú¤@rA   g      @)
rH   rg   Ú	mjd_arrayr\   Ú
mjd_scalarÚutc2mjdr)   Zapco13Úastrom_scalarÚastrom_array)r
   Zparanal_longZparanal_latZparanal_heightr4   r	   r	   r   Úsetup_methodo  sN     ÿÿ          þ
          þz!TestAstromNotInplace.setup_methodc                 C   sL   t | jƒtjkst‚t | j| j| j¡}|| jk	s6t‚t |ƒtjksHt‚d S r   )	Útyper¨   rH   Úvoidr+   r)   Úaper13r§   r¦   ©r
   r‘   r	   r	   r   Útest_scalar_input  s    z&TestAstromNotInplace.test_scalar_inputc                 C   sL   t | jƒtjkst‚t | j| j| j¡}|| jk	s6t‚t |ƒtjksHt‚d S r   )	r«   r©   rH   Úndarrayr+   r)   r­   r§   r¥   r®   r	   r	   r   Útest_array_input‡  s    z%TestAstromNotInplace.test_array_inputN)r   r   r   rª   r¯   r±   r	   r	   r	   r   r¤   n  s   r¤   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestLeapSecondsBasicsc                 C   sŒ   t j ¡ }t|tjƒst‚|jt jks*t‚t 	|d dk|d dk @ ¡sLt‚t 	|d dk|d dk@ ¡snt‚t 	t
|d dk ƒ¡sˆt‚d S )	NÚyeari¨  i¸  ÚmonthrZ   rV   Ztai_utcg     @�@)r)   Úleap_secondsÚgetr,   rH   r°   r+   rK   Zdt_eraLEAPSECONDr•   Úabs)r
   rµ   r	   r	   r   Útest_get_leap_seconds’  s    

ÿ

ÿ
z+TestLeapSecondsBasics.test_get_leap_secondsc                 C   sH   t jj}t|tƒst‚t j ¡ d }t|d |d dƒ}||ksDt‚d S )Néÿÿÿÿr³   r´   rZ   )r)   rµ   Úexpiresr,   r   r+   r¶   )r
   rº   Zlast_lsZdt_lastr	   r	   r   Útest_leap_seconds_expires�  s
    z/TestLeapSecondsBasics.test_leap_seconds_expiresN)r   r   r   r¸   r»   r	   r	   r	   r   r²   ‘  s   r²   c                   @   s¾   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zej	 
d
dgdfddgdfdgdggdfg¡dd„ ƒZdd„ Zej	 
dedddƒdejeddd�ej	jeedƒdd�d �g¡d!d"„ ƒZd#d$„ Zd%S )&ÚTestLeapSecondsz9Test basic methods to control the ERFA leap-second table.c                 C   s$   t j ¡ | _t jj| _t jj| _d S r   )r)   rµ   r¶   Úerfa_lsrº   Ú_expires©r
   r	   r	   r   rª   §  s    
zTestLeapSeconds.setup_methodc                 C   s   t j | j¡ | jt j_d S r   )r)   rµ   Úsetr½   r¾   r¿   r	   r	   r   Úteardown_method¬  s    zTestLeapSeconds.teardown_methodc                 C   sf   t j ¡  t j ¡ }t j |d d… ¡ t j ¡ }t||d d… ƒ t j ¡  t j ¡ }t||ƒ d S )Néþÿÿÿ)r)   rµ   rÀ   r¶   r   )r
   rµ   Únew_leap_secondsZreset_leap_secondsr	   r	   r   Útest_set_reset_leap_seconds°  s    




z+TestLeapSeconds.test_set_reset_leap_secondsc                 C   s´   t  dddd¡dkst‚t j ¡ }||d dk  }t j |¡ t j ¡ }t||ƒ t  dddd¡dksjt‚t jjtdddƒk s‚t‚t jj	sŽt‚t j ¡  t  dddd¡dks°t‚d S )Néâ  rZ   rA   ç     €B@r³   éá  ç      B@)
r)   ry   r+   rµ   r¶   rÀ   r   rº   r   Zexpired)r
   rµ   Zpart_leap_secondsrÃ   r	   r	   r   Útest_set_leap_seconds¼  s    



z%TestLeapSeconds.test_set_leap_secondsztable,match)rÇ   r'   g      $@ÚJanuary)rÇ   rZ   ra   )rÇ   é   rY   Zjump)rÇ   rË   rB   Ú	dimensionc              	   C   sT   t jt|d�� tj |¡ W 5 Q R X ttj ¡ | jƒ t 	dddd¡dksPt
‚d S )N©ÚmatchrÅ   rZ   rA   rÆ   )r=   ZraisesÚ
ValueErrorr)   rµ   rÀ   r   r¶   r½   ry   r+   )r
   ÚtablerÎ   r	   r	   r   Útest_validationÍ  s    zTestLeapSeconds.test_validationc                 C   s6  t  dddd¡dkst‚t j ¡ }||d dk  }||d dk }t j |¡}|dksZt‚tt j ¡ | jƒ t j |¡}|dks„t‚tt j ¡ | jƒ t j |¡ t  dddd¡dksºt‚t j |¡}|t	|ƒksÖt‚t  dddd¡dksît‚t j |¡ t j |¡}|t	|ƒk�st‚t  dddd¡dk�s2t‚d S )	NrÅ   rZ   rA   rÆ   r³   rÇ   r   rÈ   )
r)   ry   r+   rµ   r¶   Úupdater   r½   rÀ   r.   )r
   rµ   Úold_leap_secondsrÃ   Ún_updater	   r	   r   Útest_update_leap_secondsÚ  s&    
z(TestLeapSeconds.test_update_leap_secondsÚ
expirationé)	  rZ   z1 January 2345z
2345-01-01Ztai)Úscaler   zastropy not availabler:   )Zmarksc                    sÄ   G ‡ fdd„dt jƒ}tj ¡ }tj | |¡¡ tjjtdddƒksJt	‚|d d… }|dd … }tj |¡ tjjtdddƒks†t	‚tj 
| |¡¡}|t|ƒks¨t	‚tjjtdddƒksÀt	‚d S )Nc                       s   e Zd Z” ZdS )z;TestLeapSeconds.test_with_expiration.<locals>.ExpiringArrayN©r   r   r   rº   r	   ©rÖ   r	   r   ÚExpiringArrayþ  s   rÛ   r×   rZ   iöÿÿÿ)rH   r°   r)   rµ   r¶   rÀ   r›   rº   r   r+   rÒ   r.   )r
   rÖ   rÛ   rµ   rÓ   rÃ   rÔ   r	   rÚ   r   Útest_with_expiration÷  s    
ÿz$TestLeapSeconds.test_with_expirationc              	   C   sN   G dd„ dt jƒ}tj ¡ }tjtjdd�� tj | 	|¡¡ W 5 Q R X d S )Nc                   @   s   e Zd ZdZdS )zCTestLeapSeconds.test_with_expiration_warning.<locals>.ExpiringArrayZincomprehensibleNrÙ   r	   r	   r	   r   rÛ     s   rÛ   znon-datetime.*parsing it raisedrÍ   )
rH   r°   r)   rµ   r¶   r=   Zwarnsr{   rÀ   r›   )r
   rÛ   rµ   r	   r	   r   Útest_with_expiration_warning  s    
ÿz,TestLeapSeconds.test_with_expiration_warningN)r   r   r   Ú__doc__rª   rÁ   rÄ   rÉ   r=   r>   ZparametrizerÑ   rÕ   r   Úparamr   r?   r(   rÜ   rÝ   r	   r	   r	   r   r¼   ¥  s>   ÿÿÿÿü

ÿÿý
r¼   )!r   r=   ÚnumpyrH   Znumpy.testingr   r   r   r)   Zerfa.tests.helperr   Zastropy.timer   ÚImportErrorr”   Ú__file__r#   r$   rQ   r`   rr   r   r‡   r‰   r’   r–   r—   rŸ   r¢   r£   r¤   r²   r¼   r	   r	   r	   r   Ú<module>   s4   $ $%	)
#