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.
- pyrecest-2.2.2/README.md → pyrecest-2.2.3/PKG-INFO +91 -0
- pyrecest-2.2.2/PKG-INFO → pyrecest-2.2.3/README.md +48 -31
- pyrecest-2.2.3/pyproject.toml +165 -0
- pyrecest-2.2.3/src/pyrecest/__init__.py +58 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/__init__.py +15 -3
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_dtype_utils.py +1 -1
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_shared_numpy/_common.py +20 -4
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/__init__.py +3 -5
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/_common.py +0 -1
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/linalg.py +3 -1
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/random.py +3 -2
- pyrecest-2.2.3/src/pyrecest/_backend/capabilities.py +216 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/__init__.py +153 -121
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/_dtype.py +1 -2
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/autodiff.py +0 -1
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/fft.py +5 -5
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/linalg.py +16 -11
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/jax/random.py +69 -42
- pyrecest-2.2.3/src/pyrecest/_backend/jax/signal.py +1 -0
- pyrecest-2.2.3/src/pyrecest/_backend/jax/spatial.py +1 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/__init__.py +45 -49
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/_common.py +0 -1
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/autodiff.py +2 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/fft.py +5 -4
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/linalg.py +2 -2
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/random.py +7 -2
- pyrecest-2.2.3/src/pyrecest/_backend/numpy/signal.py +1 -0
- pyrecest-2.2.3/src/pyrecest/_backend/numpy/spatial.py +1 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/__init__.py +85 -67
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/_dtype.py +1 -2
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/fft.py +5 -5
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/linalg.py +47 -18
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/random.py +18 -8
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/signal.py +1 -1
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/spatial.py +1 -1
- pyrecest-2.2.3/src/pyrecest/api_registry.py +97 -0
- pyrecest-2.2.3/src/pyrecest/backend_support.py +58 -0
- pyrecest-2.2.3/src/pyrecest/backend_tools.py +54 -0
- pyrecest-2.2.3/src/pyrecest/backends/__init__.py +33 -0
- pyrecest-2.2.3/src/pyrecest/cli.py +192 -0
- pyrecest-2.2.3/src/pyrecest/deprecation.py +53 -0
- pyrecest-2.2.3/src/pyrecest/diagnostics.py +143 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/__init__.py +0 -3
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_custom_distribution.py +6 -2
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_dirac_distribution.py +13 -6
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_mixture.py +14 -4
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_distribution.py +25 -39
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_grid_distribution.py +7 -1
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/spherical_grid_distribution.py +8 -4
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_mixture.py +3 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/abstract_hyperrectangular_distribution.py +24 -7
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/gaussian_distribution.py +115 -39
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/check_and_fix_config.py +41 -19
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/configure_for_filter.py +43 -2
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/generate_measurements.py +59 -29
- pyrecest-2.2.3/src/pyrecest/evaluation/get_distance_function.py +180 -0
- pyrecest-2.2.3/src/pyrecest/evaluation/get_extract_mean.py +107 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/perform_predict_update_cycles.py +58 -8
- pyrecest-2.2.3/src/pyrecest/exceptions.py +137 -0
- pyrecest-2.2.3/src/pyrecest/experimental/__init__.py +9 -0
- pyrecest-2.2.3/src/pyrecest/filters/__init__.py +187 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/_linear_gaussian.py +19 -14
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_nearest_neighbor_tracker.py +2 -2
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_particle_filter.py +31 -5
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/association_hypotheses.py +107 -17
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/global_nearest_neighbor.py +11 -5
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/interacting_multiple_model_filter.py +10 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/kalman_filter.py +29 -9
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/out_of_sequence.py +2 -2
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/track_manager.py +23 -1
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/likelihood.py +21 -18
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/sensor_models.py +16 -3
- pyrecest-2.2.3/src/pyrecest/numerics.py +131 -0
- pyrecest-2.2.3/src/pyrecest/optional_dependencies.py +37 -0
- pyrecest-2.2.3/src/pyrecest/protocols/__init__.py +47 -0
- pyrecest-2.2.3/src/pyrecest/protocols/distributions.py +75 -0
- pyrecest-2.2.3/src/pyrecest/protocols/estimator.py +35 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/protocols/filters.py +4 -0
- pyrecest-2.2.3/src/pyrecest/reproducibility.py +75 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/euclidean_sampler.py +12 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/hyperspherical_sampler.py +58 -26
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/hypertoroidal_sampler.py +3 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/sigma_points.py +8 -6
- pyrecest-2.2.3/src/pyrecest/scenarios.py +269 -0
- pyrecest-2.2.3/src/pyrecest/stability.py +109 -0
- pyrecest-2.2.3/src/pyrecest/types.py +32 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/metrics.py +3 -4
- 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/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/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/protocols/__init__.py +0 -21
- {pyrecest-2.2.2 → pyrecest-2.2.3}/LICENSE +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/.pylintrc +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/LICENSE_geomstats +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/README.md +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_backend_config.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_common.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_shared_numpy/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_shared_numpy/_dispatch.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_shared_numpy/linalg.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/_shared_numpy/random.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/_dtype.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/autograd/autodiff.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/numpy/_dtype.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/_common.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/_backend/pytorch/autodiff.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/_so3_helpers.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_bounded_domain_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_bounded_nonperiodic_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_custom_nonperiodic_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_disk_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_distribution_type.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_ellipsoidal_ball_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_manifold_specific_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_nonperiodic_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_orthogonal_basis_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_periodic_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_periodic_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_se2_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_se3_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/abstract_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_custom_lin_bounded_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_hypercylindrical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_bounded_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_hemisphere_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_hyperhemisphere_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_hypersphere_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_hypersphere_subset_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/abstract_lin_periodic_cart_prod_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/cart_prod_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/cart_prod_stacked_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/custom_hypercylindrical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/gauss_von_mises_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/hypercylindrical_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/hypercylindrical_state_space_subdivision_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/hypercylindrical_state_space_subdivision_gaussian_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/hyperhemisphere_cart_prod_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/lin_bounded_cart_prod_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/lin_hypersphere_cart_prod_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/lin_hypersphere_subset_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/lin_periodic_cart_prod_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/mardia_sutton_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/partially_wrapped_normal_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/se2_bingham_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/se2_pwn_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/se2_state_space_subdivision_gaussian_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/se3_lin_vel_cart_prod_stacked_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/state_space_subdivision_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/cart_prod/state_space_subdivision_gaussian_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/abstract_circular_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/circular_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/circular_fourier_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/circular_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/circular_mixture.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/circular_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/custom_circular_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/generalized_von_mises_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/piecewise_constant_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/sine_skewed_distributions.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/von_mises_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/wrapped_cauchy_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/wrapped_exponential_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/wrapped_laplace_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/circle/wrapped_normal_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/abstract_conditional_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/s2_cond_s2_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/sd_cond_sd_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/sd_half_cond_sd_half_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conditional/td_cond_td_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/conversion.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/custom_hyperrectangular_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/disk_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/ellipsoidal_ball_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_complex_hyperspherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hemispherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hyperhemispherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hypersphere_subset_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_hyperspherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_sphere_subset_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_spherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/abstract_spherical_harmonics_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/bayesian_complex_watson_mixture_model.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/bingham_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/complex_angular_central_gaussian_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/complex_bingham_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/complex_watson_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/custom_hemispherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/custom_hyperhemispherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/custom_hyperspherical_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hemispherical_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_bingham_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperhemispherical_watson_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_mixture.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/hyperspherical_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/spherical_harmonics_distribution_complex.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/spherical_harmonics_distribution_real.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/von_mises_fisher_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypersphere_subset/watson_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/abstract_hypertoroidal_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/abstract_toroidal_bivar_vm_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/abstract_toroidal_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/custom_hypertoroidal_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/custom_toroidal_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_fourier_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_grid_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/hypertoroidal_wrapped_normal_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_fourier_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_mixture.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_vm_matrix_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_vm_rivest_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_von_mises_cosine_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_von_mises_sine_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/hypertorus/toroidal_wrapped_normal_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/abstract_linear_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/custom_linear_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/gaussian_mixture.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/hyperrectangular_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/linear_box_particle_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/linear_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/nonperiodic/linear_mixture.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/se2_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/se3_cart_prod_stacked_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/se3_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_bingham_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_conversion.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_helpers.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_product_dirac_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_product_tangent_gaussian_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_tangent_gaussian_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/distributions/so3_uniform_distribution.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/determine_all_deviations.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/eot_shape_database.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/evaluate_for_file.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/evaluate_for_simulation_config.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/evaluate_for_variables.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/generate_groundtruth.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/generate_simulated_scenarios.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/get_axis_label.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/group_results_by_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/iterate_configs_and_runs.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/plot_results.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/simulation_database.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/evaluation/summarize_filter_results.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/_ukf.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_axial_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_circular_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_dummy_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_extended_object_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_grid_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_multiple_extended_object_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_multitarget_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/abstract_tracker_with_logging.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/axial_kalman_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/bingham_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/block_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/circular_fourier_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/circular_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/circular_ukf.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/ekf_spline_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/euclidean_box_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/euclidean_boxed_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/euclidean_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/factorized_giw_random_matrix_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/fourier_rhm_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/gaussian_mixture_phd_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/ggiw_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/goal_conditioned_replay_imm_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/goal_conditioned_replay_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/goal_conditioned_replay_particle_imm_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/gprhm_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hypercylindrical_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperhemisphere_cart_prod_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperhemispherical_grid_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperhemispherical_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperspherical_dummy_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperspherical_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hyperspherical_ukf.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hypertoroidal_dummy_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hypertoroidal_fourier_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/hypertoroidal_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/information_form_distributed_kalman_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/iterated_batch_mem_qkf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/joint_probabilistic_data_association_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/kernel_sme_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/lin_bounded_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/lin_periodic_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/lomem_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/manifold_exponential_moving_average.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/manifold_mixins.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_ekf_star_oa_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_ekf_star_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_ekf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_qkf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_rbpf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mem_soekf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/mode_rbpf_manifold_ukf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/multi_bernoulli_mixture_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/multi_bernoulli_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/multi_hypothesis_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/orientation_vector_eot_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/partitioned_so3_product_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/piecewise_constant_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/random_matrix_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/relaxed_s3f_circular.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/relaxed_s3f_so3.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/se2_ukf.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/so3_grid_transition.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/so3_product_block_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/so3_product_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/spherical_harmonics_eot_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/spherical_harmonics_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/state_space_subdivision_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/toroidal_particle_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/toroidal_wrapped_normal_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/ukf_on_manifolds.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/unscented_kalman_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/vbrm_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/velocity_aided_mem_qkf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/velocity_locked_mem_qkf_tracker.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/von_mises_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/von_mises_fisher_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/filters/wrapped_normal_filter.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/adapters.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/additive_noise.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/grid.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/linear_gaussian.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/motion_models.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/particle.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/models/validation.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/protocols/common.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/protocols/models.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/protocols/testing.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/py.typed +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/abstract_sampler.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/sampling/leopardi_sampler.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/abstract_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/fixed_lag_mem_qkf_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/fixed_lag_random_matrix_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/fixed_lag_velocity_locked_mem_qkf_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/mem_rbpf_ffbsi_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/rauch_tung_striebel_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/sliding_window_manifold_mean_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/so3_chordal_mean_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/smoothers/unscented_rauch_tung_striebel_smoother.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/__init__.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/_point_set_registration_common.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/assignment.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/association_features.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/association_models.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/history_recorder.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/multisession_assignment.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/multisession_assignment_observation_costs.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/multisession_assignment_score.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/nonrigid_point_set_registration.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/pairwise_covariance_features.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/plotting.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/point_set_registration.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/roi_assignment.py +0 -0
- {pyrecest-2.2.2 → pyrecest-2.2.3}/src/pyrecest/utils/track_evaluation.py +0 -0
- {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
|
+
[](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,
|
|
@@ -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
|
+
[](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,
|
|
@@ -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(
|
|
366
|
-
|
|
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))
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
from pyrecest._backend._dtype_utils import
|
|
2
|
-
|
|
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
|
-
|
|
134
|
-
|
|
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,
|
|
@@ -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
|
|
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
|