open-space-toolkit-astrodynamics 9.0.4__py310-none-manylinux2014_aarch64.whl → 11.1.0__py310-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 (22) hide show
  1. {open_space_toolkit_astrodynamics-9.0.4.dist-info → open_space_toolkit_astrodynamics-11.1.0.dist-info}/METADATA +5 -2
  2. {open_space_toolkit_astrodynamics-9.0.4.dist-info → open_space_toolkit_astrodynamics-11.1.0.dist-info}/RECORD +21 -19
  3. {open_space_toolkit_astrodynamics-9.0.4.dist-info → open_space_toolkit_astrodynamics-11.1.0.dist-info}/WHEEL +1 -1
  4. ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-310-aarch64-linux-gnu.so +0 -0
  5. ostk/astrodynamics/converters.py +9 -92
  6. ostk/astrodynamics/dataframe.py +477 -0
  7. ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.11 +0 -0
  8. ostk/astrodynamics/test/flight/test_maneuver.py +8 -11
  9. ostk/astrodynamics/test/flight/test_profile.py +44 -50
  10. ostk/astrodynamics/test/test_converters.py +0 -94
  11. ostk/astrodynamics/test/test_dataframe.py +875 -0
  12. ostk/astrodynamics/test/test_display.py +2 -3
  13. ostk/astrodynamics/test/test_utilities.py +3 -3
  14. ostk/astrodynamics/test/trajectory/orbit/test_pass.py +9 -0
  15. ostk/astrodynamics/test/trajectory/state/test_coordinate_subset.py +3 -0
  16. ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py +2 -2
  17. ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py +2 -2
  18. ostk/astrodynamics/test/trajectory/test_orbit.py +42 -2
  19. ostk/astrodynamics/utilities.py +1 -1
  20. ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.9 +0 -0
  21. {open_space_toolkit_astrodynamics-9.0.4.dist-info → open_space_toolkit_astrodynamics-11.1.0.dist-info}/top_level.txt +0 -0
  22. {open_space_toolkit_astrodynamics-9.0.4.dist-info → open_space_toolkit_astrodynamics-11.1.0.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.0.4
3
+ Version: 11.1.0
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-physics ~=6.0.0
14
+ Requires-Dist: open-space-toolkit-core ~=4.0
15
+ Requires-Dist: open-space-toolkit-io ~=4.0
16
+ Requires-Dist: open-space-toolkit-mathematics ~=4.0
17
+ Requires-Dist: open-space-toolkit-physics ~=9.0
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-310-aarch64-linux-gnu.so,sha256=9zXVkgEGCfB9UC-WypQRO6tEU0RUP6wCe-VUM_zrCsE,1849048
2
+ ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-310-aarch64-linux-gnu.so,sha256=XTBL-53HNHNT4Ldd6p_A77t06nBLoVvsUL8che8kwf8,2074368
3
3
  ostk/astrodynamics/__init__.py,sha256=3gWyqFIbhAfcdeMhmfBPQPlPQTmaOzm-6flkJe745Zk,251
4
- ostk/astrodynamics/converters.py,sha256=IUxJK5qNzDMsqMSiMT6hUThCjncKoIMW0ifu8kwbww0,4680
4
+ ostk/astrodynamics/converters.py,sha256=xr1BDaY2od8IsNq-3isubaxainncgH8_yihZ6Mf38n4,2697
5
+ ostk/astrodynamics/dataframe.py,sha256=njimcfT2cvnSOp9eBR1Ej-LuYpXbVieAVEBk2tYW4Vg,18761
5
6
  ostk/astrodynamics/display.py,sha256=KiEGsjNftQfoUe-HfZeYpQQQ4TkaEnxtEl6p5_LX5f0,6303
6
- ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.9,sha256=skYZi-mPCQJZYBnNSE3EE4-gW9q1qU5szyPbC4rD1go,3190224
7
- ostk/astrodynamics/utilities.py,sha256=Jw-AT9CU-a2ERDDSNp7rEhZQKhbmZSCr2flGti9XysU,4813
7
+ ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.11,sha256=lO4WE4EJoDzV__SW13-X0bhe05T7eY--WJl1bbwzsOw,3350128
8
+ ostk/astrodynamics/utilities.py,sha256=Yu5Yydq22gNIHi6ylqeujDENcueb1JfUE6d93h1m9XE,4795
8
9
  ostk/astrodynamics/viewer.py,sha256=8UxqsvU5wui7gPUwxXaKcIB-509NJiih9Df3mQgXyXY,11776
9
10
  ostk/astrodynamics/pytrajectory/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
10
11
  ostk/astrodynamics/pytrajectory/pystate.py,sha256=ByOq8szit74xQ-pnLz0uGGxM6Jqfa17dFJyFB8qIXUg,1033
11
12
  ostk/astrodynamics/test/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
12
13
  ostk/astrodynamics/test/conftest.py,sha256=fsdUQnLxyfvBzfaSCkgipkPIhkPHchQqbeAro1pF648,2717
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
15
+ ostk/astrodynamics/test/test_converters.py,sha256=ommyONkpTnhm3GHtCRe_NMtD-SBtb0vD4LGXK6nhNuU,9098
16
+ ostk/astrodynamics/test/test_dataframe.py,sha256=IJMOODzTVYtiPxekmltH6lOMArPXbHwSEAl-jg0Ab2g,28414
17
+ ostk/astrodynamics/test/test_display.py,sha256=Ykvw2rUWWw8jsX0Suy11X27bHjwm_ira__xj0ZyHHxw,3672
16
18
  ostk/astrodynamics/test/test_event_condition.py,sha256=mhMTH7wAoYFWRYt_8l2d1vjNPrFhVjMAEET4INLCVXY,1472
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
21
  ostk/astrodynamics/test/test_trajectory.py,sha256=WC9X-O_prHeVLIZlmmYzgkskrs5ZwvmOfhz8yth2lgI,1345
20
- ostk/astrodynamics/test/test_utilities.py,sha256=42IEGs_ajHeZVN_Yem-ALQG7wBddU3wfs5pkU_V_hOM,3612
22
+ ostk/astrodynamics/test/test_utilities.py,sha256=kw8quvFTRuoXTbdNdac6IWrjnmA897btNntTMBn-30Q,3614
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=qE5kvdJAIJdmYrk_9qcG5gxgaNgqTdxi13GzhkTeXVY,6334
46
- ostk/astrodynamics/test/flight/test_profile.py,sha256=RULN-34ERmlZjgNQe6Kj797dklJBKAm-QYUIqitxvwA,5185
47
+ ostk/astrodynamics/test/flight/test_maneuver.py,sha256=6LhnNhaiwId-IveUraHnhx8dYxeOgzntP_WPtv9GFjQ,6197
48
+ ostk/astrodynamics/test/flight/test_profile.py,sha256=FOYo-GXGTCtXhKQosXqX6hhrkXPrSyenPkM1lazyEEc,4819
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,9 +58,9 @@ 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=YZw-9n_gWCD43qxxg1zWh4JLx5qbvrlyFM2O4IjH1mY,2168
61
+ ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py,sha256=33SuZgkXEgYwXhFftRBaSr9Vv60DDJBi5MiXD5H-n6A,2173
60
62
  ostk/astrodynamics/test/trajectory/test_model.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
61
- ostk/astrodynamics/test/trajectory/test_orbit.py,sha256=8wq2QdW1h95M0O-YjTPOIAkB2xO8uNsmGFzVPQHJm6s,5064
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
65
  ostk/astrodynamics/test/trajectory/test_segment.py,sha256=ACVMYvjlTyCQHZ2-hFEurK08-LQxt6VlcGTMOrgDHaE,9333
64
66
  ostk/astrodynamics/test/trajectory/test_sequence.py,sha256=gswWqEBTYvbi5TQjF0DNPkAj5COo9Nb9IK7TdwJ_5C0,12882
@@ -66,7 +68,7 @@ ostk/astrodynamics/test/trajectory/test_state.py,sha256=PZUpGZKMFRDIyDAfKvSMmmOk
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
@@ -85,14 +87,14 @@ ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py,sha256=H42bc4
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.0.4.dist-info/METADATA,sha256=tGiM6xZM7WH4Q_Id4tdX_kYoIJaQA4n4FCEn4O87E4Y,1777
95
- open_space_toolkit_astrodynamics-9.0.4.dist-info/WHEEL,sha256=uB5vyLu5FjXBtaffidQd32CfRXuOj_Nofldz4r8m62s,112
96
- open_space_toolkit_astrodynamics-9.0.4.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
97
- open_space_toolkit_astrodynamics-9.0.4.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
98
- open_space_toolkit_astrodynamics-9.0.4.dist-info/RECORD,,
96
+ open_space_toolkit_astrodynamics-11.1.0.dist-info/METADATA,sha256=yYiRpTugeOyvQWU2cK_8raeWP7cLw3GtemFlFxudmqU,1916
97
+ open_space_toolkit_astrodynamics-11.1.0.dist-info/WHEEL,sha256=qqN5URp-VURm8LPVcwSxCMMwBbCqD2CU32siGCKjjV0,111
98
+ open_space_toolkit_astrodynamics-11.1.0.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
99
+ open_space_toolkit_astrodynamics-11.1.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
100
+ open_space_toolkit_astrodynamics-11.1.0.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: py310-none-manylinux2014_aarch64
5
5
 
@@ -1,18 +1,10 @@
1
1
  # Apache License 2.0
2
2
 
3
- from datetime import datetime, timedelta, timezone
4
-
5
- import numpy as np
6
-
7
- from ostk.mathematics.geometry.d3.transformation.rotation import Quaternion
3
+ from datetime import datetime, timezone
8
4
 
9
5
  from ostk.physics.time import Instant
10
6
  from ostk.physics.time import Interval
11
- from ostk.physics.time import Duration
12
7
  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
8
 
17
9
 
18
10
  def coerce_to_datetime(value: Instant | datetime | str) -> datetime:
@@ -33,6 +25,9 @@ def coerce_to_datetime(value: Instant | datetime | str) -> datetime:
33
25
  return value.get_date_time(Scale.UTC).replace(tzinfo=timezone.utc)
34
26
 
35
27
  if isinstance(value, str):
28
+ if value.endswith("Z"):
29
+ value = value.replace("Z", "+00:00")
30
+
36
31
  return datetime.fromisoformat(value)
37
32
 
38
33
  raise TypeError("Argument must be a datetime, an Instant, or a str.")
@@ -61,9 +56,7 @@ def coerce_to_instant(value: Instant | datetime | str) -> Instant:
61
56
  raise TypeError("Argument must be a datetime, an Instant, or a str.")
62
57
 
63
58
 
64
- def coerce_to_iso(
65
- value: Instant | datetime | str, timespec: str = "microseconds"
66
- ) -> Instant:
59
+ def coerce_to_iso(value: Instant | datetime | str, timespec: str = "microseconds") -> str:
67
60
  """
68
61
  Return an ISO string from value.
69
62
 
@@ -88,13 +81,15 @@ def coerce_to_iso(
88
81
 
89
82
 
90
83
  def coerce_to_interval(
91
- value: Interval | tuple[Instant, Instant] | tuple[datetime, datetime],
84
+ value: (
85
+ Interval | tuple[Instant, Instant] | tuple[datetime, datetime] | tuple[str, str]
86
+ ),
92
87
  ) -> Interval:
93
88
  """
94
89
  Return Interval from value.
95
90
 
96
91
  Args:
97
- value (Interval | tuple[Instant, Instant] | tuple[datetime, datetime]): A value to coerce.
92
+ value (Interval | tuple[Instant, Instant] | tuple[datetime, datetime] | tuple[str, str]): A value to coerce.
98
93
 
99
94
  Returns:
100
95
  Interval: The coerced Interval.
@@ -107,81 +102,3 @@ def coerce_to_interval(
107
102
  start_instant=coerce_to_instant(value[0]),
108
103
  end_instant=coerce_to_instant(value[1]),
109
104
  )
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)