nrl-tracker 1.5.0__py3-none-any.whl → 1.6.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nrl-tracker
3
- Version: 1.5.0
3
+ Version: 1.6.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
@@ -63,15 +63,16 @@ Requires-Dist: plotly>=5.15.0; extra == "visualization"
63
63
 
64
64
  # Tracker Component Library (Python)
65
65
 
66
- [![PyPI version](https://img.shields.io/badge/pypi-v1.5.0-blue.svg)](https://pypi.org/project/nrl-tracker/)
66
+ [![PyPI version](https://img.shields.io/badge/pypi-v1.6.0-blue.svg)](https://pypi.org/project/nrl-tracker/)
67
67
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
68
68
  [![License: Public Domain](https://img.shields.io/badge/License-Public%20Domain-brightgreen.svg)](https://en.wikipedia.org/wiki/Public_domain)
69
69
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
70
- [![Tests](https://img.shields.io/badge/tests-1850%20passing-success.svg)](https://github.com/nedonatelli/TCL)
70
+ [![Tests](https://img.shields.io/badge/tests-1922%20passing-success.svg)](https://github.com/nedonatelli/TCL)
71
+ [![MATLAB Parity](https://img.shields.io/badge/MATLAB%20Parity-99%25-brightgreen.svg)](docs/gap_analysis.rst)
71
72
 
72
73
  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.
73
74
 
74
- **840+ functions** | **148 modules** | **1,850 tests** | **15+ algorithm categories**
75
+ **1,070+ functions** | **150+ modules** | **1,922 tests** | **99% MATLAB parity**
75
76
 
76
77
  ## Overview
77
78
 
@@ -79,10 +80,10 @@ The Tracker Component Library provides building blocks for developing target tra
79
80
 
80
81
  - **Coordinate Systems**: Conversions between Cartesian, spherical, geodetic, and other coordinate systems
81
82
  - **Dynamic Models**: State transition matrices for constant velocity, coordinated turn, and other motion models
82
- - **Estimation Algorithms**: Kalman filters (EKF, UKF, etc.), particle filters, and batch estimation
83
+ - **Estimation Algorithms**: Kalman filters (EKF, UKF, CKF, H-infinity), particle filters, and batch estimation
83
84
  - **Assignment Algorithms**: Hungarian algorithm, auction algorithms, and multi-dimensional assignment
84
85
  - **Mathematical Functions**: Special functions, statistics, numerical integration, and more
85
- - **Astronomical Code**: Ephemeris calculations, time systems, celestial mechanics
86
+ - **Astronomical Code**: SGP4/SDP4 propagation, TLE parsing, reference frames (GCRF, ITRF, TEME, TOD, MOD), ephemerides
86
87
  - **Navigation**: Geodetic calculations, INS algorithms, GNSS utilities
87
88
  - **Geophysical Models**: Gravity, magnetism, atmosphere, and terrain models
88
89
 
@@ -1,4 +1,4 @@
1
- pytcl/__init__.py,sha256=our-crvOz-5G39s3UNhw5wyM7pe9wFNrJJooFLorYeQ,1893
1
+ pytcl/__init__.py,sha256=MzvSIKPmRaoieVDhHJbYHqNeZpQbRSj8sVclDiW8wbY,1893
2
2
  pytcl/logging_config.py,sha256=j7Zrkal5LwUIos-_Dm3cGKUR-jMkFdSZZikJTtzTeoE,8883
3
3
  pytcl/assignment_algorithms/__init__.py,sha256=f9V-TkEVmiKYYyth4PTpDfJvA7yYV_ys6Zix-QwWIYY,2136
4
4
  pytcl/assignment_algorithms/data_association.py,sha256=tsRxWJZk9aAPmE99BKXGouEpFfZrjPjb4HXvgxFUHhU,11405
@@ -9,13 +9,15 @@ pytcl/assignment_algorithms/three_dimensional/assignment.py,sha256=9BJhwlYu3JJ0k
9
9
  pytcl/assignment_algorithms/two_dimensional/__init__.py,sha256=4Evsn__9hTfI2i8m8Ngl-Zy0Fa2OydKmDKlZlH6jaao,778
10
10
  pytcl/assignment_algorithms/two_dimensional/assignment.py,sha256=eh87MBb-uiUSI1MXj4HrreRKB6Z8rxAyDkNQ8-u4SbM,11848
11
11
  pytcl/assignment_algorithms/two_dimensional/kbest.py,sha256=yiTToLuP7xWxQlQ8E-fpgXg-5iu0nnXcJXStjUB0nOE,17284
12
- pytcl/astronomical/__init__.py,sha256=Dtf6hqXyKyFL5VP-sqI7m2QGK6l-rqRGxVIhgDuYHOg,7182
12
+ pytcl/astronomical/__init__.py,sha256=UhEIWbTaP0VbdTfnazzbG3kgDmBzoMjfGtVVowV7frE,8623
13
13
  pytcl/astronomical/ephemerides.py,sha256=x2500S0rF1D2h0dMR_2BnZaChbBZTooHLdrevttxlAc,16471
14
14
  pytcl/astronomical/lambert.py,sha256=Lc8FT1JmpI9WSXsG2s5vIRkSoBSV7r5hd3o2bGh2Ojo,15607
15
15
  pytcl/astronomical/orbital_mechanics.py,sha256=8GssRanwTowCl6PJYqmB_SDnNznLUq5gkPa3j6iEo3U,19965
16
- pytcl/astronomical/reference_frames.py,sha256=gkbQrhHY_EN0xt8i7m0dIJp67GgpEcDArY7J3YH-Mb8,17981
16
+ pytcl/astronomical/reference_frames.py,sha256=T1hXefW68r2Fh7QW4HhGYeXo_B6VMYMhi4jl-s3sG0U,33168
17
17
  pytcl/astronomical/relativity.py,sha256=YPsXLD-VRh-nqs1laC-wKpRO00fflm4GkyLhojPydbo,15441
18
+ pytcl/astronomical/sgp4.py,sha256=iNZrqMRUzR-LFeZiluzlNmkwxeYbIyF2F1cygyeEZVE,21546
18
19
  pytcl/astronomical/time_systems.py,sha256=Jg0Zaq60hc4Ts1aQtb5bK4KSZhz-uQse8gYC89Y0-TA,15243
20
+ pytcl/astronomical/tle.py,sha256=t3e2-0f3Wiz77q-pC2jfpohkrDfoYOEHacpNgWMNLAk,14638
19
21
  pytcl/atmosphere/__init__.py,sha256=swugW8rY2Jof-z_kPQ2P9vInBYjr1M69C1Q8AgN3RVo,1457
20
22
  pytcl/atmosphere/ionosphere.py,sha256=1qC3hY-27pD0XcLBjU735deKYmmi6qnj2fDG1zNbTqg,14681
21
23
  pytcl/atmosphere/models.py,sha256=pMLv8D7qoFqLZrlbTHLJJULOdDdhPskJ1m7KVKLV63E,9584
@@ -52,8 +54,9 @@ pytcl/dynamic_estimation/imm.py,sha256=IbKmouUiyzaYJbhWty63r3n_xV8thD-wd0qgZP1Sx
52
54
  pytcl/dynamic_estimation/information_filter.py,sha256=x7iQwO_iJT1dCSvDws5LqD3yAtjw9QVGUfMPcXn1IA4,17349
53
55
  pytcl/dynamic_estimation/smoothers.py,sha256=x2j-nR--EI5JNZvMywPeDHcrfW8b5PYK0DCU4Rmig_g,18914
54
56
  pytcl/dynamic_estimation/batch_estimation/__init__.py,sha256=JQ0s76Enov5a7plA4EnUua4t-7etikQrwr5z4WIjUeo,46
55
- pytcl/dynamic_estimation/kalman/__init__.py,sha256=yoFLj0n-NRkdZnRVL-BkHBlATk8pfZEVlsY3BhSYgKc,2387
57
+ pytcl/dynamic_estimation/kalman/__init__.py,sha256=z4y3nsk-AaQXq8YkFdNYePz11lMi-81l-zYYLSq37s0,2827
56
58
  pytcl/dynamic_estimation/kalman/extended.py,sha256=51uhCqkZmErCx6MBfMq8eIQW8bD7n34zCe4v4dxNiMQ,10384
59
+ pytcl/dynamic_estimation/kalman/h_infinity.py,sha256=ZfVuhMd4wtd6GDYdyECkm2y_PhPOKSHWn6X4vuoLGqY,16502
57
60
  pytcl/dynamic_estimation/kalman/linear.py,sha256=1Zgg9gZya0Vxs9im7sPUqLj0Luo463vS-RSa6GCReFI,12248
58
61
  pytcl/dynamic_estimation/kalman/square_root.py,sha256=N7-lDml7Nw5HM5b5D11WOwG7rY1JlVoyis0ho-vk0H4,13345
59
62
  pytcl/dynamic_estimation/kalman/sr_ukf.py,sha256=LeRGBSDpvSP9CyTZjEroz2Z2uueb6YpmzYricba0PDk,8640
@@ -148,8 +151,8 @@ pytcl/trackers/mht.py,sha256=7mwhMmja3ri2wnx7W1wueDGn2r3ArwAxJDPUJ7IZAkQ,20617
148
151
  pytcl/trackers/multi_target.py,sha256=hvt89ERhMwpcHcIJeKHnkQSKdE3_LoRiX-gbaGoo300,10516
149
152
  pytcl/trackers/single_target.py,sha256=Yy3FwaNTArMWcaod-0HVeiioNV4xLWxNDn_7ZPVqQYs,6562
150
153
  pytcl/transponders/__init__.py,sha256=5fL4u3lKCYgPLo5uFeuZbtRZkJPABntuKYGUvVgMMEI,41
151
- nrl_tracker-1.5.0.dist-info/LICENSE,sha256=rB5G4WppIIUzMOYr2N6uyYlNJ00hRJqE5tie6BMvYuE,1612
152
- nrl_tracker-1.5.0.dist-info/METADATA,sha256=fB1_KydehvDdL2UE8J4hyTuDcodKGN7CLHyoSUqgdV4,10145
153
- nrl_tracker-1.5.0.dist-info/WHEEL,sha256=pL8R0wFFS65tNSRnaOVrsw9EOkOqxLrlUPenUYnJKNo,91
154
- nrl_tracker-1.5.0.dist-info/top_level.txt,sha256=17megxcrTPBWwPZTh6jTkwTKxX7No-ZqRpyvElnnO-s,6
155
- nrl_tracker-1.5.0.dist-info/RECORD,,
154
+ nrl_tracker-1.6.0.dist-info/LICENSE,sha256=rB5G4WppIIUzMOYr2N6uyYlNJ00hRJqE5tie6BMvYuE,1612
155
+ nrl_tracker-1.6.0.dist-info/METADATA,sha256=i2-7x8Vz0pQuxltOgA7u8LEMTfTTUpJfM0Ru_wx6x_E,10299
156
+ nrl_tracker-1.6.0.dist-info/WHEEL,sha256=pL8R0wFFS65tNSRnaOVrsw9EOkOqxLrlUPenUYnJKNo,91
157
+ nrl_tracker-1.6.0.dist-info/top_level.txt,sha256=17megxcrTPBWwPZTh6jTkwTKxX7No-ZqRpyvElnnO-s,6
158
+ nrl_tracker-1.6.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__ = "1.5.0"
23
+ __version__ = "1.6.0"
24
24
  __author__ = "Python Port Contributors"
25
25
  __original_author__ = "David F. Crouse, Naval Research Laboratory"
26
26
 
@@ -87,16 +87,32 @@ from pytcl.astronomical.reference_frames import (
87
87
  equatorial_to_ecliptic,
88
88
  gast_iau82,
89
89
  gcrf_to_itrf,
90
+ gcrf_to_mod,
91
+ gcrf_to_teme,
92
+ gcrf_to_tod,
90
93
  gmst_iau82,
91
94
  itrf_to_gcrf,
95
+ itrf_to_teme,
96
+ itrf_to_teme_with_velocity,
97
+ itrf_to_tod,
92
98
  julian_centuries_j2000,
93
99
  mean_obliquity_iau80,
100
+ mod_to_gcrf,
101
+ mod_to_tod,
94
102
  nutation_angles_iau80,
95
103
  nutation_matrix,
104
+ pef_to_teme,
96
105
  polar_motion_matrix,
97
106
  precession_angles_iau76,
98
107
  precession_matrix_iau76,
99
108
  sidereal_rotation_matrix,
109
+ teme_to_gcrf,
110
+ teme_to_itrf,
111
+ teme_to_itrf_with_velocity,
112
+ teme_to_pef,
113
+ tod_to_gcrf,
114
+ tod_to_itrf,
115
+ tod_to_mod,
100
116
  true_obliquity,
101
117
  )
102
118
  from pytcl.astronomical.relativity import (
@@ -114,6 +130,12 @@ from pytcl.astronomical.relativity import (
114
130
  schwarzschild_radius,
115
131
  shapiro_delay,
116
132
  )
133
+ from pytcl.astronomical.sgp4 import (
134
+ SGP4Satellite,
135
+ SGP4State,
136
+ sgp4_propagate,
137
+ sgp4_propagate_batch,
138
+ )
117
139
  from pytcl.astronomical.time_systems import (
118
140
  JD_GPS_EPOCH, # Julian dates; Time scales; Unix time; GPS week; Sidereal time; Leap seconds; Constants
119
141
  )
@@ -145,6 +167,17 @@ from pytcl.astronomical.time_systems import (
145
167
  utc_to_tai,
146
168
  utc_to_tt,
147
169
  )
170
+ from pytcl.astronomical.tle import (
171
+ TLE,
172
+ format_tle,
173
+ is_deep_space,
174
+ orbital_period_from_tle,
175
+ parse_tle,
176
+ parse_tle_3line,
177
+ semi_major_axis_from_mean_motion,
178
+ tle_epoch_to_datetime,
179
+ tle_epoch_to_jd,
180
+ )
148
181
 
149
182
  __all__ = [
150
183
  # Time systems - Julian dates
@@ -251,6 +284,39 @@ __all__ = [
251
284
  # Reference frames - Ecliptic/equatorial
252
285
  "ecliptic_to_equatorial",
253
286
  "equatorial_to_ecliptic",
287
+ # Reference frames - TEME (for SGP4/SDP4)
288
+ "teme_to_pef",
289
+ "pef_to_teme",
290
+ "teme_to_itrf",
291
+ "itrf_to_teme",
292
+ "teme_to_gcrf",
293
+ "gcrf_to_teme",
294
+ "teme_to_itrf_with_velocity",
295
+ "itrf_to_teme_with_velocity",
296
+ # Reference frames - TOD/MOD (legacy conventions)
297
+ "gcrf_to_mod",
298
+ "mod_to_gcrf",
299
+ "gcrf_to_tod",
300
+ "tod_to_gcrf",
301
+ "mod_to_tod",
302
+ "tod_to_mod",
303
+ "tod_to_itrf",
304
+ "itrf_to_tod",
305
+ # TLE parsing
306
+ "TLE",
307
+ "parse_tle",
308
+ "parse_tle_3line",
309
+ "tle_epoch_to_jd",
310
+ "tle_epoch_to_datetime",
311
+ "format_tle",
312
+ "is_deep_space",
313
+ "semi_major_axis_from_mean_motion",
314
+ "orbital_period_from_tle",
315
+ # SGP4/SDP4 propagation
316
+ "SGP4State",
317
+ "SGP4Satellite",
318
+ "sgp4_propagate",
319
+ "sgp4_propagate_batch",
254
320
  # Ephemerides - Classes
255
321
  "DEEphemeris",
256
322
  # Ephemerides - Functions