pyrecest 2.2.2__tar.gz → 2.2.3__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 (390) hide show
  1. pyrecest-2.2.2/README.md → pyrecest-2.2.3/PKG-INFO +91 -0
  2. pyrecest-2.2.2/PKG-INFO → pyrecest-2.2.3/README.md +48 -31
  3. pyrecest-2.2.3/pyproject.toml +165 -0
  4. pyrecest-2.2.3/src/pyrecest/__init__.py +58 -0
  5. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/__init__.py +15 -3
  6. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_dtype_utils.py +1 -1
  7. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_shared_numpy/_common.py +20 -4
  8. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/__init__.py +3 -5
  9. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/_common.py +0 -1
  10. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/linalg.py +3 -1
  11. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/random.py +3 -2
  12. pyrecest-2.2.3/src/pyrecest/_backend/capabilities.py +216 -0
  13. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/__init__.py +153 -121
  14. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/_dtype.py +1 -2
  15. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/autodiff.py +0 -1
  16. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/fft.py +5 -5
  17. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/linalg.py +16 -11
  18. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/random.py +69 -42
  19. pyrecest-2.2.3/src/pyrecest/_backend/jax/signal.py +1 -0
  20. pyrecest-2.2.3/src/pyrecest/_backend/jax/spatial.py +1 -0
  21. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/__init__.py +45 -49
  22. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/_common.py +0 -1
  23. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/autodiff.py +2 -0
  24. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/fft.py +5 -4
  25. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/linalg.py +2 -2
  26. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/random.py +7 -2
  27. pyrecest-2.2.3/src/pyrecest/_backend/numpy/signal.py +1 -0
  28. pyrecest-2.2.3/src/pyrecest/_backend/numpy/spatial.py +1 -0
  29. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/__init__.py +85 -67
  30. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/_dtype.py +1 -2
  31. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/fft.py +5 -5
  32. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/linalg.py +47 -18
  33. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/random.py +18 -8
  34. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/signal.py +1 -1
  35. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/spatial.py +1 -1
  36. pyrecest-2.2.3/src/pyrecest/api_registry.py +97 -0
  37. pyrecest-2.2.3/src/pyrecest/backend_support.py +58 -0
  38. pyrecest-2.2.3/src/pyrecest/backend_tools.py +54 -0
  39. pyrecest-2.2.3/src/pyrecest/backends/__init__.py +33 -0
  40. pyrecest-2.2.3/src/pyrecest/cli.py +192 -0
  41. pyrecest-2.2.3/src/pyrecest/deprecation.py +53 -0
  42. pyrecest-2.2.3/src/pyrecest/diagnostics.py +143 -0
  43. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/__init__.py +0 -3
  44. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_custom_distribution.py +6 -2
  45. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_dirac_distribution.py +13 -6
  46. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_mixture.py +14 -4
  47. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_distribution.py +25 -39
  48. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_grid_distribution.py +7 -1
  49. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/spherical_grid_distribution.py +8 -4
  50. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_mixture.py +3 -0
  51. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/abstract_hyperrectangular_distribution.py +24 -7
  52. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/gaussian_distribution.py +115 -39
  53. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/check_and_fix_config.py +41 -19
  54. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/configure_for_filter.py +43 -2
  55. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/generate_measurements.py +59 -29
  56. pyrecest-2.2.3/src/pyrecest/evaluation/get_distance_function.py +180 -0
  57. pyrecest-2.2.3/src/pyrecest/evaluation/get_extract_mean.py +107 -0
  58. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/perform_predict_update_cycles.py +58 -8
  59. pyrecest-2.2.3/src/pyrecest/exceptions.py +137 -0
  60. pyrecest-2.2.3/src/pyrecest/experimental/__init__.py +9 -0
  61. pyrecest-2.2.3/src/pyrecest/filters/__init__.py +187 -0
  62. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/_linear_gaussian.py +19 -14
  63. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_nearest_neighbor_tracker.py +2 -2
  64. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_particle_filter.py +31 -5
  65. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/association_hypotheses.py +107 -17
  66. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/global_nearest_neighbor.py +11 -5
  67. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/interacting_multiple_model_filter.py +10 -0
  68. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/kalman_filter.py +29 -9
  69. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/out_of_sequence.py +2 -2
  70. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/track_manager.py +23 -1
  71. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/likelihood.py +21 -18
  72. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/sensor_models.py +16 -3
  73. pyrecest-2.2.3/src/pyrecest/numerics.py +131 -0
  74. pyrecest-2.2.3/src/pyrecest/optional_dependencies.py +37 -0
  75. pyrecest-2.2.3/src/pyrecest/protocols/__init__.py +47 -0
  76. pyrecest-2.2.3/src/pyrecest/protocols/distributions.py +75 -0
  77. pyrecest-2.2.3/src/pyrecest/protocols/estimator.py +35 -0
  78. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/protocols/filters.py +4 -0
  79. pyrecest-2.2.3/src/pyrecest/reproducibility.py +75 -0
  80. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/euclidean_sampler.py +12 -0
  81. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/hyperspherical_sampler.py +58 -26
  82. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/hypertoroidal_sampler.py +3 -0
  83. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/sigma_points.py +8 -6
  84. pyrecest-2.2.3/src/pyrecest/scenarios.py +269 -0
  85. pyrecest-2.2.3/src/pyrecest/stability.py +109 -0
  86. pyrecest-2.2.3/src/pyrecest/types.py +32 -0
  87. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/metrics.py +3 -4
  88. pyrecest-2.2.2/pyproject.toml +0 -97
  89. pyrecest-2.2.2/src/pyrecest/__init__.py +0 -2
  90. pyrecest-2.2.2/src/pyrecest/_backend/jax/signal.py +0 -1
  91. pyrecest-2.2.2/src/pyrecest/_backend/jax/spatial.py +0 -1
  92. pyrecest-2.2.2/src/pyrecest/_backend/numpy/signal.py +0 -1
  93. pyrecest-2.2.2/src/pyrecest/_backend/numpy/spatial.py +0 -1
  94. pyrecest-2.2.2/src/pyrecest/evaluation/get_distance_function.py +0 -68
  95. pyrecest-2.2.2/src/pyrecest/evaluation/get_extract_mean.py +0 -51
  96. pyrecest-2.2.2/src/pyrecest/filters/__init__.py +0 -329
  97. pyrecest-2.2.2/src/pyrecest/protocols/__init__.py +0 -21
  98. {pyrecest-2.2.2 → pyrecest-2.2.3}/LICENSE +0 -0
  99. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/.pylintrc +0 -0
  100. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/LICENSE_geomstats +0 -0
  101. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/README.md +0 -0
  102. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_backend_config.py +0 -0
  103. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_common.py +0 -0
  104. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_shared_numpy/__init__.py +0 -0
  105. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_shared_numpy/_dispatch.py +0 -0
  106. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_shared_numpy/linalg.py +0 -0
  107. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_shared_numpy/random.py +0 -0
  108. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/_dtype.py +0 -0
  109. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/autodiff.py +0 -0
  110. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/_dtype.py +0 -0
  111. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/_common.py +0 -0
  112. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/autodiff.py +0 -0
  113. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/_so3_helpers.py +0 -0
  114. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_bounded_domain_distribution.py +0 -0
  115. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_bounded_nonperiodic_distribution.py +0 -0
  116. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_custom_nonperiodic_distribution.py +0 -0
  117. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_disk_distribution.py +0 -0
  118. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_distribution_type.py +0 -0
  119. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_ellipsoidal_ball_distribution.py +0 -0
  120. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_grid_distribution.py +0 -0
  121. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_manifold_specific_distribution.py +0 -0
  122. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_nonperiodic_distribution.py +0 -0
  123. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_orthogonal_basis_distribution.py +0 -0
  124. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_periodic_distribution.py +0 -0
  125. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_periodic_grid_distribution.py +0 -0
  126. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_se2_distribution.py +0 -0
  127. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_se3_distribution.py +0 -0
  128. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_uniform_distribution.py +0 -0
  129. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/__init__.py +0 -0
  130. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_cart_prod_distribution.py +0 -0
  131. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_custom_lin_bounded_cart_prod_distribution.py +0 -0
  132. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_hypercylindrical_distribution.py +0 -0
  133. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_bounded_cart_prod_distribution.py +0 -0
  134. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_hemisphere_cart_prod_distribution.py +0 -0
  135. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_hyperhemisphere_cart_prod_distribution.py +0 -0
  136. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_hypersphere_cart_prod_distribution.py +0 -0
  137. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_hypersphere_subset_cart_prod_distribution.py +0 -0
  138. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_periodic_cart_prod_distribution.py +0 -0
  139. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/cart_prod_dirac_distribution.py +0 -0
  140. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/cart_prod_stacked_distribution.py +0 -0
  141. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/custom_hypercylindrical_distribution.py +0 -0
  142. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/gauss_von_mises_distribution.py +0 -0
  143. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/hypercylindrical_dirac_distribution.py +0 -0
  144. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/hypercylindrical_state_space_subdivision_distribution.py +0 -0
  145. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/hypercylindrical_state_space_subdivision_gaussian_distribution.py +0 -0
  146. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/hyperhemisphere_cart_prod_dirac_distribution.py +0 -0
  147. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/lin_bounded_cart_prod_dirac_distribution.py +0 -0
  148. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/lin_hypersphere_cart_prod_dirac_distribution.py +0 -0
  149. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/lin_hypersphere_subset_dirac_distribution.py +0 -0
  150. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/lin_periodic_cart_prod_dirac_distribution.py +0 -0
  151. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/mardia_sutton_distribution.py +0 -0
  152. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/partially_wrapped_normal_distribution.py +0 -0
  153. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/se2_bingham_distribution.py +0 -0
  154. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/se2_pwn_distribution.py +0 -0
  155. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/se2_state_space_subdivision_gaussian_distribution.py +0 -0
  156. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/se3_lin_vel_cart_prod_stacked_distribution.py +0 -0
  157. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/state_space_subdivision_distribution.py +0 -0
  158. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/state_space_subdivision_gaussian_distribution.py +0 -0
  159. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/__init__.py +0 -0
  160. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/abstract_circular_distribution.py +0 -0
  161. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/circular_dirac_distribution.py +0 -0
  162. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/circular_fourier_distribution.py +0 -0
  163. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/circular_grid_distribution.py +0 -0
  164. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/circular_mixture.py +0 -0
  165. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/circular_uniform_distribution.py +0 -0
  166. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/custom_circular_distribution.py +0 -0
  167. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/generalized_von_mises_distribution.py +0 -0
  168. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/piecewise_constant_distribution.py +0 -0
  169. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/sine_skewed_distributions.py +0 -0
  170. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/von_mises_distribution.py +0 -0
  171. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/wrapped_cauchy_distribution.py +0 -0
  172. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/wrapped_exponential_distribution.py +0 -0
  173. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/wrapped_laplace_distribution.py +0 -0
  174. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/wrapped_normal_distribution.py +0 -0
  175. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/__init__.py +0 -0
  176. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/abstract_conditional_distribution.py +0 -0
  177. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/s2_cond_s2_grid_distribution.py +0 -0
  178. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/sd_cond_sd_grid_distribution.py +0 -0
  179. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/sd_half_cond_sd_half_grid_distribution.py +0 -0
  180. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/td_cond_td_grid_distribution.py +0 -0
  181. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conversion.py +0 -0
  182. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/custom_hyperrectangular_distribution.py +0 -0
  183. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/disk_uniform_distribution.py +0 -0
  184. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/ellipsoidal_ball_uniform_distribution.py +0 -0
  185. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/__init__.py +0 -0
  186. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_complex_hyperspherical_distribution.py +0 -0
  187. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hemispherical_distribution.py +0 -0
  188. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hyperhemispherical_distribution.py +0 -0
  189. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_dirac_distribution.py +0 -0
  190. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_grid_distribution.py +0 -0
  191. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_uniform_distribution.py +0 -0
  192. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hyperspherical_distribution.py +0 -0
  193. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_sphere_subset_distribution.py +0 -0
  194. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_spherical_distribution.py +0 -0
  195. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_spherical_harmonics_distribution.py +0 -0
  196. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/bayesian_complex_watson_mixture_model.py +0 -0
  197. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/bingham_distribution.py +0 -0
  198. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/complex_angular_central_gaussian_distribution.py +0 -0
  199. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/complex_bingham_distribution.py +0 -0
  200. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/complex_watson_distribution.py +0 -0
  201. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/custom_hemispherical_distribution.py +0 -0
  202. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/custom_hyperhemispherical_distribution.py +0 -0
  203. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/custom_hyperspherical_distribution.py +0 -0
  204. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hemispherical_uniform_distribution.py +0 -0
  205. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_bingham_distribution.py +0 -0
  206. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_dirac_distribution.py +0 -0
  207. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_grid_distribution.py +0 -0
  208. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_uniform_distribution.py +0 -0
  209. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_watson_distribution.py +0 -0
  210. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_dirac_distribution.py +0 -0
  211. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_mixture.py +0 -0
  212. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_uniform_distribution.py +0 -0
  213. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/spherical_harmonics_distribution_complex.py +0 -0
  214. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/spherical_harmonics_distribution_real.py +0 -0
  215. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/von_mises_fisher_distribution.py +0 -0
  216. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/watson_distribution.py +0 -0
  217. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/__init__.py +0 -0
  218. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/abstract_hypertoroidal_distribution.py +0 -0
  219. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/abstract_toroidal_bivar_vm_distribution.py +0 -0
  220. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/abstract_toroidal_distribution.py +0 -0
  221. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/custom_hypertoroidal_distribution.py +0 -0
  222. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/custom_toroidal_distribution.py +0 -0
  223. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_dirac_distribution.py +0 -0
  224. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_fourier_distribution.py +0 -0
  225. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_grid_distribution.py +0 -0
  226. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_uniform_distribution.py +0 -0
  227. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_wrapped_normal_distribution.py +0 -0
  228. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_dirac_distribution.py +0 -0
  229. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_fourier_distribution.py +0 -0
  230. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_mixture.py +0 -0
  231. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_uniform_distribution.py +0 -0
  232. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_vm_matrix_distribution.py +0 -0
  233. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_vm_rivest_distribution.py +0 -0
  234. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_von_mises_cosine_distribution.py +0 -0
  235. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_von_mises_sine_distribution.py +0 -0
  236. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_wrapped_normal_distribution.py +0 -0
  237. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/__init__.py +0 -0
  238. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/abstract_linear_distribution.py +0 -0
  239. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/custom_linear_distribution.py +0 -0
  240. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/gaussian_mixture.py +0 -0
  241. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/hyperrectangular_uniform_distribution.py +0 -0
  242. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/linear_box_particle_distribution.py +0 -0
  243. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/linear_dirac_distribution.py +0 -0
  244. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/linear_mixture.py +0 -0
  245. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/se2_dirac_distribution.py +0 -0
  246. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/se3_cart_prod_stacked_distribution.py +0 -0
  247. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/se3_dirac_distribution.py +0 -0
  248. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_bingham_distribution.py +0 -0
  249. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_conversion.py +0 -0
  250. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_dirac_distribution.py +0 -0
  251. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_helpers.py +0 -0
  252. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_product_dirac_distribution.py +0 -0
  253. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_product_tangent_gaussian_distribution.py +0 -0
  254. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_tangent_gaussian_distribution.py +0 -0
  255. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_uniform_distribution.py +0 -0
  256. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/__init__.py +0 -0
  257. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/determine_all_deviations.py +0 -0
  258. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/eot_shape_database.py +0 -0
  259. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/evaluate_for_file.py +0 -0
  260. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/evaluate_for_simulation_config.py +0 -0
  261. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/evaluate_for_variables.py +0 -0
  262. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/generate_groundtruth.py +0 -0
  263. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/generate_simulated_scenarios.py +0 -0
  264. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/get_axis_label.py +0 -0
  265. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/group_results_by_filter.py +0 -0
  266. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/iterate_configs_and_runs.py +0 -0
  267. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/plot_results.py +0 -0
  268. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/simulation_database.py +0 -0
  269. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/summarize_filter_results.py +0 -0
  270. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/_ukf.py +0 -0
  271. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_axial_filter.py +0 -0
  272. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_circular_filter.py +0 -0
  273. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_dummy_filter.py +0 -0
  274. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_extended_object_tracker.py +0 -0
  275. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_filter.py +0 -0
  276. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_grid_filter.py +0 -0
  277. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_multiple_extended_object_tracker.py +0 -0
  278. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_multitarget_tracker.py +0 -0
  279. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_tracker_with_logging.py +0 -0
  280. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/axial_kalman_filter.py +0 -0
  281. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/bingham_filter.py +0 -0
  282. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/block_particle_filter.py +0 -0
  283. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/circular_fourier_filter.py +0 -0
  284. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/circular_particle_filter.py +0 -0
  285. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/circular_ukf.py +0 -0
  286. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/ekf_spline_tracker.py +0 -0
  287. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/euclidean_box_particle_filter.py +0 -0
  288. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/euclidean_boxed_particle_filter.py +0 -0
  289. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/euclidean_particle_filter.py +0 -0
  290. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/factorized_giw_random_matrix_tracker.py +0 -0
  291. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/fourier_rhm_tracker.py +0 -0
  292. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/gaussian_mixture_phd_filter.py +0 -0
  293. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/ggiw_tracker.py +0 -0
  294. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/goal_conditioned_replay_imm_filter.py +0 -0
  295. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/goal_conditioned_replay_particle_filter.py +0 -0
  296. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/goal_conditioned_replay_particle_imm_filter.py +0 -0
  297. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/gprhm_tracker.py +0 -0
  298. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hypercylindrical_particle_filter.py +0 -0
  299. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperhemisphere_cart_prod_particle_filter.py +0 -0
  300. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperhemispherical_grid_filter.py +0 -0
  301. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperhemispherical_particle_filter.py +0 -0
  302. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperspherical_dummy_filter.py +0 -0
  303. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperspherical_particle_filter.py +0 -0
  304. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperspherical_ukf.py +0 -0
  305. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hypertoroidal_dummy_filter.py +0 -0
  306. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hypertoroidal_fourier_filter.py +0 -0
  307. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hypertoroidal_particle_filter.py +0 -0
  308. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/information_form_distributed_kalman_filter.py +0 -0
  309. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/iterated_batch_mem_qkf_tracker.py +0 -0
  310. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/joint_probabilistic_data_association_filter.py +0 -0
  311. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/kernel_sme_filter.py +0 -0
  312. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/lin_bounded_particle_filter.py +0 -0
  313. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/lin_periodic_particle_filter.py +0 -0
  314. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/lomem_tracker.py +0 -0
  315. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/manifold_exponential_moving_average.py +0 -0
  316. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/manifold_mixins.py +0 -0
  317. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_ekf_star_oa_tracker.py +0 -0
  318. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_ekf_star_tracker.py +0 -0
  319. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_ekf_tracker.py +0 -0
  320. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_qkf_tracker.py +0 -0
  321. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_rbpf_tracker.py +0 -0
  322. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_soekf_tracker.py +0 -0
  323. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mode_rbpf_manifold_ukf_tracker.py +0 -0
  324. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/multi_bernoulli_mixture_tracker.py +0 -0
  325. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/multi_bernoulli_tracker.py +0 -0
  326. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/multi_hypothesis_tracker.py +0 -0
  327. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/orientation_vector_eot_tracker.py +0 -0
  328. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/partitioned_so3_product_particle_filter.py +0 -0
  329. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/piecewise_constant_filter.py +0 -0
  330. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/random_matrix_tracker.py +0 -0
  331. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/relaxed_s3f_circular.py +0 -0
  332. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/relaxed_s3f_so3.py +0 -0
  333. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/se2_ukf.py +0 -0
  334. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/so3_grid_transition.py +0 -0
  335. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/so3_product_block_particle_filter.py +0 -0
  336. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/so3_product_particle_filter.py +0 -0
  337. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/spherical_harmonics_eot_tracker.py +0 -0
  338. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/spherical_harmonics_filter.py +0 -0
  339. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/state_space_subdivision_filter.py +0 -0
  340. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/toroidal_particle_filter.py +0 -0
  341. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/toroidal_wrapped_normal_filter.py +0 -0
  342. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/ukf_on_manifolds.py +0 -0
  343. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/unscented_kalman_filter.py +0 -0
  344. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/vbrm_tracker.py +0 -0
  345. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/velocity_aided_mem_qkf_tracker.py +0 -0
  346. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/velocity_locked_mem_qkf_tracker.py +0 -0
  347. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/von_mises_filter.py +0 -0
  348. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/von_mises_fisher_filter.py +0 -0
  349. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/wrapped_normal_filter.py +0 -0
  350. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/__init__.py +0 -0
  351. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/adapters.py +0 -0
  352. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/additive_noise.py +0 -0
  353. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/grid.py +0 -0
  354. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/linear_gaussian.py +0 -0
  355. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/motion_models.py +0 -0
  356. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/particle.py +0 -0
  357. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/validation.py +0 -0
  358. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/protocols/common.py +0 -0
  359. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/protocols/models.py +0 -0
  360. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/protocols/testing.py +0 -0
  361. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/py.typed +0 -0
  362. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/__init__.py +0 -0
  363. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/abstract_sampler.py +0 -0
  364. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/leopardi_sampler.py +0 -0
  365. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/__init__.py +0 -0
  366. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/abstract_smoother.py +0 -0
  367. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/fixed_lag_mem_qkf_smoother.py +0 -0
  368. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/fixed_lag_random_matrix_smoother.py +0 -0
  369. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/fixed_lag_velocity_locked_mem_qkf_smoother.py +0 -0
  370. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/mem_rbpf_ffbsi_smoother.py +0 -0
  371. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/rauch_tung_striebel_smoother.py +0 -0
  372. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/sliding_window_manifold_mean_smoother.py +0 -0
  373. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/so3_chordal_mean_smoother.py +0 -0
  374. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/unscented_rauch_tung_striebel_smoother.py +0 -0
  375. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/__init__.py +0 -0
  376. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/_point_set_registration_common.py +0 -0
  377. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/assignment.py +0 -0
  378. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/association_features.py +0 -0
  379. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/association_models.py +0 -0
  380. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/history_recorder.py +0 -0
  381. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/multisession_assignment.py +0 -0
  382. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/multisession_assignment_observation_costs.py +0 -0
  383. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/multisession_assignment_score.py +0 -0
  384. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/nonrigid_point_set_registration.py +0 -0
  385. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/pairwise_covariance_features.py +0 -0
  386. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/plotting.py +0 -0
  387. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/point_set_registration.py +0 -0
  388. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/roi_assignment.py +0 -0
  389. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/track_evaluation.py +0 -0
  390. {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/track_metrics.py +0 -0
@@ -1,5 +1,52 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyrecest
3
+ Version: 2.2.3
4
+ Summary: Framework for recursive Bayesian estimation in Python.
5
+ License: MIT
6
+ License-File: LICENSE
7
+ Keywords: bayesian-filtering,recursive-estimation,tracking,multi-target-tracking,manifolds,directional-statistics
8
+ Author: Florian Pfaff
9
+ Author-email: pfaff@ias.uni-stuttgart.de
10
+ Requires-Python: >=3.11,<3.15
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Scientific/Engineering
21
+ Provides-Extra: all-support
22
+ Provides-Extra: healpy-support
23
+ Provides-Extra: jax-support
24
+ Provides-Extra: pytorch-support
25
+ Requires-Dist: autograd (>=1.7,<2.0) ; extra == "jax-support" or extra == "all-support"
26
+ Requires-Dist: beartype (>=0.18,<0.23)
27
+ Requires-Dist: healpy (>=1.17,<2.0) ; extra == "healpy-support" or extra == "all-support"
28
+ Requires-Dist: jax (>=0.4.30,<0.11) ; extra == "jax-support" or extra == "all-support"
29
+ Requires-Dist: jaxlib (>=0.4.30,<0.11) ; extra == "jax-support" or extra == "all-support"
30
+ Requires-Dist: matplotlib (>=3.8,<4.0)
31
+ Requires-Dist: mpmath (>=1.3,<1.4)
32
+ Requires-Dist: numpy (>=2.0,<2.5)
33
+ Requires-Dist: pyshtools (>=4.12,<5.0)
34
+ Requires-Dist: scipy (>=1.14,<1.18)
35
+ Requires-Dist: shapely (>=2.0,<3.0)
36
+ Requires-Dist: torch (>=2.4,<3.0) ; extra == "pytorch-support" or extra == "all-support"
37
+ Project-URL: Documentation, https://florianpfaff.github.io/PyRecEst/
38
+ Project-URL: Homepage, https://github.com/FlorianPfaff/PyRecEst
39
+ Project-URL: Issues, https://github.com/FlorianPfaff/PyRecEst/issues
40
+ Project-URL: Repository, https://github.com/FlorianPfaff/PyRecEst
41
+ Description-Content-Type: text/markdown
42
+
1
43
  # PyRecEst
2
44
 
45
+ [![Tests](https://github.com/FlorianPfaff/PyRecEst/actions/workflows/tests.yml/badge.svg)](https://github.com/FlorianPfaff/PyRecEst/actions/workflows/tests.yml)
46
+ [![PyPI version](https://img.shields.io/pypi/v/pyrecest.svg)](https://pypi.org/project/pyrecest/)
47
+ [![Python versions](https://img.shields.io/pypi/pyversions/pyrecest.svg)](https://pypi.org/project/pyrecest/)
48
+ [![Documentation](https://img.shields.io/badge/docs-GitHub%20Pages-blue)](https://florianpfaff.github.io/PyRecEst/)
49
+
3
50
  Recursive Bayesian Estimation for Python.
4
51
 
5
52
  PyRecEst is a Python library for recursive Bayesian estimation on Euclidean
@@ -16,6 +63,37 @@ PyRecEst provides tools for:
16
63
  - evaluation of filters and trackers; and
17
64
  - sampling distributions and generating grids.
18
65
 
66
+ ## Which API Should I Start With?
67
+
68
+ | Task | Start with |
69
+ |---------------------------------------------------------|------------------------------------------------------------------|
70
+ | Linear Euclidean Gaussian filtering | `KalmanFilter` and `examples/basic/kalman_filter.py` |
71
+ | Reusable transition and measurement models | `examples/basic/kalman_filter_with_models.py` |
72
+ | Nonlinear filtering | `examples/basic/ukf_with_models.py` or particle-filter examples |
73
+ | Multi-target tracking with clutter or missed detections | `examples/basic/multi_target_tracking.py` |
74
+ | Circular, spherical, or manifold-valued states | circular, hypertoroidal, and hyperspherical distribution modules |
75
+ | Backend-portable code | `pyrecest.backend` imports plus focused tests under each backend |
76
+
77
+ For more detail, see `docs/choosing-an-api.md` and `docs/backend-compatibility.md`.
78
+
79
+ ## Command Line And Reproducible Scenarios
80
+
81
+ After installation, use the lightweight CLI to inspect an environment or run a
82
+ reproducible scenario:
83
+
84
+ ```bash
85
+ pyrecest info
86
+ pyrecest backends --format markdown
87
+ pyrecest run-scenario scenarios/linear_gaussian_cv_1d/config.toml
88
+ ```
89
+
90
+ The same scenario runner is available from a source checkout via
91
+ `scripts/run_scenario.py`. Scenario definitions live in `scenarios/` and include
92
+ TOML configuration plus JSON golden outputs.
93
+
94
+ The `pyrecest.diagnostics` module defines common diagnostics containers for
95
+ innovation statistics, particle-filter health, and association decisions.
96
+
19
97
  ## Installation
20
98
 
21
99
  PyRecEst requires Python 3.11 or newer and earlier than Python 3.15.
@@ -32,8 +110,14 @@ Optional backend and domain-specific dependencies can be installed with extras:
32
110
  python -m pip install "pyrecest[pytorch_support]"
33
111
  python -m pip install "pyrecest[jax_support]"
34
112
  python -m pip install "pyrecest[healpy_support]"
113
+ python -m pip install "pyrecest[all_support]"
35
114
  ```
36
115
 
116
+ Pip normalizes extra names, so the equivalent hyphenated spellings such as
117
+ `pyrecest[pytorch-support]`, `pyrecest[jax-support]`,
118
+ `pyrecest[healpy-support]`, and `pyrecest[all-support]` may also appear in
119
+ package-index metadata.
120
+
37
121
  For development from a source checkout, use Poetry or the provided conda
38
122
  environment:
39
123
 
@@ -87,6 +171,12 @@ The `docs/` directory contains the first project documentation pages:
87
171
  most common public entry points.
88
172
  - [Backend compatibility](docs/backend-compatibility.md) explains the NumPy,
89
173
  PyTorch, and JAX support model and known limitations.
174
+ - [Choosing an API](docs/choosing-an-api.md) maps task families to recommended
175
+ filters, distributions, trackers, and examples.
176
+ - [Distribution taxonomy](docs/distribution-taxonomy.md) summarizes the main
177
+ representation families by domain and use case.
178
+ - [Error handling](docs/error-handling.md) documents the shared exception types
179
+ and user-facing diagnostics policy.
90
180
  - [API reference](docs/reference/index.md) contains generated package reference
91
181
  pages built with MkDocs and mkdocstrings.
92
182
  - [Task tutorials](docs/tutorials/index.md) show common distribution, filtering,
@@ -173,3 +263,4 @@ backend implementations are based on those of
173
263
 
174
264
  ## License
175
265
  `PyRecEst` is licensed under the MIT License.
266
+
@@ -1,35 +1,10 @@
1
- Metadata-Version: 2.4
2
- Name: pyrecest
3
- Version: 2.2.2
4
- Summary: Framework for recursive Bayesian estimation in Python.
5
- License-File: LICENSE
6
- Author: Florian Pfaff
7
- Author-email: pfaff@ias.uni-stuttgart.de
8
- Requires-Python: >=3.11,<3.15
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Programming Language :: Python :: 3.11
11
- Classifier: Programming Language :: Python :: 3.12
12
- Classifier: Programming Language :: Python :: 3.13
13
- Classifier: Programming Language :: Python :: 3.14
14
- Provides-Extra: healpy-support
15
- Provides-Extra: jax-support
16
- Provides-Extra: pytorch-support
17
- Requires-Dist: autograd ; extra == "jax-support"
18
- Requires-Dist: beartype
19
- Requires-Dist: healpy ; extra == "healpy-support"
20
- Requires-Dist: jax ; extra == "jax-support"
21
- Requires-Dist: jaxlib ; extra == "jax-support"
22
- Requires-Dist: matplotlib
23
- Requires-Dist: mpmath
24
- Requires-Dist: numpy
25
- Requires-Dist: pyshtools
26
- Requires-Dist: scipy (>=1.17.1,<2.0.0)
27
- Requires-Dist: shapely
28
- Requires-Dist: torch ; extra == "pytorch-support"
29
- Description-Content-Type: text/markdown
30
-
31
1
  # PyRecEst
32
2
 
3
+ [![Tests](https://github.com/FlorianPfaff/PyRecEst/actions/workflows/tests.yml/badge.svg)](https://github.com/FlorianPfaff/PyRecEst/actions/workflows/tests.yml)
4
+ [![PyPI version](https://img.shields.io/pypi/v/pyrecest.svg)](https://pypi.org/project/pyrecest/)
5
+ [![Python versions](https://img.shields.io/pypi/pyversions/pyrecest.svg)](https://pypi.org/project/pyrecest/)
6
+ [![Documentation](https://img.shields.io/badge/docs-GitHub%20Pages-blue)](https://florianpfaff.github.io/PyRecEst/)
7
+
33
8
  Recursive Bayesian Estimation for Python.
34
9
 
35
10
  PyRecEst is a Python library for recursive Bayesian estimation on Euclidean
@@ -46,6 +21,37 @@ PyRecEst provides tools for:
46
21
  - evaluation of filters and trackers; and
47
22
  - sampling distributions and generating grids.
48
23
 
24
+ ## Which API Should I Start With?
25
+
26
+ | Task | Start with |
27
+ |---------------------------------------------------------|------------------------------------------------------------------|
28
+ | Linear Euclidean Gaussian filtering | `KalmanFilter` and `examples/basic/kalman_filter.py` |
29
+ | Reusable transition and measurement models | `examples/basic/kalman_filter_with_models.py` |
30
+ | Nonlinear filtering | `examples/basic/ukf_with_models.py` or particle-filter examples |
31
+ | Multi-target tracking with clutter or missed detections | `examples/basic/multi_target_tracking.py` |
32
+ | Circular, spherical, or manifold-valued states | circular, hypertoroidal, and hyperspherical distribution modules |
33
+ | Backend-portable code | `pyrecest.backend` imports plus focused tests under each backend |
34
+
35
+ For more detail, see `docs/choosing-an-api.md` and `docs/backend-compatibility.md`.
36
+
37
+ ## Command Line And Reproducible Scenarios
38
+
39
+ After installation, use the lightweight CLI to inspect an environment or run a
40
+ reproducible scenario:
41
+
42
+ ```bash
43
+ pyrecest info
44
+ pyrecest backends --format markdown
45
+ pyrecest run-scenario scenarios/linear_gaussian_cv_1d/config.toml
46
+ ```
47
+
48
+ The same scenario runner is available from a source checkout via
49
+ `scripts/run_scenario.py`. Scenario definitions live in `scenarios/` and include
50
+ TOML configuration plus JSON golden outputs.
51
+
52
+ The `pyrecest.diagnostics` module defines common diagnostics containers for
53
+ innovation statistics, particle-filter health, and association decisions.
54
+
49
55
  ## Installation
50
56
 
51
57
  PyRecEst requires Python 3.11 or newer and earlier than Python 3.15.
@@ -62,8 +68,14 @@ Optional backend and domain-specific dependencies can be installed with extras:
62
68
  python -m pip install "pyrecest[pytorch_support]"
63
69
  python -m pip install "pyrecest[jax_support]"
64
70
  python -m pip install "pyrecest[healpy_support]"
71
+ python -m pip install "pyrecest[all_support]"
65
72
  ```
66
73
 
74
+ Pip normalizes extra names, so the equivalent hyphenated spellings such as
75
+ `pyrecest[pytorch-support]`, `pyrecest[jax-support]`,
76
+ `pyrecest[healpy-support]`, and `pyrecest[all-support]` may also appear in
77
+ package-index metadata.
78
+
67
79
  For development from a source checkout, use Poetry or the provided conda
68
80
  environment:
69
81
 
@@ -117,6 +129,12 @@ The `docs/` directory contains the first project documentation pages:
117
129
  most common public entry points.
118
130
  - [Backend compatibility](docs/backend-compatibility.md) explains the NumPy,
119
131
  PyTorch, and JAX support model and known limitations.
132
+ - [Choosing an API](docs/choosing-an-api.md) maps task families to recommended
133
+ filters, distributions, trackers, and examples.
134
+ - [Distribution taxonomy](docs/distribution-taxonomy.md) summarizes the main
135
+ representation families by domain and use case.
136
+ - [Error handling](docs/error-handling.md) documents the shared exception types
137
+ and user-facing diagnostics policy.
120
138
  - [API reference](docs/reference/index.md) contains generated package reference
121
139
  pages built with MkDocs and mkdocstrings.
122
140
  - [Task tutorials](docs/tutorials/index.md) show common distribution, filtering,
@@ -203,4 +221,3 @@ backend implementations are based on those of
203
221
 
204
222
  ## License
205
223
  `PyRecEst` is licensed under the MIT License.
206
-
@@ -0,0 +1,165 @@
1
+ [tool.poetry]
2
+ name = "pyrecest"
3
+ description = "Framework for recursive Bayesian estimation in Python."
4
+ readme = "README.md"
5
+ authors = ["Florian Pfaff <pfaff@ias.uni-stuttgart.de>"]
6
+ version = "2.2.3"
7
+ include = ["src/pyrecest/py.typed"]
8
+ license = "MIT"
9
+ keywords = [
10
+ "bayesian-filtering",
11
+ "recursive-estimation",
12
+ "tracking",
13
+ "multi-target-tracking",
14
+ "manifolds",
15
+ "directional-statistics",
16
+ ]
17
+ classifiers = [
18
+ "Development Status :: 4 - Beta",
19
+ "Intended Audience :: Science/Research",
20
+ "License :: OSI Approved :: MIT License",
21
+ "Operating System :: OS Independent",
22
+ "Programming Language :: Python :: 3",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ "Programming Language :: Python :: 3.14",
27
+ "Topic :: Scientific/Engineering",
28
+ ]
29
+
30
+ [tool.poetry.urls]
31
+ Homepage = "https://github.com/FlorianPfaff/PyRecEst"
32
+ Documentation = "https://florianpfaff.github.io/PyRecEst/"
33
+ Repository = "https://github.com/FlorianPfaff/PyRecEst"
34
+ Issues = "https://github.com/FlorianPfaff/PyRecEst/issues"
35
+
36
+ [build-system]
37
+ requires = ["poetry-core>=2.0.0,<3.0.0"]
38
+ build-backend = "poetry.core.masonry.api"
39
+
40
+ [tool.poetry.dependencies]
41
+ python = ">=3.11,<3.15"
42
+ numpy = ">=2.0,<2.5"
43
+ scipy = ">=1.14,<1.18"
44
+ matplotlib = ">=3.8,<4.0"
45
+ mpmath = ">=1.3,<1.4"
46
+ pyshtools = ">=4.12,<5.0"
47
+ beartype = ">=0.18,<0.23"
48
+ shapely = ">=2.0,<3.0"
49
+ healpy = { version = ">=1.17,<2.0", optional = true }
50
+ torch = { version = ">=2.4,<3.0", optional = true }
51
+ jax = { version = ">=0.4.30,<0.11", optional = true }
52
+ jaxlib = { version = ">=0.4.30,<0.11", optional = true }
53
+ autograd = { version = ">=1.7,<2.0", optional = true }
54
+
55
+ [tool.poetry.scripts]
56
+ pyrecest = "pyrecest.cli:main"
57
+
58
+ [tool.poetry.extras]
59
+ healpy_support = ["healpy"]
60
+ pytorch_support = ["torch"]
61
+ jax_support = ["jax", "jaxlib", "autograd"]
62
+ all_support = ["healpy", "torch", "jax", "jaxlib", "autograd"]
63
+
64
+ [tool.poetry.group.dev.dependencies]
65
+ autopep8 = "^2.3.2"
66
+ pytest = ">=8,<10"
67
+ pytest-cov = ">=5,<8"
68
+ parameterized = ">=0.9,<1.0"
69
+ nox = ">=2024.10,<2027.0"
70
+ pytest-benchmark = ">=4.0,<6.0"
71
+ asv = ">=0.6,<1.0"
72
+
73
+ [tool.poetry.group.docs.dependencies]
74
+ mkdocs = "^1.6.1"
75
+ mkdocstrings = { version = "^1.0.4", extras = ["python"] }
76
+
77
+ [tool.mypy]
78
+ check_untyped_defs = true
79
+
80
+ [[tool.mypy.overrides]]
81
+ module = [
82
+ "pyrecest.diagnostics",
83
+ "pyrecest.reproducibility",
84
+ "pyrecest.scenarios",
85
+ ]
86
+ disallow_untyped_defs = true
87
+ warn_return_any = true
88
+
89
+ [tool.ruff]
90
+ line-length = 180
91
+
92
+ [tool.ruff.lint]
93
+ select = ["F821", "F822", "F823"]
94
+
95
+ [tool.isort]
96
+ profile = "black"
97
+
98
+ [tool.pytest.ini_options]
99
+ filterwarnings = [
100
+ "ignore::DeprecationWarning:mpmath.*",
101
+ "ignore::scipy.optimize.OptimizeWarning",
102
+ "ignore:'return' in a 'finally' block:SyntaxWarning:autograd\\.wrap_util",
103
+ ]
104
+ markers = [
105
+ "numerical_stress: slower numerical stability and ill-conditioning checks",
106
+ "benchmark: optional performance benchmark tests",
107
+ "backend_portable: subprocess-based checks that verify import-time backend portability",
108
+ "doc_example: executable documentation examples",
109
+ "validation: closed-form or reference-result algorithm validation tests",
110
+ ]
111
+
112
+ [tool.coverage.run]
113
+ branch = true
114
+ source = ["pyrecest"]
115
+ omit = [
116
+ "*/tests/*",
117
+ "*/benchmarks/*",
118
+ ]
119
+
120
+ [tool.coverage.report]
121
+ show_missing = true
122
+ skip_covered = true
123
+ fail_under = 20
124
+ exclude_lines = [
125
+ "pragma: no cover",
126
+ "if TYPE_CHECKING:",
127
+ "if __name__ == .__main__.:",
128
+ ]
129
+ [tool.pylint.MAIN]
130
+ py-version = "3.13"
131
+ fail-under = 10
132
+ ignore = ["CVS"]
133
+ ignored-modules = ["pyrecest.backend", "healpy", "torch", "jax", "jaxlib"]
134
+
135
+ [tool.pylint."MESSAGES CONTROL"]
136
+ disable = [
137
+ "raw-checker-failed",
138
+ "bad-inline-option",
139
+ "locally-disabled",
140
+ "file-ignored",
141
+ "suppressed-message",
142
+ "deprecated-pragma",
143
+ "use-symbolic-message-instead",
144
+ "C",
145
+ "W0221",
146
+ "redefined-builtin",
147
+ "cyclic-import",
148
+ "too-many-locals",
149
+ "too-many-return-statements",
150
+ "too-many-branches",
151
+ "too-many-statements",
152
+ "too-many-arguments",
153
+ "too-many-positional-arguments",
154
+ "too-many-instance-attributes",
155
+ "duplicate-code",
156
+ ]
157
+
158
+ [tool.pylint.FORMAT]
159
+ max-line-length = 180
160
+
161
+ [tool.pylint.DESIGN]
162
+ max-args = 6
163
+ max-parents = 15
164
+ max-public-methods = 25
165
+ min-public-methods = 0
@@ -0,0 +1,58 @@
1
+ from importlib.metadata import PackageNotFoundError, version
2
+
3
+ import pyrecest._backend # noqa
4
+ from pyrecest.backend import copy # noqa: F401
5
+ from pyrecest.backend_support import ( # noqa: F401
6
+ backend_support,
7
+ format_backend_support_markdown,
8
+ get_backend_support,
9
+ )
10
+ from pyrecest.backend_tools import ( # noqa: F401
11
+ assert_backend,
12
+ get_backend_name,
13
+ is_backend,
14
+ warn_if_backend_env_changed,
15
+ )
16
+ from pyrecest.exceptions import ( # noqa: F401
17
+ BackendNotSupportedError,
18
+ BackendSupportError,
19
+ DimensionMismatchError,
20
+ NumericalStabilityError,
21
+ OptionalDependencyError,
22
+ PyRecEstError,
23
+ ShapeError,
24
+ ValidationError,
25
+ )
26
+ from pyrecest.stability import ( # noqa: F401
27
+ get_public_api_status,
28
+ iter_public_api_status,
29
+ stability,
30
+ )
31
+
32
+ try:
33
+ __version__ = version("pyrecest")
34
+ except PackageNotFoundError: # pragma: no cover - source tree without install metadata
35
+ __version__ = "0+unknown"
36
+
37
+ __all__ = [
38
+ "BackendNotSupportedError",
39
+ "BackendSupportError",
40
+ "DimensionMismatchError",
41
+ "NumericalStabilityError",
42
+ "OptionalDependencyError",
43
+ "PyRecEstError",
44
+ "ShapeError",
45
+ "ValidationError",
46
+ "__version__",
47
+ "assert_backend",
48
+ "backend_support",
49
+ "copy",
50
+ "format_backend_support_markdown",
51
+ "get_backend_name",
52
+ "get_backend_support",
53
+ "get_public_api_status",
54
+ "is_backend",
55
+ "iter_public_api_status",
56
+ "stability",
57
+ "warn_if_backend_env_changed",
58
+ ]
@@ -204,7 +204,7 @@ BACKEND_ATTRIBUTES = {
204
204
  "round",
205
205
  "array_equal",
206
206
  # For Riemannian score-based SDE
207
- "log1p"
207
+ "log1p",
208
208
  ],
209
209
  "autodiff": [
210
210
  "custom_gradient",
@@ -274,6 +274,15 @@ BACKEND_ATTRIBUTES = {
274
274
  }
275
275
 
276
276
 
277
+ def _deduplicated_attributes(attributes):
278
+ """Return ``attributes`` with duplicates removed while preserving order."""
279
+ return list(dict.fromkeys(attributes))
280
+
281
+
282
+ for _module_name, _attributes in BACKEND_ATTRIBUTES.items():
283
+ BACKEND_ATTRIBUTES[_module_name] = _deduplicated_attributes(_attributes)
284
+
285
+
277
286
  class BackendImporter(importlib.abc.MetaPathFinder, importlib.abc.Loader):
278
287
  """
279
288
  Meta path finder and loader for dynamically creating backend modules.
@@ -361,8 +370,11 @@ class BackendImporter(importlib.abc.MetaPathFinder, importlib.abc.Loader):
361
370
  module.set_default_dtype("float64")
362
371
  logging.info(f"Using {BACKEND_NAME} backend")
363
372
 
373
+
364
374
  TARGET = "pyrecest.backend"
365
- if not any(isinstance(f, BackendImporter) and getattr(f, "_path", None) == TARGET
366
- for f in sys.meta_path):
375
+ if not any(
376
+ isinstance(f, BackendImporter) and getattr(f, "_path", None) == TARGET
377
+ for f in sys.meta_path
378
+ ):
367
379
  # put it in front so it intercepts 'pyrecest.backend'
368
380
  sys.meta_path.insert(0, BackendImporter(TARGET))
@@ -357,7 +357,7 @@ def _pre_allow_complex_dtype(cast, complex_dtypes):
357
357
  if dtype in complex_dtypes:
358
358
  out = out + 1j * func(*args, **kwargs)
359
359
 
360
- if out.dtype != dtype:
360
+ if getattr(out, "dtype", None) != dtype:
361
361
  return cast(out, dtype)
362
362
 
363
363
  return out
@@ -1,5 +1,9 @@
1
- from pyrecest._backend._dtype_utils import _np_box_binary_scalar as _box_binary_scalar
2
- from pyrecest._backend._dtype_utils import _np_box_unary_scalar as _box_unary_scalar
1
+ from pyrecest._backend._dtype_utils import ( # noqa: F401
2
+ _np_box_binary_scalar as _box_binary_scalar,
3
+ )
4
+ from pyrecest._backend._dtype_utils import ( # noqa: F401
5
+ _np_box_unary_scalar as _box_unary_scalar,
6
+ )
3
7
  from pyrecest._backend._dtype_utils import (
4
8
  _pre_add_default_dtype_by_casting,
5
9
  _pre_allow_complex_dtype,
@@ -9,8 +13,8 @@ from pyrecest._backend._dtype_utils import (
9
13
  _pre_set_default_dtype,
10
14
  )
11
15
 
12
- from .._backend_config import np_atol as atol
13
- from .._backend_config import np_rtol as rtol
16
+ from .._backend_config import np_atol as atol # noqa: F401
17
+ from .._backend_config import np_rtol as rtol # noqa: F401
14
18
  from ._dispatch import numpy as _np
15
19
 
16
20
  _DTYPES = {
@@ -49,7 +53,19 @@ def _dtype_as_str(dtype):
49
53
  return dtype.name
50
54
 
51
55
 
56
+ def _normalize_numpy_dtype(dtype):
57
+ if dtype is None:
58
+ return None
59
+ try:
60
+ return _np.dtype(dtype)
61
+ except TypeError:
62
+ return _np.dtype(str(dtype).split(".")[-1])
63
+
64
+
52
65
  def cast(x, dtype):
66
+ dtype = _normalize_numpy_dtype(dtype)
67
+ if not hasattr(x, "astype"):
68
+ return _np.asarray(x, dtype=dtype)
53
69
  return x.astype(dtype)
54
70
 
55
71
 
@@ -129,11 +129,9 @@ from .._shared_numpy import (
129
129
  vec_to_diag,
130
130
  vectorize,
131
131
  )
132
- from . import (
133
- autodiff, # NOQA
134
- linalg, # NOQA
135
- random, # NOQA
136
- )
132
+ from . import autodiff # NOQA
133
+ from . import linalg # NOQA
134
+ from . import random # NOQA
137
135
  from ._common import (
138
136
  _box_binary_scalar,
139
137
  _box_unary_scalar,
@@ -1,5 +1,4 @@
1
1
  import autograd.numpy as _np
2
-
3
2
  from pyrecest._backend._dtype_utils import (
4
3
  _dyn_update_dtype,
5
4
  _modify_func_default_dtype,
@@ -23,13 +23,15 @@ from scipy.optimize import quadratic_assignment as _quadratic_assignment
23
23
  from .._shared_numpy.linalg import (
24
24
  fractional_matrix_power,
25
25
  is_single_matrix_pd,
26
+ )
27
+ from .._shared_numpy.linalg import logm as _logm
28
+ from .._shared_numpy.linalg import (
26
29
  polar,
27
30
  qr,
28
31
  solve,
29
32
  solve_sylvester,
30
33
  sqrtm,
31
34
  )
32
- from .._shared_numpy.linalg import logm as _logm
33
35
 
34
36
 
35
37
  def _adjoint(_ans, x, fn):
@@ -1,5 +1,6 @@
1
1
  """Autograd based random backend."""
2
+
2
3
  import autograd.numpy as _np
3
- from autograd.numpy.random import randint, seed, multinomial
4
+ from autograd.numpy.random import multinomial, randint, seed
4
5
 
5
- from .._shared_numpy.random import choice, multivariate_normal, normal, rand, uniform
6
+ from .._shared_numpy.random import choice, multivariate_normal, normal, rand, uniform