nrl-tracker 0.22.0__py3-none-any.whl → 0.22.1__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.
Files changed (132) hide show
  1. {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.1.dist-info}/METADATA +1 -1
  2. nrl_tracker-0.22.1.dist-info/RECORD +150 -0
  3. pytcl/__init__.py +11 -9
  4. pytcl/assignment_algorithms/__init__.py +42 -32
  5. pytcl/assignment_algorithms/data_association.py +3 -7
  6. pytcl/assignment_algorithms/gating.py +2 -4
  7. pytcl/assignment_algorithms/jpda.py +2 -6
  8. pytcl/assignment_algorithms/three_dimensional/__init__.py +8 -6
  9. pytcl/assignment_algorithms/three_dimensional/assignment.py +2 -6
  10. pytcl/assignment_algorithms/two_dimensional/__init__.py +13 -9
  11. pytcl/assignment_algorithms/two_dimensional/assignment.py +2 -5
  12. pytcl/assignment_algorithms/two_dimensional/kbest.py +6 -8
  13. pytcl/astronomical/__init__.py +108 -96
  14. pytcl/astronomical/ephemerides.py +1 -3
  15. pytcl/astronomical/lambert.py +1 -2
  16. pytcl/astronomical/time_systems.py +1 -2
  17. pytcl/atmosphere/__init__.py +13 -11
  18. pytcl/atmosphere/models.py +2 -4
  19. pytcl/clustering/__init__.py +36 -28
  20. pytcl/clustering/dbscan.py +2 -5
  21. pytcl/clustering/gaussian_mixture.py +2 -6
  22. pytcl/clustering/hierarchical.py +2 -6
  23. pytcl/clustering/kmeans.py +2 -6
  24. pytcl/containers/__init__.py +26 -29
  25. pytcl/containers/cluster_set.py +2 -10
  26. pytcl/containers/covertree.py +2 -8
  27. pytcl/containers/kd_tree.py +2 -6
  28. pytcl/containers/measurement_set.py +2 -9
  29. pytcl/containers/rtree.py +2 -6
  30. pytcl/containers/track_list.py +13 -13
  31. pytcl/containers/vptree.py +2 -7
  32. pytcl/coordinate_systems/__init__.py +74 -69
  33. pytcl/coordinate_systems/conversions/__init__.py +24 -20
  34. pytcl/coordinate_systems/conversions/geodetic.py +2 -4
  35. pytcl/coordinate_systems/conversions/spherical.py +2 -4
  36. pytcl/coordinate_systems/jacobians/__init__.py +12 -10
  37. pytcl/coordinate_systems/jacobians/jacobians.py +1 -2
  38. pytcl/coordinate_systems/projections/__init__.py +21 -23
  39. pytcl/coordinate_systems/projections/projections.py +1 -3
  40. pytcl/coordinate_systems/rotations/__init__.py +22 -20
  41. pytcl/coordinate_systems/rotations/rotations.py +1 -2
  42. pytcl/core/__init__.py +22 -16
  43. pytcl/core/array_utils.py +3 -6
  44. pytcl/core/validation.py +2 -7
  45. pytcl/dynamic_estimation/__init__.py +86 -77
  46. pytcl/dynamic_estimation/imm.py +3 -7
  47. pytcl/dynamic_estimation/information_filter.py +6 -8
  48. pytcl/dynamic_estimation/kalman/__init__.py +48 -40
  49. pytcl/dynamic_estimation/kalman/extended.py +2 -4
  50. pytcl/dynamic_estimation/kalman/linear.py +3 -7
  51. pytcl/dynamic_estimation/kalman/square_root.py +2 -5
  52. pytcl/dynamic_estimation/kalman/unscented.py +3 -8
  53. pytcl/dynamic_estimation/particle_filters/__init__.py +14 -12
  54. pytcl/dynamic_estimation/particle_filters/bootstrap.py +2 -6
  55. pytcl/dynamic_estimation/smoothers.py +3 -8
  56. pytcl/dynamic_models/__init__.py +41 -37
  57. pytcl/dynamic_models/continuous_time/__init__.py +11 -11
  58. pytcl/dynamic_models/continuous_time/dynamics.py +2 -4
  59. pytcl/dynamic_models/discrete_time/__init__.py +13 -11
  60. pytcl/dynamic_models/process_noise/__init__.py +13 -11
  61. pytcl/gravity/__init__.py +65 -55
  62. pytcl/gravity/clenshaw.py +1 -2
  63. pytcl/gravity/egm.py +3 -8
  64. pytcl/gravity/spherical_harmonics.py +1 -2
  65. pytcl/gravity/tides.py +1 -2
  66. pytcl/magnetism/__init__.py +25 -26
  67. pytcl/magnetism/emm.py +1 -4
  68. pytcl/magnetism/igrf.py +6 -5
  69. pytcl/magnetism/wmm.py +1 -2
  70. pytcl/mathematical_functions/__init__.py +87 -69
  71. pytcl/mathematical_functions/basic_matrix/__init__.py +19 -25
  72. pytcl/mathematical_functions/basic_matrix/decompositions.py +2 -5
  73. pytcl/mathematical_functions/basic_matrix/special_matrices.py +1 -2
  74. pytcl/mathematical_functions/combinatorics/__init__.py +14 -18
  75. pytcl/mathematical_functions/combinatorics/combinatorics.py +1 -4
  76. pytcl/mathematical_functions/geometry/__init__.py +15 -15
  77. pytcl/mathematical_functions/geometry/geometry.py +3 -6
  78. pytcl/mathematical_functions/interpolation/__init__.py +12 -10
  79. pytcl/mathematical_functions/interpolation/interpolation.py +2 -7
  80. pytcl/mathematical_functions/numerical_integration/__init__.py +10 -16
  81. pytcl/mathematical_functions/numerical_integration/quadrature.py +2 -6
  82. pytcl/mathematical_functions/signal_processing/__init__.py +30 -42
  83. pytcl/mathematical_functions/signal_processing/detection.py +3 -6
  84. pytcl/mathematical_functions/signal_processing/filters.py +2 -5
  85. pytcl/mathematical_functions/signal_processing/matched_filter.py +3 -6
  86. pytcl/mathematical_functions/special_functions/__init__.py +76 -74
  87. pytcl/mathematical_functions/special_functions/bessel.py +1 -2
  88. pytcl/mathematical_functions/special_functions/debye.py +2 -4
  89. pytcl/mathematical_functions/special_functions/elliptic.py +1 -2
  90. pytcl/mathematical_functions/special_functions/error_functions.py +1 -2
  91. pytcl/mathematical_functions/special_functions/gamma_functions.py +1 -2
  92. pytcl/mathematical_functions/special_functions/hypergeometric.py +1 -2
  93. pytcl/mathematical_functions/special_functions/lambert_w.py +1 -2
  94. pytcl/mathematical_functions/special_functions/marcum_q.py +1 -2
  95. pytcl/mathematical_functions/statistics/__init__.py +31 -27
  96. pytcl/mathematical_functions/statistics/distributions.py +4 -9
  97. pytcl/mathematical_functions/statistics/estimators.py +1 -2
  98. pytcl/mathematical_functions/transforms/__init__.py +51 -45
  99. pytcl/mathematical_functions/transforms/fourier.py +2 -5
  100. pytcl/mathematical_functions/transforms/stft.py +2 -5
  101. pytcl/mathematical_functions/transforms/wavelets.py +2 -7
  102. pytcl/navigation/__init__.py +99 -89
  103. pytcl/navigation/geodesy.py +2 -4
  104. pytcl/navigation/great_circle.py +1 -3
  105. pytcl/navigation/ins.py +5 -11
  106. pytcl/navigation/ins_gnss.py +12 -17
  107. pytcl/navigation/rhumb.py +2 -4
  108. pytcl/performance_evaluation/__init__.py +25 -21
  109. pytcl/performance_evaluation/estimation_metrics.py +1 -3
  110. pytcl/performance_evaluation/track_metrics.py +1 -3
  111. pytcl/plotting/__init__.py +38 -30
  112. pytcl/plotting/coordinates.py +1 -3
  113. pytcl/plotting/ellipses.py +2 -5
  114. pytcl/plotting/metrics.py +1 -2
  115. pytcl/plotting/tracks.py +1 -4
  116. pytcl/static_estimation/__init__.py +41 -37
  117. pytcl/static_estimation/least_squares.py +2 -4
  118. pytcl/static_estimation/maximum_likelihood.py +2 -5
  119. pytcl/static_estimation/robust.py +2 -5
  120. pytcl/terrain/__init__.py +34 -28
  121. pytcl/terrain/dem.py +1 -4
  122. pytcl/terrain/loaders.py +1 -4
  123. pytcl/terrain/visibility.py +1 -2
  124. pytcl/trackers/__init__.py +14 -17
  125. pytcl/trackers/hypothesis.py +1 -6
  126. pytcl/trackers/mht.py +9 -13
  127. pytcl/trackers/multi_target.py +3 -8
  128. pytcl/trackers/single_target.py +2 -5
  129. nrl_tracker-0.22.0.dist-info/RECORD +0 -150
  130. {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.1.dist-info}/LICENSE +0 -0
  131. {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.1.dist-info}/WHEEL +0 -0
  132. {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.1.dist-info}/top_level.txt +0 -0
@@ -6,16 +6,12 @@ for PDF, CDF, sampling, and moment calculations. These wrap scipy.stats
6
6
  distributions with additional functionality useful for tracking applications.
7
7
  """
8
8
 
9
- from abc import ABC
10
- from abc import abstractmethod
11
- from typing import Optional
12
- from typing import Tuple
13
- from typing import Union
9
+ from abc import ABC, abstractmethod
10
+ from typing import Optional, Tuple, Union
14
11
 
15
12
  import numpy as np
16
13
  import scipy.stats as stats
17
- from numpy.typing import ArrayLike
18
- from numpy.typing import NDArray
14
+ from numpy.typing import ArrayLike, NDArray
19
15
 
20
16
 
21
17
  class Distribution(ABC):
@@ -565,8 +561,7 @@ class VonMises(Distribution):
565
561
 
566
562
  def var(self) -> float:
567
563
  # Circular variance: 1 - I_1(kappa)/I_0(kappa)
568
- from scipy.special import i0
569
- from scipy.special import i1
564
+ from scipy.special import i0, i1
570
565
 
571
566
  return 1 - i1(self._kappa) / i0(self._kappa)
572
567
 
@@ -8,8 +8,7 @@ robust estimators, and related quantities used in tracking applications.
8
8
  from typing import Optional
9
9
 
10
10
  import numpy as np
11
- from numpy.typing import ArrayLike
12
- from numpy.typing import NDArray
11
+ from numpy.typing import ArrayLike, NDArray
13
12
 
14
13
 
15
14
  def weighted_mean(
@@ -7,51 +7,57 @@ This module provides signal transforms for time-frequency analysis:
7
7
  - Wavelet transforms (CWT and DWT)
8
8
  """
9
9
 
10
- from pytcl.mathematical_functions.transforms.fourier import CoherenceResult
11
- from pytcl.mathematical_functions.transforms.fourier import CrossSpectrum
12
- from pytcl.mathematical_functions.transforms.fourier import PowerSpectrum
13
- from pytcl.mathematical_functions.transforms.fourier import coherence
14
- from pytcl.mathematical_functions.transforms.fourier import cross_spectrum
15
- from pytcl.mathematical_functions.transforms.fourier import fft
16
- from pytcl.mathematical_functions.transforms.fourier import fft2
17
- from pytcl.mathematical_functions.transforms.fourier import fftshift
18
- from pytcl.mathematical_functions.transforms.fourier import frequency_axis
19
- from pytcl.mathematical_functions.transforms.fourier import ifft
20
- from pytcl.mathematical_functions.transforms.fourier import ifft2
21
- from pytcl.mathematical_functions.transforms.fourier import ifftshift
22
- from pytcl.mathematical_functions.transforms.fourier import irfft
23
- from pytcl.mathematical_functions.transforms.fourier import magnitude_spectrum
24
- from pytcl.mathematical_functions.transforms.fourier import periodogram
25
- from pytcl.mathematical_functions.transforms.fourier import phase_spectrum
26
- from pytcl.mathematical_functions.transforms.fourier import power_spectrum
27
- from pytcl.mathematical_functions.transforms.fourier import rfft
28
- from pytcl.mathematical_functions.transforms.fourier import rfft_frequency_axis
29
- from pytcl.mathematical_functions.transforms.stft import Spectrogram
30
- from pytcl.mathematical_functions.transforms.stft import STFTResult
31
- from pytcl.mathematical_functions.transforms.stft import get_window
32
- from pytcl.mathematical_functions.transforms.stft import istft
33
- from pytcl.mathematical_functions.transforms.stft import mel_spectrogram
34
- from pytcl.mathematical_functions.transforms.stft import reassigned_spectrogram
35
- from pytcl.mathematical_functions.transforms.stft import spectrogram
36
- from pytcl.mathematical_functions.transforms.stft import stft
37
- from pytcl.mathematical_functions.transforms.stft import window_bandwidth
38
- from pytcl.mathematical_functions.transforms.wavelets import PYWT_AVAILABLE
39
- from pytcl.mathematical_functions.transforms.wavelets import CWTResult
40
- from pytcl.mathematical_functions.transforms.wavelets import DWTResult
41
- from pytcl.mathematical_functions.transforms.wavelets import available_wavelets
42
- from pytcl.mathematical_functions.transforms.wavelets import cwt
43
- from pytcl.mathematical_functions.transforms.wavelets import dwt
44
- from pytcl.mathematical_functions.transforms.wavelets import dwt_single_level
45
- from pytcl.mathematical_functions.transforms.wavelets import frequencies_to_scales
46
- from pytcl.mathematical_functions.transforms.wavelets import gaussian_wavelet
47
- from pytcl.mathematical_functions.transforms.wavelets import idwt
48
- from pytcl.mathematical_functions.transforms.wavelets import idwt_single_level
49
- from pytcl.mathematical_functions.transforms.wavelets import morlet_wavelet
50
- from pytcl.mathematical_functions.transforms.wavelets import ricker_wavelet
51
- from pytcl.mathematical_functions.transforms.wavelets import scales_to_frequencies
52
- from pytcl.mathematical_functions.transforms.wavelets import threshold_coefficients
53
- from pytcl.mathematical_functions.transforms.wavelets import wavelet_info
54
- from pytcl.mathematical_functions.transforms.wavelets import wpt
10
+ from pytcl.mathematical_functions.transforms.fourier import (
11
+ CoherenceResult,
12
+ CrossSpectrum,
13
+ PowerSpectrum,
14
+ coherence,
15
+ cross_spectrum,
16
+ fft,
17
+ fft2,
18
+ fftshift,
19
+ frequency_axis,
20
+ ifft,
21
+ ifft2,
22
+ ifftshift,
23
+ irfft,
24
+ magnitude_spectrum,
25
+ periodogram,
26
+ phase_spectrum,
27
+ power_spectrum,
28
+ rfft,
29
+ rfft_frequency_axis,
30
+ )
31
+ from pytcl.mathematical_functions.transforms.stft import (
32
+ Spectrogram,
33
+ STFTResult,
34
+ get_window,
35
+ istft,
36
+ mel_spectrogram,
37
+ reassigned_spectrogram,
38
+ spectrogram,
39
+ stft,
40
+ window_bandwidth,
41
+ )
42
+ from pytcl.mathematical_functions.transforms.wavelets import (
43
+ PYWT_AVAILABLE,
44
+ CWTResult,
45
+ DWTResult,
46
+ available_wavelets,
47
+ cwt,
48
+ dwt,
49
+ dwt_single_level,
50
+ frequencies_to_scales,
51
+ gaussian_wavelet,
52
+ idwt,
53
+ idwt_single_level,
54
+ morlet_wavelet,
55
+ ricker_wavelet,
56
+ scales_to_frequencies,
57
+ threshold_coefficients,
58
+ wavelet_info,
59
+ wpt,
60
+ )
55
61
 
56
62
  __all__ = [
57
63
  # Fourier transform types
@@ -23,13 +23,10 @@ References
23
23
  Electroacoustics, 15(2), 70-73.
24
24
  """
25
25
 
26
- from typing import NamedTuple
27
- from typing import Optional
28
- from typing import Union
26
+ from typing import NamedTuple, Optional, Union
29
27
 
30
28
  import numpy as np
31
- from numpy.typing import ArrayLike
32
- from numpy.typing import NDArray
29
+ from numpy.typing import ArrayLike, NDArray
33
30
  from scipy import fft as scipy_fft
34
31
  from scipy import signal as scipy_signal
35
32
 
@@ -22,13 +22,10 @@ References
22
22
  Speech, and Signal Processing, 32(2), 236-243.
23
23
  """
24
24
 
25
- from typing import NamedTuple
26
- from typing import Optional
27
- from typing import Union
25
+ from typing import NamedTuple, Optional, Union
28
26
 
29
27
  import numpy as np
30
- from numpy.typing import ArrayLike
31
- from numpy.typing import NDArray
28
+ from numpy.typing import ArrayLike, NDArray
32
29
  from scipy import signal as scipy_signal
33
30
 
34
31
  # =============================================================================
@@ -20,15 +20,10 @@ References
20
20
  .. [2] Daubechies, I. (1992). Ten Lectures on Wavelets. SIAM.
21
21
  """
22
22
 
23
- from typing import Callable
24
- from typing import List
25
- from typing import NamedTuple
26
- from typing import Optional
27
- from typing import Union
23
+ from typing import Callable, List, NamedTuple, Optional, Union
28
24
 
29
25
  import numpy as np
30
- from numpy.typing import ArrayLike
31
- from numpy.typing import NDArray
26
+ from numpy.typing import ArrayLike, NDArray
32
27
 
33
28
  # Try to import pywavelets for DWT support
34
29
  try:
@@ -14,101 +14,111 @@ needed in tracking applications, including:
14
14
  from pytcl.navigation.geodesy import (
15
15
  GRS80, # Ellipsoids; Coordinate conversions; Geodetic problems
16
16
  )
17
- from pytcl.navigation.geodesy import SPHERE
18
- from pytcl.navigation.geodesy import WGS84
19
- from pytcl.navigation.geodesy import Ellipsoid
20
- from pytcl.navigation.geodesy import direct_geodetic
21
- from pytcl.navigation.geodesy import ecef_to_enu
22
- from pytcl.navigation.geodesy import ecef_to_geodetic
23
- from pytcl.navigation.geodesy import ecef_to_ned
24
- from pytcl.navigation.geodesy import enu_to_ecef
25
- from pytcl.navigation.geodesy import geodetic_to_ecef
26
- from pytcl.navigation.geodesy import haversine_distance
27
- from pytcl.navigation.geodesy import inverse_geodetic
28
- from pytcl.navigation.geodesy import ned_to_ecef
17
+ from pytcl.navigation.geodesy import (
18
+ SPHERE,
19
+ WGS84,
20
+ Ellipsoid,
21
+ direct_geodetic,
22
+ ecef_to_enu,
23
+ ecef_to_geodetic,
24
+ ecef_to_ned,
25
+ enu_to_ecef,
26
+ geodetic_to_ecef,
27
+ haversine_distance,
28
+ inverse_geodetic,
29
+ ned_to_ecef,
30
+ )
29
31
  from pytcl.navigation.great_circle import EARTH_RADIUS # Great circle navigation
30
- from pytcl.navigation.great_circle import CrossTrackResult
31
- from pytcl.navigation.great_circle import GreatCircleResult
32
- from pytcl.navigation.great_circle import IntersectionResult
33
- from pytcl.navigation.great_circle import WaypointResult
34
- from pytcl.navigation.great_circle import angular_distance
35
- from pytcl.navigation.great_circle import cross_track_distance
36
- from pytcl.navigation.great_circle import destination_point
37
- from pytcl.navigation.great_circle import great_circle_azimuth
38
- from pytcl.navigation.great_circle import great_circle_direct
39
- from pytcl.navigation.great_circle import great_circle_distance
40
- from pytcl.navigation.great_circle import great_circle_intersect
41
- from pytcl.navigation.great_circle import great_circle_inverse
42
- from pytcl.navigation.great_circle import great_circle_path_intersect
43
- from pytcl.navigation.great_circle import great_circle_tdoa_loc
44
- from pytcl.navigation.great_circle import great_circle_waypoint
45
- from pytcl.navigation.great_circle import great_circle_waypoints
32
+ from pytcl.navigation.great_circle import (
33
+ CrossTrackResult,
34
+ GreatCircleResult,
35
+ IntersectionResult,
36
+ WaypointResult,
37
+ angular_distance,
38
+ cross_track_distance,
39
+ destination_point,
40
+ great_circle_azimuth,
41
+ great_circle_direct,
42
+ great_circle_distance,
43
+ great_circle_intersect,
44
+ great_circle_inverse,
45
+ great_circle_path_intersect,
46
+ great_circle_tdoa_loc,
47
+ great_circle_waypoint,
48
+ great_circle_waypoints,
49
+ )
46
50
  from pytcl.navigation.ins import (
47
51
  A_EARTH, # Constants; State representation; Gravity and Earth rate
48
52
  )
49
- from pytcl.navigation.ins import B_EARTH
50
- from pytcl.navigation.ins import E2_EARTH
51
- from pytcl.navigation.ins import F_EARTH
52
- from pytcl.navigation.ins import GM_EARTH
53
- from pytcl.navigation.ins import OMEGA_EARTH
54
- from pytcl.navigation.ins import IMUData
55
- from pytcl.navigation.ins import INSErrorState
56
- from pytcl.navigation.ins import INSState
57
- from pytcl.navigation.ins import coarse_alignment
58
- from pytcl.navigation.ins import compensate_imu_data
59
- from pytcl.navigation.ins import coning_correction
60
- from pytcl.navigation.ins import earth_rate_ned
61
- from pytcl.navigation.ins import gravity_ned
62
- from pytcl.navigation.ins import gyrocompass_alignment
63
- from pytcl.navigation.ins import initialize_ins_state
64
- from pytcl.navigation.ins import ins_error_state_matrix
65
- from pytcl.navigation.ins import ins_process_noise_matrix
66
- from pytcl.navigation.ins import mechanize_ins_ned
67
- from pytcl.navigation.ins import normal_gravity
68
- from pytcl.navigation.ins import radii_of_curvature
69
- from pytcl.navigation.ins import sculling_correction
70
- from pytcl.navigation.ins import skew_symmetric
71
- from pytcl.navigation.ins import transport_rate_ned
72
- from pytcl.navigation.ins import update_attitude_ned
73
- from pytcl.navigation.ins import update_quaternion
53
+ from pytcl.navigation.ins import (
54
+ B_EARTH,
55
+ E2_EARTH,
56
+ F_EARTH,
57
+ GM_EARTH,
58
+ OMEGA_EARTH,
59
+ IMUData,
60
+ INSErrorState,
61
+ INSState,
62
+ coarse_alignment,
63
+ compensate_imu_data,
64
+ coning_correction,
65
+ earth_rate_ned,
66
+ gravity_ned,
67
+ gyrocompass_alignment,
68
+ initialize_ins_state,
69
+ ins_error_state_matrix,
70
+ ins_process_noise_matrix,
71
+ mechanize_ins_ned,
72
+ normal_gravity,
73
+ radii_of_curvature,
74
+ sculling_correction,
75
+ skew_symmetric,
76
+ transport_rate_ned,
77
+ update_attitude_ned,
78
+ update_quaternion,
79
+ )
74
80
  from pytcl.navigation.ins_gnss import GPS_L1_FREQ # INS/GNSS integration
75
- from pytcl.navigation.ins_gnss import GPS_L1_WAVELENGTH
76
- from pytcl.navigation.ins_gnss import SPEED_OF_LIGHT
77
- from pytcl.navigation.ins_gnss import GNSSMeasurement
78
- from pytcl.navigation.ins_gnss import INSGNSSState
79
- from pytcl.navigation.ins_gnss import LooseCoupledResult
80
- from pytcl.navigation.ins_gnss import SatelliteInfo
81
- from pytcl.navigation.ins_gnss import TightCoupledResult
82
- from pytcl.navigation.ins_gnss import compute_dop
83
- from pytcl.navigation.ins_gnss import compute_line_of_sight
84
- from pytcl.navigation.ins_gnss import gnss_outage_detection
85
- from pytcl.navigation.ins_gnss import initialize_ins_gnss
86
- from pytcl.navigation.ins_gnss import loose_coupled_predict
87
- from pytcl.navigation.ins_gnss import loose_coupled_update
88
- from pytcl.navigation.ins_gnss import loose_coupled_update_position
89
- from pytcl.navigation.ins_gnss import loose_coupled_update_velocity
90
- from pytcl.navigation.ins_gnss import position_measurement_matrix
91
- from pytcl.navigation.ins_gnss import position_velocity_measurement_matrix
92
- from pytcl.navigation.ins_gnss import pseudorange_measurement_matrix
93
- from pytcl.navigation.ins_gnss import satellite_elevation_azimuth
94
- from pytcl.navigation.ins_gnss import tight_coupled_measurement_matrix
95
- from pytcl.navigation.ins_gnss import tight_coupled_pseudorange_innovation
96
- from pytcl.navigation.ins_gnss import tight_coupled_update
97
- from pytcl.navigation.ins_gnss import velocity_measurement_matrix
81
+ from pytcl.navigation.ins_gnss import (
82
+ GPS_L1_WAVELENGTH,
83
+ SPEED_OF_LIGHT,
84
+ GNSSMeasurement,
85
+ INSGNSSState,
86
+ LooseCoupledResult,
87
+ SatelliteInfo,
88
+ TightCoupledResult,
89
+ compute_dop,
90
+ compute_line_of_sight,
91
+ gnss_outage_detection,
92
+ initialize_ins_gnss,
93
+ loose_coupled_predict,
94
+ loose_coupled_update,
95
+ loose_coupled_update_position,
96
+ loose_coupled_update_velocity,
97
+ position_measurement_matrix,
98
+ position_velocity_measurement_matrix,
99
+ pseudorange_measurement_matrix,
100
+ satellite_elevation_azimuth,
101
+ tight_coupled_measurement_matrix,
102
+ tight_coupled_pseudorange_innovation,
103
+ tight_coupled_update,
104
+ velocity_measurement_matrix,
105
+ )
98
106
  from pytcl.navigation.rhumb import RhumbDirectResult # Rhumb line navigation
99
- from pytcl.navigation.rhumb import RhumbIntersectionResult
100
- from pytcl.navigation.rhumb import RhumbResult
101
- from pytcl.navigation.rhumb import compare_great_circle_rhumb
102
- from pytcl.navigation.rhumb import direct_rhumb
103
- from pytcl.navigation.rhumb import direct_rhumb_spherical
104
- from pytcl.navigation.rhumb import indirect_rhumb
105
- from pytcl.navigation.rhumb import indirect_rhumb_spherical
106
- from pytcl.navigation.rhumb import rhumb_bearing
107
- from pytcl.navigation.rhumb import rhumb_distance_ellipsoidal
108
- from pytcl.navigation.rhumb import rhumb_distance_spherical
109
- from pytcl.navigation.rhumb import rhumb_intersect
110
- from pytcl.navigation.rhumb import rhumb_midpoint
111
- from pytcl.navigation.rhumb import rhumb_waypoints
107
+ from pytcl.navigation.rhumb import (
108
+ RhumbIntersectionResult,
109
+ RhumbResult,
110
+ compare_great_circle_rhumb,
111
+ direct_rhumb,
112
+ direct_rhumb_spherical,
113
+ indirect_rhumb,
114
+ indirect_rhumb_spherical,
115
+ rhumb_bearing,
116
+ rhumb_distance_ellipsoidal,
117
+ rhumb_distance_spherical,
118
+ rhumb_intersect,
119
+ rhumb_midpoint,
120
+ rhumb_waypoints,
121
+ )
112
122
 
113
123
  __all__ = [
114
124
  # Ellipsoids
@@ -8,12 +8,10 @@ This module provides geodetic utilities including:
8
8
  - Earth ellipsoid parameters
9
9
  """
10
10
 
11
- from typing import NamedTuple
12
- from typing import Tuple
11
+ from typing import NamedTuple, Tuple
13
12
 
14
13
  import numpy as np
15
- from numpy.typing import ArrayLike
16
- from numpy.typing import NDArray
14
+ from numpy.typing import ArrayLike, NDArray
17
15
 
18
16
 
19
17
  class Ellipsoid(NamedTuple):
@@ -10,9 +10,7 @@ computing the shortest path on a sphere, including:
10
10
  - TDOA localization on a sphere
11
11
  """
12
12
 
13
- from typing import NamedTuple
14
- from typing import Optional
15
- from typing import Tuple
13
+ from typing import NamedTuple, Optional, Tuple
16
14
 
17
15
  import numpy as np
18
16
  from numpy.typing import NDArray
pytcl/navigation/ins.py CHANGED
@@ -18,19 +18,13 @@ References
18
18
  .. [3] J. Farrell, "Aided Navigation: GPS with High Rate Sensors", McGraw-Hill, 2008.
19
19
  """
20
20
 
21
- from typing import NamedTuple
22
- from typing import Optional
23
- from typing import Tuple
21
+ from typing import NamedTuple, Optional, Tuple
24
22
 
25
23
  import numpy as np
26
- from numpy.typing import ArrayLike
27
- from numpy.typing import NDArray
28
-
29
- from pytcl.coordinate_systems.rotations import quat2rotmat
30
- from pytcl.coordinate_systems.rotations import quat_multiply
31
- from pytcl.coordinate_systems.rotations import rotmat2quat
32
- from pytcl.navigation.geodesy import WGS84
33
- from pytcl.navigation.geodesy import Ellipsoid
24
+ from numpy.typing import ArrayLike, NDArray
25
+
26
+ from pytcl.coordinate_systems.rotations import quat2rotmat, quat_multiply, rotmat2quat
27
+ from pytcl.navigation.geodesy import WGS84, Ellipsoid
34
28
 
35
29
  # =============================================================================
36
30
  # Physical Constants
@@ -17,25 +17,20 @@ References
17
17
  Kalman Filtering", 4th ed., Wiley, 2012.
18
18
  """
19
19
 
20
- from typing import List
21
- from typing import NamedTuple
22
- from typing import Optional
23
- from typing import Tuple
20
+ from typing import List, NamedTuple, Optional, Tuple
24
21
 
25
22
  import numpy as np
26
- from numpy.typing import ArrayLike
27
- from numpy.typing import NDArray
28
-
29
- from pytcl.dynamic_estimation.kalman import kf_predict
30
- from pytcl.dynamic_estimation.kalman import kf_update
31
- from pytcl.navigation.geodesy import WGS84
32
- from pytcl.navigation.geodesy import Ellipsoid
33
- from pytcl.navigation.geodesy import geodetic_to_ecef
34
- from pytcl.navigation.ins import IMUData
35
- from pytcl.navigation.ins import INSState
36
- from pytcl.navigation.ins import ins_error_state_matrix
37
- from pytcl.navigation.ins import ins_process_noise_matrix
38
- from pytcl.navigation.ins import mechanize_ins_ned
23
+ from numpy.typing import ArrayLike, NDArray
24
+
25
+ from pytcl.dynamic_estimation.kalman import kf_predict, kf_update
26
+ from pytcl.navigation.geodesy import WGS84, Ellipsoid, geodetic_to_ecef
27
+ from pytcl.navigation.ins import (
28
+ IMUData,
29
+ INSState,
30
+ ins_error_state_matrix,
31
+ ins_process_noise_matrix,
32
+ mechanize_ins_ned,
33
+ )
39
34
 
40
35
  # =============================================================================
41
36
  # Constants
pytcl/navigation/rhumb.py CHANGED
@@ -9,14 +9,12 @@ constant-bearing paths on a sphere and ellipsoid, including:
9
9
  - Spherical and ellipsoidal formulations
10
10
  """
11
11
 
12
- from typing import NamedTuple
13
- from typing import Tuple
12
+ from typing import NamedTuple, Tuple
14
13
 
15
14
  import numpy as np
16
15
  from numpy.typing import NDArray
17
16
 
18
- from pytcl.navigation.geodesy import WGS84
19
- from pytcl.navigation.geodesy import Ellipsoid
17
+ from pytcl.navigation.geodesy import WGS84, Ellipsoid
20
18
 
21
19
 
22
20
  class RhumbResult(NamedTuple):
@@ -27,29 +27,33 @@ RMSE: 0.100
27
27
  """
28
28
 
29
29
  # Estimation metrics
30
- from pytcl.performance_evaluation.estimation_metrics import ConsistencyResult
31
- from pytcl.performance_evaluation.estimation_metrics import average_nees
32
- from pytcl.performance_evaluation.estimation_metrics import consistency_test
33
- from pytcl.performance_evaluation.estimation_metrics import credibility_interval
34
- from pytcl.performance_evaluation.estimation_metrics import estimation_error_bounds
35
- from pytcl.performance_evaluation.estimation_metrics import monte_carlo_rmse
36
- from pytcl.performance_evaluation.estimation_metrics import nees
37
- from pytcl.performance_evaluation.estimation_metrics import nees_sequence
38
- from pytcl.performance_evaluation.estimation_metrics import nis
39
- from pytcl.performance_evaluation.estimation_metrics import nis_sequence
40
- from pytcl.performance_evaluation.estimation_metrics import position_rmse
41
- from pytcl.performance_evaluation.estimation_metrics import rmse
42
- from pytcl.performance_evaluation.estimation_metrics import velocity_rmse
30
+ from pytcl.performance_evaluation.estimation_metrics import (
31
+ ConsistencyResult,
32
+ average_nees,
33
+ consistency_test,
34
+ credibility_interval,
35
+ estimation_error_bounds,
36
+ monte_carlo_rmse,
37
+ nees,
38
+ nees_sequence,
39
+ nis,
40
+ nis_sequence,
41
+ position_rmse,
42
+ rmse,
43
+ velocity_rmse,
44
+ )
43
45
 
44
46
  # Track metrics
45
- from pytcl.performance_evaluation.track_metrics import MOTMetrics
46
- from pytcl.performance_evaluation.track_metrics import OSPAResult
47
- from pytcl.performance_evaluation.track_metrics import identity_switches
48
- from pytcl.performance_evaluation.track_metrics import mot_metrics
49
- from pytcl.performance_evaluation.track_metrics import ospa
50
- from pytcl.performance_evaluation.track_metrics import ospa_over_time
51
- from pytcl.performance_evaluation.track_metrics import track_fragmentation
52
- from pytcl.performance_evaluation.track_metrics import track_purity
47
+ from pytcl.performance_evaluation.track_metrics import (
48
+ MOTMetrics,
49
+ OSPAResult,
50
+ identity_switches,
51
+ mot_metrics,
52
+ ospa,
53
+ ospa_over_time,
54
+ track_fragmentation,
55
+ track_purity,
56
+ )
53
57
 
54
58
  __all__ = [
55
59
  # Track metrics
@@ -10,9 +10,7 @@ References
10
10
  Applications to Tracking and Navigation," Wiley, 2001.
11
11
  """
12
12
 
13
- from typing import List
14
- from typing import NamedTuple
15
- from typing import Optional
13
+ from typing import List, NamedTuple, Optional
16
14
 
17
15
  import numpy as np
18
16
  from numpy.typing import NDArray
@@ -14,9 +14,7 @@ References
14
14
  2008.
15
15
  """
16
16
 
17
- from typing import List
18
- from typing import NamedTuple
19
- from typing import Optional
17
+ from typing import List, NamedTuple, Optional
20
18
 
21
19
  import numpy as np
22
20
  from numpy.typing import NDArray