
    R1iI                        d Z ddlZ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	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mZmZ dd	lmZ dd
lmZ 	 ddlmZmZ dZ!ddddddddddddddddZ" G d de      Z# G d d e#      Z$d! Z% G d" d#e$      Z& G d$ d%e'      Z( G d& d'e(e      Z) G d( d)e(e      Z* G d* d+e      Z+ G d, d-e      Z,d. Z-y# e$ r ddl mZmZ Y w xY w)/aT  Tests for ``jplephem``.

See the accompanying ``jpltest`` module for a more intense numerical
test suite that can verify that ``jplephem`` delivers, over hundreds of
examples, the same results as when the ephemerides are run at JPL.  This
smaller and more feature-oriented suite can be run with::

    python -m unittest discover jplephem

    N)DocTestSuiteELLIPSIS)partial)BytesIO)	Ephemeriscommandline)OutOfRangeError)DAFFTPSTRNAIF_DAF)SPK)Struct)SkipTestTestCase{Gz?                        	   
      i+  i-  i  i  )mercury barycenterzvenus barycenter	earthmoonzmars barycenterjupitersaturnuranusneptuneplutosunmercuryvenusmoonearthmarsc                   *    e Zd Zd Zd Zd Zd Zd Zy)TestDAFBytesIOc           !         t        d      j                  }t        d      j                  }t        dj                  ddddj	                  dd	      dd
dddt
        ddj	                  dd      dj                   |d       |d       |d       |d       |d       |d       |d       |d       |d      g	      j	                  dd      dj	                  dd	       |d      dz   |d      dz  dj                   |d       |d       |d       |d       |d        |d!       |d"       |d#       |d      g	      j	                  dd      d$j	                  dd	      g            S )%N<dz<i    s   DAF/SPK s      s         Internal Name<       s      s        LTL-IEEEs[                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             s)                                                                                                                                                                                                                                                                                                           s   Comment Recordi       r   r   r   e      /         Summary Name 1i     i  r   o      M          Summary Name 2)r   packr   joinljustr   )selfwordintegers      Q/home/cursorai/projects/iching/venv/lib/python3.12/site-packages/jplephem/test.py
sample_dafzTestDAFBytesIO.sample_daf3   s   d|  ,##sxx""2t, ##D%0 HHQQQS	S	)*&

 
 uT5! ##D$/ J J HHQQQS	S	)*&

 
 uT5! ##D$/k6!
 6 6 6	r.   c                    | j                         }t        |      }| j                  } ||j                  d        ||j                  d        ||j
                  d        ||j                  d        ||j                  d        ||j                  d        ||j                  d        ||j                  d       y )Ns   DAF/SPKr   r   r/   r     r2   )rH   r
   assertEquallocidwndnilocifn_textfwardbwardfreelocfmt)rD   fdeqs       rG   test_headerzTestDAFBytesIO.test_headern   s    OOF
188Z 
144
144
1==*+
177A
177A
1665
188[!r.   c                    | j                         }t        |      }t        |j                               }| j                  } |t        |      d        ||d   d        ||d   d       | j                  } |t        |j                  |d   d               dgdz          |t        |j                  |d   d               dgdz         y )	Nr   r   r9   )g     @Y@g     @i@r6   r7   r8   r   r@   )g     [@g     k@r=   r>   r?        H@r:        H@)rH   r
   list	summariesrK   lenassertSequenceEqualmaprD   rT   rU   r^   rV   s        rG   test_segmentszTestDAFBytesIO.test_segments{   s    OOF'	
3y>1
9Q<KL
9Q<KL%%
4il1o&'&C8
4il1o&'&C8r.   c                 8   | j                         }t        |      }|j                  dddgdz         t        |j	                               }| j
                  } |t        |      d        ||d   d        ||d   d	        ||d
   d       | j                  } |t        |j                  |d   d               dgdz          |t        |j                  |d   d               dgdz          |t        |j                  |d
   d               dgdz         y )N   Summary Name 3     @^@      m@W       v@r:   r   r   rY   r   rZ   r   )re   )rg   rh   ri   rJ   i  r[   r\   )	rH   r
   	add_arrayr]   r^   rK   r_   r`   ra   rb   s        rG   test_add_segmentzTestDAFBytesIO.test_add_segment   s   OOF	%':VHsNK'	
3y>1
9Q<KL
9Q<KL
9Q<MN%%
4il1o&'&C8
4il1o&'&C8
4il1o&'&C8r.   c                    | j                         }t        |      }|j                  j                  d       |j                  j	                  t        d      j                  |j                               |j                  dddgdz         |j                  j                  d       |j                  j	                  t        d      j                  d             t        |j                               }| j                  } |t        |      d        ||d	   d
        ||d   d        ||d   d       | j                  } |t        |j                  |d	   d               dgdz          |t        |j                  |d   d               dgdz          |t        |j                  |d   d               dgdz         y )Ni  r-   re   rf   rj      r   r   r   rY   rZ   r   )re   )rg   rh   ri   i  i  r[   r:   r\   )rH   r
   fileseekwriter   rA   summaries_per_recordrk   r]   r^   rK   r_   r`   ra   rb   s        rG   +test_add_segment_when_summary_block_is_fullz:TestDAFBytesIO.test_add_segment_when_summary_block_is_full   sj   OOF 	
M"	VD\&&q'='=>?	%':VHsNK 	
M"	VD\&&q)*'	
3y>1
9Q<KL
9Q<KL
9Q<MN%%
4il1o&'&C8
4il1o&'&C8
4il1o&'&C8r.   N)__name__
__module____qualname__rH   rW   rc   rl   rs    r.   rG   r+   r+   2   s    9v"99$9r.   r+   c                        e Zd Z fdZ xZS )TestDAFRealFilec                     t         t        |          }t        j                  dd      }|j                  |j                                |j                  d       |S )Nzw+bjplephem_test)modeprefixr   )superry   rH   tempfileNamedTemporaryFilerq   getvaluerp   )rD   bytes_iorT   	__class__s      rG   rH   zTestDAFRealFile.sample_daf   sI    $:<''U?K	!!#$	q	r.   )rt   ru   rv   rH   __classcell__)r   s   @rG   ry   ry      s     r.   ry   c                      t        d      )Nz%mmap() not supported on this platform)OSError)argskws     rG   fake_mmap_that_raises_OSErrorr      s    
9
::r.   c                       e Zd Zd Zd Zy)TestDAFRealFileWithoutMMapc                 L    t         j                   | _         t        t         _         y N)mmapr   rD   s    rG   setUpz TestDAFRealFileWithoutMMap.setUp   s    II	1	r.   c                 .    | j                   t         _         y r   )r   r   s    rG   tearDownz#TestDAFRealFileWithoutMMap.tearDown   s    II	r.   N)rt   ru   rv   r   r   rw   r.   rG   r   r      s    
2r.   r   c                   j    e Zd ZddZd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)_CommonTestsNc                     t        | j                  t              }|\  }}} ||d        ||d        ||d       |y |\  }}}	 ||d        ||d        ||	d       y )Ndeltagp=AgFGAgG!AgQ,BCgQ8"Agp=
jAr   assertAlmostEqual	epsilon_m
rD   xyzxyzdotrV   xyzdxdydzs
             rG   check0z_CommonTests.check0   sn    T++9=1a
1k
1l
1k>
B
2{
2y
2yr.   c                     t        | j                  t              }|\  }}} ||d        ||d        ||d       |y |\  }}}	 ||d        ||d        ||	d       y )Nr   g    ?gp=W1gQkg)\!Agz%AgGz)j.r   r   s
             rG   check1z_CommonTests.check1   sn    T++9=1a
1m
1l
1l>
B
2y
2{
2zr.   c                     | j                  | j                  dd             | j                  | j                  dd             y )Nr       lBA   @mBAr   positionr   r   s    rG   test_scalar_tdbz_CommonTests.test_scalar_tdb   s0    DMM+y9:DMM+y9:r.   c                     | j                  | j                  ddd             | j                  | j                  ddd             y )Nr       lBA      @    mBA      @r   r   s    rG   test_scalar_tdb2z_CommonTests.test_scalar_tdb2   s4    DMM+y#>?DMM+y#>?r.   c                     | j                  | j                  dd             | j                  | j                  dd             y )Nr   r   )tdbr   r   r   s    rG   test_scalar_tdb_keywordz$_CommonTests.test_scalar_tdb_keyword   s4    DMM+9M=>DMM+9M=>r.   c                     | j                  | j                  ddd             | j                  | j                  ddd             y )Nr   r   r   )r   tdb2r   r   r   r   s    rG   test_scalar_tdb2_keywordz%_CommonTests.test_scalar_tdb2_keyword   s8    DMM+93MGHDMM+93MGHr.   c                 p   | j                  |||z         }| j                  |d d df          | j                  |d d df          | j                  |||      }| j                  |d d df          | j                  |d d df          | j                  |||z         \  }}| j                  |d d df   |d d df          | j                  |d d df   |d d df          | j                  |||      \  }}| j                  |d d df   |d d df          | j                  |d d df   |d d df          y )Nr   r   )r   r   r   position_and_velocity)rD   namer   r   pvs         rG   check_2d_resultz_CommonTests.check_2d_result   s"   MM$d
+AacFAacFMM$T*AacFAacF))$d
;1AacFAacF#AacFAacF#))$T:1AacFAacF#AacFAacF#r.   c                 \    t        j                  ddg      }d}| j                  d||       y )Nr   r           r   nparrayr   rD   r   r   s      rG   test_array_tdbz_CommonTests.test_array_tdb  ,    hh	9-.[#t4r.   c                 \    t        j                  ddg      }d}| j                  d||       y )Ng   lBAr   r   r   r   r   s      rG   test_array_tdb_scalar_tdb2z'_CommonTests.test_array_tdb_scalar_tdb2  r   r.   c                 f    d}d|z
  }t        j                  d|g      }| j                  d||       y )Nr   r   r   r   r   )rD   r   rU   r   s       rG   test_scalar_tdb_array_tdb2z'_CommonTests.test_scalar_tdb_array_tdb2  s4    Oxxa![#t4r.   c                     t        j                  ddg      }t        j                  ddg      }| j                  d||       y )Nr   r   r   r   r   r   r   s      rG   test_array_tdb_array_tdb2z&_CommonTests.test_array_tdb_array_tdb2  s9    hh	9-.xxc
#[#t4r.   c                 \   d}t        j                  d      dz  }t        j                  d|z  d|z  d      }| j                  d||      \  }}}|||fD ]V  }|d   }t        j                  t        j                  |            |z  }	| j                  t        t        |	            d       X y )	NgPܟs=   g    lBA      ?       @r   r   gMg<)r   oneslinspacer   diff
assertLessmaxabs)
rD   usecondr   r   r   r   r   	componentsizerelative_jitters
             rG   test_jitterz_CommonTests.test_jitter$  s    &ggbkI%{{3=#-<--S$71aAqIQ<D ggbggaj1D8OOOCO 45u= !r.   c                     | j                  d| j                        \  }}}| j                  |dd       | j                  |dd       | j                  |dd       y )Nr   gW*2Ar   r   gXxrrAg6EnA)r   jomegar   rD   r   r   r   s       rG   test_ephemeris_end_datez$_CommonTests.test_ephemeris_end_date.  s`    --T[[91a 	q"7sCq"7sCq"7sCr.   c                 f    | j                   dz
  }| j                  t        | j                  d|       y )Nr   r   )jalphaassertRaises
ValueErrorr   rD   r   s     rG   test_too_early_datez _CommonTests.test_too_early_date6  s(    kkD *dmm[#Fr.   c                 f    | j                   dz   }| j                  t        | j                  d|       y )Ng(\0@r   )r   r   r   r   r   s     rG   test_too_late_datez_CommonTests.test_too_late_date:  s(    kkE!*dmm[#Fr.   r   )rt   ru   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   r.   rG   r   r      sR    ;@?I$"5
5
55
>DGGr.   r   c                   @    e Zd Zd Zd Zd
dZd
dZd Zd Zd Z	d Z
y	)SPKTestsc                     	 t        j                  d      | _        | j                  d   }|j
                  | _        |j                  | _        y # t        $ r t	        d      w xY w)Nz	de421.bspz)the "de421.bsp" SPK file is not available)r   r   )	r   openspkIOErrorr   start_jdr   end_jdr   rD   segments     rG   r   zSPKTests.setUpA  s^    	Hxx,DH ((3-&&nn	  	HFGG	Hs   A A#c                    | j                   j                          t        j                  dk  ry t	        j
                  d      5 }t	        j                          t	        j                  dt               | ` t        j                          | j                  |xr t        |d                d d d        y # 1 sw Y   y xY w)N)r   T)recordalways)r   closesysversion_infowarningscatch_warningsresetwarningssimplefilterResourceWarninggccollectassertFalsestr)rD   ws     rG   r   zSPKTests.tearDownJ  s    d" $$D1Q""$!!(O<JJLQ-3qu:. 211s   A&B44B=c                 V    | j                   dt        |   f   }|j                  ||      S Nr   )r   target_namescomputerD   r   r   r   r   s        rG   r   zSPKTests.positionX  s+    ((1l4001sD))r.   c                 V    | j                   dt        |   f   }|j                  ||      S r  )r   r  compute_and_differentiater  s        rG   r   zSPKTests.position_and_velocity\  s-    ((1l400100d;;r.   c                 l    d}t         d   t         d   f}| j                  |   }|j                  |       y )Nr   r   r%   )r  r   r	  )rD   r   tupr   s       rG   'test_segment_with_only_two_coefficientsz0SPKTests.test_segment_with_only_two_coefficients`  s7    /0,y2II((3-))#.r.   c                 *   t        | j                         | j                  d   }| j                  t        |      |j                  d             | j                  |j                  d      d       | j                  |j                  d      d       y )Nr   r   F)verbosezR2414864.50..2471184.50  Type 2  Solar System Barycenter (0) -> Mars Barycenter (4)Tzr2414864.50..2471184.50  Type 2  Solar System Barycenter (0) -> Mars Barycenter (4)
  frame=1 source=DE-0421LE-0421)r  r   rK   describer   s     rG   test_strzSPKTests.test_strf  s    DHH((3-Ww'7'7'7'FG))%)8V	X))$)7&	'r.   c                     | j                   d   }|j                         \  }}}| j                  |j                  d       y )Nr  )r   i     )r   
load_arrayrK   shape)rD   r   initial_epochinterval_lengthcoefficientss        rG   test_loading_arrayzSPKTests.test_loading_arrayp  s:    ((3-7>7I7I7K4++];r.   c                    | j                   d   }t        j                  g d      dz   }	 |j                  |       y # t        $ r}| j                  t        |      d       | j                  t        |j                        t        j                         | j                  t        |j                        g d       Y d }~y d }~ww xY w)Nr  )g     @r   g     j@r   z5segment only covers dates 2414864.5 through 2471184.5)TFT)r   r   r   r	  r	   rK   r  assertIstypeout_of_range_timesndarrayr]   )rD   r   r   es       rG   test_out_of_range_datesz SPKTests.test_out_of_range_datesu  s    ((3-hh')3	N--c2 	NSV &< =MM$q334bjjAT!"6"679LMM		Ns   = 	CA5C  CNr   )rt   ru   rv   r   r   r   r   r  r  r  r   rw   r.   rG   r   r   ?  s+    %/*</'<
	Nr.   r   c                   4    e Zd Zd ZddZddZd Zd Zd Zy)	LegacyTestsc                     	 dd l }t        |      | _        | j                  j
                  | _        | j                  j                  | _        y # t        $ r t        d      w xY w)Nr   zMthe "de421" ephemeris package has not been installed with "pip install de421")de421ImportErrorr   r   ephr   r   )rD   r%  s     rG   r   zLegacyTests.setUp  s_    	B U#hhoohhoo  	B A B B	Bs   A A"c                 <    | j                   j                  |||      S r   )r'  r   rD   r   r   r   s       rG   r   zLegacyTests.position  s    xx  sD11r.   c                 <    | j                   j                  |||      S r   )r'  r   r)  s       rG   r   z!LegacyTests.position_and_velocity  s    xx--dC>>r.   c                 P    | j                  | j                  j                  d       y )N)r   r   
librationsr)   r%   r'   r"   	nutationsr#   r    r$   r!   r&   )rK   r'  namesr   s    rG   
test_nameszLegacyTests.test_names  s     + 	r.   c                 N   | j                   j                  dd      }| j                  |d d |dd         | j                   j                  dt        j                  ddg            }| j                  |d ddf   |dd df          | j                  |d ddf   |dd df          y )Nr   r   r   r   r   r   )r'  r  r   r   r   r   )rD   pvs     rG   test_legacy_compute_methodz&LegacyTests.test_legacy_compute_method  s    XXk95BrFBqrF#XXk288Y	4J+KLBrr!tHbAh'Brr!tHbAh'r.   c                     | j                  d| j                        \  }}}| j                  |dt               | j                  |dd       | j                  |dt               y )Nr   gntr   g   Ar   gEkhA)r   r   r   r   r   s       rG   r   z#LegacyTests.test_ephemeris_end_date  s]    --T[[91aq"4IFq.<q"39Er.   Nr!  )	rt   ru   rv   r   r   r   r/  r2  r   rw   r.   rG   r#  r#    s!    &2?(Fr.   r#  c                       e Zd Zd Zy)NAIF_DAF_Testsc                    t        t        t        dd                  5 }|d   j                  d      \  }}}| j	                  |dd       | j	                  |dd       | j	                  |d	d       d d d        y # 1 sw Y   y xY w)
N	de405.bsprbr  g   BAg   xAr   r   g̤EAgɟjA)r   r   r   r  r   )rD   kernelr   r   r   s        rG   test_single_positionz#NAIF_DAF_Tests.test_single_position  s}    ${D123vSk)))4GAq!""1nC"@""1nC"@""1nC"@ 433s   AA==BN)rt   ru   rv   r:  rw   r.   rG   r5  r5    s    Ar.   r5  c                   "    e Zd ZdZd Zd Zd Zy)CommandLineTestsi'  c                     t        j                  ddg      }| j                  |d d d       | j                  |dd  d       y )Ncommentr7     z; de405.bsp LOG FILE
;
; Creatizrom Standish's DE405 memo <<<
)r   mainrK   )rD   outputs     rG   test_comment_commandz%CommandLineTests.test_comment_command  sE    !!9k":;&HI'HIr.   c                 R    | j                  t        j                  ddg      d       y )Ndafr7  a9   1 DE-405 -1577879958.8160586 1577880064.1839132 1 0 1 2 1409 202316
 2 DE-405 -1577879958.8160586 1577880064.1839132 2 0 1 2 202317 275376
 3 DE-405 -1577879958.8160586 1577880064.1839132 3 0 1 2 275377 368983
 4 DE-405 -1577879958.8160586 1577880064.1839132 4 0 1 2 368984 408957
 5 DE-405 -1577879958.8160586 1577880064.1839132 5 0 1 2 408958 438653
 6 DE-405 -1577879958.8160586 1577880064.1839132 6 0 1 2 438654 464923
 7 DE-405 -1577879958.8160586 1577880064.1839132 7 0 1 2 464924 487767
 8 DE-405 -1577879958.8160586 1577880064.1839132 8 0 1 2 487768 510611
 9 DE-405 -1577879958.8160586 1577880064.1839132 9 0 1 2 510612 533455
10 DE-405 -1577879958.8160586 1577880064.1839132 10 0 1 2 533456 613364
11 DE-405 -1577879958.8160586 1577880064.1839132 301 3 1 2 613365 987780
12 DE-405 -1577879958.8160586 1577880064.1839132 399 3 1 2 987781 1362196
13 DE-405 -1577879958.8160586 1577880064.1839132 199 1 1 2 1362197 1362208
14 DE-405 -1577879958.8160586 1577880064.1839132 299 2 1 2 1362209 1362220
15 DE-405 -1577879958.8160586 1577880064.1839132 499 4 1 2 1362221 1362232
rK   r   r@  r   s    rG   test_daf_commandz!CommandLineTests.test_daf_command  s(    ))5+*>? B 	r.   c                 R    | j                  t        j                  ddg      d       y )Nr   r7  a  File type NAIF/DAF and format BIG-IEEE with 15 segments:
2433282.50..2469807.50  Type 2  Solar System Barycenter (0) -> Mercury Barycenter (1)
2433282.50..2469807.50  Type 2  Solar System Barycenter (0) -> Venus Barycenter (2)
2433282.50..2469807.50  Type 2  Solar System Barycenter (0) -> Earth Barycenter (3)
2433282.50..2469807.50  Type 2  Solar System Barycenter (0) -> Mars Barycenter (4)
2433282.50..2469807.50  Type 2  Solar System Barycenter (0) -> Jupiter Barycenter (5)
2433282.50..2469807.50  Type 2  Solar System Barycenter (0) -> Saturn Barycenter (6)
2433282.50..2469807.50  Type 2  Solar System Barycenter (0) -> Uranus Barycenter (7)
2433282.50..2469807.50  Type 2  Solar System Barycenter (0) -> Neptune Barycenter (8)
2433282.50..2469807.50  Type 2  Solar System Barycenter (0) -> Pluto Barycenter (9)
2433282.50..2469807.50  Type 2  Solar System Barycenter (0) -> Sun (10)
2433282.50..2469807.50  Type 2  Earth Barycenter (3) -> Moon (301)
2433282.50..2469807.50  Type 2  Earth Barycenter (3) -> Earth (399)
2433282.50..2469807.50  Type 2  Mercury Barycenter (1) -> Mercury (199)
2433282.50..2469807.50  Type 2  Venus Barycenter (2) -> Venus (299)
2433282.50..2469807.50  Type 2  Mars Barycenter (4) -> Mars (499)
rE  r   s    rG   test_spk_commandz!CommandLineTests.test_spk_command  s(    ))5+*>? B 	r.   N)rt   ru   rv   maxDiffrB  rF  rH  rw   r.   rG   r<  r<    s    GJ
&r.   r<  c                     t        d t        j                  j                  d      D              }|dk  r|S t        j
                  dk  r|S |j                  t        dt                     |S )z%Run our main documentation as a test.c              3   2   K   | ]  }t        |        y wr   )int).0ss     rG   	<genexpr>zload_tests.<locals>.<genexpr>  s     >$=qCF$=s   .)r      )r   r   jplephem)optionflags)	tupler   __version__splitr   r   addTestsr   r   )loadertestsignoreversions       rG   
load_testsr\    s]     >BNN$8$8$=>>G 6!	NN<
ABLr.   ).__doc__r   r   numpyr   r   r   r   doctestr   r   	functoolsr   ior   rR  r   r   jplephem.exceptionsr	   jplephem.dafr
   r   r   jplephem.spkr   structr   unittestr   r   r&  	unittest2r   r  r+   ry   r   r   objectr   r   r#  r5  r<  r\  rw   r.   rG   <module>ri     s  	 
   
   *   + / . .  -+ 	&A9X A9H	n 	;
 
jG6 jGZ?N|X ?NB$F, $FNAX A-x -`O  -,,-s   C C! C!