satkit 0.8.5__cp313-cp313-win_amd64.whl → 0.9.1__cp313-cp313-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.cp313-win_amd64.pyd +0 -0
- satkit/satkit.pyi +67 -26
- {satkit-0.8.5.dist-info → satkit-0.9.1.dist-info}/METADATA +42 -32
- {satkit-0.8.5.dist-info → satkit-0.9.1.dist-info}/RECORD +8 -8
- {satkit-0.8.5.dist-info → satkit-0.9.1.dist-info}/WHEEL +1 -1
- {satkit-0.8.5.dist-info → satkit-0.9.1.dist-info}/licenses/LICENSE +0 -0
- {satkit-0.8.5.dist-info → satkit-0.9.1.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
|
|
|
@@ -2235,7 +2276,7 @@ class propresult:
|
|
|
2235
2276
|
|
|
2236
2277
|
Notes:
|
|
2237
2278
|
|
|
2238
|
-
* 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
|
|
2239
2280
|
|
|
2240
2281
|
"""
|
|
2241
2282
|
|
|
@@ -2276,10 +2317,10 @@ class propresult:
|
|
|
2276
2317
|
"""
|
|
2277
2318
|
|
|
2278
2319
|
@property
|
|
2279
|
-
def
|
|
2280
|
-
"""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
|
|
2281
2322
|
Returns:
|
|
2282
|
-
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
|
|
2283
2324
|
"""
|
|
2284
2325
|
|
|
2285
2326
|
@property
|
|
@@ -2302,12 +2343,12 @@ class propresult:
|
|
|
2302
2343
|
"""
|
|
2303
2344
|
|
|
2304
2345
|
@property
|
|
2305
|
-
def
|
|
2306
|
-
"""Time at which
|
|
2346
|
+
def time_begin(self) -> time:
|
|
2347
|
+
"""Time at which state_begin is valid
|
|
2307
2348
|
|
|
2308
2349
|
|
|
2309
2350
|
Returns:
|
|
2310
|
-
satkit.time: Time at which
|
|
2351
|
+
satkit.time: Time at which state_begin is valid
|
|
2311
2352
|
"""
|
|
2312
2353
|
|
|
2313
2354
|
@property
|
|
@@ -2398,7 +2439,7 @@ class propsettings:
|
|
|
2398
2439
|
* use_jplephem: True
|
|
2399
2440
|
* enable_interp: True
|
|
2400
2441
|
|
|
2401
|
-
|
|
2442
|
+
* enable_interp enables high-preciion interpolation of state between begin and end times via the returned function,
|
|
2402
2443
|
it is enabled by default. There is a small increase in computational efficiency if set to false
|
|
2403
2444
|
|
|
2404
2445
|
"""
|
|
@@ -2412,7 +2453,7 @@ class propsettings:
|
|
|
2412
2453
|
gravity_order (int, optional keyword): Earth gravity order to use in ODE integration. Default is 4
|
|
2413
2454
|
use_spaceweather (bool, optional keyword): Use space weather data when computing atmospheric density for drag forces. Default is True
|
|
2414
2455
|
use_jplephem (bool, optional keyword): Use JPL ephemeris for solar system bodies. Default is True
|
|
2415
|
-
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
|
|
2416
2457
|
|
|
2417
2458
|
|
|
2418
2459
|
Returns:
|
|
@@ -2471,30 +2512,30 @@ class propsettings:
|
|
|
2471
2512
|
def use_spaceweather(self, value: bool) -> None: ...
|
|
2472
2513
|
@property
|
|
2473
2514
|
def enable_interp(self) -> bool:
|
|
2474
|
-
"""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
|
|
2475
2516
|
If not needed, there is a small computational advantage if set to False
|
|
2476
2517
|
"""
|
|
2477
2518
|
|
|
2478
2519
|
@enable_interp.setter
|
|
2479
2520
|
def enable_interp(self, value: bool) -> None: ...
|
|
2480
2521
|
def precompute_terms(
|
|
2481
|
-
self,
|
|
2522
|
+
self, begin: time, end: time, step: Optional[duration] = None
|
|
2482
2523
|
):
|
|
2483
|
-
"""Precompute terms for fast interpolation of state between
|
|
2524
|
+
"""Precompute terms for fast interpolation of state between begin and end times
|
|
2484
2525
|
|
|
2485
2526
|
This can be used, for example, to compute sun and moon positions only once if propagating many satellites over the same time period
|
|
2486
2527
|
|
|
2487
2528
|
Args:
|
|
2488
|
-
|
|
2489
|
-
|
|
2529
|
+
begin (satkit.time): Begin time of propagation
|
|
2530
|
+
end (satkit.time): End time of propagation
|
|
2490
2531
|
step (satkit.duration, optional): Step size for interpolation. Default = 60 seconds
|
|
2491
2532
|
|
|
2492
2533
|
"""
|
|
2493
2534
|
|
|
2494
2535
|
def propagate(
|
|
2495
2536
|
state: npt.NDArray[np.float64],
|
|
2496
|
-
|
|
2497
|
-
|
|
2537
|
+
begin: time,
|
|
2538
|
+
end: time,
|
|
2498
2539
|
**kwargs,
|
|
2499
2540
|
) -> propresult:
|
|
2500
2541
|
"""High-precision orbit propagator
|
|
@@ -2503,12 +2544,12 @@ def propagate(
|
|
|
2503
2544
|
|
|
2504
2545
|
Args:
|
|
2505
2546
|
state (npt.ArrayLike[float], optional): 6-element numpy array representing satellite GCRF position and velocity in meters and meters/second
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
duration (satkit.duration, optional keyword): duration from "
|
|
2509
|
-
duration_secs (float, optional keyword): duration in seconds from "
|
|
2510
|
-
duration_days (float, optional keyword): duration in days from "
|
|
2511
|
-
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)
|
|
2512
2553
|
propsettings (propsettings, optional keyword): "propsettings" object with input settings for the propagation. if left out, default will be used.
|
|
2513
2554
|
satproperties (satproperties_static, optional keyword): "sat_properties_static" object with drag and radiation pressure succeptibility of satellite.
|
|
2514
2555
|
|
|
@@ -2524,7 +2565,7 @@ def propagate(
|
|
|
2524
2565
|
* Sun, Moon gravity
|
|
2525
2566
|
* Radiation pressured
|
|
2526
2567
|
* Atmospheric drag: NRL-MISE 2000 density model, with option to include space weather effects (which can be large)
|
|
2527
|
-
*
|
|
2568
|
+
* End time must be set by keyword argument, either explicitely or by duration
|
|
2528
2569
|
* Solid Earth tides are not (yet) included in the model
|
|
2529
2570
|
|
|
2530
2571
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: satkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.1
|
|
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
|
|
@@ -74,17 +77,22 @@ Satkit provides robust, high-performance satellite orbital mechanics calculation
|
|
|
74
77
|
- Python versions 3.8 through 3.14 supported
|
|
75
78
|
- Full documentation at <https://satellite-toolkit.readthedocs.io/latest/>
|
|
76
79
|
|
|
80
|
+
## Optional Features
|
|
81
|
+
|
|
82
|
+
- **chrono**: Enables interoperability with `chrono::DateTime` by implementing the `TimeLike` trait.
|
|
83
|
+
Activate with Cargo feature `chrono`.
|
|
84
|
+
|
|
77
85
|
## Key Capabilities
|
|
78
86
|
|
|
79
87
|
### Coordinate Frame Transformations
|
|
80
88
|
High-precision conversions between multiple reference frames with full support for time-varying Earth orientation:
|
|
81
89
|
- **ITRF** - International Terrestrial Reference Frame (Earth-fixed)
|
|
82
90
|
- **GCRF** - Geocentric Celestial Reference Frame using IAU-2000/2006 reduction (inertial)
|
|
83
|
-
- **TEME** - True Equinox Mean Equator frame used in SGP4 propagation
|
|
91
|
+
- **TEME** - True Equinox Mean Equator frame used in SGP4 propagation (almost inertial)
|
|
84
92
|
- **CIRF** - Celestial Intermediate Reference Frame (IAU-2006 intermediate)
|
|
85
93
|
- **TIRF** - Terrestrial Intermediate Reference Frame (Earth-rotation intermediate)
|
|
86
94
|
- **Geodetic** - Latitude, longitude, altitude with WGS-84 ellipsoid
|
|
87
|
-
|
|
95
|
+
|
|
88
96
|
### Orbit Propagation
|
|
89
97
|
Multiple propagation methods optimized for different accuracy and performance requirements:
|
|
90
98
|
- **Numerical Integration**: High-precision propagation using adaptive Runge-Kutta 9(8) methods with dense output
|
|
@@ -95,46 +103,48 @@ Multiple propagation methods optimized for different accuracy and performance re
|
|
|
95
103
|
- Full AFSPC and improved mode support
|
|
96
104
|
- TLE fitting from high-precision states with drag estimation
|
|
97
105
|
- Batch processing for multiple satellites
|
|
106
|
+
- Support TLE and Orbital Mean-Element Messages inputs
|
|
98
107
|
- **Keplerian**: Fast analytical two-body propagation for preliminary analysis
|
|
99
|
-
|
|
100
|
-
### Force Models
|
|
108
|
+
|
|
109
|
+
### Numerical Integration Force Models
|
|
101
110
|
Comprehensive perturbation modeling for high-fidelity orbit propagation:
|
|
102
111
|
- **Earth Gravity**: Spherical harmonic models up to degree/order 360
|
|
103
112
|
- Multiple models: JGM2, JGM3, EGM96, ITU GRACE16
|
|
104
113
|
- Efficient computation with configurable truncation order
|
|
105
114
|
- Gravity gradient support for state transition matrix
|
|
106
115
|
- **Third-Body Gravity**: Solar and lunar perturbations using JPL ephemerides
|
|
107
|
-
- **Atmospheric Drag**:
|
|
116
|
+
- **Atmospheric Drag**:
|
|
117
|
+
- NRLMSISE-00 density model with space weather integration
|
|
108
118
|
- Automatic space weather data updates (F10.7, Ap index)
|
|
109
119
|
- Configurable ballistic coefficients
|
|
110
120
|
- **Solar Radiation Pressure**: Cannon-ball model with shadow function
|
|
111
|
-
|
|
112
|
-
### Ephemerides
|
|
121
|
+
|
|
122
|
+
### Solar System Ephemerides
|
|
113
123
|
Access to high-precision solar system body positions:
|
|
114
124
|
- **JPL DE440/DE441**: State-of-the-art planetary ephemerides
|
|
115
125
|
- Chebyshev polynomial interpolation for accuracy
|
|
116
126
|
- Support for all major planets, sun, moon, and solar system barycenter
|
|
117
127
|
- **Low-Precision Models**: Fast analytical models for sun and moon when high precision isn't required
|
|
118
|
-
|
|
128
|
+
|
|
119
129
|
### Time Systems
|
|
120
130
|
Comprehensive support for all standard astronomical time scales:
|
|
121
131
|
- **UTC** - Coordinated Universal Time with leap second handling
|
|
122
132
|
- **TAI** - International Atomic Time
|
|
123
|
-
- **TT**
|
|
133
|
+
- **TT** - Terrestrial Time
|
|
124
134
|
- **TDB** - Barycentric Dynamical Time
|
|
125
135
|
- **UT1** - Universal Time with Earth orientation corrections
|
|
126
136
|
- **GPS** - GPS Time
|
|
127
137
|
- Automatic conversion between all time scales with microsecond precision
|
|
128
|
-
|
|
138
|
+
|
|
129
139
|
### Geodetic Utilities
|
|
130
|
-
- **Geodesic Calculations
|
|
131
|
-
- **Coordinate Conversions
|
|
132
|
-
- **Elevation/Azimuth
|
|
140
|
+
- **Geodesic Calculations** - Accurate distance and azimuth between ground locations using Vincenty's formulae
|
|
141
|
+
- **Coordinate Conversions** - ITRF ↔ Geodetic ↔ East-North-Up ↔ North-East-Down
|
|
142
|
+
- **Elevation/Azimuth** - Topocentric coordinate transformations for ground station analysis
|
|
133
143
|
|
|
134
144
|
### Sun / Moon Calculations
|
|
135
|
-
- **Sun rise / set
|
|
136
|
-
- **Moon Phase
|
|
137
|
-
- **Ephemeris
|
|
145
|
+
- **Sun rise / set** - Compute sun rise / set times as function of day & location
|
|
146
|
+
- **Moon Phase** - Phase of moon and fraction illuminated
|
|
147
|
+
- **Ephemeris** - Fast low-precision ephemeris for sun & moon
|
|
138
148
|
|
|
139
149
|
## Technical Details
|
|
140
150
|
|
|
@@ -178,12 +188,12 @@ The library requires external data files for various calculations. These are aut
|
|
|
178
188
|
- DE440/DE441 planetary ephemerides (~100 MB)
|
|
179
189
|
- Provides positions of sun, moon, planets, and solar system barycenter
|
|
180
190
|
- Valid for years 1550-2650 CE
|
|
181
|
-
|
|
191
|
+
|
|
182
192
|
- **Gravity Models** ([ICGEM](http://icgem.gfz-potsdam.de/home))
|
|
183
193
|
- JGM2, JGM3, EGM96, ITU GRACE16 spherical harmonic coefficients
|
|
184
194
|
- International Centre for Global Earth Models standardized format
|
|
185
195
|
- Up to degree/order 360 for high-fidelity propagation
|
|
186
|
-
|
|
196
|
+
|
|
187
197
|
- **IERS Nutation Tables** ([IERS Conventions](https://www.iers.org/IERS/EN/Publications/TechnicalNotes/tn36.html))
|
|
188
198
|
- IAU-2006 nutation series coefficients
|
|
189
199
|
- Required for GCRF ↔ ITRF transformations
|
|
@@ -196,7 +206,7 @@ The library requires external data files for various calculations. These are aut
|
|
|
196
206
|
- Ap geomagnetic index
|
|
197
207
|
- Critical for atmospheric density modeling and drag calculations
|
|
198
208
|
- Updated daily by NOAA Space Weather Prediction Center
|
|
199
|
-
|
|
209
|
+
|
|
200
210
|
- **Earth Orientation Parameters** ([Celestrak](https://celestrak.org/SpaceData/))
|
|
201
211
|
- Polar motion (x, y)
|
|
202
212
|
- UT1-UTC time difference
|
|
@@ -218,15 +228,15 @@ The library includes comprehensive test suites ensuring correctness of calculati
|
|
|
218
228
|
- **JPL Ephemerides**: Validated against JPL-provided test vectors for Chebyshev polynomial interpolation
|
|
219
229
|
- Over 10,000 test cases covering all planets and time ranges
|
|
220
230
|
- Accuracy verified to within JPL's published tolerances (sub-meter precision)
|
|
221
|
-
|
|
231
|
+
|
|
222
232
|
- **SGP4**: Verified using official test vectors from the original C++ distribution
|
|
223
233
|
- All test cases from Vallado's SGP4 implementation
|
|
224
234
|
- Includes edge cases and error conditions
|
|
225
|
-
|
|
235
|
+
|
|
226
236
|
- **Coordinate Transformations**: Cross-validated against multiple reference implementations
|
|
227
237
|
- SOFA library comparisons for IAU-2006 transformations
|
|
228
238
|
- Vallado test cases for GCRF ↔ ITRF conversions
|
|
229
|
-
|
|
239
|
+
|
|
230
240
|
- **Numerical Propagation**: Validated against high-precision commercial tools
|
|
231
241
|
- Orbit fits to GPS SP3 ephemerides
|
|
232
242
|
- Multi-day propagations with sub-meter accuracy
|
|
@@ -266,7 +276,7 @@ pip install satkit
|
|
|
266
276
|
|
|
267
277
|
Pre-built binary wheels are available for:
|
|
268
278
|
- **Windows**: AMD64
|
|
269
|
-
- **macOS**: Intel (x86_64) and Apple Silicon (ARM64)
|
|
279
|
+
- **macOS**: Intel (x86_64) and Apple Silicon (ARM64)
|
|
270
280
|
- **Linux**: x86_64 and ARM64 (aarch64)
|
|
271
281
|
- **Python versions**: 3.8, 3.9, 3.10, 3.11, 3.12, 3.13, 3.14
|
|
272
282
|
|
|
@@ -336,9 +346,9 @@ settings.gravity_order = 8
|
|
|
336
346
|
|
|
337
347
|
# Propagate for 1 day
|
|
338
348
|
result = sk.propagate(
|
|
339
|
-
state0,
|
|
340
|
-
time0,
|
|
341
|
-
|
|
349
|
+
state0,
|
|
350
|
+
time0,
|
|
351
|
+
end=time0 + sk.duration.from_days(1),
|
|
342
352
|
propsettings=settings
|
|
343
353
|
)
|
|
344
354
|
|
|
@@ -375,13 +385,13 @@ use satkit::{Instant, SolarSystem, jplephem};
|
|
|
375
385
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
376
386
|
// Create time instant
|
|
377
387
|
let time = Instant::from_datetime(2024, 1, 1, 0, 0, 0.0)?;
|
|
378
|
-
|
|
388
|
+
|
|
379
389
|
// Get Moon position and velocity in GCRF
|
|
380
390
|
let (pos, vel) = jplephem::geocentric_state(SolarSystem::Moon, &time)?;
|
|
381
|
-
|
|
391
|
+
|
|
382
392
|
println!("Moon position: {:?}", pos);
|
|
383
393
|
println!("Moon velocity: {:?}", vel);
|
|
384
|
-
|
|
394
|
+
|
|
385
395
|
Ok(())
|
|
386
396
|
}
|
|
387
397
|
```
|
|
@@ -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=buZKfNGuzXBT3FupuFl07CI3K1xUguzS061W7pb0kvo,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.cp313-win_amd64.pyd,sha256=
|
|
11
|
-
satkit/satkit.pyi,sha256=
|
|
10
|
+
satkit/satkit.cp313-win_amd64.pyd,sha256=dODlIIpdwbq-h1nGqV6xFMXyR8wfjL8Y9EcmwO3JQ7A,4584960
|
|
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.1.dist-info/licenses/LICENSE,sha256=_G_hwbOSJZqdIWNjgzjFB91eZKvherjtmFfvVvy9wCA,1092
|
|
15
|
+
satkit-0.9.1.dist-info/METADATA,sha256=fCgzirqWXDHNRYkBflZrKnPyx6iEpah-ByTbVCTE4DI,17769
|
|
16
|
+
satkit-0.9.1.dist-info/WHEEL,sha256=T5i2ODeLs0s2las6bzoWK6w-WYjxkhtXh7SRJsBsjo4,102
|
|
17
|
+
satkit-0.9.1.dist-info/top_level.txt,sha256=1gsJ2XQ64FuUfw4z-i3CDi4Y4z9qcKNcm8Fy6-8xSVE,7
|
|
18
|
+
satkit-0.9.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|