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.
Files changed (132) hide show
  1. {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.2.dist-info}/METADATA +1 -1
  2. nrl_tracker-0.22.2.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.2.dist-info}/LICENSE +0 -0
  131. {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.2.dist-info}/WHEEL +0 -0
  132. {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.2.dist-info}/top_level.txt +0 -0
@@ -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 cart2cyl
26
- from pytcl.coordinate_systems.conversions import cart2pol
27
- from pytcl.coordinate_systems.conversions import cart2ruv
28
- from pytcl.coordinate_systems.conversions import cart2sphere
29
- from pytcl.coordinate_systems.conversions import cyl2cart
30
- from pytcl.coordinate_systems.conversions import ecef2enu
31
- from pytcl.coordinate_systems.conversions import ecef2geodetic
32
- from pytcl.coordinate_systems.conversions import ecef2ned
33
- from pytcl.coordinate_systems.conversions import enu2ecef
34
- from pytcl.coordinate_systems.conversions import enu2ned
35
- from pytcl.coordinate_systems.conversions import geocentric_radius
36
- from pytcl.coordinate_systems.conversions import geodetic2ecef
37
- from pytcl.coordinate_systems.conversions import geodetic2enu
38
- from pytcl.coordinate_systems.conversions import meridional_radius
39
- from pytcl.coordinate_systems.conversions import ned2ecef
40
- from pytcl.coordinate_systems.conversions import ned2enu
41
- from pytcl.coordinate_systems.conversions import pol2cart
42
- from pytcl.coordinate_systems.conversions import prime_vertical_radius
43
- from pytcl.coordinate_systems.conversions import ruv2cart
44
- from pytcl.coordinate_systems.conversions import sphere2cart
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 cross_covariance_transform
48
- from pytcl.coordinate_systems.jacobians import enu_jacobian
49
- from pytcl.coordinate_systems.jacobians import geodetic_jacobian
50
- from pytcl.coordinate_systems.jacobians import ned_jacobian
51
- from pytcl.coordinate_systems.jacobians import numerical_jacobian
52
- from pytcl.coordinate_systems.jacobians import polar_jacobian
53
- from pytcl.coordinate_systems.jacobians import polar_jacobian_inv
54
- from pytcl.coordinate_systems.jacobians import ruv_jacobian
55
- from pytcl.coordinate_systems.jacobians import spherical_jacobian
56
- from pytcl.coordinate_systems.jacobians import spherical_jacobian_inv
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 azimuthal_equidistant
60
- from pytcl.coordinate_systems.projections import azimuthal_equidistant_inverse
61
- from pytcl.coordinate_systems.projections import geodetic2utm
62
- from pytcl.coordinate_systems.projections import lambert_conformal_conic
63
- from pytcl.coordinate_systems.projections import lambert_conformal_conic_inverse
64
- from pytcl.coordinate_systems.projections import mercator
65
- from pytcl.coordinate_systems.projections import mercator_inverse
66
- from pytcl.coordinate_systems.projections import polar_stereographic
67
- from pytcl.coordinate_systems.projections import stereographic
68
- from pytcl.coordinate_systems.projections import stereographic_inverse
69
- from pytcl.coordinate_systems.projections import transverse_mercator
70
- from pytcl.coordinate_systems.projections import transverse_mercator_inverse
71
- from pytcl.coordinate_systems.projections import utm2geodetic
72
- from pytcl.coordinate_systems.projections import utm_central_meridian
73
- from pytcl.coordinate_systems.projections import utm_zone
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 axisangle2rotmat
77
- from pytcl.coordinate_systems.rotations import dcm_rate
78
- from pytcl.coordinate_systems.rotations import euler2quat
79
- from pytcl.coordinate_systems.rotations import euler2rotmat
80
- from pytcl.coordinate_systems.rotations import is_rotation_matrix
81
- from pytcl.coordinate_systems.rotations import quat2euler
82
- from pytcl.coordinate_systems.rotations import quat2rotmat
83
- from pytcl.coordinate_systems.rotations import quat_conjugate
84
- from pytcl.coordinate_systems.rotations import quat_inverse
85
- from pytcl.coordinate_systems.rotations import quat_multiply
86
- from pytcl.coordinate_systems.rotations import quat_rotate
87
- from pytcl.coordinate_systems.rotations import rodrigues2rotmat
88
- from pytcl.coordinate_systems.rotations import rotmat2axisangle
89
- from pytcl.coordinate_systems.rotations import rotmat2euler
90
- from pytcl.coordinate_systems.rotations import rotmat2quat
91
- from pytcl.coordinate_systems.rotations import rotmat2rodrigues
92
- from pytcl.coordinate_systems.rotations import rotx
93
- from pytcl.coordinate_systems.rotations import roty
94
- from pytcl.coordinate_systems.rotations import rotz
95
- from pytcl.coordinate_systems.rotations import slerp
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 ecef2enu
12
- from pytcl.coordinate_systems.conversions.geodetic import ecef2geodetic
13
- from pytcl.coordinate_systems.conversions.geodetic import ecef2ned
14
- from pytcl.coordinate_systems.conversions.geodetic import enu2ecef
15
- from pytcl.coordinate_systems.conversions.geodetic import enu2ned
16
- from pytcl.coordinate_systems.conversions.geodetic import geocentric_radius
17
- from pytcl.coordinate_systems.conversions.geodetic import geodetic2ecef
18
- from pytcl.coordinate_systems.conversions.geodetic import geodetic2enu
19
- from pytcl.coordinate_systems.conversions.geodetic import meridional_radius
20
- from pytcl.coordinate_systems.conversions.geodetic import ned2ecef
21
- from pytcl.coordinate_systems.conversions.geodetic import ned2enu
22
- from pytcl.coordinate_systems.conversions.geodetic import prime_vertical_radius
23
- from pytcl.coordinate_systems.conversions.spherical import cart2cyl
24
- from pytcl.coordinate_systems.conversions.spherical import cart2pol
25
- from pytcl.coordinate_systems.conversions.spherical import cart2ruv
26
- from pytcl.coordinate_systems.conversions.spherical import cart2sphere
27
- from pytcl.coordinate_systems.conversions.spherical import cyl2cart
28
- from pytcl.coordinate_systems.conversions.spherical import pol2cart
29
- from pytcl.coordinate_systems.conversions.spherical import ruv2cart
30
- from pytcl.coordinate_systems.conversions.spherical import sphere2cart
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 cross_covariance_transform
14
- from pytcl.coordinate_systems.jacobians.jacobians import enu_jacobian
15
- from pytcl.coordinate_systems.jacobians.jacobians import geodetic_jacobian
16
- from pytcl.coordinate_systems.jacobians.jacobians import ned_jacobian
17
- from pytcl.coordinate_systems.jacobians.jacobians import numerical_jacobian
18
- from pytcl.coordinate_systems.jacobians.jacobians import polar_jacobian
19
- from pytcl.coordinate_systems.jacobians.jacobians import polar_jacobian_inv
20
- from pytcl.coordinate_systems.jacobians.jacobians import ruv_jacobian
21
- from pytcl.coordinate_systems.jacobians.jacobians import spherical_jacobian
22
- from pytcl.coordinate_systems.jacobians.jacobians import spherical_jacobian_inv
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
- from pytcl.coordinate_systems.projections.projections import geodetic2utm
44
- from pytcl.coordinate_systems.projections.projections import geodetic2utm_batch
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 axisangle2rotmat
13
- from pytcl.coordinate_systems.rotations.rotations import dcm_rate
14
- from pytcl.coordinate_systems.rotations.rotations import euler2quat
15
- from pytcl.coordinate_systems.rotations.rotations import euler2rotmat
16
- from pytcl.coordinate_systems.rotations.rotations import is_rotation_matrix
17
- from pytcl.coordinate_systems.rotations.rotations import quat2euler
18
- from pytcl.coordinate_systems.rotations.rotations import quat2rotmat
19
- from pytcl.coordinate_systems.rotations.rotations import quat_conjugate
20
- from pytcl.coordinate_systems.rotations.rotations import quat_inverse
21
- from pytcl.coordinate_systems.rotations.rotations import quat_multiply
22
- from pytcl.coordinate_systems.rotations.rotations import quat_rotate
23
- from pytcl.coordinate_systems.rotations.rotations import rodrigues2rotmat
24
- from pytcl.coordinate_systems.rotations.rotations import rotmat2axisangle
25
- from pytcl.coordinate_systems.rotations.rotations import rotmat2euler
26
- from pytcl.coordinate_systems.rotations.rotations import rotmat2quat
27
- from pytcl.coordinate_systems.rotations.rotations import rotmat2rodrigues
28
- from pytcl.coordinate_systems.rotations.rotations import rotx
29
- from pytcl.coordinate_systems.rotations.rotations import roty
30
- from pytcl.coordinate_systems.rotations.rotations import rotz
31
- from pytcl.coordinate_systems.rotations.rotations import slerp
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",
@@ -10,8 +10,7 @@ from typing import Tuple
10
10
 
11
11
  import numpy as np
12
12
  from numba import njit
13
- from numpy.typing import ArrayLike
14
- from numpy.typing import NDArray
13
+ from numpy.typing import ArrayLike, NDArray
15
14
 
16
15
 
17
16
  @njit(cache=True, fastmath=True)
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 column_vector
11
- from pytcl.core.array_utils import row_vector
12
- from pytcl.core.array_utils import wrap_to_2pi
13
- from pytcl.core.array_utils import wrap_to_pi
14
- from pytcl.core.array_utils import wrap_to_range
15
- from pytcl.core.constants import EARTH_FLATTENING
16
- from pytcl.core.constants import EARTH_ROTATION_RATE
17
- from pytcl.core.constants import EARTH_SEMI_MAJOR_AXIS
18
- from pytcl.core.constants import GRAVITATIONAL_CONSTANT
19
- from pytcl.core.constants import SPEED_OF_LIGHT
20
- from pytcl.core.constants import WGS84
21
- from pytcl.core.constants import PhysicalConstants
22
- from pytcl.core.validation import ensure_2d
23
- from pytcl.core.validation import ensure_column_vector
24
- from pytcl.core.validation import ensure_row_vector
25
- from pytcl.core.validation import validate_array
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])