open-space-toolkit-astrodynamics 9.0.4__py310-none-manylinux2014_aarch64.whl → 9.5.1__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: open-space-toolkit-astrodynamics
3
- Version: 9.0.4
3
+ Version: 9.5.1
4
4
  Summary: Orbit, attitude, access.
5
5
  Author: Open Space Collective
6
6
  Author-email: contact@open-space-collective.org
@@ -11,7 +11,11 @@ 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 ~=3.1
15
+ Requires-Dist: open-space-toolkit-io ~=3.0
16
+ Requires-Dist: open-space-toolkit-mathematics ~=3.1
17
+ Requires-Dist: open-space-toolkit-physics ~=7.1
18
+ Requires-Dist: numpy ~=2.0
15
19
 
16
20
  # Open Space Toolkit ▸ Astrodynamics
17
21
 
@@ -1,9 +1,9 @@
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=gNmkMzA8-FUedB6qqcVu4_Gmak1cKiI_to8LAkuX7J8,1951536
3
3
  ostk/astrodynamics/__init__.py,sha256=3gWyqFIbhAfcdeMhmfBPQPlPQTmaOzm-6flkJe745Zk,251
4
- ostk/astrodynamics/converters.py,sha256=IUxJK5qNzDMsqMSiMT6hUThCjncKoIMW0ifu8kwbww0,4680
4
+ ostk/astrodynamics/converters.py,sha256=vsm7SHdlPIyIxW1h5ZGAizl284koGaRmyPCu--AQJfA,4670
5
5
  ostk/astrodynamics/display.py,sha256=KiEGsjNftQfoUe-HfZeYpQQQ4TkaEnxtEl6p5_LX5f0,6303
6
- ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.9,sha256=skYZi-mPCQJZYBnNSE3EE4-gW9q1qU5szyPbC4rD1go,3190224
6
+ ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.9,sha256=Qhnp5xTxUOkdDa5gooVKSwDktMGrd94i-73Z83EDoIk,3228576
7
7
  ostk/astrodynamics/utilities.py,sha256=Jw-AT9CU-a2ERDDSNp7rEhZQKhbmZSCr2flGti9XysU,4813
8
8
  ostk/astrodynamics/viewer.py,sha256=8UxqsvU5wui7gPUwxXaKcIB-509NJiih9Df3mQgXyXY,11776
9
9
  ostk/astrodynamics/pytrajectory/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
@@ -17,7 +17,7 @@ ostk/astrodynamics/test/test_event_condition.py,sha256=mhMTH7wAoYFWRYt_8l2d1vjNP
17
17
  ostk/astrodynamics/test/test_import.py,sha256=py_hALBR0IYuUzv9dfgQZzrrLHJIpnyKvt3Oi1XBqCg,1251
18
18
  ostk/astrodynamics/test/test_root_solver.py,sha256=hQ8O6g-WP49gZH_H3Rdufv0F0gQorpzJyIcjBGGUQ34,1831
19
19
  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
20
+ ostk/astrodynamics/test/test_utilities.py,sha256=kw8quvFTRuoXTbdNdac6IWrjnmA897btNntTMBn-30Q,3614
21
21
  ostk/astrodynamics/test/test_viewer.py,sha256=rbVAiclzBZ1bS4Zdh4xUNJ-STCN4G0O7Gr8suSPJrSc,3986
22
22
  ostk/astrodynamics/test/access/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
23
23
  ostk/astrodynamics/test/access/test_generator.py,sha256=7l_MJCZIhWIyPpZ-XouBXlSd5-BfqFDGVOMMxjoRIHA,8032
@@ -42,7 +42,7 @@ ostk/astrodynamics/test/event_condition/test_instant_condition.py,sha256=Qr5dN6n
42
42
  ostk/astrodynamics/test/event_condition/test_logical_condition.py,sha256=09h5TYWtwGt4NQW3k_tziiVs0Q2981rNII9wyKg7p2Q,3321
43
43
  ostk/astrodynamics/test/event_condition/test_real_condition.py,sha256=tle6HVzMFMIIkfRY7CuaA0mPtw3riJBG_JQkc1L0dpk,1374
44
44
  ostk/astrodynamics/test/flight/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
45
- ostk/astrodynamics/test/flight/test_maneuver.py,sha256=qE5kvdJAIJdmYrk_9qcG5gxgaNgqTdxi13GzhkTeXVY,6334
45
+ ostk/astrodynamics/test/flight/test_maneuver.py,sha256=6LhnNhaiwId-IveUraHnhx8dYxeOgzntP_WPtv9GFjQ,6197
46
46
  ostk/astrodynamics/test/flight/test_profile.py,sha256=RULN-34ERmlZjgNQe6Kj797dklJBKAm-QYUIqitxvwA,5185
47
47
  ostk/astrodynamics/test/flight/test_system.py,sha256=MVaE7lJYisH4vmJPD-G-Hw4wNj-Xe8yMksgu8IXCLvg,1322
48
48
  ostk/astrodynamics/test/flight/system/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
@@ -56,9 +56,9 @@ ostk/astrodynamics/test/solvers/test_finite_difference_solver.py,sha256=49hS9EF7
56
56
  ostk/astrodynamics/test/solvers/test_temporal_condition_solver.py,sha256=ukDuIiEbBBvfqbHfiMIsPk5eyeRsWywCvNT1A3YnmIQ,4862
57
57
  ostk/astrodynamics/test/trajectory/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
58
58
  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
59
+ ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py,sha256=33SuZgkXEgYwXhFftRBaSr9Vv60DDJBi5MiXD5H-n6A,2173
60
60
  ostk/astrodynamics/test/trajectory/test_model.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
61
- ostk/astrodynamics/test/trajectory/test_orbit.py,sha256=8wq2QdW1h95M0O-YjTPOIAkB2xO8uNsmGFzVPQHJm6s,5064
61
+ ostk/astrodynamics/test/trajectory/test_orbit.py,sha256=iKVgScEo1osMIXjON4ToURCgp2LDZV18fKQuy49RktI,6484
62
62
  ostk/astrodynamics/test/trajectory/test_propagator.py,sha256=dG31S5FY0NjJ5bnisqJ_HdL7amj_AZAWWLiOmdHfJAc,14233
63
63
  ostk/astrodynamics/test/trajectory/test_segment.py,sha256=ACVMYvjlTyCQHZ2-hFEurK08-LQxt6VlcGTMOrgDHaE,9333
64
64
  ostk/astrodynamics/test/trajectory/test_sequence.py,sha256=gswWqEBTYvbi5TQjF0DNPkAj5COo9Nb9IK7TdwJ_5C0,12882
@@ -66,7 +66,7 @@ ostk/astrodynamics/test/trajectory/test_state.py,sha256=PZUpGZKMFRDIyDAfKvSMmmOk
66
66
  ostk/astrodynamics/test/trajectory/test_state_builder.py,sha256=PSlXtmGURCrlf0w50tn3dEBRo6p0x4NmIF9gJsNOR3k,4782
67
67
  ostk/astrodynamics/test/trajectory/orbit/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
68
68
  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
69
+ ostk/astrodynamics/test/trajectory/orbit/test_pass.py,sha256=LTHDGW26I0kujifCXFMcUFu9yaHMeUoIM-7jt6kJkJU,2492
70
70
  ostk/astrodynamics/test/trajectory/orbit/message/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
71
71
  ostk/astrodynamics/test/trajectory/orbit/message/spacex/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
72
72
  ostk/astrodynamics/test/trajectory/orbit/message/spacex/conftest.py,sha256=O75ywkPJjoFp0uKptCu4C2tGMRaGN-8NVFVhps85eWE,379
@@ -85,14 +85,14 @@ ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py,sha256=H42bc4
85
85
  ostk/astrodynamics/test/trajectory/orbit/models/sgp4/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
86
86
  ostk/astrodynamics/test/trajectory/orbit/models/sgp4/test_tle.py,sha256=jkyRr5NJQMaSpI3ey7cKcH0E-BlalaUlf_mZPYTSow8,11482
87
87
  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
88
+ ostk/astrodynamics/test/trajectory/state/test_coordinate_subset.py,sha256=KjltLEPbxMfyebwjG5mulyGCT5INtiItPq6ID6sP9jI,1289
89
89
  ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py,sha256=_t4OKnYLzTjOhSkVTgT2307DQkz_DnGxqqLx8mmzLRA,9389
90
90
  ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_angular_velocity.py,sha256=xjyGREKpxDuT8gjtBPkV4osfW-6UyWv9hgvBXZVb_wk,625
91
91
  ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_attitude_quaternion.py,sha256=UEu9ApzQLmT87eeISw6_gcHTlX-4b2scIvHz-uE1p_c,393
92
92
  ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_position.py,sha256=XvHdk1KjacTwtkgx2jUAc9I9N3nvjPDv03FAanpv8jQ,2702
93
93
  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,,
94
+ open_space_toolkit_astrodynamics-9.5.1.dist-info/METADATA,sha256=SnSApapQCvGrDtsRxuvNDEMnBLFIKveAo7veASPUWyQ,1942
95
+ open_space_toolkit_astrodynamics-9.5.1.dist-info/WHEEL,sha256=uB5vyLu5FjXBtaffidQd32CfRXuOj_Nofldz4r8m62s,112
96
+ open_space_toolkit_astrodynamics-9.5.1.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
97
+ open_space_toolkit_astrodynamics-9.5.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
98
+ open_space_toolkit_astrodynamics-9.5.1.dist-info/RECORD,,
@@ -61,9 +61,7 @@ def coerce_to_instant(value: Instant | datetime | str) -> Instant:
61
61
  raise TypeError("Argument must be a datetime, an Instant, or a str.")
62
62
 
63
63
 
64
- def coerce_to_iso(
65
- value: Instant | datetime | str, timespec: str = "microseconds"
66
- ) -> Instant:
64
+ def coerce_to_iso(value: Instant | datetime | str, timespec: str = "microseconds") -> str:
67
65
  """
68
66
  Return an ISO string from value.
69
67
 
@@ -131,23 +131,20 @@ class TestManeuver:
131
131
  self,
132
132
  maneuver: Maneuver,
133
133
  ):
134
- assert float(maneuver.calculate_delta_v()) == pytest.approx(0.001394181, rel=1e-4)
135
-
136
- assert float(maneuver.calculate_delta_mass().in_kilograms()) == pytest.approx(
137
- 1.26e-4, rel=1e-4
138
- )
139
-
140
- assert float(
134
+ assert maneuver.calculate_delta_v() is not None
135
+ assert maneuver.calculate_delta_mass().in_kilograms() is not None
136
+ assert (
141
137
  maneuver.calculate_average_thrust(
142
138
  initial_spacecraft_mass=Mass(100.0, Mass.Unit.Kilogram)
143
139
  )
144
- ) == pytest.approx(0.13941806994799905, rel=1e-4)
145
-
146
- assert float(
140
+ is not None
141
+ )
142
+ assert (
147
143
  maneuver.calculate_average_specific_impulse(
148
144
  initial_spacecraft_mass=Mass(100.0, Mass.Unit.Kilogram)
149
145
  )
150
- ) == pytest.approx(789.816, rel=1e-4)
146
+ is not None
147
+ )
151
148
 
152
149
  def test_to_tabulated_dynamics(
153
150
  self,
@@ -86,9 +86,9 @@ class TestUtility:
86
86
  position: Position,
87
87
  environment: Environment,
88
88
  ):
89
- time_lla_aer: float[
90
- Instant, float, float, float, float, float, float
91
- ] = utilities.compute_time_lla_aer_state(state, position, environment)
89
+ time_lla_aer: float[Instant, float, float, float, float, float, float] = (
90
+ utilities.compute_time_lla_aer_state(state, position, environment)
91
+ )
92
92
 
93
93
  assert time_lla_aer is not None
94
94
  assert len(time_lla_aer) == 7
@@ -41,6 +41,15 @@ class TestPass:
41
41
  def test_get_duration(self, pass_: Pass):
42
42
  assert pass_.get_duration() is not None
43
43
 
44
+ def test_get_start_instant(self, pass_: Pass):
45
+ assert pass_.get_start_instant() is not None
46
+
47
+ def test_get_end_instant(self, pass_: Pass):
48
+ assert pass_.get_end_instant() is not None
49
+
50
+ def test_get_interval(self, pass_: Pass):
51
+ assert pass_.get_interval() is not None
52
+
44
53
  def test_get_instant_at_ascending_node(self, pass_: Pass):
45
54
  assert pass_.get_instant_at_ascending_node() is not None
46
55
 
@@ -30,6 +30,9 @@ class TestCoordinateSubset:
30
30
  def test_ne(self, coordinate_subset: CoordinateSubset):
31
31
  assert (coordinate_subset != coordinate_subset) == False
32
32
 
33
+ def test_hash(self, coordinate_subset: CoordinateSubset):
34
+ assert hash(coordinate_subset) is not None
35
+
33
36
  def test_get_id(self, coordinate_subset: CoordinateSubset):
34
37
  assert coordinate_subset.get_id() is not None
35
38
 
@@ -46,12 +46,12 @@ class TestLocalOrbitalFrameFactory:
46
46
  assert LocalOrbitalFrameFactory.TNW(Frame.GCRF()) is not None
47
47
  assert LocalOrbitalFrameFactory.VVLH(Frame.GCRF()) is not None
48
48
 
49
- def test_getters(
49
+ def test_accessors(
50
50
  self,
51
51
  parent_frame: Frame,
52
52
  local_orbital_frame_factory: LocalOrbitalFrameFactory,
53
53
  ):
54
- assert parent_frame == local_orbital_frame_factory.get_parent_frame()
54
+ assert parent_frame == local_orbital_frame_factory.access_parent_frame()
55
55
 
56
56
  def test_generate_frame(
57
57
  self,
@@ -58,6 +58,22 @@ class TestOrbit:
58
58
  assert state is not None
59
59
  assert isinstance(state, State)
60
60
 
61
+ @pytest.mark.parametrize(
62
+ "frame_type",
63
+ [
64
+ (Orbit.FrameType.NED),
65
+ (Orbit.FrameType.LVLH),
66
+ (Orbit.FrameType.VVLH),
67
+ (Orbit.FrameType.LVLHGD),
68
+ (Orbit.FrameType.LVLHGDGT),
69
+ (Orbit.FrameType.QSW),
70
+ (Orbit.FrameType.TNW),
71
+ (Orbit.FrameType.VNC),
72
+ ],
73
+ )
74
+ def test_get_orbital_frame(self, orbit: Orbit, frame_type: Orbit.FrameType):
75
+ assert orbit.get_orbital_frame(frame_type) is not None
76
+
61
77
  def test_get_revolution_number_at(self, orbit: Orbit):
62
78
  assert (
63
79
  orbit.get_revolution_number_at(
@@ -82,6 +98,20 @@ class TestOrbit:
82
98
  assert isinstance(pass_, Pass)
83
99
  assert pass_.is_defined()
84
100
 
101
+ assert (
102
+ orbit.get_pass_with_revolution_number(2, Duration.minutes(10.0)) is not None
103
+ )
104
+
105
+ def test_get_passes_within_interval(self, orbit: Orbit):
106
+ passes: list[Pass] = orbit.get_passes_within_interval(
107
+ Interval.closed(
108
+ Instant.date_time(DateTime(2018, 1, 1, 0, 0, 0), Scale.UTC),
109
+ Instant.date_time(DateTime(2018, 1, 1, 0, 10, 0), Scale.UTC),
110
+ )
111
+ )
112
+
113
+ assert len(passes) > 0
114
+
85
115
  def test_undefined(self):
86
116
  assert Orbit.undefined().is_defined() is False
87
117
 
@@ -151,6 +181,16 @@ class TestOrbit:
151
181
  argument_of_latitude=Angle.degrees(50.0),
152
182
  ).is_defined()
153
183
 
154
- def test_compute_passes(self, orbit: Orbit, states: list[State]):
155
- passes: list[tuple[int, Pass]] = orbit.compute_passes(states, 1)
184
+ def test_compute_passes(self, states: list[State]):
185
+ passes: list[tuple[int, Pass]] = Orbit.compute_passes(states, 1)
156
186
  assert passes is not None
187
+
188
+ def test_compute_passes_with_model(self, orbit: Orbit):
189
+ passes: list[tuple[int, Pass]] = Orbit.compute_passes_with_model(
190
+ model=orbit.access_kepler_model(),
191
+ start_instant=Instant.date_time(DateTime(2018, 1, 1, 0, 0, 0), Scale.UTC),
192
+ end_instant=Instant.date_time(DateTime(2018, 1, 1, 0, 10, 0), Scale.UTC),
193
+ initial_revolution_number=1,
194
+ )
195
+
196
+ assert len(passes) > 0