nrl-tracker 0.22.0__py3-none-any.whl → 0.22.2__py3-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.
- {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.2.dist-info}/METADATA +1 -1
- nrl_tracker-0.22.2.dist-info/RECORD +150 -0
- pytcl/__init__.py +11 -9
- pytcl/assignment_algorithms/__init__.py +42 -32
- pytcl/assignment_algorithms/data_association.py +3 -7
- pytcl/assignment_algorithms/gating.py +2 -4
- pytcl/assignment_algorithms/jpda.py +2 -6
- pytcl/assignment_algorithms/three_dimensional/__init__.py +8 -6
- pytcl/assignment_algorithms/three_dimensional/assignment.py +2 -6
- pytcl/assignment_algorithms/two_dimensional/__init__.py +13 -9
- pytcl/assignment_algorithms/two_dimensional/assignment.py +2 -5
- pytcl/assignment_algorithms/two_dimensional/kbest.py +6 -8
- pytcl/astronomical/__init__.py +108 -96
- pytcl/astronomical/ephemerides.py +1 -3
- pytcl/astronomical/lambert.py +1 -2
- pytcl/astronomical/time_systems.py +1 -2
- pytcl/atmosphere/__init__.py +13 -11
- pytcl/atmosphere/models.py +2 -4
- pytcl/clustering/__init__.py +36 -28
- pytcl/clustering/dbscan.py +2 -5
- pytcl/clustering/gaussian_mixture.py +2 -6
- pytcl/clustering/hierarchical.py +2 -6
- pytcl/clustering/kmeans.py +2 -6
- pytcl/containers/__init__.py +26 -29
- pytcl/containers/cluster_set.py +2 -10
- pytcl/containers/covertree.py +2 -8
- pytcl/containers/kd_tree.py +2 -6
- pytcl/containers/measurement_set.py +2 -9
- pytcl/containers/rtree.py +2 -6
- pytcl/containers/track_list.py +13 -13
- pytcl/containers/vptree.py +2 -7
- pytcl/coordinate_systems/__init__.py +74 -69
- pytcl/coordinate_systems/conversions/__init__.py +24 -20
- pytcl/coordinate_systems/conversions/geodetic.py +2 -4
- pytcl/coordinate_systems/conversions/spherical.py +2 -4
- pytcl/coordinate_systems/jacobians/__init__.py +12 -10
- pytcl/coordinate_systems/jacobians/jacobians.py +1 -2
- pytcl/coordinate_systems/projections/__init__.py +21 -23
- pytcl/coordinate_systems/projections/projections.py +1 -3
- pytcl/coordinate_systems/rotations/__init__.py +22 -20
- pytcl/coordinate_systems/rotations/rotations.py +1 -2
- pytcl/core/__init__.py +22 -16
- pytcl/core/array_utils.py +3 -6
- pytcl/core/validation.py +2 -7
- pytcl/dynamic_estimation/__init__.py +86 -77
- pytcl/dynamic_estimation/imm.py +3 -7
- pytcl/dynamic_estimation/information_filter.py +6 -8
- pytcl/dynamic_estimation/kalman/__init__.py +48 -40
- pytcl/dynamic_estimation/kalman/extended.py +2 -4
- pytcl/dynamic_estimation/kalman/linear.py +3 -7
- pytcl/dynamic_estimation/kalman/square_root.py +2 -5
- pytcl/dynamic_estimation/kalman/unscented.py +3 -8
- pytcl/dynamic_estimation/particle_filters/__init__.py +14 -12
- pytcl/dynamic_estimation/particle_filters/bootstrap.py +2 -6
- pytcl/dynamic_estimation/smoothers.py +3 -8
- pytcl/dynamic_models/__init__.py +41 -37
- pytcl/dynamic_models/continuous_time/__init__.py +11 -11
- pytcl/dynamic_models/continuous_time/dynamics.py +2 -4
- pytcl/dynamic_models/discrete_time/__init__.py +13 -11
- pytcl/dynamic_models/process_noise/__init__.py +13 -11
- pytcl/gravity/__init__.py +65 -55
- pytcl/gravity/clenshaw.py +1 -2
- pytcl/gravity/egm.py +3 -8
- pytcl/gravity/spherical_harmonics.py +1 -2
- pytcl/gravity/tides.py +1 -2
- pytcl/magnetism/__init__.py +25 -26
- pytcl/magnetism/emm.py +1 -4
- pytcl/magnetism/igrf.py +6 -5
- pytcl/magnetism/wmm.py +1 -2
- pytcl/mathematical_functions/__init__.py +87 -69
- pytcl/mathematical_functions/basic_matrix/__init__.py +19 -25
- pytcl/mathematical_functions/basic_matrix/decompositions.py +2 -5
- pytcl/mathematical_functions/basic_matrix/special_matrices.py +1 -2
- pytcl/mathematical_functions/combinatorics/__init__.py +14 -18
- pytcl/mathematical_functions/combinatorics/combinatorics.py +1 -4
- pytcl/mathematical_functions/geometry/__init__.py +15 -15
- pytcl/mathematical_functions/geometry/geometry.py +3 -6
- pytcl/mathematical_functions/interpolation/__init__.py +12 -10
- pytcl/mathematical_functions/interpolation/interpolation.py +2 -7
- pytcl/mathematical_functions/numerical_integration/__init__.py +10 -16
- pytcl/mathematical_functions/numerical_integration/quadrature.py +2 -6
- pytcl/mathematical_functions/signal_processing/__init__.py +30 -42
- pytcl/mathematical_functions/signal_processing/detection.py +3 -6
- pytcl/mathematical_functions/signal_processing/filters.py +2 -5
- pytcl/mathematical_functions/signal_processing/matched_filter.py +3 -6
- pytcl/mathematical_functions/special_functions/__init__.py +76 -74
- pytcl/mathematical_functions/special_functions/bessel.py +1 -2
- pytcl/mathematical_functions/special_functions/debye.py +2 -4
- pytcl/mathematical_functions/special_functions/elliptic.py +1 -2
- pytcl/mathematical_functions/special_functions/error_functions.py +1 -2
- pytcl/mathematical_functions/special_functions/gamma_functions.py +1 -2
- pytcl/mathematical_functions/special_functions/hypergeometric.py +1 -2
- pytcl/mathematical_functions/special_functions/lambert_w.py +1 -2
- pytcl/mathematical_functions/special_functions/marcum_q.py +1 -2
- pytcl/mathematical_functions/statistics/__init__.py +31 -27
- pytcl/mathematical_functions/statistics/distributions.py +4 -9
- pytcl/mathematical_functions/statistics/estimators.py +1 -2
- pytcl/mathematical_functions/transforms/__init__.py +51 -45
- pytcl/mathematical_functions/transforms/fourier.py +2 -5
- pytcl/mathematical_functions/transforms/stft.py +2 -5
- pytcl/mathematical_functions/transforms/wavelets.py +2 -7
- pytcl/navigation/__init__.py +99 -89
- pytcl/navigation/geodesy.py +2 -4
- pytcl/navigation/great_circle.py +1 -3
- pytcl/navigation/ins.py +5 -11
- pytcl/navigation/ins_gnss.py +12 -17
- pytcl/navigation/rhumb.py +2 -4
- pytcl/performance_evaluation/__init__.py +25 -21
- pytcl/performance_evaluation/estimation_metrics.py +1 -3
- pytcl/performance_evaluation/track_metrics.py +1 -3
- pytcl/plotting/__init__.py +38 -30
- pytcl/plotting/coordinates.py +1 -3
- pytcl/plotting/ellipses.py +2 -5
- pytcl/plotting/metrics.py +1 -2
- pytcl/plotting/tracks.py +1 -4
- pytcl/static_estimation/__init__.py +41 -37
- pytcl/static_estimation/least_squares.py +2 -4
- pytcl/static_estimation/maximum_likelihood.py +2 -5
- pytcl/static_estimation/robust.py +2 -5
- pytcl/terrain/__init__.py +34 -28
- pytcl/terrain/dem.py +1 -4
- pytcl/terrain/loaders.py +1 -4
- pytcl/terrain/visibility.py +1 -2
- pytcl/trackers/__init__.py +14 -17
- pytcl/trackers/hypothesis.py +1 -6
- pytcl/trackers/mht.py +9 -13
- pytcl/trackers/multi_target.py +3 -8
- pytcl/trackers/single_target.py +2 -5
- nrl_tracker-0.22.0.dist-info/RECORD +0 -150
- {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.2.dist-info}/LICENSE +0 -0
- {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.2.dist-info}/WHEEL +0 -0
- {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.2.dist-info}/top_level.txt +0 -0
pytcl/containers/vptree.py
CHANGED
|
@@ -11,15 +11,10 @@ References
|
|
|
11
11
|
neighbor search in general metric spaces," SODA 1993.
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
-
from typing import Callable
|
|
15
|
-
from typing import List
|
|
16
|
-
from typing import NamedTuple
|
|
17
|
-
from typing import Optional
|
|
18
|
-
from typing import Tuple
|
|
14
|
+
from typing import Callable, List, NamedTuple, Optional, Tuple
|
|
19
15
|
|
|
20
16
|
import numpy as np
|
|
21
|
-
from numpy.typing import ArrayLike
|
|
22
|
-
from numpy.typing import NDArray
|
|
17
|
+
from numpy.typing import ArrayLike, NDArray
|
|
23
18
|
|
|
24
19
|
|
|
25
20
|
class VPTreeResult(NamedTuple):
|
|
@@ -15,84 +15,89 @@ systems commonly used in tracking applications:
|
|
|
15
15
|
"""
|
|
16
16
|
|
|
17
17
|
# Import submodules for easy access
|
|
18
|
-
from pytcl.coordinate_systems import conversions
|
|
19
|
-
from pytcl.coordinate_systems import jacobians
|
|
20
|
-
from pytcl.coordinate_systems import projections
|
|
21
|
-
from pytcl.coordinate_systems import rotations
|
|
18
|
+
from pytcl.coordinate_systems import conversions, jacobians, projections, rotations
|
|
22
19
|
|
|
23
20
|
# Geodetic conversions
|
|
24
21
|
# Spherical/polar conversions
|
|
25
|
-
from pytcl.coordinate_systems.conversions import
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
22
|
+
from pytcl.coordinate_systems.conversions import (
|
|
23
|
+
cart2cyl,
|
|
24
|
+
cart2pol,
|
|
25
|
+
cart2ruv,
|
|
26
|
+
cart2sphere,
|
|
27
|
+
cyl2cart,
|
|
28
|
+
ecef2enu,
|
|
29
|
+
ecef2geodetic,
|
|
30
|
+
ecef2ned,
|
|
31
|
+
enu2ecef,
|
|
32
|
+
enu2ned,
|
|
33
|
+
geocentric_radius,
|
|
34
|
+
geodetic2ecef,
|
|
35
|
+
geodetic2enu,
|
|
36
|
+
meridional_radius,
|
|
37
|
+
ned2ecef,
|
|
38
|
+
ned2enu,
|
|
39
|
+
pol2cart,
|
|
40
|
+
prime_vertical_radius,
|
|
41
|
+
ruv2cart,
|
|
42
|
+
sphere2cart,
|
|
43
|
+
)
|
|
45
44
|
|
|
46
45
|
# Jacobians
|
|
47
|
-
from pytcl.coordinate_systems.jacobians import
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
46
|
+
from pytcl.coordinate_systems.jacobians import (
|
|
47
|
+
cross_covariance_transform,
|
|
48
|
+
enu_jacobian,
|
|
49
|
+
geodetic_jacobian,
|
|
50
|
+
ned_jacobian,
|
|
51
|
+
numerical_jacobian,
|
|
52
|
+
polar_jacobian,
|
|
53
|
+
polar_jacobian_inv,
|
|
54
|
+
ruv_jacobian,
|
|
55
|
+
spherical_jacobian,
|
|
56
|
+
spherical_jacobian_inv,
|
|
57
|
+
)
|
|
57
58
|
|
|
58
59
|
# Projections
|
|
59
|
-
from pytcl.coordinate_systems.projections import
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
60
|
+
from pytcl.coordinate_systems.projections import (
|
|
61
|
+
azimuthal_equidistant,
|
|
62
|
+
azimuthal_equidistant_inverse,
|
|
63
|
+
geodetic2utm,
|
|
64
|
+
lambert_conformal_conic,
|
|
65
|
+
lambert_conformal_conic_inverse,
|
|
66
|
+
mercator,
|
|
67
|
+
mercator_inverse,
|
|
68
|
+
polar_stereographic,
|
|
69
|
+
stereographic,
|
|
70
|
+
stereographic_inverse,
|
|
71
|
+
transverse_mercator,
|
|
72
|
+
transverse_mercator_inverse,
|
|
73
|
+
utm2geodetic,
|
|
74
|
+
utm_central_meridian,
|
|
75
|
+
utm_zone,
|
|
76
|
+
)
|
|
74
77
|
|
|
75
78
|
# Rotation operations
|
|
76
|
-
from pytcl.coordinate_systems.rotations import
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
79
|
+
from pytcl.coordinate_systems.rotations import (
|
|
80
|
+
axisangle2rotmat,
|
|
81
|
+
dcm_rate,
|
|
82
|
+
euler2quat,
|
|
83
|
+
euler2rotmat,
|
|
84
|
+
is_rotation_matrix,
|
|
85
|
+
quat2euler,
|
|
86
|
+
quat2rotmat,
|
|
87
|
+
quat_conjugate,
|
|
88
|
+
quat_inverse,
|
|
89
|
+
quat_multiply,
|
|
90
|
+
quat_rotate,
|
|
91
|
+
rodrigues2rotmat,
|
|
92
|
+
rotmat2axisangle,
|
|
93
|
+
rotmat2euler,
|
|
94
|
+
rotmat2quat,
|
|
95
|
+
rotmat2rodrigues,
|
|
96
|
+
rotx,
|
|
97
|
+
roty,
|
|
98
|
+
rotz,
|
|
99
|
+
slerp,
|
|
100
|
+
)
|
|
96
101
|
|
|
97
102
|
# Re-export commonly used functions at the top level
|
|
98
103
|
|
|
@@ -8,26 +8,30 @@ This module provides:
|
|
|
8
8
|
- Direction cosine representations (r-u-v)
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
|
-
from pytcl.coordinate_systems.conversions.geodetic import
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
from pytcl.coordinate_systems.conversions.spherical import
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
11
|
+
from pytcl.coordinate_systems.conversions.geodetic import (
|
|
12
|
+
ecef2enu,
|
|
13
|
+
ecef2geodetic,
|
|
14
|
+
ecef2ned,
|
|
15
|
+
enu2ecef,
|
|
16
|
+
enu2ned,
|
|
17
|
+
geocentric_radius,
|
|
18
|
+
geodetic2ecef,
|
|
19
|
+
geodetic2enu,
|
|
20
|
+
meridional_radius,
|
|
21
|
+
ned2ecef,
|
|
22
|
+
ned2enu,
|
|
23
|
+
prime_vertical_radius,
|
|
24
|
+
)
|
|
25
|
+
from pytcl.coordinate_systems.conversions.spherical import (
|
|
26
|
+
cart2cyl,
|
|
27
|
+
cart2pol,
|
|
28
|
+
cart2ruv,
|
|
29
|
+
cart2sphere,
|
|
30
|
+
cyl2cart,
|
|
31
|
+
pol2cart,
|
|
32
|
+
ruv2cart,
|
|
33
|
+
sphere2cart,
|
|
34
|
+
)
|
|
31
35
|
|
|
32
36
|
__all__ = [
|
|
33
37
|
# Spherical/polar
|
|
@@ -6,12 +6,10 @@ longitude, altitude) and Earth-centered coordinate systems (ECEF), as well
|
|
|
6
6
|
as local tangent plane coordinates (ENU, NED).
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
from typing import Optional
|
|
10
|
-
from typing import Tuple
|
|
9
|
+
from typing import Optional, Tuple
|
|
11
10
|
|
|
12
11
|
import numpy as np
|
|
13
|
-
from numpy.typing import ArrayLike
|
|
14
|
-
from numpy.typing import NDArray
|
|
12
|
+
from numpy.typing import ArrayLike, NDArray
|
|
15
13
|
|
|
16
14
|
from pytcl.core.constants import WGS84
|
|
17
15
|
|
|
@@ -5,12 +5,10 @@ This module provides functions for converting between Cartesian and
|
|
|
5
5
|
spherical/polar coordinate systems, following tracking conventions.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
from typing import Literal
|
|
9
|
-
from typing import Tuple
|
|
8
|
+
from typing import Literal, Tuple
|
|
10
9
|
|
|
11
10
|
import numpy as np
|
|
12
|
-
from numpy.typing import ArrayLike
|
|
13
|
-
from numpy.typing import NDArray
|
|
11
|
+
from numpy.typing import ArrayLike, NDArray
|
|
14
12
|
|
|
15
13
|
|
|
16
14
|
def cart2sphere(
|
|
@@ -10,16 +10,18 @@ This module provides:
|
|
|
10
10
|
- Covariance transformation utilities
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
-
from pytcl.coordinate_systems.jacobians.jacobians import
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
from pytcl.coordinate_systems.jacobians.jacobians import (
|
|
14
|
+
cross_covariance_transform,
|
|
15
|
+
enu_jacobian,
|
|
16
|
+
geodetic_jacobian,
|
|
17
|
+
ned_jacobian,
|
|
18
|
+
numerical_jacobian,
|
|
19
|
+
polar_jacobian,
|
|
20
|
+
polar_jacobian_inv,
|
|
21
|
+
ruv_jacobian,
|
|
22
|
+
spherical_jacobian,
|
|
23
|
+
spherical_jacobian_inv,
|
|
24
|
+
)
|
|
23
25
|
|
|
24
26
|
__all__ = [
|
|
25
27
|
"spherical_jacobian",
|
|
@@ -9,8 +9,7 @@ filters (e.g., converting measurement covariances between coordinate systems).
|
|
|
9
9
|
from typing import Literal
|
|
10
10
|
|
|
11
11
|
import numpy as np
|
|
12
|
-
from numpy.typing import ArrayLike
|
|
13
|
-
from numpy.typing import NDArray
|
|
12
|
+
from numpy.typing import ArrayLike, NDArray
|
|
14
13
|
|
|
15
14
|
|
|
16
15
|
def spherical_jacobian(
|
|
@@ -29,33 +29,31 @@ Examples
|
|
|
29
29
|
from pytcl.coordinate_systems.projections.projections import (
|
|
30
30
|
WGS84_A, # Constants; Result types; Azimuthal Equidistant; UTM; Lambert Conformal Conic; Mercator; Stereographic; Transverse Mercator
|
|
31
31
|
)
|
|
32
|
-
from pytcl.coordinate_systems.projections.projections import WGS84_B
|
|
33
|
-
from pytcl.coordinate_systems.projections.projections import WGS84_E
|
|
34
|
-
from pytcl.coordinate_systems.projections.projections import WGS84_E2
|
|
35
|
-
from pytcl.coordinate_systems.projections.projections import WGS84_EP2
|
|
36
|
-
from pytcl.coordinate_systems.projections.projections import WGS84_F
|
|
37
|
-
from pytcl.coordinate_systems.projections.projections import ProjectionResult
|
|
38
|
-
from pytcl.coordinate_systems.projections.projections import UTMResult
|
|
39
|
-
from pytcl.coordinate_systems.projections.projections import azimuthal_equidistant
|
|
40
32
|
from pytcl.coordinate_systems.projections.projections import (
|
|
33
|
+
WGS84_B,
|
|
34
|
+
WGS84_E,
|
|
35
|
+
WGS84_E2,
|
|
36
|
+
WGS84_EP2,
|
|
37
|
+
WGS84_F,
|
|
38
|
+
ProjectionResult,
|
|
39
|
+
UTMResult,
|
|
40
|
+
azimuthal_equidistant,
|
|
41
41
|
azimuthal_equidistant_inverse,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
from pytcl.coordinate_systems.projections.projections import lambert_conformal_conic
|
|
46
|
-
from pytcl.coordinate_systems.projections.projections import (
|
|
42
|
+
geodetic2utm,
|
|
43
|
+
geodetic2utm_batch,
|
|
44
|
+
lambert_conformal_conic,
|
|
47
45
|
lambert_conformal_conic_inverse,
|
|
46
|
+
mercator,
|
|
47
|
+
mercator_inverse,
|
|
48
|
+
polar_stereographic,
|
|
49
|
+
stereographic,
|
|
50
|
+
stereographic_inverse,
|
|
51
|
+
transverse_mercator,
|
|
52
|
+
transverse_mercator_inverse,
|
|
53
|
+
utm2geodetic,
|
|
54
|
+
utm_central_meridian,
|
|
55
|
+
utm_zone,
|
|
48
56
|
)
|
|
49
|
-
from pytcl.coordinate_systems.projections.projections import mercator
|
|
50
|
-
from pytcl.coordinate_systems.projections.projections import mercator_inverse
|
|
51
|
-
from pytcl.coordinate_systems.projections.projections import polar_stereographic
|
|
52
|
-
from pytcl.coordinate_systems.projections.projections import stereographic
|
|
53
|
-
from pytcl.coordinate_systems.projections.projections import stereographic_inverse
|
|
54
|
-
from pytcl.coordinate_systems.projections.projections import transverse_mercator
|
|
55
|
-
from pytcl.coordinate_systems.projections.projections import transverse_mercator_inverse
|
|
56
|
-
from pytcl.coordinate_systems.projections.projections import utm2geodetic
|
|
57
|
-
from pytcl.coordinate_systems.projections.projections import utm_central_meridian
|
|
58
|
-
from pytcl.coordinate_systems.projections.projections import utm_zone
|
|
59
57
|
|
|
60
58
|
__all__ = [
|
|
61
59
|
# Constants
|
|
@@ -25,9 +25,7 @@ References
|
|
|
25
25
|
nanometers." Journal of Geodesy 85.8 (2011): 475-485.
|
|
26
26
|
"""
|
|
27
27
|
|
|
28
|
-
from typing import NamedTuple
|
|
29
|
-
from typing import Optional
|
|
30
|
-
from typing import Tuple
|
|
28
|
+
from typing import NamedTuple, Optional, Tuple
|
|
31
29
|
|
|
32
30
|
import numpy as np
|
|
33
31
|
from numpy.typing import NDArray
|
|
@@ -9,26 +9,28 @@ This module provides:
|
|
|
9
9
|
- Rotation interpolation (SLERP)
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
-
from pytcl.coordinate_systems.rotations.rotations import
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
12
|
+
from pytcl.coordinate_systems.rotations.rotations import (
|
|
13
|
+
axisangle2rotmat,
|
|
14
|
+
dcm_rate,
|
|
15
|
+
euler2quat,
|
|
16
|
+
euler2rotmat,
|
|
17
|
+
is_rotation_matrix,
|
|
18
|
+
quat2euler,
|
|
19
|
+
quat2rotmat,
|
|
20
|
+
quat_conjugate,
|
|
21
|
+
quat_inverse,
|
|
22
|
+
quat_multiply,
|
|
23
|
+
quat_rotate,
|
|
24
|
+
rodrigues2rotmat,
|
|
25
|
+
rotmat2axisangle,
|
|
26
|
+
rotmat2euler,
|
|
27
|
+
rotmat2quat,
|
|
28
|
+
rotmat2rodrigues,
|
|
29
|
+
rotx,
|
|
30
|
+
roty,
|
|
31
|
+
rotz,
|
|
32
|
+
slerp,
|
|
33
|
+
)
|
|
32
34
|
|
|
33
35
|
__all__ = [
|
|
34
36
|
"rotx",
|
pytcl/core/__init__.py
CHANGED
|
@@ -7,22 +7,28 @@ This module provides foundational functionality used throughout the library:
|
|
|
7
7
|
- Array manipulation helpers compatible with MATLAB conventions
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
from pytcl.core.array_utils import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
from pytcl.core.constants import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
10
|
+
from pytcl.core.array_utils import (
|
|
11
|
+
column_vector,
|
|
12
|
+
row_vector,
|
|
13
|
+
wrap_to_2pi,
|
|
14
|
+
wrap_to_pi,
|
|
15
|
+
wrap_to_range,
|
|
16
|
+
)
|
|
17
|
+
from pytcl.core.constants import (
|
|
18
|
+
EARTH_FLATTENING,
|
|
19
|
+
EARTH_ROTATION_RATE,
|
|
20
|
+
EARTH_SEMI_MAJOR_AXIS,
|
|
21
|
+
GRAVITATIONAL_CONSTANT,
|
|
22
|
+
SPEED_OF_LIGHT,
|
|
23
|
+
WGS84,
|
|
24
|
+
PhysicalConstants,
|
|
25
|
+
)
|
|
26
|
+
from pytcl.core.validation import (
|
|
27
|
+
ensure_2d,
|
|
28
|
+
ensure_column_vector,
|
|
29
|
+
ensure_row_vector,
|
|
30
|
+
validate_array,
|
|
31
|
+
)
|
|
26
32
|
|
|
27
33
|
__all__ = [
|
|
28
34
|
# Constants
|
pytcl/core/array_utils.py
CHANGED
|
@@ -7,15 +7,12 @@ making it easier to port algorithms while maintaining Pythonic interfaces.
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
-
from typing import Any
|
|
11
|
-
from typing import Literal
|
|
10
|
+
from typing import Any, Literal
|
|
12
11
|
|
|
13
12
|
import numpy as np
|
|
14
|
-
from numpy.typing import ArrayLike
|
|
15
|
-
from numpy.typing import NDArray
|
|
13
|
+
from numpy.typing import ArrayLike, NDArray
|
|
16
14
|
|
|
17
|
-
from pytcl.core.constants import PI
|
|
18
|
-
from pytcl.core.constants import TWO_PI
|
|
15
|
+
from pytcl.core.constants import PI, TWO_PI
|
|
19
16
|
|
|
20
17
|
|
|
21
18
|
def wrap_to_pi(angle: ArrayLike) -> NDArray[np.floating[Any]]:
|
pytcl/core/validation.py
CHANGED
|
@@ -9,15 +9,10 @@ messages when inputs don't meet requirements.
|
|
|
9
9
|
from __future__ import annotations
|
|
10
10
|
|
|
11
11
|
from functools import wraps
|
|
12
|
-
from typing import Any
|
|
13
|
-
from typing import Callable
|
|
14
|
-
from typing import Literal
|
|
15
|
-
from typing import Sequence
|
|
16
|
-
from typing import TypeVar
|
|
12
|
+
from typing import Any, Callable, Literal, Sequence, TypeVar
|
|
17
13
|
|
|
18
14
|
import numpy as np
|
|
19
|
-
from numpy.typing import ArrayLike
|
|
20
|
-
from numpy.typing import NDArray
|
|
15
|
+
from numpy.typing import ArrayLike, NDArray
|
|
21
16
|
|
|
22
17
|
# Type variable for generic function signatures
|
|
23
18
|
F = TypeVar("F", bound=Callable[..., Any])
|