
    R1i{                     Z   d Z 	 ddlmZm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mZ ddlmZ 	 ddlmZ ddlZddlmZmZmZmZmZ dd	lmZ dd
lm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z'm(Z( ddl'm)Z)m*Z*mZm+Z+ ddl,m-Z-m.Z. ddl/m0Z0  ed      Z1de1_2        e1jf                  Z3e1jh                  Z4e1jj                  Z5 e6e1de1jn                        Z8dZ9dez  Z:dZ;dZ<dZ=i ddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7Z>d8Z?e	j                  dd9 d:k(  se	j                  dd9 d;k(  rejn                  e_8        d< ZAd= ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIdE ZJdF ZKdG ZLdH ZMdI ZNdJ ZOdK ZPdL ZQe)j                  sdMndNZSdO ZTdP ZUdQ ZVdR ZWdS ZXdT ZYdU ZZdV Z[dW Z\dX Z]dY Z^dZ Z_d[ Z`d\ Zad] Zbd^ Zcd_ Zdd` Zeda Zfdb Zgdc ZhdxddZide Zjdf Zkdg Zldh Zmdi Zndj Zodk Zpdl Zqdm ZrdnZsdoZtdpZudqZvdr Zwds Zxdt Zydu Zzdv Z{e|dwk(  r e        yy#  ddlmZmZ Y xY w# e$ r
 ddlmZ Y w xY w)yzTest suite for SGP4.    )TestCasemainN)DocTestSuiteELLIPSIS)piisnan)get_data)StringIO)WGS72OLDWGS72WGS84Satrecjday)wgs72)invjdaynewtonnurv2coe)
days2mdhms_day_of_year_to_month_day)sgp4sgp4init)apiconveniencesioomm)
export_omm
export_tlesetUpi'  assertRaisesRegexgH׊>g     f@zE1 00005U 58002B   00179.78495062  .00000023  00000-0  28098-4 0  4753zE2 00005  34.2682 348.7242 1859667 331.7664  19.3264 10.82419157413667zE2 00007  34.2682 348.7242 1859667 331.7664  19.3264 10.82419157413669satnum   
satnum_str00005classificationUoperationmodeiepochyr	epochdaysg;Pyf@
jdsatepochg   @BAjdsatepochFg`;P?bstarg0yv>ndotgXWKh=nddot        eccogǐR?argpog0b)@inclogv#?mogy?no_kozaig'7u.?nodeog nuX@gx<r@   r6      )r6      c                  V    t        j                  t        t              } t	        |        y N)r   
twoline2rvLINE1LINE2verify_vanguard_1sats    N/home/cursorai/projects/iching/venv/lib/python3.12/site-packages/sgp4/tests.py!test_satrec_built_with_twoline2rvrC   M   s    


E5
)Cc    c                  d    t        j                  t        t        t              } t        | d       y )NTlegacy)r   r<   r=   r>   r   r?   r@   s    rB   !test_legacy_built_with_twoline2rvrH   Q   s    
--ue
,Cc$'rD   c                      t               }  | j                  t        dt        d   t        gt        t                t        |        y Nr'   r    )r   r   r   VANGUARD_ATTRSVANGUARD_EPOCHsgp4init_argsr?   r@   s    rB   %test_satrec_initialized_with_sgp4initrN   U   sA    
(CCLLx 	
 
~	& crD   c                      t               }  | j                  t        dt        d   t        gt        t                t        | j                  d       y )Nar    )r   r   r   rK   rL   rM   assertEqualr&   r@   s    rB   3test_satrec_initialized_with_sgp4init_in_afspc_moderR   `   sI    
(CCLLx 	
 
~	& !!3'rD   c                      t        j                         } t        t        dt        d   t
        gt        t              | fz     t        | d       y )Nr'   r    TrF   )model	Satelliter   r   rK   rL   rM   r?   r@   s    rB   %test_legacy_initialized_with_sgp4initrV   k   sD    
//
CsN8,n	~	&#	/ c$'rD   c                     d} d}t        j                  | |      }t        j                  ddg      }t        j                  ddg      }|j	                  ||      \  }}}t        |      ddgk(  sJ t        j                  |      j                         g dg d	gk(  sJ t        j                  |      j                         g dg d	gk(  sJ y )
NzE1 44160U 19006AX  20162.79712247 +.00816806 +19088-3 +34711-2 0  9997zE2 44160 095.2472 272.0808 0216413 032.6694 328.7739 15.58006382062511g   @BAg   BAgq?r9      )FFF)TTT)r   r<   nparray
sgp4_arraylistr   tolist)l1l2rA   jd0jd1ervs           rB   9test_whether_array_logic_writes_nan_values_to_correct_rowre   v   s    	PB	PB


B
#C
((Iy)
*C
((J
+
,CnnS#&GAq!7q!f88A;$9;M#NNNN88A;$9;M#NNNNrD   c                  4    t        dd      } t        | d       y )N  gfffff`@)r!         !   r/   )r   rQ   )tups    rB   test_days2mdhmsrl      s    
T9
%C()rD   c                  Z    t        dddddd      \  } }t        | d       t        |d       y )	Ni  
   	      9      g   FBAg[?)r   rQ   assertAlmostEqual)jdfrs     rB   
test_jday2rv      s/    $Ar2r*FBIb,-rD   c                       G d dt         j                        } t        j                  ddddddd |              }t        j                  |      \  }}t        |d	       t        |d
       y )Nc                   H    e Zd ZdZ ej
                  d      Zd Zd Zd Z	y)&test_jday_datetime.<locals>.UTC_plus_4UTC   )hoursc                     | j                   S r;   offsetselfdatetimes     rB   	utcoffsetz0test_jday_datetime.<locals>.UTC_plus_4.utcoffset       ;;rD   c                      y)Nz
UTC plus 4 r   s     rB   tznamez-test_jday_datetime.<locals>.UTC_plus_4.tzname   s    rD   c                     | j                   S r;   r~   r   s     rB   dstz*test_jday_datetime.<locals>.UTC_plus_4.dst   r   rD   N)
__name__
__module____qualname____doc__dt	timedeltar   r   r   r   r   rD   rB   
UTC_plus_4ry      s$    A&		 	rD   r   i     r{   r   r!      g   @BAgͶJ?)r   tzinfor   r   jday_datetimerQ   rs   )r   datetime_localrt   ru   s       rB   test_jday_datetimer      s]    RYY  [[r1aB:<HN''7FB Ib,-rD   c                      t        j                  t        t              } t	        j
                  |       }t        j                  }t        |t        j                  ddddddd|             y )N  r9         2      i1 )
r   r<   r=   r>   r   sat_epoch_datetimerz   rQ   r   r   )rA   r   zones      rB   test_sat_epoch_datetimer      sP    


E5
)C..s3HD"++dAr2r2vtLMrD   c                      t         t        fD ]f  } t        | d         }t        t	        j
                  |       |       t        t	        j                  | d d       |        t	        j                  |        h y )ND   )r=   r>   intrQ   r   compute_checksumfix_checksumverify_checksum)linechecksums     rB   test_good_tle_checksumr      sY    utBx=B''-x8BOOD"I.5
4 	 rD   c                      t         d   } t        | d       t         d d dz   }t        t        t        j
                  |       t        t	        j                  |      t                y )Nr   3r   7)r=   rQ   assertRaises
ValueErrorr   r   r   )r   bads     rB   test_bad_tle_checksumr      sJ    RyH#
*s
CR//5$e,rD   c                  Z   t        t        d      } t        | j                  d      j	                               }t        g d      }t        ddg      }|j                  d       |D ]  }|j                  d      st        |      }|dd	 }|dd	 }t        j                  ||      }t        j                  ||t              }t        |      \  }}	t        |      \  }
}|j                  |vrt        ||       t        |
|       |j                  |vst        |	|       t        ||        y)
a&  Check `export_tle()` round-trip using all the TLEs in the test file.

    This iterates through the satellites in "SGP4-VER.TLE",
    generates `Satrec` objects and exports the TLEs.  These exported
    TLEs are then compared to the original TLE, closing the loop (or
    the round-trip).

    SGP4-VER.TLEascii)ibe  iq  5  i6  7  r   r   i.  1NE   )r	   r   iterdecode
splitlinessetadd
startswithnextr   r<   r   r   r   r    rQ   )data	tle_linesexpected_errs_line1expected_errs_line2line1line2satrec
satrec_oldactual_line1actual_line2actual_line1_oldactual_line2_olds               rB   test_tle_exportr      s    Hn-DT[[)4467I ABuen- E"$Y cr
cr
""5%0]]5%7
 &0%7"l-7
-C**== 33e,(%0== 33e,(%0- rD   c                      dD ]d  } t               }t        j                         }d|| <    |j                  t        d|d   t
        gt        |        t        t        t        |       f y )N)r2   r5   r1   r3   g      r'   r    )
r   rK   copyr   r   rL   rM   r   r   r   )anglerA   wrong_vanguard_attrss      rB   4test_export_tle_raises_error_for_out_of_range_anglesr      sf    0h-224&*U#3,X6	
/0	
 	ZS1 1rD   c                      dD ]A  \  } }t        j                  | |      }t        |      \  }}t        | |       t        ||       C y )N))zE1 44542U 19061A   21180.78220369 -.00000015  00000-0 -66561+1 0  9997zE2 44542  54.7025 244.1098 0007981 318.8601 283.5781  1.86231125 12011)r   r<   r   rQ   )r   r   rA   outline1outline2s        rB   "test_tle_import_export_round_tripsr      sH    u u-'_(E8$E8$rD   c                  Z   t        t        j                  t        t        t
                     t        t        j                  t        t        t                     t        t        j                  t        t        t                     t        t        j                  t        t                     y r;   )
assert_wgs72oldr   r<   r=   r>   r   assert_wgs72r   assert_wgs84r   r   rD   rB   -test_all_three_gravity_models_with_twoline2rvr      s`    
 F%%eUH=>""5%78""5%78 ""5%01rD   c                  V   t               } t        t              } | j                  t        dt        d   t
        g|  t        |         | j                  t        dt        d   t
        g|  t        |         | j                  t        dt        d   t
        g|  t        |        y rJ   )r   rM   rK   r   r   rL   r   r   r   r   r   )rA   argss     rB   +test_all_three_gravity_models_with_sgp4initr     s     (C(DCLL3x 8.P4PCCLL^H5~MMCLL^H5~MMrD   r{   rn   c                     | j                  d      \  }}}t        |d   dt               t        |d   dt               t        |d   dt               y )NBڼZs@r   g;TrX   gXľ@r6   g8o@sgp4_tsincers   GRAVITY_DIGITSrA   rb   rc   rd   s       rB   r   r   )  sJ    oo01GAq!ad.?ad-~>ad-~>rD   c                     | j                  d      \  }}}t        |d   dt               t        |d   dt               t        |d   dt               y )Nr   r   gA>TrX   gtXľ@r6   g8o@r   r   s       rB   r   r   /  sJ    oo01GAq!ad/@ad-~>ad-~>rD   c                     | j                  d      \  }}}t        |d   dt               t        |d   dt               t        |d   dt               y )Nr   r   g*|TrX   g`-Zľ@r6   guW:o@r   r   s       rB   r   r   5  sJ    oo01GAq!ad/@ad.?ad-~>rD   c                      d} d}t        j                  | |      }t        |j                  d       t        |j                  d       t        |j
                  d       y )NzE1  4859U 21001A   21007.63955392  .00000000  00000+0  00000+0 0  9990zE2  4859 000.0000 000.0000 0000000 000.0000 000.0000 01.00000000    09i  r%   21001A)r   r<   rQ   r    r$   intldesg)r^   r_   rA   s      rB   test_satnum_leading_spacesr   ?  sM     
QB	PB


B
#C

D!""C(h'rD   c                  (   d } g d}|D ]9  \  }} | |      }t        |j                  |       t        |j                  |       ; t        t              }|D ]9  \  }} j
                  t        d|t        g|  t        |j                  |       ; y )Nc                 ~    t        j                  t        j                  d|       t        j                  d|             S )Nr#   )r   r<   r=   replacer>   )satnum_strings    rB   make_satz-test_satnum_alpha5_encoding.<locals>.make_satJ  s2      w!F!&w!FH 	HrD   ))i A0000)iD E8493)i J2931)i" P4018)ih W1928)i0 Z9999r'   )rQ   r    r"   rM   rK   r   r   rL   )r   casesr    r   rA   r   s         rB   test_satnum_alpha5_encodingr   I  s    H
 E "'}%CJJ'CNNM2 "'
 (D!&UC?$?CJJ' "'rD   c                      t               } t        t        d      5   | j                  t        ddt
        gt        t                d d d        y # 1 sw Y   y xY w)Nzcannot exceed 339999r'   i 0 )r   r   r   r   r   rL   rM   rK   r@   s    rB   test_satnum_that_is_too_larger   `  sI    
(C	:'=	>		

 >*	
 
?	>	>s   ,AAc                  l    t        j                  t        t              } t	        | j
                  d       y )N58002B)r   r<   r=   r>   rQ   r   r@   s    rB   test_intldesg_with_6_charactersr   k  s"    


E5
)Ch'rD   c                  \    t        j                  dd      } t        | j                  d       y )NzE1 39444U 13066AE  20110.89708219  .00000236  00000-0  35029-4 0  9992zE2 39444  97.5597 114.3769 0059573 102.0933 258.6965 14.8209894934469713066AE)r   r<   rQ   r   r@   s    rB   test_intldesg_with_7_charactersr   o  s,    


		C i(rD   c                      t               }  | j                  t        dt        d   t        dz
  gt        t                t        | j                  d       y )Nr'   r    g     v@c   )r   r   r   rK   rL   rM   rQ   r(   r@   s    rB   +test_1990s_satrec_initialized_with_sgp4initr   x  sL    
(CCLLx 	
 
~	& R rD   c                  8   t               } d| _        | j                  dk(  sJ d| _        | j                  dk(  sJ d| _        | j                  dk(  sJ d| _        | j                  dk(  sJ d| _        | j
                  dk(  sJ d| _        | j                  dk(  sJ y )NSabcdefgr   {   i  abcde)r   r$   r   ephtypeelnumrevnumr"   r@   s    rB   test_settersr	    s    
(CC$$$CL<<9$$$CK;;"CI99CJ::CN>>W$$$rD   c                      t        dd      \  } }t        | dd       t        |dd       t        dd      \  } }t        | d	d       t        |d
d       y )N      ?g333333@gKy @rh   )placesg	`8Sh@g?g@gRU~@g<saA@)r   rs   )e0ms     rB   test_hyperbolic_orbitr    sX     S#EBb+B7a+B7S#EBb+B7a*26rD   c                  l    t        j                  t        t              } t	        | j
                  d       y )Nr   )r   r<   r=   r>   rQ   r(   r@   s    rB   test_correct_epochyrr    s$     

E5
)CQrD   c                  v    t        j                  t        t        t              } t        | j                  d       y )Nr   )r   r<   r=   r>   r   rQ   r(   r@   s    rB   test_legacy_epochyrr    s$     --ue
,CT"rD   c                      t        j                  t        t        t              } | j
                  | j                  k(  sJ y r;   )r   r<   r=   r>   r   nor4   )ss    rB   !test_support_for_old_no_attributer    s*    
eUE*A441::rD   c                  :   g d} d}t        | d      D ]8  \  }}t        d|dz         D ]!  }t        |d      }t        ||f|       |dz  }# : d| d<   d}t        | d      D ]8  \  }}t        d|dz         D ]!  }t        |d      }t        ||f|       |dz  }# : y )N)      r     r  r  r  r  r  r  r  r  rX   F   T)	enumerateranger   rQ   )month_lengthsday_of_yearmonthlengthdayrk   s         rB   test_months_and_daysr$    s     EMK"=!4vFQJ'C+K?Cc*1K ( 5 M!K"=!4vFQJ'C+K>Cc*1K ( 5rD   c            	      N   d} d}t        j                  ddddddd      }t        j                  | |t              }t        |j                  |       |j                  t        j                  	      }t        j                  | |      }t        t        j                  |      |       y )
NzE1 25544U 98067A   19366.82137887  .00016717  00000-0  10270-3 0  9129zE2 25544  51.6392  96.6358 0005156  88.7140 271.4601 15.49497216  6061rg   rX   r   *   /   i )r   )r   r   r   r<   r   rQ   epochr   r   rz   r   r   )rP   bcorrect_epochrA   s       rB   test_december_32r+    s    
 	PAOAKKaBB?M --1e
$C		=)!))1A1A)BM 

Aq
!C//4mDrD   c                     t         j                  dk  ry t        t        t	        j
                  d            5  t        j                  t        j                  dd      t        t               d d d        y # 1 sw Y   y xY w)N   zyour TLE lines are broken because they contain non-ASCII characters:

1 00005U 58002B   00179.78495062  .00000023\xa0 00000-0  28098-4 0  4753
2 00005  34.2682 348.7242 1859667 331.7664  19.3264 10.8241915741366723 u   23 )sysversion_infor   r   reescaper   r<   r=   r   r>   r   r   rD   rB   test_non_ascii_first_liner4    s`    
$	:ryy 2I (J 
K 	emmE84eUC	
K 
K 
K   4A55A>c                     t         j                  dk  ry t        t        t	        j
                  d            5  t        j                  t        t        j                  dd      t               d d d        y # 1 sw Y   y xY w)Nr-  zyour TLE lines are broken because they contain non-ASCII characters:

1 00005U 58002B   00179.78495062  .00000023  00000-0  28098-4 0  4753
2 00005 \xa034.2682\xa0348.7242 1859667 331.7664  19.3264 10.82419157413667 34u    34)r0  r1  r   r   r2  r3  r   r<   r=   r>   r   r   r   rD   rB   test_non_ascii_second_liner8    sZ    
$	:ryy 2 ( 

 	eU]]5(;UC
 
 
r5  c                      t        t        t        j                  d            5  t	        j
                  t        j                  dd      t        t               d d d        y # 1 sw Y   y xY w)Na  TLE format error

The Two-Line Element (TLE) format was designed for punch cards, and so
is very strict about the position of every period, space, and digit.
Your line does not quite match.  Here is the official format for line 1
with an N where each digit should go, followed by the line you provided:

1 NNNNNC NNNNNAAA NNNNN.NNNNNNNN +.NNNNNNNN +NNNNN-N +NNNNN-N N NNNNN
1 00005U 58002B   00179.78495062  .000000234 00000-0  28098-4 0  4753r/  234)
r   r   r2  r3  r   r<   r=   r   r>   r   r   rD   rB   test_bad_first_liner;    sO    	:ryy 2I (J 
K 	emmE515%@
K 
K 
K   4A!!A*c                      t        t        t        j                  d            5  t	        j
                  t        t        j                  dd      t               d d d        y # 1 sw Y   y xY w)Na  TLE format error

The Two-Line Element (TLE) format was designed for punch cards, and so
is very strict about the position of every period, space, and digit.
Your line does not quite match.  Here is the official format for line 2
with an N where each digit should go, followed by the line you provided:

2 NNNNN NNN.NNNN NNN.NNNN NNNNNNN NNN.NNNN NNN.NNNN NN.NNNNNNNNNNNNNN
2 00005 34 .268234 8.7242 1859667 331.7664  19.3264 10.82419157413667r7  z34 )
r   r   r2  r3  r   r<   r=   r>   r   r   r   rD   rB   test_bad_second_liner>    sO    	:ryy 2I (J 
K 	eU]]5%8%@
K 
K 
Kr<  c                      d} t        t        t        j                  |             5  t	        j
                  t        t        t               d d d        y # 1 sw Y   y xY w)Nz,Object numbers in lines 1 and 2 do not match)	r   r   r2  r3  r   r<   r=   BAD2r   )msgs    rB   test_mismatched_linesrB    s5    
8C	:ryy~	6
eT5) 
7	6	6s   $AAc                    t         }|r|j                         }|d= |d= |d= |d= |j                         D ]  \  }}	 t        t	        | |      |        y # t
        $ r#}|j                  \  }d|d|f|_        |d }~ww xY w)Nr(   r)   r*   r+   zfor attribute z, )rK   r   itemsrQ   getattrAssertionErrorr   )rA   rG   attrsnamevaluerb   messages          rB   r?   r?     s    E

)+,- {{}e	T*E2 %  	vvHG04g>@AFG	s   A	BA<<Bc           
      N    | d   | d   | d   | d   | d   | d   | d   | d   | d	   f	S )
zBGiven a dict of orbital parameters, return them in sgp4init order.r,   r-   r.   r0   r1   r2   r3   r4   r5   r   )ds    rB   rM   rM   "  sD    gJ&	1W:qy!G*gJ$:'
< <rD   c                  D    d } t        t        j                  | g d       y )Nc                     t        |dz  d      \  }}| j                  |z   }| j                  |z   }| j                  ||      \  }}}|| j                  k(  sJ |||fS )N     @r  )divmodr*   r+   r   error)	r   tsincewholefractionrt   ru   rb   rc   rd   s	            rB   invokez>test_satrec_against_tcppver_using_julian_dates.<locals>.invoke1  si     &#6x&(*++b"%1aFLL   !QwrD   rX   rX   r9   r9   r{   r.  r9   run_satellite_against_tcppverr   r<   rU  s    rB   .test_satrec_against_tcppver_using_julian_datesrZ  /  s     "&"3"3V_MrD   c                  D    d } t        t        j                  | g d       y )Nc                 X    | j                  |      \  }}}|| j                  k(  sJ |||fS r;   )r   rQ  )r   rR  rb   rc   rd   s        rB   rU  z8test_satrec_against_tcppver_using_tsince.<locals>.invoke=  s5    $$V,1aFLL   !QwrD   rV  rW  rY  s    rB   (test_satrec_against_tcppver_using_tsincer]  ;  s    
 "&"3"3V_MrD   c                  2    d } d }g d}t        | ||       y )Nc                 <    t        j                  | |t              }|S r;   )r   r<   r   )r   r   rA   s      rB   make_legacy_satellitez:test_legacy_against_tcppver.<locals>.make_legacy_satelliteF  s    mmE5%0
rD   c                 V    t        | |      \  }}| j                  | j                  f||fS r;   )r   rQ  error_message)r   rR  rc   rd   s       rB   run_legacy_sgp4z4test_legacy_against_tcppver.<locals>.run_legacy_sgp4J  s.    FF#1f223Q99rD   ))rX   z;mean eccentricity -0.001329 not within range 0.0 <= e < 1.0)rX   z;mean eccentricity -0.001208 not within range 0.0 <= e < 1.0)r9   zBmrt 0.996159 is less than 1.0 indicating the satellite has decayed)r9   zBmrt 0.996252 is less than 1.0 indicating the satellite has decayed)r{   z,semilatus rectum -0.103223 is less than zero)r.  zCperturbed eccentricity -122.217193 not within range 0.0 <= e <= 1.0)r9   zBmrt 0.830534 is less than 1.0 indicating the satellite has decayed)rX  )r`  rc  errss      rB   test_legacy_against_tcppverre  D  s"    :D ""7$OrD   c                    t        t        d      }|j                  dd      }|j                  d      j	                  d      }g }t        t        | ||            }t        |      t        |      cxk(  rdk(  sJ  J d }t        ||      }t        |d      D ]  \  }	\  }
}|d	k(  rd
|dd z   }d|v r||
k(  }n|j                         }|
j                         }|d d D cg c]  }t        |       }}|d d D cg c]  }t        |       }}t        |      t        |      k(  xr) t        d t        ||      D              xr |dd  |dd  k(  }|st        d|	|
|fz        d|vs|} t        ||       y c c}w c c}w )Nztcppver.out   rD   r   Ti  rX   )start(Use previous data line)z       0.00000000   k   xxr8   c              3   Z   K   | ]#  \  }}t          ||z
  cxk  xr	 t         k  nc  % y wr;   )rQ  ).0rP   rb   s      rB   	<genexpr>z0run_satellite_against_tcppver.<locals>.<genexpr>  s/      !8A Fa!e,u,,!8s   )+z<Line %d of output does not match:

Expected: %r
Got back: %r)r	   r   r   r   r   r\   generate_test_outputlenzipr  splitfloatallr   rQ   )r<   rU  expected_errorsr   tcppver_lines
error_listactual_linesprevious_data_line	linepairslinenoexpected_lineactual_linesimilarafieldsefieldsrP   actual7rb   	expected7s                      rB   rX  rX  ^  s    Hm,D<<s#DKK(33D9MJ,ZLML}\!29c99999M<0I09)10M,,44.-b56K ;"m3G!'')G#))+G*1"1+7+Qa+G7,3BQK9Kq%(KI9GI. + !$Wi!8 + wqr{*   =+6	78 8 {"!,M 1NR 
O,3 89s   E9:E>c              #   (  K   t        t        d      }t        |j                  d      j	                               }|D ]Q  }|j                  d      st        |      } | ||      }d|j                  fz   t        ||||      D ]  }|  S yw)zGenerate lines like those in the test file tcppver.out.

    This iterates through the satellites in "SGP4-VER.TLE", which are
    each supplemented with a time start/stop/step over which we are
    supposed to print results.

    r   r   r   z%ld xx
N)	r	   r   r   r   r   r   r   r    generate_satellite_output)	r<   rU  rx  r   r   r   r   r   r   s	            rB   rp  rp    s      Hn-DT[[)4467I$YE5)FMM+++-z3DJ3 s   BBc              #   l  K   t         j                  } || d      \  }}}t        |d         r2t        |d         r$t        |d         r|j                  |       d yt	        d||       d |dd j                         D        \  }}	}
|}||	k  rY||cxk(  rdk(  r	n n||
z  } || |      \  }}}|dk7  r|d	k7  r|j                  |       yt        | ||||       ||
z  }||	k  rY||	z
  |
d
z
  k  r; || |	      \  }}}|dk7  r|d	k7  r|j                  |       yt        | |	|||       yyw)zAPrint a data line for each time in line2's start/stop/step field.r/   r   rX   r6   ri  Nc              3   2   K   | ]  }t        |        y wr;   )rt  )rn  fields     rB   ro  z,generate_satellite_output.<locals>.<genexpr>  s     H5GE5<5Gs   r   )r   Ngư>)r   mur   appendformat_short_liners  format_long_line)r   rU  r   rx  r  rb   rc   rd   tstarttendtsteprR  s               rB   r  r    s\     
BVS!GAq!QqT{uQqT{uQqT{!((
CA
&&HU23Z5E5E5GHFD%F
D.V"s"eOF(1a6a9na vvr1a88% D. }ut|#&1a6a9na vtRA66 $s   C*D4-AD4c           	      >    d| |d   |d   |d   |d   |d   |d   fz  S )z?Short line, using the same format string that testcpp.cpp uses.z2 %16.8f %16.8f %16.8f %16.8f %12.9f %12.9f %12.9f
r   rX   r6   r   )rR  rc   rd   s      rB   r  r    s?     A!adAaD!A$!adD4 4 4rD   c                 >   t        |||      j                  d      }| j                  | j                  z   |dz  z   }t	        |      \  }}}	}
}}t        |||      \  }}}}}}}}}}}|d|||t        z  |t        z  |t        z  |t        z  |t        z  |||	|
||fz  z   S )z>Long line, using the same format string that testcpp.cpp uses.
rO  zI %14.6f %8.6f %10.5f %10.5f %10.5f %10.5f %10.5f %5i%3i%3i %2i:%2i:%9.6f
)r  stripr*   r+   r   r   rad)r   rR  r  rc   rd   shortrt   yearmonr#  hrminutesecprP   eccinclnodeargpnur  arglattruelonlonpers                           rB   r  r    s     fa+11$7E			V//	/&6/	AB&-bk#D#sB 
1b	Q3dD"a& 	% 	
3S$s(DHbf	#tS#r63	  rD   zVANGUARD 1              
1 00005U 58002B   20287.20333880 -.00000016  00000-0 -22483-4 0  9998
2 00005  34.2443 225.5254 1845686 162.2516 205.2356 10.84869164218149
zMARIO                   
1 55123U 98067UQ  23115.44827133  .00787702  29408-3  15680-2 0  9999
2 55123  51.6242 216.2930 0014649 331.8976  28.1241 15.99081912 18396
a  <?xml version="1.0" encoding="UTF-8"?>
<ndm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://sanaregistry.org/r/ndmxml_unqualified/ndmxml-2.0.0-master-2.0.xsd">
<omm id="CCSDS_OMM_VERS" version="2.0">
<header><CREATION_DATE/><ORIGINATOR/></header><body><segment><metadata><OBJECT_NAME>MARIO</OBJECT_NAME><OBJECT_ID>1998-067UQ</OBJECT_ID><CENTER_NAME>EARTH</CENTER_NAME><REF_FRAME>TEME</REF_FRAME><TIME_SYSTEM>UTC</TIME_SYSTEM><MEAN_ELEMENT_THEORY>SGP4</MEAN_ELEMENT_THEORY></metadata><data><meanElements><EPOCH>2023-04-25T10:45:30.642912</EPOCH><MEAN_MOTION>15.99081912</MEAN_MOTION><ECCENTRICITY>.0014649</ECCENTRICITY><INCLINATION>51.6242</INCLINATION><RA_OF_ASC_NODE>216.2930</RA_OF_ASC_NODE><ARG_OF_PERICENTER>331.8976</ARG_OF_PERICENTER><MEAN_ANOMALY>28.1241</MEAN_ANOMALY></meanElements><tleParameters><EPHEMERIS_TYPE>0</EPHEMERIS_TYPE><CLASSIFICATION_TYPE>U</CLASSIFICATION_TYPE><NORAD_CAT_ID>55123</NORAD_CAT_ID><ELEMENT_SET_NO>999</ELEMENT_SET_NO><REV_AT_EPOCH>1839</REV_AT_EPOCH><BSTAR>.1568E-2</BSTAR><MEAN_MOTION_DOT>.787702E-2</MEAN_MOTION_DOT><MEAN_MOTION_DDOT>.29408E-3</MEAN_MOTION_DDOT></tleParameters></data></segment></body></omm>
</ndm>
av  OBJECT_NAME,OBJECT_ID,EPOCH,MEAN_MOTION,ECCENTRICITY,INCLINATION,RA_OF_ASC_NODE,ARG_OF_PERICENTER,MEAN_ANOMALY,EPHEMERIS_TYPE,CLASSIFICATION_TYPE,NORAD_CAT_ID,ELEMENT_SET_NO,REV_AT_EPOCH,BSTAR,MEAN_MOTION_DOT,MEAN_MOTION_DDOT
MARIO,1998-067UQ,2023-04-25T10:45:30.642912,15.99081912,.0014649,51.6242,216.2930,331.8976,28.1241,0,U,55123,999,1839,.1568E-2,.787702E-2,.29408E-3
c                     t         j                         \  } }}t        j                  ||      }t	        t        j                  t        t                          }t               }t        j                  ||       t        ||       y r;   )	MARIO_TLEr   r   r<   r   r   	parse_xmlr
   	MARIO_XML
initializeassert_satellites_matchline0r   r   sat1fieldssat2s         rB   test_omm_xml_matches_old_tler    `    #..0E5%UE*D#-- 345F8DNN4 D$'rD   c                     t         j                         \  } }}t        j                  ||      }t	        t        j                  t        t                          }t               }t        j                  ||       t        ||       y r;   )r  r   r   r<   r   r   	parse_csvr
   	MARIO_CSVr  r  r  s         rB   test_omm_csv_matches_old_tler    r  rD   c           
          t        |       D ]Q  }|j                  d      rt        | |d       }|%t        |      r1t        ||      }t	        |||d|d|       S y )N_ z != )dirr   rE  callablerQ   )r  r  attrvalue1value2s        rB   r  r  '  s_    D	??3tT*>Ft$FFT66$JK rD   c            	         t         j                         \  } }}t        j                  ||      }t	        |d      }t        |i dddddddd	d
dddddddddddddddddddddd d!d"dd#d$d%d&d'       y )(Nz
VANGUARD 1ARG_OF_PERICENTERguqHd@BSTARg+;CENTER_NAMEEARTHCLASSIFICATION_TYPEr%   ECCENTRICITYg1+o?ELEMENT_SET_NOi  EPHEMERIS_TYPEr   EPOCHz2020-10-13T04:52:48.472320INCLINATIONg48EA@MEAN_ANOMALYg	i@MEAN_ELEMENT_THEORYSGP4MEAN_MOTIONg`쵇%@MEAN_MOTION_DDOTr/   MEAN_MOTION_DOTg:0yNORAD_CAT_IDr!   	OBJECT_IDz	1958-002BOBJECT_NAMEg0*0l@TEMEi6U  rz   )RA_OF_ASC_NODE	REF_FRAMEREV_AT_EPOCHTIME_SYSTEM)VANGUARD_TLEr   r   r<   r   rQ   )r  r   r   rA   r  s        rB   test_omm_exportr  6  s    &113E5%


E5
)C\*F X 	w 	s	
 		 	# 	! 	- 	w 	 	v 	{ 	C 	8 	  	[!" 	|#$ #+ rD   c                     ddl m}  || |t               t        j                  dk\  rfd }d }t        t        ||      }|j                  t        di |       |j                  t        di |       |j                  t        d	i |       |S )
z>Run our main documentation as a test, plus all test functions.r   )add_test_functionsr7   c                     t        j                         | _        t        j                  t         j                  j                  t                     t        j                  | _	        dt        _        y )NT)
osgetcwdolddirchdirpathdirname__file__r   acceleratedoldaccelsuites    rB   r   zload_tests.<locals>.setUp_  s:    99;ELHHRWW__X./ __EN"COrD   c                 l    t        j                  | j                         | j                  t        _        y r;   )r  r  r  r  r   r  r  s    rB   tearDownzload_tests.<locals>.tearDownd  s    HHU\\"#nnCOrD   )optionflagsr   r  )r   )zsgp4.conveniences)zsgp4.functions)	sgp4.wulfgarr  r   r0  r1  dictr   addTestsr   )loadertestsignorer  r   r  optionss          rB   
load_testsr  U  s~     0vuh/ 6!	#
	- 858L|6g67|C7CD|@@ALrD   __main__)F)}r   	unittest2r   r   unittestr   r   r2  r  r0  doctestr   r   mathr   r   pkgutilr	   r   r
   ImportErrornumpyrY   sgp4.apir   r   r   r   r   sgp4.earth_gravityr   sgp4.extr   r   r   sgp4.functionsr   r   sgp4.propagationr   r   r   r   r   sgp4.exporterr   r   
sgp4.modelrT   	_testcasemaxDiffrQ   rs   r   rE  assertRaisesRegexpr   rQ  r  r=   r>   r@  rK   rL   r1  rC   rH   rN   rR   rV   re   rl   rv   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r  r$  r+  r4  r8  r;  r>  rB  r?   rM   rZ  r]  re  rX  rp  r  r  r  r  r  r  r  r  r  r  r  r  r   r   rD   rB   <module>r     sX   ((  	 	 
 *  "  9 9 $ . . @ + + + 0 W		 ##// %%I':%88:  	bjOOOa ' c	
 S q  ) : Z   S I  !" #$ 	
%& #'( ),   BQ6!S%5%5bq%9V%C!)!<!<H(		((
O *
.
.*N!-/1b
2%2$ __A 
 ???((.	
()	!%*
7 #(E&DD
A
A*$<
NNP49-v2"7H40			
((
L>4 zF U(''  "!!"s   H H 
HH*)H*