satkit 0.8.4__cp314-cp314-win_amd64.whl → 0.9.0__cp314-cp314-win_amd64.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.
- satkit/_version.py +2 -2
- satkit/satkit.cp314-win_amd64.pyd +0 -0
- satkit/satkit.pyi +130 -26
- {satkit-0.8.4.dist-info → satkit-0.9.0.dist-info}/METADATA +29 -24
- {satkit-0.8.4.dist-info → satkit-0.9.0.dist-info}/RECORD +8 -8
- {satkit-0.8.4.dist-info → satkit-0.9.0.dist-info}/WHEEL +0 -0
- {satkit-0.8.4.dist-info → satkit-0.9.0.dist-info}/licenses/LICENSE +0 -0
- {satkit-0.8.4.dist-info → satkit-0.9.0.dist-info}/top_level.txt +0 -0
satkit/_version.py
CHANGED
|
Binary file
|
satkit/satkit.pyi
CHANGED
|
@@ -261,7 +261,7 @@ class TLE:
|
|
|
261
261
|
"""
|
|
262
262
|
|
|
263
263
|
def sgp4(
|
|
264
|
-
tle: TLE | list[TLE],
|
|
264
|
+
tle: TLE | list[TLE] | dict,
|
|
265
265
|
tm: time | list[time] | npt.ArrayLike,
|
|
266
266
|
**kwargs,
|
|
267
267
|
) -> tuple[npt.NDArray[np.float64], npt.NDArray[np.float64]]:
|
|
@@ -276,7 +276,7 @@ def sgp4(
|
|
|
276
276
|
https://celestrak.org/publications/AIAA/2008-6770/AIAA-2008-6770.pdf
|
|
277
277
|
|
|
278
278
|
Args:
|
|
279
|
-
tle (TLE | list[TLE]): TLE (or list of TLES) on which to operate
|
|
279
|
+
tle (TLE | list[TLE] | dict): TLE or OMM (or list of TLES) on which to operate
|
|
280
280
|
tm (time | list[time] | npt.ArrayLike[time]): time(s) at which to compute position and velocity
|
|
281
281
|
|
|
282
282
|
Keyword Args:
|
|
@@ -294,6 +294,12 @@ def sgp4(
|
|
|
294
294
|
Additional return value if errflag is True:
|
|
295
295
|
list[sgp4_error]: list of errors for each TLE and time output, if errflag is True
|
|
296
296
|
|
|
297
|
+
Note:
|
|
298
|
+
Now supports propagation of OMM (Orbital Mean-Element Message) dictionaries
|
|
299
|
+
The dictionaries must follow the structure used by https://www.celestrak.org or
|
|
300
|
+
https://www.space-track.org.
|
|
301
|
+
|
|
302
|
+
|
|
297
303
|
Example:
|
|
298
304
|
>>> lines = [
|
|
299
305
|
>>> "0 INTELSAT 902",
|
|
@@ -317,6 +323,20 @@ def sgp4(
|
|
|
317
323
|
>>> # Print ITRF coordinate object location
|
|
318
324
|
>>> print(coord)
|
|
319
325
|
ITRFCoord(lat: -0.0363 deg, lon: -2.2438 deg, hae: 35799.51 km)
|
|
326
|
+
|
|
327
|
+
Example 2:
|
|
328
|
+
>>> import requests
|
|
329
|
+
>>> import json
|
|
330
|
+
>>>
|
|
331
|
+
>>> # Query ephemeris for the International Space Station (ISS)
|
|
332
|
+
>>> url = 'https://celestrak.org/NORAD/elements/gp.php?CATNR=25544&FORMAT=json'
|
|
333
|
+
>>> with requests.get(url) as response:
|
|
334
|
+
>>> omm = response.json()
|
|
335
|
+
>>> # Get a representative time from the output
|
|
336
|
+
>>> epoch = sk.time(omm[0]['EPOCH'])
|
|
337
|
+
>>> # Compute TEME position & velocity at epoch
|
|
338
|
+
>>> pteme, vteme = satkit.sgp4(omm[0], epoch)
|
|
339
|
+
|
|
320
340
|
"""
|
|
321
341
|
|
|
322
342
|
class sgp4_gravconst:
|
|
@@ -968,9 +988,30 @@ class time:
|
|
|
968
988
|
satkit.time: Time object representing the same instant in time as the input "datetime.datetime" object
|
|
969
989
|
"""
|
|
970
990
|
|
|
971
|
-
def
|
|
991
|
+
def as_datetime(self, utc: bool = True) -> datetime.datetime:
|
|
972
992
|
"""Convert object to "datetime.datetime" object representing same instant in time.
|
|
973
993
|
|
|
994
|
+
Args:
|
|
995
|
+
utc (bool, optional): Whether to make the "datetime.datetime" object represent time in the local timezone or "UTC". Default is True
|
|
996
|
+
|
|
997
|
+
Returns:
|
|
998
|
+
datetime.datetime: "datetime.datetime" object representing the same instant in time as the "satkit.time" object
|
|
999
|
+
|
|
1000
|
+
Example:
|
|
1001
|
+
>>> dt = satkit.time(2023, 6, 3, 6, 19, 34).as_datetime(True)
|
|
1002
|
+
>>> print(dt)
|
|
1003
|
+
2023-06-03 06:19:34+00:00
|
|
1004
|
+
>>>
|
|
1005
|
+
>>> dt = satkit.time(2023, 6, 3, 6, 19, 34).as_datetime(False)
|
|
1006
|
+
>>> print(dt)
|
|
1007
|
+
2023-06-03 02:19:34
|
|
1008
|
+
"""
|
|
1009
|
+
|
|
1010
|
+
def datetime(self, utc: bool = True) -> datetime.datetime:
|
|
1011
|
+
"""Deprecated: use :meth:`satkit.time.as_datetime`.
|
|
1012
|
+
|
|
1013
|
+
Convert object to "datetime.datetime" object representing same instant in time.
|
|
1014
|
+
|
|
974
1015
|
Args:
|
|
975
1016
|
utc (bool, optional): Whether to make the "datetime.datetime" object represent time in the local timezone or "UTC". Default is True
|
|
976
1017
|
|
|
@@ -1393,6 +1434,36 @@ class duration:
|
|
|
1393
1434
|
Duration: 2 days, 12 hours, 0 minutes, 0.000 seconds
|
|
1394
1435
|
"""
|
|
1395
1436
|
|
|
1437
|
+
@typing.overload
|
|
1438
|
+
def __truediv__(self, other: float) -> duration:
|
|
1439
|
+
"""Divide (or scale) duration by given value
|
|
1440
|
+
|
|
1441
|
+
Args:
|
|
1442
|
+
other (float): value by which to divide duration
|
|
1443
|
+
|
|
1444
|
+
Returns:
|
|
1445
|
+
duration: Duration object representing the input duration divided by the input value
|
|
1446
|
+
|
|
1447
|
+
Example:
|
|
1448
|
+
>>> print(duration.from_days(1) / 2)
|
|
1449
|
+
Duration: 12 hours, 0 minutes, 0.000 seconds
|
|
1450
|
+
"""
|
|
1451
|
+
|
|
1452
|
+
@typing.overload
|
|
1453
|
+
def __truediv__(self, other: duration) -> float:
|
|
1454
|
+
"""Divide (or scale) duration by another duration to get a dimensionless ratio
|
|
1455
|
+
|
|
1456
|
+
Args:
|
|
1457
|
+
other (duration): duration by which to divide current duration
|
|
1458
|
+
|
|
1459
|
+
Returns:
|
|
1460
|
+
float: Dimensionless ratio of the two durations
|
|
1461
|
+
|
|
1462
|
+
Example:
|
|
1463
|
+
>>> print(duration.from_hours(1) / duration.from_minutes(30))
|
|
1464
|
+
2.0
|
|
1465
|
+
"""
|
|
1466
|
+
|
|
1396
1467
|
def __gt__(self, other: duration) -> bool:
|
|
1397
1468
|
"""Compare two durations for greater than
|
|
1398
1469
|
|
|
@@ -1649,6 +1720,39 @@ class quaternion:
|
|
|
1649
1720
|
satkit.quaternion: Conjugate or inverse of the rotation
|
|
1650
1721
|
"""
|
|
1651
1722
|
|
|
1723
|
+
@property
|
|
1724
|
+
def x(self) -> float:
|
|
1725
|
+
"""X component of the quaternion
|
|
1726
|
+
|
|
1727
|
+
Returns:
|
|
1728
|
+
float: X component of the quaternion
|
|
1729
|
+
"""
|
|
1730
|
+
|
|
1731
|
+
@property
|
|
1732
|
+
def y(self) -> float:
|
|
1733
|
+
"""Y component of the quaternion
|
|
1734
|
+
|
|
1735
|
+
Returns:
|
|
1736
|
+
float: Y component of the quaternion
|
|
1737
|
+
"""
|
|
1738
|
+
|
|
1739
|
+
@property
|
|
1740
|
+
def z(self) -> float:
|
|
1741
|
+
"""Z component of the quaternion
|
|
1742
|
+
|
|
1743
|
+
Returns:
|
|
1744
|
+
float: Z component of the quaternion
|
|
1745
|
+
"""
|
|
1746
|
+
|
|
1747
|
+
@property
|
|
1748
|
+
def w(self) -> float:
|
|
1749
|
+
"""Scalar component of the quaternion
|
|
1750
|
+
|
|
1751
|
+
Returns:
|
|
1752
|
+
float: Scalar component of the quaternion
|
|
1753
|
+
"""
|
|
1754
|
+
|
|
1755
|
+
|
|
1652
1756
|
@typing.overload
|
|
1653
1757
|
def __mul__(self, other: quaternion) -> quaternion:
|
|
1654
1758
|
"""Multiply by another quaternion to concatenate rotations
|
|
@@ -2172,7 +2276,7 @@ class propresult:
|
|
|
2172
2276
|
|
|
2173
2277
|
Notes:
|
|
2174
2278
|
|
|
2175
|
-
* If "enable_interp" is set to True in the propagation settings, the propresult object can be used to interpolate solutions at any time between the
|
|
2279
|
+
* If "enable_interp" is set to True in the propagation settings, the propresult object can be used to interpolate solutions at any time between the begin and end times of the propagation via the "interp" method
|
|
2176
2280
|
|
|
2177
2281
|
"""
|
|
2178
2282
|
|
|
@@ -2213,10 +2317,10 @@ class propresult:
|
|
|
2213
2317
|
"""
|
|
2214
2318
|
|
|
2215
2319
|
@property
|
|
2216
|
-
def
|
|
2217
|
-
"""6-element state (pos + vel) of satellite in meters & meters/second at
|
|
2320
|
+
def state_begin(self) -> npt.NDArray[np.float64]:
|
|
2321
|
+
"""6-element state (pos + vel) of satellite in meters & meters/second at begin of propagation
|
|
2218
2322
|
Returns:
|
|
2219
|
-
npt.NDArray[np.float64]: 6-element numpy array representing state of satellite in meters & meters/second at
|
|
2323
|
+
npt.NDArray[np.float64]: 6-element numpy array representing state of satellite in meters & meters/second at begin of propagation
|
|
2220
2324
|
"""
|
|
2221
2325
|
|
|
2222
2326
|
@property
|
|
@@ -2239,12 +2343,12 @@ class propresult:
|
|
|
2239
2343
|
"""
|
|
2240
2344
|
|
|
2241
2345
|
@property
|
|
2242
|
-
def
|
|
2243
|
-
"""Time at which
|
|
2346
|
+
def time_begin(self) -> time:
|
|
2347
|
+
"""Time at which state_begin is valid
|
|
2244
2348
|
|
|
2245
2349
|
|
|
2246
2350
|
Returns:
|
|
2247
|
-
satkit.time: Time at which
|
|
2351
|
+
satkit.time: Time at which state_begin is valid
|
|
2248
2352
|
"""
|
|
2249
2353
|
|
|
2250
2354
|
@property
|
|
@@ -2335,7 +2439,7 @@ class propsettings:
|
|
|
2335
2439
|
* use_jplephem: True
|
|
2336
2440
|
* enable_interp: True
|
|
2337
2441
|
|
|
2338
|
-
|
|
2442
|
+
* enable_interp enables high-preciion interpolation of state between begin and end times via the returned function,
|
|
2339
2443
|
it is enabled by default. There is a small increase in computational efficiency if set to false
|
|
2340
2444
|
|
|
2341
2445
|
"""
|
|
@@ -2349,7 +2453,7 @@ class propsettings:
|
|
|
2349
2453
|
gravity_order (int, optional keyword): Earth gravity order to use in ODE integration. Default is 4
|
|
2350
2454
|
use_spaceweather (bool, optional keyword): Use space weather data when computing atmospheric density for drag forces. Default is True
|
|
2351
2455
|
use_jplephem (bool, optional keyword): Use JPL ephemeris for solar system bodies. Default is True
|
|
2352
|
-
enable_interp (bool, optional keyword): Store intermediate data that allows for fast high-precision interpolation of state between
|
|
2456
|
+
enable_interp (bool, optional keyword): Store intermediate data that allows for fast high-precision interpolation of state between begin and end times. Default is True
|
|
2353
2457
|
|
|
2354
2458
|
|
|
2355
2459
|
Returns:
|
|
@@ -2408,30 +2512,30 @@ class propsettings:
|
|
|
2408
2512
|
def use_spaceweather(self, value: bool) -> None: ...
|
|
2409
2513
|
@property
|
|
2410
2514
|
def enable_interp(self) -> bool:
|
|
2411
|
-
"""Store intermediate data that allows for fast high-precision interpolation of state between
|
|
2515
|
+
"""Store intermediate data that allows for fast high-precision interpolation of state between begin and end times
|
|
2412
2516
|
If not needed, there is a small computational advantage if set to False
|
|
2413
2517
|
"""
|
|
2414
2518
|
|
|
2415
2519
|
@enable_interp.setter
|
|
2416
2520
|
def enable_interp(self, value: bool) -> None: ...
|
|
2417
2521
|
def precompute_terms(
|
|
2418
|
-
self,
|
|
2522
|
+
self, begin: time, end: time, step: Optional[duration] = None
|
|
2419
2523
|
):
|
|
2420
|
-
"""Precompute terms for fast interpolation of state between
|
|
2524
|
+
"""Precompute terms for fast interpolation of state between begin and end times
|
|
2421
2525
|
|
|
2422
2526
|
This can be used, for example, to compute sun and moon positions only once if propagating many satellites over the same time period
|
|
2423
2527
|
|
|
2424
2528
|
Args:
|
|
2425
|
-
|
|
2426
|
-
|
|
2529
|
+
begin (satkit.time): Begin time of propagation
|
|
2530
|
+
end (satkit.time): End time of propagation
|
|
2427
2531
|
step (satkit.duration, optional): Step size for interpolation. Default = 60 seconds
|
|
2428
2532
|
|
|
2429
2533
|
"""
|
|
2430
2534
|
|
|
2431
2535
|
def propagate(
|
|
2432
2536
|
state: npt.NDArray[np.float64],
|
|
2433
|
-
|
|
2434
|
-
|
|
2537
|
+
begin: time,
|
|
2538
|
+
end: time,
|
|
2435
2539
|
**kwargs,
|
|
2436
2540
|
) -> propresult:
|
|
2437
2541
|
"""High-precision orbit propagator
|
|
@@ -2440,12 +2544,12 @@ def propagate(
|
|
|
2440
2544
|
|
|
2441
2545
|
Args:
|
|
2442
2546
|
state (npt.ArrayLike[float], optional): 6-element numpy array representing satellite GCRF position and velocity in meters and meters/second
|
|
2443
|
-
|
|
2444
|
-
|
|
2445
|
-
duration (satkit.duration, optional keyword): duration from "
|
|
2446
|
-
duration_secs (float, optional keyword): duration in seconds from "
|
|
2447
|
-
duration_days (float, optional keyword): duration in days from "
|
|
2448
|
-
output_phi (bool, optional keyword): Output 6x6 state transition matrix between "
|
|
2547
|
+
begin (satkit.time, optional): satkit.time object representing instant at which satellite is at "pos" & "vel"
|
|
2548
|
+
end (satkit.time, optional keyword): satkit.time object representing instant at which new position and velocity will be computed
|
|
2549
|
+
duration (satkit.duration, optional keyword): duration from "begin" at which new position & velocity will be computed.
|
|
2550
|
+
duration_secs (float, optional keyword): duration in seconds from "begin" for at which new position and velocity will be computed.
|
|
2551
|
+
duration_days (float, optional keyword): duration in days from "begin" at which new position and velocity will be computed.
|
|
2552
|
+
output_phi (bool, optional keyword): Output 6x6 state transition matrix between "begintime" and "endtime" (and at intervals, if specified)
|
|
2449
2553
|
propsettings (propsettings, optional keyword): "propsettings" object with input settings for the propagation. if left out, default will be used.
|
|
2450
2554
|
satproperties (satproperties_static, optional keyword): "sat_properties_static" object with drag and radiation pressure succeptibility of satellite.
|
|
2451
2555
|
|
|
@@ -2461,7 +2565,7 @@ def propagate(
|
|
|
2461
2565
|
* Sun, Moon gravity
|
|
2462
2566
|
* Radiation pressured
|
|
2463
2567
|
* Atmospheric drag: NRL-MISE 2000 density model, with option to include space weather effects (which can be large)
|
|
2464
|
-
*
|
|
2568
|
+
* End time must be set by keyword argument, either explicitely or by duration
|
|
2465
2569
|
* Solid Earth tides are not (yet) included in the model
|
|
2466
2570
|
|
|
2467
2571
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: satkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: Satellite Orbital Dynamics Toolkit
|
|
5
5
|
Author-email: Steven Michael <ssmichael@gmail.com>
|
|
6
6
|
Maintainer-email: Steven Michael <ssmichael@gmail.com>
|
|
@@ -40,6 +40,9 @@ Description-Content-Type: text/markdown
|
|
|
40
40
|
License-File: LICENSE
|
|
41
41
|
Requires-Dist: numpy>=1.0.0
|
|
42
42
|
Requires-Dist: satkit-data>=0.7.0
|
|
43
|
+
Provides-Extra: test
|
|
44
|
+
Requires-Dist: pytest; extra == "test"
|
|
45
|
+
Requires-Dist: xmltodict; extra == "test"
|
|
43
46
|
Dynamic: license-file
|
|
44
47
|
|
|
45
48
|
# Satellite Toolkit (satkit)
|
|
@@ -48,7 +51,7 @@ Dynamic: license-file
|
|
|
48
51
|
|
|
49
52
|
Satkit provides robust, high-performance satellite orbital mechanics calculations with a clean, intuitive API. Built from the ground up in Rust for maximum performance and memory safety, it offers complete Python bindings for all functionality, making advanced orbital mechanics accessible to both systems programmers and data scientists.
|
|
50
53
|
|
|
51
|
-
-----
|
|
54
|
+
-----
|
|
52
55
|
|
|
53
56
|

|
|
54
57
|

|
|
@@ -62,7 +65,7 @@ Satkit provides robust, high-performance satellite orbital mechanics calculation
|
|
|
62
65
|

|
|
63
66
|

|
|
64
67
|

|
|
65
|
-
|
|
68
|
+
|
|
66
69
|
------
|
|
67
70
|
|
|
68
71
|
## Language Bindings
|
|
@@ -84,7 +87,7 @@ High-precision conversions between multiple reference frames with full support f
|
|
|
84
87
|
- **CIRF** - Celestial Intermediate Reference Frame (IAU-2006 intermediate)
|
|
85
88
|
- **TIRF** - Terrestrial Intermediate Reference Frame (Earth-rotation intermediate)
|
|
86
89
|
- **Geodetic** - Latitude, longitude, altitude with WGS-84 ellipsoid
|
|
87
|
-
|
|
90
|
+
|
|
88
91
|
### Orbit Propagation
|
|
89
92
|
Multiple propagation methods optimized for different accuracy and performance requirements:
|
|
90
93
|
- **Numerical Integration**: High-precision propagation using adaptive Runge-Kutta 9(8) methods with dense output
|
|
@@ -95,27 +98,29 @@ Multiple propagation methods optimized for different accuracy and performance re
|
|
|
95
98
|
- Full AFSPC and improved mode support
|
|
96
99
|
- TLE fitting from high-precision states with drag estimation
|
|
97
100
|
- Batch processing for multiple satellites
|
|
101
|
+
- Support TLE and Orbital Mean-Element Messages
|
|
98
102
|
- **Keplerian**: Fast analytical two-body propagation for preliminary analysis
|
|
99
|
-
|
|
100
|
-
### Force Models
|
|
103
|
+
|
|
104
|
+
### Numerical Integration Force Models
|
|
101
105
|
Comprehensive perturbation modeling for high-fidelity orbit propagation:
|
|
102
106
|
- **Earth Gravity**: Spherical harmonic models up to degree/order 360
|
|
103
107
|
- Multiple models: JGM2, JGM3, EGM96, ITU GRACE16
|
|
104
108
|
- Efficient computation with configurable truncation order
|
|
105
109
|
- Gravity gradient support for state transition matrix
|
|
106
110
|
- **Third-Body Gravity**: Solar and lunar perturbations using JPL ephemerides
|
|
107
|
-
- **Atmospheric Drag**:
|
|
111
|
+
- **Atmospheric Drag**:
|
|
112
|
+
- NRLMSISE-00 density model with space weather integration
|
|
108
113
|
- Automatic space weather data updates (F10.7, Ap index)
|
|
109
114
|
- Configurable ballistic coefficients
|
|
110
115
|
- **Solar Radiation Pressure**: Cannon-ball model with shadow function
|
|
111
|
-
|
|
112
|
-
### Ephemerides
|
|
116
|
+
|
|
117
|
+
### Solar System Ephemerides
|
|
113
118
|
Access to high-precision solar system body positions:
|
|
114
119
|
- **JPL DE440/DE441**: State-of-the-art planetary ephemerides
|
|
115
120
|
- Chebyshev polynomial interpolation for accuracy
|
|
116
121
|
- Support for all major planets, sun, moon, and solar system barycenter
|
|
117
122
|
- **Low-Precision Models**: Fast analytical models for sun and moon when high precision isn't required
|
|
118
|
-
|
|
123
|
+
|
|
119
124
|
### Time Systems
|
|
120
125
|
Comprehensive support for all standard astronomical time scales:
|
|
121
126
|
- **UTC** - Coordinated Universal Time with leap second handling
|
|
@@ -125,7 +130,7 @@ Comprehensive support for all standard astronomical time scales:
|
|
|
125
130
|
- **UT1** - Universal Time with Earth orientation corrections
|
|
126
131
|
- **GPS** - GPS Time
|
|
127
132
|
- Automatic conversion between all time scales with microsecond precision
|
|
128
|
-
|
|
133
|
+
|
|
129
134
|
### Geodetic Utilities
|
|
130
135
|
- **Geodesic Calculations**: Accurate distance and azimuth between ground locations using Vincenty's formulae
|
|
131
136
|
- **Coordinate Conversions**: ITRF ↔ Geodetic ↔ East-North-Up ↔ North-East-Down
|
|
@@ -178,12 +183,12 @@ The library requires external data files for various calculations. These are aut
|
|
|
178
183
|
- DE440/DE441 planetary ephemerides (~100 MB)
|
|
179
184
|
- Provides positions of sun, moon, planets, and solar system barycenter
|
|
180
185
|
- Valid for years 1550-2650 CE
|
|
181
|
-
|
|
186
|
+
|
|
182
187
|
- **Gravity Models** ([ICGEM](http://icgem.gfz-potsdam.de/home))
|
|
183
188
|
- JGM2, JGM3, EGM96, ITU GRACE16 spherical harmonic coefficients
|
|
184
189
|
- International Centre for Global Earth Models standardized format
|
|
185
190
|
- Up to degree/order 360 for high-fidelity propagation
|
|
186
|
-
|
|
191
|
+
|
|
187
192
|
- **IERS Nutation Tables** ([IERS Conventions](https://www.iers.org/IERS/EN/Publications/TechnicalNotes/tn36.html))
|
|
188
193
|
- IAU-2006 nutation series coefficients
|
|
189
194
|
- Required for GCRF ↔ ITRF transformations
|
|
@@ -196,7 +201,7 @@ The library requires external data files for various calculations. These are aut
|
|
|
196
201
|
- Ap geomagnetic index
|
|
197
202
|
- Critical for atmospheric density modeling and drag calculations
|
|
198
203
|
- Updated daily by NOAA Space Weather Prediction Center
|
|
199
|
-
|
|
204
|
+
|
|
200
205
|
- **Earth Orientation Parameters** ([Celestrak](https://celestrak.org/SpaceData/))
|
|
201
206
|
- Polar motion (x, y)
|
|
202
207
|
- UT1-UTC time difference
|
|
@@ -218,15 +223,15 @@ The library includes comprehensive test suites ensuring correctness of calculati
|
|
|
218
223
|
- **JPL Ephemerides**: Validated against JPL-provided test vectors for Chebyshev polynomial interpolation
|
|
219
224
|
- Over 10,000 test cases covering all planets and time ranges
|
|
220
225
|
- Accuracy verified to within JPL's published tolerances (sub-meter precision)
|
|
221
|
-
|
|
226
|
+
|
|
222
227
|
- **SGP4**: Verified using official test vectors from the original C++ distribution
|
|
223
228
|
- All test cases from Vallado's SGP4 implementation
|
|
224
229
|
- Includes edge cases and error conditions
|
|
225
|
-
|
|
230
|
+
|
|
226
231
|
- **Coordinate Transformations**: Cross-validated against multiple reference implementations
|
|
227
232
|
- SOFA library comparisons for IAU-2006 transformations
|
|
228
233
|
- Vallado test cases for GCRF ↔ ITRF conversions
|
|
229
|
-
|
|
234
|
+
|
|
230
235
|
- **Numerical Propagation**: Validated against high-precision commercial tools
|
|
231
236
|
- Orbit fits to GPS SP3 ephemerides
|
|
232
237
|
- Multi-day propagations with sub-meter accuracy
|
|
@@ -266,7 +271,7 @@ pip install satkit
|
|
|
266
271
|
|
|
267
272
|
Pre-built binary wheels are available for:
|
|
268
273
|
- **Windows**: AMD64
|
|
269
|
-
- **macOS**: Intel (x86_64) and Apple Silicon (ARM64)
|
|
274
|
+
- **macOS**: Intel (x86_64) and Apple Silicon (ARM64)
|
|
270
275
|
- **Linux**: x86_64 and ARM64 (aarch64)
|
|
271
276
|
- **Python versions**: 3.8, 3.9, 3.10, 3.11, 3.12, 3.13, 3.14
|
|
272
277
|
|
|
@@ -336,9 +341,9 @@ settings.gravity_order = 8
|
|
|
336
341
|
|
|
337
342
|
# Propagate for 1 day
|
|
338
343
|
result = sk.propagate(
|
|
339
|
-
state0,
|
|
340
|
-
time0,
|
|
341
|
-
|
|
344
|
+
state0,
|
|
345
|
+
time0,
|
|
346
|
+
end=time0 + sk.duration.from_days(1),
|
|
342
347
|
propsettings=settings
|
|
343
348
|
)
|
|
344
349
|
|
|
@@ -375,13 +380,13 @@ use satkit::{Instant, SolarSystem, jplephem};
|
|
|
375
380
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
376
381
|
// Create time instant
|
|
377
382
|
let time = Instant::from_datetime(2024, 1, 1, 0, 0, 0.0)?;
|
|
378
|
-
|
|
383
|
+
|
|
379
384
|
// Get Moon position and velocity in GCRF
|
|
380
385
|
let (pos, vel) = jplephem::geocentric_state(SolarSystem::Moon, &time)?;
|
|
381
|
-
|
|
386
|
+
|
|
382
387
|
println!("Moon position: {:?}", pos);
|
|
383
388
|
println!("Moon velocity: {:?}", vel);
|
|
384
|
-
|
|
389
|
+
|
|
385
390
|
Ok(())
|
|
386
391
|
}
|
|
387
392
|
```
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
satkit/__init__.py,sha256=_N6_4wz07lz7HhjdL-8bUKOlubFC4WJHyTumLoS1ru4,622
|
|
2
2
|
satkit/__init__.pyi,sha256=zqMluH0ZKLDXQK9Z32yiEf2LncSDE8yiHHj9X0DS6Ww,732
|
|
3
|
-
satkit/_version.py,sha256=
|
|
3
|
+
satkit/_version.py,sha256=yPAtgqyyGYDKGGxCwEzymB8ULCvrs8uAfofuy5v01KY,446
|
|
4
4
|
satkit/density.pyi,sha256=j_25g_QI7LKo0IEq13Y2daSMYnb4pE5ZPHFX6H8gscE,2211
|
|
5
5
|
satkit/frametransform.pyi,sha256=UeVyVbWJppoPkCNWOvUM-MGs7FShVVP0wWh6LE8BPus,15806
|
|
6
6
|
satkit/jplephem.pyi,sha256=5W0tK3-kv5Si-aS7cci1QGTtXC5cAeEbUj5mwIu7IU8,3506
|
|
7
7
|
satkit/moon.pyi,sha256=r151F1_D2J_Zp9YgZfAuuUlqb8OMPUjk610UwhJ0OXs,3510
|
|
8
8
|
satkit/planets.pyi,sha256=MX_4waUoTVM11ftaIEDg8kmdZDId9nuRWUUiMYP6Zvg,1110
|
|
9
9
|
satkit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
satkit/satkit.cp314-win_amd64.pyd,sha256=
|
|
11
|
-
satkit/satkit.pyi,sha256=
|
|
10
|
+
satkit/satkit.cp314-win_amd64.pyd,sha256=kEtZ1WKzmmslSRG6HJONiDSNng0ppyVfAuHplcyo5Y0,4700160
|
|
11
|
+
satkit/satkit.pyi,sha256=Bb0rhJN9EVbAeVSFO2vBmLcWZUme4CzzItub3_eEjiA,88098
|
|
12
12
|
satkit/sun.pyi,sha256=Ox7n-JJTNRXFjIR1U0ehbEeecoVss11KFiiKhl28wQs,4217
|
|
13
13
|
satkit/utils.pyi,sha256=f087jRMh4Y4Lghrn-ncIvt16KCQ4Sto_icicvaXgXk4,3085
|
|
14
|
-
satkit-0.
|
|
15
|
-
satkit-0.
|
|
16
|
-
satkit-0.
|
|
17
|
-
satkit-0.
|
|
18
|
-
satkit-0.
|
|
14
|
+
satkit-0.9.0.dist-info/licenses/LICENSE,sha256=_G_hwbOSJZqdIWNjgzjFB91eZKvherjtmFfvVvy9wCA,1092
|
|
15
|
+
satkit-0.9.0.dist-info/METADATA,sha256=WVbRyKx82_Lr9r-WLt7XcT8pJ-RZg7FkkndH7Q_QjHM,17568
|
|
16
|
+
satkit-0.9.0.dist-info/WHEEL,sha256=7k6Wcy588iJYe5lf5K095NLg-uoBTnE-T8eHJ92G4_4,101
|
|
17
|
+
satkit-0.9.0.dist-info/top_level.txt,sha256=1gsJ2XQ64FuUfw4z-i3CDi4Y4z9qcKNcm8Fy6-8xSVE,7
|
|
18
|
+
satkit-0.9.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|