
    R1i&#                         d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	m
Z
mZmZ d dlmZ d dlmZmZ d dlmZmZ dZd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%y)    )assert_raises)absarangesqrt)	constants)Distanceloadwgs84wms)	length_of)ApparentBarycentric)ITRSPositioniers2010)i   #   -   c               #   8   K   t        j                          y wN)r	   	timescale     ]/home/cursorai/projects/iching/venv/lib/python3.12/site-packages/skyfield/tests/test_topos.pytsr      s     
..
s   c               #      K   t        j                         } | j                  ddddd       | j                  ddddddg       y w)N              )r	   r   utc)r   s    r   tr"      sD     		B
&&r1b!
$$
&&r1b1a&
))s   AAc                     t        j                  ddd      } t        |       dk(  sJ t        |       dk(  sJ t        j                  ddgdd	gd
dg      } t        |       dk(  sJ t        |       dj	                  |       k(  sJ t        j                  t        d      t        dd      t        dd            } t        |       dk(  sJ t        |       dj	                  |       k(  sJ y )NAc][B@'\g     @zBWGS84 latitude +36.7138 N longitude -112.2169 E elevation 2400.0 mzW<GeographicPosition WGS84 latitude +36.7138 N longitude -112.2169 E elevation 2400.0 m>      ?g       @g      @g      @g      @g      @zTWGS84 latitude [+1.0000 +2.0000] N longitude [3.0000 4.0000] E elevation [5.0 6.0] mz<GeographicPosition {0}>      $@g      0@g      4@g      :@zWGS84 latitude [+0.0000 +1.0000 ... +4.0000 +5.0000] N longitude [10.0000 11.0000 ... 14.0000 15.0000] E elevation [20.0 21.0 ... 24.0 25.0] m)r
   latlonstrreprformatr   )ws    r   .test_latitude_longitude_elevation_str_and_reprr-      s   Wi0Aq6 B C C C7 D E E E 	c3Z#sc3Z8Aq6	!  
 7077::::VC[&t"4fT46HIAq6	1  
 7077::::r   c                      t        g d      } t        |       }t        j                         }|j	                  ddddd      }|j                  |       y )N)      r   )aur         ;   )r   r   r	   r   r!   at)dpr   r"   s       r   test_raw_itrs_positionr8   +   sB    IAQA		B
tRR$ADDGr   c            
         d} t        j                         }|j                  ddddddd| z  g      }t        j                  d	d
      }|j                  |      }|j                  j                  d d df   |j                  j                  d d df   z
  }|j                  j                  d d df   }t        || |z  z
        dk  sJ y )Ng     r@  r   r0   r   5   r   r&   r$   r%   r/   gǺF?)r	   r   r!   r
   r(   r5   positionkmvelocitykm_per_sr   )factorr   r"   jacobr7   	velocity1	velocity2s          r   )test_wgs84_velocity_matches_actual_motionrD   2   s    
 F		B
tRArAsV|#45ALL),EA

ac"QZZ]]1Q3%77I

##AaC(IY)!334v===r   c                     t        j                         } ddgdgdz  f| _        | j                  ddddd	      }t	        j
                  d
d
      }d}|j                  |      }||z
  dz  dz  dz  }d}||z  }t        |      dk  sJ y )Ng.B}g.B}Tg'@WQ@r0   r   r      r   "           gPmZ4@i  g     @@g     I@r&   )r	   r   delta_t_tabler!   r
   r(   lst_hours_atr   )r   r"   topexpectedactualdifference_mashorizons_ra_offset_mass          r   test_lstrP   A   s    		Bt}ykAo5B
tRR$A
,,sC
 CHa Fx'4/"4s:N",,N~$$$r   c                  ~   t        j                  ddt        j                  t        j                  z
        } | j
                  j                  \  }}}t        |t        d      z
        dk  sJ t        |dz
        dk  sJ t        |t        d      z
        dk  sJ t        j                         }|j                  ddd	d
d      }| j                  |      j                         j                  \  }}}t        |t        d      z
        dk  sJ t        |dz
        dk  sJ t        |t        d      z
        dk  sJ y )Ng     F@rH   elevation_mg      ?gH׊>g+=r:   r   r0   r   r;   g-C6?)r
   r(   r   AU_MERADitrs_xyzr1   r   r   r	   r   r!   r5   itrf_xyz)rK   xyzr   r"   s         r   +test_itrs_xyz_attribute_and_itrf_xyz_methodr[   M   s   
,,tSinny~~.M
NCllooGAq!q49}$$$q3w<%q49}$$$		B
tRAr"AffQi  "%%GAq!q49}$$$q3w<%q49}$$$r   c                 ,   d}d}dg|g|gf| _         t        j                  t        ddd      t        ddd	      d
      }| j	                  ddddd      }d}t        t        |j                  |      j                  j                  |z
              dk  sJ y )N      &@      6@rH   *      g8@ir   g8@g     E@i  r   r2      r0   )g|s@g?nKUg@gp~=)
polar_motion_tabler   r(   r   r!   maxr   r5   r<   r=   )r   xp_arcsecondsyp_arcsecondsrK   r"   rL   s         r   /test_polar_motion_when_computing_topos_positionrf   \   s    MM EM?]OCB
//#b"d+Sa->
EC
tRR#A JHs366!9%%((8345===r   c                    d}d}d}d}d}d}d}dg|g|gf| _         | j                  d	d
ddd      }t        j                  |||      }	t	        j
                  |||      }
||
_        |	|
_        |
j                         \  }}}d}d}t        |j                  |z
        dk  sJ t        |j                  |z
        dk  sJ y )Ng]mB@gL
F%i^g     @g\(\@gr]   r^   rH   r   r   r2   ra   r3   )epochg Mgis#42?gX$R >gqr>)rb   r!   r
   r(   r   
from_radecr"   centeraltazr   degrees)r   latitude	longitude	elevationra_hoursdec_degreesrd   re   r"   rK   posaltazdistance	novas_altnovas_azs                   r   2test_polar_motion_when_computing_altaz_coordinatesrx   l   s    HIIHKMM EM?]OCB
tRR$A
,,xI
6C


h1
=CCECJ		CX $I!Hs{{Y&'&000rzzH$%...r   c                     | j                  ddd      }t        g d|      }t        t        d      5  t	        j
                  |       d d d        y # 1 sw Y   y xY w)Nr   r2      )r   r   r   )r"   zyou can only calculate a geographic position from a position which is geocentric .center=399., but this position has a center of 0)r!   r   r   
ValueErrorr
   subpoint)r   angler"   r7   s       r   test_subpoint_with_wrong_centerr~      sR    
tRAGq!A	z $L 
M 	q
M 
M 
Ms   AAc                 d   | j                  dddddd      }t        j                  ||d      }|j                  |      }t        j                  |      }t        |j                  j                  |z
        }d	|z  }|d
k  sJ t        |j                  j                  |z
        }d	|z  }|d
k  sJ y N  r/         %   7   rH   rR       @wKA皙?	r!   r   r(   r5   r|   r   rm   rl   rn   r   r}   r"   rK   r7   berror_degrees	error_mass           r   test_iers2010_subpointr      s    
tQBB'A //%C
8Cq	A!A

**U23M$}4Is??++e34M$}4Is??r   c                 d   | j                  dddddd      }t        j                  ||d      }|j                  |      }t        j                  |      }t        |j                  j                  |z
        }d	|z  }|d
k  sJ t        |j                  j                  |z
        }d	|z  }|d
k  sJ y r   )	r!   r
   r(   r5   r|   r   rm   rl   rn   r   s           r   test_wgs84_subpointr      s    
tQBB'A ,,ue
5Cq	AqA

**U23M$}4Is??++e34M$}4Is??r   c                 \   | j                  ddddd      }t        j                  ddd	      j                  |      }d
}t        j                  |      }t        |j                  dz
        |k  sJ t        j                  |      }t        |j                  j                  dz
        |k  sJ y )Ni        r2   ,   Z   r   r'   rR   gư>)	r!   r
   r(   r5   	height_ofr   mgeographic_position_ofro   )r   r"   r7   
micrometerhgs         r   test_wgs84_subpoint_at_poler      s    
tQ2r"AR-003AJAqssTz?Z'''$$Q'Aq{{}}t#$z111r   c                 ~   | j                  dddddd      }dgdgd	gf| _        t        j                  ||d
      }|j	                  |      }t        j
                  |      }t        |j                  j                  |z
        }d|z  }|dk  sJ t        |j                  j                  |z
        }d|z  }|dk  sJ y )Nr   r/   r   r   r   r   rH   gfbal?gG)s?rR   r   r   )
r!   rb   r
   r(   r5   r|   r   rm   rl   rn   r   s           r   'test_wgs84_round_trip_with_polar_motionr      s    
tQBB'A EH:z9B
,,ue
5Cq	AqA

**U23M$}4Is??++e34M$}4Is??r   c                    t        j                  |d|z  d      j                  |       }| j                  rt        nd fd}fd}fd}fd}t        j
                  |      \  }} ||        ||       t        j                  |      }	 ||	       t        j                  |      }
 ||
j                          ||
j                          ||
j                          ||
j                  j                  d	       t        j                  |      }
 ||
j                          ||
j                          ||
j                          ||
j                  j                  d	       t        j                  |      }
 ||
j                          ||
j                         |
j                  j                  d	k(  sJ  ||
j                  j                  d       y )
Nr0   g     H@rR   c                     | S r   r   )rX   s    r   <lambda>z2test_latlon_and_subpoint_methods.<locals>.<lambda>   s    ar   c                      t        j                  j                         | j                         z
        dk        sJ y Nr   )r   rm   mas)latr   rX   s    r   	check_latz3test_latlon_and_subpoint_methods.<locals>.check_lat   s0    qQZZ^^%5	%A!BS!HIIIr   c                      t        j                  j                         | j                         z
        dk        sJ y r   )r   rn   r   )lonr   rX   s    r   	check_lonz3test_latlon_and_subpoint_methods.<locals>.check_lon   s0    qQ[[__%6%B!Cc!IJJJr   c                 t     t        j                  j                  | j                  z
        dk        sJ y )NHz>)r   ro   r   )r   r   rX   s    r   check_heightz6test_latlon_and_subpoint_methods.<locals>.check_height   s+    #akkmmacc&9":T"A BB Br   c                    j                   j                  }| }t        |j                        t        |j                        kD  r|xj                  dz  c_        t	        ||z
        } t        ||z
        dk        sJ y )N)r/   r   )rV   r   lenshaper   r   )xyzexpected_distancer1r2actual_distancer   rX   s        r   
check_itrsz4test_latlon_and_subpoint_methods.<locals>.check_itrs   sg    ZZ\\rxx=3rxx=(HHH#BG,_'889D@AAAr   rH   )r
   r(   r5   r   all	latlon_ofr   r   rm   rn   ro   rV   r   r|   subpoint_of)r"   r}   rr   r   r   r   r   r   r   heightg2r   rX   s              @@r    test_latlon_and_subpoint_methodsr      sT   UAI6:A
$$q'CwwKAIJBB s#HCcNcN__S!F		%	%c	*Bbkkbllr{{}}c"		Bbkkbllr{{}}c"			3	Bbkkbll<<>>S   r{{}}f%r   c                 V   | j                  dddddd      }t        j                  ||d      }|j                  |      j	                         }t        |j                  j                  |z
        }d	|z  }|d
k  sJ t        |j                  j                  |z
        }d	|z  }|d
k  sJ y r   r   )r   r}   r"   rK   r   r   r   s          r   (test_deprecated_position_subpoint_methodr      s    
tQBB'A
//%C
8Cq	A

**U23M$}4Is??++e34M$}4Is??r   N)&assayr   numpyr   r   r   skyfieldr   skyfield.apir   r	   r
   r   skyfield.functionsr   skyfield.positionlibr   r   skyfield.toposlibr   r   r}   r   r"   r-   r8   rD   rP   r[   rf   rx   r~   r   r   r   r   r   r   r   r   r   <module>r      sw     # #  3 3 ( 6 4*
;.>
%%> "/H  
2 '&Rr   