
    ƆcJ                     L   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
 	 d dlmZ n# e$ r  G d d          ZY nw xY wej        j        fdZ G d	 d
          Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z G d d          Z G d d          Z G d d          ZdS )    )datetimeN)assert_array_equalassert_array_almost_equalassert_allclose)catch_warnings)Timec                       e Zd ZdZd ZdS )r   Tc                     d S N )selfargskwargss      4lib/python3.11/site-packages/erfa/tests/test_erfa.py__init__zTime.__init__   s    D    N)__name__
__module____qualname___DUMMYr   r   r   r   r   r      s(        	 	 	 	 	r   r   c                     dd l }dd l}ddg}|                                dk    rd S |                    |            	 |                    |dd|j                  }d|j        v S # |j        t          f$ r Y d S w xY w)	Nr   nmz--defined-onlyWindowsTzutf-8)checkencodingstdouteraA2af)	platform
subprocesssystemappendrunPIPEr   SubprocessErrorOSError)pathr   r   commandouts        r   embedded_liberfar)      s    OOO%&GI% tNN4'nnWD&-jo  G G
 CJ&& &0   tts   A$ $A98A9c                   |    e Zd Zd Zd Zd Zej                             e	             d          d             Z
dS )TestVersionc                     t          t          j        d          sJ t          j        j        }t	          |t
                    sJ t          |                    d                    dk    sJ d S )Nerfa_version.   )hasattrerfaversionr-   
isinstancestrlensplit)r   r-   s     r   test_erfa_versionzTestVersion.test_erfa_version*   sg    t|^44444|0,,,,,,<%%c**++q000000r   c                 $   t          t          j        d          sJ t          j        j        }t	          |t
                    sJ t          |          dk    s!t          |          dk    r|d         dk    sJ |                    d          sJ d S )Nsofa_version   
   _20)r0   r1   r2   r9   r3   r4   r5   
startswith)r   r9   s     r   test_sofa_versionzTestVersion.test_sofa_version0   s    t|^44444|0,,,,,,L!!Q& 	G|$$*	G/;A#/E	G 	G 	G &&t,,,,,,,r   c                 v    t          t          d          sJ t          j        }|t          j        j        u sJ d S )N__version__)r0   r1   rA   r2   r   r2   s     r   test_versionzTestVersion.test_version9   s<    t]+++++"$,.......r   zsystem liberfareasonc                 j    t           j        }|                    t           j        j                  sJ d S r   )r1   rA   r>   r2   r-   rB   s     r   "test_version_with_embedded_liberfaz.TestVersion.test_version_with_embedded_liberfa>   s/    "!!$,";<<<<<<<r   N)r   r   r   r7   r?   rC   pytestmarkskipifr)   rG   r   r   r   r+   r+   )   s        1 1 1- - -/ / /
 [,,...7GHH= = IH= = =r   r+   c                     t          j        ddd          } t          j        dt           j        dz  d          }t          j        t           j         dz  t           j        dz  d          }t          j        dddddd| dddt           j        dz  dddd	ddd
          \  }}}}}}|j        dk    sJ t          j        dddddd| d         dddt           j        dz  dddd	ddd
          \  }}}}}}|j        dk    sJ t          j        |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z  dddd	ddd
          \  }}}}}}|j        dk     t          j        dd| d          \  }	}
}}|	j        dk    sJ |j        dk    sJ |j        t          j        k    sJ t          j        dd| d         d          \  }	}
}}|	j        dk    sJ |j        dk    sJ |j        t          j        k    sJ dS )z\
    Runs a set of tests that mostly make sure vectorization is
    working as expected
    g   BAglBAy                  @            @g     @      ?)rL   r   r   N)rO   rP   rL   UTCr/   )	nplinspacepir1   atco13shaped2dtfdtypedt_hmsf)jdradecaobzobhobdobrobeoiyimidihmsfs                r   test_erfa_wrapperri   D   s]    
Y 7	@	@B	S"%)Q	'	'B
+rufSj"%)Q
/
/C"&+S#sCbS#ruSy#sCc3#H #HCc3R 9"&+S#sCbeS#ruSy#sCc3#H #HCc3R 9?"&+
111dD=3tQQQ}-sCc2dDRSRSRSmCTS#ruSy#sCc3#H #HCc3R 	Y;
5!R55BB8v;&    ;$,&&&&
5!RUC88BB8r>;";$,&&&&&&r   c                  .   t          j        dt          j                   \  } }| dk    sJ |                                dk    sJ t          j        dt          j                  \  } }| dk    sJ |                                dk    sJ t          j        dddd	          }t          j                            |t          j                    t          j	        d
ddd	          }t          j                            |t          j                   t          j
        dt          j        z            }t          j                            |t          j                   t          j        dt          j        z            }t          j                            |t          j                    t          j        dd          \  } }| dk    sJ |                                dk    sJ t          j        d
ddd	          }t          j                            |d           d S )N      -)   r   r   r      +)   r   r   r   -rm   r   rM   +ro         @   g      )$   r   r   r   r/   g      ?)r1   a2afrT   rV   itema2tfaf2atestingr   tf2aanpanpmd2tftf2d)signidmsfrh   raddayss        r   test_angle_opsr   h   s   )Av&&KD%4<::<<>)))))Aru%%KD%4<::<<=((((
)Ca
%
%CJsRUF+++
)CQ
$
$CJsBE***
(2be8

CJsBE***
)BruH

CJsRUF+++)At$$KD%4<::<<=((((9S!Q$$DJtU+++++r   c                     t          j        dt          j        d          t          j        d          g          \  } }t          j                            | t          j        dz             t          j                            |t          j        dz             t          j        dt          j        d          t          j        d          g          \  } }}t          j                            | t          j        dz             t          j                            |t          j        dz             t          j                            |d           t          j        dt          j        d          t          j        d          gg dft           j	                  }t          j
        |          \  } }}}}}t          j                            | t          j        dz             t          j                            |t          j        dz             t          j                            |d           t          j                            |t          j        d           dz             t          j                            |d           t          j                            |d           t          j        t          j        dz  t          j        dz            }t          j                            |dt          j        d          dz  t          j        d          dz  gd           t          j        t          j        dz  t          j        dz  d          }t          j                            |dt          j        d          dz  t          j        d          dz  gd           t          j        t          j        dz  t          j        dz  dt          j        d          dz  dd          }t          j                            |d	         dt          j        d          t          j        d          gd           t          j                            |d
         g dd           d S )NrM   rN   rQ   )      ?rM   rM   rZ   g+=)atolr   pv)g      rM   rM   )r1   c2srT   sqrtry   r   rV   p2sarraydt_pvpv2ss2cs2ps2pv)thetaphirpvtdpdrdcs           r   test_spherical_cartesianr      s=   3bgcll;<<JE3JubeCi000JsBE#I...Hc273<<>??ME3JubeCi000JsBE#I...Jq#&&&	Crws||4oooF

$ 
$ 
$B $	"E32r2JubeCi000JsBE#I...Jq#&&&JrBGCLL=#4555Jr3'''Jr3'''sBE#I&&AJq3S(8"'#,,s:J"KRWXXXsBE#Is++AJq3S(8"'#,,s:J"KRWXXX	259beCibgcll3.>S	I	IBJr#wbgcllBGCLL(IPUVVVJr#w)9)9)9FFFFFr   c                     t          j        dddd           t                      5 } t          j        dddd           t          |           dk    sJ | d         j        t           j        k    sJ dt          | d         j                  v sJ 	 ddd           n# 1 swxY w Y   t                      5 } t          j        g dddd           t          |           dk    sJ | d         j        t           j        k    sJ d	t          | d         j                  v sJ 	 ddd           n# 1 swxY w Y   	 t          j        dg d
g dd           nC# t           j        $ r1}d|j	        d         vrJ d|j	        d         z               Y d}~nd}~ww xY w	 t          j        dg d
g dd           dS # t           j        $ r2}d|j	        d         v rJ d|j	        d         z               Y d}~dS d}~ww xY w)zI
    Test that the ERFA error reporting mechanism works as it should
      rs   rR   d   r   z1 of "dubious year (Note 1)"N)r      r   z2 of "dubious year (Note 1)")rs   "      )rs   rs   +   z)1 of "bad day (Note 3)", 1 of "bad month"Fz5Raised the correct type of error, but wrong message: r   warningzDRaised the correct type of error, but there were warnings mixed in: )
r1   datr   r5   categoryErfaWarningr4   message	ErfaErrorr   )wes     r   test_errwarn_reportingr      s    	HT1a 
		 CQaC   1vv{t} 00000-QqT\1B1BBBBBB	C C C C C C C C C C C C C C C 
		 CQ!!!1a---1vv{t} 00000-QqT\1B1BBBBBB	C C C C C C C C C C C C C C C^zzz:::s3333> ^ ^ ^6afQiG 	^]QTUTZ[\T]]]]]	^ 	^ 	^ 	^ 	^^>jjj***c22222> > > >q	! 	>> 1346!9= > > >	> 	> 	> 	> 	> 	>>sU   A(BB"B4A*D++D/2D/7E F"'FFF4 4G5'G00G5c                  d   g d} g d}d}d}g d}t          j        | |||          }|j        dk    sJ t          j                            ||           t          j        | gdz  |||          }|j        dk    sJ t          j                            ||gdz             t          j        |           }t          j        ||d	z  |d
z  |dz  |dz  gdz  d          }t          j        |ddd         |||          }	|	j        dk    sJ t          j                            |	|gdz             dS )z\
    Tests that ERFA functions working with vectors are correctly consumed and spit out
    )gݗKlgVplzg`/˿)g=>gM?[gw'UTAgo?gVY?)gd
kgK{izg}Z]ܿ˿r/   rP   )rP   r/   r   r/   rO   F)orderN)r1   abrX   rT   ry   r   r   )
pnatr   sbm1expectedresres2pnataarrinres3s
             r   test_vector_inoutsr      sh   " " "D	! 	! 	!A 	A
C( ( (H '$1c
"
"C9JsH---7D6!8Q3''D:JthZ\222 HTNNEHeU1WeAguQwa@B#NNNE751:q!S))D:JthZ\22222r   c            	          t          j        t          j        d          t          j        d                    } t          | t          j        g dg dg dg                     d S )Ng      N@r/   )rR   g+Pz?rM   )g+PzrR   rM   )rM   rM   r   )r1   rzrT   deg2radeyer   r   )r   s    r   test_rzr      sm    
3++Aa								" "     r   c                  Z   d} d}t          j        dt          j                  }g d|d<   g d|d<   t          j        | ||          }|j        dk    sJ t           j                            |d	         d
           t           j                            |d         d           t           j                            |d         g d           t           j                            |d         t          j        d                     t          j	        |          }|d         |d         c|d<   |d<   t          j        | ||          }t          j
        |d         d          rJ t          j        |gdz            }t          j        | ||          }|j        dk    sJ t           j                            |d         d           t          j        |gdz            d d d         }t          j        | ||          }	|	j        dk    sJ t           j                            |	d         d           d S )N   2BA\#?r   r   )gp=J6Wg%Agp=
@3r   )gC=gpvkYp|gQɛm@?r   pmte=*|M)@emgV*?eb)g}h2?gZ'iڿgΫ*ǿbpnr/   r   	   )rT   emptyr1   r   apcs13rX   ry   r   r   
empty_likeallcloser   )
jd1jd2r   astrompvbad	astrombadpvarrastrom2pvmatarrastrom3s
             r   
test_pv_inr      s+   
C
C	"DJ	'	'	'B  BsG  BsG [c2&&F<2 Jve}.BCCCJvd|-ABBBJvd| .E .E .E F F F Jve}bfQii888 M"EWbgE#Jc
Ce,,I{9T?,@AAAAAHbT!VEk#sE**G=D    Jwt}.BCCC xQ!$Hk#sH--G=D    Jwt}.BCCCCCr   c                     t           j        j        dk    sJ t           j        d         t          j        d          k    sJ t           j        d         t          j        d          k    sJ t           j        d         t           j        k    sJ t          j        dt           j                                      t          j                  } g d| d<   g d| d<   t          j	        g d	g d
fg dg dfg dg dfgt           j                  | d<   t          j	        g d          }t          j	        g d          }t          j
        | ||          }t          |t          j	        g d                     dS )zJ
    Check dt_eraLDBODY is correctly defined (regression test; gh-74)
    )bmdlr   r   f8r   r   r/   )gM2?gCEO?r   )gLa㧝=gA:)>gTqs*>)gfĢu=gK&H2pgyj`qY)g1b!+i?g2"*pgdƵ])g.]?gq	q݋@g9N?)g'kP~g%T?gMG?)g B&VGgzbg'WXQ)gO\d>g@>4g=7哾r   )gzg,g+3˿gdy})g7:!Slg{3yg1l˿)gYTTlg/yg2˿N)r1   dt_eraLDBODYnamesrT   rZ   r   r   viewrecarrayr   ldnr   )bobscsns       r   test_struct_ldbodyr   !  s    "&88888T"bhtnn4444T"bhtnn4444T"dj0000
 	D%&&++BK88A+++AdG!!!AdGh@@@GGGI===HHHJJJJHHHJ	K "Z) ) )AdG 
;;;	<	<B	<<<	=	=B	!R		BB ": ": ": ; ; < < < < <r   c                     t          j        dddg          \  } }| j        dk    sJ | j        t           j        k    sJ |j        dk    sJ t
          j                            | d         d         d           t
          j                            | d         d         g d	           t          j        d
d| d                   \  }}t
          j                            |d           t
          j                            |d           dS )z@
    Checks producing and consuming of ERFA c struct astrom
    r   r   rs   )r   r   r   r   r   )gt}?g9E?g԰.q?gGz@gʡE?gD@ggҼ ?N)	r1   apci13rX   rZ   dt_eraASTROMrT   ry   r   atciqz)amrd   ridis       r   test_struct_astromr   ?  s   
 [[!$455FB8u8t(((((8u Jr!uU|-ABBBJr!uSz ,F ,F ,F G G G [ube,,FBJr#7888Jr#899999r   c                      t          j        g dg dg          } t          j        |           }t          j        |                     d                    }t           j                            ||d           d S )N)rs   r   r   )g?g?r   f4gh㈵>)rtol)rT   r   r1   r   astypery   r   )xyzout64out32s      r   test_float32_inputr   T  si    
(III}}}-
.
.CHSMMEHSZZ%%&&EJue%88888r   c                        e Zd Zd Zd Zd ZdS )TestAstromNotInplacec                 b   t          j        g d          | _        | j        d                                         | _        d| _        d}d}d}t          j        | j        | j        d|||dddddd          \  | _        }t          j        | j        | j        d|||dddddd          \  | _	        }d S )	N)e@r   r   r   r   r   g   @OBAgK>v(gʾ+ۿg     ڤ@rM   g      @)
rT   r   	mjd_arrayrv   
mjd_scalarutc2mjdr1   apco13astrom_scalarastrom_array)r   paranal_longparanal_latparanal_heightr<   s        r   setupzTestAstromNotInplace.setup]  s    - - -. . .+0022   $L$/3kCc3S!: !:A  ${L$.#|[Cc3S :  :111r   c                     t          | j                  t          j        u sJ t	          j        | j        | j        | j                  }|| j        usJ t          |          t          j        u sJ d S r   )typer   rT   voidr1   aper13r   r   r   r   s     r   test_scalar_inputz&TestAstromNotInplace.test_scalar_inputm  so     D&''272222T\4?D<NOOT/////F||rw&&&&&&r   c                     t          | j                  t          j        u sJ t	          j        | j        | j        | j                  }|| j        usJ t          |          t          j        u sJ d S r   )r  r   rT   ndarrayr1   r  r   r   r  s     r   test_array_inputz%TestAstromNotInplace.test_array_inputu  so     D%&&"*4444T\4>4;LMMT.....F||rz))))))r   N)r   r   r   r  r  r  r   r   r   r   r   \  sA        : : : ' ' '* * * * *r   r   c                       e Zd Zd Zd ZdS )TestLeapSecondsBasicsc                    t           j                                        }t          |t          j                  sJ |j        t           j        u sJ t	          j        |d         dk    |d         dk     z            sJ t	          j        |d         dk    |d         dk    z            sJ t	          j        t          |d         dk                         sJ d S )	Nyeari  i  monthrs   ro   tai_utcg     @@)
r1   leap_secondsgetr3   rT   r
  rZ   dt_eraLEAPSECONDallabs)r   r  s     r   test_get_leap_secondsz+TestLeapSecondsBasics.test_get_leap_seconds  s    (,,..,
33333!T%:::::v|F+t3#F+d24 5 5 	5 	5 	5v|G,1#G,24 5 5 	5 	5 	5vc,y1E9::;;;;;;;r   c                     t           j        j        }t          |t                    sJ t           j                                        d         }t	          |d         |d         d          }||k    sJ d S )Nr  r  rs   )r1   r  expiresr3   r   r  )r   r  last_lsdt_lasts       r   test_leap_seconds_expiresz/TestLeapSecondsBasics.test_leap_seconds_expires  sm    #+'8,,,,,#''))"-76?GG,<a@@      r   N)r   r   r   r  r  r   r   r   r  r    s2        	< 	< 	<! ! ! ! !r   r  c                      e Zd ZdZd Zd Zd Zd Zej	        
                    ddgdfd	d
gdfd	gdggdfg          d             Zd Zej	        
                    d eddd          d ej         edd          ej	                             eed          d                    g          d             Zd ZdS )TestLeapSecondsz9Test basic methods to control the ERFA leap-second table.c                     t           j                                        | _        t           j        j        | _        t           j        j        | _        d S r   )r1   r  r  erfa_lsr  _expiresr   s    r   r  zTestLeapSeconds.setup  s6    (,,..(0)2r   c                 z    t           j                            | j                   | j        t           j        _        d S r   )r1   r  setr!  r"  r#  s    r   teardownzTestLeapSeconds.teardown  s.    dl+++%)]"""r   c                    t           j                                         t           j                                        }t           j                            |d d                    t           j                                        }t	          ||d d                    t           j                                         t           j                                        }t	          ||           d S )N)r1   r  r%  r  r   )r   r  new_leap_secondsreset_leap_secondss       r   test_set_reset_leap_secondsz+TestLeapSeconds.test_set_reset_leap_seconds  s    (,,..l3B3/000,0022+\#2#->???!.2244-|<<<<<r   c                 \   t          j        dddd          dk    sJ t           j                                        }||d         dk              }t           j                            |           t           j                                        }t          ||           t          j        dddd          dk    sJ t           j        j        t          ddd          k     sJ t           j        j        sJ t           j                                         t          j        dddd          dk    sJ d S )N  rs   rM        B@r          B@)	r1   r   r  r  r%  r   r  r   expired)r   r  part_leap_secondsr)  s       r   test_set_leap_secondsz%TestLeapSeconds.test_set_leap_seconds  s   xaB''4////(,,..(f)=)DE/000,0022+->???xaB''4//// (8D!Q+?+????? ((((xaB''4//////r   ztable,match)r/  r/   g      $@January)r/  rs   r   )r/     rr   jump)r/  r5  rN   	dimensionc                 F   t          j        t          |          5  t          j                            |           d d d            n# 1 swxY w Y   t          t          j                                        | j                   t          j	        dddd          dk    sJ d S )Nmatchr-  rs   rM   r.  )
rH   raises
ValueErrorr1   r  r%  r   r  r!  r   )r   tabler:  s      r   test_validationzTestLeapSeconds.test_validation  s     ]:U333 	) 	)!!%(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	4,0022DLAAAxaB''4//////s    AAAc                    t          j        dddd          dk    sJ t           j                                        }||d         dk              }||d         dk             }t           j                            |          }|dk    sJ t          t           j                                        | j                   t           j                            |          }|dk    sJ t          t           j                                        | j                   t           j                            |           t          j        dddd          dk    sJ t           j                            |          }|t          |          k    sJ t          j        dddd          dk    sJ t           j                            |           t           j                            |          }|t          |          k    sJ t          j        dddd          dk    sJ d S )	Nr-  rs   rM   r.  r  r/  r   r0  )	r1   r   r  r  updater   r!  r%  r5   )r   r  old_leap_secondsr)  n_updates        r   test_update_leap_secondsz(TestLeapSeconds.test_update_leap_seconds  s   xaB''4////(,,..'V(<t(CD'V(<(DE$++,<==1}4,0022DLAAA$++,<==1}4,0022DLAAA 	.///xaB''4////$++,<==3/000000xaB''4//// 	.///$++L993/000000xaB''4//////r   
expiration)	  rs   z1 January 2345z
2345-01-01tai)scaler   zastropy not availablerD   )marksc                     G fddt           j                  }t          j                                        }t          j                            |                    |                     t          j        j        t          ddd          k    sJ |d d         }|dd          }t          j                            |           t          j        j        t          ddd          k    sJ t          j        	                    |                    |                    }|t          |          k    sJ t          j        j        t          ddd          k    sJ d S )Nc                       e Zd Z ZdS );TestLeapSeconds.test_with_expiration.<locals>.ExpiringArrayNr   r   r   r  )rD  s   r   ExpiringArrayrK    s         GGGr   rM  rE  rs   i)rT   r
  r1   r  r  r%  r   r  r   r@  r5   )r   rD  rM  r  rA  r)  rB  s    `     r   test_with_expirationz$TestLeapSeconds.test_with_expiration  s^   	! 	! 	! 	! 	! 	! 	!BJ 	! 	! 	! (,,..l//>>??? (HT1a,@,@@@@@ (-'-./// (HT1a,@,@@@@@$++!!-002 23/000000 (HT1a,@,@@@@@@@r   c                 H    G d dt           j                  }t          j                                        }t          j        t          j        d          5  t          j                            |	                    |                     d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdZdS )CTestLeapSeconds.test_with_expiration_warning.<locals>.ExpiringArrayincomprehensibleNrL  r   r   r   rM  rQ    s        (GGGr   rM  znon-datetime.*parsing it raisedr9  )
rT   r
  r1   r  r  rH   warnsr   r%  r   )r   rM  r  s      r   test_with_expiration_warningz,TestLeapSeconds.test_with_expiration_warning   s   	) 	) 	) 	) 	)BJ 	) 	) 	) (,,..\$* AC C C 	D 	D!!,"3"3M"B"BCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   3BBBN)r   r   r   __doc__r  r&  r+  r3  rH   rI   parametrizer>  rC  r   paramr   rJ   r0   rN  rT  r   r   r   r  r    s       CC3 3 3
3 3 3
= 
= 
=0 0 0" []
	9%


 	"//
'	)	-* + +0 0+ +00 0 0: [\q!TT,e444!;--ggdH.E.E5L . N N	O 	O 	O,P Q QA AQ QA*D D D D Dr   r  )r   rH   numpyrT   numpy.testingr   r   r   r1   erfa.tests.helperr   astropy.timer   ImportErrorufunc__file__r)   r+   ri   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   <module>r_     sJ              X X X X X X X X X X  , , , , , ,!!!!!!!             *- ' ' ' '&= = = = = = = =6!' !' !'H, , ,<G G G@!> !> !>H"3 "3 "3J  &D &D &DR< < <<: : :*9 9 9 *  *  *  *  *  *  *  *F! ! ! ! ! ! ! !(tD tD tD tD tD tD tD tD tD tDs   + A A 