open-space-toolkit-astrodynamics 1.2.1__py310-none-any.whl → 4.2.0__py310-none-any.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 (65) hide show
  1. {open_space_toolkit_astrodynamics-1.2.1.dist-info → open_space_toolkit_astrodynamics-4.2.0.dist-info}/METADATA +2 -2
  2. open_space_toolkit_astrodynamics-4.2.0.dist-info/RECORD +25 -0
  3. ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-310-x86_64-linux-gnu.so +0 -0
  4. ostk/astrodynamics/__init__.py +6 -0
  5. ostk/astrodynamics/{libopen-space-toolkit-astrodynamics.so.1 → libopen-space-toolkit-astrodynamics.so.4} +0 -0
  6. ostk/astrodynamics/pytrajectory/pystate.py +36 -0
  7. ostk/astrodynamics/test/test_access.py +2 -6
  8. ostk/astrodynamics/test/test_converters.py +1 -3
  9. ostk/astrodynamics/test/test_event_condition.py +24 -41
  10. ostk/astrodynamics/test/test_import.py +3 -3
  11. ostk/astrodynamics/test/test_viewer.py +1 -2
  12. ostk/astrodynamics/viewer.py +1 -1
  13. open_space_toolkit_astrodynamics-1.2.1.dist-info/RECORD +0 -72
  14. ostk/astrodynamics/test/access/__init__.py +0 -1
  15. ostk/astrodynamics/test/access/test_generator.py +0 -248
  16. ostk/astrodynamics/test/conjunction/messages/ccsds/__init__.py +0 -1
  17. ostk/astrodynamics/test/conjunction/messages/ccsds/conftest.py +0 -325
  18. ostk/astrodynamics/test/conjunction/messages/ccsds/data/cdm.json +0 -303
  19. ostk/astrodynamics/test/conjunction/messages/ccsds/test_cdm.py +0 -418
  20. ostk/astrodynamics/test/event_condition/test_coe_condition.py +0 -95
  21. ostk/astrodynamics/test/event_condition/test_conjunctive.py +0 -64
  22. ostk/astrodynamics/test/event_condition/test_disjunctive.py +0 -63
  23. ostk/astrodynamics/test/event_condition/test_duration_condition.py +0 -36
  24. ostk/astrodynamics/test/event_condition/test_logical_connective.py +0 -37
  25. ostk/astrodynamics/test/flight/__init__.py +0 -1
  26. ostk/astrodynamics/test/flight/profile/__init__.py +0 -1
  27. ostk/astrodynamics/test/flight/profile/test_state.py +0 -144
  28. ostk/astrodynamics/test/flight/system/__init__.py +0 -1
  29. ostk/astrodynamics/test/flight/system/dynamics/__init__.py +0 -1
  30. ostk/astrodynamics/test/flight/system/dynamics/test_atmospheric_drag.py +0 -86
  31. ostk/astrodynamics/test/flight/system/dynamics/test_central_body_gravity.py +0 -57
  32. ostk/astrodynamics/test/flight/system/dynamics/test_position_derivative.py +0 -49
  33. ostk/astrodynamics/test/flight/system/dynamics/test_third_body_gravity.py +0 -65
  34. ostk/astrodynamics/test/flight/system/test_satellite_system.py +0 -77
  35. ostk/astrodynamics/test/flight/test_profile.py +0 -147
  36. ostk/astrodynamics/test/flight/test_system.py +0 -55
  37. ostk/astrodynamics/test/solvers/__init__.py +0 -1
  38. ostk/astrodynamics/test/solvers/test_temporal_condition_solver.py +0 -153
  39. ostk/astrodynamics/test/test_numerical_solver.py +0 -248
  40. ostk/astrodynamics/test/trajectory/__init__.py +0 -1
  41. ostk/astrodynamics/test/trajectory/orbit/__init__.py +0 -1
  42. ostk/astrodynamics/test/trajectory/orbit/messages/__init__.py +0 -1
  43. ostk/astrodynamics/test/trajectory/orbit/messages/spacex/__init__.py +0 -1
  44. ostk/astrodynamics/test/trajectory/orbit/messages/spacex/conftest.py +0 -18
  45. ostk/astrodynamics/test/trajectory/orbit/messages/spacex/data/opm_1.yaml +0 -44
  46. ostk/astrodynamics/test/trajectory/orbit/messages/spacex/test_opm.py +0 -108
  47. ostk/astrodynamics/test/trajectory/orbit/models/__init__.py +0 -1
  48. ostk/astrodynamics/test/trajectory/orbit/models/kepler/__init__.py +0 -1
  49. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py +0 -108
  50. ostk/astrodynamics/test/trajectory/orbit/models/sgp4/__init__.py +0 -1
  51. ostk/astrodynamics/test/trajectory/orbit/models/sgp4/test_tle.py +0 -332
  52. ostk/astrodynamics/test/trajectory/orbit/models/test_kepler.py +0 -130
  53. ostk/astrodynamics/test/trajectory/orbit/models/test_propagated.py +0 -197
  54. ostk/astrodynamics/test/trajectory/orbit/models/test_sgp4.py +0 -1
  55. ostk/astrodynamics/test/trajectory/orbit/models/test_tabulated.py +0 -383
  56. ostk/astrodynamics/test/trajectory/orbit/test_model.py +0 -1
  57. ostk/astrodynamics/test/trajectory/orbit/test_pass.py +0 -55
  58. ostk/astrodynamics/test/trajectory/test_model.py +0 -1
  59. ostk/astrodynamics/test/trajectory/test_orbit.py +0 -92
  60. ostk/astrodynamics/test/trajectory/test_propagator.py +0 -233
  61. ostk/astrodynamics/test/trajectory/test_state.py +0 -70
  62. {open_space_toolkit_astrodynamics-1.2.1.dist-info → open_space_toolkit_astrodynamics-4.2.0.dist-info}/WHEEL +0 -0
  63. {open_space_toolkit_astrodynamics-1.2.1.dist-info → open_space_toolkit_astrodynamics-4.2.0.dist-info}/top_level.txt +0 -0
  64. {open_space_toolkit_astrodynamics-1.2.1.dist-info → open_space_toolkit_astrodynamics-4.2.0.dist-info}/zip-safe +0 -0
  65. /ostk/{__init__.py → astrodynamics/pytrajectory/__init__.py} +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: open-space-toolkit-astrodynamics
3
- Version: 1.2.1
3
+ Version: 4.2.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,7 @@ 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 (~=1.2.0)
14
+ Requires-Dist: open-space-toolkit-physics (~=3.0.0)
15
15
 
16
16
  # Open Space Toolkit ▸ Astrodynamics
17
17
 
@@ -0,0 +1,25 @@
1
+ ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-310-x86_64-linux-gnu.so,sha256=S8WiZTrzmrzsn9NJBNTBr52UKIH808UbKjNX3zEk8AA,1931000
2
+ ostk/astrodynamics/__init__.py,sha256=3gWyqFIbhAfcdeMhmfBPQPlPQTmaOzm-6flkJe745Zk,251
3
+ ostk/astrodynamics/converters.py,sha256=sBZ3_JMjowWbQ9gBPA2cSEkbBfAwXmt1IBbLks76-Vk,3502
4
+ ostk/astrodynamics/display.py,sha256=y9FnoQbPFGM6LzkUdgXgeqtuVGhv57GuTKbeDdcFPgw,6306
5
+ ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.4,sha256=edqCZyHsJ8FrYJu6f0LZCt02PL7oT_kJVNTkoGPHbCo,90297880
6
+ ostk/astrodynamics/utilities.py,sha256=NbeKN_CtcCRHIinhoNWTEosBMR7xc924S-ZFD97mduw,4478
7
+ ostk/astrodynamics/viewer.py,sha256=_4uucNtZrIADtKtEYHbiu91RVVvKRG3vPULUAshPLJU,8912
8
+ ostk/astrodynamics/pytrajectory/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
9
+ ostk/astrodynamics/pytrajectory/pystate.py,sha256=ceNZWYCqtsXWJlE6JKDxB5qn5ixTWGOwrYXge21XPmk,1037
10
+ ostk/astrodynamics/test/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
11
+ ostk/astrodynamics/test/conftest.py,sha256=J3SbQibnMVaPktAF6Z6cwVCa7xhW3uXpkOJRom6YtCo,2719
12
+ ostk/astrodynamics/test/test_access.py,sha256=4I5r4Hukv0fkByHVARhaYpcDu5EOQ7dtbs-ZK7siTqg,3961
13
+ ostk/astrodynamics/test/test_converters.py,sha256=ktkLH0xpeRdQ7kN6i5a_agmGqovUxVtCwlwcCdCUaa0,5847
14
+ ostk/astrodynamics/test/test_display.py,sha256=8YeiYRYMpokzqprbRoDBI_xhHI5B8uxcdSzmqmF3AIc,3738
15
+ ostk/astrodynamics/test/test_event_condition.py,sha256=6FWvOFCShwZcwF3almMx9KUE8cU7X9n_LPXB2pjmus8,1440
16
+ ostk/astrodynamics/test/test_import.py,sha256=stS8jK9HiXyzRWjtDvaTqUrzCrOVnYVX5CkmQf7MJsA,1201
17
+ ostk/astrodynamics/test/test_root_solver.py,sha256=hQ8O6g-WP49gZH_H3Rdufv0F0gQorpzJyIcjBGGUQ34,1831
18
+ ostk/astrodynamics/test/test_trajectory.py,sha256=4AhlAaIrCrP17ZycJqYlYskj8SC2MH7fp3_4eqWdF9s,1366
19
+ ostk/astrodynamics/test/test_utilities.py,sha256=edAPLXNMflCPa0gzhU4e05pa6HbAq7UV0JzMMRx3VlQ,3252
20
+ ostk/astrodynamics/test/test_viewer.py,sha256=i164XnG6n-_FteiO6rjXA7GGsJhMdmT-508DpKaveVY,3957
21
+ open_space_toolkit_astrodynamics-4.2.0.dist-info/METADATA,sha256=3KFGB_9TpIjn290Y9BtnRVXchhIeAPcCLy-efggQ-BQ,1779
22
+ open_space_toolkit_astrodynamics-4.2.0.dist-info/WHEEL,sha256=oaSFssuzKzruaIhyzhbDphpBmFeR9wv-Pmjc-TsXgB4,94
23
+ open_space_toolkit_astrodynamics-4.2.0.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
24
+ open_space_toolkit_astrodynamics-4.2.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
25
+ open_space_toolkit_astrodynamics-4.2.0.dist-info/RECORD,,
@@ -3,3 +3,9 @@
3
3
  from ostk.physics import *
4
4
 
5
5
  from .OpenSpaceToolkitAstrodynamicsPy import *
6
+
7
+ from .pytrajectory.pystate import State as PyState
8
+
9
+ trajectory.State = (
10
+ PyState # Override the pure c++ State class with the modified Python one
11
+ )
@@ -0,0 +1,36 @@
1
+ # Apache License 2.0
2
+
3
+
4
+ # Python-only State functionality
5
+ import numpy as np
6
+
7
+ from ostk.physics.coordinate import Frame
8
+ from ostk.physics.time import Instant
9
+
10
+ from ostk.astrodynamics.trajectory import State, StateBuilder
11
+
12
+
13
+ @staticmethod
14
+ def custom_class_generator(frame: Frame, coordinates_subsets: list) -> type:
15
+ """
16
+ Emit a custom class type for States. This is meta-programming syntactic sugar on top of the StateBuilder class.
17
+
18
+ StateType = State.template(frame, coordinates_subsets)
19
+ state = StateType(instant, coordinates)
20
+
21
+ is equivalent to
22
+
23
+ state_builder = StateBuilder(frame, coordinates_subsets)
24
+ state = state_builder.build(instant, coordinates)
25
+ """
26
+
27
+ class StateTemplateType(State):
28
+ state_builder: StateBuilder = StateBuilder(frame, coordinates_subsets)
29
+
30
+ def __init__(self, instant: Instant, coordinates: np.ndarray):
31
+ super().__init__(StateTemplateType.state_builder.build(instant, coordinates))
32
+
33
+ return StateTemplateType
34
+
35
+
36
+ State.template = custom_class_generator
@@ -38,9 +38,7 @@ Access = astrodynamics.Access
38
38
 
39
39
  def test_access_constructors():
40
40
  acquisition_of_signal = Instant.date_time(DateTime(2018, 1, 1, 0, 0, 0), Scale.UTC)
41
- time_at_closest_approach = Instant.date_time(
42
- DateTime(2018, 1, 1, 0, 1, 0), Scale.UTC
43
- )
41
+ time_at_closest_approach = Instant.date_time(DateTime(2018, 1, 1, 0, 1, 0), Scale.UTC)
44
42
  loss_of_signal = Instant.date_time(DateTime(2018, 1, 1, 0, 2, 0), Scale.UTC)
45
43
  max_elevation = Angle.degrees(54.3)
46
44
 
@@ -66,9 +64,7 @@ def test_access_undefined():
66
64
 
67
65
  def test_access_getters():
68
66
  acquisition_of_signal = Instant.date_time(DateTime(2018, 1, 1, 0, 0, 0), Scale.UTC)
69
- time_at_closest_approach = Instant.date_time(
70
- DateTime(2018, 1, 1, 0, 1, 0), Scale.UTC
71
- )
67
+ time_at_closest_approach = Instant.date_time(DateTime(2018, 1, 1, 0, 1, 0), Scale.UTC)
72
68
  loss_of_signal = Instant.date_time(DateTime(2018, 1, 1, 0, 2, 0), Scale.UTC)
73
69
  max_elevation = Angle.degrees(54.3)
74
70
 
@@ -36,9 +36,7 @@ def test_coerce_to_datetime_success_datetime():
36
36
 
37
37
  def test_coerce_to_instant_success_datetime():
38
38
  value = datetime(2020, 1, 1, tzinfo=timezone.utc)
39
- assert coerce_to_instant(value) == Instant.date_time(
40
- DateTime(2020, 1, 1), Scale.UTC
41
- )
39
+ assert coerce_to_instant(value) == Instant.date_time(DateTime(2020, 1, 1), Scale.UTC)
42
40
 
43
41
 
44
42
  def test_coerce_to_instant_success_instant():
@@ -2,7 +2,7 @@
2
2
 
3
3
  import pytest
4
4
 
5
- from ostk.astrodynamics import EventCondition
5
+ from ostk.astrodynamics import EventCondition, EventConditionTarget
6
6
 
7
7
 
8
8
  @pytest.fixture
@@ -11,31 +11,31 @@ def name() -> str:
11
11
 
12
12
 
13
13
  @pytest.fixture
14
- def criteria() -> EventCondition.Criteria:
15
- return EventCondition.Criteria.AnyCrossing
14
+ def evaluator() -> callable:
15
+ return lambda state: 0.0
16
16
 
17
17
 
18
18
  @pytest.fixture
19
- def event_condition(name: str, criteria: EventCondition.Criteria) -> EventCondition:
20
- class MyEventCondition(EventCondition):
21
- def evaluate(self, state_vector, time):
22
- return state_vector[0]
23
-
24
- return MyEventCondition(name, criteria)
19
+ def target_value() -> float:
20
+ return 0.0
25
21
 
26
22
 
27
23
  @pytest.fixture
28
- def event_condition_overloaded() -> EventCondition:
29
- class OverloadedEventCondition(EventCondition):
30
- def is_satisfied(self, current_value, previous_value):
31
- return (current_value > 0.0) and (previous_value < 0.0)
24
+ def target(target_value: float) -> EventConditionTarget:
25
+ return EventConditionTarget(target_value, EventConditionTarget.Type.Absolute)
26
+
32
27
 
33
- def evaluate(self, aStateVector, aTime):
34
- return aStateVector[0]
28
+ @pytest.fixture
29
+ def event_condition(
30
+ name: str, evaluator: callable, target: EventConditionTarget
31
+ ) -> EventCondition:
32
+ class MyEventCondition(EventCondition):
33
+ def is_satisfied(
34
+ self, current_state_vector, current_time, previous_state_vector, previous_time
35
+ ):
36
+ return current_state_vector[0] > 0.0 and previous_state_vector[0] < 0.0
35
37
 
36
- return OverloadedEventCondition(
37
- "OverloadedEventCondition", EventCondition.Criteria.Undefined
38
- )
38
+ return MyEventCondition(name, evaluator, target)
39
39
 
40
40
 
41
41
  class TestEventCondition:
@@ -45,27 +45,10 @@ class TestEventCondition:
45
45
  def test_get_name(self, event_condition: EventCondition, name: str):
46
46
  assert event_condition.get_name() == name
47
47
 
48
- def test_get_criteria(
49
- self, event_condition: EventCondition, criteria: EventCondition.Criteria
48
+ def test_get_evaluator(self, event_condition: EventCondition):
49
+ assert event_condition.get_evaluator() is not None
50
+
51
+ def test_get_target(
52
+ self, event_condition: EventCondition, target: EventConditionTarget
50
53
  ):
51
- assert event_condition.get_criteria() == criteria
52
-
53
- def test_is_satisfied(self, event_condition: EventCondition):
54
- assert (
55
- event_condition.is_satisfied(current_value=1.0, previous_value=-1.0) == True
56
- )
57
-
58
- def test_overloaded_is_satisfied(self, event_condition_overloaded: EventCondition):
59
- assert event_condition_overloaded is not None
60
- assert (
61
- event_condition_overloaded.is_satisfied(
62
- current_value=1.0, previous_value=-1.0
63
- )
64
- == True
65
- )
66
- assert (
67
- event_condition_overloaded.is_satisfied(
68
- current_value=1.0, previous_value=1.0
69
- )
70
- == False
71
- )
54
+ assert event_condition.get_target() == target
@@ -18,8 +18,8 @@ class TestImport:
18
18
  from ostk.astrodynamics.flight import Profile
19
19
  from ostk.astrodynamics.flight import System
20
20
  from ostk.astrodynamics.flight.system import SatelliteSystem
21
- from ostk.astrodynamics.flight.system.dynamics import CentralBodyGravity
22
- from ostk.astrodynamics.flight.system.dynamics import AtmosphericDrag
21
+ from ostk.astrodynamics.dynamics import CentralBodyGravity
22
+ from ostk.astrodynamics.dynamics import AtmosphericDrag
23
23
  from ostk.astrodynamics import Access
24
24
  from ostk.astrodynamics.access import Generator
25
- from ostk.astrodynamics import NumericalSolver
25
+ from ostk.astrodynamics.trajectory.state import NumericalSolver
@@ -103,8 +103,7 @@ class TestViewer:
103
103
  assert "Cesium.IonResource.fromAssetId(123)" in rendered_html
104
104
  assert "widget.entities.add({polyline:" in rendered_html
105
105
  assert (
106
- "widget.entities.add({position: widget.star_tracker_position"
107
- in rendered_html
106
+ "widget.entities.add({position: widget.star_tracker_position" in rendered_html
108
107
  )
109
108
  assert rendered_html.endswith("</script>")
110
109
 
@@ -303,7 +303,7 @@ def _cesium_from_ostk_sensor(sensor: Sensor) -> cesiumpy.ConicSensor:
303
303
  return cesiumpy.ConicSensor(
304
304
  name=sensor.name,
305
305
  direction=cesiumpy.Cartesian3(*sensor.direction),
306
- half_angle=cesiumpy.math.to_radians(float(sensor.half_angle.in_radians())),
306
+ half_angle=float(sensor.half_angle.in_radians()),
307
307
  length=float(sensor.length.in_meters()),
308
308
  material=sensor.color or cesiumpy.color.RED,
309
309
  )
@@ -1,72 +0,0 @@
1
- ostk/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
2
- ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-310-x86_64-linux-gnu.so,sha256=HTDmKytResW1W_ufzYC-EKHlRKCIY1xMIBqzXcHzJIg,1213656
3
- ostk/astrodynamics/__init__.py,sha256=BE7yyrOnPqFCTPT3GhYEI4IWR5nzs96VSjKphhQ09ew,97
4
- ostk/astrodynamics/converters.py,sha256=sBZ3_JMjowWbQ9gBPA2cSEkbBfAwXmt1IBbLks76-Vk,3502
5
- ostk/astrodynamics/display.py,sha256=y9FnoQbPFGM6LzkUdgXgeqtuVGhv57GuTKbeDdcFPgw,6306
6
- ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.1,sha256=utR4AiYtpPDCwjjalrTNRmGWhG4LQrNiOevCJJ90GOE,66464592
7
- ostk/astrodynamics/utilities.py,sha256=NbeKN_CtcCRHIinhoNWTEosBMR7xc924S-ZFD97mduw,4478
8
- ostk/astrodynamics/viewer.py,sha256=5YFPBiv0YSBZrI42G4UANmOeW8tnJj86_f9gfSpHGgY,8938
9
- ostk/astrodynamics/test/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
10
- ostk/astrodynamics/test/conftest.py,sha256=J3SbQibnMVaPktAF6Z6cwVCa7xhW3uXpkOJRom6YtCo,2719
11
- ostk/astrodynamics/test/test_access.py,sha256=sOJ0IBWcHN8IgIUDMmz-mKB2uEytQZCsQzUK0Ffbsaw,3989
12
- ostk/astrodynamics/test/test_converters.py,sha256=xRSnIaZNDSlx_HtCLyUkbDvpM2j2pEnipCTMdSBF7OQ,5861
13
- ostk/astrodynamics/test/test_display.py,sha256=8YeiYRYMpokzqprbRoDBI_xhHI5B8uxcdSzmqmF3AIc,3738
14
- ostk/astrodynamics/test/test_event_condition.py,sha256=-5pBYc0ckmLnBJt34I5UxYBYZVqX4dHrTEnfyDJ-vO0,2071
15
- ostk/astrodynamics/test/test_import.py,sha256=y62-SI3pmSkIgyOIrDDXeWqWI3DhnjnUl7SgWAp99kA,1212
16
- ostk/astrodynamics/test/test_numerical_solver.py,sha256=aeLKhxvDWyQi-pzeGmg7KnUZmkoGorRVyY95YWOs0Sk,8181
17
- ostk/astrodynamics/test/test_root_solver.py,sha256=hQ8O6g-WP49gZH_H3Rdufv0F0gQorpzJyIcjBGGUQ34,1831
18
- ostk/astrodynamics/test/test_trajectory.py,sha256=4AhlAaIrCrP17ZycJqYlYskj8SC2MH7fp3_4eqWdF9s,1366
19
- ostk/astrodynamics/test/test_utilities.py,sha256=edAPLXNMflCPa0gzhU4e05pa6HbAq7UV0JzMMRx3VlQ,3252
20
- ostk/astrodynamics/test/test_viewer.py,sha256=x_U6kmxaw_8JtamTbzNj0U-VCFAskWOL87eezv02uAE,3969
21
- ostk/astrodynamics/test/access/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
22
- ostk/astrodynamics/test/access/test_generator.py,sha256=6cwC5GGvnWLxPXmgRQ-N7tjorGUfPxA8qFcdGaTmpp4,8038
23
- ostk/astrodynamics/test/conjunction/messages/ccsds/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
24
- ostk/astrodynamics/test/conjunction/messages/ccsds/conftest.py,sha256=xyTd24828Ue2HgOWY8UhizIc5mzgRgoH2VSOfVfKCdw,14632
25
- ostk/astrodynamics/test/conjunction/messages/ccsds/test_cdm.py,sha256=spMvHF6YH59xx14F6ijMp28cTYSeYfJZB9AleVi53JQ,18548
26
- ostk/astrodynamics/test/conjunction/messages/ccsds/data/cdm.json,sha256=-CL8Bu-ivigzkrqHs9Q5snSubHJ_D0YMroatEInkidc,12965
27
- ostk/astrodynamics/test/event_condition/test_coe_condition.py,sha256=rfu8STuLUaUsxMJUbKCP8PPPiPaF2UVCHYTClDsiOuE,2831
28
- ostk/astrodynamics/test/event_condition/test_conjunctive.py,sha256=X8fNUgUfXcBJB5CPip6mRDBFMNAqCHw9Mt9r3Wubjl8,1982
29
- ostk/astrodynamics/test/event_condition/test_disjunctive.py,sha256=71eNzfqtCyNeHkw6-g2i_OIWveJv40nbZU2EPfGm9Ro,1968
30
- ostk/astrodynamics/test/event_condition/test_duration_condition.py,sha256=wyDBde1vc06-cUjOwmJP6Po8cHbQTGHIDWB3e6eoO_o,973
31
- ostk/astrodynamics/test/event_condition/test_logical_connective.py,sha256=WQQQn1FdQEbAs7UxXawzAnX3ON8-UgKqYmKeOGkufN8,1117
32
- ostk/astrodynamics/test/flight/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
33
- ostk/astrodynamics/test/flight/test_profile.py,sha256=vSkDZMCObGa2ldZlWYsa1Md0m4i4TPjirTXOdje5ieU,5003
34
- ostk/astrodynamics/test/flight/test_system.py,sha256=YPrjoV3o67_1zCXCZqohlSAR7zkU0LXP2fF20M2s0C8,1326
35
- ostk/astrodynamics/test/flight/profile/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
36
- ostk/astrodynamics/test/flight/profile/test_state.py,sha256=49UyPz6p9Q_RYKVBiLgW_WHo4A7JUZtacGMhQ9ERCdc,4268
37
- ostk/astrodynamics/test/flight/system/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
38
- ostk/astrodynamics/test/flight/system/test_satellite_system.py,sha256=-5KOGVTWRIpY1jcRc0xGX6N9oRbUT_EexzB9jZFsZQg,2208
39
- ostk/astrodynamics/test/flight/system/dynamics/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
40
- ostk/astrodynamics/test/flight/system/dynamics/test_atmospheric_drag.py,sha256=qLlq90gVEOIubOprl5H-1WK5xo0DHRfnevUwn8p4JHI,2985
41
- ostk/astrodynamics/test/flight/system/dynamics/test_central_body_gravity.py,sha256=WfBj6OyagncdlHMbxc-curLHpEdWjY09mp9hawlP0yE,1748
42
- ostk/astrodynamics/test/flight/system/dynamics/test_position_derivative.py,sha256=CXIdjCLFmW5UQm28FnV9-nrmReXdyj0wvjYFcFVqPAo,1539
43
- ostk/astrodynamics/test/flight/system/dynamics/test_third_body_gravity.py,sha256=eNStu22MaKK7bknnb_zshewIHHcKt1It3y0_lmqPJXY,1783
44
- ostk/astrodynamics/test/solvers/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
45
- ostk/astrodynamics/test/solvers/test_temporal_condition_solver.py,sha256=s7r7VelXx1_b-6wO_GyOlmxlsfA4I_zpxrWojriQls8,4867
46
- ostk/astrodynamics/test/trajectory/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
47
- ostk/astrodynamics/test/trajectory/test_model.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
48
- ostk/astrodynamics/test/trajectory/test_orbit.py,sha256=SlCBZ_broPaJ6L8khMuvbdPem9-zmqG6IZwxr9cECB4,3155
49
- ostk/astrodynamics/test/trajectory/test_propagator.py,sha256=Csek8PHdoAUIAgb4mtHKmR0hUAJMmCcttFbR5hxCSpQ,7440
50
- ostk/astrodynamics/test/trajectory/test_state.py,sha256=HHBhJUfPhR1by7qTetRyF-51u9XzWUVKtu3XzTRHJtk,2079
51
- ostk/astrodynamics/test/trajectory/orbit/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
52
- ostk/astrodynamics/test/trajectory/orbit/test_model.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
53
- ostk/astrodynamics/test/trajectory/orbit/test_pass.py,sha256=MtPRKhVz4hCzfFuE0p1x89Ps68M9s7miT7VtPIDVeOo,1898
54
- ostk/astrodynamics/test/trajectory/orbit/messages/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
55
- ostk/astrodynamics/test/trajectory/orbit/messages/spacex/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
56
- ostk/astrodynamics/test/trajectory/orbit/messages/spacex/conftest.py,sha256=O75ywkPJjoFp0uKptCu4C2tGMRaGN-8NVFVhps85eWE,379
57
- ostk/astrodynamics/test/trajectory/orbit/messages/spacex/test_opm.py,sha256=wfxuccqIF2odRA9Dc-8wtKZ8t__4KJ9HVhN-il284OU,3893
58
- ostk/astrodynamics/test/trajectory/orbit/messages/spacex/data/opm_1.yaml,sha256=DqIdfLCPD9oV4qDvgq35fIT8Gb8zgtrHr5Nx53InSQM,1363
59
- ostk/astrodynamics/test/trajectory/orbit/models/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
60
- ostk/astrodynamics/test/trajectory/orbit/models/test_kepler.py,sha256=sf1FpdYyiGyWcal-CwVfelW1k-HYGlIdbJdcbOi9-lY,3372
61
- ostk/astrodynamics/test/trajectory/orbit/models/test_propagated.py,sha256=Dtlk8QFrLWbTVARqtENO0c873u9YqhisdDDKrA8EXuE,6709
62
- ostk/astrodynamics/test/trajectory/orbit/models/test_sgp4.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
63
- ostk/astrodynamics/test/trajectory/orbit/models/test_tabulated.py,sha256=zGHAXTcZSzNMSvmyicqwDMe_yQzAHphqrwsBRHfNV40,11235
64
- ostk/astrodynamics/test/trajectory/orbit/models/kepler/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
65
- ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py,sha256=c0k_m0Kq3syT8r9IaUp0J-yewzeZ3SKbUQ2L5XGkf90,2591
66
- ostk/astrodynamics/test/trajectory/orbit/models/sgp4/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
67
- ostk/astrodynamics/test/trajectory/orbit/models/sgp4/test_tle.py,sha256=3uwgIkDENZhdtEZIQhyT6R2-9WiVicazoAdBgdX8q2U,11498
68
- open_space_toolkit_astrodynamics-1.2.1.dist-info/METADATA,sha256=bXlinaWrLmIuXYsfccgetGLmNNIFXicOJ6pu7PPmIkU,1779
69
- open_space_toolkit_astrodynamics-1.2.1.dist-info/WHEEL,sha256=oaSFssuzKzruaIhyzhbDphpBmFeR9wv-Pmjc-TsXgB4,94
70
- open_space_toolkit_astrodynamics-1.2.1.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
71
- open_space_toolkit_astrodynamics-1.2.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
72
- open_space_toolkit_astrodynamics-1.2.1.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- # Apache License 2.0
@@ -1,248 +0,0 @@
1
- # Apache License 2.0
2
-
3
- import pytest
4
-
5
- from ostk.mathematics.objects import RealInterval
6
-
7
- from ostk.physics.units import Length
8
- from ostk.physics.units import Angle
9
- from ostk.physics.time import DateTime
10
- from ostk.physics.time import Scale
11
- from ostk.physics.time import Duration
12
- from ostk.physics.time import Instant
13
- from ostk.physics.time import Interval
14
- from ostk.physics import Environment
15
- from ostk.physics.environment.objects import Celestial
16
-
17
- from ostk.astrodynamics import Trajectory
18
- from ostk.astrodynamics.trajectory import Orbit
19
- from ostk.astrodynamics.trajectory.orbit.models import Kepler
20
- from ostk.astrodynamics.trajectory.orbit.models.kepler import COE
21
- from ostk.astrodynamics import Access
22
- from ostk.astrodynamics.access import Generator
23
-
24
-
25
- @pytest.fixture
26
- def environment() -> Environment:
27
- return Environment.default()
28
-
29
-
30
- @pytest.fixture
31
- def earth(environment: Environment) -> Celestial:
32
- return environment.access_celestial_object_with_name("Earth")
33
-
34
-
35
- @pytest.fixture
36
- def generator(environment: Environment) -> Generator:
37
- return Generator(
38
- environment=environment,
39
- aer_filter=lambda aer: True,
40
- access_filter=lambda access: True,
41
- state_filter=lambda state_1, state_2: True,
42
- )
43
-
44
-
45
- @pytest.fixture
46
- def from_trajectory(earth: Celestial) -> Trajectory:
47
- return Orbit(
48
- model=Kepler(
49
- coe=COE(
50
- semi_major_axis=Length.kilometers(7000.0),
51
- eccentricity=0.0,
52
- inclination=Angle.degrees(45.0),
53
- raan=Angle.degrees(0.0),
54
- aop=Angle.degrees(0.0),
55
- true_anomaly=Angle.degrees(0.0),
56
- ),
57
- epoch=Instant.date_time(DateTime(2018, 1, 1, 0, 0, 0), Scale.UTC),
58
- celestial_object=earth,
59
- perturbation_type=Kepler.PerturbationType.No,
60
- ),
61
- celestial_object=earth,
62
- )
63
-
64
-
65
- @pytest.fixture
66
- def to_trajectory(earth: Celestial) -> Trajectory:
67
- return Orbit(
68
- model=Kepler(
69
- coe=COE(
70
- semi_major_axis=Length.kilometers(7000.0),
71
- eccentricity=0.0,
72
- inclination=Angle.degrees(45.0),
73
- raan=Angle.degrees(180.0),
74
- aop=Angle.degrees(0.0),
75
- true_anomaly=Angle.degrees(180.0),
76
- ),
77
- epoch=Instant.date_time(DateTime(2018, 1, 1, 0, 0, 0), Scale.UTC),
78
- celestial_object=earth,
79
- perturbation_type=Kepler.PerturbationType.No,
80
- ),
81
- celestial_object=earth,
82
- )
83
-
84
-
85
- class TestGenerator:
86
- def test_constructor_success_environment(self, environment: Environment):
87
- generator = Generator(
88
- environment=environment,
89
- )
90
-
91
- assert generator is not None
92
- assert isinstance(generator, Generator)
93
-
94
- def test_constructor_success_environment_aer_filter(self, environment: Environment):
95
- generator = Generator(
96
- environment=environment,
97
- aer_filter=lambda aer: True,
98
- )
99
-
100
- assert generator is not None
101
- assert isinstance(generator, Generator)
102
-
103
- def test_constructor_success_environment_access_filter(
104
- self,
105
- environment: Environment,
106
- ):
107
- generator = Generator(
108
- environment=environment,
109
- access_filter=lambda access: True,
110
- )
111
-
112
- assert generator is not None
113
- assert isinstance(generator, Generator)
114
-
115
- def test_constructor_success_environment_state_filter(
116
- self,
117
- environment: Environment,
118
- ):
119
- generator = Generator(
120
- environment=environment,
121
- state_filter=lambda state_1, state_2: True,
122
- )
123
-
124
- assert generator is not None
125
- assert isinstance(generator, Generator)
126
-
127
- def test_constructor_success_environment_step_tolerance(
128
- self,
129
- environment: Environment,
130
- ):
131
- generator = Generator(
132
- environment=environment,
133
- step=Duration.seconds(1.0),
134
- tolerance=Duration.minutes(1.0),
135
- )
136
-
137
- assert generator is not None
138
- assert isinstance(generator, Generator)
139
- assert generator.get_step() == Duration.seconds(1.0)
140
- assert generator.get_tolerance() == Duration.minutes(1.0)
141
-
142
- def test_getters_success(self, generator: Generator):
143
- assert generator.get_step() == Duration.minutes(1.0)
144
- assert generator.get_tolerance() == Duration.microseconds(1.0)
145
- assert generator.get_aer_filter() is not None
146
- assert generator.get_access_filter() is not None
147
- assert generator.get_state_filter() is not None
148
-
149
- def test_get_condition_function_success(
150
- self,
151
- generator: Generator,
152
- from_trajectory: Trajectory,
153
- to_trajectory: Trajectory,
154
- ):
155
- condition_function = generator.get_condition_function(
156
- from_trajectory=from_trajectory,
157
- to_trajectory=to_trajectory,
158
- )
159
-
160
- assert condition_function is not None
161
- assert (
162
- condition_function(
163
- Instant.date_time(DateTime(2018, 1, 1, 0, 0, 0), Scale.UTC)
164
- )
165
- is True
166
- )
167
-
168
- def test_compute_accesses_success(
169
- self,
170
- generator: Generator,
171
- from_trajectory: Trajectory,
172
- to_trajectory: Trajectory,
173
- ):
174
- accesses = generator.compute_accesses(
175
- interval=Interval.closed(
176
- Instant.date_time(DateTime(2018, 1, 1, 0, 0, 0), Scale.UTC),
177
- Instant.date_time(DateTime(2018, 1, 1, 2, 0, 0), Scale.UTC),
178
- ),
179
- from_trajectory=from_trajectory,
180
- to_trajectory=to_trajectory,
181
- )
182
-
183
- assert accesses is not None
184
- assert isinstance(accesses, list)
185
- assert accesses[0] is not None
186
- assert isinstance(accesses[0], Access)
187
-
188
- def test_set_step_success(self, generator: Generator):
189
- generator.set_step(Duration.seconds(1.0))
190
-
191
- def test_set_tolerance_success(self, generator: Generator):
192
- generator.set_tolerance(Duration.seconds(1.0))
193
-
194
- def test_set_aer_filter_success(self, generator: Generator):
195
- generator.set_aer_filter(aer_filter=lambda aer: True)
196
-
197
- def test_set_access_filter_success(self, generator: Generator):
198
- generator.set_access_filter(access_filter=lambda access: True)
199
-
200
- def test_set_state_filter_success(self, generator: Generator):
201
- generator.set_state_filter(state_filter=lambda state_1, state_2: True)
202
-
203
- def test_undefined_success(self):
204
- generator = Generator.undefined()
205
-
206
- assert generator is not None
207
- assert isinstance(generator, Generator)
208
- assert generator.is_defined() is False
209
-
210
- def test_aer_ranges_success(self, environment: Environment):
211
- # Construct arbitrary AER ranges
212
- azimuth_interval = RealInterval.closed(0.0, 360.0)
213
- elevation_interval = RealInterval.closed(0.0, 90.0)
214
- range_interval = RealInterval.closed(0.0, 7000e3)
215
-
216
- generator = Generator.aer_ranges(
217
- azimuth_range=azimuth_interval,
218
- elevation_range=elevation_interval,
219
- range_range=range_interval,
220
- environment=environment,
221
- )
222
-
223
- assert generator is not None
224
- assert isinstance(generator, Generator)
225
- assert generator.is_defined()
226
-
227
- def test_aer_mask_success(self, environment: Environment):
228
- # Construct arbitrary anAzimuthElevationMask using python dict
229
- an_azimuth_elevation_mask = {
230
- 0.0: 30.0,
231
- 90.0: 60.0,
232
- 180.0: 60.0,
233
- 270.0: 30.0,
234
- 359.0: 30.0,
235
- }
236
-
237
- # Construct arbitrary aRangerange
238
- a_range_range = RealInterval(0.0, 10e4, RealInterval.Type.Closed)
239
-
240
- generator = Generator.aer_mask(
241
- azimuth_elevation_mask=an_azimuth_elevation_mask,
242
- range_range=a_range_range,
243
- environment=environment,
244
- )
245
-
246
- assert generator is not None
247
- assert isinstance(generator, Generator)
248
- assert generator.is_defined()
@@ -1 +0,0 @@
1
- # Apache License 2.0