nrl-tracker 0.22.1__tar.gz → 0.22.2__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.
Files changed (199) hide show
  1. {nrl_tracker-0.22.1/nrl_tracker.egg-info → nrl_tracker-0.22.2}/PKG-INFO +1 -1
  2. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2/nrl_tracker.egg-info}/PKG-INFO +1 -1
  3. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pyproject.toml +1 -1
  4. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/__init__.py +1 -1
  5. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/conftest.py +1 -3
  6. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_astronomical.py +1 -3
  7. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_coordinate_systems.py +1 -3
  8. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_coverage_boost.py +1 -3
  9. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_coverage_boost_2.py +3 -9
  10. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_egm.py +18 -54
  11. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_emm.py +14 -42
  12. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_ephemerides.py +100 -101
  13. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_gaussian_mixtures.py +1 -2
  14. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_great_circle.py +1 -3
  15. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_ins.py +1 -3
  16. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_ins_gnss.py +3 -9
  17. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_projections.py +1 -3
  18. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_relativity.py +96 -97
  19. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_smoothers.py +4 -12
  20. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_static_estimation.py +3 -9
  21. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_tides.py +4 -12
  22. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_trackers.py +4 -12
  23. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_v030_comprehensive.py +3 -9
  24. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_v030_features.py +1 -3
  25. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/CONTRIBUTING.md +0 -0
  26. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/LICENSE +0 -0
  27. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/MANIFEST.in +0 -0
  28. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/README.md +0 -0
  29. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/nrl_tracker.egg-info/SOURCES.txt +0 -0
  30. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/nrl_tracker.egg-info/dependency_links.txt +0 -0
  31. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/nrl_tracker.egg-info/requires.txt +0 -0
  32. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/nrl_tracker.egg-info/top_level.txt +0 -0
  33. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/assignment_algorithms/__init__.py +0 -0
  34. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/assignment_algorithms/data_association.py +0 -0
  35. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/assignment_algorithms/gating.py +0 -0
  36. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/assignment_algorithms/jpda.py +0 -0
  37. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/assignment_algorithms/three_dimensional/__init__.py +0 -0
  38. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/assignment_algorithms/three_dimensional/assignment.py +0 -0
  39. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/assignment_algorithms/two_dimensional/__init__.py +0 -0
  40. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/assignment_algorithms/two_dimensional/assignment.py +0 -0
  41. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/assignment_algorithms/two_dimensional/kbest.py +0 -0
  42. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/astronomical/__init__.py +0 -0
  43. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/astronomical/ephemerides.py +0 -0
  44. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/astronomical/lambert.py +0 -0
  45. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/astronomical/orbital_mechanics.py +0 -0
  46. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/astronomical/reference_frames.py +0 -0
  47. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/astronomical/relativity.py +0 -0
  48. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/astronomical/time_systems.py +0 -0
  49. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/atmosphere/__init__.py +0 -0
  50. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/atmosphere/models.py +0 -0
  51. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/clustering/__init__.py +0 -0
  52. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/clustering/dbscan.py +0 -0
  53. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/clustering/gaussian_mixture.py +0 -0
  54. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/clustering/hierarchical.py +0 -0
  55. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/clustering/kmeans.py +0 -0
  56. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/containers/__init__.py +0 -0
  57. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/containers/cluster_set.py +0 -0
  58. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/containers/covertree.py +0 -0
  59. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/containers/kd_tree.py +0 -0
  60. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/containers/measurement_set.py +0 -0
  61. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/containers/rtree.py +0 -0
  62. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/containers/track_list.py +0 -0
  63. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/containers/vptree.py +0 -0
  64. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/coordinate_systems/__init__.py +0 -0
  65. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/coordinate_systems/conversions/__init__.py +0 -0
  66. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/coordinate_systems/conversions/geodetic.py +0 -0
  67. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/coordinate_systems/conversions/spherical.py +0 -0
  68. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/coordinate_systems/jacobians/__init__.py +0 -0
  69. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/coordinate_systems/jacobians/jacobians.py +0 -0
  70. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/coordinate_systems/projections/__init__.py +0 -0
  71. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/coordinate_systems/projections/projections.py +0 -0
  72. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/coordinate_systems/rotations/__init__.py +0 -0
  73. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/coordinate_systems/rotations/rotations.py +0 -0
  74. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/core/__init__.py +0 -0
  75. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/core/array_utils.py +0 -0
  76. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/core/constants.py +0 -0
  77. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/core/validation.py +0 -0
  78. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/__init__.py +0 -0
  79. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/batch_estimation/__init__.py +0 -0
  80. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/imm.py +0 -0
  81. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/information_filter.py +0 -0
  82. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/kalman/__init__.py +0 -0
  83. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/kalman/extended.py +0 -0
  84. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/kalman/linear.py +0 -0
  85. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/kalman/square_root.py +0 -0
  86. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/kalman/unscented.py +0 -0
  87. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/measurement_update/__init__.py +0 -0
  88. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/particle_filters/__init__.py +0 -0
  89. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/particle_filters/bootstrap.py +0 -0
  90. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_estimation/smoothers.py +0 -0
  91. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_models/__init__.py +0 -0
  92. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_models/continuous_time/__init__.py +0 -0
  93. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_models/continuous_time/dynamics.py +0 -0
  94. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_models/discrete_time/__init__.py +0 -0
  95. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_models/discrete_time/coordinated_turn.py +0 -0
  96. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_models/discrete_time/polynomial.py +0 -0
  97. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_models/discrete_time/singer.py +0 -0
  98. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_models/process_noise/__init__.py +0 -0
  99. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_models/process_noise/coordinated_turn.py +0 -0
  100. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_models/process_noise/polynomial.py +0 -0
  101. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/dynamic_models/process_noise/singer.py +0 -0
  102. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/gravity/__init__.py +0 -0
  103. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/gravity/clenshaw.py +0 -0
  104. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/gravity/egm.py +0 -0
  105. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/gravity/models.py +0 -0
  106. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/gravity/spherical_harmonics.py +0 -0
  107. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/gravity/tides.py +0 -0
  108. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/magnetism/__init__.py +0 -0
  109. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/magnetism/emm.py +0 -0
  110. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/magnetism/igrf.py +0 -0
  111. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/magnetism/wmm.py +0 -0
  112. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/__init__.py +0 -0
  113. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/basic_matrix/__init__.py +0 -0
  114. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/basic_matrix/decompositions.py +0 -0
  115. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/basic_matrix/special_matrices.py +0 -0
  116. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/combinatorics/__init__.py +0 -0
  117. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/combinatorics/combinatorics.py +0 -0
  118. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/continuous_optimization/__init__.py +0 -0
  119. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/geometry/__init__.py +0 -0
  120. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/geometry/geometry.py +0 -0
  121. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/interpolation/__init__.py +0 -0
  122. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/interpolation/interpolation.py +0 -0
  123. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/numerical_integration/__init__.py +0 -0
  124. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/numerical_integration/quadrature.py +0 -0
  125. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/polynomials/__init__.py +0 -0
  126. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/signal_processing/__init__.py +0 -0
  127. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/signal_processing/detection.py +0 -0
  128. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/signal_processing/filters.py +0 -0
  129. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/signal_processing/matched_filter.py +0 -0
  130. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/special_functions/__init__.py +0 -0
  131. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/special_functions/bessel.py +0 -0
  132. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/special_functions/debye.py +0 -0
  133. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/special_functions/elliptic.py +0 -0
  134. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/special_functions/error_functions.py +0 -0
  135. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/special_functions/gamma_functions.py +0 -0
  136. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/special_functions/hypergeometric.py +0 -0
  137. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/special_functions/lambert_w.py +0 -0
  138. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/special_functions/marcum_q.py +0 -0
  139. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/statistics/__init__.py +0 -0
  140. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/statistics/distributions.py +0 -0
  141. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/statistics/estimators.py +0 -0
  142. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/transforms/__init__.py +0 -0
  143. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/transforms/fourier.py +0 -0
  144. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/transforms/stft.py +0 -0
  145. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/mathematical_functions/transforms/wavelets.py +0 -0
  146. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/misc/__init__.py +0 -0
  147. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/navigation/__init__.py +0 -0
  148. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/navigation/geodesy.py +0 -0
  149. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/navigation/great_circle.py +0 -0
  150. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/navigation/ins.py +0 -0
  151. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/navigation/ins_gnss.py +0 -0
  152. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/navigation/rhumb.py +0 -0
  153. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/performance_evaluation/__init__.py +0 -0
  154. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/performance_evaluation/estimation_metrics.py +0 -0
  155. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/performance_evaluation/track_metrics.py +0 -0
  156. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/physical_values/__init__.py +0 -0
  157. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/plotting/__init__.py +0 -0
  158. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/plotting/coordinates.py +0 -0
  159. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/plotting/ellipses.py +0 -0
  160. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/plotting/metrics.py +0 -0
  161. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/plotting/tracks.py +0 -0
  162. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/scheduling/__init__.py +0 -0
  163. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/static_estimation/__init__.py +0 -0
  164. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/static_estimation/least_squares.py +0 -0
  165. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/static_estimation/maximum_likelihood.py +0 -0
  166. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/static_estimation/robust.py +0 -0
  167. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/terrain/__init__.py +0 -0
  168. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/terrain/dem.py +0 -0
  169. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/terrain/loaders.py +0 -0
  170. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/terrain/visibility.py +0 -0
  171. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/trackers/__init__.py +0 -0
  172. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/trackers/hypothesis.py +0 -0
  173. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/trackers/mht.py +0 -0
  174. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/trackers/multi_target.py +0 -0
  175. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/trackers/single_target.py +0 -0
  176. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/pytcl/transponders/__init__.py +0 -0
  177. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/setup.cfg +0 -0
  178. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/__init__.py +0 -0
  179. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_additional_trees.py +0 -0
  180. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_assignment_algorithms.py +0 -0
  181. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_clustering.py +0 -0
  182. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_dynamic_models.py +0 -0
  183. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_geophysical.py +0 -0
  184. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_kalman_filters.py +0 -0
  185. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_mathematical_functions.py +0 -0
  186. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_maximum_likelihood.py +0 -0
  187. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_mht.py +0 -0
  188. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_performance_evaluation.py +0 -0
  189. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_phase6_specialized.py +0 -0
  190. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_plotting.py +0 -0
  191. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_rhumb.py +0 -0
  192. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_signal_processing.py +0 -0
  193. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_spatial_structures.py +0 -0
  194. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_special_functions_phase12.py +0 -0
  195. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_terrain.py +0 -0
  196. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_terrain_loaders.py +0 -0
  197. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_tracking_containers.py +0 -0
  198. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/test_transforms.py +0 -0
  199. {nrl_tracker-0.22.1 → nrl_tracker-0.22.2}/tests/unit/test_core.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nrl-tracker
3
- Version: 0.22.1
3
+ Version: 0.22.2
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: 0.22.1
3
+ Version: 0.22.2
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "nrl-tracker"
7
- version = "0.22.1"
7
+ version = "0.22.2"
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 = [
@@ -20,7 +20,7 @@ References
20
20
  no. 5, pp. 18-27, May 2017.
21
21
  """
22
22
 
23
- __version__ = "0.22.1"
23
+ __version__ = "0.22.2"
24
24
  __author__ = "Python Port Contributors"
25
25
  __original_author__ = "David F. Crouse, Naval Research Laboratory"
26
26
 
@@ -82,9 +82,7 @@ class NumpyTestCase:
82
82
 
83
83
  def assert_shape(self, arr, expected_shape):
84
84
  """Assert array has expected shape."""
85
- assert (
86
- arr.shape == expected_shape
87
- ), f"Expected shape {expected_shape}, got {arr.shape}"
85
+ assert arr.shape == expected_shape, f"Expected shape {expected_shape}, got {arr.shape}"
88
86
 
89
87
  def assert_symmetric(self, arr, rtol=1e-10):
90
88
  """Assert matrix is symmetric."""
@@ -150,9 +150,7 @@ class TestOrbitalElementConversions:
150
150
 
151
151
  def test_roundtrip_elements_state(self):
152
152
  """Test elements -> state -> elements roundtrip."""
153
- elements_orig = OrbitalElements(
154
- a=8000, e=0.2, i=0.5, raan=0.3, omega=0.8, nu=1.0
155
- )
153
+ elements_orig = OrbitalElements(a=8000, e=0.2, i=0.5, raan=0.3, omega=0.8, nu=1.0)
156
154
  state = orbital_elements_to_state(elements_orig)
157
155
  elements_back = state_to_orbital_elements(state)
158
156
 
@@ -403,9 +403,7 @@ class TestSlerp:
403
403
 
404
404
  # Should be 45 deg rotation about z
405
405
  expected_angle = angle / 2
406
- expected = np.array(
407
- [np.cos(expected_angle / 2), 0, 0, np.sin(expected_angle / 2)]
408
- )
406
+ expected = np.array([np.cos(expected_angle / 2), 0, 0, np.sin(expected_angle / 2)])
409
407
  np.testing.assert_allclose(result, expected, atol=1e-10)
410
408
 
411
409
 
@@ -438,9 +438,7 @@ class TestCoordinatedTurnProcessNoise:
438
438
  T = 0.1
439
439
  sigma_a = 1.0
440
440
  sigma_omega = 0.01
441
- Q = q_coord_turn_2d(
442
- T, sigma_a, sigma_omega, state_type="position_velocity_omega"
443
- )
441
+ Q = q_coord_turn_2d(T, sigma_a, sigma_omega, state_type="position_velocity_omega")
444
442
  assert Q.shape == (5, 5)
445
443
  np.testing.assert_allclose(Q, Q.T)
446
444
 
@@ -121,9 +121,7 @@ class TestParticleFilters:
121
121
  def likelihood_func(z, x):
122
122
  return gaussian_likelihood(z, x, R)
123
123
 
124
- new_weights, log_lik = bootstrap_pf_update(
125
- particles, weights, z, likelihood_func
126
- )
124
+ new_weights, log_lik = bootstrap_pf_update(particles, weights, z, likelihood_func)
127
125
 
128
126
  assert new_weights.shape == weights.shape
129
127
  assert np.isclose(np.sum(new_weights), 1.0)
@@ -327,9 +325,7 @@ class TestParticleFilters:
327
325
 
328
326
  mean = particle_mean(particles, weights)
329
327
 
330
- expected = (
331
- 0.5 * np.array([0, 0]) + 0.3 * np.array([1, 1]) + 0.2 * np.array([2, 2])
332
- )
328
+ expected = 0.5 * np.array([0, 0]) + 0.3 * np.array([1, 1]) + 0.2 * np.array([2, 2])
333
329
  assert np.allclose(mean, expected)
334
330
 
335
331
  def test_particle_covariance(self):
@@ -995,9 +991,7 @@ class TestNavigationCoverage:
995
991
  tdoa12 = 0.0
996
992
  tdoa13 = 0.0
997
993
 
998
- result1, result2 = great_circle_tdoa_loc(
999
- lat1, lon1, lat2, lon2, lat3, lon3, tdoa12, tdoa13
1000
- )
994
+ result1, result2 = great_circle_tdoa_loc(lat1, lon1, lat2, lon2, lat3, lon3, tdoa12, tdoa13)
1001
995
 
1002
996
  # Should return at least one solution
1003
997
  assert result1 is not None or result2 is not None
@@ -98,9 +98,7 @@ class TestClenshawSumOrderDerivative:
98
98
  cos_theta = 0.5
99
99
  sin_theta = np.sqrt(1 - cos_theta**2)
100
100
 
101
- result = clenshaw_sum_order_derivative(
102
- 0, cos_theta, sin_theta, coef.C, coef.S, 10
103
- )
101
+ result = clenshaw_sum_order_derivative(0, cos_theta, sin_theta, coef.C, coef.S, 10)
104
102
 
105
103
  assert isinstance(result, tuple)
106
104
  assert len(result) == 4
@@ -142,12 +140,8 @@ class TestClenshawPotential:
142
140
  lat = np.radians(30)
143
141
  lon = 0
144
142
 
145
- V_close = clenshaw_potential(
146
- lat, lon, coef.R, coef.C, coef.S, coef.R, coef.GM, 10
147
- )
148
- V_far = clenshaw_potential(
149
- lat, lon, coef.R * 1.1, coef.C, coef.S, coef.R, coef.GM, 10
150
- )
143
+ V_close = clenshaw_potential(lat, lon, coef.R, coef.C, coef.S, coef.R, coef.GM, 10)
144
+ V_far = clenshaw_potential(lat, lon, coef.R * 1.1, coef.C, coef.S, coef.R, coef.GM, 10)
151
145
 
152
146
  # Potential magnitude should decrease with distance
153
147
  assert abs(V_far) < abs(V_close)
@@ -158,12 +152,8 @@ class TestClenshawPotential:
158
152
  lon = 0
159
153
  r = coef.R
160
154
 
161
- V_north = clenshaw_potential(
162
- np.radians(45), lon, r, coef.C, coef.S, coef.R, coef.GM, 10
163
- )
164
- V_south = clenshaw_potential(
165
- np.radians(-45), lon, r, coef.C, coef.S, coef.R, coef.GM, 10
166
- )
155
+ V_north = clenshaw_potential(np.radians(45), lon, r, coef.C, coef.S, coef.R, coef.GM, 10)
156
+ V_south = clenshaw_potential(np.radians(-45), lon, r, coef.C, coef.S, coef.R, coef.GM, 10)
167
157
 
168
158
  # For Earth's gravity field (with small asymmetries), should be close
169
159
  # The potential is dominated by the central term, so relative difference is small
@@ -195,9 +185,7 @@ class TestClenshawGravity:
195
185
  lon = np.radians(0)
196
186
  r = coef.R
197
187
 
198
- g_r, g_lat, g_lon = clenshaw_gravity(
199
- lat, lon, r, coef.C, coef.S, coef.R, coef.GM, 10
200
- )
188
+ g_r, g_lat, g_lon = clenshaw_gravity(lat, lon, r, coef.C, coef.S, coef.R, coef.GM, 10)
201
189
 
202
190
  # Full gravity includes the central term GM/r^2 which is about 9.8 m/s^2
203
191
  # The sign depends on convention - we compute -dV/dr
@@ -257,9 +245,7 @@ class TestAssociatedLegendreScaled:
257
245
  for m in range(n + 1):
258
246
  # exp is indexed by degree only (1D array)
259
247
  P_reconstructed = P_scaled[n, m] * (10.0 ** exp[n])
260
- assert_allclose(
261
- P_reconstructed, P_unscaled[n, m], rtol=1e-8, atol=1e-12
262
- )
248
+ assert_allclose(P_reconstructed, P_unscaled[n, m], rtol=1e-8, atol=1e-12)
263
249
 
264
250
  def test_no_overflow_high_degree(self):
265
251
  """High degree computation doesn't overflow."""
@@ -320,9 +306,7 @@ class TestGeoidHeight:
320
306
  # Test several locations
321
307
  for lat in [0, 45, -45, 90]:
322
308
  for lon in [0, 90, -90, 180]:
323
- N = geoid_height(
324
- np.radians(lat), np.radians(lon), coefficients=coef, n_max=36
325
- )
309
+ N = geoid_height(np.radians(lat), np.radians(lon), coefficients=coef, n_max=36)
326
310
  assert not np.isnan(N)
327
311
  assert not np.isinf(N)
328
312
 
@@ -348,9 +332,7 @@ class TestGeoidHeights:
348
332
  lon = np.radians(-75)
349
333
 
350
334
  N_single = geoid_height(lat, lon, coefficients=coef, n_max=10)
351
- N_batch = geoid_heights(
352
- np.array([lat]), np.array([lon]), coefficients=coef, n_max=10
353
- )
335
+ N_batch = geoid_heights(np.array([lat]), np.array([lon]), coefficients=coef, n_max=10)
354
336
 
355
337
  assert_allclose(N_batch[0], N_single)
356
338
 
@@ -380,9 +362,7 @@ class TestGravityDisturbance:
380
362
  np.radians(30), np.radians(60), h=0.0, coefficients=coef, n_max=10
381
363
  )
382
364
 
383
- expected_mag = np.sqrt(
384
- result.delta_g_r**2 + result.delta_g_lat**2 + result.delta_g_lon**2
385
- )
365
+ expected_mag = np.sqrt(result.delta_g_r**2 + result.delta_g_lat**2 + result.delta_g_lon**2)
386
366
  assert_allclose(result.magnitude, expected_mag)
387
367
 
388
368
  def test_disturbance_decreases_with_altitude(self):
@@ -392,9 +372,7 @@ class TestGravityDisturbance:
392
372
  lon = np.radians(0)
393
373
 
394
374
  result_0 = gravity_disturbance(lat, lon, h=0.0, coefficients=coef, n_max=20)
395
- result_10km = gravity_disturbance(
396
- lat, lon, h=10000.0, coefficients=coef, n_max=20
397
- )
375
+ result_10km = gravity_disturbance(lat, lon, h=10000.0, coefficients=coef, n_max=20)
398
376
 
399
377
  # Disturbance magnitude should decrease with altitude
400
378
  assert result_10km.magnitude < result_0.magnitude
@@ -407,9 +385,7 @@ class TestGravityAnomaly:
407
385
  """gravity_anomaly returns a float."""
408
386
  coef = create_test_coefficients(n_max=10)
409
387
 
410
- anom = gravity_anomaly(
411
- np.radians(45), np.radians(-75), h=0.0, coefficients=coef, n_max=10
412
- )
388
+ anom = gravity_anomaly(np.radians(45), np.radians(-75), h=0.0, coefficients=coef, n_max=10)
413
389
 
414
390
  assert isinstance(anom, float)
415
391
  assert not np.isnan(anom)
@@ -418,9 +394,7 @@ class TestGravityAnomaly:
418
394
  """Gravity anomaly computation produces finite values."""
419
395
  coef = create_test_coefficients(n_max=36)
420
396
 
421
- anom = gravity_anomaly(
422
- np.radians(45), np.radians(0), h=0.0, coefficients=coef, n_max=36
423
- )
397
+ anom = gravity_anomaly(np.radians(45), np.radians(0), h=0.0, coefficients=coef, n_max=36)
424
398
 
425
399
  # Note: With test coefficients (including full J2), values are large
426
400
  # because J2 represents the equatorial bulge which is part of the
@@ -449,9 +423,7 @@ class TestDeflectionOfVertical:
449
423
  """Deflection values are finite."""
450
424
  coef = create_test_coefficients(n_max=36)
451
425
 
452
- xi, eta = deflection_of_vertical(
453
- np.radians(45), np.radians(0), coefficients=coef, n_max=36
454
- )
426
+ xi, eta = deflection_of_vertical(np.radians(45), np.radians(0), coefficients=coef, n_max=36)
455
427
 
456
428
  # Note: Test coefficients include full J2, so deflections are larger
457
429
  # than real-world values which are typically < 60 arcseconds.
@@ -521,16 +493,12 @@ class TestClenshawVsNaive:
521
493
  r = coef.R
522
494
 
523
495
  # Compute potential using Clenshaw
524
- V_clenshaw = clenshaw_potential(
525
- lat, lon, r, coef.C, coef.S, coef.R, coef.GM, 10
526
- )
496
+ V_clenshaw = clenshaw_potential(lat, lon, r, coef.C, coef.S, coef.R, coef.GM, 10)
527
497
 
528
498
  # Compute using naive spherical harmonic sum
529
499
  # spherical_harmonic_sum takes (lat, lon, r, C, S, R, GM, n_max)
530
500
  # and returns (V, dV_r, dV_lat)
531
- V_naive, _, _ = spherical_harmonic_sum(
532
- lat, lon, r, coef.C, coef.S, coef.R, coef.GM, 10
533
- )
501
+ V_naive, _, _ = spherical_harmonic_sum(lat, lon, r, coef.C, coef.S, coef.R, coef.GM, 10)
534
502
 
535
503
  # Should match to reasonable precision
536
504
  # (Clenshaw and naive may have different numerical properties)
@@ -578,12 +546,8 @@ class TestEdgeCases:
578
546
  """Negative longitude works correctly."""
579
547
  coef = create_test_coefficients(n_max=20)
580
548
 
581
- N_pos = geoid_height(
582
- np.radians(45), np.radians(90), coefficients=coef, n_max=20
583
- )
584
- N_neg = geoid_height(
585
- np.radians(45), np.radians(-270), coefficients=coef, n_max=20
586
- )
549
+ N_pos = geoid_height(np.radians(45), np.radians(90), coefficients=coef, n_max=20)
550
+ N_neg = geoid_height(np.radians(45), np.radians(-270), coefficients=coef, n_max=20)
587
551
 
588
552
  # 90° and -270° are the same longitude
589
553
  assert_allclose(N_pos, N_neg, rtol=1e-10)
@@ -130,41 +130,31 @@ class TestEMMFunction:
130
130
 
131
131
  def test_total_intensity_reasonable(self, test_coefficients):
132
132
  """Total field intensity should be in expected range."""
133
- result = emm(
134
- np.radians(45), np.radians(0), 0, 2020.0, coefficients=test_coefficients
135
- )
133
+ result = emm(np.radians(45), np.radians(0), 0, 2020.0, coefficients=test_coefficients)
136
134
  # Field intensity typically 25,000-65,000 nT at mid-latitudes
137
135
  # but can exceed this at high latitudes, allow up to 100,000 nT
138
136
  assert 20000 < result.F < 100000
139
137
 
140
138
  def test_horizontal_intensity_formula(self, test_coefficients):
141
139
  """H = sqrt(X^2 + Y^2)."""
142
- result = emm(
143
- np.radians(40), np.radians(-75), 0, 2020.0, coefficients=test_coefficients
144
- )
140
+ result = emm(np.radians(40), np.radians(-75), 0, 2020.0, coefficients=test_coefficients)
145
141
  H_calc = np.sqrt(result.X**2 + result.Y**2)
146
142
  assert_allclose(result.H, H_calc, rtol=1e-10)
147
143
 
148
144
  def test_total_intensity_formula(self, test_coefficients):
149
145
  """F = sqrt(H^2 + Z^2)."""
150
- result = emm(
151
- np.radians(40), np.radians(-75), 0, 2020.0, coefficients=test_coefficients
152
- )
146
+ result = emm(np.radians(40), np.radians(-75), 0, 2020.0, coefficients=test_coefficients)
153
147
  F_calc = np.sqrt(result.H**2 + result.Z**2)
154
148
  assert_allclose(result.F, F_calc, rtol=1e-10)
155
149
 
156
150
  def test_declination_range(self, test_coefficients):
157
151
  """Declination should be within -180 to 180 degrees."""
158
- result = emm(
159
- np.radians(45), np.radians(-75), 0, 2020.0, coefficients=test_coefficients
160
- )
152
+ result = emm(np.radians(45), np.radians(-75), 0, 2020.0, coefficients=test_coefficients)
161
153
  assert -np.pi <= result.D <= np.pi
162
154
 
163
155
  def test_inclination_range(self, test_coefficients):
164
156
  """Inclination should be within -90 to 90 degrees."""
165
- result = emm(
166
- np.radians(45), np.radians(-75), 0, 2020.0, coefficients=test_coefficients
167
- )
157
+ result = emm(np.radians(45), np.radians(-75), 0, 2020.0, coefficients=test_coefficients)
168
158
  assert -np.pi / 2 <= result.I <= np.pi / 2
169
159
 
170
160
 
@@ -229,9 +219,7 @@ class TestWMMHR:
229
219
 
230
220
  def test_wmmhr_returns_result(self, test_coefficients):
231
221
  """WMMHR returns MagneticResult."""
232
- result = wmmhr(
233
- np.radians(45), np.radians(-75), 0, 2025.0, coefficients=test_coefficients
234
- )
222
+ result = wmmhr(np.radians(45), np.radians(-75), 0, 2025.0, coefficients=test_coefficients)
235
223
  assert hasattr(result, "F")
236
224
  assert hasattr(result, "D")
237
225
  assert hasattr(result, "I")
@@ -271,9 +259,7 @@ class TestConvenienceFunctions:
271
259
 
272
260
  def test_emm_declination(self, test_coefficients):
273
261
  """emm_declination returns correct value."""
274
- result = emm(
275
- np.radians(40), np.radians(-105), 0, 2020.0, coefficients=test_coefficients
276
- )
262
+ result = emm(np.radians(40), np.radians(-105), 0, 2020.0, coefficients=test_coefficients)
277
263
  D = emm_declination(
278
264
  np.radians(40), np.radians(-105), 0, 2020.0, coefficients=test_coefficients
279
265
  )
@@ -281,9 +267,7 @@ class TestConvenienceFunctions:
281
267
 
282
268
  def test_emm_inclination(self, test_coefficients):
283
269
  """emm_inclination returns correct value."""
284
- result = emm(
285
- np.radians(40), np.radians(-105), 0, 2020.0, coefficients=test_coefficients
286
- )
270
+ result = emm(np.radians(40), np.radians(-105), 0, 2020.0, coefficients=test_coefficients)
287
271
  incl = emm_inclination(
288
272
  np.radians(40), np.radians(-105), 0, 2020.0, coefficients=test_coefficients
289
273
  )
@@ -291,9 +275,7 @@ class TestConvenienceFunctions:
291
275
 
292
276
  def test_emm_intensity(self, test_coefficients):
293
277
  """emm_intensity returns correct value."""
294
- result = emm(
295
- np.radians(40), np.radians(-105), 0, 2020.0, coefficients=test_coefficients
296
- )
278
+ result = emm(np.radians(40), np.radians(-105), 0, 2020.0, coefficients=test_coefficients)
297
279
  F = emm_intensity(
298
280
  np.radians(40), np.radians(-105), 0, 2020.0, coefficients=test_coefficients
299
281
  )
@@ -331,12 +313,8 @@ class TestSecularVariation:
331
313
 
332
314
  def test_field_changes_with_time(self, test_coefficients):
333
315
  """Field should change slightly between years."""
334
- result_2020 = emm(
335
- np.radians(45), np.radians(0), 0, 2020.0, coefficients=test_coefficients
336
- )
337
- result_2022 = emm(
338
- np.radians(45), np.radians(0), 0, 2022.0, coefficients=test_coefficients
339
- )
316
+ result_2020 = emm(np.radians(45), np.radians(0), 0, 2020.0, coefficients=test_coefficients)
317
+ result_2022 = emm(np.radians(45), np.radians(0), 0, 2022.0, coefficients=test_coefficients)
340
318
  # Small but non-zero change expected
341
319
  # Secular variation is ~50-100 nT/year at mid-latitudes
342
320
  assert result_2020.F != result_2022.F
@@ -411,9 +389,7 @@ class TestHighDegreeEvaluation:
411
389
  def test_higher_degree_coefficients(self):
412
390
  """Test with higher degree coefficients (n_max=50)."""
413
391
  coef = create_emm_test_coefficients(n_max=50)
414
- result = emm(
415
- np.radians(40), np.radians(-105), 0, 2020.0, coefficients=coef, n_max=50
416
- )
392
+ result = emm(np.radians(40), np.radians(-105), 0, 2020.0, coefficients=coef, n_max=50)
417
393
  assert not np.isnan(result.F)
418
394
  assert result.F > 0
419
395
 
@@ -422,12 +398,8 @@ class TestHighDegreeEvaluation:
422
398
  coef = create_emm_test_coefficients(n_max=50)
423
399
 
424
400
  # Evaluate at different n_max values
425
- result_12 = emm(
426
- np.radians(40), np.radians(-105), 0, 2020.0, coefficients=coef, n_max=12
427
- )
428
- result_50 = emm(
429
- np.radians(40), np.radians(-105), 0, 2020.0, coefficients=coef, n_max=50
430
- )
401
+ result_12 = emm(np.radians(40), np.radians(-105), 0, 2020.0, coefficients=coef, n_max=12)
402
+ result_50 = emm(np.radians(40), np.radians(-105), 0, 2020.0, coefficients=coef, n_max=50)
431
403
 
432
404
  # Both should be valid
433
405
  assert result_12.F > 0