open-space-toolkit-astrodynamics 9.1.6__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.
Files changed (30) hide show
  1. {open_space_toolkit_astrodynamics-9.1.6.dist-info → open_space_toolkit_astrodynamics-13.0.2.dist-info}/METADATA +5 -5
  2. {open_space_toolkit_astrodynamics-9.1.6.dist-info → open_space_toolkit_astrodynamics-13.0.2.dist-info}/RECORD +29 -27
  3. {open_space_toolkit_astrodynamics-9.1.6.dist-info → open_space_toolkit_astrodynamics-13.0.2.dist-info}/WHEEL +1 -1
  4. ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-39-aarch64-linux-gnu.so +0 -0
  5. ostk/astrodynamics/converters.py +35 -90
  6. ostk/astrodynamics/dataframe.py +479 -0
  7. ostk/astrodynamics/display.py +2 -0
  8. ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.13 +0 -0
  9. ostk/astrodynamics/pytrajectory/pystate.py +216 -1
  10. ostk/astrodynamics/test/conftest.py +2 -2
  11. ostk/astrodynamics/test/flight/test_profile.py +155 -55
  12. ostk/astrodynamics/test/test_converters.py +43 -140
  13. ostk/astrodynamics/test/test_dataframe.py +875 -0
  14. ostk/astrodynamics/test/test_display.py +2 -3
  15. ostk/astrodynamics/test/test_event_condition.py +27 -7
  16. ostk/astrodynamics/test/test_trajectory.py +116 -38
  17. ostk/astrodynamics/test/test_utilities.py +31 -46
  18. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py +13 -0
  19. ostk/astrodynamics/test/trajectory/orbit/test_pass.py +9 -0
  20. ostk/astrodynamics/test/trajectory/state/test_coordinate_subset.py +3 -0
  21. ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py +2 -2
  22. ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py +34 -2
  23. ostk/astrodynamics/test/trajectory/test_orbit.py +26 -2
  24. ostk/astrodynamics/test/trajectory/test_segment.py +99 -1
  25. ostk/astrodynamics/test/trajectory/test_sequence.py +53 -0
  26. ostk/astrodynamics/test/trajectory/test_state.py +306 -0
  27. ostk/astrodynamics/utilities.py +125 -36
  28. ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.9 +0 -0
  29. {open_space_toolkit_astrodynamics-9.1.6.dist-info → open_space_toolkit_astrodynamics-13.0.2.dist-info}/top_level.txt +0 -0
  30. {open_space_toolkit_astrodynamics-9.1.6.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: 9.1.6
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,10 +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-core ~=3.0
15
- Requires-Dist: open-space-toolkit-io ~=3.0
16
- Requires-Dist: open-space-toolkit-mathematics ~=3.0
17
- Requires-Dist: open-space-toolkit-physics ~=6.0
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
18
18
 
19
19
  # Open Space Toolkit ▸ Astrodynamics
20
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=0rx3pizQyJd0MvBpAznZ-_DtPZ461Zt3wYWYMaAAW_c,1857232
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=vsm7SHdlPIyIxW1h5ZGAizl284koGaRmyPCu--AQJfA,4670
5
- ostk/astrodynamics/display.py,sha256=KiEGsjNftQfoUe-HfZeYpQQQ4TkaEnxtEl6p5_LX5f0,6303
6
- ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.9,sha256=yWONjEVzubaHlzLdxDeiMWzk92srH67d-1h-yI04H0Q,3215360
7
- ostk/astrodynamics/utilities.py,sha256=Jw-AT9CU-a2ERDDSNp7rEhZQKhbmZSCr2flGti9XysU,4813
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=ByOq8szit74xQ-pnLz0uGGxM6Jqfa17dFJyFB8qIXUg,1033
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=fsdUQnLxyfvBzfaSCkgipkPIhkPHchQqbeAro1pF648,2717
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=hnvqOCtUGrzBvjv7GnmaRdl2mlKM3eWuJUspe305B-A,12114
15
- ostk/astrodynamics/test/test_display.py,sha256=YnwnqXh-a1OODN2YqHr-l5-q1DrgZ-P4pOY5gxJp4II,3732
16
- ostk/astrodynamics/test/test_event_condition.py,sha256=mhMTH7wAoYFWRYt_8l2d1vjNPrFhVjMAEET4INLCVXY,1472
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=WC9X-O_prHeVLIZlmmYzgkskrs5ZwvmOfhz8yth2lgI,1345
20
- ostk/astrodynamics/test/test_utilities.py,sha256=kw8quvFTRuoXTbdNdac6IWrjnmA897btNntTMBn-30Q,3614
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
@@ -43,7 +45,7 @@ ostk/astrodynamics/test/event_condition/test_logical_condition.py,sha256=09h5TYW
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
47
  ostk/astrodynamics/test/flight/test_maneuver.py,sha256=6LhnNhaiwId-IveUraHnhx8dYxeOgzntP_WPtv9GFjQ,6197
46
- ostk/astrodynamics/test/flight/test_profile.py,sha256=RULN-34ERmlZjgNQe6Kj797dklJBKAm-QYUIqitxvwA,5185
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=33SuZgkXEgYwXhFftRBaSr9Vv60DDJBi5MiXD5H-n6A,2173
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=cWT1BUq_lV5-MkojKtN3CYIf10fkL24hjEjGIoFF6CY,5578
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=ACVMYvjlTyCQHZ2-hFEurK08-LQxt6VlcGTMOrgDHaE,9333
64
- ostk/astrodynamics/test/trajectory/test_sequence.py,sha256=gswWqEBTYvbi5TQjF0DNPkAj5COo9Nb9IK7TdwJ_5C0,12882
65
- ostk/astrodynamics/test/trajectory/test_state.py,sha256=PZUpGZKMFRDIyDAfKvSMmmOkiFqkquMz8Hgn_nK_SvI,6878
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=p6YCtb-QhCS_En3ECaSM2sJsWEnqXzmWaCmai_SuK0U,2191
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=H42bc4SkXl7tvEMDwAdPImiJpFPBRjSD_Npsmxq4xaY,4778
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=SGiNHbRgmB0sVTcDBxpK9CRRFbVmuA-cgwFVuiVZi_Y,1175
89
- ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py,sha256=_t4OKnYLzTjOhSkVTgT2307DQkz_DnGxqqLx8mmzLRA,9389
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-9.1.6.dist-info/METADATA,sha256=4FtjokttcExlT-_CyKYTF5pZzWtycHPHp9INVFWsB-M,1915
95
- open_space_toolkit_astrodynamics-9.1.6.dist-info/WHEEL,sha256=mOT7xFg4RXTjgiIITNfGEOMo-D-dyhP32IbvRKRDdVQ,111
96
- open_space_toolkit_astrodynamics-9.1.6.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
97
- open_space_toolkit_astrodynamics-9.1.6.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
98
- open_space_toolkit_astrodynamics-9.1.6.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (71.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py39-none-manylinux2014_aarch64
5
5
 
@@ -1,18 +1,14 @@
1
1
  # Apache License 2.0
2
2
 
3
- from datetime import datetime, timedelta, timezone
3
+ from __future__ import annotations
4
4
 
5
- import numpy as np
5
+ import re
6
6
 
7
- from ostk.mathematics.geometry.d3.transformation.rotation import Quaternion
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("Argument must be a datetime, an Instant, or a str.")
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,7 +59,9 @@ 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("Argument must be a datetime, an Instant, or a str.")
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
67
  def coerce_to_iso(value: Instant | datetime | str, timespec: str = "microseconds") -> str:
@@ -82,17 +85,25 @@ def coerce_to_iso(value: Instant | datetime | str, timespec: str = "microseconds
82
85
  if isinstance(value, Instant):
83
86
  return coerce_to_iso(coerce_to_datetime(value), timespec=timespec)
84
87
 
85
- raise TypeError("Argument must be a datetime, an Instant, or a str.")
88
+ raise TypeError(
89
+ f"Argument is of type [{type(value)}]. Must be a datetime, an Instant, or a str."
90
+ )
86
91
 
87
92
 
88
93
  def coerce_to_interval(
89
- value: Interval | tuple[Instant, Instant] | tuple[datetime, datetime],
94
+ value: (
95
+ Interval
96
+ | tuple[Instant, Instant]
97
+ | tuple[datetime, datetime]
98
+ | tuple[str, str]
99
+ | str
100
+ ),
90
101
  ) -> Interval:
91
102
  """
92
103
  Return Interval from value.
93
104
 
94
105
  Args:
95
- 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.
96
107
 
97
108
  Returns:
98
109
  Interval: The coerced Interval.
@@ -101,85 +112,19 @@ def coerce_to_interval(
101
112
  if isinstance(value, Interval):
102
113
  return value
103
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
+
104
127
  return Interval.closed(
105
128
  start_instant=coerce_to_instant(value[0]),
106
129
  end_instant=coerce_to_instant(value[1]),
107
130
  )
108
-
109
-
110
- def coerce_to_duration(value: Duration | timedelta) -> Duration:
111
- """
112
- Return Duration from value.
113
-
114
- Args:
115
- value (Duration | datetime): A value to coerce.
116
-
117
- Returns:
118
- Duration: The coerced Duration.
119
- """
120
-
121
- if isinstance(value, Duration):
122
- return value
123
-
124
- return Duration.seconds(value.total_seconds())
125
-
126
-
127
- def coerce_to_position(
128
- value: Position | tuple[float, float, float] | list[float] | np.ndarray,
129
- frame: Frame,
130
- ) -> Position:
131
- """
132
- Return Position from value.
133
-
134
- Args:
135
- value (Position | tuple[float, float, float] | list[float] | np.ndarray): A value to coerce.
136
- frame (Frame): A reference frame.
137
-
138
- Returns:
139
- Position: The coerced Position.
140
- """
141
-
142
- if isinstance(value, Position):
143
- return value
144
-
145
- return Position.meters(value, frame)
146
-
147
-
148
- def coerce_to_velocity(
149
- value: Velocity | tuple[float, float, float] | list[float] | np.ndarray,
150
- frame: Frame,
151
- ) -> Velocity:
152
- """
153
- Return Velocity from value.
154
-
155
- Args:
156
- value (Velocity | tuple[float, float, float] | list[float] | np.ndarray): A value to coerce.
157
- frame (Frame): A reference frame.
158
-
159
- Returns:
160
- Velocity: The coerced Velocity.
161
- """
162
-
163
- if isinstance(value, Velocity):
164
- return value
165
-
166
- return Velocity.meters_per_second(value, frame)
167
-
168
-
169
- def coerce_to_quaternion(
170
- value: Quaternion | tuple[float, float, float, float] | list[float] | np.ndarray
171
- ) -> Quaternion:
172
- """
173
- Return quaternion from value.
174
-
175
- Args:
176
- value (Quaternion | tuple[float, float, float, float] | list[float] | np.ndarray): A value to coerce.
177
-
178
- Returns:
179
- Quaternion: The coerced Quaternion.
180
- """
181
-
182
- if isinstance(value, Quaternion):
183
- return value
184
-
185
- return Quaternion(vector=value, format=Quaternion.Format.XYZS)