open-space-toolkit-astrodynamics 5.1.5__py311-none-any.whl → 5.2.0__py311-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 (85) hide show
  1. {open_space_toolkit_astrodynamics-5.1.5.dist-info → open_space_toolkit_astrodynamics-5.2.0.dist-info}/METADATA +1 -1
  2. open_space_toolkit_astrodynamics-5.2.0.dist-info/RECORD +96 -0
  3. ostk/__init__.py +1 -0
  4. ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-311-x86_64-linux-gnu.so +0 -0
  5. ostk/astrodynamics/converters.py +44 -6
  6. ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.5 +0 -0
  7. ostk/astrodynamics/pytrajectory/pystate.py +1 -3
  8. ostk/astrodynamics/test/access/__init__.py +1 -0
  9. ostk/astrodynamics/test/access/test_generator.py +248 -0
  10. ostk/astrodynamics/test/conjunction/messages/ccsds/__init__.py +1 -0
  11. ostk/astrodynamics/test/conjunction/messages/ccsds/conftest.py +325 -0
  12. ostk/astrodynamics/test/conjunction/messages/ccsds/data/cdm.json +303 -0
  13. ostk/astrodynamics/test/conjunction/messages/ccsds/test_cdm.py +416 -0
  14. ostk/astrodynamics/test/dynamics/__init__.py +1 -0
  15. ostk/astrodynamics/test/dynamics/test_atmospheric_drag.py +128 -0
  16. ostk/astrodynamics/test/dynamics/test_central_body_gravity.py +58 -0
  17. ostk/astrodynamics/test/dynamics/test_dynamics.py +50 -0
  18. ostk/astrodynamics/test/dynamics/test_position_derivative.py +51 -0
  19. ostk/astrodynamics/test/dynamics/test_third_body_gravity.py +67 -0
  20. ostk/astrodynamics/test/dynamics/test_thruster.py +142 -0
  21. ostk/astrodynamics/test/event_condition/test_angular_condition.py +113 -0
  22. ostk/astrodynamics/test/event_condition/test_boolean_condition.py +55 -0
  23. ostk/astrodynamics/test/event_condition/test_coe_condition.py +87 -0
  24. ostk/astrodynamics/test/event_condition/test_instant_condition.py +48 -0
  25. ostk/astrodynamics/test/event_condition/test_logical_condition.py +120 -0
  26. ostk/astrodynamics/test/event_condition/test_real_condition.py +50 -0
  27. ostk/astrodynamics/test/flight/__init__.py +1 -0
  28. ostk/astrodynamics/test/flight/profile/__init__.py +1 -0
  29. ostk/astrodynamics/test/flight/profile/test_state.py +144 -0
  30. ostk/astrodynamics/test/flight/system/__init__.py +1 -0
  31. ostk/astrodynamics/test/flight/system/test_propulsion_system.py +46 -0
  32. ostk/astrodynamics/test/flight/system/test_satellite_system.py +91 -0
  33. ostk/astrodynamics/test/flight/system/test_satellite_system_builder.py +71 -0
  34. ostk/astrodynamics/test/flight/test_profile.py +153 -0
  35. ostk/astrodynamics/test/flight/test_system.py +55 -0
  36. ostk/astrodynamics/test/guidance_law/test_constant_thrust.py +91 -0
  37. ostk/astrodynamics/test/guidance_law/test_qlaw.py +139 -0
  38. ostk/astrodynamics/test/solvers/__init__.py +1 -0
  39. ostk/astrodynamics/test/solvers/test_finite_difference_solver.py +181 -0
  40. ostk/astrodynamics/test/solvers/test_temporal_condition_solver.py +153 -0
  41. ostk/astrodynamics/test/test_access.py +2 -6
  42. ostk/astrodynamics/test/test_converters.py +213 -6
  43. ostk/astrodynamics/test/test_viewer.py +1 -2
  44. ostk/astrodynamics/test/trajectory/__init__.py +1 -0
  45. ostk/astrodynamics/test/trajectory/orbit/__init__.py +1 -0
  46. ostk/astrodynamics/test/trajectory/orbit/messages/__init__.py +1 -0
  47. ostk/astrodynamics/test/trajectory/orbit/messages/spacex/__init__.py +1 -0
  48. ostk/astrodynamics/test/trajectory/orbit/messages/spacex/conftest.py +18 -0
  49. ostk/astrodynamics/test/trajectory/orbit/messages/spacex/data/opm_1.yaml +44 -0
  50. ostk/astrodynamics/test/trajectory/orbit/messages/spacex/test_opm.py +108 -0
  51. ostk/astrodynamics/test/trajectory/orbit/models/__init__.py +1 -0
  52. ostk/astrodynamics/test/trajectory/orbit/models/kepler/__init__.py +1 -0
  53. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean.py +65 -0
  54. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_long.py +102 -0
  55. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_short.py +102 -0
  56. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py +167 -0
  57. ostk/astrodynamics/test/trajectory/orbit/models/sgp4/__init__.py +1 -0
  58. ostk/astrodynamics/test/trajectory/orbit/models/sgp4/test_tle.py +331 -0
  59. ostk/astrodynamics/test/trajectory/orbit/models/test_kepler.py +130 -0
  60. ostk/astrodynamics/test/trajectory/orbit/models/test_propagated.py +195 -0
  61. ostk/astrodynamics/test/trajectory/orbit/models/test_sgp4.py +1 -0
  62. ostk/astrodynamics/test/trajectory/orbit/models/test_tabulated.py +380 -0
  63. ostk/astrodynamics/test/trajectory/orbit/test_model.py +1 -0
  64. ostk/astrodynamics/test/trajectory/orbit/test_pass.py +55 -0
  65. ostk/astrodynamics/test/trajectory/state/coordinates_subset/test_angular_velocity.py +30 -0
  66. ostk/astrodynamics/test/trajectory/state/coordinates_subset/test_attitude_quaternion.py +18 -0
  67. ostk/astrodynamics/test/trajectory/state/coordinates_subset/test_cartesian_position.py +107 -0
  68. ostk/astrodynamics/test/trajectory/state/coordinates_subset/test_cartesian_velocity.py +115 -0
  69. ostk/astrodynamics/test/trajectory/state/test_coordinates_broker.py +84 -0
  70. ostk/astrodynamics/test/trajectory/state/test_coordinates_subset.py +43 -0
  71. ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py +314 -0
  72. ostk/astrodynamics/test/trajectory/test_local_orbital_frame_direction.py +81 -0
  73. ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py +64 -0
  74. ostk/astrodynamics/test/trajectory/test_model.py +1 -0
  75. ostk/astrodynamics/test/trajectory/test_orbit.py +92 -0
  76. ostk/astrodynamics/test/trajectory/test_propagator.py +402 -0
  77. ostk/astrodynamics/test/trajectory/test_segment.py +288 -0
  78. ostk/astrodynamics/test/trajectory/test_sequence.py +459 -0
  79. ostk/astrodynamics/test/trajectory/test_state.py +223 -0
  80. ostk/astrodynamics/test/trajectory/test_state_builder.py +171 -0
  81. ostk/astrodynamics/viewer.py +1 -3
  82. open_space_toolkit_astrodynamics-5.1.5.dist-info/RECORD +0 -25
  83. {open_space_toolkit_astrodynamics-5.1.5.dist-info → open_space_toolkit_astrodynamics-5.2.0.dist-info}/WHEEL +0 -0
  84. {open_space_toolkit_astrodynamics-5.1.5.dist-info → open_space_toolkit_astrodynamics-5.2.0.dist-info}/top_level.txt +0 -0
  85. {open_space_toolkit_astrodynamics-5.1.5.dist-info → open_space_toolkit_astrodynamics-5.2.0.dist-info}/zip-safe +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: open-space-toolkit-astrodynamics
3
- Version: 5.1.5
3
+ Version: 5.2.0
4
4
  Summary: Orbit, attitude, access.
5
5
  Author: Open Space Collective
6
6
  Author-email: contact@open-space-collective.org
@@ -0,0 +1,96 @@
1
+ ostk/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
2
+ ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-311-x86_64-linux-gnu.so,sha256=t5K0oQpMZK4wLlhwwwx7B_T1IJoDcKXK2b8adgkshb0,2004792
3
+ ostk/astrodynamics/__init__.py,sha256=3gWyqFIbhAfcdeMhmfBPQPlPQTmaOzm-6flkJe745Zk,251
4
+ ostk/astrodynamics/converters.py,sha256=IUxJK5qNzDMsqMSiMT6hUThCjncKoIMW0ifu8kwbww0,4680
5
+ ostk/astrodynamics/display.py,sha256=y9FnoQbPFGM6LzkUdgXgeqtuVGhv57GuTKbeDdcFPgw,6306
6
+ ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.5,sha256=7okoTSc8oHuKbfLThcRJXkgb7EuYdzR4awMUcGsfNgM,94498664
7
+ ostk/astrodynamics/utilities.py,sha256=NbeKN_CtcCRHIinhoNWTEosBMR7xc924S-ZFD97mduw,4478
8
+ ostk/astrodynamics/viewer.py,sha256=B5m-eNWQrd4vIBqmT7-400IfHldxU5lFDTLpfHiiHj4,8910
9
+ ostk/astrodynamics/pytrajectory/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
10
+ ostk/astrodynamics/pytrajectory/pystate.py,sha256=ceNZWYCqtsXWJlE6JKDxB5qn5ixTWGOwrYXge21XPmk,1037
11
+ ostk/astrodynamics/test/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
12
+ ostk/astrodynamics/test/conftest.py,sha256=J3SbQibnMVaPktAF6Z6cwVCa7xhW3uXpkOJRom6YtCo,2719
13
+ ostk/astrodynamics/test/test_access.py,sha256=6sWINwQw-KMKKOfuJIJxyIIrmT513VjvoXt2rNPpm0w,3959
14
+ ostk/astrodynamics/test/test_converters.py,sha256=hnvqOCtUGrzBvjv7GnmaRdl2mlKM3eWuJUspe305B-A,12114
15
+ ostk/astrodynamics/test/test_display.py,sha256=8YeiYRYMpokzqprbRoDBI_xhHI5B8uxcdSzmqmF3AIc,3738
16
+ ostk/astrodynamics/test/test_event_condition.py,sha256=mhMTH7wAoYFWRYt_8l2d1vjNPrFhVjMAEET4INLCVXY,1472
17
+ ostk/astrodynamics/test/test_import.py,sha256=stS8jK9HiXyzRWjtDvaTqUrzCrOVnYVX5CkmQf7MJsA,1201
18
+ ostk/astrodynamics/test/test_root_solver.py,sha256=hQ8O6g-WP49gZH_H3Rdufv0F0gQorpzJyIcjBGGUQ34,1831
19
+ ostk/astrodynamics/test/test_trajectory.py,sha256=pvv4GQsvtU0XfWYk-F-oQNgo8ciFQBgzeJ4FojZDW-A,1364
20
+ ostk/astrodynamics/test/test_utilities.py,sha256=edAPLXNMflCPa0gzhU4e05pa6HbAq7UV0JzMMRx3VlQ,3252
21
+ ostk/astrodynamics/test/test_viewer.py,sha256=i164XnG6n-_FteiO6rjXA7GGsJhMdmT-508DpKaveVY,3957
22
+ ostk/astrodynamics/test/access/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
23
+ ostk/astrodynamics/test/access/test_generator.py,sha256=6cwC5GGvnWLxPXmgRQ-N7tjorGUfPxA8qFcdGaTmpp4,8038
24
+ ostk/astrodynamics/test/conjunction/messages/ccsds/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
25
+ ostk/astrodynamics/test/conjunction/messages/ccsds/conftest.py,sha256=xyTd24828Ue2HgOWY8UhizIc5mzgRgoH2VSOfVfKCdw,14632
26
+ ostk/astrodynamics/test/conjunction/messages/ccsds/test_cdm.py,sha256=SqtYXB8qhKzbQEWmCzz13xi0Uu64-VSKXuMObcFV7EI,18518
27
+ ostk/astrodynamics/test/conjunction/messages/ccsds/data/cdm.json,sha256=-CL8Bu-ivigzkrqHs9Q5snSubHJ_D0YMroatEInkidc,12965
28
+ ostk/astrodynamics/test/dynamics/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
29
+ ostk/astrodynamics/test/dynamics/test_atmospheric_drag.py,sha256=mKXF1r-gaRz7vtMNULsl6onFOwD3uk0lYqxKStm4bxU,3765
30
+ ostk/astrodynamics/test/dynamics/test_central_body_gravity.py,sha256=x2_Xe-nGVkhKuq7p5Wuq7exeXKg_de3sAGrwGsOSRfA,1790
31
+ ostk/astrodynamics/test/dynamics/test_dynamics.py,sha256=FU5Qc3H6wkguml1Kt_hTX8uKplEyfcbH8wkC1TT4bjE,1240
32
+ ostk/astrodynamics/test/dynamics/test_position_derivative.py,sha256=HIHH8W3WR0eHJo82N6k03CBj_i1g2OuiHm-xEumPbx4,1618
33
+ ostk/astrodynamics/test/dynamics/test_third_body_gravity.py,sha256=hl3svhU6gNJdKoqqdgsZt-Ngrex9whcuLPeCgepM4G8,1887
34
+ ostk/astrodynamics/test/dynamics/test_thruster.py,sha256=HHFei_ZdUcwdRNXcKDTF-EhYe8ZjVht-kQjUl0nhILU,4403
35
+ ostk/astrodynamics/test/event_condition/test_angular_condition.py,sha256=OFlEbUDWaUs1kjUSf0AhIsOKV5qSUj6_sOxLQK5q8AU,3120
36
+ ostk/astrodynamics/test/event_condition/test_boolean_condition.py,sha256=Ng6FLKD8XoUHUz6-gi3wvrYhSGNSB_iJ_n89ajN4O3s,1580
37
+ ostk/astrodynamics/test/event_condition/test_coe_condition.py,sha256=1znTEcKVhR54CVfjhQeeAxbe4CdJJ1qlsKc8TK9jwqw,2581
38
+ ostk/astrodynamics/test/event_condition/test_instant_condition.py,sha256=Qr5dN6nrK7XDff7L4vnGCqasMK-Fa6qvxwy_U0xgH5M,1438
39
+ ostk/astrodynamics/test/event_condition/test_logical_condition.py,sha256=09h5TYWtwGt4NQW3k_tziiVs0Q2981rNII9wyKg7p2Q,3321
40
+ ostk/astrodynamics/test/event_condition/test_real_condition.py,sha256=tle6HVzMFMIIkfRY7CuaA0mPtw3riJBG_JQkc1L0dpk,1374
41
+ ostk/astrodynamics/test/flight/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
42
+ ostk/astrodynamics/test/flight/test_profile.py,sha256=OBwXlN35Fosk9ue37cDl6NAdITv8JG3s7mnHq3_cxc8,5195
43
+ ostk/astrodynamics/test/flight/test_system.py,sha256=YPrjoV3o67_1zCXCZqohlSAR7zkU0LXP2fF20M2s0C8,1326
44
+ ostk/astrodynamics/test/flight/profile/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
45
+ ostk/astrodynamics/test/flight/profile/test_state.py,sha256=2vc-PHFr9M9_x08n0ZCm29O4mE-zeu_0oTW8Wd4x7KY,4266
46
+ ostk/astrodynamics/test/flight/system/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
47
+ ostk/astrodynamics/test/flight/system/test_propulsion_system.py,sha256=ei-25MZczwzhiV5QVB9LXdmBY3VnBHr1DEVn_Zqtb1A,1027
48
+ ostk/astrodynamics/test/flight/system/test_satellite_system.py,sha256=rPka530ZqX_XBVmt0SC5o765O1O90_m_U5cEUsrQuWU,2530
49
+ ostk/astrodynamics/test/flight/system/test_satellite_system_builder.py,sha256=G3MUD-mBTakr-ip_261kwBTvTclnAArPPeHY3ZF9PYM,2430
50
+ ostk/astrodynamics/test/guidance_law/test_constant_thrust.py,sha256=YpMkMvat4YnE1Fyy5vZ1Sf3VvbvDaC_UvbIKNNCG_B4,2635
51
+ ostk/astrodynamics/test/guidance_law/test_qlaw.py,sha256=nu56zm7D9uwonCXCjpNw49nv9TApelTSlsoItQQ6VhY,3677
52
+ ostk/astrodynamics/test/solvers/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
53
+ ostk/astrodynamics/test/solvers/test_finite_difference_solver.py,sha256=h_CDEswTKzEld9vvTMMPXj-TI3YSeY14-Z6clYWtfB0,5417
54
+ ostk/astrodynamics/test/solvers/test_temporal_condition_solver.py,sha256=s7r7VelXx1_b-6wO_GyOlmxlsfA4I_zpxrWojriQls8,4867
55
+ ostk/astrodynamics/test/trajectory/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
56
+ ostk/astrodynamics/test/trajectory/test_local_orbital_frame_direction.py,sha256=d72J50UGG9m0Atei0UQ8sITU1WdJmws5xgUiacLZMbw,2515
57
+ ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py,sha256=FziYh9XxD2FEuj6WhnqOe5mF9twLTQtvcem8KzQZKXg,1864
58
+ ostk/astrodynamics/test/trajectory/test_model.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
59
+ ostk/astrodynamics/test/trajectory/test_orbit.py,sha256=SlCBZ_broPaJ6L8khMuvbdPem9-zmqG6IZwxr9cECB4,3155
60
+ ostk/astrodynamics/test/trajectory/test_propagator.py,sha256=kEAvrFM4MZouAAnYPi91akPSXWHbGxHTo5uaXQKexII,12631
61
+ ostk/astrodynamics/test/trajectory/test_segment.py,sha256=UxSyasdBQoaT7bTBlRoBxhQ3paHw1JRDR7GJzFTmf6M,8731
62
+ ostk/astrodynamics/test/trajectory/test_sequence.py,sha256=uZdHNY7wAvkSMQEzNId3DWQOilsKdCEbqBd-AbqMYVE,12412
63
+ ostk/astrodynamics/test/trajectory/test_state.py,sha256=rW0HH7oy_tZ-34VIhk2rx_v2Kyg3xegBYpKs9_NznSs,6508
64
+ ostk/astrodynamics/test/trajectory/test_state_builder.py,sha256=3C8JeN8VGgUzEASgh5PfnJQ2JWGkKYTm7eaelE6Lw7E,4815
65
+ ostk/astrodynamics/test/trajectory/orbit/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
66
+ ostk/astrodynamics/test/trajectory/orbit/test_model.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
67
+ ostk/astrodynamics/test/trajectory/orbit/test_pass.py,sha256=MtPRKhVz4hCzfFuE0p1x89Ps68M9s7miT7VtPIDVeOo,1898
68
+ ostk/astrodynamics/test/trajectory/orbit/messages/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
69
+ ostk/astrodynamics/test/trajectory/orbit/messages/spacex/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
70
+ ostk/astrodynamics/test/trajectory/orbit/messages/spacex/conftest.py,sha256=O75ywkPJjoFp0uKptCu4C2tGMRaGN-8NVFVhps85eWE,379
71
+ ostk/astrodynamics/test/trajectory/orbit/messages/spacex/test_opm.py,sha256=wfxuccqIF2odRA9Dc-8wtKZ8t__4KJ9HVhN-il284OU,3893
72
+ ostk/astrodynamics/test/trajectory/orbit/messages/spacex/data/opm_1.yaml,sha256=DqIdfLCPD9oV4qDvgq35fIT8Gb8zgtrHr5Nx53InSQM,1363
73
+ ostk/astrodynamics/test/trajectory/orbit/models/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
74
+ ostk/astrodynamics/test/trajectory/orbit/models/test_kepler.py,sha256=sf1FpdYyiGyWcal-CwVfelW1k-HYGlIdbJdcbOi9-lY,3372
75
+ ostk/astrodynamics/test/trajectory/orbit/models/test_propagated.py,sha256=PnzJsRVn-TKQ7fcsmxm4YYE4e2Tr1xvBTB1r0RboRyk,6678
76
+ ostk/astrodynamics/test/trajectory/orbit/models/test_sgp4.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
77
+ ostk/astrodynamics/test/trajectory/orbit/models/test_tabulated.py,sha256=tL3gGDitdEYCCRwGtu2RP-9d4JWsujV53ck9DRkyeG4,11183
78
+ ostk/astrodynamics/test/trajectory/orbit/models/kepler/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
79
+ ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean.py,sha256=9JC4LTpMXWzQ2VoEOaVaruy2hPjyiAIR5_2QTfm4MqU,1545
80
+ ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_long.py,sha256=gVpnA6FE3aCD6hskOKiVkb4YlONTUMogwBY1EaOqm7M,2472
81
+ ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_short.py,sha256=8g2Q8ywuU5wsvrycAKUWFY-1bqIcylBpcnMJW4ze8Hs,2489
82
+ ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py,sha256=C_2qGt8yzbs6S-rCheUbj8wOnLEWBNio2UD6ST-SwHk,4781
83
+ ostk/astrodynamics/test/trajectory/orbit/models/sgp4/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
84
+ ostk/astrodynamics/test/trajectory/orbit/models/sgp4/test_tle.py,sha256=lbPqHd87ExTNbBFcFSTMWRnWbpe_4BDJ2g2APlQLJkY,11486
85
+ ostk/astrodynamics/test/trajectory/state/test_coordinates_broker.py,sha256=LUVQ6LjpWAxs6XA3vOwHO5Unnf4TMYCx31fk_ORLTcc,2907
86
+ ostk/astrodynamics/test/trajectory/state/test_coordinates_subset.py,sha256=eMmifR5rJMk2yFN7pfAHq2Ub3FPvknb6gvS-nBDidro,1201
87
+ ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py,sha256=-SHQWgR34Xk0gO26VwQWbmRnPXp3AKfk0j9t-lPvfmk,9403
88
+ ostk/astrodynamics/test/trajectory/state/coordinates_subset/test_angular_velocity.py,sha256=IWLmoMvxVejdiw8JuiDsIaii7ctbRDvU-13fgZEvWXA,626
89
+ ostk/astrodynamics/test/trajectory/state/coordinates_subset/test_attitude_quaternion.py,sha256=B1Tni_YpKB9Fzb0fpXSokw9DjgiZem9uBATMQbcq8P4,394
90
+ ostk/astrodynamics/test/trajectory/state/coordinates_subset/test_cartesian_position.py,sha256=L3MpDG9MDHbK2HPZejqiY0QJdiEB-FZe0rVGDl379YA,2722
91
+ ostk/astrodynamics/test/trajectory/state/coordinates_subset/test_cartesian_velocity.py,sha256=k0aNqdMwwt-XSFQ1Si8kDTY79SB7fC0WWm2UNjpaOI0,3077
92
+ open_space_toolkit_astrodynamics-5.2.0.dist-info/METADATA,sha256=R5UAtA3PdcwUnrltBkZOUeU1DQuv8Ggg-iY0Pfy7Kc0,1777
93
+ open_space_toolkit_astrodynamics-5.2.0.dist-info/WHEEL,sha256=SVfpez0j7d3-HV4X_llgeAuMxDbyuoR4m0jGz6H51gA,94
94
+ open_space_toolkit_astrodynamics-5.2.0.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
95
+ open_space_toolkit_astrodynamics-5.2.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
96
+ open_space_toolkit_astrodynamics-5.2.0.dist-info/RECORD,,
ostk/__init__.py ADDED
@@ -0,0 +1 @@
1
+ # Apache License 2.0
@@ -15,12 +15,12 @@ from ostk.physics.coordinate import Velocity
15
15
  from ostk.physics.coordinate import Frame
16
16
 
17
17
 
18
- def coerce_to_datetime(value: Instant | datetime) -> datetime:
18
+ def coerce_to_datetime(value: Instant | datetime | str) -> datetime:
19
19
  """
20
20
  Return datetime from value.
21
21
 
22
22
  Args:
23
- value (Instant | datetime): A value to coerce.
23
+ value (Instant | datetime | str): A value to coerce.
24
24
 
25
25
  Returns:
26
26
  datetime: The coerced datetime.
@@ -29,15 +29,21 @@ def coerce_to_datetime(value: Instant | datetime) -> datetime:
29
29
  if isinstance(value, datetime):
30
30
  return value
31
31
 
32
- return value.get_date_time(Scale.UTC).replace(tzinfo=timezone.utc)
32
+ if isinstance(value, Instant):
33
+ return value.get_date_time(Scale.UTC).replace(tzinfo=timezone.utc)
34
+
35
+ if isinstance(value, str):
36
+ return datetime.fromisoformat(value)
37
+
38
+ raise TypeError("Argument must be a datetime, an Instant, or a str.")
33
39
 
34
40
 
35
- def coerce_to_instant(value: Instant | datetime) -> Instant:
41
+ def coerce_to_instant(value: Instant | datetime | str) -> Instant:
36
42
  """
37
43
  Return Instant from value.
38
44
 
39
45
  Args:
40
- value (Instant | datetime): A value to coerce.
46
+ value (Instant | datetime | str): A value to coerce.
41
47
 
42
48
  Returns:
43
49
  Instant: The coerced Instant.
@@ -46,7 +52,39 @@ def coerce_to_instant(value: Instant | datetime) -> Instant:
46
52
  if isinstance(value, Instant):
47
53
  return value
48
54
 
49
- return Instant.date_time(value, Scale.UTC)
55
+ if isinstance(value, datetime):
56
+ return Instant.date_time(value.astimezone(tz=timezone.utc), Scale.UTC)
57
+
58
+ if isinstance(value, str):
59
+ return coerce_to_instant(coerce_to_datetime(value))
60
+
61
+ raise TypeError("Argument must be a datetime, an Instant, or a str.")
62
+
63
+
64
+ def coerce_to_iso(
65
+ value: Instant | datetime | str, timespec: str = "microseconds"
66
+ ) -> Instant:
67
+ """
68
+ Return an ISO string from value.
69
+
70
+ Args:
71
+ value (Instant | datetime | str): A value to coerce.
72
+ timespec (str): A time resolution. Defaults to "microseconds".
73
+
74
+ Returns:
75
+ str: The coerced ISO string.
76
+ """
77
+
78
+ if isinstance(value, str):
79
+ return coerce_to_iso(coerce_to_datetime(value), timespec=timespec)
80
+
81
+ if isinstance(value, datetime):
82
+ return value.isoformat(timespec=timespec)
83
+
84
+ if isinstance(value, Instant):
85
+ return coerce_to_iso(coerce_to_datetime(value), timespec=timespec)
86
+
87
+ raise TypeError("Argument must be a datetime, an Instant, or a str.")
50
88
 
51
89
 
52
90
  def coerce_to_interval(
@@ -28,9 +28,7 @@ def custom_class_generator(frame: Frame, coordinates_subsets: list) -> type:
28
28
  state_builder: StateBuilder = StateBuilder(frame, coordinates_subsets)
29
29
 
30
30
  def __init__(self, instant: Instant, coordinates: np.ndarray):
31
- super().__init__(
32
- StateTemplateType.state_builder.build(instant, coordinates)
33
- )
31
+ super().__init__(StateTemplateType.state_builder.build(instant, coordinates))
34
32
 
35
33
  return StateTemplateType
36
34
 
@@ -0,0 +1 @@
1
+ # Apache License 2.0
@@ -0,0 +1,248 @@
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()
@@ -0,0 +1 @@
1
+ # Apache License 2.0