open-space-toolkit-astrodynamics 17.2.0__py312-none-manylinux2014_x86_64.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 (151) hide show
  1. open_space_toolkit_astrodynamics-17.2.0.dist-info/METADATA +30 -0
  2. open_space_toolkit_astrodynamics-17.2.0.dist-info/RECORD +151 -0
  3. open_space_toolkit_astrodynamics-17.2.0.dist-info/WHEEL +5 -0
  4. open_space_toolkit_astrodynamics-17.2.0.dist-info/top_level.txt +1 -0
  5. open_space_toolkit_astrodynamics-17.2.0.dist-info/zip-safe +1 -0
  6. ostk/__init__.py +1 -0
  7. ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-312-x86_64-linux-gnu.so +0 -0
  8. ostk/astrodynamics/__init__.py +11 -0
  9. ostk/astrodynamics/__init__.pyi +720 -0
  10. ostk/astrodynamics/access.pyi +577 -0
  11. ostk/astrodynamics/conjunction/__init__.pyi +121 -0
  12. ostk/astrodynamics/conjunction/close_approach.pyi +89 -0
  13. ostk/astrodynamics/conjunction/message/__init__.pyi +3 -0
  14. ostk/astrodynamics/conjunction/message/ccsds.pyi +705 -0
  15. ostk/astrodynamics/converters.py +130 -0
  16. ostk/astrodynamics/converters.pyi +58 -0
  17. ostk/astrodynamics/data/__init__.pyi +3 -0
  18. ostk/astrodynamics/data/provider.pyi +22 -0
  19. ostk/astrodynamics/dataframe.py +597 -0
  20. ostk/astrodynamics/display.py +281 -0
  21. ostk/astrodynamics/dynamics.pyi +311 -0
  22. ostk/astrodynamics/eclipse.pyi +70 -0
  23. ostk/astrodynamics/estimator.pyi +268 -0
  24. ostk/astrodynamics/event_condition.pyi +910 -0
  25. ostk/astrodynamics/flight/__init__.pyi +626 -0
  26. ostk/astrodynamics/flight/profile/__init__.pyi +99 -0
  27. ostk/astrodynamics/flight/profile/model.pyi +179 -0
  28. ostk/astrodynamics/flight/system.pyi +268 -0
  29. ostk/astrodynamics/guidance_law.pyi +416 -0
  30. ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.17 +0 -0
  31. ostk/astrodynamics/pytrajectory/__init__.py +1 -0
  32. ostk/astrodynamics/pytrajectory/__init__.pyi +3 -0
  33. ostk/astrodynamics/pytrajectory/pystate.py +263 -0
  34. ostk/astrodynamics/pytrajectory/pystate.pyi +66 -0
  35. ostk/astrodynamics/solver.pyi +432 -0
  36. ostk/astrodynamics/test/__init__.py +1 -0
  37. ostk/astrodynamics/test/access/__init__.py +1 -0
  38. ostk/astrodynamics/test/access/test_generator.py +319 -0
  39. ostk/astrodynamics/test/access/test_visibility_criterion.py +201 -0
  40. ostk/astrodynamics/test/conftest.py +119 -0
  41. ostk/astrodynamics/test/conjunction/close_approach/__init__.py +0 -0
  42. ostk/astrodynamics/test/conjunction/close_approach/test_generator.py +228 -0
  43. ostk/astrodynamics/test/conjunction/message/ccsds/__init__.py +1 -0
  44. ostk/astrodynamics/test/conjunction/message/ccsds/conftest.py +325 -0
  45. ostk/astrodynamics/test/conjunction/message/ccsds/data/cdm.json +303 -0
  46. ostk/astrodynamics/test/conjunction/message/ccsds/test_cdm.py +416 -0
  47. ostk/astrodynamics/test/conjunction/test_close_approach.py +244 -0
  48. ostk/astrodynamics/test/data/provider/test_off_nadir.py +58 -0
  49. ostk/astrodynamics/test/dynamics/__init__.py +1 -0
  50. ostk/astrodynamics/test/dynamics/data/Tabulated_Earth_Gravity.csv +565 -0
  51. ostk/astrodynamics/test/dynamics/data/Tabulated_Earth_Gravity_Truth.csv +100 -0
  52. ostk/astrodynamics/test/dynamics/test_atmospheric_drag.py +128 -0
  53. ostk/astrodynamics/test/dynamics/test_central_body_gravity.py +58 -0
  54. ostk/astrodynamics/test/dynamics/test_dynamics.py +50 -0
  55. ostk/astrodynamics/test/dynamics/test_position_derivative.py +51 -0
  56. ostk/astrodynamics/test/dynamics/test_tabulated.py +138 -0
  57. ostk/astrodynamics/test/dynamics/test_third_body_gravity.py +67 -0
  58. ostk/astrodynamics/test/dynamics/test_thruster.py +157 -0
  59. ostk/astrodynamics/test/eclipse/__init__.py +1 -0
  60. ostk/astrodynamics/test/eclipse/test_generator.py +138 -0
  61. ostk/astrodynamics/test/estimator/test_orbit_determination_solver.py +261 -0
  62. ostk/astrodynamics/test/estimator/test_tle_solver.py +216 -0
  63. ostk/astrodynamics/test/event_condition/test_angular_condition.py +113 -0
  64. ostk/astrodynamics/test/event_condition/test_boolean_condition.py +55 -0
  65. ostk/astrodynamics/test/event_condition/test_brouwer_lyddane_mean_long_condition.py +135 -0
  66. ostk/astrodynamics/test/event_condition/test_coe_condition.py +135 -0
  67. ostk/astrodynamics/test/event_condition/test_instant_condition.py +48 -0
  68. ostk/astrodynamics/test/event_condition/test_logical_condition.py +120 -0
  69. ostk/astrodynamics/test/event_condition/test_real_condition.py +50 -0
  70. ostk/astrodynamics/test/flight/__init__.py +1 -0
  71. ostk/astrodynamics/test/flight/profile/model/test_tabulated_profile.py +115 -0
  72. ostk/astrodynamics/test/flight/system/__init__.py +1 -0
  73. ostk/astrodynamics/test/flight/system/test_propulsion_system.py +64 -0
  74. ostk/astrodynamics/test/flight/system/test_satellite_system.py +83 -0
  75. ostk/astrodynamics/test/flight/system/test_satellite_system_builder.py +71 -0
  76. ostk/astrodynamics/test/flight/test_maneuver.py +231 -0
  77. ostk/astrodynamics/test/flight/test_profile.py +293 -0
  78. ostk/astrodynamics/test/flight/test_system.py +45 -0
  79. ostk/astrodynamics/test/guidance_law/test_constant_thrust.py +177 -0
  80. ostk/astrodynamics/test/guidance_law/test_guidance_law.py +60 -0
  81. ostk/astrodynamics/test/guidance_law/test_heterogeneous_guidance_law.py +164 -0
  82. ostk/astrodynamics/test/guidance_law/test_qlaw.py +209 -0
  83. ostk/astrodynamics/test/solvers/__init__.py +1 -0
  84. ostk/astrodynamics/test/solvers/test_finite_difference_solver.py +196 -0
  85. ostk/astrodynamics/test/solvers/test_least_squares_solver.py +334 -0
  86. ostk/astrodynamics/test/solvers/test_temporal_condition_solver.py +161 -0
  87. ostk/astrodynamics/test/test_access.py +128 -0
  88. ostk/astrodynamics/test/test_converters.py +290 -0
  89. ostk/astrodynamics/test/test_dataframe.py +1355 -0
  90. ostk/astrodynamics/test/test_display.py +184 -0
  91. ostk/astrodynamics/test/test_event_condition.py +80 -0
  92. ostk/astrodynamics/test/test_import.py +26 -0
  93. ostk/astrodynamics/test/test_root_solver.py +70 -0
  94. ostk/astrodynamics/test/test_trajectory.py +126 -0
  95. ostk/astrodynamics/test/test_utilities.py +338 -0
  96. ostk/astrodynamics/test/test_viewer.py +318 -0
  97. ostk/astrodynamics/test/trajectory/__init__.py +1 -0
  98. ostk/astrodynamics/test/trajectory/model/test_nadir_trajectory.py +87 -0
  99. ostk/astrodynamics/test/trajectory/model/test_tabulated_trajectory.py +303 -0
  100. ostk/astrodynamics/test/trajectory/model/test_target_scan_trajectory.py +126 -0
  101. ostk/astrodynamics/test/trajectory/orbit/__init__.py +1 -0
  102. ostk/astrodynamics/test/trajectory/orbit/message/__init__.py +1 -0
  103. ostk/astrodynamics/test/trajectory/orbit/message/spacex/__init__.py +1 -0
  104. ostk/astrodynamics/test/trajectory/orbit/message/spacex/conftest.py +18 -0
  105. ostk/astrodynamics/test/trajectory/orbit/message/spacex/data/opm_1.yaml +44 -0
  106. ostk/astrodynamics/test/trajectory/orbit/message/spacex/test_opm.py +108 -0
  107. ostk/astrodynamics/test/trajectory/orbit/models/__init__.py +1 -0
  108. ostk/astrodynamics/test/trajectory/orbit/models/kepler/__init__.py +1 -0
  109. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean.py +65 -0
  110. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_long.py +102 -0
  111. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_short.py +102 -0
  112. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py +305 -0
  113. ostk/astrodynamics/test/trajectory/orbit/models/sgp4/__init__.py +1 -0
  114. ostk/astrodynamics/test/trajectory/orbit/models/sgp4/test_tle.py +337 -0
  115. ostk/astrodynamics/test/trajectory/orbit/models/test_kepler.py +130 -0
  116. ostk/astrodynamics/test/trajectory/orbit/models/test_modified_equinoctial.py +142 -0
  117. ostk/astrodynamics/test/trajectory/orbit/models/test_propagated.py +234 -0
  118. ostk/astrodynamics/test/trajectory/orbit/models/test_sgp4.py +1 -0
  119. ostk/astrodynamics/test/trajectory/orbit/models/test_tabulated.py +380 -0
  120. ostk/astrodynamics/test/trajectory/orbit/test_model.py +1 -0
  121. ostk/astrodynamics/test/trajectory/orbit/test_pass.py +75 -0
  122. ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_angular_velocity.py +30 -0
  123. ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_attitude_quaternion.py +18 -0
  124. ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_acceleration.py +136 -0
  125. ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_position.py +107 -0
  126. ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_velocity.py +115 -0
  127. ostk/astrodynamics/test/trajectory/state/test_coordinate_broker.py +84 -0
  128. ostk/astrodynamics/test/trajectory/state/test_coordinate_subset.py +58 -0
  129. ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py +316 -0
  130. ostk/astrodynamics/test/trajectory/test_local_orbital_frame_direction.py +81 -0
  131. ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py +119 -0
  132. ostk/astrodynamics/test/trajectory/test_model.py +1 -0
  133. ostk/astrodynamics/test/trajectory/test_orbit.py +212 -0
  134. ostk/astrodynamics/test/trajectory/test_propagator.py +452 -0
  135. ostk/astrodynamics/test/trajectory/test_segment.py +694 -0
  136. ostk/astrodynamics/test/trajectory/test_sequence.py +550 -0
  137. ostk/astrodynamics/test/trajectory/test_state.py +629 -0
  138. ostk/astrodynamics/test/trajectory/test_state_builder.py +172 -0
  139. ostk/astrodynamics/trajectory/__init__.pyi +1982 -0
  140. ostk/astrodynamics/trajectory/model.pyi +259 -0
  141. ostk/astrodynamics/trajectory/orbit/__init__.pyi +349 -0
  142. ostk/astrodynamics/trajectory/orbit/message/__init__.pyi +3 -0
  143. ostk/astrodynamics/trajectory/orbit/message/spacex.pyi +264 -0
  144. ostk/astrodynamics/trajectory/orbit/model/__init__.pyi +648 -0
  145. ostk/astrodynamics/trajectory/orbit/model/brouwerLyddaneMean.pyi +121 -0
  146. ostk/astrodynamics/trajectory/orbit/model/kepler.pyi +709 -0
  147. ostk/astrodynamics/trajectory/orbit/model/sgp4.pyi +330 -0
  148. ostk/astrodynamics/trajectory/state/__init__.pyi +402 -0
  149. ostk/astrodynamics/trajectory/state/coordinate_subset.pyi +208 -0
  150. ostk/astrodynamics/utilities.py +396 -0
  151. ostk/astrodynamics/viewer.py +851 -0
@@ -0,0 +1,130 @@
1
+ # Apache License 2.0
2
+
3
+ from __future__ import annotations
4
+
5
+ import re
6
+
7
+ from datetime import datetime, timezone
8
+
9
+ from ostk.physics.time import Instant
10
+ from ostk.physics.time import Interval
11
+ from ostk.physics.time import Scale
12
+
13
+
14
+ def coerce_to_datetime(value: Instant | datetime | str) -> datetime:
15
+ """
16
+ Return datetime from value.
17
+
18
+ Args:
19
+ value (Instant | datetime | str): A value to coerce.
20
+
21
+ Returns:
22
+ datetime: The coerced datetime.
23
+ """
24
+
25
+ if isinstance(value, datetime):
26
+ return value
27
+
28
+ if isinstance(value, Instant):
29
+ return value.get_date_time(Scale.UTC).replace(tzinfo=timezone.utc)
30
+
31
+ if isinstance(value, str):
32
+ if value.endswith("Z"):
33
+ value = value.replace("Z", "+00:00")
34
+
35
+ return datetime.fromisoformat(value)
36
+
37
+ raise TypeError(
38
+ f"Argument is of type [{type(value)}]. Must be a datetime, an Instant, or a str."
39
+ )
40
+
41
+
42
+ def coerce_to_instant(value: Instant | datetime | str) -> Instant:
43
+ """
44
+ Return Instant from value.
45
+
46
+ Args:
47
+ value (Instant | datetime | str): A value to coerce.
48
+
49
+ Returns:
50
+ Instant: The coerced Instant.
51
+ """
52
+
53
+ if isinstance(value, Instant):
54
+ return value
55
+
56
+ if isinstance(value, datetime):
57
+ return Instant.date_time(value.astimezone(tz=timezone.utc), Scale.UTC)
58
+
59
+ if isinstance(value, str):
60
+ return coerce_to_instant(coerce_to_datetime(value))
61
+
62
+ raise TypeError(
63
+ f"Argument is of type [{type(value)}]. Must be a datetime, an Instant, or a str."
64
+ )
65
+
66
+
67
+ def coerce_to_iso(value: Instant | datetime | str, timespec: str = "microseconds") -> str:
68
+ """
69
+ Return an ISO string from value.
70
+
71
+ Args:
72
+ value (Instant | datetime | str): A value to coerce.
73
+ timespec (str): A time resolution. Defaults to "microseconds".
74
+
75
+ Returns:
76
+ str: The coerced ISO string.
77
+ """
78
+
79
+ if isinstance(value, str):
80
+ return coerce_to_iso(coerce_to_datetime(value), timespec=timespec)
81
+
82
+ if isinstance(value, datetime):
83
+ return value.isoformat(timespec=timespec)
84
+
85
+ if isinstance(value, Instant):
86
+ return coerce_to_iso(coerce_to_datetime(value), timespec=timespec)
87
+
88
+ raise TypeError(
89
+ f"Argument is of type [{type(value)}]. Must be a datetime, an Instant, or a str."
90
+ )
91
+
92
+
93
+ def coerce_to_interval(
94
+ value: (
95
+ Interval
96
+ | tuple[Instant, Instant]
97
+ | tuple[datetime, datetime]
98
+ | tuple[str, str]
99
+ | str
100
+ ),
101
+ ) -> Interval:
102
+ """
103
+ Return Interval from value.
104
+
105
+ Args:
106
+ value (Interval | tuple[Instant, Instant] | tuple[datetime, datetime] | tuple[str, str]): A value to coerce.
107
+
108
+ Returns:
109
+ Interval: The coerced Interval.
110
+ """
111
+
112
+ if isinstance(value, Interval):
113
+ return value
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
+
127
+ return Interval.closed(
128
+ start_instant=coerce_to_instant(value[0]),
129
+ end_instant=coerce_to_instant(value[1]),
130
+ )
@@ -0,0 +1,58 @@
1
+ from __future__ import annotations
2
+ from datetime import datetime
3
+ from datetime import timezone
4
+ from ostk.physics.time import Instant
5
+ from ostk.physics.time import Interval
6
+ from ostk.physics.time import Scale
7
+ import re as re
8
+ import typing
9
+ __all__ = ['Instant', 'Interval', 'Scale', 'coerce_to_datetime', 'coerce_to_instant', 'coerce_to_interval', 'coerce_to_iso', 'datetime', 're', 'timezone']
10
+ def coerce_to_datetime(value: Instant | datetime | str) -> datetime:
11
+ """
12
+
13
+ Return datetime from value.
14
+
15
+ Args:
16
+ value (Instant | datetime | str): A value to coerce.
17
+
18
+ Returns:
19
+ datetime: The coerced datetime.
20
+
21
+ """
22
+ def coerce_to_instant(value: Instant | datetime | str) -> Instant:
23
+ """
24
+
25
+ Return Instant from value.
26
+
27
+ Args:
28
+ value (Instant | datetime | str): A value to coerce.
29
+
30
+ Returns:
31
+ Instant: The coerced Instant.
32
+
33
+ """
34
+ def coerce_to_interval(value: Interval | tuple[Instant, Instant] | tuple[datetime, datetime] | tuple[str, str] | str) -> Interval:
35
+ """
36
+
37
+ Return Interval from value.
38
+
39
+ Args:
40
+ value (Interval | tuple[Instant, Instant] | tuple[datetime, datetime] | tuple[str, str]): A value to coerce.
41
+
42
+ Returns:
43
+ Interval: The coerced Interval.
44
+
45
+ """
46
+ def coerce_to_iso(value: Instant | datetime | str, timespec: str = 'microseconds') -> str:
47
+ """
48
+
49
+ Return an ISO string from value.
50
+
51
+ Args:
52
+ value (Instant | datetime | str): A value to coerce.
53
+ timespec (str): A time resolution. Defaults to "microseconds".
54
+
55
+ Returns:
56
+ str: The coerced ISO string.
57
+
58
+ """
@@ -0,0 +1,3 @@
1
+ from __future__ import annotations
2
+ from . import provider
3
+ __all__ = ['provider']
@@ -0,0 +1,22 @@
1
+ from __future__ import annotations
2
+ import ostk.astrodynamics.trajectory
3
+ import ostk.physics.coordinate
4
+ import ostk.physics.unit
5
+ __all__ = ['compute_off_nadir_angles']
6
+ def compute_off_nadir_angles(state: ostk.astrodynamics.trajectory.State, target_position: ostk.physics.coordinate.Position) -> tuple[ostk.physics.unit.Angle, ostk.physics.unit.Angle, ostk.physics.unit.Angle]:
7
+ """
8
+ Compute the along-track, cross-track and total off-nadir angle between the satellite and the target.
9
+
10
+ - The along-track angle is the angle between the nadir vector [Z] and the projection of the satellite->target vector
11
+ onto the plane defined by the satellite local horizontal (velocity vector in circular orbits) [X] and the nadir vector [Z].
12
+ - The cross-track angle is the angle between the nadir vector [Z] and the projection of the satellite->target vector
13
+ onto the plane defined by the negative orbital momentum vector [Y] and the nadir vector [Z].
14
+ - The total off-nadir angle is the angle between the nadir vector [Z] and the satellite->target vector.
15
+
16
+ Args:
17
+ state (State): The state of the satellite.
18
+ target_position (Position): The position of the target.
19
+
20
+ Returns:
21
+ tuple[Angle, Angle, Angle]: The along-track, cross-track and total off-nadir angle between the satellite and the target.
22
+ """