multicalc 0.7.2

Calculus, autodiff, nonlinear least squares and linear algebra in pure safe no_std Rust
Documentation
//! Gaussian quadrature node and weight tables.
//!
//! The per-family data files are generated by
//! `scripts/build_gaussian_integration_tables.py`.

use crate::numerical_integration::mode::GaussianQuadratureMethod;
use crate::utils::error_codes::CalcError;

pub mod hermite;
pub mod laguerre;
pub mod legendre;

/// Highest supported quadrature order.
pub const MAX_ORDER: usize = 30;

/// Returns the `(weight, abscissa)` pairs for a quadrature method and order.
pub fn nodes(
    method: GaussianQuadratureMethod,
    order: usize,
) -> Result<&'static [(f64, f64)], CalcError> {
    let table: &[&[(f64, f64)]] = match method {
        GaussianQuadratureMethod::GaussLegendre => &legendre::LEGENDRE,
        GaussianQuadratureMethod::GaussHermite => &hermite::HERMITE,
        GaussianQuadratureMethod::GaussLaguerre => &laguerre::LAGUERRE,
    };

    table
        .get(order)
        .filter(|pairs| !pairs.is_empty())
        .copied()
        .ok_or(CalcError::QuadratureOrderOutOfRange)
}