nrl-tracker 0.21.5__py3-none-any.whl → 0.22.0__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-0.21.5.dist-info → nrl_tracker-0.22.0.dist-info}/METADATA +2 -2
- nrl_tracker-0.22.0.dist-info/RECORD +150 -0
- pytcl/__init__.py +9 -11
- pytcl/assignment_algorithms/__init__.py +32 -42
- pytcl/assignment_algorithms/data_association.py +9 -10
- pytcl/assignment_algorithms/gating.py +7 -5
- pytcl/assignment_algorithms/jpda.py +10 -14
- pytcl/assignment_algorithms/three_dimensional/__init__.py +6 -8
- pytcl/assignment_algorithms/three_dimensional/assignment.py +6 -2
- pytcl/assignment_algorithms/two_dimensional/__init__.py +9 -13
- pytcl/assignment_algorithms/two_dimensional/assignment.py +5 -2
- pytcl/assignment_algorithms/two_dimensional/kbest.py +9 -9
- pytcl/astronomical/__init__.py +130 -89
- pytcl/astronomical/ephemerides.py +524 -0
- pytcl/astronomical/lambert.py +6 -15
- pytcl/astronomical/orbital_mechanics.py +1 -3
- pytcl/astronomical/reference_frames.py +1 -3
- pytcl/astronomical/relativity.py +466 -0
- pytcl/astronomical/time_systems.py +2 -1
- pytcl/atmosphere/__init__.py +12 -14
- pytcl/atmosphere/models.py +5 -5
- pytcl/clustering/__init__.py +28 -36
- pytcl/clustering/dbscan.py +5 -2
- pytcl/clustering/gaussian_mixture.py +10 -10
- pytcl/clustering/hierarchical.py +7 -7
- pytcl/clustering/kmeans.py +7 -5
- pytcl/containers/__init__.py +29 -43
- pytcl/containers/cluster_set.py +13 -20
- pytcl/containers/covertree.py +8 -2
- pytcl/containers/kd_tree.py +6 -2
- pytcl/containers/measurement_set.py +11 -16
- pytcl/containers/rtree.py +8 -7
- pytcl/containers/track_list.py +13 -13
- pytcl/containers/vptree.py +7 -2
- pytcl/coordinate_systems/__init__.py +69 -74
- pytcl/coordinate_systems/conversions/__init__.py +20 -24
- pytcl/coordinate_systems/conversions/geodetic.py +7 -17
- pytcl/coordinate_systems/conversions/spherical.py +4 -2
- pytcl/coordinate_systems/jacobians/__init__.py +10 -12
- pytcl/coordinate_systems/jacobians/jacobians.py +2 -1
- pytcl/coordinate_systems/projections/__init__.py +27 -23
- pytcl/coordinate_systems/projections/projections.py +14 -39
- pytcl/coordinate_systems/rotations/__init__.py +20 -22
- pytcl/coordinate_systems/rotations/rotations.py +3 -4
- pytcl/core/__init__.py +16 -22
- pytcl/core/array_utils.py +7 -7
- pytcl/core/constants.py +1 -3
- pytcl/core/validation.py +13 -19
- pytcl/dynamic_estimation/__init__.py +77 -86
- pytcl/dynamic_estimation/imm.py +10 -15
- pytcl/dynamic_estimation/information_filter.py +8 -6
- pytcl/dynamic_estimation/kalman/__init__.py +40 -48
- pytcl/dynamic_estimation/kalman/extended.py +4 -5
- pytcl/dynamic_estimation/kalman/linear.py +7 -3
- pytcl/dynamic_estimation/kalman/square_root.py +7 -8
- pytcl/dynamic_estimation/kalman/unscented.py +8 -6
- pytcl/dynamic_estimation/particle_filters/__init__.py +12 -14
- pytcl/dynamic_estimation/particle_filters/bootstrap.py +8 -8
- pytcl/dynamic_estimation/smoothers.py +9 -10
- pytcl/dynamic_models/__init__.py +37 -41
- pytcl/dynamic_models/continuous_time/__init__.py +11 -11
- pytcl/dynamic_models/continuous_time/dynamics.py +4 -2
- pytcl/dynamic_models/discrete_time/__init__.py +11 -17
- pytcl/dynamic_models/process_noise/__init__.py +11 -17
- pytcl/dynamic_models/process_noise/polynomial.py +2 -6
- pytcl/gravity/__init__.py +55 -65
- pytcl/gravity/clenshaw.py +4 -7
- pytcl/gravity/egm.py +9 -6
- pytcl/gravity/models.py +1 -3
- pytcl/gravity/spherical_harmonics.py +6 -11
- pytcl/gravity/tides.py +9 -17
- pytcl/magnetism/__init__.py +26 -36
- pytcl/magnetism/emm.py +7 -13
- pytcl/magnetism/igrf.py +5 -6
- pytcl/magnetism/wmm.py +4 -10
- pytcl/mathematical_functions/__init__.py +69 -87
- pytcl/mathematical_functions/basic_matrix/__init__.py +25 -19
- pytcl/mathematical_functions/basic_matrix/decompositions.py +6 -5
- pytcl/mathematical_functions/basic_matrix/special_matrices.py +2 -1
- pytcl/mathematical_functions/combinatorics/__init__.py +18 -14
- pytcl/mathematical_functions/combinatorics/combinatorics.py +5 -4
- pytcl/mathematical_functions/geometry/__init__.py +15 -15
- pytcl/mathematical_functions/geometry/geometry.py +10 -15
- pytcl/mathematical_functions/interpolation/__init__.py +11 -13
- pytcl/mathematical_functions/interpolation/interpolation.py +8 -5
- pytcl/mathematical_functions/numerical_integration/__init__.py +16 -10
- pytcl/mathematical_functions/numerical_integration/quadrature.py +6 -2
- pytcl/mathematical_functions/signal_processing/__init__.py +42 -30
- pytcl/mathematical_functions/signal_processing/detection.py +9 -9
- pytcl/mathematical_functions/signal_processing/filters.py +7 -8
- pytcl/mathematical_functions/signal_processing/matched_filter.py +8 -7
- pytcl/mathematical_functions/special_functions/__init__.py +75 -77
- pytcl/mathematical_functions/special_functions/bessel.py +2 -1
- pytcl/mathematical_functions/special_functions/debye.py +4 -2
- pytcl/mathematical_functions/special_functions/elliptic.py +3 -4
- pytcl/mathematical_functions/special_functions/error_functions.py +2 -1
- pytcl/mathematical_functions/special_functions/gamma_functions.py +3 -4
- pytcl/mathematical_functions/special_functions/hypergeometric.py +2 -1
- pytcl/mathematical_functions/special_functions/lambert_w.py +3 -4
- pytcl/mathematical_functions/special_functions/marcum_q.py +2 -1
- pytcl/mathematical_functions/statistics/__init__.py +27 -31
- pytcl/mathematical_functions/statistics/distributions.py +21 -40
- pytcl/mathematical_functions/statistics/estimators.py +3 -4
- pytcl/mathematical_functions/transforms/__init__.py +45 -51
- pytcl/mathematical_functions/transforms/fourier.py +5 -2
- pytcl/mathematical_functions/transforms/stft.py +8 -11
- pytcl/mathematical_functions/transforms/wavelets.py +13 -20
- pytcl/navigation/__init__.py +96 -102
- pytcl/navigation/geodesy.py +13 -33
- pytcl/navigation/great_circle.py +7 -13
- pytcl/navigation/ins.py +12 -16
- pytcl/navigation/ins_gnss.py +24 -37
- pytcl/navigation/rhumb.py +7 -12
- pytcl/performance_evaluation/__init__.py +21 -25
- pytcl/performance_evaluation/estimation_metrics.py +3 -1
- pytcl/performance_evaluation/track_metrics.py +4 -4
- pytcl/plotting/__init__.py +30 -38
- pytcl/plotting/coordinates.py +8 -18
- pytcl/plotting/ellipses.py +5 -2
- pytcl/plotting/metrics.py +5 -10
- pytcl/plotting/tracks.py +7 -12
- pytcl/static_estimation/__init__.py +37 -41
- pytcl/static_estimation/least_squares.py +5 -4
- pytcl/static_estimation/maximum_likelihood.py +8 -5
- pytcl/static_estimation/robust.py +5 -2
- pytcl/terrain/__init__.py +28 -34
- pytcl/terrain/dem.py +6 -9
- pytcl/terrain/loaders.py +9 -14
- pytcl/terrain/visibility.py +4 -8
- pytcl/trackers/__init__.py +17 -25
- pytcl/trackers/hypothesis.py +8 -8
- pytcl/trackers/mht.py +18 -24
- pytcl/trackers/multi_target.py +8 -6
- pytcl/trackers/single_target.py +5 -2
- nrl_tracker-0.21.5.dist-info/RECORD +0 -148
- {nrl_tracker-0.21.5.dist-info → nrl_tracker-0.22.0.dist-info}/LICENSE +0 -0
- {nrl_tracker-0.21.5.dist-info → nrl_tracker-0.22.0.dist-info}/WHEEL +0 -0
- {nrl_tracker-0.21.5.dist-info → nrl_tracker-0.22.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: nrl-tracker
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.22.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
|
|
@@ -60,7 +60,7 @@ Requires-Dist: plotly>=5.15.0; extra == "visualization"
|
|
|
60
60
|
|
|
61
61
|
# Tracker Component Library (Python)
|
|
62
62
|
|
|
63
|
-
[](https://pypi.org/project/nrl-tracker/)
|
|
64
64
|
[](https://www.python.org/downloads/)
|
|
65
65
|
[](https://en.wikipedia.org/wiki/Public_domain)
|
|
66
66
|
[](https://github.com/psf/black)
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
pytcl/__init__.py,sha256=jxw8skUqYrZAPbMTL0rb5eUCY2hVXundN2Yuo6vnHcs,1976
|
|
2
|
+
pytcl/assignment_algorithms/__init__.py,sha256=4du24kCRIaM8y1vfVK6WEg2jreYl2xfviXc3BLcoKeY,3382
|
|
3
|
+
pytcl/assignment_algorithms/data_association.py,sha256=3CxLPNibzDQroK7V9N0Qj-JhHlVu8q2Ple8BycBOCWY,11511
|
|
4
|
+
pytcl/assignment_algorithms/gating.py,sha256=saUFfHiiis5he6K9gLrqVNyj0bi9ggs4wXoyJaUyns0,10857
|
|
5
|
+
pytcl/assignment_algorithms/jpda.py,sha256=4GkLwMVG21w5-oBq0V0cXJgNY1ZbacoMfDm4JPTwgfg,19570
|
|
6
|
+
pytcl/assignment_algorithms/three_dimensional/__init__.py,sha256=tDnpdMGe-l-GnastUGaBKuFqcWZRPMsw29Tge5W2b00,837
|
|
7
|
+
pytcl/assignment_algorithms/three_dimensional/assignment.py,sha256=n5nqv-zA7ISwoYVpvdALftw797FXwXlanDRgracYY1M,19290
|
|
8
|
+
pytcl/assignment_algorithms/two_dimensional/__init__.py,sha256=3e__m1GaQRUqQ3sDonKmbcS0CmSjAZF0IkZ7cjIrmJc,1179
|
|
9
|
+
pytcl/assignment_algorithms/two_dimensional/assignment.py,sha256=z6_-i4zE4rmll2pvXYxJsyqzjLEeqRmJImCNhQuuVUY,11908
|
|
10
|
+
pytcl/assignment_algorithms/two_dimensional/kbest.py,sha256=AZvmixjrrNHyQYiOfrn7yDUA6k1SrREAWLU6AMlwREI,17393
|
|
11
|
+
pytcl/astronomical/__init__.py,sha256=fzrArytZ74sZmiu1PJYdjBzzxGI3HPf3ZW7_UNXmBh4,10809
|
|
12
|
+
pytcl/astronomical/ephemerides.py,sha256=ULUIN2bEP_XNSL3bI6GYYdQEmlX1Ac8W9TuonzEn_pA,16433
|
|
13
|
+
pytcl/astronomical/lambert.py,sha256=FWGI-qk8LEEOS5TLagex0VAodkgDce67gM-9JKgC0ew,15511
|
|
14
|
+
pytcl/astronomical/orbital_mechanics.py,sha256=f3Vqn2bWzxbMQO60SlHXf3515j3LSA2fd_MHZE5z5h0,19951
|
|
15
|
+
pytcl/astronomical/reference_frames.py,sha256=R_bdfXYYoeNjgYU1deIynB0IBjpy4xc9Tlq8Q4W9FKc,15783
|
|
16
|
+
pytcl/astronomical/relativity.py,sha256=cqMR0oZJXNXYiEwnC8QrABkAAcu4c8MLoX74iNpZwfM,15418
|
|
17
|
+
pytcl/astronomical/time_systems.py,sha256=l8WhVUnONcKHOUIvzIC_3F76saKSUD4k7NtKAd9AdFY,15261
|
|
18
|
+
pytcl/atmosphere/__init__.py,sha256=ISr8E7gZMOfVZTOMZxoC-T_xRWkm5DbVffcFdjt4yV4,1038
|
|
19
|
+
pytcl/atmosphere/models.py,sha256=oLrL7TkrBdYxiguZVQ3jN-F99H-cmDoNWhQsvA9syjc,9612
|
|
20
|
+
pytcl/clustering/__init__.py,sha256=zLbKiFHJ2Pp2ccby9akU7GPr4lprG-bMmoOQT8De4yg,2541
|
|
21
|
+
pytcl/clustering/dbscan.py,sha256=c8Lw4pN9T2UNsFFHKQGXJ-eEVhIhl5069H1hU1fJLnA,7424
|
|
22
|
+
pytcl/clustering/gaussian_mixture.py,sha256=qhIXgCJBRe_GyaT1n8SucOFkOqzE5yLXRAagNkbUVyA,22891
|
|
23
|
+
pytcl/clustering/hierarchical.py,sha256=2KdfE6uX5V86UCYM9J_dcPjgUTsRZDk08mewez-Y68k,14234
|
|
24
|
+
pytcl/clustering/kmeans.py,sha256=qHn9_CKP3Vs2-LX2ftNbto1yTpMcMaXazxkKGNKZsyk,10761
|
|
25
|
+
pytcl/containers/__init__.py,sha256=BI2OAOwcGNvIRn-qv3mA6v2eLIFV3_sQbZ8JUTs2zQo,2372
|
|
26
|
+
pytcl/containers/cluster_set.py,sha256=wXdo0MnOg1Csy0zvpZ8T_T4ykcxL-tHVK_8KDNaMikc,22807
|
|
27
|
+
pytcl/containers/covertree.py,sha256=XiwhrGdU1YvO7V9YQjPDFeBmcFZrLwUMI0XMc6G8pXg,13396
|
|
28
|
+
pytcl/containers/kd_tree.py,sha256=YHw6lGExvjboyW-FajVS8qooLytbPQt5-zknvPSTdD8,16426
|
|
29
|
+
pytcl/containers/measurement_set.py,sha256=69BbWYijPHALwaBTuhmO4Idcj3wPih-lCjUL3t6SJao,12750
|
|
30
|
+
pytcl/containers/rtree.py,sha256=hYnn0TNO0bkYopZKPX7nf1h1Zb9GMRdvyPUdri52E1s,15478
|
|
31
|
+
pytcl/containers/track_list.py,sha256=Ao9AsJeJoOH5FEZKJ8vinaXLHnOwPlBecFZnrqFoA-E,12686
|
|
32
|
+
pytcl/containers/vptree.py,sha256=ymq73Jh9cYB6l7XxQM1BUt6oSL-Q5LHw4KsKQA1VBAI,8910
|
|
33
|
+
pytcl/coordinate_systems/__init__.py,sha256=w7vxXkRfW0e2lyeWPaoMNKPX-wuaUKdAoCJODY6bq4g,6609
|
|
34
|
+
pytcl/coordinate_systems/conversions/__init__.py,sha256=adRmpmFqNWZ2HyRORyAL205u-U5SUO7fXlQbQoiGXQ8,2043
|
|
35
|
+
pytcl/coordinate_systems/conversions/geodetic.py,sha256=w18rqueuBHmf5WTdIvuT77BzU9xlAfW76LN1YN1Y5xI,15677
|
|
36
|
+
pytcl/coordinate_systems/conversions/spherical.py,sha256=eaNjXHSz_yRD8JzIA-EKWI4T5zxyAizJ6rjiDw7SdP0,10854
|
|
37
|
+
pytcl/coordinate_systems/jacobians/__init__.py,sha256=vo6vsr90KWCcNBxS4HBXPfD-__G7utqQWtEnZmxL78I,1349
|
|
38
|
+
pytcl/coordinate_systems/jacobians/jacobians.py,sha256=SK5WEzQBmZUvR8c5IFeRRbd_ob3xy7Ne3Tho2v87TZo,11727
|
|
39
|
+
pytcl/coordinate_systems/projections/__init__.py,sha256=esDFJDeqAIb6GZ_7F2sPGpHNMToJVFm0x-w5GggYi24,3744
|
|
40
|
+
pytcl/coordinate_systems/projections/projections.py,sha256=mb0ltQhY-nFaLvl4zkv9AAgLgnMpJGyx2-9cHoBeKw4,32913
|
|
41
|
+
pytcl/coordinate_systems/rotations/__init__.py,sha256=ExgTknD2D8J6Qo2ax5DVJIBJoeQTczFpj6l06JZ7-B0,2026
|
|
42
|
+
pytcl/coordinate_systems/rotations/rotations.py,sha256=6ubSDTMOUKkPdL6gYQ3u-u5T-4XHTO2GScs83gnR0AI,18237
|
|
43
|
+
pytcl/core/__init__.py,sha256=ZInNpPhdQq1ZH82CWfzPCpWMMyy2qIV2OYWw6LqvP6A,1500
|
|
44
|
+
pytcl/core/array_utils.py,sha256=BE2Bi_dWyB-0nMX8n0K_agL3hHfsFgtG5YnQ_5OMV_w,14045
|
|
45
|
+
pytcl/core/constants.py,sha256=v--FHNYH441t2tfZeNpPbTxZDqiyql6ehA9Z3iTsnxw,8687
|
|
46
|
+
pytcl/core/validation.py,sha256=aT-77KuB-7UoTbGnSDsY1yfqKlwnLpSvc7auEMHwXPY,13027
|
|
47
|
+
pytcl/dynamic_estimation/__init__.py,sha256=ji_HhdIy_fTdgsb-meEkRzJxa5Es80OWizsMaFYX3Uo,7536
|
|
48
|
+
pytcl/dynamic_estimation/imm.py,sha256=nhVMSAxce7ZGr7LnGdgutBIIeMIPZEtQgWuFII_BCzo,22119
|
|
49
|
+
pytcl/dynamic_estimation/information_filter.py,sha256=zNzn9JtGU8gR_V5-QFK1MaOy0ei1zYdZ3mmU2kDVZM0,17464
|
|
50
|
+
pytcl/dynamic_estimation/smoothers.py,sha256=0agwW-bQoQkrl2tT_kdxNLY44hmpK_j9ekfjauw8Qco,19060
|
|
51
|
+
pytcl/dynamic_estimation/batch_estimation/__init__.py,sha256=JQ0s76Enov5a7plA4EnUua4t-7etikQrwr5z4WIjUeo,46
|
|
52
|
+
pytcl/dynamic_estimation/kalman/__init__.py,sha256=IXBXQhBx1FjbPKEHb4yEL4Zm9Xix8LIkKU92NIoBCf8,4116
|
|
53
|
+
pytcl/dynamic_estimation/kalman/extended.py,sha256=sXKZBA6tHhBOt7m0Di3bdn1zNIrHb82TH79rWyNS05U,10458
|
|
54
|
+
pytcl/dynamic_estimation/kalman/linear.py,sha256=NCxnPivNuibHK-gGmoleY9H3TxJjIwzkkGqADeh5mGI,12332
|
|
55
|
+
pytcl/dynamic_estimation/kalman/square_root.py,sha256=yw6YCVFqCaJGjra9U6xq53VPJAaVI-iz9d41hVQoJOQ,26931
|
|
56
|
+
pytcl/dynamic_estimation/kalman/unscented.py,sha256=xkEGWkg78h4z5z4SwOXtSF_-AuHFmjIPBU00W-LLPVE,15555
|
|
57
|
+
pytcl/dynamic_estimation/measurement_update/__init__.py,sha256=8rlyJwVpxf0fZj-AFo1hlewvryZRhUzcy3F8uMe6I8c,48
|
|
58
|
+
pytcl/dynamic_estimation/particle_filters/__init__.py,sha256=HyPGYNfs0olYN2gvynGt4PMBiOkhQ2wdTUfdxDur6uw,1546
|
|
59
|
+
pytcl/dynamic_estimation/particle_filters/bootstrap.py,sha256=GXRGwFXY18W_HLWKAA_ZkHl_TR33_2FztmfF4ZqzR7A,13421
|
|
60
|
+
pytcl/dynamic_models/__init__.py,sha256=f_8ZvuwrRM518Ei8LRZt8ttYpZIZVL5njfVVp_FCp2s,4144
|
|
61
|
+
pytcl/dynamic_models/continuous_time/__init__.py,sha256=B3QDkSERVPZAfBK_ozH6oJt4_B81l4IvnelSPSuNtnA,1606
|
|
62
|
+
pytcl/dynamic_models/continuous_time/dynamics.py,sha256=XrSFThlyuV8EzFRAVNCjA2R-RWf1fUYUQFZNn9qlciE,12900
|
|
63
|
+
pytcl/dynamic_models/discrete_time/__init__.py,sha256=NrvBawm6ZnITdn9UM0XzbzTgkxhBfYM68ZKW7_79pZc,1367
|
|
64
|
+
pytcl/dynamic_models/discrete_time/coordinated_turn.py,sha256=jrSGCKiAdXaFIJBLzRyAv0xxxpOHOBnAtDHyu7VYsm8,7206
|
|
65
|
+
pytcl/dynamic_models/discrete_time/polynomial.py,sha256=zv5V-AbuaXlIj36n-YkOEyC74jV2vczxpCW09P0kmi0,5529
|
|
66
|
+
pytcl/dynamic_models/discrete_time/singer.py,sha256=wZS3Nad-YyPZp8Mle8Sf5GgW0-t4TxMRcnbc42HtQnA,3861
|
|
67
|
+
pytcl/dynamic_models/process_noise/__init__.py,sha256=eJIpBai_1FVwLeTnHh6sT1Z0sgaeeXx6PoL3VQmswzw,1351
|
|
68
|
+
pytcl/dynamic_models/process_noise/coordinated_turn.py,sha256=w7bHUImLPL5m3KYenfNgAnHPCRtAyYESbsFc6lQKXRg,4768
|
|
69
|
+
pytcl/dynamic_models/process_noise/polynomial.py,sha256=Rb7LITSZ1kbOnd0Q8TWRdUR_4sl9RCqfcsf0OawJl9U,7574
|
|
70
|
+
pytcl/dynamic_models/process_noise/singer.py,sha256=lsJDT6xOvcS_qQKFtgHX0L7Ukpy4D7HgvPT8Q3I0ibU,3901
|
|
71
|
+
pytcl/gravity/__init__.py,sha256=2slTXTP0pzmu5Vlb2E_cwZo9fOk0lThxsEQvyVC-Xl0,5068
|
|
72
|
+
pytcl/gravity/clenshaw.py,sha256=9h_0YDH-gVrtZSBk2NpqMB3xlNMXmL8Mof28drxmIbg,15338
|
|
73
|
+
pytcl/gravity/egm.py,sha256=5JkAEnVi2rt_m_AZgiaYhmP2xH9ManpUyLu40be1rB0,18155
|
|
74
|
+
pytcl/gravity/models.py,sha256=Vws1dZPt0lqXnF12Y1PZ-YUd3onXMHI8TLxSJrapxxw,11145
|
|
75
|
+
pytcl/gravity/spherical_harmonics.py,sha256=cXpxWZYDc3CDkdootjxKBivG4ajbEcb-Sxc8qEeCUkE,14606
|
|
76
|
+
pytcl/gravity/tides.py,sha256=gpd6FU3xi5WCDYpvTQXwc3XVrdX7mmYk-_fx5nvQVYQ,27681
|
|
77
|
+
pytcl/magnetism/__init__.py,sha256=PkJlZRb1z91mc0nRLgvHtI7ZZ6zqBIS3KZcs3LV8KL8,3079
|
|
78
|
+
pytcl/magnetism/emm.py,sha256=_n7uQsKpGWJe-cQl4n4OiYrP3qofYIv4dKdJUrs2DOk,22184
|
|
79
|
+
pytcl/magnetism/igrf.py,sha256=5EAizmdGjlqO3NO8VQQUtabX3GLtY-0ra8mxiAVMRr4,13447
|
|
80
|
+
pytcl/magnetism/wmm.py,sha256=JHM07r2cEJEaTOULVCZheYqFStMc0GtsX4RoOyyaRcI,15869
|
|
81
|
+
pytcl/mathematical_functions/__init__.py,sha256=kvsg48mLLNgdV_KRlWWy6NBKYZJ25lEWOx1ZQ69Vqzg,6585
|
|
82
|
+
pytcl/mathematical_functions/basic_matrix/__init__.py,sha256=Sx0klQeE2WK2O02NwvQCJqhhQlmqKCcAABARtqhDbLA,2783
|
|
83
|
+
pytcl/mathematical_functions/basic_matrix/decompositions.py,sha256=jmrsOg0vIyErILT_4v2D1H0be3y5m3t_wDati1-EbOY,12298
|
|
84
|
+
pytcl/mathematical_functions/basic_matrix/special_matrices.py,sha256=GsJUYOdjCBx6oeJUtvHD5gpTjUjcCcIjSTvv0HnXlb0,13523
|
|
85
|
+
pytcl/mathematical_functions/combinatorics/__init__.py,sha256=94eOx8cigbVzRxIJGqaTKnE2r5yXpxR0Dgku_u8MzDI,2085
|
|
86
|
+
pytcl/mathematical_functions/combinatorics/combinatorics.py,sha256=E9wKPZr2apH-DEVOgEx6ql8Q82zbJl-s7nbbYo2OvNE,12354
|
|
87
|
+
pytcl/mathematical_functions/continuous_optimization/__init__.py,sha256=lck60eeCUOsRpEzPHBY3kiLKwNz_fhmYoUGP3lTmTwk,55
|
|
88
|
+
pytcl/mathematical_functions/geometry/__init__.py,sha256=fBem7Y3-w7oNIJb-o6q1G47ir6-5-dDDOUJfkqGqRP0,1902
|
|
89
|
+
pytcl/mathematical_functions/geometry/geometry.py,sha256=uPg0FvJDng_7zyVHwJHMt_3YyFhIxZJPbzk6CNMqjNQ,16394
|
|
90
|
+
pytcl/mathematical_functions/interpolation/__init__.py,sha256=1SOEIgO-EXbfJJWr2N81Qrkv1nOHiYGj3TMRxS40Mys,1308
|
|
91
|
+
pytcl/mathematical_functions/interpolation/interpolation.py,sha256=AM-8cwhPSruoyg4Jyu0G5sPVa1Ge94N8fpOAUL6VRoo,12692
|
|
92
|
+
pytcl/mathematical_functions/numerical_integration/__init__.py,sha256=vxg92dCfL9I5EJFQR06q4jBPsV4ueaCwYOHpZ4GsA9M,1898
|
|
93
|
+
pytcl/mathematical_functions/numerical_integration/quadrature.py,sha256=J7N92M9kcvfqGvQPQKZmmZcGXeEt9I4427SGjbaeFLk,15748
|
|
94
|
+
pytcl/mathematical_functions/polynomials/__init__.py,sha256=WJWZcoQhnvy5f59-kncMTgD9mCtgwfDgULvDYYHS5ys,43
|
|
95
|
+
pytcl/mathematical_functions/signal_processing/__init__.py,sha256=M7P2plJL82Nf_63Nf5pg1u4fepNR-AkwgID9r57MdRM,4570
|
|
96
|
+
pytcl/mathematical_functions/signal_processing/detection.py,sha256=iu4a3_uXJZ_a-OvnbvS8lpXHOl--CGcFlAaXH0oTtPk,30364
|
|
97
|
+
pytcl/mathematical_functions/signal_processing/filters.py,sha256=qK9H7I0CFpqeCcZNeItDiSyUmV7g0ZqdzmFrH7YksxY,23435
|
|
98
|
+
pytcl/mathematical_functions/signal_processing/matched_filter.py,sha256=8EeArCxVAKgkL2EECODAI5McvUUYD9fBY923hDehbEk,22896
|
|
99
|
+
pytcl/mathematical_functions/special_functions/__init__.py,sha256=J1GpcQnuVHziHv5T-IMYWtNjj7FwuEP-6AA9LjVem8k,8357
|
|
100
|
+
pytcl/mathematical_functions/special_functions/bessel.py,sha256=pv-3Swb1AsDSCkfuIRprl-HHeTlchXmSFrU6Q0eJmTU,14401
|
|
101
|
+
pytcl/mathematical_functions/special_functions/debye.py,sha256=PhGkzvDSo8j3PRLGAtA6768gz5Nd8-Dd1kQTELuPvug,6750
|
|
102
|
+
pytcl/mathematical_functions/special_functions/elliptic.py,sha256=WPCpaX6mdzpXm5cZT4HGdFG29T5PHoIP0vd21bzJD24,7436
|
|
103
|
+
pytcl/mathematical_functions/special_functions/error_functions.py,sha256=QYZ9-FXWqegKCoPKdCsGOjtowb_-Vr9xXrV2Hjqcvr4,6277
|
|
104
|
+
pytcl/mathematical_functions/special_functions/gamma_functions.py,sha256=wsEvjkqjpUDv-y9-JVRTAaDJ5yLEYGgjFoUoUrIItFI,10201
|
|
105
|
+
pytcl/mathematical_functions/special_functions/hypergeometric.py,sha256=FUvl-exvXhM64XAY7kPJw063l_2HotJmxsbtmA-gHqw,9792
|
|
106
|
+
pytcl/mathematical_functions/special_functions/lambert_w.py,sha256=LHX57mpCnFLBepxl19zPbxrb8m5pJu2lSUY9m8s5TRA,6849
|
|
107
|
+
pytcl/mathematical_functions/special_functions/marcum_q.py,sha256=M18qy5HYGiZ_CP93QXH5ndp4BiL-lSwAQyomdEVmdws,9604
|
|
108
|
+
pytcl/mathematical_functions/statistics/__init__.py,sha256=TABlPg91TjY7OvdQBy1KWE4LZP5-M4bL9yokgDnjLPA,2743
|
|
109
|
+
pytcl/mathematical_functions/statistics/distributions.py,sha256=NKE3XOmWwVIPpLt9yisxBKqOW0mjVlKsJwSVQmIzabc,19313
|
|
110
|
+
pytcl/mathematical_functions/statistics/estimators.py,sha256=9VJHXZCiKcvgiaSfvib_pFye4L3yv-um3Nr07QlKSac,10841
|
|
111
|
+
pytcl/mathematical_functions/transforms/__init__.py,sha256=FDXNJnj0M5grhnFnttR9Y386WwR6IgjwhsXNRh7yf8M,4618
|
|
112
|
+
pytcl/mathematical_functions/transforms/fourier.py,sha256=QvSPS4QwD2DMBZ7-g9TUM02HBmUpsFT6L-4lywssrOU,20797
|
|
113
|
+
pytcl/mathematical_functions/transforms/stft.py,sha256=ZY6HwjvE02SC0nZ6I_09xPUWmX_MeYSGsMFsL8-TJus,18637
|
|
114
|
+
pytcl/mathematical_functions/transforms/wavelets.py,sha256=8UVvmdO6NiLK9MQ-h8txIxgFC4U-obR0sT4Ot3faDp4,21620
|
|
115
|
+
pytcl/misc/__init__.py,sha256=SCHf_lQVfdl2gwUluHBiIloTF8HRH8EkgYfbNr7zOug,33
|
|
116
|
+
pytcl/navigation/__init__.py,sha256=12FccHQiec10e5i3Ps7_TZAi8X7B-J_2FbZ2JSytotE,8662
|
|
117
|
+
pytcl/navigation/geodesy.py,sha256=Lci2knfF0oKyICCizaJuy-3OTAMXcvs9dfSv1Qnqcic,17003
|
|
118
|
+
pytcl/navigation/great_circle.py,sha256=IhZ-nNMo57ZjA2wAT2vrabBwg5xGVRhqb0zHj9p6JX4,20895
|
|
119
|
+
pytcl/navigation/ins.py,sha256=D5yKDGWGfYokFA6Auh9eO44-i1Qya6b7Is5-gQUvfqw,31285
|
|
120
|
+
pytcl/navigation/ins_gnss.py,sha256=heEeCWc3Jz_aFjiU7ltu3yuNYKnmYC0JSvpQmNww8Bo,30259
|
|
121
|
+
pytcl/navigation/rhumb.py,sha256=-0Y8TcZjVvC6TEFP1XzAyVSjfqAlr08bwcZa7zxAerI,18204
|
|
122
|
+
pytcl/performance_evaluation/__init__.py,sha256=YcMtkhWJosKJQ5tdZyG5pnLldjl1XJurWoofnZ6ykCI,2851
|
|
123
|
+
pytcl/performance_evaluation/estimation_metrics.py,sha256=o-KBwKyqwS4VTlweX7crzXTBFjm6PMIQVHXH8eGJpko,12387
|
|
124
|
+
pytcl/performance_evaluation/track_metrics.py,sha256=OPDTdeaT7MNP96_V6zi32Asi6xk7AnM3uRB4gyci3Yw,13364
|
|
125
|
+
pytcl/physical_values/__init__.py,sha256=SGbg6b0d4dWebE3baW4OlJshL00grG5E4wABw6jxl20,44
|
|
126
|
+
pytcl/plotting/__init__.py,sha256=QEy9bBfhEFxcBkHQ43j-WHfIXNxUr2ngJpNVMh5iyHU,3893
|
|
127
|
+
pytcl/plotting/coordinates.py,sha256=-yspHSOm2Nsx4yt-RZDasune8D1Yq7b61denVz8VCdY,17038
|
|
128
|
+
pytcl/plotting/ellipses.py,sha256=P3nt9jfCMv_ozVjeFQIVDXZqPQyh_-cex1-rgh4tDuU,12525
|
|
129
|
+
pytcl/plotting/metrics.py,sha256=FurXuzsNRseaMh9J00BwqYFmAwc0kmUAW5QmEDOlacw,18068
|
|
130
|
+
pytcl/plotting/tracks.py,sha256=xi5w1_3gDUTdYE1AH3R2kIMABgRclu0Ts9EyhmDx374,22948
|
|
131
|
+
pytcl/scheduling/__init__.py,sha256=jTqMSKcsCrWU_Fh6WaT6BW5WatNHyyEYjFbsv6X18Oc,39
|
|
132
|
+
pytcl/static_estimation/__init__.py,sha256=7u5YcuaalFRqtqLC8bSBeZ7z1nVH6DkyskD69Z4Jjvo,3758
|
|
133
|
+
pytcl/static_estimation/least_squares.py,sha256=cJozGQCu7ZScF0nrUV90JVa-EfteXnCB9MIUZ_ykIns,13462
|
|
134
|
+
pytcl/static_estimation/maximum_likelihood.py,sha256=6E9zfEidRUVZkLiE4tKeFPv48Gt0fe0g_Det8tDQCGo,21641
|
|
135
|
+
pytcl/static_estimation/robust.py,sha256=TtKx4AB_E-QYvT4sFxel0zdwKv0lb3w67dPTb-Dauxw,18587
|
|
136
|
+
pytcl/terrain/__init__.py,sha256=-WEQ-nK1e_OPe6qwjvAEC1t6-pQRd4oV4UZziqSYnzg,3915
|
|
137
|
+
pytcl/terrain/dem.py,sha256=1XI4p-vSDN1gLGmxSZNm-_KuQC35QoXmXqcq84pqEcM,20780
|
|
138
|
+
pytcl/terrain/loaders.py,sha256=6bm_ADLHMJvDGkUVNFgbQfBvJMC5jLPrnDpZBv4Qg0A,27000
|
|
139
|
+
pytcl/terrain/visibility.py,sha256=Aa0e-iCBALMuyt2GfTWrYAqFTg9BLIxNZWBePwNpxWw,22719
|
|
140
|
+
pytcl/trackers/__init__.py,sha256=ljp9C6MvdbMV4fL_RWccZQ34c4pvkkzB3P69SLvXCp8,1584
|
|
141
|
+
pytcl/trackers/hypothesis.py,sha256=dv9w26ZZhy6HQlX4_yOT02pwtaDbskPbxHOnSkkeFho,17377
|
|
142
|
+
pytcl/trackers/mht.py,sha256=wveWgOcTJkNey8hSF-25tCsMGNyRtCmub6e95xRbDDY,20726
|
|
143
|
+
pytcl/trackers/multi_target.py,sha256=fPBgTWYqInUxAF-15c1eFgRIed9GjWm7gl4JHVuL3NI,10633
|
|
144
|
+
pytcl/trackers/single_target.py,sha256=HiGxkxqqbmUAbhhlKy1YvRD6Mvq6nIfcM1cGFI2ZIdA,6622
|
|
145
|
+
pytcl/transponders/__init__.py,sha256=5fL4u3lKCYgPLo5uFeuZbtRZkJPABntuKYGUvVgMMEI,41
|
|
146
|
+
nrl_tracker-0.22.0.dist-info/LICENSE,sha256=rB5G4WppIIUzMOYr2N6uyYlNJ00hRJqE5tie6BMvYuE,1612
|
|
147
|
+
nrl_tracker-0.22.0.dist-info/METADATA,sha256=I8qnfiIoHmaKz-haPqUSwemAT1HwCzKkXCQKdcYD350,10005
|
|
148
|
+
nrl_tracker-0.22.0.dist-info/WHEEL,sha256=pL8R0wFFS65tNSRnaOVrsw9EOkOqxLrlUPenUYnJKNo,91
|
|
149
|
+
nrl_tracker-0.22.0.dist-info/top_level.txt,sha256=17megxcrTPBWwPZTh6jTkwTKxX7No-ZqRpyvElnnO-s,6
|
|
150
|
+
nrl_tracker-0.22.0.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__ = "0.
|
|
23
|
+
__version__ = "0.22.0"
|
|
24
24
|
__author__ = "Python Port Contributors"
|
|
25
25
|
__original_author__ = "David F. Crouse, Naval Research Laboratory"
|
|
26
26
|
|
|
@@ -30,16 +30,14 @@ __original_author__ = "David F. Crouse, Naval Research Laboratory"
|
|
|
30
30
|
# Specialized domains (Phase 6)
|
|
31
31
|
# Assignment algorithms (Phase 5)
|
|
32
32
|
# Core utilities
|
|
33
|
-
from pytcl import
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
trackers,
|
|
42
|
-
)
|
|
33
|
+
from pytcl import assignment_algorithms
|
|
34
|
+
from pytcl import astronomical
|
|
35
|
+
from pytcl import atmosphere
|
|
36
|
+
from pytcl import core
|
|
37
|
+
from pytcl import navigation
|
|
38
|
+
from pytcl import performance_evaluation
|
|
39
|
+
from pytcl import plotting
|
|
40
|
+
from pytcl import trackers
|
|
43
41
|
|
|
44
42
|
|
|
45
43
|
# Version tuple for programmatic access
|
|
@@ -9,48 +9,38 @@ This module provides:
|
|
|
9
9
|
- Data association algorithms (GNN, JPDA)
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
-
from pytcl.assignment_algorithms.data_association import
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
from pytcl.assignment_algorithms.gating import
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
from pytcl.assignment_algorithms.jpda import
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
from pytcl.assignment_algorithms.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
from pytcl.assignment_algorithms.two_dimensional import
|
|
44
|
-
AssignmentResult,
|
|
45
|
-
KBestResult,
|
|
46
|
-
assign2d,
|
|
47
|
-
auction,
|
|
48
|
-
hungarian,
|
|
49
|
-
kbest_assign2d,
|
|
50
|
-
linear_sum_assignment,
|
|
51
|
-
murty,
|
|
52
|
-
ranked_assignments,
|
|
53
|
-
)
|
|
12
|
+
from pytcl.assignment_algorithms.data_association import AssociationResult
|
|
13
|
+
from pytcl.assignment_algorithms.data_association import compute_association_cost
|
|
14
|
+
from pytcl.assignment_algorithms.data_association import gated_gnn_association
|
|
15
|
+
from pytcl.assignment_algorithms.data_association import gnn_association
|
|
16
|
+
from pytcl.assignment_algorithms.data_association import nearest_neighbor
|
|
17
|
+
from pytcl.assignment_algorithms.gating import chi2_gate_threshold
|
|
18
|
+
from pytcl.assignment_algorithms.gating import compute_gate_volume
|
|
19
|
+
from pytcl.assignment_algorithms.gating import ellipsoidal_gate
|
|
20
|
+
from pytcl.assignment_algorithms.gating import gate_measurements
|
|
21
|
+
from pytcl.assignment_algorithms.gating import mahalanobis_distance
|
|
22
|
+
from pytcl.assignment_algorithms.gating import rectangular_gate
|
|
23
|
+
from pytcl.assignment_algorithms.jpda import JPDAResult
|
|
24
|
+
from pytcl.assignment_algorithms.jpda import JPDAUpdate
|
|
25
|
+
from pytcl.assignment_algorithms.jpda import compute_likelihood_matrix
|
|
26
|
+
from pytcl.assignment_algorithms.jpda import jpda
|
|
27
|
+
from pytcl.assignment_algorithms.jpda import jpda_probabilities
|
|
28
|
+
from pytcl.assignment_algorithms.jpda import jpda_update
|
|
29
|
+
from pytcl.assignment_algorithms.three_dimensional import Assignment3DResult
|
|
30
|
+
from pytcl.assignment_algorithms.three_dimensional import assign3d
|
|
31
|
+
from pytcl.assignment_algorithms.three_dimensional import assign3d_auction
|
|
32
|
+
from pytcl.assignment_algorithms.three_dimensional import assign3d_lagrangian
|
|
33
|
+
from pytcl.assignment_algorithms.three_dimensional import decompose_to_2d
|
|
34
|
+
from pytcl.assignment_algorithms.three_dimensional import greedy_3d
|
|
35
|
+
from pytcl.assignment_algorithms.two_dimensional import AssignmentResult
|
|
36
|
+
from pytcl.assignment_algorithms.two_dimensional import KBestResult
|
|
37
|
+
from pytcl.assignment_algorithms.two_dimensional import assign2d
|
|
38
|
+
from pytcl.assignment_algorithms.two_dimensional import auction
|
|
39
|
+
from pytcl.assignment_algorithms.two_dimensional import hungarian
|
|
40
|
+
from pytcl.assignment_algorithms.two_dimensional import kbest_assign2d
|
|
41
|
+
from pytcl.assignment_algorithms.two_dimensional import linear_sum_assignment
|
|
42
|
+
from pytcl.assignment_algorithms.two_dimensional import murty
|
|
43
|
+
from pytcl.assignment_algorithms.two_dimensional import ranked_assignments
|
|
54
44
|
|
|
55
45
|
__all__ = [
|
|
56
46
|
# 2D Assignment
|
|
@@ -5,18 +5,17 @@ This module provides algorithms for associating measurements to tracks,
|
|
|
5
5
|
including Global Nearest Neighbor (GNN) and related methods.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
from typing import List
|
|
8
|
+
from typing import List
|
|
9
|
+
from typing import NamedTuple
|
|
10
|
+
from typing import Optional
|
|
9
11
|
|
|
10
12
|
import numpy as np
|
|
11
|
-
from numpy.typing import ArrayLike
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
from pytcl.assignment_algorithms.two_dimensional import (
|
|
18
|
-
assign2d,
|
|
19
|
-
)
|
|
13
|
+
from numpy.typing import ArrayLike
|
|
14
|
+
from numpy.typing import NDArray
|
|
15
|
+
|
|
16
|
+
from pytcl.assignment_algorithms.gating import mahalanobis_batch
|
|
17
|
+
from pytcl.assignment_algorithms.gating import mahalanobis_distance
|
|
18
|
+
from pytcl.assignment_algorithms.two_dimensional import assign2d
|
|
20
19
|
|
|
21
20
|
|
|
22
21
|
class AssociationResult(NamedTuple):
|
|
@@ -5,11 +5,13 @@ 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
|
|
8
|
+
from typing import List
|
|
9
|
+
from typing import Tuple
|
|
9
10
|
|
|
10
11
|
import numpy as np
|
|
11
12
|
from numba import njit
|
|
12
|
-
from numpy.typing import ArrayLike
|
|
13
|
+
from numpy.typing import ArrayLike
|
|
14
|
+
from numpy.typing import NDArray
|
|
13
15
|
from scipy.stats import chi2
|
|
14
16
|
|
|
15
17
|
|
|
@@ -19,9 +21,9 @@ def _mahalanobis_distance_2d(
|
|
|
19
21
|
S_inv: np.ndarray,
|
|
20
22
|
) -> float:
|
|
21
23
|
"""JIT-compiled Mahalanobis distance for 2D innovations."""
|
|
22
|
-
return innovation[0] * (
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
return innovation[0] * (S_inv[0, 0] * innovation[0] + S_inv[0, 1] * innovation[1]) + innovation[
|
|
25
|
+
1
|
|
26
|
+
] * (S_inv[1, 0] * innovation[0] + S_inv[1, 1] * innovation[1])
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
@njit(cache=True, fastmath=True)
|
|
@@ -9,11 +9,15 @@ 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
|
|
12
|
+
from typing import List
|
|
13
|
+
from typing import NamedTuple
|
|
14
|
+
from typing import Optional
|
|
15
|
+
from typing import Tuple
|
|
13
16
|
|
|
14
17
|
import numpy as np
|
|
15
18
|
from numba import njit
|
|
16
|
-
from numpy.typing import ArrayLike
|
|
19
|
+
from numpy.typing import ArrayLike
|
|
20
|
+
from numpy.typing import NDArray
|
|
17
21
|
from scipy.stats import chi2
|
|
18
22
|
|
|
19
23
|
from pytcl.assignment_algorithms.gating import mahalanobis_distance
|
|
@@ -94,9 +98,7 @@ def compute_measurement_likelihood(
|
|
|
94
98
|
return 0.0
|
|
95
99
|
|
|
96
100
|
mahal_sq = innovation @ np.linalg.solve(innovation_cov, innovation)
|
|
97
|
-
likelihood = (
|
|
98
|
-
detection_prob * np.exp(-0.5 * mahal_sq) / np.sqrt((2 * np.pi) ** m * det_S)
|
|
99
|
-
)
|
|
101
|
+
likelihood = detection_prob * np.exp(-0.5 * mahal_sq) / np.sqrt((2 * np.pi) ** m * det_S)
|
|
100
102
|
|
|
101
103
|
return likelihood
|
|
102
104
|
|
|
@@ -210,9 +212,7 @@ def jpda_probabilities(
|
|
|
210
212
|
if n_tracks <= 5 and n_meas <= 5:
|
|
211
213
|
beta = _jpda_exact(likelihood_matrix, gated, detection_prob, clutter_density)
|
|
212
214
|
else:
|
|
213
|
-
beta = _jpda_approximate(
|
|
214
|
-
likelihood_matrix, gated, detection_prob, clutter_density
|
|
215
|
-
)
|
|
215
|
+
beta = _jpda_approximate(likelihood_matrix, gated, detection_prob, clutter_density)
|
|
216
216
|
|
|
217
217
|
return beta
|
|
218
218
|
|
|
@@ -258,9 +258,7 @@ def _jpda_exact(
|
|
|
258
258
|
if gated[track_idx, meas_idx] and track_idx not in used_tracks:
|
|
259
259
|
current_assignment.append(track_idx)
|
|
260
260
|
used_tracks.add(track_idx)
|
|
261
|
-
yield from generate_hypotheses(
|
|
262
|
-
meas_idx + 1, current_assignment, used_tracks
|
|
263
|
-
)
|
|
261
|
+
yield from generate_hypotheses(meas_idx + 1, current_assignment, used_tracks)
|
|
264
262
|
used_tracks.remove(track_idx)
|
|
265
263
|
current_assignment.pop()
|
|
266
264
|
|
|
@@ -298,9 +296,7 @@ def _jpda_exact(
|
|
|
298
296
|
hypothesis_probs = [p / total_prob for p in hypothesis_probs]
|
|
299
297
|
|
|
300
298
|
# Compute marginal association probabilities
|
|
301
|
-
for h_idx, (assignment, prob) in enumerate(
|
|
302
|
-
zip(hypothesis_assignments, hypothesis_probs)
|
|
303
|
-
):
|
|
299
|
+
for h_idx, (assignment, prob) in enumerate(zip(hypothesis_assignments, hypothesis_probs)):
|
|
304
300
|
detected_tracks = set()
|
|
305
301
|
for j, track_idx in enumerate(assignment):
|
|
306
302
|
if track_idx >= 0:
|
|
@@ -5,14 +5,12 @@ This module provides algorithms for solving 3D assignment problems,
|
|
|
5
5
|
which arise in multi-sensor data fusion and multi-scan tracking.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
from pytcl.assignment_algorithms.three_dimensional.assignment import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
greedy_3d,
|
|
15
|
-
)
|
|
8
|
+
from pytcl.assignment_algorithms.three_dimensional.assignment import Assignment3DResult
|
|
9
|
+
from pytcl.assignment_algorithms.three_dimensional.assignment import assign3d
|
|
10
|
+
from pytcl.assignment_algorithms.three_dimensional.assignment import assign3d_auction
|
|
11
|
+
from pytcl.assignment_algorithms.three_dimensional.assignment import assign3d_lagrangian
|
|
12
|
+
from pytcl.assignment_algorithms.three_dimensional.assignment import decompose_to_2d
|
|
13
|
+
from pytcl.assignment_algorithms.three_dimensional.assignment import greedy_3d
|
|
16
14
|
|
|
17
15
|
__all__ = [
|
|
18
16
|
"Assignment3DResult",
|
|
@@ -11,10 +11,14 @@ cost subject to the constraint that each index appears in at most one
|
|
|
11
11
|
selected tuple.
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
-
from typing import List
|
|
14
|
+
from typing import List
|
|
15
|
+
from typing import NamedTuple
|
|
16
|
+
from typing import Optional
|
|
17
|
+
from typing import Tuple
|
|
15
18
|
|
|
16
19
|
import numpy as np
|
|
17
|
-
from numpy.typing import ArrayLike
|
|
20
|
+
from numpy.typing import ArrayLike
|
|
21
|
+
from numpy.typing import NDArray
|
|
18
22
|
from scipy.optimize import linear_sum_assignment as scipy_lsa
|
|
19
23
|
|
|
20
24
|
|
|
@@ -6,19 +6,15 @@ the 2D assignment problem (bipartite matching), as well as k-best
|
|
|
6
6
|
assignment algorithms for Multiple Hypothesis Tracking.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
from pytcl.assignment_algorithms.two_dimensional.assignment import
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
from pytcl.assignment_algorithms.two_dimensional.kbest import
|
|
17
|
-
|
|
18
|
-
kbest_assign2d,
|
|
19
|
-
murty,
|
|
20
|
-
ranked_assignments,
|
|
21
|
-
)
|
|
9
|
+
from pytcl.assignment_algorithms.two_dimensional.assignment import AssignmentResult
|
|
10
|
+
from pytcl.assignment_algorithms.two_dimensional.assignment import assign2d
|
|
11
|
+
from pytcl.assignment_algorithms.two_dimensional.assignment import auction
|
|
12
|
+
from pytcl.assignment_algorithms.two_dimensional.assignment import hungarian
|
|
13
|
+
from pytcl.assignment_algorithms.two_dimensional.assignment import linear_sum_assignment
|
|
14
|
+
from pytcl.assignment_algorithms.two_dimensional.kbest import KBestResult
|
|
15
|
+
from pytcl.assignment_algorithms.two_dimensional.kbest import kbest_assign2d
|
|
16
|
+
from pytcl.assignment_algorithms.two_dimensional.kbest import murty
|
|
17
|
+
from pytcl.assignment_algorithms.two_dimensional.kbest import ranked_assignments
|
|
22
18
|
|
|
23
19
|
__all__ = [
|
|
24
20
|
# 2D Assignment
|
|
@@ -5,10 +5,13 @@ This module provides algorithms for solving the 2D assignment (bipartite matchin
|
|
|
5
5
|
problem, which is fundamental to data association in target tracking.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
from typing import NamedTuple
|
|
8
|
+
from typing import NamedTuple
|
|
9
|
+
from typing import Optional
|
|
10
|
+
from typing import Tuple
|
|
9
11
|
|
|
10
12
|
import numpy as np
|
|
11
|
-
from numpy.typing import ArrayLike
|
|
13
|
+
from numpy.typing import ArrayLike
|
|
14
|
+
from numpy.typing import NDArray
|
|
12
15
|
from scipy.optimize import linear_sum_assignment as scipy_lsa
|
|
13
16
|
|
|
14
17
|
|
|
@@ -6,16 +6,18 @@ This module provides algorithms for finding the k best solutions to the
|
|
|
6
6
|
Multiple Hypothesis Tracking (MHT).
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
from typing import List
|
|
9
|
+
from typing import List
|
|
10
|
+
from typing import NamedTuple
|
|
11
|
+
from typing import Optional
|
|
12
|
+
from typing import Tuple
|
|
10
13
|
|
|
11
14
|
import numpy as np
|
|
12
|
-
from numpy.typing import ArrayLike
|
|
15
|
+
from numpy.typing import ArrayLike
|
|
16
|
+
from numpy.typing import NDArray
|
|
13
17
|
from scipy.optimize import linear_sum_assignment as scipy_lsa
|
|
14
18
|
|
|
15
|
-
from pytcl.assignment_algorithms.two_dimensional.assignment import
|
|
16
|
-
|
|
17
|
-
assign2d,
|
|
18
|
-
)
|
|
19
|
+
from pytcl.assignment_algorithms.two_dimensional.assignment import AssignmentResult
|
|
20
|
+
from pytcl.assignment_algorithms.two_dimensional.assignment import assign2d
|
|
19
21
|
|
|
20
22
|
|
|
21
23
|
class KBestResult(NamedTuple):
|
|
@@ -335,9 +337,7 @@ def _partition_solution(
|
|
|
335
337
|
|
|
336
338
|
for i in range(start_idx, n_assigned):
|
|
337
339
|
# Require assignments 0..i-1, forbid assignment i
|
|
338
|
-
new_required = required + [
|
|
339
|
-
(row_ind[j], col_ind[j]) for j in range(start_idx, i)
|
|
340
|
-
]
|
|
340
|
+
new_required = required + [(row_ind[j], col_ind[j]) for j in range(start_idx, i)]
|
|
341
341
|
new_forbidden = forbidden + [(row_ind[i], col_ind[i])]
|
|
342
342
|
|
|
343
343
|
# Solve constrained problem
|