
    IR-e-                     B   d dl Z d dlZd dl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  e j        ej        dd          Z e j        ej        d	d
          Z e j        ej        d	d          Zd Z G d d          Z G d d          Z G d d          ZdS )    N)units)Time)SIDEREAL_TIME_MODELS)iersgV瞯<g+i)+`>rtolatol      ?g߼xV42?g߼xV4B?c                  Z    dD ]'} t           |          D ]}|t          j        j        v sJ (dS )z?The doc string is formatted; this ensures this remains working.meanapparentN)r   r   sidereal_time__doc__)kindmodels     @lib/python3.11/site-packages/astropy/time/tests/test_sidereal.pytest_doc_string_contains_modelsr      sN    $ 7 7)$/ 	7 	7ED.666666	77 7    c                   l    e Zd ZdZd Zd Zej                            dd          d             Z	d Z
dS )	TestERFATestCaseszBTest that we reproduce the test cases given in erfa/src/t_erfa_c.cc                    t          dddd          | _        t          dddd          | _        d| j        _        d| j        j        j        | j        j        z
  | j        j        j        | j        j        z
  z   z  | j        _        d S )	N   @OBAg     =@ut1jd)scaleformattt        iQ )r   time_ut1time_ttdelta_ut1_utcr   jd1jd2clss    r   setup_classzTestERFATestCases.setup_class   s    IweDIII9gT$GGG &)" $s{6<?&8: 	"""r   c                     t          j        | j        j        j        | j        j        z
  | j        j        j        | j        j        z
  z   dd          sJ d S )Nr   g+=)r	   )npallcloser    r   r#   r!   r$   selfs    r   
test_setupzTestERFATestCases.test_setup/   sd    {]!DL$44}#dl&668	
 
 
 	
 	
 	
 	
 	
r   erfa_test_input))g?-q=	eraGmst00)gLz?r/   	eraGmst06)g(?r/   	eraGmst82)gR(?r/   	eraGst00a)gT?r/   	eraGst00b)g	?r/   	eraGst06a)gY?r/   eraGst94c                    |\  }}}|d         dk    r"d}d|d         dk    rdndd	|dd          d
}n3d}d|d         dk    rdndd	|dd                                           d
}|t          j                    v sJ |t          |         v sJ | j                            |d|          }t          j        |                    d          |d|          sJ d S )N   mr   IAU   0      2dsr      	greenwichradianr
   r   )upperr   keysr    r   r)   r*   to_value)r,   r.   result	precisionnamer   
model_namegsts           r   test_iau_modelsz!TestERFATestCases.test_iau_models7   s    #2	47c>>DLT!W^^rrLLQRRLLLJJDTT!W^^rrTTQRR@P@PTTTJ+02222221$77777m))$ZHH{3<<116)TTTTTTTTr   c                     t          dddd          }|                    d          }d}t          j        |                    t
          j                  |z
            dk     sJ d S )	Nr       @r   r   )r   r   tio#;?r/   )r   earth_rotation_angler)   absrF   urC   )r,   r    eraexpecteds       r   test_erazTestERFATestCases.test_eraR   sd    	74uEEE++E22(vcll18,,x7885@@@@@@r   N)__name__
__module____qualname__r   r'   r-   pytestmarkparametrizerL   rV    r   r   r   r      s        LL
 
 
"
 
 
 [	
 U U UA A A A Ar   r   c                       e Zd ZdZed             Zed             Zd Zd Zd Z	d Z
d Zd	 Zd
 Zej                            dd          d             Zd Zd Zd ZdS )TestSTzTest Greenwich Sidereal Time.  Unlike above, this is relative to
    what was found earlier, so checks changes in implementation, including
    leap seconds, rather than correctnessc                     t           j        j        | _        dt           j        _        t	          g dd          | _        t	          | j        d          | _        d S )NF)2012-06-30 12:00:00z2012-06-30 23:59:59z2012-06-30 23:59:60z2012-07-01 00:00:00z2012-07-01 12:00:00utc)r   120d10d)location)r   confauto_downloadorig_auto_downloadr   t1t2r%   s    r   r'   zTestST.setup_class_   s_    !%!8"'	   	
 	
 	
 cf777r   c                 2    | j         t          j        _        d S Nri   r   rg   rh   r%   s    r   teardown_classzTestST.teardown_classp       "%"8	r   c                     t          j        g d          }| j                            dd          }t	          |j        |          sJ dS )z@Compare Greenwich Mean Sidereal Time with what was found earlier)g"Y,c@g?"2@g&,S42@gF2@g5x@r   rB   Nr)   arrayrj   r   allclose_hoursvalue)r,   gmst_comparegmsts      r   	test_gmstzTestST.test_gmstt   sY    x  
 
 w$$V[99dj,7777777r   c                     t          j        g d          }| j                            dd          }t	          |j        |          sJ dS )zDCompare Greenwich Apparent Sidereal Time with what was found earlier)grc@g	'32@g/E2@g8'&X2@g:@r   rB   Nrr   )r,   gst_comparerK   s      r   test_gstzTestST.test_gst   sY    h  
 
 g##J<<ci5555555r   c                 B   t          ddddd          }|                                }dt          j        z  }t	          j        ||z
            dt          j        z  k     sJ t          j        |j        j	        |j        j
                  }t          j                                        }d	 |                    |          D             \  }}t          j        | t          j        | t          j        |t	          j        d
                                        }|t	          j        |d         |d                   t          j        z  z   }	t	          j        ||	z
            dt          j        z  k     sJ t          ddddd          }
|
                                }t          j        t	          j        d          |          }|t	          j        |d         |d                   t          j        z  z   }t	          j        ||z
            dt          j        z  k     sJ dS )z,Comare ERA relative to erfa.era00 test case.r   rN   r   )r   r   r   )r   rf   r   rP   绽|=c              3   T   K   | ]#}|                     t          j                  V  $d S rm   )rF   rS   rad).0cs     r   	<genexpr>z"TestST.test_era.<locals>.<genexpr>   s0      AA!**QU##AAAAAAr      )r      r/   )-   r   r   N)r   rQ   rS   rC   r)   rR   erfasp00r   r#   r$   r   earth_orientation_tablegetpm_xyrxryrzeyearctan2deg2rad)r,   trT   rU   sp
iers_tablexpypr	expected1rk   era2r2	expected2s                 r   rV   zTestST.test_era   s   GD6OOO$$&&(183vcHn%%(88888Yqtx**15577
AAZ-=-=a-@-@AAABGRC"dgb"&))&<&<==>>
1T7AdG < < HI	vcIo&&)99999)WTG5QQQ&&((WRZ^^Q''
2d8RX > >!( JK	vdY&''%!(*:::::::r   c                     | j                             dd          }| j                             dd          }t          |j        |j                  sJ dS )z6Check that Mean and Apparent are within a few seconds.r   rB   r   N)rj   r   within_2_secondsru   )r,   rw   rK   s      r   test_gmst_gst_closezTestST.test_gmst_gst_close   sP    w$$V[99g##J<<	4:6666666r   c                     | j                             dd          }| j                             d          }t          |j        |j                  sJ dS )zACheck that mean sidereal time and earth rotation angle are close.r   rB   rO   N)rj   r   rQ   r   ru   )r,   rw   rT   s      r   test_gmst_era_closezTestST.test_gmst_era_close   sN    w$$V[99g**511	4:6666666r   c                     | j                             dd          }| j                            dd          }t          |j        |j                  sJ dS )z:Check that Greenwich time does not depend on self.locationr   rB   Nrj   r   rk   rt   ru   )r,   gmst1gmst2s      r   &test_gmst_independent_of_self_locationz-TestST.test_gmst_independent_of_self_location   sP    %%fk::%%fk::ek5;7777777r   c                 "   | j                             dd          }| j                             dd          }t          |j        |j                  sJ t	          j        t	          j        ||z
            dt          j        z  k              sJ dS )z4Check that Greenwich and local sidereal time differ.r   rB   r   r}   N)	rj   r   rt   ru   r)   allrR   rS   	hourangle)r,   rw   lmsts      r   test_gmst_vs_lmstzTestST.test_gmst_vs_lmst   s    w$$V[99w$$VQ//dj$*55555vbfTD[))EAK,??@@@@@@@r   r   r   c                 0   t          j        g d          t          j        g d          d}| j                            |d          }| j                            |          }t	          |j        ||                   sJ t	          ||z
                      d          j        | j        j        j        	                    d                    sJ | j
                            || j        j        j                  }t	          |j        ||                   sJ dS )ztCompare Local Sidereal Time with what was found earlier,
        as well as with what is expected from GMST
        )gҬK1-@gH	@g(ay	@g@4
@g_S-@)gL1-@gH8	@g|q(/
@g91
@gpтS-@r   rB   12hr   N)r)   rs   rk   r   rt   ru   wrap_atrf   lonrF   rj   )r,   r   lst_comparer   lmst2lmst1s         r   test_lstzTestST.test_lst   s*    H       
 
* %%dK88%%d++ek;t+<=====U]##E**0G ))+66
 
 	
 	
 	

 %%dDG,<,@AAek;t+<=======r   c                     | j                             dd          }| j                            d          }t          |j        |j                  sJ d S )Nr   rd   )	longituder   )r,   r   r   s      r   test_lst_string_longitudez TestST.test_lst_string_longitude   sQ    %%f%??%%f--ek5;7777777r   c                 6   t          j        t                    5  | j                            d           d d d            n# 1 swxY w Y   t          j        t                    5  | j                            dd            d d d            d S # 1 swxY w Y   d S )Nr   )rZ   raises
ValueErrorrj   r   r+   s    r   test_lst_needs_locationzTestST.test_lst_needs_location   s	   ]:&& 	* 	*G!!&)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*]:&& 	0 	0G!!&$///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s#   AAA%BBBc                    t          j        g d          }| j                            d          }| j                                        }t	          |j        |          sJ t	          ||z
                      d          j        | j        j        j        	                    d                    sJ | j
                            | j        j                  }t	          |j        |          sJ d S )N)g˲W,-@g^,+4@gC3@g9P<X@gKDM-@rO   r   r   )r)   rs   rk   rQ   rt   ru   r   rf   r   rF   rj   )r,   lera_comparegera2lera2lera1s        r   	test_lerazTestST.test_lera   s    x  
 
 ,,U33,,..ek<88888U]##E**0G ))+66
 
 	
 	
 	
 ,,TW-=>>ek<8888888r   N)rW   rX   rY   r   classmethodr'   ro   rx   r{   rV   r   r   r   r   rZ   r[   r\   r   r   r   r   r]   r   r   r_   r_   Z   s       - - 8 8 [8  9 9 [98 8 86 6 6; ; ;*7 7 77 7 78 8 8A A A [V%9::"> "> ;:">H8 8 8
0 0 09 9 9 9 9r   r_   c                       e Zd ZdZed             Zed             Zej        	                    dd          d             Z
ej        	                    dd          d	             Zd
S )TestModelInterpretationzECheck that models are different, and that wrong models are recognizedc                     t           j        j        | _        dt           j        _        t	          dgdd          | _        d S )NFra   rb   rc   )r   rf   )r   rg   rh   ri   r   r   r%   s    r   r'   z#TestModelInterpretation.setup_class  s7    !%!8"'	+,EOTTTr   c                 2    | j         t          j        _        d S rm   rn   r%   s    r   ro   z&TestModelInterpretation.teardown_class  rp   r   r   r   c                 V   t          j        t          |                                         d          D ]\  }}| j                            |d|          }| j                            |d|          }t          j        |j        |j        k              sJ t          |j        |j                  sJ | j                            |d|          }| j                            |d|          }t          j        |j        |j        k              sJ t          |j        |j                  sJ dS )z3Check models give different answers, yet are close.   rB   N)
	itertoolscombinationsr   rE   r   r   r)   r   ru   within_1_second)r,   r   model1model2gst1gst2lst1lst2s           r   test_model_uniquenessz-TestModelInterpretation.test_model_uniqueness  s    (4 &++--q
 
 
	; 
	;NFF 6''k6BBD6''k6BBD6$*
233333"4:tz:::::6''dF;;D6''dF;;D6$*
233333"4:tz::::::
	; 
	;r   )r   other)r   )r   r   c                    t          j        t                    5  | j                            |dd           d d d            n# 1 swxY w Y   t          t          |                                                   t          t          |                                                   z
  D ]}t          j        t                    5  | j                            |d|           d d d            n# 1 swxY w Y   t          j        t                    5  | j                            |d |           d d d            n# 1 swxY w Y   d S )NrB   nonsense)rZ   r   r   r   r   setr   rE   )r,   r   r   r   s       r   "test_wrong_models_raise_exceptionsz:TestModelInterpretation.test_wrong_models_raise_exceptions"  s    ]:&& 	@ 	@F  {J???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ -e499;;<<s &++--@
 @
 
 	8 	8E z** ? ?$$T;>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?z** 8 8$$T47778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 	8s5   AA
AC++C/	2C/	D88D<	?D<	N)rW   rX   rY   r   r   r'   ro   rZ   r[   r\   r   r   r]   r   r   r   r     s        OOU U [U 9 9 [9 [V%9::; ; ;:; [G 
8 
8 
8 
8 
8r   r   )	functoolsr   r   numpyr)   rZ   astropyr   rS   astropy.timer   astropy.time.corer   astropy.utilsr   partialr*   rt   r   r   r   r   r_   r   r]   r   r   <module>r      sx                             2 2 2 2 2 2      ""2;UFFF#)#BKcMMM$9$R[sNNN 7 7 7<A <A <A <A <A <A <A <A~h9 h9 h9 h9 h9 h9 h9 h9V*8 *8 *8 *8 *8 *8 *8 *8 *8 *8r   