nrl-tracker 1.7.0__py3-none-any.whl → 1.7.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nrl_tracker-1.7.0.dist-info → nrl_tracker-1.7.3.dist-info}/METADATA +43 -3
- {nrl_tracker-1.7.0.dist-info → nrl_tracker-1.7.3.dist-info}/RECORD +76 -76
- pytcl/__init__.py +2 -2
- pytcl/assignment_algorithms/__init__.py +15 -15
- pytcl/assignment_algorithms/gating.py +10 -10
- pytcl/assignment_algorithms/jpda.py +40 -40
- pytcl/assignment_algorithms/nd_assignment.py +5 -4
- pytcl/assignment_algorithms/network_flow.py +18 -8
- pytcl/assignment_algorithms/three_dimensional/assignment.py +3 -3
- pytcl/astronomical/__init__.py +9 -9
- pytcl/astronomical/ephemerides.py +14 -11
- pytcl/astronomical/reference_frames.py +8 -4
- pytcl/astronomical/relativity.py +6 -5
- pytcl/astronomical/special_orbits.py +9 -13
- pytcl/atmosphere/__init__.py +6 -6
- pytcl/atmosphere/nrlmsise00.py +153 -152
- pytcl/clustering/dbscan.py +2 -2
- pytcl/clustering/gaussian_mixture.py +3 -3
- pytcl/clustering/hierarchical.py +15 -15
- pytcl/clustering/kmeans.py +4 -4
- pytcl/containers/base.py +3 -3
- pytcl/containers/cluster_set.py +12 -2
- pytcl/containers/covertree.py +5 -3
- pytcl/containers/rtree.py +1 -1
- pytcl/containers/vptree.py +4 -2
- pytcl/coordinate_systems/conversions/geodetic.py +31 -7
- pytcl/coordinate_systems/jacobians/jacobians.py +2 -2
- pytcl/coordinate_systems/projections/__init__.py +1 -1
- pytcl/coordinate_systems/projections/projections.py +2 -2
- pytcl/coordinate_systems/rotations/rotations.py +10 -6
- pytcl/core/validation.py +3 -3
- pytcl/dynamic_estimation/__init__.py +16 -16
- pytcl/dynamic_estimation/gaussian_sum_filter.py +20 -38
- pytcl/dynamic_estimation/imm.py +14 -14
- pytcl/dynamic_estimation/kalman/__init__.py +1 -1
- pytcl/dynamic_estimation/kalman/constrained.py +35 -23
- pytcl/dynamic_estimation/kalman/extended.py +8 -8
- pytcl/dynamic_estimation/kalman/h_infinity.py +2 -2
- pytcl/dynamic_estimation/kalman/square_root.py +8 -2
- pytcl/dynamic_estimation/kalman/sr_ukf.py +3 -3
- pytcl/dynamic_estimation/kalman/ud_filter.py +11 -5
- pytcl/dynamic_estimation/kalman/unscented.py +8 -6
- pytcl/dynamic_estimation/particle_filters/bootstrap.py +15 -15
- pytcl/dynamic_estimation/rbpf.py +36 -40
- pytcl/gravity/spherical_harmonics.py +3 -3
- pytcl/gravity/tides.py +6 -6
- pytcl/logging_config.py +3 -3
- pytcl/magnetism/emm.py +10 -3
- pytcl/magnetism/wmm.py +4 -4
- pytcl/mathematical_functions/combinatorics/combinatorics.py +5 -5
- pytcl/mathematical_functions/geometry/geometry.py +5 -5
- pytcl/mathematical_functions/numerical_integration/quadrature.py +6 -6
- pytcl/mathematical_functions/signal_processing/detection.py +24 -24
- pytcl/mathematical_functions/signal_processing/filters.py +14 -14
- pytcl/mathematical_functions/signal_processing/matched_filter.py +12 -12
- pytcl/mathematical_functions/special_functions/bessel.py +15 -3
- pytcl/mathematical_functions/special_functions/debye.py +5 -1
- pytcl/mathematical_functions/special_functions/error_functions.py +3 -1
- pytcl/mathematical_functions/special_functions/gamma_functions.py +4 -4
- pytcl/mathematical_functions/special_functions/hypergeometric.py +6 -4
- pytcl/mathematical_functions/transforms/fourier.py +8 -8
- pytcl/mathematical_functions/transforms/stft.py +12 -12
- pytcl/mathematical_functions/transforms/wavelets.py +9 -9
- pytcl/navigation/geodesy.py +3 -3
- pytcl/navigation/great_circle.py +5 -5
- pytcl/plotting/coordinates.py +7 -7
- pytcl/plotting/tracks.py +2 -2
- pytcl/static_estimation/maximum_likelihood.py +16 -14
- pytcl/static_estimation/robust.py +5 -5
- pytcl/terrain/loaders.py +5 -5
- pytcl/trackers/hypothesis.py +1 -1
- pytcl/trackers/mht.py +9 -9
- pytcl/trackers/multi_target.py +1 -1
- {nrl_tracker-1.7.0.dist-info → nrl_tracker-1.7.3.dist-info}/LICENSE +0 -0
- {nrl_tracker-1.7.0.dist-info → nrl_tracker-1.7.3.dist-info}/WHEEL +0 -0
- {nrl_tracker-1.7.0.dist-info → nrl_tracker-1.7.3.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: nrl-tracker
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.3
|
|
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,12 +63,13 @@ Requires-Dist: plotly>=5.15.0; extra == "visualization"
|
|
|
63
63
|
|
|
64
64
|
# Tracker Component Library (Python)
|
|
65
65
|
|
|
66
|
-
[](https://pypi.org/project/nrl-tracker/)
|
|
67
67
|
[](https://www.python.org/downloads/)
|
|
68
68
|
[](https://en.wikipedia.org/wiki/Public_domain)
|
|
69
69
|
[](https://github.com/psf/black)
|
|
70
70
|
[](https://github.com/nedonatelli/TCL)
|
|
71
71
|
[](docs/gap_analysis.rst)
|
|
72
|
+
[](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
|
|
|
@@ -208,7 +209,46 @@ pytcl/
|
|
|
208
209
|
|
|
209
210
|
- [API Reference](https://pytcl.readthedocs.io/en/latest/api/)
|
|
210
211
|
- [User Guides](https://pytcl.readthedocs.io/en/latest/user_guide/)
|
|
211
|
-
- [Examples](examples/)
|
|
212
|
+
- [Examples](examples/) - 29 validated example scripts
|
|
213
|
+
- [Tutorials](docs/tutorials/) - 10 interactive tutorial modules
|
|
214
|
+
|
|
215
|
+
## Examples & Tutorials
|
|
216
|
+
|
|
217
|
+
The library includes 39 runnable code examples demonstrating all major features:
|
|
218
|
+
|
|
219
|
+
### Examples (29 files in `/examples/`)
|
|
220
|
+
|
|
221
|
+
Comprehensive demonstrations of library functionality:
|
|
222
|
+
- **Tracking & Estimation**: Kalman filters, particle filters, smoothers
|
|
223
|
+
- **Assignment**: Hungarian algorithm, k-best assignments, 3D assignment
|
|
224
|
+
- **Coordinates**: Frame conversions, transformations, geodetic calculations
|
|
225
|
+
- **Dynamics**: State models, motion models, dynamic systems
|
|
226
|
+
- **Filtering**: Uncertainty visualization, multi-target tracking
|
|
227
|
+
- **Astronomy**: Ephemerides, orbital mechanics, relativistic corrections
|
|
228
|
+
- **Navigation**: INS/GNSS integration, geophysical modeling
|
|
229
|
+
- **Signal Processing**: Detection, filtering, transforms
|
|
230
|
+
- **Terrain & Atmosphere**: Elevation models, atmospheric properties
|
|
231
|
+
|
|
232
|
+
**Status**: ✅ All 29 examples validated and passing (100% execution success)
|
|
233
|
+
|
|
234
|
+
### Tutorials (10 modules in `/docs/tutorials/`)
|
|
235
|
+
|
|
236
|
+
Interactive learning modules with visualizations:
|
|
237
|
+
- Assignment algorithms and 3D assignment problems
|
|
238
|
+
- Atmospheric and geophysical models
|
|
239
|
+
- Dynamical systems and reference frames
|
|
240
|
+
- Filtering and smoothing techniques
|
|
241
|
+
- Sensor fusion and advanced filtering
|
|
242
|
+
- Special functions and mathematical tools
|
|
243
|
+
|
|
244
|
+
**Status**: ✅ All 10 tutorials validated and passing (100% execution success)
|
|
245
|
+
|
|
246
|
+
## Documentation
|
|
247
|
+
|
|
248
|
+
- [API Reference](https://pytcl.readthedocs.io/en/latest/api/)
|
|
249
|
+
- [User Guides](https://pytcl.readthedocs.io/en/latest/user_guide/)
|
|
250
|
+
- [Examples](examples/) - 29 validated example scripts
|
|
251
|
+
- [Tutorials](docs/tutorials/) - 10 interactive tutorial modules
|
|
212
252
|
|
|
213
253
|
## Comparison with Original MATLAB Library
|
|
214
254
|
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
pytcl/__init__.py,sha256=
|
|
2
|
-
pytcl/logging_config.py,sha256=
|
|
3
|
-
pytcl/assignment_algorithms/__init__.py,sha256=
|
|
1
|
+
pytcl/__init__.py,sha256=s_y3eu2pkBOeSMnuW-8pK_WWDTmGHnGx7hl-PJ5R3q8,1917
|
|
2
|
+
pytcl/logging_config.py,sha256=UJaYufQgNuIjpsOMTPo3ewz1XCHPk8a08jTHyP7uoI4,8956
|
|
3
|
+
pytcl/assignment_algorithms/__init__.py,sha256=kUWhmyLhZcs5GiUQA5_v7KA3qETGsvqV6wU8r7paO-k,2976
|
|
4
4
|
pytcl/assignment_algorithms/data_association.py,sha256=tsRxWJZk9aAPmE99BKXGouEpFfZrjPjb4HXvgxFUHhU,11405
|
|
5
|
-
pytcl/assignment_algorithms/gating.py,sha256=
|
|
6
|
-
pytcl/assignment_algorithms/jpda.py,sha256=
|
|
7
|
-
pytcl/assignment_algorithms/nd_assignment.py,sha256=
|
|
8
|
-
pytcl/assignment_algorithms/network_flow.py,sha256=
|
|
5
|
+
pytcl/assignment_algorithms/gating.py,sha256=AXWn-F_EOGI6qrBc4PN5eFM-ZZGu1WOMi5b5ZsxValU,10910
|
|
6
|
+
pytcl/assignment_algorithms/jpda.py,sha256=8-HoO2VygxJ8FFSCCOIOfbhMAn87jU7PqVvd7lQ3GEY,19797
|
|
7
|
+
pytcl/assignment_algorithms/nd_assignment.py,sha256=RBRoXoJnUY0lB9Vb_dwvQtwh6oI31KfeDqpaNrTNXzk,11344
|
|
8
|
+
pytcl/assignment_algorithms/network_flow.py,sha256=tmNOHdrRfo30T8UXZ0A_icDdVDgQCShdbXEt9HY0p1w,10325
|
|
9
9
|
pytcl/assignment_algorithms/three_dimensional/__init__.py,sha256=1Q40OUlUQoo7YKEucwdrSNo3D4A0Zibvkr8z4TpueBg,526
|
|
10
|
-
pytcl/assignment_algorithms/three_dimensional/assignment.py,sha256=
|
|
10
|
+
pytcl/assignment_algorithms/three_dimensional/assignment.py,sha256=OGcjg3Yr1tYriWYBJ5k6jiRMpOHDISK8FJDY0nTQxxw,19244
|
|
11
11
|
pytcl/assignment_algorithms/two_dimensional/__init__.py,sha256=4Evsn__9hTfI2i8m8Ngl-Zy0Fa2OydKmDKlZlH6jaao,778
|
|
12
12
|
pytcl/assignment_algorithms/two_dimensional/assignment.py,sha256=eh87MBb-uiUSI1MXj4HrreRKB6Z8rxAyDkNQ8-u4SbM,11848
|
|
13
13
|
pytcl/assignment_algorithms/two_dimensional/kbest.py,sha256=yiTToLuP7xWxQlQ8E-fpgXg-5iu0nnXcJXStjUB0nOE,17284
|
|
14
|
-
pytcl/astronomical/__init__.py,sha256=
|
|
15
|
-
pytcl/astronomical/ephemerides.py,sha256=
|
|
14
|
+
pytcl/astronomical/__init__.py,sha256=v0nUgEy5ReHXzpNb1JdwWXv4AtcFksotEOccQnOyVfI,9667
|
|
15
|
+
pytcl/astronomical/ephemerides.py,sha256=nQSbcipQ_IhPv1R-Q0-iPlfTCb4x2KdfVjwc0c_YeeE,16705
|
|
16
16
|
pytcl/astronomical/lambert.py,sha256=Lc8FT1JmpI9WSXsG2s5vIRkSoBSV7r5hd3o2bGh2Ojo,15607
|
|
17
17
|
pytcl/astronomical/orbital_mechanics.py,sha256=8GssRanwTowCl6PJYqmB_SDnNznLUq5gkPa3j6iEo3U,19965
|
|
18
|
-
pytcl/astronomical/reference_frames.py,sha256=
|
|
19
|
-
pytcl/astronomical/relativity.py,sha256=
|
|
18
|
+
pytcl/astronomical/reference_frames.py,sha256=MBqprzBpEvdq3ngRL-_pp-Vnj7AqbuXhjUfGQ98znfc,35616
|
|
19
|
+
pytcl/astronomical/relativity.py,sha256=deuzBIINS4HimCwNU0_mzlHiB2nJ3AW8PnqtpzTw5_I,15534
|
|
20
20
|
pytcl/astronomical/sgp4.py,sha256=iNZrqMRUzR-LFeZiluzlNmkwxeYbIyF2F1cygyeEZVE,21546
|
|
21
|
-
pytcl/astronomical/special_orbits.py,sha256=
|
|
21
|
+
pytcl/astronomical/special_orbits.py,sha256=N54c_wAD7XKk_diDOw2QjUSkmYECMyWQDq2P6EeEBEI,12745
|
|
22
22
|
pytcl/astronomical/time_systems.py,sha256=Jg0Zaq60hc4Ts1aQtb5bK4KSZhz-uQse8gYC89Y0-TA,15243
|
|
23
23
|
pytcl/astronomical/tle.py,sha256=t3e2-0f3Wiz77q-pC2jfpohkrDfoYOEHacpNgWMNLAk,14638
|
|
24
|
-
pytcl/atmosphere/__init__.py,sha256=
|
|
24
|
+
pytcl/atmosphere/__init__.py,sha256=Joa6PBEfKun0Moii6BOzyVYG8AOFyvucKdVuY62ArQc,1685
|
|
25
25
|
pytcl/atmosphere/ionosphere.py,sha256=1qC3hY-27pD0XcLBjU735deKYmmi6qnj2fDG1zNbTqg,14681
|
|
26
26
|
pytcl/atmosphere/models.py,sha256=pMLv8D7qoFqLZrlbTHLJJULOdDdhPskJ1m7KVKLV63E,9584
|
|
27
|
-
pytcl/atmosphere/nrlmsise00.py,sha256=
|
|
27
|
+
pytcl/atmosphere/nrlmsise00.py,sha256=jcmAC00G3X0CzfK4eWkvq2tPxHXzMqC8GBHNbFZRq4w,25868
|
|
28
28
|
pytcl/clustering/__init__.py,sha256=bYdhC_XJEt6KUUni9bIPxaddXNEGmIJQvGkA14rK4J8,1697
|
|
29
|
-
pytcl/clustering/dbscan.py,sha256=
|
|
30
|
-
pytcl/clustering/gaussian_mixture.py,sha256=
|
|
31
|
-
pytcl/clustering/hierarchical.py,sha256=
|
|
32
|
-
pytcl/clustering/kmeans.py,sha256=
|
|
29
|
+
pytcl/clustering/dbscan.py,sha256=WgzYz_f5nDh0T1RPClX9b3xSvFPmLxY6QaI2NCtxJg4,7389
|
|
30
|
+
pytcl/clustering/gaussian_mixture.py,sha256=UAI2_WG2RASA0N2PIZ0EZgqYZ3yly7oJBSJWSJnm_bE,22904
|
|
31
|
+
pytcl/clustering/hierarchical.py,sha256=K7z6bZR4QSDMva9kaqEOjdktl8unMK1wyCJm3cFN8pQ,14292
|
|
32
|
+
pytcl/clustering/kmeans.py,sha256=GNvgaGP53LKr4-fh-UajxbjCi0jWCCLJba23EGcQq4I,10712
|
|
33
33
|
pytcl/containers/__init__.py,sha256=jZAZb0VUft5gjQghfg2S9PD-LsA5xgtXkc0mAS_Gnmk,2428
|
|
34
|
-
pytcl/containers/base.py,sha256=
|
|
35
|
-
pytcl/containers/cluster_set.py,sha256=
|
|
36
|
-
pytcl/containers/covertree.py,sha256=
|
|
34
|
+
pytcl/containers/base.py,sha256=UL-RXobVlZCZ5H3Xdo_TzcJQANNsIVQeynKHhLGxRVE,5545
|
|
35
|
+
pytcl/containers/cluster_set.py,sha256=uhfOIpXlYoI1U75TWcLMHjezVavnIZhVEGQHKCDmKo4,22774
|
|
36
|
+
pytcl/containers/covertree.py,sha256=SKiosZnJ9bvAaANDKQSbDUqL2BnIno-1D8TbOWDM3m0,13337
|
|
37
37
|
pytcl/containers/kd_tree.py,sha256=9CKHAzid0DZ879hut8M4dyW_976pIWNLX3uWzELPIu4,18563
|
|
38
38
|
pytcl/containers/measurement_set.py,sha256=87AbdoZIUspn1yJsiMpyQ5LoEVcerUnXefXGGPtFTJg,12654
|
|
39
|
-
pytcl/containers/rtree.py,sha256=
|
|
39
|
+
pytcl/containers/rtree.py,sha256=SGlnEG6q670qxO9P_jDT7yocjYmdal8f22SvEXdvw9E,21857
|
|
40
40
|
pytcl/containers/track_list.py,sha256=6q9Qgcwm-8H_JqtOCsMssF27av4XaSkhfDl-MWb1ABc,12520
|
|
41
|
-
pytcl/containers/vptree.py,sha256=
|
|
41
|
+
pytcl/containers/vptree.py,sha256=eFBX2-sm_lgqON18uM4MEk4I4_sRgoPla29cTJFy_Xo,8800
|
|
42
42
|
pytcl/coordinate_systems/__init__.py,sha256=jwYhu_-9AvOeP9WLG9PYtyDwfe0GjxNZ9-xCqiLymW4,3909
|
|
43
43
|
pytcl/coordinate_systems/conversions/__init__.py,sha256=PkNevB78vBw0BkalydJBbQO91AyiMJxKRrgJNt4HsYc,1100
|
|
44
|
-
pytcl/coordinate_systems/conversions/geodetic.py,sha256=
|
|
44
|
+
pytcl/coordinate_systems/conversions/geodetic.py,sha256=rRRf4MWBkGj3VTN1WRW3lrlw4Yf9a4HH3UCgNOGjbJ0,23460
|
|
45
45
|
pytcl/coordinate_systems/conversions/spherical.py,sha256=q7k9l5mJbVzVdNj9Gcq4ibFxax8z_mVpJfITRBzx630,10812
|
|
46
46
|
pytcl/coordinate_systems/jacobians/__init__.py,sha256=CRGB8GzvGT_sr4Ynm51S7gSX8grqt1pO1Pq1MWmHPTs,890
|
|
47
|
-
pytcl/coordinate_systems/jacobians/jacobians.py,sha256=
|
|
48
|
-
pytcl/coordinate_systems/projections/__init__.py,sha256=
|
|
49
|
-
pytcl/coordinate_systems/projections/projections.py,sha256=
|
|
47
|
+
pytcl/coordinate_systems/jacobians/jacobians.py,sha256=0gpbelZPN4HDtvS1ymc3RIhOfxCVTKpRc-jDJXdM6pQ,11747
|
|
48
|
+
pytcl/coordinate_systems/projections/__init__.py,sha256=TmBiffO5cmazAhsfPIVBaaqnravVSO3JxjGb0MXkucc,2404
|
|
49
|
+
pytcl/coordinate_systems/projections/projections.py,sha256=y_kwcu_zp0HHiKR-wp3v3AvRcY61bleDi1SxwbrnWB0,33179
|
|
50
50
|
pytcl/coordinate_systems/rotations/__init__.py,sha256=nqAz4iJd2hEOX_r7Tz4cE524sShyxdbtcQ5m56RrDLg,1047
|
|
51
|
-
pytcl/coordinate_systems/rotations/rotations.py,sha256=
|
|
51
|
+
pytcl/coordinate_systems/rotations/rotations.py,sha256=2KK6Lgpfmjac3qfOMvHku_BcwGOgkRC13BZbSCUvfwQ,18314
|
|
52
52
|
pytcl/core/__init__.py,sha256=3GFQX_Q9f7fhmWlA6OQiS6OpM7HWhyT9iQhB8Mhi_kk,1580
|
|
53
53
|
pytcl/core/array_utils.py,sha256=SsgEiAoRCWxAVKq1aa5-nPdOi-2AB6XNObu0IaGClUk,13983
|
|
54
54
|
pytcl/core/constants.py,sha256=lZVDK5zsSR02_4b2Nqx9KDtZT9QaYhkZ9wuoODbifd4,8693
|
|
55
|
-
pytcl/core/validation.py,sha256=
|
|
56
|
-
pytcl/dynamic_estimation/__init__.py,sha256=
|
|
57
|
-
pytcl/dynamic_estimation/gaussian_sum_filter.py,sha256=
|
|
58
|
-
pytcl/dynamic_estimation/imm.py,sha256=
|
|
55
|
+
pytcl/core/validation.py,sha256=9Pjn2wOYmGLJDSA8eS2aGTCGO16o5l2xioOHamNXuIg,23441
|
|
56
|
+
pytcl/dynamic_estimation/__init__.py,sha256=zxmkZIXVfHPv5AHYpQV5nwsI0PA3m-Vw7W0gkJE7j98,5191
|
|
57
|
+
pytcl/dynamic_estimation/gaussian_sum_filter.py,sha256=rxUy_WapTL_pkGimD01DqYE7fElLS_DljnX2yg95Uts,13620
|
|
58
|
+
pytcl/dynamic_estimation/imm.py,sha256=RLSFPTMDsudxSf9Mh6Q5qD852tq9lRoCTvFCGphezhs,22152
|
|
59
59
|
pytcl/dynamic_estimation/information_filter.py,sha256=x7iQwO_iJT1dCSvDws5LqD3yAtjw9QVGUfMPcXn1IA4,17349
|
|
60
|
-
pytcl/dynamic_estimation/rbpf.py,sha256=
|
|
60
|
+
pytcl/dynamic_estimation/rbpf.py,sha256=CaKSD2TC1sxICnHuN1W2v2S7P-Kxi4lxdy4KRq2We3w,17898
|
|
61
61
|
pytcl/dynamic_estimation/smoothers.py,sha256=x2j-nR--EI5JNZvMywPeDHcrfW8b5PYK0DCU4Rmig_g,18914
|
|
62
62
|
pytcl/dynamic_estimation/batch_estimation/__init__.py,sha256=JQ0s76Enov5a7plA4EnUua4t-7etikQrwr5z4WIjUeo,46
|
|
63
|
-
pytcl/dynamic_estimation/kalman/__init__.py,sha256=
|
|
64
|
-
pytcl/dynamic_estimation/kalman/constrained.py,sha256=
|
|
65
|
-
pytcl/dynamic_estimation/kalman/extended.py,sha256=
|
|
66
|
-
pytcl/dynamic_estimation/kalman/h_infinity.py,sha256=
|
|
63
|
+
pytcl/dynamic_estimation/kalman/__init__.py,sha256=lR-OacfZ5mqnAboEbOel5w_WS_Gmz-1q0l4meKfQsGs,3163
|
|
64
|
+
pytcl/dynamic_estimation/kalman/constrained.py,sha256=Zidzz6_9OvwUyQppEltdmYTMvEeqRKFRkVMwx1TASuw,10960
|
|
65
|
+
pytcl/dynamic_estimation/kalman/extended.py,sha256=fxi2-oq8qxnxZqPmjB8-Am03z6_F_R90wwFcOIEk_dg,10459
|
|
66
|
+
pytcl/dynamic_estimation/kalman/h_infinity.py,sha256=rtbYiryJbxzko-CIdNJSHuWXU2wI9T52YGBYq3o92sE,16563
|
|
67
67
|
pytcl/dynamic_estimation/kalman/linear.py,sha256=1Zgg9gZya0Vxs9im7sPUqLj0Luo463vS-RSa6GCReFI,12248
|
|
68
|
-
pytcl/dynamic_estimation/kalman/square_root.py,sha256=
|
|
69
|
-
pytcl/dynamic_estimation/kalman/sr_ukf.py,sha256=
|
|
70
|
-
pytcl/dynamic_estimation/kalman/ud_filter.py,sha256=
|
|
71
|
-
pytcl/dynamic_estimation/kalman/unscented.py,sha256=
|
|
68
|
+
pytcl/dynamic_estimation/kalman/square_root.py,sha256=pDEDstYIQht5e7ahD6x13UfSVIUWMe4jRR4z6j687vw,13457
|
|
69
|
+
pytcl/dynamic_estimation/kalman/sr_ukf.py,sha256=xlKRML6QOHD99P-urIeBZsBDc_DY1_U73W3eDkiqRRY,8737
|
|
70
|
+
pytcl/dynamic_estimation/kalman/ud_filter.py,sha256=j56gw-piKJaMtoHWRkr2MiBjOC9tGSguIgFregOMJOs,10269
|
|
71
|
+
pytcl/dynamic_estimation/kalman/unscented.py,sha256=G3Ks6fa_Z-MxUdOEiiHqQ1wYJzOgfuipiP32at6Mv8o,15505
|
|
72
72
|
pytcl/dynamic_estimation/measurement_update/__init__.py,sha256=8rlyJwVpxf0fZj-AFo1hlewvryZRhUzcy3F8uMe6I8c,48
|
|
73
73
|
pytcl/dynamic_estimation/particle_filters/__init__.py,sha256=-DRF5rVF2749suLlArmkTvVkqeMcV_mIx0eLeTj6wNU,906
|
|
74
|
-
pytcl/dynamic_estimation/particle_filters/bootstrap.py,sha256=
|
|
74
|
+
pytcl/dynamic_estimation/particle_filters/bootstrap.py,sha256=6KSLZROxfrldExpDL1GaGhd75IXO5KA8iC-kmhuUBkg,13531
|
|
75
75
|
pytcl/dynamic_models/__init__.py,sha256=Cd8MyyYuB8gMnepkPA-HSwTaKFPThnqoKOhdjVOsXWg,2783
|
|
76
76
|
pytcl/dynamic_models/continuous_time/__init__.py,sha256=dAkfEddLkfMvDalK9v2GRBvaZV1KgqYpFBLOnoiFClw,1023
|
|
77
77
|
pytcl/dynamic_models/continuous_time/dynamics.py,sha256=CDwqn-66eUwXA5xfIjaG6A4EDBqtOyQ3aWarJr9QH4g,12858
|
|
@@ -87,50 +87,50 @@ pytcl/gravity/__init__.py,sha256=5xNdQSrrkt7-1-JPOYqR38CqvNJ7qKlPyMK36DGm6-I,369
|
|
|
87
87
|
pytcl/gravity/clenshaw.py,sha256=1BdxzU8IfGGd68H_U35soIJkiOHphY35e9mLElhPTOg,15364
|
|
88
88
|
pytcl/gravity/egm.py,sha256=47I8nyXNhXUKPkufXahs4JGsBcqhM-9z2xGz0X4JPmU,18422
|
|
89
89
|
pytcl/gravity/models.py,sha256=rdY3Do4M1eRFO74gu3xy-bBn7tox3zM49wYbfnsIQWw,11159
|
|
90
|
-
pytcl/gravity/spherical_harmonics.py,sha256=
|
|
91
|
-
pytcl/gravity/tides.py,sha256=
|
|
90
|
+
pytcl/gravity/spherical_harmonics.py,sha256=FV_cFp0lx6uGw-dxNFRpehaAn28QImX9z7PFdyRbEJI,16549
|
|
91
|
+
pytcl/gravity/tides.py,sha256=nu9_L12aBd2EpmTMh3UulmYCUxQ9wC4kOpdSIn7f0Z8,27785
|
|
92
92
|
pytcl/magnetism/__init__.py,sha256=pBASOzCPHNnYqUH_XDEblhGtjz50vY9uW2KS25A0zQQ,2701
|
|
93
|
-
pytcl/magnetism/emm.py,sha256=
|
|
93
|
+
pytcl/magnetism/emm.py,sha256=iIdxSL0uGGIf8nfA-c_SmHvg9_J7HwRA2-qbQIUW6IE,22380
|
|
94
94
|
pytcl/magnetism/igrf.py,sha256=3g0PsH8IdbwQQS28OR5XWD-g-QxvfUva7jOkKToxndQ,13384
|
|
95
|
-
pytcl/magnetism/wmm.py,sha256=
|
|
95
|
+
pytcl/magnetism/wmm.py,sha256=7YsxnBmxeH5WnTTZ3VE91gr55Qq-OvVmBRAMbqlhGVg,23479
|
|
96
96
|
pytcl/mathematical_functions/__init__.py,sha256=zeJ1ffRRl83k2NHn3HTn-fgtFoWNPq6LCALc3xRo4Do,3767
|
|
97
97
|
pytcl/mathematical_functions/basic_matrix/__init__.py,sha256=kZv3kMAEHBdVxhbyMxTyM0s-4XJP1tK6po82UsIE4tc,1318
|
|
98
98
|
pytcl/mathematical_functions/basic_matrix/decompositions.py,sha256=PWJsFDiXM2T78RHdxBJZPFnl8kFbNZQpHrbpw0mhE00,12268
|
|
99
99
|
pytcl/mathematical_functions/basic_matrix/special_matrices.py,sha256=kOozwP2CHAj4qyO7Z9ct6GwDMkmHkk1bQa0e9G98FgA,13499
|
|
100
100
|
pytcl/mathematical_functions/combinatorics/__init__.py,sha256=byuHI0WkxOkQF8egrfjEr-awB2visWDXlGMnDux5IBg,1043
|
|
101
|
-
pytcl/mathematical_functions/combinatorics/combinatorics.py,sha256=
|
|
101
|
+
pytcl/mathematical_functions/combinatorics/combinatorics.py,sha256=LzVxY3E5_pnpVl9XlcRdQjWhSSY8Fa1JUVYA6J25fro,12354
|
|
102
102
|
pytcl/mathematical_functions/continuous_optimization/__init__.py,sha256=lck60eeCUOsRpEzPHBY3kiLKwNz_fhmYoUGP3lTmTwk,55
|
|
103
103
|
pytcl/mathematical_functions/geometry/__init__.py,sha256=DhCmux9-6zxYRzlhQ9du18kvUL-leiiZwdd3Cmb5WX0,1092
|
|
104
|
-
pytcl/mathematical_functions/geometry/geometry.py,sha256=
|
|
104
|
+
pytcl/mathematical_functions/geometry/geometry.py,sha256=iLKqTlLEGm8IScEDHEWOBQz5xfj-fflzIOzZaJ8fPtE,16522
|
|
105
105
|
pytcl/mathematical_functions/interpolation/__init__.py,sha256=lK4Rs0Ds_fzf9q0n6id5epdN0U8V7yD87dS-w1hvN8I,741
|
|
106
106
|
pytcl/mathematical_functions/interpolation/interpolation.py,sha256=2cXMDgWBjWDGHnK1K_lawFlJL8oPl5AQGf9MNgsESfo,12610
|
|
107
107
|
pytcl/mathematical_functions/numerical_integration/__init__.py,sha256=iXiHzyV_KIhCv7tXErXlN1_fUEACN6yN3CYDHRA7esw,974
|
|
108
|
-
pytcl/mathematical_functions/numerical_integration/quadrature.py,sha256=
|
|
108
|
+
pytcl/mathematical_functions/numerical_integration/quadrature.py,sha256=3MwNCjdMfopgtJjXWxn-q9VyawI1IArkNBXqa_kRMj4,15716
|
|
109
109
|
pytcl/mathematical_functions/polynomials/__init__.py,sha256=WJWZcoQhnvy5f59-kncMTgD9mCtgwfDgULvDYYHS5ys,43
|
|
110
110
|
pytcl/mathematical_functions/signal_processing/__init__.py,sha256=_SzzBVtxmSvP8FKeogRdNmFo8FOVDDoexVOqd-lE7do,2325
|
|
111
|
-
pytcl/mathematical_functions/signal_processing/detection.py,sha256=
|
|
112
|
-
pytcl/mathematical_functions/signal_processing/filters.py,sha256=
|
|
113
|
-
pytcl/mathematical_functions/signal_processing/matched_filter.py,sha256=
|
|
111
|
+
pytcl/mathematical_functions/signal_processing/detection.py,sha256=1Uok0p82t2zB7BWZB6GEkUCwuoM3WB8SRykTrVRdsIo,30612
|
|
112
|
+
pytcl/mathematical_functions/signal_processing/filters.py,sha256=xiB8VSFqTFkBCAom0yIWw7pK3Zjm6l-VZ_DAtwJMxFA,23676
|
|
113
|
+
pytcl/mathematical_functions/signal_processing/matched_filter.py,sha256=El7XcUbunmXA7s-btXX_R4fgNx8d6QNa86GJETg4zAQ,23134
|
|
114
114
|
pytcl/mathematical_functions/special_functions/__init__.py,sha256=AJBCKj32daQxdahUQckW0bWowzOoapxni2eZnVXERdg,3859
|
|
115
|
-
pytcl/mathematical_functions/special_functions/bessel.py,sha256=
|
|
116
|
-
pytcl/mathematical_functions/special_functions/debye.py,sha256=
|
|
115
|
+
pytcl/mathematical_functions/special_functions/bessel.py,sha256=Xe62y2vrDwdJy3fR4U8_e8TAgisXIWJ94J7wu_xk0kI,14603
|
|
116
|
+
pytcl/mathematical_functions/special_functions/debye.py,sha256=eH7Y5qq5j-AMKKx7y8uMS_l_pb6z9_3SG6Igvnc1Fdg,9626
|
|
117
117
|
pytcl/mathematical_functions/special_functions/elliptic.py,sha256=WyzBkrfZufIR5dUmCKGcxp6KNpVDrU89NGLDyRrZOqQ,7418
|
|
118
|
-
pytcl/mathematical_functions/special_functions/error_functions.py,sha256=
|
|
119
|
-
pytcl/mathematical_functions/special_functions/gamma_functions.py,sha256=
|
|
120
|
-
pytcl/mathematical_functions/special_functions/hypergeometric.py,sha256=
|
|
118
|
+
pytcl/mathematical_functions/special_functions/error_functions.py,sha256=24-XRcAW-KF6ixEU5V7iB7brD8UVPPQ0b4Zz8gscRdw,6321
|
|
119
|
+
pytcl/mathematical_functions/special_functions/gamma_functions.py,sha256=XB7NHVgKzOEVKpUScqvG3L220bvwIRuUnm_ayO7lJRk,10243
|
|
120
|
+
pytcl/mathematical_functions/special_functions/hypergeometric.py,sha256=mCBf5NPl0mOkwvIwAUp-sbXshin5HyGsdqEeGbYt3wQ,11428
|
|
121
121
|
pytcl/mathematical_functions/special_functions/lambert_w.py,sha256=ivRc4KH5Lwoxb_yijrJEwG0ITa0hhcYF7_gCfVBBNW4,6855
|
|
122
122
|
pytcl/mathematical_functions/special_functions/marcum_q.py,sha256=OZ5QjIB1e_XvRG8A-3dbZ13YXHtdk2EYVEPaqtgVr14,9580
|
|
123
123
|
pytcl/mathematical_functions/statistics/__init__.py,sha256=dfypStgmnFmOrnWcm-3CEvLinONHraFgx9O66_37bqw,1278
|
|
124
124
|
pytcl/mathematical_functions/statistics/distributions.py,sha256=icfFIIKCEFzkpFHuYGWL197nm8wvS7UPJlr9kd_uEgw,19373
|
|
125
125
|
pytcl/mathematical_functions/statistics/estimators.py,sha256=TLnYXSwk5MzBakZrzDBupbOB3ONmJI7q1-oB2xuSVQM,10831
|
|
126
126
|
pytcl/mathematical_functions/transforms/__init__.py,sha256=SPXSKHjqR6B_8pvgtbtOnEiCpU-u0JF2s7hAlhb0BbI,2343
|
|
127
|
-
pytcl/mathematical_functions/transforms/fourier.py,sha256=
|
|
128
|
-
pytcl/mathematical_functions/transforms/stft.py,sha256=
|
|
129
|
-
pytcl/mathematical_functions/transforms/wavelets.py,sha256=
|
|
127
|
+
pytcl/mathematical_functions/transforms/fourier.py,sha256=yD1CcH7sdPlrOmBgL7JoMiPNgN8ee7bTwvblgRRf7l4,20823
|
|
128
|
+
pytcl/mathematical_functions/transforms/stft.py,sha256=olDzNH02Nta5GoeEdsdX1tTVKODr6OxLEYt_h3ZtMgA,18878
|
|
129
|
+
pytcl/mathematical_functions/transforms/wavelets.py,sha256=g7ra-uk-HnQmJRCj1VvJuuz8t8FW55kCENUkx0vPrP4,21807
|
|
130
130
|
pytcl/misc/__init__.py,sha256=SCHf_lQVfdl2gwUluHBiIloTF8HRH8EkgYfbNr7zOug,33
|
|
131
131
|
pytcl/navigation/__init__.py,sha256=k1_x_FnnPrIzGeNu7zejPtPubIhweBgCfwqlZJEMw0I,6042
|
|
132
|
-
pytcl/navigation/geodesy.py,sha256=
|
|
133
|
-
pytcl/navigation/great_circle.py,sha256=
|
|
132
|
+
pytcl/navigation/geodesy.py,sha256=zrpFhPFLr3N1byeE1pxXh-SmPixjuuoGK3_izEnAAdw,19719
|
|
133
|
+
pytcl/navigation/great_circle.py,sha256=u8iqMV6RNsAyzATzjJU11QFGA2pGEaiFJRakQwxTTs0,23326
|
|
134
134
|
pytcl/navigation/ins.py,sha256=OIi8_RjrgEYl0MFpJEFMjIlpgX8DYGTEhdLEvqG-ABU,31151
|
|
135
135
|
pytcl/navigation/ins_gnss.py,sha256=euKF5JGgwmVBsw3jBf7_wa2z1BpZeVbSNmBuwzhGS6c,30157
|
|
136
136
|
pytcl/navigation/rhumb.py,sha256=lr1c3iEXfoOSfIyyXSRWv6He5TlaxEHbJy-dhqM1gRw,18224
|
|
@@ -139,27 +139,27 @@ pytcl/performance_evaluation/estimation_metrics.py,sha256=X1ZCpp8m6DV14N2wbMvlRw
|
|
|
139
139
|
pytcl/performance_evaluation/track_metrics.py,sha256=Nd3royJkAelZV-Qggl8i72e7WocCxWomgliArvVAEkc,13342
|
|
140
140
|
pytcl/physical_values/__init__.py,sha256=SGbg6b0d4dWebE3baW4OlJshL00grG5E4wABw6jxl20,44
|
|
141
141
|
pytcl/plotting/__init__.py,sha256=YtYnKYHL5lN6EaT_bwwR3h89NW0HSMToIWHhHBxcidY,3126
|
|
142
|
-
pytcl/plotting/coordinates.py,sha256=
|
|
142
|
+
pytcl/plotting/coordinates.py,sha256=lTNBwlq_4hnQx_w6RIX6X35Ke3YMFvqV_huJrcFCvNs,17362
|
|
143
143
|
pytcl/plotting/ellipses.py,sha256=bcns6dfNK4bwA_QBshscYhbAz_5wegwyqjDzzoUdWsQ,12465
|
|
144
144
|
pytcl/plotting/metrics.py,sha256=zbJr5P2kQg7-rGpGHsN7rC02S0JLOpPUZeoscQem7uQ,18148
|
|
145
|
-
pytcl/plotting/tracks.py,sha256=
|
|
145
|
+
pytcl/plotting/tracks.py,sha256=3V_78oPEGi7lsTNk-lhYRffXWNHH0-Lj2oNw2HIKRJQ,23054
|
|
146
146
|
pytcl/scheduling/__init__.py,sha256=jTqMSKcsCrWU_Fh6WaT6BW5WatNHyyEYjFbsv6X18Oc,39
|
|
147
147
|
pytcl/static_estimation/__init__.py,sha256=sSEhqq35jq_MpRLnBtWjKXwGZ9dqIw71iwji-TNwXmc,2222
|
|
148
148
|
pytcl/static_estimation/least_squares.py,sha256=8ouOyRGC7K-W8fynZMWlc2-KAFojvTbuzcqi5uS_sVA,13432
|
|
149
|
-
pytcl/static_estimation/maximum_likelihood.py,sha256=
|
|
150
|
-
pytcl/static_estimation/robust.py,sha256=
|
|
149
|
+
pytcl/static_estimation/maximum_likelihood.py,sha256=nt1WShfZ0PlT_eA4gu2WcLiz9zZO9r90m_1PhWqDDgY,21821
|
|
150
|
+
pytcl/static_estimation/robust.py,sha256=mpDUcc3-8F42SVGxXMv20huzekoGWattAa4px9tAZNM,18623
|
|
151
151
|
pytcl/terrain/__init__.py,sha256=e7plNQI5Y_jpZ24r82AgqdX0ChmmyYoeT7HReclnGXc,3228
|
|
152
152
|
pytcl/terrain/dem.py,sha256=rg2o0h0ZDrfxvtYhnE2A5tdzRnCmqcihu4w1uNJdH3Y,20814
|
|
153
|
-
pytcl/terrain/loaders.py,sha256=
|
|
153
|
+
pytcl/terrain/loaders.py,sha256=FGRnyzKh03LrpXICocbIK3MhTW7o9nsVvsm3iuIUqK4,27066
|
|
154
154
|
pytcl/terrain/visibility.py,sha256=nIJr9AVk7C8GCpJV4UDvUjhmAieycWD8BLepAMUBMIQ,22739
|
|
155
155
|
pytcl/trackers/__init__.py,sha256=Gw79xlSIUzdPV8bN1slNWUlGxE3d-NsVmbMygkYVV20,1151
|
|
156
|
-
pytcl/trackers/hypothesis.py,sha256=
|
|
157
|
-
pytcl/trackers/mht.py,sha256=
|
|
158
|
-
pytcl/trackers/multi_target.py,sha256=
|
|
156
|
+
pytcl/trackers/hypothesis.py,sha256=ubK-q89cYayahSHIw5sVYD1fpRUEB0XvC6rQnI1WACA,17361
|
|
157
|
+
pytcl/trackers/mht.py,sha256=osEOXMaCeTt1eVn_E08dLRhEvBroVmf8b81zO5Zp1lU,20720
|
|
158
|
+
pytcl/trackers/multi_target.py,sha256=RDITa0xnbgtVYAMj5XXp4lljo5lZ2zAAc02KZlOjxbQ,10526
|
|
159
159
|
pytcl/trackers/single_target.py,sha256=Yy3FwaNTArMWcaod-0HVeiioNV4xLWxNDn_7ZPVqQYs,6562
|
|
160
160
|
pytcl/transponders/__init__.py,sha256=5fL4u3lKCYgPLo5uFeuZbtRZkJPABntuKYGUvVgMMEI,41
|
|
161
|
-
nrl_tracker-1.7.
|
|
162
|
-
nrl_tracker-1.7.
|
|
163
|
-
nrl_tracker-1.7.
|
|
164
|
-
nrl_tracker-1.7.
|
|
165
|
-
nrl_tracker-1.7.
|
|
161
|
+
nrl_tracker-1.7.3.dist-info/LICENSE,sha256=rB5G4WppIIUzMOYr2N6uyYlNJ00hRJqE5tie6BMvYuE,1612
|
|
162
|
+
nrl_tracker-1.7.3.dist-info/METADATA,sha256=2b_C6p-mb6WUbVQf8Hm2CPi6jpJtzWKc09bkPsUZw3c,12452
|
|
163
|
+
nrl_tracker-1.7.3.dist-info/WHEEL,sha256=pL8R0wFFS65tNSRnaOVrsw9EOkOqxLrlUPenUYnJKNo,91
|
|
164
|
+
nrl_tracker-1.7.3.dist-info/top_level.txt,sha256=17megxcrTPBWwPZTh6jTkwTKxX7No-ZqRpyvElnnO-s,6
|
|
165
|
+
nrl_tracker-1.7.3.dist-info/RECORD,,
|
pytcl/__init__.py
CHANGED
|
@@ -20,7 +20,7 @@ References
|
|
|
20
20
|
no. 5, pp. 18-27, May 2017.
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
|
-
__version__ = "1.
|
|
23
|
+
__version__ = "1.7.3"
|
|
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,
|
|
@@ -51,21 +66,6 @@ from pytcl.assignment_algorithms.two_dimensional import (
|
|
|
51
66
|
murty,
|
|
52
67
|
ranked_assignments,
|
|
53
68
|
)
|
|
54
|
-
from pytcl.assignment_algorithms.nd_assignment import (
|
|
55
|
-
AssignmentNDResult,
|
|
56
|
-
auction_assignment_nd,
|
|
57
|
-
detect_dimension_conflicts,
|
|
58
|
-
greedy_assignment_nd,
|
|
59
|
-
relaxation_assignment_nd,
|
|
60
|
-
validate_cost_tensor,
|
|
61
|
-
)
|
|
62
|
-
from pytcl.assignment_algorithms.network_flow import (
|
|
63
|
-
FlowStatus,
|
|
64
|
-
MinCostFlowResult,
|
|
65
|
-
assignment_to_flow_network,
|
|
66
|
-
min_cost_assignment_via_flow,
|
|
67
|
-
min_cost_flow_successive_shortest_paths,
|
|
68
|
-
)
|
|
69
69
|
|
|
70
70
|
__all__ = [
|
|
71
71
|
# 2D Assignment
|
|
@@ -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.
|