keplemon 3.1.1__cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- keplemon/.DS_Store +0 -0
- keplemon/._.DS_Store +0 -0
- keplemon/._arm +0 -0
- keplemon/._libastrofunc.so +0 -0
- keplemon/._libdllmain.so +0 -0
- keplemon/._libelops.so +0 -0
- keplemon/._libenvconst.so +0 -0
- keplemon/._libextephem.so +0 -0
- keplemon/._libobs.so +0 -0
- keplemon/._libsatstate.so +0 -0
- keplemon/._libsensor.so +0 -0
- keplemon/._libsgp4prop.so +0 -0
- keplemon/._libspvec.so +0 -0
- keplemon/._libtimefunc.so +0 -0
- keplemon/._libtle.so +0 -0
- keplemon/._libvcm.so +0 -0
- keplemon/EGM-2008.GEO +2563 -0
- keplemon/EGM-96.GEO +2563 -0
- keplemon/JPLcon_1950_2050.405 +392370 -0
- keplemon/SGP4_Open_License.txt +186 -0
- keplemon/WGS84-70.GEO +2563 -0
- keplemon/__init__.py +33 -0
- keplemon/__init__.pyi +54 -0
- keplemon/__main__.py +20 -0
- keplemon/_keplemon.abi3.so +0 -0
- keplemon/bodies.py +8 -0
- keplemon/bodies.pyi +367 -0
- keplemon/catalogs.py +5 -0
- keplemon/catalogs.pyi +19 -0
- keplemon/elements.py +39 -0
- keplemon/elements.pyi +521 -0
- keplemon/enums.py +21 -0
- keplemon/enums.pyi +120 -0
- keplemon/estimation.py +9 -0
- keplemon/estimation.pyi +200 -0
- keplemon/events.py +17 -0
- keplemon/events.pyi +103 -0
- keplemon/exceptions.py +5 -0
- keplemon/libastrofunc.so +0 -0
- keplemon/libdllmain.so +0 -0
- keplemon/libelops.so +0 -0
- keplemon/libenvconst.so +0 -0
- keplemon/libextephem.so +0 -0
- keplemon/libobs.so +0 -0
- keplemon/libsatstate.so +0 -0
- keplemon/libsensor.so +0 -0
- keplemon/libsgp4prop.so +0 -0
- keplemon/libspvec.so +0 -0
- keplemon/libtimefunc.so +0 -0
- keplemon/libtle.so +0 -0
- keplemon/libvcm.so +0 -0
- keplemon/propagation.py +15 -0
- keplemon/propagation.pyi +50 -0
- keplemon/py.typed +0 -0
- keplemon/time.py +96 -0
- keplemon/time.pyi +293 -0
- keplemon/time_constants.dat +19472 -0
- keplemon-3.1.1.dist-info/METADATA +21 -0
- keplemon-3.1.1.dist-info/RECORD +76 -0
- keplemon-3.1.1.dist-info/WHEEL +5 -0
- keplemon-3.1.1.dist-info/entry_points.txt +2 -0
- keplemon.libs/libastrofunc-d5d29f1a.so +0 -0
- keplemon.libs/libdllmain-83b073db.so +0 -0
- keplemon.libs/libelops-d6961cbd.so +0 -0
- keplemon.libs/libenvconst-5ff8e89b.so +0 -0
- keplemon.libs/libextephem-9ddad493.so +0 -0
- keplemon.libs/libgfortran-daac5196.so.5 +0 -0
- keplemon.libs/libgomp-d22c30c5.so.1 +0 -0
- keplemon.libs/libobs-acba28cb.so +0 -0
- keplemon.libs/libsatstate-a0706992.so +0 -0
- keplemon.libs/libsensor-15ffa85c.so +0 -0
- keplemon.libs/libsgp4prop-8300f9d3.so +0 -0
- keplemon.libs/libspvec-b3cef8a2.so +0 -0
- keplemon.libs/libtimefunc-d4915652.so +0 -0
- keplemon.libs/libtle-72004375.so +0 -0
- keplemon.libs/libvcm-460d66c8.so +0 -0
keplemon/elements.pyi
ADDED
|
@@ -0,0 +1,521 @@
|
|
|
1
|
+
# flake8: noqa
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
from keplemon.time import Epoch
|
|
6
|
+
from keplemon.enums import Classification, KeplerianType, ReferenceFrame
|
|
7
|
+
from keplemon.events import CloseApproach
|
|
8
|
+
from keplemon.bodies import Observatory
|
|
9
|
+
|
|
10
|
+
class RelativeState:
|
|
11
|
+
epoch: Epoch
|
|
12
|
+
position: CartesianVector
|
|
13
|
+
velocity: CartesianVector
|
|
14
|
+
origin_satellite_id: str
|
|
15
|
+
secondary_satellite_id: str
|
|
16
|
+
|
|
17
|
+
class BoreToBodyAngles:
|
|
18
|
+
earth_angle: float
|
|
19
|
+
sun_angle: float
|
|
20
|
+
moon_angle: float
|
|
21
|
+
|
|
22
|
+
class OrbitPlotState:
|
|
23
|
+
epoch: Epoch
|
|
24
|
+
latitude: float
|
|
25
|
+
longitude: float
|
|
26
|
+
altitude: float
|
|
27
|
+
semi_major_axis: float
|
|
28
|
+
eccentricity: float
|
|
29
|
+
inclination: float
|
|
30
|
+
raan: float
|
|
31
|
+
radius: float
|
|
32
|
+
apogee_radius: float
|
|
33
|
+
perigee_radius: float
|
|
34
|
+
|
|
35
|
+
class OrbitPlotData:
|
|
36
|
+
satellite_id: str
|
|
37
|
+
epochs: list[str]
|
|
38
|
+
semi_major_axes: list[float]
|
|
39
|
+
eccentricities: list[float]
|
|
40
|
+
inclinations: list[float]
|
|
41
|
+
raans: list[float]
|
|
42
|
+
radii: list[float]
|
|
43
|
+
apogee_radii: list[float]
|
|
44
|
+
perigee_radii: list[float]
|
|
45
|
+
latitudes: list[float]
|
|
46
|
+
longitudes: list[float]
|
|
47
|
+
altitudes: list[float]
|
|
48
|
+
|
|
49
|
+
class GeodeticPosition:
|
|
50
|
+
"""
|
|
51
|
+
Args:
|
|
52
|
+
latitude: Latitude in **_degrees_**
|
|
53
|
+
longitude: Longitude in **_degrees_**
|
|
54
|
+
altitude: Altitude in **_kilometers_**
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
latitude: float
|
|
58
|
+
"""Latitude in **_degrees_**"""
|
|
59
|
+
|
|
60
|
+
longitude: float
|
|
61
|
+
"""Longitude in **_degrees_**"""
|
|
62
|
+
|
|
63
|
+
altitude: float
|
|
64
|
+
"""Altitude in **_kilometers_**"""
|
|
65
|
+
|
|
66
|
+
def __init__(self, latitude: float, longitude: float, altitude: float) -> None: ...
|
|
67
|
+
|
|
68
|
+
class HorizonElements:
|
|
69
|
+
"""
|
|
70
|
+
Args:
|
|
71
|
+
range: Range in **_kilometers_**
|
|
72
|
+
az: Azimuth in **_degrees_**
|
|
73
|
+
el: Elevation in **_degrees_**
|
|
74
|
+
range_rate: Range rate in **_kilometers per second_**
|
|
75
|
+
az_rate: Azimuth rate in **_degrees per second_**
|
|
76
|
+
el_rate: Elevation rate in **_degrees per second_**
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
range: Optional[float]
|
|
80
|
+
azimuth: float
|
|
81
|
+
elevation: float
|
|
82
|
+
range_rate: Optional[float]
|
|
83
|
+
azimuth_rate: Optional[float]
|
|
84
|
+
elevation_rate: Optional[float]
|
|
85
|
+
|
|
86
|
+
def __init__(
|
|
87
|
+
self,
|
|
88
|
+
azimuth: float,
|
|
89
|
+
elevation: float,
|
|
90
|
+
) -> None: ...
|
|
91
|
+
|
|
92
|
+
class HorizonState:
|
|
93
|
+
"""
|
|
94
|
+
Args:
|
|
95
|
+
epoch: UTC epoch of the state
|
|
96
|
+
elements: HorizonElements of the state
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
epoch: Epoch
|
|
100
|
+
"""UTC epoch of the state"""
|
|
101
|
+
|
|
102
|
+
elements: HorizonElements
|
|
103
|
+
"""Horizon elements of the state"""
|
|
104
|
+
|
|
105
|
+
range: Optional[float]
|
|
106
|
+
"""Range in **_kilometers_**"""
|
|
107
|
+
|
|
108
|
+
azimuth: float
|
|
109
|
+
"""Azimuth in **_degrees_**"""
|
|
110
|
+
|
|
111
|
+
elevation: float
|
|
112
|
+
"""Elevation in **_degrees_**"""
|
|
113
|
+
|
|
114
|
+
range_rate: Optional[float]
|
|
115
|
+
"""Range rate in **_kilometers per second_**"""
|
|
116
|
+
|
|
117
|
+
azimuth_rate: Optional[float]
|
|
118
|
+
"""Azimuth rate in **_degrees per second_**"""
|
|
119
|
+
|
|
120
|
+
elevation_rate: Optional[float]
|
|
121
|
+
"""Elevation rate in **_degrees per second_**"""
|
|
122
|
+
|
|
123
|
+
def __init__(self, epoch: Epoch, elements: HorizonElements) -> None: ...
|
|
124
|
+
@classmethod
|
|
125
|
+
def from_topocentric_state(cls, state: TopocentricState, observer: Observatory) -> HorizonState: ...
|
|
126
|
+
|
|
127
|
+
class KeplerianElements:
|
|
128
|
+
"""
|
|
129
|
+
Args:
|
|
130
|
+
semi_major_axis: Average distance from the central body in **_kilometers_**
|
|
131
|
+
eccentricity: Eccentricity of the orbit
|
|
132
|
+
inclination: Inclination of the orbit in **_degrees_**
|
|
133
|
+
raan: Right Ascension of Ascending Node in **_degrees_**
|
|
134
|
+
argument_of_perigee: Argument of Perigee in **_degrees_**
|
|
135
|
+
mean_anomaly: Mean Anomaly in **_degrees_**
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
semi_major_axis: float
|
|
139
|
+
eccentricity: float
|
|
140
|
+
inclination: float
|
|
141
|
+
raan: float
|
|
142
|
+
argument_of_perigee: float
|
|
143
|
+
mean_anomaly: float
|
|
144
|
+
|
|
145
|
+
def __init__(
|
|
146
|
+
self,
|
|
147
|
+
semi_major_axis: float,
|
|
148
|
+
eccentricity: float,
|
|
149
|
+
inclination: float,
|
|
150
|
+
raan: float,
|
|
151
|
+
argument_of_perigee: float,
|
|
152
|
+
mean_anomaly: float,
|
|
153
|
+
) -> None: ...
|
|
154
|
+
|
|
155
|
+
class EquinoctialElements:
|
|
156
|
+
"""
|
|
157
|
+
Args:
|
|
158
|
+
a_f: Equinoctial element a_f
|
|
159
|
+
a_g: Equinoctial element a_g
|
|
160
|
+
chi: Equinoctial element chi
|
|
161
|
+
psi: Equinoctial element psi
|
|
162
|
+
mean_longitude: Mean longitude in **_degrees_**
|
|
163
|
+
mean_motion: Mean motion in **_revolutions per day_**
|
|
164
|
+
"""
|
|
165
|
+
|
|
166
|
+
a_f: float
|
|
167
|
+
a_g: float
|
|
168
|
+
chi: float
|
|
169
|
+
psi: float
|
|
170
|
+
mean_longitude: float
|
|
171
|
+
mean_motion: float
|
|
172
|
+
|
|
173
|
+
def __init__(
|
|
174
|
+
self,
|
|
175
|
+
a_f: float,
|
|
176
|
+
a_g: float,
|
|
177
|
+
chi: float,
|
|
178
|
+
psi: float,
|
|
179
|
+
mean_longitude: float,
|
|
180
|
+
mean_motion: float,
|
|
181
|
+
) -> None: ...
|
|
182
|
+
|
|
183
|
+
def to_keplerian(self) -> KeplerianElements: ...
|
|
184
|
+
|
|
185
|
+
class TLE:
|
|
186
|
+
|
|
187
|
+
norad_id: int
|
|
188
|
+
"""NORAD catalog ID of the satellite"""
|
|
189
|
+
|
|
190
|
+
satellite_id: str
|
|
191
|
+
""""""
|
|
192
|
+
|
|
193
|
+
name: str
|
|
194
|
+
""""""
|
|
195
|
+
|
|
196
|
+
inclination: float
|
|
197
|
+
"""Inclination of the orbit in **_degrees_**"""
|
|
198
|
+
|
|
199
|
+
eccentricity: float
|
|
200
|
+
""""""
|
|
201
|
+
|
|
202
|
+
raan: float
|
|
203
|
+
"""Right Ascension of Ascending Node in **_degrees_**"""
|
|
204
|
+
|
|
205
|
+
argument_of_perigee: float
|
|
206
|
+
"""Argument of Perigee in **_degrees_**"""
|
|
207
|
+
|
|
208
|
+
mean_anomaly: float
|
|
209
|
+
"""Mean Anomaly in **_degrees_**"""
|
|
210
|
+
|
|
211
|
+
mean_motion: float
|
|
212
|
+
"""Mean motion in **_revolutions per day_**"""
|
|
213
|
+
|
|
214
|
+
type: KeplerianType
|
|
215
|
+
""""""
|
|
216
|
+
|
|
217
|
+
b_star: float
|
|
218
|
+
""""""
|
|
219
|
+
|
|
220
|
+
mean_motion_dot: float
|
|
221
|
+
""""""
|
|
222
|
+
|
|
223
|
+
mean_motion_dot_dot: float
|
|
224
|
+
""""""
|
|
225
|
+
|
|
226
|
+
agom: float
|
|
227
|
+
""""""
|
|
228
|
+
|
|
229
|
+
b_term: float
|
|
230
|
+
""""""
|
|
231
|
+
|
|
232
|
+
epoch: Epoch
|
|
233
|
+
"""UTC epoch of the state"""
|
|
234
|
+
|
|
235
|
+
classification: Classification
|
|
236
|
+
""""""
|
|
237
|
+
|
|
238
|
+
designator: str
|
|
239
|
+
"""8-character identifier of the satellite"""
|
|
240
|
+
|
|
241
|
+
cartesian_state: CartesianState
|
|
242
|
+
"""TEME cartesian state of the TLE at epoch"""
|
|
243
|
+
|
|
244
|
+
semi_major_axis: float
|
|
245
|
+
"""Average distance from the central body in **_kilometers_**
|
|
246
|
+
|
|
247
|
+
!!! note
|
|
248
|
+
This is always calculated using Brouwer mean motion and will differ slightly from Kozai-computed SMA.
|
|
249
|
+
"""
|
|
250
|
+
|
|
251
|
+
apoapsis: float
|
|
252
|
+
"""Apoapsis radius in **_kilometers_**"""
|
|
253
|
+
|
|
254
|
+
periapsis: float
|
|
255
|
+
"""Periapsis radius in **_kilometers_**"""
|
|
256
|
+
|
|
257
|
+
@classmethod
|
|
258
|
+
def from_lines(cls, line_1: str, line_2: str, line_3: Optional[str] = None) -> TLE:
|
|
259
|
+
"""
|
|
260
|
+
Create a TLE object using strings in 2 or 3 line format
|
|
261
|
+
"""
|
|
262
|
+
...
|
|
263
|
+
|
|
264
|
+
@property
|
|
265
|
+
def lines(self) -> tuple[str, str]:
|
|
266
|
+
"""
|
|
267
|
+
!!! note
|
|
268
|
+
If the TLE was created in the 3LE format, only lines 2 and 3 will be returned. The name must be accessed
|
|
269
|
+
using the `name` property.
|
|
270
|
+
|
|
271
|
+
Returns:
|
|
272
|
+
Tuple of strings in 2 line format
|
|
273
|
+
"""
|
|
274
|
+
...
|
|
275
|
+
|
|
276
|
+
def get_state_at_epoch(self, epoch: Epoch) -> CartesianState: ...
|
|
277
|
+
|
|
278
|
+
class SphericalVector:
|
|
279
|
+
"""
|
|
280
|
+
!!! note
|
|
281
|
+
The range units can be disregarded if this class is not being used for astrodynamic transforms.
|
|
282
|
+
|
|
283
|
+
Args:
|
|
284
|
+
range: distance from the origin in **_kilometers_**
|
|
285
|
+
right_ascension: right ascension in **_degrees_**
|
|
286
|
+
declination: declination in **_degrees_**
|
|
287
|
+
"""
|
|
288
|
+
|
|
289
|
+
range: float
|
|
290
|
+
right_ascension: float
|
|
291
|
+
declination: float
|
|
292
|
+
def __init__(self, range: float, right_ascension: float, declination: float) -> None: ...
|
|
293
|
+
def to_cartesian(self) -> CartesianVector:
|
|
294
|
+
"""
|
|
295
|
+
Returns:
|
|
296
|
+
Cartesian vector in **_kilometers_**.
|
|
297
|
+
"""
|
|
298
|
+
...
|
|
299
|
+
|
|
300
|
+
class CartesianVector:
|
|
301
|
+
"""
|
|
302
|
+
Args:
|
|
303
|
+
x: x coordinate
|
|
304
|
+
y: y coordinate
|
|
305
|
+
z: z coordinate
|
|
306
|
+
"""
|
|
307
|
+
|
|
308
|
+
x: float
|
|
309
|
+
y: float
|
|
310
|
+
z: float
|
|
311
|
+
magnitude: float
|
|
312
|
+
""""""
|
|
313
|
+
|
|
314
|
+
def __init__(self, x: float, y: float, z: float) -> None: ...
|
|
315
|
+
def distance(self, other: CartesianVector) -> float:
|
|
316
|
+
"""
|
|
317
|
+
!!! note
|
|
318
|
+
Take care to use consistent units with this function.
|
|
319
|
+
|
|
320
|
+
Returns:
|
|
321
|
+
Distance between two Cartesian vectors
|
|
322
|
+
"""
|
|
323
|
+
...
|
|
324
|
+
|
|
325
|
+
def to_spherical(self) -> SphericalVector:
|
|
326
|
+
"""
|
|
327
|
+
Returns:
|
|
328
|
+
Spherical representation of the point
|
|
329
|
+
"""
|
|
330
|
+
...
|
|
331
|
+
|
|
332
|
+
def __add__(self, other: CartesianVector) -> CartesianVector: ...
|
|
333
|
+
def __sub__(self, other: CartesianVector) -> CartesianVector: ...
|
|
334
|
+
def angle(self, other: CartesianVector) -> float:
|
|
335
|
+
"""
|
|
336
|
+
Returns:
|
|
337
|
+
Angle between two Cartesian vectors in **_radians_**.
|
|
338
|
+
"""
|
|
339
|
+
...
|
|
340
|
+
|
|
341
|
+
class CartesianState:
|
|
342
|
+
"""State represented as x, y, z and vx, vy, vz in a given reference frame.
|
|
343
|
+
|
|
344
|
+
Args:
|
|
345
|
+
epoch: UTC epoch of the state
|
|
346
|
+
position: Cartesian position vector in kilometers
|
|
347
|
+
velocity: Cartesian velocity vector in kilometers per second
|
|
348
|
+
frame: reference frame of the state
|
|
349
|
+
"""
|
|
350
|
+
|
|
351
|
+
position: CartesianVector
|
|
352
|
+
"""Position of the state in kilometers"""
|
|
353
|
+
|
|
354
|
+
velocity: CartesianVector
|
|
355
|
+
"""Velocity of the state in kilometers per second"""
|
|
356
|
+
|
|
357
|
+
epoch: Epoch
|
|
358
|
+
"""UTC epoch of the state"""
|
|
359
|
+
|
|
360
|
+
frame: ReferenceFrame
|
|
361
|
+
"""Current reference frame of the state"""
|
|
362
|
+
|
|
363
|
+
def __init__(
|
|
364
|
+
self, epoch: Epoch, position: CartesianVector, velocity: CartesianVector, frame: ReferenceFrame
|
|
365
|
+
) -> None: ...
|
|
366
|
+
def to_keplerian(self) -> KeplerianState:
|
|
367
|
+
"""Convert the Cartesian state to osculating Keplerian elements"""
|
|
368
|
+
...
|
|
369
|
+
|
|
370
|
+
def to_frame(self, frame: ReferenceFrame) -> CartesianState:
|
|
371
|
+
"""
|
|
372
|
+
|
|
373
|
+
Args:
|
|
374
|
+
frame: reference frame of the output state
|
|
375
|
+
|
|
376
|
+
Returns:
|
|
377
|
+
CartesianState: Cartesian state in the new frame"""
|
|
378
|
+
...
|
|
379
|
+
|
|
380
|
+
class KeplerianState:
|
|
381
|
+
"""Orbit represented as Keplerian elements in a given reference frame.
|
|
382
|
+
|
|
383
|
+
Args:
|
|
384
|
+
epoch: UTC epoch of the state
|
|
385
|
+
elements: Keplerian elements of the state
|
|
386
|
+
frame: reference frame of the state
|
|
387
|
+
keplerian_type: type of the Keplerian elements
|
|
388
|
+
"""
|
|
389
|
+
|
|
390
|
+
epoch: Epoch
|
|
391
|
+
frame: ReferenceFrame
|
|
392
|
+
type: KeplerianType
|
|
393
|
+
semi_major_axis: float
|
|
394
|
+
"""Average distance from the central body in **_kilometers_**"""
|
|
395
|
+
|
|
396
|
+
eccentricity: float
|
|
397
|
+
"""Eccentricity of the orbit"""
|
|
398
|
+
|
|
399
|
+
inclination: float
|
|
400
|
+
"""Inclination of the orbit in **_degrees_**"""
|
|
401
|
+
|
|
402
|
+
raan: float
|
|
403
|
+
"""Right Ascension of Ascending Node in **_degrees_**"""
|
|
404
|
+
|
|
405
|
+
argument_of_perigee: float
|
|
406
|
+
"""Argument of Perigee in **_degrees_**"""
|
|
407
|
+
|
|
408
|
+
mean_anomaly: float
|
|
409
|
+
"""Mean Anomaly in **_degrees_**"""
|
|
410
|
+
|
|
411
|
+
mean_motion: float
|
|
412
|
+
"""Mean motion in **_revolutions per day_**"""
|
|
413
|
+
|
|
414
|
+
apoapsis: float
|
|
415
|
+
"""Furthest point from the central body in **_kilometers_**"""
|
|
416
|
+
|
|
417
|
+
periapsis: float
|
|
418
|
+
"""Closest point to the central body in **_kilometers_**"""
|
|
419
|
+
|
|
420
|
+
def __init__(
|
|
421
|
+
self,
|
|
422
|
+
epoch: Epoch,
|
|
423
|
+
elements: KeplerianElements,
|
|
424
|
+
frame: ReferenceFrame,
|
|
425
|
+
keplerian_type: KeplerianType,
|
|
426
|
+
) -> None: ...
|
|
427
|
+
def to_cartesian(self) -> CartesianState:
|
|
428
|
+
"""
|
|
429
|
+
Returns:
|
|
430
|
+
Cartesian state in **_kilometers_** and **_kilometers per second_**.
|
|
431
|
+
"""
|
|
432
|
+
...
|
|
433
|
+
|
|
434
|
+
def to_frame(self, frame: ReferenceFrame) -> KeplerianState:
|
|
435
|
+
"""
|
|
436
|
+
Args:
|
|
437
|
+
frame: reference frame of the output state
|
|
438
|
+
|
|
439
|
+
Returns:
|
|
440
|
+
Keplerian state in the new frame"""
|
|
441
|
+
...
|
|
442
|
+
|
|
443
|
+
class Ephemeris:
|
|
444
|
+
def get_close_approach(
|
|
445
|
+
self,
|
|
446
|
+
other: Ephemeris,
|
|
447
|
+
distance_threshold: float,
|
|
448
|
+
) -> CloseApproach: ...
|
|
449
|
+
|
|
450
|
+
class TopocentricElements:
|
|
451
|
+
"""
|
|
452
|
+
Args:
|
|
453
|
+
right_ascension: TEME right ascension in **_degrees_**
|
|
454
|
+
declination: TEME declination in **_degrees_**
|
|
455
|
+
"""
|
|
456
|
+
|
|
457
|
+
range: Optional[float]
|
|
458
|
+
"""Range in **_kilometers_**"""
|
|
459
|
+
|
|
460
|
+
right_ascension: float
|
|
461
|
+
declination: float
|
|
462
|
+
range_rate: Optional[float]
|
|
463
|
+
"""Range rate in **_kilometers per second_**"""
|
|
464
|
+
|
|
465
|
+
right_ascension_rate: Optional[float]
|
|
466
|
+
"""Right ascension rate in **_degrees per second**"""
|
|
467
|
+
|
|
468
|
+
declination_rate: Optional[float]
|
|
469
|
+
"""Declination rate in **_degrees per second**"""
|
|
470
|
+
|
|
471
|
+
def __init__(self, right_ascension: float, declination: float) -> None: ...
|
|
472
|
+
@classmethod
|
|
473
|
+
def from_j2000(cls, epoch: Epoch, ra: float, dec: float) -> TopocentricElements:
|
|
474
|
+
"""
|
|
475
|
+
Args:
|
|
476
|
+
epoch: UTC epoch of the angles
|
|
477
|
+
ra: J2000 right ascension in **_degrees_**
|
|
478
|
+
dec: J2000 declination in **_degrees_**
|
|
479
|
+
"""
|
|
480
|
+
...
|
|
481
|
+
|
|
482
|
+
class TopocentricState:
|
|
483
|
+
"""
|
|
484
|
+
Args:
|
|
485
|
+
epoch: UTC epoch of the state
|
|
486
|
+
elements: TopocentricElements of the state
|
|
487
|
+
"""
|
|
488
|
+
|
|
489
|
+
epoch: Epoch
|
|
490
|
+
"""UTC epoch of the state"""
|
|
491
|
+
|
|
492
|
+
elements: TopocentricElements
|
|
493
|
+
"""Topocentric elements of the state"""
|
|
494
|
+
|
|
495
|
+
range: Optional[float]
|
|
496
|
+
"""Range in **_kilometers_**"""
|
|
497
|
+
|
|
498
|
+
right_ascension: float
|
|
499
|
+
"""TEME right ascension in **_degrees_**"""
|
|
500
|
+
|
|
501
|
+
declination: float
|
|
502
|
+
"""TEME declination in **_degrees_**"""
|
|
503
|
+
|
|
504
|
+
range_rate: Optional[float]
|
|
505
|
+
"""Range rate in **_kilometers per second_**"""
|
|
506
|
+
|
|
507
|
+
right_ascension_rate: Optional[float]
|
|
508
|
+
"""Right ascension rate in **_degrees per second**"""
|
|
509
|
+
|
|
510
|
+
declination_rate: Optional[float]
|
|
511
|
+
"""Declination rate in **_degrees per second**"""
|
|
512
|
+
|
|
513
|
+
def __init__(self, epoch: Epoch, elements: TopocentricElements) -> None: ...
|
|
514
|
+
@classmethod
|
|
515
|
+
def from_horizon_state(cls, horizon_state: HorizonState, observer: Observatory) -> TopocentricState:
|
|
516
|
+
"""
|
|
517
|
+
Args:
|
|
518
|
+
horizon_state: HorizonState of the target
|
|
519
|
+
observer: Position of the observer
|
|
520
|
+
"""
|
|
521
|
+
...
|
keplemon/enums.py
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from keplemon._keplemon.enums import ( # type: ignore
|
|
2
|
+
TimeSystem,
|
|
3
|
+
Classification,
|
|
4
|
+
KeplerianType,
|
|
5
|
+
ReferenceFrame,
|
|
6
|
+
CovarianceType,
|
|
7
|
+
AssociationConfidence,
|
|
8
|
+
GeodeticModel,
|
|
9
|
+
MeanEquinox,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"TimeSystem",
|
|
14
|
+
"Classification",
|
|
15
|
+
"KeplerianType",
|
|
16
|
+
"ReferenceFrame",
|
|
17
|
+
"CovarianceType",
|
|
18
|
+
"AssociationConfidence",
|
|
19
|
+
"GeodeticModel",
|
|
20
|
+
"MeanEquinox",
|
|
21
|
+
]
|
keplemon/enums.pyi
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# flake8: noqa
|
|
2
|
+
from enum import Enum
|
|
3
|
+
|
|
4
|
+
class AssociationConfidence(Enum):
|
|
5
|
+
"""
|
|
6
|
+
Confidence level of an observation association
|
|
7
|
+
|
|
8
|
+
Attributes:
|
|
9
|
+
Low (AssociationConfidence): Low confidence
|
|
10
|
+
Medium (AssociationConfidence): Medium confidence
|
|
11
|
+
High (AssociationConfidence): High confidence
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
Low = ...
|
|
15
|
+
Medium = ...
|
|
16
|
+
High = ...
|
|
17
|
+
|
|
18
|
+
class CovarianceType(Enum):
|
|
19
|
+
"""
|
|
20
|
+
Reference frame/element types for a covariance matrix
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
Inertial (CovarianceType): Cartesian TEME
|
|
24
|
+
Relative (CovarianceType): Cartesian UVW
|
|
25
|
+
Equinoctial (CovarianceType): Equinoctial
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
Inertial = ...
|
|
29
|
+
Relative = ...
|
|
30
|
+
Equinoctial = ...
|
|
31
|
+
|
|
32
|
+
class GeodeticModel(Enum):
|
|
33
|
+
"""
|
|
34
|
+
Geodetic model used for Earth shape and gravity
|
|
35
|
+
|
|
36
|
+
Attributes:
|
|
37
|
+
WGS72 (GeodeticModel): WGS72 geodetic model
|
|
38
|
+
WGS84 (GeodeticModel): WGS84 geodetic model
|
|
39
|
+
EGM96 (GeodeticModel): EGM96 geodetic model
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
WGS72 = ...
|
|
43
|
+
WGS84 = ...
|
|
44
|
+
EGM96 = ...
|
|
45
|
+
|
|
46
|
+
class MeanEquinox(Enum):
|
|
47
|
+
"""
|
|
48
|
+
Mean equinox used for topocentric calculations
|
|
49
|
+
|
|
50
|
+
Attributes:
|
|
51
|
+
OfDate (MeanEquinox): Mean equinox of date
|
|
52
|
+
OfYear (MeanEquinox): Mean equinox of year
|
|
53
|
+
J2000 (MeanEquinox): J2000 mean equinox
|
|
54
|
+
B1950 (MeanEquinox): B1950 mean equinox
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
OfDate = ...
|
|
58
|
+
OfYear = ...
|
|
59
|
+
J2000 = ...
|
|
60
|
+
B1950 = ...
|
|
61
|
+
|
|
62
|
+
class TimeSystem(Enum):
|
|
63
|
+
"""
|
|
64
|
+
Attributes:
|
|
65
|
+
UTC (TimeSystem): Coordinated Universal Time
|
|
66
|
+
TAI (TimeSystem): International Atomic Time
|
|
67
|
+
TT (TimeSystem): Terrestrial Time
|
|
68
|
+
UT1 (TimeSystem): Universal Time
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
UTC = ...
|
|
72
|
+
TAI = ...
|
|
73
|
+
TT = ...
|
|
74
|
+
UT1 = ...
|
|
75
|
+
|
|
76
|
+
class Classification(Enum):
|
|
77
|
+
"""
|
|
78
|
+
Simple classification primarily used to construct single-character identifiers in SAAL data
|
|
79
|
+
|
|
80
|
+
Attributes:
|
|
81
|
+
Unclassified (Classification): Unclassified
|
|
82
|
+
Confidential (Classification): Confidential
|
|
83
|
+
Secret (Classification): Secret
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
Unclassified = ...
|
|
87
|
+
Confidential = ...
|
|
88
|
+
Secret = ...
|
|
89
|
+
|
|
90
|
+
class KeplerianType(Enum):
|
|
91
|
+
"""
|
|
92
|
+
Theory used to construct the Keplerian elements
|
|
93
|
+
|
|
94
|
+
Attributes:
|
|
95
|
+
MeanKozaiGP (KeplerianType): SGP4 mean elements with Kozai mean motion
|
|
96
|
+
MeanBrouwerGP (KeplerianType): SGP4 mean elements with Brouwer mean motion
|
|
97
|
+
MeanBrouwerXP (KeplerianType): SGP4-XP mean elements with Brouwer mean motion
|
|
98
|
+
Osculating (KeplerianType): Osculating elements with Brouwer mean motion
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
MeanKozaiGP = ...
|
|
102
|
+
MeanBrouwerGP = ...
|
|
103
|
+
MeanBrouwerXP = ...
|
|
104
|
+
Osculating = ...
|
|
105
|
+
|
|
106
|
+
class ReferenceFrame(Enum):
|
|
107
|
+
"""
|
|
108
|
+
Reference frame used for inertial elements
|
|
109
|
+
|
|
110
|
+
Attributes:
|
|
111
|
+
TEME (ReferenceFrame): True Equator Mean Equinox
|
|
112
|
+
J2000 (ReferenceFrame): J2000
|
|
113
|
+
EFG (ReferenceFrame): Earth Fixed Greenwich (no polar motion)
|
|
114
|
+
ECR (ReferenceFrame): Earth Centered Rotating (polar motion)
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
TEME = ...
|
|
118
|
+
J2000 = ...
|
|
119
|
+
EFG = ...
|
|
120
|
+
ECR = ...
|
keplemon/estimation.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from keplemon._keplemon.estimation import ( # type: ignore
|
|
2
|
+
Observation,
|
|
3
|
+
ObservationResidual,
|
|
4
|
+
BatchLeastSquares,
|
|
5
|
+
Covariance,
|
|
6
|
+
ObservationAssociation,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
__all__ = ["Observation", "ObservationResidual", "BatchLeastSquares", "Covariance", "ObservationAssociation"]
|