nrl-tracker 0.22.0__py3-none-any.whl → 0.22.1__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.22.0.dist-info → nrl_tracker-0.22.1.dist-info}/METADATA +1 -1
- nrl_tracker-0.22.1.dist-info/RECORD +150 -0
- pytcl/__init__.py +11 -9
- pytcl/assignment_algorithms/__init__.py +42 -32
- pytcl/assignment_algorithms/data_association.py +3 -7
- pytcl/assignment_algorithms/gating.py +2 -4
- pytcl/assignment_algorithms/jpda.py +2 -6
- pytcl/assignment_algorithms/three_dimensional/__init__.py +8 -6
- pytcl/assignment_algorithms/three_dimensional/assignment.py +2 -6
- pytcl/assignment_algorithms/two_dimensional/__init__.py +13 -9
- pytcl/assignment_algorithms/two_dimensional/assignment.py +2 -5
- pytcl/assignment_algorithms/two_dimensional/kbest.py +6 -8
- pytcl/astronomical/__init__.py +108 -96
- pytcl/astronomical/ephemerides.py +1 -3
- pytcl/astronomical/lambert.py +1 -2
- pytcl/astronomical/time_systems.py +1 -2
- pytcl/atmosphere/__init__.py +13 -11
- pytcl/atmosphere/models.py +2 -4
- pytcl/clustering/__init__.py +36 -28
- pytcl/clustering/dbscan.py +2 -5
- pytcl/clustering/gaussian_mixture.py +2 -6
- pytcl/clustering/hierarchical.py +2 -6
- pytcl/clustering/kmeans.py +2 -6
- pytcl/containers/__init__.py +26 -29
- pytcl/containers/cluster_set.py +2 -10
- pytcl/containers/covertree.py +2 -8
- pytcl/containers/kd_tree.py +2 -6
- pytcl/containers/measurement_set.py +2 -9
- pytcl/containers/rtree.py +2 -6
- pytcl/containers/track_list.py +13 -13
- pytcl/containers/vptree.py +2 -7
- pytcl/coordinate_systems/__init__.py +74 -69
- pytcl/coordinate_systems/conversions/__init__.py +24 -20
- pytcl/coordinate_systems/conversions/geodetic.py +2 -4
- pytcl/coordinate_systems/conversions/spherical.py +2 -4
- pytcl/coordinate_systems/jacobians/__init__.py +12 -10
- pytcl/coordinate_systems/jacobians/jacobians.py +1 -2
- pytcl/coordinate_systems/projections/__init__.py +21 -23
- pytcl/coordinate_systems/projections/projections.py +1 -3
- pytcl/coordinate_systems/rotations/__init__.py +22 -20
- pytcl/coordinate_systems/rotations/rotations.py +1 -2
- pytcl/core/__init__.py +22 -16
- pytcl/core/array_utils.py +3 -6
- pytcl/core/validation.py +2 -7
- pytcl/dynamic_estimation/__init__.py +86 -77
- pytcl/dynamic_estimation/imm.py +3 -7
- pytcl/dynamic_estimation/information_filter.py +6 -8
- pytcl/dynamic_estimation/kalman/__init__.py +48 -40
- pytcl/dynamic_estimation/kalman/extended.py +2 -4
- pytcl/dynamic_estimation/kalman/linear.py +3 -7
- pytcl/dynamic_estimation/kalman/square_root.py +2 -5
- pytcl/dynamic_estimation/kalman/unscented.py +3 -8
- pytcl/dynamic_estimation/particle_filters/__init__.py +14 -12
- pytcl/dynamic_estimation/particle_filters/bootstrap.py +2 -6
- pytcl/dynamic_estimation/smoothers.py +3 -8
- pytcl/dynamic_models/__init__.py +41 -37
- pytcl/dynamic_models/continuous_time/__init__.py +11 -11
- pytcl/dynamic_models/continuous_time/dynamics.py +2 -4
- pytcl/dynamic_models/discrete_time/__init__.py +13 -11
- pytcl/dynamic_models/process_noise/__init__.py +13 -11
- pytcl/gravity/__init__.py +65 -55
- pytcl/gravity/clenshaw.py +1 -2
- pytcl/gravity/egm.py +3 -8
- pytcl/gravity/spherical_harmonics.py +1 -2
- pytcl/gravity/tides.py +1 -2
- pytcl/magnetism/__init__.py +25 -26
- pytcl/magnetism/emm.py +1 -4
- pytcl/magnetism/igrf.py +6 -5
- pytcl/magnetism/wmm.py +1 -2
- pytcl/mathematical_functions/__init__.py +87 -69
- pytcl/mathematical_functions/basic_matrix/__init__.py +19 -25
- pytcl/mathematical_functions/basic_matrix/decompositions.py +2 -5
- pytcl/mathematical_functions/basic_matrix/special_matrices.py +1 -2
- pytcl/mathematical_functions/combinatorics/__init__.py +14 -18
- pytcl/mathematical_functions/combinatorics/combinatorics.py +1 -4
- pytcl/mathematical_functions/geometry/__init__.py +15 -15
- pytcl/mathematical_functions/geometry/geometry.py +3 -6
- pytcl/mathematical_functions/interpolation/__init__.py +12 -10
- pytcl/mathematical_functions/interpolation/interpolation.py +2 -7
- pytcl/mathematical_functions/numerical_integration/__init__.py +10 -16
- pytcl/mathematical_functions/numerical_integration/quadrature.py +2 -6
- pytcl/mathematical_functions/signal_processing/__init__.py +30 -42
- pytcl/mathematical_functions/signal_processing/detection.py +3 -6
- pytcl/mathematical_functions/signal_processing/filters.py +2 -5
- pytcl/mathematical_functions/signal_processing/matched_filter.py +3 -6
- pytcl/mathematical_functions/special_functions/__init__.py +76 -74
- pytcl/mathematical_functions/special_functions/bessel.py +1 -2
- pytcl/mathematical_functions/special_functions/debye.py +2 -4
- pytcl/mathematical_functions/special_functions/elliptic.py +1 -2
- pytcl/mathematical_functions/special_functions/error_functions.py +1 -2
- pytcl/mathematical_functions/special_functions/gamma_functions.py +1 -2
- pytcl/mathematical_functions/special_functions/hypergeometric.py +1 -2
- pytcl/mathematical_functions/special_functions/lambert_w.py +1 -2
- pytcl/mathematical_functions/special_functions/marcum_q.py +1 -2
- pytcl/mathematical_functions/statistics/__init__.py +31 -27
- pytcl/mathematical_functions/statistics/distributions.py +4 -9
- pytcl/mathematical_functions/statistics/estimators.py +1 -2
- pytcl/mathematical_functions/transforms/__init__.py +51 -45
- pytcl/mathematical_functions/transforms/fourier.py +2 -5
- pytcl/mathematical_functions/transforms/stft.py +2 -5
- pytcl/mathematical_functions/transforms/wavelets.py +2 -7
- pytcl/navigation/__init__.py +99 -89
- pytcl/navigation/geodesy.py +2 -4
- pytcl/navigation/great_circle.py +1 -3
- pytcl/navigation/ins.py +5 -11
- pytcl/navigation/ins_gnss.py +12 -17
- pytcl/navigation/rhumb.py +2 -4
- pytcl/performance_evaluation/__init__.py +25 -21
- pytcl/performance_evaluation/estimation_metrics.py +1 -3
- pytcl/performance_evaluation/track_metrics.py +1 -3
- pytcl/plotting/__init__.py +38 -30
- pytcl/plotting/coordinates.py +1 -3
- pytcl/plotting/ellipses.py +2 -5
- pytcl/plotting/metrics.py +1 -2
- pytcl/plotting/tracks.py +1 -4
- pytcl/static_estimation/__init__.py +41 -37
- pytcl/static_estimation/least_squares.py +2 -4
- pytcl/static_estimation/maximum_likelihood.py +2 -5
- pytcl/static_estimation/robust.py +2 -5
- pytcl/terrain/__init__.py +34 -28
- pytcl/terrain/dem.py +1 -4
- pytcl/terrain/loaders.py +1 -4
- pytcl/terrain/visibility.py +1 -2
- pytcl/trackers/__init__.py +14 -17
- pytcl/trackers/hypothesis.py +1 -6
- pytcl/trackers/mht.py +9 -13
- pytcl/trackers/multi_target.py +3 -8
- pytcl/trackers/single_target.py +2 -5
- nrl_tracker-0.22.0.dist-info/RECORD +0 -150
- {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.1.dist-info}/LICENSE +0 -0
- {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.1.dist-info}/WHEEL +0 -0
- {nrl_tracker-0.22.0.dist-info → nrl_tracker-0.22.1.dist-info}/top_level.txt +0 -0
pytcl/astronomical/__init__.py
CHANGED
|
@@ -25,114 +25,126 @@ Examples
|
|
|
25
25
|
>>> r_sun, v_sun = sun_position(2451545.0) # J2000.0
|
|
26
26
|
"""
|
|
27
27
|
|
|
28
|
-
from pytcl.astronomical.ephemerides import
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
from pytcl.astronomical.lambert import
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
28
|
+
from pytcl.astronomical.ephemerides import (
|
|
29
|
+
DEEphemeris,
|
|
30
|
+
barycenter_position,
|
|
31
|
+
moon_position,
|
|
32
|
+
planet_position,
|
|
33
|
+
sun_position,
|
|
34
|
+
)
|
|
35
|
+
from pytcl.astronomical.lambert import (
|
|
36
|
+
LambertSolution,
|
|
37
|
+
bi_elliptic_transfer,
|
|
38
|
+
hohmann_transfer,
|
|
39
|
+
lambert_izzo,
|
|
40
|
+
lambert_universal,
|
|
41
|
+
minimum_energy_transfer,
|
|
42
|
+
)
|
|
39
43
|
from pytcl.astronomical.orbital_mechanics import (
|
|
40
44
|
GM_EARTH, # Constants; Types; Anomaly conversions; Element conversions; Propagation; Orbital quantities
|
|
41
45
|
)
|
|
42
|
-
from pytcl.astronomical.orbital_mechanics import
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
46
|
+
from pytcl.astronomical.orbital_mechanics import (
|
|
47
|
+
GM_JUPITER,
|
|
48
|
+
GM_MARS,
|
|
49
|
+
GM_MOON,
|
|
50
|
+
GM_SUN,
|
|
51
|
+
OrbitalElements,
|
|
52
|
+
StateVector,
|
|
53
|
+
apoapsis_radius,
|
|
54
|
+
circular_velocity,
|
|
55
|
+
eccentric_to_mean_anomaly,
|
|
56
|
+
eccentric_to_true_anomaly,
|
|
57
|
+
escape_velocity,
|
|
58
|
+
flight_path_angle,
|
|
59
|
+
hyperbolic_to_true_anomaly,
|
|
60
|
+
kepler_propagate,
|
|
61
|
+
kepler_propagate_state,
|
|
62
|
+
mean_motion,
|
|
63
|
+
mean_to_eccentric_anomaly,
|
|
64
|
+
mean_to_hyperbolic_anomaly,
|
|
65
|
+
mean_to_true_anomaly,
|
|
66
|
+
orbit_radius,
|
|
67
|
+
orbital_elements_to_state,
|
|
68
|
+
orbital_period,
|
|
69
|
+
periapsis_radius,
|
|
70
|
+
specific_angular_momentum,
|
|
71
|
+
specific_orbital_energy,
|
|
72
|
+
state_to_orbital_elements,
|
|
73
|
+
time_since_periapsis,
|
|
74
|
+
true_to_eccentric_anomaly,
|
|
75
|
+
true_to_hyperbolic_anomaly,
|
|
76
|
+
true_to_mean_anomaly,
|
|
77
|
+
vis_viva,
|
|
78
|
+
)
|
|
73
79
|
from pytcl.astronomical.reference_frames import (
|
|
74
80
|
earth_rotation_angle, # Time utilities; Precession; Nutation; Earth rotation; Polar motion; Full transformations; Ecliptic/equatorial
|
|
75
81
|
)
|
|
76
|
-
from pytcl.astronomical.reference_frames import
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
82
|
+
from pytcl.astronomical.reference_frames import (
|
|
83
|
+
ecef_to_eci,
|
|
84
|
+
eci_to_ecef,
|
|
85
|
+
ecliptic_to_equatorial,
|
|
86
|
+
equation_of_equinoxes,
|
|
87
|
+
equatorial_to_ecliptic,
|
|
88
|
+
gast_iau82,
|
|
89
|
+
gcrf_to_itrf,
|
|
90
|
+
gmst_iau82,
|
|
91
|
+
itrf_to_gcrf,
|
|
92
|
+
julian_centuries_j2000,
|
|
93
|
+
mean_obliquity_iau80,
|
|
94
|
+
nutation_angles_iau80,
|
|
95
|
+
nutation_matrix,
|
|
96
|
+
polar_motion_matrix,
|
|
97
|
+
precession_angles_iau76,
|
|
98
|
+
precession_matrix_iau76,
|
|
99
|
+
sidereal_rotation_matrix,
|
|
100
|
+
true_obliquity,
|
|
101
|
+
)
|
|
94
102
|
from pytcl.astronomical.relativity import (
|
|
95
103
|
C_LIGHT, # Physical constants; Schwarzschild metric; Time dilation; Shapiro delay; Precession; PN effects; Range corrections
|
|
96
104
|
)
|
|
97
|
-
from pytcl.astronomical.relativity import
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
from pytcl.astronomical.relativity import (
|
|
106
|
+
G_GRAV,
|
|
107
|
+
geodetic_precession,
|
|
108
|
+
gravitational_time_dilation,
|
|
109
|
+
lense_thirring_precession,
|
|
110
|
+
post_newtonian_acceleration,
|
|
111
|
+
proper_time_rate,
|
|
112
|
+
relativistic_range_correction,
|
|
113
|
+
schwarzschild_precession_per_orbit,
|
|
114
|
+
schwarzschild_radius,
|
|
115
|
+
shapiro_delay,
|
|
116
|
+
)
|
|
107
117
|
from pytcl.astronomical.time_systems import (
|
|
108
118
|
JD_GPS_EPOCH, # Julian dates; Time scales; Unix time; GPS week; Sidereal time; Leap seconds; Constants
|
|
109
119
|
)
|
|
110
|
-
from pytcl.astronomical.time_systems import
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
120
|
+
from pytcl.astronomical.time_systems import (
|
|
121
|
+
JD_J2000,
|
|
122
|
+
JD_UNIX_EPOCH,
|
|
123
|
+
MJD_OFFSET,
|
|
124
|
+
TT_TAI_OFFSET,
|
|
125
|
+
LeapSecondTable,
|
|
126
|
+
cal_to_jd,
|
|
127
|
+
gast,
|
|
128
|
+
get_leap_seconds,
|
|
129
|
+
gmst,
|
|
130
|
+
gps_to_tai,
|
|
131
|
+
gps_to_utc,
|
|
132
|
+
gps_week_seconds,
|
|
133
|
+
gps_week_to_utc,
|
|
134
|
+
jd_to_cal,
|
|
135
|
+
jd_to_mjd,
|
|
136
|
+
jd_to_unix,
|
|
137
|
+
mjd_to_jd,
|
|
138
|
+
tai_to_gps,
|
|
139
|
+
tai_to_tt,
|
|
140
|
+
tai_to_utc,
|
|
141
|
+
tt_to_tai,
|
|
142
|
+
tt_to_utc,
|
|
143
|
+
unix_to_jd,
|
|
144
|
+
utc_to_gps,
|
|
145
|
+
utc_to_tai,
|
|
146
|
+
utc_to_tt,
|
|
147
|
+
)
|
|
136
148
|
|
|
137
149
|
__all__ = [
|
|
138
150
|
# Time systems - Julian dates
|
pytcl/astronomical/lambert.py
CHANGED
pytcl/atmosphere/__init__.py
CHANGED
|
@@ -6,17 +6,19 @@ temperature, pressure, density, and other properties at various altitudes.
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
from pytcl.atmosphere.models import G0 # Constants
|
|
9
|
-
from pytcl.atmosphere.models import
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
from pytcl.atmosphere.models import (
|
|
10
|
+
GAMMA,
|
|
11
|
+
P0,
|
|
12
|
+
RHO0,
|
|
13
|
+
T0,
|
|
14
|
+
AtmosphereState,
|
|
15
|
+
R,
|
|
16
|
+
altitude_from_pressure,
|
|
17
|
+
isa_atmosphere,
|
|
18
|
+
mach_number,
|
|
19
|
+
true_airspeed_from_mach,
|
|
20
|
+
us_standard_atmosphere_1976,
|
|
21
|
+
)
|
|
20
22
|
|
|
21
23
|
__all__ = [
|
|
22
24
|
"AtmosphereState",
|
pytcl/atmosphere/models.py
CHANGED
|
@@ -5,12 +5,10 @@ This module provides standard atmosphere models used for computing
|
|
|
5
5
|
temperature, pressure, and density at various altitudes.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
from typing import NamedTuple
|
|
9
|
-
from typing import Tuple
|
|
8
|
+
from typing import NamedTuple, Tuple
|
|
10
9
|
|
|
11
10
|
import numpy as np
|
|
12
|
-
from numpy.typing import ArrayLike
|
|
13
|
-
from numpy.typing import NDArray
|
|
11
|
+
from numpy.typing import ArrayLike, NDArray
|
|
14
12
|
|
|
15
13
|
|
|
16
14
|
class AtmosphereState(NamedTuple):
|
pytcl/clustering/__init__.py
CHANGED
|
@@ -6,34 +6,42 @@ commonly used in multi-target tracking for hypothesis management and
|
|
|
6
6
|
track clustering.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
from pytcl.clustering.dbscan import
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
from pytcl.clustering.gaussian_mixture import
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
from pytcl.clustering.hierarchical import
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
9
|
+
from pytcl.clustering.dbscan import (
|
|
10
|
+
DBSCANResult,
|
|
11
|
+
compute_neighbors,
|
|
12
|
+
dbscan,
|
|
13
|
+
dbscan_predict,
|
|
14
|
+
)
|
|
15
|
+
from pytcl.clustering.gaussian_mixture import (
|
|
16
|
+
GaussianComponent,
|
|
17
|
+
GaussianMixture,
|
|
18
|
+
MergeResult,
|
|
19
|
+
ReductionResult,
|
|
20
|
+
merge_gaussians,
|
|
21
|
+
moment_match,
|
|
22
|
+
prune_mixture,
|
|
23
|
+
reduce_mixture_runnalls,
|
|
24
|
+
reduce_mixture_west,
|
|
25
|
+
runnalls_merge_cost,
|
|
26
|
+
west_merge_cost,
|
|
27
|
+
)
|
|
28
|
+
from pytcl.clustering.hierarchical import (
|
|
29
|
+
DendrogramNode,
|
|
30
|
+
HierarchicalResult,
|
|
31
|
+
LinkageType,
|
|
32
|
+
agglomerative_clustering,
|
|
33
|
+
compute_distance_matrix,
|
|
34
|
+
cut_dendrogram,
|
|
35
|
+
fcluster,
|
|
36
|
+
)
|
|
37
|
+
from pytcl.clustering.kmeans import (
|
|
38
|
+
KMeansResult,
|
|
39
|
+
assign_clusters,
|
|
40
|
+
kmeans,
|
|
41
|
+
kmeans_elbow,
|
|
42
|
+
kmeans_plusplus_init,
|
|
43
|
+
update_centers,
|
|
44
|
+
)
|
|
37
45
|
|
|
38
46
|
__all__ = [
|
|
39
47
|
# Gaussian mixture
|
pytcl/clustering/dbscan.py
CHANGED
|
@@ -12,14 +12,11 @@ References
|
|
|
12
12
|
with Noise," KDD 1996.
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
|
-
from typing import List
|
|
16
|
-
from typing import NamedTuple
|
|
17
|
-
from typing import Set
|
|
15
|
+
from typing import List, NamedTuple, Set
|
|
18
16
|
|
|
19
17
|
import numpy as np
|
|
20
18
|
from numba import njit
|
|
21
|
-
from numpy.typing import ArrayLike
|
|
22
|
-
from numpy.typing import NDArray
|
|
19
|
+
from numpy.typing import ArrayLike, NDArray
|
|
23
20
|
|
|
24
21
|
|
|
25
22
|
class DBSCANResult(NamedTuple):
|
|
@@ -13,14 +13,10 @@ References
|
|
|
13
13
|
Journal of the Royal Statistical Society, Series B, vol. 55, no. 2, 1993.
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
-
from typing import List
|
|
17
|
-
from typing import NamedTuple
|
|
18
|
-
from typing import Optional
|
|
19
|
-
from typing import Tuple
|
|
16
|
+
from typing import List, NamedTuple, Optional, Tuple
|
|
20
17
|
|
|
21
18
|
import numpy as np
|
|
22
|
-
from numpy.typing import ArrayLike
|
|
23
|
-
from numpy.typing import NDArray
|
|
19
|
+
from numpy.typing import ArrayLike, NDArray
|
|
24
20
|
|
|
25
21
|
|
|
26
22
|
class GaussianComponent(NamedTuple):
|
pytcl/clustering/hierarchical.py
CHANGED
|
@@ -12,15 +12,11 @@ References
|
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
14
|
from enum import Enum
|
|
15
|
-
from typing import List
|
|
16
|
-
from typing import Literal
|
|
17
|
-
from typing import NamedTuple
|
|
18
|
-
from typing import Optional
|
|
15
|
+
from typing import List, Literal, NamedTuple, Optional
|
|
19
16
|
|
|
20
17
|
import numpy as np
|
|
21
18
|
from numba import njit
|
|
22
|
-
from numpy.typing import ArrayLike
|
|
23
|
-
from numpy.typing import NDArray
|
|
19
|
+
from numpy.typing import ArrayLike, NDArray
|
|
24
20
|
|
|
25
21
|
|
|
26
22
|
class LinkageType(Enum):
|
pytcl/clustering/kmeans.py
CHANGED
|
@@ -10,14 +10,10 @@ References
|
|
|
10
10
|
Careful Seeding," SODA 2007.
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
-
from typing import Literal
|
|
14
|
-
from typing import NamedTuple
|
|
15
|
-
from typing import Optional
|
|
16
|
-
from typing import Union
|
|
13
|
+
from typing import Literal, NamedTuple, Optional, Union
|
|
17
14
|
|
|
18
15
|
import numpy as np
|
|
19
|
-
from numpy.typing import ArrayLike
|
|
20
|
-
from numpy.typing import NDArray
|
|
16
|
+
from numpy.typing import ArrayLike, NDArray
|
|
21
17
|
from scipy.spatial.distance import cdist
|
|
22
18
|
|
|
23
19
|
|
pytcl/containers/__init__.py
CHANGED
|
@@ -5,35 +5,32 @@ This module provides spatial data structures for efficient
|
|
|
5
5
|
nearest neighbor queries, spatial indexing, and tracking containers.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
from pytcl.containers.cluster_set import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
from pytcl.containers.covertree import CoverTreeResult
|
|
17
|
-
from pytcl.containers.kd_tree import BallTree
|
|
18
|
-
from pytcl.containers.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
from pytcl.containers.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
from pytcl.containers.track_list import TrackListStats
|
|
33
|
-
from pytcl.containers.
|
|
34
|
-
from pytcl.containers.vptree import VPNode
|
|
35
|
-
from pytcl.containers.vptree import VPTree
|
|
36
|
-
from pytcl.containers.vptree import VPTreeResult
|
|
8
|
+
from pytcl.containers.cluster_set import (
|
|
9
|
+
ClusterSet,
|
|
10
|
+
ClusterStats,
|
|
11
|
+
TrackCluster,
|
|
12
|
+
cluster_tracks_dbscan,
|
|
13
|
+
cluster_tracks_kmeans,
|
|
14
|
+
compute_cluster_centroid,
|
|
15
|
+
)
|
|
16
|
+
from pytcl.containers.covertree import CoverTree, CoverTreeNode, CoverTreeResult
|
|
17
|
+
from pytcl.containers.kd_tree import BallTree, KDNode, KDTree, NearestNeighborResult
|
|
18
|
+
from pytcl.containers.measurement_set import (
|
|
19
|
+
Measurement,
|
|
20
|
+
MeasurementQuery,
|
|
21
|
+
MeasurementSet,
|
|
22
|
+
)
|
|
23
|
+
from pytcl.containers.rtree import (
|
|
24
|
+
BoundingBox,
|
|
25
|
+
RTree,
|
|
26
|
+
RTreeNode,
|
|
27
|
+
RTreeResult,
|
|
28
|
+
box_from_point,
|
|
29
|
+
box_from_points,
|
|
30
|
+
merge_boxes,
|
|
31
|
+
)
|
|
32
|
+
from pytcl.containers.track_list import TrackList, TrackListStats, TrackQuery
|
|
33
|
+
from pytcl.containers.vptree import VPNode, VPTree, VPTreeResult
|
|
37
34
|
|
|
38
35
|
__all__ = [
|
|
39
36
|
# K-D Tree
|
pytcl/containers/cluster_set.py
CHANGED
|
@@ -7,18 +7,10 @@ that move together (formations, convoys, etc.).
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
-
from typing import Dict
|
|
11
|
-
from typing import Iterable
|
|
12
|
-
from typing import Iterator
|
|
13
|
-
from typing import List
|
|
14
|
-
from typing import NamedTuple
|
|
15
|
-
from typing import Optional
|
|
16
|
-
from typing import Tuple
|
|
17
|
-
from typing import Union
|
|
10
|
+
from typing import Dict, Iterable, Iterator, List, NamedTuple, Optional, Tuple, Union
|
|
18
11
|
|
|
19
12
|
import numpy as np
|
|
20
|
-
from numpy.typing import ArrayLike
|
|
21
|
-
from numpy.typing import NDArray
|
|
13
|
+
from numpy.typing import ArrayLike, NDArray
|
|
22
14
|
|
|
23
15
|
from pytcl.clustering.dbscan import dbscan
|
|
24
16
|
from pytcl.clustering.kmeans import kmeans
|
pytcl/containers/covertree.py
CHANGED
|
@@ -11,16 +11,10 @@ References
|
|
|
11
11
|
neighbor," ICML 2006.
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
-
from typing import Callable
|
|
15
|
-
from typing import List
|
|
16
|
-
from typing import NamedTuple
|
|
17
|
-
from typing import Optional
|
|
18
|
-
from typing import Set
|
|
19
|
-
from typing import Tuple
|
|
14
|
+
from typing import Callable, List, NamedTuple, Optional, Set, Tuple
|
|
20
15
|
|
|
21
16
|
import numpy as np
|
|
22
|
-
from numpy.typing import ArrayLike
|
|
23
|
-
from numpy.typing import NDArray
|
|
17
|
+
from numpy.typing import ArrayLike, NDArray
|
|
24
18
|
|
|
25
19
|
|
|
26
20
|
class CoverTreeResult(NamedTuple):
|
pytcl/containers/kd_tree.py
CHANGED
|
@@ -13,14 +13,10 @@ References
|
|
|
13
13
|
Finding Best Matches in Logarithmic Expected Time," ACM TOMS, 1977.
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
-
from typing import List
|
|
17
|
-
from typing import NamedTuple
|
|
18
|
-
from typing import Optional
|
|
19
|
-
from typing import Tuple
|
|
16
|
+
from typing import List, NamedTuple, Optional, Tuple
|
|
20
17
|
|
|
21
18
|
import numpy as np
|
|
22
|
-
from numpy.typing import ArrayLike
|
|
23
|
-
from numpy.typing import NDArray
|
|
19
|
+
from numpy.typing import ArrayLike, NDArray
|
|
24
20
|
|
|
25
21
|
|
|
26
22
|
class KDNode:
|
|
@@ -7,17 +7,10 @@ with spatial query support.
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
-
from typing import Iterable
|
|
11
|
-
from typing import Iterator
|
|
12
|
-
from typing import List
|
|
13
|
-
from typing import NamedTuple
|
|
14
|
-
from typing import Optional
|
|
15
|
-
from typing import Tuple
|
|
16
|
-
from typing import Union
|
|
10
|
+
from typing import Iterable, Iterator, List, NamedTuple, Optional, Tuple, Union
|
|
17
11
|
|
|
18
12
|
import numpy as np
|
|
19
|
-
from numpy.typing import ArrayLike
|
|
20
|
-
from numpy.typing import NDArray
|
|
13
|
+
from numpy.typing import ArrayLike, NDArray
|
|
21
14
|
|
|
22
15
|
from pytcl.containers.kd_tree import KDTree
|
|
23
16
|
|
pytcl/containers/rtree.py
CHANGED
|
@@ -13,14 +13,10 @@ References
|
|
|
13
13
|
Method for Points and Rectangles," ACM SIGMOD, 1990.
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
-
from typing import List
|
|
17
|
-
from typing import NamedTuple
|
|
18
|
-
from typing import Optional
|
|
19
|
-
from typing import Tuple
|
|
16
|
+
from typing import List, NamedTuple, Optional, Tuple
|
|
20
17
|
|
|
21
18
|
import numpy as np
|
|
22
|
-
from numpy.typing import ArrayLike
|
|
23
|
-
from numpy.typing import NDArray
|
|
19
|
+
from numpy.typing import ArrayLike, NDArray
|
|
24
20
|
|
|
25
21
|
|
|
26
22
|
class BoundingBox(NamedTuple):
|
pytcl/containers/track_list.py
CHANGED
|
@@ -7,22 +7,22 @@ with filtering, querying, and batch operations.
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
-
from typing import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
from typing import (
|
|
11
|
+
TYPE_CHECKING,
|
|
12
|
+
Callable,
|
|
13
|
+
Iterable,
|
|
14
|
+
Iterator,
|
|
15
|
+
List,
|
|
16
|
+
NamedTuple,
|
|
17
|
+
Optional,
|
|
18
|
+
Tuple,
|
|
19
|
+
Union,
|
|
20
|
+
)
|
|
19
21
|
|
|
20
22
|
import numpy as np
|
|
21
|
-
from numpy.typing import ArrayLike
|
|
22
|
-
from numpy.typing import NDArray
|
|
23
|
+
from numpy.typing import ArrayLike, NDArray
|
|
23
24
|
|
|
24
|
-
from pytcl.trackers.multi_target import Track
|
|
25
|
-
from pytcl.trackers.multi_target import TrackStatus
|
|
25
|
+
from pytcl.trackers.multi_target import Track, TrackStatus
|
|
26
26
|
|
|
27
27
|
if TYPE_CHECKING:
|
|
28
28
|
from pytcl.trackers.multi_target import MultiTargetTracker
|