open-space-toolkit-astrodynamics 9.0.3__py39-none-manylinux2014_aarch64.whl → 13.0.2__py39-none-manylinux2014_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {open_space_toolkit_astrodynamics-9.0.3.dist-info → open_space_toolkit_astrodynamics-13.0.2.dist-info}/METADATA +5 -2
- {open_space_toolkit_astrodynamics-9.0.3.dist-info → open_space_toolkit_astrodynamics-13.0.2.dist-info}/RECORD +30 -28
- {open_space_toolkit_astrodynamics-9.0.3.dist-info → open_space_toolkit_astrodynamics-13.0.2.dist-info}/WHEEL +1 -1
- ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-39-aarch64-linux-gnu.so +0 -0
- ostk/astrodynamics/converters.py +36 -93
- ostk/astrodynamics/dataframe.py +479 -0
- ostk/astrodynamics/display.py +2 -0
- ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.13 +0 -0
- ostk/astrodynamics/pytrajectory/pystate.py +216 -1
- ostk/astrodynamics/test/conftest.py +2 -2
- ostk/astrodynamics/test/flight/test_maneuver.py +8 -12
- ostk/astrodynamics/test/flight/test_profile.py +155 -55
- ostk/astrodynamics/test/test_converters.py +43 -140
- ostk/astrodynamics/test/test_dataframe.py +875 -0
- ostk/astrodynamics/test/test_display.py +2 -3
- ostk/astrodynamics/test/test_event_condition.py +27 -7
- ostk/astrodynamics/test/test_trajectory.py +116 -38
- ostk/astrodynamics/test/test_utilities.py +31 -46
- ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py +13 -0
- ostk/astrodynamics/test/trajectory/orbit/test_pass.py +9 -0
- ostk/astrodynamics/test/trajectory/state/test_coordinate_subset.py +3 -0
- ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py +2 -2
- ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py +48 -4
- ostk/astrodynamics/test/trajectory/test_orbit.py +42 -2
- ostk/astrodynamics/test/trajectory/test_segment.py +99 -1
- ostk/astrodynamics/test/trajectory/test_sequence.py +53 -0
- ostk/astrodynamics/test/trajectory/test_state.py +306 -0
- ostk/astrodynamics/utilities.py +125 -36
- ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.9 +0 -0
- {open_space_toolkit_astrodynamics-9.0.3.dist-info → open_space_toolkit_astrodynamics-13.0.2.dist-info}/top_level.txt +0 -0
- {open_space_toolkit_astrodynamics-9.0.3.dist-info → open_space_toolkit_astrodynamics-13.0.2.dist-info}/zip-safe +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: open-space-toolkit-astrodynamics
|
3
|
-
Version:
|
3
|
+
Version: 13.0.2
|
4
4
|
Summary: Orbit, attitude, access.
|
5
5
|
Author: Open Space Collective
|
6
6
|
Author-email: contact@open-space-collective.org
|
@@ -11,7 +11,10 @@ Classifier: Programming Language :: Python :: 3
|
|
11
11
|
Classifier: License :: OSI Approved :: Apache Software License
|
12
12
|
Classifier: Operating System :: POSIX :: Linux
|
13
13
|
Description-Content-Type: text/markdown
|
14
|
-
Requires-Dist: open-space-toolkit-
|
14
|
+
Requires-Dist: open-space-toolkit-core ~=4.1
|
15
|
+
Requires-Dist: open-space-toolkit-io ~=4.0
|
16
|
+
Requires-Dist: open-space-toolkit-mathematics ~=4.3
|
17
|
+
Requires-Dist: open-space-toolkit-physics ~=11.1
|
15
18
|
|
16
19
|
# Open Space Toolkit ▸ Astrodynamics
|
17
20
|
|
@@ -1,23 +1,25 @@
|
|
1
1
|
ostk/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
2
|
-
ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-39-aarch64-linux-gnu.so,sha256=
|
2
|
+
ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-39-aarch64-linux-gnu.so,sha256=ebpsqc2dTUf2GALfTNeTM58xF1sJ3cyv2CP3ewoLIbs,2189176
|
3
3
|
ostk/astrodynamics/__init__.py,sha256=3gWyqFIbhAfcdeMhmfBPQPlPQTmaOzm-6flkJe745Zk,251
|
4
|
-
ostk/astrodynamics/converters.py,sha256=
|
5
|
-
ostk/astrodynamics/
|
6
|
-
ostk/astrodynamics/
|
7
|
-
ostk/astrodynamics/
|
4
|
+
ostk/astrodynamics/converters.py,sha256=luPh30qMp9bzEkN7hUccmxlLf7zRp_AzqmBe8IUjPhU,3314
|
5
|
+
ostk/astrodynamics/dataframe.py,sha256=9fXRk7sJl_OrBTCjZC_TFx6JMPE7IDGqv2JgEmGCdgM,18775
|
6
|
+
ostk/astrodynamics/display.py,sha256=LZESZgx2wlrFO4cwAGMb3VPJfdtcjNgCgKFrqot0NYU,6339
|
7
|
+
ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.13,sha256=5Y8HVHC_gcurTG8vJYvLUIDTcCaFd52gjGsVuqKPwV0,3375000
|
8
|
+
ostk/astrodynamics/utilities.py,sha256=mlKL3WrOASrY_pLt7bzUz0XZT7jagzLOZjMOIqjbQ1Y,6999
|
8
9
|
ostk/astrodynamics/viewer.py,sha256=8UxqsvU5wui7gPUwxXaKcIB-509NJiih9Df3mQgXyXY,11776
|
9
10
|
ostk/astrodynamics/pytrajectory/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
10
|
-
ostk/astrodynamics/pytrajectory/pystate.py,sha256=
|
11
|
+
ostk/astrodynamics/pytrajectory/pystate.py,sha256=zyQon4c-bemdl_PBFWrXV_VVchpvbkEBRod8ospAuFA,7867
|
11
12
|
ostk/astrodynamics/test/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
12
|
-
ostk/astrodynamics/test/conftest.py,sha256=
|
13
|
+
ostk/astrodynamics/test/conftest.py,sha256=stmQOt7UXjBlXKJzNN6RkS2miv1xXSOX-YNpFhaHTqI,2771
|
13
14
|
ostk/astrodynamics/test/test_access.py,sha256=MCBsUPtuVm7NgHZR0z0DpWnPZ_qBu4aRhLI2PnRNUYs,3940
|
14
|
-
ostk/astrodynamics/test/test_converters.py,sha256=
|
15
|
-
ostk/astrodynamics/test/
|
16
|
-
ostk/astrodynamics/test/
|
15
|
+
ostk/astrodynamics/test/test_converters.py,sha256=mFpDD0YM8o356lj91GGIwYdMk2ut6xZFV3uYcgZepMY,8744
|
16
|
+
ostk/astrodynamics/test/test_dataframe.py,sha256=IJMOODzTVYtiPxekmltH6lOMArPXbHwSEAl-jg0Ab2g,28414
|
17
|
+
ostk/astrodynamics/test/test_display.py,sha256=Ykvw2rUWWw8jsX0Suy11X27bHjwm_ira__xj0ZyHHxw,3672
|
18
|
+
ostk/astrodynamics/test/test_event_condition.py,sha256=RSO2L5x3D8grWW4t7WK-aTMl7vFOMpj6F3ByN3EaovY,2175
|
17
19
|
ostk/astrodynamics/test/test_import.py,sha256=py_hALBR0IYuUzv9dfgQZzrrLHJIpnyKvt3Oi1XBqCg,1251
|
18
20
|
ostk/astrodynamics/test/test_root_solver.py,sha256=hQ8O6g-WP49gZH_H3Rdufv0F0gQorpzJyIcjBGGUQ34,1831
|
19
|
-
ostk/astrodynamics/test/test_trajectory.py,sha256=
|
20
|
-
ostk/astrodynamics/test/test_utilities.py,sha256=
|
21
|
+
ostk/astrodynamics/test/test_trajectory.py,sha256=0sgGPkMFy-u-33z6SF-sTvaBb_NU7OvaeMTVF6wevfY,3148
|
22
|
+
ostk/astrodynamics/test/test_utilities.py,sha256=xmRt-5z9-FFYTMQxBpjGrcKP39trbOiH-NLxGcTWOJE,3048
|
21
23
|
ostk/astrodynamics/test/test_viewer.py,sha256=rbVAiclzBZ1bS4Zdh4xUNJ-STCN4G0O7Gr8suSPJrSc,3986
|
22
24
|
ostk/astrodynamics/test/access/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
23
25
|
ostk/astrodynamics/test/access/test_generator.py,sha256=7l_MJCZIhWIyPpZ-XouBXlSd5-BfqFDGVOMMxjoRIHA,8032
|
@@ -42,8 +44,8 @@ ostk/astrodynamics/test/event_condition/test_instant_condition.py,sha256=Qr5dN6n
|
|
42
44
|
ostk/astrodynamics/test/event_condition/test_logical_condition.py,sha256=09h5TYWtwGt4NQW3k_tziiVs0Q2981rNII9wyKg7p2Q,3321
|
43
45
|
ostk/astrodynamics/test/event_condition/test_real_condition.py,sha256=tle6HVzMFMIIkfRY7CuaA0mPtw3riJBG_JQkc1L0dpk,1374
|
44
46
|
ostk/astrodynamics/test/flight/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
45
|
-
ostk/astrodynamics/test/flight/test_maneuver.py,sha256=
|
46
|
-
ostk/astrodynamics/test/flight/test_profile.py,sha256=
|
47
|
+
ostk/astrodynamics/test/flight/test_maneuver.py,sha256=6LhnNhaiwId-IveUraHnhx8dYxeOgzntP_WPtv9GFjQ,6197
|
48
|
+
ostk/astrodynamics/test/flight/test_profile.py,sha256=mV5ru4odPTxg3nkiMjRbDzzXK3hkAyOsv_wLYiD60ho,7815
|
47
49
|
ostk/astrodynamics/test/flight/test_system.py,sha256=MVaE7lJYisH4vmJPD-G-Hw4wNj-Xe8yMksgu8IXCLvg,1322
|
48
50
|
ostk/astrodynamics/test/flight/system/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
49
51
|
ostk/astrodynamics/test/flight/system/test_propulsion_system.py,sha256=jLUC74YjIQz7APr-kQcdYRYiKm8lfequjosptG29kmI,1964
|
@@ -56,17 +58,17 @@ ostk/astrodynamics/test/solvers/test_finite_difference_solver.py,sha256=49hS9EF7
|
|
56
58
|
ostk/astrodynamics/test/solvers/test_temporal_condition_solver.py,sha256=ukDuIiEbBBvfqbHfiMIsPk5eyeRsWywCvNT1A3YnmIQ,4862
|
57
59
|
ostk/astrodynamics/test/trajectory/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
58
60
|
ostk/astrodynamics/test/trajectory/test_local_orbital_frame_direction.py,sha256=d72J50UGG9m0Atei0UQ8sITU1WdJmws5xgUiacLZMbw,2515
|
59
|
-
ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py,sha256=
|
61
|
+
ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py,sha256=hXA23AFZ9RFroBZiGZMxTWGCFJ4fxQpYx50eml1WFjI,3116
|
60
62
|
ostk/astrodynamics/test/trajectory/test_model.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
61
|
-
ostk/astrodynamics/test/trajectory/test_orbit.py,sha256=
|
63
|
+
ostk/astrodynamics/test/trajectory/test_orbit.py,sha256=iKVgScEo1osMIXjON4ToURCgp2LDZV18fKQuy49RktI,6484
|
62
64
|
ostk/astrodynamics/test/trajectory/test_propagator.py,sha256=dG31S5FY0NjJ5bnisqJ_HdL7amj_AZAWWLiOmdHfJAc,14233
|
63
|
-
ostk/astrodynamics/test/trajectory/test_segment.py,sha256=
|
64
|
-
ostk/astrodynamics/test/trajectory/test_sequence.py,sha256=
|
65
|
-
ostk/astrodynamics/test/trajectory/test_state.py,sha256=
|
65
|
+
ostk/astrodynamics/test/trajectory/test_segment.py,sha256=4XacBFrX8ZkS-OLDWyIs7kqDa2vG9UQ5guMXVl5ecJk,12275
|
66
|
+
ostk/astrodynamics/test/trajectory/test_sequence.py,sha256=iCNDDqEGoo4WZIOOov0qKGzrxjg7yWVIk8ajfKMhgI4,14503
|
67
|
+
ostk/astrodynamics/test/trajectory/test_state.py,sha256=8B7KVlxZZPzwwsfCrTudeSkTTC2wAjXcglB0PZdjD1Y,15688
|
66
68
|
ostk/astrodynamics/test/trajectory/test_state_builder.py,sha256=PSlXtmGURCrlf0w50tn3dEBRo6p0x4NmIF9gJsNOR3k,4782
|
67
69
|
ostk/astrodynamics/test/trajectory/orbit/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
68
70
|
ostk/astrodynamics/test/trajectory/orbit/test_model.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
69
|
-
ostk/astrodynamics/test/trajectory/orbit/test_pass.py,sha256=
|
71
|
+
ostk/astrodynamics/test/trajectory/orbit/test_pass.py,sha256=LTHDGW26I0kujifCXFMcUFu9yaHMeUoIM-7jt6kJkJU,2492
|
70
72
|
ostk/astrodynamics/test/trajectory/orbit/message/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
71
73
|
ostk/astrodynamics/test/trajectory/orbit/message/spacex/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
72
74
|
ostk/astrodynamics/test/trajectory/orbit/message/spacex/conftest.py,sha256=O75ywkPJjoFp0uKptCu4C2tGMRaGN-8NVFVhps85eWE,379
|
@@ -81,18 +83,18 @@ ostk/astrodynamics/test/trajectory/orbit/models/kepler/__init__.py,sha256=epnVn2
|
|
81
83
|
ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean.py,sha256=NvtwHJzZvfp8LZGcRhWU1kJ_rdLCim8GBXUbzMrPjjc,1542
|
82
84
|
ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_long.py,sha256=c-8M4py0LEDHoRuc-ukmUyGYN7PcSDWFKY2Bh1KFNRk,2468
|
83
85
|
ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_short.py,sha256=rLA6Ud41SFZSWZiOzGFU1FBPlzv6-c6eP8Ly-bqsFKo,2485
|
84
|
-
ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py,sha256=
|
86
|
+
ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py,sha256=inXqK6zD3VgxvBZg-bh3AzLTh6q12hxJ8iiAyIodYMs,5319
|
85
87
|
ostk/astrodynamics/test/trajectory/orbit/models/sgp4/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
86
88
|
ostk/astrodynamics/test/trajectory/orbit/models/sgp4/test_tle.py,sha256=jkyRr5NJQMaSpI3ey7cKcH0E-BlalaUlf_mZPYTSow8,11482
|
87
89
|
ostk/astrodynamics/test/trajectory/state/test_coordinate_broker.py,sha256=ho5FBfB3IvIjfQl7EYoIN1KBuH9lu76IiNMuweq8cqg,2844
|
88
|
-
ostk/astrodynamics/test/trajectory/state/test_coordinate_subset.py,sha256=
|
89
|
-
ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py,sha256=
|
90
|
+
ostk/astrodynamics/test/trajectory/state/test_coordinate_subset.py,sha256=KjltLEPbxMfyebwjG5mulyGCT5INtiItPq6ID6sP9jI,1289
|
91
|
+
ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py,sha256=PcLU8XTiDHZ-yplYvHZFX32yTUoua9MhKrMmQPINl9w,9386
|
90
92
|
ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_angular_velocity.py,sha256=xjyGREKpxDuT8gjtBPkV4osfW-6UyWv9hgvBXZVb_wk,625
|
91
93
|
ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_attitude_quaternion.py,sha256=UEu9ApzQLmT87eeISw6_gcHTlX-4b2scIvHz-uE1p_c,393
|
92
94
|
ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_position.py,sha256=XvHdk1KjacTwtkgx2jUAc9I9N3nvjPDv03FAanpv8jQ,2702
|
93
95
|
ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_velocity.py,sha256=-kd5TZO5TICihbkqDTew2i_tDpggdpe3Yf23046FATM,3057
|
94
|
-
open_space_toolkit_astrodynamics-
|
95
|
-
open_space_toolkit_astrodynamics-
|
96
|
-
open_space_toolkit_astrodynamics-
|
97
|
-
open_space_toolkit_astrodynamics-
|
98
|
-
open_space_toolkit_astrodynamics-
|
96
|
+
open_space_toolkit_astrodynamics-13.0.2.dist-info/METADATA,sha256=kpuLa93CbinRE4i-4aKSzJzbObOdmfBNj4-21J_pb_4,1917
|
97
|
+
open_space_toolkit_astrodynamics-13.0.2.dist-info/WHEEL,sha256=kYqHudTOMtjp4at7li7kQygMBvMc9voLd-PjCaTm7Ps,110
|
98
|
+
open_space_toolkit_astrodynamics-13.0.2.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
|
99
|
+
open_space_toolkit_astrodynamics-13.0.2.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
100
|
+
open_space_toolkit_astrodynamics-13.0.2.dist-info/RECORD,,
|
Binary file
|
ostk/astrodynamics/converters.py
CHANGED
@@ -1,18 +1,14 @@
|
|
1
1
|
# Apache License 2.0
|
2
2
|
|
3
|
-
from
|
3
|
+
from __future__ import annotations
|
4
4
|
|
5
|
-
import
|
5
|
+
import re
|
6
6
|
|
7
|
-
from
|
7
|
+
from datetime import datetime, timezone
|
8
8
|
|
9
9
|
from ostk.physics.time import Instant
|
10
10
|
from ostk.physics.time import Interval
|
11
|
-
from ostk.physics.time import Duration
|
12
11
|
from ostk.physics.time import Scale
|
13
|
-
from ostk.physics.coordinate import Position
|
14
|
-
from ostk.physics.coordinate import Velocity
|
15
|
-
from ostk.physics.coordinate import Frame
|
16
12
|
|
17
13
|
|
18
14
|
def coerce_to_datetime(value: Instant | datetime | str) -> datetime:
|
@@ -33,9 +29,14 @@ def coerce_to_datetime(value: Instant | datetime | str) -> datetime:
|
|
33
29
|
return value.get_date_time(Scale.UTC).replace(tzinfo=timezone.utc)
|
34
30
|
|
35
31
|
if isinstance(value, str):
|
32
|
+
if value.endswith("Z"):
|
33
|
+
value = value.replace("Z", "+00:00")
|
34
|
+
|
36
35
|
return datetime.fromisoformat(value)
|
37
36
|
|
38
|
-
raise TypeError(
|
37
|
+
raise TypeError(
|
38
|
+
f"Argument is of type [{type(value)}]. Must be a datetime, an Instant, or a str."
|
39
|
+
)
|
39
40
|
|
40
41
|
|
41
42
|
def coerce_to_instant(value: Instant | datetime | str) -> Instant:
|
@@ -58,12 +59,12 @@ def coerce_to_instant(value: Instant | datetime | str) -> Instant:
|
|
58
59
|
if isinstance(value, str):
|
59
60
|
return coerce_to_instant(coerce_to_datetime(value))
|
60
61
|
|
61
|
-
raise TypeError(
|
62
|
+
raise TypeError(
|
63
|
+
f"Argument is of type [{type(value)}]. Must be a datetime, an Instant, or a str."
|
64
|
+
)
|
62
65
|
|
63
66
|
|
64
|
-
def coerce_to_iso(
|
65
|
-
value: Instant | datetime | str, timespec: str = "microseconds"
|
66
|
-
) -> Instant:
|
67
|
+
def coerce_to_iso(value: Instant | datetime | str, timespec: str = "microseconds") -> str:
|
67
68
|
"""
|
68
69
|
Return an ISO string from value.
|
69
70
|
|
@@ -84,17 +85,25 @@ def coerce_to_iso(
|
|
84
85
|
if isinstance(value, Instant):
|
85
86
|
return coerce_to_iso(coerce_to_datetime(value), timespec=timespec)
|
86
87
|
|
87
|
-
raise TypeError(
|
88
|
+
raise TypeError(
|
89
|
+
f"Argument is of type [{type(value)}]. Must be a datetime, an Instant, or a str."
|
90
|
+
)
|
88
91
|
|
89
92
|
|
90
93
|
def coerce_to_interval(
|
91
|
-
value:
|
94
|
+
value: (
|
95
|
+
Interval
|
96
|
+
| tuple[Instant, Instant]
|
97
|
+
| tuple[datetime, datetime]
|
98
|
+
| tuple[str, str]
|
99
|
+
| str
|
100
|
+
),
|
92
101
|
) -> Interval:
|
93
102
|
"""
|
94
103
|
Return Interval from value.
|
95
104
|
|
96
105
|
Args:
|
97
|
-
value (Interval | tuple[Instant, Instant] | tuple[datetime, datetime]): A value to coerce.
|
106
|
+
value (Interval | tuple[Instant, Instant] | tuple[datetime, datetime] | tuple[str, str]): A value to coerce.
|
98
107
|
|
99
108
|
Returns:
|
100
109
|
Interval: The coerced Interval.
|
@@ -103,85 +112,19 @@ def coerce_to_interval(
|
|
103
112
|
if isinstance(value, Interval):
|
104
113
|
return value
|
105
114
|
|
115
|
+
if isinstance(value, str):
|
116
|
+
regex = r"\[(.*) - (.*)\] \[UTC\]"
|
117
|
+
matches = re.search(regex, value)
|
118
|
+
|
119
|
+
if matches:
|
120
|
+
return Interval.closed(
|
121
|
+
start_instant=coerce_to_instant(matches.group(1)),
|
122
|
+
end_instant=coerce_to_instant(matches.group(2)),
|
123
|
+
)
|
124
|
+
|
125
|
+
raise ValueError(f"String [{value}] does not match the expected format.")
|
126
|
+
|
106
127
|
return Interval.closed(
|
107
128
|
start_instant=coerce_to_instant(value[0]),
|
108
129
|
end_instant=coerce_to_instant(value[1]),
|
109
130
|
)
|
110
|
-
|
111
|
-
|
112
|
-
def coerce_to_duration(value: Duration | timedelta) -> Duration:
|
113
|
-
"""
|
114
|
-
Return Duration from value.
|
115
|
-
|
116
|
-
Args:
|
117
|
-
value (Duration | datetime): A value to coerce.
|
118
|
-
|
119
|
-
Returns:
|
120
|
-
Duration: The coerced Duration.
|
121
|
-
"""
|
122
|
-
|
123
|
-
if isinstance(value, Duration):
|
124
|
-
return value
|
125
|
-
|
126
|
-
return Duration.seconds(value.total_seconds())
|
127
|
-
|
128
|
-
|
129
|
-
def coerce_to_position(
|
130
|
-
value: Position | tuple[float, float, float] | list[float] | np.ndarray,
|
131
|
-
frame: Frame,
|
132
|
-
) -> Position:
|
133
|
-
"""
|
134
|
-
Return Position from value.
|
135
|
-
|
136
|
-
Args:
|
137
|
-
value (Position | tuple[float, float, float] | list[float] | np.ndarray): A value to coerce.
|
138
|
-
frame (Frame): A reference frame.
|
139
|
-
|
140
|
-
Returns:
|
141
|
-
Position: The coerced Position.
|
142
|
-
"""
|
143
|
-
|
144
|
-
if isinstance(value, Position):
|
145
|
-
return value
|
146
|
-
|
147
|
-
return Position.meters(value, frame)
|
148
|
-
|
149
|
-
|
150
|
-
def coerce_to_velocity(
|
151
|
-
value: Velocity | tuple[float, float, float] | list[float] | np.ndarray,
|
152
|
-
frame: Frame,
|
153
|
-
) -> Velocity:
|
154
|
-
"""
|
155
|
-
Return Velocity from value.
|
156
|
-
|
157
|
-
Args:
|
158
|
-
value (Velocity | tuple[float, float, float] | list[float] | np.ndarray): A value to coerce.
|
159
|
-
frame (Frame): A reference frame.
|
160
|
-
|
161
|
-
Returns:
|
162
|
-
Velocity: The coerced Velocity.
|
163
|
-
"""
|
164
|
-
|
165
|
-
if isinstance(value, Velocity):
|
166
|
-
return value
|
167
|
-
|
168
|
-
return Velocity.meters_per_second(value, frame)
|
169
|
-
|
170
|
-
|
171
|
-
def coerce_to_quaternion(
|
172
|
-
value: Quaternion | tuple[float, float, float, float] | list[float] | np.ndarray
|
173
|
-
) -> Quaternion:
|
174
|
-
"""
|
175
|
-
Return quaternion from value.
|
176
|
-
|
177
|
-
Args:
|
178
|
-
value (Quaternion | tuple[float, float, float, float] | list[float] | np.ndarray): A value to coerce.
|
179
|
-
|
180
|
-
Returns:
|
181
|
-
Quaternion: The coerced Quaternion.
|
182
|
-
"""
|
183
|
-
|
184
|
-
if isinstance(value, Quaternion):
|
185
|
-
return value
|
186
|
-
|
187
|
-
return Quaternion(vector=value, format=Quaternion.Format.XYZS)
|