open-space-toolkit-astrodynamics 15.1.0__py313-none-manylinux2014_aarch64.whl → 15.2.1__py313-none-manylinux2014_aarch64.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: open-space-toolkit-astrodynamics
3
- Version: 15.1.0
3
+ Version: 15.2.1
4
4
  Summary: Orbit, attitude, access.
5
5
  Author: Open Space Collective
6
6
  Author-email: contact@open-space-collective.org
@@ -1,18 +1,19 @@
1
1
  ostk/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
2
- ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-313-aarch64-linux-gnu.so,sha256=mO4caBawWljEfEjFjNdYe8F_5Sq3rNEa98HefY0ac9c,2349064
2
+ ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-313-aarch64-linux-gnu.so,sha256=dCIDHSOF4hRQSMMQcbA4TJE3k_6ZaJpjFwGH4qC_06M,2488512
3
3
  ostk/astrodynamics/__init__.py,sha256=3gWyqFIbhAfcdeMhmfBPQPlPQTmaOzm-6flkJe745Zk,251
4
- ostk/astrodynamics/__init__.pyi,sha256=tfxDvws_Zrse_YY4O45u-DL4TJT4AAB7fyG_AIOpbIA,32231
5
- ostk/astrodynamics/access.pyi,sha256=0GAFCSoMHT3L8wWOxU1-3ELqR7YGyEkt6wlpaL7UXzI,25313
4
+ ostk/astrodynamics/__init__.pyi,sha256=xHHcWE-m3SWT0sV31g_g9QSY9q5g4yrPjk9Fqx0MrSY,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=tTUT0xGbiUkKxUj79Hq5EEtxV3b2uR6Wsnj_vwyj-mk,1625
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=I8NcjRb3G6OpLx4trcdFtgN0zaXkBP1hWfnqxC5eYCw,3605200
14
- ostk/astrodynamics/solver.pyi,sha256=ugi73KdRXPKFvKXFMpYKIwxYUGC2KEMlBiLv0PFcigM,9746
15
- ostk/astrodynamics/utilities.py,sha256=mlKL3WrOASrY_pLt7bzUz0XZT7jagzLOZjMOIqjbQ1Y,6999
14
+ ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.15,sha256=m2xvWOUk4uUDP01xfQuCiIKahwAgOirCtH7MhWX67PU,3802536
15
+ ostk/astrodynamics/solver.pyi,sha256=tjFkzoxW6h6grMGpqKsgyXyYH9R6lLg6LEV2v5_X6yk,18238
16
+ ostk/astrodynamics/utilities.py,sha256=y8mr3M46J5z-GhS1oIEnuEJA6otwcyJ9YDhvn_5JxHM,6976
16
17
  ostk/astrodynamics/viewer.py,sha256=SpcvBqXx3CAZpk7UGOPT1ilxywmAmNpgqpuRY11Hwx0,16376
17
18
  ostk/astrodynamics/conjunction/__init__.pyi,sha256=HFvWl8bCmrq3cBkUh5X5RGIh8webmVGxaZdpsz3WN-E,79
18
19
  ostk/astrodynamics/conjunction/message/__init__.pyi,sha256=5H__sg_QUx7ybf9jtVWvXzrUHeK3ECotfhddAdHjJUc,75
@@ -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=0Q_lcs6PZC_mTIHDuIPc8adKF02q2EM_ZR6jT5UhnDg,6353
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.1.0.dist-info/METADATA,sha256=52SOCFxHag6hxYwvZmHaYbAds9Sbi7efOiwqvUWHIj8,1913
128
- open_space_toolkit_astrodynamics-15.1.0.dist-info/WHEEL,sha256=wr_0cLaLsV93tJompOgaoqtbnb-AzROfY3cX1mNJHbg,111
129
- open_space_toolkit_astrodynamics-15.1.0.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
130
- open_space_toolkit_astrodynamics-15.1.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
131
- open_space_toolkit_astrodynamics-15.1.0.dist-info/RECORD,,
131
+ open_space_toolkit_astrodynamics-15.2.1.dist-info/METADATA,sha256=cqRVuLi0uOUcBjOhBH99XRlA4ojKO9QGKiufSdPSZ3Y,1913
132
+ open_space_toolkit_astrodynamics-15.2.1.dist-info/WHEEL,sha256=wr_0cLaLsV93tJompOgaoqtbnb-AzROfY3cX1mNJHbg,111
133
+ open_space_toolkit_astrodynamics-15.2.1.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
134
+ open_space_toolkit_astrodynamics-15.2.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
135
+ open_space_toolkit_astrodynamics-15.2.1.dist-info/RECORD,,
@@ -19,8 +19,8 @@ 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
22
- from ostk.physics import coordinate
23
22
  import ostk.physics.coordinate
23
+ from ostk.physics import coordinate
24
24
  import ostk.physics.coordinate.spherical
25
25
  from ostk.physics import environment
26
26
  import ostk.physics.environment.object
@@ -34,13 +34,14 @@ 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
 
@@ -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
+ """
@@ -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