
    R1i#                        d Z ddlmZmZmZmZmZmZ ddlm	Z	 edz  Z
 ed      ZeeefZdZdez  Z	 	 d Z	 d	 Z	 d
 Z	 d Z	 d Z	 d Z	 ddZ	 d ZeZ	 d Zy)a0  The sgp4 procedures for analytical propagation of a satellite.

I have made the rather unorthodox decision to leave as much of this C++
code alone as possible: if a line of code would run without change in
Python, then I refused to re-indent it or remove its terminal semicolon,
so that in the future it will be easier to keep updating this file as
the original author's C++ continues to improve.  Thus, 5-space
indentation (!) prevails in this file.

I have even kept all of the C++ block comments (by turning them into
Python string constants) to make this easier to navigate and maintain,
as well as to make it more informative for people who encounter this
code for the first time here in its Python form.

| - Brandon Rhodes
|   Common Grounds Coffee House, Bluffton, Ohio
|   On a very hot August day in 2012

    )atan2cosfabspisinsqrt)	to_alpha5g     f@NaNT       @c	                    | j                   }	| j                  }
| j                  }| j                  }| j                  }| j
                  }| j                  }| j                  }| j                  }| j                  }| j                  }| j                  }| j                  }| j                  }| j                  }| j                  }| j                   }| j"                  }| j$                  }| j&                  }| j(                  }| j*                  }| j,                  }| j.                  } | j0                  }!| j2                  }"| j4                  }#| j6                  }$| j8                  }%| j:                  }&| j<                  }'| j>                  }(d})d}*d}+d},|(|)|z  z   }-|dk(  r|(}-|-d|*z  tA        |-      z  z   }.tA        |.      }/d|/z  |/z  dz
  }0d	|/z  tC        |.      z  }1||0z  ||1z  z   }2||0z  ||1z  z   }3||0z  ||1z  z   ||/z  z   }4||0z  ||1z  z   ||/z  z   }5||0z  ||1z  z   }6|'|+|z  z   }-|dk(  r|'}-|-d|,z  tA        |-      z  z   }.tA        |.      }/d|/z  |/z  dz
  }0d	|/z  tC        |.      z  }1|
|0z  |	|1z  z   }7|"|0z  |#|1z  z   }8|$|0z  |%|1z  z   |&|/z  z   }9||0z  ||1z  z   ||/z  z   }:| |0z  |!|1z  z   };|2|7z   }<|3|8z   }=|4|9z   }>|5|:z   }?|6|;z   }@|d
k(  rD|<|z
  }<|=|z
  }=|>|z
  }>|?|z
  }?@|z
  }@||=z   }||<z   }tA        |      }AtC        |      }B	 |dk\  r@Az  }@|?B|@z  z  }?||?z  }||@z  }||>z  }ntA        |      }CtC        |      }DA|Cz  }E|A|Dz  }F@|Dz  |=Bz  |Cz  z   }G|@ |Cz  |=|Bz  |Dz  z   }H|E|Gz   }E|F|Hz   }F|dk\  r	|tD        z  n
| tD        z   }|dk  r|dk(  r	|tD        z   }||z   |>z   |?z   B|=Az  z
  |z  z   }I|}JtG        EF      }|dk  r|dk(  r	|tD        z   }tI        J|z
        tJ        kD  r|Jk  r
|tD        z   }n	|tD        z
  }||>z  }I|z
  B|z  z
  }|||||fS )N5g>x&?)cj$?Q?yr         ?      ?      n皙?        a)&e3ee2peopghophopincoplose2se3sgh2sgh3sgh4sh2sh3si2si3sl2sl3sl4txgh2xgh3xgh4xh2xh3xi2xi3xl2xl3xl4zmolzmosr   r   twopir   r   r   )Ksatrecincloinitepinclpnodepargppmpopsmoder   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   znszesznlzelzmzfsinzff2f3sessisslssghsshsselsilsllsghlshllpepincplpghphsinipcosipsinopcosopalfdpbetdpdalfdbetxlsxnohsK                                                                              T/home/cursorai/projects/iching/venv/lib/python3.12/site-packages/sgp4/propagation.py_dpperrf      s   
 ))R::S::SKKT::S\\U::S::S::SKKTKKTKKT::S::S::S::S::S::S::S	QKKTKKTKKT::S::S::S::S::S::S::SKKTKKT SSSS C!G^R#)c"g%%RWUEkE!D(RE\CG#R"WsRxS2Xb S2Xb 3;.SBY"TE\1T2Xb SC!G^R#)c"g%%RWUEkE!D(RE\CG#R2XRS2Xb S2Xb 3;.SBY"TE\1T2Xb T3YR3YT3YRD[S4ZRCxre|tCxrTzsCxrt|uBwr5zu5zu
 3,;2%"*3C<5B;582
 J5J5EM5EM5%Z$,"664C%K$,"664DL5DL5%*c\EEM%%7H5 ckgnu}ueb3&%$,*>%)GG34%'5 ckgnu}u4%< 2%828eem+5ueR''    c&                    d}&d}'d}(d})d}*d}+d},d}-|}.|}/t        |      }0t        |      }1t        |      }2t        |      }3t        |      }4t        |      }5|/|/z  }6d	|6z
  }7t        |7      }8d
}	d
}d
}d
}
d
}| dz   |dz  z   }9dd|9z  z
  t        z  }:t        |:      };t        |:      }<dd|<z  z
  }=t        d	|=|=z  z
        }>d|;z  |>z  }?t        d	|?|?z  z
        }@dd|9z  z   }Ad|;z  |>z  }B|@|<z  d|?z  |;z  z   }Ct	        |B|C      }B|A|Bz   |:z
  }Bt        |B      }Dt        |B      }E|,}F|-}G|+}H|*}I|1}J|0}K|(}Ld	|.z  }MdD ]  }NFJz  GHz  Kz  z   }O|G |Jz  |F|Hz  |Kz  z   }P|F |Kz  |G|Hz  |Jz  z   }Q|GIz  }R|G|Kz  |F|Hz  |Jz  z   }S|F|Iz  }T|5|Qz  |4|Rz  z   }U|5|Sz  |4|Tz  z   }V|4 |Qz  |5|Rz  z   }W|4 |Sz  |5|Tz  z   }X|O|3z  |U|2z  z   }Y|P|3z  |V|2z  z   }Z|O |2z  |U|3z  z   }[|P |2z  |V|3z  z   }\|W|2z  }]|X|2z  }^|W|3z  }_|X|3z  }`d|Yz  |Yz  d|[z  |[z  z
  }ad|Yz  |Zz  d|[z  |\z  z
  }bd|Zz  |Zz  d|\z  |\z  z
  }cd|O|Oz  |U|Uz  z   z  |a|6z  z   }dd|O|Pz  |U|Vz  z   z  |b|6z  z   }ed|P|Pz  |V|Vz  z   z  |c|6z  z   }fd|Oz  |Wz  |6d|Yz  |_z  d|[z  |]z  z
  z  z   }gd|O|Xz  |P|Wz  z   z  |6d|Z|_z  |Y|`z  z   z  d|[|^z  |\|]z  z   z  z
  z  z   }hd|Pz  |Xz  |6d|Zz  |`z  d|\z  |^z  z
  z  z   }id|Uz  |Wz  |6d|Yz  |]z  d|[z  |_z  z
  z  z   }jd|V|Wz  |U|Xz  z   z  |6d|Z|]z  |Y|^z  z   z  d|\|_z  |[|`z  z   z  z
  z  z   }kd|Vz  |Xz  |6d|Zz  |^z  d|\z  |`z  z
  z  z   }l|d|dz   |7|az  z   }d|e|ez   |7|bz  z   }e|f|fz   |7|cz  z   }fLMz  }md|mz  |8z  }n|m|8z  }od|/z  |oz  }p|Y|[z  |Z|\z  z   }q|Z|[z  |Y|\z  z   }r|Z|\z  |Y|[z  z
  }s|Ndk(  s\p}tn}um}vo}wq}xr}ys}zd}{e}|f}}g}~h}i}j}k}l}a}b}c}D}FE}G|=}H|>}I@|1z  |?|0z  z   }J|0|@z  |1|?z  z
  }K|)}L dd|9z  z   Az
  t        z  }$d d!|9z  z   t        z  }%d"tz  yz  }d"|tz  zz  }d"uz  z  }d"|uz  ~z
  z  }d#vz  |z  }d#|vz  }{z
  z  }d#|vz  d$d%|6z  z
  z  |&z  }d"wz  z  }d"|wz  z
  z  }d&|wz  |&z  }d#|uz  z  }d#|uz  z
  z  }d"pz  rz  }d"|pz  sz  }d"nz  hz  }d"|nz  igz
  z  } d#mz  ez  }!d#|mz  fdz
  z  }"d#|mz  d$d%|6z  z
  z  |'z  }#d"oz  bz  }d"|oz  caz
  z  }d&|oz  |'z  }d#|nz  kz  }d#|nz  ljz
  z  }g |0|1|4|5|2|3|9|||/|6|A|	|
||||8|||||||||||||p|n|m|oq|r|s|t|u|v|wx|y|z|{|||}|~||||||||||||||| |!|"|#|.|d|e|f|g|h|i|j|k|l|a|b|c|$|%S )'Nr   r   gq j>gKl>ggqKqv?g
-P[?gt_lW?ghc      ?r   g    `@g     @g{h+@gHN?gwNt=?gkXD?gF?gո1W@gw<+>E_?)            (@      @g      8@      @      g      8r   g      .rj   gQ?@gPôo?g(@g"e?r          g      5g      "@g      2)r   r   r   r9   r   )epochr=   r@   tcr>   r?   npr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   rD   rF   c1ssc1lzsiniszcosiszcosgszsingsnmemsnodmcnodmsinommcosommsinimcosimemsqbetasqrtemsqdayxnodcestemctemzcosilzsinilzsinhlzcoshlgamzxzyzcosglzsinglzcosgzsingzcosizsinizcoshzsinhccxnoilsflga1a3a7a8a9a10a2a4a5a6x1x2x3x4x5x6x7x8z31z32z33z1z2z3z11z12z13z21z22z23s3s2s4s1s5s6s7ss1ss2ss3ss4ss5ss6ss7sz1sz2sz3sz11sz12sz13sz21sz22sz23sz31sz32sz33s                                                                                                                                          re   _dscomr   n  s
    SSTSVVVV RR%jU%jU%jV%jV%jU%jU2gTDjV6lV SUSTSgoV+S<#--6V&kT&kT:,,V3&()VD 6)V3&()V,,,S4&(Rtmj61D88RBmRBhR"gV"gV UUUUUUR2XT!66!66!66!66ebj(eck)ebj(eck)Vb6k)Vb6k)sV|b6k)sV|b6k)VVVVby2~b2-by2~b2-by2~b2-R"r')*S4Z7R"r')*S4Z7R"r')*S4Z7by2~brB)F GGR"r')*T"r'BG+,sb2gR6G/HH.J Jby2~
R#(R-(G HHb2r	BrB(F GGR"r')*Tb27*+cR"WrBw5F.GG.I Ib2r	BrB(F GGBw#%Bw#%Bw#%Dyby6!F{rzBBwb Bwb Bwb  QJSSSSSSSSSSTTTTTTTTTUUUUe^fun4UV^efn4URW Z s**S0E9Ts**e3T Ci#oSCi#oSCi$SCi4$;'SCZ#SCZ39%SCZ53:-.4SCi$TCi4$;'TCK#TCZ$SCZ4$;'S BhmSBhmRBhnSBh#)$SBY^SBY"r'"SBY%#*,-3SBhnTBh#)$TBJTBY_SBY#)$S				"	$*				 	$&	 	 	 	 "	 %(	 		 		 		 !		 %(		
 	
 	
 	
 !	
 %(	 	 	 	 !	 %(	 
	 	 	  	 %'	 
	 	 	 !	 %(	 	 	 	 !	 %(	 	 	 	 "	 %)	 	 	 	 "	 %)	 	 	 	 "	 %(	 	 	 	 !	 %(	 	 	 	  	 %'	 	 	 	 !	 %(	  !	  !	  !	  !!	  %)!	" #	 	rg   cH                    d}Hd}Id}Jd}Kd}Ld}Md}Nd}Od}Pd	}Qd
}Rd}Sd}0d|.cxk  rdk  rn nd}0d|.cxk  rdk  r
n n|*dk\  rd}0|
Sz  |z  }T||Sz  ||z   z  }U|S |z  ||z   dz
  d|z  z
  z  }V||Sz  ||z   dz
  z  }W|S |z  ||z   z  }X|,dk  s|,t         dz
  kD  rd}X|	dk7  rX|	z  }XW|Xz  z
  }YT|Rz  |z  z   }<U||Rz  |"|#z   z  z   }=V|R|z  | |!z   dz
  d|z  z
  z  z
  }>||Rz  |&|'z   dz
  z  }Z|R |z  |$|%z   z  }[|,dk  s|,t         dz
  kD  rd}[YZz   }@X}?|	dk7  r@||	z  [z  z
  }@|?|[|	z  z   }?d}\||Nz  z   t        z  }]|*|<|z  z   }*|,|=|z  z   },|+@|z  z   }+|/|?|z  z   }/|-|>|z  z   }-	 |0dk7  r t        |.| z  Q      }^|0dk(  r>||z  }_|*}`|(}*|}a|)}|*|z  }bd|*dz
  dz  z
  }c|*dk  rsdd|*z  z
  d|z  z   }ddd |*z  z   d!|z  z
  d"bz  z   }ed#d$|*z  z   d%|z  z
  d&|bz  z   }fd'd(|*z  z   d)|z  z
  d*|bz  z   }gd+d,|*z  z   d-|z  z
  d.|bz  z   }hd/d0|*z  z   d1|z  z
  d2|bz  z   }ind3d4|*z  z   d5|z  z
  d6bz  z   }dd7d8|*z  z   d9|z  z
  d:|bz  z   }ed;d<|*z  z   d=|z  z
  d>|bz  z   }fd?d@|*z  z   dA|z  z
  dB|bz  z   }gdCdD|*z  z   dE|z  z
  dF|bz  z   }h|*dGkD  rdHdI|*z  z   dJ|z  z
  dKbz  z   }indLdM|*z  z
  dN|z  z   }i|*dOk  r=dPdQ|*z  z   dR|z  z
  dSbz  z   }jdTdU|*z  z   dV|z  z
  dW|bz  z   }kdXdY|*z  z   dZ|z  z
  d[|bz  z   }ln<d\d]|*z  z   d^|z  z
  d_bz  z   }jd`da|*z  z   db|z  z
  dc|bz  z   }kddde|*z  z   df|z  z
  dg|bz  z   }l|	|	z  }mdhdidj|z  z   _z   z  }ndk|mz  }odl|	z  didj|z  z
  dm|_z  z
  z  }pdn|	z  didj|z  z   dm|_z  z
  z  }qdo|mz  |nz  }rdp|mz  |mz  }sdq|	z  |mdidj|z  z
  dr|_z  z
  z  dsdtdu|z  z   d|_z  z   z  z   z  }t|	dv|mz  dtdu|z  z
  dw|_z  z   z  dxdidj|z  z   dm|_z  z
  z  z   z  }udy|	z  djdz|z  z
  |_d{dz|z  z   dw|_z  z   z  z   z  }vdy|	z  dtdz|z  z
  |_d|dz|z  z   dw|_z  z
  z  z   z  }w|.|.z  }x^|^z  }ydm|xz  |yz  }z|zKz  }{|{|nz  cz  }2|{|oz  dz  }3|z|^z  }z|zOz  }{|{|pz  ez  }4|{|qz  fz  }5|z|^z  }zdj|zz  Lz  }{|{|rz  gz  }6|{|sz  hz  }7|z|^z  }z|zPz  }{|{|tz  iz  }8|{|uz  lz  }9dj|zz  Mz  }{|{|vz  kz  }:|{|wz  jz  };||z   |z   ]z
  |]z
  t        z  }E||>z   dj||?z   Nz
  z  z   |z
  }D`}*a}|0dk(  rdi|d}d~|z  z   z  z   }|didj|z  z   }edi|dd|z  z   z  z   }}dhdi|z   z  di|z   z  }nd|	z  |	z  didm|z  z   z  dhdi|z   z  z
  }~di|z   }dl|z  |z  |z  }dm|.z  |.z  ^z  |^z  }Adj|Az  |nz  ||z  Hz  }Bdm|Az  |z  |}z  Jz  |^z  }C|A|~z  |ez  Iz  |^z  }A||z   |z   ]z
  t        z  }E||z   Nz
  |>z   @z   |?z   |z
  }DE}F|}Gd}1|\z   }.g |*|+|,|-|.|/|0|1|2|3|4|5|6|7|8|9|:|;|<|=|>\|?@ABCDEFGS )Ng]j>g, >g 3h>gw?>gKY">WNZq?gJ]4>gjo~>UUUUUU?r   r   r   gO+ql?gTru?rj   g&pn?g3k?r   rk   g      ,@rn   g׬Ϊ?r   g/$ӿg{Gz?g)\(?g?g!rh@gX9v~*@g
ףp=J0@gZd;OM3g)\X]@g rhl@gxc@gGx$2gǘr[@g*Dj@gQkwRb@gV-Dg|?5Vn@g/$q}@gh|?s@g/$Mbgףp=
O@gVt@g
ףp@gx頀gbX9@gy&1l@gd;O@guVRgvt@g+@g$p@g/$ugClg@gߢ@gˡEsx@g(\iugʡK@g5^I}@gS@g 0sg-@gE@gl釬@g{GagHz@g{G@g(\BC@gzG?g\gG:<@gRh@gq=
#@g)\@g    8@gzGg@gffffff?ge`Tҹg(|@g(\b@g)\5@ggo_ر@gv@g/$ٴ@gSg    @R@g(\b@gfffffݴ@g\xg(AgqAgp=
@gSEg
Ag=
ףpAg(\kAg(gQ7Agq=
[AgQ]9@      ?ri   r         ?g      ?rm   g      g     A@g     C@g     #@      @gQUU?rp         @g @      $@g @@g     =@       @g      (rl   g      g      ?ro   grto@g      ?)r   r9   pow)xker   r   argpor   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   rr   gstomomdotnonodeonodedotxpidotr   r   r   r   r   r   r   r   eccoeccsqr{   argpminclmmmrz   nodemirezatimed2201d2211d3210d3222d4410d4422d5220d5232d5421d5433dedtdidtdmdtdnodtdomdtdel1del2del3xfactxlamoxlixniq22q31q33root22root44root54rptimroot32root52x2o3rE   rC   rL   rM   rN   rO   rP   sgsrT   rU   dndtthetaaonvcosisqemoemsqoeocg201g211g310g322g410g422g520g533g521g532sini2f220f221f321f322f441f442f522f523f542f543xno2ainv2temp1tempg200g300f311f330s                                                                                                                                   re   _dsinitr4    s
   , SSSVVV$UVVTSS Tr(L(2  R3Y 3Y_S3Y$+&SD3J#)d*S4Z78S3Y$++,TD3J$+&S\(9 9s5[s53;S "s(R-T"s(cCi((T#(b2gnsTz9::THc	C(TD2Is#T\(9 94ZUU--% Tb5j E)U4!8mRdQhUeaiUeaiU4!8mR		 		BHd# AIemVSRUT4iST	U22Td
 Wr\1Wt^C HrM1HtOCxRU~U!HrM1HtOCxRU~U HrM1HtOCxRU~U HrM1HtOCiRUoU HrM1HtOCiRUoU "gl2w~E'TW-W!X]2hoETWW!X]2hoETWW!X]2hoETWW!IN2Y5EE	TWWJ#hm3hoESVVT#w|3w~ETS"Y^3i$6FFTWW"Y^3i$6FFTWW"Y^3i$6FFSVV "IN2Y5EE	TWW!IN2Y5EE	TWW!IN2Y5EE	TWWU]US3;.v56T5[TU]cEk(9C&L(HITUNcEk(9C&L(HIT5L4'TeOe+Tu_sU{1BC&L1P(Q4#+#5f#DE)F HTZ%/4#+3E6M4" #%/3sU{?S6\3Q%RS TTu$cEk(9&S5[(4&=8;: ): ;Tu$sU{(:6C%K'$-7<9 )9 :T2gTTkUDj5(UfnTTkD(UTkD(UdlUfnTTkD(UTkD(UdlUEkF*TTkD(UTkD(UdlUfnTTkD(UTkD(UEkF*TTkD(UTkD(UEzE)%/%75@UTkC7U?U+B$CCbHURT AI44&4-#788T3:%T44'D.#899TS5[)S5[9Te^e+sS5[/@ADCRWKDXXT5[TT\D(4/T2X]T)D0T4Z$&-3T4Z$&-3d:TD[4'#-4T5j5(50E9UF]U*T1E9EABFU d
		
	
	
	
		
	
	 
	 
	 	
	 	
	 	
	 #	
	
 
	
 
	
 
	
 #
	 
	 
	 
	 !
	 
	 
	 
	 !
	 
	 
	 
	 "
	 
	 
	 
	 
	rg   c$           
         d}$d}%d}&d}'d}(d})d}*d}+d	},d
}-d}.d}/d}0|||,z  z   t         z  }1|||z  z   }|||z  z   }|||z  z   }|"||z  z   }"| ||z  z   } 	 d}2| dk7  r"|dk(  s||z  dk  st        |      t        |      k  rd}|}!|}|dkD  r|-}3n|.}3d}4|4dk(  r| dk7  r|t        ||$z
        z  |t        d||%z
  z        z  z   |t        d||&z
  z        z  z   }5|!|z   }6|t        ||$z
        z  d|z  t        d||%z
  z        z  z   d|z  t        d||&z
  z        z  z   }7|7|6z  }7n|||z  z   }8|8|8z   }9||z   }:|t        |9|z   |'z
        z  |t        ||'z
        z  z   |t        |8|z   |(z
        z  z   |t        |8 |z   |(z
        z  z   |t        |9|:z   |)z
        z  z   |t        |:|)z
        z  z   |t        |8|z   |*z
        z  z   |t        |8 |z   |*z
        z  z   |	t        |8|:z   |+z
        z  z   |
t        |8 |:z   |+z
        z  z   }5|!|z   }6|t        |9|z   |'z
        z  |t        ||'z
        z  z   |t        |8|z   |(z
        z  z   |t        |8 |z   |(z
        z  z   |t        |8|z   |*z
        z  z   |t        |8 |z   |*z
        z  z   d|t        |9|:z   |)z
        z  |t        |:|)z
        z  z   |	t        |8|:z   |+z
        z  z   |
t        |8 |:z   |+z
        z  z   z  z   }7|7|6z  }7t        ||z
        |-k\  rd}4n||z
  }2d}4|4dk(  r!||6|3z  z   |5|/z  z   }|!|5|3z  z   |7|/z  z   }!||3z   }|4dk(  r|!5|2z  z   7|2z  |2z  dz  z   }#|6|2z  z   |5|2z  |2z  dz  z   };| dk7  r|;d|"z  z
  d|1z  z   } |#|z
  }0n|;|"z
  |z
  |1z   } |#|z
  }0||0z   }#|||||| |!|"|0|#f
S )NgH"f?g`aB@g+h~?g`aB@ge"z?g7Lt?gC6?g8
K@r   g     @g     g     Ar   r   i}  rk   r   rm   r   rj   )r9   r   r   r   )<r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   argpdotr,   rr   r   r  r  r   r   r{   r   r   r  r   r  r   rz   fasx2fasx4fasx6g22g32g44g52g54r  steppstepnstep2r  r  ftdeltiretnxndtxldotxnddtxomix2omix2lixls<                                                               re   _dspacerL    s0    UUUSSSSS#UUUU Tb5j E)U4!8mRdQhUeaiUeaiU4!8mR	$ R	 SLAI,Q$u+0EUSS Gtt| 	C%K 004#cS5[>Q:R3RRC3;$7 889uC%K 00tc#u*=&>>?tc#u*=&>>? 
 50s#eckC&7"8853sSy>;QQs4#:#34458=TECKRUDU@V8VWs54<##56678=D3J8OP s4#:#3445 9>TECKRUDU@V8VW s4$;#455	6 9>TEDLSVDV@W8W	X
 u#eckC&7"8853sSy>;QQs4#:#34457<sD53;QTCT?U7UVs4#:#34457<sD53;QTCT?U7UV ec%$,*<&==s4#:./16TD[3=N9O1OPsD54<##5667 88  QY5( Uut|+dUl:td{*UU]:a |d D2Io
R# 55EBJR#!55AIu$sU{2RGT J&.RGT4i bUUC	cUTB	 	rg   c                 l   d}||z  }	d|	z
  }
t        |
      }t        |      }||z  }t        | |z  |      }d|z  d|z  dz
  z  ||
z  z  }|||z  z  }|d||z  z
  |dd|z  |z  dz  z   z  z
  z  }|||z  z  }|d|z   z  }t        | |z  |      }t        |      }||
z  }dd|z  z
  }| |z
  |z
  }d|z  }||z  }|d|z
  z  }d	}|d
k(  rN|dz
  }|dz   dz  }||z
  }d}d}d}|t        z   } |||z  z   | |z  z   ||z  |z  z   t        z  }!|!dk  r|!t        z   }!nt        |dz         }!|||||||||	|
|||||!fS )Nr   ri   r   rm   gUUUUUU?g     `@g     @T@r   r   r   g     @g:0yE>gZΛ?g]Ҷ?g^ea<r   g   BA)r   r   r   r   r9   _gstime)"r   j2r   rq   r;   r   methodrB   r  r   omeosqrteosqcosiocosio2akd1del_adelaosiniopocon42con41ainvposqrpts70ds70tfracc1thgr70fk5rc1p2pr   s"                                     re   _initlrh  l  s   " T TkUEkV6lV%jUemV r4 RBY#,,-&AR27^T3$t%$,-44(6 6 7TT3:Rr4 RZU&[R3<UVF]6!U2XT"WT3:RV 	3 3&'#(e2d7"U5[049T>AUJ3J5LT uy() 
bUUEeVT	fUT	 	rg   c           Q      2!   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|_%        d|_&        d|_'        d|_(        d|_)        d|_*        d|_+        d|_,        d|_-        d|_.        d|_/        d|_0        d|_1        d|_2        d|_3        d|_4        d|_5        d|_6        d|_7        d|_8        d|_9        d|_:        d|_;        d|_<        d|_=        d|_>        d|_?        d|_@        d|_A        d|_B        d|_C        d|_D        d|_E        d|_F        d|_G        d|_H        d|_I        d|_J        d|_K        d|_L        d|_M        d|_N        d|_O        d|_P        d|_Q        d|_R        | \  |_S        |_T        |_U        |_V        |_W        |_X        |_Y        |_Z        t        |t              rt        |      }d|_^        ||__        ||_`        d|_a        	 ||_b        ||_c        ||_d        ||_e        ||_f        |	|_g        |
|_h        ||_i        ||_j        d|_k        d|_l        d|_m        d|_n        d|_o        d|_p        d|j                  z  dz   }d|j                  z  }||z  |z  |z  }d	}d
|_q        d|_        t        |j                  |j                  |j                  ||j                  |j                  |j                  |j                        \  |_s        }}}|_        }}}}}}}}}|_A        t        |j                  |j                  z  d      |_u        |j                  d|j                  z   z  dz
  |_v        |j                  d|j                  z
  z  dz
  |_w        	 |dk\  s|j                  dk\  r(d|_         |d|j                  z  dz   k  rd|_         |}|} |dz
  |j                  z  }!|!dk  r;|!dz
  }|!dk  rd}d|z
  |j                  z  }"|"|"z  |"z  |"z  } ||j                  z  dz   }d|z  }#d||z
  z  }$||j                  z  |$z  |_        |j                  |j                  z  }%|j                  |j                  z  }&t        d|%z
        }'| t        |$d      z  }(|(t        |'d      z  })|)|j                  z  |dd|%z  z   |&d|%z   z  z   z  d|j                  z  |$z  |'z  |j                  z  dd|%z  d|%z   z  z   z  z   z  }*|j                  |*z  |_        d}+|j                  dkD  r2d|(z  |$z  |j                  z  |j                  z  |z  |j                  z  }+d|z
  |_        d|j                  z  |)z  |z  |z  |j                  dd|%z  z   z  |j                  dd|%z  z   z  z   |j                  |$z  ||'z  z  d|j                  z  dd|&z  z
  |%dd|&z  z
  z  z   z  d|j(                  z  d|%z  |&d|%z   z  z
  z  t        d|j                  z        z  z   z  z
  z  |_        d|)z  |z  |z  dd|%|&z   z  z   |&|%z  z   z  |_        ||z  },d|j                  z  |#z  |j                  z  }-d|-z  |j                  z  |#z  }.d|j                  z  |#z  |#z  |j                  z  }/|j                  d|-z  |z  |j                  z  z   d |.z  |z  d!d|z  z
  d"|,z  z   z  z   |_        d#|-z  |z  d |.z  d$d%|z  z
  d&|,z  z   z  z   |/dd'|z  z
  d(|,z  z   z  z   |_        |- |z  }0|0d|.z  dd)|z  z
  z  d|/z  dd$|z  z
  z  z   |z  z   |_        |j                  |j.                  z   }1|j                  |+z  t        |j                        z  |_        d|_        |j                  dkD  r| |(z  |j                  z  |&z  |_        d|z  |0z  |j                  z  |_        d|j                  z  |_        t        |dz         dkD  r'd*|j                  z  |z  dd+|z  z   z  d|z   z  |_        n#d*|j                  z  |z  dd+|z  z   z  |z  |_        d#|j                  z  |z  |_        d|j                  t        |j                        z  z   }2|2|2z  |2z  |_
        t        |j                        |_        d$|z  dz
  |_        d,t        z  |j                  z  d-k\  rd.|_        d|_         d}3|j                  }4t        g ||j                  |j                  |3|j                  |j                  |j                  |j\                  |j^                  |j`                  |jb                  |jd                  |jf                  |jh                  |jj                  |jl                  |jn                  |jp                  |jr                  |jt                  |jv                  |jx                  |jz                  |j|                  |j~                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   \Q  }5}6}7}8}9}:};|_.        |_/        }<}=}>|_0        |_1        |_2        |_3        |_4        }?|_5        |_6        |_7        |_8        |_9        |_:        |_;        |_<        |_=        |_>        |_?        |_@        }@}A}B}C}D}E}F}G}H}I}J}K}L}M}N}O}P}Q}R}S}T}U}V}W}X}Y|_C        |_D        |_E        |_F        |_G        |_H        |_I        |_J        |_K        |_L        }Z}[}\}]}^}_}`}a}b}c}d}e}f|_N        |_O        t        ||4|j                  |j                  |j                  |j                  |j                  |j                  |j                  	      \  |_e        |_g        |_j        |_f        |_h        d}gd}hd}it        g |j                  |8|=|j                  |@|A|B|C|D|7|G|H|I|J|K|N|P|Q|S|T|V|W|Y|j                  |3|j                  |j                  |j,                  |j                  |j                  |j.                  |1|[|]|^|`|a|c|d|f|j                  ||<|g|4|i|Z|h|j6                  |j                  |j8                  |j:                  |j<                  |j>                  |j@                  |jB                  |jD                  |jF                  |jH                  |jJ                  |jL                  |jT                  |jV                  |jX                  |jZ                  |jN                  |jP                  |jR                  |j                  |j                  |j                  |j                   \  }<}g}4}i}Z}h|_        |_P        |_        |_        |_        |_        |_         |_!        |_"        |_#        |_$        |_%        |_&        |_*        |_+        }j|_,        |_-        |_'        |_(        |_)        |_B        |_M        |_Q        |_R        |j                   dk7  r<|j                  |j                  z  }kd|z  |$z  |kz  |_        |j                  |$z  |j                  z  dz  }ld/|z  |z   |lz  |_        d|lz  |z  |$z  d0|z  d1|z  z   z  |j                  z  |_	        |j                  d|kz  z   |_        d2d|j                  z  |j                  d3|j                  z  d4|kz  z   z  z   z  |_        d5d|j                  z  d3|j                  z  |j                  z  z   d6|j                  z  |j                  z  z   d7|kz  d|j                  z  |kz   z  z   z  |_        	 t        |d|        d|_q        t         S )8a"  
     /* ------------------------ initialization --------------------- */
     // sgp4fix divisor for divide by zero check on inclination
     // the old check used 1.0 + cos(pi-1.0e-9), but then compared it to
     // 1.5 e-12, so the threshold was changed to 1.5e-12 for consistency
     Afcz=r   r   r   Ug     S@ri   g      E@r   r   gUUUUUUg     k@rj   g     c@g     X@g      4@g      ^@r   g      @r   g      ?r   rm   g-C6?rp   r   r   g      r   g      @g      ޿g      ?g      *@g      a@r         @g     \@g     x@g      B@g     H@g      3@      пr   rk   g      l@dg      1@g     k@g      ?@r   rl   r   r   rn   g      .@)isimprP  aycofr]  cc1cc4cc5d2d3d4delmoetar6  omgcofsinmaor,   t2coft3coft4coft5cofx1mth2x7thm1r   r   xlcofxmcofnodecfr   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!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r   r  r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r  r7   r8   r   r  r  tuminmuradiusearthkmr   rO  j3j4j3oj2
isinstanceintr	   erroroperationmode
satnum_strclassificationbstarndotnddotr   r   r;   r   no_kozair   amr{   imOmr   rz   r<   rh  
no_unkozair   r   altaaltpr   r   r   r   r   rf   r4  sgp4true)m
whichconstrB   satnrq   xbstarxndotxnddotxeccoxargpoxincloxmo	xno_kozaixnodeor:   temp4ss
qzms2ttempqzms2tr  rP  r^  rY  r\  rS  rT  r   rQ  r_  r`  rR  rZ  sfourqzms24perige
qzms24temppinvsqtsietasqeetapsisqcoefcoef1cc2cc3cosio4r.  temp2temp3xhdot1r   	delmotemprr   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   r   r   r   r   r   r   r   r   r   r   r   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  cc1sqr/  sm                                                                                                                re   sgp4initr  	  s    U V\36=#V\36:#
VZ369#	VY36<#
V^36=#VX36<#V\36<#V]36;#V\36<# V[CV\V\CV\V\CV\V\CV[V[CV[V[CV\V\CVZVZCVZV\CVZVZCV[V[CVZVZCVZVZCV[V\CV[V[CVZVZCVZVZCV\V[CV\VZ 9C6flFIv3VZy&)VY 	44$V\#VV V	 V\V[V\V[V\V\VYV_V\ VYVYVYVYVYVY
 V)))C/R6#7#77Z:%
2Z?VTV[VX ::vyy&++ufllFOOU[UbUb	bV\E5eVT	fUV[
 ))&,,6(EVX88S6;;./#5V[88S6;;./#5V[		 	#**c1---33V\8v333 UNd]U!EMV-A-AAZ :-
:ZGVf222S8U*rEz"FKK'#-fjj(vzz)cEk"#c3-'E3'***bC#+4EuI& 5& /').):S)@5)H6<<)WsU{cEk::*</< = s*KK& $;$v||3f6G6GG%ORXR]R]]Svf///%7"<vE"JJ#e*;<v{{#+-@/ /17SBJ1O 6<</3t3Ce#*,G. 4. /151E%K$#+*>>2@BEcFLLFXBY2ZZ2[[\ EkB&/3:' 4')-46 76/		/F*V->->>+		)F2VYY&/&86;L;LL!,,sU{V/Cfll/RRU[!V"$*V+.2TF].BUV^.SVU U 5L506E>!EFN2UV^C4E E"cD6M&9D6M&IJK $Ve^ C%K33F$G!EkS3<-?@%ADI$J J$nnfnn<!<<#-FLL0AAKK& !EDL6<<7$>V\v.;

*sOg%!FLL058C#+<MNRUX]R]^V\!FLL058C#+<MNQVVV\-56::FII66#i/);fii.,, bD6$$$- V]V\R\\U(   ++'-||579?GM||$$ 99 %jj ::	 !'	 06zz	 <B<<	
 ::
 '-jj
 39** ;; !' 06{{ :: !'

 06zz <B:: :: !'

 06zz ;; !' 06{{ =CJJ :: !'

 06zz =CJJ :: !'

 ;; !'%uufvyfjBvzfkFJvzVVZ6:fk6;
FJfj6:vz6:rrbsscsscttdttdV[&+vzVZVZrbbRsscssfk  5&++;;fllFLL&))''fk6<v|VY UUR  :: &.02468:<>@BGILNQSVX[   ! #' )- /3 59 ;? AE GMhh QS ;;	 !'			 ,2;;	 9?8I8I	 LR<<	
 >>
 $*
 ,.
 02
 47
 9<
 >A
 CF
 HK
 MP ;; !& (* ,1 38 :< >@ BG ;; "( << "( 06|| >D\\ << "( 06|| >D\\ << "( 06{{ >D[[ ;; "( 06|| ;; "( 06{{ >D\\ << "( 06zz
rv|v|V\6<v|V\6<v|V[6;dV\6<v{V[6<vzVZ$ LLA"JJ35(S.5069"IIOfjj83>4"9u,469*r/C/52:u3LM"JJ'69 ))cEk16<#		/FJJ!FII-u<5> #> ?6<vyy 6::-		9":&))Ofii7"8 !5LC&))Oe,CD"E F6<
	
 
&#z"V[ [rg   Nc                    d}	 d}dt         z  }d}| j                  | j                  z  dz  }|| _        d| _        d | _        | j                  | j                  | j                  z  z   }| j                  | j                  | j                  z  z   }	| j                  | j                  | j                  z  z   }
|	}|}| j                  | j                  z  }|
| j                  |z  z   }d| j                  | j                  z  z
  }| j                  | j                  z  | j                  z  }| j                   |z  }| j"                  dk7  r&| j$                  | j                  z  }d| j&                  t)        |      z  z   }| j*                  ||z  |z  | j,                  z
  z  }||z   }||z   }|	|z
  }|| j                  z  }|| j                  z  }|| j.                  |z  z
  | j0                  |z  z
  | j2                  |z  z
  }|| j                  | j4                  z  t7        |      | j8                  z
  z  z   }|| j:                  |z  z   || j<                  | j                  | j>                  z  z   z  z   }| j@                  }| jB                  }| jD                  }| jF                  d	k(  r| j                  }tI        g | jJ                  | jL                  | jN                  | jP                  | jR                  | jT                  | jV                  | jX                  | jZ                  | j\                  | j^                  | j`                  | jb                  | jd                  | jf                  | jh                  | jj                  | jl                  | jn                  | j                  | j                  | j                  || jp                  | jr                  | jt                  | j@                  | jv                  |||| jx                  || jz                  || \
  }}}}}}}}}}|dk  r)d
j}                  |      | _        d| _        t~        t~        fS t        | j                  |z  |      |z  |z  } | j                  t        | d      z  }||z
  }|dk\  s|dk  r)dj}                  |      | _        d| _        t~        t~        fS |dk  rd}|| j@                  |z  z   }||z   |z   }!||z  }"d|"z
  }|dk\  r||z  n| |z   }||z  }|!|z  }!|!|z
  |z
  |z  }| | _A        || _B        || _C        || _D        || _E        || _F        || _G        t7        |      }#t)        |      }$|}%|}&|}'|}(|})|#}*|$}+| jF                  d	k(  rzt        | | jD                  d|%|&|(|'|)| j                  	      \  }%}&}(}'})|&dk  r|& }&|(t         z   }(|'t         z
  }'|%dk  s|%dkD  r)dj}                  |%      | _        d| _        t~        t~        fS | jF                  d	k(  rt7        |&      }*t)        |&      }+d| j                  z  |*z  | _K        t        |+dz         dkD  r'd| j                  z  |*z  dd|+z  z   z  d|+z   z  | _M        n#d| j                  z  |*z  dd|+z  z   z  |z  | _M        |%t)        |'      z  },d| d|%|%z  z
  z  z  }|%t7        |'      z  || j                  z  z   }-|)|'z   |(z   || j                  z  |,z  z   }.|.|(z
  |z  }/|/}0d}1d}2t        |1      dk\  rr|2dk  rmt7        |0      }3t)        |0      }4d|4|,z  z
  |3|-z  z
  }1|/|-|4z  z
  |,|3z  z   |0z
  |1z  }1t        |1      dk\  r	|1dkD  rdnd}1|0|1z   }0|2dz   }2t        |1      dk\  r|2dk  rm|,4z  |-3z  z   }5|,|3z  |-|4z  z
  }6|,|,z  |-|-z  z   }7| d|7z
  z  }8|8dk  r)dj}                  |8      | _        d| _        t~        t~        fS | d|5z
  z  }9t        |       |6z  |9z  }:t        |8      |9z  };t        d|7z
        }<|6d|<z   z  }| |9z  |3|-z
  |,|z  z
  z  }=| |9z  |4|,z
  |-|z  z   z  }>t        |=|>      }?|>|>z   |=z  }@dd|=z  |=z  z
  }Ad|8z  }d| j                  z  |z  }B|B|z  }C| jF                  d	k(  r)|+|+z  }Dd|Dz  dz
  | _Q        d|Dz
  | _R        d|Dz  dz
  | _S        |9ddCz  |<z  | j                  z  z
  z  dBz  | j                  z  Az  z   }|?d |Cz  | j                  z  @z  z
  }?|(d|Cz  |+z  |@z  z   }E|&d|Cz  |+z  |*z  |Az  z   }F|:||Bz  | j                  z  |@z  | j                  z  z
  }G|;||Bz  | j                  |Az  d| j                  z  z   z  | j                  z  z   }Ht7        |?      }It)        |?      }Jt7        |E      }Kt)        |E      }Lt7        |F      }Mt)        |F      }N|K |Nz  }O|L|Nz  }P|O|Iz  |L|Jz  z   }Q|P|Iz  |K|Jz  z   }R|M|Iz  }S|O|Jz  |L|Iz  z
  }T|P|Jz  |K|Iz  z
  }U|M|Jz  }V|| j                  z  }W|W|Qz  |W|Rz  |W|Sz  f}X|G|Qz  |H|Tz  z   |z  |G|Rz  |H|Uz  z   |z  |G|Sz  |H|Vz  z   |z  f}Y|dk  rd!j}                  |      | _        d"| _        XYfS )#Nr   rj  r   r         N@r   ri   rj   rn  z#mean motion {0:f} is less than zerork   r   gMbPz7mean eccentricity {0:f} not within range 0.0 <= e < 1.0gư>r   z=perturbed eccentricity {0:f} not within range 0.0 <= e <= 1.0   r   rm  rm   r   g3333@g-q=
   gffffff?gffffffz(semilatus rectum {0:f} is less than zero   r   rl  r   z?mrt {0:f} is less than 1.0 indicating the satellite has decayed   )Tr   r  r   r,   r  error_messager   r   r   r6  r   r   r  rq  r  rr  r{  ro  ry  rx  r   r  rw  rt  ru  rv  rs  r   rz  r|  r}  r~  r  r   r;   rP  rL  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  formatfalser   r  r{   r  r  omr   rz   rf   r  r  rp  r   r  r   r   rO  r]  r  r  )Zr:   tsincer  mrtr  r9   r  	vkmpersecxmdfargpdfnodedfr   r   t2r   tempatempetempldelomgdelmtempdelmr/  t3t4rz   r{   r   rr   r   r  r  r  r  xlmr   r   r   r=   xincpr@   r?   rA   r[   r\   axnlaynlrK  ueo1tem5ktrsineo1coseo1ecoseesineel2rX   rlrdotlrvdotlbetalsinucosususin2ucos2ur.  r  r  xnodexincmvtrvdotsinsucossusnodcnodsinicosixmxxmyuxuyuzvxvyvz_mrrvsZ                                                                                             re   r  r    s   S	 U2XUT ))FJJ6t;Y VXV\ V yy6;;11T||fnnvxx77V||fnnvxx77VURxx&(("R**UVZZ&((**U||fjj(6883U||b U--&((*6::D	11,,h&1,,  4-+4-vxx-vxx-&))b.(699r>9 ))b.)&,,3s2w --8( ) )&,,++bFLL ((V\\152 /3 3 R[[R\\Uhh  {{||#\\+1<< || $\\ ,2<< ||	 $\\	 ,2<<	
 ||
 $[[
 ,2;; {{ $[[ ,2;; {{ $\\ ,2<< || $^^ .4XX 8: {{ #LL +1,,    #),,     "( .0 28  
B55#C54"  	c	!F"(&* 
	u	
vzzB
%
-
5R
**s2s|
#R
u*R 	c	R&["99? 
	u	 	V6$$u,,R5j5 S2gTDjT$|eemE6E>1BUemUEkSU{U"e+R VYVYVYVYVYVYVY ZUZU RUUURUU'-v||BueR1E1E(	$UE5" CKfURZUbjUHS&>>DfRj !V\5L  	e*e*V\\)%/sOg%!FLL058C#+<MNRUX]R]^V\!FLL058C#+<MNQVVV\UOT2rBw'(TE
NTFLL00TJ!4t!;;R %Z5 QSTS : SBYc(c(%5tf}$tf}4s:dBJ$ 3JDET*Qw : SBY &[4;&U&[4;&U$Yd"SS\R
S!K"(&* 
	u	 e$r(U"2%r(R-sSy/3;'r'Vd]TD[89r'Vd]TD[89d#$;$&d
T))(		/D($, MMS &+emV Z#-V\ 6\V] Z#-V]sS5[506<<??@uv}},u45dUlV]]2U::uu,u44uu,u4u<<efmm3e;fjjHH"u*(=v||#)$ %'-zz2 2 b'b'e*e*d)d)++u,+u,,+u,+u,, V)))Bhb#(+Rx%"*$	1Rx%"*$	1Rx%"*$	13
 	c	">>DfSk 
	qD[rg   c                     | dz
  dz  }d|z  |z  |z  d|z  |z  z   d|z  z   dz   }|t         z  dz  t        z  }|dk  r	|t        z  }|S )	Ng   ,BAg    @g3ھgt շ?g GAgmIn@g      n@r   )deg2radr9   )jdut1tut1r/  s      re   gstimer    sr    Y')TTMD 4'(T/D*@@,457BCTG^e#u,T 	s
	[rg   c                    | dk(  rd}d}d}d|z  }d}d}d}||z  }na| d	k(  r,d
}d}dt        ||z  |z  |z        z  }d|z  }d}d}d}||z  }n0| dk(  r+d}d}dt        ||z  |z  |z        z  }d|z  }d}d}d}||z  }fS )Nwgs72oldg2#TAg(\"@gʍе	?ri   gYҼQ?gFώLžg.EVȻwgs72g3333#TAr  wgs84g    "TAgn#@gцbQ?gA=žg#)r   )	r  r  r  r   r  rO  r  r  r  s	            re   getgravconstr    s    


" 2#= 3#I5!2#2#2"W5 '!2#=4m ;M I" LMM3#I5!2#2#2"W5'!2#=4m ;M I" LMM3#I5&2&2&2"W5RRR>>rg   )N)__doc__mathr   r   r   r   r   r   sgp4.alpha5r	   r  float_nanr  r  r9   rf   r   r4  rL  rh  r  r  r  rN  r   rg   re   <module>r     s   & 1 0 !
u*U|	tTb7rCJK(ZDLB	HPdZ	xIVH	T5nG	RRhvr	WrIV8 @"?rg   