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 CHANGED
@@ -14,5 +14,5 @@ __version__: str
14
14
  __version_tuple__: VERSION_TUPLE
15
15
  version_tuple: VERSION_TUPLE
16
16
 
17
- __version__ = version = "0.8.4"
18
- __version_tuple__ = version_tuple = (0, 8, 4)
17
+ __version__ = version = "0.9.0"
18
+ __version_tuple__ = version_tuple = (0, 9, 0)
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 datetime(self, utc: bool = True) -> datetime.datetime:
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 start and stop times of the propagation via the "interp" method
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 state_start(self) -> npt.NDArray[np.float64]:
2217
- """6-element state (pos + vel) of satellite in meters & meters/second at start of propagation
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 start of propagation
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 time_start(self) -> time:
2243
- """Time at which state_start is valid
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 state_start is valid
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
- * enable_interp enables high-preciion interpolation of state between start and stop times via the returned function,
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 start and stop times. Default is True
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 start and stop times
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, start: time, stop: time, step: Optional[duration] = None
2522
+ self, begin: time, end: time, step: Optional[duration] = None
2419
2523
  ):
2420
- """Precompute terms for fast interpolation of state between start and stop times
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
- start (satkit.time): Start time of propagation
2426
- stop (satkit.time): Stop time of propagation
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
- start: time,
2434
- stop: time,
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
- start (satkit.time, optional): satkit.time object representing instant at which satellite is at "pos" & "vel"
2444
- stop (satkit.time, optional keyword): satkit.time object representing instant at which new position and velocity will be computed
2445
- duration (satkit.duration, optional keyword): duration from "start" at which new position & velocity will be computed.
2446
- duration_secs (float, optional keyword): duration in seconds from "start" for at which new position and velocity will be computed.
2447
- duration_days (float, optional keyword): duration in days from "start" at which new position and velocity will be computed.
2448
- output_phi (bool, optional keyword): Output 6x6 state transition matrix between "starttime" and "stoptime" (and at intervals, if specified)
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
- * Stop time must be set by keyword argument, either explicitely or by duration
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.8.4
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
  ![Build Passing?](https://github.com/ssmichael1/satkit/actions/workflows/build.yml/badge.svg)
54
57
  ![Wheel Passing?](https://github.com/ssmichael1/satkit/actions/workflows/wheels.yml/badge.svg)
@@ -62,7 +65,7 @@ Satkit provides robust, high-performance satellite orbital mechanics calculation
62
65
  ![PyPI - Status](https://img.shields.io/pypi/status/satkit)
63
66
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/satkit)
64
67
  ![Read the Docs](https://img.shields.io/readthedocs/satellite-toolkit)
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**: NRLMSISE-00 density model with space weather integration
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
- stop=time0 + sk.duration.from_days(1),
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=pko_A_eLBgtgca2NAVwL1CtJv5C9sEnYRNT2KIjdjSY,446
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=KcGl91M_aiTqh2nQpdI2yDbO7DJ8Vs_dXLYTTHEmLdM,4691456
11
- satkit/satkit.pyi,sha256=76po_AyRsCU5MpmhS32-KhWFFjaTfSFV3iYCDL0398E,84827
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.8.4.dist-info/licenses/LICENSE,sha256=_G_hwbOSJZqdIWNjgzjFB91eZKvherjtmFfvVvy9wCA,1092
15
- satkit-0.8.4.dist-info/METADATA,sha256=CQ1ZlNUwua4FLFFjwK5DLnAe3yWm_8p-sh5ZfS7s1-4,17409
16
- satkit-0.8.4.dist-info/WHEEL,sha256=7k6Wcy588iJYe5lf5K095NLg-uoBTnE-T8eHJ92G4_4,101
17
- satkit-0.8.4.dist-info/top_level.txt,sha256=1gsJ2XQ64FuUfw4z-i3CDi4Y4z9qcKNcm8Fy6-8xSVE,7
18
- satkit-0.8.4.dist-info/RECORD,,
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