open-space-toolkit-astrodynamics 16.2.0__py313-none-manylinux2014_aarch64.whl → 16.4.0__py313-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-16.2.0.dist-info → open_space_toolkit_astrodynamics-16.4.0.dist-info}/METADATA +1 -1
- {open_space_toolkit_astrodynamics-16.2.0.dist-info → open_space_toolkit_astrodynamics-16.4.0.dist-info}/RECORD +21 -16
- ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-313-aarch64-linux-gnu.so +0 -0
- ostk/astrodynamics/__init__.pyi +4 -4
- ostk/astrodynamics/flight/__init__.pyi +18 -9
- ostk/astrodynamics/flight/profile/model.pyi +19 -0
- ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.16 +0 -0
- ostk/astrodynamics/test/flight/profile/model/test_tabulated_profile.py +115 -0
- ostk/astrodynamics/test/flight/test_profile.py +4 -0
- ostk/astrodynamics/test/test_display.py +0 -2
- ostk/astrodynamics/test/test_trajectory.py +28 -7
- ostk/astrodynamics/test/test_viewer.py +56 -0
- ostk/astrodynamics/test/trajectory/model/test_nadir_trajectory.py +87 -0
- ostk/astrodynamics/test/trajectory/model/test_tabulated_trajectory.py +303 -0
- ostk/astrodynamics/test/trajectory/model/test_target_scan_trajectory.py +126 -0
- ostk/astrodynamics/trajectory/__init__.pyi +10 -9
- ostk/astrodynamics/trajectory/model.pyi +259 -0
- ostk/astrodynamics/viewer.py +316 -14
- {open_space_toolkit_astrodynamics-16.2.0.dist-info → open_space_toolkit_astrodynamics-16.4.0.dist-info}/WHEEL +0 -0
- {open_space_toolkit_astrodynamics-16.2.0.dist-info → open_space_toolkit_astrodynamics-16.4.0.dist-info}/top_level.txt +0 -0
- {open_space_toolkit_astrodynamics-16.2.0.dist-info → open_space_toolkit_astrodynamics-16.4.0.dist-info}/zip-safe +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
ostk/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
2
|
-
ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-313-aarch64-linux-gnu.so,sha256=
|
2
|
+
ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-313-aarch64-linux-gnu.so,sha256=XQqQd53--_BbDnFDA8GmFp0m-1Y_e65pCLwkaJH7Kn0,2599232
|
3
3
|
ostk/astrodynamics/__init__.py,sha256=3gWyqFIbhAfcdeMhmfBPQPlPQTmaOzm-6flkJe745Zk,251
|
4
|
-
ostk/astrodynamics/__init__.pyi,sha256=
|
4
|
+
ostk/astrodynamics/__init__.pyi,sha256=VwymtmEM-WcRIds_fQS0z5BStoTfJ-IrR-7SuoSF_dY,32191
|
5
5
|
ostk/astrodynamics/access.pyi,sha256=t2CF0TU6_6ow_rkV_I4rVKap7ZIdC4jYKL3WkTDHRXg,25157
|
6
6
|
ostk/astrodynamics/converters.py,sha256=luPh30qMp9bzEkN7hUccmxlLf7zRp_AzqmBe8IUjPhU,3314
|
7
7
|
ostk/astrodynamics/converters.pyi,sha256=tTUT0xGbiUkKxUj79Hq5EEtxV3b2uR6Wsnj_vwyj-mk,1625
|
@@ -11,19 +11,19 @@ ostk/astrodynamics/dynamics.pyi,sha256=gZ95KoGex4SB-1z6yMrngkZN1Ir9X6bEmrZgdLxq1
|
|
11
11
|
ostk/astrodynamics/estimator.pyi,sha256=MnahWzp8aACxrNKWlYRsgQr5zpBxogNr-yPm7hJob5k,14000
|
12
12
|
ostk/astrodynamics/event_condition.pyi,sha256=2c_1Sq7tkYKeAA_aRWBi43KDQXXxu6EMSmUpEWz_Fa4,45814
|
13
13
|
ostk/astrodynamics/guidance_law.pyi,sha256=rVmbpV2Y5FsIXejaInxINS67nVHmTIxVEkhaDIn17SA,12171
|
14
|
-
ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.16,sha256=
|
14
|
+
ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.16,sha256=MEfhg-xZLWaMKrzjgnS3iA69EmTF4qfiH42uv0G_954,3930832
|
15
15
|
ostk/astrodynamics/solver.pyi,sha256=sPqyYPXBfFGC24dzzYyFyt01VfMAlWQ5_gh_RpeaBFk,17734
|
16
16
|
ostk/astrodynamics/utilities.py,sha256=y8mr3M46J5z-GhS1oIEnuEJA6otwcyJ9YDhvn_5JxHM,6976
|
17
|
-
ostk/astrodynamics/viewer.py,sha256=
|
17
|
+
ostk/astrodynamics/viewer.py,sha256=SlKyOWKjaF3V9HFB3I7ZgHy7n_GLeHTWM9q2wXkpxe8,27077
|
18
18
|
ostk/astrodynamics/conjunction/__init__.pyi,sha256=HFvWl8bCmrq3cBkUh5X5RGIh8webmVGxaZdpsz3WN-E,79
|
19
19
|
ostk/astrodynamics/conjunction/message/__init__.pyi,sha256=5H__sg_QUx7ybf9jtVWvXzrUHeK3ECotfhddAdHjJUc,75
|
20
20
|
ostk/astrodynamics/conjunction/message/ccsds.pyi,sha256=1Peto19hRqlD7KHf1cyLP3CT4OAKzwtemqvO6_4FZ0g,28162
|
21
21
|
ostk/astrodynamics/data/__init__.pyi,sha256=4l_mfVbnU_L7wImwgTCe8fVI81gK_tUmd0z7BY9lLi8,81
|
22
22
|
ostk/astrodynamics/data/provider.pyi,sha256=O4Lg9FBq9itufgATnic5SMg90pn8vJJJMUdNcWP72NI,1492
|
23
|
-
ostk/astrodynamics/flight/__init__.pyi,sha256=
|
23
|
+
ostk/astrodynamics/flight/__init__.pyi,sha256=f7hDDcisAtBE86w5s0d0M2N_m3Rjlh2pWGWFTdnoaGw,23058
|
24
24
|
ostk/astrodynamics/flight/system.pyi,sha256=WVxy6Oe4q3C81c0AOxSwAmnwUHcpXO7JCEvESjs2g4A,10508
|
25
25
|
ostk/astrodynamics/flight/profile/__init__.pyi,sha256=WBTG17V59UwD-X1r6TOrXT_rA3WjKY-2ML1cWfji_4g,3688
|
26
|
-
ostk/astrodynamics/flight/profile/model.pyi,sha256=
|
26
|
+
ostk/astrodynamics/flight/profile/model.pyi,sha256=wwnVaTjTytxPqKyNo1tpdZRedabQlIHgyxfT0nivO5M,7777
|
27
27
|
ostk/astrodynamics/pytrajectory/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
28
28
|
ostk/astrodynamics/pytrajectory/__init__.pyi,sha256=QWrGyQNiICBEI3pKku2wJYdu-SQCBKXjJ_93XTEgkP8,79
|
29
29
|
ostk/astrodynamics/pytrajectory/pystate.py,sha256=HbWtj1_FXGXTuvSu52ewMaO3ahwLBLStyJ4e5xqL-jw,8415
|
@@ -33,13 +33,13 @@ ostk/astrodynamics/test/conftest.py,sha256=stmQOt7UXjBlXKJzNN6RkS2miv1xXSOX-YNpF
|
|
33
33
|
ostk/astrodynamics/test/test_access.py,sha256=MCBsUPtuVm7NgHZR0z0DpWnPZ_qBu4aRhLI2PnRNUYs,3940
|
34
34
|
ostk/astrodynamics/test/test_converters.py,sha256=mFpDD0YM8o356lj91GGIwYdMk2ut6xZFV3uYcgZepMY,8744
|
35
35
|
ostk/astrodynamics/test/test_dataframe.py,sha256=NddmwnV8R1QgTD_iLXn_h0xK2kP5Qk22Oh93hF6KjT0,38300
|
36
|
-
ostk/astrodynamics/test/test_display.py,sha256=
|
36
|
+
ostk/astrodynamics/test/test_display.py,sha256=CQEz66OZna6W8_ZIEVCPKAH-cM9YjzCOGpoINqC8m40,3840
|
37
37
|
ostk/astrodynamics/test/test_event_condition.py,sha256=fQ-rVYpQsa7xacxRMBOQDyn61CuAGX1QBOGZxGWR0_s,2204
|
38
38
|
ostk/astrodynamics/test/test_import.py,sha256=py_hALBR0IYuUzv9dfgQZzrrLHJIpnyKvt3Oi1XBqCg,1251
|
39
39
|
ostk/astrodynamics/test/test_root_solver.py,sha256=hQ8O6g-WP49gZH_H3Rdufv0F0gQorpzJyIcjBGGUQ34,1831
|
40
|
-
ostk/astrodynamics/test/test_trajectory.py,sha256=
|
40
|
+
ostk/astrodynamics/test/test_trajectory.py,sha256=8J9NAAn5s2SvaIScUoM7GtStI7-4-xffrBwg4ph7Ppw,4096
|
41
41
|
ostk/astrodynamics/test/test_utilities.py,sha256=NNIyzqOxMdsNpK2z0wU0utX06iZNfbMJDE36Upard28,3048
|
42
|
-
ostk/astrodynamics/test/test_viewer.py,sha256=
|
42
|
+
ostk/astrodynamics/test/test_viewer.py,sha256=6IxHjSrwnLkmLiTTzRcnwAdEeWdIF_b2Kjz5iCqwctw,10912
|
43
43
|
ostk/astrodynamics/test/access/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
44
44
|
ostk/astrodynamics/test/access/test_generator.py,sha256=i7TnM80kF0Q_9KmyoqKt5n1ufg3ZjAIEMPVVds8ZDdI,10315
|
45
45
|
ostk/astrodynamics/test/access/test_visibility_criterion.py,sha256=VA6WDQTj3q-f2YGIIkrrNp8G23Nf_0g9nKmfZAgAlWQ,6568
|
@@ -69,8 +69,9 @@ ostk/astrodynamics/test/event_condition/test_logical_condition.py,sha256=09h5TYW
|
|
69
69
|
ostk/astrodynamics/test/event_condition/test_real_condition.py,sha256=tle6HVzMFMIIkfRY7CuaA0mPtw3riJBG_JQkc1L0dpk,1374
|
70
70
|
ostk/astrodynamics/test/flight/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
71
71
|
ostk/astrodynamics/test/flight/test_maneuver.py,sha256=HonAvD9qtax72lizoDLR6ELI-poC3LWk_umg-WYygYA,5388
|
72
|
-
ostk/astrodynamics/test/flight/test_profile.py,sha256=
|
72
|
+
ostk/astrodynamics/test/flight/test_profile.py,sha256=lfTGy9l2rAhHsmLZCdE-kzy-s_-EgXIZwfGs_7f8UPo,8205
|
73
73
|
ostk/astrodynamics/test/flight/test_system.py,sha256=5kJCULHdpkwAC7i6xLV7vdJnGfOdrOuhi0G22p_L160,1224
|
74
|
+
ostk/astrodynamics/test/flight/profile/model/test_tabulated_profile.py,sha256=NZVa9dXzp4UDmohAlBaYeY594CPbqIv5j3VSEzlbYHk,3168
|
74
75
|
ostk/astrodynamics/test/flight/system/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
75
76
|
ostk/astrodynamics/test/flight/system/test_propulsion_system.py,sha256=SoxOt-fjHvs_86f6Xb3jAsHDOShJ6Puz7eO5wrqibaM,1835
|
76
77
|
ostk/astrodynamics/test/flight/system/test_satellite_system.py,sha256=dCFcl2RKiLxDKLI0sytPBXr3vHOFQIVNNCzpw5WzlAA,2437
|
@@ -91,6 +92,9 @@ ostk/astrodynamics/test/trajectory/test_segment.py,sha256=aXdF5CpNLwN_hKRU5sG3ID
|
|
91
92
|
ostk/astrodynamics/test/trajectory/test_sequence.py,sha256=4piYpMZ9C_eCXxaOcdz2We67wZxhsNBnETgKwvq6dl0,15083
|
92
93
|
ostk/astrodynamics/test/trajectory/test_state.py,sha256=JO-SnUCRZ6sfVNwB5soT5c1f8c5DXuFN5lHZkiiTcYc,18119
|
93
94
|
ostk/astrodynamics/test/trajectory/test_state_builder.py,sha256=LpCCYdCaLu_D2npm9wgA2sMlcekrtbRqP-afe5IE5L4,4871
|
95
|
+
ostk/astrodynamics/test/trajectory/model/test_nadir_trajectory.py,sha256=AzXLO7qqcGnN7Pu7T_ue16wGcLodj9aH-xsZnk5KRMM,2219
|
96
|
+
ostk/astrodynamics/test/trajectory/model/test_tabulated_trajectory.py,sha256=zbjI5mFkJOgyO_e8i0-RN1jhq2nIOs0dAJbkrP9nTYI,8405
|
97
|
+
ostk/astrodynamics/test/trajectory/model/test_target_scan_trajectory.py,sha256=zSIkTP1sggEU58obPjbtdhO5xnWUJQ2XNkK_zUP6jdY,3253
|
94
98
|
ostk/astrodynamics/test/trajectory/orbit/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
95
99
|
ostk/astrodynamics/test/trajectory/orbit/test_model.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
96
100
|
ostk/astrodynamics/test/trajectory/orbit/test_pass.py,sha256=LTHDGW26I0kujifCXFMcUFu9yaHMeUoIM-7jt6kJkJU,2492
|
@@ -119,7 +123,8 @@ ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_attitude_quatern
|
|
119
123
|
ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_acceleration.py,sha256=1p37_FYN85d9SrOqO3iCkNecovJJayhnFeZ4QCOw2ao,3528
|
120
124
|
ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_position.py,sha256=XvHdk1KjacTwtkgx2jUAc9I9N3nvjPDv03FAanpv8jQ,2702
|
121
125
|
ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_velocity.py,sha256=-kd5TZO5TICihbkqDTew2i_tDpggdpe3Yf23046FATM,3057
|
122
|
-
ostk/astrodynamics/trajectory/__init__.pyi,sha256=
|
126
|
+
ostk/astrodynamics/trajectory/__init__.pyi,sha256=O-hq2r271NJq8Djm4utNtCdGgPJyVd3brFMpu_KUQkg,76275
|
127
|
+
ostk/astrodynamics/trajectory/model.pyi,sha256=SIneZx3pQ6XAo6iBccr4B1OsATbs1PEsCngtaTvja00,10473
|
123
128
|
ostk/astrodynamics/trajectory/orbit/__init__.pyi,sha256=wbuRK7Yp_NYBr3ta5-NpnJYMX4baUl7yIlUWhaRlR4o,12899
|
124
129
|
ostk/astrodynamics/trajectory/orbit/message/__init__.pyi,sha256=-GNBlYPrsjelhKxWorYQYhIWzFsibiIQNZvMXjhRpfM,77
|
125
130
|
ostk/astrodynamics/trajectory/orbit/message/spacex.pyi,sha256=fnUVJGWlSPo8AmLVuu08LubsAuVGo-gFaT86yd4f4CI,10558
|
@@ -129,8 +134,8 @@ ostk/astrodynamics/trajectory/orbit/model/kepler.pyi,sha256=OZMznHuU7e6m1rfqtOgX
|
|
129
134
|
ostk/astrodynamics/trajectory/orbit/model/sgp4.pyi,sha256=OhFzoPPQHlYy7m3LiZ8TXF89M4uBTfNk6tGsBEp0sjI,14235
|
130
135
|
ostk/astrodynamics/trajectory/state/__init__.pyi,sha256=bq__Fii35czVrTeNxc9eQVjXdqwbbQxUdNQWK3vLrMo,17649
|
131
136
|
ostk/astrodynamics/trajectory/state/coordinate_subset.pyi,sha256=kYMfMwEjCqO1NepMYFT4QS6kIPBkVL6sGCLeLbogcMw,10176
|
132
|
-
open_space_toolkit_astrodynamics-16.
|
133
|
-
open_space_toolkit_astrodynamics-16.
|
134
|
-
open_space_toolkit_astrodynamics-16.
|
135
|
-
open_space_toolkit_astrodynamics-16.
|
136
|
-
open_space_toolkit_astrodynamics-16.
|
137
|
+
open_space_toolkit_astrodynamics-16.4.0.dist-info/METADATA,sha256=hmk7loB1mnnlXQ39BmWfd3MqBhiTKzoK0D1jIkGlVfk,1913
|
138
|
+
open_space_toolkit_astrodynamics-16.4.0.dist-info/WHEEL,sha256=SoYeZtqoiLCL_G4rzH07IDMwRvSqG334rWZuI48h-Rk,111
|
139
|
+
open_space_toolkit_astrodynamics-16.4.0.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
|
140
|
+
open_space_toolkit_astrodynamics-16.4.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
141
|
+
open_space_toolkit_astrodynamics-16.4.0.dist-info/RECORD,,
|
Binary file
|
ostk/astrodynamics/__init__.pyi
CHANGED
@@ -14,18 +14,18 @@ from ostk import mathematics as OpenSpaceToolkitMathematicsPy
|
|
14
14
|
from ostk.mathematics import curve_fitting
|
15
15
|
from ostk.mathematics import geometry
|
16
16
|
from ostk.mathematics import object
|
17
|
-
import ostk.physics
|
18
17
|
from ostk import physics as OpenSpaceToolkitPhysicsPy
|
18
|
+
import ostk.physics
|
19
19
|
from ostk.physics import Environment
|
20
20
|
from ostk.physics import Manager
|
21
21
|
from ostk.physics import Unit
|
22
|
-
from ostk.physics import coordinate
|
23
22
|
import ostk.physics.coordinate
|
23
|
+
from ostk.physics import coordinate
|
24
24
|
import ostk.physics.coordinate.spherical
|
25
25
|
from ostk.physics import environment
|
26
26
|
import ostk.physics.environment.object
|
27
|
-
from ostk.physics import time
|
28
27
|
import ostk.physics.time
|
28
|
+
from ostk.physics import time
|
29
29
|
from ostk.physics import unit
|
30
30
|
import ostk.physics.unit
|
31
31
|
import typing
|
@@ -682,7 +682,7 @@ class Trajectory:
|
|
682
682
|
celestial_object (Celestial): The celestial object. Defaults to Earth.WGS84().
|
683
683
|
|
684
684
|
Returns:
|
685
|
-
Trajectory: The `Trajectory` object representing the ground strip.
|
685
|
+
Trajectory: The `Trajectory` object representing the ground strip.
|
686
686
|
"""
|
687
687
|
@staticmethod
|
688
688
|
def position(position: ostk.physics.coordinate.Position) -> Trajectory:
|
@@ -252,12 +252,14 @@ class Profile:
|
|
252
252
|
|
253
253
|
GeodeticNadir : Geodetic nadir
|
254
254
|
|
255
|
-
Trajectory :
|
255
|
+
Trajectory : Deprecated - Use TargetPosition instead.
|
256
256
|
|
257
257
|
TargetPosition : Target position
|
258
258
|
|
259
259
|
TargetVelocity : Target velocity
|
260
260
|
|
261
|
+
TargetSlidingGroundVelocity : Target sliding ground velocity
|
262
|
+
|
261
263
|
Sun : Sun
|
262
264
|
|
263
265
|
Moon : Moon
|
@@ -272,16 +274,17 @@ class Profile:
|
|
272
274
|
"""
|
273
275
|
GeocentricNadir: typing.ClassVar[Profile.TargetType] # value = <TargetType.GeocentricNadir: 0>
|
274
276
|
GeodeticNadir: typing.ClassVar[Profile.TargetType] # value = <TargetType.GeodeticNadir: 1>
|
275
|
-
Moon: typing.ClassVar[Profile.TargetType] # value = <TargetType.Moon:
|
276
|
-
OrbitalMomentum: typing.ClassVar[Profile.TargetType] # value = <TargetType.OrbitalMomentum:
|
277
|
-
OrientationProfile: typing.ClassVar[Profile.TargetType] # value = <TargetType.OrientationProfile:
|
278
|
-
Sun: typing.ClassVar[Profile.TargetType] # value = <TargetType.Sun:
|
277
|
+
Moon: typing.ClassVar[Profile.TargetType] # value = <TargetType.Moon: 7>
|
278
|
+
OrbitalMomentum: typing.ClassVar[Profile.TargetType] # value = <TargetType.OrbitalMomentum: 10>
|
279
|
+
OrientationProfile: typing.ClassVar[Profile.TargetType] # value = <TargetType.OrientationProfile: 11>
|
280
|
+
Sun: typing.ClassVar[Profile.TargetType] # value = <TargetType.Sun: 6>
|
279
281
|
TargetPosition: typing.ClassVar[Profile.TargetType] # value = <TargetType.TargetPosition: 3>
|
282
|
+
TargetSlidingGroundVelocity: typing.ClassVar[Profile.TargetType] # value = <TargetType.TargetSlidingGroundVelocity: 5>
|
280
283
|
TargetVelocity: typing.ClassVar[Profile.TargetType] # value = <TargetType.TargetVelocity: 4>
|
281
284
|
Trajectory: typing.ClassVar[Profile.TargetType] # value = <TargetType.Trajectory: 2>
|
282
|
-
VelocityECEF: typing.ClassVar[Profile.TargetType] # value = <TargetType.VelocityECEF:
|
283
|
-
VelocityECI: typing.ClassVar[Profile.TargetType] # value = <TargetType.VelocityECI:
|
284
|
-
__members__: typing.ClassVar[dict[str, Profile.TargetType]] # value = {'GeocentricNadir': <TargetType.GeocentricNadir: 0>, 'GeodeticNadir': <TargetType.GeodeticNadir: 1>, 'Trajectory': <TargetType.Trajectory: 2>, 'TargetPosition': <TargetType.TargetPosition: 3>, 'TargetVelocity': <TargetType.TargetVelocity: 4>, 'Sun': <TargetType.Sun:
|
285
|
+
VelocityECEF: typing.ClassVar[Profile.TargetType] # value = <TargetType.VelocityECEF: 9>
|
286
|
+
VelocityECI: typing.ClassVar[Profile.TargetType] # value = <TargetType.VelocityECI: 8>
|
287
|
+
__members__: typing.ClassVar[dict[str, Profile.TargetType]] # value = {'GeocentricNadir': <TargetType.GeocentricNadir: 0>, 'GeodeticNadir': <TargetType.GeodeticNadir: 1>, 'Trajectory': <TargetType.Trajectory: 2>, 'TargetPosition': <TargetType.TargetPosition: 3>, 'TargetVelocity': <TargetType.TargetVelocity: 4>, 'TargetSlidingGroundVelocity': <TargetType.TargetSlidingGroundVelocity: 5>, 'Sun': <TargetType.Sun: 6>, 'Moon': <TargetType.Moon: 7>, 'VelocityECI': <TargetType.VelocityECI: 8>, 'VelocityECEF': <TargetType.VelocityECEF: 9>, 'OrbitalMomentum': <TargetType.OrbitalMomentum: 10>, 'OrientationProfile': <TargetType.OrientationProfile: 11>}
|
285
288
|
def __eq__(self, other: typing.Any) -> bool:
|
286
289
|
...
|
287
290
|
def __getstate__(self) -> int:
|
@@ -321,9 +324,15 @@ class Profile:
|
|
321
324
|
Create a target, which produces a vector pointing from the observer to the target position.
|
322
325
|
"""
|
323
326
|
@staticmethod
|
327
|
+
def target_sliding_ground_velocity(trajectory: ostk.astrodynamics.Trajectory, axis: Profile.Axis, anti_direction: bool = False) -> Profile.TrajectoryTarget:
|
328
|
+
"""
|
329
|
+
Create a target, which produces a vector pointing along the ground velocity vector (aka the scan direction of the point sliding across the ground).
|
330
|
+
This will compensate for the rotation of the referenced celestial body.
|
331
|
+
"""
|
332
|
+
@staticmethod
|
324
333
|
def target_velocity(trajectory: ostk.astrodynamics.Trajectory, axis: Profile.Axis, anti_direction: bool = False) -> Profile.TrajectoryTarget:
|
325
334
|
"""
|
326
|
-
Create a target, which produces a vector pointing along the
|
335
|
+
Create a target, which produces a vector pointing along the scan direction.
|
327
336
|
"""
|
328
337
|
def __init__(self, trajectory: ostk.astrodynamics.Trajectory, axis: Profile.Axis, anti_direction: bool = False) -> None:
|
329
338
|
"""
|
@@ -3,10 +3,12 @@ import ostk.astrodynamics
|
|
3
3
|
import ostk.astrodynamics.flight.profile
|
4
4
|
import ostk.astrodynamics.trajectory
|
5
5
|
import ostk.core.type
|
6
|
+
import ostk.mathematics.curve_fitting
|
6
7
|
import ostk.mathematics.geometry.d3.transformation.rotation
|
7
8
|
import ostk.physics.coordinate
|
8
9
|
import ostk.physics.coordinate.frame.provider
|
9
10
|
import ostk.physics.time
|
11
|
+
import typing
|
10
12
|
__all__ = ['Tabulated', 'Transform']
|
11
13
|
class Tabulated(ostk.astrodynamics.flight.profile.Model):
|
12
14
|
"""
|
@@ -15,6 +17,7 @@ class Tabulated(ostk.astrodynamics.flight.profile.Model):
|
|
15
17
|
|
16
18
|
|
17
19
|
"""
|
20
|
+
@typing.overload
|
18
21
|
def __init__(self, states: list[ostk.astrodynamics.trajectory.State]) -> None:
|
19
22
|
"""
|
20
23
|
Constructor.
|
@@ -22,6 +25,15 @@ class Tabulated(ostk.astrodynamics.flight.profile.Model):
|
|
22
25
|
Args:
|
23
26
|
states (Array[State]): The states of the model.
|
24
27
|
"""
|
28
|
+
@typing.overload
|
29
|
+
def __init__(self, states: list[ostk.astrodynamics.trajectory.State], interpolator_type: ostk.mathematics.curve_fitting.Interpolator.Type) -> None:
|
30
|
+
"""
|
31
|
+
Constructor.
|
32
|
+
|
33
|
+
Args:
|
34
|
+
states (Array[State]): The states of the model.
|
35
|
+
interpolator_type (Interpolator.Type): The type of interpolator to use for all but the AttitudeQuaternion subset. Attitude quaternions will be interpolated using spherical linear interpolation (SLERP).
|
36
|
+
"""
|
25
37
|
def __repr__(self) -> str:
|
26
38
|
"""
|
27
39
|
Convert the model to a string.
|
@@ -66,6 +78,13 @@ class Tabulated(ostk.astrodynamics.flight.profile.Model):
|
|
66
78
|
Returns:
|
67
79
|
Frame: The body frame of the model with the specified name.
|
68
80
|
"""
|
81
|
+
def get_interpolator_type(self) -> ostk.mathematics.curve_fitting.Interpolator.Type:
|
82
|
+
"""
|
83
|
+
Get the type of interpolator used in the model.
|
84
|
+
|
85
|
+
Returns:
|
86
|
+
Interpolator.Type: The type of interpolator used in the model.
|
87
|
+
"""
|
69
88
|
def get_interval(self) -> ostk.physics.time.Interval:
|
70
89
|
"""
|
71
90
|
Get the interval of the model.
|
Binary file
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# Apache License 2.0
|
2
|
+
|
3
|
+
from datetime import datetime
|
4
|
+
|
5
|
+
import pytest
|
6
|
+
|
7
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import Quaternion
|
8
|
+
from ostk.mathematics.curve_fitting import Interpolator
|
9
|
+
|
10
|
+
from ostk.physics.time import Scale
|
11
|
+
from ostk.physics.time import Instant
|
12
|
+
from ostk.physics.coordinate import Position
|
13
|
+
from ostk.physics.coordinate import Velocity
|
14
|
+
from ostk.physics.coordinate import Frame
|
15
|
+
|
16
|
+
from ostk.astrodynamics.trajectory import State
|
17
|
+
from ostk.astrodynamics.flight.profile.model import Tabulated as TabulatedModel
|
18
|
+
|
19
|
+
|
20
|
+
@pytest.fixture
|
21
|
+
def states() -> list[State]:
|
22
|
+
return [
|
23
|
+
State(
|
24
|
+
instant=Instant.date_time(datetime(2020, 1, 1, 0, 0, 0), Scale.UTC),
|
25
|
+
position=Position.meters((0.0, 0.0, 0.0), Frame.GCRF()),
|
26
|
+
velocity=Velocity.meters_per_second((0.0, 0.0, 0.0), Frame.GCRF()),
|
27
|
+
attitude=Quaternion.unit(),
|
28
|
+
angular_velocity=(0.0, 0.0, 0.0),
|
29
|
+
attitude_frame=Frame.GCRF(),
|
30
|
+
),
|
31
|
+
State(
|
32
|
+
instant=Instant.date_time(datetime(2020, 1, 1, 0, 1, 0), Scale.UTC),
|
33
|
+
position=Position.meters((0.0, 0.0, 0.0), Frame.GCRF()),
|
34
|
+
velocity=Velocity.meters_per_second((0.0, 0.0, 0.0), Frame.GCRF()),
|
35
|
+
attitude=Quaternion.unit(),
|
36
|
+
angular_velocity=(0.0, 0.0, 0.0),
|
37
|
+
attitude_frame=Frame.GCRF(),
|
38
|
+
),
|
39
|
+
]
|
40
|
+
|
41
|
+
|
42
|
+
@pytest.fixture
|
43
|
+
def interpolator_type() -> Interpolator.Type:
|
44
|
+
return Interpolator.Type.Linear
|
45
|
+
|
46
|
+
|
47
|
+
@pytest.fixture
|
48
|
+
def tabulated_model(
|
49
|
+
states: list[State],
|
50
|
+
interpolator_type: Interpolator.Type,
|
51
|
+
) -> TabulatedModel:
|
52
|
+
return TabulatedModel(
|
53
|
+
states=states,
|
54
|
+
interpolator_type=interpolator_type,
|
55
|
+
)
|
56
|
+
|
57
|
+
|
58
|
+
class TestTabulatedProfile:
|
59
|
+
def test_constructors(
|
60
|
+
self,
|
61
|
+
tabulated_model: TabulatedModel,
|
62
|
+
):
|
63
|
+
assert tabulated_model is not None
|
64
|
+
assert isinstance(tabulated_model, TabulatedModel)
|
65
|
+
|
66
|
+
def test_is_defined(
|
67
|
+
self,
|
68
|
+
tabulated_model: TabulatedModel,
|
69
|
+
):
|
70
|
+
assert tabulated_model.is_defined() is True
|
71
|
+
|
72
|
+
def test_get_interval(
|
73
|
+
self,
|
74
|
+
tabulated_model: TabulatedModel,
|
75
|
+
):
|
76
|
+
interval = tabulated_model.get_interval()
|
77
|
+
|
78
|
+
assert interval is not None
|
79
|
+
|
80
|
+
def test_get_interpolator_type(
|
81
|
+
self,
|
82
|
+
tabulated_model: TabulatedModel,
|
83
|
+
):
|
84
|
+
interpolator_type = tabulated_model.get_interpolator_type()
|
85
|
+
|
86
|
+
assert interpolator_type is not None
|
87
|
+
|
88
|
+
def test_calculate_state_at(
|
89
|
+
self,
|
90
|
+
tabulated_model: TabulatedModel,
|
91
|
+
states: list[State],
|
92
|
+
):
|
93
|
+
state: State = tabulated_model.calculate_state_at(states[0].get_instant())
|
94
|
+
|
95
|
+
assert state is not None
|
96
|
+
|
97
|
+
def test_get_axes_at(
|
98
|
+
self,
|
99
|
+
tabulated_model: TabulatedModel,
|
100
|
+
states: list[State],
|
101
|
+
):
|
102
|
+
axes = tabulated_model.get_axes_at(states[0].get_instant())
|
103
|
+
|
104
|
+
assert axes is not None
|
105
|
+
|
106
|
+
def test_get_body_frame(
|
107
|
+
self,
|
108
|
+
tabulated_model: TabulatedModel,
|
109
|
+
):
|
110
|
+
if Frame.exists("test"):
|
111
|
+
Frame.destruct("test")
|
112
|
+
|
113
|
+
body_frame = tabulated_model.get_body_frame("test")
|
114
|
+
|
115
|
+
assert body_frame is not None
|
@@ -97,6 +97,10 @@ def profile(request) -> Profile:
|
|
97
97
|
@pytest.fixture(
|
98
98
|
params=[
|
99
99
|
Profile.Target(Profile.TargetType.GeocentricNadir, Profile.Axis.X),
|
100
|
+
Profile.TrajectoryTarget(
|
101
|
+
Trajectory.position(Position.meters((0.0, 0.0, 0.0), Frame.ITRF())),
|
102
|
+
Profile.Axis.X,
|
103
|
+
),
|
100
104
|
Profile.TrajectoryTarget.target_position(
|
101
105
|
Trajectory.position(Position.meters((0.0, 0.0, 0.0), Frame.ITRF())),
|
102
106
|
Profile.Axis.X,
|
@@ -75,19 +75,34 @@ def orbit() -> Orbit:
|
|
75
75
|
|
76
76
|
|
77
77
|
class TestTrajectory:
|
78
|
-
def test_trajectory(
|
78
|
+
def test_trajectory(
|
79
|
+
self,
|
80
|
+
states: list[State],
|
81
|
+
):
|
79
82
|
assert Trajectory(states) is not None
|
80
83
|
|
81
|
-
def test_is_defined(
|
84
|
+
def test_is_defined(
|
85
|
+
self,
|
86
|
+
trajectory: Trajectory,
|
87
|
+
):
|
82
88
|
assert trajectory.is_defined()
|
83
89
|
|
84
|
-
def test_access_model(
|
90
|
+
def test_access_model(
|
91
|
+
self,
|
92
|
+
trajectory: Trajectory,
|
93
|
+
):
|
85
94
|
assert trajectory.access_model() is not None
|
86
95
|
|
87
|
-
def test_get_state_at(
|
96
|
+
def test_get_state_at(
|
97
|
+
self,
|
98
|
+
trajectory: Trajectory,
|
99
|
+
):
|
88
100
|
assert trajectory.get_state_at(Instant.J2000()) is not None
|
89
101
|
|
90
|
-
def test_get_states_at(
|
102
|
+
def test_get_states_at(
|
103
|
+
self,
|
104
|
+
trajectory: Trajectory,
|
105
|
+
):
|
91
106
|
assert (
|
92
107
|
trajectory.get_states_at(
|
93
108
|
[Instant.J2000(), Instant.J2000() + Duration.seconds(10.0)]
|
@@ -102,7 +117,10 @@ class TestTrajectory:
|
|
102
117
|
assert isinstance(trajectory, Trajectory)
|
103
118
|
assert trajectory.is_defined() is False
|
104
119
|
|
105
|
-
def test_trajectory_position(
|
120
|
+
def test_trajectory_position(
|
121
|
+
self,
|
122
|
+
position: Position,
|
123
|
+
):
|
106
124
|
trajectory: Trajectory = Trajectory.position(position)
|
107
125
|
|
108
126
|
assert trajectory is not None
|
@@ -131,7 +149,10 @@ class TestTrajectory:
|
|
131
149
|
assert Trajectory.ground_strip(start_lla, end_lla, instants) is not None
|
132
150
|
|
133
151
|
def test_ground_strip_geodetic_nadir(
|
134
|
-
self,
|
152
|
+
self,
|
153
|
+
orbit: Orbit,
|
154
|
+
instants: list[Instant],
|
155
|
+
earth: Earth,
|
135
156
|
):
|
136
157
|
assert (
|
137
158
|
Trajectory.ground_strip_geodetic_nadir(
|
@@ -19,6 +19,7 @@ from ostk.astrodynamics.trajectory import Orbit
|
|
19
19
|
from ostk.astrodynamics.flight import Profile
|
20
20
|
from ostk.astrodynamics.viewer import Viewer
|
21
21
|
from ostk.astrodynamics.viewer import ConicSensor
|
22
|
+
from ostk.astrodynamics.viewer import _compute_celestial_angular_diameter_from_states
|
22
23
|
|
23
24
|
|
24
25
|
@pytest.fixture
|
@@ -172,6 +173,48 @@ class TestViewer:
|
|
172
173
|
)
|
173
174
|
assert rendered_html.endswith("</script>")
|
174
175
|
|
176
|
+
@pytest.mark.parametrize(
|
177
|
+
"celestial_body_name",
|
178
|
+
["Earth", "Moon", "Sun"],
|
179
|
+
)
|
180
|
+
def test_add_celestial_body_direction_success(
|
181
|
+
self,
|
182
|
+
viewer: Viewer,
|
183
|
+
orbit: Orbit,
|
184
|
+
celestial_body_name: str,
|
185
|
+
environment: Environment,
|
186
|
+
):
|
187
|
+
viewer.add_celestial_body_direction(
|
188
|
+
profile_or_trajectory=orbit,
|
189
|
+
time_step=Duration.seconds(30.0),
|
190
|
+
celestial=environment.access_celestial_object_with_name(celestial_body_name),
|
191
|
+
)
|
192
|
+
|
193
|
+
rendered_html: str = viewer.render()
|
194
|
+
|
195
|
+
assert rendered_html.startswith('<meta charset="utf-8">')
|
196
|
+
assert "var widget = new Cesium.Viewer" in rendered_html
|
197
|
+
assert " widget.entities.add({position: widget" in rendered_html
|
198
|
+
assert (
|
199
|
+
f"widget.entities.add({{position: widget.{celestial_body_name.lower()}_direction_position"
|
200
|
+
in rendered_html
|
201
|
+
)
|
202
|
+
assert rendered_html.endswith("</script>")
|
203
|
+
|
204
|
+
def test_add_ground_tracks_success(
|
205
|
+
self,
|
206
|
+
viewer: Viewer,
|
207
|
+
orbit: Orbit,
|
208
|
+
):
|
209
|
+
viewer.add_ground_tracks(profile_or_trajectory=orbit)
|
210
|
+
|
211
|
+
rendered_html: str = viewer.render()
|
212
|
+
|
213
|
+
assert rendered_html.startswith('<meta charset="utf-8">')
|
214
|
+
assert "var widget = new Cesium.Viewer" in rendered_html
|
215
|
+
assert "widget.entities.add({polyline:" in rendered_html
|
216
|
+
assert rendered_html.endswith("</script>")
|
217
|
+
|
175
218
|
def test_add_target_success(
|
176
219
|
self,
|
177
220
|
viewer: Viewer,
|
@@ -260,3 +303,16 @@ class TestViewer:
|
|
260
303
|
in rendered_html
|
261
304
|
)
|
262
305
|
assert rendered_html.endswith("</script>")
|
306
|
+
|
307
|
+
|
308
|
+
def test_compute_celestial_angular_diameter_from_states_success(
|
309
|
+
orbit: Orbit,
|
310
|
+
interval: Interval,
|
311
|
+
environment: Environment,
|
312
|
+
) -> None:
|
313
|
+
assert _compute_celestial_angular_diameter_from_states(
|
314
|
+
celestial=environment.access_celestial_object_with_name("Sun"),
|
315
|
+
states=orbit.get_states_at(
|
316
|
+
interval.generate_grid(Duration.seconds(30.0)),
|
317
|
+
),
|
318
|
+
).mean() == pytest.approx(0.54, rel=1e-2)
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# Apache License 2.0
|
2
|
+
|
3
|
+
import pytest
|
4
|
+
|
5
|
+
from ostk.physics.environment.object.celestial import Earth
|
6
|
+
from ostk.physics.time import Instant
|
7
|
+
from ostk.physics.time import DateTime
|
8
|
+
from ostk.physics.time import Scale
|
9
|
+
from ostk.physics.unit import Length
|
10
|
+
from ostk.physics.unit import Angle
|
11
|
+
|
12
|
+
from ostk.astrodynamics.trajectory import Orbit
|
13
|
+
from ostk.astrodynamics.trajectory import State
|
14
|
+
from ostk.astrodynamics.trajectory.model import Nadir
|
15
|
+
from ostk.astrodynamics.trajectory.orbit.model import Kepler
|
16
|
+
from ostk.astrodynamics.trajectory.orbit.model.kepler import COE
|
17
|
+
|
18
|
+
|
19
|
+
@pytest.fixture
|
20
|
+
def orbit() -> Orbit:
|
21
|
+
earth = Earth.WGS84()
|
22
|
+
coe = COE(
|
23
|
+
semi_major_axis=Length.kilometers(7000.0),
|
24
|
+
eccentricity=0.0,
|
25
|
+
inclination=Angle.degrees(98.0),
|
26
|
+
raan=Angle.degrees(0.0),
|
27
|
+
aop=Angle.degrees(0.0),
|
28
|
+
true_anomaly=Angle.degrees(0.0),
|
29
|
+
)
|
30
|
+
keplerian_model = Kepler(
|
31
|
+
coe=coe,
|
32
|
+
epoch=Instant.date_time(DateTime(2018, 1, 1, 0, 0, 0), Scale.UTC),
|
33
|
+
gravitational_parameter=earth.get_gravitational_parameter(),
|
34
|
+
equatorial_radius=earth.get_equatorial_radius(),
|
35
|
+
j2=earth.get_j2(),
|
36
|
+
j4=earth.get_j4(),
|
37
|
+
perturbation_type=Kepler.PerturbationType.No,
|
38
|
+
)
|
39
|
+
return Orbit(keplerian_model, earth)
|
40
|
+
|
41
|
+
|
42
|
+
@pytest.fixture
|
43
|
+
def nadir(orbit: Orbit) -> Nadir:
|
44
|
+
return Nadir(orbit)
|
45
|
+
|
46
|
+
|
47
|
+
class TestNadir:
|
48
|
+
def test_constructor(
|
49
|
+
self,
|
50
|
+
nadir: Nadir,
|
51
|
+
):
|
52
|
+
assert nadir.is_defined()
|
53
|
+
|
54
|
+
def test_calculate_state_at(
|
55
|
+
self,
|
56
|
+
nadir: Nadir,
|
57
|
+
):
|
58
|
+
instant: Instant = Instant.date_time(DateTime(2018, 1, 1, 0, 0, 0), Scale.UTC)
|
59
|
+
|
60
|
+
state: State = nadir.calculate_state_at(instant)
|
61
|
+
|
62
|
+
assert state is not None
|
63
|
+
|
64
|
+
def test_equality_operator(
|
65
|
+
self,
|
66
|
+
nadir: Nadir,
|
67
|
+
):
|
68
|
+
assert nadir == nadir
|
69
|
+
|
70
|
+
def test_inequality_operator(
|
71
|
+
self,
|
72
|
+
nadir: Nadir,
|
73
|
+
):
|
74
|
+
nadir2 = Nadir(Orbit.undefined())
|
75
|
+
assert nadir != nadir2
|
76
|
+
|
77
|
+
def test_get_orbit(
|
78
|
+
self,
|
79
|
+
nadir: Nadir,
|
80
|
+
):
|
81
|
+
assert nadir.get_orbit() is not None
|
82
|
+
|
83
|
+
def test_get_step_size(
|
84
|
+
self,
|
85
|
+
nadir: Nadir,
|
86
|
+
):
|
87
|
+
assert nadir.get_step_size() is not None
|