nrl-tracker 1.9.2__tar.gz → 1.11.0__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 (258) hide show
  1. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/CONTRIBUTING.md +20 -23
  2. {nrl_tracker-1.9.2/nrl_tracker.egg-info → nrl_tracker-1.11.0}/PKG-INFO +49 -4
  3. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/README.md +40 -3
  4. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0/nrl_tracker.egg-info}/PKG-INFO +49 -4
  5. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/nrl_tracker.egg-info/SOURCES.txt +24 -0
  6. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/nrl_tracker.egg-info/requires.txt +10 -0
  7. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pyproject.toml +14 -1
  8. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/__init__.py +3 -3
  9. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/nd_assignment.py +359 -1
  10. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/coordinate_systems/jacobians/jacobians.py +63 -33
  11. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/core/optional_deps.py +20 -0
  12. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/kalman/matrix_utils.py +133 -35
  13. nrl_tracker-1.11.0/pytcl/gpu/__init__.py +153 -0
  14. nrl_tracker-1.11.0/pytcl/gpu/ekf.py +433 -0
  15. nrl_tracker-1.11.0/pytcl/gpu/kalman.py +543 -0
  16. nrl_tracker-1.11.0/pytcl/gpu/matrix_utils.py +491 -0
  17. nrl_tracker-1.11.0/pytcl/gpu/particle_filter.py +578 -0
  18. nrl_tracker-1.11.0/pytcl/gpu/ukf.py +476 -0
  19. nrl_tracker-1.11.0/pytcl/gpu/utils.py +582 -0
  20. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/gravity/clenshaw.py +8 -0
  21. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/gravity/spherical_harmonics.py +17 -10
  22. nrl_tracker-1.11.0/tests/test_cfar_detection.py +654 -0
  23. nrl_tracker-1.11.0/tests/test_combinatorics.py +488 -0
  24. nrl_tracker-1.11.0/tests/test_debye.py +344 -0
  25. nrl_tracker-1.11.0/tests/test_elliptic.py +323 -0
  26. nrl_tracker-1.11.0/tests/test_error_functions.py +419 -0
  27. nrl_tracker-1.11.0/tests/test_gamma_functions.py +391 -0
  28. nrl_tracker-1.11.0/tests/test_geometry.py +566 -0
  29. nrl_tracker-1.11.0/tests/test_gpu.py +427 -0
  30. nrl_tracker-1.11.0/tests/test_gpu_utils.py +173 -0
  31. nrl_tracker-1.11.0/tests/test_hypergeometric.py +398 -0
  32. nrl_tracker-1.11.0/tests/test_ionosphere.py +610 -0
  33. nrl_tracker-1.11.0/tests/test_marcum_q.py +340 -0
  34. nrl_tracker-1.11.0/tests/test_matched_filter.py +501 -0
  35. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_nd_assignment.py +227 -0
  36. nrl_tracker-1.11.0/tests/test_quadrature.py +462 -0
  37. nrl_tracker-1.11.0/tests/test_rotations.py +569 -0
  38. nrl_tracker-1.11.0/tests/test_square_root_filters.py +1162 -0
  39. nrl_tracker-1.11.0/tests/test_wavelets.py +705 -0
  40. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/LICENSE +0 -0
  41. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/MANIFEST.in +0 -0
  42. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/nrl_tracker.egg-info/dependency_links.txt +0 -0
  43. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/nrl_tracker.egg-info/top_level.txt +0 -0
  44. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/__init__.py +0 -0
  45. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/data_association.py +0 -0
  46. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/dijkstra_min_cost.py +0 -0
  47. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/gating.py +0 -0
  48. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/jpda.py +0 -0
  49. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/network_flow.py +0 -0
  50. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/network_simplex.py +0 -0
  51. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/three_dimensional/__init__.py +0 -0
  52. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/three_dimensional/assignment.py +0 -0
  53. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/two_dimensional/__init__.py +0 -0
  54. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/two_dimensional/assignment.py +0 -0
  55. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/assignment_algorithms/two_dimensional/kbest.py +0 -0
  56. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/astronomical/__init__.py +0 -0
  57. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/astronomical/ephemerides.py +0 -0
  58. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/astronomical/lambert.py +0 -0
  59. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/astronomical/orbital_mechanics.py +0 -0
  60. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/astronomical/reference_frames.py +0 -0
  61. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/astronomical/relativity.py +0 -0
  62. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/astronomical/sgp4.py +0 -0
  63. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/astronomical/special_orbits.py +0 -0
  64. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/astronomical/time_systems.py +0 -0
  65. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/astronomical/tle.py +0 -0
  66. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/atmosphere/__init__.py +0 -0
  67. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/atmosphere/ionosphere.py +0 -0
  68. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/atmosphere/models.py +0 -0
  69. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/atmosphere/nrlmsise00.py +0 -0
  70. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/clustering/__init__.py +0 -0
  71. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/clustering/dbscan.py +0 -0
  72. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/clustering/gaussian_mixture.py +0 -0
  73. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/clustering/hierarchical.py +0 -0
  74. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/clustering/kmeans.py +0 -0
  75. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/containers/__init__.py +0 -0
  76. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/containers/base.py +0 -0
  77. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/containers/cluster_set.py +0 -0
  78. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/containers/covertree.py +0 -0
  79. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/containers/kd_tree.py +0 -0
  80. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/containers/measurement_set.py +0 -0
  81. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/containers/rtree.py +0 -0
  82. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/containers/track_list.py +0 -0
  83. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/containers/vptree.py +0 -0
  84. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/coordinate_systems/__init__.py +0 -0
  85. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/coordinate_systems/conversions/__init__.py +0 -0
  86. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/coordinate_systems/conversions/geodetic.py +0 -0
  87. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/coordinate_systems/conversions/spherical.py +0 -0
  88. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/coordinate_systems/jacobians/__init__.py +0 -0
  89. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/coordinate_systems/projections/__init__.py +0 -0
  90. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/coordinate_systems/projections/projections.py +0 -0
  91. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/coordinate_systems/rotations/__init__.py +0 -0
  92. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/coordinate_systems/rotations/rotations.py +0 -0
  93. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/core/__init__.py +0 -0
  94. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/core/array_utils.py +0 -0
  95. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/core/constants.py +0 -0
  96. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/core/exceptions.py +0 -0
  97. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/core/maturity.py +0 -0
  98. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/core/validation.py +0 -0
  99. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/__init__.py +0 -0
  100. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/batch_estimation/__init__.py +0 -0
  101. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/gaussian_sum_filter.py +0 -0
  102. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/imm.py +0 -0
  103. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/information_filter.py +0 -0
  104. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/kalman/__init__.py +0 -0
  105. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/kalman/constrained.py +0 -0
  106. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/kalman/extended.py +0 -0
  107. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/kalman/h_infinity.py +0 -0
  108. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/kalman/linear.py +0 -0
  109. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/kalman/square_root.py +0 -0
  110. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/kalman/sr_ukf.py +0 -0
  111. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/kalman/types.py +0 -0
  112. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/kalman/ud_filter.py +0 -0
  113. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/kalman/unscented.py +0 -0
  114. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/measurement_update/__init__.py +0 -0
  115. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/particle_filters/__init__.py +0 -0
  116. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/particle_filters/bootstrap.py +0 -0
  117. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/rbpf.py +0 -0
  118. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_estimation/smoothers.py +0 -0
  119. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_models/__init__.py +0 -0
  120. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_models/continuous_time/__init__.py +0 -0
  121. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_models/continuous_time/dynamics.py +0 -0
  122. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_models/discrete_time/__init__.py +0 -0
  123. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_models/discrete_time/coordinated_turn.py +0 -0
  124. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_models/discrete_time/polynomial.py +0 -0
  125. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_models/discrete_time/singer.py +0 -0
  126. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_models/process_noise/__init__.py +0 -0
  127. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_models/process_noise/coordinated_turn.py +0 -0
  128. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_models/process_noise/polynomial.py +0 -0
  129. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/dynamic_models/process_noise/singer.py +0 -0
  130. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/gravity/__init__.py +0 -0
  131. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/gravity/egm.py +0 -0
  132. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/gravity/models.py +0 -0
  133. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/gravity/tides.py +0 -0
  134. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/logging_config.py +0 -0
  135. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/magnetism/__init__.py +0 -0
  136. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/magnetism/emm.py +0 -0
  137. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/magnetism/igrf.py +0 -0
  138. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/magnetism/wmm.py +0 -0
  139. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/__init__.py +0 -0
  140. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/basic_matrix/__init__.py +0 -0
  141. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/basic_matrix/decompositions.py +0 -0
  142. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/basic_matrix/special_matrices.py +0 -0
  143. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/combinatorics/__init__.py +0 -0
  144. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/combinatorics/combinatorics.py +0 -0
  145. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/continuous_optimization/__init__.py +0 -0
  146. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/geometry/__init__.py +0 -0
  147. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/geometry/geometry.py +0 -0
  148. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/interpolation/__init__.py +0 -0
  149. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/interpolation/interpolation.py +0 -0
  150. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/numerical_integration/__init__.py +0 -0
  151. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/numerical_integration/quadrature.py +0 -0
  152. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/polynomials/__init__.py +0 -0
  153. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/signal_processing/__init__.py +0 -0
  154. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/signal_processing/detection.py +0 -0
  155. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/signal_processing/filters.py +0 -0
  156. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/signal_processing/matched_filter.py +0 -0
  157. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/special_functions/__init__.py +0 -0
  158. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/special_functions/bessel.py +0 -0
  159. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/special_functions/debye.py +0 -0
  160. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/special_functions/elliptic.py +0 -0
  161. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/special_functions/error_functions.py +0 -0
  162. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/special_functions/gamma_functions.py +0 -0
  163. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/special_functions/hypergeometric.py +0 -0
  164. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/special_functions/lambert_w.py +0 -0
  165. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/special_functions/marcum_q.py +0 -0
  166. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/statistics/__init__.py +0 -0
  167. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/statistics/distributions.py +0 -0
  168. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/statistics/estimators.py +0 -0
  169. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/transforms/__init__.py +0 -0
  170. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/transforms/fourier.py +0 -0
  171. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/transforms/stft.py +0 -0
  172. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/mathematical_functions/transforms/wavelets.py +0 -0
  173. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/misc/__init__.py +0 -0
  174. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/navigation/__init__.py +0 -0
  175. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/navigation/geodesy.py +0 -0
  176. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/navigation/great_circle.py +0 -0
  177. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/navigation/ins.py +0 -0
  178. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/navigation/ins_gnss.py +0 -0
  179. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/navigation/rhumb.py +0 -0
  180. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/performance_evaluation/__init__.py +0 -0
  181. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/performance_evaluation/estimation_metrics.py +0 -0
  182. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/performance_evaluation/track_metrics.py +0 -0
  183. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/physical_values/__init__.py +0 -0
  184. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/plotting/__init__.py +0 -0
  185. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/plotting/coordinates.py +0 -0
  186. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/plotting/ellipses.py +0 -0
  187. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/plotting/metrics.py +0 -0
  188. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/plotting/tracks.py +0 -0
  189. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/scheduling/__init__.py +0 -0
  190. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/static_estimation/__init__.py +0 -0
  191. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/static_estimation/least_squares.py +0 -0
  192. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/static_estimation/maximum_likelihood.py +0 -0
  193. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/static_estimation/robust.py +0 -0
  194. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/terrain/__init__.py +0 -0
  195. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/terrain/dem.py +0 -0
  196. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/terrain/loaders.py +0 -0
  197. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/terrain/visibility.py +0 -0
  198. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/trackers/__init__.py +0 -0
  199. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/trackers/hypothesis.py +0 -0
  200. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/trackers/mht.py +0 -0
  201. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/trackers/multi_target.py +0 -0
  202. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/trackers/single_target.py +0 -0
  203. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/pytcl/transponders/__init__.py +0 -0
  204. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/setup.cfg +0 -0
  205. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/__init__.py +0 -0
  206. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/conftest.py +0 -0
  207. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_additional_trees.py +0 -0
  208. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_assignment_algorithms.py +0 -0
  209. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_astronomical.py +0 -0
  210. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_clustering.py +0 -0
  211. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_constrained_ekf.py +0 -0
  212. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_coordinate_systems.py +0 -0
  213. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_coverage_boost.py +0 -0
  214. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_coverage_boost_2.py +0 -0
  215. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_dynamic_models.py +0 -0
  216. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_egm.py +0 -0
  217. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_emm.py +0 -0
  218. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_ephemerides.py +0 -0
  219. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_exceptions.py +0 -0
  220. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_gaussian_mixtures.py +0 -0
  221. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_gaussian_sum_filter.py +0 -0
  222. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_geophysical.py +0 -0
  223. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_great_circle.py +0 -0
  224. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_h_infinity.py +0 -0
  225. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_ins.py +0 -0
  226. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_ins_gnss.py +0 -0
  227. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_jpda.py +0 -0
  228. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_kalman_filters.py +0 -0
  229. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_mathematical_functions.py +0 -0
  230. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_maximum_likelihood.py +0 -0
  231. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_mht.py +0 -0
  232. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_network_flow.py +0 -0
  233. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_nrlmsise00.py +0 -0
  234. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_optional_deps.py +0 -0
  235. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_performance_evaluation.py +0 -0
  236. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_phase6_specialized.py +0 -0
  237. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_plotting.py +0 -0
  238. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_projections.py +0 -0
  239. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_rbpf.py +0 -0
  240. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_relativity.py +0 -0
  241. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_rhumb.py +0 -0
  242. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_sgp4.py +0 -0
  243. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_signal_processing.py +0 -0
  244. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_smoothers.py +0 -0
  245. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_spatial_containers_parametrized.py +0 -0
  246. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_spatial_structures.py +0 -0
  247. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_special_functions.py +0 -0
  248. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_special_orbits.py +0 -0
  249. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_static_estimation.py +0 -0
  250. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_terrain.py +0 -0
  251. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_terrain_loaders.py +0 -0
  252. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_tides.py +0 -0
  253. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_tod_mod.py +0 -0
  254. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_trackers.py +0 -0
  255. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_tracking_containers.py +0 -0
  256. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_transforms.py +0 -0
  257. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/test_validation.py +0 -0
  258. {nrl_tracker-1.9.2 → nrl_tracker-1.11.0}/tests/unit/test_core.py +0 -0
@@ -222,34 +222,29 @@ When porting a function from the original MATLAB library:
222
222
 
223
223
  ## Current Development Status
224
224
 
225
- **Version:** v1.9.0
225
+ **Version:** v1.11.0
226
226
  **MATLAB Parity:** 100% ✅
227
- **Test Suite:** 2,133 tests passing
227
+ **Test Suite:** 2,894 tests passing
228
228
  **Code Coverage:** 76% (target 80%+ in v2.0.0)
229
229
  **Quality:** 100% compliance (black, isort, flake8, mypy --strict)
230
+ **GPU Acceleration:** CuPy (NVIDIA) + MLX (Apple Silicon)
231
+ **Performance Optimization:** Numba JIT, lru_cache, sparse matrix support
230
232
 
231
- ## v2.0.0 Roadmap - 8 Phases Over 18 Months
233
+ ## v2.0.0 Roadmap Progress
232
234
 
233
- ### Phase 1: Network Flow Performance (NEXT)
234
- **Focus:** Replace Bellman-Ford O(VE²) with network simplex O(VE log V)
235
- - **Impact:** 50-100x faster network flow computations
236
- - **Location:** `pytcl/assignment/network_flow.py`
237
- - **Tests:** Will re-enable 13 currently skipped tests
238
- - **Estimated:** 2-3 weeks
235
+ ### Completed Phases
236
+ - **Phase 1** ✅: Network flow performance (50-100x faster)
237
+ - **Phase 2** ✅: API standardization (exceptions, spatial indexes, optional deps)
238
+ - **Phase 5** ✅: GPU acceleration (CuPy + MLX, 5-15x speedup)
239
+ - **Phase 6** ✅: Test expansion (+761 tests, 2,894 total)
240
+ - **Phase 7** ✅: Performance optimization (Numba JIT, lru_cache, sparse matrices)
239
241
 
240
- ### Phases 2-5: Algorithm Optimization
241
- - Phase 2: Kalman filter performance
242
- - Phase 3: Tracking algorithm improvements
243
- - Phase 4: Signal processing optimization
244
- - Phase 5: Advanced estimation methods
242
+ ### In Progress
243
+ - **Phase 3**: Documentation expansion
244
+ - **Phase 4**: Jupyter notebooks
245
245
 
246
- ### Phase 6: Test Expansion
247
- - **Goal:** +50 new tests, target 80%+ coverage
248
- - **Focus:** Edge cases, numerical stability, batch operations
249
-
250
- ### Phases 7-8: Documentation & Final Polish
251
- - Phase 7: Documentation updates and examples
252
- - Phase 8: Performance tuning and optimization
246
+ ### Remaining
247
+ - **Phase 8**: Release preparation (alpha beta → RC → v2.0.0)
253
248
 
254
249
  ## Priority Areas for Contributors
255
250
 
@@ -301,12 +296,14 @@ pytest --collect-only -q | tail -1
301
296
  pytest --cov=pytcl --cov-report=term
302
297
  ```
303
298
 
304
- Current metrics (v1.9.0):
299
+ Current metrics (v1.11.0):
305
300
  - **Functions:** 1,070+
306
301
  - **Modules:** 150+
307
- - **Tests:** 2,133 (all passing)
302
+ - **Tests:** 2,894 (all passing)
308
303
  - **Coverage:** 76%
309
304
  - **MATLAB Parity:** 100%
305
+ - **GPU Backends:** 2 (CuPy + MLX)
306
+ - **Performance:** Numba JIT + lru_cache optimizations
310
307
 
311
308
  ### 3. Sync Examples
312
309
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nrl-tracker
3
- Version: 1.9.2
3
+ Version: 1.11.0
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
@@ -41,11 +41,17 @@ Provides-Extra: optimization
41
41
  Requires-Dist: cvxpy>=1.3.0; extra == "optimization"
42
42
  Provides-Extra: signal
43
43
  Requires-Dist: pywavelets>=1.4.0; extra == "signal"
44
+ Provides-Extra: gpu
45
+ Requires-Dist: cupy-cuda12x>=12.0.0; extra == "gpu"
46
+ Provides-Extra: gpu-apple
47
+ Requires-Dist: mlx>=0.5.0; extra == "gpu-apple"
44
48
  Provides-Extra: dev
45
49
  Requires-Dist: pytest>=7.0.0; extra == "dev"
46
50
  Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
47
51
  Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
48
52
  Requires-Dist: pytest-benchmark>=4.0.0; extra == "dev"
53
+ Requires-Dist: pytest-timeout>=2.0.0; extra == "dev"
54
+ Requires-Dist: nbval>=0.10.0; extra == "dev"
49
55
  Requires-Dist: hypothesis>=6.0.0; extra == "dev"
50
56
  Requires-Dist: black>=23.0.0; extra == "dev"
51
57
  Requires-Dist: isort>=5.12.0; extra == "dev"
@@ -56,6 +62,8 @@ Requires-Dist: sphinx>=6.0.0; extra == "dev"
56
62
  Requires-Dist: sphinx-rtd-theme>=1.2.0; extra == "dev"
57
63
  Requires-Dist: myst-parser>=1.0.0; extra == "dev"
58
64
  Requires-Dist: nbsphinx>=0.9.0; extra == "dev"
65
+ Requires-Dist: jupyter>=1.0.0; extra == "dev"
66
+ Requires-Dist: ipykernel>=6.0.0; extra == "dev"
59
67
  Provides-Extra: benchmark
60
68
  Requires-Dist: pytest-benchmark>=4.0.0; extra == "benchmark"
61
69
  Provides-Extra: all
@@ -63,17 +71,17 @@ Requires-Dist: nrl-tracker[astronomy,dev,geodesy,optimization,signal,visualizati
63
71
 
64
72
  # Tracker Component Library (Python)
65
73
 
66
- [![PyPI version](https://img.shields.io/badge/pypi-v1.9.2-blue.svg)](https://pypi.org/project/nrl-tracker/)
74
+ [![PyPI version](https://img.shields.io/badge/pypi-v1.11.0-blue.svg)](https://pypi.org/project/nrl-tracker/)
67
75
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
68
76
  [![License: Public Domain](https://img.shields.io/badge/License-Public%20Domain-brightgreen.svg)](https://en.wikipedia.org/wiki/Public_domain)
69
77
  [![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-2133%20passing-success.svg)](https://github.com/nedonatelli/TCL)
78
+ [![Tests](https://img.shields.io/badge/tests-2894%20passing-success.svg)](https://github.com/nedonatelli/TCL)
71
79
  [![MATLAB Parity](https://img.shields.io/badge/MATLAB%20Parity-100%25-brightgreen.svg)](docs/gap_analysis.rst)
72
80
  [![Type Checking](https://img.shields.io/badge/mypy--strict-passing-brightgreen.svg)](mypy.ini)
73
81
 
74
82
  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.
75
83
 
76
- **1,070+ functions** | **153 modules** | **2,133 tests** | **100% MATLAB parity**
84
+ **1,070+ functions** | **153 modules** | **2,894 tests** | **100% MATLAB parity**
77
85
 
78
86
  ## Overview
79
87
 
@@ -90,6 +98,7 @@ The Tracker Component Library provides building blocks for developing target tra
90
98
  - **Navigation**: Geodetic calculations, INS mechanization, GNSS utilities, INS/GNSS integration
91
99
  - **Geophysical Models**: Gravity (WGS84, EGM96/2008), magnetism (WMM, IGRF), atmosphere, tides, terrain
92
100
  - **Signal Processing**: Digital filters, matched filtering, CFAR detection, transforms (FFT, STFT, wavelets)
101
+ - **GPU Acceleration**: CuPy (NVIDIA CUDA) and MLX (Apple Silicon) backends for batch Kalman filtering and particle filters
93
102
 
94
103
  ## Installation
95
104
 
@@ -111,6 +120,12 @@ pip install nrl-tracker[geodesy]
111
120
  # For visualization
112
121
  pip install nrl-tracker[visualization]
113
122
 
123
+ # For GPU acceleration (NVIDIA CUDA)
124
+ pip install nrl-tracker[gpu]
125
+
126
+ # For GPU acceleration (Apple Silicon M1/M2/M3)
127
+ pip install nrl-tracker[gpu-apple]
128
+
114
129
  # For development
115
130
  pip install nrl-tracker[dev]
116
131
 
@@ -183,6 +198,35 @@ assignment, total_cost = hungarian(cost_matrix)
183
198
  print(f"Optimal assignment: {assignment}, Total cost: {total_cost}")
184
199
  ```
185
200
 
201
+ ### GPU Acceleration
202
+
203
+ The library supports GPU acceleration for batch processing of multiple tracks:
204
+
205
+ ```python
206
+ from pytcl.gpu import is_gpu_available, get_backend, to_gpu, to_cpu
207
+
208
+ # Check GPU availability (auto-detects CUDA or Apple Silicon)
209
+ if is_gpu_available():
210
+ print(f"GPU available, using {get_backend()} backend")
211
+
212
+ # Transfer data to GPU
213
+ x_gpu = to_gpu(states) # (n_tracks, state_dim)
214
+ P_gpu = to_gpu(covariances) # (n_tracks, state_dim, state_dim)
215
+
216
+ # Use batch Kalman filter operations
217
+ from pytcl.gpu import batch_kf_predict
218
+ x_pred, P_pred = batch_kf_predict(x_gpu, P_gpu, F, Q)
219
+
220
+ # Transfer results back to CPU
221
+ x_pred_cpu = to_cpu(x_pred)
222
+ ```
223
+
224
+ **Supported backends:**
225
+ - **NVIDIA CUDA**: Via CuPy (`pip install nrl-tracker[gpu]`)
226
+ - **Apple Silicon**: Via MLX (`pip install nrl-tracker[gpu-apple]`)
227
+
228
+ The backend is automatically selected based on your platform.
229
+
186
230
  ## Module Structure
187
231
 
188
232
  ```
@@ -202,6 +246,7 @@ pytcl/
202
246
  ├── gravity/ # Gravity models
203
247
  ├── magnetism/ # Magnetic field models
204
248
  ├── terrain/ # Terrain elevation models
249
+ ├── gpu/ # GPU acceleration (CuPy/MLX)
205
250
  └── misc/ # Utilities, visualization
206
251
  ```
207
252
 
@@ -1,16 +1,16 @@
1
1
  # Tracker Component Library (Python)
2
2
 
3
- [![PyPI version](https://img.shields.io/badge/pypi-v1.9.2-blue.svg)](https://pypi.org/project/nrl-tracker/)
3
+ [![PyPI version](https://img.shields.io/badge/pypi-v1.11.0-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-2133%20passing-success.svg)](https://github.com/nedonatelli/TCL)
7
+ [![Tests](https://img.shields.io/badge/tests-2894%20passing-success.svg)](https://github.com/nedonatelli/TCL)
8
8
  [![MATLAB Parity](https://img.shields.io/badge/MATLAB%20Parity-100%25-brightgreen.svg)](docs/gap_analysis.rst)
9
9
  [![Type Checking](https://img.shields.io/badge/mypy--strict-passing-brightgreen.svg)](mypy.ini)
10
10
 
11
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.
12
12
 
13
- **1,070+ functions** | **153 modules** | **2,133 tests** | **100% MATLAB parity**
13
+ **1,070+ functions** | **153 modules** | **2,894 tests** | **100% MATLAB parity**
14
14
 
15
15
  ## Overview
16
16
 
@@ -27,6 +27,7 @@ The Tracker Component Library provides building blocks for developing target tra
27
27
  - **Navigation**: Geodetic calculations, INS mechanization, GNSS utilities, INS/GNSS integration
28
28
  - **Geophysical Models**: Gravity (WGS84, EGM96/2008), magnetism (WMM, IGRF), atmosphere, tides, terrain
29
29
  - **Signal Processing**: Digital filters, matched filtering, CFAR detection, transforms (FFT, STFT, wavelets)
30
+ - **GPU Acceleration**: CuPy (NVIDIA CUDA) and MLX (Apple Silicon) backends for batch Kalman filtering and particle filters
30
31
 
31
32
  ## Installation
32
33
 
@@ -48,6 +49,12 @@ pip install nrl-tracker[geodesy]
48
49
  # For visualization
49
50
  pip install nrl-tracker[visualization]
50
51
 
52
+ # For GPU acceleration (NVIDIA CUDA)
53
+ pip install nrl-tracker[gpu]
54
+
55
+ # For GPU acceleration (Apple Silicon M1/M2/M3)
56
+ pip install nrl-tracker[gpu-apple]
57
+
51
58
  # For development
52
59
  pip install nrl-tracker[dev]
53
60
 
@@ -120,6 +127,35 @@ assignment, total_cost = hungarian(cost_matrix)
120
127
  print(f"Optimal assignment: {assignment}, Total cost: {total_cost}")
121
128
  ```
122
129
 
130
+ ### GPU Acceleration
131
+
132
+ The library supports GPU acceleration for batch processing of multiple tracks:
133
+
134
+ ```python
135
+ from pytcl.gpu import is_gpu_available, get_backend, to_gpu, to_cpu
136
+
137
+ # Check GPU availability (auto-detects CUDA or Apple Silicon)
138
+ if is_gpu_available():
139
+ print(f"GPU available, using {get_backend()} backend")
140
+
141
+ # Transfer data to GPU
142
+ x_gpu = to_gpu(states) # (n_tracks, state_dim)
143
+ P_gpu = to_gpu(covariances) # (n_tracks, state_dim, state_dim)
144
+
145
+ # Use batch Kalman filter operations
146
+ from pytcl.gpu import batch_kf_predict
147
+ x_pred, P_pred = batch_kf_predict(x_gpu, P_gpu, F, Q)
148
+
149
+ # Transfer results back to CPU
150
+ x_pred_cpu = to_cpu(x_pred)
151
+ ```
152
+
153
+ **Supported backends:**
154
+ - **NVIDIA CUDA**: Via CuPy (`pip install nrl-tracker[gpu]`)
155
+ - **Apple Silicon**: Via MLX (`pip install nrl-tracker[gpu-apple]`)
156
+
157
+ The backend is automatically selected based on your platform.
158
+
123
159
  ## Module Structure
124
160
 
125
161
  ```
@@ -139,6 +175,7 @@ pytcl/
139
175
  ├── gravity/ # Gravity models
140
176
  ├── magnetism/ # Magnetic field models
141
177
  ├── terrain/ # Terrain elevation models
178
+ ├── gpu/ # GPU acceleration (CuPy/MLX)
142
179
  └── misc/ # Utilities, visualization
143
180
  ```
144
181
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nrl-tracker
3
- Version: 1.9.2
3
+ Version: 1.11.0
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
@@ -41,11 +41,17 @@ Provides-Extra: optimization
41
41
  Requires-Dist: cvxpy>=1.3.0; extra == "optimization"
42
42
  Provides-Extra: signal
43
43
  Requires-Dist: pywavelets>=1.4.0; extra == "signal"
44
+ Provides-Extra: gpu
45
+ Requires-Dist: cupy-cuda12x>=12.0.0; extra == "gpu"
46
+ Provides-Extra: gpu-apple
47
+ Requires-Dist: mlx>=0.5.0; extra == "gpu-apple"
44
48
  Provides-Extra: dev
45
49
  Requires-Dist: pytest>=7.0.0; extra == "dev"
46
50
  Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
47
51
  Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
48
52
  Requires-Dist: pytest-benchmark>=4.0.0; extra == "dev"
53
+ Requires-Dist: pytest-timeout>=2.0.0; extra == "dev"
54
+ Requires-Dist: nbval>=0.10.0; extra == "dev"
49
55
  Requires-Dist: hypothesis>=6.0.0; extra == "dev"
50
56
  Requires-Dist: black>=23.0.0; extra == "dev"
51
57
  Requires-Dist: isort>=5.12.0; extra == "dev"
@@ -56,6 +62,8 @@ Requires-Dist: sphinx>=6.0.0; extra == "dev"
56
62
  Requires-Dist: sphinx-rtd-theme>=1.2.0; extra == "dev"
57
63
  Requires-Dist: myst-parser>=1.0.0; extra == "dev"
58
64
  Requires-Dist: nbsphinx>=0.9.0; extra == "dev"
65
+ Requires-Dist: jupyter>=1.0.0; extra == "dev"
66
+ Requires-Dist: ipykernel>=6.0.0; extra == "dev"
59
67
  Provides-Extra: benchmark
60
68
  Requires-Dist: pytest-benchmark>=4.0.0; extra == "benchmark"
61
69
  Provides-Extra: all
@@ -63,17 +71,17 @@ Requires-Dist: nrl-tracker[astronomy,dev,geodesy,optimization,signal,visualizati
63
71
 
64
72
  # Tracker Component Library (Python)
65
73
 
66
- [![PyPI version](https://img.shields.io/badge/pypi-v1.9.2-blue.svg)](https://pypi.org/project/nrl-tracker/)
74
+ [![PyPI version](https://img.shields.io/badge/pypi-v1.11.0-blue.svg)](https://pypi.org/project/nrl-tracker/)
67
75
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
68
76
  [![License: Public Domain](https://img.shields.io/badge/License-Public%20Domain-brightgreen.svg)](https://en.wikipedia.org/wiki/Public_domain)
69
77
  [![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-2133%20passing-success.svg)](https://github.com/nedonatelli/TCL)
78
+ [![Tests](https://img.shields.io/badge/tests-2894%20passing-success.svg)](https://github.com/nedonatelli/TCL)
71
79
  [![MATLAB Parity](https://img.shields.io/badge/MATLAB%20Parity-100%25-brightgreen.svg)](docs/gap_analysis.rst)
72
80
  [![Type Checking](https://img.shields.io/badge/mypy--strict-passing-brightgreen.svg)](mypy.ini)
73
81
 
74
82
  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.
75
83
 
76
- **1,070+ functions** | **153 modules** | **2,133 tests** | **100% MATLAB parity**
84
+ **1,070+ functions** | **153 modules** | **2,894 tests** | **100% MATLAB parity**
77
85
 
78
86
  ## Overview
79
87
 
@@ -90,6 +98,7 @@ The Tracker Component Library provides building blocks for developing target tra
90
98
  - **Navigation**: Geodetic calculations, INS mechanization, GNSS utilities, INS/GNSS integration
91
99
  - **Geophysical Models**: Gravity (WGS84, EGM96/2008), magnetism (WMM, IGRF), atmosphere, tides, terrain
92
100
  - **Signal Processing**: Digital filters, matched filtering, CFAR detection, transforms (FFT, STFT, wavelets)
101
+ - **GPU Acceleration**: CuPy (NVIDIA CUDA) and MLX (Apple Silicon) backends for batch Kalman filtering and particle filters
93
102
 
94
103
  ## Installation
95
104
 
@@ -111,6 +120,12 @@ pip install nrl-tracker[geodesy]
111
120
  # For visualization
112
121
  pip install nrl-tracker[visualization]
113
122
 
123
+ # For GPU acceleration (NVIDIA CUDA)
124
+ pip install nrl-tracker[gpu]
125
+
126
+ # For GPU acceleration (Apple Silicon M1/M2/M3)
127
+ pip install nrl-tracker[gpu-apple]
128
+
114
129
  # For development
115
130
  pip install nrl-tracker[dev]
116
131
 
@@ -183,6 +198,35 @@ assignment, total_cost = hungarian(cost_matrix)
183
198
  print(f"Optimal assignment: {assignment}, Total cost: {total_cost}")
184
199
  ```
185
200
 
201
+ ### GPU Acceleration
202
+
203
+ The library supports GPU acceleration for batch processing of multiple tracks:
204
+
205
+ ```python
206
+ from pytcl.gpu import is_gpu_available, get_backend, to_gpu, to_cpu
207
+
208
+ # Check GPU availability (auto-detects CUDA or Apple Silicon)
209
+ if is_gpu_available():
210
+ print(f"GPU available, using {get_backend()} backend")
211
+
212
+ # Transfer data to GPU
213
+ x_gpu = to_gpu(states) # (n_tracks, state_dim)
214
+ P_gpu = to_gpu(covariances) # (n_tracks, state_dim, state_dim)
215
+
216
+ # Use batch Kalman filter operations
217
+ from pytcl.gpu import batch_kf_predict
218
+ x_pred, P_pred = batch_kf_predict(x_gpu, P_gpu, F, Q)
219
+
220
+ # Transfer results back to CPU
221
+ x_pred_cpu = to_cpu(x_pred)
222
+ ```
223
+
224
+ **Supported backends:**
225
+ - **NVIDIA CUDA**: Via CuPy (`pip install nrl-tracker[gpu]`)
226
+ - **Apple Silicon**: Via MLX (`pip install nrl-tracker[gpu-apple]`)
227
+
228
+ The backend is automatically selected based on your platform.
229
+
186
230
  ## Module Structure
187
231
 
188
232
  ```
@@ -202,6 +246,7 @@ pytcl/
202
246
  ├── gravity/ # Gravity models
203
247
  ├── magnetism/ # Magnetic field models
204
248
  ├── terrain/ # Terrain elevation models
249
+ ├── gpu/ # GPU acceleration (CuPy/MLX)
205
250
  └── misc/ # Utilities, visualization
206
251
  ```
207
252
 
@@ -100,6 +100,13 @@ pytcl/dynamic_models/process_noise/__init__.py
100
100
  pytcl/dynamic_models/process_noise/coordinated_turn.py
101
101
  pytcl/dynamic_models/process_noise/polynomial.py
102
102
  pytcl/dynamic_models/process_noise/singer.py
103
+ pytcl/gpu/__init__.py
104
+ pytcl/gpu/ekf.py
105
+ pytcl/gpu/kalman.py
106
+ pytcl/gpu/matrix_utils.py
107
+ pytcl/gpu/particle_filter.py
108
+ pytcl/gpu/ukf.py
109
+ pytcl/gpu/utils.py
103
110
  pytcl/gravity/__init__.py
104
111
  pytcl/gravity/clenshaw.py
105
112
  pytcl/gravity/egm.py
@@ -180,25 +187,38 @@ tests/conftest.py
180
187
  tests/test_additional_trees.py
181
188
  tests/test_assignment_algorithms.py
182
189
  tests/test_astronomical.py
190
+ tests/test_cfar_detection.py
183
191
  tests/test_clustering.py
192
+ tests/test_combinatorics.py
184
193
  tests/test_constrained_ekf.py
185
194
  tests/test_coordinate_systems.py
186
195
  tests/test_coverage_boost.py
187
196
  tests/test_coverage_boost_2.py
197
+ tests/test_debye.py
188
198
  tests/test_dynamic_models.py
189
199
  tests/test_egm.py
200
+ tests/test_elliptic.py
190
201
  tests/test_emm.py
191
202
  tests/test_ephemerides.py
203
+ tests/test_error_functions.py
192
204
  tests/test_exceptions.py
205
+ tests/test_gamma_functions.py
193
206
  tests/test_gaussian_mixtures.py
194
207
  tests/test_gaussian_sum_filter.py
208
+ tests/test_geometry.py
195
209
  tests/test_geophysical.py
210
+ tests/test_gpu.py
211
+ tests/test_gpu_utils.py
196
212
  tests/test_great_circle.py
197
213
  tests/test_h_infinity.py
214
+ tests/test_hypergeometric.py
198
215
  tests/test_ins.py
199
216
  tests/test_ins_gnss.py
217
+ tests/test_ionosphere.py
200
218
  tests/test_jpda.py
201
219
  tests/test_kalman_filters.py
220
+ tests/test_marcum_q.py
221
+ tests/test_matched_filter.py
202
222
  tests/test_mathematical_functions.py
203
223
  tests/test_maximum_likelihood.py
204
224
  tests/test_mht.py
@@ -210,9 +230,11 @@ tests/test_performance_evaluation.py
210
230
  tests/test_phase6_specialized.py
211
231
  tests/test_plotting.py
212
232
  tests/test_projections.py
233
+ tests/test_quadrature.py
213
234
  tests/test_rbpf.py
214
235
  tests/test_relativity.py
215
236
  tests/test_rhumb.py
237
+ tests/test_rotations.py
216
238
  tests/test_sgp4.py
217
239
  tests/test_signal_processing.py
218
240
  tests/test_smoothers.py
@@ -220,6 +242,7 @@ tests/test_spatial_containers_parametrized.py
220
242
  tests/test_spatial_structures.py
221
243
  tests/test_special_functions.py
222
244
  tests/test_special_orbits.py
245
+ tests/test_square_root_filters.py
223
246
  tests/test_static_estimation.py
224
247
  tests/test_terrain.py
225
248
  tests/test_terrain_loaders.py
@@ -229,4 +252,5 @@ tests/test_trackers.py
229
252
  tests/test_tracking_containers.py
230
253
  tests/test_transforms.py
231
254
  tests/test_validation.py
255
+ tests/test_wavelets.py
232
256
  tests/unit/test_core.py
@@ -17,6 +17,8 @@ pytest>=7.0.0
17
17
  pytest-cov>=4.0.0
18
18
  pytest-xdist>=3.0.0
19
19
  pytest-benchmark>=4.0.0
20
+ pytest-timeout>=2.0.0
21
+ nbval>=0.10.0
20
22
  hypothesis>=6.0.0
21
23
  black>=23.0.0
22
24
  isort>=5.12.0
@@ -27,11 +29,19 @@ sphinx>=6.0.0
27
29
  sphinx-rtd-theme>=1.2.0
28
30
  myst-parser>=1.0.0
29
31
  nbsphinx>=0.9.0
32
+ jupyter>=1.0.0
33
+ ipykernel>=6.0.0
30
34
 
31
35
  [geodesy]
32
36
  pyproj>=3.4.0
33
37
  geographiclib>=2.0
34
38
 
39
+ [gpu]
40
+ cupy-cuda12x>=12.0.0
41
+
42
+ [gpu-apple]
43
+ mlx>=0.5.0
44
+
35
45
  [optimization]
36
46
  cvxpy>=1.3.0
37
47
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "nrl-tracker"
7
- version = "1.9.2"
7
+ version = "1.11.0"
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 = [
@@ -63,11 +63,19 @@ optimization = [
63
63
  signal = [
64
64
  "pywavelets>=1.4.0",
65
65
  ]
66
+ gpu = [
67
+ "cupy-cuda12x>=12.0.0",
68
+ ]
69
+ gpu-apple = [
70
+ "mlx>=0.5.0",
71
+ ]
66
72
  dev = [
67
73
  "pytest>=7.0.0",
68
74
  "pytest-cov>=4.0.0",
69
75
  "pytest-xdist>=3.0.0",
70
76
  "pytest-benchmark>=4.0.0",
77
+ "pytest-timeout>=2.0.0",
78
+ "nbval>=0.10.0",
71
79
  "hypothesis>=6.0.0",
72
80
  "black>=23.0.0",
73
81
  "isort>=5.12.0",
@@ -78,6 +86,8 @@ dev = [
78
86
  "sphinx-rtd-theme>=1.2.0",
79
87
  "myst-parser>=1.0.0",
80
88
  "nbsphinx>=0.9.0",
89
+ "jupyter>=1.0.0",
90
+ "ipykernel>=6.0.0",
81
91
  ]
82
92
  benchmark = [
83
93
  "pytest-benchmark>=4.0.0",
@@ -107,6 +117,7 @@ markers = [
107
117
  "benchmark: marks tests as benchmarks",
108
118
  "light: marks benchmark as part of light (PR) suite",
109
119
  "full: marks benchmark as part of full (main) suite",
120
+ "notebook: marks notebook validation tests",
110
121
  ]
111
122
  filterwarnings = [
112
123
  "ignore::DeprecationWarning",
@@ -176,5 +187,7 @@ module = [
176
187
  "plotly.*",
177
188
  "cvxpy.*",
178
189
  "pywt.*",
190
+ "cupy.*",
191
+ "mlx.*",
179
192
  ]
180
193
  ignore_missing_imports = true
@@ -6,8 +6,8 @@ systems, dynamic models, estimation algorithms, and mathematical functions.
6
6
 
7
7
  This is a Python port of the U.S. Naval Research Laboratory's Tracker Component
8
8
  Library originally written in MATLAB.
9
- **Current Version:** 1.9.2 (January 4, 2026)
10
- **Status:** Production-ready, 2,133 tests passing, 76% line coverage
9
+ **Current Version:** 1.11.0 (January 5, 2026)
10
+ **Status:** Production-ready, 2,894 tests passing, 76% line coverage
11
11
  Examples
12
12
  --------
13
13
  >>> import pytcl as pytcl
@@ -21,7 +21,7 @@ References
21
21
  no. 5, pp. 18-27, May 2017.
22
22
  """
23
23
 
24
- __version__ = "1.9.2"
24
+ __version__ = "1.11.0"
25
25
  __author__ = "Python Port Contributors"
26
26
  __original_author__ = "David F. Crouse, Naval Research Laboratory"
27
27