nrl-tracker 1.6.0__tar.gz → 1.7.1__tar.gz

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 (226) hide show
  1. {nrl_tracker-1.6.0/nrl_tracker.egg-info → nrl_tracker-1.7.1}/PKG-INFO +14 -10
  2. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/README.md +13 -9
  3. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1/nrl_tracker.egg-info}/PKG-INFO +14 -10
  4. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/nrl_tracker.egg-info/SOURCES.txt +14 -0
  5. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pyproject.toml +1 -1
  6. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/__init__.py +2 -2
  7. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/assignment_algorithms/__init__.py +28 -0
  8. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/assignment_algorithms/gating.py +10 -10
  9. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/assignment_algorithms/jpda.py +40 -40
  10. nrl_tracker-1.7.1/pytcl/assignment_algorithms/nd_assignment.py +379 -0
  11. nrl_tracker-1.7.1/pytcl/assignment_algorithms/network_flow.py +371 -0
  12. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/assignment_algorithms/three_dimensional/assignment.py +3 -3
  13. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/astronomical/__init__.py +35 -0
  14. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/astronomical/ephemerides.py +14 -11
  15. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/astronomical/reference_frames.py +110 -4
  16. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/astronomical/relativity.py +6 -5
  17. nrl_tracker-1.7.1/pytcl/astronomical/special_orbits.py +532 -0
  18. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/atmosphere/__init__.py +11 -0
  19. nrl_tracker-1.7.1/pytcl/atmosphere/nrlmsise00.py +809 -0
  20. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/clustering/dbscan.py +2 -2
  21. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/clustering/gaussian_mixture.py +3 -3
  22. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/clustering/hierarchical.py +15 -15
  23. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/clustering/kmeans.py +4 -4
  24. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/containers/base.py +3 -3
  25. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/containers/cluster_set.py +12 -2
  26. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/containers/covertree.py +5 -3
  27. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/containers/rtree.py +1 -1
  28. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/containers/vptree.py +4 -2
  29. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/coordinate_systems/conversions/geodetic.py +272 -5
  30. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/coordinate_systems/jacobians/jacobians.py +2 -2
  31. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/coordinate_systems/projections/projections.py +2 -2
  32. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/coordinate_systems/rotations/rotations.py +10 -6
  33. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/core/validation.py +3 -3
  34. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/__init__.py +26 -0
  35. nrl_tracker-1.7.1/pytcl/dynamic_estimation/gaussian_sum_filter.py +434 -0
  36. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/imm.py +14 -14
  37. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/kalman/__init__.py +12 -0
  38. nrl_tracker-1.7.1/pytcl/dynamic_estimation/kalman/constrained.py +382 -0
  39. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/kalman/extended.py +8 -8
  40. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/kalman/h_infinity.py +2 -2
  41. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/kalman/square_root.py +8 -2
  42. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/kalman/sr_ukf.py +3 -3
  43. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/kalman/ud_filter.py +11 -5
  44. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/kalman/unscented.py +8 -6
  45. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/particle_filters/bootstrap.py +15 -15
  46. nrl_tracker-1.7.1/pytcl/dynamic_estimation/rbpf.py +589 -0
  47. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/gravity/spherical_harmonics.py +3 -3
  48. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/gravity/tides.py +6 -6
  49. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/logging_config.py +3 -3
  50. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/magnetism/emm.py +10 -3
  51. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/magnetism/wmm.py +4 -4
  52. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/combinatorics/combinatorics.py +5 -5
  53. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/geometry/geometry.py +5 -5
  54. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/numerical_integration/quadrature.py +6 -6
  55. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/signal_processing/detection.py +24 -24
  56. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/signal_processing/filters.py +14 -14
  57. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/signal_processing/matched_filter.py +12 -12
  58. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/special_functions/bessel.py +15 -3
  59. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/special_functions/debye.py +5 -1
  60. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/special_functions/error_functions.py +3 -1
  61. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/special_functions/gamma_functions.py +4 -4
  62. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/special_functions/hypergeometric.py +6 -4
  63. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/transforms/fourier.py +8 -8
  64. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/transforms/stft.py +12 -12
  65. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/transforms/wavelets.py +9 -9
  66. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/navigation/geodesy.py +3 -3
  67. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/navigation/great_circle.py +5 -5
  68. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/plotting/coordinates.py +7 -7
  69. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/plotting/tracks.py +2 -2
  70. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/static_estimation/maximum_likelihood.py +16 -14
  71. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/static_estimation/robust.py +5 -5
  72. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/terrain/loaders.py +5 -5
  73. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/trackers/hypothesis.py +1 -1
  74. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/trackers/mht.py +9 -9
  75. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/trackers/multi_target.py +1 -1
  76. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/conftest.py +1 -3
  77. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_astronomical.py +26 -3
  78. nrl_tracker-1.7.1/tests/test_constrained_ekf.py +744 -0
  79. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_coordinate_systems.py +117 -3
  80. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_coverage_boost.py +1 -3
  81. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_coverage_boost_2.py +3 -9
  82. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_egm.py +18 -54
  83. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_emm.py +14 -42
  84. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_ephemerides.py +2 -6
  85. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_gaussian_mixtures.py +1 -2
  86. nrl_tracker-1.7.1/tests/test_gaussian_sum_filter.py +502 -0
  87. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_great_circle.py +1 -3
  88. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_ins.py +1 -3
  89. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_ins_gnss.py +3 -9
  90. nrl_tracker-1.7.1/tests/test_nd_assignment.py +331 -0
  91. nrl_tracker-1.7.1/tests/test_network_flow.py +228 -0
  92. nrl_tracker-1.7.1/tests/test_nrlmsise00.py +637 -0
  93. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_projections.py +1 -3
  94. nrl_tracker-1.7.1/tests/test_rbpf.py +599 -0
  95. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_relativity.py +3 -9
  96. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_sgp4.py +3 -2
  97. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_smoothers.py +4 -12
  98. nrl_tracker-1.7.1/tests/test_special_orbits.py +357 -0
  99. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_static_estimation.py +3 -9
  100. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_tides.py +4 -12
  101. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_trackers.py +4 -12
  102. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_v030_comprehensive.py +3 -9
  103. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_v030_features.py +1 -3
  104. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/CONTRIBUTING.md +0 -0
  105. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/LICENSE +0 -0
  106. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/MANIFEST.in +0 -0
  107. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/nrl_tracker.egg-info/dependency_links.txt +0 -0
  108. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/nrl_tracker.egg-info/requires.txt +0 -0
  109. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/nrl_tracker.egg-info/top_level.txt +0 -0
  110. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/assignment_algorithms/data_association.py +0 -0
  111. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/assignment_algorithms/three_dimensional/__init__.py +0 -0
  112. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/assignment_algorithms/two_dimensional/__init__.py +0 -0
  113. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/assignment_algorithms/two_dimensional/assignment.py +0 -0
  114. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/assignment_algorithms/two_dimensional/kbest.py +0 -0
  115. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/astronomical/lambert.py +0 -0
  116. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/astronomical/orbital_mechanics.py +0 -0
  117. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/astronomical/sgp4.py +0 -0
  118. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/astronomical/time_systems.py +0 -0
  119. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/astronomical/tle.py +0 -0
  120. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/atmosphere/ionosphere.py +0 -0
  121. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/atmosphere/models.py +0 -0
  122. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/clustering/__init__.py +0 -0
  123. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/containers/__init__.py +0 -0
  124. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/containers/kd_tree.py +0 -0
  125. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/containers/measurement_set.py +0 -0
  126. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/containers/track_list.py +0 -0
  127. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/coordinate_systems/__init__.py +0 -0
  128. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/coordinate_systems/conversions/__init__.py +0 -0
  129. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/coordinate_systems/conversions/spherical.py +0 -0
  130. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/coordinate_systems/jacobians/__init__.py +0 -0
  131. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/coordinate_systems/projections/__init__.py +0 -0
  132. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/coordinate_systems/rotations/__init__.py +0 -0
  133. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/core/__init__.py +0 -0
  134. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/core/array_utils.py +0 -0
  135. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/core/constants.py +0 -0
  136. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/batch_estimation/__init__.py +0 -0
  137. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/information_filter.py +0 -0
  138. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/kalman/linear.py +0 -0
  139. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/measurement_update/__init__.py +0 -0
  140. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/particle_filters/__init__.py +0 -0
  141. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_estimation/smoothers.py +0 -0
  142. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_models/__init__.py +0 -0
  143. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_models/continuous_time/__init__.py +0 -0
  144. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_models/continuous_time/dynamics.py +0 -0
  145. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_models/discrete_time/__init__.py +0 -0
  146. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_models/discrete_time/coordinated_turn.py +0 -0
  147. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_models/discrete_time/polynomial.py +0 -0
  148. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_models/discrete_time/singer.py +0 -0
  149. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_models/process_noise/__init__.py +0 -0
  150. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_models/process_noise/coordinated_turn.py +0 -0
  151. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_models/process_noise/polynomial.py +0 -0
  152. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/dynamic_models/process_noise/singer.py +0 -0
  153. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/gravity/__init__.py +0 -0
  154. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/gravity/clenshaw.py +0 -0
  155. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/gravity/egm.py +0 -0
  156. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/gravity/models.py +0 -0
  157. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/magnetism/__init__.py +0 -0
  158. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/magnetism/igrf.py +0 -0
  159. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/__init__.py +0 -0
  160. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/basic_matrix/__init__.py +0 -0
  161. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/basic_matrix/decompositions.py +0 -0
  162. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/basic_matrix/special_matrices.py +0 -0
  163. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/combinatorics/__init__.py +0 -0
  164. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/continuous_optimization/__init__.py +0 -0
  165. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/geometry/__init__.py +0 -0
  166. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/interpolation/__init__.py +0 -0
  167. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/interpolation/interpolation.py +0 -0
  168. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/numerical_integration/__init__.py +0 -0
  169. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/polynomials/__init__.py +0 -0
  170. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/signal_processing/__init__.py +0 -0
  171. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/special_functions/__init__.py +0 -0
  172. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/special_functions/elliptic.py +0 -0
  173. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/special_functions/lambert_w.py +0 -0
  174. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/special_functions/marcum_q.py +0 -0
  175. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/statistics/__init__.py +0 -0
  176. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/statistics/distributions.py +0 -0
  177. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/statistics/estimators.py +0 -0
  178. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/mathematical_functions/transforms/__init__.py +0 -0
  179. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/misc/__init__.py +0 -0
  180. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/navigation/__init__.py +0 -0
  181. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/navigation/ins.py +0 -0
  182. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/navigation/ins_gnss.py +0 -0
  183. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/navigation/rhumb.py +0 -0
  184. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/performance_evaluation/__init__.py +0 -0
  185. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/performance_evaluation/estimation_metrics.py +0 -0
  186. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/performance_evaluation/track_metrics.py +0 -0
  187. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/physical_values/__init__.py +0 -0
  188. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/plotting/__init__.py +0 -0
  189. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/plotting/ellipses.py +0 -0
  190. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/plotting/metrics.py +0 -0
  191. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/scheduling/__init__.py +0 -0
  192. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/static_estimation/__init__.py +0 -0
  193. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/static_estimation/least_squares.py +0 -0
  194. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/terrain/__init__.py +0 -0
  195. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/terrain/dem.py +0 -0
  196. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/terrain/visibility.py +0 -0
  197. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/trackers/__init__.py +0 -0
  198. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/trackers/single_target.py +0 -0
  199. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/pytcl/transponders/__init__.py +0 -0
  200. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/setup.cfg +0 -0
  201. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/__init__.py +0 -0
  202. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_additional_trees.py +0 -0
  203. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_assignment_algorithms.py +0 -0
  204. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_clustering.py +0 -0
  205. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_dynamic_models.py +0 -0
  206. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_geophysical.py +0 -0
  207. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_h_infinity.py +0 -0
  208. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_kalman_filters.py +0 -0
  209. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_mathematical_functions.py +0 -0
  210. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_maximum_likelihood.py +0 -0
  211. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_mht.py +0 -0
  212. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_performance_evaluation.py +0 -0
  213. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_phase6_specialized.py +0 -0
  214. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_plotting.py +0 -0
  215. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_rhumb.py +0 -0
  216. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_signal_processing.py +0 -0
  217. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_spatial_containers_parametrized.py +0 -0
  218. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_spatial_structures.py +0 -0
  219. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_special_functions_phase12.py +0 -0
  220. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_terrain.py +0 -0
  221. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_terrain_loaders.py +0 -0
  222. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_tod_mod.py +0 -0
  223. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_tracking_containers.py +0 -0
  224. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_transforms.py +0 -0
  225. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/test_validation.py +0 -0
  226. {nrl_tracker-1.6.0 → nrl_tracker-1.7.1}/tests/unit/test_core.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nrl-tracker
3
- Version: 1.6.0
3
+ Version: 1.7.1
4
4
  Summary: Python port of the U.S. Naval Research Laboratory's Tracker Component Library for target tracking algorithms
5
5
  Author: Original: David F. Crouse, Naval Research Laboratory
6
6
  Maintainer: Python Port Contributors
@@ -63,16 +63,17 @@ Requires-Dist: nrl-tracker[astronomy,dev,geodesy,optimization,signal,visualizati
63
63
 
64
64
  # Tracker Component Library (Python)
65
65
 
66
- [![PyPI version](https://img.shields.io/badge/pypi-v1.6.0-blue.svg)](https://pypi.org/project/nrl-tracker/)
66
+ [![PyPI version](https://img.shields.io/badge/pypi-v1.7.1-blue.svg)](https://pypi.org/project/nrl-tracker/)
67
67
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
68
68
  [![License: Public Domain](https://img.shields.io/badge/License-Public%20Domain-brightgreen.svg)](https://en.wikipedia.org/wiki/Public_domain)
69
69
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
70
- [![Tests](https://img.shields.io/badge/tests-1922%20passing-success.svg)](https://github.com/nedonatelli/TCL)
71
- [![MATLAB Parity](https://img.shields.io/badge/MATLAB%20Parity-99%25-brightgreen.svg)](docs/gap_analysis.rst)
70
+ [![Tests](https://img.shields.io/badge/tests-1988%20passing-success.svg)](https://github.com/nedonatelli/TCL)
71
+ [![MATLAB Parity](https://img.shields.io/badge/MATLAB%20Parity-100%25-brightgreen.svg)](docs/gap_analysis.rst)
72
+ [![Type Checking](https://img.shields.io/badge/mypy--strict-passing-brightgreen.svg)](mypy.ini)
72
73
 
73
74
  A Python port of the [U.S. Naval Research Laboratory's Tracker Component Library](https://github.com/USNavalResearchLaboratory/TrackerComponentLibrary), a comprehensive collection of algorithms for target tracking, estimation, coordinate systems, and related mathematical functions.
74
75
 
75
- **1,070+ functions** | **150+ modules** | **1,922 tests** | **99% MATLAB parity**
76
+ **1,070+ functions** | **153 modules** | **1,988 tests** | **100% MATLAB parity**
76
77
 
77
78
  ## Overview
78
79
 
@@ -80,12 +81,15 @@ The Tracker Component Library provides building blocks for developing target tra
80
81
 
81
82
  - **Coordinate Systems**: Conversions between Cartesian, spherical, geodetic, and other coordinate systems
82
83
  - **Dynamic Models**: State transition matrices for constant velocity, coordinated turn, and other motion models
83
- - **Estimation Algorithms**: Kalman filters (EKF, UKF, CKF, H-infinity), particle filters, and batch estimation
84
- - **Assignment Algorithms**: Hungarian algorithm, auction algorithms, and multi-dimensional assignment
84
+ - **Estimation Algorithms**: Kalman filters (EKF, UKF, CKF, H-infinity), particle filters, smoothers, and batch estimation
85
+ - **Assignment Algorithms**: Hungarian algorithm, auction algorithms, 3D/ND assignment, k-best assignments
86
+ - **Data Association**: Global Nearest Neighbor, JPDA, MHT for multi-target tracking
85
87
  - **Mathematical Functions**: Special functions, statistics, numerical integration, and more
86
- - **Astronomical Code**: SGP4/SDP4 propagation, TLE parsing, reference frames (GCRF, ITRF, TEME, TOD, MOD), ephemerides
87
- - **Navigation**: Geodetic calculations, INS algorithms, GNSS utilities
88
- - **Geophysical Models**: Gravity, magnetism, atmosphere, and terrain models
88
+ - **Astronomical Code**: SGP4/SDP4 propagation, TLE parsing, special orbits (parabolic/hyperbolic), ephemerides, relativistic corrections
89
+ - **Reference Frames**: GCRF, ITRF, TEME, TOD, MOD with full transformation chains
90
+ - **Navigation**: Geodetic calculations, INS mechanization, GNSS utilities, INS/GNSS integration
91
+ - **Geophysical Models**: Gravity (WGS84, EGM96/2008), magnetism (WMM, IGRF), atmosphere, tides, terrain
92
+ - **Signal Processing**: Digital filters, matched filtering, CFAR detection, transforms (FFT, STFT, wavelets)
89
93
 
90
94
  ## Installation
91
95
 
@@ -1,15 +1,16 @@
1
1
  # Tracker Component Library (Python)
2
2
 
3
- [![PyPI version](https://img.shields.io/badge/pypi-v1.6.0-blue.svg)](https://pypi.org/project/nrl-tracker/)
3
+ [![PyPI version](https://img.shields.io/badge/pypi-v1.7.1-blue.svg)](https://pypi.org/project/nrl-tracker/)
4
4
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
5
5
  [![License: Public Domain](https://img.shields.io/badge/License-Public%20Domain-brightgreen.svg)](https://en.wikipedia.org/wiki/Public_domain)
6
6
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
7
- [![Tests](https://img.shields.io/badge/tests-1922%20passing-success.svg)](https://github.com/nedonatelli/TCL)
8
- [![MATLAB Parity](https://img.shields.io/badge/MATLAB%20Parity-99%25-brightgreen.svg)](docs/gap_analysis.rst)
7
+ [![Tests](https://img.shields.io/badge/tests-1988%20passing-success.svg)](https://github.com/nedonatelli/TCL)
8
+ [![MATLAB Parity](https://img.shields.io/badge/MATLAB%20Parity-100%25-brightgreen.svg)](docs/gap_analysis.rst)
9
+ [![Type Checking](https://img.shields.io/badge/mypy--strict-passing-brightgreen.svg)](mypy.ini)
9
10
 
10
11
  A Python port of the [U.S. Naval Research Laboratory's Tracker Component Library](https://github.com/USNavalResearchLaboratory/TrackerComponentLibrary), a comprehensive collection of algorithms for target tracking, estimation, coordinate systems, and related mathematical functions.
11
12
 
12
- **1,070+ functions** | **150+ modules** | **1,922 tests** | **99% MATLAB parity**
13
+ **1,070+ functions** | **153 modules** | **1,988 tests** | **100% MATLAB parity**
13
14
 
14
15
  ## Overview
15
16
 
@@ -17,12 +18,15 @@ The Tracker Component Library provides building blocks for developing target tra
17
18
 
18
19
  - **Coordinate Systems**: Conversions between Cartesian, spherical, geodetic, and other coordinate systems
19
20
  - **Dynamic Models**: State transition matrices for constant velocity, coordinated turn, and other motion models
20
- - **Estimation Algorithms**: Kalman filters (EKF, UKF, CKF, H-infinity), particle filters, and batch estimation
21
- - **Assignment Algorithms**: Hungarian algorithm, auction algorithms, and multi-dimensional assignment
21
+ - **Estimation Algorithms**: Kalman filters (EKF, UKF, CKF, H-infinity), particle filters, smoothers, and batch estimation
22
+ - **Assignment Algorithms**: Hungarian algorithm, auction algorithms, 3D/ND assignment, k-best assignments
23
+ - **Data Association**: Global Nearest Neighbor, JPDA, MHT for multi-target tracking
22
24
  - **Mathematical Functions**: Special functions, statistics, numerical integration, and more
23
- - **Astronomical Code**: SGP4/SDP4 propagation, TLE parsing, reference frames (GCRF, ITRF, TEME, TOD, MOD), ephemerides
24
- - **Navigation**: Geodetic calculations, INS algorithms, GNSS utilities
25
- - **Geophysical Models**: Gravity, magnetism, atmosphere, and terrain models
25
+ - **Astronomical Code**: SGP4/SDP4 propagation, TLE parsing, special orbits (parabolic/hyperbolic), ephemerides, relativistic corrections
26
+ - **Reference Frames**: GCRF, ITRF, TEME, TOD, MOD with full transformation chains
27
+ - **Navigation**: Geodetic calculations, INS mechanization, GNSS utilities, INS/GNSS integration
28
+ - **Geophysical Models**: Gravity (WGS84, EGM96/2008), magnetism (WMM, IGRF), atmosphere, tides, terrain
29
+ - **Signal Processing**: Digital filters, matched filtering, CFAR detection, transforms (FFT, STFT, wavelets)
26
30
 
27
31
  ## Installation
28
32
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nrl-tracker
3
- Version: 1.6.0
3
+ Version: 1.7.1
4
4
  Summary: Python port of the U.S. Naval Research Laboratory's Tracker Component Library for target tracking algorithms
5
5
  Author: Original: David F. Crouse, Naval Research Laboratory
6
6
  Maintainer: Python Port Contributors
@@ -63,16 +63,17 @@ Requires-Dist: nrl-tracker[astronomy,dev,geodesy,optimization,signal,visualizati
63
63
 
64
64
  # Tracker Component Library (Python)
65
65
 
66
- [![PyPI version](https://img.shields.io/badge/pypi-v1.6.0-blue.svg)](https://pypi.org/project/nrl-tracker/)
66
+ [![PyPI version](https://img.shields.io/badge/pypi-v1.7.1-blue.svg)](https://pypi.org/project/nrl-tracker/)
67
67
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
68
68
  [![License: Public Domain](https://img.shields.io/badge/License-Public%20Domain-brightgreen.svg)](https://en.wikipedia.org/wiki/Public_domain)
69
69
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
70
- [![Tests](https://img.shields.io/badge/tests-1922%20passing-success.svg)](https://github.com/nedonatelli/TCL)
71
- [![MATLAB Parity](https://img.shields.io/badge/MATLAB%20Parity-99%25-brightgreen.svg)](docs/gap_analysis.rst)
70
+ [![Tests](https://img.shields.io/badge/tests-1988%20passing-success.svg)](https://github.com/nedonatelli/TCL)
71
+ [![MATLAB Parity](https://img.shields.io/badge/MATLAB%20Parity-100%25-brightgreen.svg)](docs/gap_analysis.rst)
72
+ [![Type Checking](https://img.shields.io/badge/mypy--strict-passing-brightgreen.svg)](mypy.ini)
72
73
 
73
74
  A Python port of the [U.S. Naval Research Laboratory's Tracker Component Library](https://github.com/USNavalResearchLaboratory/TrackerComponentLibrary), a comprehensive collection of algorithms for target tracking, estimation, coordinate systems, and related mathematical functions.
74
75
 
75
- **1,070+ functions** | **150+ modules** | **1,922 tests** | **99% MATLAB parity**
76
+ **1,070+ functions** | **153 modules** | **1,988 tests** | **100% MATLAB parity**
76
77
 
77
78
  ## Overview
78
79
 
@@ -80,12 +81,15 @@ The Tracker Component Library provides building blocks for developing target tra
80
81
 
81
82
  - **Coordinate Systems**: Conversions between Cartesian, spherical, geodetic, and other coordinate systems
82
83
  - **Dynamic Models**: State transition matrices for constant velocity, coordinated turn, and other motion models
83
- - **Estimation Algorithms**: Kalman filters (EKF, UKF, CKF, H-infinity), particle filters, and batch estimation
84
- - **Assignment Algorithms**: Hungarian algorithm, auction algorithms, and multi-dimensional assignment
84
+ - **Estimation Algorithms**: Kalman filters (EKF, UKF, CKF, H-infinity), particle filters, smoothers, and batch estimation
85
+ - **Assignment Algorithms**: Hungarian algorithm, auction algorithms, 3D/ND assignment, k-best assignments
86
+ - **Data Association**: Global Nearest Neighbor, JPDA, MHT for multi-target tracking
85
87
  - **Mathematical Functions**: Special functions, statistics, numerical integration, and more
86
- - **Astronomical Code**: SGP4/SDP4 propagation, TLE parsing, reference frames (GCRF, ITRF, TEME, TOD, MOD), ephemerides
87
- - **Navigation**: Geodetic calculations, INS algorithms, GNSS utilities
88
- - **Geophysical Models**: Gravity, magnetism, atmosphere, and terrain models
88
+ - **Astronomical Code**: SGP4/SDP4 propagation, TLE parsing, special orbits (parabolic/hyperbolic), ephemerides, relativistic corrections
89
+ - **Reference Frames**: GCRF, ITRF, TEME, TOD, MOD with full transformation chains
90
+ - **Navigation**: Geodetic calculations, INS mechanization, GNSS utilities, INS/GNSS integration
91
+ - **Geophysical Models**: Gravity (WGS84, EGM96/2008), magnetism (WMM, IGRF), atmosphere, tides, terrain
92
+ - **Signal Processing**: Digital filters, matched filtering, CFAR detection, transforms (FFT, STFT, wavelets)
89
93
 
90
94
  ## Installation
91
95
 
@@ -14,6 +14,8 @@ pytcl/assignment_algorithms/__init__.py
14
14
  pytcl/assignment_algorithms/data_association.py
15
15
  pytcl/assignment_algorithms/gating.py
16
16
  pytcl/assignment_algorithms/jpda.py
17
+ pytcl/assignment_algorithms/nd_assignment.py
18
+ pytcl/assignment_algorithms/network_flow.py
17
19
  pytcl/assignment_algorithms/three_dimensional/__init__.py
18
20
  pytcl/assignment_algorithms/three_dimensional/assignment.py
19
21
  pytcl/assignment_algorithms/two_dimensional/__init__.py
@@ -26,11 +28,13 @@ pytcl/astronomical/orbital_mechanics.py
26
28
  pytcl/astronomical/reference_frames.py
27
29
  pytcl/astronomical/relativity.py
28
30
  pytcl/astronomical/sgp4.py
31
+ pytcl/astronomical/special_orbits.py
29
32
  pytcl/astronomical/time_systems.py
30
33
  pytcl/astronomical/tle.py
31
34
  pytcl/atmosphere/__init__.py
32
35
  pytcl/atmosphere/ionosphere.py
33
36
  pytcl/atmosphere/models.py
37
+ pytcl/atmosphere/nrlmsise00.py
34
38
  pytcl/clustering/__init__.py
35
39
  pytcl/clustering/dbscan.py
36
40
  pytcl/clustering/gaussian_mixture.py
@@ -60,11 +64,14 @@ pytcl/core/array_utils.py
60
64
  pytcl/core/constants.py
61
65
  pytcl/core/validation.py
62
66
  pytcl/dynamic_estimation/__init__.py
67
+ pytcl/dynamic_estimation/gaussian_sum_filter.py
63
68
  pytcl/dynamic_estimation/imm.py
64
69
  pytcl/dynamic_estimation/information_filter.py
70
+ pytcl/dynamic_estimation/rbpf.py
65
71
  pytcl/dynamic_estimation/smoothers.py
66
72
  pytcl/dynamic_estimation/batch_estimation/__init__.py
67
73
  pytcl/dynamic_estimation/kalman/__init__.py
74
+ pytcl/dynamic_estimation/kalman/constrained.py
68
75
  pytcl/dynamic_estimation/kalman/extended.py
69
76
  pytcl/dynamic_estimation/kalman/h_infinity.py
70
77
  pytcl/dynamic_estimation/kalman/linear.py
@@ -167,6 +174,7 @@ tests/test_additional_trees.py
167
174
  tests/test_assignment_algorithms.py
168
175
  tests/test_astronomical.py
169
176
  tests/test_clustering.py
177
+ tests/test_constrained_ekf.py
170
178
  tests/test_coordinate_systems.py
171
179
  tests/test_coverage_boost.py
172
180
  tests/test_coverage_boost_2.py
@@ -175,6 +183,7 @@ tests/test_egm.py
175
183
  tests/test_emm.py
176
184
  tests/test_ephemerides.py
177
185
  tests/test_gaussian_mixtures.py
186
+ tests/test_gaussian_sum_filter.py
178
187
  tests/test_geophysical.py
179
188
  tests/test_great_circle.py
180
189
  tests/test_h_infinity.py
@@ -184,10 +193,14 @@ tests/test_kalman_filters.py
184
193
  tests/test_mathematical_functions.py
185
194
  tests/test_maximum_likelihood.py
186
195
  tests/test_mht.py
196
+ tests/test_nd_assignment.py
197
+ tests/test_network_flow.py
198
+ tests/test_nrlmsise00.py
187
199
  tests/test_performance_evaluation.py
188
200
  tests/test_phase6_specialized.py
189
201
  tests/test_plotting.py
190
202
  tests/test_projections.py
203
+ tests/test_rbpf.py
191
204
  tests/test_relativity.py
192
205
  tests/test_rhumb.py
193
206
  tests/test_sgp4.py
@@ -196,6 +209,7 @@ tests/test_smoothers.py
196
209
  tests/test_spatial_containers_parametrized.py
197
210
  tests/test_spatial_structures.py
198
211
  tests/test_special_functions_phase12.py
212
+ tests/test_special_orbits.py
199
213
  tests/test_static_estimation.py
200
214
  tests/test_terrain.py
201
215
  tests/test_terrain_loaders.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "nrl-tracker"
7
- version = "1.6.0"
7
+ version = "1.7.1"
8
8
  description = "Python port of the U.S. Naval Research Laboratory's Tracker Component Library for target tracking algorithms"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -20,7 +20,7 @@ References
20
20
  no. 5, pp. 18-27, May 2017.
21
21
  """
22
22
 
23
- __version__ = "1.6.0"
23
+ __version__ = "1.7.1"
24
24
  __author__ = "Python Port Contributors"
25
25
  __original_author__ = "David F. Crouse, Naval Research Laboratory"
26
26
 
@@ -44,7 +44,7 @@ from pytcl import (
44
44
 
45
45
  # Version tuple for programmatic access
46
46
  # Handle dev/alpha/beta/rc suffixes by extracting only numeric parts
47
- def _parse_version(version_str):
47
+ def _parse_version(version_str: str) -> tuple[int, ...]:
48
48
  """Parse version string into tuple of integers."""
49
49
  import re
50
50
 
@@ -32,6 +32,21 @@ from pytcl.assignment_algorithms.jpda import (
32
32
  jpda_probabilities,
33
33
  jpda_update,
34
34
  )
35
+ from pytcl.assignment_algorithms.nd_assignment import (
36
+ AssignmentNDResult,
37
+ auction_assignment_nd,
38
+ detect_dimension_conflicts,
39
+ greedy_assignment_nd,
40
+ relaxation_assignment_nd,
41
+ validate_cost_tensor,
42
+ )
43
+ from pytcl.assignment_algorithms.network_flow import (
44
+ FlowStatus,
45
+ MinCostFlowResult,
46
+ assignment_to_flow_network,
47
+ min_cost_assignment_via_flow,
48
+ min_cost_flow_successive_shortest_paths,
49
+ )
35
50
  from pytcl.assignment_algorithms.three_dimensional import (
36
51
  Assignment3DResult,
37
52
  assign3d,
@@ -91,4 +106,17 @@ __all__ = [
91
106
  "jpda_update",
92
107
  "jpda_probabilities",
93
108
  "compute_likelihood_matrix",
109
+ # N-Dimensional Assignment (4D+)
110
+ "AssignmentNDResult",
111
+ "validate_cost_tensor",
112
+ "greedy_assignment_nd",
113
+ "relaxation_assignment_nd",
114
+ "auction_assignment_nd",
115
+ "detect_dimension_conflicts",
116
+ # Network Flow-Based Assignment
117
+ "FlowStatus",
118
+ "MinCostFlowResult",
119
+ "assignment_to_flow_network",
120
+ "min_cost_flow_successive_shortest_paths",
121
+ "min_cost_assignment_via_flow",
94
122
  ]
@@ -5,7 +5,7 @@ This module provides gating methods to determine which measurements
5
5
  fall within a validation region around predicted track states.
6
6
  """
7
7
 
8
- from typing import List, Tuple
8
+ from typing import Any, List, Tuple
9
9
 
10
10
  import numpy as np
11
11
  from numba import njit
@@ -15,8 +15,8 @@ from scipy.stats import chi2
15
15
 
16
16
  @njit(cache=True, fastmath=True)
17
17
  def _mahalanobis_distance_2d(
18
- innovation: np.ndarray,
19
- S_inv: np.ndarray,
18
+ innovation: np.ndarray[Any, Any],
19
+ S_inv: np.ndarray[Any, Any],
20
20
  ) -> float:
21
21
  """JIT-compiled Mahalanobis distance for 2D innovations."""
22
22
  return innovation[0] * (
@@ -26,8 +26,8 @@ def _mahalanobis_distance_2d(
26
26
 
27
27
  @njit(cache=True, fastmath=True)
28
28
  def _mahalanobis_distance_3d(
29
- innovation: np.ndarray,
30
- S_inv: np.ndarray,
29
+ innovation: np.ndarray[Any, Any],
30
+ S_inv: np.ndarray[Any, Any],
31
31
  ) -> float:
32
32
  """JIT-compiled Mahalanobis distance for 3D innovations."""
33
33
  result = 0.0
@@ -39,8 +39,8 @@ def _mahalanobis_distance_3d(
39
39
 
40
40
  @njit(cache=True, fastmath=True)
41
41
  def _mahalanobis_distance_general(
42
- innovation: np.ndarray,
43
- S_inv: np.ndarray,
42
+ innovation: np.ndarray[Any, Any],
43
+ S_inv: np.ndarray[Any, Any],
44
44
  ) -> float:
45
45
  """JIT-compiled Mahalanobis distance for general dimension."""
46
46
  n = len(innovation)
@@ -341,9 +341,9 @@ def compute_gate_volume(
341
341
 
342
342
  @njit(cache=True, fastmath=True, parallel=False)
343
343
  def mahalanobis_batch(
344
- innovations: np.ndarray,
345
- S_inv: np.ndarray,
346
- output: np.ndarray,
344
+ innovations: np.ndarray[Any, Any],
345
+ S_inv: np.ndarray[Any, Any],
346
+ output: np.ndarray[Any, Any],
347
347
  ) -> None:
348
348
  """
349
349
  Compute Mahalanobis distances for a batch of innovations.
@@ -9,7 +9,7 @@ This is more sophisticated than GNN which makes hard assignment decisions,
9
9
  as JPDA can handle measurement origin uncertainty in cluttered environments.
10
10
  """
11
11
 
12
- from typing import List, NamedTuple, Optional, Tuple
12
+ from typing import Any, List, NamedTuple, Optional
13
13
 
14
14
  import numpy as np
15
15
  from numba import njit
@@ -24,7 +24,7 @@ class JPDAResult(NamedTuple):
24
24
 
25
25
  Attributes
26
26
  ----------
27
- association_probs : ndarray
27
+ association_probs : ndarray[Any]
28
28
  Association probability matrix of shape (n_tracks, n_measurements + 1).
29
29
  association_probs[i, j] is the probability that track i is associated
30
30
  with measurement j. The last column (j = n_measurements) represents
@@ -32,9 +32,9 @@ class JPDAResult(NamedTuple):
32
32
  marginal_probs : list of ndarray
33
33
  List of marginal association probabilities for each track.
34
34
  marginal_probs[i][j] = P(measurement j originated from track i).
35
- likelihood_matrix : ndarray
35
+ likelihood_matrix : ndarray[Any]
36
36
  Measurement likelihood matrix of shape (n_tracks, n_measurements).
37
- gated : ndarray
37
+ gated : ndarray[Any]
38
38
  Boolean matrix indicating which track-measurement pairs passed gating.
39
39
  """
40
40
 
@@ -53,7 +53,7 @@ class JPDAUpdate(NamedTuple):
53
53
  Updated state estimates for each track.
54
54
  covariances : list of ndarray
55
55
  Updated covariances for each track (includes spread of means).
56
- association_probs : ndarray
56
+ association_probs : ndarray[Any]
57
57
  Association probability matrix.
58
58
  innovations : list of ndarray
59
59
  Combined weighted innovations for each track.
@@ -66,8 +66,8 @@ class JPDAUpdate(NamedTuple):
66
66
 
67
67
 
68
68
  def compute_measurement_likelihood(
69
- innovation: NDArray,
70
- innovation_cov: NDArray,
69
+ innovation: NDArray[Any],
70
+ innovation_cov: NDArray[Any],
71
71
  detection_prob: float = 1.0,
72
72
  ) -> float:
73
73
  """
@@ -75,9 +75,9 @@ def compute_measurement_likelihood(
75
75
 
76
76
  Parameters
77
77
  ----------
78
- innovation : ndarray
78
+ innovation : ndarray[Any]
79
79
  Measurement innovation (residual), shape (m,).
80
- innovation_cov : ndarray
80
+ innovation_cov : ndarray[Any]
81
81
  Innovation covariance, shape (m, m).
82
82
  detection_prob : float
83
83
  Probability of detection (Pd).
@@ -102,14 +102,14 @@ def compute_measurement_likelihood(
102
102
 
103
103
 
104
104
  def compute_likelihood_matrix(
105
- track_states: List[NDArray],
106
- track_covariances: List[NDArray],
107
- measurements: NDArray,
108
- H: NDArray,
109
- R: NDArray,
105
+ track_states: list[NDArray[Any]],
106
+ track_covariances: list[NDArray[Any]],
107
+ measurements: NDArray[Any],
108
+ H: NDArray[Any],
109
+ R: NDArray[Any],
110
110
  detection_prob: float = 1.0,
111
111
  gate_threshold: Optional[float] = None,
112
- ) -> Tuple[NDArray, NDArray]:
112
+ ) -> tuple[NDArray[Any], NDArray[Any]]:
113
113
  """
114
114
  Compute likelihood matrix for all track-measurement pairs.
115
115
 
@@ -119,11 +119,11 @@ def compute_likelihood_matrix(
119
119
  State estimates for each track.
120
120
  track_covariances : list of ndarray
121
121
  Covariances for each track.
122
- measurements : ndarray
122
+ measurements : ndarray[Any]
123
123
  Measurements, shape (n_meas, m).
124
- H : ndarray
124
+ H : ndarray[Any]
125
125
  Measurement matrix, shape (m, n).
126
- R : ndarray
126
+ R : ndarray[Any]
127
127
  Measurement noise covariance, shape (m, m).
128
128
  detection_prob : float
129
129
  Probability of detection.
@@ -132,9 +132,9 @@ def compute_likelihood_matrix(
132
132
 
133
133
  Returns
134
134
  -------
135
- likelihood_matrix : ndarray
135
+ likelihood_matrix : ndarray[Any]
136
136
  Likelihood values, shape (n_tracks, n_meas).
137
- gated : ndarray
137
+ gated : ndarray[Any]
138
138
  Boolean gating matrix, shape (n_tracks, n_meas).
139
139
  """
140
140
  n_tracks = len(track_states)
@@ -163,11 +163,11 @@ def compute_likelihood_matrix(
163
163
 
164
164
 
165
165
  def jpda_probabilities(
166
- likelihood_matrix: NDArray,
167
- gated: NDArray,
166
+ likelihood_matrix: NDArray[Any],
167
+ gated: NDArray[Any],
168
168
  detection_prob: float = 1.0,
169
169
  clutter_density: float = 1e-6,
170
- ) -> NDArray:
170
+ ) -> NDArray[Any]:
171
171
  """
172
172
  Compute JPDA association probabilities.
173
173
 
@@ -176,9 +176,9 @@ def jpda_probabilities(
176
176
 
177
177
  Parameters
178
178
  ----------
179
- likelihood_matrix : ndarray
179
+ likelihood_matrix : ndarray[Any]
180
180
  Likelihood values, shape (n_tracks, n_meas).
181
- gated : ndarray
181
+ gated : ndarray[Any]
182
182
  Boolean gating matrix, shape (n_tracks, n_meas).
183
183
  detection_prob : float
184
184
  Probability of detection (Pd).
@@ -187,7 +187,7 @@ def jpda_probabilities(
187
187
 
188
188
  Returns
189
189
  -------
190
- beta : ndarray
190
+ beta : ndarray[Any]
191
191
  Association probability matrix, shape (n_tracks, n_meas + 1).
192
192
  beta[i, j] = P(measurement j is from track i) for j < n_meas.
193
193
  beta[i, n_meas] = P(track i has no measurement).
@@ -218,11 +218,11 @@ def jpda_probabilities(
218
218
 
219
219
 
220
220
  def _jpda_exact(
221
- likelihood_matrix: NDArray,
222
- gated: NDArray,
221
+ likelihood_matrix: NDArray[Any],
222
+ gated: NDArray[Any],
223
223
  detection_prob: float,
224
224
  clutter_density: float,
225
- ) -> NDArray:
225
+ ) -> NDArray[Any]:
226
226
  """
227
227
  Exact JPDA computation via hypothesis enumeration.
228
228
 
@@ -241,8 +241,8 @@ def _jpda_exact(
241
241
  def generate_hypotheses(
242
242
  meas_idx: int,
243
243
  current_assignment: List[int],
244
- used_tracks: set,
245
- ):
244
+ used_tracks: set[Any],
245
+ ) -> Any:
246
246
  """Recursively generate valid hypotheses."""
247
247
  if meas_idx == n_meas:
248
248
  yield current_assignment.copy()
@@ -268,11 +268,11 @@ def _jpda_exact(
268
268
  hypothesis_probs = []
269
269
  hypothesis_assignments = []
270
270
 
271
- for assignment in generate_hypotheses(0, [], set()):
271
+ for assignment in generate_hypotheses(0, [], set[Any]()):
272
272
  # Compute probability of this hypothesis
273
273
  prob = 1.0
274
274
 
275
- detected_tracks = set()
275
+ detected_tracks = set[Any]()
276
276
  for j, track_idx in enumerate(assignment):
277
277
  if track_idx == -1:
278
278
  # Measurement j is clutter
@@ -301,7 +301,7 @@ def _jpda_exact(
301
301
  for h_idx, (assignment, prob) in enumerate(
302
302
  zip(hypothesis_assignments, hypothesis_probs)
303
303
  ):
304
- detected_tracks = set()
304
+ detected_tracks = set[Any]()
305
305
  for j, track_idx in enumerate(assignment):
306
306
  if track_idx >= 0:
307
307
  beta[track_idx, j] += prob
@@ -317,11 +317,11 @@ def _jpda_exact(
317
317
 
318
318
  @njit(cache=True)
319
319
  def _jpda_approximate_core(
320
- likelihood_matrix: np.ndarray,
321
- gated: np.ndarray,
320
+ likelihood_matrix: np.ndarray[Any, Any],
321
+ gated: np.ndarray[Any, Any],
322
322
  detection_prob: float,
323
323
  clutter_density: float,
324
- ) -> np.ndarray:
324
+ ) -> np.ndarray[Any, Any]:
325
325
  """JIT-compiled core of approximate JPDA computation."""
326
326
  n_tracks = likelihood_matrix.shape[0]
327
327
  n_meas = likelihood_matrix.shape[1]
@@ -369,11 +369,11 @@ def _jpda_approximate_core(
369
369
 
370
370
 
371
371
  def _jpda_approximate(
372
- likelihood_matrix: NDArray,
373
- gated: NDArray,
372
+ likelihood_matrix: NDArray[Any],
373
+ gated: NDArray[Any],
374
374
  detection_prob: float,
375
375
  clutter_density: float,
376
- ) -> NDArray:
376
+ ) -> NDArray[Any]:
377
377
  """
378
378
  Approximate JPDA using parametric approach.
379
379