open-space-toolkit-astrodynamics 15.1.0__py39-none-manylinux2014_x86_64.whl → 15.2.0__py39-none-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {open_space_toolkit_astrodynamics-15.1.0.dist-info → open_space_toolkit_astrodynamics-15.2.0.dist-info}/METADATA +1 -1
- {open_space_toolkit_astrodynamics-15.1.0.dist-info → open_space_toolkit_astrodynamics-15.2.0.dist-info}/RECORD +15 -11
- ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-39-x86_64-linux-gnu.so +0 -0
- ostk/astrodynamics/__init__.pyi +5 -4
- ostk/astrodynamics/access.pyi +13 -0
- ostk/astrodynamics/estimator.pyi +280 -0
- ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.15 +0 -0
- ostk/astrodynamics/solver.pyi +209 -1
- ostk/astrodynamics/test/access/test_visibility_criterion.py +3 -0
- ostk/astrodynamics/test/estimator/test_orbit_determination_solver.py +261 -0
- ostk/astrodynamics/test/estimator/test_tle_solver.py +215 -0
- ostk/astrodynamics/test/solvers/test_least_squares_solver.py +334 -0
- {open_space_toolkit_astrodynamics-15.1.0.dist-info → open_space_toolkit_astrodynamics-15.2.0.dist-info}/WHEEL +0 -0
- {open_space_toolkit_astrodynamics-15.1.0.dist-info → open_space_toolkit_astrodynamics-15.2.0.dist-info}/top_level.txt +0 -0
- {open_space_toolkit_astrodynamics-15.1.0.dist-info → open_space_toolkit_astrodynamics-15.2.0.dist-info}/zip-safe +0 -0
@@ -1,17 +1,18 @@
|
|
1
1
|
ostk/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
2
|
-
ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-39-x86_64-linux-gnu.so,sha256=
|
2
|
+
ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-39-x86_64-linux-gnu.so,sha256=2tntitVO7sOX8cHx1ksZyslSmx_JitAlXT17KKdBSz0,2779360
|
3
3
|
ostk/astrodynamics/__init__.py,sha256=3gWyqFIbhAfcdeMhmfBPQPlPQTmaOzm-6flkJe745Zk,251
|
4
|
-
ostk/astrodynamics/__init__.pyi,sha256=
|
5
|
-
ostk/astrodynamics/access.pyi,sha256=
|
4
|
+
ostk/astrodynamics/__init__.pyi,sha256=IBA_ElN21LRUmy5Kfv-sSfOwGTuTRC7BsHyan1lnKb8,32268
|
5
|
+
ostk/astrodynamics/access.pyi,sha256=oZ8LyjNx6FurUUzFbUwGvdYJu1Li0Oy7MwIZu8erTLU,25841
|
6
6
|
ostk/astrodynamics/converters.py,sha256=luPh30qMp9bzEkN7hUccmxlLf7zRp_AzqmBe8IUjPhU,3314
|
7
7
|
ostk/astrodynamics/converters.pyi,sha256=HrZFyizkc6Hv_K38ZKZ80fX_bAxd6keA_NFWNQygvbs,1745
|
8
8
|
ostk/astrodynamics/dataframe.py,sha256=9fXRk7sJl_OrBTCjZC_TFx6JMPE7IDGqv2JgEmGCdgM,18775
|
9
9
|
ostk/astrodynamics/display.py,sha256=LZESZgx2wlrFO4cwAGMb3VPJfdtcjNgCgKFrqot0NYU,6339
|
10
10
|
ostk/astrodynamics/dynamics.pyi,sha256=AUNsUSR5LqOYFt626k4FZDbCPZRGoZV82AwCC3CDH8s,13738
|
11
|
+
ostk/astrodynamics/estimator.pyi,sha256=2y4I6GMBZynjlY8a8SxCAVCukGR1typDUZu0h_GX9QU,14336
|
11
12
|
ostk/astrodynamics/event_condition.pyi,sha256=-Tq6cqr00lZPpoMnCPDRB0MB-MinM60oCNn1ZSA1Cik,25536
|
12
13
|
ostk/astrodynamics/guidance_law.pyi,sha256=pEoAL9CDFWNulOLv6wea3xj1fJI3xFtgx-2eYMEftJI,12507
|
13
|
-
ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.15,sha256=
|
14
|
-
ostk/astrodynamics/solver.pyi,sha256=
|
14
|
+
ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.15,sha256=Z7W1f17NZ6PBIocIzyb0oUPRcENtllt76T1EJvIbsC8,120954640
|
15
|
+
ostk/astrodynamics/solver.pyi,sha256=tjFkzoxW6h6grMGpqKsgyXyYH9R6lLg6LEV2v5_X6yk,18238
|
15
16
|
ostk/astrodynamics/utilities.py,sha256=mlKL3WrOASrY_pLt7bzUz0XZT7jagzLOZjMOIqjbQ1Y,6999
|
16
17
|
ostk/astrodynamics/viewer.py,sha256=SpcvBqXx3CAZpk7UGOPT1ilxywmAmNpgqpuRY11Hwx0,16376
|
17
18
|
ostk/astrodynamics/conjunction/__init__.pyi,sha256=HFvWl8bCmrq3cBkUh5X5RGIh8webmVGxaZdpsz3WN-E,79
|
@@ -41,7 +42,7 @@ ostk/astrodynamics/test/test_utilities.py,sha256=NNIyzqOxMdsNpK2z0wU0utX06iZNfbM
|
|
41
42
|
ostk/astrodynamics/test/test_viewer.py,sha256=kDstRH_WKufN_0JPSXttzLMk3Afv_ylcEBfHxc35yrA,8946
|
42
43
|
ostk/astrodynamics/test/access/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
43
44
|
ostk/astrodynamics/test/access/test_generator.py,sha256=i7TnM80kF0Q_9KmyoqKt5n1ufg3ZjAIEMPVVds8ZDdI,10315
|
44
|
-
ostk/astrodynamics/test/access/test_visibility_criterion.py,sha256=
|
45
|
+
ostk/astrodynamics/test/access/test_visibility_criterion.py,sha256=VA6WDQTj3q-f2YGIIkrrNp8G23Nf_0g9nKmfZAgAlWQ,6568
|
45
46
|
ostk/astrodynamics/test/conjunction/message/ccsds/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
46
47
|
ostk/astrodynamics/test/conjunction/message/ccsds/conftest.py,sha256=xyTd24828Ue2HgOWY8UhizIc5mzgRgoH2VSOfVfKCdw,14632
|
47
48
|
ostk/astrodynamics/test/conjunction/message/ccsds/test_cdm.py,sha256=ztpnOHI3ZiIV0QwijJ6Si_lIna8jLZF45r1KtPVK4ws,18514
|
@@ -57,6 +58,8 @@ ostk/astrodynamics/test/dynamics/test_third_body_gravity.py,sha256=7xBOKbVio-zZ2
|
|
57
58
|
ostk/astrodynamics/test/dynamics/test_thruster.py,sha256=cCJtKWuNcRHmcreCv7BajwuJnHCat9m88OHh_o0cB7w,4383
|
58
59
|
ostk/astrodynamics/test/dynamics/data/Tabulated_Earth_Gravity.csv,sha256=jJWOMJcQ83Vy1Wrb9PTh3ffOdoDF98kk6w5b-_E0uWg,47419
|
59
60
|
ostk/astrodynamics/test/dynamics/data/Tabulated_Earth_Gravity_Truth.csv,sha256=f4x-zmxZADxD_doAbACt24k36VSTp3rSIJiSzuSroKs,8377
|
61
|
+
ostk/astrodynamics/test/estimator/test_orbit_determination_solver.py,sha256=Vg_yN3DFLcwa-AfPX0zJaY70rFK1TB8xc3e9wZrKq6M,7493
|
62
|
+
ostk/astrodynamics/test/estimator/test_tle_solver.py,sha256=hANdRtaVvlOShXeyUqMpDk7kJINxdwstZodxJzAAWwk,7277
|
60
63
|
ostk/astrodynamics/test/event_condition/test_angular_condition.py,sha256=MDRwjU5zXIRBaIFZA3jG3hcnyIIFo_0QyBRtNIfH2aQ,3119
|
61
64
|
ostk/astrodynamics/test/event_condition/test_boolean_condition.py,sha256=Ng6FLKD8XoUHUz6-gi3wvrYhSGNSB_iJ_n89ajN4O3s,1580
|
62
65
|
ostk/astrodynamics/test/event_condition/test_coe_condition.py,sha256=AM0olK1s4jDRs_dJs0sk9raY9Nm1eZpdEEso6wyvipk,2580
|
@@ -75,6 +78,7 @@ ostk/astrodynamics/test/guidance_law/test_constant_thrust.py,sha256=YpMkMvat4YnE
|
|
75
78
|
ostk/astrodynamics/test/guidance_law/test_qlaw.py,sha256=kZaBZeU_J8Qk2nFnnpSuu-2NXT_13g3vLamG--eZfeU,3634
|
76
79
|
ostk/astrodynamics/test/solvers/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
77
80
|
ostk/astrodynamics/test/solvers/test_finite_difference_solver.py,sha256=0tcarIg2HTpcdzItWlL5Kd6q2nHcDBA8ZE0D3ugUN_s,5953
|
81
|
+
ostk/astrodynamics/test/solvers/test_least_squares_solver.py,sha256=fkJnaT8vPVDlndks3MhYiEmP6TgPCW0SddbXATcI3KU,8750
|
78
82
|
ostk/astrodynamics/test/solvers/test_temporal_condition_solver.py,sha256=OUb7QDwe5WNAtzOLBk-9cBL56PzzadZhXuBo_MiJ2K4,5189
|
79
83
|
ostk/astrodynamics/test/trajectory/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
80
84
|
ostk/astrodynamics/test/trajectory/test_local_orbital_frame_direction.py,sha256=d72J50UGG9m0Atei0UQ8sITU1WdJmws5xgUiacLZMbw,2515
|
@@ -124,8 +128,8 @@ ostk/astrodynamics/trajectory/orbit/model/kepler.pyi,sha256=09xlx_7dTiivctFDyW_3
|
|
124
128
|
ostk/astrodynamics/trajectory/orbit/model/sgp4.pyi,sha256=2rxyPPsSCtsEKAShuZQbhZSybK01Q9u1CMieGjwWxN4,14313
|
125
129
|
ostk/astrodynamics/trajectory/state/__init__.pyi,sha256=-sq42oF9YgXSkP1LtPcSu7mmtpjUkEzjydD9VYdIQ6g,17672
|
126
130
|
ostk/astrodynamics/trajectory/state/coordinate_subset.pyi,sha256=iqoM-8RqiLNIsyiQXLfosvGO7ZP_KdQxrUWqiV04E1c,10566
|
127
|
-
open_space_toolkit_astrodynamics-15.
|
128
|
-
open_space_toolkit_astrodynamics-15.
|
129
|
-
open_space_toolkit_astrodynamics-15.
|
130
|
-
open_space_toolkit_astrodynamics-15.
|
131
|
-
open_space_toolkit_astrodynamics-15.
|
131
|
+
open_space_toolkit_astrodynamics-15.2.0.dist-info/METADATA,sha256=TzYkV4BIJlExDZyzAQdsnsY4C4hP6l_uUdBc_6FpAuE,1913
|
132
|
+
open_space_toolkit_astrodynamics-15.2.0.dist-info/WHEEL,sha256=YBJ2ZW-2Jsns4y8CrUTcNUwZdcKvmfwW0KSU35zO7J8,109
|
133
|
+
open_space_toolkit_astrodynamics-15.2.0.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
|
134
|
+
open_space_toolkit_astrodynamics-15.2.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
135
|
+
open_space_toolkit_astrodynamics-15.2.0.dist-info/RECORD,,
|
Binary file
|
ostk/astrodynamics/__init__.pyi
CHANGED
@@ -14,8 +14,8 @@ from ostk import mathematics as OpenSpaceToolkitMathematicsPy
|
|
14
14
|
from ostk.mathematics import curve_fitting
|
15
15
|
from ostk.mathematics import geometry
|
16
16
|
from ostk.mathematics import object
|
17
|
-
from ostk import physics as OpenSpaceToolkitPhysicsPy
|
18
17
|
import ostk.physics
|
18
|
+
from ostk import physics as OpenSpaceToolkitPhysicsPy
|
19
19
|
from ostk.physics import Environment
|
20
20
|
from ostk.physics import Manager
|
21
21
|
from ostk.physics import Unit
|
@@ -24,23 +24,24 @@ import ostk.physics.coordinate
|
|
24
24
|
import ostk.physics.coordinate.spherical
|
25
25
|
from ostk.physics import environment
|
26
26
|
import ostk.physics.environment.object
|
27
|
-
import ostk.physics.time
|
28
27
|
from ostk.physics import time
|
29
|
-
import ostk.physics.
|
28
|
+
import ostk.physics.time
|
30
29
|
from ostk.physics import unit
|
30
|
+
import ostk.physics.unit
|
31
31
|
import typing
|
32
32
|
from . import access
|
33
33
|
from . import conjunction
|
34
34
|
from . import converters
|
35
35
|
from . import data
|
36
36
|
from . import dynamics
|
37
|
+
from . import estimator
|
37
38
|
from . import event_condition
|
38
39
|
from . import flight
|
39
40
|
from . import guidance_law
|
40
41
|
from . import pytrajectory
|
41
42
|
from . import solver
|
42
43
|
from . import trajectory
|
43
|
-
__all__ = ['Access', 'Dynamics', 'Environment', 'EventCondition', 'GuidanceLaw', 'Manager', 'OpenSpaceToolkitAstrodynamicsPy', 'OpenSpaceToolkitCorePy', 'OpenSpaceToolkitIOPy', 'OpenSpaceToolkitMathematicsPy', 'OpenSpaceToolkitPhysicsPy', 'PyState', 'RootSolver', 'Trajectory', 'URL', 'Unit', 'access', 'conjunction', 'container', 'converters', 'coordinate', 'curve_fitting', 'data', 'dynamics', 'environment', 'event_condition', 'filesystem', 'flight', 'geometry', 'guidance_law', 'ip', 'object', 'pytrajectory', 'solver', 'time', 'trajectory', 'type', 'unit']
|
44
|
+
__all__ = ['Access', 'Dynamics', 'Environment', 'EventCondition', 'GuidanceLaw', 'Manager', 'OpenSpaceToolkitAstrodynamicsPy', 'OpenSpaceToolkitCorePy', 'OpenSpaceToolkitIOPy', 'OpenSpaceToolkitMathematicsPy', 'OpenSpaceToolkitPhysicsPy', 'PyState', 'RootSolver', 'Trajectory', 'URL', 'Unit', 'access', 'conjunction', 'container', 'converters', 'coordinate', 'curve_fitting', 'data', 'dynamics', 'environment', 'estimator', 'event_condition', 'filesystem', 'flight', 'geometry', 'guidance_law', 'ip', 'object', 'pytrajectory', 'solver', 'time', 'trajectory', 'type', 'unit']
|
44
45
|
class Access:
|
45
46
|
"""
|
46
47
|
|
ostk/astrodynamics/access.pyi
CHANGED
@@ -9,6 +9,7 @@ import ostk.physics.coordinate
|
|
9
9
|
import ostk.physics.coordinate.spherical
|
10
10
|
import ostk.physics.environment.object
|
11
11
|
import ostk.physics.time
|
12
|
+
import ostk.physics.unit
|
12
13
|
import typing
|
13
14
|
__all__ = ['AccessTarget', 'Generator', 'VisibilityCriterion']
|
14
15
|
class AccessTarget:
|
@@ -423,6 +424,7 @@ class VisibilityCriterion:
|
|
423
424
|
Args:
|
424
425
|
elevation_interval (RealInterval): The elevation interval in degrees.
|
425
426
|
"""
|
427
|
+
@typing.overload
|
426
428
|
def is_satisfied(self, elevation: ostk.core.type.Real) -> bool:
|
427
429
|
"""
|
428
430
|
Checks if the given elevation angle satisfies the criterion.
|
@@ -430,6 +432,17 @@ class VisibilityCriterion:
|
|
430
432
|
Args:
|
431
433
|
elevation (float): Elevation angle in radians.
|
432
434
|
|
435
|
+
Returns:
|
436
|
+
bool: True if the criterion is satisfied, False otherwise.
|
437
|
+
"""
|
438
|
+
@typing.overload
|
439
|
+
def is_satisfied(self, elevation: ostk.physics.unit.Angle) -> bool:
|
440
|
+
"""
|
441
|
+
Checks if the given elevation angle satisfies the criterion.
|
442
|
+
|
443
|
+
Args:
|
444
|
+
elevation (Angle): Elevation angle.
|
445
|
+
|
433
446
|
Returns:
|
434
447
|
bool: True if the criterion is satisfied, False otherwise.
|
435
448
|
"""
|
@@ -0,0 +1,280 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
import numpy
|
3
|
+
import ostk.astrodynamics.solver
|
4
|
+
import ostk.astrodynamics.trajectory
|
5
|
+
import ostk.astrodynamics.trajectory.orbit.model.sgp4
|
6
|
+
import ostk.astrodynamics.trajectory.state
|
7
|
+
import ostk.core.type
|
8
|
+
import ostk.physics
|
9
|
+
import ostk.physics.coordinate
|
10
|
+
import typing
|
11
|
+
__all__ = ['OrbitDeterminationSolver', 'TLESolver']
|
12
|
+
class OrbitDeterminationSolver:
|
13
|
+
"""
|
14
|
+
|
15
|
+
Orbit Determination solver.
|
16
|
+
|
17
|
+
"""
|
18
|
+
class Analysis:
|
19
|
+
"""
|
20
|
+
|
21
|
+
Analysis results from the Orbit Determination.
|
22
|
+
|
23
|
+
"""
|
24
|
+
@staticmethod
|
25
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
26
|
+
...
|
27
|
+
def __init__(self, estimated_state: ostk.astrodynamics.trajectory.State, solver_analysis: ostk.astrodynamics.solver.LeastSquaresSolver.Analysis) -> None:
|
28
|
+
"""
|
29
|
+
Construct a new Analysis object.
|
30
|
+
|
31
|
+
Args:
|
32
|
+
estimated_state (State): The estimated state. Matching the frame and expanded coordinates of the provided initial guess state.
|
33
|
+
solver_analysis (LeastSquaresSolver.Analysis): The solver analysis.
|
34
|
+
"""
|
35
|
+
def __repr__(self) -> str:
|
36
|
+
...
|
37
|
+
def __str__(self) -> str:
|
38
|
+
...
|
39
|
+
@property
|
40
|
+
def estimated_state(self) -> ostk.astrodynamics.trajectory.State:
|
41
|
+
"""
|
42
|
+
The estimated state.
|
43
|
+
|
44
|
+
:type: State
|
45
|
+
"""
|
46
|
+
@property
|
47
|
+
def solver_analysis(self) -> ostk.astrodynamics.solver.LeastSquaresSolver.Analysis:
|
48
|
+
"""
|
49
|
+
The solver analysis.
|
50
|
+
|
51
|
+
:type: LeastSquaresSolver.Analysis
|
52
|
+
"""
|
53
|
+
@staticmethod
|
54
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
55
|
+
...
|
56
|
+
def __init__(self, environment: ostk.physics.Environment = ..., numerical_solver: ostk.astrodynamics.trajectory.state.NumericalSolver = ..., solver: ostk.astrodynamics.solver.LeastSquaresSolver = ..., estimation_frame: ostk.physics.coordinate.Frame = ...) -> None:
|
57
|
+
"""
|
58
|
+
Construct a new OrbitDeterminationSolver object.
|
59
|
+
|
60
|
+
Args:
|
61
|
+
environment (Environment, optional): The environment. Defaults to Environment.default().
|
62
|
+
numerical_solver (NumericalSolver, optional): The numerical solver. Defaults to NumericalSolver.default().
|
63
|
+
solver (LeastSquaresSolver, optional): The Least Squares solver. Defaults to LeastSquaresSolver.default().
|
64
|
+
estimation_frame (Frame, optional): The estimation frame. Defaults to Frame.GCRF().
|
65
|
+
"""
|
66
|
+
def access_environment(self) -> ostk.physics.Environment:
|
67
|
+
"""
|
68
|
+
Access the environment.
|
69
|
+
|
70
|
+
Returns:
|
71
|
+
Environment: The environment.
|
72
|
+
"""
|
73
|
+
def access_estimation_frame(self) -> ostk.physics.coordinate.Frame:
|
74
|
+
"""
|
75
|
+
Access the estimation frame.
|
76
|
+
|
77
|
+
Returns:
|
78
|
+
Frame: The estimation frame.
|
79
|
+
"""
|
80
|
+
def access_propagator(self) -> ostk.astrodynamics.trajectory.Propagator:
|
81
|
+
"""
|
82
|
+
Access the propagator.
|
83
|
+
|
84
|
+
Returns:
|
85
|
+
Propagator: The propagator.
|
86
|
+
"""
|
87
|
+
def access_solver(self) -> ostk.astrodynamics.solver.LeastSquaresSolver:
|
88
|
+
"""
|
89
|
+
Access the solver.
|
90
|
+
|
91
|
+
Returns:
|
92
|
+
LeastSquaresSolver: The Least Squares solver.
|
93
|
+
"""
|
94
|
+
def estimate(self, initial_guess: ostk.astrodynamics.trajectory.State, observations: list[ostk.astrodynamics.trajectory.State], estimation_coordinate_subsets: list[ostk.astrodynamics.trajectory.state.CoordinateSubset] = [], initial_guess_sigmas: dict[ostk.astrodynamics.trajectory.state.CoordinateSubset, numpy.ndarray[numpy.float64[m, 1]]] = {}, observation_sigmas: dict[ostk.astrodynamics.trajectory.state.CoordinateSubset, numpy.ndarray[numpy.float64[m, 1]]] = {}) -> OrbitDeterminationSolver.Analysis:
|
95
|
+
"""
|
96
|
+
Estimate state from observations.
|
97
|
+
|
98
|
+
Args:
|
99
|
+
initial_guess (State): Initial guess state.
|
100
|
+
observations (list[State]): Observations to fit against.
|
101
|
+
estimation_coordinate_subsets (list[CoordinateSubset], optional): Coordinate subsets to estimate. Defaults to empty list, in which case all the coordinate subsets from the initial guess state are estimated.
|
102
|
+
initial_guess_sigmas (dict[CoordinateSubset, VectorXd], optional): Initial guess sigmas.
|
103
|
+
observation_sigmas (dict[CoordinateSubset, VectorXd], optional): Observation sigmas.
|
104
|
+
|
105
|
+
Returns:
|
106
|
+
OrbitDeterminationSolverAnalysis: The analysis results.
|
107
|
+
"""
|
108
|
+
def estimate_orbit(self, initial_guess: ostk.astrodynamics.trajectory.State, observations: list[ostk.astrodynamics.trajectory.State], estimation_coordinate_subsets: list[ostk.astrodynamics.trajectory.state.CoordinateSubset] = [], initial_guess_sigmas: dict[ostk.astrodynamics.trajectory.state.CoordinateSubset, numpy.ndarray[numpy.float64[m, 1]]] = {}, observation_sigmas: dict[ostk.astrodynamics.trajectory.state.CoordinateSubset, numpy.ndarray[numpy.float64[m, 1]]] = {}) -> ostk.astrodynamics.trajectory.Orbit:
|
109
|
+
"""
|
110
|
+
Estimate Propagated Orbit from observations.
|
111
|
+
|
112
|
+
Args:
|
113
|
+
initial_guess (State): Initial guess state.
|
114
|
+
observations (list[State]): Observations to fit against.
|
115
|
+
estimation_coordinate_subsets (list[CoordinateSubset], optional): Coordinate subsets to estimate. Defaults to empty list, in which case all the coordinate subsets from the initial guess state are estimated.
|
116
|
+
initial_guess_sigmas (dict[CoordinateSubset, VectorXd], optional): Initial guess sigmas. Defaults to empty, in which case
|
117
|
+
observation_sigmas (dict[CoordinateSubset, VectorXd], optional): Observation sigmas.
|
118
|
+
|
119
|
+
Returns:
|
120
|
+
Orbit: The estimated orbit.
|
121
|
+
"""
|
122
|
+
class TLESolver:
|
123
|
+
"""
|
124
|
+
|
125
|
+
Solver for estimating TLE elements.
|
126
|
+
|
127
|
+
"""
|
128
|
+
class Analysis:
|
129
|
+
"""
|
130
|
+
|
131
|
+
Analysis results from the TLE estimation solver.
|
132
|
+
|
133
|
+
"""
|
134
|
+
@staticmethod
|
135
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
136
|
+
...
|
137
|
+
def __init__(self, estimated_tle: ostk.astrodynamics.trajectory.orbit.model.sgp4.TLE, solver_analysis: ostk.astrodynamics.solver.LeastSquaresSolver.Analysis) -> None:
|
138
|
+
"""
|
139
|
+
Construct a new TLESolver::Analysis object.
|
140
|
+
|
141
|
+
Args:
|
142
|
+
estimated_tle (TLE): The estimated TLE.
|
143
|
+
solver_analysis (LeastSquaresSolver.Analysis): The solver analysis.
|
144
|
+
"""
|
145
|
+
def __repr__(self) -> str:
|
146
|
+
...
|
147
|
+
def __str__(self) -> str:
|
148
|
+
...
|
149
|
+
@property
|
150
|
+
def estimated_tle(self) -> ostk.astrodynamics.trajectory.orbit.model.sgp4.TLE:
|
151
|
+
"""
|
152
|
+
The estimated TLE.
|
153
|
+
|
154
|
+
:type: TLE
|
155
|
+
"""
|
156
|
+
@property
|
157
|
+
def solver_analysis(self) -> ostk.astrodynamics.solver.LeastSquaresSolver.Analysis:
|
158
|
+
"""
|
159
|
+
The solver analysis.
|
160
|
+
|
161
|
+
:type: LeastSquaresSolver.Analysis
|
162
|
+
"""
|
163
|
+
@staticmethod
|
164
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
165
|
+
...
|
166
|
+
def __init__(self, solver: ostk.astrodynamics.solver.LeastSquaresSolver = ..., satellite_number: ostk.core.type.Integer = 0, international_designator: ostk.core.type.String = '00001A', revolution_number: ostk.core.type.Integer = 0, estimate_b_star: bool = True, estimation_frame: ostk.physics.coordinate.Frame = ...) -> None:
|
167
|
+
"""
|
168
|
+
Construct a new TLESolver object.
|
169
|
+
|
170
|
+
Args:
|
171
|
+
solver (LeastSquaresSolver, optional): The solver to use. Defaults to LeastSquaresSolver.default().
|
172
|
+
satellite_number (int, optional): Satellite number for TLE. Defaults to 0.
|
173
|
+
international_designator (str, optional): International designator for TLE. Defaults to "00001A".
|
174
|
+
revolution_number (int, optional): Revolution number. Defaults to 0.
|
175
|
+
estimate_b_star (bool, optional): Whether to also estimate the B* parameter. Defaults to True.
|
176
|
+
estimation_frame (Frame, optional): Frame for estimation. Defaults to GCRF.
|
177
|
+
"""
|
178
|
+
def access_default_b_star(self) -> ostk.core.type.Real:
|
179
|
+
"""
|
180
|
+
Access the default B* value.
|
181
|
+
|
182
|
+
Returns:
|
183
|
+
float: The default B* value.
|
184
|
+
"""
|
185
|
+
def access_element_set_number(self) -> ostk.core.type.Integer:
|
186
|
+
"""
|
187
|
+
Access the element set number.
|
188
|
+
|
189
|
+
Returns:
|
190
|
+
int: The element set number.
|
191
|
+
"""
|
192
|
+
def access_ephemeris_type(self) -> ostk.core.type.Integer:
|
193
|
+
"""
|
194
|
+
Access the ephemeris type.
|
195
|
+
|
196
|
+
Returns:
|
197
|
+
int: The ephemeris type.
|
198
|
+
"""
|
199
|
+
def access_estimate_b_star(self) -> bool:
|
200
|
+
"""
|
201
|
+
Access whether to estimate B*.
|
202
|
+
|
203
|
+
Returns:
|
204
|
+
bool: whether to estimate B*.
|
205
|
+
"""
|
206
|
+
def access_first_derivative_mean_motion_divided_by_2(self) -> ostk.core.type.Real:
|
207
|
+
"""
|
208
|
+
Access the first derivative of mean motion divided by 2.
|
209
|
+
|
210
|
+
Returns:
|
211
|
+
float: The first derivative of mean motion divided by 2.
|
212
|
+
"""
|
213
|
+
def access_international_designator(self) -> ostk.core.type.String:
|
214
|
+
"""
|
215
|
+
Access the international designator.
|
216
|
+
|
217
|
+
Returns:
|
218
|
+
str: The international designator.
|
219
|
+
"""
|
220
|
+
def access_revolution_number(self) -> ostk.core.type.Integer:
|
221
|
+
"""
|
222
|
+
Access the revolution number.
|
223
|
+
|
224
|
+
Returns:
|
225
|
+
int: The revolution number.
|
226
|
+
"""
|
227
|
+
def access_satellite_number(self) -> ostk.core.type.Integer:
|
228
|
+
"""
|
229
|
+
Access the satellite number.
|
230
|
+
|
231
|
+
Returns:
|
232
|
+
int: The satellite number.
|
233
|
+
"""
|
234
|
+
def access_second_derivative_mean_motion_divided_by_6(self) -> ostk.core.type.Real:
|
235
|
+
"""
|
236
|
+
Access the second derivative of mean motion divided by 6.
|
237
|
+
|
238
|
+
Returns:
|
239
|
+
float: The second derivative of mean motion divided by 6.
|
240
|
+
"""
|
241
|
+
def access_solver(self) -> ostk.astrodynamics.solver.LeastSquaresSolver:
|
242
|
+
"""
|
243
|
+
Access the solver.
|
244
|
+
|
245
|
+
Returns:
|
246
|
+
LeastSquaresSolver: The Least Squares solver.
|
247
|
+
"""
|
248
|
+
def access_tle_state_builder(self) -> ostk.astrodynamics.trajectory.StateBuilder:
|
249
|
+
"""
|
250
|
+
Access the TLE state builder.
|
251
|
+
|
252
|
+
Returns:
|
253
|
+
StateBuilder: The TLE state builder.
|
254
|
+
"""
|
255
|
+
def estimate(self, initial_guess: typing.Any, observations: list[ostk.astrodynamics.trajectory.State], initial_guess_sigmas: dict[ostk.astrodynamics.trajectory.state.CoordinateSubset, numpy.ndarray[numpy.float64[m, 1]]] = {}, observation_sigmas: dict[ostk.astrodynamics.trajectory.state.CoordinateSubset, numpy.ndarray[numpy.float64[m, 1]]] = {}) -> TLESolver.Analysis:
|
256
|
+
"""
|
257
|
+
Estimate TLE from observations.
|
258
|
+
|
259
|
+
Args:
|
260
|
+
initial_guess (TLE | tuple[State, float] | State): Initial guess - can be a TLE, (cartesian State, B*) tuple, or cartesian State.
|
261
|
+
observations (list[State]): State observations to fit against.
|
262
|
+
initial_guess_sigmas (dict[CoordinateSubset, ndarray], optional): Initial guess sigmas.
|
263
|
+
observation_sigmas (dict[CoordinateSubset, ndarray], optional): Observation sigmas.
|
264
|
+
|
265
|
+
Returns:
|
266
|
+
TLESolver.Analysis: Analysis results containing the estimated TLE and solver analysis.
|
267
|
+
"""
|
268
|
+
def estimate_orbit(self, initial_guess: typing.Any, observations: list[ostk.astrodynamics.trajectory.State], initial_guess_sigmas: dict[ostk.astrodynamics.trajectory.state.CoordinateSubset, numpy.ndarray[numpy.float64[m, 1]]] = {}, observation_sigmas: dict[ostk.astrodynamics.trajectory.state.CoordinateSubset, numpy.ndarray[numpy.float64[m, 1]]] = {}) -> ostk.astrodynamics.trajectory.Orbit:
|
269
|
+
"""
|
270
|
+
Estimate an SGP4-based orbit from observations.
|
271
|
+
|
272
|
+
Args:
|
273
|
+
initial_guess (TLE | tuple[State, float] | State): Initial guess - can be a TLE, (cartesian State, B*) tuple, or cartesian State.
|
274
|
+
observations (list[State]): State observations to fit against.
|
275
|
+
initial_guess_sigmas (dict[CoordinateSubset, ndarray], optional): Initial guess sigmas.
|
276
|
+
observation_sigmas (dict[CoordinateSubset, ndarray], optional): Observation sigmas.
|
277
|
+
|
278
|
+
Returns:
|
279
|
+
Orbit: The estimated SGP4 orbit.
|
280
|
+
"""
|
Binary file
|
ostk/astrodynamics/solver.pyi
CHANGED
@@ -3,7 +3,7 @@ import numpy
|
|
3
3
|
import ostk.core.type
|
4
4
|
import ostk.physics.time
|
5
5
|
import typing
|
6
|
-
__all__ = ['FiniteDifferenceSolver', 'TemporalConditionSolver']
|
6
|
+
__all__ = ['FiniteDifferenceSolver', 'LeastSquaresSolver', 'TemporalConditionSolver']
|
7
7
|
class FiniteDifferenceSolver:
|
8
8
|
"""
|
9
9
|
|
@@ -166,6 +166,214 @@ class FiniteDifferenceSolver:
|
|
166
166
|
Returns:
|
167
167
|
FiniteDifferenceSolver.Type: The type.
|
168
168
|
"""
|
169
|
+
class LeastSquaresSolver:
|
170
|
+
"""
|
171
|
+
|
172
|
+
Class to solve non-linear least squares problems.
|
173
|
+
|
174
|
+
"""
|
175
|
+
class Analysis:
|
176
|
+
"""
|
177
|
+
|
178
|
+
Class representing the analysis of the least squares solver.
|
179
|
+
|
180
|
+
"""
|
181
|
+
@staticmethod
|
182
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
183
|
+
...
|
184
|
+
def __init__(self, termination_criteria: ostk.core.type.String, estimated_state: typing.Any, estimated_covariance: numpy.ndarray[numpy.float64[m, n]], estimated_frisbee_covariance: numpy.ndarray[numpy.float64[m, n]], computed_observations: list[...], steps: list[LeastSquaresSolver.Step]) -> None:
|
185
|
+
"""
|
186
|
+
Constructor.
|
187
|
+
|
188
|
+
Args:
|
189
|
+
termination_criteria (str): The termination criteria.
|
190
|
+
estimated_state (State): The estimated state.
|
191
|
+
estimated_covariance (np.ndarray): The estimated covariance matrix.
|
192
|
+
estimated_frisbee_covariance (np.ndarray): The estimated Frisbee covariance matrix.
|
193
|
+
computed_observations (list[State]): The computed observations of the final iteration.
|
194
|
+
steps (list[LeastSquaresSolver.Step]): The steps.
|
195
|
+
"""
|
196
|
+
def __repr__(self) -> str:
|
197
|
+
...
|
198
|
+
def __str__(self) -> str:
|
199
|
+
...
|
200
|
+
def compute_residual_states(self, observations: list[...]) -> list[...]:
|
201
|
+
"""
|
202
|
+
Compute the residual states.
|
203
|
+
|
204
|
+
Args:
|
205
|
+
observations (list[State]): The observations.
|
206
|
+
|
207
|
+
Returns:
|
208
|
+
list[State]: The residuals.
|
209
|
+
"""
|
210
|
+
@property
|
211
|
+
def computed_observations(self) -> list[...]:
|
212
|
+
"""
|
213
|
+
The computed observations of the final iteration.
|
214
|
+
|
215
|
+
:type: np.ndarray
|
216
|
+
"""
|
217
|
+
@property
|
218
|
+
def estimated_covariance(self) -> numpy.ndarray[numpy.float64[m, n]]:
|
219
|
+
"""
|
220
|
+
The estimated covariance matrix.
|
221
|
+
|
222
|
+
:type: np.ndarray
|
223
|
+
"""
|
224
|
+
@property
|
225
|
+
def estimated_frisbee_covariance(self) -> numpy.ndarray[numpy.float64[m, n]]:
|
226
|
+
"""
|
227
|
+
The estimated Frisbee covariance matrix.
|
228
|
+
|
229
|
+
:type: np.ndarray
|
230
|
+
"""
|
231
|
+
@property
|
232
|
+
def estimated_state(self) -> ...:
|
233
|
+
"""
|
234
|
+
The estimated state.
|
235
|
+
|
236
|
+
:type: State
|
237
|
+
"""
|
238
|
+
@property
|
239
|
+
def iteration_count(self) -> int:
|
240
|
+
"""
|
241
|
+
The iteration count.
|
242
|
+
|
243
|
+
:type: int
|
244
|
+
"""
|
245
|
+
@property
|
246
|
+
def observation_count(self) -> int:
|
247
|
+
"""
|
248
|
+
The observation count.
|
249
|
+
|
250
|
+
:type: int
|
251
|
+
"""
|
252
|
+
@property
|
253
|
+
def rms_error(self) -> ostk.core.type.Real:
|
254
|
+
"""
|
255
|
+
The RMS error.
|
256
|
+
|
257
|
+
:type: float
|
258
|
+
"""
|
259
|
+
@property
|
260
|
+
def steps(self) -> list[LeastSquaresSolver.Step]:
|
261
|
+
"""
|
262
|
+
The steps.
|
263
|
+
|
264
|
+
:type: list[LeastSquaresSolver.Step]
|
265
|
+
"""
|
266
|
+
@property
|
267
|
+
def termination_criteria(self) -> ostk.core.type.String:
|
268
|
+
"""
|
269
|
+
The termination criteria.
|
270
|
+
|
271
|
+
:type: str
|
272
|
+
"""
|
273
|
+
class Step:
|
274
|
+
"""
|
275
|
+
|
276
|
+
Class representing a step in the least squares solver.
|
277
|
+
|
278
|
+
"""
|
279
|
+
@staticmethod
|
280
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
281
|
+
...
|
282
|
+
def __init__(self, rms_error: ostk.core.type.Real, x_hat: numpy.ndarray[numpy.float64[m, 1]]) -> None:
|
283
|
+
"""
|
284
|
+
Constructor.
|
285
|
+
|
286
|
+
Args:
|
287
|
+
rms_error (float): The RMS error.
|
288
|
+
x_hat (np.ndarray): The X hat vector.
|
289
|
+
"""
|
290
|
+
def __repr__(self) -> str:
|
291
|
+
...
|
292
|
+
def __str__(self) -> str:
|
293
|
+
...
|
294
|
+
@property
|
295
|
+
def rms_error(self) -> ostk.core.type.Real:
|
296
|
+
"""
|
297
|
+
The RMS error.
|
298
|
+
|
299
|
+
:type: float
|
300
|
+
"""
|
301
|
+
@property
|
302
|
+
def x_hat(self) -> numpy.ndarray[numpy.float64[m, 1]]:
|
303
|
+
"""
|
304
|
+
The X hat vector.
|
305
|
+
|
306
|
+
:type: np.ndarray
|
307
|
+
"""
|
308
|
+
@staticmethod
|
309
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
310
|
+
...
|
311
|
+
@staticmethod
|
312
|
+
def calculate_empirical_covariance(residuals: list[...]) -> numpy.ndarray[numpy.float64[m, n]]:
|
313
|
+
"""
|
314
|
+
Calculate the empirical covariance matrix from an array of state residuals.
|
315
|
+
|
316
|
+
Args:
|
317
|
+
residuals (list[State]): A list of state residuals.
|
318
|
+
|
319
|
+
Returns:
|
320
|
+
np.ndarray: The empirical covariance matrix.
|
321
|
+
|
322
|
+
Throws:
|
323
|
+
ostk::core::error::runtime::Undefined: If the residual array is empty.
|
324
|
+
"""
|
325
|
+
@staticmethod
|
326
|
+
def default() -> LeastSquaresSolver:
|
327
|
+
"""
|
328
|
+
Create a default instance of LeastSquaresSolver.
|
329
|
+
|
330
|
+
Returns:
|
331
|
+
LeastSquaresSolver: A default instance of LeastSquaresSolver.
|
332
|
+
"""
|
333
|
+
def __init__(self, maximum_iteration_count: int, rms_update_threshold: ostk.core.type.Real, finite_difference_solver: FiniteDifferenceSolver = ...) -> None:
|
334
|
+
"""
|
335
|
+
Constructor.
|
336
|
+
|
337
|
+
Args:
|
338
|
+
maximum_iteration_count (int): Maximum number of iterations.
|
339
|
+
rms_update_threshold (float): Minimum RMS threshold.
|
340
|
+
finite_difference_solver (FiniteDifferenceSolver): Finite difference solver. Defaults to FiniteDifferenceSolver.Default().
|
341
|
+
"""
|
342
|
+
def get_finite_difference_solver(self) -> FiniteDifferenceSolver:
|
343
|
+
"""
|
344
|
+
Get the finite difference solver.
|
345
|
+
|
346
|
+
Returns:
|
347
|
+
FiniteDifferenceSolver: The finite difference solver.
|
348
|
+
"""
|
349
|
+
def get_max_iteration_count(self) -> int:
|
350
|
+
"""
|
351
|
+
Get the maximum iteration count.
|
352
|
+
|
353
|
+
Returns:
|
354
|
+
int: The maximum iteration count.
|
355
|
+
"""
|
356
|
+
def get_rms_update_threshold(self) -> ostk.core.type.Real:
|
357
|
+
"""
|
358
|
+
Get the RMS update threshold.
|
359
|
+
|
360
|
+
Returns:
|
361
|
+
float: The RMS update threshold.
|
362
|
+
"""
|
363
|
+
def solve(self, initial_guess: typing.Any, observations: list[...], state_generator: typing.Callable[[..., list[ostk.physics.time.Instant]], list[...]], initial_guess_sigmas: dict[..., numpy.ndarray[numpy.float64[m, 1]]] = {}, observation_sigmas: dict[..., numpy.ndarray[numpy.float64[m, 1]]] = {}) -> LeastSquaresSolver.Analysis:
|
364
|
+
"""
|
365
|
+
Solve the non-linear least squares problem.
|
366
|
+
|
367
|
+
Args:
|
368
|
+
initial_guess (State): Initial guess state (the Estimated State is of the same domain as this state).
|
369
|
+
observations (list[State]): List of observations.
|
370
|
+
state_generator (callable[list[State],[State, list[Instant]]]): Function to generate states.
|
371
|
+
initial_guess_sigmas (dict[CoordinateSubset, np.ndarray], optional): Dictionary of sigmas for initial guess.
|
372
|
+
observation_sigmas (dict[CoordinateSubset, np.ndarray], optional): Dictionary of sigmas for observations.
|
373
|
+
|
374
|
+
Returns:
|
375
|
+
LeastSquaresSolver::Analysis: The analysis of the estimate.
|
376
|
+
"""
|
169
377
|
class TemporalConditionSolver:
|
170
378
|
"""
|
171
379
|
|