pyrecest 2.2.2__tar.gz → 2.2.4__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.
- pyrecest-2.2.2/README.md → pyrecest-2.2.4/PKG-INFO +93 -0
- pyrecest-2.2.2/PKG-INFO → pyrecest-2.2.4/README.md +50 -31
- pyrecest-2.2.4/pyproject.toml +165 -0
- pyrecest-2.2.4/src/pyrecest/__init__.py +58 -0
- pyrecest-2.2.4/src/pyrecest/_backend/__init__.py +762 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/_dtype_utils.py +1 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/_shared_numpy/__init__.py +35 -13
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/_shared_numpy/_common.py +50 -16
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/_shared_numpy/linalg.py +18 -11
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/_shared_numpy/random.py +10 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/autograd/__init__.py +57 -6
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/autograd/_common.py +0 -1
- pyrecest-2.2.4/src/pyrecest/_backend/autograd/fft.py +3 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/autograd/linalg.py +5 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/autograd/random.py +3 -2
- pyrecest-2.2.4/src/pyrecest/_backend/autograd/signal.py +3 -0
- pyrecest-2.2.4/src/pyrecest/_backend/autograd/spatial.py +3 -0
- pyrecest-2.2.4/src/pyrecest/_backend/capabilities.py +218 -0
- pyrecest-2.2.4/src/pyrecest/_backend/jax/__init__.py +618 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/jax/_dtype.py +1 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/jax/autodiff.py +0 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/jax/fft.py +5 -5
- pyrecest-2.2.4/src/pyrecest/_backend/jax/linalg.py +57 -0
- pyrecest-2.2.4/src/pyrecest/_backend/jax/random.py +297 -0
- pyrecest-2.2.4/src/pyrecest/_backend/jax/signal.py +1 -0
- pyrecest-2.2.4/src/pyrecest/_backend/jax/spatial.py +1 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/numpy/__init__.py +45 -49
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/numpy/_common.py +0 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/numpy/autodiff.py +2 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/numpy/fft.py +5 -4
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/numpy/linalg.py +2 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/numpy/random.py +7 -2
- pyrecest-2.2.4/src/pyrecest/_backend/numpy/signal.py +1 -0
- pyrecest-2.2.4/src/pyrecest/_backend/numpy/spatial.py +1 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/pytorch/__init__.py +472 -143
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/pytorch/_common.py +2 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/pytorch/_dtype.py +1 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/pytorch/fft.py +5 -5
- pyrecest-2.2.4/src/pyrecest/_backend/pytorch/linalg.py +254 -0
- pyrecest-2.2.4/src/pyrecest/_backend/pytorch/random.py +250 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/pytorch/signal.py +1 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/pytorch/spatial.py +1 -1
- pyrecest-2.2.4/src/pyrecest/api_registry.py +103 -0
- pyrecest-2.2.4/src/pyrecest/backend_support.py +58 -0
- pyrecest-2.2.4/src/pyrecest/backend_tools.py +54 -0
- pyrecest-2.2.4/src/pyrecest/backends/__init__.py +33 -0
- pyrecest-2.2.4/src/pyrecest/calibration/__init__.py +37 -0
- pyrecest-2.2.4/src/pyrecest/calibration/bias.py +387 -0
- pyrecest-2.2.4/src/pyrecest/calibration/time_offset.py +390 -0
- pyrecest-2.2.4/src/pyrecest/cli.py +198 -0
- pyrecest-2.2.4/src/pyrecest/deprecation.py +53 -0
- pyrecest-2.2.4/src/pyrecest/diagnostics.py +314 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/__init__.py +0 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/_so3_helpers.py +13 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_custom_distribution.py +9 -5
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_dirac_distribution.py +19 -9
- pyrecest-2.2.4/src/pyrecest/distributions/abstract_ellipsoidal_ball_distribution.py +84 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_mixture.py +38 -4
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/abstract_hypercylindrical_distribution.py +7 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/abstract_lin_bounded_cart_prod_distribution.py +6 -4
- pyrecest-2.2.4/src/pyrecest/distributions/cart_prod/cart_prod_stacked_distribution.py +91 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/custom_hypercylindrical_distribution.py +1 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/gauss_von_mises_distribution.py +64 -9
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/hypercylindrical_dirac_distribution.py +2 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/hypercylindrical_state_space_subdivision_distribution.py +25 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/lin_hypersphere_cart_prod_dirac_distribution.py +2 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/mardia_sutton_distribution.py +52 -7
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/partially_wrapped_normal_distribution.py +96 -19
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/se2_bingham_distribution.py +26 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/se3_lin_vel_cart_prod_stacked_distribution.py +2 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/abstract_circular_distribution.py +2 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/circular_fourier_distribution.py +1 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/circular_mixture.py +5 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/circular_uniform_distribution.py +2 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/custom_circular_distribution.py +1 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/generalized_von_mises_distribution.py +28 -7
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/piecewise_constant_distribution.py +46 -5
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/sine_skewed_distributions.py +25 -11
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/von_mises_distribution.py +7 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/wrapped_cauchy_distribution.py +37 -5
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/wrapped_exponential_distribution.py +32 -4
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/wrapped_laplace_distribution.py +17 -6
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/wrapped_normal_distribution.py +43 -17
- pyrecest-2.2.4/src/pyrecest/distributions/custom_hyperrectangular_distribution.py +41 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/ellipsoidal_ball_uniform_distribution.py +36 -7
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_distribution.py +25 -39
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_uniform_distribution.py +2 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/abstract_sphere_subset_distribution.py +10 -7
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/bingham_distribution.py +30 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/complex_angular_central_gaussian_distribution.py +43 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/complex_bingham_distribution.py +25 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/complex_watson_distribution.py +25 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/custom_hyperhemispherical_distribution.py +9 -8
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_dirac_distribution.py +2 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_grid_distribution.py +8 -13
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_uniform_distribution.py +28 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/spherical_grid_distribution.py +8 -4
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/von_mises_fisher_distribution.py +10 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/watson_distribution.py +13 -2
- pyrecest-2.2.4/src/pyrecest/distributions/hypertorus/_input_validation.py +45 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/abstract_hypertoroidal_distribution.py +11 -5
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/abstract_toroidal_bivar_vm_distribution.py +8 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/custom_hypertoroidal_distribution.py +12 -6
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/custom_toroidal_distribution.py +4 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/hypertoroidal_dirac_distribution.py +27 -4
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/hypertoroidal_fourier_distribution.py +2 -5
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/hypertoroidal_grid_distribution.py +11 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/hypertoroidal_mixture.py +5 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/hypertoroidal_uniform_distribution.py +88 -14
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/hypertoroidal_wrapped_normal_distribution.py +22 -10
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/toroidal_vm_matrix_distribution.py +16 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/toroidal_vm_rivest_distribution.py +12 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/toroidal_von_mises_cosine_distribution.py +4 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/toroidal_von_mises_sine_distribution.py +2 -1
- pyrecest-2.2.4/src/pyrecest/distributions/nonperiodic/abstract_hyperrectangular_distribution.py +66 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/nonperiodic/abstract_linear_distribution.py +8 -5
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/nonperiodic/custom_linear_distribution.py +22 -4
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/nonperiodic/gaussian_distribution.py +114 -39
- pyrecest-2.2.4/src/pyrecest/distributions/nonperiodic/hyperrectangular_uniform_distribution.py +47 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/nonperiodic/linear_box_particle_distribution.py +35 -15
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/nonperiodic/linear_dirac_distribution.py +31 -9
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/se2_dirac_distribution.py +19 -9
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/se3_dirac_distribution.py +18 -6
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/so3_bingham_distribution.py +40 -18
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/so3_conversion.py +13 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/so3_dirac_distribution.py +22 -11
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/so3_product_dirac_distribution.py +13 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/so3_product_tangent_gaussian_distribution.py +42 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/so3_tangent_gaussian_distribution.py +43 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/check_and_fix_config.py +41 -19
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/configure_for_filter.py +43 -2
- pyrecest-2.2.4/src/pyrecest/evaluation/diagnostic_summaries.py +334 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/generate_measurements.py +60 -29
- pyrecest-2.2.4/src/pyrecest/evaluation/get_distance_function.py +190 -0
- pyrecest-2.2.4/src/pyrecest/evaluation/get_extract_mean.py +116 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/perform_predict_update_cycles.py +58 -8
- pyrecest-2.2.4/src/pyrecest/exceptions.py +137 -0
- pyrecest-2.2.4/src/pyrecest/experimental/__init__.py +9 -0
- pyrecest-2.2.4/src/pyrecest/experimental/dvs/__init__.py +90 -0
- pyrecest-2.2.4/src/pyrecest/experimental/dvs/active_contour.py +105 -0
- pyrecest-2.2.4/src/pyrecest/experimental/dvs/event_likelihood.py +308 -0
- pyrecest-2.2.4/src/pyrecest/experimental/dvs/point_process_tracker.py +431 -0
- pyrecest-2.2.4/src/pyrecest/experimental/dvs/synthetic.py +123 -0
- pyrecest-2.2.4/src/pyrecest/experimental/dvs/trackers.py +490 -0
- pyrecest-2.2.4/src/pyrecest/experimental/dvs/vectorized_flow.py +98 -0
- pyrecest-2.2.4/src/pyrecest/filters/__init__.py +233 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/_linear_gaussian.py +19 -14
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/_ukf.py +15 -16
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/abstract_dummy_filter.py +4 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/abstract_filter.py +10 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/abstract_grid_filter.py +17 -11
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/abstract_nearest_neighbor_tracker.py +2 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/abstract_particle_filter.py +52 -7
- pyrecest-2.2.4/src/pyrecest/filters/adaptive_process_noise.py +174 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/association_hypotheses.py +183 -29
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/axial_kalman_filter.py +35 -17
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/bingham_filter.py +73 -16
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/block_particle_filter.py +104 -49
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/circular_ukf.py +85 -27
- pyrecest-2.2.4/src/pyrecest/filters/discrete_state.py +654 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/euclidean_box_particle_filter.py +13 -6
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/euclidean_boxed_particle_filter.py +17 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/euclidean_particle_filter.py +13 -4
- pyrecest-2.2.4/src/pyrecest/filters/gaussian_hypothesis_mixture.py +81 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/global_nearest_neighbor.py +54 -14
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/goal_conditioned_replay_particle_filter.py +43 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/gprhm_tracker.py +52 -13
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/hyperspherical_dummy_filter.py +7 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/hyperspherical_particle_filter.py +2 -8
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/hypertoroidal_dummy_filter.py +7 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/interacting_multiple_model_filter.py +10 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/joint_probabilistic_data_association_filter.py +4 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/kalman_filter.py +29 -9
- pyrecest-2.2.4/src/pyrecest/filters/linear_update_planning.py +441 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/multi_bernoulli_mixture_tracker.py +33 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/multi_bernoulli_tracker.py +52 -17
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/multi_hypothesis_tracker.py +461 -32
- pyrecest-2.2.4/src/pyrecest/filters/online_time_offset_estimator.py +59 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/out_of_sequence.py +2 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/random_matrix_tracker.py +2 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/relaxed_s3f_circular.py +38 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/relaxed_s3f_so3.py +50 -11
- pyrecest-2.2.4/src/pyrecest/filters/replay_grid_likelihood.py +424 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/se2_ukf.py +59 -31
- pyrecest-2.2.4/src/pyrecest/filters/sequence_association.py +289 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/so3_grid_transition.py +10 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/so3_product_particle_filter.py +99 -14
- pyrecest-2.2.4/src/pyrecest/filters/so3_product_sequence_filter.py +531 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/toroidal_wrapped_normal_filter.py +2 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/track_manager.py +71 -11
- pyrecest-2.2.4/src/pyrecest/filters/tracklet_viterbi.py +641 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/unscented_kalman_filter.py +13 -24
- pyrecest-2.2.4/src/pyrecest/filters/vbrm_o_tracker.py +14 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/von_mises_filter.py +59 -5
- pyrecest-2.2.4/src/pyrecest/filters/von_mises_fisher_filter.py +129 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/wrapped_normal_filter.py +34 -4
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/models/additive_noise.py +56 -4
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/models/likelihood.py +28 -18
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/models/motion_models.py +117 -53
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/models/sensor_models.py +138 -25
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/models/validation.py +3 -1
- pyrecest-2.2.4/src/pyrecest/numerics.py +177 -0
- pyrecest-2.2.4/src/pyrecest/optional_dependencies.py +37 -0
- pyrecest-2.2.4/src/pyrecest/protocols/__init__.py +47 -0
- pyrecest-2.2.4/src/pyrecest/protocols/distributions.py +75 -0
- pyrecest-2.2.4/src/pyrecest/protocols/estimator.py +35 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/protocols/filters.py +4 -0
- pyrecest-2.2.4/src/pyrecest/reproducibility.py +75 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/sampling/euclidean_sampler.py +97 -13
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/sampling/hyperspherical_sampler.py +115 -31
- pyrecest-2.2.4/src/pyrecest/sampling/hypertoroidal_sampler.py +66 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/sampling/sigma_points.py +36 -33
- pyrecest-2.2.4/src/pyrecest/scenarios.py +293 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/smoothers/__init__.py +6 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/smoothers/mem_rbpf_ffbsi_smoother.py +22 -3
- pyrecest-2.2.4/src/pyrecest/smoothers/so3_tangent_savitzky_golay_smoother.py +347 -0
- pyrecest-2.2.4/src/pyrecest/stability.py +109 -0
- pyrecest-2.2.4/src/pyrecest/types.py +32 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/__init__.py +12 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/assignment.py +89 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/association_models.py +27 -6
- pyrecest-2.2.4/src/pyrecest/utils/candidate_pruning.py +236 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/history_recorder.py +5 -2
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/metrics.py +31 -11
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/multisession_assignment.py +78 -20
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/multisession_assignment_score.py +29 -6
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/roi_assignment.py +9 -3
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/track_evaluation.py +1 -1
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/track_metrics.py +26 -8
- pyrecest-2.2.2/pyproject.toml +0 -97
- pyrecest-2.2.2/src/pyrecest/__init__.py +0 -2
- pyrecest-2.2.2/src/pyrecest/_backend/__init__.py +0 -368
- pyrecest-2.2.2/src/pyrecest/_backend/jax/__init__.py +0 -432
- pyrecest-2.2.2/src/pyrecest/_backend/jax/linalg.py +0 -34
- pyrecest-2.2.2/src/pyrecest/_backend/jax/random.py +0 -161
- pyrecest-2.2.2/src/pyrecest/_backend/jax/signal.py +0 -1
- pyrecest-2.2.2/src/pyrecest/_backend/jax/spatial.py +0 -1
- pyrecest-2.2.2/src/pyrecest/_backend/numpy/signal.py +0 -1
- pyrecest-2.2.2/src/pyrecest/_backend/numpy/spatial.py +0 -1
- pyrecest-2.2.2/src/pyrecest/_backend/pytorch/linalg.py +0 -161
- pyrecest-2.2.2/src/pyrecest/_backend/pytorch/random.py +0 -83
- pyrecest-2.2.2/src/pyrecest/distributions/abstract_ellipsoidal_ball_distribution.py +0 -49
- pyrecest-2.2.2/src/pyrecest/distributions/cart_prod/cart_prod_stacked_distribution.py +0 -58
- pyrecest-2.2.2/src/pyrecest/distributions/custom_hyperrectangular_distribution.py +0 -19
- pyrecest-2.2.2/src/pyrecest/distributions/nonperiodic/abstract_hyperrectangular_distribution.py +0 -43
- pyrecest-2.2.2/src/pyrecest/distributions/nonperiodic/hyperrectangular_uniform_distribution.py +0 -13
- pyrecest-2.2.2/src/pyrecest/evaluation/get_distance_function.py +0 -68
- pyrecest-2.2.2/src/pyrecest/evaluation/get_extract_mean.py +0 -51
- pyrecest-2.2.2/src/pyrecest/filters/__init__.py +0 -329
- pyrecest-2.2.2/src/pyrecest/filters/von_mises_fisher_filter.py +0 -69
- pyrecest-2.2.2/src/pyrecest/protocols/__init__.py +0 -21
- pyrecest-2.2.2/src/pyrecest/sampling/hypertoroidal_sampler.py +0 -30
- {pyrecest-2.2.2 → pyrecest-2.2.4}/LICENSE +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/.pylintrc +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/LICENSE_geomstats +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/README.md +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/_backend_config.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/_common.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/_shared_numpy/_dispatch.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/autograd/_dtype.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/autograd/autodiff.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/numpy/_dtype.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/_backend/pytorch/autodiff.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_bounded_domain_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_bounded_nonperiodic_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_custom_nonperiodic_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_disk_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_distribution_type.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_manifold_specific_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_nonperiodic_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_orthogonal_basis_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_periodic_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_periodic_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_se2_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_se3_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/abstract_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/abstract_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/abstract_custom_lin_bounded_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/abstract_lin_hemisphere_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/abstract_lin_hyperhemisphere_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/abstract_lin_hypersphere_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/abstract_lin_hypersphere_subset_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/abstract_lin_periodic_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/cart_prod_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/hypercylindrical_state_space_subdivision_gaussian_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/hyperhemisphere_cart_prod_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/lin_bounded_cart_prod_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/lin_hypersphere_subset_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/lin_periodic_cart_prod_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/se2_pwn_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/se2_state_space_subdivision_gaussian_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/state_space_subdivision_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/cart_prod/state_space_subdivision_gaussian_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/circular_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/circle/circular_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/conditional/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/conditional/abstract_conditional_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/conditional/s2_cond_s2_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/conditional/sd_cond_sd_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/conditional/sd_half_cond_sd_half_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/conditional/td_cond_td_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/conversion.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/disk_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/abstract_complex_hyperspherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/abstract_hemispherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/abstract_hyperhemispherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/abstract_hyperspherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/abstract_spherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/abstract_spherical_harmonics_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/bayesian_complex_watson_mixture_model.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/custom_hemispherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/custom_hyperspherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/hemispherical_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_bingham_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_watson_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_mixture.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/spherical_harmonics_distribution_complex.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypersphere_subset/spherical_harmonics_distribution_real.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/abstract_toroidal_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/toroidal_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/toroidal_fourier_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/toroidal_mixture.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/toroidal_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/hypertorus/toroidal_wrapped_normal_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/nonperiodic/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/nonperiodic/gaussian_mixture.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/nonperiodic/linear_mixture.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/se3_cart_prod_stacked_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/so3_helpers.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/distributions/so3_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/determine_all_deviations.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/eot_shape_database.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/evaluate_for_file.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/evaluate_for_simulation_config.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/evaluate_for_variables.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/generate_groundtruth.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/generate_simulated_scenarios.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/get_axis_label.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/group_results_by_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/iterate_configs_and_runs.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/plot_results.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/simulation_database.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/evaluation/summarize_filter_results.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/abstract_axial_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/abstract_circular_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/abstract_extended_object_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/abstract_multiple_extended_object_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/abstract_multitarget_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/abstract_tracker_with_logging.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/circular_fourier_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/circular_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/ekf_spline_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/factorized_giw_random_matrix_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/fourier_rhm_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/gaussian_mixture_phd_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/ggiw_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/goal_conditioned_replay_imm_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/goal_conditioned_replay_particle_imm_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/hypercylindrical_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/hyperhemisphere_cart_prod_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/hyperhemispherical_grid_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/hyperhemispherical_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/hyperspherical_ukf.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/hypertoroidal_fourier_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/hypertoroidal_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/information_form_distributed_kalman_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/iterated_batch_mem_qkf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/kernel_sme_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/lin_bounded_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/lin_periodic_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/lomem_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/manifold_exponential_moving_average.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/manifold_mixins.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/mem_ekf_star_oa_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/mem_ekf_star_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/mem_ekf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/mem_qkf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/mem_rbpf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/mem_soekf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/mode_rbpf_manifold_ukf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/orientation_vector_eot_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/partitioned_so3_product_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/piecewise_constant_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/so3_product_block_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/spherical_harmonics_eot_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/spherical_harmonics_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/state_space_subdivision_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/toroidal_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/ukf_on_manifolds.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/vbrm_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/velocity_aided_mem_qkf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/filters/velocity_locked_mem_qkf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/models/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/models/adapters.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/models/grid.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/models/linear_gaussian.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/models/particle.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/protocols/common.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/protocols/models.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/protocols/testing.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/py.typed +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/sampling/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/sampling/abstract_sampler.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/sampling/leopardi_sampler.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/smoothers/abstract_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/smoothers/fixed_lag_mem_qkf_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/smoothers/fixed_lag_random_matrix_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/smoothers/fixed_lag_velocity_locked_mem_qkf_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/smoothers/rauch_tung_striebel_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/smoothers/sliding_window_manifold_mean_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/smoothers/so3_chordal_mean_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/smoothers/unscented_rauch_tung_striebel_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/_point_set_registration_common.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/association_features.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/multisession_assignment_observation_costs.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/nonrigid_point_set_registration.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/pairwise_covariance_features.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/plotting.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.4}/src/pyrecest/utils/point_set_registration.py +0 -0
|
@@ -1,5 +1,52 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pyrecest
|
|
3
|
+
Version: 2.2.4
|
|
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
|
+
[](https://github.com/FlorianPfaff/PyRecEst/actions/workflows/tests.yml)
|
|
46
|
+
[](https://pypi.org/project/pyrecest/)
|
|
47
|
+
[](https://pypi.org/project/pyrecest/)
|
|
48
|
+
[](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,
|
|
@@ -120,6 +210,8 @@ Install the matching optional extra before using a non-default backend.
|
|
|
120
210
|
|
|
121
211
|
- `examples/basic/kalman_filter.py` contains a small executable Kalman filter
|
|
122
212
|
example.
|
|
213
|
+
- `examples/basic/scgp_measurement_reliability.py` demonstrates
|
|
214
|
+
reliability-weighted measurements for the full SCGP extended-object tracker.
|
|
123
215
|
- `tests/` contains additional usage examples for distributions, filters,
|
|
124
216
|
smoothers, evaluation, sampling, metrics, and tracking utilities.
|
|
125
217
|
|
|
@@ -173,3 +265,4 @@ backend implementations are based on those of
|
|
|
173
265
|
|
|
174
266
|
## License
|
|
175
267
|
`PyRecEst` is licensed under the MIT License.
|
|
268
|
+
|
|
@@ -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
|
+
[](https://github.com/FlorianPfaff/PyRecEst/actions/workflows/tests.yml)
|
|
4
|
+
[](https://pypi.org/project/pyrecest/)
|
|
5
|
+
[](https://pypi.org/project/pyrecest/)
|
|
6
|
+
[](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,
|
|
@@ -150,6 +168,8 @@ Install the matching optional extra before using a non-default backend.
|
|
|
150
168
|
|
|
151
169
|
- `examples/basic/kalman_filter.py` contains a small executable Kalman filter
|
|
152
170
|
example.
|
|
171
|
+
- `examples/basic/scgp_measurement_reliability.py` demonstrates
|
|
172
|
+
reliability-weighted measurements for the full SCGP extended-object tracker.
|
|
153
173
|
- `tests/` contains additional usage examples for distributions, filters,
|
|
154
174
|
smoothers, evaluation, sampling, metrics, and tracking utilities.
|
|
155
175
|
|
|
@@ -203,4 +223,3 @@ backend implementations are based on those of
|
|
|
203
223
|
|
|
204
224
|
## License
|
|
205
225
|
`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.4"
|
|
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
|
+
]
|