open-space-toolkit-astrodynamics 1.2.0__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.0.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.0.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.0.dist-info → open_space_toolkit_astrodynamics-4.2.0.dist-info}/WHEEL +0 -0
  63. {open_space_toolkit_astrodynamics-1.2.0.dist-info → open_space_toolkit_astrodynamics-4.2.0.dist-info}/top_level.txt +0 -0
  64. {open_space_toolkit_astrodynamics-1.2.0.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,418 +0,0 @@
1
- # Apache License 2.0
2
-
3
- import pytest
4
-
5
- from datetime import datetime
6
-
7
- from ostk.core.containers import Dictionary
8
- from ostk.core.filesystem import File
9
-
10
- from ostk.physics.units import Length
11
- from ostk.physics.units import Mass
12
- from ostk.physics.time import Instant
13
- from ostk.physics.time import Scale
14
- from ostk.physics.time import Duration
15
- from ostk.physics.coordinate import Frame
16
- from ostk.physics.coordinate import Position
17
- from ostk.physics.coordinate import Velocity
18
-
19
- from ostk.astrodynamics.trajectory import State
20
- from ostk.astrodynamics.conjunction.messages.ccsds import CDM
21
-
22
-
23
- @pytest.fixture
24
- def cdm() -> CDM:
25
- return CDM(
26
- header=CDM.Header(
27
- ccsds_cdm_version="1.0",
28
- creation_date=Instant.date_time(
29
- datetime(2010, 3, 12, 22, 31, 12), Scale.UTC
30
- ),
31
- originator="JSPOC",
32
- message_for="SATELLITE A",
33
- message_id="201113719185",
34
- ),
35
- relative_metadata=CDM.RelativeMetadata(
36
- comment="",
37
- time_of_closest_approach=Instant.date_time(
38
- datetime(2010, 3, 13, 22, 37, 52, 618), Scale.UTC
39
- ),
40
- miss_distance=Length.meters(715.0),
41
- start_screen_period=Instant.date_time(
42
- datetime(2010, 3, 12, 18, 29, 32, 212), Scale.UTC
43
- ),
44
- end_screen_period=Instant.date_time(
45
- datetime(2010, 3, 15, 18, 29, 32, 212), Scale.UTC
46
- ),
47
- screen_volume_frame="RTN",
48
- screen_volume_shape="ELLIPSOID",
49
- screen_volume_x=200.0,
50
- screen_volume_y=1000.0,
51
- screen_volume_z=1000.0,
52
- screen_entry_time=Instant.date_time(
53
- datetime(2010, 3, 13, 22, 37, 52, 222), Scale.UTC
54
- ),
55
- screen_exit_time=Instant.date_time(
56
- datetime(2010, 3, 13, 22, 37, 52, 824), Scale.UTC
57
- ),
58
- collision_probability=0.0000435,
59
- collision_probability_method="FOSTER-1992",
60
- ),
61
- objects_metadata_array=[
62
- CDM.Metadata(
63
- comment="",
64
- object="OBJECT1",
65
- object_designator=12345,
66
- catalog_name="SATCAT",
67
- object_name="SATELLITE A",
68
- international_designator="1997−030E",
69
- object_type=CDM.ObjectType.Payload,
70
- operator_contact_position="OSA",
71
- operator_organization="EUTMETSAT",
72
- operator_phone="+49615130312",
73
- operator_email="JOHN.DOE@SOMEWHERE.NET",
74
- ephemeris_name="EPHEMERIS SATELLITE A",
75
- covariance_method="CALCULATED",
76
- maneuverable="YES",
77
- orbit_center="",
78
- reference_frame="EME2000",
79
- gravity_model="EGM-96: 36D 36O",
80
- atmospheric_model="JACCHIA 70 DCA",
81
- n_body_perturbations="MOON, SUN",
82
- solar_radiation_pressure=False,
83
- earth_tides=False,
84
- in_track_thrust=False,
85
- ),
86
- CDM.Metadata(
87
- object="OBJECT2",
88
- object_designator=12346,
89
- catalog_name="SATCAT",
90
- object_name="SATELLITE B",
91
- international_designator="1997−030F",
92
- object_type=CDM.ObjectType.Payload,
93
- ephemeris_name="EPHEMERIS SATELLITE B",
94
- covariance_method="CALCULATED",
95
- maneuverable="YES",
96
- reference_frame="EME2000",
97
- ),
98
- ],
99
- objects_data_array=[
100
- CDM.Data(
101
- time_last_observation_start=Instant.date_time(
102
- datetime(2010, 3, 12, 2, 14, 12, 746), Scale.UTC
103
- ),
104
- time_last_observation_end=Instant.date_time(
105
- datetime(2010, 3, 12, 2, 14, 12, 746), Scale.UTC
106
- ),
107
- recommended_od_span=Duration.days(7.88),
108
- actual_od_span=Duration.days(5.50),
109
- observations_available=592,
110
- observations_used=579,
111
- tracks_available=123,
112
- tracks_used=119,
113
- residuals_accepted=97.8,
114
- weighted_rms=0.864,
115
- area_pc=5.2,
116
- area_drag=0.0,
117
- area_srp=0.0,
118
- mass=Mass.kilograms(251.6),
119
- cd_area_over_mass=0.0,
120
- cr_area_over_mass=0.0,
121
- thrust_acceleration=0.0,
122
- sedr=0.0,
123
- ),
124
- CDM.Data(
125
- time_last_observation_start=Instant.date_time(
126
- datetime(2010, 3, 12, 2, 14, 12, 746), Scale.UTC
127
- ),
128
- time_last_observation_end=Instant.date_time(
129
- datetime(2010, 3, 12, 2, 14, 12, 746), Scale.UTC
130
- ),
131
- recommended_od_span=Duration.days(7.88),
132
- actual_od_span=Duration.days(5.50),
133
- observations_available=592,
134
- observations_used=579,
135
- tracks_available=123,
136
- tracks_used=119,
137
- residuals_accepted=97.8,
138
- weighted_rms=0.864,
139
- area_pc=5.2,
140
- area_drag=0.0,
141
- area_srp=0.0,
142
- mass=Mass.kilograms(251.6),
143
- cd_area_over_mass=0.0,
144
- cr_area_over_mass=0.0,
145
- thrust_acceleration=0.0,
146
- sedr=0.0,
147
- ),
148
- ],
149
- )
150
-
151
-
152
- class TestCDM:
153
- def test_constructor(self, cdm: CDM):
154
- assert cdm is not None
155
-
156
- def test_get_header(self, cdm: CDM):
157
- cdm_header: CDM.Header = cdm.get_header()
158
-
159
- assert cdm_header is not None
160
- assert cdm_header.ccsds_cdm_version == "1.0"
161
- assert cdm_header.creation_date == Instant.date_time(
162
- datetime(2010, 3, 12, 22, 31, 12), Scale.UTC
163
- )
164
- assert cdm_header.originator == "JSPOC"
165
- assert cdm_header.message_for == "SATELLITE A"
166
- assert cdm_header.message_id == "201113719185"
167
-
168
- def test_get_relative_metadata(self, cdm: CDM):
169
- cdm_relative_metadata: CDM.RelativeMetadata = cdm.get_relative_metadata()
170
-
171
- assert cdm_relative_metadata is not None
172
- assert cdm_relative_metadata.comment == ""
173
- assert cdm_relative_metadata.time_of_closest_approach == Instant.date_time(
174
- datetime(2010, 3, 13, 22, 37, 52, 618), Scale.UTC
175
- )
176
- assert cdm_relative_metadata.miss_distance == Length.meters(715.0)
177
- assert cdm_relative_metadata.start_screen_period == Instant.date_time(
178
- datetime(2010, 3, 12, 18, 29, 32, 212), Scale.UTC
179
- )
180
- assert cdm_relative_metadata.end_screen_period == Instant.date_time(
181
- datetime(2010, 3, 15, 18, 29, 32, 212), Scale.UTC
182
- )
183
- assert cdm_relative_metadata.screen_volume_frame == "RTN"
184
- assert cdm_relative_metadata.screen_volume_shape == "ELLIPSOID"
185
- assert cdm_relative_metadata.screen_volume_x == 200.0
186
- assert cdm_relative_metadata.screen_volume_y == 1000.0
187
- assert cdm_relative_metadata.screen_volume_z == 1000.0
188
- assert cdm_relative_metadata.screen_entry_time == Instant.date_time(
189
- datetime(2010, 3, 13, 22, 37, 52, 222), Scale.UTC
190
- )
191
- assert cdm_relative_metadata.screen_exit_time == Instant.date_time(
192
- datetime(2010, 3, 13, 22, 37, 52, 824), Scale.UTC
193
- )
194
- assert cdm_relative_metadata.collision_probability == 0.0000435
195
- assert cdm_relative_metadata.collision_probability_method == "FOSTER-1992"
196
-
197
- def test_get_metadata_array(self, cdm: CDM):
198
- assert cdm.get_metadata_array() is not None
199
- assert len(cdm.get_metadata_array()) == 2
200
-
201
- def test_get_data_array(self, cdm: CDM):
202
- assert cdm.get_data_array() is not None
203
- assert len(cdm.get_data_array()) == 2
204
-
205
- def test_get_object_metadata_at(self, cdm: CDM):
206
- assert cdm.get_object_metadata_at(0) is not None
207
- assert cdm.get_object_metadata_at(1) is not None
208
-
209
- cdm_object_1_metadata: CDM.Metadata = cdm.get_object_metadata_at(0)
210
-
211
- assert cdm_object_1_metadata.comment == ""
212
- assert cdm_object_1_metadata.object == "OBJECT1"
213
- assert cdm_object_1_metadata.object_designator == 12345
214
- assert cdm_object_1_metadata.catalog_name == "SATCAT"
215
- assert cdm_object_1_metadata.object_name == "SATELLITE A"
216
- assert cdm_object_1_metadata.international_designator == "1997−030E"
217
- assert cdm_object_1_metadata.object_type == CDM.ObjectType.Payload
218
- assert cdm_object_1_metadata.operator_contact_position == "OSA"
219
- assert cdm_object_1_metadata.operator_organization == "EUTMETSAT"
220
- assert cdm_object_1_metadata.operator_phone == "+49615130312"
221
- assert cdm_object_1_metadata.operator_email == "JOHN.DOE@SOMEWHERE.NET"
222
- assert cdm_object_1_metadata.ephemeris_name == "EPHEMERIS SATELLITE A"
223
- assert cdm_object_1_metadata.covariance_method == "CALCULATED"
224
- assert cdm_object_1_metadata.maneuverable == "YES"
225
- assert cdm_object_1_metadata.orbit_center == ""
226
- assert cdm_object_1_metadata.reference_frame == "EME2000"
227
- assert cdm_object_1_metadata.gravity_model == "EGM-96: 36D 36O"
228
- assert cdm_object_1_metadata.atmospheric_model == "JACCHIA 70 DCA"
229
- assert cdm_object_1_metadata.n_body_perturbations == "MOON, SUN"
230
- assert cdm_object_1_metadata.solar_radiation_pressure == False
231
- assert cdm_object_1_metadata.earth_tides == False
232
- assert cdm_object_1_metadata.in_track_thrust == False
233
-
234
- cdm_object_2_metadata: CDM.Metadata = cdm.get_object_metadata_at(1)
235
-
236
- assert cdm_object_2_metadata.comment == ""
237
- assert cdm_object_2_metadata.object == "OBJECT2"
238
- assert cdm_object_2_metadata.object_designator == 12346
239
- assert cdm_object_2_metadata.catalog_name == "SATCAT"
240
- assert cdm_object_2_metadata.object_name == "SATELLITE B"
241
- assert cdm_object_2_metadata.international_designator == "1997−030F"
242
- assert cdm_object_2_metadata.object_type == CDM.ObjectType.Payload
243
- assert cdm_object_2_metadata.operator_contact_position == ""
244
- assert cdm_object_2_metadata.operator_organization == ""
245
- assert cdm_object_2_metadata.operator_phone == ""
246
- assert cdm_object_2_metadata.operator_email == ""
247
- assert cdm_object_2_metadata.ephemeris_name == "EPHEMERIS SATELLITE B"
248
- assert cdm_object_2_metadata.covariance_method == "CALCULATED"
249
- assert cdm_object_2_metadata.maneuverable == "YES"
250
- assert cdm_object_2_metadata.orbit_center == ""
251
- assert cdm_object_2_metadata.reference_frame == "EME2000"
252
- assert cdm_object_2_metadata.gravity_model == ""
253
- assert cdm_object_2_metadata.atmospheric_model == ""
254
- assert cdm_object_2_metadata.n_body_perturbations == ""
255
- assert cdm_object_2_metadata.solar_radiation_pressure == False
256
- assert cdm_object_2_metadata.earth_tides == False
257
- assert cdm_object_2_metadata.in_track_thrust == False
258
-
259
- with pytest.raises(Exception) as e:
260
- cdm.get_object_metadata_at(2)
261
-
262
- def test_get_object_data_at(self, cdm: CDM):
263
- assert cdm.get_object_data_at(0) is not None
264
- assert cdm.get_object_data_at(1) is not None
265
-
266
- cdm_object_1_data: CDM.Data = cdm.get_object_data_at(0)
267
-
268
- assert cdm_object_1_data.time_last_observation_start == Instant.date_time(
269
- datetime(2010, 3, 12, 2, 14, 12, 746), Scale.UTC
270
- )
271
- assert cdm_object_1_data.time_last_observation_end == Instant.date_time(
272
- datetime(2010, 3, 12, 2, 14, 12, 746), Scale.UTC
273
- )
274
- assert cdm_object_1_data.recommended_od_span == Duration.days(7.88)
275
- assert cdm_object_1_data.actual_od_span == Duration.days(5.50)
276
- assert cdm_object_1_data.observations_available == 592
277
- assert cdm_object_1_data.observations_used == 579
278
- assert cdm_object_1_data.tracks_available == 123
279
- assert cdm_object_1_data.tracks_used == 119
280
- assert cdm_object_1_data.residuals_accepted == 97.8
281
- assert cdm_object_1_data.weighted_rms == 0.864
282
- assert cdm_object_1_data.area_pc == 5.2
283
- assert cdm_object_1_data.area_drag == 0.0
284
- assert cdm_object_1_data.area_srp == 0.0
285
- assert cdm_object_1_data.mass == Mass.kilograms(251.6)
286
- assert cdm_object_1_data.cd_area_over_mass == 0.0
287
- assert cdm_object_1_data.cr_area_over_mass == 0.0
288
- assert cdm_object_1_data.thrust_acceleration == 0.0
289
- assert cdm_object_1_data.sedr == 0.0
290
-
291
- cdm_object_2_data: CDM.Data = cdm.get_object_data_at(1)
292
-
293
- assert cdm_object_2_data.time_last_observation_start == Instant.date_time(
294
- datetime(2010, 3, 12, 2, 14, 12, 746), Scale.UTC
295
- )
296
- assert cdm_object_2_data.time_last_observation_end == Instant.date_time(
297
- datetime(2010, 3, 12, 2, 14, 12, 746), Scale.UTC
298
- )
299
- assert cdm_object_2_data.recommended_od_span == Duration.days(7.88)
300
- assert cdm_object_2_data.actual_od_span == Duration.days(5.50)
301
- assert cdm_object_2_data.observations_available == 592
302
- assert cdm_object_2_data.observations_used == 579
303
- assert cdm_object_2_data.tracks_available == 123
304
- assert cdm_object_2_data.tracks_used == 119
305
- assert cdm_object_2_data.residuals_accepted == 97.8
306
- assert cdm_object_2_data.weighted_rms == 0.864
307
- assert cdm_object_2_data.area_pc == 5.2
308
- assert cdm_object_2_data.area_drag == 0.0
309
- assert cdm_object_2_data.area_srp == 0.0
310
- assert cdm_object_2_data.mass == Mass.kilograms(251.6)
311
- assert cdm_object_2_data.cd_area_over_mass == 0.0
312
- assert cdm_object_2_data.cr_area_over_mass == 0.0
313
- assert cdm_object_2_data.thrust_acceleration == 0.0
314
- assert cdm_object_2_data.sedr == 0.0
315
-
316
- with pytest.raises(Exception) as e:
317
- cdm.get_object_data_at(2)
318
-
319
- def test_get_ccsds_cdm_version(self, cdm: CDM):
320
- assert cdm.get_ccsds_cdm_version() == "1.0"
321
-
322
- def test_get_creation_instant(self, cdm: CDM):
323
- assert cdm.get_creation_instant() == Instant.date_time(
324
- datetime(2010, 3, 12, 22, 31, 12), Scale.UTC
325
- )
326
-
327
- def test_get_originator(self, cdm: CDM):
328
- assert cdm.get_originator() == "JSPOC"
329
-
330
- def test_get_message_for(self, cdm: CDM):
331
- assert cdm.get_message_for() == "SATELLITE A"
332
-
333
- def test_get_message_id(self, cdm: CDM):
334
- assert cdm.get_message_id() == "201113719185"
335
-
336
- def test_get_time_of_closest_approach(self, cdm: CDM):
337
- assert cdm.get_time_of_closest_approach() == Instant.date_time(
338
- datetime(2010, 3, 13, 22, 37, 52, 618), Scale.UTC
339
- )
340
-
341
- def test_get_miss_distance(self, cdm: CDM):
342
- assert cdm.get_miss_distance() == Length.meters(715.0)
343
-
344
- def test_get_relative_position(self, cdm: CDM):
345
- assert cdm.get_relative_position().is_defined() is False
346
-
347
- def test_get_relative_velocity(self, cdm: CDM):
348
- assert cdm.get_relative_velocity().is_defined() is False
349
-
350
- def test_get_collision_probability(self, cdm: CDM):
351
- assert cdm.get_collision_probability() == 0.0000435
352
-
353
- def test_get_collision_probability_method(self, cdm: CDM):
354
- assert cdm.get_collision_probability_method() == "FOSTER-1992"
355
-
356
- def test_undefined(self):
357
- assert CDM.undefined().is_defined() is False
358
-
359
- def test_dictionary(self, cdm_spacetrack_dictionary: dict):
360
- dictionary = Dictionary(cdm_spacetrack_dictionary)
361
-
362
- cdm: CDM = CDM.dictionary(dictionary)
363
-
364
- assert cdm is not None
365
- assert cdm.get_header() is not None
366
- assert cdm.get_ccsds_cdm_version() == "1.0"
367
- assert cdm.get_creation_instant() == Instant.date_time(
368
- datetime(2022, 12, 25, 0, 33, 16), Scale.UTC
369
- )
370
- assert cdm.get_originator() == "CSpOC"
371
- assert cdm.get_message_for() == "YAM-2"
372
- assert cdm.get_message_id() == "406320986"
373
- assert cdm.get_time_of_closest_approach() == Instant.date_time(
374
- datetime(2022, 12, 27, 13, 28, 59, 516000), Scale.UTC
375
- )
376
- assert cdm.get_miss_distance() == Length.meters(974.0)
377
- assert cdm.get_relative_position().is_defined() is False
378
- assert cdm.get_relative_velocity().is_defined() is False
379
- assert cdm.get_collision_probability() == 5.162516e-16
380
- assert cdm.get_collision_probability_method() == "FOSTER-1992"
381
-
382
- object_1_metadata: CDM.Metadata = cdm.get_object_metadata_at(0)
383
-
384
- assert object_1_metadata.object == "OBJECT1"
385
- assert object_1_metadata.object_designator == 48911
386
- assert object_1_metadata.catalog_name == "SATCAT"
387
- assert object_1_metadata.object_name == "YAM-2"
388
- assert object_1_metadata.international_designator == "2021-059AJ"
389
- assert object_1_metadata.object_type == CDM.ObjectType.Payload
390
- assert object_1_metadata.ephemeris_name == "NONE"
391
- assert object_1_metadata.covariance_method == "CALCULATED"
392
- assert object_1_metadata.maneuverable == "N/A"
393
- assert object_1_metadata.reference_frame == "ITRF"
394
-
395
- # object_1_data: CDM.Data = cdm.get_object_data_at(0)
396
-
397
- # assert object_1_data.state == State(
398
- # Instant.date_time(datetime(2022, 12, 27, 13, 28, 59, 516000), Scale.UTC),
399
- # Position.meters([-4988150.231999999844, -1691825.955000000075, -4469421.481999999844], Frame.ITRF()),
400
- # Velocity.meters_per_second([-5122.248844000000, 54.300816000000, 5699.434412000000], Frame.ITRF())
401
- # )
402
-
403
- def test_parse(self, cdm_file: File):
404
- with open(str(cdm_file.get_path().to_string()), "r") as stream:
405
- assert CDM.parse(string=stream.read()) is not None
406
-
407
- def test_load(self, cdm_file: File):
408
- assert CDM.load(file=cdm_file) is not None
409
-
410
- def test_object_type_from_string(self):
411
- assert CDM.object_type_from_string("PAYLOAD") == CDM.ObjectType.Payload
412
- assert CDM.object_type_from_string("ROCKET BODY") == CDM.ObjectType.RocketBody
413
- assert CDM.object_type_from_string("DEBRIS") == CDM.ObjectType.Debris
414
- assert CDM.object_type_from_string("UNKNOWN") == CDM.ObjectType.Unknown
415
- assert CDM.object_type_from_string("OTHER") == CDM.ObjectType.Other
416
-
417
- with pytest.raises(Exception) as e:
418
- CDM.object_type_from_string("ANOTHERSUPPORTEDTYPE")
@@ -1,95 +0,0 @@
1
- # Apache License 2.0
2
-
3
- import pytest
4
-
5
- from ostk.physics.environment.gravitational import Earth
6
- from ostk.physics.units import Derived, Length, Angle
7
-
8
- from ostk.astrodynamics.event_condition import COECondition
9
- from ostk.astrodynamics.trajectory.orbit.models.kepler import COE
10
-
11
-
12
- @pytest.fixture
13
- def criteria() -> COECondition.Criteria:
14
- return COECondition.Criteria.AnyCrossing
15
-
16
-
17
- @pytest.fixture
18
- def gravitational_parameter() -> Derived:
19
- return Earth.spherical.gravitational_parameter
20
-
21
-
22
- @pytest.fixture
23
- def element() -> COE.Element:
24
- return COE.Element.SemiMajorAxis
25
-
26
-
27
- @pytest.fixture
28
- def target() -> float:
29
- return 7e6
30
-
31
-
32
- @pytest.fixture
33
- def condition(
34
- criteria: COECondition.Criteria,
35
- element: COE.Element,
36
- target: float,
37
- gravitational_parameter: Derived,
38
- ) -> COECondition:
39
- return COECondition(
40
- "Test COECondition", criteria, element, target, gravitational_parameter
41
- )
42
-
43
-
44
- @pytest.fixture
45
- def state_vector() -> list[float]:
46
- return [
47
- 717094.039086306,
48
- -6872433.2241124,
49
- 46175.9696673281,
50
- -970.650826004612,
51
- -45.4598114773158,
52
- 7529.82424886455,
53
- ]
54
-
55
-
56
- class TestCOECondition:
57
- def test_constructor(self, criteria, element, target, gravitational_parameter):
58
- name = "Test COECondition"
59
- condition = COECondition(
60
- name, criteria, element, target, gravitational_parameter
61
- )
62
-
63
- assert condition is not None
64
-
65
- def test_getters(self, condition, element, target, gravitational_parameter):
66
- assert condition.get_element() == element
67
- assert condition.get_target() == target
68
- assert condition.get_gravitational_parameter() == gravitational_parameter
69
-
70
- @pytest.mark.parametrize(
71
- "static_constructor,target",
72
- (
73
- (COECondition.semi_major_axis, Length.meters(7e6)),
74
- (COECondition.eccentricity, 0.1),
75
- (COECondition.inclination, Angle.degrees(0.0)),
76
- (COECondition.aop, Angle.degrees(0.0)),
77
- (COECondition.raan, Angle.degrees(0.0)),
78
- (COECondition.true_anomaly, Angle.degrees(0.0)),
79
- (COECondition.mean_anomaly, Angle.degrees(0.0)),
80
- (COECondition.eccentric_anomaly, Angle.degrees(0.0)),
81
- ),
82
- )
83
- def test_static_constructors(
84
- self, static_constructor, target, criteria, gravitational_parameter
85
- ):
86
- assert static_constructor(criteria, target, gravitational_parameter) is not None
87
-
88
- def test_evaluate(self, condition, state_vector, target):
89
- assert condition.evaluate(state_vector, 0.0) == pytest.approx(
90
- 6904757.8910061345 - target, abs=1e-9
91
- )
92
-
93
- def test_string_from_element(self):
94
- element_str = COECondition.string_from_element(COE.Element.SemiMajorAxis)
95
- assert element_str == "Semi-major axis"
@@ -1,64 +0,0 @@
1
- # Apache License 2.0
2
-
3
- import pytest
4
-
5
- from ostk.astrodynamics import EventCondition
6
- from ostk.astrodynamics.event_condition import Conjunctive
7
-
8
-
9
- @pytest.fixture
10
- def first_condition() -> EventCondition:
11
- class FirstCondition(EventCondition):
12
- def evaluate(self, state_vector, time):
13
- return state_vector[0]
14
-
15
- return FirstCondition("First Condition", EventCondition.Criteria.PositiveCrossing)
16
-
17
-
18
- @pytest.fixture
19
- def second_condition() -> EventCondition:
20
- class SecondCondition(EventCondition):
21
- def evaluate(self, state_vector, time):
22
- return state_vector[1] - 0.1
23
-
24
- return SecondCondition("Second condition", EventCondition.Criteria.StrictlyNegative)
25
-
26
-
27
- @pytest.fixture
28
- def event_conditions(
29
- first_condition: EventCondition, second_condition: EventCondition
30
- ) -> list[EventCondition]:
31
- return [first_condition, second_condition]
32
-
33
-
34
- @pytest.fixture
35
- def conjunction_condition(event_conditions: list[EventCondition]) -> Conjunctive:
36
- return Conjunctive(event_conditions)
37
-
38
-
39
- class TestConjunctiveCondition:
40
- def test_constructor(self, event_conditions: list[EventCondition]):
41
- assert Conjunctive(event_conditions) is not None
42
-
43
- def test_is_satisfied(self, conjunction_condition: Conjunctive):
44
- # x0 crossing root (true), x1 negative (true)
45
- assert (
46
- conjunction_condition.is_satisfied([1.0, 0.0], 0.0, [-1.0, 3.0], 0.0) == True
47
- )
48
-
49
- # x0 crossing root (true), x1 positive (false)
50
- assert (
51
- conjunction_condition.is_satisfied([1.0, 1.0], 0.0, [-1.0, 3.0], 0.0) == False
52
- )
53
-
54
- # x0 not crossing root (false), x1 negative (true)
55
- assert (
56
- conjunction_condition.is_satisfied([-0.5, 1.0], 0.0, [-1.0, 3.0], 0.0)
57
- == False
58
- )
59
-
60
- # x0 not crossing root (false), x1 positive (false)
61
- assert (
62
- conjunction_condition.is_satisfied([-0.5, 0.0], 0.0, [-1.0, 3.0], 0.0)
63
- == False
64
- )
@@ -1,63 +0,0 @@
1
- # Apache License 2.0
2
-
3
- import pytest
4
-
5
- from ostk.astrodynamics import EventCondition
6
- from ostk.astrodynamics.event_condition import Disjunctive
7
-
8
-
9
- @pytest.fixture
10
- def first_condition() -> EventCondition:
11
- class FirstCondition(EventCondition):
12
- def evaluate(self, state_vector, time):
13
- return state_vector[0]
14
-
15
- return FirstCondition("First Condition", EventCondition.Criteria.PositiveCrossing)
16
-
17
-
18
- @pytest.fixture
19
- def second_condition() -> EventCondition:
20
- class SecondCondition(EventCondition):
21
- def evaluate(self, state_vector, time):
22
- return state_vector[1] - 0.1
23
-
24
- return SecondCondition("Second condition", EventCondition.Criteria.StrictlyNegative)
25
-
26
-
27
- @pytest.fixture
28
- def event_conditions(
29
- first_condition: EventCondition, second_condition: EventCondition
30
- ) -> list[EventCondition]:
31
- return [first_condition, second_condition]
32
-
33
-
34
- @pytest.fixture
35
- def disjunction_condition(event_conditions: list[EventCondition]) -> Disjunctive:
36
- return Disjunctive(event_conditions)
37
-
38
-
39
- class TestDisjunctiveCondition:
40
- def test_constructor(self, event_conditions: list[EventCondition]):
41
- assert Disjunctive(event_conditions) is not None
42
-
43
- def test_is_satisfied(self, disjunction_condition: Disjunctive):
44
- # x0 crossing root (true), x1 negative (true)
45
- assert (
46
- disjunction_condition.is_satisfied([1.0, 0.0], 0.0, [-1.0, 3.0], 0.0) == True
47
- )
48
-
49
- # x0 crossing root (true), x1 positive (false)
50
- assert (
51
- disjunction_condition.is_satisfied([1.0, 1.0], 0.0, [-1.0, 3.0], 0.0) == True
52
- )
53
-
54
- # x0 not crossing root (false), x1 negative (true)
55
- assert (
56
- disjunction_condition.is_satisfied([-0.5, 1.0], 0.0, [-1.0, 3.0], 0.0)
57
- == False
58
- )
59
-
60
- # x0 not crossing root (false), x1 positive (false)
61
- assert (
62
- disjunction_condition.is_satisfied([-0.5, 0.0], 0.0, [-1.0, 3.0], 0.0) == True
63
- )
@@ -1,36 +0,0 @@
1
- # Apache License 2.0
2
-
3
- import pytest
4
-
5
- from ostk.physics.time import Duration
6
-
7
- from ostk.astrodynamics import EventCondition
8
- from ostk.astrodynamics.event_condition import DurationCondition
9
-
10
-
11
- @pytest.fixture
12
- def duration() -> Duration:
13
- return Duration.seconds(5.0)
14
-
15
-
16
- @pytest.fixture
17
- def criteria() -> EventCondition.Criteria:
18
- return EventCondition.Criteria.StrictlyPositive
19
-
20
-
21
- @pytest.fixture
22
- def duration_condition(
23
- criteria: EventCondition.Criteria, duration: Duration
24
- ) -> DurationCondition:
25
- return DurationCondition(criteria, duration)
26
-
27
-
28
- class TestDurationCondition:
29
- def test_get_duration(self, duration_condition: EventCondition, duration: Duration):
30
- assert duration_condition.get_duration() == duration
31
-
32
- def test_evaluate(self, duration_condition: EventCondition, duration: Duration):
33
- time: float = 3.0
34
- assert duration_condition.evaluate(state_vector=[], time=time) == (
35
- time - duration.in_seconds()
36
- )