keplemon 0.2.0__cp310-cp310-win_amd64.whl → 0.3.0__cp310-cp310-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.
Potentially problematic release.
This version of keplemon might be problematic. Click here for more details.
- keplemon/__init__.py +9 -11
- keplemon/__init__.pyi +7 -3
- keplemon/_keplemon.cp310-win_amd64.pyd +0 -0
- keplemon/bodies.pyi +50 -2
- keplemon/elements.py +4 -0
- keplemon/elements.pyi +57 -1
- keplemon/events.pyi +45 -1
- keplemon/exceptions.py +5 -0
- keplemon/saal/__init__.pyi +5 -0
- keplemon/saal/astro_func_interface.py +33 -0
- keplemon/saal/astro_func_interface.pyi +100 -0
- keplemon/saal/obs_interface.pyi +7 -0
- keplemon/saal/time_func_interface.py +17 -0
- keplemon/saal/time_func_interface.pyi +70 -0
- keplemon/time.py +2 -8
- keplemon/time.pyi +1 -1
- {keplemon-0.2.0.dist-info → keplemon-0.3.0.dist-info}/METADATA +1 -1
- {keplemon-0.2.0.dist-info → keplemon-0.3.0.dist-info}/RECORD +21 -14
- {keplemon-0.2.0.dist-info → keplemon-0.3.0.dist-info}/WHEEL +1 -1
- /keplemon/{SGP4_Open_License.txt → assets/SGP4_Open_License.txt} +0 -0
- {keplemon-0.2.0.dist-info → keplemon-0.3.0.dist-info}/entry_points.txt +0 -0
keplemon/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from keplemon._keplemon.
|
|
1
|
+
from keplemon._keplemon.saal.time_func_interface import load_time_constants # type: ignore
|
|
2
2
|
from keplemon._keplemon import ( # type: ignore
|
|
3
3
|
get_thread_count,
|
|
4
4
|
set_thread_count,
|
|
@@ -6,19 +6,16 @@ from keplemon._keplemon import ( # type: ignore
|
|
|
6
6
|
get_license_file_path,
|
|
7
7
|
)
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from shutil import copyfile
|
|
10
9
|
|
|
11
|
-
current_dir = Path(__file__).parent
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
set_license_file_path(LICENSE_PATH.as_posix())
|
|
11
|
+
PACKAGE_DIRECTORY = Path(__file__).parent
|
|
12
|
+
ASSETS_DIRECTORY = PACKAGE_DIRECTORY / "assets"
|
|
13
|
+
|
|
14
|
+
# Set the license file directory to the package directory
|
|
15
|
+
set_license_file_path(ASSETS_DIRECTORY.as_posix())
|
|
19
16
|
|
|
20
17
|
# Load the time constants from the assets directory
|
|
21
|
-
TIME_CONSTANTS_PATH =
|
|
18
|
+
TIME_CONSTANTS_PATH = ASSETS_DIRECTORY / "time_constants.dat"
|
|
22
19
|
load_time_constants(TIME_CONSTANTS_PATH.as_posix())
|
|
23
20
|
|
|
24
21
|
__all__ = [
|
|
@@ -26,6 +23,7 @@ __all__ = [
|
|
|
26
23
|
"set_thread_count",
|
|
27
24
|
"TIME_CONSTANTS_PATH",
|
|
28
25
|
"set_license_file_path",
|
|
29
|
-
"
|
|
26
|
+
"PACKAGE_DIRECTORY",
|
|
27
|
+
"ASSETS_DIRECTORY",
|
|
30
28
|
"get_license_file_path",
|
|
31
29
|
]
|
keplemon/__init__.pyi
CHANGED
|
@@ -29,9 +29,13 @@ Path to the default time constants file required by the SAAL binaries
|
|
|
29
29
|
This path should never be modified and is only exposed to allow inspection of current data.
|
|
30
30
|
"""
|
|
31
31
|
|
|
32
|
-
#: Path to the
|
|
33
|
-
|
|
34
|
-
"""Path to the
|
|
32
|
+
#: Path to the parent directory of the package
|
|
33
|
+
PACKAGE_DIRECTORY: Path
|
|
34
|
+
"""Path to the parent directory of the package"""
|
|
35
|
+
|
|
36
|
+
#: Path to the assets directory containing supporting data files for the package
|
|
37
|
+
ASSETS_DIRECTORY: Path
|
|
38
|
+
"""Path to the assets directory containing supporting data files for the package"""
|
|
35
39
|
|
|
36
40
|
def set_license_file_path(path: str) -> None:
|
|
37
41
|
"""
|
|
Binary file
|
keplemon/bodies.pyi
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# flake8: noqa
|
|
2
|
-
from keplemon.elements import TLE, CartesianState, Ephemeris
|
|
2
|
+
from keplemon.elements import TLE, CartesianState, Ephemeris, KeplerianState
|
|
3
3
|
from keplemon.catalogs import TLECatalog
|
|
4
4
|
from keplemon.time import Epoch, TimeSpan
|
|
5
|
-
from keplemon.events import CloseApproach, CloseApproachReport
|
|
5
|
+
from keplemon.events import CloseApproach, CloseApproachReport, HorizonAccessReport
|
|
6
6
|
|
|
7
7
|
class Earth:
|
|
8
8
|
@staticmethod
|
|
@@ -27,6 +27,9 @@ class Satellite:
|
|
|
27
27
|
name: str | None
|
|
28
28
|
"""Human-readable name of the satellite"""
|
|
29
29
|
|
|
30
|
+
keplerian_state: KeplerianState | None
|
|
31
|
+
"""Keplerian state of the satellite at the epoch of the TLE, if available"""
|
|
32
|
+
|
|
30
33
|
@classmethod
|
|
31
34
|
def from_tle(cls, tle: TLE) -> Satellite:
|
|
32
35
|
"""
|
|
@@ -153,6 +156,28 @@ class Constellation:
|
|
|
153
156
|
...
|
|
154
157
|
|
|
155
158
|
def __getitem__(self, satellite_id: int) -> Satellite: ...
|
|
159
|
+
def get_horizon_access_report(
|
|
160
|
+
self,
|
|
161
|
+
site: Observatory,
|
|
162
|
+
start: Epoch,
|
|
163
|
+
end: Epoch,
|
|
164
|
+
min_el: float,
|
|
165
|
+
min_duration: TimeSpan,
|
|
166
|
+
) -> HorizonAccessReport:
|
|
167
|
+
"""
|
|
168
|
+
Calculate horizon access to a given observatory.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
site: Observatory to check for horizon access
|
|
172
|
+
start: UTC epoch of the start of the report
|
|
173
|
+
end: UTC epoch of the end of the report
|
|
174
|
+
min_el: Minimum elevation angle in **_degrees_**
|
|
175
|
+
min_duration: Minimum duration of access
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Horizon access report for the constellation from the observatory
|
|
179
|
+
"""
|
|
180
|
+
...
|
|
156
181
|
|
|
157
182
|
class Sensor:
|
|
158
183
|
"""
|
|
@@ -204,3 +229,26 @@ class Observatory:
|
|
|
204
229
|
TEME Cartesian state of the observatory in **_kilometers_** and **_kilometers per second_**
|
|
205
230
|
"""
|
|
206
231
|
...
|
|
232
|
+
|
|
233
|
+
def get_horizon_access_report(
|
|
234
|
+
self,
|
|
235
|
+
satellite: Satellite,
|
|
236
|
+
start: Epoch,
|
|
237
|
+
end: Epoch,
|
|
238
|
+
min_el: float,
|
|
239
|
+
min_duration: TimeSpan,
|
|
240
|
+
) -> HorizonAccessReport:
|
|
241
|
+
"""
|
|
242
|
+
Calculate horizon access for a satellite from the observatory.
|
|
243
|
+
|
|
244
|
+
Args:
|
|
245
|
+
satellite: Satellite to check for horizon access
|
|
246
|
+
start: UTC epoch of the start of the report
|
|
247
|
+
end: UTC epoch of the end of the report
|
|
248
|
+
min_el: Minimum elevation angle in **_degrees_**
|
|
249
|
+
min_duration: Minimum duration of access in **_seconds_**
|
|
250
|
+
|
|
251
|
+
Returns:
|
|
252
|
+
Horizon access report for the satellite from the observatory
|
|
253
|
+
"""
|
|
254
|
+
...
|
keplemon/elements.py
CHANGED
|
@@ -7,6 +7,8 @@ from keplemon._keplemon.elements import ( # type: ignore
|
|
|
7
7
|
Ephemeris,
|
|
8
8
|
SphericalVector,
|
|
9
9
|
TopocentricElements,
|
|
10
|
+
HorizonState,
|
|
11
|
+
HorizonElements,
|
|
10
12
|
)
|
|
11
13
|
|
|
12
14
|
__all__ = [
|
|
@@ -18,4 +20,6 @@ __all__ = [
|
|
|
18
20
|
"Ephemeris",
|
|
19
21
|
"SphericalVector",
|
|
20
22
|
"TopocentricElements",
|
|
23
|
+
"HorizonState",
|
|
24
|
+
"HorizonElements",
|
|
21
25
|
]
|
keplemon/elements.pyi
CHANGED
|
@@ -2,9 +2,65 @@
|
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
from keplemon.time import Epoch
|
|
4
4
|
from keplemon.enums import Classification, KeplerianType, ReferenceFrame
|
|
5
|
-
from keplemon.propagation import ForceProperties
|
|
6
5
|
from keplemon.events import CloseApproach
|
|
7
6
|
|
|
7
|
+
class HorizonElements:
|
|
8
|
+
"""
|
|
9
|
+
Args:
|
|
10
|
+
range: Range in **_kilometers_**
|
|
11
|
+
az: Azimuth in **_degrees_**
|
|
12
|
+
el: Elevation in **_degrees_**
|
|
13
|
+
range_rate: Range rate in **_kilometers per second_**
|
|
14
|
+
az_rate: Azimuth rate in **_degrees per second_**
|
|
15
|
+
el_rate: Elevation rate in **_degrees per second_**
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
range: float | None
|
|
19
|
+
azimuth: float
|
|
20
|
+
elevation: float
|
|
21
|
+
range_rate: float | None
|
|
22
|
+
azimuth_rate: float | None
|
|
23
|
+
elevation_rate: float | None
|
|
24
|
+
|
|
25
|
+
def __init__(
|
|
26
|
+
self,
|
|
27
|
+
azimuth: float,
|
|
28
|
+
elevation: float,
|
|
29
|
+
) -> None: ...
|
|
30
|
+
|
|
31
|
+
class HorizonState:
|
|
32
|
+
"""
|
|
33
|
+
Args:
|
|
34
|
+
epoch: UTC epoch of the state
|
|
35
|
+
elements: HorizonElements of the state
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
epoch: Epoch
|
|
39
|
+
"""UTC epoch of the state"""
|
|
40
|
+
|
|
41
|
+
elements: HorizonElements
|
|
42
|
+
"""Horizon elements of the state"""
|
|
43
|
+
|
|
44
|
+
range: float | None
|
|
45
|
+
"""Range in **_kilometers_**"""
|
|
46
|
+
|
|
47
|
+
azimuth: float
|
|
48
|
+
"""Azimuth in **_degrees_**"""
|
|
49
|
+
|
|
50
|
+
elevation: float
|
|
51
|
+
"""Elevation in **_degrees_**"""
|
|
52
|
+
|
|
53
|
+
range_rate: float | None
|
|
54
|
+
"""Range rate in **_kilometers per second_**"""
|
|
55
|
+
|
|
56
|
+
azimuth_rate: float | None
|
|
57
|
+
"""Azimuth rate in **_degrees per second_**"""
|
|
58
|
+
|
|
59
|
+
elevation_rate: float | None
|
|
60
|
+
"""Elevation rate in **_degrees per second_**"""
|
|
61
|
+
|
|
62
|
+
def __init__(self, epoch: Epoch, elements: HorizonElements) -> None: ...
|
|
63
|
+
|
|
8
64
|
class KeplerianElements:
|
|
9
65
|
"""
|
|
10
66
|
Args:
|
keplemon/events.pyi
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# flake8: noqa
|
|
2
|
-
from keplemon.time import Epoch
|
|
2
|
+
from keplemon.time import Epoch, TimeSpan
|
|
3
|
+
from keplemon.elements import HorizonState
|
|
3
4
|
|
|
4
5
|
class CloseApproach:
|
|
5
6
|
epoch: Epoch
|
|
@@ -27,3 +28,46 @@ class CloseApproachReport:
|
|
|
27
28
|
|
|
28
29
|
distance_threshold: float
|
|
29
30
|
def __init__(self, start: Epoch, end: Epoch, distance_threshold: float) -> None: ...
|
|
31
|
+
|
|
32
|
+
class HorizonAccess:
|
|
33
|
+
|
|
34
|
+
satellite_id: int
|
|
35
|
+
"""ID of the satellite for which the access is calculated"""
|
|
36
|
+
|
|
37
|
+
start: HorizonState
|
|
38
|
+
"""State of the satellite at the start of the access period"""
|
|
39
|
+
|
|
40
|
+
end: HorizonState
|
|
41
|
+
"""State of the satellite at the end of the access period"""
|
|
42
|
+
|
|
43
|
+
class HorizonAccessReport:
|
|
44
|
+
"""
|
|
45
|
+
Args:
|
|
46
|
+
start: UTC epoch of the start of the access report
|
|
47
|
+
end: UTC epoch of the end of the access report
|
|
48
|
+
min_elevation: Minimum elevation angle for access in **_degrees_**
|
|
49
|
+
min_duration: Minimum duration of access
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
accesses: list[HorizonAccess]
|
|
53
|
+
"""List of horizon accesses found during the screening"""
|
|
54
|
+
|
|
55
|
+
elevation_threshold: float
|
|
56
|
+
"""Minimum elevation angle for access in **_degrees_**"""
|
|
57
|
+
|
|
58
|
+
start: Epoch
|
|
59
|
+
"""UTC epoch of the start of the access report"""
|
|
60
|
+
|
|
61
|
+
end: Epoch
|
|
62
|
+
"""UTC epoch of the end of the access report"""
|
|
63
|
+
|
|
64
|
+
duration_threshold: TimeSpan
|
|
65
|
+
"""Minimum duration of a valid access"""
|
|
66
|
+
|
|
67
|
+
def __init__(
|
|
68
|
+
self,
|
|
69
|
+
start: Epoch,
|
|
70
|
+
end: Epoch,
|
|
71
|
+
min_elevation: float,
|
|
72
|
+
min_duration: TimeSpan,
|
|
73
|
+
) -> None: ...
|
keplemon/exceptions.py
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from keplemon._keplemon.saal.astro_func_interface import ( # type: ignore
|
|
2
|
+
teme_to_topo,
|
|
3
|
+
ra_dec_to_az_el_time,
|
|
4
|
+
ra_dec_to_az_el,
|
|
5
|
+
XA_TOPO_RA,
|
|
6
|
+
XA_TOPO_DEC,
|
|
7
|
+
XA_TOPO_AZ,
|
|
8
|
+
XA_TOPO_EL,
|
|
9
|
+
XA_TOPO_RANGE,
|
|
10
|
+
XA_TOPO_RADOT,
|
|
11
|
+
XA_TOPO_DECDOT,
|
|
12
|
+
XA_TOPO_AZDOT,
|
|
13
|
+
XA_TOPO_ELDOT,
|
|
14
|
+
XA_TOPO_RANGEDOT,
|
|
15
|
+
XA_TOPO_SIZE,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"teme_to_topo",
|
|
20
|
+
"ra_dec_to_az_el_time",
|
|
21
|
+
"ra_dec_to_az_el",
|
|
22
|
+
"XA_TOPO_RA",
|
|
23
|
+
"XA_TOPO_DEC",
|
|
24
|
+
"XA_TOPO_AZ",
|
|
25
|
+
"XA_TOPO_EL",
|
|
26
|
+
"XA_TOPO_RANGE",
|
|
27
|
+
"XA_TOPO_RADOT",
|
|
28
|
+
"XA_TOPO_DECDOT",
|
|
29
|
+
"XA_TOPO_AZDOT",
|
|
30
|
+
"XA_TOPO_ELDOT",
|
|
31
|
+
"XA_TOPO_RANGEDOT",
|
|
32
|
+
"XA_TOPO_SIZE",
|
|
33
|
+
]
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# flake8: noqa: F401
|
|
2
|
+
|
|
3
|
+
def ra_dec_to_az_el(
|
|
4
|
+
theta: float,
|
|
5
|
+
lat: float,
|
|
6
|
+
long: float,
|
|
7
|
+
ra: float,
|
|
8
|
+
dec: float,
|
|
9
|
+
) -> tuple[float, float]:
|
|
10
|
+
"""
|
|
11
|
+
Convert right ascension and declination to azimuth and elevation.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
theta: Greenwich angle in radians.
|
|
15
|
+
lat: Sensor latitude in degrees.
|
|
16
|
+
long: Sensor longitude in degrees.
|
|
17
|
+
ra: TEME right ascension in degrees.
|
|
18
|
+
dec: TEME declination in degrees.
|
|
19
|
+
|
|
20
|
+
Returns:
|
|
21
|
+
A tuple containing azimuth and elevation in degrees.
|
|
22
|
+
"""
|
|
23
|
+
...
|
|
24
|
+
|
|
25
|
+
def ra_dec_to_az_el_time(
|
|
26
|
+
ds50_utc: float,
|
|
27
|
+
lat: float,
|
|
28
|
+
long: float,
|
|
29
|
+
ra: float,
|
|
30
|
+
dec: float,
|
|
31
|
+
) -> tuple[float, float]:
|
|
32
|
+
"""
|
|
33
|
+
Convert right ascension and declination to azimuth and elevation.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
ds50_utc: Epoch in DS50 UTC format.
|
|
37
|
+
lat: Sensor latitude in degrees.
|
|
38
|
+
long: Sensor longitude in degrees.
|
|
39
|
+
ra: Right ascension in degrees.
|
|
40
|
+
dec: Declination in degrees.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
A tuple containing azimuth and elevation in degrees.
|
|
44
|
+
"""
|
|
45
|
+
...
|
|
46
|
+
|
|
47
|
+
def teme_to_topo(
|
|
48
|
+
theta: float,
|
|
49
|
+
lat: float,
|
|
50
|
+
sen_pos: list[float],
|
|
51
|
+
sat_pos: list[float],
|
|
52
|
+
sat_vel: list[float],
|
|
53
|
+
) -> list[float]:
|
|
54
|
+
"""
|
|
55
|
+
Convert TEME coordinates to topocentric coordinates.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
theta: Greenwich angle plus the sensor longitude in radians.
|
|
59
|
+
lat: Latitude in degrees.
|
|
60
|
+
sen_pos: Sensor TEME position in kilometers.
|
|
61
|
+
sat_pos: Satellite TEME position in kilometers.
|
|
62
|
+
sat_vel: Satellite TEME velocity in kilometers/second.
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
Topocentric coordinates as a list of floats.
|
|
66
|
+
"""
|
|
67
|
+
...
|
|
68
|
+
|
|
69
|
+
XA_TOPO_AZ: int
|
|
70
|
+
"""Index for topocentric azimuth in degrees."""
|
|
71
|
+
|
|
72
|
+
XA_TOPO_EL: int
|
|
73
|
+
"""Index for topocentric elevation in degrees."""
|
|
74
|
+
|
|
75
|
+
XA_TOPO_RANGE: int
|
|
76
|
+
"""Index for topocentric range in kilometers."""
|
|
77
|
+
|
|
78
|
+
XA_TOPO_RADOT: int
|
|
79
|
+
"""Index for topocentric right ascension dot in degrees/second."""
|
|
80
|
+
|
|
81
|
+
XA_TOPO_DECDOT: int
|
|
82
|
+
"""Index for topocentric declination dot in degrees/second."""
|
|
83
|
+
|
|
84
|
+
XA_TOPO_AZDOT: int
|
|
85
|
+
"""Index for topocentric azimuth dot in degrees/second."""
|
|
86
|
+
|
|
87
|
+
XA_TOPO_ELDOT: int
|
|
88
|
+
"""Index for topocentric elevation dot in degrees/second."""
|
|
89
|
+
|
|
90
|
+
XA_TOPO_RANGEDOT: int
|
|
91
|
+
"""Index for topocentric range dot in kilometers/second."""
|
|
92
|
+
|
|
93
|
+
XA_TOPO_RA: int
|
|
94
|
+
"""Index for topocentric right ascension in degrees."""
|
|
95
|
+
|
|
96
|
+
XA_TOPO_DEC: int
|
|
97
|
+
"""Index for topocentric declination in degrees."""
|
|
98
|
+
|
|
99
|
+
XA_TOPO_SIZE: int
|
|
100
|
+
"""Size of XA_TOPO_ array"""
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from keplemon._keplemon.saal.time_func_interface import ( # type: ignore
|
|
2
|
+
time_constants_loaded,
|
|
3
|
+
load_time_constants,
|
|
4
|
+
ds50_utc_to_ut1,
|
|
5
|
+
get_fk4_greenwich_angle,
|
|
6
|
+
get_fk5_greenwich_angle,
|
|
7
|
+
ymd_components_to_ds50,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"time_constants_loaded",
|
|
12
|
+
"load_time_constants",
|
|
13
|
+
"ds50_utc_to_ut1",
|
|
14
|
+
"get_fk4_greenwich_angle",
|
|
15
|
+
"get_fk5_greenwich_angle",
|
|
16
|
+
"ymd_components_to_ds50",
|
|
17
|
+
]
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# flake8: noqa: F401
|
|
2
|
+
|
|
3
|
+
def ymd_components_to_ds50(year: int, month: int, day: int, hour: int, minute: int, second: float) -> float:
|
|
4
|
+
"""
|
|
5
|
+
Convert year, month, day, hour, minute, and second components to a DS50 time.
|
|
6
|
+
|
|
7
|
+
Args:
|
|
8
|
+
year: Year component.
|
|
9
|
+
month: Month component (1-12).
|
|
10
|
+
day: Day component (1-31).
|
|
11
|
+
hour: Hour component (0-23).
|
|
12
|
+
minute: Minute component (0-59).
|
|
13
|
+
second: Second component (0.0-59.999...).
|
|
14
|
+
|
|
15
|
+
Returns:
|
|
16
|
+
DS50 time as a float.
|
|
17
|
+
"""
|
|
18
|
+
...
|
|
19
|
+
|
|
20
|
+
def time_constants_loaded() -> bool:
|
|
21
|
+
"""
|
|
22
|
+
Returns:
|
|
23
|
+
True if time constants have been loaded to the SAAL binaries, False otherwise.
|
|
24
|
+
"""
|
|
25
|
+
...
|
|
26
|
+
|
|
27
|
+
def load_time_constants(file_path: str) -> None:
|
|
28
|
+
"""
|
|
29
|
+
Load time constants into from a file for use by the SAAL binaries.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
Path to the SAAL-formatted time constants file.
|
|
33
|
+
"""
|
|
34
|
+
...
|
|
35
|
+
|
|
36
|
+
def ds50_utc_to_ut1(ds50: float) -> float:
|
|
37
|
+
"""
|
|
38
|
+
Convert a DS50 UTC time to UT1.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
DS50 UTC time
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
UT1 time
|
|
45
|
+
"""
|
|
46
|
+
...
|
|
47
|
+
|
|
48
|
+
def get_fk4_greenwich_angle(ds50_ut1: float) -> float:
|
|
49
|
+
"""
|
|
50
|
+
Get the FK4 Greenwich angle.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
ds50_ut1: Epoch in DS50 UT1 format
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
FK4 Greenwich angle in radians.
|
|
57
|
+
"""
|
|
58
|
+
...
|
|
59
|
+
|
|
60
|
+
def get_fk5_greenwich_angle(ds50_ut1: float) -> float:
|
|
61
|
+
"""
|
|
62
|
+
Get the FK5 Greenwich angle.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
ds50_ut1: Epoch in DS50 UT1 format
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
FK5 Greenwich angle in radians.
|
|
69
|
+
"""
|
|
70
|
+
...
|
keplemon/time.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from keplemon._keplemon.time import ( # type: ignore
|
|
2
|
-
load_time_constants,
|
|
3
2
|
TimeSpan,
|
|
4
3
|
TimeComponents,
|
|
5
4
|
Epoch,
|
|
@@ -9,7 +8,6 @@ from datetime import datetime
|
|
|
9
8
|
from keplemon._keplemon.enums import TimeSystem # type: ignore
|
|
10
9
|
|
|
11
10
|
__all__ = [
|
|
12
|
-
"load_time_constants",
|
|
13
11
|
"TimeSpan",
|
|
14
12
|
"TimeComponents",
|
|
15
13
|
"Epoch",
|
|
@@ -18,13 +16,9 @@ __all__ = [
|
|
|
18
16
|
|
|
19
17
|
|
|
20
18
|
def request_time_constants_update(output_path: str) -> None:
|
|
21
|
-
finals = requests.get(
|
|
22
|
-
"https://maia.usno.navy.mil/ser7/finals.all"
|
|
23
|
-
).text.splitlines()
|
|
19
|
+
finals = requests.get("https://maia.usno.navy.mil/ser7/finals.all").text.splitlines()
|
|
24
20
|
|
|
25
|
-
leap_seconds = requests.get(
|
|
26
|
-
"https://maia.usno.navy.mil/ser7/tai-utc.dat"
|
|
27
|
-
).text.splitlines()
|
|
21
|
+
leap_seconds = requests.get("https://maia.usno.navy.mil/ser7/tai-utc.dat").text.splitlines()
|
|
28
22
|
|
|
29
23
|
month_map = {
|
|
30
24
|
"JAN": 1,
|
keplemon/time.pyi
CHANGED
|
@@ -164,7 +164,7 @@ class Epoch:
|
|
|
164
164
|
...
|
|
165
165
|
|
|
166
166
|
@classmethod
|
|
167
|
-
def
|
|
167
|
+
def from_time_components(cls, components: TimeComponents, time_system: TimeSystem) -> Epoch:
|
|
168
168
|
"""
|
|
169
169
|
Args:
|
|
170
170
|
components: Epoch represented as individual components
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
keplemon-0.
|
|
2
|
-
keplemon-0.
|
|
3
|
-
keplemon-0.
|
|
1
|
+
keplemon-0.3.0.dist-info/METADATA,sha256=9Qe_jRawFELtyzX8jMJgzu-6-p6ZFL-WhHsH_wHJfW4,3869
|
|
2
|
+
keplemon-0.3.0.dist-info/WHEEL,sha256=QKV4Sl7MSpV78xozy9-tp6UITYpirrRleZnt0vKJJXI,96
|
|
3
|
+
keplemon-0.3.0.dist-info/entry_points.txt,sha256=eYbCkvQvWfRDQ0LzaCELov1xeLAxQEHlfdgNq-LXyb0,49
|
|
4
4
|
keplemon/AstroFunc.dll,sha256=RwDLeYGuSd3MxQ3O_Ljb0maS5KoDL8HZLpAvcQhDmnQ,357376
|
|
5
5
|
keplemon/AstroFunc.lib,sha256=q0Ob5NGUgbywJg6XqH48QLNmFv8T5p8NVLSx2kKkL4A,56480
|
|
6
6
|
keplemon/DllMain.dll,sha256=vYgOfGAUHn2z1MrVu9wV-k_LRdtuF8RuWrbuu2xk7jk,121344
|
|
@@ -13,7 +13,6 @@ keplemon/ExtEphem.dll,sha256=w5MHBNwWNzN-g-ktRpMl4e30na4ImVkb53Pz0C_kqP0,189440
|
|
|
13
13
|
keplemon/ExtEphem.lib,sha256=eHAH2Z9fIjWGIQ5APwvMVjTOwam46FvXBratKtI3nQ8,23564
|
|
14
14
|
keplemon/Obs.dll,sha256=32n3P_s2kyCt_Tdx9R4L7Zf-J9zP4qCKP2bFopKr_4M,508416
|
|
15
15
|
keplemon/Obs.lib,sha256=HtMrLI6WpUOfyLj-1g1Xej07IPhoXV9laMftqu2BTOo,47006
|
|
16
|
-
keplemon/SGP4_Open_License.txt,sha256=ThQ87DpbbXt-9K0-0U13tcZqsndte_UkaG3S0nLsfNY,8695
|
|
17
16
|
keplemon/SatState.dll,sha256=IVtdIIwq1X_5NN-V-OpbPH4ypWJEG7ES29IxttQMLvU,180224
|
|
18
17
|
keplemon/SatState.lib,sha256=h8WbZgcjyfZ8RnMPw7XJLN55KmW8cSm_XffvmBImwAI,18270
|
|
19
18
|
keplemon/Sensor.dll,sha256=MRmMoJfQPZEH0iKk4_haF5AxOeFfx1PH_Vne_rKx4eE,882688
|
|
@@ -28,10 +27,10 @@ keplemon/Tle.dll,sha256=Yt6hY3-PoJFFgB2idJQFC_Ia49grYhpSe_gPAmVswMs,195584
|
|
|
28
27
|
keplemon/Tle.lib,sha256=6NCJPR7JQ63mxCISyvYteq4-oHcqs3Ib8bwhTjJfk-I,23622
|
|
29
28
|
keplemon/Vcm.dll,sha256=EWx2eZAdBa1F2yGSUYzgAItnP6-nJT35sfJsrBW1Vfs,274432
|
|
30
29
|
keplemon/Vcm.lib,sha256=q2FPbH_DJXjIzNIzli2f1uV2faHHBjLbffZrL3Nagpw,19404
|
|
31
|
-
keplemon/__init__.py,sha256
|
|
32
|
-
keplemon/__init__.pyi,sha256=
|
|
30
|
+
keplemon/__init__.py,sha256=JymfGXbJ9UJDdwRW0CXS7j5j_LPk1_P_ViKbjoTdCFU,861
|
|
31
|
+
keplemon/__init__.pyi,sha256=PgtL8CNupZCJibx07RLmFf56gMkCFx7voUIxBpeADO8,1349
|
|
33
32
|
keplemon/__main__.py,sha256=Bbbzny3eE3NOikVCEVFAGJiSRGooAkLzPwoSz-rpaxc,689
|
|
34
|
-
keplemon/_keplemon.cp310-win_amd64.pyd,sha256=
|
|
33
|
+
keplemon/_keplemon.cp310-win_amd64.pyd,sha256=MN1R7GGpqzxcQ_jo39lSFHIwxfLfkhWKf-CkbqntSfE,1455616
|
|
35
34
|
keplemon/assets/EGM-2008.GEO,sha256=K2nG8HGLATIHZYMfw3GSClYOTCuZ7rq4RdCeUNgCw5A,148770
|
|
36
35
|
keplemon/assets/EGM-96.GEO,sha256=VBkILuvEMwAPuWmUHy2PeyEfULOwJ4PEJLNf5hr84mU,148770
|
|
37
36
|
keplemon/assets/GEM_5-22.GEO,sha256=stemYLn1ChXa-VdLGHYfa15AXZa_xxGZQ65p4c3gffI,6852
|
|
@@ -40,20 +39,22 @@ keplemon/assets/JGM2-70.GEO,sha256=7NCW-clrb7PddiBOf_GWrJ0Qf_ZjM823jU9mDIOVLG0,1
|
|
|
40
39
|
keplemon/assets/JPLcon_1950_2050.405,sha256=IRfVZmBTDAKGdMGTyZr06KSBY0N5PxRgEcljPrZB_iU,31222725
|
|
41
40
|
keplemon/assets/NWL8C-12.GEO,sha256=ZwDKiFC5AxrSIkDPBUnQMmZeSaA5272V-z8yn6bKjOs,4788
|
|
42
41
|
keplemon/assets/SEM68R-8.GEO,sha256=vJTCLrviQ9HonN9BojX8PbH0vPkL4qgpBxUc9X43sjI,2482
|
|
42
|
+
keplemon/assets/SGP4_Open_License.txt,sha256=ThQ87DpbbXt-9K0-0U13tcZqsndte_UkaG3S0nLsfNY,8695
|
|
43
43
|
keplemon/assets/WGS84-70.GEO,sha256=ARjEC_5s2SVd0Kh9udbTy1ztBwTeuBYPOhUVJgIqit8,148510
|
|
44
44
|
keplemon/assets/time_constants.dat,sha256=3nsYjFgq0QnTUHPxuQPdtMG-AqxShVbvmG2zPcZfdcA,1246208
|
|
45
45
|
keplemon/bodies.py,sha256=MjdAGL25eF5pA3KHo5ipjz0DDql5EEEbBqR735M254g,217
|
|
46
|
-
keplemon/bodies.pyi,sha256=
|
|
46
|
+
keplemon/bodies.pyi,sha256=RJ1hgKQMU37-w861rtyJwpkvdJfyJsiYPsr57VL2Nng,7443
|
|
47
47
|
keplemon/catalogs.py,sha256=AKONH7zWBOnUZI0ty0lYiYZtrdILfKivoUgk1nU3PZ8,107
|
|
48
48
|
keplemon/catalogs.pyi,sha256=xcXEaiQY4wNvd95YdQDmqjD-nkirc_phSwL256Fejuc,540
|
|
49
|
-
keplemon/elements.py,sha256=
|
|
50
|
-
keplemon/elements.pyi,sha256=
|
|
49
|
+
keplemon/elements.py,sha256=AzE0xyBNDynGtBcIkpQaV7qHW-xNdA9bFkIcr5CC1oY,506
|
|
50
|
+
keplemon/elements.pyi,sha256=k-sALyXTHhU1YDyvV4RDDsjpTuHCJBD4J8GjLLpB2Q8,9743
|
|
51
51
|
keplemon/enums.py,sha256=5MejXeSwXPtfpIYeNuFQH3LSIRf4aTFZTK2Q1AYyaEg,325
|
|
52
52
|
keplemon/enums.pyi,sha256=OSS71WesYTgzWGUSjpxaYtzj6XmoyLBXq_Zd13IBwyQ,2418
|
|
53
53
|
keplemon/estimation.py,sha256=Of0rHiapW4s1wRipBCZrp4oOiIzs794w1nhqM7AVrGs,236
|
|
54
54
|
keplemon/estimation.pyi,sha256=kH-erT5qhxKVpHm9NehHsZbHbe96FP3aDX6GgwdntAs,5693
|
|
55
55
|
keplemon/events.py,sha256=5BOio4qnc6kEpOMZWiBy7LfXXTEM_TQPb7GiCNn936s,160
|
|
56
|
-
keplemon/events.pyi,sha256=
|
|
56
|
+
keplemon/events.pyi,sha256=I6CwIRJLl85VCMSsmYG8uSi1H7kYNDvs4LEgJ9UnRZg,2098
|
|
57
|
+
keplemon/exceptions.py,sha256=kdFwToNBHfbpzj311wHfTDztdgwRg2-OM3sHYhmd3AI,107
|
|
57
58
|
keplemon/libifcoremd.dll,sha256=x8iFLCgtUCJjWdfdmQycUx9BlXcNCW-Q3MeGpcIN12k,1885224
|
|
58
59
|
keplemon/libiomp5md.dll,sha256=C2O3Lj2yJYPGTyH0Z1c4FSrflnSzxHARp6y0dE3H2ZI,2030632
|
|
59
60
|
keplemon/libmmd.dll,sha256=Qf9bE3FoMllIyq4gRjhGK-Al9PVonTI0O5GP-dwuhb4,4449832
|
|
@@ -61,7 +62,13 @@ keplemon/propagation.py,sha256=PEFXVmF-UgSR88Wp72MGtJYo2xxUFC5A7tQhT9JnF8w,120
|
|
|
61
62
|
keplemon/propagation.pyi,sha256=ZWqjxwg4MQebRukTysK2ZyTtIxvAyZIkUybO3wsZO9Q,483
|
|
62
63
|
keplemon/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
64
|
keplemon/saal/__init__.py,sha256=JS-tjVFqN1B3ZjIG2g7v1GrmUPi9eIv0_Le1reYuQ2o,126
|
|
65
|
+
keplemon/saal/__init__.pyi,sha256=7wosTC1KhEJis-zp2LlZmW7hlr8BzFO4gx0TJ9c3J80,148
|
|
66
|
+
keplemon/saal/astro_func_interface.py,sha256=4hhtCVWBYdBBOlvQXt7XJuDJ5lWk8GbsV3iSJfkkFfc,685
|
|
67
|
+
keplemon/saal/astro_func_interface.pyi,sha256=Dx4ryXnpDK9ZnFL6afkIvTu3rH14Wi8q3rRxeY0Qoew,2557
|
|
64
68
|
keplemon/saal/obs_interface.py,sha256=ax8T4Y61pWh3VnQ4K2bCDNdrK-H6WKWr14pEDAY8WxE,257
|
|
65
|
-
keplemon/
|
|
66
|
-
keplemon/
|
|
67
|
-
keplemon
|
|
69
|
+
keplemon/saal/obs_interface.pyi,sha256=Y9PE1t2Kdz1Sne1t_M-ctOp9G4hWGKgMMkuES6v1U6Q,235
|
|
70
|
+
keplemon/saal/time_func_interface.py,sha256=C18Q_PIMUFBcB0pHN6wlVj35Vrt83VQNKOEmHDHvZSA,438
|
|
71
|
+
keplemon/saal/time_func_interface.pyi,sha256=3QKtsuxMoTgG--bDvbVNcJyD8vfcAUlw2n69g1m0kNM,1578
|
|
72
|
+
keplemon/time.py,sha256=fa6AKPPU18lX44emrAy5ZZ5TRam-Vhm8ecsauvQ_wdg,2888
|
|
73
|
+
keplemon/time.pyi,sha256=bS5UrY2loeT2mzONRFl2LTG5ZLaC3EnCXKB8fZRks4Q,6529
|
|
74
|
+
keplemon-0.3.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|