nrl-tracker 1.1.3__tar.gz → 1.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nrl_tracker-1.1.3/nrl_tracker.egg-info → nrl_tracker-1.3.0}/PKG-INFO +1 -1
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0/nrl_tracker.egg-info}/PKG-INFO +1 -1
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/nrl_tracker.egg-info/SOURCES.txt +6 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pyproject.toml +1 -1
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/__init__.py +1 -1
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/astronomical/reference_frames.py +127 -55
- nrl_tracker-1.3.0/pytcl/atmosphere/__init__.py +68 -0
- nrl_tracker-1.3.0/pytcl/atmosphere/ionosphere.py +512 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/containers/__init__.py +24 -0
- nrl_tracker-1.3.0/pytcl/containers/base.py +219 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/containers/covertree.py +21 -26
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/containers/kd_tree.py +94 -29
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/containers/rtree.py +199 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/containers/vptree.py +17 -26
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/core/__init__.py +18 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/core/validation.py +331 -0
- nrl_tracker-1.3.0/pytcl/dynamic_estimation/kalman/square_root.py +484 -0
- nrl_tracker-1.3.0/pytcl/dynamic_estimation/kalman/sr_ukf.py +302 -0
- nrl_tracker-1.3.0/pytcl/dynamic_estimation/kalman/ud_filter.py +404 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/gravity/egm.py +13 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/gravity/spherical_harmonics.py +97 -36
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/magnetism/__init__.py +7 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/magnetism/wmm.py +260 -23
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/special_functions/debye.py +132 -26
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/special_functions/hypergeometric.py +79 -15
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/navigation/geodesy.py +245 -159
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/navigation/great_circle.py +98 -16
- nrl_tracker-1.3.0/tests/test_spatial_containers_parametrized.py +467 -0
- nrl_tracker-1.3.0/tests/test_validation.py +482 -0
- nrl_tracker-1.1.3/pytcl/atmosphere/__init__.py +0 -37
- nrl_tracker-1.1.3/pytcl/dynamic_estimation/kalman/square_root.py +0 -1003
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/CONTRIBUTING.md +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/LICENSE +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/MANIFEST.in +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/README.md +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/nrl_tracker.egg-info/dependency_links.txt +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/nrl_tracker.egg-info/requires.txt +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/nrl_tracker.egg-info/top_level.txt +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/assignment_algorithms/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/assignment_algorithms/data_association.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/assignment_algorithms/gating.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/assignment_algorithms/jpda.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/assignment_algorithms/three_dimensional/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/assignment_algorithms/three_dimensional/assignment.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/assignment_algorithms/two_dimensional/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/assignment_algorithms/two_dimensional/assignment.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/assignment_algorithms/two_dimensional/kbest.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/astronomical/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/astronomical/ephemerides.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/astronomical/lambert.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/astronomical/orbital_mechanics.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/astronomical/relativity.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/astronomical/time_systems.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/atmosphere/models.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/clustering/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/clustering/dbscan.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/clustering/gaussian_mixture.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/clustering/hierarchical.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/clustering/kmeans.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/containers/cluster_set.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/containers/measurement_set.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/containers/track_list.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/coordinate_systems/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/coordinate_systems/conversions/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/coordinate_systems/conversions/geodetic.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/coordinate_systems/conversions/spherical.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/coordinate_systems/jacobians/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/coordinate_systems/jacobians/jacobians.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/coordinate_systems/projections/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/coordinate_systems/projections/projections.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/coordinate_systems/rotations/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/coordinate_systems/rotations/rotations.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/core/array_utils.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/core/constants.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/batch_estimation/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/imm.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/information_filter.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/kalman/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/kalman/extended.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/kalman/linear.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/kalman/unscented.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/measurement_update/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/particle_filters/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/particle_filters/bootstrap.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_estimation/smoothers.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_models/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_models/continuous_time/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_models/continuous_time/dynamics.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_models/discrete_time/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_models/discrete_time/coordinated_turn.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_models/discrete_time/polynomial.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_models/discrete_time/singer.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_models/process_noise/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_models/process_noise/coordinated_turn.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_models/process_noise/polynomial.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/dynamic_models/process_noise/singer.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/gravity/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/gravity/clenshaw.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/gravity/models.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/gravity/tides.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/logging_config.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/magnetism/emm.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/magnetism/igrf.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/basic_matrix/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/basic_matrix/decompositions.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/basic_matrix/special_matrices.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/combinatorics/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/combinatorics/combinatorics.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/continuous_optimization/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/geometry/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/geometry/geometry.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/interpolation/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/interpolation/interpolation.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/numerical_integration/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/numerical_integration/quadrature.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/polynomials/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/signal_processing/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/signal_processing/detection.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/signal_processing/filters.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/signal_processing/matched_filter.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/special_functions/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/special_functions/bessel.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/special_functions/elliptic.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/special_functions/error_functions.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/special_functions/gamma_functions.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/special_functions/lambert_w.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/special_functions/marcum_q.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/statistics/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/statistics/distributions.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/statistics/estimators.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/transforms/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/transforms/fourier.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/transforms/stft.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/mathematical_functions/transforms/wavelets.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/misc/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/navigation/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/navigation/ins.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/navigation/ins_gnss.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/navigation/rhumb.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/performance_evaluation/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/performance_evaluation/estimation_metrics.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/performance_evaluation/track_metrics.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/physical_values/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/plotting/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/plotting/coordinates.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/plotting/ellipses.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/plotting/metrics.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/plotting/tracks.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/scheduling/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/static_estimation/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/static_estimation/least_squares.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/static_estimation/maximum_likelihood.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/static_estimation/robust.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/terrain/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/terrain/dem.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/terrain/loaders.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/terrain/visibility.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/trackers/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/trackers/hypothesis.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/trackers/mht.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/trackers/multi_target.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/trackers/single_target.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/pytcl/transponders/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/setup.cfg +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/__init__.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/conftest.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_additional_trees.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_assignment_algorithms.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_astronomical.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_clustering.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_coordinate_systems.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_coverage_boost.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_coverage_boost_2.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_dynamic_models.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_egm.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_emm.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_ephemerides.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_gaussian_mixtures.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_geophysical.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_great_circle.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_ins.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_ins_gnss.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_kalman_filters.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_mathematical_functions.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_maximum_likelihood.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_mht.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_performance_evaluation.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_phase6_specialized.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_plotting.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_projections.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_relativity.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_rhumb.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_signal_processing.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_smoothers.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_spatial_structures.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_special_functions_phase12.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_static_estimation.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_terrain.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_terrain_loaders.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_tides.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_trackers.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_tracking_containers.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_transforms.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_v030_comprehensive.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/test_v030_features.py +0 -0
- {nrl_tracker-1.1.3 → nrl_tracker-1.3.0}/tests/unit/test_core.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: nrl-tracker
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: nrl-tracker
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.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
|
|
@@ -27,6 +27,7 @@ pytcl/astronomical/reference_frames.py
|
|
|
27
27
|
pytcl/astronomical/relativity.py
|
|
28
28
|
pytcl/astronomical/time_systems.py
|
|
29
29
|
pytcl/atmosphere/__init__.py
|
|
30
|
+
pytcl/atmosphere/ionosphere.py
|
|
30
31
|
pytcl/atmosphere/models.py
|
|
31
32
|
pytcl/clustering/__init__.py
|
|
32
33
|
pytcl/clustering/dbscan.py
|
|
@@ -34,6 +35,7 @@ pytcl/clustering/gaussian_mixture.py
|
|
|
34
35
|
pytcl/clustering/hierarchical.py
|
|
35
36
|
pytcl/clustering/kmeans.py
|
|
36
37
|
pytcl/containers/__init__.py
|
|
38
|
+
pytcl/containers/base.py
|
|
37
39
|
pytcl/containers/cluster_set.py
|
|
38
40
|
pytcl/containers/covertree.py
|
|
39
41
|
pytcl/containers/kd_tree.py
|
|
@@ -64,6 +66,8 @@ pytcl/dynamic_estimation/kalman/__init__.py
|
|
|
64
66
|
pytcl/dynamic_estimation/kalman/extended.py
|
|
65
67
|
pytcl/dynamic_estimation/kalman/linear.py
|
|
66
68
|
pytcl/dynamic_estimation/kalman/square_root.py
|
|
69
|
+
pytcl/dynamic_estimation/kalman/sr_ukf.py
|
|
70
|
+
pytcl/dynamic_estimation/kalman/ud_filter.py
|
|
67
71
|
pytcl/dynamic_estimation/kalman/unscented.py
|
|
68
72
|
pytcl/dynamic_estimation/measurement_update/__init__.py
|
|
69
73
|
pytcl/dynamic_estimation/particle_filters/__init__.py
|
|
@@ -184,6 +188,7 @@ tests/test_relativity.py
|
|
|
184
188
|
tests/test_rhumb.py
|
|
185
189
|
tests/test_signal_processing.py
|
|
186
190
|
tests/test_smoothers.py
|
|
191
|
+
tests/test_spatial_containers_parametrized.py
|
|
187
192
|
tests/test_spatial_structures.py
|
|
188
193
|
tests/test_special_functions_phase12.py
|
|
189
194
|
tests/test_static_estimation.py
|
|
@@ -195,4 +200,5 @@ tests/test_tracking_containers.py
|
|
|
195
200
|
tests/test_transforms.py
|
|
196
201
|
tests/test_v030_comprehensive.py
|
|
197
202
|
tests/test_v030_features.py
|
|
203
|
+
tests/test_validation.py
|
|
198
204
|
tests/unit/test_core.py
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "nrl-tracker"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.3.0"
|
|
8
8
|
description = "Python port of the U.S. Naval Research Laboratory's Tracker Component Library for target tracking algorithms"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -21,6 +21,8 @@ References
|
|
|
21
21
|
A&A, 2003.
|
|
22
22
|
"""
|
|
23
23
|
|
|
24
|
+
import logging
|
|
25
|
+
from functools import lru_cache
|
|
24
26
|
from typing import Tuple
|
|
25
27
|
|
|
26
28
|
import numpy as np
|
|
@@ -28,6 +30,22 @@ from numpy.typing import NDArray
|
|
|
28
30
|
|
|
29
31
|
from pytcl.astronomical.time_systems import JD_J2000
|
|
30
32
|
|
|
33
|
+
# Module logger
|
|
34
|
+
_logger = logging.getLogger("pytcl.astronomical.reference_frames")
|
|
35
|
+
|
|
36
|
+
# Cache configuration
|
|
37
|
+
_CACHE_JD_DECIMALS = 6 # ~86ms precision for JD quantization
|
|
38
|
+
_CACHE_MAXSIZE = 128 # Max cached epochs
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _quantize_jd(jd: float) -> float:
|
|
42
|
+
"""Quantize Julian date for cache key compatibility.
|
|
43
|
+
|
|
44
|
+
Rounds to _CACHE_JD_DECIMALS decimal places (~86ms precision).
|
|
45
|
+
This enables cache hits for nearly identical epochs.
|
|
46
|
+
"""
|
|
47
|
+
return round(jd, _CACHE_JD_DECIMALS)
|
|
48
|
+
|
|
31
49
|
|
|
32
50
|
def julian_centuries_j2000(jd: float) -> float:
|
|
33
51
|
"""
|
|
@@ -78,6 +96,37 @@ def precession_angles_iau76(T: float) -> Tuple[float, float, float]:
|
|
|
78
96
|
)
|
|
79
97
|
|
|
80
98
|
|
|
99
|
+
@lru_cache(maxsize=_CACHE_MAXSIZE)
|
|
100
|
+
def _precession_matrix_cached(jd_quantized: float) -> tuple:
|
|
101
|
+
"""Cached precession matrix computation (internal).
|
|
102
|
+
|
|
103
|
+
Returns tuple of tuples for hashability.
|
|
104
|
+
"""
|
|
105
|
+
T = julian_centuries_j2000(jd_quantized)
|
|
106
|
+
zeta, theta, z = precession_angles_iau76(T)
|
|
107
|
+
|
|
108
|
+
cos_zeta = np.cos(zeta)
|
|
109
|
+
sin_zeta = np.sin(zeta)
|
|
110
|
+
cos_theta = np.cos(theta)
|
|
111
|
+
sin_theta = np.sin(theta)
|
|
112
|
+
cos_z = np.cos(z)
|
|
113
|
+
sin_z = np.sin(z)
|
|
114
|
+
|
|
115
|
+
return (
|
|
116
|
+
(
|
|
117
|
+
cos_zeta * cos_theta * cos_z - sin_zeta * sin_z,
|
|
118
|
+
-sin_zeta * cos_theta * cos_z - cos_zeta * sin_z,
|
|
119
|
+
-sin_theta * cos_z,
|
|
120
|
+
),
|
|
121
|
+
(
|
|
122
|
+
cos_zeta * cos_theta * sin_z + sin_zeta * cos_z,
|
|
123
|
+
-sin_zeta * cos_theta * sin_z + cos_zeta * cos_z,
|
|
124
|
+
-sin_theta * sin_z,
|
|
125
|
+
),
|
|
126
|
+
(cos_zeta * sin_theta, -sin_zeta * sin_theta, cos_theta),
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
|
|
81
130
|
def precession_matrix_iau76(jd: float) -> NDArray[np.floating]:
|
|
82
131
|
"""
|
|
83
132
|
Compute IAU 1976 precession matrix from J2000 to date.
|
|
@@ -92,34 +141,15 @@ def precession_matrix_iau76(jd: float) -> NDArray[np.floating]:
|
|
|
92
141
|
P : ndarray
|
|
93
142
|
Precession rotation matrix (3x3).
|
|
94
143
|
Transforms from J2000 (GCRF) to mean of date.
|
|
95
|
-
"""
|
|
96
|
-
T = julian_centuries_j2000(jd)
|
|
97
|
-
zeta, theta, z = precession_angles_iau76(T)
|
|
98
144
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
[
|
|
108
|
-
[
|
|
109
|
-
cos_zeta * cos_theta * cos_z - sin_zeta * sin_z,
|
|
110
|
-
-sin_zeta * cos_theta * cos_z - cos_zeta * sin_z,
|
|
111
|
-
-sin_theta * cos_z,
|
|
112
|
-
],
|
|
113
|
-
[
|
|
114
|
-
cos_zeta * cos_theta * sin_z + sin_zeta * cos_z,
|
|
115
|
-
-sin_zeta * cos_theta * sin_z + cos_zeta * cos_z,
|
|
116
|
-
-sin_theta * sin_z,
|
|
117
|
-
],
|
|
118
|
-
[cos_zeta * sin_theta, -sin_zeta * sin_theta, cos_theta],
|
|
119
|
-
]
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
return P
|
|
145
|
+
Notes
|
|
146
|
+
-----
|
|
147
|
+
Results are cached for repeated queries at the same epoch.
|
|
148
|
+
Cache key is quantized to ~86ms precision.
|
|
149
|
+
"""
|
|
150
|
+
jd_q = _quantize_jd(jd)
|
|
151
|
+
cached = _precession_matrix_cached(jd_q)
|
|
152
|
+
return np.array(cached)
|
|
123
153
|
|
|
124
154
|
|
|
125
155
|
def nutation_angles_iau80(jd: float) -> Tuple[float, float]:
|
|
@@ -203,6 +233,38 @@ def mean_obliquity_iau80(jd: float) -> float:
|
|
|
203
233
|
return eps0_arcsec * np.pi / (180 * 3600)
|
|
204
234
|
|
|
205
235
|
|
|
236
|
+
@lru_cache(maxsize=_CACHE_MAXSIZE)
|
|
237
|
+
def _nutation_matrix_cached(jd_quantized: float) -> tuple:
|
|
238
|
+
"""Cached nutation matrix computation (internal).
|
|
239
|
+
|
|
240
|
+
Returns tuple of tuples for hashability.
|
|
241
|
+
"""
|
|
242
|
+
dpsi, deps = nutation_angles_iau80(jd_quantized)
|
|
243
|
+
eps0 = mean_obliquity_iau80(jd_quantized)
|
|
244
|
+
eps = eps0 + deps
|
|
245
|
+
|
|
246
|
+
cos_eps0 = np.cos(eps0)
|
|
247
|
+
sin_eps0 = np.sin(eps0)
|
|
248
|
+
cos_eps = np.cos(eps)
|
|
249
|
+
sin_eps = np.sin(eps)
|
|
250
|
+
cos_dpsi = np.cos(dpsi)
|
|
251
|
+
sin_dpsi = np.sin(dpsi)
|
|
252
|
+
|
|
253
|
+
return (
|
|
254
|
+
(cos_dpsi, -sin_dpsi * cos_eps0, -sin_dpsi * sin_eps0),
|
|
255
|
+
(
|
|
256
|
+
sin_dpsi * cos_eps,
|
|
257
|
+
cos_dpsi * cos_eps0 * cos_eps + sin_eps0 * sin_eps,
|
|
258
|
+
cos_dpsi * sin_eps0 * cos_eps - cos_eps0 * sin_eps,
|
|
259
|
+
),
|
|
260
|
+
(
|
|
261
|
+
sin_dpsi * sin_eps,
|
|
262
|
+
cos_dpsi * cos_eps0 * sin_eps - sin_eps0 * cos_eps,
|
|
263
|
+
cos_dpsi * sin_eps0 * sin_eps + cos_eps0 * cos_eps,
|
|
264
|
+
),
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
|
|
206
268
|
def nutation_matrix(jd: float) -> NDArray[np.floating]:
|
|
207
269
|
"""
|
|
208
270
|
Compute nutation matrix.
|
|
@@ -217,35 +279,15 @@ def nutation_matrix(jd: float) -> NDArray[np.floating]:
|
|
|
217
279
|
N : ndarray
|
|
218
280
|
Nutation rotation matrix (3x3).
|
|
219
281
|
Transforms from mean of date to true of date.
|
|
220
|
-
"""
|
|
221
|
-
dpsi, deps = nutation_angles_iau80(jd)
|
|
222
|
-
eps0 = mean_obliquity_iau80(jd)
|
|
223
|
-
eps = eps0 + deps
|
|
224
282
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
[
|
|
234
|
-
[cos_dpsi, -sin_dpsi * cos_eps0, -sin_dpsi * sin_eps0],
|
|
235
|
-
[
|
|
236
|
-
sin_dpsi * cos_eps,
|
|
237
|
-
cos_dpsi * cos_eps0 * cos_eps + sin_eps0 * sin_eps,
|
|
238
|
-
cos_dpsi * sin_eps0 * cos_eps - cos_eps0 * sin_eps,
|
|
239
|
-
],
|
|
240
|
-
[
|
|
241
|
-
sin_dpsi * sin_eps,
|
|
242
|
-
cos_dpsi * cos_eps0 * sin_eps - sin_eps0 * cos_eps,
|
|
243
|
-
cos_dpsi * sin_eps0 * sin_eps + cos_eps0 * cos_eps,
|
|
244
|
-
],
|
|
245
|
-
]
|
|
246
|
-
)
|
|
247
|
-
|
|
248
|
-
return N
|
|
283
|
+
Notes
|
|
284
|
+
-----
|
|
285
|
+
Results are cached for repeated queries at the same epoch.
|
|
286
|
+
Cache key is quantized to ~86ms precision.
|
|
287
|
+
"""
|
|
288
|
+
jd_q = _quantize_jd(jd)
|
|
289
|
+
cached = _nutation_matrix_cached(jd_q)
|
|
290
|
+
return np.array(cached)
|
|
249
291
|
|
|
250
292
|
|
|
251
293
|
def earth_rotation_angle(jd_ut1: float) -> float:
|
|
@@ -647,6 +689,33 @@ def equatorial_to_ecliptic(
|
|
|
647
689
|
return R @ r_eq
|
|
648
690
|
|
|
649
691
|
|
|
692
|
+
def clear_transformation_cache() -> None:
|
|
693
|
+
"""Clear cached transformation matrices.
|
|
694
|
+
|
|
695
|
+
Call this function to clear all cached precession and nutation
|
|
696
|
+
matrices. Useful when memory is constrained or after processing
|
|
697
|
+
a batch of observations at different epochs.
|
|
698
|
+
"""
|
|
699
|
+
_precession_matrix_cached.cache_clear()
|
|
700
|
+
_nutation_matrix_cached.cache_clear()
|
|
701
|
+
_logger.debug("Transformation matrix cache cleared")
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
def get_cache_info() -> dict:
|
|
705
|
+
"""Get cache statistics for transformation matrices.
|
|
706
|
+
|
|
707
|
+
Returns
|
|
708
|
+
-------
|
|
709
|
+
dict
|
|
710
|
+
Dictionary with 'precession' and 'nutation' keys, each containing
|
|
711
|
+
CacheInfo namedtuple with hits, misses, maxsize, currsize.
|
|
712
|
+
"""
|
|
713
|
+
return {
|
|
714
|
+
"precession": _precession_matrix_cached.cache_info(),
|
|
715
|
+
"nutation": _nutation_matrix_cached.cache_info(),
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
|
|
650
719
|
__all__ = [
|
|
651
720
|
# Time utilities
|
|
652
721
|
"julian_centuries_j2000",
|
|
@@ -674,4 +743,7 @@ __all__ = [
|
|
|
674
743
|
# Ecliptic/equatorial
|
|
675
744
|
"ecliptic_to_equatorial",
|
|
676
745
|
"equatorial_to_ecliptic",
|
|
746
|
+
# Cache management
|
|
747
|
+
"clear_transformation_cache",
|
|
748
|
+
"get_cache_info",
|
|
677
749
|
]
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Atmospheric models for tracking applications.
|
|
3
|
+
|
|
4
|
+
This module provides standard atmosphere models used for computing
|
|
5
|
+
temperature, pressure, density, and other properties at various altitudes.
|
|
6
|
+
|
|
7
|
+
Submodules
|
|
8
|
+
----------
|
|
9
|
+
models : Standard atmosphere models (US76, ISA)
|
|
10
|
+
ionosphere : Ionospheric models for GPS/GNSS corrections
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from pytcl.atmosphere.ionosphere import (
|
|
14
|
+
DEFAULT_KLOBUCHAR,
|
|
15
|
+
F_L1,
|
|
16
|
+
F_L2,
|
|
17
|
+
IonosphereState,
|
|
18
|
+
KlobucharCoefficients,
|
|
19
|
+
dual_frequency_tec,
|
|
20
|
+
ionospheric_delay_from_tec,
|
|
21
|
+
klobuchar_delay,
|
|
22
|
+
magnetic_latitude,
|
|
23
|
+
scintillation_index,
|
|
24
|
+
simple_iri,
|
|
25
|
+
)
|
|
26
|
+
from pytcl.atmosphere.models import G0 # Constants
|
|
27
|
+
from pytcl.atmosphere.models import (
|
|
28
|
+
GAMMA,
|
|
29
|
+
P0,
|
|
30
|
+
RHO0,
|
|
31
|
+
T0,
|
|
32
|
+
AtmosphereState,
|
|
33
|
+
R,
|
|
34
|
+
altitude_from_pressure,
|
|
35
|
+
isa_atmosphere,
|
|
36
|
+
mach_number,
|
|
37
|
+
true_airspeed_from_mach,
|
|
38
|
+
us_standard_atmosphere_1976,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
__all__ = [
|
|
42
|
+
# Atmosphere state and models
|
|
43
|
+
"AtmosphereState",
|
|
44
|
+
"us_standard_atmosphere_1976",
|
|
45
|
+
"isa_atmosphere",
|
|
46
|
+
"altitude_from_pressure",
|
|
47
|
+
"mach_number",
|
|
48
|
+
"true_airspeed_from_mach",
|
|
49
|
+
# Atmosphere constants
|
|
50
|
+
"T0",
|
|
51
|
+
"P0",
|
|
52
|
+
"RHO0",
|
|
53
|
+
"G0",
|
|
54
|
+
"R",
|
|
55
|
+
"GAMMA",
|
|
56
|
+
# Ionosphere
|
|
57
|
+
"IonosphereState",
|
|
58
|
+
"KlobucharCoefficients",
|
|
59
|
+
"DEFAULT_KLOBUCHAR",
|
|
60
|
+
"klobuchar_delay",
|
|
61
|
+
"dual_frequency_tec",
|
|
62
|
+
"ionospheric_delay_from_tec",
|
|
63
|
+
"simple_iri",
|
|
64
|
+
"magnetic_latitude",
|
|
65
|
+
"scintillation_index",
|
|
66
|
+
"F_L1",
|
|
67
|
+
"F_L2",
|
|
68
|
+
]
|